@azure/communication-react 1.5.1-alpha-202305250013 → 1.5.1-alpha-202305260013

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 (50) hide show
  1. package/dist/communication-react.d.ts +8 -0
  2. package/dist/dist-cjs/communication-react/index.js +199 -164
  3. package/dist/dist-cjs/communication-react/index.js.map +1 -1
  4. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  5. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  6. package/dist/dist-esm/calling-component-bindings/src/baseSelectors.d.ts +2 -0
  7. package/dist/dist-esm/calling-component-bindings/src/baseSelectors.js +6 -0
  8. package/dist/dist-esm/calling-component-bindings/src/baseSelectors.js.map +1 -1
  9. package/dist/dist-esm/calling-component-bindings/src/captionsSelector.js +5 -2
  10. package/dist/dist-esm/calling-component-bindings/src/captionsSelector.js.map +1 -1
  11. package/dist/dist-esm/calling-stateful-client/src/CallClientState.d.ts +4 -0
  12. package/dist/dist-esm/calling-stateful-client/src/CallClientState.js.map +1 -1
  13. package/dist/dist-esm/calling-stateful-client/src/CallContext.d.ts +1 -0
  14. package/dist/dist-esm/calling-stateful-client/src/CallContext.js +9 -0
  15. package/dist/dist-esm/calling-stateful-client/src/CallContext.js.map +1 -1
  16. package/dist/dist-esm/calling-stateful-client/src/CallDeclarativeCommon.js +2 -1
  17. package/dist/dist-esm/calling-stateful-client/src/CallDeclarativeCommon.js.map +1 -1
  18. package/dist/dist-esm/calling-stateful-client/src/Converter.js +2 -1
  19. package/dist/dist-esm/calling-stateful-client/src/Converter.js.map +1 -1
  20. package/dist/dist-esm/react-components/src/components/CaptionsBanner.d.ts +9 -0
  21. package/dist/dist-esm/react-components/src/components/CaptionsBanner.js +8 -6
  22. package/dist/dist-esm/react-components/src/components/CaptionsBanner.js.map +1 -1
  23. package/dist/dist-esm/react-components/src/components/CaptionsSettingsModal.js +11 -4
  24. package/dist/dist-esm/react-components/src/components/CaptionsSettingsModal.js.map +1 -1
  25. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsEditBox.js +26 -22
  26. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsEditBox.js.map +1 -1
  27. package/dist/dist-esm/react-components/src/components/StartCaptionsButton.js +9 -2
  28. package/dist/dist-esm/react-components/src/components/StartCaptionsButton.js.map +1 -1
  29. package/dist/dist-esm/react-components/src/components/VideoTile.js +3 -4
  30. package/dist/dist-esm/react-components/src/components/VideoTile.js.map +1 -1
  31. package/dist/dist-esm/react-components/src/components/styles/Captions.style.d.ts +4 -0
  32. package/dist/dist-esm/react-components/src/components/styles/Captions.style.js +6 -0
  33. package/dist/dist-esm/react-components/src/components/styles/Captions.style.js.map +1 -1
  34. package/dist/dist-esm/react-components/src/components/styles/ChatMessageComponent.styles.d.ts +10 -0
  35. package/dist/dist-esm/react-components/src/components/styles/ChatMessageComponent.styles.js +10 -0
  36. package/dist/dist-esm/react-components/src/components/styles/ChatMessageComponent.styles.js.map +1 -1
  37. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts +4 -0
  38. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.js.map +1 -1
  39. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.js +1 -2
  40. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.js.map +1 -1
  41. package/dist/dist-esm/react-composites/src/composites/common/CaptionsBanner.js +13 -5
  42. package/dist/dist-esm/react-composites/src/composites/common/CaptionsBanner.js.map +1 -1
  43. package/dist/dist-esm/react-composites/src/composites/common/CaptionsBannerMoreButton.js +0 -3
  44. package/dist/dist-esm/react-composites/src/composites/common/CaptionsBannerMoreButton.js.map +1 -1
  45. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/DesktopMoreButton.js +0 -3
  46. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/DesktopMoreButton.js.map +1 -1
  47. package/dist/dist-esm/react-composites/src/composites/common/Drawer/MoreDrawer.js +1 -8
  48. package/dist/dist-esm/react-composites/src/composites/common/Drawer/MoreDrawer.js.map +1 -1
  49. package/dist/dist-esm/react-composites/src/composites/localization/locales/en-US/strings.json +2 -1
  50. package/package.json +8 -8
