@azure/communication-react 1.18.0-alpha-202406110013 → 1.18.0-alpha-202406120015

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/communication-react.d.ts +43 -17
  2. package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-D2h2ZRSt.js → ChatMessageComponentAsRichTextEditBox-DseIP_bT.js} +2 -2
  3. package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-D2h2ZRSt.js.map → ChatMessageComponentAsRichTextEditBox-DseIP_bT.js.map} +1 -1
  4. package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-B4juIBoJ.js → RichTextSendBoxWrapper-C_4OMmY6.js} +2 -2
  5. package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-B4juIBoJ.js.map → RichTextSendBoxWrapper-C_4OMmY6.js.map} +1 -1
  6. package/dist/dist-cjs/communication-react/{index-CJjvV64L.js → index-Dlqkspdp.js} +144 -50
  7. package/dist/dist-cjs/communication-react/index-Dlqkspdp.js.map +1 -0
  8. package/dist/dist-cjs/communication-react/index.js +1 -1
  9. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  10. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  11. package/dist/dist-esm/chat-component-bindings/src/messageThreadSelector.js +5 -4
  12. package/dist/dist-esm/chat-component-bindings/src/messageThreadSelector.js.map +1 -1
  13. package/dist/dist-esm/chat-stateful-client/src/ChatClientState.d.ts +1 -0
  14. package/dist/dist-esm/chat-stateful-client/src/ChatClientState.js.map +1 -1
  15. package/dist/dist-esm/chat-stateful-client/src/EventSubscriber.js +3 -1
  16. package/dist/dist-esm/chat-stateful-client/src/EventSubscriber.js.map +1 -1
  17. package/dist/dist-esm/chat-stateful-client/src/convertChatMessage.js +1 -7
  18. package/dist/dist-esm/chat-stateful-client/src/convertChatMessage.js.map +1 -1
  19. package/dist/dist-esm/chat-stateful-client/src/types/ChatMessageWithStatus.d.ts +0 -1
  20. package/dist/dist-esm/chat-stateful-client/src/types/ChatMessageWithStatus.js.map +1 -1
  21. package/dist/dist-esm/react-components/src/components/ParticipantList.d.ts +2 -0
  22. package/dist/dist-esm/react-components/src/components/ParticipantList.js +5 -4
  23. package/dist/dist-esm/react-components/src/components/ParticipantList.js.map +1 -1
  24. package/dist/dist-esm/react-components/src/components/styles/ChatMessageComponent.styles.js +2 -1
  25. package/dist/dist-esm/react-components/src/components/styles/ChatMessageComponent.styles.js.map +1 -1
  26. package/dist/dist-esm/react-components/src/theming/icons.d.ts +1 -0
  27. package/dist/dist-esm/react-components/src/theming/icons.js +2 -1
  28. package/dist/dist-esm/react-components/src/theming/icons.js.map +1 -1
  29. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts +23 -0
  30. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.js.map +1 -1
  31. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.d.ts +7 -0
  32. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js +28 -1
  33. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js.map +1 -1
  34. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/usePeoplePane.d.ts +4 -0
  35. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/usePeoplePane.js +52 -5
  36. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/usePeoplePane.js.map +1 -1
  37. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.js +1 -1
  38. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.js.map +1 -1
  39. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.d.ts +4 -3
  40. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js +4 -5
  41. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js.map +1 -1
  42. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatComposite.d.ts +4 -3
  43. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatComposite.js.map +1 -1
  44. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js +26 -5
  45. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js.map +1 -1
  46. package/dist/dist-esm/react-composites/src/composites/common/ParticipantContainer.d.ts +1 -0
  47. package/dist/dist-esm/react-composites/src/composites/common/ParticipantContainer.js +2 -2
  48. package/dist/dist-esm/react-composites/src/composites/common/ParticipantContainer.js.map +1 -1
  49. package/dist/dist-esm/react-composites/src/composites/common/PeoplePaneContent.d.ts +1 -0
  50. package/dist/dist-esm/react-composites/src/composites/common/PeoplePaneContent.js +1 -1
  51. package/dist/dist-esm/react-composites/src/composites/common/PeoplePaneContent.js.map +1 -1
  52. package/dist/dist-esm/react-composites/src/composites/common/SendBoxPicker.js +3 -3
  53. package/dist/dist-esm/react-composites/src/composites/common/SendBoxPicker.js.map +1 -1
  54. package/dist/dist-esm/react-composites/src/composites/common/icons.d.ts +8 -12
  55. package/dist/dist-esm/react-composites/src/composites/localization/locales/en-US/strings.json +6 -1
  56. package/package.json +2 -2
  57. package/dist/dist-cjs/communication-react/index-CJjvV64L.js.map +0 -1
