@azure/communication-react 1.9.0-alpha-202310270012 → 1.9.0-alpha-202310310013

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 (55) hide show
  1. package/dist/communication-react.d.ts +9 -3
  2. package/dist/dist-cjs/communication-react/index.js +134 -66
  3. package/dist/dist-cjs/communication-react/index.js.map +1 -1
  4. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  5. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  6. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponent.d.ts +1 -1
  7. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponent.js.map +1 -1
  8. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsMessageBubble.d.ts +1 -1
  9. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsMessageBubble.js.map +1 -1
  10. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageContent.d.ts +1 -1
  11. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageContent.js +10 -7
  12. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageContent.js.map +1 -1
  13. package/dist/dist-esm/react-components/src/components/FileDownloadCards.d.ts +2 -0
  14. package/dist/dist-esm/react-components/src/components/FileDownloadCards.js.map +1 -1
  15. package/dist/dist-esm/react-components/src/components/MessageThread.d.ts +1 -1
  16. package/dist/dist-esm/react-components/src/components/MessageThread.js +16 -7
  17. package/dist/dist-esm/react-components/src/components/MessageThread.js.map +1 -1
  18. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.d.ts +1 -0
  19. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js +2 -2
  20. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js.map +1 -1
  21. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts +4 -0
  22. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.js.map +1 -1
  23. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.d.ts +1 -0
  24. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js +9 -1
  25. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js.map +1 -1
  26. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.d.ts +1 -0
  27. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.js +2 -2
  28. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.js.map +1 -1
  29. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js +21 -22
  30. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js.map +1 -1
  31. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.d.ts +1 -1
  32. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.js +7 -4
  33. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.js.map +1 -1
  34. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js +1 -1
  35. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js.map +1 -1
  36. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.d.ts +1 -1
  37. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js.map +1 -1
  38. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.d.ts +1 -1
  39. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.js.map +1 -1
  40. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedChatAdapter.d.ts +1 -1
  41. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedChatAdapter.js.map +1 -1
  42. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js +9 -6
  43. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js.map +1 -1
  44. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.d.ts +1 -1
  45. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.js +7 -4
  46. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.js.map +1 -1
  47. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/ChatAdapter.d.ts +1 -1
  48. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/ChatAdapter.js.map +1 -1
  49. package/dist/dist-esm/react-composites/src/composites/common/ModalLocalAndRemotePIP.d.ts +11 -0
  50. package/dist/dist-esm/react-composites/src/composites/common/ModalLocalAndRemotePIP.js +39 -9
  51. package/dist/dist-esm/react-composites/src/composites/common/ModalLocalAndRemotePIP.js.map +1 -1
  52. package/dist/dist-esm/react-composites/src/composites/common/styles/ModalLocalAndRemotePIP.styles.js +14 -2
  53. package/dist/dist-esm/react-composites/src/composites/common/styles/ModalLocalAndRemotePIP.styles.js.map +1 -1
  54. package/dist/dist-esm/react-composites/src/composites/localization/locales/en-US/strings.json +1 -0
  55. package/package.json +1 -1
@@ -242,9 +242,11 @@ export declare type AreParamEqual<A extends (props: any) => JSX.Element | undefi
242
242
  export declare type AreTypeEqual<A, B> = A extends B ? (B extends A ? true : false) : false;
243
243
 
244
244
  /**
245
+ * Meta Data of the attachment object returned by the ACS SDK.
245
246
  * @beta
246
247
  */
247
248
  export declare interface AttachmentDownloadResult {
249
+ attachmentId: string;
248
250
  blobUrl: string;
249
251
  }
250
252
 
@@ -2132,6 +2134,10 @@ export declare interface CallCompositeStrings {
2132
2134
  * All strings for capability changed notification
2133
2135
  */
2134
2136
  capabilityChangedNotification?: CapabilityChangedNotificationStrings;
2137
+ /**
2138
+ * String for the dismiss control on the local and remote PIP on mobile
2139
+ */
2140
+ dismissModalAriaLabel?: string;
2135
2141
  }
2136
2142
 
2137
2143
  /**
@@ -2761,7 +2767,7 @@ export declare interface CallWithChatAdapterManagement {
2761
2767
  /** @beta */
2762
2768
  updateFileUploadMetadata: (id: string, metadata: FileMetadata) => void;
2763
2769
  downloadAttachments: (options: {
2764
- attachmentUrls: string[];
2770
+ attachmentUrls: Record<string, string>;
2765
2771
  }) => Promise<AttachmentDownloadResult[]>;
2766
2772
  /**
2767
2773
  * Puts the Call in a Localhold.
@@ -3904,7 +3910,7 @@ export declare interface ChatAdapterThreadManagement {
3904
3910
  */
3905
3911
  loadPreviousChatMessages(messagesToLoad: number): Promise<boolean>;
3906
3912
  downloadAttachments: (options: {
3907
- attachmentUrls: string[];
3913
+ attachmentUrls: Record<string, string>;
3908
3914
  }) => Promise<AttachmentDownloadResult[]>;
3909
3915
  }
3910
3916
 