@@ -165,7 +165,7 @@ const _toCommunicationIdentifier = (id) => {
165
165
  // Copyright (c) Microsoft Corporation.
166
166
  // Licensed under the MIT license.
167
167
  // GENERATED FILE. DO NOT EDIT MANUALLY.
168
- var telemetryVersion = '1.5.1-alpha-202305250013';
168
+ var telemetryVersion = '1.5.1-alpha-202305260013';
169
169
 
170
170
  // Copyright (c) Microsoft Corporation.
171
171
  /**
@@ -392,6 +392,12 @@ const getCaptionsStatus = (state, props) => {
392
392
  };
393
393
  /* @conditional-compile-remove(close-captions) */
394
394
  /** @private */
395
+ const getStartCaptionsInProgress = (state, props) => {
396
+ var _a;
397
+ return (_a = state.calls[props.callId]) === null || _a === void 0 ? void 0 : _a.captionsFeature.startCaptionsInProgress;
398
+ };
399
+ /* @conditional-compile-remove(close-captions) */
400
+ /** @private */
395
401
  const getCurrentCaptionLanguage = (state, props) => {
396
402
  var _a;
397
403
  return (_a = state.calls[props.callId]) === null || _a === void 0 ? void 0 : _a.captionsFeature.currentCaptionLanguage;
@@ -1025,7 +1031,7 @@ const _changeSpokenLanguageSelector = reselect__namespace.createSelector([getSup
1025
1031
  *
1026
1032
  * @internal
1027
1033
  */
1028
- const _captionsBannerSelector = reselect__namespace.createSelector([getCaptions, getCaptionsStatus], (captions, isCaptionsFeatureActive) => {
1034
+ const _captionsBannerSelector = reselect__namespace.createSelector([getCaptions, getCaptionsStatus, getStartCaptionsInProgress], (captions, isCaptionsFeatureActive, startCaptionsInProgress) => {
1029
1035
  // Following Teams app logic, no matter how many 'Partial' captions come,
1030
1036
  // we only pick first one according to start time, and all the other partial captions will be filtered out
1031
1037
  // This will give customers a stable captions experience when others talking over the dominant speaker
@@ -1044,7 +1050,8 @@ const _captionsBannerSelector = reselect__namespace.createSelector([getCaptions,
1044
1050
  });
1045
1051
  return {
1046
1052
  captions: captionsInfo !== null && captionsInfo !== void 0 ? captionsInfo : [],
1047
- isCaptionsOn: isCaptionsFeatureActive !== null && isCaptionsFeatureActive !== void 0 ? isCaptionsFeatureActive : false
1053
+ isCaptionsOn: isCaptionsFeatureActive !== null && isCaptionsFeatureActive !== void 0 ? isCaptionsFeatureActive : false,
1054
+ startCaptionsInProgress: startCaptionsInProgress !== null && startCaptionsInProgress !== void 0 ? startCaptionsInProgress : false
1048
1055
  };
1049
1056
  });
1050
1057
  /* @conditional-compile-remove(close-captions) */
@@ -1448,7 +1455,8 @@ function convertSdkCallToDeclarativeCall(call) {
1448
1455
  supportedCaptionLanguages: [],
1449
1456
  currentCaptionLanguage: '',
1450
1457
  currentSpokenLanguage: '',
1451
- isCaptionsFeatureActive: false
1458
+ isCaptionsFeatureActive: false,
1459
+ startCaptionsInProgress: false
1452
1460
  }
1453
1461
  };
1454
1462
  }
@@ -2101,6 +2109,15 @@ class CallContext$2 {
2101
2109
  });
2102
2110
  }
2103
2111
  /* @conditional-compile-remove(close-captions) */
2112
+ setStartCaptionsInProgress(callId, startCaptionsInProgress) {
2113
+ this.modifyState((draft) => {
2114
+ const call = draft.calls[this._callIdHistory.latestCallId(callId)];
2115
+ if (call) {
2116
+ call.captionsFeature.startCaptionsInProgress = startCaptionsInProgress;
2117
+ }
2118
+ });
2119
+ }
2120
+ /* @conditional-compile-remove(close-captions) */
2104
2121
  setSelectedSpokenLanguage(callId, spokenLanguage) {
2105
2122
  this.modifyState((draft) => {
2106
2123
  const call = draft.calls[this._callIdHistory.latestCallId(callId)];
@@ -3690,8 +3707,8 @@ class ProxyTeamsCaptionsFeature {
3690
3707
  case 'startCaptions':
3691
3708
  return this._context.withAsyncErrorTeedToState((...args) => __awaiter$B(this, void 0, void 0, function* () {
3692
3709
  var _a, _b;
3710
+ this._context.setStartCaptionsInProgress(this._call.id, true);
3693
3711
  const ret = yield target.startCaptions(...args);
3694
- this._context.setIsCaptionActive(this._call.id, true);
3695
3712
  this._context.setSelectedSpokenLanguage(this._call.id, (_b = (_a = args[0]) === null || _a === void 0 ? void 0 : _a.spokenLanguage) !== null && _b !== void 0 ? _b : 'en-us');
3696
3713
  return ret;
3697
3714
  }), 'Call.feature');
@@ -3699,6 +3716,7 @@ class ProxyTeamsCaptionsFeature {
3699
3716
  return this._context.withAsyncErrorTeedToState((...args) => __awaiter$B(this, void 0, void 0, function* () {
3700
3717
  const ret = yield target.stopCaptions(...args);
3701
3718
  this._context.setIsCaptionActive(this._call.id, false);
3719
+ this._context.setStartCaptionsInProgress(this._call.id, false);
3702
3720
  return ret;
3703
3721
  }), 'Call.feature');
3704
3722
  case 'setSpokenLanguage':
@@ -5028,7 +5046,7 @@ function chunk(options, itemsPerRow) {
5028
5046
  /**
5029
5047
  * @private
5030
5048
  */
5031
- const defaultSpokenLanguage$1 = 'en-us';
5049
+ const defaultSpokenLanguage = 'en-us';
5032
5050
 
5033
5051
  // Copyright (c) Microsoft Corporation.
5034
5052
  /**
@@ -8159,6 +8177,16 @@ const chatMessageMenuStyle = react.mergeStyles({
8159
8177
  cursor: 'pointer',
8160
8178
  overflow: 'hidden'
8161
8179
  });
8180
+ /**
8181
+ * @private
8182
+ */
8183
+ const chatMessageEditContainerStyle = {
8184
+ margin: 0,
8185
+ padding: 0,
8186
+ maxWidth: 'unset',
8187
+ minWidth: 'unset',
8188
+ backgroundColor: 'transparent'
8189
+ };
8162
8190
  /**
8163
8191
  * Styles that can be applied to ensure flyout items have the minimum touch target size.
8164
8192
  *
@@ -8247,31 +8275,34 @@ const ChatMessageComponentAsEditBox = (props) => {
8247
8275
  setAttachedFilesMetadata(attachedFilesMetadata === null || attachedFilesMetadata === void 0 ? void 0 : attachedFilesMetadata.filter((file) => file.name !== fileId));
8248
8276
  } }))));
8249
8277
  }, [attachedFilesMetadata]);
8250
- return (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(borderAndBoxShadowStyle({
8251
- theme,
8252
- hasErrorMessage: message.failureReason !== undefined,
8253
- disabled: false
8254
- })) },
8255
- React__default['default'].createElement(InputBoxComponent, { inlineChildren: props.inlineEditButtons, id: 'editbox', textFieldRef: editTextFieldRef, inputClassName: editBoxStyle(props.inlineEditButtons), placeholderText: strings.editBoxPlaceholderText, textValue: textValue, onChange: setText, onEnterKeyDown: () => {
8256
- submitEnabled &&
8257
- onSubmit(textValue, message.metadata, {
8258
- attachedFilesMetadata
8259
- });
8260
- }, supportNewline: false, maxLength: MAXIMUM_LENGTH_OF_MESSAGE, errorMessage: textTooLongMessage, styles: editBoxStyles,
8261
- /* @conditional-compile-remove(mention) */
8262
- mentionLookupOptions: mentionLookupOptions },
8263
- React__default['default'].createElement(InputBoxButton, { className: editingButtonStyle, ariaLabel: strings.editBoxCancelButton, tooltipContent: strings.editBoxCancelButton, onRenderIcon: onRenderThemedCancelIcon, onClick: () => {
8264
- onCancel && onCancel(message.messageId);
8265
- }, id: 'dismissIconWrapper' }),
8266
- React__default['default'].createElement(InputBoxButton, { className: editingButtonStyle, ariaLabel: strings.editBoxSubmitButton, tooltipContent: strings.editBoxSubmitButton, onRenderIcon: onRenderThemedSubmitIcon, onClick: (e) => {
8278
+ const getContent = () => {
8279
+ return (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(borderAndBoxShadowStyle({
8280
+ theme,
8281
+ hasErrorMessage: message.failureReason !== undefined,
8282
+ disabled: false
8283
+ })) },
8284
+ React__default['default'].createElement(InputBoxComponent, { inlineChildren: props.inlineEditButtons, id: 'editbox', textFieldRef: editTextFieldRef, inputClassName: editBoxStyle(props.inlineEditButtons), placeholderText: strings.editBoxPlaceholderText, textValue: textValue, onChange: setText, onEnterKeyDown: () => {
8267
8285
  submitEnabled &&
8268
8286
  onSubmit(textValue, message.metadata, {
8269
8287
  attachedFilesMetadata
8270
8288
  });
8271
- e.stopPropagation();
8272
- }, id: 'submitIconWrapper' })),
8273
- message.failureReason && (React__default['default'].createElement("div", { className: react.mergeStyles(chatMessageFailedTagStyle(theme), { padding: '0.5rem' }) }, message.failureReason)),
8274
- onRenderFileUploads()));
8289
+ }, supportNewline: false, maxLength: MAXIMUM_LENGTH_OF_MESSAGE, errorMessage: textTooLongMessage, styles: editBoxStyles,
8290
+ /* @conditional-compile-remove(mention) */
8291
+ mentionLookupOptions: mentionLookupOptions },
8292
+ React__default['default'].createElement(InputBoxButton, { className: editingButtonStyle, ariaLabel: strings.editBoxCancelButton, tooltipContent: strings.editBoxCancelButton, onRenderIcon: onRenderThemedCancelIcon, onClick: () => {
8293
+ onCancel && onCancel(message.messageId);
8294
+ }, id: 'dismissIconWrapper' }),
8295
+ React__default['default'].createElement(InputBoxButton, { className: editingButtonStyle, ariaLabel: strings.editBoxSubmitButton, tooltipContent: strings.editBoxSubmitButton, onRenderIcon: onRenderThemedSubmitIcon, onClick: (e) => {
8296
+ submitEnabled &&
8297
+ onSubmit(textValue, message.metadata, {
8298
+ attachedFilesMetadata
8299
+ });
8300
+ e.stopPropagation();
8301
+ }, id: 'submitIconWrapper' })),
8302
+ message.failureReason && (React__default['default'].createElement("div", { className: react.mergeStyles(chatMessageFailedTagStyle(theme), { padding: '0.5rem' }) }, message.failureReason)),
8303
+ onRenderFileUploads()));
8304
+ };
8305
+ return React__default['default'].createElement(i.Message, { styles: chatMessageEditContainerStyle, content: getContent() });
8275
8306
  };
8276
8307
  const isMessageTooLong = (messageText) => messageText.length > MAXIMUM_LENGTH_OF_MESSAGE;
8277
8308
  const isMessageEmpty = (messageText, attachedFilesMetadata) => messageText.trim().length === 0 && attachedFilesMetadata.length === 0;
@@ -10825,8 +10856,7 @@ const DEFAULT_PERSONA_MIN_SIZE_PX = 32;
10825
10856
  const DefaultPlaceholder = (props) => {
10826
10857
  const { text, noVideoAvailableAriaLabel, coinSize, hidePersonaDetails } = props;
10827
10858
  return (React__default['default'].createElement(react.Stack, { className: react.mergeStyles({ position: 'absolute', height: '100%', width: '100%' }) },
10828
- React__default['default'].createElement(react.Stack, { styles: defaultPersonaStyles },
10829
- React__default['default'].createElement(react.Persona, { coinSize: coinSize, hidePersonaDetails: hidePersonaDetails, text: text !== null && text !== void 0 ? text : '', initialsTextColor: "white", "aria-label": noVideoAvailableAriaLabel !== null && noVideoAvailableAriaLabel !== void 0 ? noVideoAvailableAriaLabel : '', showOverflowTooltip: false }))));
10859
+ React__default['default'].createElement(react.Stack, { styles: defaultPersonaStyles }, coinSize && (React__default['default'].createElement(react.Persona, { coinSize: coinSize, hidePersonaDetails: hidePersonaDetails, text: text !== null && text !== void 0 ? text : '', initialsTextColor: "white", "aria-label": noVideoAvailableAriaLabel !== null && noVideoAvailableAriaLabel !== void 0 ? noVideoAvailableAriaLabel : '', showOverflowTooltip: false })))));
10830
10860
  };
