@azure/communication-react 1.2.3-alpha-202205010016.0 → 1.2.3-alpha-202205050013.0

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 (73) hide show
  1. package/dist/dist-cjs/communication-react/index.js +82 -131
  2. package/dist/dist-cjs/communication-react/index.js.map +1 -1
  3. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  4. package/dist/dist-esm/calling-component-bindings/src/callControlSelectors.d.ts.map +1 -1
  5. package/dist/dist-esm/calling-component-bindings/src/callControlSelectors.js +0 -6
  6. package/dist/dist-esm/calling-component-bindings/src/callControlSelectors.js.map +1 -1
  7. package/dist/dist-esm/chat-component-bindings/src/messageThreadSelector.js +11 -1
  8. package/dist/dist-esm/chat-component-bindings/src/messageThreadSelector.js.map +1 -1
  9. package/dist/dist-esm/chat-stateful-client/src/StatefulChatThreadClient.d.ts.map +1 -1
  10. package/dist/dist-esm/chat-stateful-client/src/StatefulChatThreadClient.js +4 -2
  11. package/dist/dist-esm/chat-stateful-client/src/StatefulChatThreadClient.js.map +1 -1
  12. package/dist/dist-esm/communication-react/src/index.d.ts +1 -3
  13. package/dist/dist-esm/communication-react/src/index.d.ts.map +1 -1
  14. package/dist/dist-esm/communication-react/src/index.js.map +1 -1
  15. package/dist/dist-esm/react-components/src/components/CameraButton.d.ts.map +1 -1
  16. package/dist/dist-esm/react-components/src/components/CameraButton.js +4 -18
  17. package/dist/dist-esm/react-components/src/components/CameraButton.js.map +1 -1
  18. package/dist/dist-esm/react-components/src/components/FileDownloadCards.d.ts.map +1 -1
  19. package/dist/dist-esm/react-components/src/components/FileDownloadCards.js +1 -2
  20. package/dist/dist-esm/react-components/src/components/FileDownloadCards.js.map +1 -1
  21. package/dist/dist-esm/react-components/src/components/MicrophoneButton.d.ts.map +1 -1
  22. package/dist/dist-esm/react-components/src/components/MicrophoneButton.js +4 -18
  23. package/dist/dist-esm/react-components/src/components/MicrophoneButton.js.map +1 -1
  24. package/dist/dist-esm/react-components/src/components/ParticipantItem.d.ts.map +1 -1
  25. package/dist/dist-esm/react-components/src/components/ParticipantItem.js +3 -3
  26. package/dist/dist-esm/react-components/src/components/ParticipantItem.js.map +1 -1
  27. package/dist/dist-esm/react-components/src/components/SendBox.d.ts.map +1 -1
  28. package/dist/dist-esm/react-components/src/components/SendBox.js +20 -4
  29. package/dist/dist-esm/react-components/src/components/SendBox.js.map +1 -1
  30. package/dist/dist-esm/react-components/src/components/VideoGallery.d.ts.map +1 -1
  31. package/dist/dist-esm/react-components/src/components/VideoGallery.js +25 -27
  32. package/dist/dist-esm/react-components/src/components/VideoGallery.js.map +1 -1
  33. package/dist/dist-esm/react-components/src/components/index.d.ts +2 -4
  34. package/dist/dist-esm/react-components/src/components/index.d.ts.map +1 -1
  35. package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
  36. package/dist/dist-esm/react-components/src/components/styles/ParticipantItem.styles.d.ts +4 -1
  37. package/dist/dist-esm/react-components/src/components/styles/ParticipantItem.styles.d.ts.map +1 -1
  38. package/dist/dist-esm/react-components/src/components/styles/ParticipantItem.styles.js +2 -2
  39. package/dist/dist-esm/react-components/src/components/styles/ParticipantItem.styles.js.map +1 -1
  40. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalAndRemotePIP.js +1 -8
  41. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalAndRemotePIP.js.map +1 -1
  42. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.d.ts.map +1 -1
  43. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.js +2 -18
  44. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.js.map +1 -1
  45. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Camera.d.ts.map +1 -1
  46. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Camera.js +1 -3
  47. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Camera.js.map +1 -1
  48. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Microphone.d.ts.map +1 -1
  49. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Microphone.js +1 -3
  50. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Microphone.js.map +1 -1
  51. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/PeoplePaneContent.js +2 -8
  52. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/PeoplePaneContent.js.map +1 -1
  53. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/TabHeader.d.ts.map +1 -1
  54. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/TabHeader.js +2 -8
  55. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/TabHeader.js.map +1 -1
  56. package/dist/dist-esm/react-composites/src/composites/common/BaseComposite.d.ts +2 -4
  57. package/dist/dist-esm/react-composites/src/composites/common/BaseComposite.d.ts.map +1 -1
  58. package/dist/dist-esm/react-composites/src/composites/common/BaseComposite.js.map +1 -1
  59. package/dist/dist-esm/react-composites/src/composites/common/CustomDataModelUtils.d.ts +12 -0
  60. package/dist/dist-esm/react-composites/src/composites/common/CustomDataModelUtils.d.ts.map +1 -1
  61. package/dist/dist-esm/react-composites/src/composites/common/CustomDataModelUtils.js +2 -2
  62. package/dist/dist-esm/react-composites/src/composites/common/CustomDataModelUtils.js.map +1 -1
  63. package/dist/dist-esm/react-composites/src/composites/common/icons.d.ts.map +1 -1
  64. package/dist/dist-esm/react-composites/src/composites/common/icons.js +1 -14
  65. package/dist/dist-esm/react-composites/src/composites/common/icons.js.map +1 -1
  66. package/dist/dist-esm/react-composites/src/composites/index.d.ts +2 -4
  67. package/dist/dist-esm/react-composites/src/composites/index.d.ts.map +1 -1
  68. package/dist/dist-esm/react-composites/src/composites/index.js +1 -4
  69. package/dist/dist-esm/react-composites/src/composites/index.js.map +1 -1
  70. package/dist/dist-esm/react-composites/src/composites/localization/LocalizationProvider.d.ts +1 -1
  71. package/dist/dist-esm/react-composites/src/composites/localization/LocalizationProvider.d.ts.map +1 -1
  72. package/dist/dist-esm/react-composites/src/composites/localization/LocalizationProvider.js.map +1 -1
  73. package/package.json +7 -7
