@azure/communication-react 1.4.3-alpha-202212160013.0 → 1.4.3-alpha-202212180014.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/communication-react.d.ts +21 -33
- package/dist/dist-cjs/communication-react/index.js +646 -469
- package/dist/dist-cjs/communication-react/index.js.map +1 -1
- package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
- package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
- package/dist/dist-esm/calling-stateful-client/src/StreamUtils.js +6 -2
- package/dist/dist-esm/calling-stateful-client/src/StreamUtils.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/RemoteVideoTile.d.ts +3 -0
- package/dist/dist-esm/react-components/src/components/RemoteVideoTile.js +8 -3
- package/dist/dist-esm/react-components/src/components/RemoteVideoTile.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/UnsupportedBrowserVersion.d.ts +1 -1
- package/dist/dist-esm/react-components/src/components/UnsupportedBrowserVersion.js +2 -2
- package/dist/dist-esm/react-components/src/components/UnsupportedBrowserVersion.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/UnsupportedEnvironment.d.ts +1 -1
- package/dist/dist-esm/react-components/src/components/UnsupportedEnvironment.js +2 -2
- package/dist/dist-esm/react-components/src/components/UnsupportedEnvironment.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery/DefaultLayout.d.ts +2 -27
- package/dist/dist-esm/react-components/src/components/VideoGallery/DefaultLayout.js +1 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery/DefaultLayout.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery/FloatingLocalVideoLayout.d.ts +2 -26
- package/dist/dist-esm/react-components/src/components/VideoGallery/FloatingLocalVideoLayout.js +2 -2
- package/dist/dist-esm/react-components/src/components/VideoGallery/FloatingLocalVideoLayout.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery/Layout.d.ts +34 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery/Layout.js +4 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery/Layout.js.map +1 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery/PinnedParticipantsLayout.d.ts +25 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery/PinnedParticipantsLayout.js +62 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery/PinnedParticipantsLayout.js.map +1 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery/VideoGalleryResponsiveHorizontalGallery.d.ts +3 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery/VideoGalleryResponsiveHorizontalGallery.js +3 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery/VideoGalleryResponsiveHorizontalGallery.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery/styles/FloatingLocalVideo.styles.d.ts +1 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery/styles/FloatingLocalVideo.styles.js +2 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery/styles/FloatingLocalVideo.styles.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery/styles/VideoGalleryResponsiveHorizontalGallery.styles.d.ts +0 -14
- package/dist/dist-esm/react-components/src/components/VideoGallery/styles/VideoGalleryResponsiveHorizontalGallery.styles.js +1 -8
- package/dist/dist-esm/react-components/src/components/VideoGallery/styles/VideoGalleryResponsiveHorizontalGallery.styles.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery/useVideoTileContextualMenuProps.d.ts +5 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery/useVideoTileContextualMenuProps.js +22 -2
- package/dist/dist-esm/react-components/src/components/VideoGallery/useVideoTileContextualMenuProps.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery/utils/videoGalleryLayoutUtils.d.ts +36 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery/{videoGalleryUtils.js → utils/videoGalleryLayoutUtils.js} +46 -2
- package/dist/dist-esm/react-components/src/components/VideoGallery/utils/videoGalleryLayoutUtils.js.map +1 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery.d.ts +16 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery.js +77 -7
- package/dist/dist-esm/react-components/src/components/VideoGallery.js.map +1 -1
- package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +3 -1
- package/dist/dist-esm/react-components/src/theming/icons.d.ts +2 -0
- package/dist/dist-esm/react-components/src/theming/icons.js +6 -2
- package/dist/dist-esm/react-components/src/theming/icons.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.d.ts +0 -5
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js +6 -2
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.d.ts +0 -26
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/index.d.ts +0 -2
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/index.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js +11 -11
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Microphone.js +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Microphone.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/index.d.ts +0 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/index.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/UnsupportedBrowser.js +4 -13
- package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/UnsupportedBrowser.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallPage.styles.d.ts +0 -4
- package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallPage.styles.js +0 -8
- package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallPage.styles.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.d.ts +2 -4
- package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js +45 -25
- package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatControlBar.js +1 -11
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatControlBar.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.js +3 -1
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/styles/CallWithChatCompositeStyles.d.ts +0 -2
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/styles/CallWithChatCompositeStyles.js +0 -15
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/styles/CallWithChatCompositeStyles.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/common/icons.d.ts +2 -0
- package/dist/dist-esm/react-composites/src/composites/common/styles/Pane.styles.js +1 -1
- package/dist/dist-esm/react-composites/src/composites/common/styles/Pane.styles.js.map +1 -1
- package/package.json +8 -8
- package/dist/dist-esm/react-components/src/components/VideoGallery/videoGalleryUtils.d.ts +0 -17
- package/dist/dist-esm/react-components/src/components/VideoGallery/videoGalleryUtils.js.map +0 -1
@@ -202,7 +202,7 @@ const _toCommunicationIdentifier = (id) => {
|
|
202
202
|
// Copyright (c) Microsoft Corporation.
|
203
203
|
// Licensed under the MIT license.
|
204
204
|
// GENERATED FILE. DO NOT EDIT MANUALLY.
|
205
|
-
var telemetryVersion = '1.4.3-alpha-
|
205
|
+
var telemetryVersion = '1.4.3-alpha-202212180014.0';
|
206
206
|
|
207
207
|
// Copyright (c) Microsoft Corporation.
|
208
208
|
/**
|
@@ -418,7 +418,7 @@ const getEnvironmentInfo = (state) => {
|
|
418
418
|
|
419
419
|
// Copyright (c) Microsoft Corporation.
|
420
420
|
// Licensed under the MIT license.
|
421
|
-
var __awaiter$
|
421
|
+
var __awaiter$C = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
422
422
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
423
423
|
return new (P || (P = Promise))(function (resolve, reject) {
|
424
424
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
@@ -456,7 +456,7 @@ const _isPreviewOn = (deviceManager) => {
|
|
456
456
|
*
|
457
457
|
* @private
|
458
458
|
*/
|
459
|
-
const disposeAllLocalPreviewViews = (callClient) => __awaiter$
|
459
|
+
const disposeAllLocalPreviewViews = (callClient) => __awaiter$C(void 0, void 0, void 0, function* () {
|
460
460
|
const unparentedViews = callClient.getState().deviceManager.unparentedViews;
|
461
461
|
for (const view of unparentedViews) {
|
462
462
|
yield callClient.disposeView(undefined, undefined, view);
|
@@ -580,7 +580,7 @@ const holdButtonSelector = reselect__namespace.createSelector([getCallState], (c
|
|
580
580
|
|
581
581
|
// Copyright (c) Microsoft Corporation.
|
582
582
|
// Licensed under the MIT license.
|
583
|
-
var __awaiter$
|
583
|
+
var __awaiter$B = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
584
584
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
585
585
|
return new (P || (P = Promise))(function (resolve, reject) {
|
586
586
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
@@ -601,7 +601,7 @@ const areStreamsEqual = (prevStream, newStream) => {
|
|
601
601
|
* @private
|
602
602
|
*/
|
603
603
|
const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callClient, deviceManager, call) => {
|
604
|
-
const onStartLocalVideo = () => __awaiter$
|
604
|
+
const onStartLocalVideo = () => __awaiter$B(void 0, void 0, void 0, function* () {
|
605
605
|
// Before the call object creates a stream, dispose of any local preview streams.
|
606
606
|
// @TODO: is there any way to parent the unparented view to the call object instead
|
607
607
|
// of disposing and creating a new stream?
|
@@ -621,7 +621,7 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
|
|
621
621
|
yield call.startVideo(stream);
|
622
622
|
}
|
623
623
|
});
|
624
|
-
const onStopLocalVideo = (stream) => __awaiter$
|
624
|
+
const onStopLocalVideo = (stream) => __awaiter$B(void 0, void 0, void 0, function* () {
|
625
625
|
const callId = call === null || call === void 0 ? void 0 : call.id;
|
626
626
|
if (!callId) {
|
627
627
|
return;
|
@@ -634,7 +634,7 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
|
|
634
634
|
});
|
635
635
|
}
|
636
636
|
});
|
637
|
-
const onToggleCamera = (options) => __awaiter$
|
637
|
+
const onToggleCamera = (options) => __awaiter$B(void 0, void 0, void 0, function* () {
|
638
638
|
const previewOn = _isPreviewOn(callClient.getState().deviceManager);
|
639
639
|
if (previewOn && call && call.state === 'Connecting') {
|
640
640
|
// This is to workaround: https://skype.visualstudio.com/SPOOL/_workitems/edit/3030558.
|
@@ -682,19 +682,19 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
|
|
682
682
|
}
|
683
683
|
}
|
684
684
|
});
|
685
|
-
const onSelectMicrophone = (device) => __awaiter$
|
685
|
+
const onSelectMicrophone = (device) => __awaiter$B(void 0, void 0, void 0, function* () {
|
686
686
|
if (!deviceManager) {
|
687
687
|
return;
|
688
688
|
}
|
689
689
|
return deviceManager.selectMicrophone(device);
|
690
690
|
});
|
691
|
-
const onSelectSpeaker = (device) => __awaiter$
|
691
|
+
const onSelectSpeaker = (device) => __awaiter$B(void 0, void 0, void 0, function* () {
|
692
692
|
if (!deviceManager) {
|
693
693
|
return;
|
694
694
|
}
|
695
695
|
return deviceManager.selectSpeaker(device);
|
696
696
|
});
|
697
|
-
const onSelectCamera = (device, options) => __awaiter$
|
697
|
+
const onSelectCamera = (device, options) => __awaiter$B(void 0, void 0, void 0, function* () {
|
698
698
|
if (!deviceManager) {
|
699
699
|
return;
|
700
700
|
}
|
@@ -717,19 +717,19 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
|
|
717
717
|
}, options);
|
718
718
|
}
|
719
719
|
});
|
720
|
-
const onToggleMicrophone = () => __awaiter$
|
720
|
+
const onToggleMicrophone = () => __awaiter$B(void 0, void 0, void 0, function* () {
|
721
721
|
if (!call || !_isInCall(call.state)) {
|
722
722
|
throw new Error(`Please invoke onToggleMicrophone after call is started`);
|
723
723
|
}
|
724
724
|
return call.isMuted ? yield call.unmute() : yield call.mute();
|
725
725
|
});
|
726
|
-
const onStartScreenShare = () => __awaiter$
|
727
|
-
const onStopScreenShare = () => __awaiter$
|
728
|
-
const onToggleScreenShare = () => __awaiter$
|
729
|
-
const onHangUp = (forEveryone) => __awaiter$
|
726
|
+
const onStartScreenShare = () => __awaiter$B(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.startScreenSharing()); });
|
727
|
+
const onStopScreenShare = () => __awaiter$B(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.stopScreenSharing()); });
|
728
|
+
const onToggleScreenShare = () => __awaiter$B(void 0, void 0, void 0, function* () { return (call === null || call === void 0 ? void 0 : call.isScreenSharingOn) ? yield onStopScreenShare() : yield onStartScreenShare(); });
|
729
|
+
const onHangUp = (forEveryone) => __awaiter$B(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.hangUp({ forEveryone: forEveryone === true ? true : false })); });
|
730
730
|
/* @conditional-compile-remove(PSTN-calls) */
|
731
|
-
const onToggleHold = () => __awaiter$
|
732
|
-
const onCreateLocalStreamView = (options = { scalingMode: 'Crop', isMirrored: true }) => __awaiter$
|
731
|
+
const onToggleHold = () => __awaiter$B(void 0, void 0, void 0, function* () { return (call === null || call === void 0 ? void 0 : call.state) === 'LocalHold' ? yield (call === null || call === void 0 ? void 0 : call.resume()) : yield (call === null || call === void 0 ? void 0 : call.hold()); });
|
732
|
+
const onCreateLocalStreamView = (options = { scalingMode: 'Crop', isMirrored: true }) => __awaiter$B(void 0, void 0, void 0, function* () {
|
733
733
|
var _a;
|
734
734
|
if (!call || call.localVideoStreams.length === 0) {
|
735
735
|
return;
|
@@ -745,7 +745,7 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
|
|
745
745
|
const { view } = (_a = (yield callClient.createView(call.id, undefined, localStream, options))) !== null && _a !== void 0 ? _a : {};
|
746
746
|
return view ? { view } : undefined;
|
747
747
|
});
|
748
|
-
const onCreateRemoteStreamView = (userId, options = { scalingMode: 'Crop' }) => __awaiter$
|
748
|
+
const onCreateRemoteStreamView = (userId, options = { scalingMode: 'Crop' }) => __awaiter$B(void 0, void 0, void 0, function* () {
|
749
749
|
if (!call) {
|
750
750
|
return;
|
751
751
|
}
|
@@ -773,7 +773,7 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
|
|
773
773
|
}
|
774
774
|
return (createViewResult === null || createViewResult === void 0 ? void 0 : createViewResult.view) ? { view: createViewResult === null || createViewResult === void 0 ? void 0 : createViewResult.view } : undefined;
|
775
775
|
});
|
776
|
-
const onDisposeRemoteStreamView = (userId) => __awaiter$
|
776
|
+
const onDisposeRemoteStreamView = (userId) => __awaiter$B(void 0, void 0, void 0, function* () {
|
777
777
|
if (!call) {
|
778
778
|
return;
|
779
779
|
}
|
@@ -794,7 +794,7 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
|
|
794
794
|
callClient.disposeView(call.id, participant.identifier, screenShareStream);
|
795
795
|
}
|
796
796
|
});
|
797
|
-
const onDisposeLocalStreamView = () => __awaiter$
|
797
|
+
const onDisposeLocalStreamView = () => __awaiter$B(void 0, void 0, void 0, function* () {
|
798
798
|
// If the user is currently in a call, dispose of the local stream view attached to that call.
|
799
799
|
const callState = call && callClient.getState().calls[call.id];
|
800
800
|
const localStream = callState === null || callState === void 0 ? void 0 : callState.localVideoStreams.find((item) => item.mediaStreamType === 'Video');
|
@@ -807,12 +807,12 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
|
|
807
807
|
yield disposeAllLocalPreviewViews(callClient);
|
808
808
|
});
|
809
809
|
/* @conditional-compile-remove(dialpad) */ /* @conditional-compile-remove(PSTN-calls) */
|
810
|
-
const onSendDtmfTone = (dtmfTone) => __awaiter$
|
810
|
+
const onSendDtmfTone = (dtmfTone) => __awaiter$B(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.sendDtmf(dtmfTone)); });
|
811
811
|
const notImplemented = () => {
|
812
812
|
throw new Error('Not implemented, cannot call a method from an abstract object');
|
813
813
|
};
|
814
814
|
/* @conditional-compile-remove(call-readiness) */
|
815
|
-
const askDevicePermission = (constrain) => __awaiter$
|
815
|
+
const askDevicePermission = (constrain) => __awaiter$B(void 0, void 0, void 0, function* () {
|
816
816
|
if (deviceManager) {
|
817
817
|
yield (deviceManager === null || deviceManager === void 0 ? void 0 : deviceManager.askDevicePermission(constrain));
|
818
818
|
}
|
@@ -846,7 +846,7 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
|
|
846
846
|
|
847
847
|
// Copyright (c) Microsoft Corporation.
|
848
848
|
// Licensed under the MIT license.
|
849
|
-
var __awaiter$
|
849
|
+
var __awaiter$A = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
850
850
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
851
851
|
return new (P || (P = Promise))(function (resolve, reject) {
|
852
852
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
@@ -873,7 +873,7 @@ const createDefaultCallingHandlers = memoizeOne__default['default']((callClient,
|
|
873
873
|
return callAgent ? callAgent.startCall(participants, options) : undefined;
|
874
874
|
},
|
875
875
|
/* @conditional-compile-remove(PSTN-calls) */
|
876
|
-
onAddParticipant: (userId, options) => __awaiter$
|
876
|
+
onAddParticipant: (userId, options) => __awaiter$A(void 0, void 0, void 0, function* () {
|
877
877
|
const participant = _toCommunicationIdentifier(userId);
|
878
878
|
if (communicationCommon.isPhoneNumberIdentifier(participant)) {
|
879
879
|
call === null || call === void 0 ? void 0 : call.addParticipant(participant, options);
|
@@ -881,7 +881,7 @@ const createDefaultCallingHandlers = memoizeOne__default['default']((callClient,
|
|
881
881
|
else if (communicationCommon.isCommunicationUserIdentifier(participant) || communicationCommon.isMicrosoftTeamsUserIdentifier(participant)) {
|
882
882
|
call === null || call === void 0 ? void 0 : call.addParticipant(participant);
|
883
883
|
}
|
884
|
-
}), onRemoveParticipant: (userId) => __awaiter$
|
884
|
+
}), onRemoveParticipant: (userId) => __awaiter$A(void 0, void 0, void 0, function* () {
|
885
885
|
const participant = _toCommunicationIdentifier(userId);
|
886
886
|
yield (call === null || call === void 0 ? void 0 : call.removeParticipant(participant));
|
887
887
|
}) });
|
@@ -889,7 +889,7 @@ const createDefaultCallingHandlers = memoizeOne__default['default']((callClient,
|
|
889
889
|
|
890
890
|
// Copyright (c) Microsoft Corporation.
|
891
891
|
// Licensed under the MIT license.
|
892
|
-
var __awaiter$
|
892
|
+
var __awaiter$z = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
893
893
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
894
894
|
return new (P || (P = Promise))(function (resolve, reject) {
|
895
895
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
@@ -921,7 +921,7 @@ const createDefaultTeamsCallingHandlers = memoizeOne__default['default']((callCl
|
|
921
921
|
},
|
922
922
|
/* @conditional-compile-remove(teams-identity-support) */
|
923
923
|
/* @conditional-compile-remove(PSTN-calls) */
|
924
|
-
onAddParticipant: (userId, options) => __awaiter$
|
924
|
+
onAddParticipant: (userId, options) => __awaiter$z(void 0, void 0, void 0, function* () {
|
925
925
|
const participant = _toCommunicationIdentifier(userId);
|
926
926
|
/* @conditional-compile-remove(teams-identity-support) */
|
927
927
|
const threadId = options === null || options === void 0 ? void 0 : options.threadId;
|
@@ -934,7 +934,7 @@ const createDefaultTeamsCallingHandlers = memoizeOne__default['default']((callCl
|
|
934
934
|
}
|
935
935
|
/* @conditional-compile-remove(teams-identity-support) */
|
936
936
|
call === null || call === void 0 ? void 0 : call.addParticipant(participant);
|
937
|
-
}), onRemoveParticipant: (userId) => __awaiter$
|
937
|
+
}), onRemoveParticipant: (userId) => __awaiter$z(void 0, void 0, void 0, function* () {
|
938
938
|
const participant = _toCommunicationIdentifier(userId);
|
939
939
|
if (communicationCommon.isCommunicationUserIdentifier(participant)) {
|
940
940
|
throw new Error('CommunicationIdentifier in Teams call is not supported!');
|
@@ -946,7 +946,7 @@ const createDefaultTeamsCallingHandlers = memoizeOne__default['default']((callCl
|
|
946
946
|
|
947
947
|
// Copyright (c) Microsoft Corporation.
|
948
948
|
// Licensed under the MIT license.
|
949
|
-
var __awaiter$
|
949
|
+
var __awaiter$y = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
950
950
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
951
951
|
return new (P || (P = Promise))(function (resolve, reject) {
|
952
952
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
@@ -995,13 +995,13 @@ class ProxyDeviceManager {
|
|
995
995
|
this.selectCamera = (videoDeviceInfo) => {
|
996
996
|
this._context.setDeviceManagerSelectedCamera(videoDeviceInfo);
|
997
997
|
};
|
998
|
-
this.videoDevicesUpdated = () => __awaiter$
|
998
|
+
this.videoDevicesUpdated = () => __awaiter$y(this, void 0, void 0, function* () {
|
999
999
|
// Device Manager always has a camera with '' name if there are no real camera devices available.
|
1000
1000
|
// We don't want to show that in the UI.
|
1001
1001
|
const realCameras = (yield this._deviceManager.getCameras()).filter((c) => !!c.name);
|
1002
1002
|
this._context.setDeviceManagerCameras(dedupeById(realCameras));
|
1003
1003
|
});
|
1004
|
-
this.audioDevicesUpdated = () => __awaiter$
|
1004
|
+
this.audioDevicesUpdated = () => __awaiter$y(this, void 0, void 0, function* () {
|
1005
1005
|
this._context.setDeviceManagerMicrophones(dedupeById(yield this._deviceManager.getMicrophones()));
|
1006
1006
|
this._context.setDeviceManagerSpeakers(dedupeById(yield this._deviceManager.getSpeakers()));
|
1007
1007
|
});
|
@@ -1208,7 +1208,7 @@ class CallIdHistory {
|
|
1208
1208
|
|
1209
1209
|
// Copyright (c) Microsoft Corporation.
|
1210
1210
|
// Licensed under the MIT license.
|
1211
|
-
var __awaiter$
|
1211
|
+
var __awaiter$x = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
1212
1212
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
1213
1213
|
return new (P || (P = Promise))(function (resolve, reject) {
|
1214
1214
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
@@ -1737,7 +1737,7 @@ class CallContext$2 {
|
|
1737
1737
|
* @throws CallError. Exceptions thrown from `f` are tagged with the failed `target.
|
1738
1738
|
*/
|
1739
1739
|
withAsyncErrorTeedToState(action, target) {
|
1740
|
-
return (...args) => __awaiter$
|
1740
|
+
return (...args) => __awaiter$x(this, void 0, void 0, function* () {
|
1741
1741
|
try {
|
1742
1742
|
return yield action(...args);
|
1743
1743
|
}
|
@@ -2014,7 +2014,7 @@ class RemoteVideoStreamSubscriber {
|
|
2014
2014
|
|
2015
2015
|
// Copyright (c) Microsoft Corporation.
|
2016
2016
|
// Licensed under the MIT license.
|
2017
|
-
var __awaiter$
|
2017
|
+
var __awaiter$w = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
2018
2018
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
2019
2019
|
return new (P || (P = Promise))(function (resolve, reject) {
|
2020
2020
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
@@ -2024,7 +2024,7 @@ var __awaiter$v = (window && window.__awaiter) || function (thisArg, _arguments,
|
|
2024
2024
|
});
|
2025
2025
|
};
|
2026
2026
|
function createViewRemoteVideo(context, internalContext, callId, participantId, stream, options) {
|
2027
|
-
return __awaiter$
|
2027
|
+
return __awaiter$w(this, void 0, void 0, function* () {
|
2028
2028
|
// Render RemoteVideoStream that is part of a Call
|
2029
2029
|
const streamId = stream.id;
|
2030
2030
|
let participantKey;
|
@@ -2132,7 +2132,7 @@ function createViewRemoteVideo(context, internalContext, callId, participantId,
|
|
2132
2132
|
});
|
2133
2133
|
}
|
2134
2134
|
function createViewLocalVideo(context, internalContext, callId, options) {
|
2135
|
-
return __awaiter$
|
2135
|
+
return __awaiter$w(this, void 0, void 0, function* () {
|
2136
2136
|
_logEvent(callingStatefulLogger, {
|
2137
2137
|
name: EventNames.START_LOCAL_STREAM_RENDERING,
|
2138
2138
|
level: 'info',
|
@@ -2250,7 +2250,7 @@ function createViewLocalVideo(context, internalContext, callId, options) {
|
|
2250
2250
|
});
|
2251
2251
|
}
|
2252
2252
|
function createViewUnparentedVideo(context, internalContext, stream, options) {
|
2253
|
-
return __awaiter$
|
2253
|
+
return __awaiter$w(this, void 0, void 0, function* () {
|
2254
2254
|
const renderInfo = internalContext.getUnparentedRenderInfo(stream);
|
2255
2255
|
if (renderInfo && renderInfo.status === 'Rendered') {
|
2256
2256
|
console.warn('Unparented LocalVideoStream is already rendered');
|
@@ -2498,7 +2498,9 @@ function createView(context, internalContext, callId, participantId, stream, opt
|
|
2498
2498
|
}
|
2499
2499
|
else if (!('id' in stream) && !callId) {
|
2500
2500
|
// Render LocalVideoStream that is not part of a Call
|
2501
|
-
|
2501
|
+
// Because it is not part of the call we don't tee errors to state naturally (e.g. via a Call Client function such as startVideo).
|
2502
|
+
// We do not have a startLocalPreviewVideo function, so as a workaround we ensure any errors are propagated here.
|
2503
|
+
return context.withAsyncErrorTeedToState(() => __awaiter$w(this, void 0, void 0, function* () { return yield createViewUnparentedVideo(context, internalContext, stream, options); }), 'Call.startVideo')();
|
2502
2504
|
}
|
2503
2505
|
else {
|
2504
2506
|
_logEvent(callingStatefulLogger, {
|
@@ -2523,7 +2525,9 @@ function disposeView(context, internalContext, callId, participantId, stream) {
|
|
2523
2525
|
}
|
2524
2526
|
else if (!('id' in stream) && !callId) {
|
2525
2527
|
// Stop rendering LocalVideoStream that is not part of a Call
|
2526
|
-
|
2528
|
+
// Because it is not part of the call we don't tee errors to state naturally (e.g. via a Call Client function such as startVideo).
|
2529
|
+
// We do not have a stopLocalPreviewVideo function, so as a workaround we ensure any errors are propagated here.
|
2530
|
+
context.withErrorTeedToState(() => disposeViewUnparentedVideo(context, internalContext, stream), 'Call.stopVideo')();
|
2527
2531
|
}
|
2528
2532
|
else {
|
2529
2533
|
_logEvent(callingStatefulLogger, {
|
@@ -2915,7 +2919,7 @@ class CallSubscriber {
|
|
2915
2919
|
|
2916
2920
|
// Copyright (c) Microsoft Corporation.
|
2917
2921
|
// Licensed under the MIT license.
|
2918
|
-
var __awaiter$
|
2922
|
+
var __awaiter$v = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
2919
2923
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
2920
2924
|
return new (P || (P = Promise))(function (resolve, reject) {
|
2921
2925
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
@@ -2935,14 +2939,14 @@ class ProxyIncomingCall {
|
|
2935
2939
|
switch (prop) {
|
2936
2940
|
case 'accept': {
|
2937
2941
|
return this._context.withAsyncErrorTeedToState(function (...args) {
|
2938
|
-
return __awaiter$
|
2942
|
+
return __awaiter$v(this, void 0, void 0, function* () {
|
2939
2943
|
return yield target.accept(...args);
|
2940
2944
|
});
|
2941
2945
|
}, 'IncomingCall.accept');
|
2942
2946
|
}
|
2943
2947
|
case 'reject': {
|
2944
2948
|
return this._context.withAsyncErrorTeedToState(function (...args) {
|
2945
|
-
return __awaiter$
|
2949
|
+
return __awaiter$v(this, void 0, void 0, function* () {
|
2946
2950
|
return yield target.reject(...args);
|
2947
2951
|
});
|
2948
2952
|
}, 'IncomingCall.reject');
|
@@ -3179,7 +3183,7 @@ const clearCallRelatedState = (context, internalContext) => {
|
|
3179
3183
|
|
3180
3184
|
// Copyright (c) Microsoft Corporation.
|
3181
3185
|
// Licensed under the MIT license.
|
3182
|
-
var __awaiter$
|
3186
|
+
var __awaiter$u = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3183
3187
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
3184
3188
|
return new (P || (P = Promise))(function (resolve, reject) {
|
3185
3189
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
@@ -3205,56 +3209,56 @@ class ProxyCallCommon {
|
|
3205
3209
|
switch (prop) {
|
3206
3210
|
case 'mute': {
|
3207
3211
|
return this._context.withAsyncErrorTeedToState(function (...args) {
|
3208
|
-
return __awaiter$
|
3212
|
+
return __awaiter$u(this, void 0, void 0, function* () {
|
3209
3213
|
return yield target.mute(...args);
|
3210
3214
|
});
|
3211
3215
|
}, 'Call.mute');
|
3212
3216
|
}
|
3213
3217
|
case 'unmute': {
|
3214
3218
|
return this._context.withAsyncErrorTeedToState(function (...args) {
|
3215
|
-
return __awaiter$
|
3219
|
+
return __awaiter$u(this, void 0, void 0, function* () {
|
3216
3220
|
return yield target.unmute(...args);
|
3217
3221
|
});
|
3218
3222
|
}, 'Call.unmute');
|
3219
3223
|
}
|
3220
3224
|
case 'startVideo': {
|
3221
3225
|
return this._context.withAsyncErrorTeedToState(function (...args) {
|
3222
|
-
return __awaiter$
|
3226
|
+
return __awaiter$u(this, void 0, void 0, function* () {
|
3223
3227
|
return yield target.startVideo(...args);
|
3224
3228
|
});
|
3225
3229
|
}, 'Call.startVideo');
|
3226
3230
|
}
|
3227
3231
|
case 'stopVideo': {
|
3228
3232
|
return this._context.withAsyncErrorTeedToState(function (...args) {
|
3229
|
-
return __awaiter$
|
3233
|
+
return __awaiter$u(this, void 0, void 0, function* () {
|
3230
3234
|
return yield target.stopVideo(...args);
|
3231
3235
|
});
|
3232
3236
|
}, 'Call.stopVideo');
|
3233
3237
|
}
|
3234
3238
|
case 'startScreenSharing': {
|
3235
3239
|
return this._context.withAsyncErrorTeedToState(function (...args) {
|
3236
|
-
return __awaiter$
|
3240
|
+
return __awaiter$u(this, void 0, void 0, function* () {
|
3237
3241
|
return yield target.startScreenSharing(...args);
|
3238
3242
|
});
|
3239
3243
|
}, 'Call.startScreenSharing');
|
3240
3244
|
}
|
3241
3245
|
case 'stopScreenSharing': {
|
3242
3246
|
return this._context.withAsyncErrorTeedToState(function (...args) {
|
3243
|
-
return __awaiter$
|
3247
|
+
return __awaiter$u(this, void 0, void 0, function* () {
|
3244
3248
|
return yield target.stopScreenSharing(...args);
|
3245
3249
|
});
|
3246
3250
|
}, 'Call.stopScreenSharing');
|
3247
3251
|
}
|
3248
3252
|
case 'hold': {
|
3249
3253
|
return this._context.withAsyncErrorTeedToState(function (...args) {
|
3250
|
-
return __awaiter$
|
3254
|
+
return __awaiter$u(this, void 0, void 0, function* () {
|
3251
3255
|
return yield target.hold(...args);
|
3252
3256
|
});
|
3253
3257
|
}, 'Call.hold');
|
3254
3258
|
}
|
3255
3259
|
case 'resume': {
|
3256
3260
|
return this._context.withAsyncErrorTeedToState(function (...args) {
|
3257
|
-
return __awaiter$
|
3261
|
+
return __awaiter$u(this, void 0, void 0, function* () {
|
3258
3262
|
return yield target.resume(...args);
|
3259
3263
|
});
|
3260
3264
|
}, 'Call.resume');
|
@@ -3267,7 +3271,7 @@ class ProxyCallCommon {
|
|
3267
3271
|
|
3268
3272
|
// Copyright (c) Microsoft Corporation.
|
3269
3273
|
// Licensed under the MIT license.
|
3270
|
-
var __awaiter$
|
3274
|
+
var __awaiter$t = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3271
3275
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
3272
3276
|
return new (P || (P = Promise))(function (resolve, reject) {
|
3273
3277
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
@@ -3281,7 +3285,7 @@ class ProxyCall extends ProxyCallCommon {
|
|
3281
3285
|
switch (prop) {
|
3282
3286
|
case 'addParticipant': {
|
3283
3287
|
return this.getContext().withAsyncErrorTeedToState(function (...args) {
|
3284
|
-
return __awaiter$
|
3288
|
+
return __awaiter$t(this, void 0, void 0, function* () {
|
3285
3289
|
return yield target.addParticipant(...args);
|
3286
3290
|
});
|
3287
3291
|
}, 'Call.addParticipant');
|
@@ -3478,7 +3482,7 @@ class InternalCallContext {
|
|
3478
3482
|
|
3479
3483
|
// Copyright (c) Microsoft Corporation.
|
3480
3484
|
// Licensed under the MIT license.
|
3481
|
-
var __awaiter$
|
3485
|
+
var __awaiter$s = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3482
3486
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
3483
3487
|
return new (P || (P = Promise))(function (resolve, reject) {
|
3484
3488
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
@@ -3493,7 +3497,7 @@ class ProxyTeamsCall extends ProxyCallCommon {
|
|
3493
3497
|
switch (prop) {
|
3494
3498
|
case 'addParticipant': {
|
3495
3499
|
return this.getContext().withAsyncErrorTeedToState(function (...args) {
|
3496
|
-
return __awaiter$
|
3500
|
+
return __awaiter$s(this, void 0, void 0, function* () {
|
3497
3501
|
return yield target.addParticipant(...args);
|
3498
3502
|
});
|
3499
3503
|
}, 'TeamsCall.addParticipant');
|
@@ -3608,7 +3612,7 @@ const teamsCallAgentDeclaratify = (callAgent, context, internalContext) => {
|
|
3608
3612
|
|
3609
3613
|
// Copyright (c) Microsoft Corporation.
|
3610
3614
|
// Licensed under the MIT license.
|
3611
|
-
var __awaiter$
|
3615
|
+
var __awaiter$r = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3612
3616
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
3613
3617
|
return new (P || (P = Promise))(function (resolve, reject) {
|
3614
3618
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
@@ -3630,7 +3634,7 @@ class ProxyVideoStreamRendererView {
|
|
3630
3634
|
get(target, prop) {
|
3631
3635
|
switch (prop) {
|
3632
3636
|
case 'updateScalingMode': {
|
3633
|
-
return (...args) => __awaiter$
|
3637
|
+
return (...args) => __awaiter$r(this, void 0, void 0, function* () {
|
3634
3638
|
yield target.updateScalingMode(...args);
|
3635
3639
|
this._context.setRemoteVideoStreamViewScalingMode(this._callId, this._participantId, this._streamId, args[0]);
|
3636
3640
|
});
|
@@ -3651,7 +3655,7 @@ const videoStreamRendererViewDeclaratify = (view, context, callId, participantId
|
|
3651
3655
|
|
3652
3656
|
// Copyright (c) Microsoft Corporation.
|
3653
3657
|
// Licensed under the MIT license.
|
3654
|
-
var __awaiter$
|
3658
|
+
var __awaiter$q = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3655
3659
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
3656
3660
|
return new (P || (P = Promise))(function (resolve, reject) {
|
3657
3661
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
@@ -3673,7 +3677,7 @@ class ProxyCallClient {
|
|
3673
3677
|
get(target, prop) {
|
3674
3678
|
switch (prop) {
|
3675
3679
|
case 'createCallAgent': {
|
3676
|
-
return this._context.withAsyncErrorTeedToState((...args) => __awaiter$
|
3680
|
+
return this._context.withAsyncErrorTeedToState((...args) => __awaiter$q(this, void 0, void 0, function* () {
|
3677
3681
|
// createCallAgent will throw an exception if the previous callAgent was not disposed. If the previous
|
3678
3682
|
// callAgent was disposed then it would have unsubscribed to events so we can just create a new declarative
|
3679
3683
|
// callAgent if the createCallAgent succeeds.
|
@@ -3686,7 +3690,7 @@ class ProxyCallClient {
|
|
3686
3690
|
}), 'CallClient.createCallAgent');
|
3687
3691
|
}
|
3688
3692
|
case 'createTeamsCallAgent': {
|
3689
|
-
/* @conditional-compile-remove(teams-identity-support) */ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$
|
3693
|
+
/* @conditional-compile-remove(teams-identity-support) */ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$q(this, void 0, void 0, function* () {
|
3690
3694
|
// createCallAgent will throw an exception if the previous callAgent was not disposed. If the previous
|
3691
3695
|
// callAgent was disposed then it would have unsubscribed to events so we can just create a new declarative
|
3692
3696
|
// callAgent if the createCallAgent succeeds.
|
@@ -3699,7 +3703,7 @@ class ProxyCallClient {
|
|
3699
3703
|
}), 'CallClient.createTeamsCallAgent');
|
3700
3704
|
}
|
3701
3705
|
case 'getDeviceManager': {
|
3702
|
-
return this._context.withAsyncErrorTeedToState(() => __awaiter$
|
3706
|
+
return this._context.withAsyncErrorTeedToState(() => __awaiter$q(this, void 0, void 0, function* () {
|
3703
3707
|
// As of writing, the SDK always returns the same instance of DeviceManager so we keep a reference of
|
3704
3708
|
// DeviceManager and if it does not change we return the cached DeclarativeDeviceManager. If it does not we'll
|
3705
3709
|
// throw an error that indicate we need to fix this issue as our implementation has diverged from the SDK.
|
@@ -3728,7 +3732,7 @@ class ProxyCallClient {
|
|
3728
3732
|
/**
|
3729
3733
|
* add to this object if we want to proxy anything else off the DebugInfo feature object.
|
3730
3734
|
*/
|
3731
|
-
return Object.assign(Object.assign({}, feature), { getEnvironmentInfo: () => __awaiter$
|
3735
|
+
return Object.assign(Object.assign({}, feature), { getEnvironmentInfo: () => __awaiter$q(this, void 0, void 0, function* () {
|
3732
3736
|
const environmentInfo = yield feature.getEnvironmentInfo();
|
3733
3737
|
this._context.setEnvironmentInfo(environmentInfo);
|
3734
3738
|
return environmentInfo;
|
@@ -3781,7 +3785,7 @@ const createStatefulCallClientWithDeps = (callClient, context, internalContext)
|
|
3781
3785
|
});
|
3782
3786
|
Object.defineProperty(callClient, 'createView', {
|
3783
3787
|
configurable: false,
|
3784
|
-
value: (callId, participantId, stream, options) => __awaiter$
|
3788
|
+
value: (callId, participantId, stream, options) => __awaiter$q(void 0, void 0, void 0, function* () {
|
3785
3789
|
const participantIdKind = participantId ? communicationCommon.getIdentifierKind(participantId) : undefined;
|
3786
3790
|
const result = yield createView(context, internalContext, callId, participantIdKind, stream, options);
|
3787
3791
|
// We only need to declaratify the VideoStreamRendererView object for remote participants. Because the updateScalingMode only needs to be called on remote participant stream views.
|
@@ -4010,7 +4014,7 @@ const typingIndicatorStringStyle = react.mergeStyles({
|
|
4010
4014
|
wordBreak: 'break-word'
|
4011
4015
|
});
|
4012
4016
|
|
4013
|
-
var participantItem$d={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed participant",participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On hold"};var typingIndicator$d={singleUser:"{user} is typing ...",multipleUsers:"{users} are typing ...",multipleUsersAbbreviateOne:"{users} and 1 other are typing ...",multipleUsersAbbreviateMany:"{users} and {numOthers} others are typing ...",delimiter:", "};var sendBox$d={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",fileUploadsPendingError:"Uploading... Please wait.",removeFile:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed"};var messageStatusIndicator$d={deliveredAriaLabel:"Message sent",deliveredTooltipText:"Sent",seenAriaLabel:"Message seen by others",seenTooltipText:"Seen",readByTooltipText:"Read by {messageThreadReadCount} of {remoteParticipantsCount}",sendingAriaLabel:"Message sending",sendingTooltipText:"Sending",failedToSendAriaLabel:"Message failed to send",failedToSendTooltipText:"Failed to send"};var endCallButton$d={label:"Leave",tooltipContent:"Leave call"};var cameraButton$d={onLabel:"Turn off",offLabel:"Turn on",tooltipDisabledContent:"Camera is disabled",tooltipOnContent:"Turn off camera",tooltipOffContent:"Turn on camera",tooltipVideoLoadingContent:"Video is loading",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose camera",cameraButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Turn off camera and camera options",offSplitButtonAriaLabel:"Turn on camera and camera options",cameraActionTurnedOnAnnouncement:"Your camera has been turned on",cameraActionTurnedOffAnnouncement:"Your camera has been turned off"};var microphoneButton$d={onLabel:"Mute",offLabel:"Unmute",tooltipDisabledContent:"Microphone is disabled",tooltipOnContent:"Mute microphone",tooltipOffContent:"Unmute microphone",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose speaker",microphoneButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Mute microphone and audio options",offSplitButtonAriaLabel:"Unmute microphone and audio options",microphoneActionTurnedOnAnnouncement:"Your microphone has been turned on",microphoneActionTurnedOffAnnouncement:"Your microphone has been turned off"};var devicesButton$d={label:"Devices",tooltipContent:"Manage devices",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose camera",audioDeviceMenuTitle:"Audio Device",audioDeviceMenuTooltip:"Choose audio device",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose speaker"};var participantsButton$d={label:"People",tooltipContent:"Show participants",menuHeader:"In this call",participantsListButtonLabel:"{numParticipants} people",muteAllButtonLabel:"Mute all",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied"};var screenShareButton$d={onLabel:"Stop presenting",offLabel:"Present",tooltipDisabledContent:"Presenting is disabled",tooltipOnContent:"Presenting your screen",tooltipOffContent:"Present your screen"};var messageThread$d={yesterday:"Yesterday",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",participantJoined:"joined the chat.",participantLeft:"left the chat.",editMessage:"Edit",removeMessage:"Delete",resendMessage:"Try sending again",failToSendTag:"Failed to send",editedTag:"Edited",liveAuthorIntro:"{author} says",messageContentAriaText:"{author} said {message}",messageContentMineAriaText:"You said {message}",editBoxTextLimit:"Your message is over the limit of {limitNumber} characters",editBoxPlaceholderText:"Edit your message",newMessagesIndicator:"New messages",noDisplayNameSub:"No name",editBoxCancelButton:"Cancel",editBoxSubmitButton:"Submit",messageReadCount:"Read by {messageReadByCount} of {remoteParticipantsCount}",actionMenuMoreOptions:"More Options",downloadFile:"Download file"};var errorBar$d={unableToReachChatService:"You are offline",accessDenied:"Unable to access chat services - please check the user credentials provided",userNotInChatThread:"You are no longer in this chat thread",sendMessageNotInChatThread:"Failed to send message because you are no longer in this chat thread",sendMessageGeneric:"Failed to send message",callingNetworkFailure:"Troubling connecting call - you seem to be offline",startVideoGeneric:"Failed to start video",stopVideoGeneric:"Failed to stop video",muteGeneric:"Failed to mute microphone",unmuteGeneric:"Failed to unmute microphone",speakingWhileMuted:"Your microphone is muted",startScreenShareGeneric:"Failed to start screen sharing",stopScreenShareGeneric:"Failed to stop screen sharing",callNetworkQualityLow:"Network quality is low.",callNoSpeakerFound:"No speakers or headphones found. Connect an audio device to hear the call.",callNoMicrophoneFound:"No microphones found. Connect an audio input device.",callMicrophoneAccessDenied:"Unable to access microphone. Click the lock in the address bar to grant permission to this webpage.",callMicrophoneAccessDeniedSafari:"Unable to access microphone. Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",callMicrophoneMutedBySystem:"You are muted by your system.",callMicrophoneUnmutedBySystem:"Your microphone recovered and you were unmuted by your system.",callMacOsMicrophoneAccessDenied:"Unable to access microphone. Grant microphone permission in your macOS privacy settings.",callLocalVideoFreeze:"Network bandwidth is poor. Your video may appear paused for others on the call.",callCameraAccessDenied:"Unable to access camera. Click the lock in the address bar to grant permission to this webpage.",callCameraAccessDeniedSafari:"Unable to access camera. Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",callCameraAlreadyInUse:"Unable to access camera. It may already be in use by another application.",callVideoStoppedBySystem:"Your video has been stopped by your system.",callVideoRecoveredBySystem:"Your video has resumed.",callMacOsCameraAccessDenied:"MacOS is blocking access to your camera. Update your privacy settings to allow this browser to access your camera.",callMacOsScreenShareAccessDenied:"MacOS is blocking screen sharing. Update your privacy settings to allow this browser to record your screen.",dismissButtonAriaLabel:"Close",failedToJoinCallGeneric:"Failed to join call.",failedToJoinCallInvalidMeetingLink:"Unable to join Meeting. Invalid Link."};var videoGallery$d={screenIsBeingSharedMessage:"You are sharing your screen",screenShareLoadingMessage:"Loading {participant}'s screen",localVideoLabel:"You",localVideoCameraSwitcherLabel:"Switch camera",localVideoMovementLabel:"Movable Local Video Tile",localVideoSelectedDescription:"{cameraName} selected",displayNamePlaceholder:"Unnamed participant",fitRemoteParticipantToFrame:"Fit to frame",fillRemoteParticipantFrame:"Fill frame"};var dialpad$d={placeholderText:"Enter phone number",deleteButtonAriaLabel:"Delete"};var holdButton$d={onLabel:"Resume",offLabel:"Hold",tooltipOnContent:"Resume call",tooltipOffContent:"Hold call"};var videoTile$d={participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On hold"};var CameraAndMicrophoneDomainPermissionsRequest={primaryText:"Allow {appName} to use your camera and microphone",secondaryText:"This is so participants can see and hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera and microphone",ariaLabel:"Allow camera and microphone access"};var CameraDomainPermissionsRequest={primaryText:"Allow {appName} to use your camera",secondaryText:"This is so participants can see you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera",ariaLabel:"Allow camera access"};var MicrophoneDomainPermissionsRequest={primaryText:"Allow {appName} to use your microphone",secondaryText:"This is so participants can hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without microphone",ariaLabel:"Allow microphone access"};var CameraAndMicrophoneDomainPermissionsCheck={primaryText:"Checking for camera and microphone access",secondaryText:"Allow access if prompted. This is so participants can see and hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera and microphone",ariaLabel:"Checking for camera and microphone access. Allow access if prompted."};var CameraDomainPermissionsCheck={primaryText:"Checking for camera access",secondaryText:"Allow access if prompted. This is so participants can see you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera",ariaLabel:"Checking for camera access. Allow access if prompted."};var MicrophoneDomainPermissionsCheck={primaryText:"Checking for microphone access",secondaryText:"Allow access if prompted. This is so participants can hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without microphone",ariaLabel:"Checking for microphone access. Allow access if prompted."};var CameraAndMicrophoneDomainPermissionsDenied={primaryText:"Unable to access camera and microphone",secondaryText:"Click the lock icon in the address bar to grant microphone permissions to this webpage. A page refresh may be required.",primaryButtonText:"Continue without camera and microphone",linkText:"Need help? Get troubleshooting help"};var CameraAndMicrophoneDomainPermissionsDeniedSafari={primaryText:"Unable to access camera and microphone",secondaryText:"Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",primaryButtonText:"Continue without camera and microphone",linkText:"Need help? Get troubleshooting help"};var CameraDomainPermissionsDenied={primaryText:"Unable to access camera",secondaryText:"Click the lock icon in the address bar to grant camera permissions to this webpage. A page refresh may be required.",primaryButtonText:"Continue without camera",linkText:"Need help? Get troubleshooting help"};var MicrophoneDomainPermissionsDenied={primaryText:"Unable to access microphone",secondaryText:"Click the lock icon in the address bar to grant microphone permissions to this webpage. A page refresh may be required.",primaryButtonText:"Continue without microphone",linkText:"Need help? Get troubleshooting help"};var CameraDomainPermissionsDeniedSafari={primaryText:"Unable to access camera",secondaryText:"Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",primaryButtonText:"Continue without camera",linkText:"Need help? Get troubleshooting help"};var MicrophoneDomainPermissionsDeniedSafari={primaryText:"Unable to access microphone",secondaryText:"Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",primaryButtonText:"Continue without microphone",linkText:"Need help? Get troubleshooting help"};var UnsupportedBrowser$e={primaryText:"Browser not supported",secondaryText:"Please join this call using a compatible browser.",moreHelpLinkText:"See compatibility requirements"};var UnsupportedBrowserVersion$1={primaryText:"Browser update needed",secondaryText:"To ensure the best call possible, please update your browser and then try joining the call again.",moreHelpLinkText:"See compatibility requirements",continueAnywayButtonText:"Start call without updating"};var UnsupportedOperatingSystem$1={primaryText:"Operating system not supported",secondaryText:"Please join this call using a device with a compatible operating system.",moreHelpLinkText:"See compatibility requirements"};var BrowserPermissionDenied$d={primaryText:"Can't use your camera or microphone",secondaryText:"Your browser might not have access to your camera or microphone. To fix this, open System Preferences.",primaryButtonText:"Try again",linkText:"Need help? Get troubleshooting help"};var BrowserPermissionDeniedIOS$d={primaryText:"Allow microphone access to continue",secondaryText:"So other participants can hear you.",primaryButtonText:"Try again",imageAltText:"Microphone and camera device permission location for iOS",linkText:"Need help? Get troubleshooting help",step1Text:"Go to the Settings app",step2Text:"Scroll down to settings for this browser",step3Text:"Turn on Microphone (Camera optional)",step4Text:"Try joining the call again",step1DigitText:"1",step2DigitText:"2",step3DigitText:"3",step4DigitText:"4"};var en_US$1 = {participantItem:participantItem$d,typingIndicator:typingIndicator$d,sendBox:sendBox$d,messageStatusIndicator:messageStatusIndicator$d,endCallButton:endCallButton$d,cameraButton:cameraButton$d,microphoneButton:microphoneButton$d,devicesButton:devicesButton$d,participantsButton:participantsButton$d,screenShareButton:screenShareButton$d,messageThread:messageThread$d,errorBar:errorBar$d,videoGallery:videoGallery$d,dialpad:dialpad$d,holdButton:holdButton$d,videoTile:videoTile$d,CameraAndMicrophoneDomainPermissionsRequest:CameraAndMicrophoneDomainPermissionsRequest,CameraDomainPermissionsRequest:CameraDomainPermissionsRequest,MicrophoneDomainPermissionsRequest:MicrophoneDomainPermissionsRequest,CameraAndMicrophoneDomainPermissionsCheck:CameraAndMicrophoneDomainPermissionsCheck,CameraDomainPermissionsCheck:CameraDomainPermissionsCheck,MicrophoneDomainPermissionsCheck:MicrophoneDomainPermissionsCheck,CameraAndMicrophoneDomainPermissionsDenied:CameraAndMicrophoneDomainPermissionsDenied,CameraAndMicrophoneDomainPermissionsDeniedSafari:CameraAndMicrophoneDomainPermissionsDeniedSafari,CameraDomainPermissionsDenied:CameraDomainPermissionsDenied,MicrophoneDomainPermissionsDenied:MicrophoneDomainPermissionsDenied,CameraDomainPermissionsDeniedSafari:CameraDomainPermissionsDeniedSafari,MicrophoneDomainPermissionsDeniedSafari:MicrophoneDomainPermissionsDeniedSafari,UnsupportedBrowser:UnsupportedBrowser$e,UnsupportedBrowserVersion:UnsupportedBrowserVersion$1,UnsupportedOperatingSystem:UnsupportedOperatingSystem$1,BrowserPermissionDenied:BrowserPermissionDenied$d,BrowserPermissionDeniedIOS:BrowserPermissionDeniedIOS$d};
|
4017
|
+
var participantItem$d={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed participant",participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On hold"};var typingIndicator$d={singleUser:"{user} is typing ...",multipleUsers:"{users} are typing ...",multipleUsersAbbreviateOne:"{users} and 1 other are typing ...",multipleUsersAbbreviateMany:"{users} and {numOthers} others are typing ...",delimiter:", "};var sendBox$d={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",fileUploadsPendingError:"Uploading... Please wait.",removeFile:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed"};var messageStatusIndicator$d={deliveredAriaLabel:"Message sent",deliveredTooltipText:"Sent",seenAriaLabel:"Message seen by others",seenTooltipText:"Seen",readByTooltipText:"Read by {messageThreadReadCount} of {remoteParticipantsCount}",sendingAriaLabel:"Message sending",sendingTooltipText:"Sending",failedToSendAriaLabel:"Message failed to send",failedToSendTooltipText:"Failed to send"};var endCallButton$d={label:"Leave",tooltipContent:"Leave call"};var cameraButton$d={onLabel:"Turn off",offLabel:"Turn on",tooltipDisabledContent:"Camera is disabled",tooltipOnContent:"Turn off camera",tooltipOffContent:"Turn on camera",tooltipVideoLoadingContent:"Video is loading",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose camera",cameraButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Turn off camera and camera options",offSplitButtonAriaLabel:"Turn on camera and camera options",cameraActionTurnedOnAnnouncement:"Your camera has been turned on",cameraActionTurnedOffAnnouncement:"Your camera has been turned off"};var microphoneButton$d={onLabel:"Mute",offLabel:"Unmute",tooltipDisabledContent:"Microphone is disabled",tooltipOnContent:"Mute microphone",tooltipOffContent:"Unmute microphone",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose speaker",microphoneButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Mute microphone and audio options",offSplitButtonAriaLabel:"Unmute microphone and audio options",microphoneActionTurnedOnAnnouncement:"Your microphone has been turned on",microphoneActionTurnedOffAnnouncement:"Your microphone has been turned off"};var devicesButton$d={label:"Devices",tooltipContent:"Manage devices",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose camera",audioDeviceMenuTitle:"Audio Device",audioDeviceMenuTooltip:"Choose audio device",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose speaker"};var participantsButton$d={label:"People",tooltipContent:"Show participants",menuHeader:"In this call",participantsListButtonLabel:"{numParticipants} people",muteAllButtonLabel:"Mute all",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied"};var screenShareButton$d={onLabel:"Stop presenting",offLabel:"Present",tooltipDisabledContent:"Presenting is disabled",tooltipOnContent:"Presenting your screen",tooltipOffContent:"Present your screen"};var messageThread$d={yesterday:"Yesterday",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",participantJoined:"joined the chat.",participantLeft:"left the chat.",editMessage:"Edit",removeMessage:"Delete",resendMessage:"Try sending again",failToSendTag:"Failed to send",editedTag:"Edited",liveAuthorIntro:"{author} says",messageContentAriaText:"{author} said {message}",messageContentMineAriaText:"You said {message}",editBoxTextLimit:"Your message is over the limit of {limitNumber} characters",editBoxPlaceholderText:"Edit your message",newMessagesIndicator:"New messages",noDisplayNameSub:"No name",editBoxCancelButton:"Cancel",editBoxSubmitButton:"Submit",messageReadCount:"Read by {messageReadByCount} of {remoteParticipantsCount}",actionMenuMoreOptions:"More Options",downloadFile:"Download file"};var errorBar$d={unableToReachChatService:"You are offline",accessDenied:"Unable to access chat services - please check the user credentials provided",userNotInChatThread:"You are no longer in this chat thread",sendMessageNotInChatThread:"Failed to send message because you are no longer in this chat thread",sendMessageGeneric:"Failed to send message",callingNetworkFailure:"Troubling connecting call - you seem to be offline",startVideoGeneric:"Failed to start video",stopVideoGeneric:"Failed to stop video",muteGeneric:"Failed to mute microphone",unmuteGeneric:"Failed to unmute microphone",speakingWhileMuted:"Your microphone is muted",startScreenShareGeneric:"Failed to start screen sharing",stopScreenShareGeneric:"Failed to stop screen sharing",callNetworkQualityLow:"Network quality is low.",callNoSpeakerFound:"No speakers or headphones found. Connect an audio device to hear the call.",callNoMicrophoneFound:"No microphones found. Connect an audio input device.",callMicrophoneAccessDenied:"Unable to access microphone. Click the lock in the address bar to grant permission to this webpage.",callMicrophoneAccessDeniedSafari:"Unable to access microphone. Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",callMicrophoneMutedBySystem:"You are muted by your system.",callMicrophoneUnmutedBySystem:"Your microphone recovered and you were unmuted by your system.",callMacOsMicrophoneAccessDenied:"Unable to access microphone. Grant microphone permission in your macOS privacy settings.",callLocalVideoFreeze:"Network bandwidth is poor. Your video may appear paused for others on the call.",callCameraAccessDenied:"Unable to access camera. Click the lock in the address bar to grant permission to this webpage.",callCameraAccessDeniedSafari:"Unable to access camera. Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",callCameraAlreadyInUse:"Unable to access camera. It may already be in use by another application.",callVideoStoppedBySystem:"Your video has been stopped by your system.",callVideoRecoveredBySystem:"Your video has resumed.",callMacOsCameraAccessDenied:"MacOS is blocking access to your camera. Update your privacy settings to allow this browser to access your camera.",callMacOsScreenShareAccessDenied:"MacOS is blocking screen sharing. Update your privacy settings to allow this browser to record your screen.",dismissButtonAriaLabel:"Close",failedToJoinCallGeneric:"Failed to join call.",failedToJoinCallInvalidMeetingLink:"Unable to join Meeting. Invalid Link."};var videoGallery$d={screenIsBeingSharedMessage:"You are sharing your screen",screenShareLoadingMessage:"Loading {participant}'s screen",localVideoLabel:"You",localVideoCameraSwitcherLabel:"Switch camera",localVideoMovementLabel:"Movable Local Video Tile",localVideoSelectedDescription:"{cameraName} selected",displayNamePlaceholder:"Unnamed participant",fitRemoteParticipantToFrame:"Fit to frame",fillRemoteParticipantFrame:"Fill frame",pinParticipantForMe:"Pin for me",unpinParticipantForMe:"Unpin for me"};var dialpad$d={placeholderText:"Enter phone number",deleteButtonAriaLabel:"Delete"};var holdButton$d={onLabel:"Resume",offLabel:"Hold",tooltipOnContent:"Resume call",tooltipOffContent:"Hold call"};var videoTile$d={participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On hold"};var CameraAndMicrophoneDomainPermissionsRequest={primaryText:"Allow {appName} to use your camera and microphone",secondaryText:"This is so participants can see and hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera and microphone",ariaLabel:"Allow camera and microphone access"};var CameraDomainPermissionsRequest={primaryText:"Allow {appName} to use your camera",secondaryText:"This is so participants can see you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera",ariaLabel:"Allow camera access"};var MicrophoneDomainPermissionsRequest={primaryText:"Allow {appName} to use your microphone",secondaryText:"This is so participants can hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without microphone",ariaLabel:"Allow microphone access"};var CameraAndMicrophoneDomainPermissionsCheck={primaryText:"Checking for camera and microphone access",secondaryText:"Allow access if prompted. This is so participants can see and hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera and microphone",ariaLabel:"Checking for camera and microphone access. Allow access if prompted."};var CameraDomainPermissionsCheck={primaryText:"Checking for camera access",secondaryText:"Allow access if prompted. This is so participants can see you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera",ariaLabel:"Checking for camera access. Allow access if prompted."};var MicrophoneDomainPermissionsCheck={primaryText:"Checking for microphone access",secondaryText:"Allow access if prompted. This is so participants can hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without microphone",ariaLabel:"Checking for microphone access. Allow access if prompted."};var CameraAndMicrophoneDomainPermissionsDenied={primaryText:"Unable to access camera and microphone",secondaryText:"Click the lock icon in the address bar to grant microphone permissions to this webpage. A page refresh may be required.",primaryButtonText:"Continue without camera and microphone",linkText:"Need help? Get troubleshooting help"};var CameraAndMicrophoneDomainPermissionsDeniedSafari={primaryText:"Unable to access camera and microphone",secondaryText:"Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",primaryButtonText:"Continue without camera and microphone",linkText:"Need help? Get troubleshooting help"};var CameraDomainPermissionsDenied={primaryText:"Unable to access camera",secondaryText:"Click the lock icon in the address bar to grant camera permissions to this webpage. A page refresh may be required.",primaryButtonText:"Continue without camera",linkText:"Need help? Get troubleshooting help"};var MicrophoneDomainPermissionsDenied={primaryText:"Unable to access microphone",secondaryText:"Click the lock icon in the address bar to grant microphone permissions to this webpage. A page refresh may be required.",primaryButtonText:"Continue without microphone",linkText:"Need help? Get troubleshooting help"};var CameraDomainPermissionsDeniedSafari={primaryText:"Unable to access camera",secondaryText:"Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",primaryButtonText:"Continue without camera",linkText:"Need help? Get troubleshooting help"};var MicrophoneDomainPermissionsDeniedSafari={primaryText:"Unable to access microphone",secondaryText:"Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",primaryButtonText:"Continue without microphone",linkText:"Need help? Get troubleshooting help"};var UnsupportedBrowser$e={primaryText:"Browser not supported",secondaryText:"Please join this call using a compatible browser.",moreHelpLinkText:"See compatibility requirements"};var UnsupportedBrowserVersion$1={primaryText:"Browser update needed",secondaryText:"To ensure the best call possible, please update your browser and then try joining the call again.",moreHelpLinkText:"See compatibility requirements",continueAnywayButtonText:"Start call without updating"};var UnsupportedOperatingSystem$1={primaryText:"Operating system not supported",secondaryText:"Please join this call using a device with a compatible operating system.",moreHelpLinkText:"See compatibility requirements"};var BrowserPermissionDenied$d={primaryText:"Can't use your camera or microphone",secondaryText:"Your browser might not have access to your camera or microphone. To fix this, open System Preferences.",primaryButtonText:"Try again",linkText:"Need help? Get troubleshooting help"};var BrowserPermissionDeniedIOS$d={primaryText:"Allow microphone access to continue",secondaryText:"So other participants can hear you.",primaryButtonText:"Try again",imageAltText:"Microphone and camera device permission location for iOS",linkText:"Need help? Get troubleshooting help",step1Text:"Go to the Settings app",step2Text:"Scroll down to settings for this browser",step3Text:"Turn on Microphone (Camera optional)",step4Text:"Try joining the call again",step1DigitText:"1",step2DigitText:"2",step3DigitText:"3",step4DigitText:"4"};var en_US$1 = {participantItem:participantItem$d,typingIndicator:typingIndicator$d,sendBox:sendBox$d,messageStatusIndicator:messageStatusIndicator$d,endCallButton:endCallButton$d,cameraButton:cameraButton$d,microphoneButton:microphoneButton$d,devicesButton:devicesButton$d,participantsButton:participantsButton$d,screenShareButton:screenShareButton$d,messageThread:messageThread$d,errorBar:errorBar$d,videoGallery:videoGallery$d,dialpad:dialpad$d,holdButton:holdButton$d,videoTile:videoTile$d,CameraAndMicrophoneDomainPermissionsRequest:CameraAndMicrophoneDomainPermissionsRequest,CameraDomainPermissionsRequest:CameraDomainPermissionsRequest,MicrophoneDomainPermissionsRequest:MicrophoneDomainPermissionsRequest,CameraAndMicrophoneDomainPermissionsCheck:CameraAndMicrophoneDomainPermissionsCheck,CameraDomainPermissionsCheck:CameraDomainPermissionsCheck,MicrophoneDomainPermissionsCheck:MicrophoneDomainPermissionsCheck,CameraAndMicrophoneDomainPermissionsDenied:CameraAndMicrophoneDomainPermissionsDenied,CameraAndMicrophoneDomainPermissionsDeniedSafari:CameraAndMicrophoneDomainPermissionsDeniedSafari,CameraDomainPermissionsDenied:CameraDomainPermissionsDenied,MicrophoneDomainPermissionsDenied:MicrophoneDomainPermissionsDenied,CameraDomainPermissionsDeniedSafari:CameraDomainPermissionsDeniedSafari,MicrophoneDomainPermissionsDeniedSafari:MicrophoneDomainPermissionsDeniedSafari,UnsupportedBrowser:UnsupportedBrowser$e,UnsupportedBrowserVersion:UnsupportedBrowserVersion$1,UnsupportedOperatingSystem:UnsupportedOperatingSystem$1,BrowserPermissionDenied:BrowserPermissionDenied$d,BrowserPermissionDeniedIOS:BrowserPermissionDeniedIOS$d};
|
4014
4018
|
|
4015
4019
|
var participantItem$c={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed participant",participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On hold"};var typingIndicator$c={singleUser:"{user} is typing ...",multipleUsers:"{users} are typing ...",multipleUsersAbbreviateOne:"{users} and 1 other are typing ...",multipleUsersAbbreviateMany:"{users} and {numOthers} others are typing ...",delimiter:", "};var sendBox$c={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",fileUploadsPendingError:"Uploading... Please wait.",removeFile:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed"};var messageStatusIndicator$c={deliveredAriaLabel:"Message sent",deliveredTooltipText:"Sent",seenAriaLabel:"Message seen by others",seenTooltipText:"Seen",readByTooltipText:"Read by {messageThreadReadCount} of {remoteParticipantsCount}",sendingAriaLabel:"Message sending",sendingTooltipText:"Sending",failedToSendAriaLabel:"Message failed to send",failedToSendTooltipText:"Failed to send"};var endCallButton$c={label:"Leave",tooltipContent:"Leave call"};var cameraButton$c={onLabel:"Turn off",offLabel:"Turn on",tooltipDisabledContent:"Camera is disabled",tooltipOnContent:"Turn off camera",tooltipOffContent:"Turn on camera",tooltipVideoLoadingContent:"Video is loading",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose camera",cameraButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Turn off camera and camera options",offSplitButtonAriaLabel:"Turn on camera and camera options",cameraActionTurnedOnAnnouncement:"Your camera has been turned on",cameraActionTurnedOffAnnouncement:"Your camera has been turned off"};var microphoneButton$c={onLabel:"Mute",offLabel:"Unmute",tooltipDisabledContent:"Microphone is disabled",tooltipOnContent:"Mute microphone",tooltipOffContent:"Unmute microphone",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose speaker",microphoneButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Mute microphone and audio options",offSplitButtonAriaLabel:"Unmute microphone and audio options",microphoneActionTurnedOnAnnouncement:"Your microphone has been turned on",microphoneActionTurnedOffAnnouncement:"Your microphone has been turned off"};var devicesButton$c={label:"Devices",tooltipContent:"Manage devices",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose camera",audioDeviceMenuTitle:"Audio Device",audioDeviceMenuTooltip:"Choose audio device",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose speaker"};var participantsButton$c={label:"People",tooltipContent:"Show participants",menuHeader:"In this call",participantsListButtonLabel:"{numParticipants} people",muteAllButtonLabel:"Mute all",copyInviteLinkButtonLabel:"Copy invite link"};var screenShareButton$c={onLabel:"Stop presenting",offLabel:"Present",tooltipDisabledContent:"Presenting is disabled",tooltipOnContent:"Presenting your screen",tooltipOffContent:"Present your screen"};var messageThread$c={yesterday:"Yesterday",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",participantJoined:"joined the chat.",participantLeft:"left the chat.",editMessage:"Edit",removeMessage:"Delete",resendMessage:"Try sending again",failToSendTag:"Failed to send",editedTag:"Edited",liveAuthorIntro:"{author} says",messageContentAriaText:"{author} said {message}",messageContentMineAriaText:"You said {message}",editBoxTextLimit:"Your message is over the limit of {limitNumber} characters",editBoxPlaceholderText:"Edit your message",newMessagesIndicator:"New messages",noDisplayNameSub:"No name",editBoxCancelButton:"Cancel",editBoxSubmitButton:"Submit",messageReadCount:"Read by {messageReadByCount} of {remoteParticipantsCount}",actionMenuMoreOptions:"More Options",downloadFile:"Download file"};var errorBar$c={unableToReachChatService:"You are offline",accessDenied:"Unable to access chat services - please check the user credentials provided",userNotInChatThread:"You are no longer in this chat thread",sendMessageNotInChatThread:"Failed to send message because you are no longer in this chat thread",sendMessageGeneric:"Failed to send message",callingNetworkFailure:"Troubling connecting call - you seem to be offline",startVideoGeneric:"Failed to start video",stopVideoGeneric:"Failed to stop video",muteGeneric:"Failed to mute microphone",unmuteGeneric:"Failed to unmute microphone",speakingWhileMuted:"Your microphone is muted",startScreenShareGeneric:"Failed to start screen sharing",stopScreenShareGeneric:"Failed to stop screen sharing",callNetworkQualityLow:"Network quality is low.",callNoSpeakerFound:"No speakers or headphones found. Connect an audio device to hear the call.",callNoMicrophoneFound:"No microphones found. Connect an audio input device.",callMicrophoneAccessDenied:"Unable to access microphone. Click the lock in the address bar to grant permission to this webpage.",callMicrophoneMutedBySystem:"You are muted by your system.",callMicrophoneUnmutedBySystem:"Your microphone recovered and you were unmuted by your system.",callMacOsMicrophoneAccessDenied:"Unable to access microphone. Grant microphone permission in your macOS privacy settings.",callLocalVideoFreeze:"Network bandwidth is poor. Your video may appear paused for others on the call.",callCameraAccessDenied:"Unable to access camera. Click the lock in the address bar to grant permission to this webpage.",callCameraAlreadyInUse:"Unable to access camera. It may already be in use by another application.",callVideoStoppedBySystem:"Your video has been stopped by your system.",callVideoRecoveredBySystem:"Your video has resumed.",callMacOsCameraAccessDenied:"MacOS is blocking access to your camera. Update your privacy settings to allow this browser to access your camera.",callMacOsScreenShareAccessDenied:"MacOS is blocking screen sharing. Update your privacy settings to allow this browser to record your screen.",dismissButtonAriaLabel:"Close",failedToJoinCallGeneric:"Failed to join call.",failedToJoinCallInvalidMeetingLink:"Unable to join Meeting. Invalid Link."};var videoGallery$c={screenIsBeingSharedMessage:"You are sharing your screen",screenShareLoadingMessage:"Loading {participant}'s screen",localVideoLabel:"You",localVideoCameraSwitcherLabel:"Switch camera",localVideoMovementLabel:"Movable Local Video Tile",localVideoSelectedDescription:"{cameraName} selected",displayNamePlaceholder:"Unnamed participant"};var dialpad$c={placeholderText:"Enter phone number",deleteButtonAriaLabel:"Delete"};var holdButton$c={onLabel:"Resume",offLabel:"Hold",tooltipOnContent:"Resume call",tooltipOffContent:"Hold call"};var videoTile$c={participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On hold"};var DomainPermissions$c={primaryText:"Allow {appName} to use your camera and microphone",secondaryText:"This is so participants can see and hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Allow Access"};var UnsupportedBrowser$d={primaryText:"Browser not supported",secondaryText:"Please join this call using a compatible browser.",moreHelpLink:"More help"};var BrowserPermissionDenied$c={primaryText:"Can't use your camera or microphone",secondaryText:"Your browser might not have access to your camera or microphone. To fix this, open System Preferences.",primaryButtonText:"Try again",linkText:"Need help? Get troubleshooting help"};var BrowserPermissionDeniedIOS$c={primaryText:"Allow microphone access to continue",secondaryText:"So other participants can hear you.",primaryButtonText:"Try again",imageAltText:"Microphone and camera device permission location for iOS",linkText:"Need help? Get troubleshooting help",step1Text:"Go to the Settings app",step2Text:"Scroll down to settings for this browser",step3Text:"Turn on Microphone (Camera optional)",step4Text:"Try joining the call again",step1DigitText:"1",step2DigitText:"2",step3DigitText:"3",step4DigitText:"4"};var en_GB$1 = {participantItem:participantItem$c,typingIndicator:typingIndicator$c,sendBox:sendBox$c,messageStatusIndicator:messageStatusIndicator$c,endCallButton:endCallButton$c,cameraButton:cameraButton$c,microphoneButton:microphoneButton$c,devicesButton:devicesButton$c,participantsButton:participantsButton$c,screenShareButton:screenShareButton$c,messageThread:messageThread$c,errorBar:errorBar$c,videoGallery:videoGallery$c,dialpad:dialpad$c,holdButton:holdButton$c,videoTile:videoTile$c,DomainPermissions:DomainPermissions$c,UnsupportedBrowser:UnsupportedBrowser$d,BrowserPermissionDenied:BrowserPermissionDenied$c,BrowserPermissionDeniedIOS:BrowserPermissionDeniedIOS$c};
|
4016
4020
|
|
@@ -5159,7 +5163,11 @@ const DEFAULT_COMPONENT_ICONS = {
|
|
5159
5163
|
/* @conditional-compile-remove(pinned-participants) */
|
5160
5164
|
VideoTileScaleFit: React__default['default'].createElement(reactIcons.ScaleFit20Regular, null),
|
5161
5165
|
/* @conditional-compile-remove(pinned-participants) */
|
5162
|
-
VideoTileScaleFill: React__default['default'].createElement(reactIcons.ScaleFill20Regular, null)
|
5166
|
+
VideoTileScaleFill: React__default['default'].createElement(reactIcons.ScaleFill20Regular, null),
|
5167
|
+
/* @conditional-compile-remove(pinned-participants) */
|
5168
|
+
PinParticipant: React__default['default'].createElement(reactIcons.Pin20Regular, null),
|
5169
|
+
/* @conditional-compile-remove(pinned-participants) */
|
5170
|
+
UnpinParticipant: React__default['default'].createElement(reactIcons.PinOff20Regular, null)
|
5163
5171
|
};
|
5164
5172
|
|
5165
5173
|
// Copyright (c) Microsoft Corporation.
|
@@ -6591,7 +6599,7 @@ const chatMessageActionMenuProps = (menuProps) => {
|
|
6591
6599
|
return actionMenuProps;
|
6592
6600
|
};
|
6593
6601
|
|
6594
|
-
var __awaiter$
|
6602
|
+
var __awaiter$p = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
6595
6603
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
6596
6604
|
return new (P || (P = Promise))(function (resolve, reject) {
|
6597
6605
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
@@ -6616,7 +6624,7 @@ const _FileDownloadCards = (props) => {
|
|
6616
6624
|
var _a, _b;
|
6617
6625
|
return (_b = (_a = props.strings) === null || _a === void 0 ? void 0 : _a.downloadFile) !== null && _b !== void 0 ? _b : localeStrings.downloadFile;
|
6618
6626
|
}, [(_a = props.strings) === null || _a === void 0 ? void 0 : _a.downloadFile, localeStrings.downloadFile]);
|
6619
|
-
const fileDownloadHandler = React.useCallback((userId, file) => __awaiter$
|
6627
|
+
const fileDownloadHandler = React.useCallback((userId, file) => __awaiter$p(void 0, void 0, void 0, function* () {
|
6620
6628
|
if (!props.downloadHandler) {
|
6621
6629
|
window.open(file.url, '_blank', 'noopener,noreferrer');
|
6622
6630
|
}
|
@@ -6764,7 +6772,7 @@ const ChatMessageComponentAsMessageBubble = React__default['default'].memo(Messa
|
|
6764
6772
|
|
6765
6773
|
// Copyright (c) Microsoft Corporation.
|
6766
6774
|
// Licensed under the MIT license.
|
6767
|
-
var __awaiter$
|
6775
|
+
var __awaiter$o = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
6768
6776
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
6769
6777
|
return new (P || (P = Promise))(function (resolve, reject) {
|
6770
6778
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
@@ -6798,7 +6806,7 @@ const ChatMessageComponent = (props) => {
|
|
6798
6806
|
return React__default['default'].createElement(React__default['default'].Fragment, null);
|
6799
6807
|
}
|
6800
6808
|
else if (isEditing) {
|
6801
|
-
return (React__default['default'].createElement(ChatMessageComponentAsEditBox, { message: message, inlineEditButtons: props.inlineAcceptRejectEditButtons, strings: props.strings, onSubmit: (text, metadata, options) => __awaiter$
|
6809
|
+
return (React__default['default'].createElement(ChatMessageComponentAsEditBox, { message: message, inlineEditButtons: props.inlineAcceptRejectEditButtons, strings: props.strings, onSubmit: (text, metadata, options) => __awaiter$o(void 0, void 0, void 0, function* () {
|
6802
6810
|
props.onUpdateMessage &&
|
6803
6811
|
props.message.messageId &&
|
6804
6812
|
(yield props.onUpdateMessage(props.message.messageId, text, metadata, options));
|
@@ -6897,7 +6905,7 @@ const getParticipantsWhoHaveReadMessage = (message, readReceiptsBySenderId) => {
|
|
6897
6905
|
|
6898
6906
|
// Copyright (c) Microsoft Corporation.
|
6899
6907
|
// Licensed under the MIT license.
|
6900
|
-
var __awaiter$
|
6908
|
+
var __awaiter$n = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
6901
6909
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
6902
6910
|
return new (P || (P = Promise))(function (resolve, reject) {
|
6903
6911
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
@@ -7125,7 +7133,7 @@ const MessageThread = (props) => {
|
|
7125
7133
|
setChatMessagesInitialized(chatMessagesInitialized);
|
7126
7134
|
};
|
7127
7135
|
// we try to only send those message status if user is scrolled to the bottom.
|
7128
|
-
const sendMessageStatusIfAtBottom = React.useCallback(() => __awaiter$
|
7136
|
+
const sendMessageStatusIfAtBottom = React.useCallback(() => __awaiter$n(void 0, void 0, void 0, function* () {
|
7129
7137
|
if (!isAtBottomOfScrollRef.current ||
|
7130
7138
|
!document.hasFocus() ||
|
7131
7139
|
!messagesRef.current ||
|
@@ -7176,7 +7184,7 @@ const MessageThread = (props) => {
|
|
7176
7184
|
setIsAtBottomOfScrollRef(atBottom);
|
7177
7185
|
}, [scrollToBottom, sendMessageStatusIfAtBottom]);
|
7178
7186
|
// Infinite scrolling + threadInitialize function
|
7179
|
-
const fetchNewMessageWhenAtTop = React.useCallback(() => __awaiter$
|
7187
|
+
const fetchNewMessageWhenAtTop = React.useCallback(() => __awaiter$n(void 0, void 0, void 0, function* () {
|
7180
7188
|
if (!isLoadingChatMessagesRef.current) {
|
7181
7189
|
if (onLoadPreviousChatMessages) {
|
7182
7190
|
isLoadingChatMessagesRef.current = true;
|
@@ -7941,7 +7949,7 @@ const useRemoteVideoStreamLifecycleMaintainer = (props) => {
|
|
7941
7949
|
*/
|
7942
7950
|
const useVideoTileContextualMenuProps = (props) => {
|
7943
7951
|
var _a;
|
7944
|
-
const { view, strings } = props;
|
7952
|
+
const { view, strings, isPinned, onPinParticipant, onUnpinParticipant } = props;
|
7945
7953
|
const scalingMode = React.useMemo(() => {
|
7946
7954
|
var _a;
|
7947
7955
|
/* @conditional-compile-remove(pinned-participants) */
|
@@ -7952,6 +7960,26 @@ const useVideoTileContextualMenuProps = (props) => {
|
|
7952
7960
|
]);
|
7953
7961
|
const contextualMenuProps = React.useMemo(() => {
|
7954
7962
|
const items = [];
|
7963
|
+
if (isPinned !== undefined) {
|
7964
|
+
if (isPinned && onUnpinParticipant && (strings === null || strings === void 0 ? void 0 : strings.unpinParticipantForMe)) {
|
7965
|
+
items.push({
|
7966
|
+
key: 'unpin',
|
7967
|
+
text: strings.unpinParticipantForMe,
|
7968
|
+
iconProps: { iconName: 'UnpinParticipant', styles: { root: { lineHeight: '1rem' } } },
|
7969
|
+
onClick: () => onUnpinParticipant === null || onUnpinParticipant === void 0 ? void 0 : onUnpinParticipant(props.remoteParticipant.userId),
|
7970
|
+
'data-ui-id': 'video-tile-unpin-participant-button'
|
7971
|
+
});
|
7972
|
+
}
|
7973
|
+
if (!isPinned && onPinParticipant && (strings === null || strings === void 0 ? void 0 : strings.pinParticipantForMe)) {
|
7974
|
+
items.push({
|
7975
|
+
key: 'pin',
|
7976
|
+
text: strings.pinParticipantForMe,
|
7977
|
+
iconProps: { iconName: 'PinParticipant', styles: { root: { lineHeight: '1rem' } } },
|
7978
|
+
onClick: () => onPinParticipant === null || onPinParticipant === void 0 ? void 0 : onPinParticipant(props.remoteParticipant.userId),
|
7979
|
+
'data-ui-id': 'video-tile-pin-participant-button'
|
7980
|
+
});
|
7981
|
+
}
|
7982
|
+
}
|
7955
7983
|
if (scalingMode) {
|
7956
7984
|
if (scalingMode === 'Crop' && (strings === null || strings === void 0 ? void 0 : strings.fitRemoteParticipantToFrame)) {
|
7957
7985
|
items.push({
|
@@ -7980,7 +8008,7 @@ const useVideoTileContextualMenuProps = (props) => {
|
|
7980
8008
|
return undefined;
|
7981
8009
|
}
|
7982
8010
|
return { items };
|
7983
|
-
}, [scalingMode, strings, view]);
|
8011
|
+
}, [scalingMode, strings, view, isPinned, onPinParticipant, onUnpinParticipant, props.remoteParticipant.userId]);
|
7984
8012
|
return contextualMenuProps;
|
7985
8013
|
};
|
7986
8014
|
|
@@ -8364,7 +8392,7 @@ const bracketedParticipantString = (participantString, withBrackets) => {
|
|
8364
8392
|
*/
|
8365
8393
|
const _RemoteVideoTile = React__default['default'].memo((props) => {
|
8366
8394
|
const { isAvailable, isReceiving = true, // default to true to prevent any breaking change
|
8367
|
-
isScreenSharingOn, onCreateRemoteStreamView, onDisposeRemoteStreamView, remoteVideoViewOptions, renderElement, userId, onRenderAvatar, showMuteIndicator, remoteParticipant, participantState, showRemoteVideoTileContextualMenu = true } = props;
|
8395
|
+
isScreenSharingOn, onCreateRemoteStreamView, onDisposeRemoteStreamView, remoteVideoViewOptions, renderElement, userId, onRenderAvatar, showMuteIndicator, remoteParticipant, participantState, showRemoteVideoTileContextualMenu = true, isPinned, onPinParticipant, onUnpinParticipant } = props;
|
8368
8396
|
const remoteVideoStreamProps = React.useMemo(() => ({
|
8369
8397
|
isMirrored: remoteVideoViewOptions === null || remoteVideoViewOptions === void 0 ? void 0 : remoteVideoViewOptions.isMirrored,
|
8370
8398
|
isScreenSharingOn,
|
@@ -8392,7 +8420,10 @@ const _RemoteVideoTile = React__default['default'].memo((props) => {
|
|
8392
8420
|
remoteParticipant,
|
8393
8421
|
view: createVideoStreamResult === null || createVideoStreamResult === void 0 ? void 0 : createVideoStreamResult.view,
|
8394
8422
|
/* @conditional-compile-remove(pinned-participants) */
|
8395
|
-
strings: Object.assign({}, props.strings)
|
8423
|
+
strings: Object.assign({}, props.strings),
|
8424
|
+
isPinned,
|
8425
|
+
onPinParticipant,
|
8426
|
+
onUnpinParticipant
|
8396
8427
|
});
|
8397
8428
|
const videoTileContextualMenuProps = React.useMemo(() => {
|
8398
8429
|
if (!showRemoteVideoTileContextualMenu) {
|
@@ -8413,7 +8444,9 @@ const _RemoteVideoTile = React__default['default'].memo((props) => {
|
|
8413
8444
|
return (React__default['default'].createElement(VideoTile, Object.assign({ key: userId, userId: userId, renderElement: renderVideoStreamElement, displayName: remoteParticipant.displayName, onRenderPlaceholder: onRenderAvatar, isMuted: remoteParticipant.isMuted, isSpeaking: remoteParticipant.isSpeaking, showMuteIndicator: showMuteIndicator, personaMinSize: props.personaMinSize, showLabel: props.showLabel,
|
8414
8445
|
/* @conditional-compile-remove(one-to-n-calling) */
|
8415
8446
|
/* @conditional-compile-remove(PSTN-calls) */
|
8416
|
-
participantState: participantState }, videoTileContextualMenuProps
|
8447
|
+
participantState: participantState }, videoTileContextualMenuProps, {
|
8448
|
+
/* @conditional-compile-remove(pinned-participants) */
|
8449
|
+
isPinned: props.isPinned })));
|
8417
8450
|
});
|
8418
8451
|
const videoTileContextualMenuPropsTrampoline = (contextualMenuProps) => {
|
8419
8452
|
if (!contextualMenuProps) {
|
@@ -8653,6 +8686,164 @@ const rootLayoutStyle$1 = {
|
|
8653
8686
|
root: { position: 'relative', height: '100%', width: '100%', padding: '0.5rem' }
|
8654
8687
|
};
|
8655
8688
|
|
8689
|
+
/**
|
8690
|
+
* Calculates the participants that should be rendered based on the list of dominant
|
8691
|
+
* speakers and currently rendered participants in a call.
|
8692
|
+
* @param args - SmartDominantSpeakerParticipantsArgs
|
8693
|
+
* @returns VideoGalleryRemoteParticipant[] {@link @azure/communication-react#VideoGalleryRemoteParticipant}
|
8694
|
+
*/
|
8695
|
+
const smartDominantSpeakerParticipants = (args) => {
|
8696
|
+
const { participants, dominantSpeakers = [], lastVisibleParticipants = [], maxDominantSpeakers } = args;
|
8697
|
+
// Don't apply any logic if total number of video streams is less than max dominant speakers.
|
8698
|
+
if (participants.length <= maxDominantSpeakers) {
|
8699
|
+
return participants;
|
8700
|
+
}
|
8701
|
+
const participantsMap = participantsById(participants);
|
8702
|
+
// Only use the Max allowed dominant speakers that exist in participants
|
8703
|
+
const dominantSpeakerIds = Array.from(new Set(dominantSpeakers).values())
|
8704
|
+
.filter((id) => !!participantsMap[id])
|
8705
|
+
.slice(0, maxDominantSpeakers);
|
8706
|
+
const lastVisibleParticipantIds = lastVisibleParticipants.map((p) => p.userId);
|
8707
|
+
const newVisibleParticipantIds = lastVisibleParticipants.map((p) => p.userId).slice(0, maxDominantSpeakers);
|
8708
|
+
const newDominantSpeakerIds = dominantSpeakerIds.filter((id) => !newVisibleParticipantIds.includes(id));
|
8709
|
+
// Remove participants that are no longer dominant and replace them with new dominant speakers.
|
8710
|
+
for (let index = 0; index < maxDominantSpeakers; index++) {
|
8711
|
+
const newVisibleParticipantId = newVisibleParticipantIds[index];
|
8712
|
+
if (newVisibleParticipantId === undefined || !dominantSpeakerIds.includes(newVisibleParticipantId)) {
|
8713
|
+
const replacement = newDominantSpeakerIds.shift();
|
8714
|
+
if (!replacement) {
|
8715
|
+
break;
|
8716
|
+
}
|
8717
|
+
newVisibleParticipantIds[index] = replacement;
|
8718
|
+
}
|
8719
|
+
}
|
8720
|
+
const removedVisibleParticipantIds = lastVisibleParticipantIds.filter((p) => !newVisibleParticipantIds.includes(p));
|
8721
|
+
removedVisibleParticipantIds.forEach((p) => newVisibleParticipantIds.push(p));
|
8722
|
+
const newVisibleParticipantIdSet = new Set(newVisibleParticipantIds);
|
8723
|
+
const leftoverParticipants = participants.filter((p) => !newVisibleParticipantIdSet.has(p.userId));
|
8724
|
+
leftoverParticipants.forEach((p) => {
|
8725
|
+
newVisibleParticipantIds.push(p.userId);
|
8726
|
+
});
|
8727
|
+
// newVisibleParticipantIds can contain identifiers for participants that are no longer in the call. So we ignore those IDs.
|
8728
|
+
const newVisibleParticipants = newVisibleParticipantIds
|
8729
|
+
.map((participantId) => participantsMap[participantId])
|
8730
|
+
.filter((p) => !!p);
|
8731
|
+
return newVisibleParticipants;
|
8732
|
+
};
|
8733
|
+
const participantsById = (participants) => {
|
8734
|
+
const response = {};
|
8735
|
+
participants.forEach((p) => (response[p.userId] = p));
|
8736
|
+
return response;
|
8737
|
+
};
|
8738
|
+
|
8739
|
+
// Copyright (c) Microsoft Corporation.
|
8740
|
+
const DEFAULT_MAX_REMOTE_VIDEOSTREAMS = 4;
|
8741
|
+
const DEFAULT_MAX_AUDIO_DOMINANT_SPEAKERS = 6;
|
8742
|
+
/**
|
8743
|
+
* @private
|
8744
|
+
*/
|
8745
|
+
const useFloatingLocalVideoLayout = (props) => {
|
8746
|
+
var _a, _b;
|
8747
|
+
const visibleVideoParticipants = React.useRef([]);
|
8748
|
+
const visibleAudioParticipants = React.useRef([]);
|
8749
|
+
const { remoteParticipants, dominantSpeakers, maxRemoteVideoStreams = DEFAULT_MAX_REMOTE_VIDEOSTREAMS, maxAudioDominantSpeakers = DEFAULT_MAX_AUDIO_DOMINANT_SPEAKERS, isScreenShareActive = false } = props;
|
8750
|
+
visibleVideoParticipants.current = smartDominantSpeakerParticipants({
|
8751
|
+
participants: (_a = remoteParticipants === null || remoteParticipants === void 0 ? void 0 : remoteParticipants.filter((p) => { var _a; return (_a = p.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable; })) !== null && _a !== void 0 ? _a : [],
|
8752
|
+
dominantSpeakers,
|
8753
|
+
lastVisibleParticipants: visibleVideoParticipants.current,
|
8754
|
+
maxDominantSpeakers: maxRemoteVideoStreams
|
8755
|
+
}).slice(0, maxRemoteVideoStreams);
|
8756
|
+
const visibleVideoParticipantsSet = new Set(visibleVideoParticipants.current.map((p) => p.userId));
|
8757
|
+
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
|
8758
|
+
const callingParticipants = remoteParticipants.filter((p) => p.state === ('Connecting' ));
|
8759
|
+
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
|
8760
|
+
const callingParticipantsSet = new Set(callingParticipants.map((p) => p.userId));
|
8761
|
+
visibleAudioParticipants.current = smartDominantSpeakerParticipants({
|
8762
|
+
participants: (_b = remoteParticipants === null || remoteParticipants === void 0 ? void 0 : remoteParticipants.filter((p) => !visibleVideoParticipantsSet.has(p.userId) &&
|
8763
|
+
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ !callingParticipantsSet.has(p.userId))) !== null && _b !== void 0 ? _b : [],
|
8764
|
+
dominantSpeakers,
|
8765
|
+
lastVisibleParticipants: visibleAudioParticipants.current,
|
8766
|
+
maxDominantSpeakers: maxAudioDominantSpeakers
|
8767
|
+
});
|
8768
|
+
const getGridParticipants = React.useCallback(() => {
|
8769
|
+
if (isScreenShareActive) {
|
8770
|
+
return [];
|
8771
|
+
}
|
8772
|
+
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
|
8773
|
+
return visibleVideoParticipants.current.length > 0
|
8774
|
+
? visibleVideoParticipants.current
|
8775
|
+
: visibleAudioParticipants.current.concat(callingParticipants);
|
8776
|
+
}, [
|
8777
|
+
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ callingParticipants,
|
8778
|
+
isScreenShareActive
|
8779
|
+
]);
|
8780
|
+
const gridParticipants = getGridParticipants();
|
8781
|
+
const getHorizontalGalleryRemoteParticipants = React.useCallback(() => {
|
8782
|
+
if (isScreenShareActive) {
|
8783
|
+
// If screen sharing is active, assign video and audio participants as horizontal gallery participants
|
8784
|
+
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
|
8785
|
+
return visibleVideoParticipants.current.concat(visibleAudioParticipants.current.concat(callingParticipants));
|
8786
|
+
}
|
8787
|
+
else {
|
8788
|
+
// If screen sharing is not active, then assign all video tiles as grid tiles.
|
8789
|
+
// If there are no video tiles, then assign audio tiles as grid tiles.
|
8790
|
+
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
|
8791
|
+
return visibleVideoParticipants.current.length > 0
|
8792
|
+
? visibleAudioParticipants.current.concat(callingParticipants)
|
8793
|
+
: [];
|
8794
|
+
}
|
8795
|
+
}, [
|
8796
|
+
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ callingParticipants,
|
8797
|
+
isScreenShareActive
|
8798
|
+
]);
|
8799
|
+
const horizontalGalleryParticipants = getHorizontalGalleryRemoteParticipants();
|
8800
|
+
return { gridParticipants, horizontalGalleryParticipants };
|
8801
|
+
};
|
8802
|
+
/**
|
8803
|
+
* @private
|
8804
|
+
*/
|
8805
|
+
const usePinnedParticipantLayout = (props) => {
|
8806
|
+
// map remote participants by userId
|
8807
|
+
const remoteParticipantMap = props.remoteParticipants.reduce((map, remoteParticipant) => {
|
8808
|
+
map[remoteParticipant.userId] = remoteParticipant;
|
8809
|
+
return map;
|
8810
|
+
}, {});
|
8811
|
+
// count pinned participants with video
|
8812
|
+
let pinnedParticipantsWithVideoOnCount = 0;
|
8813
|
+
// get pinned participants in the same order of pinned participant user ids using remoteParticipantMap
|
8814
|
+
const pinnedParticipants = [];
|
8815
|
+
props.pinnedParticipantUserIds.forEach((id) => {
|
8816
|
+
var _a;
|
8817
|
+
const pinnedParticipant = remoteParticipantMap[id];
|
8818
|
+
if (pinnedParticipant) {
|
8819
|
+
pinnedParticipants.push(pinnedParticipant);
|
8820
|
+
if ((_a = pinnedParticipant.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable) {
|
8821
|
+
pinnedParticipantsWithVideoOnCount++;
|
8822
|
+
}
|
8823
|
+
}
|
8824
|
+
});
|
8825
|
+
// get unpinned participants by filtering all remote participants using a set of pinned participant user ids
|
8826
|
+
const pinnedParticipantUserIdSet = new Set(props.pinnedParticipantUserIds);
|
8827
|
+
const unpinnedParticipants = props.remoteParticipants.filter((p) => !pinnedParticipantUserIdSet.has(p.userId));
|
8828
|
+
const floatingLocalVideoLayoutProps = Object.assign(Object.assign({}, props), {
|
8829
|
+
// if there are pinned participants then we should only consider unpinned participants
|
8830
|
+
remoteParticipants: unpinnedParticipants,
|
8831
|
+
// if there is a maximum of remote video streams we need to subtract pinned participants with video
|
8832
|
+
maxRemoteVideoStreams: props.maxRemoteVideoStreams
|
8833
|
+
? props.maxRemoteVideoStreams - pinnedParticipantsWithVideoOnCount
|
8834
|
+
: undefined });
|
8835
|
+
const floatingLocalVideoLayout = useFloatingLocalVideoLayout(floatingLocalVideoLayoutProps);
|
8836
|
+
if (props.pinnedParticipantUserIds.length === 0) {
|
8837
|
+
return floatingLocalVideoLayout;
|
8838
|
+
}
|
8839
|
+
return {
|
8840
|
+
gridParticipants: props.isScreenShareActive ? [] : pinnedParticipants,
|
8841
|
+
horizontalGalleryParticipants: props.isScreenShareActive
|
8842
|
+
? pinnedParticipants.concat(floatingLocalVideoLayout.horizontalGalleryParticipants)
|
8843
|
+
: floatingLocalVideoLayout.gridParticipants.concat(floatingLocalVideoLayout.horizontalGalleryParticipants)
|
8844
|
+
};
|
8845
|
+
};
|
8846
|
+
|
8656
8847
|
// Copyright (c) Microsoft Corporation.
|
8657
8848
|
// Licensed under the MIT license.
|
8658
8849
|
/**
|
@@ -8801,231 +8992,6 @@ const calculateChildrenPerPage = (args) => {
|
|
8801
8992
|
return Math.floor((childrenSpace + gapWidth) / (childWidth + gapWidth));
|
8802
8993
|
};
|
8803
8994
|
|
8804
|
-
// Copyright (c) Microsoft Corporation.
|
8805
|
-
/**
|
8806
|
-
* Small floating modal width and height in rem for small screen
|
8807
|
-
*/
|
8808
|
-
const SMALL_FLOATING_MODAL_SIZE_PX$1 = { width: 64, height: 88 };
|
8809
|
-
/**
|
8810
|
-
* Large floating modal width and height in rem for large screen
|
8811
|
-
*/
|
8812
|
-
const LARGE_FLOATING_MODAL_SIZE_PX$1 = { width: 160, height: 120 };
|
8813
|
-
/**
|
8814
|
-
* @private
|
8815
|
-
*/
|
8816
|
-
const horizontalGalleryContainerStyle = (shouldFloatLocalVideo, isNarrow) => {
|
8817
|
-
return {
|
8818
|
-
minHeight: isNarrow
|
8819
|
-
? `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`
|
8820
|
-
: `${LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,
|
8821
|
-
width: shouldFloatLocalVideo
|
8822
|
-
? isNarrow
|
8823
|
-
? `calc(100% - ${_pxToRem(SMALL_FLOATING_MODAL_SIZE_PX$1.width)})`
|
8824
|
-
: `calc(100% - ${_pxToRem(LARGE_FLOATING_MODAL_SIZE_PX$1.width)})`
|
8825
|
-
: '100%',
|
8826
|
-
paddingRight: '0.5rem'
|
8827
|
-
};
|
8828
|
-
};
|
8829
|
-
/**
|
8830
|
-
* @private
|
8831
|
-
*/
|
8832
|
-
const horizontalGalleryStyle = (isNarrow) => {
|
8833
|
-
return {
|
8834
|
-
children: isNarrow ? SMALL_HORIZONTAL_GALLERY_TILE_STYLE : LARGE_HORIZONTAL_GALLERY_TILE_STYLE
|
8835
|
-
};
|
8836
|
-
};
|
8837
|
-
/**
|
8838
|
-
* Small horizontal gallery tile size in rem
|
8839
|
-
* @private
|
8840
|
-
*/
|
8841
|
-
const SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM = { height: 5.5, width: 5.5 };
|
8842
|
-
/**
|
8843
|
-
* Large horizontal gallery tile size in rem
|
8844
|
-
* @private
|
8845
|
-
*/
|
8846
|
-
const LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM = { height: 7.5, width: 10 };
|
8847
|
-
/**
|
8848
|
-
* @private
|
8849
|
-
*/
|
8850
|
-
const SMALL_HORIZONTAL_GALLERY_TILE_STYLE = {
|
8851
|
-
minHeight: `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,
|
8852
|
-
minWidth: `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.width}rem`,
|
8853
|
-
maxHeight: `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,
|
8854
|
-
maxWidth: `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.width}rem`
|
8855
|
-
};
|
8856
|
-
/**
|
8857
|
-
* @private
|
8858
|
-
*/
|
8859
|
-
const LARGE_HORIZONTAL_GALLERY_TILE_STYLE = {
|
8860
|
-
minHeight: `${LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,
|
8861
|
-
minWidth: `${LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.width}rem`,
|
8862
|
-
maxHeight: `${LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,
|
8863
|
-
maxWidth: `${LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.width}rem`
|
8864
|
-
};
|
8865
|
-
|
8866
|
-
// Copyright (c) Microsoft Corporation.
|
8867
|
-
/**
|
8868
|
-
* A ResponsiveHorizontalGallery styled for the @link{VideoGallery}
|
8869
|
-
*/
|
8870
|
-
const VideoGalleryResponsiveHorizontalGallery = (props) => {
|
8871
|
-
const { shouldFloatLocalVideo = false, isNarrow = false, horizontalGalleryElements, styles } = props;
|
8872
|
-
const containerStyles = React.useMemo(() => horizontalGalleryContainerStyle(shouldFloatLocalVideo, isNarrow), [shouldFloatLocalVideo, isNarrow]);
|
8873
|
-
const galleryStyles = React.useMemo(() => react.concatStyleSets(horizontalGalleryStyle(isNarrow), styles), [isNarrow, styles]);
|
8874
|
-
return (React__default['default'].createElement(react.Stack, { styles: { root: { paddingTop: '0.5rem' } } },
|
8875
|
-
React__default['default'].createElement(ResponsiveHorizontalGallery, { key: "responsive-horizontal-gallery", containerStyles: containerStyles, horizontalGalleryStyles: galleryStyles, childWidthRem: isNarrow ? SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.width : LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.width, buttonWidthRem: HORIZONTAL_GALLERY_BUTTON_WIDTH, gapWidthRem: HORIZONTAL_GALLERY_GAP }, horizontalGalleryElements)));
|
8876
|
-
};
|
8877
|
-
|
8878
|
-
/**
|
8879
|
-
* Calculates the participants that should be rendered based on the list of dominant
|
8880
|
-
* speakers and currently rendered participants in a call.
|
8881
|
-
* @param args - SmartDominantSpeakerParticipantsArgs
|
8882
|
-
* @returns VideoGalleryRemoteParticipant[] {@link @azure/communication-react#VideoGalleryRemoteParticipant}
|
8883
|
-
*/
|
8884
|
-
const smartDominantSpeakerParticipants = (args) => {
|
8885
|
-
const { participants, dominantSpeakers = [], lastVisibleParticipants = [], maxDominantSpeakers } = args;
|
8886
|
-
// Don't apply any logic if total number of video streams is less than max dominant speakers.
|
8887
|
-
if (participants.length <= maxDominantSpeakers) {
|
8888
|
-
return participants;
|
8889
|
-
}
|
8890
|
-
const participantsMap = participantsById(participants);
|
8891
|
-
// Only use the Max allowed dominant speakers that exist in participants
|
8892
|
-
const dominantSpeakerIds = Array.from(new Set(dominantSpeakers).values())
|
8893
|
-
.filter((id) => !!participantsMap[id])
|
8894
|
-
.slice(0, maxDominantSpeakers);
|
8895
|
-
const lastVisibleParticipantIds = lastVisibleParticipants.map((p) => p.userId);
|
8896
|
-
const newVisibleParticipantIds = lastVisibleParticipants.map((p) => p.userId).slice(0, maxDominantSpeakers);
|
8897
|
-
const newDominantSpeakerIds = dominantSpeakerIds.filter((id) => !newVisibleParticipantIds.includes(id));
|
8898
|
-
// Remove participants that are no longer dominant and replace them with new dominant speakers.
|
8899
|
-
for (let index = 0; index < maxDominantSpeakers; index++) {
|
8900
|
-
const newVisibleParticipantId = newVisibleParticipantIds[index];
|
8901
|
-
if (newVisibleParticipantId === undefined || !dominantSpeakerIds.includes(newVisibleParticipantId)) {
|
8902
|
-
const replacement = newDominantSpeakerIds.shift();
|
8903
|
-
if (!replacement) {
|
8904
|
-
break;
|
8905
|
-
}
|
8906
|
-
newVisibleParticipantIds[index] = replacement;
|
8907
|
-
}
|
8908
|
-
}
|
8909
|
-
const removedVisibleParticipantIds = lastVisibleParticipantIds.filter((p) => !newVisibleParticipantIds.includes(p));
|
8910
|
-
removedVisibleParticipantIds.forEach((p) => newVisibleParticipantIds.push(p));
|
8911
|
-
const newVisibleParticipantIdSet = new Set(newVisibleParticipantIds);
|
8912
|
-
const leftoverParticipants = participants.filter((p) => !newVisibleParticipantIdSet.has(p.userId));
|
8913
|
-
leftoverParticipants.forEach((p) => {
|
8914
|
-
newVisibleParticipantIds.push(p.userId);
|
8915
|
-
});
|
8916
|
-
// newVisibleParticipantIds can contain identifiers for participants that are no longer in the call. So we ignore those IDs.
|
8917
|
-
const newVisibleParticipants = newVisibleParticipantIds
|
8918
|
-
.map((participantId) => participantsMap[participantId])
|
8919
|
-
.filter((p) => !!p);
|
8920
|
-
return newVisibleParticipants;
|
8921
|
-
};
|
8922
|
-
const participantsById = (participants) => {
|
8923
|
-
const response = {};
|
8924
|
-
participants.forEach((p) => (response[p.userId] = p));
|
8925
|
-
return response;
|
8926
|
-
};
|
8927
|
-
|
8928
|
-
// Copyright (c) Microsoft Corporation.
|
8929
|
-
const DEFAULT_MAX_REMOTE_VIDEOSTREAMS = 4;
|
8930
|
-
const DEFAULT_MAX_AUDIO_DOMINANT_SPEAKERS = 6;
|
8931
|
-
/**
|
8932
|
-
* @private
|
8933
|
-
*/
|
8934
|
-
const useFloatingLocalVideoLayout = (props) => {
|
8935
|
-
var _a, _b;
|
8936
|
-
const visibleVideoParticipants = React.useRef([]);
|
8937
|
-
const visibleAudioParticipants = React.useRef([]);
|
8938
|
-
const { remoteParticipants, dominantSpeakers, maxRemoteVideoStreams = DEFAULT_MAX_REMOTE_VIDEOSTREAMS, maxAudioDominantSpeakers = DEFAULT_MAX_AUDIO_DOMINANT_SPEAKERS, isScreenShareActive = false } = props;
|
8939
|
-
visibleVideoParticipants.current = smartDominantSpeakerParticipants({
|
8940
|
-
participants: (_a = remoteParticipants === null || remoteParticipants === void 0 ? void 0 : remoteParticipants.filter((p) => { var _a; return (_a = p.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable; })) !== null && _a !== void 0 ? _a : [],
|
8941
|
-
dominantSpeakers,
|
8942
|
-
lastVisibleParticipants: visibleVideoParticipants.current,
|
8943
|
-
maxDominantSpeakers: maxRemoteVideoStreams
|
8944
|
-
}).slice(0, maxRemoteVideoStreams);
|
8945
|
-
const visibleVideoParticipantsSet = new Set(visibleVideoParticipants.current.map((p) => p.userId));
|
8946
|
-
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
|
8947
|
-
const callingParticipants = remoteParticipants.filter((p) => p.state === ('Connecting' ));
|
8948
|
-
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
|
8949
|
-
const callingParticipantsSet = new Set(callingParticipants.map((p) => p.userId));
|
8950
|
-
visibleAudioParticipants.current = smartDominantSpeakerParticipants({
|
8951
|
-
participants: (_b = remoteParticipants === null || remoteParticipants === void 0 ? void 0 : remoteParticipants.filter((p) => !visibleVideoParticipantsSet.has(p.userId) &&
|
8952
|
-
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ !callingParticipantsSet.has(p.userId))) !== null && _b !== void 0 ? _b : [],
|
8953
|
-
dominantSpeakers,
|
8954
|
-
lastVisibleParticipants: visibleAudioParticipants.current,
|
8955
|
-
maxDominantSpeakers: maxAudioDominantSpeakers
|
8956
|
-
});
|
8957
|
-
const getGridParticipants = React.useCallback(() => {
|
8958
|
-
if (isScreenShareActive) {
|
8959
|
-
return [];
|
8960
|
-
}
|
8961
|
-
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
|
8962
|
-
return visibleVideoParticipants.current.length > 0
|
8963
|
-
? visibleVideoParticipants.current
|
8964
|
-
: visibleAudioParticipants.current.concat(callingParticipants);
|
8965
|
-
}, [
|
8966
|
-
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ callingParticipants,
|
8967
|
-
isScreenShareActive
|
8968
|
-
]);
|
8969
|
-
const gridParticipants = getGridParticipants();
|
8970
|
-
const getHorizontalGalleryRemoteParticipants = React.useCallback(() => {
|
8971
|
-
if (isScreenShareActive) {
|
8972
|
-
// If screen sharing is active, assign video and audio participants as horizontal gallery participants
|
8973
|
-
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
|
8974
|
-
return visibleVideoParticipants.current.concat(visibleAudioParticipants.current.concat(callingParticipants));
|
8975
|
-
}
|
8976
|
-
else {
|
8977
|
-
// If screen sharing is not active, then assign all video tiles as grid tiles.
|
8978
|
-
// If there are no video tiles, then assign audio tiles as grid tiles.
|
8979
|
-
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
|
8980
|
-
return visibleVideoParticipants.current.length > 0
|
8981
|
-
? visibleAudioParticipants.current.concat(callingParticipants)
|
8982
|
-
: [];
|
8983
|
-
}
|
8984
|
-
}, [
|
8985
|
-
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ callingParticipants,
|
8986
|
-
isScreenShareActive
|
8987
|
-
]);
|
8988
|
-
const horizontalGalleryParticipants = getHorizontalGalleryRemoteParticipants();
|
8989
|
-
return { gridParticipants, horizontalGalleryParticipants };
|
8990
|
-
};
|
8991
|
-
|
8992
|
-
// Copyright (c) Microsoft Corporation.
|
8993
|
-
/**
|
8994
|
-
* DefaultLayout displays remote participants, local video component, and screen sharing component in
|
8995
|
-
* a grid and horizontal gallery.
|
8996
|
-
*
|
8997
|
-
* @private
|
8998
|
-
*/
|
8999
|
-
const DefaultLayout = (props) => {
|
9000
|
-
const { remoteParticipants = [], dominantSpeakers, localVideoComponent, screenShareComponent, onRenderRemoteParticipant, styles, maxRemoteVideoStreams, parentWidth } = props;
|
9001
|
-
const isNarrow = parentWidth ? isNarrowWidth(parentWidth) : false;
|
9002
|
-
const floatingLocalVideoLayout = useFloatingLocalVideoLayout({
|
9003
|
-
remoteParticipants,
|
9004
|
-
dominantSpeakers,
|
9005
|
-
maxRemoteVideoStreams,
|
9006
|
-
isScreenShareActive: !!screenShareComponent
|
9007
|
-
});
|
9008
|
-
let activeVideoStreams = 0;
|
9009
|
-
const gridTiles = floatingLocalVideoLayout.gridParticipants.map((p) => {
|
9010
|
-
var _a, _b;
|
9011
|
-
return onRenderRemoteParticipant(p, maxRemoteVideoStreams && maxRemoteVideoStreams >= 0
|
9012
|
-
? ((_a = p.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable) && activeVideoStreams++ < maxRemoteVideoStreams
|
9013
|
-
: (_b = p.videoStream) === null || _b === void 0 ? void 0 : _b.isAvailable);
|
9014
|
-
});
|
9015
|
-
const horizontalGalleryTiles = floatingLocalVideoLayout.horizontalGalleryParticipants.map((p) => {
|
9016
|
-
var _a, _b;
|
9017
|
-
return onRenderRemoteParticipant(p, maxRemoteVideoStreams && maxRemoteVideoStreams >= 0
|
9018
|
-
? ((_a = p.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable) && activeVideoStreams++ < maxRemoteVideoStreams
|
9019
|
-
: (_b = p.videoStream) === null || _b === void 0 ? void 0 : _b.isAvailable);
|
9020
|
-
});
|
9021
|
-
if (localVideoComponent) {
|
9022
|
-
gridTiles.push(localVideoComponent);
|
9023
|
-
}
|
9024
|
-
return (React__default['default'].createElement(react.Stack, { horizontal: false, styles: rootLayoutStyle$1 },
|
9025
|
-
screenShareComponent ? (screenShareComponent) : (React__default['default'].createElement(GridLayout, { key: "grid-layout", styles: styles === null || styles === void 0 ? void 0 : styles.gridLayout }, gridTiles)),
|
9026
|
-
horizontalGalleryTiles.length > 0 && (React__default['default'].createElement(VideoGalleryResponsiveHorizontalGallery, { isNarrow: isNarrow, horizontalGalleryElements: horizontalGalleryTiles, styles: styles === null || styles === void 0 ? void 0 : styles.horizontalGallery }))));
|
9027
|
-
};
|
9028
|
-
|
9029
8995
|
// Copyright (c) Microsoft Corporation.
|
9030
8996
|
/**
|
9031
8997
|
* @private
|
@@ -9037,8 +9003,9 @@ react.mergeStyles({ position: 'relative', width: '100%', height: '100%' });
|
|
9037
9003
|
const SMALL_FLOATING_MODAL_SIZE_PX = { width: 64, height: 88 };
|
9038
9004
|
/**
|
9039
9005
|
* Large floating modal width and height in rem for large screen
|
9006
|
+
* Aspect ratio: 16:9
|
9040
9007
|
*/
|
9041
|
-
const LARGE_FLOATING_MODAL_SIZE_PX = { width:
|
9008
|
+
const LARGE_FLOATING_MODAL_SIZE_PX = { width: 215, height: 120 };
|
9042
9009
|
/**
|
9043
9010
|
* @private
|
9044
9011
|
* z-index to ensure that the local video tile is above the video gallery.
|
@@ -9094,13 +9061,118 @@ const floatingLocalVideoTileStyle = {
|
|
9094
9061
|
}
|
9095
9062
|
};
|
9096
9063
|
/**
|
9097
|
-
* Styles for the local video tile modal when it is focused, will cause keyboard move icon to appear over video
|
9064
|
+
* Styles for the local video tile modal when it is focused, will cause keyboard move icon to appear over video
|
9065
|
+
* @private
|
9066
|
+
*/
|
9067
|
+
const localVideoModalStyles = {
|
9068
|
+
keyboardMoveIconContainer: {
|
9069
|
+
zIndex: LOCAL_VIDEO_TILE_ZINDEX + 1 // zIndex to set the keyboard movement Icon above the other layers in the video tile.
|
9070
|
+
}
|
9071
|
+
};
|
9072
|
+
|
9073
|
+
// Copyright (c) Microsoft Corporation.
|
9074
|
+
/**
|
9075
|
+
* @private
|
9076
|
+
*/
|
9077
|
+
const horizontalGalleryContainerStyle = (shouldFloatLocalVideo, isNarrow) => {
|
9078
|
+
return {
|
9079
|
+
minHeight: isNarrow
|
9080
|
+
? `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`
|
9081
|
+
: `${LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,
|
9082
|
+
width: shouldFloatLocalVideo
|
9083
|
+
? isNarrow
|
9084
|
+
? `calc(100% - ${_pxToRem(SMALL_FLOATING_MODAL_SIZE_PX.width)})`
|
9085
|
+
: `calc(100% - ${_pxToRem(LARGE_FLOATING_MODAL_SIZE_PX.width)})`
|
9086
|
+
: '100%',
|
9087
|
+
paddingRight: '0.5rem'
|
9088
|
+
};
|
9089
|
+
};
|
9090
|
+
/**
|
9091
|
+
* @private
|
9092
|
+
*/
|
9093
|
+
const horizontalGalleryStyle = (isNarrow) => {
|
9094
|
+
return {
|
9095
|
+
children: isNarrow ? SMALL_HORIZONTAL_GALLERY_TILE_STYLE : LARGE_HORIZONTAL_GALLERY_TILE_STYLE
|
9096
|
+
};
|
9097
|
+
};
|
9098
|
+
/**
|
9099
|
+
* Small horizontal gallery tile size in rem
|
9100
|
+
* @private
|
9101
|
+
*/
|
9102
|
+
const SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM = { height: 5.5, width: 5.5 };
|
9103
|
+
/**
|
9104
|
+
* Large horizontal gallery tile size in rem
|
9105
|
+
* @private
|
9106
|
+
*/
|
9107
|
+
const LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM = { height: 7.5, width: 10 };
|
9108
|
+
/**
|
9109
|
+
* @private
|
9110
|
+
*/
|
9111
|
+
const SMALL_HORIZONTAL_GALLERY_TILE_STYLE = {
|
9112
|
+
minHeight: `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,
|
9113
|
+
minWidth: `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.width}rem`,
|
9114
|
+
maxHeight: `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,
|
9115
|
+
maxWidth: `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.width}rem`
|
9116
|
+
};
|
9117
|
+
/**
|
9118
|
+
* @private
|
9119
|
+
*/
|
9120
|
+
const LARGE_HORIZONTAL_GALLERY_TILE_STYLE = {
|
9121
|
+
minHeight: `${LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,
|
9122
|
+
minWidth: `${LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.width}rem`,
|
9123
|
+
maxHeight: `${LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,
|
9124
|
+
maxWidth: `${LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.width}rem`
|
9125
|
+
};
|
9126
|
+
|
9127
|
+
// Copyright (c) Microsoft Corporation.
|
9128
|
+
/**
|
9129
|
+
* A ResponsiveHorizontalGallery styled for the {@link VideoGallery}
|
9130
|
+
*
|
9131
|
+
* @private
|
9132
|
+
*/
|
9133
|
+
const VideoGalleryResponsiveHorizontalGallery = (props) => {
|
9134
|
+
const { shouldFloatLocalVideo = false, isNarrow = false, horizontalGalleryElements, styles } = props;
|
9135
|
+
const containerStyles = React.useMemo(() => horizontalGalleryContainerStyle(shouldFloatLocalVideo, isNarrow), [shouldFloatLocalVideo, isNarrow]);
|
9136
|
+
const galleryStyles = React.useMemo(() => react.concatStyleSets(horizontalGalleryStyle(isNarrow), styles), [isNarrow, styles]);
|
9137
|
+
return (React__default['default'].createElement(react.Stack, { styles: { root: { paddingTop: '0.5rem' } } },
|
9138
|
+
React__default['default'].createElement(ResponsiveHorizontalGallery, { key: "responsive-horizontal-gallery", containerStyles: containerStyles, horizontalGalleryStyles: galleryStyles, childWidthRem: isNarrow ? SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.width : LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.width, buttonWidthRem: HORIZONTAL_GALLERY_BUTTON_WIDTH, gapWidthRem: HORIZONTAL_GALLERY_GAP }, horizontalGalleryElements)));
|
9139
|
+
};
|
9140
|
+
|
9141
|
+
// Copyright (c) Microsoft Corporation.
|
9142
|
+
/**
|
9143
|
+
* DefaultLayout displays remote participants, local video component, and screen sharing component in
|
9144
|
+
* a grid and horizontal gallery.
|
9145
|
+
*
|
9098
9146
|
* @private
|
9099
9147
|
*/
|
9100
|
-
const
|
9101
|
-
|
9102
|
-
|
9148
|
+
const DefaultLayout = (props) => {
|
9149
|
+
const { remoteParticipants = [], dominantSpeakers, localVideoComponent, screenShareComponent, onRenderRemoteParticipant, styles, maxRemoteVideoStreams, parentWidth } = props;
|
9150
|
+
const isNarrow = parentWidth ? isNarrowWidth(parentWidth) : false;
|
9151
|
+
const floatingLocalVideoLayout = useFloatingLocalVideoLayout({
|
9152
|
+
remoteParticipants,
|
9153
|
+
dominantSpeakers,
|
9154
|
+
maxRemoteVideoStreams,
|
9155
|
+
isScreenShareActive: !!screenShareComponent
|
9156
|
+
});
|
9157
|
+
let activeVideoStreams = 0;
|
9158
|
+
const gridTiles = floatingLocalVideoLayout.gridParticipants.map((p) => {
|
9159
|
+
var _a, _b;
|
9160
|
+
return onRenderRemoteParticipant(p, maxRemoteVideoStreams && maxRemoteVideoStreams >= 0
|
9161
|
+
? ((_a = p.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable) && activeVideoStreams++ < maxRemoteVideoStreams
|
9162
|
+
: (_b = p.videoStream) === null || _b === void 0 ? void 0 : _b.isAvailable);
|
9163
|
+
});
|
9164
|
+
const horizontalGalleryTiles = floatingLocalVideoLayout.horizontalGalleryParticipants.map((p) => {
|
9165
|
+
var _a, _b;
|
9166
|
+
return onRenderRemoteParticipant(p, maxRemoteVideoStreams && maxRemoteVideoStreams >= 0
|
9167
|
+
? ((_a = p.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable) && activeVideoStreams++ < maxRemoteVideoStreams
|
9168
|
+
: (_b = p.videoStream) === null || _b === void 0 ? void 0 : _b.isAvailable);
|
9169
|
+
});
|
9170
|
+
if (localVideoComponent) {
|
9171
|
+
gridTiles.push(localVideoComponent);
|
9103
9172
|
}
|
9173
|
+
return (React__default['default'].createElement(react.Stack, { horizontal: false, styles: rootLayoutStyle$1 },
|
9174
|
+
screenShareComponent ? (screenShareComponent) : (React__default['default'].createElement(GridLayout, { key: "grid-layout", styles: styles === null || styles === void 0 ? void 0 : styles.gridLayout }, gridTiles)),
|
9175
|
+
horizontalGalleryTiles.length > 0 && (React__default['default'].createElement(VideoGalleryResponsiveHorizontalGallery, { isNarrow: isNarrow, horizontalGalleryElements: horizontalGalleryTiles, styles: styles === null || styles === void 0 ? void 0 : styles.horizontalGallery }))));
|
9104
9176
|
};
|
9105
9177
|
|
9106
9178
|
// Copyright (c) Microsoft Corporation.
|
@@ -9887,6 +9959,56 @@ const FloatingLocalVideoLayout = (props) => {
|
|
9887
9959
|
React__default['default'].createElement(react.LayerHost, { id: layerHostId, className: react.mergeStyles(layerHostStyle) }))));
|
9888
9960
|
};
|
9889
9961
|
|
9962
|
+
// Copyright (c) Microsoft Corporation.
|
9963
|
+
/**
|
9964
|
+
* PinnedParticipantsLayout displays remote participants and a screen sharing component in
|
9965
|
+
* a grid and horizontal gallery while floating the local video
|
9966
|
+
*
|
9967
|
+
* @private
|
9968
|
+
*/
|
9969
|
+
const PinnedParticipantsLayout = (props) => {
|
9970
|
+
const { remoteParticipants = [], pinnedParticipants = [], dominantSpeakers, localVideoComponent, screenShareComponent, onRenderRemoteParticipant, styles, maxRemoteVideoStreams, showCameraSwitcherInLocalPreview, parentWidth, parentHeight, isLocalVideoFloating } = props;
|
9971
|
+
const theme = useTheme();
|
9972
|
+
const isNarrow = parentWidth ? isNarrowWidth(parentWidth) : false;
|
9973
|
+
const pinnedParticipantsLayout = usePinnedParticipantLayout({
|
9974
|
+
remoteParticipants,
|
9975
|
+
pinnedParticipantUserIds: pinnedParticipants,
|
9976
|
+
dominantSpeakers,
|
9977
|
+
maxRemoteVideoStreams,
|
9978
|
+
isScreenShareActive: !!screenShareComponent
|
9979
|
+
});
|
9980
|
+
let activeVideoStreams = 0;
|
9981
|
+
const shouldFloatLocalVideo = isLocalVideoFloating && remoteParticipants.length > 0;
|
9982
|
+
const gridTiles = pinnedParticipantsLayout.gridParticipants.map((p) => {
|
9983
|
+
var _a, _b;
|
9984
|
+
return onRenderRemoteParticipant(p, maxRemoteVideoStreams && maxRemoteVideoStreams >= 0
|
9985
|
+
? ((_a = p.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable) && activeVideoStreams++ < maxRemoteVideoStreams
|
9986
|
+
: (_b = p.videoStream) === null || _b === void 0 ? void 0 : _b.isAvailable);
|
9987
|
+
});
|
9988
|
+
if (localVideoComponent && !shouldFloatLocalVideo) {
|
9989
|
+
gridTiles.push(localVideoComponent);
|
9990
|
+
}
|
9991
|
+
const horizontalGalleryTiles = pinnedParticipantsLayout.horizontalGalleryParticipants.map((p) => {
|
9992
|
+
var _a, _b;
|
9993
|
+
return onRenderRemoteParticipant(p, maxRemoteVideoStreams && maxRemoteVideoStreams >= 0
|
9994
|
+
? ((_a = p.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable) && activeVideoStreams++ < maxRemoteVideoStreams
|
9995
|
+
: (_b = p.videoStream) === null || _b === void 0 ? void 0 : _b.isAvailable);
|
9996
|
+
});
|
9997
|
+
const layerHostId = reactHooks.useId('layerhost');
|
9998
|
+
const wrappedLocalVideoComponent = localVideoComponent && shouldFloatLocalVideo ? (
|
9999
|
+
// When we use showCameraSwitcherInLocalPreview it disables dragging to allow keyboard navigation.
|
10000
|
+
showCameraSwitcherInLocalPreview ? (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(localVideoTileWithControlsContainerStyle(theme, isNarrow), {
|
10001
|
+
boxShadow: theme.effects.elevation8,
|
10002
|
+
zIndex: LOCAL_VIDEO_TILE_ZINDEX
|
10003
|
+
}) }, localVideoComponent)) : horizontalGalleryTiles.length > 0 ? (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(localVideoTileContainerStyle(theme, isNarrow)) }, localVideoComponent)) : (React__default['default'].createElement(FloatingLocalVideo, { localVideoComponent: localVideoComponent, layerHostId: layerHostId, isNarrow: isNarrow, parentWidth: parentWidth, parentHeight: parentHeight }))) : undefined;
|
10004
|
+
return (React__default['default'].createElement(react.Stack, { styles: rootLayoutStyle },
|
10005
|
+
wrappedLocalVideoComponent,
|
10006
|
+
React__default['default'].createElement(react.Stack, { horizontal: false, styles: innerLayoutStyle },
|
10007
|
+
screenShareComponent ? (screenShareComponent) : (React__default['default'].createElement(GridLayout, { key: "grid-layout", styles: styles === null || styles === void 0 ? void 0 : styles.gridLayout }, gridTiles)),
|
10008
|
+
horizontalGalleryTiles.length > 0 && (React__default['default'].createElement(VideoGalleryResponsiveHorizontalGallery, { isNarrow: isNarrow, shouldFloatLocalVideo: true, horizontalGalleryElements: horizontalGalleryTiles, styles: styles === null || styles === void 0 ? void 0 : styles.horizontalGallery })),
|
10009
|
+
React__default['default'].createElement(react.LayerHost, { id: layerHostId, className: react.mergeStyles(layerHostStyle) }))));
|
10010
|
+
};
|
10011
|
+
|
9890
10012
|
// Copyright (c) Microsoft Corporation.
|
9891
10013
|
/**
|
9892
10014
|
* @private
|
@@ -9900,8 +10022,12 @@ const DEFAULT_MAX_REMOTE_VIDEO_STREAMS = 4;
|
|
9900
10022
|
* @public
|
9901
10023
|
*/
|
9902
10024
|
const VideoGallery = (props) => {
|
9903
|
-
var _a, _b;
|
9904
|
-
const { localParticipant, remoteParticipants = [], localVideoViewOptions, remoteVideoViewOptions, dominantSpeakers, onRenderLocalVideoTile, onRenderRemoteVideoTile, onCreateLocalStreamView, onDisposeLocalStreamView, onCreateRemoteStreamView, onDisposeRemoteStreamView, styles, layout, onRenderAvatar, showMuteIndicator, maxRemoteVideoStreams = DEFAULT_MAX_REMOTE_VIDEO_STREAMS, showCameraSwitcherInLocalPreview, localVideoCameraCycleButtonProps
|
10025
|
+
var _a, _b, _c;
|
10026
|
+
const { localParticipant, remoteParticipants = [], localVideoViewOptions, remoteVideoViewOptions, dominantSpeakers, onRenderLocalVideoTile, onRenderRemoteVideoTile, onCreateLocalStreamView, onDisposeLocalStreamView, onCreateRemoteStreamView, onDisposeRemoteStreamView, styles, layout, onRenderAvatar, showMuteIndicator, maxRemoteVideoStreams = DEFAULT_MAX_REMOTE_VIDEO_STREAMS, showCameraSwitcherInLocalPreview, localVideoCameraCycleButtonProps,
|
10027
|
+
/* @conditional-compile-remove(pinned-participants) */
|
10028
|
+
onPinParticipant: onPinParticipantHandler,
|
10029
|
+
/* @conditional-compile-remove(pinned-participants) */
|
10030
|
+
onUnpinParticipant: onUnpinParticipantHandler } = props;
|
9905
10031
|
const ids = useIdentifiers();
|
9906
10032
|
const theme = useTheme();
|
9907
10033
|
const localeStrings = useLocale$1().strings.videoGallery;
|
@@ -9911,6 +10037,11 @@ const VideoGallery = (props) => {
|
|
9911
10037
|
const containerWidth = _useContainerWidth(containerRef);
|
9912
10038
|
const containerHeight = _useContainerHeight(containerRef);
|
9913
10039
|
const isNarrow = containerWidth ? isNarrowWidth(containerWidth) : false;
|
10040
|
+
/* @conditional-compile-remove(pinned-participants) */
|
10041
|
+
const [pinnedParticipantsState, setPinnedParticipantsState] = React__default['default'].useState([]);
|
10042
|
+
/* @conditional-compile-remove(pinned-participants) */
|
10043
|
+
// Use pinnedParticipants from props but if it is not defined use the maintained state of pinned participants
|
10044
|
+
const pinnedParticipants = (_a = props.pinnedParticipants) !== null && _a !== void 0 ? _a : pinnedParticipantsState;
|
9914
10045
|
/* @conditional-compile-remove(rooms) */
|
9915
10046
|
const permissions = _usePermissions();
|
9916
10047
|
/**
|
@@ -9952,13 +10083,33 @@ const VideoGallery = (props) => {
|
|
9952
10083
|
theme.effects.roundedCorner4,
|
9953
10084
|
/* @conditional-compile-remove(rooms) */ permissions.cameraButton
|
9954
10085
|
]);
|
10086
|
+
/* @conditional-compile-remove(pinned-participants) */
|
10087
|
+
const onPinParticipant = React.useCallback((userId) => {
|
10088
|
+
if (!pinnedParticipantsState.includes(userId)) {
|
10089
|
+
setPinnedParticipantsState(pinnedParticipantsState.concat(userId));
|
10090
|
+
}
|
10091
|
+
onPinParticipantHandler === null || onPinParticipantHandler === void 0 ? void 0 : onPinParticipantHandler(userId);
|
10092
|
+
}, [pinnedParticipantsState, setPinnedParticipantsState, onPinParticipantHandler]);
|
10093
|
+
/* @conditional-compile-remove(pinned-participants) */
|
10094
|
+
const onUnpinParticipant = React.useCallback((userId) => {
|
10095
|
+
setPinnedParticipantsState(pinnedParticipantsState.filter((p) => p !== userId));
|
10096
|
+
onUnpinParticipantHandler === null || onUnpinParticipantHandler === void 0 ? void 0 : onUnpinParticipantHandler(userId);
|
10097
|
+
}, [pinnedParticipantsState, setPinnedParticipantsState, onUnpinParticipantHandler]);
|
9955
10098
|
const defaultOnRenderVideoTile = React.useCallback((participant, isVideoParticipant) => {
|
9956
10099
|
const remoteVideoStream = participant.videoStream;
|
10100
|
+
/* @conditional-compile-remove(pinned-participants) */
|
10101
|
+
const isPinned = pinnedParticipants === null || pinnedParticipants === void 0 ? void 0 : pinnedParticipants.includes(participant.userId);
|
9957
10102
|
return (React__default['default'].createElement(_RemoteVideoTile, { key: participant.userId, userId: participant.userId, remoteParticipant: participant, onCreateRemoteStreamView: isVideoParticipant ? onCreateRemoteStreamView : undefined, onDisposeRemoteStreamView: isVideoParticipant ? onDisposeRemoteStreamView : undefined, isAvailable: isVideoParticipant ? remoteVideoStream === null || remoteVideoStream === void 0 ? void 0 : remoteVideoStream.isAvailable : false, isReceiving: isVideoParticipant ? remoteVideoStream === null || remoteVideoStream === void 0 ? void 0 : remoteVideoStream.isReceiving : false, renderElement: isVideoParticipant ? remoteVideoStream === null || remoteVideoStream === void 0 ? void 0 : remoteVideoStream.renderElement : undefined, remoteVideoViewOptions: isVideoParticipant ? remoteVideoViewOptions : undefined, onRenderAvatar: onRenderAvatar, showMuteIndicator: showMuteIndicator, strings: strings,
|
9958
10103
|
/* @conditional-compile-remove(PSTN-calls) */
|
9959
10104
|
participantState: participant.state,
|
9960
10105
|
/* @conditional-compile-remove(pinned-participants) */
|
9961
|
-
showRemoteVideoTileContextualMenu: props.showRemoteVideoTileContextualMenu
|
10106
|
+
showRemoteVideoTileContextualMenu: props.showRemoteVideoTileContextualMenu,
|
10107
|
+
/* @conditional-compile-remove(pinned-participants) */
|
10108
|
+
onPinParticipant: onPinParticipant,
|
10109
|
+
/* @conditional-compile-remove(pinned-participants) */
|
10110
|
+
onUnpinParticipant: onUnpinParticipant,
|
10111
|
+
/* @conditional-compile-remove(pinned-participants) */
|
10112
|
+
isPinned: isPinned }));
|
9962
10113
|
}, [
|
9963
10114
|
onCreateRemoteStreamView,
|
9964
10115
|
onDisposeRemoteStreamView,
|
@@ -9966,18 +10117,57 @@ const VideoGallery = (props) => {
|
|
9966
10117
|
onRenderAvatar,
|
9967
10118
|
showMuteIndicator,
|
9968
10119
|
strings,
|
9969
|
-
/* @conditional-compile-remove(pinned-participants) */
|
9970
|
-
|
10120
|
+
/* @conditional-compile-remove(pinned-participants) */ props.showRemoteVideoTileContextualMenu,
|
10121
|
+
/* @conditional-compile-remove(pinned-participants) */ pinnedParticipants,
|
10122
|
+
/* @conditional-compile-remove(pinned-participants) */ onPinParticipant,
|
10123
|
+
/* @conditional-compile-remove(pinned-participants) */ onUnpinParticipant
|
9971
10124
|
]);
|
9972
10125
|
const screenShareParticipant = remoteParticipants.find((participant) => { var _a; return (_a = participant.screenShareStream) === null || _a === void 0 ? void 0 : _a.isAvailable; });
|
9973
10126
|
const localScreenShareStreamComponent = React__default['default'].createElement(LocalScreenShare, { localParticipant: localParticipant });
|
9974
|
-
const remoteScreenShareComponent = screenShareParticipant && (React__default['default'].createElement(RemoteScreenShare, Object.assign({}, screenShareParticipant, { renderElement: (
|
10127
|
+
const remoteScreenShareComponent = screenShareParticipant && (React__default['default'].createElement(RemoteScreenShare, Object.assign({}, screenShareParticipant, { renderElement: (_b = screenShareParticipant.screenShareStream) === null || _b === void 0 ? void 0 : _b.renderElement, onCreateRemoteStreamView: onCreateRemoteStreamView, onDisposeRemoteStreamView: onDisposeRemoteStreamView, isReceiving: (_c = screenShareParticipant.screenShareStream) === null || _c === void 0 ? void 0 : _c.isReceiving })));
|
9975
10128
|
const screenShareComponent = remoteScreenShareComponent
|
9976
10129
|
? remoteScreenShareComponent
|
9977
10130
|
: localParticipant.isScreenSharingOn
|
9978
10131
|
? localScreenShareStreamComponent
|
9979
10132
|
: undefined;
|
9980
|
-
const
|
10133
|
+
const layoutProps = React.useMemo(() => ({
|
10134
|
+
remoteParticipants,
|
10135
|
+
/* @conditional-compile-remove(pinned-participants) */ pinnedParticipants,
|
10136
|
+
screenShareComponent,
|
10137
|
+
showCameraSwitcherInLocalPreview,
|
10138
|
+
maxRemoteVideoStreams,
|
10139
|
+
dominantSpeakers,
|
10140
|
+
styles,
|
10141
|
+
onRenderRemoteParticipant: onRenderRemoteVideoTile !== null && onRenderRemoteVideoTile !== void 0 ? onRenderRemoteVideoTile : defaultOnRenderVideoTile,
|
10142
|
+
localVideoComponent: localVideoTile,
|
10143
|
+
parentWidth: containerWidth,
|
10144
|
+
parentHeight: containerHeight,
|
10145
|
+
isLocalVideoFloating: layout === 'floatingLocalVideo'
|
10146
|
+
}), [
|
10147
|
+
remoteParticipants,
|
10148
|
+
screenShareComponent,
|
10149
|
+
showCameraSwitcherInLocalPreview,
|
10150
|
+
maxRemoteVideoStreams,
|
10151
|
+
dominantSpeakers,
|
10152
|
+
styles,
|
10153
|
+
localVideoTile,
|
10154
|
+
containerWidth,
|
10155
|
+
containerHeight,
|
10156
|
+
onRenderRemoteVideoTile,
|
10157
|
+
defaultOnRenderVideoTile,
|
10158
|
+
layout,
|
10159
|
+
/* @conditional-compile-remove(pinned-participants) */ pinnedParticipants
|
10160
|
+
]);
|
10161
|
+
const videoGalleryLayout = React.useMemo(() => {
|
10162
|
+
/* @conditional-compile-remove(pinned-participants) */
|
10163
|
+
if (layoutProps.pinnedParticipants.length > 0) {
|
10164
|
+
return React__default['default'].createElement(PinnedParticipantsLayout, Object.assign({}, layoutProps));
|
10165
|
+
}
|
10166
|
+
if (layout === 'floatingLocalVideo') {
|
10167
|
+
return React__default['default'].createElement(FloatingLocalVideoLayout, Object.assign({}, layoutProps));
|
10168
|
+
}
|
10169
|
+
return React__default['default'].createElement(DefaultLayout, Object.assign({}, layoutProps));
|
10170
|
+
}, [layout, layoutProps]);
|
9981
10171
|
return (React__default['default'].createElement("div", { "data-ui-id": ids.videoGallery, ref: containerRef, className: react.mergeStyles(videoGalleryOuterDivStyle, styles === null || styles === void 0 ? void 0 : styles.root) }, videoGalleryLayout));
|
9982
10172
|
};
|
9983
10173
|
|
@@ -10347,7 +10537,7 @@ const DevicesButton = (props) => {
|
|
10347
10537
|
|
10348
10538
|
// Copyright (c) Microsoft Corporation.
|
10349
10539
|
// Licensed under the MIT license.
|
10350
|
-
var __awaiter$
|
10540
|
+
var __awaiter$m = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
10351
10541
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
10352
10542
|
return new (P || (P = Promise))(function (resolve, reject) {
|
10353
10543
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
@@ -10385,7 +10575,7 @@ const CameraButton = (props) => {
|
|
10385
10575
|
const toggleAnnouncerString = React.useCallback((isCameraOn) => {
|
10386
10576
|
setAnnouncerString(!isCameraOn ? strings.cameraActionTurnedOffAnnouncement : strings.cameraActionTurnedOnAnnouncement);
|
10387
10577
|
}, [strings.cameraActionTurnedOffAnnouncement, strings.cameraActionTurnedOnAnnouncement]);
|
10388
|
-
const onToggleClick = React.useCallback(() => __awaiter$
|
10578
|
+
const onToggleClick = React.useCallback(() => __awaiter$m(void 0, void 0, void 0, function* () {
|
10389
10579
|
// Throttle click on camera, need to await onToggleCamera then allow another click
|
10390
10580
|
if (onToggleCamera) {
|
10391
10581
|
setWaitForCamera(true);
|
@@ -10517,7 +10707,7 @@ const lightThemeCallButtonStyles = {
|
|
10517
10707
|
|
10518
10708
|
// Copyright (c) Microsoft Corporation.
|
10519
10709
|
// Licensed under the MIT license.
|
10520
|
-
var __awaiter$
|
10710
|
+
var __awaiter$l = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
10521
10711
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
10522
10712
|
return new (P || (P = Promise))(function (resolve, reject) {
|
10523
10713
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
@@ -10558,7 +10748,7 @@ const MicrophoneButton = (props) => {
|
|
10558
10748
|
const toggleAnnouncerString = React.useCallback((isMicOn) => {
|
10559
10749
|
setAnnouncerString(!isMicOn ? strings.microphoneActionTurnedOffAnnouncement : strings.microphoneActionTurnedOnAnnouncement);
|
10560
10750
|
}, [strings.microphoneActionTurnedOffAnnouncement, strings.microphoneActionTurnedOnAnnouncement]);
|
10561
|
-
const onToggleClick = React.useCallback(() => __awaiter$
|
10751
|
+
const onToggleClick = React.useCallback(() => __awaiter$l(void 0, void 0, void 0, function* () {
|
10562
10752
|
if (onToggleMicrophone) {
|
10563
10753
|
try {
|
10564
10754
|
yield onToggleMicrophone();
|
@@ -11596,7 +11786,7 @@ const formatPhoneNumber = (phoneNumber) => {
|
|
11596
11786
|
|
11597
11787
|
// Copyright (c) Microsoft Corporation.
|
11598
11788
|
// Licensed under the MIT license.
|
11599
|
-
var __awaiter$
|
11789
|
+
var __awaiter$k = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
11600
11790
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
11601
11791
|
return new (P || (P = Promise))(function (resolve, reject) {
|
11602
11792
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
@@ -11638,10 +11828,10 @@ const DialpadButton = (props) => {
|
|
11638
11828
|
const theme = react.useTheme();
|
11639
11829
|
const { digit, index, onClick, onLongPress, isMobile = false } = props;
|
11640
11830
|
const useLongPressProps = React__default['default'].useMemo(() => ({
|
11641
|
-
onClick: () => __awaiter$
|
11831
|
+
onClick: () => __awaiter$k(void 0, void 0, void 0, function* () {
|
11642
11832
|
onClick(digit, index);
|
11643
11833
|
}),
|
11644
|
-
onLongPress: () => __awaiter$
|
11834
|
+
onLongPress: () => __awaiter$k(void 0, void 0, void 0, function* () {
|
11645
11835
|
onLongPress(digit, index);
|
11646
11836
|
}),
|
11647
11837
|
touchEventsOnly: isMobile
|
@@ -11847,7 +12037,7 @@ const continueAnywayButtonStyles = (theme) => {
|
|
11847
12037
|
// Copyright (c) Microsoft Corporation.
|
11848
12038
|
/* @conditional-compile-remove(unsupported-browser) */
|
11849
12039
|
const UnsupportedEnvironmentContainer = (props) => {
|
11850
|
-
const { onTroubleshootingClick, strings,
|
12040
|
+
const { onTroubleshootingClick, strings, onContinueAnywayClick } = props;
|
11851
12041
|
const theme = useTheme();
|
11852
12042
|
return (React__default['default'].createElement(react.Stack, { styles: containerStyles$2, tokens: { childrenGap: '2rem' } },
|
11853
12043
|
React__default['default'].createElement(react.Icon, { iconName: "UnsupportedEnvironmentWarning", "data-ui-id": "unsupported-environment-icon" }),
|
@@ -11855,7 +12045,7 @@ const UnsupportedEnvironmentContainer = (props) => {
|
|
11855
12045
|
React__default['default'].createElement(react.Text, { styles: mainTextStyles }, strings === null || strings === void 0 ? void 0 : strings.primaryText),
|
11856
12046
|
React__default['default'].createElement(react.Text, { styles: secondaryTextStyles }, strings === null || strings === void 0 ? void 0 : strings.secondaryText)),
|
11857
12047
|
onTroubleshootingClick && (React__default['default'].createElement(react.Link, { styles: linkTextStyles, onClick: onTroubleshootingClick, "data-ui-id": "unsupported-environment-link" }, strings === null || strings === void 0 ? void 0 : strings.moreHelpLinkText)),
|
11858
|
-
|
12048
|
+
onContinueAnywayClick && (React__default['default'].createElement(react.DefaultButton, { "data-ui-id": "allowUnsupportedBrowserButton", styles: continueAnywayButtonStyles(theme), onClick: onContinueAnywayClick }, strings === null || strings === void 0 ? void 0 : strings.continueAnywayButtonText))));
|
11859
12049
|
};
|
11860
12050
|
/**
|
11861
12051
|
* UI to display to the user that the environment they are using is not supported by calling application.
|
@@ -11886,8 +12076,8 @@ const UnsupportedBrowser = (props) => {
|
|
11886
12076
|
* @beta
|
11887
12077
|
*/
|
11888
12078
|
const UnsupportedBrowserVersion = (props) => {
|
11889
|
-
const { onTroubleshootingClick, strings,
|
11890
|
-
return (React__default['default'].createElement(UnsupportedEnvironment, { onTroubleshootingClick: onTroubleshootingClick, strings: strings,
|
12079
|
+
const { onTroubleshootingClick, strings, onContinueAnywayClick } = props;
|
12080
|
+
return (React__default['default'].createElement(UnsupportedEnvironment, { onTroubleshootingClick: onTroubleshootingClick, strings: strings, onContinueAnywayClick: onContinueAnywayClick }));
|
11891
12081
|
};
|
11892
12082
|
|
11893
12083
|
// Copyright (c) Microsoft Corporation.
|
@@ -12522,7 +12712,7 @@ const findConditionalCompiledSelector = (component) => {
|
|
12522
12712
|
|
12523
12713
|
// Copyright (c) Microsoft Corporation.
|
12524
12714
|
// Licensed under the MIT license.
|
12525
|
-
var __awaiter$
|
12715
|
+
var __awaiter$j = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
12526
12716
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
12527
12717
|
return new (P || (P = Promise))(function (resolve, reject) {
|
12528
12718
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
@@ -12545,35 +12735,35 @@ const createDefaultChatHandlers = memoizeOne__default['default']((chatClient, ch
|
|
12545
12735
|
let messageIterator = undefined;
|
12546
12736
|
let readReceiptIterator = undefined;
|
12547
12737
|
return {
|
12548
|
-
onSendMessage: (content, options) => __awaiter$
|
12738
|
+
onSendMessage: (content, options) => __awaiter$j(void 0, void 0, void 0, function* () {
|
12549
12739
|
const sendMessageRequest = {
|
12550
12740
|
content,
|
12551
12741
|
senderDisplayName: chatClient.getState().displayName
|
12552
12742
|
};
|
12553
12743
|
yield chatThreadClient.sendMessage(sendMessageRequest, options);
|
12554
12744
|
}),
|
12555
|
-
onUpdateMessage: (messageId, content, metadata, options) => __awaiter$
|
12745
|
+
onUpdateMessage: (messageId, content, metadata, options) => __awaiter$j(void 0, void 0, void 0, function* () {
|
12556
12746
|
const updatedMetadata = metadata ? Object.assign({}, metadata) : {};
|
12557
12747
|
updatedMetadata['fileSharingMetadata'] = JSON.stringify((options === null || options === void 0 ? void 0 : options.attachedFilesMetadata) || []);
|
12558
12748
|
yield chatThreadClient.updateMessage(messageId, { content, metadata: updatedMetadata });
|
12559
12749
|
}),
|
12560
|
-
onDeleteMessage: (messageId) => __awaiter$
|
12750
|
+
onDeleteMessage: (messageId) => __awaiter$j(void 0, void 0, void 0, function* () {
|
12561
12751
|
yield chatThreadClient.deleteMessage(messageId);
|
12562
12752
|
}),
|
12563
12753
|
// This handler is designed for chatThread to consume
|
12564
|
-
onMessageSeen: (chatMessageId) => __awaiter$
|
12754
|
+
onMessageSeen: (chatMessageId) => __awaiter$j(void 0, void 0, void 0, function* () {
|
12565
12755
|
yield chatThreadClient.sendReadReceipt({ chatMessageId });
|
12566
12756
|
}),
|
12567
|
-
onTyping: () => __awaiter$
|
12757
|
+
onTyping: () => __awaiter$j(void 0, void 0, void 0, function* () {
|
12568
12758
|
yield chatThreadClient.sendTypingNotification();
|
12569
12759
|
}),
|
12570
|
-
onRemoveParticipant: (userId) => __awaiter$
|
12760
|
+
onRemoveParticipant: (userId) => __awaiter$j(void 0, void 0, void 0, function* () {
|
12571
12761
|
yield chatThreadClient.removeParticipant(fromFlatCommunicationIdentifier(userId));
|
12572
12762
|
}),
|
12573
|
-
updateThreadTopicName: (topicName) => __awaiter$
|
12763
|
+
updateThreadTopicName: (topicName) => __awaiter$j(void 0, void 0, void 0, function* () {
|
12574
12764
|
yield chatThreadClient.updateTopic(topicName);
|
12575
12765
|
}),
|
12576
|
-
onLoadPreviousChatMessages: (messagesToLoad) => __awaiter$
|
12766
|
+
onLoadPreviousChatMessages: (messagesToLoad) => __awaiter$j(void 0, void 0, void 0, function* () {
|
12577
12767
|
var _a, _b, _c;
|
12578
12768
|
if (messageIterator === undefined) {
|
12579
12769
|
// Lazy definition so that errors in the method call are reported correctly.
|
@@ -13310,7 +13500,7 @@ const chatStatefulLogger = logger.createClientLogger('communication-react:chat-s
|
|
13310
13500
|
|
13311
13501
|
// Copyright (c) Microsoft Corporation.
|
13312
13502
|
// Licensed under the MIT license.
|
13313
|
-
var __awaiter$
|
13503
|
+
var __awaiter$i = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
13314
13504
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
13315
13505
|
return new (P || (P = Promise))(function (resolve, reject) {
|
13316
13506
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
@@ -13585,7 +13775,7 @@ class ChatContext$1 {
|
|
13585
13775
|
* @throws ChatError. Exceptions thrown from `f` are tagged with the failed `target.
|
13586
13776
|
*/
|
13587
13777
|
withAsyncErrorTeedToState(f, target) {
|
13588
|
-
return (...args) => __awaiter$
|
13778
|
+
return (...args) => __awaiter$i(this, void 0, void 0, function* () {
|
13589
13779
|
try {
|
13590
13780
|
return yield f(...args);
|
13591
13781
|
}
|
@@ -13692,7 +13882,7 @@ const convertChatMessage = (message, status = 'delivered', clientMessageId) => {
|
|
13692
13882
|
|
13693
13883
|
// Copyright (c) Microsoft Corporation.
|
13694
13884
|
// Licensed under the MIT license.
|
13695
|
-
var __awaiter$
|
13885
|
+
var __awaiter$h = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
13696
13886
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
13697
13887
|
return new (P || (P = Promise))(function (resolve, reject) {
|
13698
13888
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
@@ -13776,7 +13966,7 @@ class EventSubscriber {
|
|
13776
13966
|
this.fetchLastParticipantMessage(event.threadId, 'participantAdded');
|
13777
13967
|
};
|
13778
13968
|
// This is a hot fix that no participant message is received for onChatMessageReceived event, which should be handled by JS SDK
|
13779
|
-
this.fetchLastParticipantMessage = (threadId, actionType) => __awaiter$
|
13969
|
+
this.fetchLastParticipantMessage = (threadId, actionType) => __awaiter$h(this, void 0, void 0, function* () {
|
13780
13970
|
var e_1, _a;
|
13781
13971
|
try {
|
13782
13972
|
for (var _b = __asyncValues$1(this.chatClient
|
@@ -13862,7 +14052,7 @@ class EventSubscriber {
|
|
13862
14052
|
|
13863
14053
|
// Copyright (c) Microsoft Corporation.
|
13864
14054
|
// Licensed under the MIT license.
|
13865
|
-
var __awaiter$
|
14055
|
+
var __awaiter$g = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
13866
14056
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
13867
14057
|
return new (P || (P = Promise))(function (resolve, reject) {
|
13868
14058
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
@@ -13884,7 +14074,7 @@ const createDecoratedIterator = (iteratorCreator, context, decorateFn) => {
|
|
13884
14074
|
const threadsIterator = iteratorCreator(...args);
|
13885
14075
|
return {
|
13886
14076
|
next() {
|
13887
|
-
return __awaiter$
|
14077
|
+
return __awaiter$g(this, void 0, void 0, function* () {
|
13888
14078
|
const result = yield threadsIterator.next();
|
13889
14079
|
if (!result.done && result.value) {
|
13890
14080
|
decorateFn(result.value, context);
|
@@ -13899,7 +14089,7 @@ const createDecoratedIterator = (iteratorCreator, context, decorateFn) => {
|
|
13899
14089
|
const pages = threadsIterator.byPage(settings);
|
13900
14090
|
return {
|
13901
14091
|
next() {
|
13902
|
-
return __awaiter$
|
14092
|
+
return __awaiter$g(this, void 0, void 0, function* () {
|
13903
14093
|
const result = yield pages.next();
|
13904
14094
|
const page = result.value;
|
13905
14095
|
if (!result.done && result.value) {
|
@@ -13983,7 +14173,7 @@ const createDecoratedListParticipants = (chatThreadClient, context) => {
|
|
13983
14173
|
|
13984
14174
|
// Copyright (c) Microsoft Corporation.
|
13985
14175
|
// Licensed under the MIT license.
|
13986
|
-
var __awaiter$
|
14176
|
+
var __awaiter$f = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
13987
14177
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
13988
14178
|
return new (P || (P = Promise))(function (resolve, reject) {
|
13989
14179
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
@@ -14002,14 +14192,14 @@ class ProxyChatThreadClient {
|
|
14002
14192
|
return createDecoratedListMessages(chatThreadClient, this._context);
|
14003
14193
|
}
|
14004
14194
|
case 'getMessage': {
|
14005
|
-
return this._context.withAsyncErrorTeedToState((...args) => __awaiter$
|
14195
|
+
return this._context.withAsyncErrorTeedToState((...args) => __awaiter$f(this, void 0, void 0, function* () {
|
14006
14196
|
const message = yield chatThreadClient.getMessage(...args);
|
14007
14197
|
this._context.setChatMessage(chatThreadClient.threadId, convertChatMessage(message));
|
14008
14198
|
return message;
|
14009
14199
|
}), 'ChatThreadClient.getMessage');
|
14010
14200
|
}
|
14011
14201
|
case 'sendMessage': {
|
14012
|
-
return this._context.withAsyncErrorTeedToState((...args) => __awaiter$
|
14202
|
+
return this._context.withAsyncErrorTeedToState((...args) => __awaiter$f(this, void 0, void 0, function* () {
|
14013
14203
|
// Retry logic?
|
14014
14204
|
const [request, options] = args;
|
14015
14205
|
const { content } = request;
|
@@ -14049,7 +14239,7 @@ class ProxyChatThreadClient {
|
|
14049
14239
|
}), 'ChatThreadClient.sendMessage');
|
14050
14240
|
}
|
14051
14241
|
case 'addParticipants': {
|
14052
|
-
return this._context.withAsyncErrorTeedToState((...args) => __awaiter$
|
14242
|
+
return this._context.withAsyncErrorTeedToState((...args) => __awaiter$f(this, void 0, void 0, function* () {
|
14053
14243
|
const result = yield chatThreadClient.addParticipants(...args);
|
14054
14244
|
const [addRequest] = args;
|
14055
14245
|
const participantsToAdd = addRequest.participants;
|
@@ -14058,7 +14248,7 @@ class ProxyChatThreadClient {
|
|
14058
14248
|
}), 'ChatThreadClient.addParticipants');
|
14059
14249
|
}
|
14060
14250
|
case 'deleteMessage': {
|
14061
|
-
return this._context.withAsyncErrorTeedToState((...args) => __awaiter$
|
14251
|
+
return this._context.withAsyncErrorTeedToState((...args) => __awaiter$f(this, void 0, void 0, function* () {
|
14062
14252
|
// DeleteMessage is able to either delete local one(for failed message) or synced message
|
14063
14253
|
const [messageId] = args;
|
14064
14254
|
if (this._context.deleteLocalMessage(chatThreadClient.threadId, messageId)) {
|
@@ -14076,12 +14266,12 @@ class ProxyChatThreadClient {
|
|
14076
14266
|
return createDecoratedListReadReceipts(chatThreadClient, this._context);
|
14077
14267
|
}
|
14078
14268
|
case 'sendTypingNotification': {
|
14079
|
-
return this._context.withAsyncErrorTeedToState((...args) => __awaiter$
|
14269
|
+
return this._context.withAsyncErrorTeedToState((...args) => __awaiter$f(this, void 0, void 0, function* () {
|
14080
14270
|
return yield chatThreadClient.sendTypingNotification(...args);
|
14081
14271
|
}), 'ChatThreadClient.sendTypingNotification');
|
14082
14272
|
}
|
14083
14273
|
case 'removeParticipant': {
|
14084
|
-
return this._context.withAsyncErrorTeedToState((...args) => __awaiter$
|
14274
|
+
return this._context.withAsyncErrorTeedToState((...args) => __awaiter$f(this, void 0, void 0, function* () {
|
14085
14275
|
const result = yield chatThreadClient.removeParticipant(...args);
|
14086
14276
|
const [removeIdentifier] = args;
|
14087
14277
|
this._context.deleteParticipant(chatThreadClient.threadId, communicationCommon.getIdentifierKind(removeIdentifier));
|
@@ -14089,7 +14279,7 @@ class ProxyChatThreadClient {
|
|
14089
14279
|
}), 'ChatThreadClient.removeParticipant');
|
14090
14280
|
}
|
14091
14281
|
case 'updateMessage': {
|
14092
|
-
return this._context.withAsyncErrorTeedToState((...args) => __awaiter$
|
14282
|
+
return this._context.withAsyncErrorTeedToState((...args) => __awaiter$f(this, void 0, void 0, function* () {
|
14093
14283
|
const result = yield chatThreadClient.updateMessage(...args);
|
14094
14284
|
const [messageId, updateOption] = args;
|
14095
14285
|
this._context.updateChatMessageContent(chatThreadClient.threadId, messageId, updateOption === null || updateOption === void 0 ? void 0 : updateOption.content);
|
@@ -14097,7 +14287,7 @@ class ProxyChatThreadClient {
|
|
14097
14287
|
}), 'ChatThreadClient.updateMessage');
|
14098
14288
|
}
|
14099
14289
|
case 'updateTopic': {
|
14100
|
-
return this._context.withAsyncErrorTeedToState((...args) => __awaiter$
|
14290
|
+
return this._context.withAsyncErrorTeedToState((...args) => __awaiter$f(this, void 0, void 0, function* () {
|
14101
14291
|
const result = yield chatThreadClient.updateTopic(...args);
|
14102
14292
|
const [topic] = args;
|
14103
14293
|
this._context.updateThreadTopic(chatThreadClient.threadId, topic);
|
@@ -14105,7 +14295,7 @@ class ProxyChatThreadClient {
|
|
14105
14295
|
}), 'ChatThreadClient.updateTopic');
|
14106
14296
|
}
|
14107
14297
|
case 'getProperties': {
|
14108
|
-
return this._context.withAsyncErrorTeedToState((...args) => __awaiter$
|
14298
|
+
return this._context.withAsyncErrorTeedToState((...args) => __awaiter$f(this, void 0, void 0, function* () {
|
14109
14299
|
const result = yield chatThreadClient.getProperties(...args);
|
14110
14300
|
this._context.updateThread(chatThreadClient.threadId, result);
|
14111
14301
|
return result;
|
@@ -14142,7 +14332,7 @@ const createDecoratedListThreads = (chatClient, context) => {
|
|
14142
14332
|
|
14143
14333
|
// Copyright (c) Microsoft Corporation.
|
14144
14334
|
// Licensed under the MIT license.
|
14145
|
-
var __awaiter$
|
14335
|
+
var __awaiter$e = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
14146
14336
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
14147
14337
|
return new (P || (P = Promise))(function (resolve, reject) {
|
14148
14338
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
@@ -14161,7 +14351,7 @@ const proxyChatClient = {
|
|
14161
14351
|
switch (prop) {
|
14162
14352
|
case 'createChatThread': {
|
14163
14353
|
return context.withAsyncErrorTeedToState(function (...args) {
|
14164
|
-
return __awaiter$
|
14354
|
+
return __awaiter$e(this, void 0, void 0, function* () {
|
14165
14355
|
const result = yield chatClient.createChatThread(...args);
|
14166
14356
|
const thread = result.chatThread;
|
14167
14357
|
if (thread) {
|
@@ -14174,7 +14364,7 @@ const proxyChatClient = {
|
|
14174
14364
|
}
|
14175
14365
|
case 'deleteChatThread': {
|
14176
14366
|
return context.withAsyncErrorTeedToState(function (...args) {
|
14177
|
-
return __awaiter$
|
14367
|
+
return __awaiter$e(this, void 0, void 0, function* () {
|
14178
14368
|
const result = yield chatClient.deleteChatThread(...args);
|
14179
14369
|
context.deleteThread(args[0]);
|
14180
14370
|
return result;
|
@@ -14194,7 +14384,7 @@ const proxyChatClient = {
|
|
14194
14384
|
}
|
14195
14385
|
case 'startRealtimeNotifications': {
|
14196
14386
|
return context.withAsyncErrorTeedToState(function (...args) {
|
14197
|
-
return __awaiter$
|
14387
|
+
return __awaiter$e(this, void 0, void 0, function* () {
|
14198
14388
|
const ret = yield chatClient.startRealtimeNotifications(...args);
|
14199
14389
|
if (!receiver.eventSubscriber) {
|
14200
14390
|
receiver.eventSubscriber = new EventSubscriber(chatClient, context);
|
@@ -14205,7 +14395,7 @@ const proxyChatClient = {
|
|
14205
14395
|
}
|
14206
14396
|
case 'stopRealtimeNotifications': {
|
14207
14397
|
return context.withAsyncErrorTeedToState(function (...args) {
|
14208
|
-
return __awaiter$
|
14398
|
+
return __awaiter$e(this, void 0, void 0, function* () {
|
14209
14399
|
const ret = yield chatClient.stopRealtimeNotifications(...args);
|
14210
14400
|
if (receiver.eventSubscriber) {
|
14211
14401
|
receiver.eventSubscriber.unsubscribe();
|
@@ -14811,6 +15001,16 @@ const END_CALL_PAGES = [
|
|
14811
15001
|
];
|
14812
15002
|
|
14813
15003
|
// Copyright (c) Microsoft Corporation.
|
15004
|
+
// Licensed under the MIT license.
|
15005
|
+
var __awaiter$d = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
15006
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
15007
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
15008
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
15009
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
15010
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
15011
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
15012
|
+
});
|
15013
|
+
};
|
14814
15014
|
const ACCESS_DENIED_TEAMS_MEETING_SUB_CODE = 5854;
|
14815
15015
|
const REMOTE_PSTN_USER_HUNG_UP = 560000;
|
14816
15016
|
const REMOVED_FROM_CALL_SUB_CODES = [5000, 5300, REMOTE_PSTN_USER_HUNG_UP];
|
@@ -14913,7 +15113,7 @@ const getCallEndReason = (call) => {
|
|
14913
15113
|
*/
|
14914
15114
|
const getCallCompositePage = (call, previousCall, unsupportedBrowserInfo) => {
|
14915
15115
|
/* @conditional-compile-remove(unsupported-browser) */
|
14916
|
-
if (isUnsupportedEnvironment(unsupportedBrowserInfo.
|
15116
|
+
if (isUnsupportedEnvironment(unsupportedBrowserInfo.environmentInfo, unsupportedBrowserInfo.unsupportedBrowserVersionOptedIn)) {
|
14917
15117
|
return 'unsupportedEnvironment';
|
14918
15118
|
}
|
14919
15119
|
if (call) {
|
@@ -15022,37 +15222,48 @@ const isDisabled$2 = (option) => {
|
|
15022
15222
|
return option.disabled;
|
15023
15223
|
};
|
15024
15224
|
/* @conditional-compile-remove(call-readiness) */
|
15225
|
+
/**
|
15226
|
+
* @returns Permissions state for the camera.
|
15227
|
+
*/
|
15228
|
+
const queryCameraPermissionFromPermissionsAPI = () => __awaiter$d(void 0, void 0, void 0, function* () {
|
15229
|
+
try {
|
15230
|
+
return (yield navigator.permissions.query({ name: 'camera' })).state;
|
15231
|
+
}
|
15232
|
+
catch (e) {
|
15233
|
+
console.info('permissions API is not supported by browser', e);
|
15234
|
+
return 'unsupported';
|
15235
|
+
}
|
15236
|
+
});
|
15237
|
+
/* @conditional-compile-remove(call-readiness) */
|
15238
|
+
/**
|
15239
|
+
* @returns Permissions state for the microphone.
|
15240
|
+
*/
|
15241
|
+
const queryMicrophonePermissionFromPermissionsAPI = () => __awaiter$d(void 0, void 0, void 0, function* () {
|
15242
|
+
try {
|
15243
|
+
return (yield navigator.permissions.query({ name: 'microphone' })).state;
|
15244
|
+
}
|
15245
|
+
catch (e) {
|
15246
|
+
console.info('permissions API is not supported by browser', e);
|
15247
|
+
return 'unsupported';
|
15248
|
+
}
|
15249
|
+
});
|
15250
|
+
/* @conditional-compile-remove(call-readiness) */
|
15025
15251
|
/**
|
15026
15252
|
*
|
15027
15253
|
* This function uses permission API to determine if device permission state is granted, prompt or denied
|
15028
15254
|
* @returns whether device permission state is granted, prompt or denied
|
15029
|
-
* If permission API is not supported on this browser,
|
15255
|
+
* If permission API is not supported on this browser, permission state is set to unsupported.
|
15030
15256
|
* @private
|
15031
15257
|
*/
|
15032
|
-
const getDevicePermissionState = (setVideoState, setAudioState) => {
|
15033
|
-
|
15034
|
-
|
15035
|
-
|
15036
|
-
setVideoState(result.state);
|
15037
|
-
})
|
15038
|
-
.catch(() => {
|
15039
|
-
setVideoState('unsupported');
|
15040
|
-
});
|
15041
|
-
navigator.permissions
|
15042
|
-
.query({ name: 'microphone' })
|
15043
|
-
.then((result) => {
|
15044
|
-
setAudioState(result.state);
|
15045
|
-
})
|
15046
|
-
.catch(() => {
|
15047
|
-
setAudioState('unsupported');
|
15048
|
-
});
|
15049
|
-
};
|
15258
|
+
const getDevicePermissionState = (setVideoState, setAudioState) => __awaiter$d(void 0, void 0, void 0, function* () {
|
15259
|
+
setVideoState(yield queryCameraPermissionFromPermissionsAPI());
|
15260
|
+
setAudioState(yield queryMicrophonePermissionFromPermissionsAPI());
|
15261
|
+
});
|
15050
15262
|
/* @conditional-compile-remove(unsupported-browser) */
|
15051
|
-
const isUnsupportedEnvironment = (
|
15052
|
-
return !!((
|
15053
|
-
((environmentInfo === null || environmentInfo === void 0 ? void 0 : environmentInfo.
|
15054
|
-
|
15055
|
-
(environmentInfo === null || environmentInfo === void 0 ? void 0 : environmentInfo.isSupportedPlatform) === false));
|
15263
|
+
const isUnsupportedEnvironment = (environmentInfo, unsupportedBrowserVersionOptedIn) => {
|
15264
|
+
return !!((environmentInfo === null || environmentInfo === void 0 ? void 0 : environmentInfo.isSupportedBrowser) === false ||
|
15265
|
+
((environmentInfo === null || environmentInfo === void 0 ? void 0 : environmentInfo.isSupportedBrowserVersion) === false && !unsupportedBrowserVersionOptedIn) ||
|
15266
|
+
(environmentInfo === null || environmentInfo === void 0 ? void 0 : environmentInfo.isSupportedPlatform) === false);
|
15056
15267
|
};
|
15057
15268
|
/**
|
15058
15269
|
* Check if an object is identifier.
|
@@ -16744,7 +16955,7 @@ const Microphone = (props) => {
|
|
16744
16955
|
: {};
|
16745
16956
|
const styles = React.useMemo(() => { var _a; return concatButtonBaseStyles((_a = props.styles) !== null && _a !== void 0 ? _a : {}); }, [props.styles]);
|
16746
16957
|
// tab focus on MicrophoneButton on page load
|
16747
|
-
return (React__default['default'].createElement(MicrophoneButton, Object.assign({ "data-ui-id": "call-composite-microphone-button" }, microphoneButtonProps, { showLabel: props.displayType !== 'compact', styles: styles }, microphoneButtonStrings, { enableDeviceSelectionMenu: props.splitButtonsForDeviceSelection, disabled: microphoneButtonProps.disabled || props.disabled })));
|
16958
|
+
return (React__default['default'].createElement(MicrophoneButton, Object.assign({ autoFocus: true, "data-ui-id": "call-composite-microphone-button" }, microphoneButtonProps, { showLabel: props.displayType !== 'compact', styles: styles }, microphoneButtonStrings, { enableDeviceSelectionMenu: props.splitButtonsForDeviceSelection, disabled: microphoneButtonProps.disabled || props.disabled })));
|
16748
16959
|
};
|
16749
16960
|
|
16750
16961
|
// Copyright (c) Microsoft Corporation.
|
@@ -17175,14 +17386,6 @@ const bannerNotificationStyles = {
|
|
17175
17386
|
pointerEvents: 'auto' // to allow the dismissal or error and warning bars in the notification container
|
17176
17387
|
}
|
17177
17388
|
};
|
17178
|
-
/**
|
17179
|
-
* @private
|
17180
|
-
*/
|
17181
|
-
const callArrangementContainerStyles = {
|
17182
|
-
root: {
|
17183
|
-
flexDirection: 'column-reverse' // to allow first initial keyboard focus on ControlBar
|
17184
|
-
}
|
17185
|
-
};
|
17186
17389
|
|
17187
17390
|
// Copyright (c) Microsoft Corporation.
|
17188
17391
|
/**
|
@@ -17947,7 +18150,7 @@ const hiddenStyles = {
|
|
17947
18150
|
*/
|
17948
18151
|
const sidePaneStyles = {
|
17949
18152
|
root: {
|
17950
|
-
height: '
|
18153
|
+
height: 'auto',
|
17951
18154
|
padding: '0.5rem 0.25rem',
|
17952
18155
|
maxWidth: '21.5rem'
|
17953
18156
|
}
|
@@ -18182,25 +18385,25 @@ const CallArrangement = (props) => {
|
|
18182
18385
|
}
|
18183
18386
|
return (React__default['default'].createElement("div", { ref: containerRef, className: react.mergeStyles(containerDivStyles) },
|
18184
18387
|
React__default['default'].createElement(react.Stack, { verticalFill: true, horizontalAlign: "stretch", className: containerClassName, "data-ui-id": props.dataUiId },
|
18185
|
-
React__default['default'].createElement(react.Stack, { horizontal: true, grow: true
|
18388
|
+
React__default['default'].createElement(react.Stack, { horizontal: true, grow: true },
|
18186
18389
|
React__default['default'].createElement(react.Stack.Item, { styles: notificationsContainerStyles },
|
18187
18390
|
React__default['default'].createElement(react.Stack, { styles: bannerNotificationStyles },
|
18188
18391
|
React__default['default'].createElement(_ComplianceBanner, Object.assign({}, props.complianceBannerProps))),
|
18189
18392
|
errorBarProps !== false && (React__default['default'].createElement(react.Stack, { styles: bannerNotificationStyles },
|
18190
18393
|
React__default['default'].createElement(ErrorBar, Object.assign({}, errorBarProps)))),
|
18191
18394
|
canUnmute && !!props.mutedNotificationProps && React__default['default'].createElement(MutedNotification, Object.assign({}, props.mutedNotificationProps))),
|
18192
|
-
((_b = props.callControlProps) === null || _b === void 0 ? void 0 : _b.options) !== false &&
|
18193
|
-
/* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */
|
18194
|
-
!isMobileWithActivePane && (React__default['default'].createElement(react.Stack.Item, { className: callControlsContainerStyles },
|
18195
|
-
React__default['default'].createElement(CallControls, Object.assign({}, props.callControlProps, { containerWidth: containerWidth, containerHeight: containerHeight, isMobile: props.mobileView,
|
18196
|
-
/* @conditional-compile-remove(one-to-n-calling) */
|
18197
|
-
peopleButtonChecked: activePane === 'people',
|
18198
|
-
/* @conditional-compile-remove(one-to-n-calling) */
|
18199
|
-
onPeopleButtonClicked: togglePeoplePane })))),
|
18200
18395
|
React__default['default'].createElement(react.Stack.Item, { grow: true, style: callCompositeContainerFlex() },
|
18201
18396
|
React__default['default'].createElement(react.Stack.Item, { styles: callGalleryStyles, grow: true }, props.onRenderGalleryContent && (React__default['default'].createElement(react.Stack, { verticalFill: true, styles: mediaGalleryContainerStyles }, props.onRenderGalleryContent())))),
|
18202
18397
|
/* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */
|
18203
|
-
callPaneContent())
|
18398
|
+
callPaneContent()),
|
18399
|
+
((_b = props.callControlProps) === null || _b === void 0 ? void 0 : _b.options) !== false &&
|
18400
|
+
/* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */
|
18401
|
+
!isMobileWithActivePane && (React__default['default'].createElement(react.Stack.Item, { className: callControlsContainerStyles },
|
18402
|
+
React__default['default'].createElement(CallControls, Object.assign({}, props.callControlProps, { containerWidth: containerWidth, containerHeight: containerHeight, isMobile: props.mobileView,
|
18403
|
+
/* @conditional-compile-remove(one-to-n-calling) */
|
18404
|
+
peopleButtonChecked: activePane === 'people',
|
18405
|
+
/* @conditional-compile-remove(one-to-n-calling) */
|
18406
|
+
onPeopleButtonClicked: togglePeoplePane })))))));
|
18204
18407
|
};
|
18205
18408
|
/* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */
|
18206
18409
|
const showShowPeopleTabHeaderButton$1 = (callControls) => {
|
@@ -19865,23 +20068,14 @@ const HoldPage = (props) => {
|
|
19865
20068
|
* @internal
|
19866
20069
|
*/
|
19867
20070
|
const UnsupportedBrowserPage = (props) => {
|
19868
|
-
var _a;
|
19869
20071
|
/* @conditional-compile-remove(unsupported-browser) */
|
19870
20072
|
const { onTroubleshootingClick, environmentInfo } = props;
|
19871
20073
|
/* @conditional-compile-remove(unsupported-browser) */
|
19872
20074
|
const adapter = useAdapter();
|
19873
20075
|
/* @conditional-compile-remove(unsupported-browser) */
|
19874
|
-
const
|
19875
|
-
|
19876
|
-
|
19877
|
-
? undefined
|
19878
|
-
: unsupportedEnvironmentFeature === false || unsupportedEnvironmentFeature === undefined
|
19879
|
-
? undefined
|
19880
|
-
: unsupportedEnvironmentFeature.unsupportedBrowserVersionAllowed
|
19881
|
-
? () => {
|
19882
|
-
adapter.allowUnsupportedBrowserVersion();
|
19883
|
-
}
|
19884
|
-
: undefined;
|
20076
|
+
const onContinueClick = () => {
|
20077
|
+
adapter.allowUnsupportedBrowserVersion();
|
20078
|
+
};
|
19885
20079
|
/* @conditional-compile-remove(unsupported-browser) */
|
19886
20080
|
const locale = useLocale();
|
19887
20081
|
/* @conditional-compile-remove(unsupported-browser) */
|
@@ -19899,7 +20093,7 @@ const UnsupportedBrowserPage = (props) => {
|
|
19899
20093
|
pageElement = (React__default['default'].createElement(UnsupportedBrowser, { onTroubleshootingClick: onTroubleshootingClick, strings: unsupportedBrowserStrings }));
|
19900
20094
|
}
|
19901
20095
|
else if (!(environmentInfo === null || environmentInfo === void 0 ? void 0 : environmentInfo.isSupportedBrowserVersion)) {
|
19902
|
-
pageElement = (React__default['default'].createElement(UnsupportedBrowserVersion, { onTroubleshootingClick: onTroubleshootingClick, strings: unsupportedBrowserVersionStrings,
|
20096
|
+
pageElement = (React__default['default'].createElement(UnsupportedBrowserVersion, { onTroubleshootingClick: onTroubleshootingClick, strings: unsupportedBrowserVersionStrings, onContinueAnywayClick: onContinueClick }));
|
19903
20097
|
}
|
19904
20098
|
else {
|
19905
20099
|
throw new Error('There was a problem with your environment info');
|
@@ -20186,10 +20380,14 @@ class CallContext {
|
|
20186
20380
|
/* @conditional-compile-remove(PSTN-calls) */ alternateCallerId: clientState.alternateCallerId,
|
20187
20381
|
/* @conditional-compile-remove(unsupported-browser) */ environmentInfo: clientState.environmentInfo,
|
20188
20382
|
/* @conditional-compile-remove(unsupported-browser) */ unsupportedBrowserVersionsAllowed: false,
|
20189
|
-
/* @conditional-compile-remove(unsupported-browser) */ features: options === null || options === void 0 ? void 0 : options.features,
|
20190
20383
|
/* @conditional-compile-remove(rooms) */ roleHint: options === null || options === void 0 ? void 0 : options.roleHint
|
20191
20384
|
};
|
20192
20385
|
this.emitter.setMaxListeners((_b = options === null || options === void 0 ? void 0 : options.maxListeners) !== null && _b !== void 0 ? _b : 50);
|
20386
|
+
this.bindPublicMethods();
|
20387
|
+
}
|
20388
|
+
bindPublicMethods() {
|
20389
|
+
/* @conditional-compile-remove(unsupported-browser) */
|
20390
|
+
this.setAllowedUnsupportedBrowser.bind(this);
|
20193
20391
|
}
|
20194
20392
|
onStateChange(handler) {
|
20195
20393
|
this.emitter.on('stateChanged', handler);
|
@@ -20226,7 +20424,6 @@ class CallContext {
|
|
20226
20424
|
/* @conditional-compile-remove(unsupported-browser) */
|
20227
20425
|
const environmentInfo = {
|
20228
20426
|
environmentInfo: this.state.environmentInfo,
|
20229
|
-
features: this.state.features,
|
20230
20427
|
unsupportedBrowserVersionOptedIn: this.state.unsupportedBrowserVersionsAllowed
|
20231
20428
|
};
|
20232
20429
|
const newPage = getCallCompositePage(call, latestEndedCall,
|
@@ -20564,6 +20761,7 @@ class AzureCommunicationCallAdapter {
|
|
20564
20761
|
/* @conditional-compile-remove(unsupported-browser) */
|
20565
20762
|
allowUnsupportedBrowserVersion() {
|
20566
20763
|
this.context.setAllowedUnsupportedBrowser();
|
20764
|
+
this.context.updateClientState(this.callClient.getState());
|
20567
20765
|
}
|
20568
20766
|
startCall(participants, options) {
|
20569
20767
|
var _a, _b;
|
@@ -21242,50 +21440,6 @@ const DesktopMoreButton = (props) => {
|
|
21242
21440
|
strings: moreButtonStrings, menuIconProps: { hidden: true }, menuProps: { items: moreButtonContextualMenuItems() } })));
|
21243
21441
|
};
|
21244
21442
|
|
21245
|
-
// Copyright (c) Microsoft Corporation.
|
21246
|
-
// Licensed under the MIT license.
|
21247
|
-
/**
|
21248
|
-
* @private
|
21249
|
-
*/
|
21250
|
-
const compositeOuterContainerStyles = {
|
21251
|
-
root: {
|
21252
|
-
width: '100%',
|
21253
|
-
// Create a new stacking context so that DrawerMenu can be positioned absolutely.
|
21254
|
-
position: 'relative'
|
21255
|
-
}
|
21256
|
-
};
|
21257
|
-
/** @private */
|
21258
|
-
const callCompositeContainerStyles = {
|
21259
|
-
root: {
|
21260
|
-
// Start a new stacking context so that any `position:absolute` elements
|
21261
|
-
// inside the call composite do not compete with its siblings.
|
21262
|
-
position: 'relative'
|
21263
|
-
}
|
21264
|
-
};
|
21265
|
-
/** @private */
|
21266
|
-
const controlBarContainerStyles = {
|
21267
|
-
root: {
|
21268
|
-
// Start a new stacking context so that any `position:absolute` elements
|
21269
|
-
// inside the control bar do not compete with its siblings.
|
21270
|
-
position: 'relative'
|
21271
|
-
}
|
21272
|
-
};
|
21273
|
-
/** @private */
|
21274
|
-
const hiddenAutoFocusButtonStyles = {
|
21275
|
-
root: {
|
21276
|
-
width: '0',
|
21277
|
-
height: '0',
|
21278
|
-
margin: '0',
|
21279
|
-
minHeight: '0',
|
21280
|
-
minWidth: '0',
|
21281
|
-
maxHeight: '0',
|
21282
|
-
maxWidth: '0',
|
21283
|
-
outline: 'none',
|
21284
|
-
padding: '0',
|
21285
|
-
position: 'absolute'
|
21286
|
-
}
|
21287
|
-
};
|
21288
|
-
|
21289
21443
|
// Copyright (c) Microsoft Corporation.
|
21290
21444
|
const inferCallWithChatControlOptions$1 = (mobileView, callWithChatControls) => {
|
21291
21445
|
if (callWithChatControls === false) {
|
@@ -21308,13 +21462,6 @@ const inferCallWithChatControlOptions$1 = (mobileView, callWithChatControls) =>
|
|
21308
21462
|
*/
|
21309
21463
|
const CallWithChatControlBar = (props) => {
|
21310
21464
|
var _a, _b;
|
21311
|
-
React.useEffect(() => {
|
21312
|
-
var _a;
|
21313
|
-
// On mount, button used for initial focus is hidden to prevent screen readers from announcing the initial focus
|
21314
|
-
if (document.querySelector('[data-ui-id=call-with-chat-autofocus-hidden-button]') === document.activeElement) {
|
21315
|
-
(_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.setAttribute('hidden', 'true');
|
21316
|
-
}
|
21317
|
-
}, []);
|
21318
21465
|
const theme = react.useTheme();
|
21319
21466
|
const callWithChatStrings = useCallWithChatCompositeStrings();
|
21320
21467
|
const options = inferCallWithChatControlOptions$1(props.mobileView, props.callControls);
|
@@ -21355,7 +21502,6 @@ const CallWithChatControlBar = (props) => {
|
|
21355
21502
|
React__default['default'].createElement(react.Stack.Item, { grow: true },
|
21356
21503
|
React__default['default'].createElement(CallAdapterProvider, { adapter: props.callAdapter },
|
21357
21504
|
React__default['default'].createElement(react.Stack, { horizontalAlign: "center" },
|
21358
|
-
React__default['default'].createElement(ControlBarButton, { autoFocus: true, ariaHidden: true, "data-ui-id": 'call-with-chat-autofocus-hidden-button', styles: hiddenAutoFocusButtonStyles, tabIndex: -1 }),
|
21359
21505
|
React__default['default'].createElement(react.Stack.Item, null,
|
21360
21506
|
React__default['default'].createElement(ControlBar, { layout: "horizontal", styles: centerContainerStyles },
|
21361
21507
|
isEnabled$1(options.microphoneButton) && (React__default['default'].createElement(Microphone, { displayType: options.displayType, styles: commonButtonStyles, splitButtonsForDeviceSelection: !props.mobileView,
|
@@ -21462,6 +21608,35 @@ const getDesktopEndCallButtonStyles = (theme) => {
|
|
21462
21608
|
};
|
21463
21609
|
const isEnabled$1 = (option) => option !== false;
|
21464
21610
|
|
21611
|
+
// Copyright (c) Microsoft Corporation.
|
21612
|
+
// Licensed under the MIT license.
|
21613
|
+
/**
|
21614
|
+
* @private
|
21615
|
+
*/
|
21616
|
+
const compositeOuterContainerStyles = {
|
21617
|
+
root: {
|
21618
|
+
width: '100%',
|
21619
|
+
// Create a new stacking context so that DrawerMenu can be positioned absolutely.
|
21620
|
+
position: 'relative'
|
21621
|
+
}
|
21622
|
+
};
|
21623
|
+
/** @private */
|
21624
|
+
const callCompositeContainerStyles = {
|
21625
|
+
root: {
|
21626
|
+
// Start a new stacking context so that any `position:absolute` elements
|
21627
|
+
// inside the call composite do not compete with its siblings.
|
21628
|
+
position: 'relative'
|
21629
|
+
}
|
21630
|
+
};
|
21631
|
+
/** @private */
|
21632
|
+
const controlBarContainerStyles = {
|
21633
|
+
root: {
|
21634
|
+
// Start a new stacking context so that any `position:absolute` elements
|
21635
|
+
// inside the control bar do not compete with its siblings.
|
21636
|
+
position: 'relative'
|
21637
|
+
}
|
21638
|
+
};
|
21639
|
+
|
21465
21640
|
// Copyright (c) Microsoft Corporation.
|
21466
21641
|
// Licensed under the MIT license.
|
21467
21642
|
var __awaiter$3 = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
@@ -21594,7 +21769,9 @@ function callAdapterStateFromCallWithChatAdapterState(callWithChatAdapterState)
|
|
21594
21769
|
isTeamsCall: callWithChatAdapterState.isTeamsCall,
|
21595
21770
|
latestErrors: callWithChatAdapterState.latestCallErrors,
|
21596
21771
|
/* @conditional-compile-remove(PSTN-calls) */
|
21597
|
-
alternateCallerId: callWithChatAdapterState.alternateCallerId
|
21772
|
+
alternateCallerId: callWithChatAdapterState.alternateCallerId,
|
21773
|
+
/* @conditional-compile-remove(unsupported-browser) */
|
21774
|
+
environmentInfo: callWithChatAdapterState.environmentInfo
|
21598
21775
|
};
|
21599
21776
|
}
|
21600
21777
|
|