10831
10861
  const defaultPersonaStyles = { root: { margin: 'auto', maxHeight: '100%' } };
10832
10862
  /* @conditional-compile-remove(pinned-participants) */
@@ -10863,7 +10893,7 @@ const VideoTile = (props) => {
10863
10893
  const [isHovered, setIsHovered] = React.useState(false);
10864
10894
  /* @conditional-compile-remove(pinned-participants) */
10865
10895
  const [isFocused, setIsFocused] = React.useState(false);
10866
- const [personaSize, setPersonaSize] = React.useState(100);
10896
+ const [personaSize, setPersonaSize] = React.useState();
10867
10897
  const videoTileRef = React.useRef(null);
10868
10898
  const locale = useLocale$1();
10869
10899
  const theme = useTheme();
@@ -10947,7 +10977,7 @@ const VideoTile = (props) => {
10947
10977
  }) }, onRenderPlaceholder ? (onRenderPlaceholder(userId !== null && userId !== void 0 ? userId : '', placeholderOptions, DefaultPlaceholder)) : (React__default['default'].createElement(DefaultPlaceholder, Object.assign({}, placeholderOptions))))),
10948
10978
  (canShowLabel || participantStateString) && (React__default['default'].createElement(react.Stack, { horizontal: true, className: tileInfoContainerStyle, tokens: tileInfoContainerTokens },
10949
10979
  React__default['default'].createElement(react.Stack, { horizontal: true, className: tileInfoStyle },
10950
- canShowLabel && (React__default['default'].createElement(react.Text, { className: react.mergeStyles(displayNameStyle), title: displayName, style: { color: participantStateString ? theme.palette.neutralSecondary : 'inherit' } }, displayName)),
10980
+ canShowLabel && (React__default['default'].createElement(react.Text, { className: react.mergeStyles(displayNameStyle), title: displayName, style: { color: participantStateString ? theme.palette.neutralSecondary : 'inherit' }, "data-ui-id": "video-tile-display-name" }, displayName)),
10951
10981
  participantStateString && (React__default['default'].createElement(react.Text, { className: react.mergeStyles(participantStateStringStyles(theme)) }, bracketedParticipantString(participantStateString, !!canShowLabel))),
10952
10982
  showMuteIndicator && isMuted && (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(iconContainerStyle) },
10953
10983
  React__default['default'].createElement(react.Icon, { iconName: "VideoTileMicOff" }))),
@@ -15581,6 +15611,12 @@ const captionContainerClassName = react.mergeStyles({
15581
15611
  * @private
15582
15612
  */
15583
15613
  const captionsBannerClassName = react.mergeStyles(Object.assign({ height: _pxToRem(100), overflowY: 'auto', overflowX: 'hidden' }, scrollbarStyles));
15614
+ /**
15615
+ * @private
15616
+ */
15617
+ const loadingBannerClassName = react.mergeStyles({
15618
+ height: _pxToRem(100)
15619
+ });
15584
15620
  /**
15585
15621
  * @private
15586
15622
  */
@@ -15629,7 +15665,7 @@ const _Caption = (props) => {
15629
15665
  * A component for displaying a CaptionsBanner with user icon, displayName and captions text.
15630
15666
  */
15631
15667
  const _CaptionsBanner = (props) => {
15632
- const { captions, isCaptionsOn, onRenderAvatar } = props;
15668
+ const { captions, isCaptionsOn, startCaptionsInProgress, onRenderAvatar, strings } = props;
15633
15669
  const captionsScrollDivRef = React.useRef(null);
15634
15670
  const [isAtBottomOfScroll, setIsAtBottomOfScroll] = React.useState(true);
15635
15671
  const scrollToBottom = () => {
@@ -15658,12 +15694,14 @@ const _CaptionsBanner = (props) => {
15658
15694
  scrollToBottom();
15659
15695
  }
15660
15696
  }, [captions, isAtBottomOfScroll]);
15661
- return (React__default['default'].createElement(React__default['default'].Fragment, null, isCaptionsOn && (React__default['default'].createElement(react.FocusZone, { as: "ul", className: captionsContainerClassName },
15662
- React__default['default'].createElement(c, { innerRef: captionsScrollDivRef },
15697
+ return (React__default['default'].createElement(React__default['default'].Fragment, null, startCaptionsInProgress && (React__default['default'].createElement(react.FocusZone, { as: "ul", className: captionsContainerClassName },
15698
+ isCaptionsOn && (React__default['default'].createElement(c, { innerRef: captionsScrollDivRef },
15663
15699
  React__default['default'].createElement(react.Stack, { verticalAlign: "start", className: captionsBannerClassName }, captions.map((caption) => {
15664
15700
  return (React__default['default'].createElement("div", { key: caption.id, className: captionContainerClassName, "data-is-focusable": true },
15665
15701
  React__default['default'].createElement(_Caption, Object.assign({}, caption, { onRenderAvatar: onRenderAvatar }))));
15666
- })))))));
15702
+ })))),
15703
+ !isCaptionsOn && (React__default['default'].createElement(react.Stack, { verticalAlign: "center", className: loadingBannerClassName, "data-is-focusable": true },
15704
+ React__default['default'].createElement(react.Spinner, { label: strings === null || strings === void 0 ? void 0 : strings.captionsBannerSpinnerText, ariaLive: "assertive", labelPosition: "right" })))))));
15667
15705
  };