@@ -191,7 +191,7 @@ const fromFlatCommunicationIdentifier = (id) => {
191
191
  // Copyright (c) Microsoft Corporation.
192
192
  // Licensed under the MIT license.
193
193
  // GENERATED FILE. DO NOT EDIT MANUALLY.
194
- var telemetryVersion = '1.2.3-alpha-202205010016.0';
194
+ var telemetryVersion = '1.2.3-alpha-202205050013.0';
195
195
 
196
196
  // Copyright (c) Microsoft Corporation.
197
197
  /**
@@ -387,13 +387,9 @@ const microphoneButtonSelector = reselect__namespace.createSelector([getCallExis
387
387
  return {
388
388
  disabled: !callExists || !permission,
389
389
  checked: callExists ? !isMuted : false,
390
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(control-bar-split-buttons) */
391
390
  microphones: deviceManager.microphones,
392
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(control-bar-split-buttons) */
393
391
  speakers: deviceManager.speakers,
394
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(control-bar-split-buttons) */
395
392
  selectedMicrophone: deviceManager.selectedMicrophone,
396
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(control-bar-split-buttons) */
397
393
  selectedSpeaker: deviceManager.selectedSpeaker
398
394
  };
399
395
  });
@@ -409,9 +405,7 @@ const cameraButtonSelector = reselect__namespace.createSelector([getLocalVideoSt
409
405
  return {
410
406
  disabled: !deviceManager.selectedCamera || !permission,
411
407
  checked: localVideoStreams !== undefined && localVideoStreams.length > 0 ? !!localVideoFromCall : previewOn,
412
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(control-bar-split-buttons) */
413
408
  cameras: deviceManager.cameras,
414
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(control-bar-split-buttons) */
415
409
  selectedCamera: deviceManager.selectedCamera
416
410
  };
417
411
  });
@@ -2180,8 +2174,9 @@ const SendBox = (props) => {
2180
2174
  return;
2181
2175
  }
2182
2176
  // we dont want to send empty messages including spaces, newlines, tabs
2183
- if (!EMPTY_MESSAGE_REGEX.test(textValue)) {
2184
- onSendMessage && onSendMessage(textValue);
2177
+ // Message can be empty if there is a valid file upload
2178
+ if (!EMPTY_MESSAGE_REGEX.test(textValue) || hasFile(props)) {
2179
+ onSendMessage && onSendMessage(sanitizeText(textValue));
2185
2180
  setTextValue('');
2186
2181
  }
2187
2182
  (_a = sendTextFieldRef.current) === null || _a === void 0 ? void 0 : _a.focus();
@@ -2203,9 +2198,10 @@ const SendBox = (props) => {
2203
2198
  const mergedSendButtonStyle = React.useMemo(() => react.mergeStyles(sendButtonStyle, styles === null || styles === void 0 ? void 0 : styles.sendMessageIconContainer), [styles === null || styles === void 0 ? void 0 : styles.sendMessageIconContainer]);
2204
2199
  const mergedStyles = React.useMemo(() => react.concatStyleSets(styles), [styles]);
2205
2200
  const hasText = !!textValue;
2201
+ const hasTextOrFile = hasText || hasFile(props);
2206
2202
  const mergedSendIconStyle = React.useMemo(() => react.mergeStyles(sendIconStyle, {
2207
- color: !!errorMessage || !hasText ? theme.palette.neutralTertiary : theme.palette.themePrimary
2208
- }, styles === null || styles === void 0 ? void 0 : styles.sendMessageIcon), [errorMessage, hasText, theme, styles === null || styles === void 0 ? void 0 : styles.sendMessageIcon]);
2203
+ color: !!errorMessage || !hasTextOrFile ? theme.palette.neutralTertiary : theme.palette.themePrimary
2204
+ }, styles === null || styles === void 0 ? void 0 : styles.sendMessageIcon), [errorMessage, hasTextOrFile, theme, styles === null || styles === void 0 ? void 0 : styles.sendMessageIcon]);
2209
2205
  const onRenderSendIcon = React.useCallback((isHover) => onRenderIcon ? (onRenderIcon(isHover)) : (React__default['default'].createElement(react.Icon, { iconName: isHover && textValue ? 'SendBoxSendHovered' : 'SendBoxSend', className: mergedSendIconStyle })), [mergedSendIconStyle, onRenderIcon, textValue]);
2210
2206
  /* @conditional-compile-remove(file-sharing) */
2211
2207
  // Ensure that errors are cleared when there are no files in sendbox
@@ -2264,6 +2260,19 @@ const hasIncompleteFileUploads = (props) => {
2264
2260
  return !!(((_a = props.activeFileUploads) === null || _a === void 0 ? void 0 : _a.length) &&
2265
2261
  !props.activeFileUploads.filter((fileUpload) => !fileUpload.error).every((fileUpload) => fileUpload.uploadComplete));
2266
2262
  };
2263
+ const hasFile = (props) => {
2264
+ var _a;
2265
+ /* @conditional-compile-remove(file-sharing) */
2266
+ return !!((_a = props.activeFileUploads) === null || _a === void 0 ? void 0 : _a.find((file) => !file.error));
2267
+ };
2268
+ const sanitizeText = (message) => {
2269
+ if (EMPTY_MESSAGE_REGEX.test(message)) {
2270
+ return '';
2271
+ }
2272
+ else {
2273
+ return message;
2274
+ }
2275
+ };
2267
2276
 
2268
2277
  // Copyright (c) Microsoft Corporation.
2269
2278
  /** @private */
@@ -3086,7 +3095,7 @@ const _FileDownloadCards = (props) => {
3086
3095
  }
3087
3096
  return (React__default['default'].createElement("div", { style: fileDownloadCardsStyle, "data-ui-id": "file-download-card-group" },
3088
3097
  React__default['default'].createElement(_FileCardGroup, null, fileMetadata &&
3089
- fileMetadata.map((file) => (React__default['default'].createElement(_FileCard, { fileName: file.name, key: file.name, fileExtension: extension(file.name), actionIcon: showSpinner ? React__default['default'].createElement(react.Spinner, { size: react.SpinnerSize.medium, "aria-live": 'assertive' }) : React__default['default'].createElement(DownloadIconTrampoline, null), actionHandler: () => fileDownloadHandler(userId, file) }))))));
3098
+ fileMetadata.map((file) => (React__default['default'].createElement(_FileCard, { fileName: file.name, key: file.name, fileExtension: file.extension, actionIcon: showSpinner ? React__default['default'].createElement(react.Spinner, { size: react.SpinnerSize.medium, "aria-live": 'assertive' }) : React__default['default'].createElement(DownloadIconTrampoline, null), actionHandler: () => fileDownloadHandler(userId, file) }))))));
3090
3099
  };
3091
3100
  /**
3092
3101
  * @private
@@ -3871,14 +3880,14 @@ const StreamMedia = (props) => {
3871
3880
  /**
3872
3881
  * @private
3873
3882
  */
