@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.
- package/dist/communication-react.d.ts +82 -21
- package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-BbYciITo.js → ChatMessageComponentAsRichTextEditBox-R5C_P0J9.js} +2 -2
- package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-BbYciITo.js.map → ChatMessageComponentAsRichTextEditBox-R5C_P0J9.js.map} +1 -1
- package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-CcLqgWsO.js → RichTextSendBoxWrapper-D0KlP9qO.js} +2 -2
- package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-CcLqgWsO.js.map → RichTextSendBoxWrapper-D0KlP9qO.js.map} +1 -1
- package/dist/dist-cjs/communication-react/{index-CuxcFFWR.js → index-iq0jAnxX.js} +527 -34
- package/dist/dist-cjs/communication-react/index-iq0jAnxX.js.map +1 -0
- package/dist/dist-cjs/communication-react/index.js +1 -1
- package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
- package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
- package/dist/dist-esm/communication-react/src/index.d.ts +1 -0
- package/dist/dist-esm/communication-react/src/index.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/CaptionsBanner.d.ts +44 -8
- package/dist/dist-esm/react-components/src/components/CaptionsBanner.js +42 -13
- package/dist/dist-esm/react-components/src/components/CaptionsBanner.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/MeetingReactionOverlay.d.ts +2 -0
- package/dist/dist-esm/react-components/src/components/MeetingReactionOverlay.js +12 -1
- package/dist/dist-esm/react-components/src/components/MeetingReactionOverlay.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/RealTimeText.d.ts +3 -3
- package/dist/dist-esm/react-components/src/components/RealTimeText.js +2 -2
- package/dist/dist-esm/react-components/src/components/RealTimeText.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/RealTimeTextModal.d.ts +5 -2
- package/dist/dist-esm/react-components/src/components/RealTimeTextModal.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/StartRealTimeTextButton.d.ts +3 -3
- package/dist/dist-esm/react-components/src/components/StartRealTimeTextButton.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/TogetherModeOverlay.d.ts +15 -0
- package/dist/dist-esm/react-components/src/components/TogetherModeOverlay.js +123 -0
- package/dist/dist-esm/react-components/src/components/TogetherModeOverlay.js.map +1 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery/Layout.d.ts +5 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery/Layout.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery/TogetherModeLayout.d.ts +9 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery/TogetherModeLayout.js +85 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery/TogetherModeLayout.js.map +1 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery/TogetherModeStream.d.ts +24 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery/TogetherModeStream.js +53 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery/TogetherModeStream.js.map +1 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery.d.ts +11 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery.js +61 -3
- package/dist/dist-esm/react-components/src/components/VideoGallery.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/styles/TogetherMode.styles.d.ts +89 -0
- package/dist/dist-esm/react-components/src/components/styles/TogetherMode.styles.js +173 -0
- package/dist/dist-esm/react-components/src/components/styles/TogetherMode.styles.js.map +1 -0
- package/dist/dist-esm/react-components/src/components/utils/sortCaptionsAndRealTimeTexts.d.ts +8 -0
- package/dist/dist-esm/react-components/src/components/utils/sortCaptionsAndRealTimeTexts.js +25 -0
- package/dist/dist-esm/react-components/src/components/utils/sortCaptionsAndRealTimeTexts.js.map +1 -0
- package/dist/dist-esm/react-components/src/types/ReactionTypes.d.ts +1 -1
- package/dist/dist-esm/react-components/src/types/ReactionTypes.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts +12 -0
- package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/localization/locales/en-US/strings.json +6 -0
- package/package.json +1 -1
- 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-
|
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-
|
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-
|
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
|
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$
|
21605
|
+
overflowGalleryTrampoline$4(overflowGallery, props.overflowGalleryPosition)));
|
21322
21606
|
};
|
21323
|
-
const overflowGalleryTrampoline$
|
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$
|
22460
|
+
overflowGalleryTrampoline$3(overflowGallery, props.overflowGalleryPosition))));
|
22177
22461
|
};
|
22178
|
-
const overflowGalleryTrampoline$
|
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$
|
22555
|
+
overflowGalleryTrampoline$2(overflowGallery, props.overflowGalleryPosition))));
|
22272
22556
|
};
|
22273
|
-
const overflowGalleryTrampoline$
|
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
|
-
}, [
|
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,
|
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" },
|
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,
|
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.
|
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(
|
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" },
|
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-
|
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-
|
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-
|
47092
|
+
//# sourceMappingURL=index-iq0jAnxX.js.map
|