15668
15706
 
15669
15707
  // Copyright (c) Microsoft Corporation.
@@ -15777,14 +15815,24 @@ const _CaptionsSettingsModal = (props) => {
15777
15815
  const { supportedSpokenLanguages, currentSpokenLanguage, isCaptionsFeatureActive, showModal, onSetSpokenLanguage, onDismissCaptionsSettings, onStartCaptions, strings, captionsAvailableLanguageStrings } = props;
15778
15816
  const theme = react.useTheme();
15779
15817
  const [selectedItem, setSelectedItem] = React.useState({
15780
- key: currentSpokenLanguage !== '' ? currentSpokenLanguage : defaultSpokenLanguage$1,
15781
- text: currentSpokenLanguage !== '' ? currentSpokenLanguage : defaultSpokenLanguage$1
15818
+ key: currentSpokenLanguage !== '' ? currentSpokenLanguage : defaultSpokenLanguage,
15819
+ text: currentSpokenLanguage !== '' ? currentSpokenLanguage : defaultSpokenLanguage
15782
15820
  });
15821
+ const [hasSetSpokenLanguage, setHasSetSpokenLanguage] = React.useState(false);
15783
15822
  const onDismiss = React.useCallback(() => {
15784
15823
  if (onDismissCaptionsSettings) {
15785
15824
  onDismissCaptionsSettings();
15786
15825
  }
15787
15826
  }, [onDismissCaptionsSettings]);
15827
+ React.useEffect(() => {
15828
+ // set spoken language when start captions with a spoken language specified.
15829
+ // this is to fix the bug when a second user starts captions with a new spoken language, captions bot ignore that spoken language
15830
+ if (isCaptionsFeatureActive && !hasSetSpokenLanguage) {
15831
+ onSetSpokenLanguage(selectedItem.key.toString());
15832
+ // we only need to call set spoken language once when first starting captions
15833
+ setHasSetSpokenLanguage(true);
15834
+ }
15835
+ }, [isCaptionsFeatureActive, onSetSpokenLanguage, selectedItem.key, hasSetSpokenLanguage]);
15788
15836
  const onConfirm = React.useCallback(() => __awaiter$p(void 0, void 0, void 0, function* () {
15789
15837
  const languageCode = selectedItem.key.toString();
15790
15838
  if (isCaptionsFeatureActive) {
@@ -15792,9 +15840,6 @@ const _CaptionsSettingsModal = (props) => {
15792
15840
  }
15793
15841
  else {
15794
15842
  yield onStartCaptions({ spokenLanguage: languageCode });
15795
- // set spoken language when start captions with a spoken language specified.
15796
- // this is to fix the bug when a second user starts captions with a new spoken language, captions bot ignore that spoken language
15797
- onSetSpokenLanguage(languageCode);
15798
15843
  }
15799
15844
  onDismiss();
15800
15845
  }), [onDismiss, isCaptionsFeatureActive, onSetSpokenLanguage, onStartCaptions, selectedItem.key]);
@@ -15816,7 +15861,7 @@ const _CaptionsSettingsModal = (props) => {
15816
15861
  }), []);
15817
15862
  const CaptionsSettingsComponent = React.useCallback(() => {
15818
15863
  return (React__default['default'].createElement(react.Stack, null,
15819
- React__default['default'].createElement(react.Dropdown, { label: strings === null || strings === void 0 ? void 0 : strings.captionsSettingsDropdownLabel, selectedKey: selectedItem ? selectedItem.key : undefined, onChange: onChange, calloutProps: calloutProps, placeholder: currentSpokenLanguage !== '' ? currentSpokenLanguage : defaultSpokenLanguage$1, options: dropdownOptions, styles: dropdownStyles }),
15864
+ 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 }),
15820
15865
  React__default['default'].createElement(react.Text, { className: dropdownInfoTextStyle(theme) }, strings === null || strings === void 0 ? void 0 : strings.captionsSettingsDropdownInfoText)));