@@ -7555,7 +7561,7 @@ export declare type MessageThreadProps = {
7555
7561
  * @param attachment - FileMetadata object we want to render
7556
7562
  * @beta
7557
7563
  */
7558
- onFetchAttachments?: (attachment: FileMetadata) => Promise<AttachmentDownloadResult[]>;
7564
+ onFetchAttachments?: (attachments: FileMetadata[]) => Promise<AttachmentDownloadResult[]>;
7559
7565
  /**
7560
7566
  * Optional callback to edit a message.
7561
7567
  *
@@ -177,7 +177,7 @@ const _isValidIdentifier = (identifier) => {
177
177
  // Copyright (c) Microsoft Corporation.
178
178
  // Licensed under the MIT License.
179
179
  // GENERATED FILE. DO NOT EDIT MANUALLY.
180
- var telemetryVersion = '1.9.0-alpha-202310270012';
180
+ var telemetryVersion = '1.9.0-alpha-202310310013';
181
181
 
182
182
  // Copyright (c) Microsoft Corporation.
183
183
  /**
@@ -9523,14 +9523,17 @@ const MessageContentAsRichTextHTML = (props) => {
9523
9523
  /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
9524
9524
  React.useEffect(() => {
9525
9525
  var _a;
9526
- (_a = props.message.attachedFilesMetadata) === null || _a === void 0 ? void 0 : _a.map((fileMetadata) => {
9527
- if (props.onFetchAttachment &&
9528
- props.attachmentsMap &&
9529
- fileMetadata.attachmentType === 'inlineImage' &&
9530
- props.attachmentsMap[fileMetadata.id] === undefined) {
9531
- props.onFetchAttachment(fileMetadata);
9532
- }
9526
+ const attachments = (_a = props.message.attachedFilesMetadata) === null || _a === void 0 ? void 0 : _a.filter((fileMetadata) => {
9527
+ return fileMetadata.attachmentType === 'inlineImage';
9533
9528
  });
9529
+ if (props.attachmentsMap && attachments) {
9530
+ attachments.forEach((fileMetadata) => {
9531
+ if (props.onFetchAttachment && props.attachmentsMap && props.attachmentsMap[fileMetadata.id] === undefined) {
9532
+ props.onFetchAttachment([fileMetadata], props.message.messageId);
9533
+ return;
9534
+ }
9535
+ });
9536
+ }
9534
9537
  }, [props]);
9535
9538
  return (React__default["default"].createElement(MessageContentWithLiveAria, { message: props.message, liveMessage: generateLiveMessage(props), ariaLabel: messageContentAriaText(props), content: processHtmlToReact(props) }));
9536
9539
  };
@@ -10840,14 +10843,18 @@ const MessageThreadWrapper = (props) => {
10840
10843
  /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
10841
10844
  const [inlineAttachments, setInlineAttachments] = React.useState({});
10842
10845
  /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
10843
- const onFetchInlineAttachment = React.useCallback((attachment) => __awaiter$v(void 0, void 0, void 0, function* () {
10844
- if (!onFetchAttachments || attachment.attachmentType !== 'inlineImage' || attachment.id in inlineAttachments) {
10846
+ const onFetchInlineAttachment = React.useCallback((attachments, messageId) => __awaiter$v(void 0, void 0, void 0, function* () {
10847
+ if (!onFetchAttachments) {
10845
10848
  return;
10846
10849
  }
10847
- setInlineAttachments((prev) => (Object.assign(Object.assign({}, prev), { [attachment.id]: '' })));
10848
- const attachmentDownloadResult = yield onFetchAttachments(attachment);
10849
- if (attachmentDownloadResult[0]) {
10850
- setInlineAttachments((prev) => (Object.assign(Object.assign({}, prev), { [attachment.id]: attachmentDownloadResult[0].blobUrl })));
10850
+ const attachmentDownloadResult = yield onFetchAttachments(attachments);
10851
+ const listOfAttachments = inlineAttachments[messageId];
10852
+ for (const result of attachmentDownloadResult) {
10853
+ const { attachmentId, blobUrl } = result;
10854
+ listOfAttachments[attachmentId] = blobUrl;
10855
+ }
10856
+ if (Object.keys(listOfAttachments).length > 0) {
10857
+ setInlineAttachments((prev) => (Object.assign(Object.assign({}, prev), { [messageId]: listOfAttachments })));
10851
10858
  }
10852
10859
  }), [inlineAttachments, onFetchAttachments]);
10853
10860
  const isAllChatMessagesLoadedRef = React.useRef(false);
@@ -11058,6 +11065,11 @@ const MessageThreadWrapper = (props) => {
11058
11065
  const strings = React.useMemo(() => (Object.assign(Object.assign({}, localeStrings), props.strings)), [localeStrings, props.strings]);
11059
11066
  // To rerender the defaultChatMessageRenderer if app running across days(every new day chat time stamp need to be regenerated)
11060
11067
  const defaultChatMessageRenderer = React.useCallback((messageProps) => {
11068
+ var _a;
11069
+ /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
11070
+ if (inlineAttachments[messageProps.message.messageId] === undefined) {
11071
+ setInlineAttachments((prev) => (Object.assign(Object.assign({}, prev), { [messageProps.message.messageId]: {} })));
11072
+ }
11061
11073
  if (messageProps.message.messageType === 'chat' ||
11062
11074
  /* @conditional-compile-remove(data-loss-prevention) */ messageProps.message.messageType === 'blocked') {
11063
11075
  return (React__default["default"].createElement(ChatMessageComponent, Object.assign({}, messageProps, { onRenderFileDownloads: onRenderFileDownloads,
@@ -11070,7 +11082,7 @@ const MessageThreadWrapper = (props) => {
11070
11082
  /* @conditional-compile-remove(image-gallery) */
11071
11083
  onInlineImageClicked: onInlineImageClicked,
11072
11084
  /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
11073
- attachmentsMap: inlineAttachments,
11085
+ attachmentsMap: (_a = inlineAttachments[messageProps.message.messageId]) !== null && _a !== void 0 ? _a : {},
11074
11086
  /* @conditional-compile-remove(mention) */
11075
11087
  mentionOptions: mentionOptions })));
11076
11088
  }
@@ -21054,7 +21066,7 @@ const CallCompositeIcon = (props) => (React__default["default"].createElement(re
21054
21066
  */
21055
21067
  const CallWithChatCompositeIcon = (props) => (React__default["default"].createElement(react.FontIcon, Object.assign({}, props)));
21056
21068
 
21057
- 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",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",deniedPermissionToRoomDetails:"You do not have permission to join this room.",deniedPermissionToRoomTitle:"Permission denied to room",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",peoplePaneTitle:"People",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",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",roomNotFoundDetails:"Room ID provided is not valid.",roomNotFoundTitle:"Room not found",soundLabel:"Sound",noMicrophonesLabel:"No microphones found",noSpeakersLabel:"No speakers found",startCallButtonLabel:"Start call",openDialpadButtonLabel:"Dial phone number",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",moreButtonCallingLabel:"More",resumeCallButtonLabel:"Resume",resumingCallButtonLabel:"Resuming...",resumeCallButtonAriaLabel:"Resume call",resumingCallButtonAriaLabel:"Resume call",holdScreenLabel:"You're on hold",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number",outboundCallingNoticeString:"Calling...",participantJoinedNoticeString:"{displayName} joined",twoParticipantJoinedNoticeString:"{displayName1} and {displayName2} have joined",threeParticipantJoinedNoticeString:"{displayName1}, {displayName2} and {displayName3} have joined",participantLeftNoticeString:"{displayName} left",twoParticipantLeftNoticeString:"{displayName1} and {displayName2} have left",threeParticipantLeftNoticeString:"{displayName1}, {displayName2} and {displayName3} have left",unnamedParticipantString:"unnamed participant",manyUnnamedParticipantsJoined:"unnamed participant and {numOfParticipants} other participants joined",manyUnnamedParticipantsLeft:"unnamed participant and {numOfParticipants} other participants left",manyParticipantsJoined:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants joined",manyParticipantsLeft:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants left",liveCaptionsLabel:"Live captions",captionsSettingsLabel:"Caption settings",startCaptionsButtonOnLabel:"Turn on captions",startCaptionsButtonOffLabel:"Turn off captions",startCaptionsButtonTooltipOnContent:"Turn off captions",startCaptionsButtonTooltipOffContent:"Turn on captions",captionsSettingsModalTitle:"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",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."}}};var chat$k={chatListHeader:"In this chat",uploadFile:"Upload File"};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",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",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};
21069
+ 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",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",deniedPermissionToRoomDetails:"You do not have permission to join this room.",deniedPermissionToRoomTitle:"Permission denied to room",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",peoplePaneTitle:"People",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",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",roomNotFoundDetails:"Room ID provided is not valid.",roomNotFoundTitle:"Room not found",soundLabel:"Sound",noMicrophonesLabel:"No microphones found",noSpeakersLabel:"No speakers found",startCallButtonLabel:"Start call",openDialpadButtonLabel:"Dial phone number",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",moreButtonCallingLabel:"More",resumeCallButtonLabel:"Resume",resumingCallButtonLabel:"Resuming...",resumeCallButtonAriaLabel:"Resume call",resumingCallButtonAriaLabel:"Resume call",holdScreenLabel:"You're on hold",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number",outboundCallingNoticeString:"Calling...",participantJoinedNoticeString:"{displayName} joined",twoParticipantJoinedNoticeString:"{displayName1} and {displayName2} have joined",threeParticipantJoinedNoticeString:"{displayName1}, {displayName2} and {displayName3} have joined",participantLeftNoticeString:"{displayName} left",twoParticipantLeftNoticeString:"{displayName1} and {displayName2} have left",threeParticipantLeftNoticeString:"{displayName1}, {displayName2} and {displayName3} have left",unnamedParticipantString:"unnamed participant",manyUnnamedParticipantsJoined:"unnamed participant and {numOfParticipants} other participants joined",manyUnnamedParticipantsLeft:"unnamed participant and {numOfParticipants} other participants left",manyParticipantsJoined:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants joined",manyParticipantsLeft:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants left",liveCaptionsLabel:"Live captions",captionsSettingsLabel:"Caption settings",startCaptionsButtonOnLabel:"Turn on captions",startCaptionsButtonOffLabel:"Turn off captions",startCaptionsButtonTooltipOnContent:"Turn off captions",startCaptionsButtonTooltipOffContent:"Turn on captions",captionsSettingsModalTitle:"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",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."}}};var chat$k={chatListHeader:"In this chat",uploadFile:"Upload File"};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",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",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};
21058
21070
 
