@azure/communication-react 1.7.1-alpha-202308240011 → 1.7.1-alpha-202308260012

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 (105) hide show
  1. package/dist/communication-react.d.ts +161 -48
  2. package/dist/dist-cjs/communication-react/index.js +357 -121
  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/captionsSelector.d.ts +6 -4
  7. package/dist/dist-esm/calling-component-bindings/src/captionsSelector.js +12 -4
  8. package/dist/dist-esm/calling-component-bindings/src/captionsSelector.js.map +1 -1
  9. package/dist/dist-esm/calling-component-bindings/src/index.d.ts +2 -2
  10. package/dist/dist-esm/calling-component-bindings/src/index.js +1 -1
  11. package/dist/dist-esm/calling-component-bindings/src/index.js.map +1 -1
  12. package/dist/dist-esm/calling-stateful-client/src/CallContext.js +6 -1
  13. package/dist/dist-esm/calling-stateful-client/src/CallContext.js.map +1 -1
  14. package/dist/dist-esm/calling-stateful-client/src/CaptionsSubscriber.d.ts +2 -0
  15. package/dist/dist-esm/calling-stateful-client/src/CaptionsSubscriber.js +10 -0
  16. package/dist/dist-esm/calling-stateful-client/src/CaptionsSubscriber.js.map +1 -1
  17. package/dist/dist-esm/calling-stateful-client/src/TypeGuards.d.ts +0 -7
  18. package/dist/dist-esm/calling-stateful-client/src/TypeGuards.js +0 -10
  19. package/dist/dist-esm/calling-stateful-client/src/TypeGuards.js.map +1 -1
  20. package/dist/dist-esm/calling-stateful-client/src/index.d.ts +0 -1
  21. package/dist/dist-esm/calling-stateful-client/src/index.js +0 -2
  22. package/dist/dist-esm/calling-stateful-client/src/index.js.map +1 -1
  23. package/dist/dist-esm/communication-react/src/index.d.ts +1 -1
  24. package/dist/dist-esm/communication-react/src/index.js +1 -1
  25. package/dist/dist-esm/communication-react/src/index.js.map +1 -1
  26. package/dist/dist-esm/react-components/src/components/CaptionsSettingsModal.d.ts +11 -4
  27. package/dist/dist-esm/react-components/src/components/CaptionsSettingsModal.js +73 -28
  28. package/dist/dist-esm/react-components/src/components/CaptionsSettingsModal.js.map +1 -1
  29. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponent.js +2 -2
  30. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponent.js.map +1 -1
  31. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsMessageBubble.js +4 -4
  32. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsMessageBubble.js.map +1 -1
  33. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageContent.js +10 -3
  34. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageContent.js.map +1 -1
  35. package/dist/dist-esm/react-components/src/components/ImageGallery.js +12 -6
  36. package/dist/dist-esm/react-components/src/components/ImageGallery.js.map +1 -1
  37. package/dist/dist-esm/react-components/src/components/MessageThread.js +3 -3
  38. package/dist/dist-esm/react-components/src/components/MessageThread.js.map +1 -1
  39. package/dist/dist-esm/react-components/src/components/VideoTile.d.ts +1 -1
  40. package/dist/dist-esm/react-components/src/components/VideoTile.js.map +1 -1
  41. package/dist/dist-esm/react-components/src/components/index.js +1 -1
  42. package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
  43. package/dist/dist-esm/react-components/src/components/styles/CaptionsSettingsModal.styles.js +3 -3
  44. package/dist/dist-esm/react-components/src/components/styles/CaptionsSettingsModal.styles.js.map +1 -1
  45. package/dist/dist-esm/react-components/src/index.d.ts +2 -1
  46. package/dist/dist-esm/react-components/src/index.js +2 -0
  47. package/dist/dist-esm/react-components/src/index.js.map +1 -1
  48. package/dist/dist-esm/react-components/src/localization/LocalizationProvider.js.map +1 -1
  49. package/dist/dist-esm/react-components/src/theming/icons.d.ts +1 -0
  50. package/dist/dist-esm/react-components/src/theming/icons.js +3 -1
  51. package/dist/dist-esm/react-components/src/theming/icons.js.map +1 -1
  52. package/dist/dist-esm/react-components/src/types/CaptionsAvailableLanguageStrings.d.ts +87 -2
  53. package/dist/dist-esm/react-components/src/types/CaptionsAvailableLanguageStrings.js +47 -1
  54. package/dist/dist-esm/react-components/src/types/CaptionsAvailableLanguageStrings.js.map +1 -1
  55. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts +18 -6
  56. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.js.map +1 -1
  57. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.d.ts +12 -1
  58. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js +37 -1
  59. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js.map +1 -1
  60. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.d.ts +47 -0
  61. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.js.map +1 -1
  62. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/index.d.ts +2 -1
  63. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/index.js.map +1 -1
  64. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js +5 -1
  65. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js.map +1 -1
  66. package/dist/dist-esm/react-composites/src/composites/CallComposite/index.d.ts +2 -1
  67. package/dist/dist-esm/react-composites/src/composites/CallComposite/index.js.map +1 -1
  68. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/Strings.d.ts +6 -0
  69. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/Strings.js.map +1 -1
  70. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.d.ts +5 -1
  71. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js +16 -0
  72. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js.map +1 -1
  73. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.d.ts +6 -2
  74. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.js.map +1 -1
  75. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js +27 -19
  76. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js.map +1 -1
  77. package/dist/dist-esm/react-composites/src/composites/common/CaptionsBanner.js +3 -3
  78. package/dist/dist-esm/react-composites/src/composites/common/CaptionsBanner.js.map +1 -1
  79. package/dist/dist-esm/react-composites/src/composites/common/CaptionsSettingsModal.d.ts +1 -0
  80. package/dist/dist-esm/react-composites/src/composites/common/CaptionsSettingsModal.js +10 -6
  81. package/dist/dist-esm/react-composites/src/composites/common/CaptionsSettingsModal.js.map +1 -1
  82. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.d.ts +1 -0
  83. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.js +6 -4
  84. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.js.map +1 -1
  85. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/DesktopMoreButton.js +2 -2
  86. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/DesktopMoreButton.js.map +1 -1
  87. package/dist/dist-esm/react-composites/src/composites/common/Drawer/CaptionSettingsDrawer.d.ts +20 -0
  88. package/dist/dist-esm/react-composites/src/composites/common/Drawer/CaptionSettingsDrawer.js +38 -0
  89. package/dist/dist-esm/react-composites/src/composites/common/Drawer/CaptionSettingsDrawer.js.map +1 -0
  90. package/dist/dist-esm/react-composites/src/composites/common/Drawer/MoreDrawer.d.ts +6 -0
  91. package/dist/dist-esm/react-composites/src/composites/common/Drawer/MoreDrawer.js +56 -18
  92. package/dist/dist-esm/react-composites/src/composites/common/Drawer/MoreDrawer.js.map +1 -1
  93. package/dist/dist-esm/react-composites/src/composites/common/Drawer/PreparedMoreDrawer.js +3 -1
  94. package/dist/dist-esm/react-composites/src/composites/common/Drawer/PreparedMoreDrawer.js.map +1 -1
  95. package/dist/dist-esm/react-composites/src/composites/common/Drawer/captionSettingsDrawer.styles.d.ts +7 -0
  96. package/dist/dist-esm/react-composites/src/composites/common/Drawer/{SpokenLanguageDrawer.styles.js → captionSettingsDrawer.styles.js} +4 -4
  97. package/dist/dist-esm/react-composites/src/composites/common/Drawer/captionSettingsDrawer.styles.js.map +1 -0
  98. package/dist/dist-esm/react-composites/src/composites/common/icons.d.ts +1 -0
  99. package/dist/dist-esm/react-composites/src/composites/localization/locales/en-US/strings.json +41 -4
  100. package/package.json +8 -8
  101. package/dist/dist-esm/react-composites/src/composites/common/Drawer/SpokenLanguageDrawer.d.ts +0 -19
  102. package/dist/dist-esm/react-composites/src/composites/common/Drawer/SpokenLanguageDrawer.js +0 -55
  103. package/dist/dist-esm/react-composites/src/composites/common/Drawer/SpokenLanguageDrawer.js.map +0 -1
  104. package/dist/dist-esm/react-composites/src/composites/common/Drawer/SpokenLanguageDrawer.styles.d.ts +0 -7
  105. package/dist/dist-esm/react-composites/src/composites/common/Drawer/SpokenLanguageDrawer.styles.js.map +0 -1
