@azure/communication-react 1.5.1-alpha-202304150013 → 1.5.1-alpha-202304172318

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 (149) hide show
  1. package/dist/communication-react.d.ts +294 -3
  2. package/dist/dist-cjs/communication-react/index.js +1576 -381
  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/calling-component-bindings/src/baseSelectors.d.ts +13 -0
  7. package/dist/dist-esm/calling-component-bindings/src/baseSelectors.js +36 -0
  8. package/dist/dist-esm/calling-component-bindings/src/baseSelectors.js.map +1 -1
  9. package/dist/dist-esm/calling-component-bindings/src/captionsSelector.d.ts +49 -0
  10. package/dist/dist-esm/calling-component-bindings/src/captionsSelector.js +53 -0
  11. package/dist/dist-esm/calling-component-bindings/src/captionsSelector.js.map +1 -0
  12. package/dist/dist-esm/calling-component-bindings/src/handlers/createCommonHandlers.d.ts +12 -0
  13. package/dist/dist-esm/calling-component-bindings/src/handlers/createCommonHandlers.js +25 -1
  14. package/dist/dist-esm/calling-component-bindings/src/handlers/createCommonHandlers.js.map +1 -1
  15. package/dist/dist-esm/calling-component-bindings/src/index.d.ts +3 -0
  16. package/dist/dist-esm/calling-component-bindings/src/index.js +2 -0
  17. package/dist/dist-esm/calling-component-bindings/src/index.js.map +1 -1
  18. package/dist/dist-esm/calling-stateful-client/src/CallClientState.d.ts +68 -1
  19. package/dist/dist-esm/calling-stateful-client/src/CallClientState.js.map +1 -1
  20. package/dist/dist-esm/calling-stateful-client/src/CallContext.d.ts +8 -0
  21. package/dist/dist-esm/calling-stateful-client/src/CallContext.js +81 -0
  22. package/dist/dist-esm/calling-stateful-client/src/CallContext.js.map +1 -1
  23. package/dist/dist-esm/calling-stateful-client/src/CallDeclarativeCommon.js +57 -0
  24. package/dist/dist-esm/calling-stateful-client/src/CallDeclarativeCommon.js.map +1 -1
  25. package/dist/dist-esm/calling-stateful-client/src/CallSubscriber.d.ts +2 -0
  26. package/dist/dist-esm/calling-stateful-client/src/CallSubscriber.js +19 -0
  27. package/dist/dist-esm/calling-stateful-client/src/CallSubscriber.js.map +1 -1
  28. package/dist/dist-esm/calling-stateful-client/src/CaptionsSubscriber.d.ts +18 -0
  29. package/dist/dist-esm/calling-stateful-client/src/CaptionsSubscriber.js +38 -0
  30. package/dist/dist-esm/calling-stateful-client/src/CaptionsSubscriber.js.map +1 -0
  31. package/dist/dist-esm/calling-stateful-client/src/Converter.d.ts +6 -0
  32. package/dist/dist-esm/calling-stateful-client/src/Converter.js +17 -1
  33. package/dist/dist-esm/calling-stateful-client/src/Converter.js.map +1 -1
  34. package/dist/dist-esm/calling-stateful-client/src/TypeGuards.d.ts +7 -0
  35. package/dist/dist-esm/calling-stateful-client/src/TypeGuards.js +10 -0
  36. package/dist/dist-esm/calling-stateful-client/src/TypeGuards.js.map +1 -1
  37. package/dist/dist-esm/calling-stateful-client/src/index-public.d.ts +1 -0
  38. package/dist/dist-esm/calling-stateful-client/src/index-public.js.map +1 -1
  39. package/dist/dist-esm/communication-react/src/index.d.ts +2 -0
  40. package/dist/dist-esm/communication-react/src/index.js.map +1 -1
  41. package/dist/dist-esm/react-components/src/components/Caption.js +4 -3
  42. package/dist/dist-esm/react-components/src/components/Caption.js.map +1 -1
  43. package/dist/dist-esm/react-components/src/components/CaptionsBanner.d.ts +1 -0
  44. package/dist/dist-esm/react-components/src/components/CaptionsBanner.js +4 -4
  45. package/dist/dist-esm/react-components/src/components/CaptionsBanner.js.map +1 -1
  46. package/dist/dist-esm/react-components/src/components/CaptionsSettingsModal.d.ts +37 -0
  47. package/dist/dist-esm/react-components/src/components/CaptionsSettingsModal.js +88 -0
  48. package/dist/dist-esm/react-components/src/components/CaptionsSettingsModal.js.map +1 -0
  49. package/dist/dist-esm/react-components/src/components/Drawer/DrawerMenuItem.d.ts +2 -0
  50. package/dist/dist-esm/react-components/src/components/Drawer/DrawerMenuItem.js +1 -0
  51. package/dist/dist-esm/react-components/src/components/Drawer/DrawerMenuItem.js.map +1 -1
  52. package/dist/dist-esm/react-components/src/components/StartCaptionsButton.d.ts +70 -0
  53. package/dist/dist-esm/react-components/src/components/StartCaptionsButton.js +52 -0
  54. package/dist/dist-esm/react-components/src/components/StartCaptionsButton.js.map +1 -0
  55. package/dist/dist-esm/react-components/src/components/index.d.ts +2 -0
  56. package/dist/dist-esm/react-components/src/components/index.js +6 -0
  57. package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
  58. package/dist/dist-esm/react-components/src/components/styles/Captions.style.d.ts +8 -0
  59. package/dist/dist-esm/react-components/src/components/styles/Captions.style.js +17 -2
  60. package/dist/dist-esm/react-components/src/components/styles/Captions.style.js.map +1 -1
  61. package/dist/dist-esm/react-components/src/components/styles/CaptionsSettingsModal.styles.d.ts +34 -0
  62. package/dist/dist-esm/react-components/src/components/styles/CaptionsSettingsModal.styles.js +85 -0
  63. package/dist/dist-esm/react-components/src/components/styles/CaptionsSettingsModal.styles.js.map +1 -0
  64. package/dist/dist-esm/react-components/src/components/utils.d.ts +4 -0
  65. package/dist/dist-esm/react-components/src/components/utils.js +4 -0
  66. package/dist/dist-esm/react-components/src/components/utils.js.map +1 -1
  67. package/dist/dist-esm/react-components/src/index.d.ts +1 -0
  68. package/dist/dist-esm/react-components/src/index.js.map +1 -1
  69. package/dist/dist-esm/react-components/src/permissions/PermissionsProvider.d.ts +1 -1
  70. package/dist/dist-esm/react-components/src/permissions/PermissionsProvider.js.map +1 -1
  71. package/dist/dist-esm/react-components/src/theming/icons.d.ts +4 -0
  72. package/dist/dist-esm/react-components/src/theming/icons.js +11 -1
  73. package/dist/dist-esm/react-components/src/theming/icons.js.map +1 -1
  74. package/dist/dist-esm/react-components/src/types/CaptionsAvailableLanguageStrings.d.ts +48 -0
  75. package/dist/dist-esm/react-components/src/types/CaptionsAvailableLanguageStrings.js +4 -0
  76. package/dist/dist-esm/react-components/src/types/CaptionsAvailableLanguageStrings.js.map +1 -0
  77. package/dist/dist-esm/react-components/src/types/index.d.ts +1 -0
  78. package/dist/dist-esm/react-components/src/types/index.js +1 -0
  79. package/dist/dist-esm/react-components/src/types/index.js.map +1 -1
  80. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts +65 -0
  81. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.js.map +1 -1
  82. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.d.ts +13 -0
  83. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js +61 -2
  84. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js.map +1 -1
  85. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.d.ts +54 -1
  86. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.js.map +1 -1
  87. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/index.d.ts +1 -0
  88. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/index.js.map +1 -1
  89. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js +17 -2
  90. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js.map +1 -1
  91. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallControls.js +1 -1
  92. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallControls.js.map +1 -1
  93. package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/useHandlers.js +16 -0
  94. package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/useHandlers.js.map +1 -1
  95. package/dist/dist-esm/react-composites/src/composites/CallComposite/index.d.ts +1 -0
  96. package/dist/dist-esm/react-composites/src/composites/CallComposite/index.js.map +1 -1
  97. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.d.ts +17 -0
  98. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.js +41 -0
  99. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.js.map +1 -1
  100. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js +7 -1
  101. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js.map +1 -1
  102. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/Strings.d.ts +12 -0
  103. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/Strings.js.map +1 -1
  104. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.d.ts +10 -0
  105. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js +46 -0
  106. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js.map +1 -1
  107. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.d.ts +26 -1
  108. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.js.map +1 -1
  109. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.d.ts +5 -0
  110. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.js +24 -0
  111. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.js.map +1 -1
  112. package/dist/dist-esm/react-composites/src/composites/common/CaptionsBanner.d.ts +6 -0
  113. package/dist/dist-esm/react-composites/src/composites/common/CaptionsBanner.js +60 -0
  114. package/dist/dist-esm/react-composites/src/composites/common/CaptionsBanner.js.map +1 -0
  115. package/dist/dist-esm/react-composites/src/composites/common/CaptionsBannerMoreButton.d.ts +12 -0
  116. package/dist/dist-esm/react-composites/src/composites/common/CaptionsBannerMoreButton.js +107 -0
  117. package/dist/dist-esm/react-composites/src/composites/common/CaptionsBannerMoreButton.js.map +1 -0
  118. package/dist/dist-esm/react-composites/src/composites/common/CaptionsSettingsModal.d.ts +7 -0
  119. package/dist/dist-esm/react-composites/src/composites/common/CaptionsSettingsModal.js +38 -0
  120. package/dist/dist-esm/react-composites/src/composites/common/CaptionsSettingsModal.js.map +1 -0
  121. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.d.ts +1 -0
  122. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.js +19 -1
  123. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.js.map +1 -1
  124. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/DesktopMoreButton.d.ts +2 -0
  125. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/DesktopMoreButton.js +113 -6
  126. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/DesktopMoreButton.js.map +1 -1
  127. package/dist/dist-esm/react-composites/src/composites/common/Drawer/MoreDrawer.d.ts +13 -0
  128. package/dist/dist-esm/react-composites/src/composites/common/Drawer/MoreDrawer.js +103 -0
  129. package/dist/dist-esm/react-composites/src/composites/common/Drawer/MoreDrawer.js.map +1 -1
  130. package/dist/dist-esm/react-composites/src/composites/common/Drawer/MoreDrawer.styles.d.ts +6 -0
  131. package/dist/dist-esm/react-composites/src/composites/common/Drawer/MoreDrawer.styles.js +24 -0
  132. package/dist/dist-esm/react-composites/src/composites/common/Drawer/MoreDrawer.styles.js.map +1 -0
  133. package/dist/dist-esm/react-composites/src/composites/common/Drawer/PreparedMoreDrawer.d.ts +1 -0
  134. package/dist/dist-esm/react-composites/src/composites/common/Drawer/PreparedMoreDrawer.js +5 -1
  135. package/dist/dist-esm/react-composites/src/composites/common/Drawer/PreparedMoreDrawer.js.map +1 -1
  136. package/dist/dist-esm/react-composites/src/composites/common/Drawer/SpokenLanguageDrawer.d.ts +20 -0
  137. package/dist/dist-esm/react-composites/src/composites/common/Drawer/SpokenLanguageDrawer.js +55 -0
  138. package/dist/dist-esm/react-composites/src/composites/common/Drawer/SpokenLanguageDrawer.js.map +1 -0
  139. package/dist/dist-esm/react-composites/src/composites/common/Drawer/SpokenLanguageDrawer.styles.d.ts +7 -0
  140. package/dist/dist-esm/react-composites/src/composites/common/Drawer/SpokenLanguageDrawer.styles.js +25 -0
  141. package/dist/dist-esm/react-composites/src/composites/common/Drawer/SpokenLanguageDrawer.styles.js.map +1 -0
  142. package/dist/dist-esm/react-composites/src/composites/common/MoreButton.js +1 -1
  143. package/dist/dist-esm/react-composites/src/composites/common/MoreButton.js.map +1 -1
  144. package/dist/dist-esm/react-composites/src/composites/common/icons.d.ts +4 -0
  145. package/dist/dist-esm/react-composites/src/composites/common/utils.d.ts +4 -0
  146. package/dist/dist-esm/react-composites/src/composites/common/utils.js +4 -0
  147. package/dist/dist-esm/react-composites/src/composites/common/utils.js.map +1 -1
  148. package/dist/dist-esm/react-composites/src/composites/localization/locales/en-US/strings.json +61 -1
  149. package/package.json +10 -10
@@ -162,7 +162,7 @@ const _toCommunicationIdentifier = (id) => {
162
162
  // Copyright (c) Microsoft Corporation.
163
163
  // Licensed under the MIT license.
164
164
  // GENERATED FILE. DO NOT EDIT MANUALLY.
165
- var telemetryVersion = '1.5.1-alpha-202304150013';
165
+ var telemetryVersion = '1.5.1-alpha-202304172318';
166
166
 
167
167
  // Copyright (c) Microsoft Corporation.
168
168
  /**
@@ -375,10 +375,40 @@ const getEnvironmentInfo = (state) => {
375
375
  /* @conditional-compile-remove(unsupported-browser) */
376
376
  return state.environmentInfo;
377
377
  };
378
+ /* @conditional-compile-remove(close-captions) */
379
+ /** @private */
380
+ const getCaptions = (state, props) => {
381
+ var _a;
382
+ return (_a = state.calls[props.callId]) === null || _a === void 0 ? void 0 : _a.captionsFeature.captions;
383
+ };
384
+ /* @conditional-compile-remove(close-captions) */
385
+ /** @private */
386
+ const getCaptionsStatus = (state, props) => {
387
+ var _a;
388
+ return (_a = state.calls[props.callId]) === null || _a === void 0 ? void 0 : _a.captionsFeature.isCaptionsFeatureActive;
389
+ };
390
+ /* @conditional-compile-remove(close-captions) */
391
+ /** @private */
392
+ const getCurrentCaptionLanguage = (state, props) => {
393
+ var _a;
394
+ return (_a = state.calls[props.callId]) === null || _a === void 0 ? void 0 : _a.captionsFeature.currentCaptionLanguage;
395
+ };
396
+ /* @conditional-compile-remove(close-captions) */
397
+ /** @private */
398
+ const getCurrentSpokenLanguage = (state, props) => {
399
+ var _a;
400
+ return (_a = state.calls[props.callId]) === null || _a === void 0 ? void 0 : _a.captionsFeature.currentSpokenLanguage;
401
+ };
402
+ /* @conditional-compile-remove(close-captions) */
403
+ /** @private */
404
+ const getSupportedSpokenLanguages = (state, props) => {
405
+ var _a;
406
+ return (_a = state.calls[props.callId]) === null || _a === void 0 ? void 0 : _a.captionsFeature.supportedSpokenLanguages;
407
+ };
378
408
 
379
409
  // Copyright (c) Microsoft Corporation.
380
410
  // Licensed under the MIT license.