21059
21071
  // Copyright (c) Microsoft Corporation.
21060
21072
  /**
@@ -21611,10 +21623,13 @@ class AzureCommunicationChatAdapter {
21611
21623
  }
21612
21624
  });
21613
21625
  }
21614
- const attachmentUrl = options.attachmentUrls[0];
21615
- const response = yield fetchWithAuthentication(attachmentUrl, accessToken);
21616
- const blob = yield response.blob();
21617
- return [{ blobUrl: URL.createObjectURL(blob) }];
21626
+ const attachmentDownloadResults = [];
21627
+ for (const id in options.attachmentUrls) {
21628
+ const response = yield fetchWithAuthentication(options.attachmentUrls[id], accessToken);
21629
+ const blob = yield response.blob();
21630
+ attachmentDownloadResults.push({ attachmentId: id, blobUrl: URL.createObjectURL(blob) });
21631
+ }
21632
+ return attachmentDownloadResults;
21618
21633
  });
21619
21634
  }
21620
21635
  messageReceivedListener(event) {
@@ -22509,11 +22524,14 @@ const ChatScreen = (props) => {
22509
22524
  } })), [fileSharing === null || fileSharing === void 0 ? void 0 : fileSharing.downloadHandler]);
22510
22525
  /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
22511
22526
  const onRenderInlineAttachment = React.useCallback((attachment) => __awaiter$i(void 0, void 0, void 0, function* () {
22512
- if (attachment.attachmentType === 'inlineImage' && attachment.previewUrl) {
22513
- const blob = yield adapter.downloadAttachments({ attachmentUrls: [attachment.previewUrl] });
22514
- return blob;
22515
- }
22516
- return [{ blobUrl: '' }];
22527
+ const entry = {};
22528
+ attachment.forEach((target) => {
22529
+ if (target.attachmentType === 'inlineImage' && target.previewUrl) {
22530
+ entry[target.id] = target.previewUrl;
22531
+ }
22532
+ });
22533
+ const blob = yield adapter.downloadAttachments({ attachmentUrls: entry });
22534
+ return blob;
22517
22535
  }), [adapter]);
22518
22536
  /* @conditional-compile-remove(image-gallery) */