@@ -178,7 +178,7 @@ const _isValidIdentifier = (identifier) => {
178
178
  // Copyright (c) Microsoft Corporation.
179
179
  // Licensed under the MIT license.
180
180
  // GENERATED FILE. DO NOT EDIT MANUALLY.
181
- var telemetryVersion = '1.7.1-alpha-202308240011';
181
+ var telemetryVersion = '1.7.1-alpha-202308260012';
182
182
 
183
183
  // Copyright (c) Microsoft Corporation.
184
184
  /**
@@ -431,7 +431,7 @@ const getCaptions = (state, props) => {
431
431
  };
432
432
  /* @conditional-compile-remove(close-captions) */
433
433
  /** @private */
434
- const getCaptionsStatus = (state, props) => {
434
+ const getCaptionsStatus$1 = (state, props) => {
435
435
  var _a;
436
436
  return (_a = state.calls[props.callId]) === null || _a === void 0 ? void 0 : _a.captionsFeature.isCaptionsFeatureActive;
437
437
  };
@@ -455,6 +455,12 @@ const getCurrentSpokenLanguage = (state, props) => {
455
455
  };
456
456
  /* @conditional-compile-remove(close-captions) */
457
457
  /** @private */
458
+ const getSupportedCaptionLanguages = (state, props) => {
459
+ var _a;
460
+ return (_a = state.calls[props.callId]) === null || _a === void 0 ? void 0 : _a.captionsFeature.supportedCaptionLanguages;
461
+ };
462
+ /* @conditional-compile-remove(close-captions) */
463
+ /** @private */
458
464
  const getSupportedSpokenLanguages = (state, props) => {
459
465
  var _a;
460
466
  return (_a = state.calls[props.callId]) === null || _a === void 0 ? void 0 : _a.captionsFeature.supportedSpokenLanguages;
@@ -1191,21 +1197,29 @@ const createDefaultTeamsCallingHandlers = memoizeOne__default['default']((callCl
1191
1197
  *
1192
1198
  * @internal
1193
1199
  */
1194
- const _startCaptionsButtonSelector = reselect__namespace.createSelector([getCaptionsStatus, getCurrentCaptionLanguage, getCurrentSpokenLanguage], (isCaptionsFeatureActive, currentCaptionLanguage, currentSpokenLanguage) => {
1200
+ const _startCaptionsButtonSelector = reselect__namespace.createSelector([getCaptionsStatus$1, getCurrentCaptionLanguage, getCurrentSpokenLanguage], (isCaptionsFeatureActive, currentCaptionLanguage, currentSpokenLanguage) => {
1195
1201
  return {
1196
1202
  checked: isCaptionsFeatureActive !== null && isCaptionsFeatureActive !== void 0 ? isCaptionsFeatureActive : false,
1197
- currentCaptionLanguage: currentCaptionLanguage !== null && currentCaptionLanguage !== void 0 ? currentCaptionLanguage : 'en-us',
1203
+ currentCaptionLanguage: currentCaptionLanguage !== null && currentCaptionLanguage !== void 0 ? currentCaptionLanguage : '',
1198
1204
  currentSpokenLanguage: currentSpokenLanguage !== null && currentSpokenLanguage !== void 0 ? currentSpokenLanguage : 'en-us'
1199
1205
  };
1200
1206
  });
1201
1207
  /* @conditional-compile-remove(close-captions) */
1202
1208
  /**
1203
- * Selector for {@link ChangeSpokenLanguageButton} component.
1209
+ * Selector for Changing caption language and spoken language
1204
1210
  *
1205
1211
  * @internal
1206
1212
  */
1207
- const _changeSpokenLanguageSelector = reselect__namespace.createSelector([getSupportedSpokenLanguages, getCurrentSpokenLanguage, getCaptionsStatus], (supportedSpokenLanguages, currentSpokenLanguage, isCaptionsFeatureActive) => {
1213
+ const _captionSettingsSelector = reselect__namespace.createSelector([
1214
+ getSupportedCaptionLanguages,
1215
+ getCurrentCaptionLanguage,
1216
+ getSupportedSpokenLanguages,
1217
+ getCurrentSpokenLanguage,
1218
+ getCaptionsStatus$1
1219
+ ], (supportedCaptionLanguages, currentCaptionLanguage, supportedSpokenLanguages, currentSpokenLanguage, isCaptionsFeatureActive) => {
1208
1220
  return {
1221
+ supportedCaptionLanguages: supportedCaptionLanguages !== null && supportedCaptionLanguages !== void 0 ? supportedCaptionLanguages : [],
1222
+ currentCaptionLanguage: currentCaptionLanguage !== null && currentCaptionLanguage !== void 0 ? currentCaptionLanguage : '',
1209
1223
  supportedSpokenLanguages: supportedSpokenLanguages !== null && supportedSpokenLanguages !== void 0 ? supportedSpokenLanguages : ['en-us'],
1210
1224
  currentSpokenLanguage: currentSpokenLanguage !== null && currentSpokenLanguage !== void 0 ? currentSpokenLanguage : 'en-us',
1211
1225
  isCaptionsFeatureActive: isCaptionsFeatureActive !== null && isCaptionsFeatureActive !== void 0 ? isCaptionsFeatureActive : false
@@ -1217,7 +1231,7 @@ const _changeSpokenLanguageSelector = reselect__namespace.createSelector([getSup
1217
1231
  *
1218
1232
  * @internal
1219
1233
  */
1220
- const _captionsBannerSelector = reselect__namespace.createSelector([getCaptions, getCaptionsStatus, getStartCaptionsInProgress], (captions, isCaptionsFeatureActive, startCaptionsInProgress) => {
1234
+ const _captionsBannerSelector = reselect__namespace.createSelector([getCaptions, getCaptionsStatus$1, getStartCaptionsInProgress], (captions, isCaptionsFeatureActive, startCaptionsInProgress) => {
1221
1235
  // Following Teams app logic, no matter how many 'Partial' captions come,
1222
1236
  // we only pick first one according to start time, and all the other partial captions will be filtered out
1223
1237
  // This will give customers a stable captions experience when others talking over the dominant speaker
@@ -2346,7 +2360,12 @@ class CallContext$2 {
2346
2360
  this.modifyState((draft) => {
2347
2361
  const call = draft.calls[this._callIdHistory.latestCallId(callId)];
2348
2362
  if (call) {
2349
- this.processNewCaption(call.captionsFeature.captions, convertFromSDKToCaptionInfoState(caption));
2363
+ const currentCaptionLanguage = call.captionsFeature.currentCaptionLanguage;
2364
+ if (caption.captionLanguage.toUpperCase() === currentCaptionLanguage.toUpperCase() ||
2365
+ currentCaptionLanguage === '' ||
2366
+ currentCaptionLanguage === undefined) {
2367
+ this.processNewCaption(call.captionsFeature.captions, convertFromSDKToCaptionInfoState(caption));
2368
+ }
2350
2369
  }
2351
2370
  });
2352
2371
  }
@@ -2504,10 +2523,14 @@ class CaptionsSubscriber {
2504
2523
  this.subscribe = () => {
2505
2524
  this._captions.on('CaptionsActiveChanged', this.isCaptionsActiveChanged);
2506
2525
  this._captions.on('CaptionsReceived', this.onCaptionsReceived);
2526
+ this._captions.on('CaptionLanguageChanged', this.isCaptionLanguageChanged);
2527
+ this._captions.on('SpokenLanguageChanged', this.isSpokenLanguageChanged);
2507
2528
  };
2508
2529
  this.unsubscribe = () => {
2509
2530
  this._captions.off('CaptionsActiveChanged', this.isCaptionsActiveChanged);
2510
2531
  this._captions.off('CaptionsReceived', this.onCaptionsReceived);
2532
+ this._captions.off('CaptionLanguageChanged', this.isCaptionLanguageChanged);
2533
+ this._captions.off('SpokenLanguageChanged', this.isSpokenLanguageChanged);
2511
2534
  };
2512
2535
  this.onCaptionsReceived = (caption) => {
2513
2536
  this._context.addCaption(this._callIdRef.callId, caption);
@@ -2515,6 +2538,12 @@ class CaptionsSubscriber {
2515
2538
  this.isCaptionsActiveChanged = () => {
2516
2539
  this._context.setIsCaptionActive(this._callIdRef.callId, this._captions.isCaptionsFeatureActive);
2517
2540
  };
2541
+ this.isCaptionLanguageChanged = () => {
2542
+ this._context.setSelectedCaptionLanguage(this._callIdRef.callId, this._captions.activeCaptionLanguage);
2543
+ };
2544
+ this.isSpokenLanguageChanged = () => {
2545
+ this._context.setSelectedSpokenLanguage(this._callIdRef.callId, this._captions.activeSpokenLanguage);
2546
+ };
2518
2547
  this._callIdRef = callIdRef;
2519
2548
  this._context = context;
2520
2549
  this._captions = captions;
@@ -6245,6 +6274,8 @@ const DEFAULT_COMPONENT_ICONS = {
6245
6274
  CaptionsSettingsIcon: React__default['default'].createElement(reactIcons.Settings20Regular, null),
6246
6275
  /* @conditional-compile-remove(close-captions) */
6247
6276
  ChangeSpokenLanguageIcon: React__default['default'].createElement(reactIcons.PersonVoice20Regular, null),
6277
+ /* @conditional-compile-remove(close-captions) */
6278
+ ChangeCaptionLanguageIcon: React__default['default'].createElement(reactIcons.Translate20Regular, null),
6248
6279
  ContextMenuCameraIcon: React__default['default'].createElement(reactIcons.Video20Regular, null),
6249
6280
  ContextMenuMicIcon: React__default['default'].createElement(reactIcons.Mic20Regular, null),
6250
6281
  ContextMenuSpeakerIcon: React__default['default'].createElement(reactIcons.Speaker220Regular, null)
@@ -8666,6 +8697,7 @@ const smallDownloadButtonContainerStyle = (theme, isDarkThemed) => {
8666
8697
  };
8667
8698
 
8668
8699
  // Copyright (c) Microsoft Corporation.
8700
+ /* @conditional-compile-remove(image-gallery) */
8669
8701
  /**
8670
8702
  * Component to render a fullscreen modal for a selected image.
8671
8703
  *
@@ -8675,7 +8707,7 @@ const ImageGallery = (props) => {
8675
8707
  const { isOpen, images, onImageDownloadButtonClicked, onDismiss, onError, startIndex = 0 } = props;
8676
8708
  const theme = useTheme();
8677
8709
  const isDarkTheme = isDarkThemed(theme);
8678
- /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
8710
+ /* @conditional-compile-remove(image-gallery) */
8679
8711
  const localeStrings = useLocale$1().strings.imageGallery;
8680
8712
  const [isImageLoaded, setIsImageLoaded] = React.useState(true);
8681
8713
  const imageStyle = isImageLoaded ? normalImageStyle : brokenImageStyle(theme, isDarkTheme);
@@ -8691,11 +8723,11 @@ const ImageGallery = (props) => {
8691
8723
  React__default['default'].createElement(react.Stack.Item, { className: react.mergeStyles(titleStyle$2(theme, isDarkTheme)), "aria-label": image.title }, image.title)),
8692
8724
  React__default['default'].createElement(react.Stack, { className: react.mergeStyles(controlBarContainerStyle) },
8693
8725
  React__default['default'].createElement(react.DefaultButton, { className: react.mergeStyles(downloadButtonStyle(theme, isDarkTheme)),
8694
- /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
8726
+ /* @conditional-compile-remove(image-gallery) */
8695
8727
  text: localeStrings.downloadButtonLabel, onClick: () => onImageDownloadButtonClicked(image.imageUrl, image.saveAsName), onRenderIcon: () => React__default['default'].createElement(react.Icon, { iconName: downloadIcon.iconName, className: react.mergeStyles(downloadIconStyle) }), "aria-live": 'polite', "aria-label": localeStrings.downloadButtonLabel }),
8696
8728
  React__default['default'].createElement(react.IconButton, { iconProps: downloadIcon, className: react.mergeStyles(smallDownloadButtonContainerStyle(theme, isDarkTheme)), onClick: () => onImageDownloadButtonClicked(image.imageUrl, image.saveAsName), "aria-label": localeStrings.downloadButtonLabel, "aria-live": 'polite' }),
8697
8729
  React__default['default'].createElement(react.IconButton, { iconProps: cancelIcon, className: react.mergeStyles(closeButtonStyles(theme, isDarkTheme)), onClick: onDismiss,
8698
- /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
8730
+ /* @conditional-compile-remove(image-gallery) */
8699
8731
  ariaLabel: localeStrings.dismissButtonAriaLabel, "aria-live": 'polite' }))));
8700
8732
  };
8701
8733
  const renderBodyWithLightDismiss = () => {
@@ -8708,10 +8740,10 @@ const ImageGallery = (props) => {
8708
8740
  // Ensure when the focus trap has focus, the light dismiss area can still be clicked with mouse to dismiss.
8709
8741
  // Note: this still correctly captures keyboard focus, this just allows mouse click outside of the focus trap.
8710
8742
  isClickableOutsideFocusTrap: true, className: react.mergeStyles(bodyFocusZone) },
8711
- React__default['default'].createElement("img", { src: image.imageUrl, className: react.mergeStyles(imageStyle), alt: image.altText || 'image', onError: (event) => {
8743
+ React__default['default'].createElement("img", { src: image.imageUrl, className: react.mergeStyles(imageStyle), alt: image.altText || 'image', "aria-label": 'image-gallery-main-image', onError: (event) => {
8712
8744
  setIsImageLoaded(false);
8713
8745
  onError && onError(event);
8714
- }, onClick: (event) => event.stopPropagation() }))));
8746
+ }, onClick: (event) => event.stopPropagation(), "aria-live": 'polite' }))));
8715
8747
  };
8716
8748
  return (React__default['default'].createElement(react.Modal, { titleAriaId: image.title, isOpen: isOpen, onDismiss: onDismiss, overlay: { styles: Object.assign({}, overlayStyles(theme, isDarkTheme)) }, styles: { main: focusTrapZoneStyle, scrollableContent: scrollableContentStyle }, isDarkOverlay: true },
8717
8749
  renderHeaderBar(),
@@ -9708,16 +9740,23 @@ const processInlineImage = (props) => ({
9708
9740
  ((_a = props.message.attachedFilesMetadata) === null || _a === void 0 ? void 0 : _a.find(isImageNode)));
9709
9741
  },
9710
9742
  processNode: (node, children, index) => {
9743
+ node.attribs = Object.assign(Object.assign({}, node.attribs), { 'aria-label': node.attribs.name });
9711
9744
  // logic to check id in map/list
9712
9745
  if (props.attachmentsMap && node.attribs.id in props.attachmentsMap) {
9713
9746
  node.attribs = Object.assign(Object.assign({}, node.attribs), { src: props.attachmentsMap[node.attribs.id] });
9714
9747
  }
9715
- /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
9748
+ /* @conditional-compile-remove(image-gallery) */
9716
9749
  const handleOnClick = () => {
9717
9750
  props.onInlineImageClicked && props.onInlineImageClicked(node.attribs.id);
9718
9751
  };
9719
- /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
9720
- return (React__default['default'].createElement("span", { onClick: handleOnClick, "data-ui-id": node.attribs.id }, processNodeDefinitions.processDefaultNode(node, children, index)));
9752
+ /* @conditional-compile-remove(image-gallery) */
9753
+ return (React__default['default'].createElement("span", { "data-ui-id": node.attribs.id, onClick: handleOnClick, tabIndex: 0, role: "button", style: {
9754
+ cursor: 'pointer'
9755
+ }, onKeyDown: (e) => {
9756
+ if (e.key === 'Enter') {
9757
+ handleOnClick();
9758
+ }
9759
+ } }, processNodeDefinitions.processDefaultNode(node, children, index)));
9721
9760
  }
9722
9761
  });
9723
9762
  /* @conditional-compile-remove(mention) */
@@ -9916,7 +9955,7 @@ const MessageBubble = (props) => {
9916
9955
  const theme = useTheme();
9917
9956
  const locale = useLocale$1();
9918
9957
  const { userId, message, onRemoveClick, onResendClick, disableEditing, showDate, messageContainerStyle, strings, onEditClick, remoteParticipantsCount = 0, onRenderAvatar, showMessageStatus, messageStatus, fileDownloadHandler,
9919
- /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
9958
+ /* @conditional-compile-remove(image-gallery) */
9920
9959
  onInlineImageClicked } = props;
9921
9960
  const defaultTimeStamp = message.createdOn
9922
9961
  ? generateDefaultTimestamp(message.createdOn, showDate, strings)
@@ -9976,7 +10015,7 @@ const MessageBubble = (props) => {
9976
10015
  }
9977
10016
  return undefined;
9978
10017
  }, [editedOn, message.messageType, messageStatus, strings.editedTag, strings.failToSendTag, theme]);
9979
- /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
10018
+ /* @conditional-compile-remove(image-gallery) */
9980
10019
  const handleOnInlineImageClicked = React.useCallback((attachmentId) => __awaiter$x(void 0, void 0, void 0, function* () {
9981
10020
  if (onInlineImageClicked === undefined) {
9982
10021
  return;
@@ -9997,7 +10036,7 @@ const MessageBubble = (props) => {
9997
10036
  attachmentsMap: props.attachmentsMap,
9998
10037
  /* @conditional-compile-remove(mention) */
9999
10038
  mentionDisplayOptions: props.mentionDisplayOptions,
10000
- /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
10039
+ /* @conditional-compile-remove(image-gallery) */
10001
10040
  onInlineImageClicked: handleOnInlineImageClicked }),
10002
10041
  props.onRenderFileDownloads ? props.onRenderFileDownloads(userId, message) : defaultOnRenderFileDownloads()));
10003
10042
  }, [
@@ -10006,7 +10045,7 @@ const MessageBubble = (props) => {
10006
10045
  props,
10007
10046
  strings,
10008
10047
  userId,
10009
- /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
10048
+ /* @conditional-compile-remove(image-gallery) */
10010
10049
  handleOnInlineImageClicked
10011
10050
  ]);
10012
10051
  const chatMessage = (React__default['default'].createElement(React__default['default'].Fragment, null,
@@ -10084,9 +10123,9 @@ const ChatMessageComponent = (props) => {
10084
10123
  onDisplayDateTimeString: props.onDisplayDateTimeString, strings: props.strings,
10085
10124
  /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
10086
10125
  onFetchAttachments: props.onFetchAttachments,
10087
- /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
10126
+ /* @conditional-compile-remove(image-gallery) */
10088
10127
  onInlineImageClicked: props.onInlineImageClicked,
10089
- /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
10128
+ /* @conditional-compile-remove(image-gallery) */
10090
10129
  attachmentsMap: props.attachmentsMap,
10091
10130
  /* @conditional-compile-remove(mention) */
10092
10131
  mentionDisplayOptions: (_b = props.mentionOptions) === null || _b === void 0 ? void 0 : _b.displayOptions })));
@@ -10460,7 +10499,7 @@ const MessageThread = (props) => {
10460
10499
  onFetchAttachments,
10461
10500
  /* @conditional-compile-remove(mention) */
10462
10501
  mentionOptions,
10463
- /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
10502
+ /* @conditional-compile-remove(image-gallery) */
10464
10503
  onInlineImageClicked } = props;
10465
10504
  const onRenderFileDownloads = onRenderFileDownloadsTrampoline(props);
10466
10505
  const [messages, setMessages] = React.useState([]);
@@ -10708,7 +10747,7 @@ const MessageThread = (props) => {
10708
10747
  onDisplayDateTimeString: onDisplayDateTimeString,
10709
10748
  /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
10710
10749
  onFetchAttachments: onFetchInlineAttachment,
10711
- /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
10750
+ /* @conditional-compile-remove(image-gallery) */
10712
10751
  onInlineImageClicked: onInlineImageClicked,
10713
10752
  /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
10714
10753
  attachmentsMap: inlineAttachments,
@@ -10730,7 +10769,7 @@ const MessageThread = (props) => {
10730
10769
  onDisplayDateTimeString,
10731
10770
  /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
10732
10771
  onFetchInlineAttachment,
10733
- /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
10772
+ /* @conditional-compile-remove(image-gallery) */
10734
10773
  onInlineImageClicked,
10735
10774
  /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
10736
10775
  inlineAttachments,
@@ -17356,7 +17395,7 @@ const themedCaptionsSettingsModalStyle = (theme) => ({
17356
17395
  borderRadius: theme.effects.roundedCorner6,
17357
17396
  padding: _pxToRem(24),
17358
17397
  width: _pxToRem(440),
17359
- height: _pxToRem(268),
17398
+ height: 'fit-content',
17360
17399
  overflow: 'hidden'
17361
17400
  }
17362
17401
  });
@@ -17378,7 +17417,6 @@ const titleContainerClassName = react.mergeStyles({
17378
17417
  * @private
17379
17418
  */
17380
17419
  const dropdownContainerClassName = react.mergeStyles({
17381
- paddingBottom: _pxToRem(16),
17382
17420
  paddingTop: _pxToRem(16)
17383
17421
  });
17384
17422
  /**
@@ -17388,7 +17426,8 @@ const dropdownInfoTextStyle = (theme) => react.mergeStyles({
17388
17426
  fontWeight: 400,
17389
17427
  fontSize: _pxToRem(12),
17390
17428
  lineHeight: _pxToRem(16),
17391
- color: theme.palette.neutralSecondary
17429
+ color: theme.palette.neutralSecondary,
17430
+ paddingBottom: _pxToRem(24)
17392
17431
  });
17393
17432
  /**
17394
17433
  * @private
@@ -17429,6 +17468,56 @@ const dropdownStyles = {
17429
17468
  callout: Object.assign({ height: _pxToRem(300), overflow: 'auto' }, scrollbarStyles)
17430
17469
  };
17431
17470
 
17471
+ // Copyright (c) Microsoft Corporation.
17472
+ // Licensed under the MIT license.
17473
+ /**
17474
+ * @internal
17475
+ * mapping between caption language and spoken language codes
17476
+ */
17477
+ const _spokenLanguageToCaptionLanguage = {
17478
+ 'ar-ae': 'ar',
17479
+ 'ar-sa': 'ar',
17480
+ 'da-dk': 'da',
17481
+ 'de-de': 'de',
17482
+ 'en-au': 'en',
17483
+ 'en-ca': 'en',
17484
+ 'en-gb': 'en',
17485
+ 'en-in': 'en',
17486
+ 'en-nz': 'en',
17487
+ 'en-us': 'en',
17488
+ 'es-es': 'es',
17489
+ 'es-mx': 'es',
17490
+ 'fi-fi': 'fi',
17491
+ 'fr-ca': 'fr-ca',
17492
+ 'fr-fr': 'fr',
17493
+ 'hi-in': 'hi',
17494
+ 'it-it': 'it',
17495
+ 'ja-jp': 'ja',
17496
+ 'ko-kr': 'ko',
17497
+ 'nb-no': 'nb',
17498
+ 'nl-be': 'nl',
17499
+ 'nl-nl': 'nl',
17500
+ 'pl-pl': 'pl',
17501
+ 'pt-br': 'pt',
17502
+ 'ru-ru': 'ru',
17503
+ 'sv-se': 'sv',
17504
+ 'zh-cn': 'zh-Hans',
17505
+ 'zh-hk': 'zh-Hant',
17506
+ 'cs-cz': 'cs',
17507
+ 'pt-pt': 'pt-pt',
17508
+ 'tr-tr': 'tr',
17509
+ 'vi-vn': 'vi',
17510
+ 'th-th': 'th',
17511
+ 'he-il': 'he',
17512
+ 'cy-gb': 'cy',
17513
+ 'uk-ua': 'uk',
17514
+ 'el-gr': 'el',
17515
+ 'hu-hu': 'hu',
17516
+ 'ro-ro': 'ro',
17517
+ 'sk-sk': 'sk',
17518
+ 'zh-tw': 'zh-Hant'
17519
+ };
17520
+
17432
17521
  var __awaiter$r = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
17433
17522
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
17434
17523
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -17443,65 +17532,109 @@ var __awaiter$r = (window && window.__awaiter) || function (thisArg, _arguments,
17443
17532
  * a component for setting spoken languages
17444
17533
  */
17445
17534
  const _CaptionsSettingsModal = (props) => {
17446
- const { supportedSpokenLanguages, currentSpokenLanguage, isCaptionsFeatureActive, showModal, onSetSpokenLanguage, onDismissCaptionsSettings, onStartCaptions, strings, captionsAvailableLanguageStrings } = props;
17535
+ const { supportedSpokenLanguages, supportedCaptionLanguages, currentSpokenLanguage, currentCaptionLanguage, isCaptionsFeatureActive, showModal, onSetSpokenLanguage, onSetCaptionLanguage, onDismissCaptionsSettings, onStartCaptions, strings, spokenLanguageStrings, captionLanguageStrings, changeCaptionLanguage = false } = props;
17447
17536
  const theme = react.useTheme();
17448
- const [selectedItem, setSelectedItem] = React.useState({
17537
+ const [hasSetSpokenLanguage, setHasSetSpokenLanguage] = React.useState(false);
17538
+ const [selectedSpokenLanguage, setSelectedSpokenLanguage] = React.useState({
17449
17539
  key: currentSpokenLanguage !== '' ? currentSpokenLanguage : defaultSpokenLanguage,
17450
17540
  text: currentSpokenLanguage !== '' ? currentSpokenLanguage : defaultSpokenLanguage
17451
17541
  });
17452
- const [hasSetSpokenLanguage, setHasSetSpokenLanguage] = React.useState(false);
17453
- const onDismiss = React.useCallback(() => {
17454
- if (onDismissCaptionsSettings) {
17455
- onDismissCaptionsSettings();
17456
- }
17457
- }, [onDismissCaptionsSettings]);
17542
+ const [selectedCaptionLanguage, setSelectedCaptionLanguage] = React.useState({
17543
+ key: currentCaptionLanguage !== ''
17544
+ ? currentCaptionLanguage
17545
+ : _spokenLanguageToCaptionLanguage[selectedSpokenLanguage.key],
17546
+ text: currentCaptionLanguage !== ''
17547
+ ? currentCaptionLanguage
17548
+ : _spokenLanguageToCaptionLanguage[selectedSpokenLanguage.key]
17549
+ });
17458
17550
  React.useEffect(() => {
17459
17551
  // set spoken language when start captions with a spoken language specified.
17460
17552
  // this is to fix the bug when a second user starts captions with a new spoken language, captions bot ignore that spoken language
17461
17553
  if (isCaptionsFeatureActive && !hasSetSpokenLanguage) {
17462
- onSetSpokenLanguage(selectedItem.key.toString());
17554
+ onSetSpokenLanguage(selectedSpokenLanguage.key.toString());
17463
17555
  // we only need to call set spoken language once when first starting captions
17464
17556
  setHasSetSpokenLanguage(true);
17465
17557
  }
17466
- }, [isCaptionsFeatureActive, onSetSpokenLanguage, selectedItem.key, hasSetSpokenLanguage]);
17558
+ }, [isCaptionsFeatureActive, onSetSpokenLanguage, selectedSpokenLanguage.key, hasSetSpokenLanguage]);
17559
+ const onDismiss = React.useCallback(() => {
17560
+ if (onDismissCaptionsSettings) {
17561
+ onDismissCaptionsSettings();
17562
+ }
17563
+ }, [onDismissCaptionsSettings]);
17467
17564
  const onConfirm = React.useCallback(() => __awaiter$r(void 0, void 0, void 0, function* () {
17468
- const languageCode = selectedItem.key.toString();
17565
+ const spokenLanguageCode = selectedSpokenLanguage.key.toString();
17566
+ const captionLanguageCode = selectedCaptionLanguage.key.toString();
17469
17567
  if (isCaptionsFeatureActive) {
17470
- onSetSpokenLanguage(languageCode);
17568
+ onSetSpokenLanguage(spokenLanguageCode);
17569
+ onSetCaptionLanguage(captionLanguageCode);
17471
17570
  }
17472
17571
  else {
17473
- yield onStartCaptions({ spokenLanguage: languageCode });
17572
+ yield onStartCaptions({ spokenLanguage: spokenLanguageCode });
17474
17573
  }
17475
17574
  onDismiss();
17476
- }), [onDismiss, isCaptionsFeatureActive, onSetSpokenLanguage, onStartCaptions, selectedItem.key]);
17477
- const dropdownOptions = React.useMemo(() => {
17575
+ }), [
17576
+ onDismiss,
17577
+ isCaptionsFeatureActive,
17578
+ onSetSpokenLanguage,
17579
+ onSetCaptionLanguage,
17580
+ onStartCaptions,
17581
+ selectedSpokenLanguage.key,
17582
+ selectedCaptionLanguage.key
17583
+ ]);
17584
+ const spokenLanguageDropdownOptions = React.useMemo(() => {
17478
17585
  return supportedSpokenLanguages.map((languageCode) => {
17479
17586
  return {
17480
17587
  key: languageCode,
17481
- text: captionsAvailableLanguageStrings ? captionsAvailableLanguageStrings[languageCode] : languageCode
17588
+ text: spokenLanguageStrings ? spokenLanguageStrings[languageCode] : languageCode
17482
17589
  };
17483
17590
  });
17484
- }, [supportedSpokenLanguages, captionsAvailableLanguageStrings]);
17485
- const onChange = (event, option) => {
17591
+ }, [supportedSpokenLanguages, spokenLanguageStrings]);
17592
+ const captionLanguageDropdownOptions = React.useMemo(() => {
17593
+ return supportedCaptionLanguages.map((languageCode) => {
17594
+ return {
17595
+ key: languageCode,
17596
+ text: captionLanguageStrings ? captionLanguageStrings[languageCode] : languageCode
17597
+ };
17598
+ });
17599
+ }, [supportedCaptionLanguages, captionLanguageStrings]);
17600
+ const onSpokenLanguageChange = (event, option) => {
17486
17601
  if (option) {
17487
- setSelectedItem(option);
17602
+ setSelectedSpokenLanguage(option);
17603
+ }
17604
+ };
17605
+ const onCaptionLanguageChange = (event, option) => {
17606
+ if (option) {
17607
+ setSelectedCaptionLanguage(option);
17488
17608
  }
17489
17609
  };
17490
17610
  const calloutProps = React.useMemo(() => ({
17491
17611
  preventDismissOnEvent: _preventDismissOnEvent
17492
17612
  }), []);
17493
17613
  const CaptionsSettingsComponent = React.useCallback(() => {
17614
+ const placeholderSpokenLanguage = currentSpokenLanguage !== '' ? currentSpokenLanguage : defaultSpokenLanguage;
17615
+ const placeholderCaptionLanguage = currentCaptionLanguage !== ''
17616
+ ? currentCaptionLanguage
17617
+ : _spokenLanguageToCaptionLanguage[placeholderSpokenLanguage];
17494
17618
  return (React__default['default'].createElement(react.Stack, null,
17495
- 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, options: dropdownOptions, styles: dropdownStyles }),
17496
- React__default['default'].createElement(react.Text, { className: dropdownInfoTextStyle(theme) }, strings === null || strings === void 0 ? void 0 : strings.captionsSettingsDropdownInfoText)));
17619
+ React__default['default'].createElement(react.Dropdown, { label: strings === null || strings === void 0 ? void 0 : strings.captionsSettingsSpokenLanguageDropdownLabel, selectedKey: selectedSpokenLanguage ? selectedSpokenLanguage.key : undefined, onChange: onSpokenLanguageChange, calloutProps: calloutProps, placeholder: placeholderSpokenLanguage, options: spokenLanguageDropdownOptions, styles: dropdownStyles }),
17620
+ React__default['default'].createElement(react.Text, { className: dropdownInfoTextStyle(theme) }, strings === null || strings === void 0 ? void 0 : strings.captionsSettingsSpokenLanguageDropdownInfoText),
17621
+ changeCaptionLanguage && (React__default['default'].createElement(React__default['default'].Fragment, null,
17622
+ React__default['default'].createElement(react.Dropdown, { label: strings === null || strings === void 0 ? void 0 : strings.captionsSettingsCaptionLanguageDropdownLabel, selectedKey: selectedCaptionLanguage ? selectedCaptionLanguage.key : undefined, onChange: onCaptionLanguageChange, calloutProps: calloutProps, placeholder: placeholderCaptionLanguage, options: captionLanguageDropdownOptions, styles: dropdownStyles }),
17623
+ React__default['default'].createElement(react.Text, { className: dropdownInfoTextStyle(theme) }, strings === null || strings === void 0 ? void 0 : strings.captionsSettingsCaptionLanguageDropdownInfoText)))));
17497
17624
  }, [
17498
17625
  calloutProps,
17499
17626
  currentSpokenLanguage,
17500
- dropdownOptions,
17501
- selectedItem,
17502
- strings === null || strings === void 0 ? void 0 : strings.captionsSettingsDropdownInfoText,
17503
- strings === null || strings === void 0 ? void 0 : strings.captionsSettingsDropdownLabel,
17504
- theme
17627
+ currentCaptionLanguage,
17628
+ spokenLanguageDropdownOptions,
17629
+ captionLanguageDropdownOptions,
17630
+ selectedCaptionLanguage,
17631
+ selectedSpokenLanguage,
17632
+ strings === null || strings === void 0 ? void 0 : strings.captionsSettingsSpokenLanguageDropdownInfoText,
17633
+ strings === null || strings === void 0 ? void 0 : strings.captionsSettingsCaptionLanguageDropdownLabel,
17634
+ strings === null || strings === void 0 ? void 0 : strings.captionsSettingsSpokenLanguageDropdownLabel,
17635
+ strings === null || strings === void 0 ? void 0 : strings.captionsSettingsCaptionLanguageDropdownInfoText,
17636
+ theme,
17637
+ changeCaptionLanguage
17505
17638
  ]);
17506
17639
  const CaptionsSettingsModalStyle = React.useMemo(() => themedCaptionsSettingsModalStyle(theme), [theme]);
17507
17640
  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 },
@@ -20163,7 +20296,7 @@ const CallCompositeIcon = (props) => (React__default['default'].createElement(re
20163
20296
  */
20164
20297
  const CallWithChatCompositeIcon = (props) => (React__default['default'].createElement(react.FontIcon, Object.assign({}, props)));
20165
20298
 
20166
- var call$k={cameraLabel:"Camera",noCamerasLabel:"No cameras found",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",chatButtonLabel:"Chat",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",videoEffectsPaneTitle:"Effects",videoEffectsPaneBackgroundSelectionTitle:"Background",configurationPageVideoEffectsButtonLabel:"Effects",unableToStartVideoEffect:"Unable to apply video effect.",blurBackgroundEffectButtonLabel:"Blur",blurBackgroundTooltip:"Blur Background",removeBackgroundEffectButtonLabel:"None",removeBackgroundTooltip:"Remove Background",cameraOffBackgroundEffectWarningText:"Your camera is off. Turn on camera to see video effect.",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leavingCallTitle:"Leaving...",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",deniedPermissionToRoomDetails:"You do not have permission to join this room.",deniedPermissionToRoomTitle:"Permission denied to room",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",peoplePaneTitle:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call {numberOfPeople}",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",roomNotFoundDetails:"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"},captionsBannerSpinnerText:"Starting captions...",transferPageTransferorText:"Transferring...",transferPageTransferTargetText:"Connecting...",transferPageUnknownTransferorDisplayName:"Unknown",transferPageUnknownTransferTargetDisplayName:"Unknown",transferPageNoticeString:"You are being transferred",participantCouldNotBeReachedTitle:"Target participant is currently not available",participantCouldNotBeReachedMoreDetails:"Please contact participant when they are available",permissionToReachTargetParticipantNotAllowedTitle:"Permission to reach target participant is not allowed",permissionToReachTargetParticipantNotAllowedMoreDetails:"Please check that the target participant is in the same tenant",unableToResolveTenantTitle:"Unable to resolve tenant id for the target participant",unableToResolveTenantMoreDetails:"Please check the participant id is entered correctly",participantIdIsMalformedTitle:"Participant id is not in the correct format",participantIdIsMalformedMoreDetails:"Please check that the participant id is in the correct format",moreButtonGalleryControlLabel:"Gallery options",moreButtonGalleryPositionToggleLabel:"Move gallery to top",moreButtonGallerySpeakerLayoutLabel:"Speaker layout",moreButtonGalleryFloatingLocalLayoutLabel:"Dynamic layout",moreButtonGalleryDefaultLayoutLabel:"Gallery layout",moreButtonGalleryFocusedContentLayoutLabel:"Focused content"};var chat$k={chatListHeader:"In this chat",uploadFile:"Upload File"};var callWithChat$k={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",dismissSidePaneButtonLabel:"Close",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",moreDrawerCaptionsMenuTitle:"Live captions",moreDrawerSpokenLanguageMenuTitle:"Spoken language",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",peoplePaneTitle:"People",pictureInPictureTileAriaLabel:"Video Feeds. Click to return to call screen.",removeMenuLabel:"Remove",openDialpadButtonLabel:"Dial phone number",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number"};var en_US = {call:call$k,chat:chat$k,callWithChat:callWithChat$k};
20299
+ var call$k={cameraLabel:"Camera",noCamerasLabel:"No cameras found",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",chatButtonLabel:"Chat",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",videoEffectsPaneTitle:"Effects",videoEffectsPaneBackgroundSelectionTitle:"Background",configurationPageVideoEffectsButtonLabel:"Effects",unableToStartVideoEffect:"Unable to apply video effect.",blurBackgroundEffectButtonLabel:"Blur",blurBackgroundTooltip:"Blur Background",removeBackgroundEffectButtonLabel:"None",removeBackgroundTooltip:"Remove Background",cameraOffBackgroundEffectWarningText:"Your camera is off. Turn on camera to see video effect.",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leavingCallTitle:"Leaving...",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",deniedPermissionToRoomDetails:"You do not have permission to join this room.",deniedPermissionToRoomTitle:"Permission denied to room",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",peoplePaneTitle:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call {numberOfPeople}",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",roomNotFoundDetails:"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:"Captions Settings",captionsSettingsSpokenLanguageDropdownLabel:"Spoken language",captionsSettingsCaptionLanguageDropdownLabel:"Captions language",captionsSettingsSpokenLanguageDropdownInfoText:"Language that everyone on this call is speaking.",captionsSettingsCaptionLanguageDropdownInfoText:"Captions will appear in this langugage.",captionsSettingsConfirmButtonLabel:"Confirm",captionsSettingsCancelButtonLabel:"Cancel",captionsSettingsModalAriaLabel:"Captions Setting Modal",captionsSettingsCloseModalButtonAriaLabel:"Close Captions Setting",captionsBannerMoreButtonCallingLabel:"More",captionsBannerMoreButtonTooltip:"More options",spokenLanguageStrings:{"ar-ae":"Arabic - U.A.E.","ar-sa":"Arabic - Saudi Arabia","da-dk":"Danish","de-de":"German - Germany","en-au":"English - Australia","en-ca":"English - Canada","en-gb":"English - United Kingdom","en-in":"English - India","en-nz":"English - New Zealand","en-us":"English - United States","es-es":"Spanish - Spain (Modern Sort)","es-mx":"Spanish - Mexico","fi-fi":"Finnish","fr-ca":"French - Canada","fr-fr":"French - France","hi-in":"Hindi","it-it":"Italian - Italy","ja-jp":"Japanese","ko-kr":"Korean","nb-no":"Norwegian (Bokmål)","nl-be":"Dutch - Belgium","nl-nl":"Dutch - Netherlands","pl-pl":"Polish","pt-br":"Portuguese - Brazil","ru-ru":"Russian","sv-se":"Swedish","zh-cn":"Chinese - People's Republic of China","zh-hk":"Chinese - Hong Kong SAR","cs-cz":"Czech","pt-pt":"Portuguese - Portugal","tr-tr":"Turkish","vi-vn":"Vietnamese","th-th":"Thai","he-il":"Hebrew","cy-gb":"Welsh","uk-ua":"Ukrainian","el-gr":"Greek","hu-hu":"Hungarian","ro-ro":"Romanian","sk-sk":"Slovak","zh-tw":"Chinese - Taiwan"},captionLanguageStrings:{ar:"Arabic",da:"Danish",de:"German",en:"English",es:"Spanish",fi:"Finnish","fr-ca":"French - Canada",fr:"French - France",hi:"Hindi",it:"Italian",ja:"Japanese",ko:"Korean",nb:"Norwegian (Bokmål)",nl:"Dutch",pl:"Polish",pt:"Portuguese - Brazil",ru:"Russian",sv:"Swedish","zh-Hans":"Chinese (Simplified)","zh-Hant":"Chinese (Traditional)",cs:"Czech","pt-pt":"Portuguese - Portugal",tr:"Turkish",vi:"Vietnamese",th:"Thai",he:"Hebrew",cy:"Welsh",uk:"Ukrainian",el:"Greek",hu:"Hungarian",ro:"Romanian",sk:"Slovak"},captionsBannerSpinnerText:"Starting captions...",transferPageTransferorText:"Transferring...",transferPageTransferTargetText:"Connecting...",transferPageUnknownTransferorDisplayName:"Unknown",transferPageUnknownTransferTargetDisplayName:"Unknown",transferPageNoticeString:"You are being transferred",participantCouldNotBeReachedTitle:"Target participant is currently not available",participantCouldNotBeReachedMoreDetails:"Please contact participant when they are available",permissionToReachTargetParticipantNotAllowedTitle:"Permission to reach target participant is not allowed",permissionToReachTargetParticipantNotAllowedMoreDetails:"Please check that the target participant is in the same tenant",unableToResolveTenantTitle:"Unable to resolve tenant id for the target participant",unableToResolveTenantMoreDetails:"Please check the participant id is entered correctly",participantIdIsMalformedTitle:"Participant id is not in the correct format",participantIdIsMalformedMoreDetails:"Please check that the participant id is in the correct format",moreButtonGalleryControlLabel:"Gallery options",moreButtonGalleryPositionToggleLabel:"Move gallery to top",moreButtonGallerySpeakerLayoutLabel:"Speaker layout",moreButtonGalleryFloatingLocalLayoutLabel:"Dynamic layout",moreButtonGalleryDefaultLayoutLabel:"Gallery layout",moreButtonGalleryFocusedContentLayoutLabel:"Focused content"};var chat$k={chatListHeader:"In this chat",uploadFile:"Upload File"};var callWithChat$k={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",dismissSidePaneButtonLabel:"Close",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",moreDrawerCaptionsMenuTitle:"Live captions",moreDrawerSpokenLanguageMenuTitle:"Spoken language",moreDrawerCaptionLanguageMenuTitle:"Caption language",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",peoplePaneTitle:"People",pictureInPictureTileAriaLabel:"Video Feeds. Click to return to call screen.",removeMenuLabel:"Remove",openDialpadButtonLabel:"Dial phone number",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number"};var en_US = {call:call$k,chat:chat$k,callWithChat:callWithChat$k};
20167
20300
 
20168
20301
  var call$j={cameraLabel:"Camera",noCamerasLabel:"No cameras found",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",chatButtonLabel:"Chat",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",videoEffectsPaneTitle:"Effects",videoEffectsPaneBackgroundSelectionTitle:"Background",configurationPageVideoEffectsButtonLabel:"Effects",unableToStartVideoEffect:"Unable to apply video effect.",blurBackgroundEffectButtonLabel:"Blur",blurBackgroundTooltip:"Blur Background",removeBackgroundEffectButtonLabel:"None",removeBackgroundTooltip:"Remove Background",cameraOffBackgroundEffectWarningText:"Your camera is off. Turn on camera to see video effect.",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leavingCallTitle:"Leaving...",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",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 {numberOfPeople}",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",roomNotFoundDetails:"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"},captionsBannerSpinnerText:"Starting captions...",transferPageTransferorText:"Transferring...",transferPageTransferTargetText:"Connecting...",transferPageUnknownTransferorDisplayName:"Unknown",transferPageUnknownTransferTargetDisplayName:"Unknown",transferPageNoticeString:"You are being transferred",participantCouldNotBeReachedTitle:"Target participant is currently not available",participantCouldNotBeReachedMoreDetails:"Please contact participant when they are available",permissionToReachTargetParticipantNotAllowedTitle:"Permission to reach target participant is not allowed",permissionToReachTargetParticipantNotAllowedMoreDetails:"Please check that the target participant is in the same tenant",unableToResolveTenantTitle:"Unable to resolve tenant id for the target participant",unableToResolveTenantMoreDetails:"Please check the participant id is entered correctly",participantIdIsMalformedTitle:"Participant id is not in the correct format",participantIdIsMalformedMoreDetails:"Please check that the participant id is in the correct format",moreButtonGalleryControlLabel:"Gallery options",moreButtonGalleryPositionToggleLabel:"Move gallery to top",moreButtonGallerySpeakerLayoutLabel:"Speaker layout",moreButtonGalleryFloatingLocalLayoutLabel:"Dynamic layout",moreButtonGalleryDefaultLayoutLabel:"Gallery layout",moreButtonGalleryFocusedContentLayoutLabel:"Focused content"};var chat$j={chatListHeader:"In this chat",uploadFile:"Upload File"};var callWithChat$j={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_GB = {call:call$j,chat:chat$j,callWithChat:callWithChat$j};
20169
20302
 
@@ -21802,9 +21935,9 @@ const ChatScreen = (props) => {
21802
21935
  const defaultNumberOfChatMessagesToReload = 5;
21803
21936
  /* @conditional-compile-remove(file-sharing) */
21804
21937
  const [downloadErrorMessage, setDownloadErrorMessage] = React__default['default'].useState('');
21805
- /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
21938
+ /* @conditional-compile-remove(image-gallery) */
21806
21939
  const [fullSizeAttachments, setFullSizeAttachments] = React.useState({});
21807
- /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
21940
+ /* @conditional-compile-remove(image-gallery) */
21808
21941
  const [galleryImages, setGalleryImages] = React.useState([]);
21809
21942
  const adapter = useAdapter$1();
21810
21943
  const theme = useTheme();
@@ -21851,14 +21984,13 @@ const ChatScreen = (props) => {
21851
21984
  }
21852
21985
  return [{ blobUrl: '' }];
21853
21986
  }), [adapter]);
21854
- /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
21987
+ /* @conditional-compile-remove(image-gallery) */
21855
21988
  const onInlineImageClicked = React.useCallback((attachmentId, messageId) => __awaiter$i(void 0, void 0, void 0, function* () {
21856
21989
  var _a, _b;
21857
21990
  const messages = (_a = messageThreadProps.messages) === null || _a === void 0 ? void 0 : _a.filter((message) => {
21858
21991
  return message.messageId === messageId;
21859
21992
  });
21860
21993
  if (!messages || messages.length <= 0) {
21861
- console.log(`Message not found with messageId ${messageId}`);
21862
21994
  return;
21863
21995
  }
21864
21996
  const chatMessage = messages[0];
@@ -21866,7 +21998,6 @@ const ChatScreen = (props) => {
21866
21998
  return attachment.id === attachmentId;
21867
21999
  });
21868
22000
  if (!attachments || attachments.length <= 0) {
21869
- console.log(`Attachment not found with id ${attachmentId}`);
21870
22001
  return;
21871
22002
  }
21872
22003
  const attachment = attachments[0];
@@ -21901,16 +22032,24 @@ const ChatScreen = (props) => {
21901
22032
  }
21902
22033
  }
21903
22034
  }), [adapter, fullSizeAttachments, messageThreadProps.messages, onRenderAvatarCallback]);
21904
- /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
22035
+ /* @conditional-compile-remove(image-gallery) */
21905
22036
  const onImageDownloadButtonClicked = React.useCallback((imageUrl, saveAsName) => {
21906
- // Create a new anchor element
21907
- const a = document.createElement('a');
21908
- // Set the href and download attributes for the anchor element
21909
- a.href = imageUrl;
21910
- a.download = saveAsName || 'download';
21911
- // Programmatically click the anchor element to trigger the download
21912
- a.click();
21913
- a.remove();
22037
+ if (react.isIOS()) {
22038
+ window.open(imageUrl, '_blank');
22039
+ }
22040
+ else {
22041
+ // Create a new anchor element
22042
+ const a = document.createElement('a');
22043
+ // Set the href and download attributes for the anchor element
22044
+ a.href = imageUrl;
22045
+ a.download = saveAsName;
22046
+ a.rel = 'noopener noreferrer';
22047
+ a.target = '_blank';
22048
+ // Programmatically click the anchor element to trigger the download
22049
+ document.body.appendChild(a);
22050
+ a.click();
22051
+ document.body.removeChild(a);
22052
+ }
21914
22053
  }, []);
21915
22054
  const AttachFileButton = React.useCallback(() => {
21916
22055
  if (!(fileSharing === null || fileSharing === void 0 ? void 0 : fileSharing.uploadHandler)) {
@@ -21932,7 +22071,7 @@ const ChatScreen = (props) => {
21932
22071
  onRenderFileDownloads: onRenderFileDownloads,
21933
22072
  /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
21934
22073
  onFetchAttachments: onRenderInlineAttachment,
21935
- /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
22074
+ /* @conditional-compile-remove(image-gallery) */
21936
22075
  onInlineImageClicked: onInlineImageClicked, numberOfChatMessagesToReload: defaultNumberOfChatMessagesToReload, styles: messageThreadStyles })),
21937
22076
  React__default['default'].createElement(react.Stack, { className: react.mergeStyles(sendboxContainerStyles) },
21938
22077
  React__default['default'].createElement("div", { className: react.mergeStyles(typingIndicatorContainerStyles) }, onRenderTypingIndicator ? (onRenderTypingIndicator(typingIndicatorProps.typingUsers)) : (React__default['default'].createElement(TypingIndicator, Object.assign({}, typingIndicatorProps, { styles: typingIndicatorStyles })))),
@@ -21948,7 +22087,7 @@ const ChatScreen = (props) => {
21948
22087
  formFactor !== 'mobile' && React__default['default'].createElement(AttachFileButton, null)))),
21949
22088
  /* @conditional-compile-remove(chat-composite-participant-pane) */
21950
22089
  (options === null || options === void 0 ? void 0 : options.participantPane) === true && (React__default['default'].createElement(ChatScreenPeoplePane, { onFetchAvatarPersonaData: onFetchAvatarPersonaData, onFetchParticipantMenuItems: props.onFetchParticipantMenuItems, isMobile: formFactor === 'mobile' }))),
21951
- /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
22090
+ /* @conditional-compile-remove(image-gallery) */
21952
22091
  React__default['default'].createElement(ImageGallery, { isOpen: galleryImages.length > 0, images: galleryImages, onDismiss: () => setGalleryImages([]), onImageDownloadButtonClicked: onImageDownloadButtonClicked })));
21953
22092
  };
21954
22093
 
@@ -22630,7 +22769,7 @@ const createCompositeHandlers = memoizeOne__default['default']((adapter) => ({
22630
22769
  /** @private */
22631
22770
  const CaptionsSettingsModal = (props) => {
22632
22771
  /* @conditional-compile-remove(close-captions) */
22633
- const CaptionsSettingsModalProps = useAdaptedSelector(_changeSpokenLanguageSelector);
22772
+ const CaptionsSettingsModalProps = useAdaptedSelector(_captionSettingsSelector);
22634
22773
  /* @conditional-compile-remove(close-captions) */
22635
22774
  const handlers = useHandlers();
22636
22775
  /* @conditional-compile-remove(close-captions) */
@@ -22638,17 +22777,21 @@ const CaptionsSettingsModal = (props) => {
22638
22777
  /* @conditional-compile-remove(close-captions) */
22639
22778
  const modalStrings = {
22640
22779
  captionsSettingsModalTitle: strings.captionsSettingsModalTitle,
22641
- captionsSettingsDropdownLabel: strings.captionsSettingsDropdownLabel,
22642
- captionsSettingsDropdownInfoText: strings.captionsSettingsDropdownInfoText,
22780
+ captionsSettingsSpokenLanguageDropdownLabel: strings.captionsSettingsSpokenLanguageDropdownLabel,
22781
+ captionsSettingsCaptionLanguageDropdownLabel: strings.captionsSettingsCaptionLanguageDropdownLabel,
22782
+ captionsSettingsSpokenLanguageDropdownInfoText: strings.captionsSettingsSpokenLanguageDropdownInfoText,
22783
+ captionsSettingsCaptionLanguageDropdownInfoText: strings.captionsSettingsCaptionLanguageDropdownInfoText,
22643
22784
  captionsSettingsConfirmButtonLabel: strings.captionsSettingsConfirmButtonLabel,
22644
22785
  captionsSettingsCancelButtonLabel: strings.captionsSettingsCancelButtonLabel,
22645
22786
  captionsSettingsModalAriaLabel: strings.captionsSettingsModalAriaLabel,
22646
22787
  captionsSettingsCloseModalButtonAriaLabel: strings.captionsSettingsCloseModalButtonAriaLabel
22647
22788
  };
22648
22789
  /* @conditional-compile-remove(close-captions) */
22649
- const captionsAvailableLanguageStrings = strings.captionsAvailableLanguageStrings;
22790
+ const spokenLanguageStrings = strings.spokenLanguageStrings;
22650
22791
  /* @conditional-compile-remove(close-captions) */
22651
- return (React__default['default'].createElement(_CaptionsSettingsModal, Object.assign({}, CaptionsSettingsModalProps, handlers, { strings: modalStrings, captionsAvailableLanguageStrings: captionsAvailableLanguageStrings, showModal: props.showCaptionsSettingsModal, onDismissCaptionsSettings: props.onDismissCaptionsSettings })));
22792
+ const captionLanguageStrings = strings.captionLanguageStrings;
22793
+ /* @conditional-compile-remove(close-captions) */
22794
+ return (React__default['default'].createElement(_CaptionsSettingsModal, Object.assign({}, CaptionsSettingsModalProps, handlers, { strings: modalStrings, spokenLanguageStrings: spokenLanguageStrings, captionLanguageStrings: captionLanguageStrings, showModal: props.showCaptionsSettingsModal, onDismissCaptionsSettings: props.onDismissCaptionsSettings, changeCaptionLanguage: props.changeCaptionLanguage })));
22652
22795
  };
22653
22796
 
22654
22797
  // Copyright (c) Microsoft Corporation.
@@ -22840,7 +22983,7 @@ const CaptionsBannerMoreButton = (props) => {
22840
22983
  /* @conditional-compile-remove(close-captions) */
22841
22984
  const mobileViewBannerWidth = '90%';
22842
22985
  /* @conditional-compile-remove(close-captions) */
22843
- const desktopViewBannerWidth = '50%';
22986
+ const desktopViewBannerWidth = '35rem';
22844
22987
  /** @private */
22845
22988
  const CaptionsBanner = (props) => {
22846
22989
  /* @conditional-compile-remove(close-captions) */
@@ -22874,10 +23017,10 @@ const CaptionsBanner = (props) => {
22874
23017
  captionsBannerSpinnerText: strings.captionsBannerSpinnerText
22875
23018
  };
22876
23019
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
22877
- /* @conditional-compile-remove(close-captions) */ isCaptionsSettingsOpen && (React__default['default'].createElement(CaptionsSettingsModal, { showCaptionsSettingsModal: isCaptionsSettingsOpen, onDismissCaptionsSettings: onDismissCaptionsSettings })),
23020
+ /* @conditional-compile-remove(close-captions) */ isCaptionsSettingsOpen && (React__default['default'].createElement(CaptionsSettingsModal, { showCaptionsSettingsModal: isCaptionsSettingsOpen, onDismissCaptionsSettings: onDismissCaptionsSettings, changeCaptionLanguage: true })),
22878
23021
  /* @conditional-compile-remove(close-captions) */ React__default['default'].createElement("div", { className: containerClassName },
22879
23022
  React__default['default'].createElement(react.Stack, { horizontalAlign: "center" },
22880
- React__default['default'].createElement(react.Stack.Item, { style: { width: props.isMobile ? mobileViewBannerWidth : desktopViewBannerWidth, maxWidth: '35rem' } },
23023
+ React__default['default'].createElement(react.Stack.Item, { style: { width: props.isMobile ? mobileViewBannerWidth : desktopViewBannerWidth } },
22881
23024
  React__default['default'].createElement(_CaptionsBanner, Object.assign({}, captionsBannerProps, handlers, { formFactor: props.isMobile ? 'compact' : 'default', strings: captionsBannerStrings })))),
22882
23025
  !props.isMobile && captionsBannerProps.isCaptionsOn && (React__default['default'].createElement("div", { className: floatingChildClassName },
22883
23026
  React__default['default'].createElement(CaptionsBannerMoreButton, { onCaptionsSettingsClick: onClickCaptionsSettings }))))));
@@ -23109,6 +23252,12 @@ const getRemoteParticipants = (state) => { var _a; return (_a = state.call) ===
23109
23252
  */
23110
23253
  const getSelectedVideoEffect = (state) => state.selectedVideoBackgroundEffect;
23111
23254
  /* @conditional-compile-remove(close-captions) */
23255
+ /** @private */
23256
+ const getCaptionsStatus = (state) => {
23257
+ var _a;
23258
+ return (_a = state.call) === null || _a === void 0 ? void 0 : _a.captionsFeature.isCaptionsFeatureActive;
23259
+ };
23260
+ /* @conditional-compile-remove(close-captions) */
23112
23261
  /**
23113
23262
  * @private
23114
23263
  */
@@ -24147,7 +24296,7 @@ const CommonCallControlBar = (props) => {
24147
24296
  const cameraButtonIsEnabled = isEnabled$1(options === null || options === void 0 ? void 0 : options.cameraButton);
24148
24297
  return (React__default['default'].createElement("div", { ref: controlBarSizeRef },
24149
24298
  React__default['default'].createElement(CallAdapterProvider, { adapter: props.callAdapter },
24150
- /* @conditional-compile-remove(close-captions) */ showCaptionsSettingsModal && (React__default['default'].createElement(CaptionsSettingsModal, { showCaptionsSettingsModal: showCaptionsSettingsModal, onDismissCaptionsSettings: onDismissCaptionsSettings }))),
24299
+ /* @conditional-compile-remove(close-captions) */ showCaptionsSettingsModal && (React__default['default'].createElement(CaptionsSettingsModal, { showCaptionsSettingsModal: showCaptionsSettingsModal, onDismissCaptionsSettings: onDismissCaptionsSettings, changeCaptionLanguage: props.isCaptionsOn }))),
24151
24300
  React__default['default'].createElement(react.Stack, { horizontal: true, reversed: !props.mobileView && !isOutOfSpace, horizontalAlign: "space-between", className: react.mergeStyles(callControlsContainerStyles, controlBarContainerStyles, controlBarDesktopContainerStyles) },
24152
24301
  React__default['default'].createElement(react.Stack.Item, { grow: true, className: react.mergeStyles(controlBarWrapperDesktopStyles) },
24153
24302
  React__default['default'].createElement(CallAdapterProvider, { adapter: props.callAdapter },
@@ -24177,9 +24326,11 @@ const CommonCallControlBar = (props) => {
24177
24326
  return (React__default['default'].createElement(CustomButton, { key: `primary-custom-button-${i}`, styles: commonButtonStyles, showLabel: options.displayType !== 'compact' }));
24178
24327
  }),
24179
24328
  props.mobileView && (React__default['default'].createElement(MoreButton, { "data-ui-id": "common-call-composite-more-button", strings: moreButtonStrings, onClick: props.onMoreButtonClicked, disabled: props.disableButtonsForLobbyPage })),
24180
- /*@conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ isEnabled$1(options === null || options === void 0 ? void 0 : options.moreButton) &&
24329
+ /*@conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */ isEnabled$1(options === null || options === void 0 ? void 0 : options.moreButton) &&
24181
24330
  /*@conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ isEnabled$1(options === null || options === void 0 ? void 0 : options.holdButton) &&
24182
- !props.mobileView && (React__default['default'].createElement(DesktopMoreButton, { disableButtonsForHoldScreen: props.disableButtonsForHoldScreen, styles: commonButtonStyles, onClickShowDialpad: props.onClickShowDialpad,
24331
+ !props.mobileView && (React__default['default'].createElement(DesktopMoreButton, { disableButtonsForHoldScreen: props.disableButtonsForHoldScreen, styles: commonButtonStyles,
24332
+ /*@conditional-compile-remove(PSTN-calls) */
24333
+ onClickShowDialpad: props.onClickShowDialpad,
24183
24334
  /* @conditional-compile-remove(control-bar-button-injection) */
24184
24335
  callControls: props.callControls,
24185
24336
  /* @conditional-compile-remove(close-captions) */
@@ -24356,7 +24507,7 @@ const callStatusSelector = reselect.createSelector([getCallStatus, getIsScreenSh
24356
24507
  /**
24357
24508
  * @private
24358
24509
  */
24359
- const spokenLanguageDrawerStyles = (theme) => ({
24510
+ const captionSettingsDrawerStyles = (theme) => ({
24360
24511
  root: {
24361
24512
  overflow: 'auto'
24362
24513
  },
@@ -24364,8 +24515,8 @@ const spokenLanguageDrawerStyles = (theme) => ({
24364
24515
  drawerContentContainer: {
24365
24516
  root: {
24366
24517
  span: {
24367
- fontWeight: 600,
24368
- fontSize: _pxToRem(17),
24518
+ fontWeight: 400,
24519
+ fontSize: _pxToRem(14),
24369
24520
  lineHeight: _pxToRem(22),
24370
24521
  color: theme.palette.neutralDark
24371
24522
  }
@@ -24376,38 +24527,29 @@ const spokenLanguageDrawerStyles = (theme) => ({
24376
24527
 
24377
24528
  // Copyright (c) Microsoft Corporation.
24378
24529
  /** @private */
24379
- const SpokenLanguageDrawer = (props) => {
24530
+ const CaptionSettingsDrawer = (props) => {
24380
24531
  var _a;
24381
24532
  /* @conditional-compile-remove(close-captions) */
24382
24533
  const theme = useTheme();
24383
24534
  /* @conditional-compile-remove(close-captions) */
24384
- const changeSpokenLanguageProps = useAdaptedSelector(_changeSpokenLanguageSelector);
24385
- /* @conditional-compile-remove(close-captions) */
24386
- const changeSpokenLanguageHandlers = useHandlers();
24387
- /* @conditional-compile-remove(close-captions) */
24388
- const onSpokenLanguageDrawerItemClick = React.useCallback((languageCode) => {
24389
- props.setCurrentSpokenLanguage(languageCode);
24535
+ const onDrawerItemClick = React.useCallback((languageCode) => {
24536
+ props.selectLanguage(languageCode);
24390
24537
  }, [props]);
24391
24538
  /* @conditional-compile-remove(close-captions) */
24392
- const spokenLanguageDrawerItems = React.useMemo(() => {
24539
+ const drawerItems = React.useMemo(() => {
24393
24540
  var _a;
24394
- return (_a = changeSpokenLanguageProps === null || changeSpokenLanguageProps === void 0 ? void 0 : changeSpokenLanguageProps.supportedSpokenLanguages) === null || _a === void 0 ? void 0 : _a.map((languageCode) => ({
24541
+ return Object.keys((_a = props.supportedLanguageStrings) !== null && _a !== void 0 ? _a : []).map((languageCode) => ({
24395
24542
  itemKey: languageCode,
24396
24543
  text: props.supportedLanguageStrings ? props.supportedLanguageStrings[languageCode] : languageCode,
24397
- onItemClick: () => onSpokenLanguageDrawerItemClick(languageCode),
24398
- secondaryIconProps: props.currentSpokenLanguage === languageCode ? { iconName: 'Accept' } : undefined
24544
+ onItemClick: () => onDrawerItemClick(languageCode),
24545
+ secondaryIconProps: props.currentLanguage === languageCode ? { iconName: 'Accept' } : undefined
24399
24546
  }));
24400
- }, [
24401
- changeSpokenLanguageProps === null || changeSpokenLanguageProps === void 0 ? void 0 : changeSpokenLanguageProps.supportedSpokenLanguages,
24402
- props.currentSpokenLanguage,
24403
- props.supportedLanguageStrings,
24404
- onSpokenLanguageDrawerItemClick
24405
- ]);
24547
+ }, [props.currentLanguage, props.supportedLanguageStrings, onDrawerItemClick]);
24406
24548
  /* @conditional-compile-remove(close-captions) */
24407
- 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: () => {
24408
- changeSpokenLanguageHandlers.onSetSpokenLanguage(props.currentSpokenLanguage);
24549
+ return (React__default['default'].createElement(_DrawerMenu, { heading: (_a = props.strings) === null || _a === void 0 ? void 0 : _a.menuTitle, items: drawerItems !== null && drawerItems !== void 0 ? drawerItems : [], onLightDismiss: () => {
24550
+ props.setCurrentLanguage(props.currentLanguage);
24409
24551
  props.onLightDismiss();
24410
- }, styles: spokenLanguageDrawerStyles(theme) }));
24552
+ }, styles: captionSettingsDrawerStyles(theme) }));
24411
24553
  };
24412
24554
 
24413
24555
  /**
@@ -24459,7 +24601,7 @@ const MoreDrawer = (props) => {
24459
24601
  const theme = react.useTheme();
24460
24602
  const drawerMenuItems = [];
24461
24603
  const { speakers, onSelectSpeaker, onLightDismiss } = props;
24462
- /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
24604
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */
24463
24605
  const localeStrings = useLocale();
24464
24606
  /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
24465
24607
  const holdButtonProps = usePropsFor$1(HoldButton);
@@ -24589,18 +24731,29 @@ const MoreDrawer = (props) => {
24589
24731
  }
24590
24732
  /* @conditional-compile-remove(close-captions) */
24591
24733
  //Captions drawer menu
24592
- const supportedLanguageStrings = useLocale().strings.call.captionsAvailableLanguageStrings;
24734
+ const supportedSpokenLanguageStrings = useLocale().strings.call.spokenLanguageStrings;
24593
24735
  /* @conditional-compile-remove(close-captions) */
24594
- const startCaptionsButtonProps = useAdaptedSelector(_startCaptionsButtonSelector);
24736
+ //Captions drawer menu
24737
+ const supportedCaptionLanguageStrings = useLocale().strings.call.captionLanguageStrings;
24738
+ /* @conditional-compile-remove(close-captions) */
24739
+ const captionSettingsProp = useAdaptedSelector(_captionSettingsSelector);
24595
24740
  /* @conditional-compile-remove(close-captions) */
24596
24741
  const startCaptionsButtonHandlers = useHandlers();
24597
24742
  /* @conditional-compile-remove(close-captions) */
24743
+ const captionSettingsHandlers = useHandlers();
24744
+ /* @conditional-compile-remove(close-captions) */
24598
24745
  const [isSpokenLanguageDrawerOpen, setIsSpokenLanguageDrawerOpen] = React.useState(false);
24599
24746
  /* @conditional-compile-remove(close-captions) */
24600
- const [currentSpokenLanguage, setCurrentSpokenLanguage] = React.useState(startCaptionsButtonProps.currentSpokenLanguage);
24747
+ const [isCaptionLanguageDrawerOpen, setIsCaptionLanguageDrawerOpen] = React.useState(false);
24748
+ /* @conditional-compile-remove(close-captions) */
24749
+ const [currentSpokenLanguage, setCurrentSpokenLanguage] = React.useState(captionSettingsProp.currentSpokenLanguage !== '' ? captionSettingsProp.currentSpokenLanguage : 'en-us');
24750
+ /* @conditional-compile-remove(close-captions) */
24751
+ const [currentCaptionLanguage, setCurrentCaptionLanguage] = React.useState(captionSettingsProp.currentCaptionLanguage !== ''
24752
+ ? captionSettingsProp.currentCaptionLanguage
24753
+ : _spokenLanguageToCaptionLanguage[currentSpokenLanguage]);
24601
24754
  /* @conditional-compile-remove(close-captions) */
24602
24755
  const onToggleChange = React.useCallback(() => __awaiter$d(void 0, void 0, void 0, function* () {
24603
- if (!startCaptionsButtonProps.checked) {
24756
+ if (!captionSettingsProp.isCaptionsFeatureActive) {
24604
24757
  yield startCaptionsButtonHandlers.onStartCaptions({
24605
24758
  spokenLanguage: currentSpokenLanguage
24606
24759
  });
@@ -24608,10 +24761,16 @@ const MoreDrawer = (props) => {
24608
24761
  else {
24609
24762
  startCaptionsButtonHandlers.onStopCaptions();
24610
24763
  }
24611
- }), [startCaptionsButtonProps.checked, startCaptionsButtonHandlers, currentSpokenLanguage]);
24764
+ }), [captionSettingsProp.isCaptionsFeatureActive, startCaptionsButtonHandlers, currentSpokenLanguage]);
24612
24765
  /* @conditional-compile-remove(close-captions) */
24613
24766
  if (props.isCaptionsSupported) {
24614
24767
  const captionsDrawerItems = [];
24768
+ const spokenLanguageString = supportedSpokenLanguageStrings
24769
+ ? supportedSpokenLanguageStrings[currentSpokenLanguage]
24770
+ : currentSpokenLanguage;
24771
+ const captionLanguageString = supportedCaptionLanguageStrings
24772
+ ? supportedCaptionLanguageStrings[currentCaptionLanguage]
24773
+ : currentCaptionLanguage;
24615
24774
  drawerMenuItems.push({
24616
24775
  itemKey: 'captions',
24617
24776
  id: 'common-call-composite-captions-button',
@@ -24622,27 +24781,27 @@ const MoreDrawer = (props) => {
24622
24781
  });
24623
24782
  captionsDrawerItems.push({
24624
24783
  itemKey: 'ToggleCaptionsKey',
24625
- text: startCaptionsButtonProps.checked
24784
+ text: captionSettingsProp.isCaptionsFeatureActive
24626
24785
  ? localeStrings.strings.call.startCaptionsButtonTooltipOnContent
24627
24786
  : localeStrings.strings.call.startCaptionsButtonTooltipOffContent,
24628
24787
  iconProps: {
24629
- iconName: startCaptionsButtonProps.checked ? 'CaptionsOffIcon' : 'CaptionsIcon',
24788
+ iconName: captionSettingsProp.isCaptionsFeatureActive ? 'CaptionsOffIcon' : 'CaptionsIcon',
24630
24789
  styles: { root: { lineHeight: 0 } }
24631
24790
  },
24632
24791
  disabled: props.disableButtonsForHoldScreen,
24633
24792
  secondaryComponent: (React__default['default'].createElement(react.Stack, { verticalFill: true, verticalAlign: "center" },
24634
- React__default['default'].createElement(react.Toggle, { id: "common-call-composite-captions-toggle-button", checked: startCaptionsButtonProps.checked, styles: themedToggleButtonStyle(theme, startCaptionsButtonProps.checked), onChange: onToggleChange })))
24793
+ React__default['default'].createElement(react.Toggle, { id: "common-call-composite-captions-toggle-button", checked: captionSettingsProp.isCaptionsFeatureActive, styles: themedToggleButtonStyle(theme, captionSettingsProp.isCaptionsFeatureActive), onChange: onToggleChange })))
24635
24794
  });
24636
24795
  captionsDrawerItems.push({
24637
24796
  itemKey: 'ChangeSpokenLanguage',
24638
24797
  text: props.strings.spokenLanguageMenuTitle,
24639
- id: 'common-call-composite-captions-settings-button',
24640
- secondaryText: supportedLanguageStrings ? supportedLanguageStrings[currentSpokenLanguage] : currentSpokenLanguage,
24798
+ id: 'common-call-composite-captions-spoken-settings-button',
24799
+ secondaryText: spokenLanguageString,
24641
24800
  iconProps: {
24642
24801
  iconName: 'ChangeSpokenLanguageIcon',
24643
24802
  styles: { root: { lineHeight: 0 } }
24644
24803
  },
24645
- disabled: props.disableButtonsForHoldScreen || !startCaptionsButtonProps.checked,
24804
+ disabled: props.disableButtonsForHoldScreen || !captionSettingsProp.isCaptionsFeatureActive,
24646
24805
  onItemClick: () => {
24647
24806
  setIsSpokenLanguageDrawerOpen(true);
24648
24807
  },
@@ -24651,6 +24810,24 @@ const MoreDrawer = (props) => {
24651
24810
  styles: { root: { lineHeight: 0 } }
24652
24811
  }
24653
24812
  });
24813
+ captionsDrawerItems.push({
24814
+ itemKey: 'ChangeCaptionLanguage',
24815
+ text: props.strings.captionLanguageMenuTitle,
24816
+ id: 'common-call-composite-captions-subtitle-settings-button',
24817
+ secondaryText: captionLanguageString,
24818
+ iconProps: {
24819
+ iconName: 'ChangeCaptionLanguageIcon',
24820
+ styles: { root: { lineHeight: 0 } }
24821
+ },
24822
+ disabled: props.disableButtonsForHoldScreen || !captionSettingsProp.isCaptionsFeatureActive,
24823
+ onItemClick: () => {
24824
+ setIsCaptionLanguageDrawerOpen(true);
24825
+ },
24826
+ secondaryIconProps: {
24827
+ iconName: 'ChevronRight',
24828
+ styles: { root: { lineHeight: 0 } }
24829
+ }
24830
+ });
24654
24831
  }
24655
24832
  /* @conditional-compile-remove(control-bar-button-injection) */
24656
24833
  const customDrawerButtons = React.useMemo(() => generateCustomCallDrawerButtons(onFetchCustomButtonPropsTrampoline(drawerSelectionOptions !== false ? drawerSelectionOptions : undefined), drawerSelectionOptions !== false ? drawerSelectionOptions === null || drawerSelectionOptions === void 0 ? void 0 : drawerSelectionOptions.displayType : undefined), [drawerSelectionOptions]);
@@ -24668,8 +24845,9 @@ const MoreDrawer = (props) => {
24668
24845
  });
24669
24846
  /* @conditional-compile-remove(close-captions) */
24670
24847
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
24671
- isSpokenLanguageDrawerOpen && props.isCaptionsSupported && (React__default['default'].createElement(SpokenLanguageDrawer, { onLightDismiss: props.onLightDismiss, setCurrentSpokenLanguage: setCurrentSpokenLanguage, currentSpokenLanguage: currentSpokenLanguage, strings: props.strings, supportedLanguageStrings: supportedLanguageStrings })),
24672
- !isSpokenLanguageDrawerOpen && React__default['default'].createElement(_DrawerMenu, { items: drawerMenuItems, onLightDismiss: props.onLightDismiss })));
24848
+ isSpokenLanguageDrawerOpen && props.isCaptionsSupported && (React__default['default'].createElement(CaptionSettingsDrawer, { onLightDismiss: props.onLightDismiss, selectLanguage: setCurrentSpokenLanguage, setCurrentLanguage: captionSettingsHandlers.onSetSpokenLanguage, currentLanguage: currentSpokenLanguage, strings: { menuTitle: props.strings.spokenLanguageMenuTitle }, supportedLanguageStrings: supportedSpokenLanguageStrings })),
24849
+ isCaptionLanguageDrawerOpen && props.isCaptionsSupported && (React__default['default'].createElement(CaptionSettingsDrawer, { onLightDismiss: props.onLightDismiss, selectLanguage: setCurrentCaptionLanguage, setCurrentLanguage: captionSettingsHandlers.onSetCaptionLanguage, currentLanguage: currentCaptionLanguage, strings: { menuTitle: props.strings.captionLanguageMenuTitle }, supportedLanguageStrings: supportedCaptionLanguageStrings })),
24850
+ !isSpokenLanguageDrawerOpen && !isCaptionLanguageDrawerOpen && (React__default['default'].createElement(_DrawerMenu, { items: drawerMenuItems, onLightDismiss: props.onLightDismiss }))));
24673
24851
  };
24674
24852
  const isDeviceSelected = (speaker, selectedSpeaker) => !!selectedSpeaker && speaker.id === selectedSpeaker.id;
24675
24853
  const isEnabled = (option) => option !== false;
@@ -24699,7 +24877,9 @@ const PreparedMoreDrawer = (props) => {
24699
24877
  /* @conditional-compile-remove(close-captions) */
24700
24878
  captionsMenuTitle: strings.moreDrawerCaptionsMenuTitle,
24701
24879
  /* @conditional-compile-remove(close-captions) */
24702
- spokenLanguageMenuTitle: strings.moreDrawerSpokenLanguageMenuTitle
24880
+ spokenLanguageMenuTitle: strings.moreDrawerSpokenLanguageMenuTitle,
24881
+ /* @conditional-compile-remove(close-captions) */
24882
+ captionLanguageMenuTitle: strings.moreDrawerCaptionLanguageMenuTitle
24703
24883
  }), [strings]);
24704
24884
  const deviceProps = useSelector$1(moreDrawerSelector);
24705
24885
  const callHandlers = useHandlers();
@@ -26091,6 +26271,8 @@ const CallArrangement = (props) => {
26091
26271
  const isTeamsCall = useSelector$1(getIsTeamsCall);
26092
26272
  /* @conditional-compile-remove(close-captions) */
26093
26273
  const hasJoinedCall = useSelector$1(getCallStatus) === 'Connected';
26274
+ /* @conditional-compile-remove(close-captions) */
26275
+ const isCaptionsOn = useSelector$1(getCaptionsStatus);
26094
26276
  const minMaxDragPosition = useMinMaxDragPosition(props.modalLayerHostId);
26095
26277
  const pipStyles = React.useMemo(() => getPipStyles(theme), [theme]);
26096
26278
  const verticalControlBar = props.mobileView && containerWidth && containerHeight && containerWidth / containerHeight > 1 ? true : false;
@@ -26109,6 +26291,8 @@ const CallArrangement = (props) => {
26109
26291
  disableButtonsForHoldScreen: isInLocalHold, peopleButtonChecked: isPeoplePaneOpen, onPeopleButtonClicked: togglePeoplePane, onMoreButtonClicked: onMoreButtonClicked,
26110
26292
  /* @conditional-compile-remove(close-captions) */
26111
26293
  isCaptionsSupported: isTeamsCall && hasJoinedCall,
26294
+ /* @conditional-compile-remove(close-captions) */
26295
+ isCaptionsOn: isCaptionsOn,
26112
26296
  /* @conditional-compile-remove(video-background-effects) */
26113
26297
  onShowVideoEffectsPicker: onResolveVideoEffectDependency ? openVideoEffectsPane : undefined,
26114
26298
  /* @conditional-compile-remove(PSTN-calls) */
@@ -29407,6 +29591,8 @@ class AzureCommunicationCallAdapter {
29407
29591
  const captionsFeature = (_a = this.call) === null || _a === void 0 ? void 0 : _a.feature(communicationCalling.Features.Captions).captions;
29408
29592
  captionsFeature.on('CaptionsReceived', this.captionsReceived.bind(this));
29409
29593
  captionsFeature.on('CaptionsActiveChanged', this.isCaptionsActiveChanged.bind(this));
29594
+ captionsFeature.on('CaptionLanguageChanged', this.isCaptionLanguageChanged.bind(this));
29595
+ captionsFeature.on('SpokenLanguageChanged', this.isSpokenLanguageChanged.bind(this));
29410
29596
  }
29411
29597
  }
29412
29598
  /* @conditional-compile-remove(close-captions) */
@@ -29416,11 +29602,13 @@ class AzureCommunicationCallAdapter {
29416
29602
  const captionsFeature = (_a = this.call) === null || _a === void 0 ? void 0 : _a.feature(communicationCalling.Features.Captions).captions;
29417
29603
  captionsFeature.off('CaptionsReceived', this.captionsReceived.bind(this));
29418
29604
  captionsFeature.off('CaptionsActiveChanged', this.isCaptionsActiveChanged.bind(this));
29605
+ captionsFeature.off('CaptionLanguageChanged', this.isCaptionLanguageChanged.bind(this));
29606
+ captionsFeature.off('SpokenLanguageChanged', this.isSpokenLanguageChanged.bind(this));
29419
29607
  (_b = this.call) === null || _b === void 0 ? void 0 : _b.off('stateChanged', this.subscribeToCaptionEvents.bind(this));
29420
29608
  }
29421
29609
  }
29422
29610
  subscribeCallEvents() {
29423
- var _a, _b, _c, _d, _e, _f;
29611
+ var _a, _b, _c, _d, _e, _f, _g;
29424
29612
  (_a = this.call) === null || _a === void 0 ? void 0 : _a.on('remoteParticipantsUpdated', this.onRemoteParticipantsUpdated.bind(this));
29425
29613
  (_b = this.call) === null || _b === void 0 ? void 0 : _b.on('isMutedChanged', this.isMyMutedChanged.bind(this));
29426
29614
  (_c = this.call) === null || _c === void 0 ? void 0 : _c.on('isScreenSharingOnChanged', this.isScreenSharingOnChanged.bind(this));
@@ -29429,6 +29617,8 @@ class AzureCommunicationCallAdapter {
29429
29617
  (_e = this.call) === null || _e === void 0 ? void 0 : _e.on('stateChanged', this.subscribeToCaptionEvents.bind(this));
29430
29618
  /* @conditional-compile-remove(call-transfer) */
29431
29619
  (_f = this.call) === null || _f === void 0 ? void 0 : _f.feature(communicationCalling.Features.Transfer).on('transferRequested', this.transferRequested.bind(this));
29620
+ /* @conditional-compile-remove(capabilities) */
29621
+ (_g = this.call) === null || _g === void 0 ? void 0 : _g.feature(communicationCalling.Features.Capabilities).on('capabilitiesChanged', this.capabilitiesChanged.bind(this));
29432
29622
  }
29433
29623
  unsubscribeCallEvents() {
29434
29624
  var _a, _b, _c, _d;
@@ -29475,6 +29665,22 @@ class AzureCommunicationCallAdapter {
29475
29665
  isActive: captionsFeature.isCaptionsFeatureActive
29476
29666
  });
29477
29667
  }
29668
+ /* @conditional-compile-remove(close-captions) */
29669
+ isSpokenLanguageChanged() {
29670
+ var _a;
29671
+ const captionsFeature = (_a = this.call) === null || _a === void 0 ? void 0 : _a.feature(communicationCalling.Features.Captions).captions;
29672
+ this.emitter.emit('isSpokenLanguageChanged', {
29673
+ activeSpokenLanguage: captionsFeature.activeSpokenLanguage
29674
+ });
29675
+ }
29676
+ /* @conditional-compile-remove(close-captions) */
29677
+ isCaptionLanguageChanged() {
29678
+ var _a;
29679
+ const captionsFeature = (_a = this.call) === null || _a === void 0 ? void 0 : _a.feature(communicationCalling.Features.Captions).captions;
29680
+ this.emitter.emit('isCaptionLanguageChanged', {
29681
+ activeCaptionLanguage: captionsFeature.activeCaptionLanguage
29682
+ });
29683
+ }
29478
29684
  /* @conditional-compile-remove(call-transfer) */
29479
29685
  transferRequested(args) {
29480
29686
  const newArgs = Object.assign(Object.assign({}, args), { accept: (options) => {
@@ -29491,6 +29697,20 @@ class AzureCommunicationCallAdapter {
29491
29697
  } });
29492
29698
  this.emitter.emit('transferRequested', newArgs);
29493
29699
  }
29700
+ /* @conditional-compile-remove(capabilities) */
29701
+ capabilitiesChanged(data) {
29702
+ var _a, _b, _c;
29703
+ if (((_a = data.newValue.turnVideoOn) === null || _a === void 0 ? void 0 : _a.isPresent) === false) {
29704
+ this.stopCamera();
29705
+ }
29706
+ if (((_b = data.newValue.unmuteMic) === null || _b === void 0 ? void 0 : _b.isPresent) === false) {
29707
+ this.mute();
29708
+ }
29709
+ if (((_c = data.newValue.shareScreen) === null || _c === void 0 ? void 0 : _c.isPresent) === false) {
29710
+ this.stopScreenShare();
29711
+ }
29712
+ this.emitter.emit('capabilitiesChanged', data);
29713
+ }
29494
29714
  callIdChanged() {
29495
29715
  var _a;
29496
29716
  ((_a = this.call) === null || _a === void 0 ? void 0 : _a.id) && this.emitter.emit('callIdChanged', { callId: this.call.id });
@@ -31109,6 +31329,14 @@ class AzureCommunicationCallWithChatAdapter {
31109
31329
  case 'isCaptionsActiveChanged':
31110
31330
  this.callAdapter.on('isCaptionsActiveChanged', listener);
31111
31331
  break;
31332
+ /* @conditional-compile-remove(close-captions) */
31333
+ case 'isCaptionLanguageChanged':
31334
+ this.callAdapter.on('isCaptionLanguageChanged', listener);
31335
+ break;
31336
+ /* @conditional-compile-remove(close-captions) */
31337
+ case 'isSpokenLanguageChanged':
31338
+ this.callAdapter.on('isSpokenLanguageChanged', listener);
31339
+ break;
31112
31340
  case 'messageReceived':
31113
31341
  this.chatAdapter.on('messageReceived', listener);
31114
31342
  break;
@@ -31175,6 +31403,14 @@ class AzureCommunicationCallWithChatAdapter {
31175
31403
  case 'isCaptionsActiveChanged':
31176
31404
  this.callAdapter.off('isCaptionsActiveChanged', listener);
31177
31405
  break;
31406
+ /* @conditional-compile-remove(close-captions) */
31407
+ case 'isCaptionLanguageChanged':
31408
+ this.callAdapter.off('isCaptionLanguageChanged', listener);
31409
+ break;
31410
+ /* @conditional-compile-remove(close-captions) */
31411
+ case 'isSpokenLanguageChanged':
31412
+ this.callAdapter.off('isSpokenLanguageChanged', listener);
31413
+ break;
31178
31414
  case 'messageReceived':
31179
31415
  this.chatAdapter.off('messageReceived', listener);
31180
31416
  break;