@azure/communication-react 1.23.0-alpha-202501120018 → 1.23.0-alpha-202501160016

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 (52) hide show
  1. package/dist/communication-react.d.ts +82 -21
  2. package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-BbYciITo.js → ChatMessageComponentAsRichTextEditBox-R5C_P0J9.js} +2 -2
  3. package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-BbYciITo.js.map → ChatMessageComponentAsRichTextEditBox-R5C_P0J9.js.map} +1 -1
  4. package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-CcLqgWsO.js → RichTextSendBoxWrapper-D0KlP9qO.js} +2 -2
  5. package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-CcLqgWsO.js.map → RichTextSendBoxWrapper-D0KlP9qO.js.map} +1 -1
  6. package/dist/dist-cjs/communication-react/{index-CuxcFFWR.js → index-iq0jAnxX.js} +527 -34
  7. package/dist/dist-cjs/communication-react/index-iq0jAnxX.js.map +1 -0
  8. package/dist/dist-cjs/communication-react/index.js +1 -1
  9. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  10. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  11. package/dist/dist-esm/communication-react/src/index.d.ts +1 -0
  12. package/dist/dist-esm/communication-react/src/index.js.map +1 -1
  13. package/dist/dist-esm/react-components/src/components/CaptionsBanner.d.ts +44 -8
  14. package/dist/dist-esm/react-components/src/components/CaptionsBanner.js +42 -13
  15. package/dist/dist-esm/react-components/src/components/CaptionsBanner.js.map +1 -1
  16. package/dist/dist-esm/react-components/src/components/MeetingReactionOverlay.d.ts +2 -0
  17. package/dist/dist-esm/react-components/src/components/MeetingReactionOverlay.js +12 -1
  18. package/dist/dist-esm/react-components/src/components/MeetingReactionOverlay.js.map +1 -1
  19. package/dist/dist-esm/react-components/src/components/RealTimeText.d.ts +3 -3
  20. package/dist/dist-esm/react-components/src/components/RealTimeText.js +2 -2
  21. package/dist/dist-esm/react-components/src/components/RealTimeText.js.map +1 -1
  22. package/dist/dist-esm/react-components/src/components/RealTimeTextModal.d.ts +5 -2
  23. package/dist/dist-esm/react-components/src/components/RealTimeTextModal.js.map +1 -1
  24. package/dist/dist-esm/react-components/src/components/StartRealTimeTextButton.d.ts +3 -3
  25. package/dist/dist-esm/react-components/src/components/StartRealTimeTextButton.js.map +1 -1
  26. package/dist/dist-esm/react-components/src/components/TogetherModeOverlay.d.ts +15 -0
  27. package/dist/dist-esm/react-components/src/components/TogetherModeOverlay.js +123 -0
  28. package/dist/dist-esm/react-components/src/components/TogetherModeOverlay.js.map +1 -0
  29. package/dist/dist-esm/react-components/src/components/VideoGallery/Layout.d.ts +5 -0
  30. package/dist/dist-esm/react-components/src/components/VideoGallery/Layout.js.map +1 -1
  31. package/dist/dist-esm/react-components/src/components/VideoGallery/TogetherModeLayout.d.ts +9 -0
  32. package/dist/dist-esm/react-components/src/components/VideoGallery/TogetherModeLayout.js +85 -0
  33. package/dist/dist-esm/react-components/src/components/VideoGallery/TogetherModeLayout.js.map +1 -0
  34. package/dist/dist-esm/react-components/src/components/VideoGallery/TogetherModeStream.d.ts +24 -0
  35. package/dist/dist-esm/react-components/src/components/VideoGallery/TogetherModeStream.js +53 -0
  36. package/dist/dist-esm/react-components/src/components/VideoGallery/TogetherModeStream.js.map +1 -0
  37. package/dist/dist-esm/react-components/src/components/VideoGallery.d.ts +11 -1
  38. package/dist/dist-esm/react-components/src/components/VideoGallery.js +61 -3
  39. package/dist/dist-esm/react-components/src/components/VideoGallery.js.map +1 -1
  40. package/dist/dist-esm/react-components/src/components/styles/TogetherMode.styles.d.ts +89 -0
  41. package/dist/dist-esm/react-components/src/components/styles/TogetherMode.styles.js +173 -0
  42. package/dist/dist-esm/react-components/src/components/styles/TogetherMode.styles.js.map +1 -0
  43. package/dist/dist-esm/react-components/src/components/utils/sortCaptionsAndRealTimeTexts.d.ts +8 -0
  44. package/dist/dist-esm/react-components/src/components/utils/sortCaptionsAndRealTimeTexts.js +25 -0
  45. package/dist/dist-esm/react-components/src/components/utils/sortCaptionsAndRealTimeTexts.js.map +1 -0
  46. package/dist/dist-esm/react-components/src/types/ReactionTypes.d.ts +1 -1
  47. package/dist/dist-esm/react-components/src/types/ReactionTypes.js.map +1 -1
  48. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts +12 -0
  49. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.js.map +1 -1
  50. package/dist/dist-esm/react-composites/src/composites/localization/locales/en-US/strings.json +6 -0
  51. package/package.json +1 -1
  52. package/dist/dist-cjs/communication-react/index-CuxcFFWR.js.map +0 -1
@@ -188,7 +188,7 @@ function getDefaultExportFromCjs (x) {
188
188
  // Copyright (c) Microsoft Corporation.
189
189
  // Licensed under the MIT License.
190
190
  // GENERATED FILE. DO NOT EDIT MANUALLY.
191
- var telemetryVersion = '1.23.0-alpha-202501120018';
191
+ var telemetryVersion = '1.23.0-alpha-202501160016';
192
192
 
193
193
 
194
194
  var telemetryVersion$1 = /*@__PURE__*/getDefaultExportFromCjs(telemetryVersion);
@@ -16152,7 +16152,7 @@ class _ErrorBoundary extends React.Component {
16152
16152
  // Copyright (c) Microsoft Corporation.
16153
16153
  // Licensed under the MIT License.
16154
16154
  /* @conditional-compile-remove(rich-text-editor) */
16155
- const ChatMessageComponentAsRichTextEditBox = React.lazy(() => Promise.resolve().then(function () { return require('./ChatMessageComponentAsRichTextEditBox-BbYciITo.js'); }));
16155
+ const ChatMessageComponentAsRichTextEditBox = React.lazy(() => Promise.resolve().then(function () { return require('./ChatMessageComponentAsRichTextEditBox-R5C_P0J9.js'); }));
16156
16156
  /**
16157
16157
  * @private
16158
16158
  * Use this function to load RoosterJS dependencies early in the lifecycle.
@@ -16160,7 +16160,7 @@ const ChatMessageComponentAsRichTextEditBox = React.lazy(() => Promise.resolve()
16160
16160
  *
16161
16161
  * @conditional-compile-remove(rich-text-editor)
16162
16162
  */
16163
- const loadChatMessageComponentAsRichTextEditBox = () => Promise.resolve().then(function () { return require('./ChatMessageComponentAsRichTextEditBox-BbYciITo.js'); });
16163
+ const loadChatMessageComponentAsRichTextEditBox = () => Promise.resolve().then(function () { return require('./ChatMessageComponentAsRichTextEditBox-R5C_P0J9.js'); });
16164
16164
  /**
16165
16165
  * @private
16166
16166
  */
@@ -19937,6 +19937,284 @@ const RemoteContentShareReactionOverlay = React.memo((props) => {
19937
19937
  })));
19938
19938
  });
19939
19939
 