22519
22537
  const onInlineImageClicked = React.useCallback((attachmentId, messageId) => __awaiter$i(void 0, void 0, void 0, function* () {
@@ -22554,7 +22572,7 @@ const ChatScreen = (props) => {
22554
22572
  return;
22555
22573
  }
22556
22574
  if (attachment.attachmentType === 'inlineImage' && attachment.url) {
22557
- const blob = yield adapter.downloadAttachments({ attachmentUrls: [attachment.url] });
22575
+ const blob = yield adapter.downloadAttachments({ attachmentUrls: { [attachment.id]: attachment.url } });
22558
22576
  if (blob[0]) {
22559
22577
  const blobUrl = blob[0].blobUrl;
22560
22578
  setFullSizeAttachments((prev) => (Object.assign(Object.assign({}, prev), { [attachment.id]: blobUrl })));
@@ -26774,7 +26792,15 @@ const getPipStyles = (theme) => ({
26774
26792
  * @private
26775
26793
  */
26776
26794
  const PIPContainerStyle = {
26777
- root: { position: 'absolute', width: '100%', height: '100%', pointerEvents: 'none' }
26795
+ root: {
26796
+ position: 'absolute',
26797
+ width: '100%',
26798
+ height: '100%',
26799
+ pointerEvents: 'none',
26800
+ ':focus-within': {
26801
+ outline: '1px solid #00000000'
26802
+ }
26803
+ }
26778
26804
  };
26779
26805
  /**
26780
26806
  * @private
@@ -26797,7 +26823,11 @@ const modalStyle = {
26797
26823
  width: '100%',
26798
26824
  height: '100%',
26799
26825
  // pointer events for root Modal div set to none to make descendants interactive
26800
- pointerEvents: 'none'
26826
+ pointerEvents: 'none',
26827
+ ':focus-within': {
26828
+ outline: '3px solid #00000000',
26829
+ outlineOffset: '-3px'
26830
+ }
26801
26831
  }
26802
26832
  };
26803
26833
  /**
@@ -26840,25 +26870,55 @@ const ModalLocalAndRemotePIP = (props) => {
26840
26870
  /* @conditional-compile-remove(rooms) */
26841
26871
  const role = (_a = adapter.getState().call) === null || _a === void 0 ? void 0 : _a.role;
26842
26872
  const pictureInPictureProps = useSelector$1(localAndRemotePIPSelector);
26873
+ const [touchStartTouches, setTouchStartTouches] = React.useState(null);
26874
+ const onTouchEnd = React.useCallback((event) => {
26875
+ var _a;
26876
+ if (touchStartTouches && touchStartTouches.length === 1 && event.changedTouches.length === 1) {
26877
+ const touchStartTouch = touchStartTouches[0];
26878
+ const touchEndTouch = event.changedTouches[0];
26879
+ if (Math.abs(touchStartTouch.clientX - touchEndTouch.clientX) < 10 &&
26880
+ Math.abs(touchStartTouch.clientY - touchEndTouch.clientY) < 10) {
26881
+ (_a = props.onDismissSidePane) === null || _a === void 0 ? void 0 : _a.call(props);
26882
+ }
26883
+ }
26884
+ }, [props, touchStartTouches]);
26885
+ const onTouchStart = React.useCallback((event) => {
26886
+ setTouchStartTouches(event.touches);
26887
+ }, []);
26888
+ const onKeyDown = React.useCallback((event) => {
26889
+ var _a;
26890
+ if (event.key === 'Enter' || event.key === ' ') {
26891
+ (_a = props.onDismissSidePane) === null || _a === void 0 ? void 0 : _a.call(props);
26892
+ }
26893
+ }, [props]);
26843
26894
  const pictureInPictureHandlers = useHandlers();
26844
26895
  const localAndRemotePIP = React.useMemo(() => {
26845
- var _a;
26896
+ var _a, _b, _c, _d, _e;
26846
26897
  /* @conditional-compile-remove(rooms) */
26847
26898
  if (role === 'Consumer' && ((_a = pictureInPictureProps.dominantRemoteParticipant) === null || _a === void 0 ? void 0 : _a.userId)) {
26848
- return (React__default["default"].createElement(_RemoteVideoTile, Object.assign({}, pictureInPictureProps.dominantRemoteParticipant, { remoteParticipant: pictureInPictureProps.dominantRemoteParticipant })));
26899
+ return (React__default["default"].createElement(react.Stack, { tabIndex: 0, "aria-label": (_c = (_b = props.strings) === null || _b === void 0 ? void 0 : _b.dismissModalAriaLabel) !== null && _c !== void 0 ? _c : '', onKeyDown: onKeyDown },
26900
+ React__default["default"].createElement(_RemoteVideoTile, Object.assign({}, pictureInPictureProps.dominantRemoteParticipant, { remoteParticipant: pictureInPictureProps.dominantRemoteParticipant }))));
26849
26901
  }
26850
- return React__default["default"].createElement(LocalAndRemotePIP, Object.assign({}, pictureInPictureProps, pictureInPictureHandlers));
26851
- }, [pictureInPictureProps, pictureInPictureHandlers, /* @conditional-compile-remove(rooms) */ role]);
26902
+ return (React__default["default"].createElement(react.Stack, { tabIndex: 0, "aria-label": (_e = (_d = props.strings) === null || _d === void 0 ? void 0 : _d.dismissModalAriaLabel) !== null && _e !== void 0 ? _e : '', onKeyDown: onKeyDown },
26903
+ React__default["default"].createElement(LocalAndRemotePIP, Object.assign({}, pictureInPictureProps, pictureInPictureHandlers))));
26904
+ }, [
26905
+ /* @conditional-compile-remove(rooms) */ role,
26906
+ onKeyDown,
26907
+ pictureInPictureProps,
26908
+ props,
26909
+ pictureInPictureHandlers
26910
+ ]);
26852
26911
  /* @conditional-compile-remove(rooms) */
26853
26912
  if (role === 'Consumer' && !pictureInPictureProps.dominantRemoteParticipant) {
26854
26913
  return null;
26855
26914
  }
26856
26915
  const modalStylesThemed = react.concatStyleSets(modalStyle, (_b = props.styles) === null || _b === void 0 ? void 0 : _b.modal);
26857
26916
  return (React__default["default"].createElement(react.Stack, { styles: rootStyles },
26858
- React__default["default"].createElement(_ModalClone, { isOpen: true, isModeless: true, dragOptions: DRAG_OPTIONS, styles: modalStylesThemed, layerProps: { hostId: props.modalLayerHostId }, minDragPosition: props.minDragPosition, maxDragPosition: props.maxDragPosition },
26859
- // Only render LocalAndRemotePIP when this component is NOT hidden because VideoGallery needs to have
26860
- // possession of the dominant remote participant video stream
26861
- !props.hidden && localAndRemotePIP)));
26917
+ React__default["default"].createElement(react.Stack, { onTouchStart: onTouchStart, onTouchEnd: onTouchEnd },
26918
+ React__default["default"].createElement(_ModalClone, { isOpen: true, isModeless: true, dragOptions: DRAG_OPTIONS, styles: modalStylesThemed, layerProps: { hostId: props.modalLayerHostId }, minDragPosition: props.minDragPosition, maxDragPosition: props.maxDragPosition },
26919
+ // Only render LocalAndRemotePIP when this component is NOT hidden because VideoGallery needs to have
26920
+ // possession of the dominant remote participant video stream
26921
+ !props.hidden && localAndRemotePIP))));
26862
26922
  };
26863
26923
 
26864
26924
  // Copyright (c) Microsoft Corporation.
@@ -27037,6 +27097,8 @@ const CallArrangement = (props) => {
27037
27097
  }
27038
27098
  }, [closePeoplePane, isPeoplePaneOpen, openPeoplePane]);