15821
15866
  }, [
15822
15867
  calloutProps,
@@ -18330,7 +18375,7 @@ const CallCompositeIcon = (props) => (React__default['default'].createElement(re
18330
18375
  */
18331
18376
  const CallWithChatCompositeIcon = (props) => (React__default['default'].createElement(react.FontIcon, Object.assign({}, props)));
18332
18377
 
18333
- var call$d={cameraLabel:"Camera",noCamerasLabel:"No cameras found",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",chatButtonLabel:"Chat",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",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",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",deniedPermissionToRoomDetails:"You do not have permission to join this room.",deniedPermissionToRoomTitle:"Permission denied to room",peopleButtonLabel:"People",peoplePaneTitle:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",roomNotFoundDetails:"Room ID provided is not valid.",roomNotFoundTitle:"Room not found",soundLabel:"Sound",noMicrophonesLabel:"No microphones found",noSpeakersLabel:"No speakers found",startCallButtonLabel:"Start call",openDialpadButtonLabel:"Dial phone number",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",moreButtonCallingLabel:"More",resumeCallButtonLabel:"Resume",resumingCallButtonLabel:"Resuming...",resumeCallButtonAriaLabel:"Resume call",resumingCallButtonAriaLabel:"Resume call",holdScreenLabel:"You're on hold",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number",outboundCallingNoticeString:"Calling...",participantJoinedNoticeString:"{displayName} joined",twoParticipantJoinedNoticeString:"{displayName1} and {displayName2} have joined",threeParticipantJoinedNoticeString:"{displayName1}, {displayName2} and {displayName3} have joined",participantLeftNoticeString:"{displayName} left",twoParticipantLeftNoticeString:"{displayName1} and {displayName2} have left",threeParticipantLeftNoticeString:"{displayName1}, {displayName2} and {displayName3} have left",unnamedParticipantString:"unnamed participant",manyUnnamedParticipantsJoined:"unnamed participant and {numOfParticipants} other participants joined",manyUnnamedParticipantsLeft:"unnamed participant and {numOfParticipants} other participants left",manyParticipantsJoined:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants joined",manyParticipantsLeft:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants left",liveCaptionsLabel:"Live captions",captionsSettingsLabel:"Caption settings",startCaptionsButtonOnLabel:"Turn on captions",startCaptionsButtonOffLabel:"Turn off captions",startCaptionsButtonTooltipOnContent:"Turn off captions",startCaptionsButtonTooltipOffContent:"Turn on captions",captionsSettingsModalTitle:"What language is being spoken?",captionsSettingsDropdownLabel:"Spoken language",captionsSettingsDropdownInfoText:"Language that everyone on this call is speaking.",captionsSettingsConfirmButtonLabel:"Confirm",captionsSettingsCancelButtonLabel:"Cancel",captionsSettingsModalAriaLabel:"Captions Setting Modal",captionsSettingsCloseModalButtonAriaLabel:"Close Captions Setting",captionsBannerMoreButtonCallingLabel:"More",captionsBannerMoreButtonTooltip:"More options",captionsAvailableLanguageStrings:{"ar-ae":"Arabic - U.A.E.","ar-sa":"Arabic - Saudi Arabia","da-dk":"Danish","de-de":"German - Germany","en-au":"English - Australia","en-ca":"English - Canada","en-gb":"English - United Kingdom","en-in":"English - India","en-nz":"English - New Zealand","en-us":"English - United States","es-es":"Spanish - Spain (Modern Sort)","es-mx":"Spanish - Mexico","fi-fi":"Finnish","fr-ca":"French - Canada","fr-fr":"French - France","hi-in":"Hindi","it-it":"Italian - Italy","ja-jp":"Japanese","ko-kr":"Korean","nb-no":"Norwegian (Bokmål)","nl-be":"Dutch - Belgium","nl-nl":"Dutch - Netherlands","pl-pl":"Polish","pt-br":"Portuguese - Brazil","ru-ru":"Russian","sv-se":"Swedish","zh-cn":"Chinese - People's Republic of China","zh-hk":"Chinese - Hong Kong SAR","cs-cz":"Czech","pt-pt":"Portuguese - Portugal","tr-tr":"Turkish","vi-vn":"Vietnamese","th-th":"Thai","he-il":"Hebrew","cy-gb":"Welsh","uk-ua":"Ukrainian","el-gr":"Greek","hu-hu":"Hungarian","ro-ro":"Romanian","sk-sk":"Slovak","zh-tw":"Chinese - Taiwan"}};var chat$d={chatListHeader:"In this chat",uploadFile:"Upload File"};var callWithChat$d={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",dismissSidePaneButtonLabel:"Close",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",moreDrawerCaptionsMenuTitle:"Live captions",moreDrawerSpokenLanguageMenuTitle:"Spoken language",peopleButtonLabel:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",peoplePaneTitle:"People",pictureInPictureTileAriaLabel:"Video Feeds. Click to return to call screen.",removeMenuLabel:"Remove",openDialpadButtonLabel:"Dial phone number",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number"};var en_US = {call:call$d,chat:chat$d,callWithChat:callWithChat$d};
18378
+ var call$d={cameraLabel:"Camera",noCamerasLabel:"No cameras found",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",chatButtonLabel:"Chat",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",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",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",deniedPermissionToRoomDetails:"You do not have permission to join this room.",deniedPermissionToRoomTitle:"Permission denied to room",peopleButtonLabel:"People",peoplePaneTitle:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",roomNotFoundDetails:"Room ID provided is not valid.",roomNotFoundTitle:"Room not found",soundLabel:"Sound",noMicrophonesLabel:"No microphones found",noSpeakersLabel:"No speakers found",startCallButtonLabel:"Start call",openDialpadButtonLabel:"Dial phone number",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",moreButtonCallingLabel:"More",resumeCallButtonLabel:"Resume",resumingCallButtonLabel:"Resuming...",resumeCallButtonAriaLabel:"Resume call",resumingCallButtonAriaLabel:"Resume call",holdScreenLabel:"You're on hold",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number",outboundCallingNoticeString:"Calling...",participantJoinedNoticeString:"{displayName} joined",twoParticipantJoinedNoticeString:"{displayName1} and {displayName2} have joined",threeParticipantJoinedNoticeString:"{displayName1}, {displayName2} and {displayName3} have joined",participantLeftNoticeString:"{displayName} left",twoParticipantLeftNoticeString:"{displayName1} and {displayName2} have left",threeParticipantLeftNoticeString:"{displayName1}, {displayName2} and {displayName3} have left",unnamedParticipantString:"unnamed participant",manyUnnamedParticipantsJoined:"unnamed participant and {numOfParticipants} other participants joined",manyUnnamedParticipantsLeft:"unnamed participant and {numOfParticipants} other participants left",manyParticipantsJoined:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants joined",manyParticipantsLeft:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants left",liveCaptionsLabel:"Live captions",captionsSettingsLabel:"Caption settings",startCaptionsButtonOnLabel:"Turn on captions",startCaptionsButtonOffLabel:"Turn off captions",startCaptionsButtonTooltipOnContent:"Turn off captions",startCaptionsButtonTooltipOffContent:"Turn on captions",captionsSettingsModalTitle:"What language is being spoken?",captionsSettingsDropdownLabel:"Spoken language",captionsSettingsDropdownInfoText:"Language that everyone on this call is speaking.",captionsSettingsConfirmButtonLabel:"Confirm",captionsSettingsCancelButtonLabel:"Cancel",captionsSettingsModalAriaLabel:"Captions Setting Modal",captionsSettingsCloseModalButtonAriaLabel:"Close Captions Setting",captionsBannerMoreButtonCallingLabel:"More",captionsBannerMoreButtonTooltip:"More options",captionsAvailableLanguageStrings:{"ar-ae":"Arabic - U.A.E.","ar-sa":"Arabic - Saudi Arabia","da-dk":"Danish","de-de":"German - Germany","en-au":"English - Australia","en-ca":"English - Canada","en-gb":"English - United Kingdom","en-in":"English - India","en-nz":"English - New Zealand","en-us":"English - United States","es-es":"Spanish - Spain (Modern Sort)","es-mx":"Spanish - Mexico","fi-fi":"Finnish","fr-ca":"French - Canada","fr-fr":"French - France","hi-in":"Hindi","it-it":"Italian - Italy","ja-jp":"Japanese","ko-kr":"Korean","nb-no":"Norwegian (Bokmål)","nl-be":"Dutch - Belgium","nl-nl":"Dutch - Netherlands","pl-pl":"Polish","pt-br":"Portuguese - Brazil","ru-ru":"Russian","sv-se":"Swedish","zh-cn":"Chinese - People's Republic of China","zh-hk":"Chinese - Hong Kong SAR","cs-cz":"Czech","pt-pt":"Portuguese - Portugal","tr-tr":"Turkish","vi-vn":"Vietnamese","th-th":"Thai","he-il":"Hebrew","cy-gb":"Welsh","uk-ua":"Ukrainian","el-gr":"Greek","hu-hu":"Hungarian","ro-ro":"Romanian","sk-sk":"Slovak","zh-tw":"Chinese - Taiwan"},captionsBannerSpinnerText:"Starting captions..."};var chat$d={chatListHeader:"In this chat",uploadFile:"Upload File"};var callWithChat$d={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",dismissSidePaneButtonLabel:"Close",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",moreDrawerCaptionsMenuTitle:"Live captions",moreDrawerSpokenLanguageMenuTitle:"Spoken language",peopleButtonLabel:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",peoplePaneTitle:"People",pictureInPictureTileAriaLabel:"Video Feeds. Click to return to call screen.",removeMenuLabel:"Remove",openDialpadButtonLabel:"Dial phone number",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number"};var en_US = {call:call$d,chat:chat$d,callWithChat:callWithChat$d};
18334
18379
 
18335
18380
  var call$c={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",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",deniedPermissionToRoomDetails:"You do not have permission to join this room.",deniedPermissionToRoomTitle:"Permission denied to room",peopleButtonLabel:"People",peoplePaneTitle:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",roomNotFoundDetails:"Room ID provided is not valid.",roomNotFoundTitle:"Room not found",soundLabel:"Sound",noMicrophonesLabel:"No microphones found",noSpeakersLabel:"No speakers found",startCallButtonLabel:"Start call",openDialpadButtonLabel:"Dial phone number",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",moreButtonCallingLabel:"More",resumeCallButtonLabel:"Resume",resumingCallButtonLabel:"Resuming...",resumeCallButtonAriaLabel:"Resume call",resumingCallButtonAriaLabel:"Resume call",holdScreenLabel:"You're on hold",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number",outboundCallingNoticeString:"Calling...",participantJoinedNoticeString:"{displayName} joined",twoParticipantJoinedNoticeString:"{displayName1} and {displayName2} have joined",threeParticipantJoinedNoticeString:"{displayName1}, {displayName2} and {displayName3} have joined",participantLeftNoticeString:"{displayName} left",twoParticipantLeftNoticeString:"{displayName1} and {displayName2} have left",threeParticipantLeftNoticeString:"{displayName1}, {displayName2} and {displayName3} have left",unnamedParticipantString:"unnamed participant",manyUnnamedParticipantsJoined:"unnamed participant and {numOfParticipants} other participants joined",manyUnnamedParticipantsLeft:"unnamed participant and {numOfParticipants} other participants left",manyParticipantsJoined:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants joined",manyParticipantsLeft:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants left",liveCaptionsLabel:"Live captions",captionsSettingsLabel:"Caption settings",startCaptionsButtonOnLabel:"Turn on captions",startCaptionsButtonOffLabel:"Turn off captions",startCaptionsButtonTooltipOnContent:"Turn off captions",startCaptionsButtonTooltipOffContent:"Turn on captions",captionsSettingsModalTitle:"What language is being spoken?",captionsSettingsDropdownLabel:"Spoken language",captionsSettingsDropdownInfoText:"Language that everyone on this call is speaking.",captionsSettingsConfirmButtonLabel:"Confirm",captionsSettingsCancelButtonLabel:"Cancel",captionsSettingsModalAriaLabel:"Captions Setting Modal",captionsSettingsCloseModalButtonAriaLabel:"Close Captions Setting",captionsBannerMoreButtonCallingLabel:"More",captionsBannerMoreButtonTooltip:"More options",captionsAvailableLanguageStrings:{"ar-ae":"Arabic - U.A.E.","ar-sa":"Arabic - Saudi Arabia","da-dk":"Danish","de-de":"German - Germany","en-au":"English - Australia","en-ca":"English - Canada","en-gb":"English - United Kingdom","en-in":"English - India","en-nz":"English - New Zealand","en-us":"English - United States","es-es":"Spanish - Spain (Modern Sort)","es-mx":"Spanish - Mexico","fi-fi":"Finnish","fr-ca":"French - Canada","fr-fr":"French - France","hi-in":"Hindi","it-it":"Italian - Italy","ja-jp":"Japanese","ko-kr":"Korean","nb-no":"Norwegian (Bokmål)","nl-be":"Dutch - Belgium","nl-nl":"Dutch - Netherlands","pl-pl":"Polish","pt-br":"Portuguese - Brazil","ru-ru":"Russian","sv-se":"Swedish","zh-cn":"Chinese - People's Republic of China","zh-hk":"Chinese - Hong Kong SAR","cs-cz":"Czech","pt-pt":"Portuguese - Portugal","tr-tr":"Turkish","vi-vn":"Vietnamese","th-th":"Thai","he-il":"Hebrew","cy-gb":"Welsh","uk-ua":"Ukrainian","el-gr":"Greek","hu-hu":"Hungarian","ro-ro":"Romanian","sk-sk":"Slovak","zh-tw":"Chinese - Taiwan"}};var chat$c={chatListHeader:"In this chat",uploadFile:"Upload File"};var callWithChat$c={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",dismissSidePaneButtonLabel:"Close",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",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$c,chat:chat$c,callWithChat:callWithChat$c};
18336
18381
 
@@ -20742,9 +20787,6 @@ const CaptionsBannerMoreButton = (props) => {
20742
20787
  yield startCaptionsButtonHandlers.onStartCaptions({
20743
20788
  spokenLanguage: startCaptionsButtonProps.currentSpokenLanguage
20744
20789
  });
20745
- // set spoken language when start captions with a spoken language specified.
20746
- // this is to fix the bug when a second user starts captions with a new spoken language, captions bot ignore that spoken language
20747
- startCaptionsButtonHandlers.onSetSpokenLanguage(startCaptionsButtonProps.currentSpokenLanguage);
20748
20790
  }), [startCaptionsButtonHandlers, startCaptionsButtonProps.currentSpokenLanguage]);
20749
20791
  /* @conditional-compile-remove(close-captions) */
20750
20792
  moreButtonContextualMenuItems.push({
@@ -20824,15 +20866,21 @@ const CaptionsBanner = (props) => {
20824
20866
  right: 0,
20825
20867
  top: 0
20826
20868
  });
20869
+ /* @conditional-compile-remove(close-captions) */
20870
+ const strings = useLocale().strings.call;
20871
+ /* @conditional-compile-remove(close-captions) */
20872
+ const captionsBannerStrings = {
20873
+ captionsBannerSpinnerText: strings.captionsBannerSpinnerText
20874
+ };
20827
20875
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
20828
20876
  /* @conditional-compile-remove(close-captions) */ isCaptionsSettingsOpen && (React__default['default'].createElement(CaptionsSettingsModal, { showCaptionsSettingsModal: isCaptionsSettingsOpen, onDismissCaptionsSettings: onDismissCaptionsSettings })),
20829
- /* @conditional-compile-remove(close-captions) */ captionsBannerProps.captions.length > 0 &&
20830
- captionsBannerProps.isCaptionsOn && (React__default['default'].createElement("div", { className: containerClassName },
20877
+ /* @conditional-compile-remove(close-captions) */
20878
+ React__default['default'].createElement("div", { className: containerClassName },
20831
20879
  React__default['default'].createElement(react.Stack, { horizontalAlign: "center" },
20832
20880
  React__default['default'].createElement(react.Stack.Item, { style: { width: props.isMobile ? mobileViewBannerWidth : desktopViewBannerWidth } },
20833
- React__default['default'].createElement(_CaptionsBanner, Object.assign({}, captionsBannerProps, handlers)))),
20834
- !props.isMobile && (React__default['default'].createElement("div", { className: floatingChildClassName },
20835
- React__default['default'].createElement(CaptionsBannerMoreButton, { onCaptionsSettingsClick: onClickCaptionsSettings })))))));
20881
+ React__default['default'].createElement(_CaptionsBanner, Object.assign({}, captionsBannerProps, handlers, { strings: captionsBannerStrings })))),
20882
+ !props.isMobile && captionsBannerProps.isCaptionsOn && (React__default['default'].createElement("div", { className: floatingChildClassName },
20883
+ React__default['default'].createElement(CaptionsBannerMoreButton, { onCaptionsSettingsClick: onClickCaptionsSettings }))))));
20836
20884
  };