3874
- const participantItemContainerStyle = (isMe) => {
3883
+ const participantItemContainerStyle = (options) => {
3875
3884
  return {
3876
3885
  paddingTop: '0.25rem',
3877
3886
  paddingBottom: '0.25rem',
3878
3887
  display: 'flex',
3879
3888
  maxWidth: '100%',
3880
3889
  minWidth: '8rem',
3881
- cursor: isMe ? 'default' : 'pointer',
3890
+ cursor: options.localparticipant || !options.clickable ? 'default' : 'pointer',
3882
3891
  alignItems: 'center'
3883
3892
  };
3884
3893
  };
@@ -3950,14 +3959,14 @@ const ParticipantItem = (props) => {
3950
3959
  setItemHovered(false);
3951
3960
  setMenuHidden(true);
3952
3961
  };
3953
- return (React__default['default'].createElement("div", { ref: containerRef, role: 'menuitem', "data-is-focusable": true, className: react.mergeStyles(participantItemContainerStyle(me), styles === null || styles === void 0 ? void 0 : styles.root), onMouseEnter: () => setItemHovered(true), onMouseLeave: () => setItemHovered(false), onClick: () => {
3962
+ return (React__default['default'].createElement("div", { ref: containerRef, role: 'menuitem', "data-is-focusable": true, className: react.mergeStyles(participantItemContainerStyle({ localparticipant: me, clickable: !!menuItems }), styles === null || styles === void 0 ? void 0 : styles.root), onMouseEnter: () => setItemHovered(true), onMouseLeave: () => setItemHovered(false), onClick: () => {
3954
3963
  setItemHovered(true);
3955
3964
  setMenuHidden(false);
3956
3965
  onClick === null || onClick === void 0 ? void 0 : onClick(props);
3957
3966
  } },
3958
3967
  React__default['default'].createElement(react.Stack, { horizontal: true, className: react.mergeStyles({ width: `calc(100% - ${menuButtonContainerStyle.width})`, alignItems: 'center' }) },
3959
3968
  avatar,
3960
- me && React__default['default'].createElement(react.Stack, { className: meTextStyle }, isMeText),
3969
+ me && React__default['default'].createElement(react.Text, { className: meTextStyle }, isMeText),
3961
3970
  React__default['default'].createElement(react.Stack, { horizontal: true, className: react.mergeStyles(infoContainerStyle) }, onRenderIcon && onRenderIcon(props))),
3962
3971
  menuItems && menuItems.length > 0 && (React__default['default'].createElement(React__default['default'].Fragment, null,
3963
3972
  menuButton,
@@ -5496,18 +5505,13 @@ const modalMaxDragPosition = { x: localVideoTileOuterPaddingPX, y: localVideoTil
5496
5505
  * @public
5497
5506
  */
5498
5507
  const VideoGallery = (props) => {
5499
- var _a, _b, _c, _d;
5500
- const { localParticipant, remoteParticipants = [], localVideoViewOptions, remoteVideoViewOptions, dominantSpeakers, onRenderLocalVideoTile, onRenderRemoteVideoTile, onCreateLocalStreamView, onCreateRemoteStreamView, onDisposeRemoteStreamView, styles, layout, onRenderAvatar, showMuteIndicator, maxRemoteVideoStreams = DEFAULT_MAX_REMOTE_VIDEO_STREAMS,
5501
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(local-camera-switcher) */
5502
- showCameraSwitcherInLocalPreview,
5503
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(local-camera-switcher) */
5504
- localVideoCameraCycleButtonProps } = props;
5508
+ var _a, _b, _c;
5509
+ const { localParticipant, remoteParticipants = [], localVideoViewOptions, remoteVideoViewOptions, dominantSpeakers, onRenderLocalVideoTile, onRenderRemoteVideoTile, onCreateLocalStreamView, onCreateRemoteStreamView, onDisposeRemoteStreamView, styles, layout, onRenderAvatar, showMuteIndicator, maxRemoteVideoStreams = DEFAULT_MAX_REMOTE_VIDEO_STREAMS, showCameraSwitcherInLocalPreview, localVideoCameraCycleButtonProps } = props;
5505
5510
  const ids = useIdentifiers();
5506
5511
  const theme = useTheme();
5507
5512
  const localeStrings = useLocale$1().strings.videoGallery;
5508
5513
  const strings = Object.assign(Object.assign({}, localeStrings), props.strings);
5509
5514
  const shouldFloatLocalVideo = !!(layout === 'floatingLocalVideo' && remoteParticipants.length > 0);
5510
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(local-camera-switcher) */
5511
5515
  const shouldFloatNonDraggableLocalVideo = !!(showCameraSwitcherInLocalPreview && shouldFloatLocalVideo);
5512
5516
  const containerRef = React.useRef(null);
5513
5517
  const containerWidth = _useContainerWidth(containerRef);
@@ -5541,16 +5545,23 @@ const VideoGallery = (props) => {
5541
5545
  lastVisibleParticipants: visibleAudioParticipants.current,
5542
5546
  maxDominantSpeakers: MAX_AUDIO_DOMINANT_SPEAKERS
5543
5547
  });
5544
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(local-camera-switcher) */
5545
- const localCameraCycleButton = (localVideoCameraCycleButtonProps) => {
5546
- const ariaDescription = _formatString(strings.localVideoSelectedDescription, {
5547
- cameraName: localVideoCameraCycleButtonProps.selectedCamera.name
5548
- });
5548
+ const LocalCameraCycleButton = React.useCallback(() => {
5549
+ const ariaDescription = (localVideoCameraCycleButtonProps === null || localVideoCameraCycleButtonProps === void 0 ? void 0 : localVideoCameraCycleButtonProps.selectedCamera) &&
5550
+ _formatString(strings.localVideoSelectedDescription, {
5551
+ cameraName: localVideoCameraCycleButtonProps.selectedCamera.name
5552
+ });
5549
5553
  return (React__default['default'].createElement(react.Stack, { horizontalAlign: "end" }, showCameraSwitcherInLocalPreview &&
5550
5554
  (localVideoCameraCycleButtonProps === null || localVideoCameraCycleButtonProps === void 0 ? void 0 : localVideoCameraCycleButtonProps.cameras) !== undefined &&
5551
5555
  (localVideoCameraCycleButtonProps === null || localVideoCameraCycleButtonProps === void 0 ? void 0 : localVideoCameraCycleButtonProps.selectedCamera) !== undefined &&
5552
5556
  (localVideoCameraCycleButtonProps === null || localVideoCameraCycleButtonProps === void 0 ? void 0 : localVideoCameraCycleButtonProps.onSelectCamera) !== undefined && (React__default['default'].createElement(LocalVideoCameraCycleButton, { cameras: localVideoCameraCycleButtonProps.cameras, selectedCamera: localVideoCameraCycleButtonProps.selectedCamera, onSelectCamera: localVideoCameraCycleButtonProps.onSelectCamera, label: strings.localVideoCameraSwitcherLabel, ariaDescription: ariaDescription }))));
5553
- };
5557
+ }, [
5558
+ localVideoCameraCycleButtonProps === null || localVideoCameraCycleButtonProps === void 0 ? void 0 : localVideoCameraCycleButtonProps.cameras,
5559
+ localVideoCameraCycleButtonProps === null || localVideoCameraCycleButtonProps === void 0 ? void 0 : localVideoCameraCycleButtonProps.onSelectCamera,
5560
+ localVideoCameraCycleButtonProps === null || localVideoCameraCycleButtonProps === void 0 ? void 0 : localVideoCameraCycleButtonProps.selectedCamera,
5561
+ showCameraSwitcherInLocalPreview,
5562
+ strings.localVideoCameraSwitcherLabel,
5563
+ strings.localVideoSelectedDescription
5564
+ ]);
5554
5565
  /**
5555
5566
  * Utility function for memoized rendering of LocalParticipant.
5556
5567
  */
@@ -5568,18 +5579,20 @@ const VideoGallery = (props) => {
5568
5579
  }
5569
5580
  return (React__default['default'].createElement(react.Stack, { tabIndex: 0, "aria-label": strings.localVideoMovementLabel, role: 'dialog' },
5570
5581
  React__default['default'].createElement(VideoTile, { key: localParticipant.userId, userId: localParticipant.userId, renderElement: (localVideoStream === null || localVideoStream === void 0 ? void 0 : localVideoStream.renderElement) ? (React__default['default'].createElement(React__default['default'].Fragment, null,
5571
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(local-camera-switcher) */
5572
- localCameraCycleButton(localVideoCameraCycleButtonProps),
5582
+ React__default['default'].createElement(LocalCameraCycleButton, null),
5573
5583
  React__default['default'].createElement(StreamMedia, { videoStreamElement: localVideoStream.renderElement }))) : undefined, showLabel: !(shouldFloatLocalVideo && isNarrow), displayName: isNarrow ? '' : strings.localVideoLabel, initialsName: localParticipant.displayName, styles: localVideoTileStylesThemed, onRenderPlaceholder: onRenderAvatar, isMuted: localParticipant.isMuted, showMuteIndicator: showMuteIndicator })));
5574
- // eslint-disable-next-line react-hooks/exhaustive-deps
5575
5584
  }, [
5576
5585
  localParticipant,
5577
- localParticipant.isScreenSharingOn,
5578
- localParticipant.videoStream,
5579
- (_c = localParticipant.videoStream) === null || _c === void 0 ? void 0 : _c.renderElement,
5580
5586
  isNarrow,
5581
5587
  onCreateLocalStreamView,
5582
5588
  onRenderLocalVideoTile,
5589
+ theme.effects.roundedCorner4,
5590
+ styles === null || styles === void 0 ? void 0 : styles.localVideo,
5591
+ strings.localVideoMovementLabel,
5592
+ strings.localVideoLabel,
5593
+ LocalCameraCycleButton,
5594
+ showMuteIndicator,
5595
+ localVideoViewOptions,
5583
5596
  onRenderAvatar,
5584
5597
  shouldFloatLocalVideo
5585
5598
  ]);
@@ -5611,22 +5624,18 @@ const VideoGallery = (props) => {
5611
5624
  gridTiles = videoTiles.length > 0 ? videoTiles : audioTiles;
5612
5625
  horizontalGalleryTiles = videoTiles.length > 0 ? audioTiles : [];
5613
5626
  }
5614
- if (!shouldFloatLocalVideo &&
5615
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(local-camera-switcher) */ !shouldFloatNonDraggableLocalVideo &&
5616
- localParticipant) {
5627
+ if (!shouldFloatLocalVideo && localParticipant) {
5617
5628
  gridTiles.push(localVideoTile);
5618
5629
  }
5619
5630
  const localScreenShareStreamComponent = React__default['default'].createElement(LocalScreenShare, { localParticipant: localParticipant });
5620
- const remoteScreenShareComponent = screenShareParticipant && (React__default['default'].createElement(RemoteScreenShare, Object.assign({}, screenShareParticipant, { renderElement: (_d = screenShareParticipant.screenShareStream) === null || _d === void 0 ? void 0 : _d.renderElement, onCreateRemoteStreamView: onCreateRemoteStreamView, onDisposeRemoteStreamView: onDisposeRemoteStreamView })));
5631
+ const remoteScreenShareComponent = screenShareParticipant && (React__default['default'].createElement(RemoteScreenShare, Object.assign({}, screenShareParticipant, { renderElement: (_c = screenShareParticipant.screenShareStream) === null || _c === void 0 ? void 0 : _c.renderElement, onCreateRemoteStreamView: onCreateRemoteStreamView, onDisposeRemoteStreamView: onDisposeRemoteStreamView })));
5621
5632
  const horizontalGalleryPresent = horizontalGalleryTiles && horizontalGalleryTiles.length > 0;
5622
5633
  const layerHostId = reactHooks.useId('layerhost');
5623
5634
  return (React__default['default'].createElement("div", { "data-ui-id": ids.videoGallery, ref: containerRef, className: react.mergeStyles(videoGalleryOuterDivStyle, styles === null || styles === void 0 ? void 0 : styles.root) },
5624
5635
  shouldFloatLocalVideo &&
5625
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(local-camera-switcher) */
5626
5636
  !shouldFloatNonDraggableLocalVideo &&
5627
5637
  localParticipant &&
5628
5638
  (horizontalGalleryPresent ? (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(localVideoTileContainerStyle(theme, isNarrow)) }, localVideoTile)) : (React__default['default'].createElement(_ModalClone, { isOpen: true, isModeless: true, dragOptions: DRAG_OPTIONS$1, styles: floatingLocalVideoModalStyle(theme, isNarrow), layerProps: { hostId: layerHostId }, maxDragPosition: modalMaxDragPosition, minDragPosition: modalMinDragPosition }, localVideoTile))),
5629
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(local-camera-switcher) */
5630
5639
  // When we use showCameraSwitcherInLocalPreview it disables dragging to allow keyboard navigation.
5631
5640
  shouldFloatNonDraggableLocalVideo && localParticipant && remoteParticipants.length > 0 && (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(localVideoTileWithControlsContainerStyle(theme, isNarrow), {
5632
5641
  boxShadow: theme.effects.elevation8,
@@ -6066,7 +6075,7 @@ const defaultLocalVideoViewOptions = {
6066
6075
  * @public
6067
6076
  */
6068
6077
  const CameraButton = (props) => {
6069
- var _a, _b, _c, _d, _e, _f;
6078
+ var _a, _b, _c, _d, _e, _f, _g;
6070
6079
  const { localVideoViewOptions, onToggleCamera } = props;
6071
6080
  const [waitForCamera, setWaitForCamera] = React.useState(false);
6072
6081
  const localeStrings = useLocale$1().strings.cameraButton;
@@ -6098,22 +6107,9 @@ const CameraButton = (props) => {
6098
6107
  }), [cameraOn, localVideoViewOptions, onToggleCamera, toggleAnnouncerString]);
6099
6108
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
6100
6109
  React__default['default'].createElement(Announcer, { announcementString: announcerString, ariaLive: 'polite' }),
6101
- React__default['default'].createElement(ControlBarButton, Object.assign({}, props, { disabled: props.disabled || waitForCamera, onClick: onToggleCamera ? onToggleClick : props.onClick, onRenderOnIcon: (_a = props.onRenderOnIcon) !== null && _a !== void 0 ? _a : onRenderCameraOnIcon, onRenderOffIcon: (_b = props.onRenderOffIcon) !== null && _b !== void 0 ? _b : onRenderCameraOffIcon, strings: strings, labelKey: (_c = props.labelKey) !== null && _c !== void 0 ? _c : 'cameraButtonLabel', menuProps: (_d = props.menuProps) !== null && _d !== void 0 ? _d : generateDefaultDeviceMenuPropsTrampoline$1(props, strings), menuIconProps: ((_e = props.menuIconProps) !== null && _e !== void 0 ? _e : !enableDeviceSelectionMenuTrampoline$1(props)) ? { hidden: true } : undefined, split: (_f = props.split) !== null && _f !== void 0 ? _f : enableDeviceSelectionMenuTrampoline$1(props), "aria-roledescription": enableDeviceSelectionMenuTrampoline$1(props) ? strings.cameraButtonSplitRoleDescription : undefined, splitButtonAriaLabel: enableDeviceSelectionMenuTrampoline$1(props) ? splitButtonAriaString : undefined }))));
6102
- };
6103
- const generateDefaultDeviceMenuPropsTrampoline$1 = (props, strings) => {
6104
- var _a;
6105
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(control-bar-split-buttons) */
6106
- if (props.enableDeviceSelectionMenu) {
6107
- return generateDefaultDeviceMenuProps(Object.assign(Object.assign({}, props), { styles: (_a = props.styles) === null || _a === void 0 ? void 0 : _a.menuStyles }), strings);
6108
- }
6109
- return undefined;
6110
- };
6111
- const enableDeviceSelectionMenuTrampoline$1 = (props) => {
6112
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(control-bar-split-buttons) */
6113
- if (props.enableDeviceSelectionMenu) {
6114
- return true;
6115
- }
6116
- return false;
6110
+ React__default['default'].createElement(ControlBarButton, Object.assign({}, props, { disabled: props.disabled || waitForCamera, onClick: onToggleCamera ? onToggleClick : props.onClick, onRenderOnIcon: (_a = props.onRenderOnIcon) !== null && _a !== void 0 ? _a : onRenderCameraOnIcon, onRenderOffIcon: (_b = props.onRenderOffIcon) !== null && _b !== void 0 ? _b : onRenderCameraOffIcon, strings: strings, labelKey: (_c = props.labelKey) !== null && _c !== void 0 ? _c : 'cameraButtonLabel', menuProps: (_d = props.menuProps) !== null && _d !== void 0 ? _d : (props.enableDeviceSelectionMenu
6111
+ ? generateDefaultDeviceMenuProps(Object.assign(Object.assign({}, props), { styles: (_e = props.styles) === null || _e === void 0 ? void 0 : _e.menuStyles }), strings)
6112
+ : undefined), menuIconProps: ((_f = props.menuIconProps) !== null && _f !== void 0 ? _f : !props.enableDeviceSelectionMenu) ? { hidden: true } : undefined, split: (_g = props.split) !== null && _g !== void 0 ? _g : props.enableDeviceSelectionMenu, "aria-roledescription": props.enableDeviceSelectionMenu ? strings.cameraButtonSplitRoleDescription : undefined, splitButtonAriaLabel: props.enableDeviceSelectionMenu ? splitButtonAriaString : undefined }))));
6117
6113
  };
6118
6114
 
6119
6115
  // Copyright (c) Microsoft Corporation.
@@ -6244,7 +6240,7 @@ var __awaiter$l = (window && window.__awaiter) || function (thisArg, _arguments,
6244
6240
  * @public
6245
6241
  */
6246
6242
  const MicrophoneButton = (props) => {
6247
- var _a, _b, _c, _d, _e, _f;
6243
+ var _a, _b, _c, _d, _e, _f, _g;
6248
6244
  const { onToggleMicrophone } = props;
6249
6245
  const localeStrings = useLocale$1().strings.microphoneButton;
6250
6246
  const strings = Object.assign(Object.assign({}, localeStrings), props.strings);
@@ -6274,22 +6270,9 @@ const MicrophoneButton = (props) => {
6274
6270
  }), [isMicOn, onToggleMicrophone, toggleAnnouncerString]);
6275
6271
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
6276
6272
  React__default['default'].createElement(Announcer, { announcementString: announcerString, ariaLive: 'polite' }),
6277
- React__default['default'].createElement(ControlBarButton, Object.assign({}, props, { onClick: props.onToggleMicrophone ? onToggleClick : props.onClick, onRenderOnIcon: (_a = props.onRenderOnIcon) !== null && _a !== void 0 ? _a : onRenderMicOnIcon, onRenderOffIcon: (_b = props.onRenderOffIcon) !== null && _b !== void 0 ? _b : onRenderMicOffIcon, strings: strings, labelKey: (_c = props.labelKey) !== null && _c !== void 0 ? _c : 'microphoneButtonLabel', menuProps: (_d = props.menuProps) !== null && _d !== void 0 ? _d : generateDefaultDeviceMenuPropsTrampoline(props, strings), menuIconProps: ((_e = props.menuIconProps) !== null && _e !== void 0 ? _e : !enableDeviceSelectionMenuTrampoline(props)) ? { hidden: true } : undefined, split: (_f = props.split) !== null && _f !== void 0 ? _f : enableDeviceSelectionMenuTrampoline(props), "aria-roledescription": enableDeviceSelectionMenuTrampoline(props) ? strings.microphoneButtonSplitRoleDescription : undefined, splitButtonAriaLabel: enableDeviceSelectionMenuTrampoline(props) ? splitButtonAriaString : undefined }))));
6278
- };
6279
- const generateDefaultDeviceMenuPropsTrampoline = (props, strings) => {
6280
- var _a;
6281
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(control-bar-split-buttons) */
6282
- if (props.enableDeviceSelectionMenu) {
6283
- return generateDefaultDeviceMenuProps(Object.assign(Object.assign({}, props), { styles: (_a = props.styles) === null || _a === void 0 ? void 0 : _a.menuStyles }), strings);
6284
- }
6285
- return undefined;
6286
- };
6287
- const enableDeviceSelectionMenuTrampoline = (props) => {
6288
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(control-bar-split-buttons) */
6289
- if (props.enableDeviceSelectionMenu) {
6290
- return true;
6291
- }
6292
- return false;
6273
+ React__default['default'].createElement(ControlBarButton, Object.assign({}, props, { onClick: props.onToggleMicrophone ? onToggleClick : props.onClick, onRenderOnIcon: (_a = props.onRenderOnIcon) !== null && _a !== void 0 ? _a : onRenderMicOnIcon, onRenderOffIcon: (_b = props.onRenderOffIcon) !== null && _b !== void 0 ? _b : onRenderMicOffIcon, strings: strings, labelKey: (_c = props.labelKey) !== null && _c !== void 0 ? _c : 'microphoneButtonLabel', menuProps: (_d = props.menuProps) !== null && _d !== void 0 ? _d : (props.enableDeviceSelectionMenu
6274
+ ? generateDefaultDeviceMenuProps(Object.assign(Object.assign({}, props), { styles: (_e = props.styles) === null || _e === void 0 ? void 0 : _e.menuStyles }), strings)
6275
+ : undefined), menuIconProps: ((_f = props.menuIconProps) !== null && _f !== void 0 ? _f : !props.enableDeviceSelectionMenu) ? { hidden: true } : undefined, split: (_g = props.split) !== null && _g !== void 0 ? _g : props.enableDeviceSelectionMenu, "aria-roledescription": props.enableDeviceSelectionMenu ? strings.microphoneButtonSplitRoleDescription : undefined, splitButtonAriaLabel: props.enableDeviceSelectionMenu ? splitButtonAriaString : undefined }))));
6293
6276
  };
6294
6277
 
6295
6278
  // Copyright (c) Microsoft Corporation.
@@ -7573,7 +7556,7 @@ const messageThreadSelector = reselect.createSelector([getUserId, getChatMessage
7573
7556
  // TODO: Add support for topicUpdated system messages in MessageThread component.
7574
7557
  // message.type === ACSKnownMessageType.topicUpdated ||
7575
7558
  message.clientMessageId !== undefined)
7576
- .filter((message) => message.content && message.content.message !== '') // TODO: deal with deleted message and remove
7559
+ .filter(messagesWithContentOrFileSharingMetadata)
7577
7560
  .map((message) => {
7578
7561
  var _a;
7579
7562
  return memoizedFn((_a = message.id) !== null && _a !== void 0 ? _a : message.clientMessageId, message, userId, message.createdOn <= latestReadTime, isLargeGroup);
@@ -7593,6 +7576,16 @@ const sanitizedMessageContentType = (type) => {
7593
7576
  ? lowerCaseType
7594
7577
  : 'unknown';
7595
7578
  };
7579
+ const messagesWithContentOrFileSharingMetadata = (message) => {
7580
+ var _a, _b;
7581
+ if (message.deletedOn) {
7582
+ return false;
7583
+ }
7584
+ if ((_a = message.metadata) === null || _a === void 0 ? void 0 : _a['fileSharingMetadata']) {
7585
+ return true;
7586
+ }
7587
+ return !!(message.content && ((_b = message.content) === null || _b === void 0 ? void 0 : _b.message) !== '');
7588
+ };
7596
7589
 
7597
7590
  // Copyright (c) Microsoft Corporation.
7598
7591
  const filterTypingIndicators = (typingIndicators, userId) => {
@@ -10657,7 +10650,8 @@ class ProxyChatThreadClient {
10657
10650
  case 'sendMessage': {
10658
10651
  return this._context.withAsyncErrorTeedToState((...args) => __awaiter$b(this, void 0, void 0, function* () {
10659
10652
  // Retry logic?
10660
- const { content } = args[0];
10653
+ const [request, options] = args;
10654
+ const { content } = request;
10661
10655
  const clientMessageId = nanoid.nanoid(); // Generate a local short uuid for message
10662
10656
  const newMessage = {
10663
10657
  content: { message: content },
@@ -10669,7 +10663,8 @@ class ProxyChatThreadClient {
10669
10663
  createdOn: new Date(),
10670
10664
  status: 'sending',
10671
10665
  senderDisplayName: this._context.getState().displayName,
10672
- sender: this._context.getState().userId
10666
+ sender: this._context.getState().userId,
10667
+ metadata: options === null || options === void 0 ? void 0 : options.metadata
10673
10668
  };
10674
10669
  this._context.setChatMessage(chatThreadClient.threadId, newMessage);
10675
10670
  let result = undefined;
@@ -10967,9 +10962,7 @@ const coffeeIconStyle = {
10967
10962
  * @public
10968
10963
  */
10969
10964
  const COMPOSITE_ONLY_ICONS = {
10970
- /* @conditional-compile-remove(call-with-chat-composite) */
10971
10965
  ChevronLeft: React__default['default'].createElement(react.FontIcon, { iconName: "ChevronLeft" }),
10972
- /* @conditional-compile-remove(call-with-chat-composite) */
10973
10966
  Link: React__default['default'].createElement(react.FontIcon, { iconName: "Link" }),
10974
10967
  LobbyScreenConnectingToCall: React__default['default'].createElement(CoffeeIcon, null),
10975
10968
  LobbyScreenWaitingToBeAdmitted: React__default['default'].createElement(CoffeeIcon, null),
@@ -10977,23 +10970,14 @@ const COMPOSITE_ONLY_ICONS = {
10977
10970
  LocalDeviceSettingsMic: React__default['default'].createElement(reactIcons.MicOn20Filled, null),
10978
10971
  LocalDeviceSettingsSpeaker: React__default['default'].createElement(reactIcons.Speaker220Filled, null),
10979
10972
  LocalPreviewPlaceholder: React__default['default'].createElement(reactIcons.VideoOff20Filled, null),
10980
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(local-camera-switcher) */
10981
10973
  LocalCameraSwitch: React__default['default'].createElement(reactIcons.CameraSwitch24Regular, null),
10982
- /* @conditional-compile-remove(call-with-chat-composite) */
10983
10974
  ControlBarChatButtonActive: React__default['default'].createElement(reactIcons.Chat20Filled, null),
10984
- /* @conditional-compile-remove(call-with-chat-composite) */
10985
10975
  ControlBarChatButtonInactive: React__default['default'].createElement(reactIcons.Chat20Regular, null),
10986
- /* @conditional-compile-remove(call-with-chat-composite) */
10987
10976
  ControlBarPeopleButton: React__default['default'].createElement(reactIcons.People20Regular, null),
10988
- /* @conditional-compile-remove(call-with-chat-composite) */
10989
10977
  MoreDrawerMicrophones: React__default['default'].createElement(reactIcons.MicOn20Regular, null),
10990
- /* @conditional-compile-remove(call-with-chat-composite) */
10991
10978
  MoreDrawerPeople: React__default['default'].createElement(reactIcons.People20Regular, null),
10992
- /* @conditional-compile-remove(call-with-chat-composite) */
10993
10979
  MoreDrawerSpeakers: React__default['default'].createElement(reactIcons.Speaker220Regular, null),
10994
- /* @conditional-compile-remove(call-with-chat-composite) */
10995
10980
  MoreDrawerSelectedMicrophone: React__default['default'].createElement(reactIcons.MicOn20Filled, null),
10996
- /* @conditional-compile-remove(call-with-chat-composite) */
10997
10981
  MoreDrawerSelectedSpeaker: React__default['default'].createElement(reactIcons.Speaker220Filled, null),
10998
10982
  Muted: React__default['default'].createElement(reactIcons.MicOff20Filled, null),
10999
10983
  NetworkReconnectIcon: React__default['default'].createElement(reactIcons.CallMissed20Filled, null),
@@ -12982,9 +12966,7 @@ const concatButtonBaseStyles = (...styles) => {
12982
12966
  const Camera = (props) => {
12983
12967
  const cameraButtonProps = usePropsFor$1(CameraButton);
12984
12968
  const styles = React.useMemo(() => { var _a; return concatButtonBaseStyles((_a = props.styles) !== null && _a !== void 0 ? _a : {}); }, [props.styles]);
12985
- return (React__default['default'].createElement(CameraButton, Object.assign({ "data-ui-id": "call-composite-camera-button" }, cameraButtonProps, { showLabel: props.displayType !== 'compact', styles: styles,
12986
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(control-bar-split-buttons) */
12987
- enableDeviceSelectionMenu: props.splitButtonsForDeviceSelection })));
12969
+ return (React__default['default'].createElement(CameraButton, Object.assign({ "data-ui-id": "call-composite-camera-button" }, cameraButtonProps, { showLabel: props.displayType !== 'compact', styles: styles, enableDeviceSelectionMenu: props.splitButtonsForDeviceSelection })));
12988
12970
  };
12989
12971
 
12990
12972
  // Copyright (c) Microsoft Corporation.
@@ -13131,9 +13113,7 @@ const Microphone = (props) => {
13131
13113
  : {};
13132
13114
  const styles = React.useMemo(() => { var _a; return concatButtonBaseStyles((_a = props.styles) !== null && _a !== void 0 ? _a : {}); }, [props.styles]);
13133
13115
  // tab focus on MicrophoneButton on page load
13134
- return (React__default['default'].createElement(MicrophoneButton, Object.assign({ autoFocus: true, "data-ui-id": "call-composite-microphone-button" }, microphoneButtonProps, { showLabel: props.displayType !== 'compact', styles: styles }, microphoneButtonStrings, {
13135
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(control-bar-split-buttons) */
13136
- enableDeviceSelectionMenu: props.splitButtonsForDeviceSelection })));
13116
+ return (React__default['default'].createElement(MicrophoneButton, Object.assign({ autoFocus: true, "data-ui-id": "call-composite-microphone-button" }, microphoneButtonProps, { showLabel: props.displayType !== 'compact', styles: styles }, microphoneButtonStrings, { enableDeviceSelectionMenu: props.splitButtonsForDeviceSelection })));
13137
13117
  };
13138
13118
 
13139
13119
  // Copyright (c) Microsoft Corporation.
@@ -13502,31 +13482,17 @@ const remoteVideoViewOptions$1 = {
13502
13482
  */
13503
13483
  const MediaGallery = (props) => {
13504
13484
  const videoGalleryProps = usePropsFor$1(VideoGallery);
13505
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(local-camera-switcher) */
13506
13485
  const cameraSwitcherCameras = useSelector$1(localVideoCameraCycleButtonSelector);
13507
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(local-camera-switcher) */
13508
13486
  const cameraSwitcherCallback = useHandlers();
13509
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(local-camera-switcher) */
13510
13487
  const cameraSwitcherProps = React.useMemo(() => {
13511
13488
  return Object.assign(Object.assign({}, cameraSwitcherCallback), cameraSwitcherCameras);
13512
13489
  }, [cameraSwitcherCallback, cameraSwitcherCameras]);
13513
13490
  const remoteParticipants = useRemoteParticipantsWithCustomDisplayNames(videoGalleryProps.remoteParticipants, props.onFetchAvatarPersonaData);
13514
13491
  useLocalVideoStartTrigger(!!props.isVideoStreamOn);
13515
13492
  const VideoGalleryMemoized = React.useMemo(() => {
13516
- return (React__default['default'].createElement(VideoGallery, Object.assign({}, videoGalleryProps, { remoteParticipants: remoteParticipants, localVideoViewOptions: localVideoViewOptions$3, remoteVideoViewOptions: remoteVideoViewOptions$1, styles: VideoGalleryStyles, layout: "floatingLocalVideo",
13517
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(local-camera-switcher) */
13518
- showCameraSwitcherInLocalPreview: props.isMobile,
13519
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(local-camera-switcher) */
13520
- localVideoCameraCycleButtonProps: cameraSwitcherProps, onRenderAvatar: (userId, options) => (React__default['default'].createElement(react.Stack, { className: react.mergeStyles({ position: 'absolute', height: '100%', width: '100%' }) },
13493
+ return (React__default['default'].createElement(VideoGallery, Object.assign({}, videoGalleryProps, { remoteParticipants: remoteParticipants, localVideoViewOptions: localVideoViewOptions$3, remoteVideoViewOptions: remoteVideoViewOptions$1, styles: VideoGalleryStyles, layout: "floatingLocalVideo", showCameraSwitcherInLocalPreview: props.isMobile, localVideoCameraCycleButtonProps: cameraSwitcherProps, onRenderAvatar: (userId, options) => (React__default['default'].createElement(react.Stack, { className: react.mergeStyles({ position: 'absolute', height: '100%', width: '100%' }) },
13521
13494
  React__default['default'].createElement(AvatarPersona, Object.assign({ userId: userId }, options, { dataProvider: props.onFetchAvatarPersonaData })))) })));
13522
- }, [
13523
- videoGalleryProps,
13524
- props.isMobile,
13525
- props.onFetchAvatarPersonaData,
13526
- remoteParticipants,
13527
- /* @conditional-compile-remove(call-with-chat-composite) @conditional-compile-remove(local-camera-switcher) */
13528
- cameraSwitcherProps
13529
- ]);
13495
+ }, [videoGalleryProps, props.isMobile, props.onFetchAvatarPersonaData, remoteParticipants, cameraSwitcherProps]);
13530
13496
  return VideoGalleryMemoized;
13531
13497
  };
13532
13498
  /**
@@ -15858,7 +15824,7 @@ const LocalAndRemotePIP = (props) => {
15858
15824
  const remoteVideoTile = React.useMemo(() => props.dominantRemoteParticipant &&
15859
15825
  createVideoTile(props.dominantRemoteParticipant.displayName, props.dominantRemoteParticipant.videoStream), [props.dominantRemoteParticipant]);
15860
15826
  const locale = useLocale();
15861
- const ariaLabel = safeGetArialLabel(locale);
15827
+ const ariaLabel = locale.strings.callWithChat.pictureInPictureTileAriaLabel;
15862
15828
  const strings = React.useMemo(() => ({
15863
15829
  rootAriaLabel: ariaLabel
15864
15830
  }), [ariaLabel]);
@@ -15868,13 +15834,6 @@ const LocalAndRemotePIP = (props) => {
15868
15834
  // If we are showing the local participant as the primary tile, show nothing for the secondary tile
15869
15835
  secondaryTile: remoteVideoTile ? localVideoTile : undefined }));
15870
15836
  };
15871
- const safeGetArialLabel = (locale) => {
15872
- // eslint-disable-next-line prefer-const
15873
- let ariaLabel = '';
15874
- /* @conditional-compile-remove(call-with-chat-composite) */
15875
- ariaLabel = locale.strings.callWithChat.pictureInPictureTileAriaLabel;
15876
- return ariaLabel;
15877
- };
15878
15837
  const localVideoViewOptions = {
15879
15838
  scalingMode: 'Crop',
15880
15839
  isMirrored: true
@@ -16077,17 +16036,13 @@ const PeoplePaneContent = (props) => {
16077
16036
  return (React__default['default'].createElement(react.Stack, { verticalFill: true, styles: peoplePaneContainerStyle, tokens: peoplePaneContainerTokens },
16078
16037
  React__default['default'].createElement(react.Stack.Item, { grow: true, styles: participantListContainerStyles }, participantList),
16079
16038
  inviteLink && (React__default['default'].createElement(react.Stack.Item, { styles: copyLinkButtonContainerStyles },
16080
- React__default['default'].createElement(react.PrimaryButton, { onClick: () => copy__default['default'](inviteLink), styles: copyLinkButtonStylesThemed, onRenderIcon: () => React__default['default'].createElement(LinkIconTrampoline, null), text: strings.copyInviteLinkButtonLabel })))));
16039
+ React__default['default'].createElement(react.PrimaryButton, { onClick: () => copy__default['default'](inviteLink), styles: copyLinkButtonStylesThemed, onRenderIcon: () => React__default['default'].createElement(CallWithChatCompositeIcon, { iconName: "Link", style: linkIconStyles }), text: strings.copyInviteLinkButtonLabel })))));
16081
16040
  }
16082
16041
  return (React__default['default'].createElement(react.Stack, { tokens: peoplePaneContainerTokens },
16083
16042
  inviteLink && (React__default['default'].createElement(react.Stack, { styles: copyLinkButtonStackStyles },
16084
- React__default['default'].createElement(react.DefaultButton, { text: strings.copyInviteLinkButtonLabel, onRenderIcon: () => React__default['default'].createElement(LinkIconTrampoline, null), onClick: () => copy__default['default'](inviteLink), styles: copyLinkButtonStylesThemed }))),
16043
+ React__default['default'].createElement(react.DefaultButton, { text: strings.copyInviteLinkButtonLabel, onRenderIcon: () => React__default['default'].createElement(CallWithChatCompositeIcon, { iconName: "Link", style: linkIconStyles }), onClick: () => copy__default['default'](inviteLink), styles: copyLinkButtonStylesThemed }))),
16085
16044
  participantList));
16086
16045
  };
16087
- const LinkIconTrampoline = () => {
16088
- // @conditional-compile-remove(call-with-chat-composite)
16089
- return React__default['default'].createElement(CallWithChatCompositeIcon, { iconName: "Link", style: linkIconStyles });
16090
- };
16091
16046
  /**
16092
16047
  * In a CallWithChat when a participant is removed, we must remove them from both
16093
16048
  * the call and the chat thread.
@@ -16222,14 +16177,10 @@ const TabHeader = (props) => {
16222
16177
  }, [theme, haveMultipleTabs]);
16223
16178
  const strings = useCallWithChatCompositeStrings();
16224
16179
  return (React__default['default'].createElement(react.Stack, { horizontal: true, grow: true, styles: mobilePaneControlBarStyle },
16225
- React__default['default'].createElement(react.DefaultButton, { ariaLabel: strings.returnToCallButtonAriaLabel, ariaDescription: strings.returnToCallButtonAriaDescription, onClick: props.onClose, styles: mobilePaneBackButtonStyles, onRenderIcon: () => React__default['default'].createElement(ChevronLeftIconTrampoline, null) }),
16180
+ React__default['default'].createElement(react.DefaultButton, { ariaLabel: strings.returnToCallButtonAriaLabel, ariaDescription: strings.returnToCallButtonAriaDescription, onClick: props.onClose, styles: mobilePaneBackButtonStyles, onRenderIcon: () => React__default['default'].createElement(CallWithChatCompositeIcon, { iconName: "ChevronLeft" }) }),
16226
16181
  React__default['default'].createElement(react.Stack.Item, { grow: true }, props.onChatButtonClicked && (React__default['default'].createElement(react.DefaultButton, { onClick: props.onChatButtonClicked, styles: mobilePaneButtonStylesThemed, checked: props.activeTab === 'chat', role: 'tab' }, strings.chatButtonLabel))),
16227
16182
  React__default['default'].createElement(react.Stack.Item, { grow: true }, props.onPeopleButtonClicked && (React__default['default'].createElement(react.DefaultButton, { onClick: props.onPeopleButtonClicked, styles: mobilePaneButtonStylesThemed, checked: props.activeTab === 'people', role: 'tab' }, strings.peopleButtonLabel))),
16228
- React__default['default'].createElement(react.DefaultButton, { styles: mobilePaneHiddenIconStyles, onRenderIcon: () => React__default['default'].createElement(ChevronLeftIconTrampoline, null) })));
16229
- };
16230
- const ChevronLeftIconTrampoline = () => {
16231
- // @conditional-compile-remove(call-with-chat-composite)
16232
- return React__default['default'].createElement(CallWithChatCompositeIcon, { iconName: "ChevronLeft" });
16183
+ React__default['default'].createElement(react.DefaultButton, { styles: mobilePaneHiddenIconStyles, onRenderIcon: () => React__default['default'].createElement(CallWithChatCompositeIcon, { iconName: "ChevronLeft" }) })));
16233
16184
  };
16234
16185
 
16235
16186
  // Copyright (c) Microsoft Corporation.