19940
+ // Copyright (c) Microsoft Corporation.
19941
+ // Licensed under the MIT License.
19942
+ /* @conditional-compile-remove(together-mode) */
19943
+ /* @conditional-compile-remove(together-mode) */
19944
+ /**
19945
+ * Multiplier to convert rem units to pixels.
19946
+ */
19947
+ const REM_TO_PX_MULTIPLIER = 16;
19948
+ /* @conditional-compile-remove(together-mode) */
19949
+ /**
19950
+ * The travel height for reactions in Together Mode.
19951
+ * The reaction move overlay uses pixel units, so the seat position height, defined in rem, needs to be converted to pixels
19952
+ */
19953
+ const REACTION_TRAVEL_HEIGHT = 0.35 * REM_TO_PX_MULTIPLIER;
19954
+ /* @conditional-compile-remove(together-mode) */
19955
+ /**
19956
+ * Defines the maximum travel height for reactions in Together Mode.
19957
+ * Ensures the reaction animation does not exceed the center point from the top.
19958
+ * Since the reaction move overlay uses pixel units, the seat position height (defined in rem) must be converted to pixels.
19959
+ */
19960
+ const REACTION_MAX_TRAVEL_HEIGHT = 0.5 * REM_TO_PX_MULTIPLIER;
19961
+ /* @conditional-compile-remove(together-mode) */
19962
+ /**
19963
+ * Sets the seating position for a participant in Together Mode.
19964
+ *
19965
+ * @param seatingPosition - The seating position information.
19966
+ * @returns The style object for the seating position.
19967
+ */
19968
+ function setParticipantSeatingPosition(seatingPosition) {
19969
+ return {
19970
+ width: _pxToRem(seatingPosition.width),
19971
+ height: _pxToRem(seatingPosition.height),
19972
+ left: _pxToRem(seatingPosition.left),
19973
+ top: _pxToRem(seatingPosition.top)
19974
+ };
19975
+ }
19976
+ /* @conditional-compile-remove(together-mode) */
19977
+ /**
19978
+ * Return a style bucket based on the number of active sprites.
19979
+ * For example, the first three reactions should appear at maximum
19980
+ * height, width, and opacity.
19981
+ * @private
19982
+ */
19983
+ function setTogetherModeSeatPositionStyle(seatingPosition) {
19984
+ return {
19985
+ seatPosition: setParticipantSeatingPosition(seatingPosition)
19986
+ };
19987
+ }
19988
+ /* @conditional-compile-remove(together-mode) */
19989
+ /**
19990
+ * The style for the Together Mode meeting overlay.
19991
+ */
19992
+ const togetherModeMeetingOverlayStyle = {
19993
+ width: '100%',
19994
+ height: '100%',
19995
+ position: 'absolute',
19996
+ top: '0',
19997
+ left: '0'
19998
+ };
19999
+ /* @conditional-compile-remove(together-mode) */
20000
+ /**
20001
+ * Generates the overlay style for a participant in Together Mode.
20002
+ *
20003
+ * @param seatingPosition - The seating position information.
20004
+ * @returns The style object for the participant overlay.
20005
+ */
20006
+ function getTogetherModeParticipantOverlayStyle(seatingPositionStyle) {
20007
+ return Object.assign(Object.assign({}, seatingPositionStyle.seatPosition), { position: 'absolute' });
20008
+ }
20009
+ /* @conditional-compile-remove(together-mode) */
20010
+ // Function to map a value from one range to another
20011
+ const mapRange = (value, inMin, inMax, outMin, outMax) => {
20012
+ return outMin + ((value - inMin) * (outMax - outMin)) / (inMax - inMin);
20013
+ };
20014
+ /* @conditional-compile-remove(together-mode) */
20015
+ /**
20016
+ * Calculate the reaction emoji scaled size based on width and height of the participant seat width and height.
20017
+ * This is needed when the browser is resized and the participant seat width and height changes.
20018
+ *
20019
+ * @param width - The width of the element.
20020
+ * @param height - The height of the element.
20021
+ * @returns The scaled size.
20022
+ */
20023
+ const calculateScaledSize = (width, height) => {
20024
+ // Maximum participant seat width and height
20025
+ const maxSize = 600;
20026
+ // Minimum participant seat width and height
20027
+ const minSize = 200;
20028
+ // Minimum scaled width and height of the reaction emoji
20029
+ const minScaledSize = 35;
20030
+ // Maximum scaled width and height of the reaction emoji
20031
+ const maxScaledSize = 70;
20032
+ // Use width or height to determine scaling factor
20033
+ const size = Math.min(width, height);
20034
+ // Map the size to the desired range
20035
+ return mapRange(size, minSize, maxSize, minScaledSize, maxScaledSize);
20036
+ };
20037
+ /* @conditional-compile-remove(together-mode) */
20038
+ /**
20039
+ * @private
20040
+ */
20041
+ const togetherModeStreamRootStyle = {
20042
+ root: {
20043
+ width: '100%',
20044
+ height: '100%',
20045
+ display: 'flex',
20046
+ justifyContent: 'center',
20047
+ alignItems: 'center',
20048
+ position: 'absolute',
20049
+ top: 0,
20050
+ left: 0
20051
+ }
20052
+ };
20053
+ /* @conditional-compile-remove(together-mode) */
20054
+ /**
20055
+ * @private
20056
+ */
20057
+ const togetherModeIconStyle = () => {
20058
+ return {
20059
+ width: _pxToRem(20),
20060
+ flexShrink: 0
20061
+ };
20062
+ };
20063
+ /* @conditional-compile-remove(together-mode) */
20064
+ /**
20065
+ * The style for the container holding the display name, raiseHand, spotlight and mute icons.
20066
+ * @private
20067
+ */
20068
+ const togetherModeParticipantStatusContainer = (backgroundColor, borderRadius) => {
20069
+ return {
20070
+ backgroundColor,
20071
+ display: 'flex',
20072
+ justifyContent: 'center',
20073
+ alignItems: 'center',
20074
+ gap: _pxToRem(2),
20075
+ margin: '0 auto', // Centers the container
20076
+ padding: `0 ${_pxToRem(5)}`,
20077
+ borderRadius,
20078
+ width: 'fit-content'
20079
+ };
20080
+ };
20081
+ /* @conditional-compile-remove(together-mode) */
20082
+ /**
20083
+ * @private
20084
+ */
20085
+ const togetherModeParticipantDisplayName = (isParticipantHovered, participantSeatingWidth, color) => {
20086
+ const MIN_DISPLAY_NAME_WIDTH = 100;
20087
+ return {
20088
+ textOverflow: 'ellipsis',
20089
+ flexGrow: 1, // Allow text to grow within available space
20090
+ overflow: isParticipantHovered ? 'visible' : 'hidden',
20091
+ whiteSpace: 'nowrap',
20092
+ textAlign: 'center',
20093
+ color,
20094
+ display: isParticipantHovered || participantSeatingWidth > MIN_DISPLAY_NAME_WIDTH ? 'inline-block' : 'none' // Completely remove the element when hidden
20095
+ };
20096
+ };
20097
+ /* @conditional-compile-remove(together-mode) */
20098
+ /**
20099
+ * @private
20100
+ */
20101
+ const togetherModeParticipantEmojiSpriteStyle = (emojiSize, emojiScaledSize, participantSeatWidth) => {
20102
+ const participantSeatWidthInPixel = parseFloat(participantSeatWidth) * REM_TO_PX_MULTIPLIER;
20103
+ const emojiScaledSizeInPercent = (emojiScaledSize / participantSeatWidthInPixel) * 100;
20104
+ return {
20105
+ width: `${emojiSize}`,
20106
+ position: 'absolute',
20107
+ // Center the emoji sprite within the participant seat
20108
+ left: `${emojiScaledSizeInPercent / 2}%`
20109
+ };
20110
+ };
20111
+
20112
+ // Copyright (c) Microsoft Corporation.
20113
+ // Licensed under the MIT License.
20114
+ /* @conditional-compile-remove(together-mode) */
20115
+ /* @conditional-compile-remove(together-mode) */
20116
+ /**
20117
+ * TogetherModeOverlay component renders an empty JSX element.
20118
+ *
20119
+ * @returns {JSX.Element} An empty JSX element.
20120
+ */
20121
+ const TogetherModeOverlay = React.memo((props) => {
20122
+ const locale = useLocale$1();
20123
+ const theme = useTheme();
20124
+ const callingPalette = theme.callingPalette;
20125
+ const { emojiSize, reactionResources, remoteParticipants, localParticipant, togetherModeSeatPositions } = props;
20126
+ const [togetherModeParticipantStatus, setTogetherModeParticipantStatus] = React.useState({});
20127
+ const [hoveredParticipantID, setHoveredParticipantID] = React.useState('');
20128
+ /*
20129
+ * The useMemo hook is used to calculate the participant status for the Together Mode overlay.
20130
+ * It updates the togetherModeParticipantStatus state when there's a change in the remoteParticipants, localParticipant,
20131
+ * raisedHand, spotlight, isMuted, displayName, or hoveredParticipantID.
20132
+ */
20133
+ React.useMemo(() => {
20134
+ const allParticipants = [...remoteParticipants, localParticipant];
20135
+ const participantsWithVideoAvailable = allParticipants.filter((p) => { var _a; return ((_a = p.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable) && togetherModeSeatPositions[p.userId]; });
20136
+ const updatedSignals = {};
20137
+ for (const p of participantsWithVideoAvailable) {
20138
+ const { userId, reaction, raisedHand, spotlight, isMuted, displayName } = p;
20139
+ const seatingPosition = togetherModeSeatPositions[userId];
20140
+ if (seatingPosition) {
20141
+ updatedSignals[userId] = {
20142
+ id: userId,
20143
+ reaction: reactionResources && reaction,
20144
+ isHandRaised: !!raisedHand,
20145
+ isSpotlighted: !!spotlight,
20146
+ isMuted,
20147
+ displayName: displayName || locale.strings.videoGallery.displayNamePlaceholder,
20148
+ showDisplayName: !!(spotlight || raisedHand || hoveredParticipantID === userId),
20149
+ scaledSize: calculateScaledSize(seatingPosition.width, seatingPosition.height),
20150
+ seatPositionStyle: setTogetherModeSeatPositionStyle(seatingPosition)
20151
+ };
20152
+ }
20153
+ }
20154
+ // This is used to remove the participants bounding box from the DOM when they are no longer in the stream
20155
+ const participantsNotInTogetherModeStream = Object.keys(togetherModeParticipantStatus).filter((id) => !updatedSignals[id]);
20156
+ setTogetherModeParticipantStatus((prevSignals) => {
20157
+ const newSignals = Object.assign(Object.assign({}, prevSignals), updatedSignals);
20158
+ const newSignalsLength = Object.keys(newSignals).length;
20159
+ participantsNotInTogetherModeStream.forEach((id) => {
20160
+ delete newSignals[id];
20161
+ });
20162
+ const hasChanges = Object.keys(newSignals).some((key) => JSON.stringify(newSignals[key]) !== JSON.stringify(prevSignals[key]) ||
20163
+ newSignalsLength !== Object.keys(prevSignals).length);
20164
+ return hasChanges ? newSignals : prevSignals;
20165
+ });
20166
+ }, [
20167
+ remoteParticipants,
20168
+ localParticipant,
20169
+ togetherModeParticipantStatus,
20170
+ togetherModeSeatPositions,
20171
+ reactionResources,
20172
+ locale.strings.videoGallery.displayNamePlaceholder,
20173
+ hoveredParticipantID
20174
+ ]);
20175
+ /*
20176
+ * When a larger participant scene switches to a smaller group in Together Mode,
20177
+ * participant video streams remain available because their video is still active,
20178
+ * even though they are not visible in the Together Mode stream.
20179
+ * Therefore, we rely on the updated seating position values to identify who is included in the Together Mode stream.
20180
+ * The Together mode seat position will only contain seat coordinates of participants who are visible in the Together Mode stream.
20181
+ */
20182
+ React.useMemo(() => {
20183
+ const removedVisibleParticipants = Object.keys(togetherModeParticipantStatus).filter((participantId) => !togetherModeSeatPositions[participantId]);
20184
+ setTogetherModeParticipantStatus((prevSignals) => {
20185
+ const newSignals = Object.assign({}, prevSignals);
20186
+ removedVisibleParticipants.forEach((participantId) => {
20187
+ delete newSignals[participantId];
20188
+ });
20189
+ // Trigger a re-render only if changes occurred
20190
+ const hasChanges = Object.keys(newSignals).length !== Object.keys(prevSignals).length;
20191
+ return hasChanges ? newSignals : prevSignals;
20192
+ });
20193
+ }, [togetherModeParticipantStatus, togetherModeSeatPositions]);
20194
+ return (React.createElement("div", { style: { position: 'absolute', width: '100%', height: '100%' } }, Object.values(togetherModeParticipantStatus).map((participantStatus) => {
20195
+ var _a, _b;
20196
+ return participantStatus.id && (React.createElement("div", { key: participantStatus.id, style: Object.assign({}, getTogetherModeParticipantOverlayStyle(participantStatus.seatPositionStyle)), onMouseEnter: () => setHoveredParticipantID(participantStatus.id), onMouseLeave: () => setHoveredParticipantID('') },
20197
+ React.createElement("div", null,
20198
+ ((_a = participantStatus.reaction) === null || _a === void 0 ? void 0 : _a.reactionType) && (
20199
+ // First div - Section that fixes the travel height and applies the movement animation
20200
+ // Second div - Responsible for ensuring the sprite emoji is always centered in the participant seat position
20201
+ // Third div - Play Animation as the other animation applies on the base play animation for the sprite
20202
+ React.createElement("div", { style: moveAnimationStyles(parseFloat(participantStatus.seatPositionStyle.seatPosition.height) *
20203
+ REACTION_MAX_TRAVEL_HEIGHT, parseFloat(participantStatus.seatPositionStyle.seatPosition.height) * REACTION_TRAVEL_HEIGHT) },
20204
+ React.createElement("div", { style: Object.assign({}, togetherModeParticipantEmojiSpriteStyle(emojiSize, participantStatus.scaledSize || 1, participantStatus.seatPositionStyle.seatPosition.width)) },
20205
+ React.createElement("div", { style: spriteAnimationStyles(REACTION_NUMBER_OF_ANIMATION_FRAMES, participantStatus.scaledSize || 1, (_b = (participantStatus.reaction &&
20206
+ getEmojiResource(participantStatus === null || participantStatus === void 0 ? void 0 : participantStatus.reaction.reactionType, reactionResources))) !== null && _b !== void 0 ? _b : '') })))),
20207
+ participantStatus.showDisplayName && (React.createElement("div", null,
20208
+ React.createElement("div", { style: Object.assign({}, togetherModeParticipantStatusContainer(callingPalette.videoTileLabelBackgroundLight, theme.effects.roundedCorner4)) },
20209
+ participantStatus.isHandRaised && React.createElement(RaisedHandIcon, null),
20210
+ participantStatus.showDisplayName && (React.createElement(react.Text, { style: Object.assign({}, togetherModeParticipantDisplayName(hoveredParticipantID === participantStatus.id, parseFloat(participantStatus.seatPositionStyle.seatPosition.width), participantStatus.displayName ? theme.palette.neutralSecondary : 'inherit')) }, participantStatus.displayName)),
20211
+ participantStatus.isMuted && (React.createElement(react.Stack, { className: react.mergeStyles(togetherModeIconStyle) },
20212
+ React.createElement(react.Icon, { iconName: "VideoTileMicOff" }))),
20213
+ participantStatus.isSpotlighted && (React.createElement(react.Stack, { className: react.mergeStyles(togetherModeIconStyle) },
20214
+ React.createElement(react.Icon, { iconName: "VideoTileSpotlighted" })))))))));
20215
+ })));
20216
+ });
20217
+
19940
20218
  // Copyright (c) Microsoft Corporation.
19941
20219
  // Licensed under the MIT License.
19942
20220
  /**
@@ -19962,7 +20240,8 @@ const REACTION_EMOJI_RESIZE_SCALE_CONSTANT = 3;
19962
20240
  * @internal
19963
20241
  */
19964
20242
  const MeetingReactionOverlay = (props) => {
19965
- const { overlayMode, reaction, reactionResources, localParticipant, remoteParticipants } = props;
20243
+ const { overlayMode, reaction, reactionResources, localParticipant, remoteParticipants,
20244
+ /* @conditional-compile-remove(together-mode) */ togetherModeSeatPositions } = props;
19966
20245
  const [emojiSizePx, setEmojiSizePx] = React.useState(0);
19967
20246
  const [divHeight, setDivHeight] = React.useState(0);
19968
20247
  const [divWidth, setDivWidth] = React.useState(0);
@@ -19999,6 +20278,11 @@ const MeetingReactionOverlay = (props) => {
19999
20278
  return (React.createElement("div", { ref: videoTileRef, style: { width: '100%', height: '100%', pointerEvents: 'none' } },
20000
20279
  React.createElement(RemoteContentShareReactionOverlay, { hostDivHeight: divHeight, hostDivWidth: divWidth, reactionResources: reactionResources, localParticipant: localParticipant, remoteParticipants: remoteParticipants })));
20001
20280
  }
20281
+ else if (props.overlayMode === 'together-mode') {
20282
+ /* @conditional-compile-remove(together-mode) */
20283
+ return (React.createElement("div", { style: Object.assign({}, togetherModeMeetingOverlayStyle) },
20284
+ React.createElement(TogetherModeOverlay, { emojiSize: emojiSizePx, reactionResources: reactionResources, localParticipant: localParticipant !== null && localParticipant !== void 0 ? localParticipant : {}, remoteParticipants: remoteParticipants !== null && remoteParticipants !== void 0 ? remoteParticipants : [], togetherModeSeatPositions: togetherModeSeatPositions !== null && togetherModeSeatPositions !== void 0 ? togetherModeSeatPositions : {} })));
20285
+ }
20002
20286
  else {
20003
20287
  return React.createElement(React.Fragment, null);
20004
20288
  }
@@ -21318,9 +21602,9 @@ const DefaultLayout = (props) => {
21318
21602
  return (React.createElement(react.Stack, { horizontal: overflowGalleryPosition === 'verticalRight', styles: rootLayoutStyle$1, tokens: videoGalleryLayoutGap },
21319
21603
  props.overflowGalleryPosition === 'horizontalTop' ? overflowGallery : React.createElement(React.Fragment, null),
21320
21604
  screenShareComponent ? (screenShareComponent) : (React.createElement(GridLayout, { key: "grid-layout", styles: styles === null || styles === void 0 ? void 0 : styles.gridLayout }, gridTiles)),
21321
- overflowGalleryTrampoline$3(overflowGallery, props.overflowGalleryPosition)));
21605
+ overflowGalleryTrampoline$4(overflowGallery, props.overflowGalleryPosition)));
21322
21606
  };