@@ -175,7 +175,7 @@ function getDefaultExportFromCjs (x) {
175
175
  // Copyright (c) Microsoft Corporation.
176
176
  // Licensed under the MIT License.
177
177
  // GENERATED FILE. DO NOT EDIT MANUALLY.
178
- var telemetryVersion = '1.18.0-alpha-202406110013';
178
+ var telemetryVersion = '1.18.0-alpha-202406120015';
179
179
 
180
180
 
181
181
  var telemetryVersion$1 = /*@__PURE__*/getDefaultExportFromCjs(telemetryVersion);
@@ -6911,6 +6911,7 @@ const DEFAULT_COMPONENT_ICONS = {
6911
6911
  /* @conditional-compile-remove(call-readiness) */
6912
6912
  BrowserPermissionDeniedError: React.createElement(BrowserPermissionDenied20Filled, null),
6913
6913
  VideoTilePinned: React.createElement(reactIcons.Pin16Filled, null),
6914
+ ParticipantItemPinned: React.createElement(reactIcons.Pin20Filled, null),
6914
6915
  VideoTileMoreOptions: React.createElement(reactIcons.MoreHorizontal20Filled, null),
6915
6916
  VideoTileScaleFit: React.createElement(reactIcons.ScaleFit20Regular, null),
6916
6917
  VideoTileScaleFill: React.createElement(reactIcons.ScaleFill20Regular, null),
@@ -12152,7 +12153,8 @@ const chatMessageMenuStyle = react.mergeStyles({
12152
12153
  minWidth: '8.5rem',
12153
12154
  height: 'max-content',
12154
12155
  cursor: 'pointer',
12155
- overflow: 'hidden'
12156
+ overflow: 'hidden',
12157
+ '-webkit-tap-highlight-color': 'transparent' // Disable tap highlight on Android
12156
12158
  });
12157
12159
  /**
12158
12160
  * @private
@@ -13660,7 +13662,7 @@ class _ErrorBoundary extends React.Component {
13660
13662
  // Copyright (c) Microsoft Corporation.
13661
13663
  // Licensed under the MIT License.
13662
13664
  /* @conditional-compile-remove(rich-text-editor) */
13663
- const ChatMessageComponentAsRichTextEditBox = React.lazy(() => Promise.resolve().then(function () { return require('./ChatMessageComponentAsRichTextEditBox-D2h2ZRSt.js'); }));
13665
+ const ChatMessageComponentAsRichTextEditBox = React.lazy(() => Promise.resolve().then(function () { return require('./ChatMessageComponentAsRichTextEditBox-DseIP_bT.js'); }));
13664
13666
  /**
13665
13667
  * @private
13666
13668
  * Use this function to load RoosterJS dependencies early in the lifecycle.
@@ -13668,7 +13670,7 @@ const ChatMessageComponentAsRichTextEditBox = React.lazy(() => Promise.resolve()
13668
13670
  *
13669
13671
  * @conditional-compile-remove(rich-text-editor)
13670
13672
  */
13671
- const loadChatMessageComponentAsRichTextEditBox = () => Promise.resolve().then(function () { return require('./ChatMessageComponentAsRichTextEditBox-D2h2ZRSt.js'); });
13673
+ const loadChatMessageComponentAsRichTextEditBox = () => Promise.resolve().then(function () { return require('./ChatMessageComponentAsRichTextEditBox-DseIP_bT.js'); });
13672
13674
  /**
13673
13675
  * @private
13674
13676
  */
@@ -15186,7 +15188,7 @@ const iconStyles$2 = react.mergeStyles({
15186
15188
 
15187
15189
  // Copyright (c) Microsoft Corporation.
15188
15190
  // Licensed under the MIT License.
15189
- const onRenderParticipantDefault = (participant, strings, myUserId, onRenderAvatar, createParticipantMenuItems, styles, onParticipantClick, showParticipantOverflowTooltip, participantAriaLabelledBy, theme) => {
15191
+ const onRenderParticipantDefault = (participant, strings, myUserId, onRenderAvatar, createParticipantMenuItems, styles, onParticipantClick, showParticipantOverflowTooltip, participantAriaLabelledBy, theme, pinnedParticipants) => {
15190
15192
  const callingParticipant = participant;
15191
15193
  let presence = undefined;
15192
15194
  if (callingParticipant) {
@@ -15220,7 +15222,8 @@ const onRenderParticipantDefault = (participant, strings, myUserId, onRenderAvat
15220
15222
  React.createElement(RaisedHandIcon, null)))),
15221
15223
  callingParticipant.isScreenSharing && (React.createElement(react.Icon, { iconName: "ParticipantItemScreenShareStart", className: iconStyles$2, ariaLabel: strings.sharingIconLabel })),
15222
15224
  callingParticipant.isMuted && (React.createElement(react.Icon, { iconName: "ParticipantItemMicOff", className: iconStyles$2, ariaLabel: strings.mutedIconLabel })),
15223
- callingParticipant.spotlight && React.createElement(react.Icon, { iconName: "ParticipantItemSpotlighted", className: iconStyles$2 })));
15225
+ callingParticipant.spotlight && React.createElement(react.Icon, { iconName: "ParticipantItemSpotlighted", className: iconStyles$2 }),
15226
+ pinnedParticipants && (pinnedParticipants === null || pinnedParticipants === void 0 ? void 0 : pinnedParticipants.includes(participant.userId)) && (React.createElement(react.Icon, { iconName: "ParticipantItemPinned", className: iconStyles$2 }))));
15224
15227
  }
15225
15228
  : () => null;
15226
15229
  const onRenderAvatarWithRaiseHand = (callingParticipant === null || callingParticipant === void 0 ? void 0 : callingParticipant.raisedHand) && onRenderAvatar
@@ -15282,7 +15285,7 @@ const ParticipantList$k = (props) => {
15282
15285
  /* @conditional-compile-remove(total-participant-count) */
15283
15286
  totalParticipantCount,
15284
15287
  /* @conditional-compile-remove(total-participant-count) */
15285
- strings, participantAriaLabelledBy } = props;
15288
+ strings, participantAriaLabelledBy, pinnedParticipants } = props;
15286
15289
  const theme = useTheme();
15287
15290
  const ids = useIdentifiers();
15288
15291
  const participantItemStrings = useLocale$1().strings.participantItem;