381
- var __awaiter$F = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
411
+ var __awaiter$J = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
382
412
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
383
413
  return new (P || (P = Promise))(function (resolve, reject) {
384
414
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -416,7 +446,7 @@ const _isPreviewOn = (deviceManager) => {
416
446
  *
417
447
  * @private
418
448
  */
419
- const disposeAllLocalPreviewViews = (callClient) => __awaiter$F(void 0, void 0, void 0, function* () {
449
+ const disposeAllLocalPreviewViews = (callClient) => __awaiter$J(void 0, void 0, void 0, function* () {
420
450
  const unparentedViews = callClient.getState().deviceManager.unparentedViews;
421
451
  for (const view of unparentedViews) {
422
452
  yield callClient.disposeView(undefined, undefined, view);
@@ -542,7 +572,7 @@ const holdButtonSelector = reselect__namespace.createSelector([getCallState], (c
542
572
 
543
573
  // Copyright (c) Microsoft Corporation.
544
574
  // Licensed under the MIT license.
545
- var __awaiter$E = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
575
+ var __awaiter$I = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
546
576
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
547
577
  return new (P || (P = Promise))(function (resolve, reject) {
548
578
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -563,7 +593,7 @@ const areStreamsEqual = (prevStream, newStream) => {
563
593
  * @private
564
594
  */
565
595
  const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callClient, deviceManager, call) => {
566
- const onStartLocalVideo = () => __awaiter$E(void 0, void 0, void 0, function* () {
596
+ const onStartLocalVideo = () => __awaiter$I(void 0, void 0, void 0, function* () {
567
597
  // Before the call object creates a stream, dispose of any local preview streams.
568
598
  // @TODO: is there any way to parent the unparented view to the call object instead
569
599
  // of disposing and creating a new stream?
@@ -583,7 +613,7 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
583
613
  yield call.startVideo(stream);
584
614
  }
585
615
  });
586
- const onStopLocalVideo = (stream) => __awaiter$E(void 0, void 0, void 0, function* () {
616
+ const onStopLocalVideo = (stream) => __awaiter$I(void 0, void 0, void 0, function* () {
587
617
  const callId = call === null || call === void 0 ? void 0 : call.id;
588
618
  if (!callId) {
589
619
  return;
@@ -592,7 +622,7 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
592
622
  yield call.stopVideo(stream);
593
623
  }
594
624
  });
595
- const onToggleCamera = (options) => __awaiter$E(void 0, void 0, void 0, function* () {
625
+ const onToggleCamera = (options) => __awaiter$I(void 0, void 0, void 0, function* () {
596
626
  const previewOn = _isPreviewOn(callClient.getState().deviceManager);
597
627
  if (previewOn && call && call.state === 'Connecting') {
598
628
  // This is to workaround: https://skype.visualstudio.com/SPOOL/_workitems/edit/3030558.
@@ -640,19 +670,19 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
640
670
  }
641
671
  }
642
672
  });
643
- const onSelectMicrophone = (device) => __awaiter$E(void 0, void 0, void 0, function* () {
673
+ const onSelectMicrophone = (device) => __awaiter$I(void 0, void 0, void 0, function* () {
644
674
  if (!deviceManager) {
645
675
  return;
646
676
  }
647
677
  return deviceManager.selectMicrophone(device);
648
678
  });
649
- const onSelectSpeaker = (device) => __awaiter$E(void 0, void 0, void 0, function* () {
679
+ const onSelectSpeaker = (device) => __awaiter$I(void 0, void 0, void 0, function* () {
650
680
  if (!deviceManager) {
651
681
  return;
652
682
  }
653
683
  return deviceManager.selectSpeaker(device);
654
684
  });
655
- const onSelectCamera = (device, options) => __awaiter$E(void 0, void 0, void 0, function* () {
685
+ const onSelectCamera = (device, options) => __awaiter$I(void 0, void 0, void 0, function* () {
656
686
  if (!deviceManager) {
657
687
  return;
658
688
  }
@@ -675,19 +705,19 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
675
705
  }, options);
676
706
  }
677
707
  });
678
- const onToggleMicrophone = () => __awaiter$E(void 0, void 0, void 0, function* () {
708
+ const onToggleMicrophone = () => __awaiter$I(void 0, void 0, void 0, function* () {
679
709
  if (!call || !_isInCall(call.state)) {
680
710
  throw new Error(`Please invoke onToggleMicrophone after call is started`);
681
711
  }
682
712
  return call.isMuted ? yield call.unmute() : yield call.mute();
683
713
  });
684
- const onStartScreenShare = () => __awaiter$E(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.startScreenSharing()); });
685
- const onStopScreenShare = () => __awaiter$E(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.stopScreenSharing()); });
686
- const onToggleScreenShare = () => __awaiter$E(void 0, void 0, void 0, function* () { return (call === null || call === void 0 ? void 0 : call.isScreenSharingOn) ? yield onStopScreenShare() : yield onStartScreenShare(); });
687
- const onHangUp = (forEveryone) => __awaiter$E(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.hangUp({ forEveryone: forEveryone === true ? true : false })); });
714
+ const onStartScreenShare = () => __awaiter$I(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.startScreenSharing()); });
715
+ const onStopScreenShare = () => __awaiter$I(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.stopScreenSharing()); });
716
+ const onToggleScreenShare = () => __awaiter$I(void 0, void 0, void 0, function* () { return (call === null || call === void 0 ? void 0 : call.isScreenSharingOn) ? yield onStopScreenShare() : yield onStartScreenShare(); });
717
+ const onHangUp = (forEveryone) => __awaiter$I(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.hangUp({ forEveryone: forEveryone === true ? true : false })); });
688
718
  /* @conditional-compile-remove(PSTN-calls) */
689
- const onToggleHold = () => __awaiter$E(void 0, void 0, void 0, function* () { return (call === null || call === void 0 ? void 0 : call.state) === 'LocalHold' ? yield (call === null || call === void 0 ? void 0 : call.resume()) : yield (call === null || call === void 0 ? void 0 : call.hold()); });
690
- const onCreateLocalStreamView = (options = { scalingMode: 'Crop', isMirrored: true }) => __awaiter$E(void 0, void 0, void 0, function* () {
719
+ const onToggleHold = () => __awaiter$I(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()); });
720
+ const onCreateLocalStreamView = (options = { scalingMode: 'Crop', isMirrored: true }) => __awaiter$I(void 0, void 0, void 0, function* () {
691
721
  var _a;
692
722
  if (!call || call.localVideoStreams.length === 0) {
693
723
  return;
@@ -703,7 +733,7 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
703
733
  const { view } = (_a = (yield callClient.createView(call.id, undefined, localStream, options))) !== null && _a !== void 0 ? _a : {};
704
734
  return view ? { view } : undefined;
705
735
  });
706
- const onCreateRemoteStreamView = (userId, options = { scalingMode: 'Crop' }) => __awaiter$E(void 0, void 0, void 0, function* () {
736
+ const onCreateRemoteStreamView = (userId, options = { scalingMode: 'Crop' }) => __awaiter$I(void 0, void 0, void 0, function* () {
707
737
  if (!call) {
708
738
  return;
709
739
  }
@@ -734,7 +764,7 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
734
764
  }
735
765
  return (createViewResult === null || createViewResult === void 0 ? void 0 : createViewResult.view) ? { view: createViewResult === null || createViewResult === void 0 ? void 0 : createViewResult.view } : undefined;
736
766
  });
737
- const onDisposeRemoteStreamView = (userId) => __awaiter$E(void 0, void 0, void 0, function* () {
767
+ const onDisposeRemoteStreamView = (userId) => __awaiter$I(void 0, void 0, void 0, function* () {
738
768
  if (!call) {
739
769
  return;
740
770
  }
@@ -755,7 +785,7 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
755
785
  callClient.disposeView(call.id, participant.identifier, screenShareStream);
756
786
  }
757
787
  });
758
- const onDisposeLocalStreamView = () => __awaiter$E(void 0, void 0, void 0, function* () {
788
+ const onDisposeLocalStreamView = () => __awaiter$I(void 0, void 0, void 0, function* () {
759
789
  // If the user is currently in a call, dispose of the local stream view attached to that call.
760
790
  const callState = call && callClient.getState().calls[call.id];
761
791
  const localStream = callState === null || callState === void 0 ? void 0 : callState.localVideoStreams.find((item) => item.mediaStreamType === 'Video');
@@ -768,18 +798,18 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
768
798
  yield disposeAllLocalPreviewViews(callClient);
769
799
  });
770
800
  /* @conditional-compile-remove(dialpad) */ /* @conditional-compile-remove(PSTN-calls) */
771
- const onSendDtmfTone = (dtmfTone) => __awaiter$E(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.sendDtmf(dtmfTone)); });
801
+ const onSendDtmfTone = (dtmfTone) => __awaiter$I(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.sendDtmf(dtmfTone)); });
772
802
  const notImplemented = () => {
773
803
  throw new Error('Not implemented, cannot call a method from an abstract object');
774
804
  };
775
805
  /* @conditional-compile-remove(call-readiness) */
776
- const askDevicePermission = (constrain) => __awaiter$E(void 0, void 0, void 0, function* () {
806
+ const askDevicePermission = (constrain) => __awaiter$I(void 0, void 0, void 0, function* () {
777
807
  if (deviceManager) {
778
808
  yield (deviceManager === null || deviceManager === void 0 ? void 0 : deviceManager.askDevicePermission(constrain));
779
809
  }
780
810
  });
781
811
  /* @conditional-compile-remove(video-background-effects) */
782
- const onRemoveVideoBackgroundEffects = () => __awaiter$E(void 0, void 0, void 0, function* () {
812
+ const onRemoveVideoBackgroundEffects = () => __awaiter$I(void 0, void 0, void 0, function* () {
783
813
  const stream = (call === null || call === void 0 ? void 0 : call.localVideoStreams.find((stream) => stream.mediaStreamType === 'Video')) ||
784
814
  (deviceManager === null || deviceManager === void 0 ? void 0 : deviceManager.getUnparentedVideoStreams().find((stream) => stream.mediaStreamType === 'Video'));
785
815
  if (stream) {
@@ -787,7 +817,7 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
787
817
  }
788
818
  });
789
819
  /* @conditional-compile-remove(video-background-effects) */
790
- const onBlurVideoBackground = (backgroundBlurConfig) => __awaiter$E(void 0, void 0, void 0, function* () {
820
+ const onBlurVideoBackground = (backgroundBlurConfig) => __awaiter$I(void 0, void 0, void 0, function* () {
791
821
  const stream = (call === null || call === void 0 ? void 0 : call.localVideoStreams.find((stream) => stream.mediaStreamType === 'Video')) ||
792
822
  (deviceManager === null || deviceManager === void 0 ? void 0 : deviceManager.getUnparentedVideoStreams().find((stream) => stream.mediaStreamType === 'Video'));
793
823
  if (stream) {
@@ -795,7 +825,7 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
795
825
  }
796
826
  });
797
827
  /* @conditional-compile-remove(video-background-effects) */
798
- const onReplaceVideoBackground = (backgroundReplacementConfig) => __awaiter$E(void 0, void 0, void 0, function* () {
828
+ const onReplaceVideoBackground = (backgroundReplacementConfig) => __awaiter$I(void 0, void 0, void 0, function* () {
799
829
  const stream = (call === null || call === void 0 ? void 0 : call.localVideoStreams.find((stream) => stream.mediaStreamType === 'Video')) ||
800
830
  (deviceManager === null || deviceManager === void 0 ? void 0 : deviceManager.getUnparentedVideoStreams().find((stream) => stream.mediaStreamType === 'Video'));
801
831
  if (stream) {
@@ -804,6 +834,22 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
804
834
  .startEffects(new communicationCallingEffects.BackgroundReplacementEffect(backgroundReplacementConfig));
805
835
  }
806
836
  });
837
+ /* @conditional-compile-remove(close-captions) */
838
+ const onStartCaptions = (options) => __awaiter$I(void 0, void 0, void 0, function* () {
839
+ yield (call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.TeamsCaptions).startCaptions(options));
840
+ });
841
+ /* @conditional-compile-remove(close-captions) */
842
+ const onStopCaptions = () => __awaiter$I(void 0, void 0, void 0, function* () {
843
+ yield (call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.TeamsCaptions).stopCaptions());
844
+ });
845
+ /* @conditional-compile-remove(close-captions) */
846
+ const onSetSpokenLanguage = (language) => __awaiter$I(void 0, void 0, void 0, function* () {
847
+ yield (call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.TeamsCaptions).setSpokenLanguage(language));
848
+ });
849
+ /* @conditional-compile-remove(close-captions) */
850
+ const onSetCaptionLanguage = (language) => __awaiter$I(void 0, void 0, void 0, function* () {
851
+ yield (call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.TeamsCaptions).setCaptionLanguage(language));
852
+ });
807
853
  return {
808
854
  onHangUp,
809
855
  /* @conditional-compile-remove(PSTN-calls) */
@@ -833,13 +879,21 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
833
879
  /* @conditional-compile-remove(video-background-effects) */
834
880
  onBlurVideoBackground,
835
881
  /* @conditional-compile-remove(video-background-effects) */
836
- onReplaceVideoBackground
882
+ onReplaceVideoBackground,
883
+ /* @conditional-compile-remove(close-captions) */
884
+ onStartCaptions,
885
+ /* @conditional-compile-remove(close-captions) */
886
+ onStopCaptions,
887
+ /* @conditional-compile-remove(close-captions) */
888
+ onSetCaptionLanguage,
889
+ /* @conditional-compile-remove(close-captions) */
890
+ onSetSpokenLanguage
837
891
  };
838
892
  });
839
893
 
840
894
  // Copyright (c) Microsoft Corporation.
841
895
  // Licensed under the MIT license.
842
- var __awaiter$D = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
896
+ var __awaiter$H = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
843
897
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
844
898
  return new (P || (P = Promise))(function (resolve, reject) {
845
899
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -864,7 +918,7 @@ const createDefaultCallingHandlers = memoizeOne__default['default']((callClient,
864
918
  return callAgent === null || callAgent === void 0 ? void 0 : callAgent.startCall(participants, options);
865
919
  },
866
920
  /* @conditional-compile-remove(PSTN-calls) */
867
- onAddParticipant: (userId, options) => __awaiter$D(void 0, void 0, void 0, function* () {
921
+ onAddParticipant: (userId, options) => __awaiter$H(void 0, void 0, void 0, function* () {
868
922
  const participant = _toCommunicationIdentifier(userId);
869
923
  if (communicationCommon.isPhoneNumberIdentifier(participant)) {
870
924
  call === null || call === void 0 ? void 0 : call.addParticipant(participant, options);
@@ -872,7 +926,7 @@ const createDefaultCallingHandlers = memoizeOne__default['default']((callClient,
872
926
  else if (communicationCommon.isCommunicationUserIdentifier(participant) || communicationCommon.isMicrosoftTeamsUserIdentifier(participant)) {
873
927
  call === null || call === void 0 ? void 0 : call.addParticipant(participant);
874
928
  }
875
- }), onRemoveParticipant: (userId) => __awaiter$D(void 0, void 0, void 0, function* () {
929
+ }), onRemoveParticipant: (userId) => __awaiter$H(void 0, void 0, void 0, function* () {
876
930
  const participant = _toCommunicationIdentifier(userId);
877
931
  yield (call === null || call === void 0 ? void 0 : call.removeParticipant(participant));
878
932
  }) });
@@ -880,7 +934,7 @@ const createDefaultCallingHandlers = memoizeOne__default['default']((callClient,
880
934
 
881
935
  // Copyright (c) Microsoft Corporation.
882
936
  // Licensed under the MIT license.
883
- var __awaiter$C = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
937
+ var __awaiter$G = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
884
938
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
885
939
  return new (P || (P = Promise))(function (resolve, reject) {
886
940
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -912,7 +966,7 @@ const createDefaultTeamsCallingHandlers = memoizeOne__default['default']((callCl
912
966
  },
913
967
  /* @conditional-compile-remove(teams-identity-support) */
914
968
  /* @conditional-compile-remove(PSTN-calls) */
915
- onAddParticipant: (userId, options) => __awaiter$C(void 0, void 0, void 0, function* () {
969
+ onAddParticipant: (userId, options) => __awaiter$G(void 0, void 0, void 0, function* () {
916
970
  const participant = _toCommunicationIdentifier(userId);
917
971
  /* @conditional-compile-remove(teams-identity-support) */
918
972
  const threadId = options === null || options === void 0 ? void 0 : options.threadId;
@@ -925,7 +979,7 @@ const createDefaultTeamsCallingHandlers = memoizeOne__default['default']((callCl
925
979
  }
926
980
  /* @conditional-compile-remove(teams-identity-support) */
927
981
  call === null || call === void 0 ? void 0 : call.addParticipant(participant);
928
- }), onRemoveParticipant: (userId) => __awaiter$C(void 0, void 0, void 0, function* () {
982
+ }), onRemoveParticipant: (userId) => __awaiter$G(void 0, void 0, void 0, function* () {
929
983
  const participant = _toCommunicationIdentifier(userId);
930
984
  if (communicationCommon.isCommunicationUserIdentifier(participant)) {
931
985
  throw new Error('CommunicationIdentifier in Teams call is not supported!');
@@ -935,9 +989,57 @@ const createDefaultTeamsCallingHandlers = memoizeOne__default['default']((callCl
935
989
  }) });
936
990
  });
937
991
 
992
+ /* @conditional-compile-remove(close-captions) */
993
+ /* @conditional-compile-remove(close-captions) */
994
+ /**
995
+ * Selector for {@link StartCaptionsButton} component.
996
+ *
997
+ * @internal
998
+ */
999
+ const _startCaptionsButtonSelector = reselect__namespace.createSelector([getCaptionsStatus, getCurrentCaptionLanguage, getCurrentSpokenLanguage], (isCaptionsFeatureActive, currentCaptionLanguage, currentSpokenLanguage) => {
1000
+ return {
1001
+ checked: isCaptionsFeatureActive !== null && isCaptionsFeatureActive !== void 0 ? isCaptionsFeatureActive : false,
1002
+ currentCaptionLanguage: currentCaptionLanguage !== null && currentCaptionLanguage !== void 0 ? currentCaptionLanguage : 'en-us',
1003
+ currentSpokenLanguage: currentSpokenLanguage !== null && currentSpokenLanguage !== void 0 ? currentSpokenLanguage : 'en-us'
1004
+ };
1005
+ });
1006
+ /* @conditional-compile-remove(close-captions) */
1007
+ /**
1008
+ * Selector for {@link ChangeSpokenLanguageButton} component.
1009
+ *
1010
+ * @internal
1011
+ */
1012
+ const _changeSpokenLanguageSelector = reselect__namespace.createSelector([getSupportedSpokenLanguages, getCurrentSpokenLanguage, getCaptionsStatus], (supportedSpokenLanguages, currentSpokenLanguage, isCaptionsFeatureActive) => {
1013
+ return {
1014
+ supportedSpokenLanguages: supportedSpokenLanguages !== null && supportedSpokenLanguages !== void 0 ? supportedSpokenLanguages : ['en-us'],
1015
+ currentSpokenLanguage: currentSpokenLanguage !== null && currentSpokenLanguage !== void 0 ? currentSpokenLanguage : 'en-us',
1016
+ isCaptionsFeatureActive: isCaptionsFeatureActive !== null && isCaptionsFeatureActive !== void 0 ? isCaptionsFeatureActive : false
1017
+ };
1018
+ });
1019
+ /* @conditional-compile-remove(close-captions) */
1020
+ /**
1021
+ * Selector for {@link CaptionsBanner} component.
1022
+ *
1023
+ * @internal
1024
+ */
1025
+ const _captionsBannerSelector = reselect__namespace.createSelector([getCaptions, getCaptionsStatus], (captions, isCaptionsFeatureActive) => {
1026
+ const captionsInfo = captions === null || captions === void 0 ? void 0 : captions.map((c) => {
1027
+ var _a, _b;
1028
+ return {
1029
+ displayName: (_a = c.speaker.displayName) !== null && _a !== void 0 ? _a : 'Unnamed Participant',
1030
+ captionText: (_b = c.captionText) !== null && _b !== void 0 ? _b : '',
1031
+ userId: c.speaker.identifier ? toFlatCommunicationIdentifier(c.speaker.identifier) : ''
1032
+ };
1033
+ });
1034
+ return {
1035
+ captions: captionsInfo !== null && captionsInfo !== void 0 ? captionsInfo : [],
1036
+ isCaptionsOn: isCaptionsFeatureActive !== null && isCaptionsFeatureActive !== void 0 ? isCaptionsFeatureActive : false
1037
+ };
1038
+ });
1039
+
938
1040
  // Copyright (c) Microsoft Corporation.
939
1041
  // Licensed under the MIT license.
940
- var __awaiter$B = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
1042
+ var __awaiter$F = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
941
1043
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
942
1044
  return new (P || (P = Promise))(function (resolve, reject) {
943
1045
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -986,13 +1088,13 @@ class ProxyDeviceManager {
986
1088
  this.selectCamera = (videoDeviceInfo) => {
987
1089
  this._context.setDeviceManagerSelectedCamera(videoDeviceInfo);
988
1090
  };
989
- this.videoDevicesUpdated = () => __awaiter$B(this, void 0, void 0, function* () {
1091
+ this.videoDevicesUpdated = () => __awaiter$F(this, void 0, void 0, function* () {
990
1092
  // Device Manager always has a camera with '' name if there are no real camera devices available.
991
1093
  // We don't want to show that in the UI.
992
1094
  const realCameras = (yield this._deviceManager.getCameras()).filter((c) => !!c.name);
993
1095
  this._context.setDeviceManagerCameras(dedupeById(realCameras));
994
1096
  });
995
- this.audioDevicesUpdated = () => __awaiter$B(this, void 0, void 0, function* () {
1097
+ this.audioDevicesUpdated = () => __awaiter$F(this, void 0, void 0, function* () {
996
1098
  this._context.setDeviceManagerMicrophones(dedupeById(yield this._deviceManager.getMicrophones()));
997
1099
  this._context.setDeviceManagerSpeakers(dedupeById(yield this._deviceManager.getSpeakers()));
998
1100
  });
@@ -1195,7 +1297,170 @@ class CallIdHistory {
1195
1297
 
1196
1298
  // Copyright (c) Microsoft Corporation.
1197
1299
  // Licensed under the MIT license.
1198
- var __awaiter$A = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
1300
+ /**
1301
+ * @internal
1302
+ */
1303
+ const _isACSCall = (call) => {
1304
+ /* @conditional-compile-remove(teams-identity-support) */
1305
+ return !call.kind || call.kind === 'Call';
1306
+ };
1307
+ /**
1308
+ * @internal
1309
+ */
1310
+ const _isACSCallAgent = (callAgent) => {
1311
+ /* @conditional-compile-remove(teams-identity-support) */
1312
+ return !callAgent.kind || callAgent.kind === 'CallAgent';
1313
+ };
1314
+ /**
1315
+ * @internal
1316
+ */
1317
+ const _isTeamsCall = (call) => {
1318
+ /* @conditional-compile-remove(teams-identity-support) */
1319
+ return call.kind === 'TeamsCall';
1320
+ };
1321
+ /**
1322
+ * @internal
1323
+ */
1324
+ const _isTeamsCallAgent = (callAgent) => {
1325
+ /* @conditional-compile-remove(teams-identity-support) */
1326
+ return callAgent.kind === 'TeamsCallAgent';
1327
+ };
1328
+ /* @conditional-compile-remove(close-captions) */
1329
+ /**
1330
+ * @private
1331
+ * Determine whether a call is:
1332
+ * A TeamsCall
1333
+ * or a ACS Call joining the teams meeting
1334
+ */
1335
+ const _isTeamsMeetingCall = (call) => {
1336
+ return _isTeamsCall(call) || (_isACSCall(call) && !call.info.groupId && !call.info.roomId); // there should be a better way to determine if a call is joining a teams meeting ideally should be a meetingID in the info object
1337
+ };
1338
+
1339
+ // Copyright (c) Microsoft Corporation.
1340
+ /**
1341
+ * @private
1342
+ */
1343
+ function convertSdkLocalStreamToDeclarativeLocalStream(stream) {
1344
+ return {
1345
+ source: stream.source,
1346
+ mediaStreamType: stream.mediaStreamType,
1347
+ view: undefined
1348
+ // TODO [video-background-effects]: Add video effects state when it is added to the SDK
1349
+ };
1350
+ }
1351
+ /**
1352
+ * @private
1353
+ */
1354
+ function convertSdkRemoteStreamToDeclarativeRemoteStream(stream) {
1355
+ return {
1356
+ id: stream.id,
1357
+ mediaStreamType: stream.mediaStreamType,
1358
+ isAvailable: stream.isAvailable,
1359
+ /* @conditional-compile-remove(video-stream-is-receiving-flag) */
1360
+ isReceiving: stream.isReceiving,
1361
+ view: undefined
1362
+ };
1363
+ }
1364
+ /**
1365
+ * @private
1366
+ */
1367
+ function convertSdkParticipantToDeclarativeParticipant(participant) {
1368
+ const declarativeVideoStreams = {};
1369
+ for (const videoStream of participant.videoStreams) {
1370
+ declarativeVideoStreams[videoStream.id] = convertSdkRemoteStreamToDeclarativeRemoteStream(videoStream);
1371
+ }
1372
+ return {
1373
+ identifier: participant.identifier,
1374
+ displayName: participant.displayName,
1375
+ state: participant.state,
1376
+ callEndReason: participant.callEndReason,
1377
+ videoStreams: declarativeVideoStreams,
1378
+ isMuted: participant.isMuted,
1379
+ isSpeaking: participant.isSpeaking
1380
+ };
1381
+ }
1382
+ /**
1383
+ * @private
1384
+ *
1385
+ * Note at the time of writing only one LocalVideoStream is supported by the SDK.
1386
+ */
1387
+ function convertSdkCallToDeclarativeCall(call) {
1388
+ const declarativeRemoteParticipants = {};
1389
+ call.remoteParticipants.forEach((participant) => {
1390
+ declarativeRemoteParticipants[toFlatCommunicationIdentifier(participant.identifier)] =
1391
+ convertSdkParticipantToDeclarativeParticipant(participant);
1392
+ });
1393
+ return {
1394
+ id: call.id,
1395
+ /* @conditional-compile-remove(teams-identity-support) */
1396
+ kind: _isACSCall(call) ? 'Call' : 'TeamsCall',
1397
+ callerInfo: call.callerInfo,
1398
+ state: call.state,
1399
+ callEndReason: call.callEndReason,
1400
+ diagnostics: {
1401
+ network: {
1402
+ latest: {}
1403
+ },
1404
+ media: {
1405
+ latest: {}
1406
+ }
1407
+ },
1408
+ direction: call.direction,
1409
+ isMuted: call.isMuted,
1410
+ isScreenSharingOn: call.isScreenSharingOn,
1411
+ localVideoStreams: call.localVideoStreams.map(convertSdkLocalStreamToDeclarativeLocalStream),
1412
+ remoteParticipants: declarativeRemoteParticipants,
1413
+ remoteParticipantsEnded: {},
1414
+ recording: { isRecordingActive: false },
1415
+ transcription: { isTranscriptionActive: false },
1416
+ screenShareRemoteParticipant: undefined,
1417
+ startTime: new Date(),
1418
+ endTime: undefined,
1419
+ /* @conditional-compile-remove(rooms) */
1420
+ role: call.role,
1421
+ /* @conditional-compile-remove(close-captions) */
1422
+ captionsFeature: {
1423
+ captions: [],
1424
+ supportedSpokenLanguages: [],
1425
+ supportedCaptionLanguages: [],
1426
+ currentCaptionLanguage: '',
1427
+ currentSpokenLanguage: '',
1428
+ isCaptionsFeatureActive: false
1429
+ }
1430
+ };
1431
+ }
1432
+ /**
1433
+ * @private
1434
+ */
1435
+ function convertSdkIncomingCallToDeclarativeIncomingCall(call) {
1436
+ return {
1437
+ id: call.id,
1438
+ callerInfo: call.callerInfo,
1439
+ startTime: new Date(),
1440
+ endTime: undefined
1441
+ };
1442
+ }
1443
+ /**
1444
+ * @private
1445
+ */
1446
+ function convertFromSDKToDeclarativeVideoStreamRendererView(view) {
1447
+ return {
1448
+ scalingMode: view.scalingMode,
1449
+ isMirrored: view.isMirrored,
1450
+ target: view.target
1451
+ };
1452
+ }
1453
+ /* @conditional-compile-remove(close-captions) */
1454
+ /**
1455
+ * @private
1456
+ */
1457
+ function convertFromSDKToCaptionInfoState(caption) {
1458
+ return Object.assign({}, caption);
1459
+ }
1460
+
1461
+ // Copyright (c) Microsoft Corporation.
1462
+ // Licensed under the MIT license.
1463
+ var __awaiter$E = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
1199
1464
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1200
1465
  return new (P || (P = Promise))(function (resolve, reject) {
1201
1466
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -1313,6 +1578,10 @@ class CallContext$2 {
1313
1578
  /* @conditional-compile-remove(total-participant-count) */
1314
1579
  existingCall.totalParticipantCount = call.totalParticipantCount;
1315
1580
  // We don't update the startTime and endTime if we are updating an existing active call
1581
+ /* @conditional-compile-remove(close-captions) */
1582
+ existingCall.captionsFeature.currentSpokenLanguage = call.captionsFeature.currentSpokenLanguage;
1583
+ /* @conditional-compile-remove(close-captions) */
1584
+ existingCall.captionsFeature.currentCaptionLanguage = call.captionsFeature.currentCaptionLanguage;
1316
1585
  }
1317
1586
  else {
1318
1587
  draft.calls[latestCallId] = call;
@@ -1770,6 +2039,81 @@ class CallContext$2 {
1770
2039
  this._atomicId++;
1771
2040
  return id;
1772
2041
  }
2042
+ /* @conditional-compile-remove(close-captions) */
2043
+ processNewCaption(captions, newCaption) {
2044
+ // going through current captions to find the last caption said by the same speaker, remove that caption if it's partial and replace with the new caption
2045
+ for (let index = captions.length - 1; index >= 0; index--) {
2046
+ const currentCaption = captions[index];
2047
+ if (currentCaption &&
2048
+ currentCaption.resultType !== 'Final' &&
2049
+ currentCaption.speaker.identifier &&
2050
+ newCaption.speaker.identifier &&
2051
+ toFlatCommunicationIdentifier(currentCaption.speaker.identifier) ===
2052
+ toFlatCommunicationIdentifier(newCaption.speaker.identifier)) {
2053
+ captions.splice(index, 1);
2054
+ break;
2055
+ }
2056
+ }
2057
+ captions.push(newCaption);
2058
+ // If the array length exceeds 50, remove the oldest caption
2059
+ if (captions.length > 50) {
2060
+ captions.shift();
2061
+ }
2062
+ }
2063
+ /* @conditional-compile-remove(close-captions) */
2064
+ addCaption(callId, caption) {
2065
+ this.modifyState((draft) => {
2066
+ const call = draft.calls[this._callIdHistory.latestCallId(callId)];
2067
+ if (call) {
2068
+ this.processNewCaption(call.captionsFeature.captions, convertFromSDKToCaptionInfoState(caption));
2069
+ }
2070
+ });
2071
+ }
2072
+ /* @conditional-compile-remove(close-captions) */
2073
+ setIsCaptionActive(callId, isCaptionsActive) {
2074
+ this.modifyState((draft) => {
2075
+ const call = draft.calls[this._callIdHistory.latestCallId(callId)];
2076
+ if (call) {
2077
+ call.captionsFeature.isCaptionsFeatureActive = isCaptionsActive;
2078
+ }
2079
+ });
2080
+ }
2081
+ /* @conditional-compile-remove(close-captions) */
2082
+ setSelectedSpokenLanguage(callId, spokenLanguage) {
2083
+ this.modifyState((draft) => {
2084
+ const call = draft.calls[this._callIdHistory.latestCallId(callId)];
2085
+ if (call) {
2086
+ call.captionsFeature.currentSpokenLanguage = spokenLanguage;
2087
+ }
2088
+ });
2089
+ }
2090
+ /* @conditional-compile-remove(close-captions) */
2091
+ setSelectedCaptionLanguage(callId, captionLanguage) {
2092
+ this.modifyState((draft) => {
2093
+ const call = draft.calls[this._callIdHistory.latestCallId(callId)];
2094
+ if (call) {
2095
+ call.captionsFeature.currentCaptionLanguage = captionLanguage;
2096
+ }
2097
+ });
2098
+ }
2099
+ /* @conditional-compile-remove(close-captions) */
2100
+ setAvailableCaptionLanguages(callId, captionLanguages) {
2101
+ this.modifyState((draft) => {
2102
+ const call = draft.calls[this._callIdHistory.latestCallId(callId)];
2103
+ if (call) {
2104
+ call.captionsFeature.supportedCaptionLanguages = captionLanguages;
2105
+ }
2106
+ });
2107
+ }
2108
+ /* @conditional-compile-remove(close-captions) */
2109
+ setAvailableSpokenLanguages(callId, spokenLanguages) {
2110
+ this.modifyState((draft) => {
2111
+ const call = draft.calls[this._callIdHistory.latestCallId(callId)];
2112
+ if (call) {
2113
+ call.captionsFeature.supportedSpokenLanguages = spokenLanguages;
2114
+ }
2115
+ });
2116
+ }
1773
2117
  /**
1774
2118
  * Tees any errors encountered in an async function to the state.
1775
2119
  *
@@ -1779,7 +2123,7 @@ class CallContext$2 {
1779
2123
  * @throws CallError. Exceptions thrown from `f` are tagged with the failed `target.
1780
2124
  */
1781
2125
  withAsyncErrorTeedToState(action, target) {
1782
- return (...args) => __awaiter$A(this, void 0, void 0, function* () {
2126
+ return (...args) => __awaiter$E(this, void 0, void 0, function* () {
1783
2127
  try {
1784
2128
  return yield action(...args);
1785
2129
  }
@@ -1843,139 +2187,40 @@ const findOldestCallEnded = (calls) => {
1843
2187
 
1844
2188
  // Copyright (c) Microsoft Corporation.
1845
2189
  // Licensed under the MIT license.
1846
- /**
1847
- * @internal
1848
- */
1849
- const _isACSCall = (call) => {
1850
- /* @conditional-compile-remove(teams-identity-support) */
1851
- return !call.kind || call.kind === 'Call';
1852
- };
1853
- /**
1854
- * @internal
1855
- */
1856
- const _isACSCallAgent = (callAgent) => {
1857
- /* @conditional-compile-remove(teams-identity-support) */
1858
- return !callAgent.kind || callAgent.kind === 'CallAgent';
1859
- };
1860
- /**
1861
- * @internal
1862
- */
1863
- const _isTeamsCall = (call) => {
1864
- /* @conditional-compile-remove(teams-identity-support) */
1865
- return call.kind === 'TeamsCall';
1866
- };
1867
- /**
1868
- * @internal
1869
- */
1870
- const _isTeamsCallAgent = (callAgent) => {
1871
- /* @conditional-compile-remove(teams-identity-support) */
1872
- return callAgent.kind === 'TeamsCallAgent';
1873
- };
1874
-
1875
- // Copyright (c) Microsoft Corporation.
1876
- /**
1877
- * @private
1878
- */
1879
- function convertSdkLocalStreamToDeclarativeLocalStream(stream) {
1880
- return {
1881
- source: stream.source,
1882
- mediaStreamType: stream.mediaStreamType,
1883
- view: undefined
1884
- // TODO [video-background-effects]: Add video effects state when it is added to the SDK
1885
- };
1886
- }
1887
- /**
1888
- * @private
1889
- */
1890
- function convertSdkRemoteStreamToDeclarativeRemoteStream(stream) {
1891
- return {
1892
- id: stream.id,
1893
- mediaStreamType: stream.mediaStreamType,
1894
- isAvailable: stream.isAvailable,
1895
- /* @conditional-compile-remove(video-stream-is-receiving-flag) */
1896
- isReceiving: stream.isReceiving,
1897
- view: undefined
1898
- };
1899
- }
2190
+ /* @conditional-compile-remove(close-captions) */
1900
2191
  /**
1901
2192
  * @private
1902
2193
  */
1903
- function convertSdkParticipantToDeclarativeParticipant(participant) {
1904
- const declarativeVideoStreams = {};
1905
- for (const videoStream of participant.videoStreams) {
1906
- declarativeVideoStreams[videoStream.id] = convertSdkRemoteStreamToDeclarativeRemoteStream(videoStream);
2194
+ class CaptionsSubscriber {
2195
+ constructor(callIdRef, context, captions) {
2196
+ this.subscribe = () => {
2197
+ this._captions.on('isCaptionsActiveChanged', this.isCaptionsActiveChanged);
2198
+ this._captions.on('captionsReceived', this.onCaptionsReceived);
2199
+ };
2200
+ this.unsubscribe = () => {
2201
+ this._captions.off('isCaptionsActiveChanged', this.isCaptionsActiveChanged);
2202
+ this._captions.off('captionsReceived', this.onCaptionsReceived);
2203
+ };
2204
+ this.onCaptionsReceived = (caption) => {
2205
+ this._context.addCaption(this._callIdRef.callId, caption);
2206
+ this._context.setSelectedSpokenLanguage(this._callIdRef.callId, caption.spokenLanguage);
2207
+ this._context.setSelectedCaptionLanguage(this._callIdRef.callId, caption.spokenLanguage);
2208
+ };
2209
+ this.isCaptionsActiveChanged = () => {
2210
+ this._context.setIsCaptionActive(this._callIdRef.callId, this._captions.isCaptionsFeatureActive);
2211
+ };
2212
+ this._callIdRef = callIdRef;
2213
+ this._context = context;
2214
+ this._captions = captions;
2215
+ if (this._captions.isCaptionsFeatureActive) {
2216
+ this._context.setIsCaptionActive(this._callIdRef.callId, this._captions.isCaptionsFeatureActive);
2217
+ }
2218
+ this._context.setAvailableSpokenLanguages(this._callIdRef.callId, this._captions.supportedSpokenLanguages);
2219
+ if ('availableSubtitleLanguages' in this._captions) {
2220
+ this._context.setAvailableCaptionLanguages(this._callIdRef.callId, this._captions.supportedCaptionLanguages);
2221
+ }
2222
+ this.subscribe();
1907
2223
  }
1908
- return {
1909
- identifier: participant.identifier,
1910
- displayName: participant.displayName,
1911
- state: participant.state,
1912
- callEndReason: participant.callEndReason,
1913
- videoStreams: declarativeVideoStreams,
1914
- isMuted: participant.isMuted,
1915
- isSpeaking: participant.isSpeaking
1916
- };
1917
- }
1918
- /**
1919
- * @private
1920
- *
1921
- * Note at the time of writing only one LocalVideoStream is supported by the SDK.
1922
- */
1923
- function convertSdkCallToDeclarativeCall(call) {
1924
- const declarativeRemoteParticipants = {};
1925
- call.remoteParticipants.forEach((participant) => {
1926
- declarativeRemoteParticipants[toFlatCommunicationIdentifier(participant.identifier)] =
1927
- convertSdkParticipantToDeclarativeParticipant(participant);
1928
- });
1929
- return {
1930
- id: call.id,
1931
- /* @conditional-compile-remove(teams-identity-support) */
1932
- kind: _isACSCall(call) ? 'Call' : 'TeamsCall',
1933
- callerInfo: call.callerInfo,
1934
- state: call.state,
1935
- callEndReason: call.callEndReason,
1936
- diagnostics: {
1937
- network: {
1938
- latest: {}
1939
- },
1940
- media: {
1941
- latest: {}
1942
- }
1943
- },
1944
- direction: call.direction,
1945
- isMuted: call.isMuted,
1946
- isScreenSharingOn: call.isScreenSharingOn,
1947
- localVideoStreams: call.localVideoStreams.map(convertSdkLocalStreamToDeclarativeLocalStream),
1948
- remoteParticipants: declarativeRemoteParticipants,
1949
- remoteParticipantsEnded: {},
1950
- recording: { isRecordingActive: false },
1951
- transcription: { isTranscriptionActive: false },
1952
- screenShareRemoteParticipant: undefined,
1953
- startTime: new Date(),
1954
- endTime: undefined,
1955
- /* @conditional-compile-remove(rooms) */
1956
- role: call.role
1957
- };
1958
- }
1959
- /**
1960
- * @private
1961
- */
1962
- function convertSdkIncomingCallToDeclarativeIncomingCall(call) {
1963
- return {
1964
- id: call.id,
1965
- callerInfo: call.callerInfo,
1966
- startTime: new Date(),
1967
- endTime: undefined
1968
- };
1969
- }
1970
- /**
1971
- * @private
1972
- */
1973
- function convertFromSDKToDeclarativeVideoStreamRendererView(view) {
1974
- return {
1975
- scalingMode: view.scalingMode,
1976
- isMirrored: view.isMirrored,
1977
- target: view.target
1978
- };
1979
2224
  }
1980
2225
 
1981
2226
  // Copyright (c) Microsoft Corporation.
@@ -2306,7 +2551,7 @@ function _logStreamEvent(eventName, streamLogInfo, error) {
2306
2551
 
2307
2552
  // Copyright (c) Microsoft Corporation.
2308
2553
  // Licensed under the MIT license.
2309
- var __awaiter$z = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
2554
+ var __awaiter$D = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
2310
2555
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
2311
2556
  return new (P || (P = Promise))(function (resolve, reject) {
2312
2557
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -2316,7 +2561,7 @@ var __awaiter$z = (window && window.__awaiter) || function (thisArg, _arguments,
2316
2561
  });
2317
2562
  };
2318
2563
  function createViewVideo(context, internalContext, callId, stream, participantId, options) {
2319
- return __awaiter$z(this, void 0, void 0, function* () {
2564
+ return __awaiter$D(this, void 0, void 0, function* () {
2320
2565
  // we can only have 3 types of createView
2321
2566
  let streamEventType;
2322
2567
  // we will reuse these for local as well but we need to make sure the remote stream is passed in like before.
@@ -2438,7 +2683,7 @@ function createViewVideo(context, internalContext, callId, stream, participantId
2438
2683
  });
2439
2684
  }
2440
2685
  function createViewUnparentedVideo(context, internalContext, stream, options) {
2441
- return __awaiter$z(this, void 0, void 0, function* () {
2686
+ return __awaiter$D(this, void 0, void 0, function* () {
2442
2687
  const renderInfo = internalContext.getUnparentedRenderInfo(stream);
2443
2688
  if (renderInfo && renderInfo.status === 'Rendered') {
2444
2689
  console.warn('Unparented LocalVideoStream is already rendered');
@@ -2606,7 +2851,7 @@ function createView(context, internalContext, callId, participantId, stream, opt
2606
2851
  // Render LocalVideoStream that is not part of a Call
2607
2852
  // 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).
2608
2853
  // We do not have a startLocalPreviewVideo function, so as a workaround we ensure any errors are propagated here.
2609
- return context.withAsyncErrorTeedToState(() => __awaiter$z(this, void 0, void 0, function* () { return yield createViewUnparentedVideo(context, internalContext, stream, options); }), 'Call.startVideo')();
2854
+ return context.withAsyncErrorTeedToState(() => __awaiter$D(this, void 0, void 0, function* () { return yield createViewUnparentedVideo(context, internalContext, stream, options); }), 'Call.startVideo')();
2610
2855
  }
2611
2856
  else {
2612
2857
  _logStreamEvent(EventNames.CREATE_STREAM_INVALID_PARAMS, { streamType });
@@ -2889,6 +3134,8 @@ class CallSubscriber {
2889
3134
  constructor(call, context, internalContext) {
2890
3135
  this.subscribe = () => {
2891
3136
  this._call.on('stateChanged', this.stateChanged);
3137
+ /* @conditional-compile-remove(close-captions) */
3138
+ this._call.on('stateChanged', this.initCaptionSubscriber);
2892
3139
  this._call.on('idChanged', this.idChanged);
2893
3140
  this._call.on('isScreenSharingOnChanged', this.isScreenSharingOnChanged);
2894
3141
  this._call.on('remoteParticipantsUpdated', this.remoteParticipantsUpdated);
@@ -2911,7 +3158,10 @@ class CallSubscriber {
2911
3158
  }
2912
3159
  };
2913
3160
  this.unsubscribe = () => {
3161
+ var _a;
2914
3162
  this._call.off('stateChanged', this.stateChanged);
3163
+ /* @conditional-compile-remove(close-captions) */
3164
+ this._call.off('stateChanged', this.initCaptionSubscriber);
2915
3165
  this._call.off('idChanged', this.idChanged);
2916
3166
  this._call.off('isScreenSharingOnChanged', this.isScreenSharingOnChanged);
2917
3167
  this._call.off('remoteParticipantsUpdated', this.remoteParticipantsUpdated);
@@ -2934,10 +3184,20 @@ class CallSubscriber {
2934
3184
  this._diagnosticsSubscriber.unsubscribe();
2935
3185
  this._recordingSubscriber.unsubscribe();
2936
3186
  this._transcriptionSubscriber.unsubscribe();
3187
+ /* @conditional-compile-remove(close-captions) */
3188
+ (_a = this._captionsSubscriber) === null || _a === void 0 ? void 0 : _a.unsubscribe();
2937
3189
  };
2938
3190
  this.stateChanged = () => {
2939
3191
  this._context.setCallState(this._callIdRef.callId, this._call.state);
2940
3192
  };
3193
+ /* @conditional-compile-remove(close-captions) */
3194
+ this.initCaptionSubscriber = () => {
3195
+ // subscribe to captions here so that we don't call captions when call is not initialized
3196
+ if (_isTeamsMeetingCall(this._call) && this._call.state === 'Connected' && !this._captionsSubscriber) {
3197
+ this._captionsSubscriber = new CaptionsSubscriber(this._callIdRef, this._context, this._call.feature(communicationCalling.Features.TeamsCaptions));
3198
+ this._call.off('stateChanged', this.initCaptionSubscriber);
3199
+ }
3200
+ };
2941
3201
  this.idChanged = () => {
2942
3202
  this._internalContext.setCallId(this._call.id, this._callIdRef.callId);
2943
3203
  this._context.setCallId(this._call.id, this._callIdRef.callId);
@@ -3040,7 +3300,7 @@ class CallSubscriber {
3040
3300
 
3041
3301
  // Copyright (c) Microsoft Corporation.
3042
3302
  // Licensed under the MIT license.
3043
- var __awaiter$y = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
3303
+ var __awaiter$C = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
3044
3304
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3045
3305
  return new (P || (P = Promise))(function (resolve, reject) {
3046
3306
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -3060,14 +3320,14 @@ class ProxyIncomingCall {
3060
3320
  switch (prop) {
3061
3321
  case 'accept': {
3062
3322
  return this._context.withAsyncErrorTeedToState(function (...args) {
3063
- return __awaiter$y(this, void 0, void 0, function* () {
3323
+ return __awaiter$C(this, void 0, void 0, function* () {
3064
3324
  return yield target.accept(...args);
3065
3325
  });
3066
3326
  }, 'IncomingCall.accept');
3067
3327
  }
3068
3328
  case 'reject': {
3069
3329
  return this._context.withAsyncErrorTeedToState(function (...args) {
3070
- return __awaiter$y(this, void 0, void 0, function* () {
3330
+ return __awaiter$C(this, void 0, void 0, function* () {
3071
3331
  return yield target.reject(...args);
3072
3332
  });
3073
3333
  }, 'IncomingCall.reject');
@@ -3304,7 +3564,7 @@ const clearCallRelatedState = (context, internalContext) => {
3304
3564
 
3305
3565
  // Copyright (c) Microsoft Corporation.
3306
3566
  // Licensed under the MIT license.
3307
- var __awaiter$x = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
3567
+ var __awaiter$B = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
3308
3568
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3309
3569
  return new (P || (P = Promise))(function (resolve, reject) {
3310
3570
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -3330,60 +3590,114 @@ class ProxyCallCommon {
3330
3590
  switch (prop) {
3331
3591
  case 'mute': {
3332
3592
  return this._context.withAsyncErrorTeedToState(function (...args) {
3333
- return __awaiter$x(this, void 0, void 0, function* () {
3593
+ return __awaiter$B(this, void 0, void 0, function* () {
3334
3594
  return yield target.mute(...args);
3335
3595
  });
3336
3596
  }, 'Call.mute');
3337
3597
  }
3338
3598
  case 'unmute': {
3339
3599
  return this._context.withAsyncErrorTeedToState(function (...args) {
3340
- return __awaiter$x(this, void 0, void 0, function* () {
3600
+ return __awaiter$B(this, void 0, void 0, function* () {
3341
3601
  return yield target.unmute(...args);
3342
3602
  });
3343
3603
  }, 'Call.unmute');
3344
3604
  }
3345
3605
  case 'startVideo': {
3346
3606
  return this._context.withAsyncErrorTeedToState(function (...args) {
3347
- return __awaiter$x(this, void 0, void 0, function* () {
3607
+ return __awaiter$B(this, void 0, void 0, function* () {
3348
3608
  return yield target.startVideo(...args);
3349
3609
  });
3350
3610
  }, 'Call.startVideo');
3351
3611
  }
3352
3612
  case 'stopVideo': {
3353
3613
  return this._context.withAsyncErrorTeedToState(function (...args) {
3354
- return __awaiter$x(this, void 0, void 0, function* () {
3614
+ return __awaiter$B(this, void 0, void 0, function* () {
3355
3615
  return yield target.stopVideo(...args);
3356
3616
  });
3357
3617
  }, 'Call.stopVideo');
3358
3618
  }
3359
3619
  case 'startScreenSharing': {
3360
3620
  return this._context.withAsyncErrorTeedToState(function (...args) {
3361
- return __awaiter$x(this, void 0, void 0, function* () {
3621
+ return __awaiter$B(this, void 0, void 0, function* () {
3362
3622
  return yield target.startScreenSharing(...args);
3363
3623
  });
3364
3624
  }, 'Call.startScreenSharing');
3365
3625
  }
3366
3626
  case 'stopScreenSharing': {
3367
3627
  return this._context.withAsyncErrorTeedToState(function (...args) {
3368
- return __awaiter$x(this, void 0, void 0, function* () {
3628
+ return __awaiter$B(this, void 0, void 0, function* () {
3369
3629
  return yield target.stopScreenSharing(...args);
3370
3630
  });
3371
3631
  }, 'Call.stopScreenSharing');
3372
3632
  }
3373
3633
  case 'hold': {
3374
3634
  return this._context.withAsyncErrorTeedToState(function (...args) {
3375
- return __awaiter$x(this, void 0, void 0, function* () {
3635
+ return __awaiter$B(this, void 0, void 0, function* () {
3376
3636
  return yield target.hold(...args);
3377
3637
  });
3378
3638
  }, 'Call.hold');
3379
3639
  }
3380
3640
  case 'resume': {
3381
3641
  return this._context.withAsyncErrorTeedToState(function (...args) {
3382
- return __awaiter$x(this, void 0, void 0, function* () {
3642
+ return __awaiter$B(this, void 0, void 0, function* () {
3383
3643
  return yield target.resume(...args);
3384
3644
  });
3385
3645
  }, 'Call.resume');
3386
3646
  }
3647
+ case 'feature': {
3648
+ // these are mini version of Proxy object - if it grows too big, a real Proxy object should be used.
3649
+ return this._context.withErrorTeedToState((...args) => {
3650
+ /* @conditional-compile-remove(close-captions) */
3651
+ if (args[0] === communicationCalling.Features.TeamsCaptions) {
3652
+ const captionsFeature = target.feature(communicationCalling.Features.TeamsCaptions);
3653
+ const proxyFeature = new ProxyTeamsCaptionsFeature(this._context, target);
3654
+ return new Proxy(captionsFeature, proxyFeature);
3655
+ }
3656
+ return target.feature(...args);
3657
+ }, 'Call.feature');
3658
+ }
3659
+ default:
3660
+ return Reflect.get(target, prop);
3661
+ }
3662
+ }
3663
+ }
3664
+ /* @conditional-compile-remove(close-captions) */
3665
+ /**
3666
+ * @private
3667
+ */
3668
+ class ProxyTeamsCaptionsFeature {
3669
+ constructor(context, call) {
3670
+ this._context = context;
3671
+ this._call = call;
3672
+ }
3673
+ get(target, prop) {
3674
+ switch (prop) {
3675
+ case 'startCaptions':
3676
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$B(this, void 0, void 0, function* () {
3677
+ var _a, _b;
3678
+ const ret = yield target.startCaptions(...args);
3679
+ this._context.setIsCaptionActive(this._call.id, true);
3680
+ this._context.setSelectedSpokenLanguage(this._call.id, (_b = (_a = args[0]) === null || _a === void 0 ? void 0 : _a.spokenLanguage) !== null && _b !== void 0 ? _b : 'en-us');
3681
+ return ret;
3682
+ }), 'Call.feature');
3683
+ case 'stopCaptions':
3684
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$B(this, void 0, void 0, function* () {
3685
+ const ret = yield target.stopCaptions(...args);
3686
+ this._context.setIsCaptionActive(this._call.id, false);
3687
+ return ret;
3688
+ }), 'Call.feature');
3689
+ case 'setSpokenLanguage':
3690
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$B(this, void 0, void 0, function* () {
3691
+ const ret = yield target.setSpokenLanguage(...args);
3692
+ this._context.setSelectedSpokenLanguage(this._call.id, args[0]);
3693
+ return ret;
3694
+ }), 'Call.feature');
3695
+ case 'setCaptionLanguage':
3696
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$B(this, void 0, void 0, function* () {
3697
+ const ret = yield target.setCaptionLanguage(...args);
3698
+ this._context.setSelectedCaptionLanguage(this._call.id, args[0]);
3699
+ return ret;
3700
+ }), 'Call.feature');
3387
3701
  default:
3388
3702
  return Reflect.get(target, prop);
3389
3703
  }
@@ -3392,7 +3706,7 @@ class ProxyCallCommon {
3392
3706
 
3393
3707
  // Copyright (c) Microsoft Corporation.
3394
3708
  // Licensed under the MIT license.
3395
- var __awaiter$w = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
3709
+ var __awaiter$A = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
3396
3710
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3397
3711
  return new (P || (P = Promise))(function (resolve, reject) {
3398
3712
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -3406,7 +3720,7 @@ class ProxyCall extends ProxyCallCommon {
3406
3720
  switch (prop) {
3407
3721
  case 'addParticipant': {
3408
3722
  return this.getContext().withAsyncErrorTeedToState(function (...args) {
3409
- return __awaiter$w(this, void 0, void 0, function* () {
3723
+ return __awaiter$A(this, void 0, void 0, function* () {
3410
3724
  return yield target.addParticipant(...args);
3411
3725
  });
3412
3726
  }, 'Call.addParticipant');
@@ -3627,7 +3941,7 @@ class InternalCallContext {
3627
3941
 
3628
3942
  // Copyright (c) Microsoft Corporation.
3629
3943
  // Licensed under the MIT license.
3630
- var __awaiter$v = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
3944
+ var __awaiter$z = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
3631
3945
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3632
3946
  return new (P || (P = Promise))(function (resolve, reject) {
3633
3947
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -3642,7 +3956,7 @@ class ProxyTeamsCall extends ProxyCallCommon {
3642
3956
  switch (prop) {
3643
3957
  case 'addParticipant': {
3644
3958
  return this.getContext().withAsyncErrorTeedToState(function (...args) {
3645
- return __awaiter$v(this, void 0, void 0, function* () {
3959
+ return __awaiter$z(this, void 0, void 0, function* () {
3646
3960
  return yield target.addParticipant(...args);
3647
3961
  });
3648
3962
  }, 'TeamsCall.addParticipant');
@@ -3757,7 +4071,7 @@ const teamsCallAgentDeclaratify = (callAgent, context, internalContext) => {
3757
4071
 
3758
4072
  // Copyright (c) Microsoft Corporation.
3759
4073
  // Licensed under the MIT license.
3760
- var __awaiter$u = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
4074
+ var __awaiter$y = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
3761
4075
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3762
4076
  return new (P || (P = Promise))(function (resolve, reject) {
3763
4077
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -3779,7 +4093,7 @@ class ProxyVideoStreamRendererView {
3779
4093
  get(target, prop) {
3780
4094
  switch (prop) {
3781
4095
  case 'updateScalingMode': {
3782
- return (...args) => __awaiter$u(this, void 0, void 0, function* () {
4096
+ return (...args) => __awaiter$y(this, void 0, void 0, function* () {
3783
4097
  yield target.updateScalingMode(...args);
3784
4098
  this._context.setRemoteVideoStreamViewScalingMode(this._callId, this._participantId, this._streamId, args[0]);
3785
4099
  });
@@ -3800,7 +4114,7 @@ const videoStreamRendererViewDeclaratify = (view, context, callId, participantId
3800
4114
 
3801
4115
  // Copyright (c) Microsoft Corporation.
3802
4116
  // Licensed under the MIT license.
3803
- var __awaiter$t = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
4117
+ var __awaiter$x = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
3804
4118
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3805
4119
  return new (P || (P = Promise))(function (resolve, reject) {
3806
4120
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -3822,7 +4136,7 @@ class ProxyCallClient {
3822
4136
  get(target, prop) {
3823
4137
  switch (prop) {
3824
4138
  case 'createCallAgent': {
3825
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$t(this, void 0, void 0, function* () {
4139
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$x(this, void 0, void 0, function* () {
3826
4140
  // createCallAgent will throw an exception if the previous callAgent was not disposed. If the previous
3827
4141
  // callAgent was disposed then it would have unsubscribed to events so we can just create a new declarative
3828
4142
  // callAgent if the createCallAgent succeeds.
@@ -3835,7 +4149,7 @@ class ProxyCallClient {
3835
4149
  }), 'CallClient.createCallAgent');
3836
4150
  }
3837
4151
  case 'createTeamsCallAgent': {
3838
- /* @conditional-compile-remove(teams-identity-support) */ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$t(this, void 0, void 0, function* () {
4152
+ /* @conditional-compile-remove(teams-identity-support) */ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$x(this, void 0, void 0, function* () {
3839
4153
  // createCallAgent will throw an exception if the previous callAgent was not disposed. If the previous
3840
4154
  // callAgent was disposed then it would have unsubscribed to events so we can just create a new declarative
3841
4155
  // callAgent if the createCallAgent succeeds.
@@ -3848,7 +4162,7 @@ class ProxyCallClient {
3848
4162
  }), 'CallClient.createTeamsCallAgent');
3849
4163
  }
3850
4164
  case 'getDeviceManager': {
3851
- return this._context.withAsyncErrorTeedToState(() => __awaiter$t(this, void 0, void 0, function* () {
4165
+ return this._context.withAsyncErrorTeedToState(() => __awaiter$x(this, void 0, void 0, function* () {
3852
4166
  // As of writing, the SDK always returns the same instance of DeviceManager so we keep a reference of
3853
4167
  // DeviceManager and if it does not change we return the cached DeclarativeDeviceManager. If it does not we'll
3854
4168
  // throw an error that indicate we need to fix this issue as our implementation has diverged from the SDK.
@@ -3877,7 +4191,7 @@ class ProxyCallClient {
3877
4191
  /**
3878
4192
  * add to this object if we want to proxy anything else off the DebugInfo feature object.
3879
4193
  */
3880
- return Object.assign(Object.assign({}, feature), { getEnvironmentInfo: () => __awaiter$t(this, void 0, void 0, function* () {
4194
+ return Object.assign(Object.assign({}, feature), { getEnvironmentInfo: () => __awaiter$x(this, void 0, void 0, function* () {
3881
4195
  const environmentInfo = yield feature.getEnvironmentInfo();
3882
4196
  this._context.setEnvironmentInfo(environmentInfo);
3883
4197
  return environmentInfo;
@@ -3930,7 +4244,7 @@ const createStatefulCallClientWithDeps = (callClient, context, internalContext)
3930
4244
  });
3931
4245
  Object.defineProperty(callClient, 'createView', {
3932
4246
  configurable: false,
3933
- value: (callId, participantId, stream, options) => __awaiter$t(void 0, void 0, void 0, function* () {
4247
+ value: (callId, participantId, stream, options) => __awaiter$x(void 0, void 0, void 0, function* () {
3934
4248
  const participantIdKind = participantId ? communicationCommon.getIdentifierKind(participantId) : undefined;
3935
4249
  const result = yield createView(context, internalContext, callId, participantIdKind, stream, options);
3936
4250
  // We only need to declaratify the VideoStreamRendererView object for remote participants. Because the updateScalingMode only needs to be called on remote participant stream views.
@@ -4692,6 +5006,10 @@ function chunk(options, itemsPerRow) {
4692
5006
  }
4693
5007
  return rows;
4694
5008
  }
5009
+ /**
5010
+ * @private
5011
+ */
5012
+ const defaultSpokenLanguage$1 = 'en-us';
4695
5013
 
4696
5014
  // Copyright (c) Microsoft Corporation.
4697
5015
  /**
@@ -5357,7 +5675,15 @@ const DEFAULT_COMPONENT_ICONS = {
5357
5675
  /* @conditional-compile-remove(vertical-gallery) */
5358
5676
  VerticalGalleryRightButton: React__default['default'].createElement(reactIcons.ChevronRight20Regular, null),
5359
5677
  /* @conditional-compile-remove(video-background-effects) */
5360
- OptionsVideoBackgroundEffect: React__default['default'].createElement(reactIcons.VideoBackgroundEffect20Regular, null)
5678
+ OptionsVideoBackgroundEffect: React__default['default'].createElement(reactIcons.VideoBackgroundEffect20Regular, null),
5679
+ /* @conditional-compile-remove(close-captions) */
5680
+ CaptionsIcon: React__default['default'].createElement(reactIcons.ClosedCaption20Regular, null),
5681
+ /* @conditional-compile-remove(close-captions) */
5682
+ CaptionsOffIcon: React__default['default'].createElement(reactIcons.ClosedCaptionOff20Regular, null),
5683
+ /* @conditional-compile-remove(close-captions) */
5684
+ CaptionsSettingsIcon: React__default['default'].createElement(reactIcons.Settings20Regular, null),
5685
+ /* @conditional-compile-remove(close-captions) */
5686
+ ChangeSpokenLanguageIcon: React__default['default'].createElement(reactIcons.PersonVoice20Regular, null)
5361
5687
  };
5362
5688
 
5363
5689
  // Copyright (c) Microsoft Corporation.
@@ -6952,7 +7278,7 @@ const chatMessageActionMenuProps = (menuProps) => {
6952
7278
  return actionMenuProps;
6953
7279
  };
6954
7280
 
6955
- var __awaiter$s = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
7281
+ var __awaiter$w = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
6956
7282
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6957
7283
  return new (P || (P = Promise))(function (resolve, reject) {
6958
7284
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -6977,7 +7303,7 @@ const _FileDownloadCards = (props) => {
6977
7303
  var _a, _b;
6978
7304
  return (_b = (_a = props.strings) === null || _a === void 0 ? void 0 : _a.downloadFile) !== null && _b !== void 0 ? _b : localeStrings.downloadFile;
6979
7305
  }, [(_a = props.strings) === null || _a === void 0 ? void 0 : _a.downloadFile, localeStrings.downloadFile]);
6980
- const fileDownloadHandler = React.useCallback((userId, file) => __awaiter$s(void 0, void 0, void 0, function* () {
7306
+ const fileDownloadHandler = React.useCallback((userId, file) => __awaiter$w(void 0, void 0, void 0, function* () {
6981
7307
  if (!props.downloadHandler) {
6982
7308
  window.open(file.url, '_blank', 'noopener,noreferrer');
6983
7309
  }
@@ -7146,7 +7472,7 @@ const ChatMessageComponentAsMessageBubble = React__default['default'].memo(Messa
7146
7472
 
7147
7473
  // Copyright (c) Microsoft Corporation.
7148
7474
  // Licensed under the MIT license.
7149
- var __awaiter$r = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
7475
+ var __awaiter$v = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
7150
7476
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
7151
7477
  return new (P || (P = Promise))(function (resolve, reject) {
7152
7478
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -7178,7 +7504,7 @@ const ChatMessageComponent = (props) => {
7178
7504
  onSendMessage && onSendMessage(content !== undefined ? content : '');
7179
7505
  }, [clientMessageId, content, onSendMessage, onDeleteMessage]);
7180
7506
  if (isEditing && message.messageType === 'chat') {
7181
- return (React__default['default'].createElement(ChatMessageComponentAsEditBox, { message: message, inlineEditButtons: props.inlineAcceptRejectEditButtons, strings: props.strings, onSubmit: (text, metadata, options) => __awaiter$r(void 0, void 0, void 0, function* () {
7507
+ return (React__default['default'].createElement(ChatMessageComponentAsEditBox, { message: message, inlineEditButtons: props.inlineAcceptRejectEditButtons, strings: props.strings, onSubmit: (text, metadata, options) => __awaiter$v(void 0, void 0, void 0, function* () {
7182
7508
  props.onUpdateMessage &&
7183
7509
  message.messageId &&
7184
7510
  (yield props.onUpdateMessage(message.messageId, text, metadata, options));
@@ -7289,7 +7615,7 @@ var getParticipantsWhoHaveReadMessage = (message, readReceiptsBySenderId) => {
7289
7615
 
7290
7616
  // Copyright (c) Microsoft Corporation.
7291
7617
  // Licensed under the MIT license.
7292
- var __awaiter$q = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
7618
+ var __awaiter$u = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
7293
7619
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
7294
7620
  return new (P || (P = Promise))(function (resolve, reject) {
7295
7621
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -7509,7 +7835,7 @@ const MessageThread = (props) => {
7509
7835
  /* @conditional-compile-remove(teams-inline-images) */
7510
7836
  const [inlineAttachments, setInlineAttachments] = React.useState({});
7511
7837
  /* @conditional-compile-remove(teams-inline-images) */
7512
- const onFetchInlineAttachment = React.useCallback((attachment) => __awaiter$q(void 0, void 0, void 0, function* () {
7838
+ const onFetchInlineAttachment = React.useCallback((attachment) => __awaiter$u(void 0, void 0, void 0, function* () {
7513
7839
  if (!onFetchAttachments || attachment.id in inlineAttachments) {
7514
7840
  return;
7515
7841
  }
@@ -7551,7 +7877,7 @@ const MessageThread = (props) => {
7551
7877
  setChatMessagesInitialized(chatMessagesInitialized);
7552
7878
  };
7553
7879
  // we try to only send those message status if user is scrolled to the bottom.
7554
- const sendMessageStatusIfAtBottom = React.useCallback(() => __awaiter$q(void 0, void 0, void 0, function* () {
7880
+ const sendMessageStatusIfAtBottom = React.useCallback(() => __awaiter$u(void 0, void 0, void 0, function* () {
7555
7881
  if (!isAtBottomOfScrollRef.current ||
7556
7882
  !document.hasFocus() ||
7557
7883
  !messagesRef.current ||
@@ -7602,7 +7928,7 @@ const MessageThread = (props) => {
7602
7928
  setIsAtBottomOfScrollRef(atBottom);
7603
7929
  }, [scrollToBottom, sendMessageStatusIfAtBottom]);
7604
7930
  // Infinite scrolling + threadInitialize function
7605
- const fetchNewMessageWhenAtTop = React.useCallback(() => __awaiter$q(void 0, void 0, void 0, function* () {
7931
+ const fetchNewMessageWhenAtTop = React.useCallback(() => __awaiter$u(void 0, void 0, void 0, function* () {
7606
7932
  if (!isLoadingChatMessagesRef.current) {
7607
7933
  if (onLoadPreviousChatMessages) {
7608
7934
  isLoadingChatMessagesRef.current = true;
@@ -8320,6 +8646,7 @@ const DrawerMenuItem = (props) => {
8320
8646
  React__default['default'].createElement(react.Text, { styles: {
8321
8647
  root: { color: props.disabled ? theme.palette.neutralTertiaryAlt : theme.palette.neutralSecondary }
8322
8648
  } }, props.secondaryText))),
8649
+ props.secondaryComponent && React__default['default'].createElement(react.Stack.Item, null, props.secondaryComponent),
8323
8650
  secondaryIcon && React__default['default'].createElement(react.Stack.Item, null, secondaryIcon)));
8324
8651
  };
8325
8652
  const MenuItemIcon = (props) => (React__default['default'].createElement(react.FontIcon, Object.assign({ className: react.mergeStyles(iconStyles$1) }, props)));
@@ -11933,7 +12260,7 @@ const DevicesButton = (props) => {
11933
12260
 
11934
12261
  // Copyright (c) Microsoft Corporation.
11935
12262
  // Licensed under the MIT license.
11936
- var __awaiter$p = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
12263
+ var __awaiter$t = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
11937
12264
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
11938
12265
  return new (P || (P = Promise))(function (resolve, reject) {
11939
12266
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -11971,7 +12298,7 @@ const CameraButton = (props) => {
11971
12298
  const toggleAnnouncerString = React.useCallback((isCameraOn) => {
11972
12299
  setAnnouncerString(!isCameraOn ? strings.cameraActionTurnedOffAnnouncement : strings.cameraActionTurnedOnAnnouncement);
11973
12300
  }, [strings.cameraActionTurnedOffAnnouncement, strings.cameraActionTurnedOnAnnouncement]);
11974
- const onToggleClick = React.useCallback(() => __awaiter$p(void 0, void 0, void 0, function* () {
12301
+ const onToggleClick = React.useCallback(() => __awaiter$t(void 0, void 0, void 0, function* () {
11975
12302
  // Throttle click on camera, need to await onToggleCamera then allow another click
11976
12303
  if (onToggleCamera) {
11977
12304
  setWaitForCamera(true);
@@ -12139,7 +12466,7 @@ const lightThemeCallButtonStyles = {
12139
12466
 
12140
12467
  // Copyright (c) Microsoft Corporation.
12141
12468
  // Licensed under the MIT license.
12142
- var __awaiter$o = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
12469
+ var __awaiter$s = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
12143
12470
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
12144
12471
  return new (P || (P = Promise))(function (resolve, reject) {
12145
12472
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -12180,7 +12507,7 @@ const MicrophoneButton = (props) => {
12180
12507
  const toggleAnnouncerString = React.useCallback((isMicOn) => {
12181
12508
  setAnnouncerString(!isMicOn ? strings.microphoneActionTurnedOffAnnouncement : strings.microphoneActionTurnedOnAnnouncement);
12182
12509
  }, [strings.microphoneActionTurnedOffAnnouncement, strings.microphoneActionTurnedOnAnnouncement]);
12183
- const onToggleClick = React.useCallback(() => __awaiter$o(void 0, void 0, void 0, function* () {
12510
+ const onToggleClick = React.useCallback(() => __awaiter$s(void 0, void 0, void 0, function* () {
12184
12511
  if (onToggleMicrophone) {
12185
12512
  try {
12186
12513
  yield onToggleMicrophone();
@@ -12947,7 +13274,7 @@ const containerStyles$3 = (theme) => {
12947
13274
  /**
12948
13275
  * @private
12949
13276
  */
12950
- const buttonStyles = (theme) => ({
13277
+ const buttonStyles$1 = (theme) => ({
12951
13278
  root: {
12952
13279
  background: 'none',
12953
13280
  border: 'none',
@@ -13068,7 +13395,7 @@ const formatPhoneNumber = (phoneNumber) => {
13068
13395
 
13069
13396
  // Copyright (c) Microsoft Corporation.
13070
13397
  // Licensed under the MIT license.
13071
- var __awaiter$n = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
13398
+ var __awaiter$r = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
13072
13399
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
13073
13400
  return new (P || (P = Promise))(function (resolve, reject) {
13074
13401
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -13110,16 +13437,16 @@ const DialpadButton = (props) => {
13110
13437
  const theme = react.useTheme();
13111
13438
  const { digit, index, onClick, onLongPress, isMobile = false } = props;
13112
13439
  const useLongPressProps = React__default['default'].useMemo(() => ({
13113
- onClick: () => __awaiter$n(void 0, void 0, void 0, function* () {
13440
+ onClick: () => __awaiter$r(void 0, void 0, void 0, function* () {
13114
13441
  onClick(digit, index);
13115
13442
  }),
13116
- onLongPress: () => __awaiter$n(void 0, void 0, void 0, function* () {
13443
+ onLongPress: () => __awaiter$r(void 0, void 0, void 0, function* () {
13117
13444
  onLongPress(digit, index);
13118
13445
  }),
13119
13446
  touchEventsOnly: isMobile
13120
13447
  }), [digit, index, isMobile, onClick, onLongPress]);
13121
13448
  const longPressHandlers = useLongPress(useLongPressProps);
13122
- return (React__default['default'].createElement(react.DefaultButton, Object.assign({ "data-test-id": `dialpad-button-${props.index}`, styles: react.concatStyleSets(buttonStyles(), (_a = props.styles) === null || _a === void 0 ? void 0 : _a.button) }, longPressHandlers),
13449
+ return (React__default['default'].createElement(react.DefaultButton, Object.assign({ "data-test-id": `dialpad-button-${props.index}`, styles: react.concatStyleSets(buttonStyles$1(), (_a = props.styles) === null || _a === void 0 ? void 0 : _a.button) }, longPressHandlers),
13123
13450
  React__default['default'].createElement(react.Stack, null,
13124
13451
  React__default['default'].createElement(react.Text, { className: react.mergeStyles(digitStyles(theme), (_b = props.styles) === null || _b === void 0 ? void 0 : _b.digit) }, props.digit),
13125
13452
  React__default['default'].createElement(react.Text, { className: react.mergeStyles(letterStyles(theme), (_c = props.styles) === null || _c === void 0 ? void 0 : _c.letter) }, (_d = props.letter) !== null && _d !== void 0 ? _d : ' '))));
@@ -13617,13 +13944,13 @@ const _VideoBackgroundEffectsPicker = (props) => {
13617
13944
  /**
13618
13945
  * @private
13619
13946
  */
13620
- react.mergeStyles({
13947
+ const iconClassName = react.mergeStyles({
13621
13948
  marginRight: _pxToRem(8)
13622
13949
  });
13623
13950
  /**
13624
13951
  * @private
13625
13952
  */
13626
- react.mergeStyles({
13953
+ const displayNameClassName = react.mergeStyles({
13627
13954
  fontWeight: 400,
13628
13955
  fontSize: _pxToRem(12),
13629
13956
  lineHeight: _pxToRem(16)
@@ -13631,7 +13958,7 @@ react.mergeStyles({
13631
13958
  /**
13632
13959
  * @private
13633
13960
  */
13634
- react.mergeStyles({
13961
+ const captionClassName = react.mergeStyles({
13635
13962
  fontWeight: 400,
13636
13963
  fontSize: _pxToRem(16),
13637
13964
  lineHeight: _pxToRem(22)
@@ -13639,17 +13966,278 @@ react.mergeStyles({
13639
13966
  /**
13640
13967
  * @private
13641
13968
  */
13642
- react.mergeStyles({
13969
+ const captionContainerClassName = react.mergeStyles({
13643
13970
  marginTop: _pxToRem(6),
13644
- marginBottom: _pxToRem(6)
13971
+ marginBottom: _pxToRem(6),
13972
+ overflowAnchor: 'none'
13645
13973
  });
13646
13974
  /**
13647
13975
  * @private
13648
13976
  */
13649
- react.mergeStyles({
13977
+ const captionsBannerClassName = react.mergeStyles({
13650
13978
  height: _pxToRem(100),
13651
- overflow: 'scroll'
13979
+ overflowY: 'auto',
13980
+ overflowX: 'hidden'
13981
+ });
13982
+ /**
13983
+ * @private
13984
+ */
13985
+ const captionsContentContainerClassName = react.mergeStyles({
13986
+ minWidth: 0
13987
+ });
13988
+ /**
13989
+ * @private
13990
+ */
13991
+ const displayNameContainerClassName = react.mergeStyles({
13992
+ overflow: 'hidden',
13993
+ textOverflow: 'ellipsis'
13994
+ });
13995
+
13996
+ // Copyright (c) Microsoft Corporation.
13997
+ /**
13998
+ * @internal
13999
+ * A component for displaying a single line of caption
14000
+ */
14001
+ const _Caption = (props) => {
14002
+ const { displayName, userId, captionText, onRenderAvatar } = props;
14003
+ const personaOptions = {
14004
+ hidePersonaDetails: true,
14005
+ size: react.PersonaSize.size32,
14006
+ text: displayName,
14007
+ showOverflowTooltip: false,
14008
+ initialsTextColor: 'white',
14009
+ styles: {
14010
+ root: {
14011
+ margin: '0.25rem'
14012
+ }
14013
+ }
14014
+ };
14015
+ const userIcon = onRenderAvatar ? onRenderAvatar(userId !== null && userId !== void 0 ? userId : '', personaOptions) : React__default['default'].createElement(react.Persona, Object.assign({}, personaOptions));
14016
+ return (React__default['default'].createElement(react.Stack, { horizontal: true, verticalAlign: "start", horizontalAlign: "start" },
14017
+ React__default['default'].createElement(react.Stack.Item, { className: iconClassName }, userIcon),
14018
+ React__default['default'].createElement(react.Stack, { verticalAlign: "start", className: captionsContentContainerClassName },
14019
+ React__default['default'].createElement(react.Stack.Item, { className: displayNameContainerClassName },
14020
+ React__default['default'].createElement(react.Text, { className: displayNameClassName }, displayName)),
14021
+ React__default['default'].createElement(react.Stack.Item, null,
14022
+ React__default['default'].createElement(react.Text, { className: captionClassName }, captionText)))));
14023
+ };
14024
+
14025
+ // Copyright (c) Microsoft Corporation.
14026
+ /**
14027
+ * @internal
14028
+ * A component for displaying a CaptionsBanner with user icon, displayName and captions text.
14029
+ */
14030
+ const _CaptionsBanner = (props) => {
14031
+ const { captions, isCaptionsOn, onRenderAvatar } = props;
14032
+ const captionsScrollDivRef = React.useRef(null);
14033
+ const [isAtBottomOfScroll, setIsAtBottomOfScroll] = React.useState(true);
14034
+ const scrollToBottom = () => {
14035
+ if (captionsScrollDivRef.current) {
14036
+ captionsScrollDivRef.current.scrollTop = captionsScrollDivRef.current.scrollHeight;
14037
+ }
14038
+ };
14039
+ const handleScrollToTheBottom = React.useCallback(() => {
14040
+ if (!captionsScrollDivRef.current) {
14041
+ return;
14042
+ }
14043
+ const atBottom = Math.ceil(captionsScrollDivRef.current.scrollTop) >=
14044
+ captionsScrollDivRef.current.scrollHeight - captionsScrollDivRef.current.clientHeight;
14045
+ setIsAtBottomOfScroll(atBottom);
14046
+ }, []);
14047
+ React.useEffect(() => {
14048
+ const captionsScrollDiv = captionsScrollDivRef.current;
14049
+ captionsScrollDiv === null || captionsScrollDiv === void 0 ? void 0 : captionsScrollDiv.addEventListener('scroll', handleScrollToTheBottom);
14050
+ return () => {
14051
+ captionsScrollDiv === null || captionsScrollDiv === void 0 ? void 0 : captionsScrollDiv.removeEventListener('scroll', handleScrollToTheBottom);
14052
+ };
14053
+ }, [handleScrollToTheBottom]);
14054
+ React.useEffect(() => {
14055
+ // only auto scroll to bottom is already is at bottom of scroll before new caption comes in
14056
+ if (isAtBottomOfScroll) {
14057
+ scrollToBottom();
14058
+ }
14059
+ }, [captions, isAtBottomOfScroll]);
14060
+ return (React__default['default'].createElement(React__default['default'].Fragment, null, isCaptionsOn && (React__default['default'].createElement("div", { "data-is-focusable": true },
14061
+ React__default['default'].createElement(reactNorthstar.Ref, { innerRef: captionsScrollDivRef },
14062
+ React__default['default'].createElement(react.Stack, { verticalAlign: "start", className: captionsBannerClassName }, captions.map((caption, key) => {
14063
+ return (React__default['default'].createElement("div", { key: key, className: captionContainerClassName, tabIndex: 0 },
14064
+ React__default['default'].createElement(_Caption, Object.assign({}, caption, { onRenderAvatar: onRenderAvatar }))));
14065
+ })))))));
14066
+ };
14067
+
14068
+ // Copyright (c) Microsoft Corporation.
14069
+ // Licensed under the MIT license.
14070
+ (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
14071
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14072
+ return new (P || (P = Promise))(function (resolve, reject) {
14073
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
14074
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
14075
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
14076
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
14077
+ });
14078
+ };
14079
+
14080
+ // Copyright (c) Microsoft Corporation.
14081
+ /**
14082
+ * @private
14083
+ */
14084
+ const themedCaptionsSettingsModalStyle = (theme) => ({
14085
+ main: {
14086
+ borderRadius: theme.effects.roundedCorner6,
14087
+ padding: _pxToRem(24),
14088
+ width: _pxToRem(440),
14089
+ height: _pxToRem(268),
14090
+ overflow: 'hidden'
14091
+ }
14092
+ });
14093
+ /**
14094
+ * @private
14095
+ */
14096
+ const titleClassName = react.mergeStyles({
14097
+ fontWeight: 600,
14098
+ fontSize: _pxToRem(20),
14099
+ lineHeight: _pxToRem(28)
14100
+ });
14101
+ /**
14102
+ * @private
14103
+ */
14104
+ const titleContainerClassName = react.mergeStyles({
14105
+ paddingBottom: _pxToRem(20)
14106
+ });
14107
+ /**
14108
+ * @private
14109
+ */
14110
+ const dropdownContainerClassName = react.mergeStyles({
14111
+ paddingBottom: _pxToRem(16),
14112
+ paddingTop: _pxToRem(16)
14113
+ });
14114
+ /**
14115
+ * @private
14116
+ */
14117
+ const dropdownInfoTextStyle = (theme) => react.mergeStyles({
14118
+ fontWeight: 400,
14119
+ fontSize: _pxToRem(12),
14120
+ lineHeight: _pxToRem(16),
14121
+ color: theme.palette.neutralSecondary
13652
14122
  });
14123
+ /**
14124
+ * @private
14125
+ */
14126
+ const buttonsContainerClassName = react.mergeStyles({
14127
+ paddingTop: _pxToRem(16)
14128
+ });
14129
+ /**
14130
+ * @private
14131
+ */
14132
+ const buttonStyles = (theme) => {
14133
+ return {
14134
+ root: {
14135
+ borderRadius: _pxToRem(2),
14136
+ margin: _pxToRem(8)
14137
+ },
14138
+ rootHovered: {
14139
+ backgroundColor: theme.palette.themePrimary,
14140
+ borderColor: theme.palette.themePrimary,
14141
+ color: theme.palette.white
14142
+ },
14143
+ rootFocused: {
14144
+ backgroundColor: theme.palette.themePrimary,
14145
+ borderColor: theme.palette.themePrimary,
14146
+ color: theme.palette.white
14147
+ },
14148
+ rootPressed: {
14149
+ backgroundColor: theme.palette.themePrimary,
14150
+ borderColor: theme.palette.themePrimary,
14151
+ color: theme.palette.white
14152
+ }
14153
+ };
14154
+ };
14155
+ /**
14156
+ * @private
14157
+ */
14158
+ const dropdownStyles = {
14159
+ callout: { height: _pxToRem(300), overflow: 'auto' }
14160
+ };
14161
+
14162
+ var __awaiter$q = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
14163
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14164
+ return new (P || (P = Promise))(function (resolve, reject) {
14165
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
14166
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
14167
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
14168
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
14169
+ });
14170
+ };
14171
+ /**
14172
+ * @internal
14173
+ * a component for setting spoken languages
14174
+ */
14175
+ const _CaptionsSettingsModal = (props) => {
14176
+ const { supportedSpokenLanguages, currentSpokenLanguage, isCaptionsFeatureActive, showModal, onSetSpokenLanguage, onDismissCaptionsSettings, onStartCaptions, strings, captionsAvailableLanguageStrings } = props;
14177
+ const theme = react.useTheme();
14178
+ const [selectedItem, setSelectedItem] = React.useState({
14179
+ key: currentSpokenLanguage !== '' ? currentSpokenLanguage : defaultSpokenLanguage$1,
14180
+ text: currentSpokenLanguage !== '' ? currentSpokenLanguage : defaultSpokenLanguage$1
14181
+ });
14182
+ const onDismiss = React.useCallback(() => {
14183
+ if (onDismissCaptionsSettings) {
14184
+ onDismissCaptionsSettings();
14185
+ }
14186
+ }, [onDismissCaptionsSettings]);
14187
+ const onConfirm = React.useCallback(() => __awaiter$q(void 0, void 0, void 0, function* () {
14188
+ const languageCode = selectedItem.key.toString();
14189
+ if (isCaptionsFeatureActive) {
14190
+ onSetSpokenLanguage(languageCode);
14191
+ }
14192
+ else {
14193
+ yield onStartCaptions({ spokenLanguage: languageCode });
14194
+ // set spoken language when start captions with a spoken language specified.
14195
+ // this is to fix the bug when a second user starts captions with a new spoken language, captions bot ignore that spoken language
14196
+ onSetSpokenLanguage(languageCode);
14197
+ }
14198
+ onDismiss();
14199
+ }), [onDismiss, isCaptionsFeatureActive, onSetSpokenLanguage, onStartCaptions, selectedItem.key]);
14200
+ const dropdownOptions = React.useMemo(() => {
14201
+ return supportedSpokenLanguages.map((languageCode) => {
14202
+ return {
14203
+ key: languageCode,
14204
+ text: captionsAvailableLanguageStrings ? captionsAvailableLanguageStrings[languageCode] : languageCode
14205
+ };
14206
+ });
14207
+ }, [supportedSpokenLanguages, captionsAvailableLanguageStrings]);
14208
+ const onChange = (event, option) => {
14209
+ if (option) {
14210
+ setSelectedItem(option);
14211
+ }
14212
+ };
14213
+ const calloutProps = React.useMemo(() => ({
14214
+ preventDismissOnEvent: _preventDismissOnEvent
14215
+ }), []);
14216
+ const CaptionsSettingsComponent = React.useCallback(() => {
14217
+ return (React__default['default'].createElement(react.Stack, null,
14218
+ React__default['default'].createElement(react.Dropdown, { label: strings === null || strings === void 0 ? void 0 : strings.captionsSettingsDropdownLabel, selectedKey: selectedItem ? selectedItem.key : undefined, onChange: onChange, calloutProps: calloutProps, placeholder: currentSpokenLanguage !== '' ? currentSpokenLanguage : defaultSpokenLanguage$1, options: dropdownOptions, styles: dropdownStyles }),
14219
+ React__default['default'].createElement(react.Text, { className: dropdownInfoTextStyle(theme) }, strings === null || strings === void 0 ? void 0 : strings.captionsSettingsDropdownInfoText)));
14220
+ }, [
14221
+ calloutProps,
14222
+ currentSpokenLanguage,
14223
+ dropdownOptions,
14224
+ selectedItem,
14225
+ strings === null || strings === void 0 ? void 0 : strings.captionsSettingsDropdownInfoText,
14226
+ strings === null || strings === void 0 ? void 0 : strings.captionsSettingsDropdownLabel,
14227
+ theme
14228
+ ]);
14229
+ const CaptionsSettingsModalStyle = React.useMemo(() => themedCaptionsSettingsModalStyle(theme), [theme]);
14230
+ return (React__default['default'].createElement(React__default['default'].Fragment, null, React__default['default'].createElement(react.Modal, { titleAriaId: strings === null || strings === void 0 ? void 0 : strings.captionsSettingsModalAriaLabel, isOpen: showModal, onDismiss: onDismiss, isBlocking: true, styles: CaptionsSettingsModalStyle },
14231
+ React__default['default'].createElement(react.Stack, { horizontal: true, horizontalAlign: "space-between", verticalAlign: "center", className: titleContainerClassName },
14232
+ React__default['default'].createElement(react.Text, { className: titleClassName }, strings === null || strings === void 0 ? void 0 : strings.captionsSettingsModalTitle),
14233
+ React__default['default'].createElement(react.IconButton, { iconProps: { iconName: 'Cancel' }, ariaLabel: strings === null || strings === void 0 ? void 0 : strings.captionsSettingsCloseModalButtonAriaLabel, onClick: onDismiss, style: { color: theme.palette.black } })),
14234
+ React__default['default'].createElement(react.Stack, { className: dropdownContainerClassName }, CaptionsSettingsComponent()),
14235
+ React__default['default'].createElement(react.Stack, { horizontal: true, horizontalAlign: "end", className: buttonsContainerClassName },
14236
+ React__default['default'].createElement(react.PrimaryButton, { styles: buttonStyles(theme), onClick: onConfirm },
14237
+ React__default['default'].createElement("span", null, strings === null || strings === void 0 ? void 0 : strings.captionsSettingsConfirmButtonLabel)),
14238
+ React__default['default'].createElement(react.DefaultButton, { onClick: onDismiss, styles: buttonStyles(theme) },
14239
+ React__default['default'].createElement("span", null, strings === null || strings === void 0 ? void 0 : strings.captionsSettingsCancelButtonLabel))))));
14240
+ };
13653
14241
 
13654
14242
  // Copyright (c) Microsoft Corporation.
13655
14243
  // Licensed under the MIT license.
@@ -14191,7 +14779,7 @@ const findConditionalCompiledSelector = (component) => {
14191
14779
 
14192
14780
  // Copyright (c) Microsoft Corporation.
14193
14781
  // Licensed under the MIT license.
14194
- var __awaiter$m = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
14782
+ var __awaiter$p = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
14195
14783
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14196
14784
  return new (P || (P = Promise))(function (resolve, reject) {
14197
14785
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -14214,35 +14802,35 @@ const createDefaultChatHandlers = memoizeOne__default['default']((chatClient, ch
14214
14802
  let messageIterator = undefined;
14215
14803
  let readReceiptIterator = undefined;
14216
14804
  return {
14217
- onSendMessage: (content, options) => __awaiter$m(void 0, void 0, void 0, function* () {
14805
+ onSendMessage: (content, options) => __awaiter$p(void 0, void 0, void 0, function* () {
14218
14806
  const sendMessageRequest = {
14219
14807
  content,
14220
14808
  senderDisplayName: chatClient.getState().displayName
14221
14809
  };
14222
14810
  yield chatThreadClient.sendMessage(sendMessageRequest, options);
14223
14811
  }),
14224
- onUpdateMessage: (messageId, content, metadata, options) => __awaiter$m(void 0, void 0, void 0, function* () {
14812
+ onUpdateMessage: (messageId, content, metadata, options) => __awaiter$p(void 0, void 0, void 0, function* () {
14225
14813
  const updatedMetadata = metadata ? Object.assign({}, metadata) : {};
14226
14814
  updatedMetadata['fileSharingMetadata'] = JSON.stringify((options === null || options === void 0 ? void 0 : options.attachedFilesMetadata) || []);
14227
14815
  yield chatThreadClient.updateMessage(messageId, { content, metadata: updatedMetadata });
14228
14816
  }),
14229
- onDeleteMessage: (messageId) => __awaiter$m(void 0, void 0, void 0, function* () {
14817
+ onDeleteMessage: (messageId) => __awaiter$p(void 0, void 0, void 0, function* () {
14230
14818
  yield chatThreadClient.deleteMessage(messageId);
14231
14819
  }),
14232
14820
  // This handler is designed for chatThread to consume
14233
- onMessageSeen: (chatMessageId) => __awaiter$m(void 0, void 0, void 0, function* () {
14821
+ onMessageSeen: (chatMessageId) => __awaiter$p(void 0, void 0, void 0, function* () {
14234
14822
  yield chatThreadClient.sendReadReceipt({ chatMessageId });
14235
14823
  }),
14236
- onTyping: () => __awaiter$m(void 0, void 0, void 0, function* () {
14824
+ onTyping: () => __awaiter$p(void 0, void 0, void 0, function* () {
14237
14825
  yield chatThreadClient.sendTypingNotification();
14238
14826
  }),
14239
- onRemoveParticipant: (userId) => __awaiter$m(void 0, void 0, void 0, function* () {
14827
+ onRemoveParticipant: (userId) => __awaiter$p(void 0, void 0, void 0, function* () {
14240
14828
  yield chatThreadClient.removeParticipant(fromFlatCommunicationIdentifier(userId));
14241
14829
  }),
14242
- updateThreadTopicName: (topicName) => __awaiter$m(void 0, void 0, void 0, function* () {
14830
+ updateThreadTopicName: (topicName) => __awaiter$p(void 0, void 0, void 0, function* () {
14243
14831
  yield chatThreadClient.updateTopic(topicName);
14244
14832
  }),
14245
- onLoadPreviousChatMessages: (messagesToLoad) => __awaiter$m(void 0, void 0, void 0, function* () {
14833
+ onLoadPreviousChatMessages: (messagesToLoad) => __awaiter$p(void 0, void 0, void 0, function* () {
14246
14834
  var _a, _b, _c;
14247
14835
  if (messageIterator === undefined) {
14248
14836
  // Lazy definition so that errors in the method call are reported correctly.
@@ -15014,7 +15602,7 @@ const chatStatefulLogger = logger.createClientLogger('communication-react:chat-s
15014
15602
 
15015
15603
  // Copyright (c) Microsoft Corporation.
15016
15604
  // Licensed under the MIT license.
15017
- var __awaiter$l = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
15605
+ var __awaiter$o = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
15018
15606
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15019
15607
  return new (P || (P = Promise))(function (resolve, reject) {
15020
15608
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -15289,7 +15877,7 @@ class ChatContext$1 {
15289
15877
  * @throws ChatError. Exceptions thrown from `f` are tagged with the failed `target.
15290
15878
  */
15291
15879
  withAsyncErrorTeedToState(f, target) {
15292
- return (...args) => __awaiter$l(this, void 0, void 0, function* () {
15880
+ return (...args) => __awaiter$o(this, void 0, void 0, function* () {
15293
15881
  try {
15294
15882
  return yield f(...args);
15295
15883
  }
@@ -15401,7 +15989,7 @@ const convertChatMessage = (message, status = 'delivered', clientMessageId) => {
15401
15989
 
15402
15990
  // Copyright (c) Microsoft Corporation.
15403
15991
  // Licensed under the MIT license.
15404
- var __awaiter$k = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
15992
+ var __awaiter$n = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
15405
15993
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15406
15994
  return new (P || (P = Promise))(function (resolve, reject) {
15407
15995
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -15486,7 +16074,7 @@ class EventSubscriber {
15486
16074
  };
15487
16075
  // This is a temporary fix that no participant message is received for onChatMessageReceived event, which should be handled by JS SDK.
15488
16076
  // Without the temporary fix, there are missing 'participant joined' and 'participant left' system messages in the chat thread.
15489
- this.fetchLastParticipantMessage = (threadId, actionType) => __awaiter$k(this, void 0, void 0, function* () {
16077
+ this.fetchLastParticipantMessage = (threadId, actionType) => __awaiter$n(this, void 0, void 0, function* () {
15490
16078
  var e_1, _a;
15491
16079
  try {
15492
16080
  for (var _b = __asyncValues$1(this.chatClient
@@ -15578,7 +16166,7 @@ class EventSubscriber {
15578
16166
 
15579
16167
  // Copyright (c) Microsoft Corporation.
15580
16168
  // Licensed under the MIT license.
15581
- var __awaiter$j = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
16169
+ var __awaiter$m = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
15582
16170
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15583
16171
  return new (P || (P = Promise))(function (resolve, reject) {
15584
16172
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -15600,7 +16188,7 @@ const createDecoratedIterator = (iteratorCreator, context, decorateFn) => {
15600
16188
  const threadsIterator = iteratorCreator(...args);
15601
16189
  return {
15602
16190
  next() {
15603
- return __awaiter$j(this, void 0, void 0, function* () {
16191
+ return __awaiter$m(this, void 0, void 0, function* () {
15604
16192
  const result = yield threadsIterator.next();
15605
16193
  if (!result.done && result.value) {
15606
16194
  decorateFn(result.value, context);
@@ -15615,7 +16203,7 @@ const createDecoratedIterator = (iteratorCreator, context, decorateFn) => {
15615
16203
  const pages = threadsIterator.byPage(settings);
15616
16204
  return {
15617
16205
  next() {
15618
- return __awaiter$j(this, void 0, void 0, function* () {
16206
+ return __awaiter$m(this, void 0, void 0, function* () {
15619
16207
  const result = yield pages.next();
15620
16208
  const page = result.value;
15621
16209
  if (!result.done && result.value) {
@@ -15699,7 +16287,7 @@ const createDecoratedListParticipants = (chatThreadClient, context) => {
15699
16287
 
15700
16288
  // Copyright (c) Microsoft Corporation.
15701
16289
  // Licensed under the MIT license.
15702
- var __awaiter$i = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
16290
+ var __awaiter$l = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
15703
16291
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15704
16292
  return new (P || (P = Promise))(function (resolve, reject) {
15705
16293
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -15718,14 +16306,14 @@ class ProxyChatThreadClient {
15718
16306
  return createDecoratedListMessages(chatThreadClient, this._context);
15719
16307
  }
15720
16308
  case 'getMessage': {
15721
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$i(this, void 0, void 0, function* () {
16309
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$l(this, void 0, void 0, function* () {
15722
16310
  const message = yield chatThreadClient.getMessage(...args);
15723
16311
  this._context.setChatMessage(chatThreadClient.threadId, convertChatMessage(message));
15724
16312
  return message;
15725
16313
  }), 'ChatThreadClient.getMessage');
15726
16314
  }
15727
16315
  case 'sendMessage': {
15728
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$i(this, void 0, void 0, function* () {
16316
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$l(this, void 0, void 0, function* () {
15729
16317
  // Retry logic?
15730
16318
  const [request, options] = args;
15731
16319
  const { content } = request;
@@ -15765,7 +16353,7 @@ class ProxyChatThreadClient {
15765
16353
  }), 'ChatThreadClient.sendMessage');
15766
16354
  }
15767
16355
  case 'addParticipants': {
15768
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$i(this, void 0, void 0, function* () {
16356
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$l(this, void 0, void 0, function* () {
15769
16357
  const result = yield chatThreadClient.addParticipants(...args);
15770
16358
  const [addRequest] = args;
15771
16359
  const participantsToAdd = addRequest.participants;
@@ -15774,7 +16362,7 @@ class ProxyChatThreadClient {
15774
16362
  }), 'ChatThreadClient.addParticipants');
15775
16363
  }
15776
16364
  case 'deleteMessage': {
15777
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$i(this, void 0, void 0, function* () {
16365
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$l(this, void 0, void 0, function* () {
15778
16366
  // DeleteMessage is able to either delete local one(for failed message) or synced message
15779
16367
  const [messageId] = args;
15780
16368
  if (this._context.deleteLocalMessage(chatThreadClient.threadId, messageId)) {
@@ -15792,12 +16380,12 @@ class ProxyChatThreadClient {
15792
16380
  return createDecoratedListReadReceipts(chatThreadClient, this._context);
15793
16381
  }
15794
16382
  case 'sendTypingNotification': {
15795
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$i(this, void 0, void 0, function* () {
16383
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$l(this, void 0, void 0, function* () {
15796
16384
  return yield chatThreadClient.sendTypingNotification(...args);
15797
16385
  }), 'ChatThreadClient.sendTypingNotification');
15798
16386
  }
15799
16387
  case 'removeParticipant': {
15800
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$i(this, void 0, void 0, function* () {
16388
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$l(this, void 0, void 0, function* () {
15801
16389
  const result = yield chatThreadClient.removeParticipant(...args);
15802
16390
  const [removeIdentifier] = args;
15803
16391
  this._context.deleteParticipant(chatThreadClient.threadId, communicationCommon.getIdentifierKind(removeIdentifier));
@@ -15805,7 +16393,7 @@ class ProxyChatThreadClient {
15805
16393
  }), 'ChatThreadClient.removeParticipant');
15806
16394
  }
15807
16395
  case 'updateMessage': {
15808
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$i(this, void 0, void 0, function* () {
16396
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$l(this, void 0, void 0, function* () {
15809
16397
  const result = yield chatThreadClient.updateMessage(...args);
15810
16398
  const [messageId, updateOption] = args;
15811
16399
  this._context.updateChatMessageContent(chatThreadClient.threadId, messageId, updateOption === null || updateOption === void 0 ? void 0 : updateOption.content);
@@ -15813,7 +16401,7 @@ class ProxyChatThreadClient {
15813
16401
  }), 'ChatThreadClient.updateMessage');
15814
16402
  }
15815
16403
  case 'updateTopic': {
15816
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$i(this, void 0, void 0, function* () {
16404
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$l(this, void 0, void 0, function* () {
15817
16405
  const result = yield chatThreadClient.updateTopic(...args);
15818
16406
  const [topic] = args;
15819
16407
  this._context.updateThreadTopic(chatThreadClient.threadId, topic);
@@ -15821,7 +16409,7 @@ class ProxyChatThreadClient {
15821
16409
  }), 'ChatThreadClient.updateTopic');
15822
16410
  }
15823
16411
  case 'getProperties': {
15824
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$i(this, void 0, void 0, function* () {
16412
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$l(this, void 0, void 0, function* () {
15825
16413
  const result = yield chatThreadClient.getProperties(...args);
15826
16414
  this._context.updateThread(chatThreadClient.threadId, result);
15827
16415
  return result;
@@ -15858,7 +16446,7 @@ const createDecoratedListThreads = (chatClient, context) => {
15858
16446
 
15859
16447
  // Copyright (c) Microsoft Corporation.
15860
16448
  // Licensed under the MIT license.
15861
- var __awaiter$h = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
16449
+ var __awaiter$k = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
15862
16450
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15863
16451
  return new (P || (P = Promise))(function (resolve, reject) {
15864
16452
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -15877,7 +16465,7 @@ const proxyChatClient = {
15877
16465
  switch (prop) {
15878
16466
  case 'createChatThread': {
15879
16467
  return context.withAsyncErrorTeedToState(function (...args) {
15880
- return __awaiter$h(this, void 0, void 0, function* () {
16468
+ return __awaiter$k(this, void 0, void 0, function* () {
15881
16469
  const result = yield chatClient.createChatThread(...args);
15882
16470
  const thread = result.chatThread;
15883
16471
  if (thread) {
@@ -15890,7 +16478,7 @@ const proxyChatClient = {
15890
16478
  }
15891
16479
  case 'deleteChatThread': {
15892
16480
  return context.withAsyncErrorTeedToState(function (...args) {
15893
- return __awaiter$h(this, void 0, void 0, function* () {
16481
+ return __awaiter$k(this, void 0, void 0, function* () {
15894
16482
  const result = yield chatClient.deleteChatThread(...args);
15895
16483
  context.deleteThread(args[0]);
15896
16484
  return result;
@@ -15910,7 +16498,7 @@ const proxyChatClient = {
15910
16498
  }
15911
16499
  case 'startRealtimeNotifications': {
15912
16500
  return context.withAsyncErrorTeedToState(function (...args) {
15913
- return __awaiter$h(this, void 0, void 0, function* () {
16501
+ return __awaiter$k(this, void 0, void 0, function* () {
15914
16502
  const ret = yield chatClient.startRealtimeNotifications(...args);
15915
16503
  if (!receiver.eventSubscriber) {
15916
16504
  receiver.eventSubscriber = new EventSubscriber(chatClient, context);
@@ -15921,7 +16509,7 @@ const proxyChatClient = {
15921
16509
  }
15922
16510
  case 'stopRealtimeNotifications': {
15923
16511
  return context.withAsyncErrorTeedToState(function (...args) {
15924
- return __awaiter$h(this, void 0, void 0, function* () {
16512
+ return __awaiter$k(this, void 0, void 0, function* () {
15925
16513
  const ret = yield chatClient.stopRealtimeNotifications(...args);
15926
16514
  if (receiver.eventSubscriber) {
15927
16515
  receiver.eventSubscriber.unsubscribe();
@@ -16108,7 +16696,7 @@ const CallCompositeIcon = (props) => (React__default['default'].createElement(re
16108
16696
  */
16109
16697
  const CallWithChatCompositeIcon = (props) => (React__default['default'].createElement(react.FontIcon, Object.assign({}, props)));
16110
16698
 
16111
- var call$d={cameraLabel:"Camera",noCamerasLabel:"No cameras found",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",chatButtonLabel:"Chat",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",effects:"Effects",blurBackgroundEffectButtonLabel:"Blur",blurBackgroundTooltip:"Blur Background",removeBackgroundEffectButtonLabel:"None",removeBackgroundTooltip:"Remove Background",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",deniedPermissionToRoomDetails:"You do not have permission to join this room.",deniedPermissionToRoomTitle:"Permission denied to room",peopleButtonLabel:"People",peoplePaneTitle:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",roomNotFoundDetails:"Room ID provided is not valid.",roomNotFoundTitle:"Room not found",soundLabel:"Sound",noMicrophonesLabel:"No microphones found",noSpeakersLabel:"No speakers found",startCallButtonLabel:"Start call",openDialpadButtonLabel:"Dial phone number",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",moreButtonCallingLabel:"More",resumeCallButtonLabel:"Resume",resumingCallButtonLabel:"Resuming...",resumeCallButtonAriaLabel:"Resume call",resumingCallButtonAriaLabel:"Resume call",holdScreenLabel:"You're on hold",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number",outboundCallingNoticeString:"Calling...",participantJoinedNoticeString:"{displayName} joined",twoParticipantJoinedNoticeString:"{displayName1} and {displayName2} have joined",threeParticipantJoinedNoticeString:"{displayName1}, {displayName2} and {displayName3} have joined",participantLeftNoticeString:"{displayName} left",twoParticipantLeftNoticeString:"{displayName1} and {displayName2} have left",threeParticipantLeftNoticeString:"{displayName1}, {displayName2} and {displayName3} have left",unnamedParticipantString:"unnamed participant",manyUnnamedParticipantsJoined:"unnamed participant and {numOfParticipants} other participants joined",manyUnnamedParticipantsLeft:"unnamed participant and {numOfParticipants} other participants left",manyParticipantsJoined:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants joined",manyParticipantsLeft:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants left"};var chat$d={chatListHeader:"In this chat",uploadFile:"Upload File"};var callWithChat$d={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",dismissSidePaneButtonLabel:"Close",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",peopleButtonLabel:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",peoplePaneTitle:"People",pictureInPictureTileAriaLabel:"Video Feeds. Click to return to call screen.",removeMenuLabel:"Remove",openDialpadButtonLabel:"Dial phone number",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number"};var en_US = {call:call$d,chat:chat$d,callWithChat:callWithChat$d};
16699
+ var call$d={cameraLabel:"Camera",noCamerasLabel:"No cameras found",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",chatButtonLabel:"Chat",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",effects:"Effects",blurBackgroundEffectButtonLabel:"Blur",blurBackgroundTooltip:"Blur Background",removeBackgroundEffectButtonLabel:"None",removeBackgroundTooltip:"Remove Background",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",deniedPermissionToRoomDetails:"You do not have permission to join this room.",deniedPermissionToRoomTitle:"Permission denied to room",peopleButtonLabel:"People",peoplePaneTitle:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",roomNotFoundDetails:"Room ID provided is not valid.",roomNotFoundTitle:"Room not found",soundLabel:"Sound",noMicrophonesLabel:"No microphones found",noSpeakersLabel:"No speakers found",startCallButtonLabel:"Start call",openDialpadButtonLabel:"Dial phone number",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",moreButtonCallingLabel:"More",resumeCallButtonLabel:"Resume",resumingCallButtonLabel:"Resuming...",resumeCallButtonAriaLabel:"Resume call",resumingCallButtonAriaLabel:"Resume call",holdScreenLabel:"You're on hold",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number",outboundCallingNoticeString:"Calling...",participantJoinedNoticeString:"{displayName} joined",twoParticipantJoinedNoticeString:"{displayName1} and {displayName2} have joined",threeParticipantJoinedNoticeString:"{displayName1}, {displayName2} and {displayName3} have joined",participantLeftNoticeString:"{displayName} left",twoParticipantLeftNoticeString:"{displayName1} and {displayName2} have left",threeParticipantLeftNoticeString:"{displayName1}, {displayName2} and {displayName3} have left",unnamedParticipantString:"unnamed participant",manyUnnamedParticipantsJoined:"unnamed participant and {numOfParticipants} other participants joined",manyUnnamedParticipantsLeft:"unnamed participant and {numOfParticipants} other participants left",manyParticipantsJoined:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants joined",manyParticipantsLeft:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants left",liveCaptionsLabel:"Live captions",captionsSettingsLabel:"Caption settings",startCaptionsButtonOnLabel:"Turn on captions",startCaptionsButtonOffLabel:"Turn off captions",startCaptionsButtonTooltipOnContent:"Turn off captions",startCaptionsButtonTooltipOffContent:"Turn on captions",captionsSettingsModalTitle:"What language is being spoken?",captionsSettingsDropdownLabel:"Spoken language",captionsSettingsDropdownInfoText:"Language that everyone on this call is speaking.",captionsSettingsConfirmButtonLabel:"Confirm",captionsSettingsCancelButtonLabel:"Cancel",captionsSettingsModalAriaLabel:"Captions Setting Modal",captionsSettingsCloseModalButtonAriaLabel:"Close Captions Setting",captionsBannerMoreButtonCallingLabel:"More",captionsBannerMoreButtonTooltip:"More options",captionsAvailableLanguageStrings:{"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"}};var chat$d={chatListHeader:"In this chat",uploadFile:"Upload File"};var callWithChat$d={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",dismissSidePaneButtonLabel:"Close",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",moreDrawerCaptionsMenuTitle:"Live captions",moreDrawerSpokenLanguageMenuTitle:"Spoken language",peopleButtonLabel:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",peoplePaneTitle:"People",pictureInPictureTileAriaLabel:"Video Feeds. Click to return to call screen.",removeMenuLabel:"Remove",openDialpadButtonLabel:"Dial phone number",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number"};var en_US = {call:call$d,chat:chat$d,callWithChat:callWithChat$d};
16112
16700
 
16113
16701
  var call$c={cameraLabel:"Camera",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",chatButtonLabel:"Chat",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",deniedPermissionToRoomDetails:"You do not have permission to join this room.",deniedPermissionToRoomTitle:"Permission denied to room",peopleButtonLabel:"People",peoplePaneTitle:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",roomNotFoundDetails:"Room ID provided is not valid.",roomNotFoundTitle:"Room not found",soundLabel:"Sound",startCallButtonLabel:"Start call",openDialpadButtonLabel:"Dial phone number",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",moreButtonCallingLabel:"More",resumeCallButtonLabel:"Resume",resumingCallButtonLabel:"Resuming...",resumeCallButtonAriaLabel:"Resume call",resumingCallButtonAriaLabel:"Resume call",holdScreenLabel:"You're on hold",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceHolderText:"Enter number",outboundCallingNoticeString:"Calling..."};var chat$c={chatListHeader:"In this chat",uploadFile:"Upload File"};var callWithChat$c={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",dismissSidePaneButtonLabel:"Close",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",peopleButtonLabel:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",peoplePaneTitle:"People",pictureInPictureTileAriaLabel:"Video Feeds. Click to return to call screen.",removeMenuLabel:"Remove",openDialpadButtonLabel:"Dial phone number",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceHolderText:"Enter number"};var en_GB = {call:call$c,chat:chat$c,callWithChat:callWithChat$c};
16114
16702
 
@@ -16526,7 +17114,7 @@ const END_CALL_PAGES = [
16526
17114
 
16527
17115
  // Copyright (c) Microsoft Corporation.
16528
17116
  // Licensed under the MIT license.
16529
- var __awaiter$g = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
17117
+ var __awaiter$j = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
16530
17118
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16531
17119
  return new (P || (P = Promise))(function (resolve, reject) {
16532
17120
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -16562,7 +17150,7 @@ const isCameraOn = (state) => {
16562
17150
  /**
16563
17151
  * @private
16564
17152
  */
16565
- const startSelectedVideoEffect = (adapter) => __awaiter$g(void 0, void 0, void 0, function* () {
17153
+ const startSelectedVideoEffect = (adapter) => __awaiter$j(void 0, void 0, void 0, function* () {
16566
17154
  if (adapter.getState().selectedVideoBackgroundEffect) {
16567
17155
  const selectedVideoBackgroundEffect = adapter.getState().selectedVideoBackgroundEffect;
16568
17156
  if ((selectedVideoBackgroundEffect === null || selectedVideoBackgroundEffect === void 0 ? void 0 : selectedVideoBackgroundEffect.effectName) === 'blur') {
@@ -16767,7 +17355,7 @@ const isDisabled$2 = (option) => {
16767
17355
  /**
16768
17356
  * @returns Permissions state for the camera.
16769
17357
  */
16770
- const queryCameraPermissionFromPermissionsAPI = () => __awaiter$g(void 0, void 0, void 0, function* () {
17358
+ const queryCameraPermissionFromPermissionsAPI = () => __awaiter$j(void 0, void 0, void 0, function* () {
16771
17359
  try {
16772
17360
  return (yield navigator.permissions.query({ name: 'camera' })).state;
16773
17361
  }
@@ -16780,7 +17368,7 @@ const queryCameraPermissionFromPermissionsAPI = () => __awaiter$g(void 0, void 0
16780
17368
  /**
16781
17369
  * @returns Permissions state for the microphone.
16782
17370
  */
16783
- const queryMicrophonePermissionFromPermissionsAPI = () => __awaiter$g(void 0, void 0, void 0, function* () {
17371
+ const queryMicrophonePermissionFromPermissionsAPI = () => __awaiter$j(void 0, void 0, void 0, function* () {
16784
17372
  try {
16785
17373
  return (yield navigator.permissions.query({ name: 'microphone' })).state;
16786
17374
  }
@@ -16797,7 +17385,7 @@ const queryMicrophonePermissionFromPermissionsAPI = () => __awaiter$g(void 0, vo
16797
17385
  * If permission API is not supported on this browser, permission state is set to unsupported.
16798
17386
  * @private
16799
17387
  */
16800
- const getDevicePermissionState = (setVideoState, setAudioState) => __awaiter$g(void 0, void 0, void 0, function* () {
17388
+ const getDevicePermissionState = (setVideoState, setAudioState) => __awaiter$j(void 0, void 0, void 0, function* () {
16801
17389
  const [cameraResult, microphoneResult] = yield Promise.all([
16802
17390
  queryCameraPermissionFromPermissionsAPI(),
16803
17391
  queryMicrophonePermissionFromPermissionsAPI()
@@ -16874,7 +17462,7 @@ const createParticipantModifier = (createModifiedParticipant) => {
16874
17462
 
16875
17463
  // Copyright (c) Microsoft Corporation.
16876
17464
  // Licensed under the MIT license.
16877
- var __awaiter$f = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
17465
+ var __awaiter$i = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
16878
17466
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16879
17467
  return new (P || (P = Promise))(function (resolve, reject) {
16880
17468
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -17009,9 +17597,9 @@ class AzureCommunicationChatAdapter {
17009
17597
  this.unsubscribeAllEvents();
17010
17598
  }
17011
17599
  fetchInitialData() {
17012
- return __awaiter$f(this, void 0, void 0, function* () {
17600
+ return __awaiter$i(this, void 0, void 0, function* () {
17013
17601
  // If get properties fails we dont want to try to get the participants after.
17014
- yield this.asyncTeeErrorToEventEmitter(() => __awaiter$f(this, void 0, void 0, function* () {
17602
+ yield this.asyncTeeErrorToEventEmitter(() => __awaiter$i(this, void 0, void 0, function* () {
17015
17603
  var e_1, _a;
17016
17604
  yield this.chatThreadClient.getProperties();
17017
17605
  try {
@@ -17045,8 +17633,8 @@ class AzureCommunicationChatAdapter {
17045
17633
  this.context.offStateChange(handler);
17046
17634
  }
17047
17635
  sendMessage(content, options = {}) {
17048
- return __awaiter$f(this, void 0, void 0, function* () {
17049
- yield this.asyncTeeErrorToEventEmitter(() => __awaiter$f(this, void 0, void 0, function* () {
17636
+ return __awaiter$i(this, void 0, void 0, function* () {
17637
+ yield this.asyncTeeErrorToEventEmitter(() => __awaiter$i(this, void 0, void 0, function* () {
17050
17638
  /* @conditional-compile-remove(file-sharing) */
17051
17639
  options.metadata = Object.assign(Object.assign({}, options.metadata), convertFileUploadsUiStateToMessageMetadata(this.context.getState().fileUploads));
17052
17640
  /* @conditional-compile-remove(file-sharing) */
@@ -17063,51 +17651,51 @@ class AzureCommunicationChatAdapter {
17063
17651
  });
17064
17652
  }
17065
17653
  sendReadReceipt(chatMessageId) {
17066
- return __awaiter$f(this, void 0, void 0, function* () {
17067
- yield this.asyncTeeErrorToEventEmitter(() => __awaiter$f(this, void 0, void 0, function* () {
17654
+ return __awaiter$i(this, void 0, void 0, function* () {
17655
+ yield this.asyncTeeErrorToEventEmitter(() => __awaiter$i(this, void 0, void 0, function* () {
17068
17656
  yield this.handlers.onMessageSeen(chatMessageId);
17069
17657
  }));
17070
17658
  });
17071
17659
  }
17072
17660
  sendTypingIndicator() {
17073
- return __awaiter$f(this, void 0, void 0, function* () {
17074
- yield this.asyncTeeErrorToEventEmitter(() => __awaiter$f(this, void 0, void 0, function* () {
17661
+ return __awaiter$i(this, void 0, void 0, function* () {
17662
+ yield this.asyncTeeErrorToEventEmitter(() => __awaiter$i(this, void 0, void 0, function* () {
17075
17663
  yield this.handlers.onTyping();
17076
17664
  }));
17077
17665
  });
17078
17666
  }
17079
17667
  removeParticipant(userId) {
17080
- return __awaiter$f(this, void 0, void 0, function* () {
17081
- yield this.asyncTeeErrorToEventEmitter(() => __awaiter$f(this, void 0, void 0, function* () {
17668
+ return __awaiter$i(this, void 0, void 0, function* () {
17669
+ yield this.asyncTeeErrorToEventEmitter(() => __awaiter$i(this, void 0, void 0, function* () {
17082
17670
  yield this.handlers.onRemoveParticipant(userId);
17083
17671
  }));
17084
17672
  });
17085
17673
  }
17086
17674
  setTopic(topicName) {
17087
- return __awaiter$f(this, void 0, void 0, function* () {
17088
- yield this.asyncTeeErrorToEventEmitter(() => __awaiter$f(this, void 0, void 0, function* () {
17675
+ return __awaiter$i(this, void 0, void 0, function* () {
17676
+ yield this.asyncTeeErrorToEventEmitter(() => __awaiter$i(this, void 0, void 0, function* () {
17089
17677
  yield this.handlers.updateThreadTopicName(topicName);
17090
17678
  }));
17091
17679
  });
17092
17680
  }
17093
17681
  loadPreviousChatMessages(messagesToLoad) {
17094
- return __awaiter$f(this, void 0, void 0, function* () {
17095
- return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$f(this, void 0, void 0, function* () {
17682
+ return __awaiter$i(this, void 0, void 0, function* () {
17683
+ return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$i(this, void 0, void 0, function* () {
17096
17684
  return yield this.handlers.onLoadPreviousChatMessages(messagesToLoad);
17097
17685
  }));
17098
17686
  });
17099
17687
  }
17100
17688
  updateMessage(messageId, content, metadata, options) {
17101
- return __awaiter$f(this, void 0, void 0, function* () {
17102
- return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$f(this, void 0, void 0, function* () {
17689
+ return __awaiter$i(this, void 0, void 0, function* () {
17690
+ return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$i(this, void 0, void 0, function* () {
17103
17691
  /* @conditional-compile-remove(file-sharing) */
17104
17692
  return yield this.handlers.onUpdateMessage(messageId, content, metadata, options);
17105
17693
  }));
17106
17694
  });
17107
17695
  }
17108
17696
  deleteMessage(messageId) {
17109
- return __awaiter$f(this, void 0, void 0, function* () {
17110
- return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$f(this, void 0, void 0, function* () {
17697
+ return __awaiter$i(this, void 0, void 0, function* () {
17698
+ return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$i(this, void 0, void 0, function* () {
17111
17699
  return yield this.handlers.onDeleteMessage(messageId);
17112
17700
  }));
17113
17701
  });
@@ -17142,8 +17730,8 @@ class AzureCommunicationChatAdapter {
17142
17730
  }
17143
17731
  /* @conditional-compile-remove(teams-inline-images) */
17144
17732
  downloadAuthenticatedAttachment(attachmentUrl) {
17145
- return __awaiter$f(this, void 0, void 0, function* () {
17146
- return this.asyncTeeErrorToEventEmitter(() => __awaiter$f(this, void 0, void 0, function* () {
17733
+ return __awaiter$i(this, void 0, void 0, function* () {
17734
+ return this.asyncTeeErrorToEventEmitter(() => __awaiter$i(this, void 0, void 0, function* () {
17147
17735
  if (this.credential === undefined) {
17148
17736
  const e = new Error();
17149
17737
  e['target'] = 'ChatThreadClient.getMessage';
@@ -17158,7 +17746,7 @@ class AzureCommunicationChatAdapter {
17158
17746
  throw e;
17159
17747
  }
17160
17748
  function fetchWithAuthentication(url, token) {
17161
- return __awaiter$f(this, void 0, void 0, function* () {
17749
+ return __awaiter$i(this, void 0, void 0, function* () {
17162
17750
  const headers = new Headers();
17163
17751
  headers.append('Authorization', `Bearer ${token}`);
17164
17752
  try {
@@ -17226,7 +17814,7 @@ class AzureCommunicationChatAdapter {
17226
17814
  this.emitter.off(event, listener);
17227
17815
  }
17228
17816
  asyncTeeErrorToEventEmitter(f) {
17229
- return __awaiter$f(this, void 0, void 0, function* () {
17817
+ return __awaiter$i(this, void 0, void 0, function* () {
17230
17818
  try {
17231
17819
  return yield f();
17232
17820
  }
@@ -17268,7 +17856,7 @@ const convertEventType = (type) => {
17268
17856
  *
17269
17857
  * @public
17270
17858
  */
17271
- const createAzureCommunicationChatAdapter = ({ endpoint: endpointUrl, userId, displayName, credential, threadId }) => __awaiter$f(void 0, void 0, void 0, function* () {
17859
+ const createAzureCommunicationChatAdapter = ({ endpoint: endpointUrl, userId, displayName, credential, threadId }) => __awaiter$i(void 0, void 0, void 0, function* () {
17272
17860
  if (!isValidIdentifier(userId)) {
17273
17861
  throw new Error('Provided userId is invalid. Please provide valid identifier object.');
17274
17862
  }
@@ -17337,7 +17925,7 @@ beforeDispose) => {
17337
17925
  if (!credential || !displayName || !endpoint || !threadId || !userId) {
17338
17926
  return;
17339
17927
  }
17340
- (() => __awaiter$f(void 0, void 0, void 0, function* () {
17928
+ (() => __awaiter$i(void 0, void 0, void 0, function* () {
17341
17929
  if (adapterRef.current) {
17342
17930
  // Dispose the old adapter when a new one is created.
17343
17931
  //
@@ -17369,7 +17957,7 @@ beforeDispose) => {
17369
17957
  // Dispose any existing adapter when the component unmounts.
17370
17958
  React.useEffect(() => {
17371
17959
  return () => {
17372
- (() => __awaiter$f(void 0, void 0, void 0, function* () {
17960
+ (() => __awaiter$i(void 0, void 0, void 0, function* () {
17373
17961
  if (adapterRef.current) {
17374
17962
  if (beforeDisposeRef.current) {
17375
17963
  yield beforeDisposeRef.current(adapterRef.current);
@@ -17393,7 +17981,7 @@ beforeDispose) => {
17393
17981
  function createAzureCommunicationChatAdapterFromClient(chatClient, chatThreadClient,
17394
17982
  /* @conditional-compile-remove(teams-inline-images) */
17395
17983
  options) {
17396
- return __awaiter$f(this, void 0, void 0, function* () {
17984
+ return __awaiter$i(this, void 0, void 0, function* () {
17397
17985
  return new AzureCommunicationChatAdapter(chatClient, chatThreadClient,
17398
17986
  /* @conditional-compile-remove(teams-inline-images) */ options);
17399
17987
  });
@@ -17606,7 +18194,7 @@ const sendboxContainerStyles = {
17606
18194
 
17607
18195
  // Copyright (c) Microsoft Corporation.
17608
18196
  // Licensed under the MIT license.
17609
- var __awaiter$e = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
18197
+ var __awaiter$h = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
17610
18198
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
17611
18199
  return new (P || (P = Promise))(function (resolve, reject) {
17612
18200
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -17627,7 +18215,7 @@ const AvatarPersona = (props) => {
17627
18215
  const { userId, dataProvider, text, imageUrl, imageInitials, initialsColor, initialsTextColor, showOverflowTooltip } = props;
17628
18216
  const [data, setData] = React.useState();
17629
18217
  React.useEffect(() => {
17630
- (() => __awaiter$e(void 0, void 0, void 0, function* () {
18218
+ (() => __awaiter$h(void 0, void 0, void 0, function* () {
17631
18219
  if (dataProvider && userId) {
17632
18220
  const newData = yield dataProvider(userId);
17633
18221
  if (avatarDeepDifferenceCheck(data, newData)) {
@@ -17991,7 +18579,7 @@ const FileDownloadErrorBar = (props) => {
17991
18579
 
17992
18580
  // Copyright (c) Microsoft Corporation.
17993
18581
  // Licensed under the MIT license.
17994
- var __awaiter$d = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
18582
+ var __awaiter$g = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
17995
18583
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
17996
18584
  return new (P || (P = Promise))(function (resolve, reject) {
17997
18585
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -18012,7 +18600,7 @@ const ChatScreen = (props) => {
18012
18600
  const theme = useTheme();
18013
18601
  React.useEffect(() => {
18014
18602
  // Initial data should be always fetched by the composite(or external caller) instead of the adapter
18015
- const fetchData = () => __awaiter$d(void 0, void 0, void 0, function* () {
18603
+ const fetchData = () => __awaiter$g(void 0, void 0, void 0, function* () {
18016
18604
  // Fetch initial data for adapter
18017
18605
  yield adapter.fetchInitialData();
18018
18606
  // Fetch initial set of messages. Without fetching messages here, if the Composite's adapter is changed the message thread does not load new messages.
@@ -18127,20 +18715,6 @@ const useAdapter = () => {
18127
18715
  return adapter;
18128
18716
  };
18129
18717
 
18130
- // Copyright (c) Microsoft Corporation.
18131
- // Licensed under the MIT license.
18132
- /** @private */
18133
- const containerDivStyles = { position: 'relative', width: '100%', height: '100%' };
18134
-
18135
- // Copyright (c) Microsoft Corporation.
18136
- // Licensed under the MIT license.
18137
- /**
18138
- * This minimum width is to make sure the side pane does not overlap with the composite when the screen is narrow.
18139
- *
18140
- * @private
18141
- */
18142
- const compositeMinWidthRem = 30;
18143
-
18144
18718
  // Copyright (c) Microsoft Corporation.
18145
18719
  /**
18146
18720
  * @private
@@ -18226,7 +18800,7 @@ const adaptCompositeState = (compositeState) => {
18226
18800
 
18227
18801
  // Copyright (c) Microsoft Corporation.
18228
18802
  // Licensed under the MIT license.
18229
- var __awaiter$c = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
18803
+ var __awaiter$f = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
18230
18804
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
18231
18805
  return new (P || (P = Promise))(function (resolve, reject) {
18232
18806
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -18245,103 +18819,131 @@ _component) => {
18245
18819
  return createCompositeHandlers(useAdapter());
18246
18820
  };
18247
18821
  const createCompositeHandlers = memoizeOne__default['default']((adapter) => ({
18248
- onCreateLocalStreamView: (options) => __awaiter$c(void 0, void 0, void 0, function* () {
18822
+ onCreateLocalStreamView: (options) => __awaiter$f(void 0, void 0, void 0, function* () {
18249
18823
  return yield adapter.createStreamView(undefined, options);
18250
18824
  }),
18251
- onCreateRemoteStreamView: (userId, options) => __awaiter$c(void 0, void 0, void 0, function* () {
18825
+ onCreateRemoteStreamView: (userId, options) => __awaiter$f(void 0, void 0, void 0, function* () {
18252
18826
  return yield adapter.createStreamView(userId, options);
18253
18827
  }),
18254
- onHangUp: (forEveryone) => __awaiter$c(void 0, void 0, void 0, function* () {
18828
+ onHangUp: (forEveryone) => __awaiter$f(void 0, void 0, void 0, function* () {
18255
18829
  yield adapter.leaveCall(forEveryone);
18256
18830
  }),
18257
18831
  /* @conditional-compile-remove(PSTN-calls) */
18258
- onToggleHold: () => __awaiter$c(void 0, void 0, void 0, function* () {
18832
+ onToggleHold: () => __awaiter$f(void 0, void 0, void 0, function* () {
18259
18833
  var _a;
18260
18834
  return ((_a = adapter.getState().call) === null || _a === void 0 ? void 0 : _a.state) === 'LocalHold' ? yield adapter.resumeCall() : yield adapter.holdCall();
18261
18835
  }),
18262
18836
  /* @conditional-compile-remove(PSTN-calls) */
18263
- onAddParticipant: (participant, options) => __awaiter$c(void 0, void 0, void 0, function* () {
18837
+ onAddParticipant: (participant, options) => __awaiter$f(void 0, void 0, void 0, function* () {
18264
18838
  return yield adapter.addParticipant(participant, options);
18265
18839
  }),
18266
18840
  /* @conditional-compile-remove(PSTN-calls) */
18267
- onSendDtmfTone: (dtmfTone) => __awaiter$c(void 0, void 0, void 0, function* () {
18841
+ onSendDtmfTone: (dtmfTone) => __awaiter$f(void 0, void 0, void 0, function* () {
18268
18842
  yield adapter.sendDtmfTone(dtmfTone);
18269
18843
  }),
18270
- onRemoveParticipant: (userId) => __awaiter$c(void 0, void 0, void 0, function* () {
18844
+ onRemoveParticipant: (userId) => __awaiter$f(void 0, void 0, void 0, function* () {
18271
18845
  yield adapter.removeParticipant(userId);
18272
18846
  }),
18273
- onSelectCamera: (deviceInfo, options) => __awaiter$c(void 0, void 0, void 0, function* () {
18847
+ onSelectCamera: (deviceInfo, options) => __awaiter$f(void 0, void 0, void 0, function* () {
18274
18848
  yield adapter.setCamera(deviceInfo, options);
18275
18849
  }),
18276
- onSelectMicrophone: (deviceInfo) => __awaiter$c(void 0, void 0, void 0, function* () {
18850
+ onSelectMicrophone: (deviceInfo) => __awaiter$f(void 0, void 0, void 0, function* () {
18277
18851
  yield adapter.setMicrophone(deviceInfo);
18278
18852
  }),
18279
- onSelectSpeaker: (deviceInfo) => __awaiter$c(void 0, void 0, void 0, function* () {
18853
+ onSelectSpeaker: (deviceInfo) => __awaiter$f(void 0, void 0, void 0, function* () {
18280
18854
  yield adapter.setSpeaker(deviceInfo);
18281
18855
  }),
18282
18856
  onStartCall: (participants, options) => {
18283
18857
  const rawIds = participants.map((participant) => toFlatCommunicationIdentifier(participant));
18284
18858
  return adapter.startCall(rawIds, options);
18285
18859
  },
18286
- onStartScreenShare: () => __awaiter$c(void 0, void 0, void 0, function* () {
18860
+ onStartScreenShare: () => __awaiter$f(void 0, void 0, void 0, function* () {
18287
18861
  yield adapter.startScreenShare();
18288
18862
  }),
18289
- onStopScreenShare: () => __awaiter$c(void 0, void 0, void 0, function* () {
18863
+ onStopScreenShare: () => __awaiter$f(void 0, void 0, void 0, function* () {
18290
18864
  yield adapter.stopScreenShare();
18291
18865
  }),
18292
- onToggleCamera: (options) => __awaiter$c(void 0, void 0, void 0, function* () {
18866
+ onToggleCamera: (options) => __awaiter$f(void 0, void 0, void 0, function* () {
18293
18867
  isCameraOn(adapter.getState()) ? yield adapter.stopCamera() : yield adapter.startCamera(options);
18294
18868
  }),
18295
- onToggleMicrophone: () => __awaiter$c(void 0, void 0, void 0, function* () {
18869
+ onToggleMicrophone: () => __awaiter$f(void 0, void 0, void 0, function* () {
18296
18870
  var _b;
18297
18871
  return ((_b = adapter.getState().call) === null || _b === void 0 ? void 0 : _b.isMuted) ? yield adapter.unmute() : yield adapter.mute();
18298
18872
  }),
18299
- onToggleScreenShare: () => __awaiter$c(void 0, void 0, void 0, function* () {
18873
+ onToggleScreenShare: () => __awaiter$f(void 0, void 0, void 0, function* () {
18300
18874
  var _c;
18301
18875
  return ((_c = adapter.getState().call) === null || _c === void 0 ? void 0 : _c.isScreenSharingOn)
18302
18876
  ? yield adapter.stopScreenShare()
18303
18877
  : yield adapter.startScreenShare();
18304
18878
  }),
18305
- onStartLocalVideo: () => __awaiter$c(void 0, void 0, void 0, function* () {
18879
+ onStartLocalVideo: () => __awaiter$f(void 0, void 0, void 0, function* () {
18306
18880
  if (adapter.getState().call) {
18307
18881
  return adapter.startCamera();
18308
18882
  }
18309
18883
  }),
18310
- onDisposeLocalStreamView: () => __awaiter$c(void 0, void 0, void 0, function* () {
18884
+ onDisposeLocalStreamView: () => __awaiter$f(void 0, void 0, void 0, function* () {
18311
18885
  return adapter.disposeStreamView();
18312
18886
  }),
18313
- onDisposeRemoteStreamView: (userId) => __awaiter$c(void 0, void 0, void 0, function* () {
18887
+ onDisposeRemoteStreamView: (userId) => __awaiter$f(void 0, void 0, void 0, function* () {
18314
18888
  return adapter.disposeStreamView(userId);
18315
18889
  }),
18316
18890
  /* @conditional-compile-remove(call-readiness) */
18317
- askDevicePermission: (constrain) => __awaiter$c(void 0, void 0, void 0, function* () {
18891
+ askDevicePermission: (constrain) => __awaiter$f(void 0, void 0, void 0, function* () {
18318
18892
  return adapter.askDevicePermission(constrain);
18319
18893
  }),
18320
18894
  /* @conditional-compile-remove(video-background-effects) */
18321
- onRemoveVideoBackgroundEffects: () => __awaiter$c(void 0, void 0, void 0, function* () {
18895
+ onRemoveVideoBackgroundEffects: () => __awaiter$f(void 0, void 0, void 0, function* () {
18322
18896
  return yield adapter.stopVideoBackgroundEffect();
18323
18897
  }),
18324
18898
  /* @conditional-compile-remove(video-background-effects) */
18325
- onBlurVideoBackground: (backgroundBlurConfig) => __awaiter$c(void 0, void 0, void 0, function* () {
18899
+ onBlurVideoBackground: (backgroundBlurConfig) => __awaiter$f(void 0, void 0, void 0, function* () {
18326
18900
  return yield adapter.blurVideoBackground(backgroundBlurConfig);
18327
18901
  }),
18328
18902
  /* @conditional-compile-remove(video-background-effects) */
18329
- onReplaceVideoBackground: (backgroundReplacementConfig) => __awaiter$c(void 0, void 0, void 0, function* () {
18903
+ onReplaceVideoBackground: (backgroundReplacementConfig) => __awaiter$f(void 0, void 0, void 0, function* () {
18330
18904
  return yield adapter.replaceVideoBackground(backgroundReplacementConfig);
18905
+ }),
18906
+ /* @conditional-compile-remove(close-captions) */
18907
+ onStartCaptions: (options) => __awaiter$f(void 0, void 0, void 0, function* () {
18908
+ yield adapter.startCaptions(options);
18909
+ }),
18910
+ /* @conditional-compile-remove(close-captions) */
18911
+ onStopCaptions: () => __awaiter$f(void 0, void 0, void 0, function* () {
18912
+ yield adapter.stopCaptions();
18913
+ }),
18914
+ /* @conditional-compile-remove(close-captions) */
18915
+ onSetSpokenLanguage: (language) => __awaiter$f(void 0, void 0, void 0, function* () {
18916
+ yield adapter.setSpokenLanguage(language);
18917
+ }),
18918
+ /* @conditional-compile-remove(close-captions) */
18919
+ onSetCaptionLanguage: (language) => __awaiter$f(void 0, void 0, void 0, function* () {
18920
+ yield adapter.setCaptionLanguage(language);
18331
18921
  })
18332
18922
  }));
18333
18923
 
18334
18924
  // Copyright (c) Microsoft Corporation.
18335
- /**
18336
- * @private
18337
- */
18338
- // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/explicit-function-return-type
18339
- const usePropsFor$1 = (component) => {
18340
- const selector = getSelector$1(component);
18341
- if (!selector) {
18342
- throw new Error("Can't find the selector for component, please check supported component list");
18343
- }
18344
- return Object.assign(Object.assign({}, useAdaptedSelector(selector)), useHandlers());
18925
+ /** @private */
18926
+ const CaptionsSettingsModal = (props) => {
18927
+ /* @conditional-compile-remove(close-captions) */
18928
+ const CaptionsSettingsModalProps = useAdaptedSelector(_changeSpokenLanguageSelector);
18929
+ /* @conditional-compile-remove(close-captions) */
18930
+ const handlers = useHandlers();
18931
+ /* @conditional-compile-remove(close-captions) */
18932
+ const strings = useLocale().strings.call;
18933
+ /* @conditional-compile-remove(close-captions) */
18934
+ const modalStrings = {
18935
+ captionsSettingsModalTitle: strings.captionsSettingsModalTitle,
18936
+ captionsSettingsDropdownLabel: strings.captionsSettingsDropdownLabel,
18937
+ captionsSettingsDropdownInfoText: strings.captionsSettingsDropdownInfoText,
18938
+ captionsSettingsConfirmButtonLabel: strings.captionsSettingsConfirmButtonLabel,
18939
+ captionsSettingsCancelButtonLabel: strings.captionsSettingsCancelButtonLabel,
18940
+ captionsSettingsModalAriaLabel: strings.captionsSettingsModalAriaLabel,
18941
+ captionsSettingsCloseModalButtonAriaLabel: strings.captionsSettingsCloseModalButtonAriaLabel
18942
+ };
18943
+ /* @conditional-compile-remove(close-captions) */
18944
+ const captionsAvailableLanguageStrings = strings.captionsAvailableLanguageStrings;
18945
+ /* @conditional-compile-remove(close-captions) */
18946
+ return (React__default['default'].createElement(_CaptionsSettingsModal, Object.assign({}, CaptionsSettingsModalProps, handlers, { strings: modalStrings, captionsAvailableLanguageStrings: captionsAvailableLanguageStrings, showModal: props.showCaptionsSettingsModal, onDismissCaptionsSettings: props.onDismissCaptionsSettings })));
18345
18947
  };
18346
18948
 
18347
18949
  // Copyright (c) Microsoft Corporation.
@@ -18409,31 +19011,192 @@ const participantButtonWithIncreasedTouchTargets = {
18409
19011
  }
18410
19012
  }
18411
19013
  };
18412
- /**
18413
- * @private
18414
- */
18415
- const devicesButtonWithIncreasedTouchTargets = {
18416
- menuStyles: {
18417
- menuItemStyles: buttonFlyoutIncreasedSizeStyles
18418
- }
19014
+ /**
19015
+ * @private
19016
+ */
19017
+ const devicesButtonWithIncreasedTouchTargets = {
19018
+ menuStyles: {
19019
+ menuItemStyles: buttonFlyoutIncreasedSizeStyles
19020
+ }
19021
+ };
19022
+ /**
19023
+ * @private
19024
+ */
19025
+ const controlButtonBaseStyle = {
19026
+ label: {
19027
+ minWidth: '2.25rem'
19028
+ }
19029
+ };
19030
+ /**
19031
+ * @private
19032
+ */
19033
+ const concatButtonBaseStyles = (...styles) => {
19034
+ let result = controlButtonBaseStyle;
19035
+ styles.forEach((style) => {
19036
+ result = react.concatStyleSets(result, style);
19037
+ });
19038
+ return result;
19039
+ };
19040
+
19041
+ // Copyright (c) Microsoft Corporation.
19042
+ const icon$2 = () => React__default['default'].createElement(reactIcons.MoreHorizontal20Filled, { key: 'chatOnIconKey', primaryFill: "currentColor" });
19043
+ /**
19044
+ * @private
19045
+ */
19046
+ const MoreButton = (props) => {
19047
+ return (React__default['default'].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'] })));
19048
+ };
19049
+
19050
+ var __awaiter$e = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
19051
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
19052
+ return new (P || (P = Promise))(function (resolve, reject) {
19053
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
19054
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19055
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19056
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19057
+ });
19058
+ };
19059
+ /**
19060
+ *
19061
+ * @private
19062
+ */
19063
+ const CaptionsBannerMoreButton = (props) => {
19064
+ /* @conditional-compile-remove(close-captions) */
19065
+ const localeStrings = useLocale();
19066
+ /* @conditional-compile-remove(close-captions) */
19067
+ const startCaptionsButtonProps = useAdaptedSelector(_startCaptionsButtonSelector);
19068
+ /* @conditional-compile-remove(close-captions) */
19069
+ const startCaptionsButtonHandlers = useHandlers();
19070
+ /* @conditional-compile-remove(close-captions) */
19071
+ const moreButtonStrings = React.useMemo(() => ({
19072
+ label: localeStrings.strings.call.captionsBannerMoreButtonCallingLabel,
19073
+ tooltipOffContent: localeStrings.strings.call.captionsBannerMoreButtonTooltip
19074
+ }), [localeStrings]);
19075
+ /* @conditional-compile-remove(close-captions) */
19076
+ const moreButtonContextualMenuItems = [];
19077
+ /* @conditional-compile-remove(close-captions) */
19078
+ const startCaptions = React.useCallback(() => __awaiter$e(void 0, void 0, void 0, function* () {
19079
+ yield startCaptionsButtonHandlers.onStartCaptions({
19080
+ spokenLanguage: startCaptionsButtonProps.currentSpokenLanguage
19081
+ });
19082
+ // set spoken language when start captions with a spoken language specified.
19083
+ // this is to fix the bug when a second user starts captions with a new spoken language, captions bot ignore that spoken language
19084
+ startCaptionsButtonHandlers.onSetSpokenLanguage(startCaptionsButtonProps.currentSpokenLanguage);
19085
+ }), [startCaptionsButtonHandlers, startCaptionsButtonProps.currentSpokenLanguage]);
19086
+ /* @conditional-compile-remove(close-captions) */
19087
+ moreButtonContextualMenuItems.push({
19088
+ key: 'ToggleCaptionsKey',
19089
+ text: startCaptionsButtonProps.checked
19090
+ ? localeStrings.strings.call.startCaptionsButtonTooltipOnContent
19091
+ : localeStrings.strings.call.startCaptionsButtonTooltipOffContent,
19092
+ onClick: () => {
19093
+ startCaptionsButtonProps.checked
19094
+ ? startCaptionsButtonHandlers.onStopCaptions()
19095
+ : startCaptionsButtonProps.currentSpokenLanguage !== ''
19096
+ ? startCaptions()
19097
+ : props.onCaptionsSettingsClick && props.onCaptionsSettingsClick();
19098
+ },
19099
+ iconProps: {
19100
+ iconName: startCaptionsButtonProps.checked ? 'CaptionsOffIcon' : 'CaptionsIcon',
19101
+ styles: { root: { lineHeight: 0 } }
19102
+ },
19103
+ itemProps: {
19104
+ styles: buttonFlyoutIncreasedSizeStyles
19105
+ }
19106
+ });
19107
+ /* @conditional-compile-remove(close-captions) */
19108
+ if (props.onCaptionsSettingsClick) {
19109
+ moreButtonContextualMenuItems.push({
19110
+ key: 'openCaptionsSettingsKey',
19111
+ id: 'common-call-composite-captions-settings-button',
19112
+ text: localeStrings.strings.call.captionsSettingsLabel,
19113
+ onClick: props.onCaptionsSettingsClick,
19114
+ iconProps: {
19115
+ iconName: 'CaptionsSettingsIcon',
19116
+ styles: { root: { lineHeight: 0 } }
19117
+ },
19118
+ itemProps: {
19119
+ styles: buttonFlyoutIncreasedSizeStyles
19120
+ },
19121
+ disabled: !startCaptionsButtonProps.checked
19122
+ });
19123
+ }
19124
+ /* @conditional-compile-remove(close-captions) */
19125
+ return (React__default['default'].createElement(MoreButton, Object.assign({}, props, { "data-ui-id": "captions-banner-more-button", strings: moreButtonStrings, menuIconProps: { hidden: true }, menuProps: {
19126
+ items: moreButtonContextualMenuItems,
19127
+ calloutProps: {
19128
+ preventDismissOnEvent: _preventDismissOnEvent
19129
+ }
19130
+ } })));
19131
+ };
19132
+
19133
+ // Copyright (c) Microsoft Corporation.
19134
+ /* @conditional-compile-remove(close-captions) */
19135
+ const mobileViewBannerWidth = '90%';
19136
+ /* @conditional-compile-remove(close-captions) */
19137
+ const desktopViewBannerWidth = '50%';
19138
+ /** @private */
19139
+ const CaptionsBanner = (props) => {
19140
+ /* @conditional-compile-remove(close-captions) */
19141
+ const captionsBannerProps = useAdaptedSelector(_captionsBannerSelector);
19142
+ /* @conditional-compile-remove(close-captions) */
19143
+ const handlers = useHandlers();
19144
+ /* @conditional-compile-remove(close-captions) */
19145
+ const [isCaptionsSettingsOpen, setIsCaptionsSettingsOpen] = React.useState(false);
19146
+ /* @conditional-compile-remove(close-captions) */
19147
+ const onClickCaptionsSettings = () => {
19148
+ setIsCaptionsSettingsOpen(true);
19149
+ };
19150
+ /* @conditional-compile-remove(close-captions) */
19151
+ const onDismissCaptionsSettings = () => {
19152
+ setIsCaptionsSettingsOpen(false);
19153
+ };
19154
+ /* @conditional-compile-remove(close-captions) */
19155
+ const containerClassName = react.mergeStyles({
19156
+ position: 'relative'
19157
+ });
19158
+ /* @conditional-compile-remove(close-captions) */
19159
+ const floatingChildClassName = react.mergeStyles({
19160
+ position: 'absolute',
19161
+ right: 0,
19162
+ top: 0
19163
+ });
19164
+ return (React__default['default'].createElement(React__default['default'].Fragment, null,
19165
+ /* @conditional-compile-remove(close-captions) */ isCaptionsSettingsOpen && (React__default['default'].createElement(CaptionsSettingsModal, { showCaptionsSettingsModal: isCaptionsSettingsOpen, onDismissCaptionsSettings: onDismissCaptionsSettings })),
19166
+ /* @conditional-compile-remove(close-captions) */ captionsBannerProps.captions.length > 0 &&
19167
+ captionsBannerProps.isCaptionsOn && (React__default['default'].createElement("div", { className: containerClassName },
19168
+ React__default['default'].createElement(react.Stack, { horizontalAlign: "center" },
19169
+ React__default['default'].createElement(react.Stack.Item, { style: { width: props.isMobile ? mobileViewBannerWidth : desktopViewBannerWidth } },
19170
+ React__default['default'].createElement(_CaptionsBanner, Object.assign({}, captionsBannerProps, handlers)))),
19171
+ !props.isMobile && (React__default['default'].createElement("div", { className: floatingChildClassName },
19172
+ React__default['default'].createElement(CaptionsBannerMoreButton, { onCaptionsSettingsClick: onClickCaptionsSettings })))))));
18419
19173
  };
19174
+
19175
+ // Copyright (c) Microsoft Corporation.
19176
+ // Licensed under the MIT license.
19177
+ /** @private */
19178
+ const containerDivStyles = { position: 'relative', width: '100%', height: '100%' };
19179
+
19180
+ // Copyright (c) Microsoft Corporation.
19181
+ // Licensed under the MIT license.
18420
19182
  /**
19183
+ * This minimum width is to make sure the side pane does not overlap with the composite when the screen is narrow.
19184
+ *
18421
19185
  * @private
18422
19186
  */
18423
- const controlButtonBaseStyle = {
18424
- label: {
18425
- minWidth: '2.25rem'
18426
- }
18427
- };
19187
+ const compositeMinWidthRem = 30;
19188
+
19189
+ // Copyright (c) Microsoft Corporation.
18428
19190
  /**
18429
19191
  * @private
18430
19192
  */
18431
- const concatButtonBaseStyles = (...styles) => {
18432
- let result = controlButtonBaseStyle;
18433
- styles.forEach((style) => {
18434
- result = react.concatStyleSets(result, style);
18435
- });
18436
- return result;
19193
+ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/explicit-function-return-type
19194
+ const usePropsFor$1 = (component) => {
19195
+ const selector = getSelector$1(component);
19196
+ if (!selector) {
19197
+ throw new Error("Can't find the selector for component, please check supported component list");
19198
+ }
19199
+ return Object.assign(Object.assign({}, useAdaptedSelector(selector)), useHandlers());
18437
19200
  };
18438
19201
 
18439
19202
  // Copyright (c) Microsoft Corporation.
@@ -18602,6 +19365,11 @@ const getDominantSpeakerInfo = (state) => { var _a; return (_a = state.call) ===
18602
19365
  * @private
18603
19366
  */
18604
19367
  const getRemoteParticipants = (state) => { var _a; return (_a = state.call) === null || _a === void 0 ? void 0 : _a.remoteParticipants; };
19368
+ /* @conditional-compile-remove(close-captions) */
19369
+ /**
19370
+ * @private
19371
+ */
19372
+ const getIsTeamsCall = (state) => state.isTeamsCall;
18605
19373
 
18606
19374
  // Copyright (c) Microsoft Corporation.
18607
19375
  /**
@@ -18671,7 +19439,7 @@ const isDisabled = (option) => {
18671
19439
  };
18672
19440
 
18673
19441
  // Copyright (c) Microsoft Corporation.
18674
- const icon$2 = () => React__default['default'].createElement(CallCompositeIcon, { iconName: 'ControlButtonParticipants' });
19442
+ const icon$1 = () => React__default['default'].createElement(CallCompositeIcon, { iconName: 'ControlButtonParticipants' });
18675
19443
  /**
18676
19444
  * @private
18677
19445
  */
@@ -18687,16 +19455,7 @@ const People = (props) => {
18687
19455
  }
18688
19456
  }, (_a = props.styles) !== null && _a !== void 0 ? _a : {}, controlButtonBaseStyle);
18689
19457
  }, [props.styles, theme.palette.neutralLight]);
18690
- return (React__default['default'].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 })));
18691
- };
18692
-
18693
- // Copyright (c) Microsoft Corporation.
18694
- const icon$1 = () => React__default['default'].createElement(reactIcons.MoreHorizontal20Filled, { key: 'chatOnIconKey', primaryFill: "currentColor" });
18695
- /**
18696
- * @private
18697
- */
18698
- const MoreButton = (props) => {
18699
- return (React__default['default'].createElement(ControlBarButton, Object.assign({}, props, { labelKey: 'optionsButtonLabelKey', showLabel: props.showLabel, onRenderOnIcon: icon$1, onRenderOffIcon: icon$1, onClick: props.onClick, "data-ui-id": 'common-call-composite-more-button' })));
19458
+ return (React__default['default'].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 })));
18700
19459
  };
18701
19460
 
18702
19461
  // Copyright (c) Microsoft Corporation.
@@ -18928,7 +19687,7 @@ const CallControls = (props) => {
18928
19687
  React__default['default'].createElement(People, { checked: props.peopleButtonChecked, ariaLabel: peopleButtonStrings === null || peopleButtonStrings === void 0 ? void 0 : peopleButtonStrings.label, showLabel: (options === null || options === void 0 ? void 0 : options.displayType) !== 'compact', onClick: props.onPeopleButtonClicked, "data-ui-id": "call-composite-people-button", strings: peopleButtonStrings, disabled: isDisabled$2(options === null || options === void 0 ? void 0 : options.participantsButton) })),
18929
19688
  isEnabled$2(options === null || options === void 0 ? void 0 : options.devicesButton) && (React__default['default'].createElement(Devices, { displayType: options === null || options === void 0 ? void 0 : options.displayType, increaseFlyoutItemSize: props.increaseFlyoutItemSize, disabled: isDisabled$2(options === null || options === void 0 ? void 0 : options.devicesButton) })),
18930
19689
  /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */
18931
- isEnabled$2(options === null || options === void 0 ? void 0 : options.moreButton) && moreButtonContextualMenuItems().length > 0 && (React__default['default'].createElement(MoreButton, { strings: moreButtonStrings, menuIconProps: { hidden: true }, menuProps: { items: moreButtonContextualMenuItems() }, showLabel: (options === null || options === void 0 ? void 0 : options.displayType) !== 'compact' })),
19690
+ isEnabled$2(options === null || options === void 0 ? void 0 : options.moreButton) && moreButtonContextualMenuItems().length > 0 && (React__default['default'].createElement(MoreButton, { "data-ui-id": "common-call-composite-more-button", strings: moreButtonStrings, menuIconProps: { hidden: true }, menuProps: { items: moreButtonContextualMenuItems() }, showLabel: (options === null || options === void 0 ? void 0 : options.displayType) !== 'compact' })),
18932
19691
  customButtons['primary'],
18933
19692
  isEnabled$2(options === null || options === void 0 ? void 0 : options.endCallButton) && React__default['default'].createElement(EndCall, { displayType: options === null || options === void 0 ? void 0 : options.displayType })))));
18934
19693
  };
@@ -19259,16 +20018,39 @@ const onFetchCustomButtonPropsTrampoline = (options) => {
19259
20018
  };
19260
20019
 
19261
20020
  // Copyright (c) Microsoft Corporation.
20021
+ // Licensed under the MIT license.
20022
+ var __awaiter$d = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
20023
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
20024
+ return new (P || (P = Promise))(function (resolve, reject) {
20025
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
20026
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
20027
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20028
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20029
+ });
20030
+ };
19262
20031
  /**
19263
20032
  *
19264
20033
  * @private
19265
20034
  */
19266
20035
  const DesktopMoreButton = (props) => {
19267
- /*@conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
20036
+ /*@conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */
19268
20037
  const localeStrings = useLocale();
19269
20038
  /*@conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
19270
20039
  const holdButtonProps = usePropsFor$1(HoldButton);
19271
- /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
20040
+ /* @conditional-compile-remove(close-captions) */
20041
+ const startCaptionsButtonProps = useAdaptedSelector(_startCaptionsButtonSelector);
20042
+ /* @conditional-compile-remove(close-captions) */
20043
+ const startCaptionsButtonHandlers = useHandlers();
20044
+ /* @conditional-compile-remove(close-captions) */
20045
+ const startCaptions = React.useCallback(() => __awaiter$d(void 0, void 0, void 0, function* () {
20046
+ yield startCaptionsButtonHandlers.onStartCaptions({
20047
+ spokenLanguage: startCaptionsButtonProps.currentSpokenLanguage
20048
+ });
20049
+ // set spoken language when start captions with a spoken language specified.
20050
+ // this is to fix the bug when a second user starts captions with a new spoken language, captions bot ignore that spoken language
20051
+ startCaptionsButtonHandlers.onSetSpokenLanguage(startCaptionsButtonProps.currentSpokenLanguage);
20052
+ }), [startCaptionsButtonHandlers, startCaptionsButtonProps.currentSpokenLanguage]);
20053
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */
19272
20054
  const moreButtonStrings = React.useMemo(() => ({
19273
20055
  label: localeStrings.strings.call.moreButtonCallingLabel,
19274
20056
  tooltipOffContent: localeStrings.strings.callWithChat.moreDrawerButtonTooltip
@@ -19287,6 +20069,77 @@ const DesktopMoreButton = (props) => {
19287
20069
  },
19288
20070
  disabled: props.disableButtonsForHoldScreen
19289
20071
  });
20072
+ // is captions feature is active
20073
+ /* @conditional-compile-remove(close-captions) */
20074
+ if (props.isCaptionsSupported) {
20075
+ const captionsContextualMenuItems = [];
20076
+ const menuSubIconStyleSet = {
20077
+ root: {
20078
+ height: 'unset',
20079
+ lineHeight: '100%',
20080
+ width: '1.25rem'
20081
+ }
20082
+ };
20083
+ moreButtonContextualMenuItems.push({
20084
+ key: 'liveCaptionsKey',
20085
+ id: 'common-call-composite-captions-button',
20086
+ text: localeStrings.strings.call.liveCaptionsLabel,
20087
+ iconProps: { iconName: 'CaptionsIcon', styles: { root: { lineHeight: 0 } } },
20088
+ itemProps: {
20089
+ styles: buttonFlyoutIncreasedSizeStyles
20090
+ },
20091
+ disabled: props.disableButtonsForHoldScreen,
20092
+ subMenuProps: {
20093
+ id: 'captions-contextual-menu',
20094
+ items: captionsContextualMenuItems,
20095
+ calloutProps: {
20096
+ preventDismissOnEvent: _preventDismissOnEvent
20097
+ }
20098
+ },
20099
+ submenuIconProps: {
20100
+ iconName: 'HorizontalGalleryRightButton',
20101
+ styles: menuSubIconStyleSet
20102
+ }
20103
+ });
20104
+ captionsContextualMenuItems.push({
20105
+ key: 'ToggleCaptionsKey',
20106
+ id: 'common-call-composite-captions-toggle-button',
20107
+ text: startCaptionsButtonProps.checked
20108
+ ? localeStrings.strings.call.startCaptionsButtonTooltipOnContent
20109
+ : localeStrings.strings.call.startCaptionsButtonTooltipOffContent,
20110
+ onClick: () => {
20111
+ startCaptionsButtonProps.checked
20112
+ ? startCaptionsButtonHandlers.onStopCaptions()
20113
+ : startCaptionsButtonProps.currentSpokenLanguage !== ''
20114
+ ? startCaptions()
20115
+ : props.onCaptionsSettingsClick && props.onCaptionsSettingsClick();
20116
+ },
20117
+ iconProps: {
20118
+ iconName: startCaptionsButtonProps.checked ? 'CaptionsOffIcon' : 'CaptionsIcon',
20119
+ styles: { root: { lineHeight: 0 } }
20120
+ },
20121
+ itemProps: {
20122
+ styles: buttonFlyoutIncreasedSizeStyles
20123
+ },
20124
+ disabled: props.disableButtonsForHoldScreen
20125
+ });
20126
+ if (props.onCaptionsSettingsClick) {
20127
+ captionsContextualMenuItems.push({
20128
+ key: 'openCaptionsSettingsKey',
20129
+ id: 'common-call-composite-captions-settings-button',
20130
+ text: localeStrings.strings.call.captionsSettingsLabel,
20131
+ onClick: props.onCaptionsSettingsClick,
20132
+ iconProps: {
20133
+ iconName: 'CaptionsSettingsIcon',
20134
+ styles: { root: { lineHeight: 0 } }
20135
+ },
20136
+ itemProps: {
20137
+ styles: buttonFlyoutIncreasedSizeStyles
20138
+ },
20139
+ disabled: props.disableButtonsForHoldScreen || !startCaptionsButtonProps.checked
20140
+ });
20141
+ }
20142
+ }
19290
20143
  /*@conditional-compile-remove(PSTN-calls) */
19291
20144
  if (props.onClickShowDialpad) {
19292
20145
  moreButtonContextualMenuItems.push({
@@ -19325,8 +20178,13 @@ const DesktopMoreButton = (props) => {
19325
20178
  } }, element));
19326
20179
  });
19327
20180
  return (React__default['default'].createElement(MoreButton, Object.assign({}, props, { "data-ui-id": "common-call-composite-more-button",
19328
- /*@conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
19329
- strings: moreButtonStrings, menuIconProps: { hidden: true }, menuProps: { items: moreButtonContextualMenuItems } })));
20181
+ /*@conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */
20182
+ strings: moreButtonStrings, menuIconProps: { hidden: true }, menuProps: {
20183
+ items: moreButtonContextualMenuItems,
20184
+ calloutProps: {
20185
+ preventDismissOnEvent: _preventDismissOnEvent
20186
+ }
20187
+ } })));
19330
20188
  };
19331
20189
 
19332
20190
  // Copyright (c) Microsoft Corporation.
@@ -19398,6 +20256,8 @@ const CommonCallControlBar = (props) => {
19398
20256
  const [isOutOfSpace, setIsOutOfSpace] = React.useState(false);
19399
20257
  const callWithChatStrings = useCallWithChatCompositeStrings();
19400
20258
  const options = inferCommonCallControlOptions(props.mobileView, props.callControls);
20259
+ /* @conditional-compile-remove(close-captions) */
20260
+ const [showCaptionsSettingsModal, setShowCaptionsSettingsModal] = React.useState(false);
19401
20261
  const handleResize = React.useCallback(() => {
19402
20262
  setControlBarButtonsWidth(controlBarContainerRef.current ? controlBarContainerRef.current.offsetWidth : 0);
19403
20263
  setPanelsButtonsWidth(sidepaneControlsRef.current ? sidepaneControlsRef.current.offsetWidth : 0);
@@ -19424,6 +20284,14 @@ const CommonCallControlBar = (props) => {
19424
20284
  React.useEffect(() => {
19425
20285
  setIsOutOfSpace(totalButtonsWidth > controlBarContainerWidth);
19426
20286
  }, [totalButtonsWidth, controlBarContainerWidth]);
20287
+ /* @conditional-compile-remove(close-captions) */
20288
+ const openCaptionsSettingsModal = React.useCallback(() => {
20289
+ setShowCaptionsSettingsModal(true);
20290
+ }, []);
20291
+ /* @conditional-compile-remove(close-captions) */
20292
+ const onDismissCaptionsSettings = React.useCallback(() => {
20293
+ setShowCaptionsSettingsModal(false);
20294
+ }, []);
19427
20295
  const chatButtonStrings = React.useMemo(() => ({
19428
20296
  label: callWithChatStrings.chatButtonLabel,
19429
20297
  tooltipOffContent: callWithChatStrings.chatButtonTooltipOpen,
@@ -19463,6 +20331,8 @@ const CommonCallControlBar = (props) => {
19463
20331
  }
19464
20332
  const chatButton = props.chatAdapter ? (React__default['default'].createElement(ChatButtonWithUnreadMessagesBadge, { chatAdapter: props.chatAdapter, checked: props.chatButtonChecked, showLabel: options.displayType !== 'compact', isChatPaneVisible: (_a = props.chatButtonChecked) !== null && _a !== void 0 ? _a : false, onClick: props.onChatButtonClicked, disabled: props.disableButtonsForLobbyPage || isDisabled$2(options.chatButton), strings: chatButtonStrings, styles: commonButtonStyles, newMessageLabel: callWithChatStrings.chatButtonNewMessageNotificationLabel })) : (React__default['default'].createElement(React__default['default'].Fragment, null));
19465
20333
  return (React__default['default'].createElement("div", { ref: controlBarSizeRef },
20334
+ React__default['default'].createElement(CallAdapterProvider, { adapter: props.callAdapter },
20335
+ /* @conditional-compile-remove(close-captions) */ showCaptionsSettingsModal && (React__default['default'].createElement(CaptionsSettingsModal, { showCaptionsSettingsModal: showCaptionsSettingsModal, onDismissCaptionsSettings: onDismissCaptionsSettings }))),
19466
20336
  React__default['default'].createElement(react.Stack, { horizontal: true, reversed: !props.mobileView && !isOutOfSpace, horizontalAlign: "space-between", className: react.mergeStyles(callControlsContainerStyles, controlBarContainerStyles$1, controlBarDesktopContainerStyles) },
19467
20337
  React__default['default'].createElement(react.Stack.Item, { grow: true, className: react.mergeStyles(controlBarWrapperDesktopStyles) },
19468
20338
  React__default['default'].createElement(CallAdapterProvider, { adapter: props.callAdapter },
@@ -19495,7 +20365,11 @@ const CommonCallControlBar = (props) => {
19495
20365
  /*@conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ isEnabled$1(options === null || options === void 0 ? void 0 : options.holdButton) &&
19496
20366
  !props.mobileView && (React__default['default'].createElement(DesktopMoreButton, { disableButtonsForHoldScreen: props.disableButtonsForHoldScreen, styles: commonButtonStyles, onClickShowDialpad: props.onClickShowDialpad,
19497
20367
  /* @conditional-compile-remove(control-bar-button-injection) */
19498
- callControls: props.callControls })),
20368
+ callControls: props.callControls,
20369
+ /* @conditional-compile-remove(close-captions) */
20370
+ isCaptionsSupported: props.isCaptionsSupported,
20371
+ /* @conditional-compile-remove(close-captions) */
20372
+ onCaptionsSettingsClick: openCaptionsSettingsModal })),
19499
20373
  React__default['default'].createElement(EndCall, { displayType: "compact", styles: endCallButtonStyles }))))))),
19500
20374
  !props.mobileView && (React__default['default'].createElement(react.Stack.Item, null,
19501
20375
  React__default['default'].createElement("div", { ref: sidepaneControlsRef },
@@ -20241,7 +21115,7 @@ const AddPeopleButton = (props) => {
20241
21115
 
20242
21116
  // Copyright (c) Microsoft Corporation.
20243
21117
  // Licensed under the MIT license.
20244
- var __awaiter$b = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
21118
+ var __awaiter$c = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
20245
21119
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
20246
21120
  return new (P || (P = Promise))(function (resolve, reject) {
20247
21121
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -20277,7 +21151,7 @@ const PeoplePaneContent = (props) => {
20277
21151
  setDrawerMenuItems
20278
21152
  ]);
20279
21153
  const participantListProps = React.useMemo(() => {
20280
- const onRemoveAParticipant = (participantId) => __awaiter$b(void 0, void 0, void 0, function* () { return onRemoveParticipant(participantId); });
21154
+ const onRemoveAParticipant = (participantId) => __awaiter$c(void 0, void 0, void 0, function* () { return onRemoveParticipant(participantId); });
20281
21155
  return Object.assign(Object.assign({}, participantListDefaultProps), {
20282
21156
  // Passing undefined callback for mobile to avoid context menus for participants in ParticipantList are clicked
20283
21157
  onRemoveParticipant: props.mobileView ? undefined : onRemoveAParticipant,
@@ -20475,8 +21349,12 @@ const useMinMaxDragPosition = (modalLayerHostId, rtl) => {
20475
21349
  }, [modalHostHeight, modalHostWidth, rtl]);
20476
21350
  return { minDragPosition: minDragPosition, maxDragPosition: maxDragPosition };
20477
21351
  };
21352
+ /**
21353
+ * @private
21354
+ */
21355
+ const defaultSpokenLanguage = 'en-us';
20478
21356
 
20479
- var __awaiter$a = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
21357
+ var __awaiter$b = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
20480
21358
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
20481
21359
  return new (P || (P = Promise))(function (resolve, reject) {
20482
21360
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -20506,11 +21384,11 @@ const CallPane = (props) => {
20506
21384
  /**
20507
21385
  * In a Call Composite when a participant is removed, we must remove them from the call.
20508
21386
  */
20509
- const removeParticipantFromCall = (participantId) => __awaiter$a(void 0, void 0, void 0, function* () {
21387
+ const removeParticipantFromCall = (participantId) => __awaiter$b(void 0, void 0, void 0, function* () {
20510
21388
  yield props.callAdapter.removeParticipant(participantId);
20511
21389
  });
20512
21390
  /* @conditional-compile-remove(PSTN-calls) */
20513
- const addParticipantToCall = (participant, options) => __awaiter$a(void 0, void 0, void 0, function* () {
21391
+ const addParticipantToCall = (participant, options) => __awaiter$b(void 0, void 0, void 0, function* () {
20514
21392
  yield props.callAdapter.addParticipant(participant, options);
20515
21393
  });
20516
21394
  const minMaxDragPosition = useMinMaxDragPosition(props.modalLayerHostId, props.rtl);
@@ -20574,6 +21452,99 @@ const isSpeakingAndMutedAnimationStyles = Object.assign({}, react.AnimationStyle
20574
21452
  const isNotSpeakingAndMutedAnimationStyles = Object.assign(Object.assign({}, react.AnimationStyles.fadeOut200), { display: 'none' });
20575
21453
 
20576
21454
  // Copyright (c) Microsoft Corporation.
21455
+ /**
21456
+ * @private
21457
+ */
21458
+ const spokenLanguageDrawerStyles = (theme) => ({
21459
+ root: {
21460
+ height: _pxToRem(300),
21461
+ overflow: 'auto'
21462
+ },
21463
+ drawerSurfaceStyles: {
21464
+ drawerContentContainer: {
21465
+ root: {
21466
+ span: {
21467
+ fontWeight: 600,
21468
+ fontSize: _pxToRem(17),
21469
+ lineHeight: _pxToRem(22),
21470
+ color: theme.palette.neutralDark
21471
+ }
21472
+ }
21473
+ }
21474
+ }
21475
+ });
21476
+
21477
+ // Copyright (c) Microsoft Corporation.
21478
+ /** @private */
21479
+ const SpokenLanguageDrawer = (props) => {
21480
+ var _a;
21481
+ /* @conditional-compile-remove(close-captions) */
21482
+ const theme = useTheme();
21483
+ /* @conditional-compile-remove(close-captions) */
21484
+ const changeSpokenLanguageProps = useAdaptedSelector(_changeSpokenLanguageSelector);
21485
+ /* @conditional-compile-remove(close-captions) */
21486
+ const changeSpokenLanguageHandlers = useHandlers();
21487
+ /* @conditional-compile-remove(close-captions) */
21488
+ const onSpokenLanguageDrawerItemClick = React.useCallback((languageCode) => {
21489
+ props.setCurrentSpokenLanguage(languageCode);
21490
+ }, [props]);
21491
+ /* @conditional-compile-remove(close-captions) */
21492
+ const spokenLanguageDrawerItems = React.useMemo(() => {
21493
+ var _a;
21494
+ return (_a = changeSpokenLanguageProps === null || changeSpokenLanguageProps === void 0 ? void 0 : changeSpokenLanguageProps.supportedSpokenLanguages) === null || _a === void 0 ? void 0 : _a.map((languageCode) => ({
21495
+ itemKey: languageCode,
21496
+ text: props.supportedLanguageStrings ? props.supportedLanguageStrings[languageCode] : languageCode,
21497
+ onItemClick: () => onSpokenLanguageDrawerItemClick(languageCode),
21498
+ secondaryIconProps: props.currentSpokenLanguage === languageCode ? { iconName: 'Accept' } : undefined
21499
+ }));
21500
+ }, [
21501
+ changeSpokenLanguageProps === null || changeSpokenLanguageProps === void 0 ? void 0 : changeSpokenLanguageProps.supportedSpokenLanguages,
21502
+ props.currentSpokenLanguage,
21503
+ props.supportedLanguageStrings,
21504
+ onSpokenLanguageDrawerItemClick
21505
+ ]);
21506
+ /* @conditional-compile-remove(close-captions) */
21507
+ return (React__default['default'].createElement(_DrawerMenu, { heading: (_a = props.strings) === null || _a === void 0 ? void 0 : _a.spokenLanguageMenuTitle, items: spokenLanguageDrawerItems !== null && spokenLanguageDrawerItems !== void 0 ? spokenLanguageDrawerItems : [], onLightDismiss: () => {
21508
+ changeSpokenLanguageHandlers.onSetSpokenLanguage(props.currentSpokenLanguage);
21509
+ props.onLightDismiss();
21510
+ }, styles: spokenLanguageDrawerStyles(theme) }));
21511
+ };
21512
+
21513
+ /**
21514
+ * @private
21515
+ */
21516
+ const themedToggleButtonStyle = (theme, checked) => {
21517
+ if (checked) {
21518
+ return {
21519
+ root: {
21520
+ margin: 0
21521
+ },
21522
+ pill: {
21523
+ backgroundColor: `${theme.palette.themePrimary} !important`
21524
+ },
21525
+ thumb: {
21526
+ backgroundColor: `${theme.palette.white} !important`
21527
+ }
21528
+ };
21529
+ }
21530
+ return {
21531
+ root: {
21532
+ margin: 0
21533
+ }
21534
+ };
21535
+ };
21536
+
21537
+ // Copyright (c) Microsoft Corporation.
21538
+ // Licensed under the MIT license.
21539
+ var __awaiter$a = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
21540
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
21541
+ return new (P || (P = Promise))(function (resolve, reject) {
21542
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
21543
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
21544
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
21545
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21546
+ });
21547
+ };
20577
21548
  const inferCallWithChatControlOptions = (callWithChatControls) => {
20578
21549
  if (callWithChatControls === false) {
20579
21550
  return false;
@@ -20584,6 +21555,8 @@ const inferCallWithChatControlOptions = (callWithChatControls) => {
20584
21555
  /** @private */
20585
21556
  const MoreDrawer = (props) => {
20586
21557
  var _a, _b;
21558
+ /* @conditional-compile-remove(close-captions) */
21559
+ const theme = react.useTheme();
20587
21560
  const drawerMenuItems = [];
20588
21561
  const { speakers, onSelectSpeaker, onLightDismiss } = props;
20589
21562
  /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
@@ -20691,6 +21664,76 @@ const MoreDrawer = (props) => {
20691
21664
  iconProps: { iconName: 'Dialpad', styles: { root: { lineHeight: 0 } } }
20692
21665
  });
20693
21666
  }
21667
+ /* @conditional-compile-remove(close-captions) */
21668
+ //Captions drawer menu
21669
+ const supportedLanguageStrings = useLocale().strings.call.captionsAvailableLanguageStrings;
21670
+ /* @conditional-compile-remove(close-captions) */
21671
+ const startCaptionsButtonProps = useAdaptedSelector(_startCaptionsButtonSelector);
21672
+ /* @conditional-compile-remove(close-captions) */
21673
+ const startCaptionsButtonHandlers = useHandlers();
21674
+ /* @conditional-compile-remove(close-captions) */
21675
+ const [isSpokenLanguageDrawerOpen, setIsSpokenLanguageDrawerOpen] = React.useState(false);
21676
+ /* @conditional-compile-remove(close-captions) */
21677
+ const [currentSpokenLanguage, setCurrentSpokenLanguage] = React.useState(startCaptionsButtonProps.currentSpokenLanguage === ''
21678
+ ? defaultSpokenLanguage
21679
+ : startCaptionsButtonProps.currentSpokenLanguage);
21680
+ /* @conditional-compile-remove(close-captions) */
21681
+ const onToggleChange = React.useCallback(() => __awaiter$a(void 0, void 0, void 0, function* () {
21682
+ if (!startCaptionsButtonProps.checked) {
21683
+ yield startCaptionsButtonHandlers.onStartCaptions({
21684
+ spokenLanguage: currentSpokenLanguage
21685
+ });
21686
+ // set spoken language when start captions with a spoken language specified.
21687
+ // this is to fix the bug when a second user starts captions with a new spoken language, captions bot ignore that spoken language
21688
+ startCaptionsButtonHandlers.onSetSpokenLanguage(currentSpokenLanguage);
21689
+ }
21690
+ else {
21691
+ startCaptionsButtonHandlers.onStopCaptions();
21692
+ }
21693
+ }), [startCaptionsButtonProps.checked, startCaptionsButtonHandlers, currentSpokenLanguage]);
21694
+ /* @conditional-compile-remove(close-captions) */
21695
+ if (props.isCaptionsSupported) {
21696
+ const captionsDrawerItems = [];
21697
+ drawerMenuItems.push({
21698
+ itemKey: 'captions',
21699
+ id: 'common-call-composite-captions-button',
21700
+ disabled: props.disableButtonsForHoldScreen,
21701
+ text: props.strings.captionsMenuTitle,
21702
+ iconProps: { iconName: 'CaptionsIcon' },
21703
+ subMenuProps: captionsDrawerItems
21704
+ });
21705
+ captionsDrawerItems.push({
21706
+ itemKey: 'ToggleCaptionsKey',
21707
+ text: startCaptionsButtonProps.checked
21708
+ ? localeStrings.strings.call.startCaptionsButtonTooltipOnContent
21709
+ : localeStrings.strings.call.startCaptionsButtonTooltipOffContent,
21710
+ iconProps: {
21711
+ iconName: startCaptionsButtonProps.checked ? 'CaptionsOffIcon' : 'CaptionsIcon',
21712
+ styles: { root: { lineHeight: 0 } }
21713
+ },
21714
+ disabled: props.disableButtonsForHoldScreen,
21715
+ secondaryComponent: (React__default['default'].createElement(react.Stack, { verticalFill: true, verticalAlign: "center" },
21716
+ React__default['default'].createElement(react.Toggle, { id: "common-call-composite-captions-toggle-button", checked: startCaptionsButtonProps.checked, styles: themedToggleButtonStyle(theme, startCaptionsButtonProps.checked), onChange: onToggleChange })))
21717
+ });
21718
+ captionsDrawerItems.push({
21719
+ itemKey: 'ChangeSpokenLanguage',
21720
+ text: props.strings.spokenLanguageMenuTitle,
21721
+ id: 'common-call-composite-captions-settings-button',
21722
+ secondaryText: supportedLanguageStrings ? supportedLanguageStrings[currentSpokenLanguage] : currentSpokenLanguage,
21723
+ iconProps: {
21724
+ iconName: 'ChangeSpokenLanguageIcon',
21725
+ styles: { root: { lineHeight: 0 } }
21726
+ },
21727
+ disabled: props.disableButtonsForHoldScreen || !startCaptionsButtonProps.checked,
21728
+ onItemClick: () => {
21729
+ setIsSpokenLanguageDrawerOpen(true);
21730
+ },
21731
+ secondaryIconProps: {
21732
+ iconName: 'ChevronRight',
21733
+ styles: { root: { lineHeight: 0 } }
21734
+ }
21735
+ });
21736
+ }
20694
21737
  /* @conditional-compile-remove(control-bar-button-injection) */
20695
21738
  const customDrawerButtons = React.useMemo(() => generateCustomCallDrawerButtons(onFetchCustomButtonPropsTrampoline(drawerSelectionOptions !== false ? drawerSelectionOptions : undefined), drawerSelectionOptions !== false ? drawerSelectionOptions === null || drawerSelectionOptions === void 0 ? void 0 : drawerSelectionOptions.displayType : undefined), [drawerSelectionOptions]);
20696
21739
  /* @conditional-compile-remove(control-bar-button-injection) */
@@ -20705,7 +21748,10 @@ const MoreDrawer = (props) => {
20705
21748
  customDrawerButtons['overflow'].forEach((element) => {
20706
21749
  drawerMenuItems.push(element);
20707
21750
  });
20708
- return React__default['default'].createElement(_DrawerMenu, { items: drawerMenuItems, onLightDismiss: props.onLightDismiss });
21751
+ /* @conditional-compile-remove(close-captions) */
21752
+ return (React__default['default'].createElement(React__default['default'].Fragment, null,
21753
+ isSpokenLanguageDrawerOpen && props.isCaptionsSupported && (React__default['default'].createElement(SpokenLanguageDrawer, { onLightDismiss: props.onLightDismiss, setCurrentSpokenLanguage: setCurrentSpokenLanguage, currentSpokenLanguage: currentSpokenLanguage, strings: props.strings, supportedLanguageStrings: supportedLanguageStrings })),
21754
+ !isSpokenLanguageDrawerOpen && React__default['default'].createElement(_DrawerMenu, { items: drawerMenuItems, onLightDismiss: props.onLightDismiss })));
20709
21755
  };
20710
21756
  const isDeviceSelected = (speaker, selectedSpeaker) => !!selectedSpeaker && speaker.id === selectedSpeaker.id;
20711
21757
  const isEnabled = (option) => option !== false;
@@ -20731,7 +21777,11 @@ const PreparedMoreDrawer = (props) => {
20731
21777
  peopleButtonLabel: strings.peopleButtonLabel,
20732
21778
  audioDeviceMenuTitle: strings.moreDrawerAudioDeviceMenuTitle,
20733
21779
  microphoneMenuTitle: strings.moreDrawerMicrophoneMenuTitle,
20734
- speakerMenuTitle: strings.moreDrawerSpeakerMenuTitle
21780
+ speakerMenuTitle: strings.moreDrawerSpeakerMenuTitle,
21781
+ /* @conditional-compile-remove(close-captions) */
21782
+ captionsMenuTitle: strings.moreDrawerCaptionsMenuTitle,
21783
+ /* @conditional-compile-remove(close-captions) */
21784
+ spokenLanguageMenuTitle: strings.moreDrawerSpokenLanguageMenuTitle
20735
21785
  }), [strings]);
20736
21786
  const deviceProps = useSelector$1(moreDrawerSelector);
20737
21787
  const callHandlers = useHandlers();
@@ -20950,6 +22000,10 @@ const CallArrangement = (props) => {
20950
22000
  if (!rolePermissions.cameraButton && props.errorBarProps) {
20951
22001
  errorBarProps = Object.assign(Object.assign({}, props.errorBarProps), { activeErrorMessages: props.errorBarProps.activeErrorMessages.filter((e) => e.type !== 'callCameraAccessDenied' && e.type !== 'callCameraAccessDeniedSafari') });
20952
22002
  }
22003
+ /* @conditional-compile-remove(close-captions) */
22004
+ const isTeamsCall = useSelector$1(getIsTeamsCall);
22005
+ /* @conditional-compile-remove(close-captions) */
22006
+ const hasJoinedCall = useSelector$1(getCallStatus) === 'Connected';
20953
22007
  return (React__default['default'].createElement("div", { ref: containerRef, className: react.mergeStyles(containerDivStyles), id: props.id },
20954
22008
  React__default['default'].createElement(react.Stack, { verticalFill: true, horizontalAlign: "stretch", className: containerClassName, "data-ui-id": props.dataUiId },
20955
22009
  React__default['default'].createElement(react.Stack, { grow: true, styles: callArrangementContainerStyles },
@@ -20960,6 +22014,8 @@ const CallArrangement = (props) => {
20960
22014
  peopleButtonChecked: activePane === 'people',
20961
22015
  /* @conditional-compile-remove(one-to-n-calling) */
20962
22016
  onPeopleButtonClicked: togglePeoplePane }))) : (React__default['default'].createElement(CommonCallControlBar, Object.assign({}, props.callControlProps, { callControls: props.callControlProps.options, callAdapter: adapter, mobileView: props.mobileView, disableButtonsForLobbyPage: isInLobby, peopleButtonChecked: activePane === 'people', onPeopleButtonClicked: togglePeoplePane, onMoreButtonClicked: onMoreButtonClicked,
22017
+ /* @conditional-compile-remove(close-captions) */
22018
+ isCaptionsSupported: isTeamsCall && hasJoinedCall,
20963
22019
  /* @conditional-compile-remove(video-background-effects) */
20964
22020
  onShowVideoEffectsPicker: setShowVideoEffectsPane }))))),
20965
22021
  ((_d = props.callControlProps) === null || _d === void 0 ? void 0 : _d.options) !== false && showDrawer && (React__default['default'].createElement(react.Stack, { styles: drawerContainerStylesValue },
@@ -20967,7 +22023,9 @@ const CallArrangement = (props) => {
20967
22023
  /* @conditional-compile-remove(PSTN-calls) */
20968
22024
  onClickShowDialpad: alternateCallerId ? onClickShowDialpad : undefined,
20969
22025
  /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
20970
- disableButtonsForHoldScreen: isInLocalHold }))),
22026
+ disableButtonsForHoldScreen: isInLocalHold,
22027
+ /* @conditional-compile-remove(close-captions) */
22028
+ isCaptionsSupported: isTeamsCall && hasJoinedCall }))),
20971
22029
  /* @conditional-compile-remove(PSTN-calls) */
20972
22030
  ((_e = props.callControlProps) === null || _e === void 0 ? void 0 : _e.options) !== false && showDtmfDialpad && (React__default['default'].createElement(react.Stack, { styles: drawerContainerStylesValue },
20973
22031
  React__default['default'].createElement(SendDtmfDialpad, { isMobile: props.mobileView, strings: dialpadStrings, showDialpad: showDtmfDialpad, onDismissDialpad: onDismissDtmfDialpad }))),
@@ -20981,7 +22039,9 @@ const CallArrangement = (props) => {
20981
22039
  errorBarProps !== false && (React__default['default'].createElement(react.Stack, { styles: bannerNotificationStyles },
20982
22040
  React__default['default'].createElement(ErrorBar, Object.assign({}, errorBarProps)))),
20983
22041
  canUnmute && !!props.mutedNotificationProps && (React__default['default'].createElement(MutedNotification, Object.assign({}, props.mutedNotificationProps)))),
20984
- props.onRenderGalleryContent && props.onRenderGalleryContent()))),
22042
+ props.onRenderGalleryContent && props.onRenderGalleryContent(),
22043
+ /* @conditional-compile-remove(close-captions) */
22044
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ !isInLocalHold && (React__default['default'].createElement(CaptionsBanner, { isMobile: props.mobileView }))))),
20985
22045
  /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */
20986
22046
  callPaneContent()),
20987
22047
  /* @conditional-compile-remove(video-background-effects) */
@@ -23253,6 +24313,13 @@ class AzureCommunicationCallAdapter {
23253
24313
  this.sendDtmfTone.bind(this);
23254
24314
  /* @conditional-compile-remove(unsupported-browser) */
23255
24315
  this.allowUnsupportedBrowserVersion.bind(this);
24316
+ /* @conditional-compile-remove(close-captions) */
24317
+ {
24318
+ this.startCaptions.bind(this);
24319
+ this.stopCaptions.bind(this);
24320
+ this.setSpokenLanguage.bind(this);
24321
+ this.setCaptionLanguage.bind(this);
24322
+ }
23256
24323
  /* @conditional-compile-remove(video-background-effects) */
23257
24324
  this.blurVideoBackground.bind(this);
23258
24325
  /* @conditional-compile-remove(video-background-effects) */
@@ -23575,6 +24642,30 @@ class AzureCommunicationCallAdapter {
23575
24642
  this.handlers.onSendDtmfTone(dtmfTone);
23576
24643
  });
23577
24644
  }
24645
+ /* @conditional-compile-remove(close-captions) */
24646
+ startCaptions(options) {
24647
+ return __awaiter$4(this, void 0, void 0, function* () {
24648
+ this.handlers.onStartCaptions(options);
24649
+ });
24650
+ }
24651
+ /* @conditional-compile-remove(close-captions) */
24652
+ stopCaptions() {
24653
+ return __awaiter$4(this, void 0, void 0, function* () {
24654
+ this.handlers.onStopCaptions();
24655
+ });
24656
+ }
24657
+ /* @conditional-compile-remove(close-captions) */
24658
+ setCaptionLanguage(language) {
24659
+ return __awaiter$4(this, void 0, void 0, function* () {
24660
+ this.handlers.onSetCaptionLanguage(language);
24661
+ });
24662
+ }
24663
+ /* @conditional-compile-remove(close-captions) */
24664
+ setSpokenLanguage(language) {
24665
+ return __awaiter$4(this, void 0, void 0, function* () {
24666
+ this.handlers.onSetSpokenLanguage(language);
24667
+ });
24668
+ }
23578
24669
  getState() {
23579
24670
  return this.context.getState();
23580
24671
  }
@@ -23588,15 +24679,26 @@ class AzureCommunicationCallAdapter {
23588
24679
  on(event, listener) {
23589
24680
  this.emitter.on(event, listener);
23590
24681
  }
23591
- subscribeCallEvents() {
24682
+ /* @conditional-compile-remove(close-captions) */
24683
+ subscribeToCaptionEvents() {
23592
24684
  var _a, _b, _c, _d;
24685
+ if (((_a = this.call) === null || _a === void 0 ? void 0 : _a.state) === 'Connected') {
24686
+ (_b = this.call) === null || _b === void 0 ? void 0 : _b.feature(communicationCalling.Features.TeamsCaptions).on('captionsReceived', this.captionsReceived.bind(this));
24687
+ (_c = this.call) === null || _c === void 0 ? void 0 : _c.feature(communicationCalling.Features.TeamsCaptions).on('isCaptionsActiveChanged', this.isCaptionsActiveChanged.bind(this));
24688
+ (_d = this.call) === null || _d === void 0 ? void 0 : _d.off('stateChanged', this.subscribeToCaptionEvents.bind(this));
24689
+ }
24690
+ }
24691
+ subscribeCallEvents() {
24692
+ var _a, _b, _c, _d, _e;
23593
24693
  (_a = this.call) === null || _a === void 0 ? void 0 : _a.on('remoteParticipantsUpdated', this.onRemoteParticipantsUpdated.bind(this));
23594
24694
  (_b = this.call) === null || _b === void 0 ? void 0 : _b.on('isMutedChanged', this.isMyMutedChanged.bind(this));
23595
24695
  (_c = this.call) === null || _c === void 0 ? void 0 : _c.on('isScreenSharingOnChanged', this.isScreenSharingOnChanged.bind(this));
23596
24696
  (_d = this.call) === null || _d === void 0 ? void 0 : _d.on('idChanged', this.callIdChanged.bind(this));
24697
+ /* @conditional-compile-remove(close-captions) */
24698
+ (_e = this.call) === null || _e === void 0 ? void 0 : _e.on('stateChanged', this.subscribeToCaptionEvents.bind(this));
23597
24699
  }
23598
24700
  unsubscribeCallEvents() {
23599
- var _a, _b, _c, _d;
24701
+ var _a, _b, _c, _d, _e, _f, _g;
23600
24702
  for (const subscriber of this.participantSubscribers.values()) {
23601
24703
  subscriber.unsubscribeAll();
23602
24704
  }
@@ -23605,6 +24707,12 @@ class AzureCommunicationCallAdapter {
23605
24707
  (_b = this.call) === null || _b === void 0 ? void 0 : _b.off('isMutedChanged', this.isMyMutedChanged.bind(this));
23606
24708
  (_c = this.call) === null || _c === void 0 ? void 0 : _c.off('isScreenSharingOnChanged', this.isScreenSharingOnChanged.bind(this));
23607
24709
  (_d = this.call) === null || _d === void 0 ? void 0 : _d.off('idChanged', this.callIdChanged.bind(this));
24710
+ /* @conditional-compile-remove(close-captions) */
24711
+ (_e = this._call) === null || _e === void 0 ? void 0 : _e.feature(communicationCalling.Features.TeamsCaptions).off('captionsReceived', this.captionsReceived.bind(this));
24712
+ /* @conditional-compile-remove(close-captions) */
24713
+ (_f = this._call) === null || _f === void 0 ? void 0 : _f.feature(communicationCalling.Features.TeamsCaptions).off('isCaptionsActiveChanged', this.isCaptionsActiveChanged.bind(this));
24714
+ /* @conditional-compile-remove(close-captions) */
24715
+ (_g = this.call) === null || _g === void 0 ? void 0 : _g.off('stateChanged', this.subscribeToCaptionEvents.bind(this));
23608
24716
  }
23609
24717
  onRemoteParticipantsUpdated({ added, removed }) {
23610
24718
  if (added && added.length > 0) {
@@ -23626,6 +24734,17 @@ class AzureCommunicationCallAdapter {
23626
24734
  var _a;
23627
24735
  this.emitter.emit('isLocalScreenSharingActiveChanged', { isScreenSharingOn: (_a = this.call) === null || _a === void 0 ? void 0 : _a.isScreenSharingOn });
23628
24736
  }
24737
+ /* @conditional-compile-remove(close-captions) */
24738
+ captionsReceived(captionsInfo) {
24739
+ this.emitter.emit('captionsReceived', { captionsInfo });
24740
+ }
24741
+ /* @conditional-compile-remove(close-captions) */
24742
+ isCaptionsActiveChanged() {
24743
+ var _a;
24744
+ this.emitter.emit('isCaptionsActiveChanged', {
24745
+ isActive: (_a = this.call) === null || _a === void 0 ? void 0 : _a.feature(communicationCalling.Features.TeamsCaptions).isCaptionsFeatureActive
24746
+ });
24747
+ }
23629
24748
  callIdChanged() {
23630
24749
  var _a;
23631
24750
  ((_a = this.call) === null || _a === void 0 ? void 0 : _a.id) && this.emitter.emit('callIdChanged', { callId: this.call.id });
@@ -24090,6 +25209,30 @@ class CallWithChatBackedCallAdapter {
24090
25209
  allowUnsupportedBrowserVersion() {
24091
25210
  return this.callWithChatAdapter.allowUnsupportedBrowserVersion();
24092
25211
  }
25212
+ /* @conditional-compile-remove(close-captions) */
25213
+ startCaptions(options) {
25214
+ return __awaiter$3(this, void 0, void 0, function* () {
25215
+ this.callWithChatAdapter.startCaptions(options);
25216
+ });
25217
+ }
25218
+ /* @conditional-compile-remove(close-captions) */
25219
+ stopCaptions() {
25220
+ return __awaiter$3(this, void 0, void 0, function* () {
25221
+ this.callWithChatAdapter.stopCaptions();
25222
+ });
25223
+ }
25224
+ /* @conditional-compile-remove(close-captions) */
25225
+ setCaptionLanguage(language) {
25226
+ return __awaiter$3(this, void 0, void 0, function* () {
25227
+ this.callWithChatAdapter.setCaptionLanguage(language);
25228
+ });
25229
+ }
25230
+ /* @conditional-compile-remove(close-captions) */
25231
+ setSpokenLanguage(language) {
25232
+ return __awaiter$3(this, void 0, void 0, function* () {
25233
+ this.callWithChatAdapter.setSpokenLanguage(language);
25234
+ });
25235
+ }
24093
25236
  /* @conditional-compile-remove(video-background-effects) */
24094
25237
  blurVideoBackground(backgroundBlurConfig) {
24095
25238
  return __awaiter$3(this, void 0, void 0, function* () {
@@ -24455,6 +25598,8 @@ const CallWithChatScreen = (props) => {
24455
25598
  }), [callWithChatStrings]);
24456
25599
  /* @conditional-compile-remove(PSTN-calls) */
24457
25600
  const alternateCallerId = callAdapter.getState().alternateCallerId;
25601
+ /* @conditional-compile-remove(close-captions) */
25602
+ const isTeamsCall = callAdapter.getState().isTeamsCall;
24458
25603
  const callCompositeOptions = React.useMemo(() => ({
24459
25604
  callControls: false,
24460
25605
  /* @conditional-compile-remove(call-readiness) */
@@ -24494,6 +25639,8 @@ const CallWithChatScreen = (props) => {
24494
25639
  disableButtonsForHoldScreen: isInLocalHold, callControls: props.callControls, containerHeight: containerHeight, containerWidth: containerWidth,
24495
25640
  /* @conditional-compile-remove(PSTN-calls) */
24496
25641
  onClickShowDialpad: alternateCallerId ? onClickShowDialpad : undefined,
25642
+ /* @conditional-compile-remove(close-captions) */
25643
+ isCaptionsSupported: isTeamsCall && hasJoinedCall,
24497
25644
  /* @conditional-compile-remove(video-background-effects) */
24498
25645
  onShowVideoEffectsPicker: setShowVideoEffectsPane, rtl: props.rtl })))),
24499
25646
  showControlBar && showDrawer && (React__default['default'].createElement(ChatAdapterProvider, { adapter: chatProps.adapter },
@@ -24503,7 +25650,9 @@ const CallWithChatScreen = (props) => {
24503
25650
  /* @conditional-compile-remove(PSTN-calls) */
24504
25651
  onClickShowDialpad: alternateCallerId ? onClickShowDialpad : undefined,
24505
25652
  /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
24506
- disableButtonsForHoldScreen: isInLocalHold }))))),
25653
+ disableButtonsForHoldScreen: isInLocalHold,
25654
+ /* @conditional-compile-remove(close-captions) */
25655
+ isCaptionsSupported: isTeamsCall && hasJoinedCall }))))),
24507
25656
  /* @conditional-compile-remove(PSTN-calls) */
24508
25657
  showControlBar && showDtmfDialpad && (React__default['default'].createElement(ChatAdapterProvider, { adapter: chatProps.adapter },
24509
25658
  React__default['default'].createElement(CallAdapterProvider, { adapter: callAdapter },
@@ -24780,6 +25929,12 @@ class AzureCommunicationCallWithChatAdapter {
24780
25929
  this.sendDtmfTone.bind(this);
24781
25930
  /* @conditional-compile-remove(unsupported-browser) */
24782
25931
  this.allowUnsupportedBrowserVersion.bind(this);
25932
+ /* @conditional-compile-remove(close-captions) */ {
25933
+ this.startCaptions.bind(this);
25934
+ this.stopCaptions.bind(this);
25935
+ this.setSpokenLanguage.bind(this);
25936
+ this.setCaptionLanguage.bind(this);
25937
+ }
24783
25938
  /* @conditional-compile-remove(video-background-effects) */
24784
25939
  this.blurVideoBackground.bind(this);
24785
25940
  /* @conditional-compile-remove(video-background-effects) */
@@ -25004,6 +26159,30 @@ class AzureCommunicationCallWithChatAdapter {
25004
26159
  allowUnsupportedBrowserVersion() {
25005
26160
  return this.callAdapter.allowUnsupportedBrowserVersion();
25006
26161
  }
26162
+ /* @conditional-compile-remove(close-captions) */
26163
+ startCaptions(options) {
26164
+ return __awaiter(this, void 0, void 0, function* () {
26165
+ yield this.callAdapter.startCaptions(options);
26166
+ });
26167
+ }
26168
+ /* @conditional-compile-remove(close-captions) */
26169
+ stopCaptions() {
26170
+ return __awaiter(this, void 0, void 0, function* () {
26171
+ yield this.callAdapter.stopCaptions();
26172
+ });
26173
+ }
26174
+ /* @conditional-compile-remove(close-captions) */
26175
+ setCaptionLanguage(language) {
26176
+ return __awaiter(this, void 0, void 0, function* () {
26177
+ yield this.callAdapter.setCaptionLanguage(language);
26178
+ });
26179
+ }
26180
+ /* @conditional-compile-remove(close-captions) */
26181
+ setSpokenLanguage(language) {
26182
+ return __awaiter(this, void 0, void 0, function* () {
26183
+ yield this.callAdapter.setSpokenLanguage(language);
26184
+ });
26185
+ }
25007
26186
  /* @conditional-compile-remove(video-background-effects) */
25008
26187
  blurVideoBackground(backgroundBlurConfig) {
25009
26188
  return __awaiter(this, void 0, void 0, function* () {
@@ -25063,6 +26242,14 @@ class AzureCommunicationCallWithChatAdapter {
25063
26242
  case 'selectedSpeakerChanged':
25064
26243
  this.callAdapter.on('selectedSpeakerChanged', listener);
25065
26244
  break;
26245
+ /* @conditional-compile-remove(close-captions) */
26246
+ case 'captionsReceived':
26247
+ this.callAdapter.on('captionsReceived', listener);
26248
+ break;
26249
+ /* @conditional-compile-remove(close-captions) */
26250
+ case 'isCaptionsActiveChanged':
26251
+ this.callAdapter.on('isCaptionsActiveChanged', listener);
26252
+ break;
25066
26253
  case 'messageReceived':
25067
26254
  this.chatAdapter.on('messageReceived', listener);
25068
26255
  break;
@@ -25121,6 +26308,14 @@ class AzureCommunicationCallWithChatAdapter {
25121
26308
  case 'selectedSpeakerChanged':
25122
26309
  this.callAdapter.off('selectedSpeakerChanged', listener);
25123
26310
  break;
26311
+ /* @conditional-compile-remove(close-captions) */
26312
+ case 'captionsReceived':
26313
+ this.callAdapter.off('captionsReceived', listener);
26314
+ break;
26315
+ /* @conditional-compile-remove(close-captions) */
26316
+ case 'isCaptionsActiveChanged':
26317
+ this.callAdapter.off('isCaptionsActiveChanged', listener);
26318
+ break;
25124
26319
  case 'messageReceived':
25125
26320
  this.chatAdapter.off('messageReceived', listener);
25126
26321
  break;