21323
- const overflowGalleryTrampoline$3 = (gallery, galleryPosition) => {
21607
+ const overflowGalleryTrampoline$4 = (gallery, galleryPosition) => {
21324
21608
  return galleryPosition !== 'horizontalTop' ? gallery : React.createElement(React.Fragment, null);
21325
21609
  };
21326
21610
 
@@ -22173,9 +22457,9 @@ const FloatingLocalVideoLayout = (props) => {
22173
22457
  React.createElement(react.Stack, { horizontal: overflowGalleryPosition === 'verticalRight', styles: innerLayoutStyle, tokens: videoGalleryLayoutGap },
22174
22458
  props.overflowGalleryPosition === 'horizontalTop' ? overflowGallery : React.createElement(React.Fragment, null),
22175
22459
  screenShareComponent ? (screenShareComponent) : (React.createElement(GridLayout, { key: "grid-layout", styles: styles === null || styles === void 0 ? void 0 : styles.gridLayout }, gridTiles)),
22176
- overflowGalleryTrampoline$2(overflowGallery, props.overflowGalleryPosition))));
22460
+ overflowGalleryTrampoline$3(overflowGallery, props.overflowGalleryPosition))));
22177
22461
  };
22178
- const overflowGalleryTrampoline$2 = (gallery, galleryPosition) => {
22462
+ const overflowGalleryTrampoline$3 = (gallery, galleryPosition) => {
22179
22463
  return galleryPosition !== 'horizontalTop' ? gallery : React.createElement(React.Fragment, null);
22180
22464
  };
22181
22465
 
@@ -22268,9 +22552,9 @@ const SpeakerVideoLayout = (props) => {
22268
22552
  React.createElement(react.Stack, { horizontal: overflowGalleryPosition === 'verticalRight', styles: innerLayoutStyle, tokens: videoGalleryLayoutGap },
22269
22553
  props.overflowGalleryPosition === 'horizontalTop' ? overflowGallery : React.createElement(React.Fragment, null),
22270
22554
  screenShareComponent ? (screenShareComponent) : (React.createElement(GridLayout, { key: "grid-layout", styles: styles === null || styles === void 0 ? void 0 : styles.gridLayout }, gridTiles)),
22271
- overflowGalleryTrampoline$1(overflowGallery, props.overflowGalleryPosition))));
22555
+ overflowGalleryTrampoline$2(overflowGallery, props.overflowGalleryPosition))));
22272
22556
  };
22273
- const overflowGalleryTrampoline$1 = (gallery, galleryPosition) => {
22557
+ const overflowGalleryTrampoline$2 = (gallery, galleryPosition) => {
22274
22558
  return galleryPosition !== 'horizontalTop' ? gallery : React.createElement(React.Fragment, null);
22275
22559
  };
22276
22560
 
@@ -22362,9 +22646,9 @@ const LargeGalleryLayout = (props) => {
22362
22646
  return (React.createElement(react.Stack, { horizontal: overflowGalleryPosition === 'verticalRight', styles: rootLayoutStyle$1, tokens: videoGalleryLayoutGap },
22363
22647
  props.overflowGalleryPosition === 'horizontalTop' ? overflowGallery : React.createElement(React.Fragment, null),
22364
22648
  screenShareComponent ? (screenShareComponent) : (React.createElement(GridLayout, { key: "grid-layout", styles: styles === null || styles === void 0 ? void 0 : styles.gridLayout }, gridTiles)),
22365
- overflowGalleryTrampoline(overflowGallery, props.overflowGalleryPosition)));
22649
+ overflowGalleryTrampoline$1(overflowGallery, props.overflowGalleryPosition)));
22366
22650
  };