@@ -15329,7 +15332,7 @@ const ParticipantList$k = (props) => {
15329
15332
  return (React.createElement(react.Stack, { "data-ui-id": ids.participantList, className: react.mergeStyles(participantListStyle$1, (_e = props.styles) === null || _e === void 0 ? void 0 : _e.root), role: 'menu' },
15330
15333
  displayedParticipants.map((participant) => onRenderParticipant
15331
15334
  ? onRenderParticipant(participant)
15332
- : onRenderParticipantDefault(participant, participantItemStrings, myUserId, onRenderAvatar, createParticipantMenuItems, participantItemStyles, props.onParticipantClick, showParticipantOverflowTooltip, participantAriaLabelledBy, theme)),
15335
+ : onRenderParticipantDefault(participant, participantItemStrings, myUserId, onRenderAvatar, createParticipantMenuItems, participantItemStyles, props.onParticipantClick, showParticipantOverflowTooltip, participantAriaLabelledBy, theme, pinnedParticipants)),
15333
15336
  /* @conditional-compile-remove(total-participant-count) */ overflowParticipantCountString &&
15334
15337
  totalParticipantCount &&
15335
15338
  totalParticipantCount > displayedParticipants.length && (React.createElement(react.Text, { style: { fontWeight: 400, margin: '0.5rem' } }, _formatString(overflowParticipantCountString, {
@@ -19633,7 +19636,7 @@ const DEFAULT_REMOTE_VIDEO_TILE_MENU_OPTIONS = {
19633
19636
  * @private
19634
19637
  * Maximum number of remote video tiles that can be pinned
19635
19638
  */
19636
- const MAX_PINNED_REMOTE_VIDEO_TILES = 4;
19639
+ const MAX_PINNED_REMOTE_VIDEO_TILES$1 = 4;
19637
19640
  /**
19638
19641
  * VideoGallery represents a layout of video tiles for a specific call.
19639
19642
  * It displays a {@link VideoTile} for the local user as well as for each remote participant who has joined the call.
@@ -19728,7 +19731,7 @@ const VideoGallery = (props) => {
19728
19731
  videoTilesOptions
19729
19732
  ]);
19730
19733
  const onPinParticipant = React.useCallback((userId) => {
19731
- if (pinnedParticipants.length >= MAX_PINNED_REMOTE_VIDEO_TILES) {
19734
+ if (pinnedParticipants.length >= MAX_PINNED_REMOTE_VIDEO_TILES$1) {
19732
19735
  return;
19733
19736
  }
19734
19737
  if (!pinnedParticipantsState.includes(userId)) {
@@ -19780,7 +19783,7 @@ const VideoGallery = (props) => {
19780
19783
  ? remoteVideoTileMenu.kind === 'drawer'
19781
19784
  ? 'drawer'
19782
19785
  : 'contextual'
19783
- : undefined, drawerMenuHostId: drawerMenuHostId, onPinParticipant: onPinParticipant, onUnpinParticipant: onUnpinParticipant, onUpdateScalingMode: onUpdateScalingMode, isPinned: isPinned, disablePinMenuItem: pinnedParticipants.length >= MAX_PINNED_REMOTE_VIDEO_TILES, toggleAnnouncerString: toggleAnnouncerString, spotlightedParticipantUserIds: spotlightedParticipants, isSpotlighted: isSpotlighted, onStartSpotlight: onStartRemoteSpotlight, onStopSpotlight: onStopRemoteSpotlight, maxParticipantsToSpotlight: maxParticipantsToSpotlight, reactionResources: reactionResources,
19786
+ : undefined, drawerMenuHostId: drawerMenuHostId, onPinParticipant: onPinParticipant, onUnpinParticipant: onUnpinParticipant, onUpdateScalingMode: onUpdateScalingMode, isPinned: isPinned, disablePinMenuItem: pinnedParticipants.length >= MAX_PINNED_REMOTE_VIDEO_TILES$1, toggleAnnouncerString: toggleAnnouncerString, spotlightedParticipantUserIds: spotlightedParticipants, isSpotlighted: isSpotlighted, onStartSpotlight: onStartRemoteSpotlight, onStopSpotlight: onStopRemoteSpotlight, maxParticipantsToSpotlight: maxParticipantsToSpotlight, reactionResources: reactionResources,
19784
19787
  /* @conditional-compile-remove(soft-mute) */
19785
19788
  onMuteParticipant: onMuteParticipant }));
19786
19789
  }, [
@@ -24743,9 +24746,10 @@ const updateMessagesWithAttached = (chatMessagesWithStatus) => {
24743
24746
  // Copyright (c) Microsoft Corporation.
24744
24747
  // Licensed under the MIT License.
24745
24748
  const memoizedAllConvertChatMessage = memoizeFnAll((_key, chatMessage, userId, isSeen, isLargeGroup) => {
24749
+ var _a;
24746
24750
  const messageType = chatMessage.type.toLowerCase();
24747
24751
  /* @conditional-compile-remove(data-loss-prevention) */
24748
- if (chatMessage.policyViolation) {
24752
+ if (((_a = chatMessage.policyViolation) === null || _a === void 0 ? void 0 : _a.result) === 'contentBlocked') {
24749
24753
  return convertToUiBlockedMessage(chatMessage, userId, isSeen, isLargeGroup);
24750
24754
  }
24751
24755
  if (messageType === ACSKnownMessageType.text ||
@@ -25000,7 +25004,7 @@ const sanitizedMessageContentType = (type) => {
25000
25004
  : 'unknown';
25001
25005
  };
25002
25006
  const isMessageValidToRender = (message) => {
25003
- var _a, _b, _c, _d;
25007
+ var _a, _b, _c, _d, _e;
25004
25008
  if (message.deletedOn) {
25005
25009
  return false;
25006
25010
  }
@@ -25008,10 +25012,10 @@ const isMessageValidToRender = (message) => {
25008
25012
  return true;
25009
25013
  }
25010
25014
  /* @conditional-compile-remove(data-loss-prevention) */
25011
- if (message.policyViolation) {
25015
+ if (((_d = message.policyViolation) === null || _d === void 0 ? void 0 : _d.result) === 'contentBlocked') {
25012
25016
  return true;
25013
25017
  }
25014
- return !!(message.content && ((_d = message.content) === null || _d === void 0 ? void 0 : _d.message) !== '');
25018
+ return !!(message.content && ((_e = message.content) === null || _e === void 0 ? void 0 : _e.message) !== '');
25015
25019
  };
25016
25020
  /**
25017
25021
  * Selector for {@link MessageThread} component.
@@ -25935,13 +25939,7 @@ const toChatError = (target, error) => {
25935
25939
  * @private
25936
25940
  */
25937
25941
  const convertChatMessage = (message, status = 'delivered', clientMessageId) => {
25938
- var _a, _b, _c;
25939
- return Object.assign(Object.assign({}, message), { clientMessageId: clientMessageId, status,
25940
- /* @conditional-compile-remove(data-loss-prevention) */
25941
- policyViolation: !!(((_a = message.sender) === null || _a === void 0 ? void 0 : _a.kind) === 'microsoftTeamsUser' &&
25942
- !!message.editedOn &&
25943
- ((_b = message.content) === null || _b === void 0 ? void 0 : _b.message) === '' &&
25944
- ((_c = message.content.attachments) === null || _c === void 0 ? void 0 : _c.length) === 0) });
25942
+ return Object.assign(Object.assign({}, message), { clientMessageId: clientMessageId, status });
25945
25943
  };
25946
25944
 
25947
25945
  // Copyright (c) Microsoft Corporation.
@@ -25984,7 +25982,9 @@ class EventSubscriber {
25984
25982
  sequenceId: '', // Note: there is a bug in chatMessageReceived event that it is missing sequenceId
25985
25983
  createdOn: new Date(event.createdOn),
25986
25984
  editedOn: 'editedOn' in event ? event.editedOn : undefined,
25987
- metadata: event.metadata
25985
+ metadata: event.metadata,
25986
+ /* @conditional-compile-remove(data-loss-prevention) */
25987
+ policyViolation: 'policyViolation' in event ? event.policyViolation : undefined
25988
25988
  });
25989
25989
  };
25990
25990
  // convert event type to chatMessage type, only possible type is 'html' and 'text' in chat event
@@ -27101,7 +27101,7 @@ const isChatError = (e) => {
27101
27101
  return 'target' in e && e['target'] !== undefined && 'innerError' in e && e['innerError'] !== undefined;
27102
27102
  };
27103
27103
 
27104
- var call$k={cameraLabel:"Camera",noCamerasLabel:"No cameras found",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",chatButtonLabel:"Chat",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkButtonActionedLabel:"Link copied",copyInviteLinkActionedAriaLabel:"Invite link copied",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",videoEffectsPaneTitle:"Effects",videoEffectsPaneBackgroundSelectionTitle:"Background",configurationPageVideoEffectsButtonLabel:"Effects",unableToStartVideoEffect:"Unable to apply video effect.",blurBackgroundEffectButtonLabel:"Blur",blurBackgroundTooltip:"Blur Background",removeBackgroundEffectButtonLabel:"None",removeBackgroundTooltip:"Remove Background",cameraOffBackgroundEffectWarningText:"Your camera is off. Turn on camera to see video effect.",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leavingCallTitle:"Leaving...",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",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 langugage.",captionsSettingsConfirmButtonLabel:"Confirm",captionsSettingsCancelButtonLabel:"Cancel",captionsSettingsModalAriaLabel:"Captions Setting Modal",captionsSettingsCloseModalButtonAriaLabel:"Close Captions Setting",captionsBannerMoreButtonCallingLabel:"More",captionsBannerMoreButtonTooltip:"More options",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...",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",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"},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"};var chat$k={chatListHeader:"In this chat",uploadAttachment:"Upload Attachment"};var callWithChat$k={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",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"};var en_US = {call:call$k,chat:chat$k,callWithChat:callWithChat$k};
27104
+ var call$k={cameraLabel:"Camera",noCamerasLabel:"No cameras found",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",chatButtonLabel:"Chat",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkButtonActionedLabel:"Link copied",copyInviteLinkActionedAriaLabel:"Invite link copied",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",videoEffectsPaneTitle:"Effects",videoEffectsPaneBackgroundSelectionTitle:"Background",configurationPageVideoEffectsButtonLabel:"Effects",unableToStartVideoEffect:"Unable to apply video effect.",blurBackgroundEffectButtonLabel:"Blur",blurBackgroundTooltip:"Blur Background",removeBackgroundEffectButtonLabel:"None",removeBackgroundTooltip:"Remove Background",cameraOffBackgroundEffectWarningText:"Your camera is off. Turn on camera to see video effect.",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leavingCallTitle:"Leaving...",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",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 langugage.",captionsSettingsConfirmButtonLabel:"Confirm",captionsSettingsCancelButtonLabel:"Cancel",captionsSettingsModalAriaLabel:"Captions Setting Modal",captionsSettingsCloseModalButtonAriaLabel:"Close Captions Setting",captionsBannerMoreButtonCallingLabel:"More",captionsBannerMoreButtonTooltip:"More options",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...",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",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"},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",unpinParticipantMenuItemAriaLabel:"Unpin"};var chat$k={chatListHeader:"In this chat",uploadAttachment:"Upload Attachment"};var callWithChat$k={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",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"};var en_US = {call:call$k,chat:chat$k,callWithChat:callWithChat$k};
27105
27105
 
27106
27106
  // Copyright (c) Microsoft Corporation.
27107
27107
  // Licensed under the MIT License.
@@ -27970,7 +27970,7 @@ const ParticipantContainer = (props) => {
27970
27970
  * @private
27971
27971
  */
27972
27972
  const ParticipantListWithHeading = (props) => {
27973
- const { onFetchAvatarPersonaData, onFetchParticipantMenuItems, title, participantListProps, headingMoreButtonAriaLabel, onClickHeadingMoreButton, headingMoreButtonMenuProps } = props;
27973
+ const { onFetchAvatarPersonaData, onFetchParticipantMenuItems, title, participantListProps, headingMoreButtonAriaLabel, onClickHeadingMoreButton, headingMoreButtonMenuProps, pinnedParticipants } = props;
27974
27974
  const subheadingUniqueId = reactHooks.useId();
27975
27975
  const theme = react.useTheme();
27976
27976
  /* @conditional-compile-remove(total-participant-count) */
@@ -27990,7 +27990,7 @@ const ParticipantListWithHeading = (props) => {
27990
27990
  ((headingMoreButtonMenuProps === null || headingMoreButtonMenuProps === void 0 ? void 0 : headingMoreButtonMenuProps.items) && headingMoreButtonMenuProps.items.length > 0)) && (React.createElement(react.Stack.Item, null,
27991
27991
  React.createElement(react.DefaultButton, { ariaLabel: headingMoreButtonAriaLabel, styles: headingMoreButtonStyles(theme), iconProps: { iconName: 'PeoplePaneMoreButton' }, onClick: onClickHeadingMoreButton ? () => onClickHeadingMoreButton() : undefined, menuProps: props.onClickHeadingMoreButton ? undefined : props.headingMoreButtonMenuProps, onRenderMenuIcon: () => null })))),
27992
27992
  React.createElement(react.FocusZone, { className: participantListContainerStyle, shouldFocusOnMount: true },
27993
- React.createElement(ParticipantList$k, Object.assign({}, participantListProps, { styles: props.isMobile ? participantListMobileStyle : participantListStyle, onRenderAvatar: (userId, options) => (React.createElement(React.Fragment, null,
27993
+ React.createElement(ParticipantList$k, Object.assign({}, participantListProps, { pinnedParticipants: pinnedParticipants, styles: props.isMobile ? participantListMobileStyle : participantListStyle, onRenderAvatar: (userId, options) => (React.createElement(React.Fragment, null,
27994
27994
  React.createElement(AvatarPersona, Object.assign({ "data-ui-id": "chat-composite-participant-custom-avatar", userId: userId }, options, { hidePersonaDetails: !!(options === null || options === void 0 ? void 0 : options.text), dataProvider: onFetchAvatarPersonaData, allowActiveBorder: true })),
27995
27995
  (options === null || options === void 0 ? void 0 : options.text) && (React.createElement(react.Text, { nowrap: true, styles: displayNameStyles$1 }, options === null || options === void 0 ? void 0 : options.text)))), onFetchParticipantMenuItems: onFetchParticipantMenuItems, showParticipantOverflowTooltip: !props.isMobile, participantAriaLabelledBy: subheadingUniqueId })))));
27996
27996
  };
@@ -28039,7 +28039,7 @@ const AttachmentDownloadErrorBar = (props) => {
28039
28039
  /**
28040
28040
  * Wrapper for RichTextSendBox component to allow us to use usePropsFor with richTextSendBox with lazy loading
28041
28041
  */
28042
- const RichTextSendBoxWrapper = React.lazy(() => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-B4juIBoJ.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper })));
28042
+ const RichTextSendBoxWrapper = React.lazy(() => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-C_4OMmY6.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper })));
28043
28043
  /**
28044
28044
  * @private
28045
28045
  * Use this function to load RoosterJS dependencies early in the lifecycle.
@@ -28047,21 +28047,21 @@ const RichTextSendBoxWrapper = React.lazy(() => Promise.resolve().then(function
28047
28047
  *
28048
28048
  /* @conditional-compile-remove(rich-text-editor-composite-support)
28049
28049
  */
28050
- const loadRichTextSendBox = () => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-B4juIBoJ.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper }));
28050
+ const loadRichTextSendBox = () => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-C_4OMmY6.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper }));
28051
28051
  /**
28052
28052
  * @private
28053
28053
  */