20837
20885
 
20838
20886
  // Copyright (c) Microsoft Corporation.
@@ -21605,9 +21653,6 @@ const DesktopMoreButton = (props) => {
21605
21653
  yield startCaptionsButtonHandlers.onStartCaptions({
21606
21654
  spokenLanguage: startCaptionsButtonProps.currentSpokenLanguage
21607
21655
  });
21608
- // set spoken language when start captions with a spoken language specified.
21609
- // this is to fix the bug when a second user starts captions with a new spoken language, captions bot ignore that spoken language
21610
- startCaptionsButtonHandlers.onSetSpokenLanguage(startCaptionsButtonProps.currentSpokenLanguage);
21611
21656
  }), [startCaptionsButtonHandlers, startCaptionsButtonProps.currentSpokenLanguage]);
21612
21657
  /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */
21613
21658
  const moreButtonStrings = React.useMemo(() => ({
@@ -22092,109 +22137,6 @@ const callStatusSelector = reselect.createSelector([getCallStatus, getIsScreenSh
22092
22137
  };
22093
22138
  });
22094
22139
 
22095
- // Copyright (c) Microsoft Corporation.
22096
- /**
22097
- * Default Modal PIP related pixel measurements used for ModalLocalAndremotePIP and common/utils.
22098
- *
22099
- * @private
22100
- */
22101
- const MODAL_PIP_DEFAULT_PX = {
22102
- rightPositionPx: 16,
22103
- topPositionPx: 52,
22104
- widthPx: 88,
22105
- heightPx: 128
22106
- };
22107
- /**
22108
- * @private
22109
- */
22110
- const getPipStyles = (theme) => ({
22111
- modal: {
22112
- main: Object.assign(Object.assign({ borderRadius: theme.effects.roundedCorner4, boxShadow: theme.effects.elevation8,
22113
- // Above the message thread / people pane.
22114
- zIndex: 2 }, (theme.rtl
22115
- ? { left: _pxToRem(MODAL_PIP_DEFAULT_PX.rightPositionPx) }
22116
- : { right: _pxToRem(MODAL_PIP_DEFAULT_PX.rightPositionPx) })), { top: _pxToRem(MODAL_PIP_DEFAULT_PX.topPositionPx) })
22117
- }
22118
- });
22119
- /**
22120
- * @private
22121
- */
22122
- const PIPContainerStyle = {
22123
- root: { position: 'absolute', width: '100%', height: '100%', pointerEvents: 'none' }
22124
- };
22125
- /**
22126
- * @private
22127
- */
22128
- const hiddenStyle = react.concatStyleSets(PIPContainerStyle, { root: { display: 'none' } });
22129
- /**
22130
- * @private
22131
- */
22132
- const modalStyle = {
22133
- main: {
22134
- minWidth: 'min-content',
22135
- minHeight: 'min-content',
22136
- position: 'absolute',
22137
- overflow: 'hidden',
22138
- // pointer events for root Modal div set to auto to make LocalAndRemotePIP interactive
22139
- pointerEvents: 'auto',
22140
- touchAction: 'none'
22141
- },
22142
- root: {
22143
- width: '100%',
22144
- height: '100%',
22145
- // pointer events for root Modal div set to none to make descendants interactive
22146
- pointerEvents: 'none'
22147
- }
22148
- };
22149
- /**
22150
- * Styles for layer host to bound the modal wrapping PiPiP in the mobile pane.
22151
- * @private
22152
- */
22153
- const modalLayerHostStyle = {
22154
- display: 'flex',
22155
- position: 'absolute',
22156
- left: 0,
22157
- top: 0,
22158
- width: '100%',
22159
- height: '100%',
22160
- overflow: 'hidden',
22161
- zIndex: '100000',
22162
- // pointer events for layerHost set to none to make descendants interactive
22163
- pointerEvents: 'none'
22164
- };
22165
-
22166
- // Copyright (c) Microsoft Corporation.
22167
- /**
22168
- * @private
22169
- */
22170
- // Use document.getElementById until Fluent's Stack supports componentRef property: https://github.com/microsoft/fluentui/issues/20410
22171
- const useMinMaxDragPosition = (modalLayerHostId, rtl) => {
22172
- const modalHostRef = React.useRef(document.getElementById(modalLayerHostId));
22173
- const modalHostWidth = _useContainerWidth(modalHostRef);
22174
- const modalHostHeight = _useContainerHeight(modalHostRef);
22175
- const minDragPosition = React.useMemo(() => modalHostWidth === undefined
22176
- ? undefined
22177
- : {
22178
- x: rtl
22179
- ? -1 * MODAL_PIP_DEFAULT_PX.rightPositionPx
22180
- : MODAL_PIP_DEFAULT_PX.rightPositionPx - modalHostWidth + MODAL_PIP_DEFAULT_PX.widthPx,
22181
- y: -1 * MODAL_PIP_DEFAULT_PX.topPositionPx
22182
- }, [modalHostWidth, rtl]);
22183
- const maxDragPosition = React.useMemo(() => modalHostWidth === undefined || modalHostHeight === undefined
22184
- ? undefined
22185
- : {
22186
- x: rtl
22187
- ? modalHostWidth - MODAL_PIP_DEFAULT_PX.rightPositionPx - MODAL_PIP_DEFAULT_PX.widthPx
22188
- : MODAL_PIP_DEFAULT_PX.rightPositionPx,
22189
- y: modalHostHeight - MODAL_PIP_DEFAULT_PX.topPositionPx - MODAL_PIP_DEFAULT_PX.heightPx
22190
- }, [modalHostHeight, modalHostWidth, rtl]);
22191
- return { minDragPosition: minDragPosition, maxDragPosition: maxDragPosition };
22192
- };
22193
- /**
22194
- * @private
22195
- */
22196
- const defaultSpokenLanguage = 'en-us';
22197
-
22198
22140
  // Copyright (c) Microsoft Corporation.
22199
22141
  /**
22200
22142
  * @private
@@ -22418,18 +22360,13 @@ const MoreDrawer = (props) => {
22418
22360
  /* @conditional-compile-remove(close-captions) */
22419
22361
  const [isSpokenLanguageDrawerOpen, setIsSpokenLanguageDrawerOpen] = React.useState(false);
22420
22362
  /* @conditional-compile-remove(close-captions) */
22421
- const [currentSpokenLanguage, setCurrentSpokenLanguage] = React.useState(startCaptionsButtonProps.currentSpokenLanguage === ''
22422
- ? defaultSpokenLanguage
22423
- : startCaptionsButtonProps.currentSpokenLanguage);
22363
+ const [currentSpokenLanguage, setCurrentSpokenLanguage] = React.useState(startCaptionsButtonProps.currentSpokenLanguage);
22424
22364
  /* @conditional-compile-remove(close-captions) */
22425
22365
  const onToggleChange = React.useCallback(() => __awaiter$b(void 0, void 0, void 0, function* () {
22426
22366
  if (!startCaptionsButtonProps.checked) {
22427
22367
  yield startCaptionsButtonHandlers.onStartCaptions({
22428
22368
  spokenLanguage: currentSpokenLanguage
22429
22369
  });
22430
- // set spoken language when start captions with a spoken language specified.
22431
- // this is to fix the bug when a second user starts captions with a new spoken language, captions bot ignore that spoken language
22432
- startCaptionsButtonHandlers.onSetSpokenLanguage(currentSpokenLanguage);
22433
22370
  }
22434
22371
  else {
22435
22372
  startCaptionsButtonHandlers.onStopCaptions();
@@ -23617,6 +23554,77 @@ const localAndRemotePIPSelector = reselect__namespace.createSelector([getDisplay
23617
23554
  };
23618
23555
  });
23619
23556
 
23557
+ // Copyright (c) Microsoft Corporation.
23558
+ /**
23559
+ * Default Modal PIP related pixel measurements used for ModalLocalAndremotePIP and common/utils.
23560
+ *
23561
+ * @private
23562
+ */
23563
+ const MODAL_PIP_DEFAULT_PX = {
23564
+ rightPositionPx: 16,
23565
+ topPositionPx: 52,
23566
+ widthPx: 88,
23567
+ heightPx: 128
23568
+ };
23569
+ /**
23570
+ * @private
23571
+ */
23572
+ const getPipStyles = (theme) => ({
23573
+ modal: {
23574
+ main: Object.assign(Object.assign({ borderRadius: theme.effects.roundedCorner4, boxShadow: theme.effects.elevation8,
23575
+ // Above the message thread / people pane.
23576
+ zIndex: 2 }, (theme.rtl
23577
+ ? { left: _pxToRem(MODAL_PIP_DEFAULT_PX.rightPositionPx) }
23578
+ : { right: _pxToRem(MODAL_PIP_DEFAULT_PX.rightPositionPx) })), { top: _pxToRem(MODAL_PIP_DEFAULT_PX.topPositionPx) })
23579
+ }
23580
+ });
23581
+ /**
23582
+ * @private
23583
+ */
23584
+ const PIPContainerStyle = {
23585
+ root: { position: 'absolute', width: '100%', height: '100%', pointerEvents: 'none' }
23586
+ };
23587
+ /**
23588
+ * @private
23589
+ */
23590
+ const hiddenStyle = react.concatStyleSets(PIPContainerStyle, { root: { display: 'none' } });
23591
+ /**
23592
+ * @private
23593
+ */
23594
+ const modalStyle = {
23595
+ main: {
23596
+ minWidth: 'min-content',
23597
+ minHeight: 'min-content',
23598
+ position: 'absolute',
23599
+ overflow: 'hidden',
23600
+ // pointer events for root Modal div set to auto to make LocalAndRemotePIP interactive
23601
+ pointerEvents: 'auto',
23602
+ touchAction: 'none'
23603
+ },
23604
+ root: {
23605
+ width: '100%',
23606
+ height: '100%',
23607
+ // pointer events for root Modal div set to none to make descendants interactive
23608
+ pointerEvents: 'none'
23609
+ }
23610
+ };
23611
+ /**
23612
+ * Styles for layer host to bound the modal wrapping PiPiP in the mobile pane.
23613
+ * @private
23614
+ */
23615
+ const modalLayerHostStyle = {
23616
+ display: 'flex',
23617
+ position: 'absolute',
23618
+ left: 0,
23619
+ top: 0,
23620
+ width: '100%',
23621
+ height: '100%',
23622
+ overflow: 'hidden',
23623
+ zIndex: '100000',
23624
+ // pointer events for layerHost set to none to make descendants interactive
23625
+ pointerEvents: 'none'
23626
+ };
23627
+
23620
23628
  // Copyright (c) Microsoft Corporation.
23621
23629
  /**
23622
23630
  * Drag options for Modal in {@link ModalLocalAndRemotePIP} component
@@ -23663,6 +23671,34 @@ const ModalLocalAndRemotePIP = (props) => {
23663
23671
  !props.hidden && localAndRemotePIP)));
23664
23672
  };
23665
23673
 
23674
+ // Copyright (c) Microsoft Corporation.
23675
+ /**
23676
+ * @private
23677
+ */
23678
+ // Use document.getElementById until Fluent's Stack supports componentRef property: https://github.com/microsoft/fluentui/issues/20410
23679
+ const useMinMaxDragPosition = (modalLayerHostId, rtl) => {
23680
+ const modalHostRef = React.useRef(document.getElementById(modalLayerHostId));
23681
+ const modalHostWidth = _useContainerWidth(modalHostRef);
23682
+ const modalHostHeight = _useContainerHeight(modalHostRef);
23683
+ const minDragPosition = React.useMemo(() => modalHostWidth === undefined
23684
+ ? undefined
23685
+ : {
23686
+ x: rtl
23687
+ ? -1 * MODAL_PIP_DEFAULT_PX.rightPositionPx
23688
+ : MODAL_PIP_DEFAULT_PX.rightPositionPx - modalHostWidth + MODAL_PIP_DEFAULT_PX.widthPx,
23689
+ y: -1 * MODAL_PIP_DEFAULT_PX.topPositionPx
23690
+ }, [modalHostWidth, rtl]);
23691
+ const maxDragPosition = React.useMemo(() => modalHostWidth === undefined || modalHostHeight === undefined
23692
+ ? undefined
23693
+ : {
23694
+ x: rtl
23695
+ ? modalHostWidth - MODAL_PIP_DEFAULT_PX.rightPositionPx - MODAL_PIP_DEFAULT_PX.widthPx
23696
+ : MODAL_PIP_DEFAULT_PX.rightPositionPx,
23697
+ y: modalHostHeight - MODAL_PIP_DEFAULT_PX.topPositionPx - MODAL_PIP_DEFAULT_PX.heightPx
23698
+ }, [modalHostHeight, modalHostWidth, rtl]);
23699
+ return { minDragPosition: minDragPosition, maxDragPosition: maxDragPosition };
23700
+ };
23701
+
23666
23702
  // Copyright (c) Microsoft Corporation.
23667
23703
  /**
23668
23704
  * @private
@@ -24028,8 +24064,7 @@ const MediaGallery = (props) => {
24028
24064
  }, [cameraSwitcherCallback, cameraSwitcherCameras]);
24029
24065
  const onRenderAvatar = React.useCallback((userId, options) => {
24030
24066
  return (React__default['default'].createElement(react.Stack, { className: react.mergeStyles({ position: 'absolute', height: '100%', width: '100%' }) },
24031
- React__default['default'].createElement(react.Stack, { styles: { root: { margin: 'auto', maxHeight: '100%' } } },
24032
- React__default['default'].createElement(AvatarPersona, Object.assign({ userId: userId }, options, { dataProvider: props.onFetchAvatarPersonaData })))));
24067
+ React__default['default'].createElement(react.Stack, { styles: { root: { margin: 'auto', maxHeight: '100%' } } }, (options === null || options === void 0 ? void 0 : options.coinSize) && (React__default['default'].createElement(AvatarPersona, Object.assign({ userId: userId }, options, { dataProvider: props.onFetchAvatarPersonaData }))))));
24033
24068
  }, [props.onFetchAvatarPersonaData]);
24034
24069
  useLocalVideoStartTrigger(!!props.isVideoStreamOn);
24035
24070
  /* @conditional-compile-remove(pinned-participants) */