22367
- const overflowGalleryTrampoline = (gallery, galleryPosition) => {
22651
+ const overflowGalleryTrampoline$1 = (gallery, galleryPosition) => {
22368
22652
  return galleryPosition !== 'horizontalTop' ? gallery : React.createElement(React.Fragment, null);
22369
22653
  };
22370
22654
  const calculateMaxTilesInLargeGrid = (parentWidth, parentHeight) => {
@@ -22375,6 +22659,117 @@ const calculateMaxTilesInLargeGrid = (parentWidth, parentHeight) => {
22375
22659
  : LARGE_GALLERY_PARTICIPANT_CAP;
22376
22660
  };
22377
22661
 
22662
+ // Copyright (c) Microsoft Corporation.
22663
+ // Licensed under the MIT License.
22664
+ /* @conditional-compile-remove(together-mode) */
22665
+ /* @conditional-compile-remove(together-mode) */
22666
+ /**
22667
+ * A memoized version of local screen share component. React.memo is used for a performance
22668
+ * boost by memoizing the same rendered component to avoid rerendering this when the parent component rerenders.
22669
+ * https://reactjs.org/docs/react-api.html#reactmemo
22670
+ */
22671
+ const TogetherModeLayout = (props) => {
22672
+ const { remoteParticipants = [], dominantSpeakers, screenShareComponent, onRenderRemoteParticipant, styles, maxRemoteVideoStreams, parentWidth, parentHeight, overflowGalleryPosition = 'horizontalBottom', pinnedParticipantUserIds = [], togetherModeStreamComponent } = props;
22673
+ const isNarrow = parentWidth ? isNarrowWidth(parentWidth) : false;
22674
+ const isShort = parentHeight ? isShortHeight(parentHeight) : false;
22675
+ const [indexesToRender, setIndexesToRender] = React.useState([]);
22676
+ const childrenPerPage = React.useRef(4);
22677
+ const { gridParticipants, overflowGalleryParticipants } = useOrganizedParticipants({
22678
+ remoteParticipants,
22679
+ dominantSpeakers,
22680
+ maxGridParticipants: maxRemoteVideoStreams,
22681
+ isScreenShareActive: !!screenShareComponent,
22682
+ maxOverflowGalleryDominantSpeakers: screenShareComponent
22683
+ ? childrenPerPage.current - (pinnedParticipantUserIds.length % childrenPerPage.current)
22684
+ : childrenPerPage.current,
22685
+ pinnedParticipantUserIds,
22686
+ layout: 'floatingLocalVideo'
22687
+ });
22688
+ const { gridTiles, overflowGalleryTiles } = renderTiles(gridParticipants, onRenderRemoteParticipant, maxRemoteVideoStreams, indexesToRender, overflowGalleryParticipants, dominantSpeakers);
22689
+ const layerHostId = reactHooks.useId('layerhost');
22690
+ const togetherModeOverFlowGalleryTiles = React.useMemo(() => {
22691
+ let newTiles = overflowGalleryTiles;
22692
+ if (togetherModeStreamComponent) {
22693
+ if (screenShareComponent) {
22694
+ newTiles = gridTiles.concat(overflowGalleryTiles);
22695
+ }
22696
+ }
22697
+ return newTiles;
22698
+ }, [gridTiles, overflowGalleryTiles, screenShareComponent, togetherModeStreamComponent]);
22699
+ const overflowGallery = React.useMemo(() => {
22700
+ if (overflowGalleryTiles.length === 0 && !props.screenShareComponent) {
22701
+ return null;
22702
+ }
22703
+ return (React.createElement(OverflowGallery, { isShort: isShort, onFetchTilesToRender: setIndexesToRender, isNarrow: isNarrow, shouldFloatLocalVideo: false, overflowGalleryElements: togetherModeOverFlowGalleryTiles, horizontalGalleryStyles: styles === null || styles === void 0 ? void 0 : styles.horizontalGallery, verticalGalleryStyles: styles === null || styles === void 0 ? void 0 : styles.verticalGallery, overflowGalleryPosition: overflowGalleryPosition, onChildrenPerPageChange: (n) => {
22704
+ childrenPerPage.current = n;
22705
+ }, parentWidth: parentWidth }));
22706
+ }, [
22707
+ overflowGalleryTiles.length,
22708
+ props.screenShareComponent,
22709
+ isShort,
22710
+ isNarrow,
22711
+ togetherModeOverFlowGalleryTiles,
22712
+ styles === null || styles === void 0 ? void 0 : styles.horizontalGallery,
22713
+ styles === null || styles === void 0 ? void 0 : styles.verticalGallery,
22714
+ overflowGalleryPosition,
22715
+ parentWidth
22716
+ ]);
22717
+ return screenShareComponent ? (React.createElement(react.Stack, { styles: rootLayoutStyle$1 },
22718
+ React.createElement(react.LayerHost, { id: layerHostId, className: react.mergeStyles(layerHostStyle) }),
22719
+ React.createElement(react.Stack, { horizontal: overflowGalleryPosition === 'verticalRight', styles: innerLayoutStyle, tokens: videoGalleryLayoutGap },
22720
+ props.overflowGalleryPosition === 'horizontalTop' ? overflowGallery : React.createElement(React.Fragment, null),
22721
+ screenShareComponent,
22722
+ overflowGalleryTrampoline(overflowGallery, props.overflowGalleryPosition)))) : (React.createElement(react.Stack, null, props.togetherModeStreamComponent));
22723
+ };
22724
+ /* @conditional-compile-remove(together-mode) */
22725
+ const overflowGalleryTrampoline = (gallery, galleryPosition) => {
22726
+ return galleryPosition !== 'horizontalTop' ? gallery : React.createElement(React.Fragment, null);
22727
+ };
22728
+
22729
+ // Copyright (c) Microsoft Corporation.
22730
+ // Licensed under the MIT License.
22731
+ /* @conditional-compile-remove(together-mode) */
22732
+ /* @conditional-compile-remove(together-mode) */
22733
+ /**
22734
+ * A memoized version of local screen share component. React.memo is used for a performance
22735
+ * boost by memoizing the same rendered component to avoid rerendering this when the parent component rerenders.
22736
+ * https://reactjs.org/docs/react-api.html#reactmemo
22737
+ */
22738
+ const TogetherModeStream = React.memo((props) => {
22739
+ var _a, _b;
22740
+ const { startTogetherModeEnabled, isTogetherModeActive, onCreateTogetherModeStreamView, onStartTogetherMode, onSetTogetherModeSceneSize, onDisposeTogetherModeStreamView, togetherModeStreams, containerWidth, containerHeight } = props;
22741
+ React.useEffect(() => {
22742
+ return () => {
22743
+ // TODO: Isolate disposing behaviors for screenShare and videoStream
22744
+ onDisposeTogetherModeStreamView && onDisposeTogetherModeStreamView();
22745
+ };
22746
+ }, [onDisposeTogetherModeStreamView]);
22747
+ // Trigger startTogetherMode only when needed
22748
+ React.useEffect(() => {
22749
+ if (startTogetherModeEnabled && !isTogetherModeActive) {
22750
+ onStartTogetherMode === null || onStartTogetherMode === void 0 ? void 0 : onStartTogetherMode();
22751
+ }
22752
+ }, [startTogetherModeEnabled, isTogetherModeActive, onStartTogetherMode]);
22753
+ // Create stream view if not already created
22754
+ React.useEffect(() => {
22755
+ var _a;
22756
+ if (!((_a = togetherModeStreams === null || togetherModeStreams === void 0 ? void 0 : togetherModeStreams.mainVideoStream) === null || _a === void 0 ? void 0 : _a.renderElement)) {
22757
+ onCreateTogetherModeStreamView === null || onCreateTogetherModeStreamView === void 0 ? void 0 : onCreateTogetherModeStreamView();
22758
+ }
22759
+ }, [(_a = togetherModeStreams === null || togetherModeStreams === void 0 ? void 0 : togetherModeStreams.mainVideoStream) === null || _a === void 0 ? void 0 : _a.renderElement, onCreateTogetherModeStreamView]);
22760
+ // Update scene size only when container dimensions change
22761
+ React.useMemo(() => {
22762
+ if (onSetTogetherModeSceneSize && containerWidth && containerHeight) {
22763
+ onSetTogetherModeSceneSize(containerWidth, containerHeight);
22764
+ }
22765
+ }, [onSetTogetherModeSceneSize, containerWidth, containerHeight]);
22766
+ const stream = (_b = props.togetherModeStreams) === null || _b === void 0 ? void 0 : _b.mainVideoStream;
22767
+ const showLoadingIndicator = !(stream && stream.isAvailable && stream.isReceiving);
22768
+ return containerWidth && containerHeight ? (React.createElement(react.Stack, { styles: togetherModeStreamRootStyle, horizontalAlign: "center", verticalAlign: "center" },
22769
+ React.createElement(StreamMedia, { videoStreamElement: (stream === null || stream === void 0 ? void 0 : stream.renderElement) || null, isMirrored: true, loadingState: showLoadingIndicator ? 'loading' : 'none' }),
22770
+ React.createElement(MeetingReactionOverlay, { reactionResources: props.reactionResources || {}, localParticipant: props.localParticipant, remoteParticipants: props.remoteParticipants, togetherModeSeatPositions: props.seatingCoordinates, overlayMode: "together-mode" }))) : (React.createElement(React.Fragment, null));
22771
+ });
22772
+
22378
22773
  // Copyright (c) Microsoft Corporation.
22379
22774
  // Licensed under the MIT License.
22380
22775
  /**
@@ -22414,6 +22809,22 @@ const MAX_PINNED_REMOTE_VIDEO_TILES$1 = 4;
22414
22809
  const VideoGallery = (props) => {
22415
22810
  var _a, _b, _c, _d;
22416
22811
  const { localParticipant, remoteParticipants = [], localVideoViewOptions, remoteVideoViewOptions, dominantSpeakers, onRenderLocalVideoTile, onRenderRemoteVideoTile, onCreateLocalStreamView, onDisposeLocalStreamView, onCreateRemoteStreamView, onDisposeRemoteScreenShareStreamView, onDisposeLocalScreenShareStreamView, onDisposeRemoteVideoStreamView, styles, layout, onRenderAvatar, showMuteIndicator, maxRemoteVideoStreams = DEFAULT_MAX_REMOTE_VIDEO_STREAMS, showCameraSwitcherInLocalPreview, localVideoCameraCycleButtonProps, onPinParticipant: onPinParticipantHandler, onUnpinParticipant: onUnpinParticipantHandler, remoteVideoTileMenu = DEFAULT_REMOTE_VIDEO_TILE_MENU_OPTIONS, overflowGalleryPosition = 'horizontalBottom', localVideoTileSize = 'followDeviceOrientation', spotlightedParticipants, onStartLocalSpotlight, onStartRemoteSpotlight, onStopLocalSpotlight, onStopRemoteSpotlight, maxParticipantsToSpotlight, reactionResources, videoTilesOptions, onMuteParticipant,
22812
+ /* @conditional-compile-remove(together-mode) */
22813
+ startTogetherModeEnabled,
22814
+ /* @conditional-compile-remove(together-mode) */
22815
+ isTogetherModeActive,
22816
+ /* @conditional-compile-remove(together-mode) */
22817
+ onCreateTogetherModeStreamView,
22818
+ /* @conditional-compile-remove(together-mode) */
22819
+ onStartTogetherMode,
22820
+ /* @conditional-compile-remove(together-mode) */
22821
+ onSetTogetherModeSceneSize,
22822
+ /* @conditional-compile-remove(together-mode) */
22823
+ togetherModeStreams,
22824
+ /* @conditional-compile-remove(together-mode) */
22825
+ togetherModeSeatingCoordinates,
22826
+ /* @conditional-compile-remove(together-mode) */
22827
+ onDisposeTogetherModeStreamView,
22417
22828
  /* @conditional-compile-remove(media-access) */
22418
22829
  onForbidAudio,
22419
22830
  /* @conditional-compile-remove(media-access) */
@@ -22610,6 +23021,27 @@ const VideoGallery = (props) => {
22610
23021
  : localParticipant.isScreenSharingOn
22611
23022
  ? localScreenShareStreamComponent
22612
23023
  : undefined;
23024
+ /* @conditional-compile-remove(together-mode) */
23025
+ const togetherModeStreamComponent = React.useMemo(() => (React.createElement(TogetherModeStream, { startTogetherModeEnabled: startTogetherModeEnabled, isTogetherModeActive: isTogetherModeActive, onCreateTogetherModeStreamView: onCreateTogetherModeStreamView, onStartTogetherMode: onStartTogetherMode, onDisposeTogetherModeStreamView: onDisposeTogetherModeStreamView, onSetTogetherModeSceneSize: onSetTogetherModeSceneSize, togetherModeStreams: togetherModeStreams, seatingCoordinates: togetherModeSeatingCoordinates, localParticipant: localParticipant, remoteParticipants: remoteParticipants, reactionResources: reactionResources, screenShareComponent: screenShareComponent, containerWidth: containerWidth, containerHeight: containerHeight })), [
23026
+ startTogetherModeEnabled,
23027
+ isTogetherModeActive,
23028
+ onCreateTogetherModeStreamView,
23029
+ onStartTogetherMode,
23030
+ onDisposeTogetherModeStreamView,
23031
+ onSetTogetherModeSceneSize,
23032
+ togetherModeStreams,
23033
+ togetherModeSeatingCoordinates,
23034
+ localParticipant,
23035
+ remoteParticipants,
23036
+ reactionResources,
23037
+ screenShareComponent,
23038
+ containerWidth,
23039
+ containerHeight
23040
+ ]);
23041
+ /* @conditional-compile-remove(together-mode) */
23042
+ // Current implementation of capabilities is only based on user role.
23043
+ // This logic checks for the user role and if the user is a Teams user.
23044
+ const canSwitchToTogetherModeLayout = isTogetherModeActive || (_isIdentityMicrosoftTeamsUser(localParticipant.userId) && startTogetherModeEnabled);
22613
23045
  const layoutProps = React.useMemo(() => ({
22614
23046
  remoteParticipants,
22615
23047
  localParticipant,
@@ -22625,7 +23057,9 @@ const VideoGallery = (props) => {
22625
23057
  pinnedParticipantUserIds: pinnedParticipants,
22626
23058
  overflowGalleryPosition,
22627
23059
  localVideoTileSize,
22628
- spotlightedParticipantUserIds: spotlightedParticipants
23060
+ spotlightedParticipantUserIds: spotlightedParticipants,
23061
+ /* @conditional-compile-remove(together-mode) */
23062
+ togetherModeStreamComponent
22629
23063
  }), [
22630
23064
  remoteParticipants,
22631
23065
  localParticipant,
@@ -22642,7 +23076,9 @@ const VideoGallery = (props) => {
22642
23076
  pinnedParticipants,
22643
23077
  overflowGalleryPosition,
22644
23078
  localVideoTileSize,
22645
- spotlightedParticipants
23079
+ spotlightedParticipants,
23080
+ /* @conditional-compile-remove(together-mode) */
23081
+ togetherModeStreamComponent
22646
23082
  ]);
22647
23083
  const videoGalleryLayout = React.useMemo(() => {
22648
23084
  if (screenShareParticipant && layout === 'focusedContent') {
@@ -22658,8 +23094,19 @@ const VideoGallery = (props) => {
22658
23094
  if (layout === 'largeGallery') {
22659
23095
  return React.createElement(LargeGalleryLayout, Object.assign({}, layoutProps));
22660
23096
  }
23097
+ /* @conditional-compile-remove(together-mode) */
23098
+ // Teams users can switch to Together mode layout only if they have the capability,
23099
+ // while ACS users can do so only if Together mode is enabled.
23100
+ if (layout === 'togetherMode' && canSwitchToTogetherModeLayout) {
23101
+ return React.createElement(TogetherModeLayout, Object.assign({}, layoutProps));
23102
+ }
22661
23103
  return React.createElement(DefaultLayout, Object.assign({}, layoutProps));
22662
- }, [layout, layoutProps, screenShareParticipant]);
23104
+ }, [
23105
+ /* @conditional-compile-remove(together-mode) */ canSwitchToTogetherModeLayout,
23106
+ layout,
23107
+ layoutProps,
23108
+ screenShareParticipant
23109
+ ]);
22663
23110
  return (React.createElement("div", {
22664
23111
  // We don't assign an drawer menu host id to the VideoGallery when a drawerMenuHostId is assigned from props
22665
23112
  id: drawerMenuHostIdFromProp ? undefined : drawerMenuHostId, "data-ui-id": ids.videoGallery, ref: containerRef, className: react.mergeStyles(videoGalleryOuterDivStyle, styles === null || styles === void 0 ? void 0 : styles.root, unselectable) },
@@ -25411,7 +25858,7 @@ const _Caption = (props) => {
25411
25858
  * A component for displaying a single line of RealTimeText
25412
25859
  */
25413
25860
  const RealTimeText = (props) => {
25414
- const { displayName, userId, captionText, onRenderAvatar, isTyping } = props;
25861
+ const { displayName, userId, message, onRenderAvatar, isTyping } = props;
25415
25862
  const theme = react.useTheme();
25416
25863
  const localeStrings = useLocale$1().strings.realTimeText;
25417
25864
  const strings = Object.assign(Object.assign({}, localeStrings), props.strings);
@@ -25435,7 +25882,7 @@ const RealTimeText = (props) => {
25435
25882
  React.createElement(react.Stack, { className: displayNameContainerClassName, horizontal: true },
25436
25883
  React.createElement(react.Text, { className: displayNameClassName }, displayName),
25437
25884
  isTyping && React.createElement(react.Text, { className: isTypingClassName(theme) }, strings === null || strings === void 0 ? void 0 : strings.isTypingText)),
25438
- React.createElement(react.Stack.Item, { className: captionClassName, dir: "auto" }, captionText))));
25885
+ React.createElement(react.Stack.Item, { className: captionClassName, dir: "auto" }, message))));
25439
25886
  };
25440
25887
 
25441
25888
  // Copyright (c) Microsoft Corporation.
@@ -25601,6 +26048,31 @@ const _RTTDisclosureBanner = (props) => {
25601
26048
  }, onClickLink: props.onClickLink, styles: { root: rttContainerStyles(theme) } }));