27039
27099
  const isSidePaneOpen = useIsSidePaneOpen();
27100
+ const locale = useLocale();
27101
+ const modalStrings = { dismissModalAriaLabel: locale.strings.call.dismissModalAriaLabel };
27040
27102
  const isMobileWithActivePane = props.mobileView && isSidePaneOpen;
27041
27103
  const callCompositeContainerCSS = React.useMemo(() => {
27042
27104
  return {
@@ -27181,7 +27243,12 @@ const CallArrangement = (props) => {
27181
27243
  ? undefined
27182
27244
  : togglePeoplePane, disablePeopleButton: typeof props.callControlProps.options !== 'boolean' &&
27183
27245
  isDisabled$3((_j = props.callControlProps.options) === null || _j === void 0 ? void 0 : _j.participantsButton), onChatButtonClicked: (_k = props.mobileChatTabHeader) === null || _k === void 0 ? void 0 : _k.onClick, disableChatButton: (_l = props.mobileChatTabHeader) === null || _l === void 0 ? void 0 : _l.disabled }),
27184
- props.mobileView && (React__default["default"].createElement(ModalLocalAndRemotePIP, { modalLayerHostId: props.modalLayerHostId, hidden: !isSidePaneOpen, styles: pipStyles, minDragPosition: minMaxDragPosition.minDragPosition, maxDragPosition: minMaxDragPosition.maxDragPosition })),
27246
+ props.mobileView && (React__default["default"].createElement(ModalLocalAndRemotePIP, { modalLayerHostId: props.modalLayerHostId, hidden: !isSidePaneOpen, styles: pipStyles, strings: modalStrings, minDragPosition: minMaxDragPosition.minDragPosition, maxDragPosition: minMaxDragPosition.maxDragPosition, onDismissSidePane: () => {
27247
+ closePeoplePane();
27248
+ if (props.onCloseChatPane) {
27249
+ props.onCloseChatPane();
27250
+ }
27251
+ } })),
27185
27252
  drawerMenuItems.length > 0 && (React__default["default"].createElement(react.Stack, { styles: drawerContainerStyles() },
27186
27253
  React__default["default"].createElement(_DrawerMenu, { onLightDismiss: () => setDrawerMenuItems([]), items: drawerMenuItems }))))))));