28054
28054
  const SendBoxPicker = (props) => {
28055
28055
  const {
28056
- /* @conditional-compile-remove(rich-text-editor-composite-support) @conditional-compile-remove(rich-text-editor) */
28056
+ /* @conditional-compile-remove(rich-text-editor-composite-support) */
28057
28057
  richTextEditorOptions } = props;
28058
28058
  const sendBoxProps = usePropsFor$2(SendBox);
28059
- /* @conditional-compile-remove(rich-text-editor-composite-support) @conditional-compile-remove(rich-text-editor) */
28059
+ /* @conditional-compile-remove(rich-text-editor-composite-support) */
28060
28060
  const isRichTextEditorEnabled = React.useMemo(() => {
28061
28061
  return richTextEditorOptions !== undefined;
28062
28062
  }, [richTextEditorOptions]);
28063
28063
  const sendBox = React.useMemo(() => React.createElement(SendBox, Object.assign({}, sendBoxProps, props)), [props, sendBoxProps]);
28064
- /* @conditional-compile-remove(rich-text-editor-composite-support) @conditional-compile-remove(rich-text-editor) */
28064
+ /* @conditional-compile-remove(rich-text-editor-composite-support) */
28065
28065
  if (isRichTextEditorEnabled) {
28066
28066
  return (React.createElement(_ErrorBoundary, { fallback: sendBox },
28067
28067
  React.createElement(React.Suspense, { fallback: sendBox },
@@ -28111,12 +28111,12 @@ const ChatScreen = (props) => {
28111
28111
  /* @conditional-compile-remove(rich-text-editor-composite-support) */
28112
28112
  React.useEffect(() => {
28113
28113
  // if rich text editor is enabled, the rich text editor component should be loaded early for good UX
28114
- if ((options === null || options === void 0 ? void 0 : options.richTextEditorOptions) !== undefined) {
28114
+ if (options === null || options === void 0 ? void 0 : options.richTextEditor) {
28115
28115
  // this line is needed to load the Rooster JS dependencies early in the lifecycle
28116
28116
  // when the rich text editor is enabled
28117
28117
  loadRichTextSendBox();
28118
28118
  }
28119
- }, [options === null || options === void 0 ? void 0 : options.richTextEditorOptions]);
28119
+ }, [options === null || options === void 0 ? void 0 : options.richTextEditor]);
28120
28120
  const messageThreadProps = usePropsFor$2(MessageThread);
28121
28121
  const typingIndicatorProps = usePropsFor$2(TypingIndicator);
28122
28122
  const headerProps = useAdaptedSelector$1(getHeaderProps);
@@ -28335,6 +28335,27 @@ const ChatScreen = (props) => {
28335
28335
  handleUploadAction({ type: AttachmentUploadActionType.Remove, id });
28336
28336
  (_b = (_a = attachmentOptions === null || attachmentOptions === void 0 ? void 0 : attachmentOptions.uploadOptions) === null || _a === void 0 ? void 0 : _a.handleAttachmentRemoval) === null || _b === void 0 ? void 0 : _b.call(_a, id);
28337
28337
  }, [attachmentOptions === null || attachmentOptions === void 0 ? void 0 : attachmentOptions.uploadOptions]);
28338
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
28339
+ const removeImageTags = React.useCallback((event) => {
28340
+ event.content.querySelectorAll('img').forEach((image) => {
28341
+ // If the image is the only child of its parent, remove all the parents of this img element.
28342
+ let parentNode = image.parentElement;
28343
+ let currentNode = image;
28344
+ while ((parentNode === null || parentNode === void 0 ? void 0 : parentNode.childNodes.length) === 1) {
28345
+ currentNode = parentNode;
28346
+ parentNode = parentNode.parentElement;
28347
+ }
28348
+ currentNode === null || currentNode === void 0 ? void 0 : currentNode.remove();
28349
+ });
28350
+ }, []);
28351
+ /* @conditional-compile-remove(rich-text-editor-composite-support) */
28352
+ const richTextEditorOptions = React.useMemo(() => {
28353
+ return (options === null || options === void 0 ? void 0 : options.richTextEditor)
28354
+ ? {
28355
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */ onPaste: removeImageTags
28356
+ }
28357
+ : undefined;
28358
+ }, [options === null || options === void 0 ? void 0 : options.richTextEditor, removeImageTags]);
28338
28359
  return (React.createElement(react.Stack, { className: chatContainer, grow: true },
28339
28360
  (options === null || options === void 0 ? void 0 : options.topic) !== false && React.createElement(ChatHeader, Object.assign({}, headerProps)),
28340
28361
  React.createElement(react.Stack, { className: chatArea, tokens: participantListContainerPadding, horizontal: true, grow: true },
@@ -28347,8 +28368,8 @@ const ChatScreen = (props) => {
28347
28368
  React.createElement(MessageThread, Object.assign({}, messageThreadProps, { onRenderAvatar: onRenderAvatarCallback, onRenderMessage: onRenderMessage,
28348
28369
  /* @conditional-compile-remove(file-sharing-acs) */
28349
28370
  onRenderAttachmentDownloads: onRenderAttachmentDownloads, inlineImageOptions: inlineImageOptions, numberOfChatMessagesToReload: defaultNumberOfChatMessagesToReload, styles: messageThreadStyles,
28350
- /* @conditional-compile-remove(rich-text-editor-composite-support) @conditional-compile-remove(rich-text-editor) */
28351
- richTextEditorOptions: options === null || options === void 0 ? void 0 : options.richTextEditorOptions })),
28371
+ /* @conditional-compile-remove(rich-text-editor-composite-support) */
28372
+ richTextEditorOptions: richTextEditorOptions })),
28352
28373
  React.createElement(react.Stack, { className: react.mergeStyles(sendboxContainerStyles) },
28353
28374
  React.createElement("div", { className: react.mergeStyles(typingIndicatorContainerStyles) }, onRenderTypingIndicator ? (onRenderTypingIndicator(typingIndicatorProps.typingUsers)) : (React.createElement(TypingIndicator, Object.assign({}, typingIndicatorProps, { styles: typingIndicatorStyles })))),
28354
28375
  React.createElement(react.Stack, { horizontal: formFactor === 'mobile' },
@@ -28359,7 +28380,7 @@ const ChatScreen = (props) => {
28359
28380
  React.createElement(react.Stack, { grow: true },
28360
28381
  React.createElement(SendBoxPicker, { styles: sendBoxStyles, autoFocus: options === null || options === void 0 ? void 0 : options.autoFocus,
28361
28382
  /* @conditional-compile-remove(rich-text-editor-composite-support) */
28362
- richTextEditorOptions: options === null || options === void 0 ? void 0 : options.richTextEditorOptions,
28383
+ richTextEditorOptions: richTextEditorOptions,
28363
28384
  /* @conditional-compile-remove(file-sharing-acs) */
28364
28385
  attachments: attachments,
28365
28386
  /* @conditional-compile-remove(file-sharing-acs) */
@@ -32698,7 +32719,7 @@ const PeoplePaneContent = (props) => {
32698
32719
  // We want the drawer menu items to appear when participants in ParticipantList are clicked
32699
32720
  onParticipantClick: props.mobileView ? setDrawerMenuItemsForParticipant : undefined });
32700
32721
  }, [participantListDefaultProps, props.mobileView, setDrawerMenuItemsForParticipant, removeParticipantFromCall]);
32701
- const participantList = (React.createElement(ParticipantListWithHeading, { isMobile: props.mobileView, participantListProps: participantListProps, onFetchAvatarPersonaData: props.onFetchAvatarPersonaData, onFetchParticipantMenuItems: props.mobileView ? undefined : onFetchParticipantMenuItems, title: strings.peoplePaneSubTitle, headingMoreButtonAriaLabel: localeStrings.strings.call.peoplePaneMoreButtonAriaLabel, onClickHeadingMoreButton: props.mobileView ? setDrawerMenuItemsForParticipantListHeadingMoreButton : undefined, headingMoreButtonMenuProps: props.participantListHeadingMoreButtonProps }));
32722
+ const participantList = (React.createElement(ParticipantListWithHeading, { isMobile: props.mobileView, participantListProps: participantListProps, onFetchAvatarPersonaData: props.onFetchAvatarPersonaData, onFetchParticipantMenuItems: props.mobileView ? undefined : onFetchParticipantMenuItems, title: strings.peoplePaneSubTitle, headingMoreButtonAriaLabel: localeStrings.strings.call.peoplePaneMoreButtonAriaLabel, onClickHeadingMoreButton: props.mobileView ? setDrawerMenuItemsForParticipantListHeadingMoreButton : undefined, headingMoreButtonMenuProps: props.participantListHeadingMoreButtonProps, pinnedParticipants: props.pinnedParticipants }));
32702
32723
  if (props.mobileView) {
32703
32724
  return (React.createElement(react.Stack, { verticalFill: true, styles: peoplePaneContainerStyle, tokens: peoplePaneContainerTokens, "data-ui-id": "people-pane-content" },
32704
32725
  React.createElement(react.Stack.Item, { grow: true, styles: participantListContainerStyles }, participantList),
@@ -32760,7 +32781,7 @@ const PEOPLE_SIDE_PANE_ID = 'people';
32760
32781
  const usePeoplePane = (props) => {
32761
32782
  const { updateSidePaneRenderer, inviteLink, onFetchAvatarPersonaData, onFetchParticipantMenuItems, setDrawerMenuItems, mobileView, peopleButtonRef, setParticipantActioned, spotlightedParticipantUserIds, onStartLocalSpotlight, onStopLocalSpotlight, onStartRemoteSpotlight, onStopRemoteSpotlight, onStopAllSpotlight, maxParticipantsToSpotlight,
32762
32783
  /* @conditional-compile-remove(soft-mute) */
32763
- onMuteParticipant } = props;
32784
+ onMuteParticipant, pinnedParticipants, onPinParticipant, onUnpinParticipant, disablePinMenuItem } = props;
32764
32785
  const closePane = React.useCallback(() => {
32765
32786
  var _a;
32766
32787
  updateSidePaneRenderer(undefined);
@@ -32789,9 +32810,11 @@ const usePeoplePane = (props) => {
32789
32810
  const onRenderHeader = React.useCallback(() => (React.createElement(SidePaneHeader, { onClose: closePane, headingText: localeStrings.peoplePaneTitle, dismissSidePaneButtonAriaLabel: localeStrings.dismissSidePaneButtonLabel, mobileView: mobileView !== null && mobileView !== void 0 ? mobileView : false })), [mobileView, closePane, localeStrings]);
32790
32811
  const onFetchParticipantMenuItemsForCallComposite = React.useCallback((participantId, myUserId, defaultMenuItems) => {
32791
32812
  var _a;
32813
+ let isPinned = pinnedParticipants === null || pinnedParticipants === void 0 ? void 0 : pinnedParticipants.includes(participantId);
32792
32814
  const _defaultMenuItems = defaultMenuItems !== null && defaultMenuItems !== void 0 ? defaultMenuItems : [];
32793
- const isSpotlighted = spotlightedParticipantUserIds === null || spotlightedParticipantUserIds === void 0 ? void 0 : spotlightedParticipantUserIds.find((p) => p === participantId);
32815
+ const isSpotlighted = spotlightedParticipantUserIds === null || spotlightedParticipantUserIds === void 0 ? void 0 : spotlightedParticipantUserIds.includes(participantId);
32794
32816
  const isMe = myUserId === participantId;
32817
+ isPinned = isSpotlighted ? false : isPinned;
32795
32818
  if (isSpotlighted) {
32796
32819
  const stopSpotlightMenuText = isMe
32797
32820
  ? localeStrings.stopSpotlightOnSelfMenuLabel
@@ -32865,6 +32888,41 @@ const usePeoplePane = (props) => {
32865
32888
  disabled: isMuted
32866
32889
  });
32867
32890
  }
32891
+ if (!isMe && isPinned !== undefined) {
32892
+ if (isPinned && onUnpinParticipant && (localeStrings === null || localeStrings === void 0 ? void 0 : localeStrings.unpinParticipantMenuLabel)) {
32893
+ _defaultMenuItems.push({
32894
+ key: 'unpin',
32895
+ text: localeStrings === null || localeStrings === void 0 ? void 0 : localeStrings.unpinParticipantMenuLabel,
32896
+ iconProps: {
32897
+ iconName: 'UnpinParticipant',
32898
+ styles: { root: { lineHeight: '1rem', textAlign: 'center' } }
32899
+ },
32900
+ onClick: () => {
32901
+ onUnpinParticipant === null || onUnpinParticipant === void 0 ? void 0 : onUnpinParticipant(participantId);
32902
+ },
32903
+ 'data-ui-id': 'participant-item-unpin-participant-button',
32904
+ ariaLabel: localeStrings.unpinParticipantMenuItemAriaLabel
32905
+ });
32906
+ }
32907
+ if (!isPinned && onPinParticipant && (localeStrings === null || localeStrings === void 0 ? void 0 : localeStrings.pinParticipantMenuLabel)) {
32908
+ _defaultMenuItems.push({
32909
+ key: 'pin',
32910
+ text: disablePinMenuItem
32911
+ ? localeStrings.pinParticipantLimitReachedMenuLabel
32912
+ : localeStrings.pinParticipantMenuLabel,
32913
+ iconProps: {
32914
+ iconName: 'PinParticipant',
32915
+ styles: { root: { lineHeight: '1rem', textAlign: 'center' } }
32916
+ },
32917
+ onClick: () => {
32918
+ onPinParticipant(participantId);
32919
+ },
32920
+ 'data-ui-id': 'participant-item-pin-participant-button',
32921
+ disabled: disablePinMenuItem || isSpotlighted,
32922
+ ariaLabel: localeStrings.pinParticipantMenuItemAriaLabel
32923
+ });
32924
+ }
32925
+ }
32868
32926
  return onFetchParticipantMenuItems
32869
32927
  ? onFetchParticipantMenuItems(participantId, myUserId, _defaultMenuItems)
32870
32928
  : _defaultMenuItems;
@@ -32884,10 +32942,19 @@ const usePeoplePane = (props) => {
32884
32942
  localeStrings.addSpotlightMenuLabel,
32885
32943
  localeStrings.startSpotlightMenuLabel,
32886
32944
  localeStrings.spotlightLimitReachedMenuTitle,
32887
- maxParticipantsToSpotlight
32945
+ maxParticipantsToSpotlight,
32946
+ pinnedParticipants,
32947
+ onPinParticipant,
32948
+ onUnpinParticipant,
32949
+ disablePinMenuItem,
32950
+ localeStrings.pinParticipantMenuLabel,
32951
+ localeStrings.pinParticipantLimitReachedMenuLabel,
32952
+ localeStrings.unpinParticipantMenuLabel,
32953
+ localeStrings.unpinParticipantMenuItemAriaLabel,
32954
+ localeStrings.pinParticipantMenuItemAriaLabel
32888
32955
  ]);
32889
32956
  const onRenderContent = React.useCallback(() => {
32890
- return (React.createElement(PeoplePaneContent, { inviteLink: inviteLink, onFetchAvatarPersonaData: onFetchAvatarPersonaData, onFetchParticipantMenuItems: onFetchParticipantMenuItemsForCallComposite, setDrawerMenuItems: setDrawerMenuItems, mobileView: mobileView, setParticipantActioned: setParticipantActioned, participantListHeadingMoreButtonProps: sidePaneHeaderMenuProps }));
32957
+ return (React.createElement(PeoplePaneContent, { inviteLink: inviteLink, onFetchAvatarPersonaData: onFetchAvatarPersonaData, onFetchParticipantMenuItems: onFetchParticipantMenuItemsForCallComposite, setDrawerMenuItems: setDrawerMenuItems, mobileView: mobileView, setParticipantActioned: setParticipantActioned, participantListHeadingMoreButtonProps: sidePaneHeaderMenuProps, pinnedParticipants: pinnedParticipants }));
32891
32958
  }, [
32892
32959
  inviteLink,
32893
32960
  mobileView,
@@ -32895,7 +32962,8 @@ const usePeoplePane = (props) => {
32895
32962
  onFetchParticipantMenuItemsForCallComposite,
32896
32963
  setDrawerMenuItems,
32897
32964
  setParticipantActioned,
32898
- sidePaneHeaderMenuProps
32965
+ sidePaneHeaderMenuProps,
32966
+ pinnedParticipants
32899
32967
  ]);
32900
32968
  const sidePaneRenderer = React.useMemo(() => ({
32901
32969
  headerRenderer: onRenderHeader,
@@ -33638,6 +33706,11 @@ const getStopAllSpotlightCallbackWithPromptCallback = (stopAllSpotlight, setIsPr
33638
33706
 
33639
33707
  // Copyright (c) Microsoft Corporation.
33640
33708
  // Licensed under the MIT License.
33709
+ /**
33710
+ * @private
33711
+ * Maximum number of remote video tiles that can be pinned
33712
+ */
33713
+ const MAX_PINNED_REMOTE_VIDEO_TILES = 4;
33641
33714
  /**
33642
33715
  * @private
33643
33716
  */
@@ -33695,6 +33768,28 @@ const CallArrangement = (props) => {
33695
33768
  const { onStartLocalSpotlight, onStopLocalSpotlight, onStartRemoteSpotlight, onStopRemoteSpotlight,
33696
33769
  /* @conditional-compile-remove(soft-mute) */
33697
33770
  onMuteParticipant, spotlightedParticipants, maxParticipantsToSpotlight, localParticipant } = videoGalleryProps;
33771
+ const { pinnedParticipants, setPinnedParticipants } = props;
33772
+ const onPinParticipant = React.useCallback((userId) => {
33773
+ if (pinnedParticipants && pinnedParticipants.length >= MAX_PINNED_REMOTE_VIDEO_TILES) {
33774
+ return;
33775
+ }
33776
+ if (pinnedParticipants && setPinnedParticipants && !pinnedParticipants.includes(userId)) {
33777
+ setPinnedParticipants(pinnedParticipants.concat(userId));
33778
+ }
33779
+ }, [pinnedParticipants, setPinnedParticipants]);
33780
+ const onUnpinParticipant = React.useCallback((userId) => {
33781
+ if (pinnedParticipants && setPinnedParticipants) {
33782
+ setPinnedParticipants(pinnedParticipants.filter((participantId) => participantId !== userId));
33783
+ }
33784
+ }, [setPinnedParticipants, pinnedParticipants]);
33785
+ const pinPeoplePaneProps = React.useMemo(() => {
33786
+ return {
33787
+ pinnedParticipants: pinnedParticipants,
33788
+ onPinParticipant: onPinParticipant,
33789
+ onUnpinParticipant: onUnpinParticipant,
33790
+ disablePinMenuItem: pinnedParticipants && pinnedParticipants.length >= MAX_PINNED_REMOTE_VIDEO_TILES
33791
+ };
33792
+ }, [onPinParticipant, onUnpinParticipant, pinnedParticipants]);
33698
33793
  const { onStartLocalSpotlightWithPrompt, onStopLocalSpotlightWithPrompt } = useLocalSpotlightCallbacksWithPrompt(onStartLocalSpotlight, onStopLocalSpotlight, setIsPromptOpen, setPromptProps);
33699
33794
  const { onStartRemoteSpotlightWithPrompt, onStopRemoteSpotlightWithPrompt } = useRemoteSpotlightCallbacksWithPrompt(onStartRemoteSpotlight, onStopRemoteSpotlight, setIsPromptOpen, setPromptProps);
33700
33795
  const canRemoveSpotlight = (_d = (_c = adapter.getState().call) === null || _c === void 0 ? void 0 : _c.capabilitiesFeature) === null || _d === void 0 ? void 0 : _d.capabilities.removeParticipantsSpotlight.isPresent;
@@ -33731,7 +33826,7 @@ const CallArrangement = (props) => {
33731
33826
  stopAllSpotlightWithPrompt,
33732
33827
  spotlightedParticipants
33733
33828
  ]);
33734
- const { isPeoplePaneOpen, openPeoplePane, closePeoplePane } = usePeoplePane(Object.assign(Object.assign(Object.assign({}, peoplePaneProps), spotlightPeoplePaneProps), onMuteParticipantPeoplePaneProps));
33829
+ const { isPeoplePaneOpen, openPeoplePane, closePeoplePane } = usePeoplePane(Object.assign(Object.assign(Object.assign(Object.assign({}, peoplePaneProps), spotlightPeoplePaneProps), onMuteParticipantPeoplePaneProps), pinPeoplePaneProps));
33735
33830
  const togglePeoplePane = React.useCallback(() => {
33736
33831
  if (isPeoplePaneOpen) {
33737
33832
  closePeoplePane();
@@ -34335,7 +34430,7 @@ const CallPage = (props) => {
34335
34430
  onFetchParticipantMenuItems: onFetchParticipantMenuItems,
34336
34431
  options: callControlOptions,
34337
34432
  increaseFlyoutItemSize: mobileView
34338
- }, onFetchAvatarPersonaData: onFetchAvatarPersonaData, mobileView: mobileView, modalLayerHostId: props.modalLayerHostId, onRenderGalleryContent: () => _isInCall(callStatus) ? (isNetworkHealthy(networkReconnectTileProps.networkReconnectValue) ? (onRenderGalleryContentTrampoline()) : (React.createElement(NetworkReconnectTile, Object.assign({}, networkReconnectTileProps)))) : (React.createElement(React.Fragment, null)), updateSidePaneRenderer: props.updateSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader, onCloseChatPane: onCloseChatPane, dataUiId: 'call-page', latestErrors: props.latestErrors, onDismissError: props.onDismissError, onUserSetOverflowGalleryPositionChange: onSetUserSetOverflowGalleryPosition, onUserSetGalleryLayoutChange: onUserSetGalleryLayoutChange, userSetGalleryLayout: galleryLayout, capabilitiesChangedNotificationBarProps: props.capabilitiesChangedNotificationBarProps, onSetDialpadPage: () => setDtmfDialerPresent(!dtmfDialerPresent), dtmfDialerPresent: dtmfDialerPresent, setIsPromptOpen: setIsPromptOpen, setPromptProps: setPromptProps, hideSpotlightButtons: (_a = options === null || options === void 0 ? void 0 : options.spotlight) === null || _a === void 0 ? void 0 : _a.hideSpotlightButtons }),
34433
+ }, onFetchAvatarPersonaData: onFetchAvatarPersonaData, mobileView: mobileView, modalLayerHostId: props.modalLayerHostId, onRenderGalleryContent: () => _isInCall(callStatus) ? (isNetworkHealthy(networkReconnectTileProps.networkReconnectValue) ? (onRenderGalleryContentTrampoline()) : (React.createElement(NetworkReconnectTile, Object.assign({}, networkReconnectTileProps)))) : (React.createElement(React.Fragment, null)), updateSidePaneRenderer: props.updateSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader, onCloseChatPane: onCloseChatPane, dataUiId: 'call-page', latestErrors: props.latestErrors, onDismissError: props.onDismissError, onUserSetOverflowGalleryPositionChange: onSetUserSetOverflowGalleryPosition, onUserSetGalleryLayoutChange: onUserSetGalleryLayoutChange, userSetGalleryLayout: galleryLayout, capabilitiesChangedNotificationBarProps: props.capabilitiesChangedNotificationBarProps, onSetDialpadPage: () => setDtmfDialerPresent(!dtmfDialerPresent), dtmfDialerPresent: dtmfDialerPresent, setIsPromptOpen: setIsPromptOpen, setPromptProps: setPromptProps, hideSpotlightButtons: (_a = options === null || options === void 0 ? void 0 : options.spotlight) === null || _a === void 0 ? void 0 : _a.hideSpotlightButtons, pinnedParticipants: pinnedParticipants, setPinnedParticipants: setPinnedParticipants }),
34339
34434
  React.createElement(Prompt, Object.assign({ isOpen: isPromptOpen, onDismiss: () => setIsPromptOpen(false) }, promptProps))));
34340
34435
  };
34341
34436
  /**
@@ -39052,14 +39147,13 @@ const CallWithChatScreen = (props) => {
39052
39147
  participantPane: false,
39053
39148
  /* @conditional-compile-remove(file-sharing-acs) */
39054
39149
  attachmentOptions: props.attachmentOptions,
39055
- /* @conditional-compile-remove(rich-text-editor-composite-support) @conditional-compile-remove(rich-text-editor) */
39056
- richTextEditorOptions: props.richTextEditorOptions
39150
+ /* @conditional-compile-remove(rich-text-editor-composite-support) */
39151
+ richTextEditor: props.richTextEditor
39057
39152
  }, onFetchAvatarPersonaData: props.onFetchAvatarPersonaData })), [
39058
39153
  chatAdapter,
39059
- /* @conditional-compile-remove(file-sharing-acs) */
39060
- props.attachmentOptions,
39154
+ /* @conditional-compile-remove(file-sharing-acs) */ props.attachmentOptions,
39061
39155
  props.onFetchAvatarPersonaData,
39062
- /* @conditional-compile-remove(rich-text-editor-composite-support) */ props.richTextEditorOptions,
39156
+ /* @conditional-compile-remove(rich-text-editor-composite-support) */ props.richTextEditor,
39063
39157
  theme
39064
39158
  ]);
39065
39159
  const sidePaneHeaderRenderer = React.useCallback(() => {
@@ -40729,4 +40823,4 @@ exports.useTeamsCall = useTeamsCall;
40729
40823
  exports.useTeamsCallAdapter = useTeamsCallAdapter;
40730
40824
  exports.useTeamsCallAgent = useTeamsCallAgent;
40731
40825
  exports.useTheme = useTheme;
40732
- //# sourceMappingURL=index-CJjvV64L.js.map
40826
+ //# sourceMappingURL=index-Dlqkspdp.js.map