25602
26049
  };
25603
26050
 
26051
+ /* @conditional-compile-remove(rtt) */
26052
+ /**
26053
+ * Sorts the captions and real time texts based on their timestamp.
26054
+ *
26055
+ * @private
26056
+ */
26057
+ function sortCaptionsAndRealTimeTexts(captions, realTimeTexts) {
26058
+ const combinedList = [
26059
+ ...(Array.isArray(captions) ? captions.map((caption) => (Object.assign({}, caption))) : []),
26060
+ ...(realTimeTexts ? realTimeTexts.map((realTimeText) => (Object.assign({}, realTimeText))) : [])
26061
+ ];
26062
+ // Sort the combined list by comparing caption's timestamp with realTimeText's updatedTimestamp
26063
+ combinedList.sort((a, b) => {
26064
+ var _a, _b;
26065
+ const timestampA = 'captionText' in a
26066
+ ? new Date((_a = a.createdTimeStamp) !== null && _a !== void 0 ? _a : 0).getTime()
26067
+ : new Date(a.finalizedTimeStamp).getTime();
26068
+ const timestampB = 'captionText' in b
26069
+ ? new Date((_b = b.createdTimeStamp) !== null && _b !== void 0 ? _b : 0).getTime()
26070
+ : new Date(b.finalizedTimeStamp).getTime();
26071
+ return timestampA - timestampB;
26072
+ });
26073
+ return combinedList;
26074
+ }
26075
+
25604
26076
  // Copyright (c) Microsoft Corporation.
25605
26077
  // Licensed under the MIT License.
25606
26078
  const SCROLL_OFFSET_ALLOWANCE = 20;
@@ -25610,7 +26082,9 @@ const SCROLL_OFFSET_ALLOWANCE = 20;
25610
26082
  */