27187
27254
  };
@@ -27669,7 +27736,7 @@ const CallPage = (props) => {
27669
27736
  /* @conditional-compile-remove(gallery-layouts) */
27670
27737
  userSetOverflowGalleryPosition = 'Responsive',
27671
27738
  /* @conditional-compile-remove(gallery-layouts) */
27672
- onSetUserSetOverflowGalleryPosition } = props;
27739
+ onSetUserSetOverflowGalleryPosition, onCloseChatPane } = props;
27673
27740
  // To use useProps to get these states, we need to create another file wrapping Call,
27674
27741
  // It seems unnecessary in this case, so we get the updated states using this approach.
27675
27742
  const { callStatus } = useSelector$1(callStatusSelector);
@@ -27698,7 +27765,7 @@ const CallPage = (props) => {
27698
27765
  /* @conditional-compile-remove(gallery-layouts) */
27699
27766
  userSetOverflowGalleryPosition: userSetOverflowGalleryPosition,
27700
27767
  /* @conditional-compile-remove(gallery-layouts) */
27701
- userSetGalleryLayout: galleryLayout }))) : (React__default["default"].createElement(NetworkReconnectTile, Object.assign({}, networkReconnectTileProps)))) : (React__default["default"].createElement(React__default["default"].Fragment, null)), updateSidePaneRenderer: props.updateSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader, dataUiId: 'call-page', latestErrors: props.latestErrors, onDismissError: props.onDismissError,
27768
+ userSetGalleryLayout: galleryLayout }))) : (React__default["default"].createElement(NetworkReconnectTile, Object.assign({}, networkReconnectTileProps)))) : (React__default["default"].createElement(React__default["default"].Fragment, null)), updateSidePaneRenderer: props.updateSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader, onCloseChatPane: onCloseChatPane, dataUiId: 'call-page', latestErrors: props.latestErrors, onDismissError: props.onDismissError,
27702
27769
  /* @conditional-compile-remove(gallery-layouts) */
27703
27770
  onUserSetOverflowGalleryPositionChange: onSetUserSetOverflowGalleryPosition,
27704
27771
  /* @conditional-compile-remove(gallery-layouts) */
@@ -27820,7 +27887,7 @@ const ConfigurationPageMicDropdown = (props) => {
27820
27887
  * @private
27821
27888
  */
27822
27889
  const configurationStackTokensDesktop = {
27823
- childrenGap: '2rem'
27890
+ childrenGap: '1rem'
27824
27891
  };
27825
27892
  /**
27826
27893
  * @private
@@ -27846,7 +27913,7 @@ const configurationContainerStyleMobile = react.mergeStyles(Object.assign(Object
27846
27913
  * @private
27847
27914
  */
27848
27915
  const selectionContainerStyle = react.mergeStyles({
27849
- width: '50%',
27916
+ width: '100%',
27850
27917
  minWidth: '11rem',
27851
27918
  maxWidth: '18.75rem',
27852
27919
  padding: '0.5rem'
@@ -27871,9 +27938,11 @@ const titleContainerStyleMobile = react.mergeStyles({
27871
27938
  /**
27872
27939
  * @private
27873
27940
  */
27874
- const callDetailsContainerStylesDesktop = {
27941
+ const callDetailsContainerStyles = {
27875
27942
  root: {
27876
- marginBottom: '1.563rem'
27943
+ textAlign: 'center',
27944
+ maxWidth: _pxToRem(700),
27945
+ alignSelf: 'center'
27877
27946
  }
27878
27947
  };
27879
27948
  const callDetailsStyle = {
@@ -28670,27 +28739,26 @@ const ConfigurationPage = (props) => {
28670
28739
  /* @conditional-compile-remove(unsupported-browser) */
28671
28740
  environmentInfo: environmentInfo, setIsPermissionsModalDismissed: setIsPermissionsModalDismissed, onPermissionsTroubleshootingClick: onPermissionsTroubleshootingClick })),
28672
28741
  React__default["default"].createElement(react.Stack, { verticalFill: true, grow: true, horizontal: true, className: fillWidth },
28673
- React__default["default"].createElement(react.Stack, { className: fillWidth, horizontal: !mobileWithPreview, horizontalAlign: mobileWithPreview ? 'stretch' : 'center', verticalAlign: "center", tokens: mobileWithPreview ? configurationStackTokensMobile : configurationStackTokensDesktop },
28674
- mobileWithPreview && (React__default["default"].createElement(react.Stack.Item, null,
28742
+ React__default["default"].createElement(react.Stack, { className: fillWidth, verticalAlign: "center", verticalFill: mobileWithPreview, tokens: mobileWithPreview ? configurationStackTokensMobile : configurationStackTokensDesktop },
28743
+ React__default["default"].createElement(react.Stack.Item, { styles: callDetailsContainerStyles },
28675
28744
  title,
28676
- callDescription)),
28677
- localPreviewTrampoline(mobileWithPreview, /* @conditional-compile-remove(rooms) */ !!(role === 'Consumer')),
28678
- React__default["default"].createElement(react.Stack, { className: mobileView ? undefined : selectionContainerStyle },
28679
- !mobileWithPreview && (React__default["default"].createElement(React__default["default"].Fragment, null,
28680
- React__default["default"].createElement(react.Stack.Item, { styles: callDetailsContainerStylesDesktop },
28681
- title,
28682
- callDescription),
28683
- React__default["default"].createElement(LocalDeviceSettings, Object.assign({}, options, localDeviceSettingsHandlers, { cameraPermissionGranted: cameraPermissionGrantedTrampoline(cameraPermissionGranted,
28684
- /* @conditional-compile-remove(call-readiness) */ videoState), microphonePermissionGranted: micPermissionGrantedTrampoline(microphonePermissionGranted,
28685
- /* @conditional-compile-remove(call-readiness) */ audioState),
28686
- /* @conditional-compile-remove(call-readiness) */
28687
- onClickEnableDevicePermission: () => {
28688
- setIsPermissionsModalDismissed(true);
28689
- },
28690
- /* @conditional-compile-remove(video-background-effects) */
28691
- onClickVideoEffects: toggleVideoEffectsPane })))),
28692
- React__default["default"].createElement(react.Stack, { styles: mobileWithPreview ? startCallButtonContainerStyleMobile : startCallButtonContainerStyleDesktop },
28693
- React__default["default"].createElement(StartCallButton, { className: mobileWithPreview ? startCallButtonStyleMobile : startCallButtonStyleDesktop, onClick: startCall, disabled: disableStartCallButton })))),
28745
+ callDescription),
28746
+ React__default["default"].createElement(react.Stack, { horizontal: !mobileWithPreview, horizontalAlign: mobileWithPreview ? 'stretch' : 'center', verticalFill: mobileWithPreview, tokens: mobileWithPreview ? configurationStackTokensMobile : undefined },
28747
+ localPreviewTrampoline(mobileWithPreview,
28748
+ /* @conditional-compile-remove(rooms) */ !!(role === 'Consumer')),
28749
+ React__default["default"].createElement(react.Stack, { className: mobileView ? undefined : selectionContainerStyle },
28750
+ !mobileWithPreview && (React__default["default"].createElement(React__default["default"].Fragment, null,
28751
+ React__default["default"].createElement(LocalDeviceSettings, Object.assign({}, options, localDeviceSettingsHandlers, { cameraPermissionGranted: cameraPermissionGrantedTrampoline(cameraPermissionGranted,
28752
+ /* @conditional-compile-remove(call-readiness) */ videoState), microphonePermissionGranted: micPermissionGrantedTrampoline(microphonePermissionGranted,
28753
+ /* @conditional-compile-remove(call-readiness) */ audioState),
28754
+ /* @conditional-compile-remove(call-readiness) */
28755
+ onClickEnableDevicePermission: () => {
28756
+ setIsPermissionsModalDismissed(true);
28757
+ },
28758
+ /* @conditional-compile-remove(video-background-effects) */
28759
+ onClickVideoEffects: toggleVideoEffectsPane })))),
28760
+ React__default["default"].createElement(react.Stack, { styles: mobileWithPreview ? startCallButtonContainerStyleMobile : startCallButtonContainerStyleDesktop },
28761
+ React__default["default"].createElement(StartCallButton, { className: mobileWithPreview ? startCallButtonStyleMobile : startCallButtonStyleDesktop, onClick: startCall, disabled: disableStartCallButton }))))),
28694
28762
  React__default["default"].createElement(react.Panel
28695
28763
  /* @conditional-compile-remove(video-background-effects) */
28696
28764
  , {
@@ -29516,7 +29584,7 @@ const MainScreen = (props) => {
29516
29584
  capabilitiesChangedNotificationBarProps: capabilitiesChangedNotificationBarProps }));
29517
29585
  break;
29518
29586
  case 'call':
29519
- pageElement = (React__default["default"].createElement(CallPage, { callInvitationURL: callInvitationUrl, onFetchAvatarPersonaData: onFetchAvatarPersonaData, onFetchParticipantMenuItems: onFetchParticipantMenuItems, mobileView: props.mobileView, modalLayerHostId: props.modalLayerHostId, options: props.options, updateSidePaneRenderer: setSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader, latestErrors: latestErrors, onDismissError: onDismissError,
29587
+ pageElement = (React__default["default"].createElement(CallPage, { callInvitationURL: callInvitationUrl, onFetchAvatarPersonaData: onFetchAvatarPersonaData, onFetchParticipantMenuItems: onFetchParticipantMenuItems, mobileView: props.mobileView, modalLayerHostId: props.modalLayerHostId, options: props.options, updateSidePaneRenderer: setSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader, onCloseChatPane: props.onCloseChatPane, latestErrors: latestErrors, onDismissError: onDismissError,
29520
29588
  /* @conditional-compile-remove(gallery-layouts) */
29521
29589
  galleryLayout: userSetGalleryLayout,
29522
29590
  /* @conditional-compile-remove(gallery-layouts) */
@@ -29569,7 +29637,7 @@ const CallCompositeInner = (props) => {
29569
29637
  return (React__default["default"].createElement("div", { className: mainScreenContainerClassName },
29570
29638
  React__default["default"].createElement(BaseProvider, Object.assign({}, props),
29571
29639
  React__default["default"].createElement(CallAdapterProvider, { adapter: adapter },
29572
- React__default["default"].createElement(MainScreen, { callInvitationUrl: callInvitationUrl, onFetchAvatarPersonaData: onFetchAvatarPersonaData, onFetchParticipantMenuItems: onFetchParticipantMenuItems, mobileView: mobileView, modalLayerHostId: modalLayerHostId, options: options, onSidePaneIdChange: props.onSidePaneIdChange, overrideSidePane: props.overrideSidePane, mobileChatTabHeader: props.mobileChatTabHeader }),
29640
+ React__default["default"].createElement(MainScreen, { callInvitationUrl: callInvitationUrl, onFetchAvatarPersonaData: onFetchAvatarPersonaData, onFetchParticipantMenuItems: onFetchParticipantMenuItems, mobileView: mobileView, modalLayerHostId: modalLayerHostId, options: options, onSidePaneIdChange: props.onSidePaneIdChange, overrideSidePane: props.overrideSidePane, mobileChatTabHeader: props.mobileChatTabHeader, onCloseChatPane: props.onCloseChatPane }),
29573
29641
  // This layer host is for ModalLocalAndRemotePIP in SidePane. This LayerHost cannot be inside the SidePane
29574
29642
  // because when the SidePane is hidden, ie. style property display is 'none', it takes up no space. This causes problems when dragging
29575
29643
  // the Modal because the draggable bounds thinks it has no space and will always return to its initial position after dragging.
@@ -31688,7 +31756,7 @@ const CallWithChatScreen = (props) => {
31688
31756
  React__default["default"].createElement(react.Stack, { verticalFill: true, grow: true, styles: compositeOuterContainerStyles, id: compositeParentDivId },
31689
31757
  React__default["default"].createElement(react.Stack, { horizontal: true, grow: true },
31690
31758
  React__default["default"].createElement(react.Stack.Item, { grow: true, styles: callCompositeContainerStyles(mobileView) },
31691
- React__default["default"].createElement(CallCompositeInner, Object.assign({}, props, { formFactor: formFactor, options: callCompositeOptions, adapter: callAdapter, fluentTheme: fluentTheme, callInvitationUrl: props.joinInvitationURL, overrideSidePane: overrideSidePaneProps, onSidePaneIdChange: onSidePaneIdChange, mobileChatTabHeader: chatTabHeaderProps })))))));
31759
+ React__default["default"].createElement(CallCompositeInner, Object.assign({}, props, { formFactor: formFactor, options: callCompositeOptions, adapter: callAdapter, fluentTheme: fluentTheme, callInvitationUrl: props.joinInvitationURL, overrideSidePane: overrideSidePaneProps, onSidePaneIdChange: onSidePaneIdChange, mobileChatTabHeader: chatTabHeaderProps, onCloseChatPane: closeChat })))))));
31692
31760
  };
31693
31761
  /**
31694
31762
  * CallWithChatComposite brings together key components to provide a full call with chat experience out of the box.