25611
26083
  const CaptionsBanner = (props) => {
25612
26084
  var _a, _b, _c;
25613
- const { captions, isCaptionsOn, startCaptionsInProgress, onRenderAvatar, formFactor = 'default', captionsOptions,
26085
+ const { captions,
26086
+ /* @conditional-compile-remove(rtt) */
26087
+ realTimeTexts, isCaptionsOn, startCaptionsInProgress, onRenderAvatar, formFactor = 'default', captionsOptions,
25614
26088
  /* @conditional-compile-remove(rtt) */
25615
26089
  isRealTimeTextOn,
25616
26090
  /* @conditional-compile-remove(rtt) */
@@ -25622,6 +26096,18 @@ const CaptionsBanner = (props) => {
25622
26096
  const captionsScrollDivRef = React.useRef(null);
25623
26097
  const [isAtBottomOfScroll, setIsAtBottomOfScroll] = React.useState(true);
25624
26098
  const theme = react.useTheme();
26099
+ /* @conditional-compile-remove(rtt) */
26100
+ // merge realtimetexts and captions into one array based on timestamp
26101
+ // Combine captions and realTimeTexts into one list
26102
+ const combinedList = React.useMemo(() => {
26103
+ var _a;
26104
+ return sortCaptionsAndRealTimeTexts(captions, (_a = realTimeTexts === null || realTimeTexts === void 0 ? void 0 : realTimeTexts.completedMessages) !== null && _a !== void 0 ? _a : []);
26105
+ }, [captions, realTimeTexts === null || realTimeTexts === void 0 ? void 0 : realTimeTexts.completedMessages]);
26106
+ /* @conditional-compile-remove(rtt) */
26107
+ const mergedCaptions = React.useMemo(() => {
26108
+ var _a;
26109
+ return [...combinedList, ...((_a = realTimeTexts === null || realTimeTexts === void 0 ? void 0 : realTimeTexts.currentInProgress) !== null && _a !== void 0 ? _a : []), realTimeTexts === null || realTimeTexts === void 0 ? void 0 : realTimeTexts.myInProgress];
26110
+ }, [combinedList, realTimeTexts]);
25625
26111
  const scrollToBottom = () => {
25626
26112
  if (captionsScrollDivRef.current) {
25627
26113
  captionsScrollDivRef.current.scrollTop = captionsScrollDivRef.current.scrollHeight;
@@ -25653,7 +26139,7 @@ const CaptionsBanner = (props) => {
25653
26139
  /* @conditional-compile-remove(rtt) */
25654
26140
  React.useEffect(() => {
25655
26141
  // if the latest real time text sent by myself is final, clear the text field
25656
- if (latestLocalRealTimeText && !latestLocalRealTimeText.isPartial) {
26142
+ if (latestLocalRealTimeText && !latestLocalRealTimeText.isTyping) {
25657
26143
  setTextFieldValue('');
25658
26144
  }
25659
26145
  }, [latestLocalRealTimeText]);
@@ -25673,22 +26159,29 @@ const CaptionsBanner = (props) => {
25673
26159
  bannerContent: (_b = strings.realTimeTextBannerContent) !== null && _b !== void 0 ? _b : '',
25674
26160
  bannerLinkLabel: (_c = strings.realTimeTextBannerLinkLabel) !== null && _c !== void 0 ? _c : ''
25675
26161
  };
26162
+ const captionsTrampoline = () => {
26163
+ /* @conditional-compile-remove(rtt) */
26164
+ return (React.createElement(React.Fragment, null, mergedCaptions.map((caption) => {
26165
+ if (caption) {
26166
+ if ('message' in caption) {
26167
+ return (React.createElement("li", { key: `RealTimeText - ${caption.id}`, className: captionContainerClassName, "data-is-focusable": true },
26168
+ React.createElement(RealTimeText, Object.assign({}, caption))));
26169
+ }
26170
+ return (React.createElement("li", { key: `Captions - ${caption.id}`, className: captionContainerClassName, "data-is-focusable": true },
26171
+ React.createElement(_Caption, Object.assign({}, caption, { onRenderAvatar: onRenderAvatar }))));
26172
+ }
26173
+ return React.createElement(React.Fragment, null);
26174
+ })));
26175
+ };
25676
26176
  return (React.createElement(React.Fragment, null, (startCaptionsInProgress || /* @conditional-compile-remove(rtt) */ isRealTimeTextOn) && (React.createElement(react.FocusZone, { shouldFocusOnMount: true, className: captionsContainerClassName, "data-ui-id": "captions-banner" },
25677
- /* @conditional-compile-remove(rtt) */ isRealTimeTextOn && (React.createElement(_RTTDisclosureBanner, { strings: realTimeTextDisclosureBannerStrings })),
26177
+ /* @conditional-compile-remove(rtt) */ isRealTimeTextOn && (React.createElement("div", { style: { paddingTop: '0.5rem' } },
26178
+ React.createElement(_RTTDisclosureBanner, { strings: realTimeTextDisclosureBannerStrings }))),
25678
26179
  (isCaptionsOn || /* @conditional-compile-remove(rtt) */ isRealTimeTextOn) && (React.createElement("ul", { ref: captionsScrollDivRef, className: (captionsOptions === null || captionsOptions === void 0 ? void 0 : captionsOptions.height) === 'full'
25679
26180
  ? captionsBannerFullHeightClassName(theme)
25680
- : captionsBannerClassName(formFactor), "data-ui-id": "captions-banner-inner" }, captions.map((caption) => {
25681
- /* @conditional-compile-remove(rtt) */
25682
- if (caption.isRealTimeText) {
25683
- return (React.createElement("li", { key: caption.id, className: captionContainerClassName, "data-is-focusable": true },
25684
- React.createElement(RealTimeText, Object.assign({}, caption, { isTyping: caption.isPartial, onRenderAvatar: onRenderAvatar }))));
25685
- }
25686
- return (React.createElement("li", { key: caption.id, className: captionContainerClassName, "data-is-focusable": true },
25687
- React.createElement(_Caption, Object.assign({}, caption, { onRenderAvatar: onRenderAvatar }))));
25688
- }))),
26181
+ : captionsBannerClassName(formFactor), "data-ui-id": "captions-banner-inner" }, captionsTrampoline())),
25689
26182
  /* @conditional-compile-remove(rtt) */ isRealTimeTextOn && onSendRealTimeText && (React.createElement(react.TextField, { label: strings.realTimeTextInputBoxDefaultText, value: textFieldValue, onKeyDown: handleKeyDown, onChange: (_, newValue) => {
25690
26183
  setTextFieldValue(newValue || '');
25691
- onSendRealTimeText(newValue || '');
26184
+ onSendRealTimeText(newValue || '', false);
25692
26185
  } })),
25693
26186
  !isCaptionsOn && /* @conditional-compile-remove(rtt) */ !isRealTimeTextOn && (React.createElement(react.Stack, { verticalAlign: "center", styles: (captionsOptions === null || captionsOptions === void 0 ? void 0 : captionsOptions.height) === 'full'
25694
26187
  ? loadingBannerFullHeightStyles(theme)
@@ -30375,7 +30868,7 @@ const isChatError = (e) => {
30375
30868
  return 'target' in e && e['target'] !== undefined && 'innerError' in e && e['innerError'] !== undefined;
30376
30869
  };
30377
30870
 
30378
- var call$n={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",copyInviteLinkButtonActionedLabel:"Link copied",copyInviteLinkActionedAriaLabel:"Invite link copied",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",videoEffectsPaneTitle:"Effects",videoEffectsPaneBackgroundSelectionTitle:"Background",videoEffectsPaneAriaLabel:"Video effects pane",configurationPageCameraIsLoadingLabel:"Video is loading...",configurationPageVideoEffectsButtonLabel:"Effects",unableToStartVideoEffect:"Unable to apply video effect.",blurBackgroundEffectButtonLabel:"Blur",blurBackgroundTooltip:"Blur Background",removeBackgroundEffectButtonLabel:"None",removeBackgroundTooltip:"Remove Background",cameraOffBackgroundEffectWarningText:"Your camera is off. Turn on camera to see video effect.",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leavingCallTitle:"Leaving...",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",notInvitedToRoomDetails:"You are not able to join this room because you do not have an invite.",notInvitedToRoomTitle:"Not invited to room",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",peoplePaneTitle:"People",peoplePaneMoreButtonAriaLabel:"More",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call {numberOfPeople}",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",startSpotlightMenuLabel:"Spotlight for everyone",addSpotlightMenuLabel:"Add spotlight",stopSpotlightMenuLabel:"Stop spotlighting",stopSpotlightOnSelfMenuLabel:"Exit spotlight",spotlightLimitReachedMenuTitle:"Spotlight limit reached",stopAllSpotlightMenuLabel:"Stop all spotlights",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",roomNotFoundDetails:"The room ID provided could not be found.",roomNotFoundTitle:"Room not found",roomNotValidDetails:"This room is not valid at this current time.",roomNotValidTitle:"Room not valid",inviteToRoomRemovedDetails:"Your invite to join this room was removed.",inviteToRoomRemovedTitle:"Invite to room removed",soundLabel:"Sound",noMicrophonesLabel:"No microphones found",noSpeakersLabel:"No speakers found",startCallButtonLabel:"Start call",openDialpadButtonLabel:"Dial phone number",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",moreButtonCallingLabel:"More",resumeCallButtonLabel:"Resume",resumingCallButtonLabel:"Resuming...",resumeCallButtonAriaLabel:"Resume call",resumingCallButtonAriaLabel:"Resume call",holdScreenLabel:"You're on hold",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number",outboundCallingNoticeString:"Calling...",participantJoinedNoticeString:"{displayName} joined",twoParticipantJoinedNoticeString:"{displayName1} and {displayName2} have joined",threeParticipantJoinedNoticeString:"{displayName1}, {displayName2} and {displayName3} have joined",participantLeftNoticeString:"{displayName} left",twoParticipantLeftNoticeString:"{displayName1} and {displayName2} have left",threeParticipantLeftNoticeString:"{displayName1}, {displayName2} and {displayName3} have left",unnamedParticipantString:"unnamed participant",manyUnnamedParticipantsJoined:"unnamed participant and {numOfParticipants} other participants joined",manyUnnamedParticipantsLeft:"unnamed participant and {numOfParticipants} other participants left",manyParticipantsJoined:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants joined",manyParticipantsLeft:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants left",liveCaptionsLabel:"Live captions",captionsSettingsLabel:"Caption settings",startCaptionsButtonOnLabel:"Turn on captions",startCaptionsButtonOffLabel:"Turn off captions",startCaptionsButtonTooltipOnContent:"Turn off captions",startCaptionsButtonTooltipOffContent:"Turn on captions",captionsSettingsModalTitle:"Captions Settings",captionsSettingsSpokenLanguageDropdownLabel:"Spoken language",captionsSettingsCaptionLanguageDropdownLabel:"Captions language",captionsSettingsSpokenLanguageDropdownInfoText:"Language that everyone on this call is speaking.",captionsSettingsCaptionLanguageDropdownInfoText:"Captions will appear in this language.",captionsSettingsConfirmButtonLabel:"Confirm",captionsSettingsCancelButtonLabel:"Cancel",captionsSettingsModalAriaLabel:"Captions Setting Modal",captionsSettingsCloseModalButtonAriaLabel:"Close Captions Setting",captionsBannerMoreButtonCallingLabel:"More",captionsBannerMoreButtonTooltip:"More options",realTimeTextLabel:"Real-time text (RTT)",startRealTimeTextLabel:"Turn on RTT for this call",dismissModalAriaLabel:"Local and remote picture and picture, press enter to return to call",callRejectedTitle:"The call could not be completed",callRejectedMoreDetails:"The person you are trying to reach is unavailable. Please try again later.",callTimeoutTitle:"The call could not be completed",callTimeoutDetails:"The person you are trying to reach is unavailable. Please try again later.",callTimeoutBotTitle:"The call could not be completed",callTimeoutBotDetails:"The service that you are trying to reach is unavailable. Please try again later.",dtmfDialerButtonLabel:"Dialpad",dtmfDialerButtonTooltipOn:"Show dialpad",dtmfDialerButtonTooltipOff:"Hide dialpad",dtmfDialerMoreButtonLabelOn:"Show dialpad",dtmfDialerMoreButtonLabelOff:"Hide dialpad",phoneCallMoreButtonLabel:"Phone Call",spokenLanguageStrings:{"ar-ae":"Arabic - U.A.E.","ar-sa":"Arabic - Saudi Arabia","da-dk":"Danish","de-de":"German - Germany","en-au":"English - Australia","en-ca":"English - Canada","en-gb":"English - United Kingdom","en-in":"English - India","en-nz":"English - New Zealand","en-us":"English - United States","es-es":"Spanish - Spain (Modern Sort)","es-mx":"Spanish - Mexico","fi-fi":"Finnish","fr-ca":"French - Canada","fr-fr":"French - France","hi-in":"Hindi","it-it":"Italian - Italy","ja-jp":"Japanese","ko-kr":"Korean","nb-no":"Norwegian (Bokmål)","nl-be":"Dutch - Belgium","nl-nl":"Dutch - Netherlands","pl-pl":"Polish","pt-br":"Portuguese - Brazil","ru-ru":"Russian","sv-se":"Swedish","zh-cn":"Chinese - People's Republic of China","zh-hk":"Chinese - Hong Kong SAR","cs-cz":"Czech","pt-pt":"Portuguese - Portugal","tr-tr":"Turkish","vi-vn":"Vietnamese","th-th":"Thai","he-il":"Hebrew","cy-gb":"Welsh","uk-ua":"Ukrainian","el-gr":"Greek","hu-hu":"Hungarian","ro-ro":"Romanian","sk-sk":"Slovak","zh-tw":"Chinese - Taiwan"},captionLanguageStrings:{ar:"Arabic",da:"Danish",de:"German",en:"English",es:"Spanish",fi:"Finnish","fr-ca":"French - Canada",fr:"French - France",hi:"Hindi",it:"Italian",ja:"Japanese",ko:"Korean",nb:"Norwegian (Bokmål)",nl:"Dutch",pl:"Polish",pt:"Portuguese - Brazil",ru:"Russian",sv:"Swedish","zh-Hans":"Chinese (Simplified)","zh-Hant":"Chinese (Traditional)",cs:"Czech","pt-pt":"Portuguese - Portugal",tr:"Turkish",vi:"Vietnamese",th:"Thai",he:"Hebrew",cy:"Welsh",uk:"Ukrainian",el:"Greek",hu:"Hungarian",ro:"Romanian",sk:"Slovak"},captionsBannerSpinnerText:"Starting captions...",realTimeTextInputBoxDefaultText:"Type message in real-time",realTimeTextBannerTitle:"RTT",realTimeTextBannerContent:"RTT (real-time text) is enabled for all participants for the entire duration of the meeting.",realTimeTextBannerLinkLabel:"Learn more",transferPageTransferorText:"Transferring...",transferPageTransferTargetText:"Connecting...",transferPageUnknownTransferorDisplayName:"Unknown",transferPageUnknownTransferTargetDisplayName:"Unknown",transferPageNoticeString:"You are being transferred",participantCouldNotBeReachedTitle:"Target participant is currently not available",participantCouldNotBeReachedMoreDetails:"Please contact participant when they are available",permissionToReachTargetParticipantNotAllowedTitle:"Permission to reach target participant is not allowed",permissionToReachTargetParticipantNotAllowedMoreDetails:"Please check that the target participant is in the same tenant",unableToResolveTenantTitle:"Unable to resolve tenant id for the target participant",unableToResolveTenantMoreDetails:"Please check the participant id is entered correctly",participantIdIsMalformedTitle:"Participant id is not in the correct format",participantIdIsMalformedMoreDetails:"Please check that the participant id is in the correct format",moreButtonGalleryControlLabel:"View",moreButtonGalleryPositionToggleLabel:"Move gallery to top",moreButtonGallerySpeakerLayoutLabel:"Speaker",moreButtonGalleryFloatingLocalLayoutLabel:"Dynamic",moreButtonGalleryDefaultLayoutLabel:"Gallery view",moreButtonGalleryFocusedContentLayoutLabel:"Focus on content",moreButtonLargeGalleryDefaultLayoutLabel:"Large Gallery",moreButtonTogetherModeLayoutLabel:"Together mode",capabilityChangedNotification:{turnVideoOn:{lostDueToMeetingOption:"Your camera has been disabled. You can no longer share video.",grantedDueToMeetingOption:"Your camera has been enabled. Turn it on if you'd like to share video."},unmuteMic:{lostDueToMeetingOption:"Your mic has been disabled. You can no longer unmute.",grantedDueToMeetingOption:"Your mic has been enabled. Unmute if you'd like to speak."},shareScreen:{lostDueToRoleChangeToAttendee:"Your role has been changed. Some actions, like sharing content, won't be available to you.",grantedDueToRoleChangeToPresenter:"You're a presenter. You can share content and facilitate the meeting."},hideAttendeeNames:{hideAttendeeNameAttendee:"Your name is hidden from other attendees. Organizers and presenters can see your real name.",hideAttendeeNamePresenter:"Attendee names are hidden. Only organizers and presenters can see names to protect attendee privacy."}},surveyTitle:"Help us improve",starSurveyHelperText:"How was the quality of the call?",starSurveyOneStarText:"The quality was bad.",starSurveyTwoStarText:"The quality was poor.",starSurveyThreeStarText:"The quality was good.",starSurveyFourStarText:"The quality was great.",starSurveyFiveStarText:"The quality was excellent.",surveyConfirmButtonLabel:"Send Feedback",starRatingAriaLabel:"Select {0} of {1} stars",surveySkipButtonLabel:"Skip",tagsSurveyQuestion:"What could have been better?",tagsSurveyTextFieldDefaultText:"Other, please specify",tagsSurveyHelperText:"Check any issues you experienced",endOfSurveyText:"Thank you for your feedback!",surveyIssues:{overallRating:{callCannotJoin:"I could not join call",callCannotInvite:"I could not invite others into the call",hadToRejoin:"I had to rejoin the call",callEndedUnexpectedly:"Call ended for me unexpectedly",otherIssues:"I was having other issues with the call"},audioRating:{noLocalAudio:"The other side could not hear any sound",noRemoteAudio:"I could not hear any sound",echo:"I heard echos on the call",audioNoise:"I heard noise on the call",lowVolume:"Volume was low",audioStoppedUnexpectedly:"Audio stopped unexpectedly",distortedSpeech:"Audio was distorted",audioInterruption:"Audio was interrupted",otherIssues:"I was having other audio issues in this call"},videoRating:{noVideoReceived:"I could not see any video",noVideoSent:"Others could not see me",lowQuality:"Video quality was low",freezes:"Video frozen",stoppedUnexpectedly:"Video stopped unexpectedly",darkVideoReceived:"I can only see dark screens when others turn on their camera",audioVideoOutOfSync:"Audio and Video was out of sync",otherIssues:"I was having other video issues in this call"},screenshareRating:{noContentLocal:"Other people could not see my screenshare",noContentRemote:"I could not see other people's screenshare",cannotPresent:"I could not present my screen",lowQuality:"Screen share quality was low",freezes:"Screen share frozen",stoppedUnexpectedly:"Screen share stopped unexpectedly",largeDelay:"Screen share has a large delay",otherIssues:"I was having other screen share issues in this call"}},surveyIssuesHeadingStrings:{overallRating:"Overall",audioRating:"Audio",videoRating:"Video",screenshareRating:"Presenting"},spotlightPrompt:{startSpotlightHeading:"Spotlight for everyone?",startSpotlightText:"You'll highlight this video for everyone in the meeting.",startSpotlightOnSelfText:"You'll highlight your video for everyone in the meeting.",startSpotlightConfirmButtonLabel:"Spotlight for everyone",startSpotlightCancelButtonLabel:"Cancel",stopSpotlightHeading:"Stop spotlighting this video?",stopSpotlightOnSelfHeading:"Exit spotlight?",stopAllSpotlightHeading:"Stop spotlighting all videos?",stopSpotlightText:"This video will no longer be highlighted for everyone in the meeting.",stopSpotlightOnSelfText:"Your video will no longer be highlighted for everyone in the meeting.",stopAllSpotlightText:"The videos will no longer be highlighted for everyone in the meeting.",stopSpotlightConfirmButtonLabel:"Stop spotlighting",stopSpotlightOnSelfConfirmButtonLabel:"Exit spotlight",stopSpotlightCancelButtonLabel:"Cancel",closeSpotlightPromptButtonLabel:"Close"},exitSpotlightButtonLabel:"Exit spotlight",exitSpotlightButtonTooltip:"Exit spotlight",leaveConfirmButtonLabel:"Leave",endCallConfirmButtonLabel:"End call",hangUpCancelButtonLabel:"Cancel",leaveConfirmDialogTitle:"Leave the call?",leaveConfirmDialogContent:"Are you sure you want to leave the call?",endCallConfirmDialogTitle:"End the call?",endCallConfirmDialogContent:"You'll end the call for everyone.",invalidMeetingIdentifier:"Invalid meeting ID or passcode",pinParticipantMenuLabel:"Pin for me",pinParticipantLimitReachedMenuLabel:"Pin (limit reached)",unpinParticipantMenuLabel:"Unpin",pinParticipantMenuItemAriaLabel:"Pin for me",unpinParticipantMenuItemAriaLabel:"Unpin",muteAllMenuLabel:"Mute all",muteAllDialogTitle:"Mute everyone?",muteAllDialogContent:"This will mute everyone in the meeting but you.",muteAllConfirmButtonLabel:"Mute all",muteAllCancelButtonLabel:"Cancel",joinBreakoutRoomButtonLabel:"Join breakout room",returnFromBreakoutRoomButtonLabel:"Leave room",leaveBreakoutRoomAndMeetingButtonLabel:"Leave meeting",breakoutRoomJoinedNotificationTitle:"You've joined Breakout room '{roomName}'",joinBreakoutRoomBannerTitle:"Breakout room '{roomName}' is open",joinBreakoutRoomBannerButtonLabel:"Join",returnFromBreakoutRoomBannerTitle:"Return to main meeting",returnFromBreakoutRoomBannerButtonLabel:"Rejoin",forbidAudioMenuLabel:"Disable mic",permitAudioMenuLabel:"Allow mic",forbidOthersAudioDialogTitle:"Disable mic for attendees?",forbidOthersAudioDialogContent:"Attendees won’t be able to unmute themselves. The organizer and presenters can let people unmute as needed.",forbidOthersAudioConfirmButtonLabel:"Disable mics",forbidOthersAudioCancelButtonLabel:"Cancel",permitOthersAudioDialogTitle:"Allow mic for attendees?",permitOthersAudioDialogContent:"Everyone in the meeting will be able to unmute themselves.",permitOthersAudioConfirmButtonLabel:"Allow mics",permitOthersAudioCancelButtonLabel:"Cancel",forbidOthersAudioMenuLabel:"Disable mic for attendees",permitOthersAudioMenuLabel:"Allow mic for attendees",forbidVideoMenuLabel:"Disable camera",permitVideoMenuLabel:"Allow camera",forbidOthersVideoDialogTitle:"Disable camera for attendees?",forbidOthersVideoDialogContent:"Attendees won’t be able to turn on video themselves. The organizer and presenters can let people turn on camera as needed.",forbidOthersVideoConfirmButtonLabel:"Disable cameras",forbidOthersVideoCancelButtonLabel:"Cancel",permitOthersVideoDialogTitle:"Allow camera for attendees?",permitOthersVideoDialogContent:"Everyone in the meeting will be able to turn on video themselves.",permitOthersVideoConfirmButtonLabel:"Allow cameras",permitOthersVideoCancelButtonLabel:"Cancel",forbidOthersVideoMenuLabel:"Disable camera for attendees",permitOthersVideoMenuLabel:"Allow camera for attendees"};var chat$n={chatListHeader:"In this chat",uploadAttachment:"Upload Attachment",uploadImageDataNotProvided:"Image data is not provided.",uploadImageIsTooLarge:"Image is too large. Choose one that's less than {maxImageSize} MB.",uploadImageExtensionIsNotAllowed:"Uploading .{imageExtension} image is not allowed.",uploadImageFailed:"Unable to upload image. Please try again later."};var callWithChat$n={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkButtonActionedLabel:"Link copied",copyInviteLinkActionedAriaLabel:"Invite link copied",dismissSidePaneButtonLabel:"Close",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",moreDrawerCaptionsMenuTitle:"Live captions",moreDrawerSpokenLanguageMenuTitle:"Spoken language",moreDrawerCaptionLanguageMenuTitle:"Caption language",moreDrawerGalleryOptionsMenuTitle:"Gallery options",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peopleButtonTooltipOpenAriaLabel:"People button, Show participants",peopleButtonTooltipCloseAriaLabel:"People button, 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",breakoutRoomChatPaneTitle:"Breakout Room Chat",chatContentSpinnerLabel:"Loading..."};var en_US = {call:call$n,chat:chat$n,callWithChat:callWithChat$n};
30871
+ var call$n={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",copyInviteLinkButtonActionedLabel:"Link copied",copyInviteLinkActionedAriaLabel:"Invite link copied",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",videoEffectsPaneTitle:"Effects",videoEffectsPaneBackgroundSelectionTitle:"Background",videoEffectsPaneAriaLabel:"Video effects pane",configurationPageCameraIsLoadingLabel:"Video is loading...",configurationPageVideoEffectsButtonLabel:"Effects",unableToStartVideoEffect:"Unable to apply video effect.",blurBackgroundEffectButtonLabel:"Blur",blurBackgroundTooltip:"Blur Background",removeBackgroundEffectButtonLabel:"None",removeBackgroundTooltip:"Remove Background",cameraOffBackgroundEffectWarningText:"Your camera is off. Turn on camera to see video effect.",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leavingCallTitle:"Leaving...",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",notInvitedToRoomDetails:"You are not able to join this room because you do not have an invite.",notInvitedToRoomTitle:"Not invited to room",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",peoplePaneTitle:"People",peoplePaneMoreButtonAriaLabel:"More",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call {numberOfPeople}",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",startSpotlightMenuLabel:"Spotlight for everyone",addSpotlightMenuLabel:"Add spotlight",stopSpotlightMenuLabel:"Stop spotlighting",stopSpotlightOnSelfMenuLabel:"Exit spotlight",spotlightLimitReachedMenuTitle:"Spotlight limit reached",stopAllSpotlightMenuLabel:"Stop all spotlights",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",roomNotFoundDetails:"The room ID provided could not be found.",roomNotFoundTitle:"Room not found",roomNotValidDetails:"This room is not valid at this current time.",roomNotValidTitle:"Room not valid",inviteToRoomRemovedDetails:"Your invite to join this room was removed.",inviteToRoomRemovedTitle:"Invite to room removed",soundLabel:"Sound",noMicrophonesLabel:"No microphones found",noSpeakersLabel:"No speakers found",startCallButtonLabel:"Start call",openDialpadButtonLabel:"Dial phone number",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",moreButtonCallingLabel:"More",resumeCallButtonLabel:"Resume",resumingCallButtonLabel:"Resuming...",resumeCallButtonAriaLabel:"Resume call",resumingCallButtonAriaLabel:"Resume call",holdScreenLabel:"You're on hold",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number",outboundCallingNoticeString:"Calling...",participantJoinedNoticeString:"{displayName} joined",twoParticipantJoinedNoticeString:"{displayName1} and {displayName2} have joined",threeParticipantJoinedNoticeString:"{displayName1}, {displayName2} and {displayName3} have joined",participantLeftNoticeString:"{displayName} left",twoParticipantLeftNoticeString:"{displayName1} and {displayName2} have left",threeParticipantLeftNoticeString:"{displayName1}, {displayName2} and {displayName3} have left",unnamedParticipantString:"unnamed participant",manyUnnamedParticipantsJoined:"unnamed participant and {numOfParticipants} other participants joined",manyUnnamedParticipantsLeft:"unnamed participant and {numOfParticipants} other participants left",manyParticipantsJoined:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants joined",manyParticipantsLeft:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants left",liveCaptionsLabel:"Live captions",captionsSettingsLabel:"Caption settings",startCaptionsButtonOnLabel:"Turn on captions",startCaptionsButtonOffLabel:"Turn off captions",startCaptionsButtonTooltipOnContent:"Turn off captions",startCaptionsButtonTooltipOffContent:"Turn on captions",captionsSettingsModalTitle:"Captions Settings",captionsSettingsSpokenLanguageDropdownLabel:"Spoken language",captionsSettingsCaptionLanguageDropdownLabel:"Captions language",captionsSettingsSpokenLanguageDropdownInfoText:"Language that everyone on this call is speaking.",captionsSettingsCaptionLanguageDropdownInfoText:"Captions will appear in this language.",captionsSettingsConfirmButtonLabel:"Confirm",captionsSettingsCancelButtonLabel:"Cancel",captionsSettingsModalAriaLabel:"Captions Setting Modal",captionsSettingsCloseModalButtonAriaLabel:"Close Captions Setting",captionsBannerMoreButtonCallingLabel:"More",captionsBannerMoreButtonTooltip:"More options",realTimeTextLabel:"Real-time text (RTT)",startRealTimeTextLabel:"Turn on RTT for this call",dismissModalAriaLabel:"Local and remote picture and picture, press enter to return to call",callRejectedTitle:"The call could not be completed",callRejectedMoreDetails:"The person you are trying to reach is unavailable. Please try again later.",callTimeoutTitle:"The call could not be completed",callTimeoutDetails:"The person you are trying to reach is unavailable. Please try again later.",callTimeoutBotTitle:"The call could not be completed",callTimeoutBotDetails:"The service that you are trying to reach is unavailable. Please try again later.",dtmfDialerButtonLabel:"Dialpad",dtmfDialerButtonTooltipOn:"Show dialpad",dtmfDialerButtonTooltipOff:"Hide dialpad",dtmfDialerMoreButtonLabelOn:"Show dialpad",dtmfDialerMoreButtonLabelOff:"Hide dialpad",phoneCallMoreButtonLabel:"Phone Call",spokenLanguageStrings:{"ar-ae":"Arabic - U.A.E.","ar-sa":"Arabic - Saudi Arabia","da-dk":"Danish","de-de":"German - Germany","en-au":"English - Australia","en-ca":"English - Canada","en-gb":"English - United Kingdom","en-in":"English - India","en-nz":"English - New Zealand","en-us":"English - United States","es-es":"Spanish - Spain (Modern Sort)","es-mx":"Spanish - Mexico","fi-fi":"Finnish","fr-ca":"French - Canada","fr-fr":"French - France","hi-in":"Hindi","it-it":"Italian - Italy","ja-jp":"Japanese","ko-kr":"Korean","nb-no":"Norwegian (Bokmål)","nl-be":"Dutch - Belgium","nl-nl":"Dutch - Netherlands","pl-pl":"Polish","pt-br":"Portuguese - Brazil","ru-ru":"Russian","sv-se":"Swedish","zh-cn":"Chinese - People's Republic of China","zh-hk":"Chinese - Hong Kong SAR","cs-cz":"Czech","pt-pt":"Portuguese - Portugal","tr-tr":"Turkish","vi-vn":"Vietnamese","th-th":"Thai","he-il":"Hebrew","cy-gb":"Welsh","uk-ua":"Ukrainian","el-gr":"Greek","hu-hu":"Hungarian","ro-ro":"Romanian","sk-sk":"Slovak","zh-tw":"Chinese - Taiwan"},captionLanguageStrings:{ar:"Arabic",da:"Danish",de:"German",en:"English",es:"Spanish",fi:"Finnish","fr-ca":"French - Canada",fr:"French - France",hi:"Hindi",it:"Italian",ja:"Japanese",ko:"Korean",nb:"Norwegian (Bokmål)",nl:"Dutch",pl:"Polish",pt:"Portuguese - Brazil",ru:"Russian",sv:"Swedish","zh-Hans":"Chinese (Simplified)","zh-Hant":"Chinese (Traditional)",cs:"Czech","pt-pt":"Portuguese - Portugal",tr:"Turkish",vi:"Vietnamese",th:"Thai",he:"Hebrew",cy:"Welsh",uk:"Ukrainian",el:"Greek",hu:"Hungarian",ro:"Romanian",sk:"Slovak"},captionsBannerSpinnerText:"Starting captions...",realTimeTextInputBoxDefaultText:"Type message in real-time",realTimeTextBannerTitle:"RTT",realTimeTextBannerContent:"RTT (real-time text) is enabled for all participants for the entire duration of the meeting.",realTimeTextBannerLinkLabel:"Learn more",realTimeTextModalAriaLabel:"Turn on RTT Modal",realTimeTextModalTitle:"Turn on RTT?",realTimeTextModalText:"Real-time text (RTT) will be turned on for everyone in the meeting.",realTimeTextConfirmButtonLabel:"Turn on",realTimeTextCancelButtonLabel:"Cancel",realTimeTextCloseModalButtonAriaLabel:"Close RTT Modal",transferPageTransferorText:"Transferring...",transferPageTransferTargetText:"Connecting...",transferPageUnknownTransferorDisplayName:"Unknown",transferPageUnknownTransferTargetDisplayName:"Unknown",transferPageNoticeString:"You are being transferred",participantCouldNotBeReachedTitle:"Target participant is currently not available",participantCouldNotBeReachedMoreDetails:"Please contact participant when they are available",permissionToReachTargetParticipantNotAllowedTitle:"Permission to reach target participant is not allowed",permissionToReachTargetParticipantNotAllowedMoreDetails:"Please check that the target participant is in the same tenant",unableToResolveTenantTitle:"Unable to resolve tenant id for the target participant",unableToResolveTenantMoreDetails:"Please check the participant id is entered correctly",participantIdIsMalformedTitle:"Participant id is not in the correct format",participantIdIsMalformedMoreDetails:"Please check that the participant id is in the correct format",moreButtonGalleryControlLabel:"View",moreButtonGalleryPositionToggleLabel:"Move gallery to top",moreButtonGallerySpeakerLayoutLabel:"Speaker",moreButtonGalleryFloatingLocalLayoutLabel:"Dynamic",moreButtonGalleryDefaultLayoutLabel:"Gallery view",moreButtonGalleryFocusedContentLayoutLabel:"Focus on content",moreButtonLargeGalleryDefaultLayoutLabel:"Large Gallery",moreButtonTogetherModeLayoutLabel:"Together mode",capabilityChangedNotification:{turnVideoOn:{lostDueToMeetingOption:"Your camera has been disabled. You can no longer share video.",grantedDueToMeetingOption:"Your camera has been enabled. Turn it on if you'd like to share video."},unmuteMic:{lostDueToMeetingOption:"Your mic has been disabled. You can no longer unmute.",grantedDueToMeetingOption:"Your mic has been enabled. Unmute if you'd like to speak."},shareScreen:{lostDueToRoleChangeToAttendee:"Your role has been changed. Some actions, like sharing content, won't be available to you.",grantedDueToRoleChangeToPresenter:"You're a presenter. You can share content and facilitate the meeting."},hideAttendeeNames:{hideAttendeeNameAttendee:"Your name is hidden from other attendees. Organizers and presenters can see your real name.",hideAttendeeNamePresenter:"Attendee names are hidden. Only organizers and presenters can see names to protect attendee privacy."}},surveyTitle:"Help us improve",starSurveyHelperText:"How was the quality of the call?",starSurveyOneStarText:"The quality was bad.",starSurveyTwoStarText:"The quality was poor.",starSurveyThreeStarText:"The quality was good.",starSurveyFourStarText:"The quality was great.",starSurveyFiveStarText:"The quality was excellent.",surveyConfirmButtonLabel:"Send Feedback",starRatingAriaLabel:"Select {0} of {1} stars",surveySkipButtonLabel:"Skip",tagsSurveyQuestion:"What could have been better?",tagsSurveyTextFieldDefaultText:"Other, please specify",tagsSurveyHelperText:"Check any issues you experienced",endOfSurveyText:"Thank you for your feedback!",surveyIssues:{overallRating:{callCannotJoin:"I could not join call",callCannotInvite:"I could not invite others into the call",hadToRejoin:"I had to rejoin the call",callEndedUnexpectedly:"Call ended for me unexpectedly",otherIssues:"I was having other issues with the call"},audioRating:{noLocalAudio:"The other side could not hear any sound",noRemoteAudio:"I could not hear any sound",echo:"I heard echos on the call",audioNoise:"I heard noise on the call",lowVolume:"Volume was low",audioStoppedUnexpectedly:"Audio stopped unexpectedly",distortedSpeech:"Audio was distorted",audioInterruption:"Audio was interrupted",otherIssues:"I was having other audio issues in this call"},videoRating:{noVideoReceived:"I could not see any video",noVideoSent:"Others could not see me",lowQuality:"Video quality was low",freezes:"Video frozen",stoppedUnexpectedly:"Video stopped unexpectedly",darkVideoReceived:"I can only see dark screens when others turn on their camera",audioVideoOutOfSync:"Audio and Video was out of sync",otherIssues:"I was having other video issues in this call"},screenshareRating:{noContentLocal:"Other people could not see my screenshare",noContentRemote:"I could not see other people's screenshare",cannotPresent:"I could not present my screen",lowQuality:"Screen share quality was low",freezes:"Screen share frozen",stoppedUnexpectedly:"Screen share stopped unexpectedly",largeDelay:"Screen share has a large delay",otherIssues:"I was having other screen share issues in this call"}},surveyIssuesHeadingStrings:{overallRating:"Overall",audioRating:"Audio",videoRating:"Video",screenshareRating:"Presenting"},spotlightPrompt:{startSpotlightHeading:"Spotlight for everyone?",startSpotlightText:"You'll highlight this video for everyone in the meeting.",startSpotlightOnSelfText:"You'll highlight your video for everyone in the meeting.",startSpotlightConfirmButtonLabel:"Spotlight for everyone",startSpotlightCancelButtonLabel:"Cancel",stopSpotlightHeading:"Stop spotlighting this video?",stopSpotlightOnSelfHeading:"Exit spotlight?",stopAllSpotlightHeading:"Stop spotlighting all videos?",stopSpotlightText:"This video will no longer be highlighted for everyone in the meeting.",stopSpotlightOnSelfText:"Your video will no longer be highlighted for everyone in the meeting.",stopAllSpotlightText:"The videos will no longer be highlighted for everyone in the meeting.",stopSpotlightConfirmButtonLabel:"Stop spotlighting",stopSpotlightOnSelfConfirmButtonLabel:"Exit spotlight",stopSpotlightCancelButtonLabel:"Cancel",closeSpotlightPromptButtonLabel:"Close"},exitSpotlightButtonLabel:"Exit spotlight",exitSpotlightButtonTooltip:"Exit spotlight",leaveConfirmButtonLabel:"Leave",endCallConfirmButtonLabel:"End call",hangUpCancelButtonLabel:"Cancel",leaveConfirmDialogTitle:"Leave the call?",leaveConfirmDialogContent:"Are you sure you want to leave the call?",endCallConfirmDialogTitle:"End the call?",endCallConfirmDialogContent:"You'll end the call for everyone.",invalidMeetingIdentifier:"Invalid meeting ID or passcode",pinParticipantMenuLabel:"Pin for me",pinParticipantLimitReachedMenuLabel:"Pin (limit reached)",unpinParticipantMenuLabel:"Unpin",pinParticipantMenuItemAriaLabel:"Pin for me",unpinParticipantMenuItemAriaLabel:"Unpin",muteAllMenuLabel:"Mute all",muteAllDialogTitle:"Mute everyone?",muteAllDialogContent:"This will mute everyone in the meeting but you.",muteAllConfirmButtonLabel:"Mute all",muteAllCancelButtonLabel:"Cancel",joinBreakoutRoomButtonLabel:"Join breakout room",returnFromBreakoutRoomButtonLabel:"Leave room",leaveBreakoutRoomAndMeetingButtonLabel:"Leave meeting",breakoutRoomJoinedNotificationTitle:"You've joined Breakout room '{roomName}'",joinBreakoutRoomBannerTitle:"Breakout room '{roomName}' is open",joinBreakoutRoomBannerButtonLabel:"Join",returnFromBreakoutRoomBannerTitle:"Return to main meeting",returnFromBreakoutRoomBannerButtonLabel:"Rejoin",forbidAudioMenuLabel:"Disable mic",permitAudioMenuLabel:"Allow mic",forbidOthersAudioDialogTitle:"Disable mic for attendees?",forbidOthersAudioDialogContent:"Attendees won’t be able to unmute themselves. The organizer and presenters can let people unmute as needed.",forbidOthersAudioConfirmButtonLabel:"Disable mics",forbidOthersAudioCancelButtonLabel:"Cancel",permitOthersAudioDialogTitle:"Allow mic for attendees?",permitOthersAudioDialogContent:"Everyone in the meeting will be able to unmute themselves.",permitOthersAudioConfirmButtonLabel:"Allow mics",permitOthersAudioCancelButtonLabel:"Cancel",forbidOthersAudioMenuLabel:"Disable mic for attendees",permitOthersAudioMenuLabel:"Allow mic for attendees",forbidVideoMenuLabel:"Disable camera",permitVideoMenuLabel:"Allow camera",forbidOthersVideoDialogTitle:"Disable camera for attendees?",forbidOthersVideoDialogContent:"Attendees won’t be able to turn on video themselves. The organizer and presenters can let people turn on camera as needed.",forbidOthersVideoConfirmButtonLabel:"Disable cameras",forbidOthersVideoCancelButtonLabel:"Cancel",permitOthersVideoDialogTitle:"Allow camera for attendees?",permitOthersVideoDialogContent:"Everyone in the meeting will be able to turn on video themselves.",permitOthersVideoConfirmButtonLabel:"Allow cameras",permitOthersVideoCancelButtonLabel:"Cancel",forbidOthersVideoMenuLabel:"Disable camera for attendees",permitOthersVideoMenuLabel:"Allow camera for attendees"};var chat$n={chatListHeader:"In this chat",uploadAttachment:"Upload Attachment",uploadImageDataNotProvided:"Image data is not provided.",uploadImageIsTooLarge:"Image is too large. Choose one that's less than {maxImageSize} MB.",uploadImageExtensionIsNotAllowed:"Uploading .{imageExtension} image is not allowed.",uploadImageFailed:"Unable to upload image. Please try again later."};var callWithChat$n={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkButtonActionedLabel:"Link copied",copyInviteLinkActionedAriaLabel:"Invite link copied",dismissSidePaneButtonLabel:"Close",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",moreDrawerCaptionsMenuTitle:"Live captions",moreDrawerSpokenLanguageMenuTitle:"Spoken language",moreDrawerCaptionLanguageMenuTitle:"Caption language",moreDrawerGalleryOptionsMenuTitle:"Gallery options",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peopleButtonTooltipOpenAriaLabel:"People button, Show participants",peopleButtonTooltipCloseAriaLabel:"People button, 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",breakoutRoomChatPaneTitle:"Breakout Room Chat",chatContentSpinnerLabel:"Loading..."};var en_US = {call:call$n,chat:chat$n,callWithChat:callWithChat$n};
30379
30872
 
30380
30873
  // Copyright (c) Microsoft Corporation.
30381
30874
  // Licensed under the MIT License.
@@ -31315,7 +31808,7 @@ const AttachmentDownloadErrorBar = (props) => {
31315
31808
  /**
31316
31809
  * Wrapper for RichTextSendBox component to allow us to use usePropsFor with richTextSendBox with lazy loading
31317
31810
  */
31318
- const RichTextSendBoxWrapper = React.lazy(() => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-CcLqgWsO.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper })));
31811
+ const RichTextSendBoxWrapper = React.lazy(() => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-D0KlP9qO.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper })));
31319
31812
  /**
31320
31813
  * @private
31321
31814
  * Use this function to load RoosterJS dependencies early in the lifecycle.
@@ -31323,7 +31816,7 @@ const RichTextSendBoxWrapper = React.lazy(() => Promise.resolve().then(function
31323
31816
  *
31324
31817
  /* @conditional-compile-remove(rich-text-editor-composite-support)
31325
31818
  */
31326
- const loadRichTextSendBox = () => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-CcLqgWsO.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper }));
31819
+ const loadRichTextSendBox = () => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-D0KlP9qO.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper }));
31327
31820
  /**
31328
31821
  * @private
31329
31822
  */
@@ -46596,4 +47089,4 @@ exports.useTeamsCall = useTeamsCall;
46596
47089
  exports.useTeamsCallAdapter = useTeamsCallAdapter;
46597
47090
  exports.useTeamsCallAgent = useTeamsCallAgent;
46598
47091
  exports.useTheme = useTheme;
46599
- //# sourceMappingURL=index-CuxcFFWR.js.map
47092
+ //# sourceMappingURL=index-iq0jAnxX.js.map