@azure/communication-react 1.20.0-alpha-202410040016 → 1.20.0-alpha-202410080015

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/dist/communication-react.d.ts +4 -0
  2. package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-BkiCWROx.js → ChatMessageComponentAsRichTextEditBox-BwIa2hTH.js} +2 -2
  3. package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-BkiCWROx.js.map → ChatMessageComponentAsRichTextEditBox-BwIa2hTH.js.map} +1 -1
  4. package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-BQc7785_.js → RichTextSendBoxWrapper-CMAkkxJl.js} +2 -2
  5. package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-BQc7785_.js.map → RichTextSendBoxWrapper-CMAkkxJl.js.map} +1 -1
  6. package/dist/dist-cjs/communication-react/{index-Cs1eMyS2.js → index-Bj4O6YVq.js} +461 -380
  7. package/dist/dist-cjs/communication-react/index-Bj4O6YVq.js.map +1 -0
  8. package/dist/dist-cjs/communication-react/index.js +1 -1
  9. package/dist/dist-esm/acs-ui-common/src/dataConversion.js +5 -1
  10. package/dist/dist-esm/acs-ui-common/src/dataConversion.js.map +1 -1
  11. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  12. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  13. package/dist/dist-esm/acs-ui-javascript-loaders/src/callCompositeLoader.js +1 -1
  14. package/dist/dist-esm/acs-ui-javascript-loaders/src/callCompositeLoader.js.map +1 -1
  15. package/dist/dist-esm/acs-ui-javascript-loaders/src/callWithChatCompositeLoader.js +1 -1
  16. package/dist/dist-esm/acs-ui-javascript-loaders/src/callWithChatCompositeLoader.js.map +1 -1
  17. package/dist/dist-esm/acs-ui-javascript-loaders/src/chatCompositeLoader.js +1 -1
  18. package/dist/dist-esm/acs-ui-javascript-loaders/src/chatCompositeLoader.js.map +1 -1
  19. package/dist/dist-esm/acs-ui-javascript-loaders/src/outboundCallCompositeLoader.js +1 -1
  20. package/dist/dist-esm/acs-ui-javascript-loaders/src/outboundCallCompositeLoader.js.map +1 -1
  21. package/dist/dist-esm/calling-component-bindings/src/baseSelectors.d.ts +3 -3
  22. package/dist/dist-esm/calling-component-bindings/src/baseSelectors.js.map +1 -1
  23. package/dist/dist-esm/calling-component-bindings/src/callControlSelectors.js +1 -1
  24. package/dist/dist-esm/calling-component-bindings/src/callControlSelectors.js.map +1 -1
  25. package/dist/dist-esm/calling-component-bindings/src/getRemoteParticipantsExcludingConsumers.js +2 -1
  26. package/dist/dist-esm/calling-component-bindings/src/getRemoteParticipantsExcludingConsumers.js.map +1 -1
  27. package/dist/dist-esm/calling-component-bindings/src/utils/callUtils.js +2 -1
  28. package/dist/dist-esm/calling-component-bindings/src/utils/callUtils.js.map +1 -1
  29. package/dist/dist-esm/calling-stateful-client/src/BreakoutRoomsSubscriber.js +2 -2
  30. package/dist/dist-esm/calling-stateful-client/src/BreakoutRoomsSubscriber.js.map +1 -1
  31. package/dist/dist-esm/calling-stateful-client/src/CallContext.js +34 -12
  32. package/dist/dist-esm/calling-stateful-client/src/CallContext.js.map +1 -1
  33. package/dist/dist-esm/calling-stateful-client/src/DeviceManagerDeclarative.js +49 -43
  34. package/dist/dist-esm/calling-stateful-client/src/DeviceManagerDeclarative.js.map +1 -1
  35. package/dist/dist-esm/calling-stateful-client/src/UserFacingDiagnosticsSubscriber.js +1 -1
  36. package/dist/dist-esm/calling-stateful-client/src/UserFacingDiagnosticsSubscriber.js.map +1 -1
  37. package/dist/dist-esm/react-components/src/theming/generateTheme.js +10 -2
  38. package/dist/dist-esm/react-components/src/theming/generateTheme.js.map +1 -1
  39. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js +13 -9
  40. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js.map +1 -1
  41. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts +4 -0
  42. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.js.map +1 -1
  43. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js +15 -14
  44. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js.map +1 -1
  45. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallControls.d.ts +0 -3
  46. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallControls.js +28 -21
  47. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallControls.js.map +1 -1
  48. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalDeviceSettings.js +11 -7
  49. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalDeviceSettings.js.map +1 -1
  50. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.js +7 -8
  51. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.js.map +1 -1
  52. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/SidePane.d.ts +1 -0
  53. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/SidePane.js +1 -1
  54. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/SidePane.js.map +1 -1
  55. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/usePeoplePane.js +7 -3
  56. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/usePeoplePane.js.map +1 -1
  57. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/useVideoEffectsPane.js +5 -2
  58. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/useVideoEffectsPane.js.map +1 -1
  59. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Camera.js +7 -6
  60. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Camera.js.map +1 -1
  61. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Devices.js +4 -4
  62. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Devices.js.map +1 -1
  63. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Microphone.js +6 -7
  64. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Microphone.js.map +1 -1
  65. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/ScreenShare.js +5 -5
  66. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/ScreenShare.js.map +1 -1
  67. package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/useHandlers.js +3 -2
  68. package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/useHandlers.js.map +1 -1
  69. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js +15 -10
  70. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js.map +1 -1
  71. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/DtmfDialpadPage.js +7 -9
  72. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/DtmfDialpadPage.js.map +1 -1
  73. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.d.ts +20 -1
  74. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.js +19 -0
  75. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.js.map +1 -1
  76. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js +33 -36
  77. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js.map +1 -1
  78. package/dist/dist-esm/react-composites/src/composites/ChatComposite/hooks/useSelector.d.ts +6 -0
  79. package/dist/dist-esm/react-composites/src/composites/ChatComposite/hooks/useSelector.js +11 -0
  80. package/dist/dist-esm/react-composites/src/composites/ChatComposite/hooks/useSelector.js.map +1 -0
  81. package/dist/dist-esm/react-composites/src/composites/ChatComposite/selectors/baseSelectors.d.ts +16 -0
  82. package/dist/dist-esm/react-composites/src/composites/ChatComposite/selectors/baseSelectors.js +15 -0
  83. package/dist/dist-esm/react-composites/src/composites/ChatComposite/selectors/baseSelectors.js.map +1 -0
  84. package/dist/dist-esm/react-composites/src/composites/common/ModalLocalAndRemotePIP.js +4 -5
  85. package/dist/dist-esm/react-composites/src/composites/common/ModalLocalAndRemotePIP.js.map +1 -1
  86. package/dist/dist-esm/react-composites/src/composites/common/PeoplePaneContent.d.ts +3 -0
  87. package/dist/dist-esm/react-composites/src/composites/common/PeoplePaneContent.js +4 -7
  88. package/dist/dist-esm/react-composites/src/composites/common/PeoplePaneContent.js.map +1 -1
  89. package/dist/dist-esm/react-composites/src/composites/common/VideoEffectsPane.d.ts +2 -0
  90. package/dist/dist-esm/react-composites/src/composites/common/VideoEffectsPane.js +9 -4
  91. package/dist/dist-esm/react-composites/src/composites/common/VideoEffectsPane.js.map +1 -1
  92. package/dist/dist-esm/react-composites/src/composites/localization/locales/en-US/strings.json +1 -0
  93. package/package.json +5 -5
  94. package/dist/dist-cjs/communication-react/index-Cs1eMyS2.js.map +0 -1
@@ -188,7 +188,7 @@ function getDefaultExportFromCjs (x) {
188
188
  // Copyright (c) Microsoft Corporation.
189
189
  // Licensed under the MIT License.
190
190
  // GENERATED FILE. DO NOT EDIT MANUALLY.
191
- var telemetryVersion = '1.20.0-alpha-202410040016';
191
+ var telemetryVersion = '1.20.0-alpha-202410080015';
192
192
 
193
193
 
194
194
  var telemetryVersion$1 = /*@__PURE__*/getDefaultExportFromCjs(telemetryVersion);
@@ -372,7 +372,11 @@ function _getKeys(obj) {
372
372
  * @internal
373
373
  */
374
374
  const _base64ToBlob = (dataURI) => {
375
- const byteString = atob(dataURI.split(',')[1]);
375
+ const str = dataURI.split(',')[1];
376
+ if (!str) {
377
+ throw new Error('Invalid base64 string');
378
+ }
379
+ const byteString = atob(str);
376
380
  const arrayBuffer = new ArrayBuffer(byteString.length);
377
381
  const uint8Array = new Uint8Array(arrayBuffer);
378
382
  for (let i = 0; i < byteString.length; i++) {
@@ -537,7 +541,7 @@ const getCallState = (state, props) => { var _a; return (_a = state.calls[props.
537
541
  /**
538
542
  * @private
539
543
  */
540
- const getEnvironmentInfo = (state) => {
544
+ const getEnvironmentInfo$1 = (state) => {
541
545
  /* @conditional-compile-remove(unsupported-browser) */
542
546
  return state.environmentInfo;
543
547
  };
@@ -641,9 +645,10 @@ const _isInLobbyOrConnecting = (callStatus) => !!callStatus && ['Connecting', 'R
641
645
  * @internal
642
646
  */
643
647
  const _isPreviewOn = (deviceManager) => {
648
+ var _a;
644
649
  // TODO: we should take in a LocalVideoStream that developer wants to use as their 'Preview' view. We should also
645
650
  // handle cases where 'Preview' view is in progress and not necessary completed.
646
- return deviceManager.unparentedViews.length > 0 && deviceManager.unparentedViews[0].view !== undefined;
651
+ return ((_a = deviceManager.unparentedViews[0]) === null || _a === void 0 ? void 0 : _a.view) !== undefined;
647
652
  };
648
653
  /**
649
654
  * Dispose of all preview views
@@ -812,7 +817,7 @@ const screenShareButtonSelector = reselect__namespace.createSelector([getIsScree
812
817
  ((capabilities === null || capabilities === void 0 ? void 0 : capabilities.shareScreen.isPresent) === false && (capabilities === null || capabilities === void 0 ? void 0 : capabilities.shareScreen.reason) !== 'NotInitialized') ||
813
818
  role === 'Consumer' ||
814
819
  role === 'Attendee';
815
- disabled = disabled || ['InLobby', 'Connecting', 'LocalHold'].includes(callState);
820
+ disabled = disabled || ['InLobby', 'Connecting', 'LocalHold'].includes(callState !== null && callState !== void 0 ? callState : 'None');
816
821
  return {
817
822
  checked: isScreenSharingOn,
818
823
  disabled
@@ -1525,7 +1530,7 @@ const notificationStackSelector = reselect.createSelector([
1525
1530
  /* @conditional-compile-remove(breakout-rooms) */ getLatestNotifications,
1526
1531
  getDiagnostics,
1527
1532
  getDeviceManager$1,
1528
- getEnvironmentInfo,
1533
+ getEnvironmentInfo$1,
1529
1534
  getMeetingConferencePhones,
1530
1535
  /* @conditional-compile-remove(breakout-rooms) */ getAssignedBreakoutRoom$1
1531
1536
  ], (latestErrors,
@@ -1841,22 +1846,24 @@ class ProxyDeviceManager {
1841
1846
  this._deviceManager.on('selectedMicrophoneChanged', this.selectedMicrophoneChanged);
1842
1847
  this._deviceManager.on('selectedSpeakerChanged', this.selectedSpeakerChanged);
1843
1848
  // Subscribe to browser camera permissions changes
1844
- try {
1845
- navigator.permissions.query({ name: 'camera' }).then((cameraPermissions) => {
1846
- cameraPermissions.addEventListener('change', this.permissionsApiStateChangeHandler);
1847
- });
1848
- }
1849
- catch (e) {
1850
- console.info('Could not subscribe to Permissions API Camera changed events, API is not supported by browser', e);
1851
- }
1852
- // Subscribe to browser microphone permissions changes
1853
- try {
1854
- navigator.permissions.query({ name: 'microphone' }).then((micPermissions) => {
1855
- micPermissions.addEventListener('change', this.permissionsApiStateChangeHandler);
1856
- });
1857
- }
1858
- catch (e) {
1859
- console.info('Could not subscribe to Permissions API Microphone changed events, API is not supported by browser', e);
1849
+ if (navigator.permissions) {
1850
+ try {
1851
+ navigator.permissions.query({ name: 'camera' }).then((cameraPermissions) => {
1852
+ cameraPermissions.addEventListener('change', this.permissionsApiStateChangeHandler);
1853
+ });
1854
+ }
1855
+ catch (e) {
1856
+ console.info('Could not subscribe to Permissions API Camera changed events, API is not supported by browser', e);
1857
+ }
1858
+ // Subscribe to browser microphone permissions changes
1859
+ try {
1860
+ navigator.permissions.query({ name: 'microphone' }).then((micPermissions) => {
1861
+ micPermissions.addEventListener('change', this.permissionsApiStateChangeHandler);
1862
+ });
1863
+ }
1864
+ catch (e) {
1865
+ console.info('Could not subscribe to Permissions API Microphone changed events, API is not supported by browser', e);
1866
+ }
1860
1867
  }
1861
1868
  };
1862
1869
  /**
@@ -1867,23 +1874,25 @@ class ProxyDeviceManager {
1867
1874
  this._deviceManager.off('audioDevicesUpdated', this.audioDevicesUpdated);
1868
1875
  this._deviceManager.off('selectedMicrophoneChanged', this.selectedMicrophoneChanged);
1869
1876
  this._deviceManager.off('selectedSpeakerChanged', this.selectedSpeakerChanged);
1870
- // Unsubscribe from browser camera permissions changes
1871
- try {
1872
- navigator.permissions.query({ name: 'camera' }).then((cameraPermissions) => {
1873
- cameraPermissions.removeEventListener('change', this.permissionsApiStateChangeHandler);
1874
- });
1875
- }
1876
- catch (e) {
1877
- console.info('Could not Unsubscribe to Permissions API Camera changed events, API is not supported by browser', e);
1878
- }
1879
- // Unsubscribe from browser microphone permissions changes
1880
- try {
1881
- navigator.permissions.query({ name: 'microphone' }).then((micPermissions) => {
1882
- micPermissions.removeEventListener('change', this.permissionsApiStateChangeHandler);
1883
- });
1884
- }
1885
- catch (e) {
1886
- console.info('Could not Unsubscribe to Permissions API Camera changed events, API is not supported by browser', e);
1877
+ if (navigator.permissions) {
1878
+ // Unsubscribe from browser camera permissions changes
1879
+ try {
1880
+ navigator.permissions.query({ name: 'camera' }).then((cameraPermissions) => {
1881
+ cameraPermissions.removeEventListener('change', this.permissionsApiStateChangeHandler);
1882
+ });
1883
+ }
1884
+ catch (e) {
1885
+ console.info('Could not Unsubscribe to Permissions API Camera changed events, API is not supported by browser', e);
1886
+ }
1887
+ // Unsubscribe from browser microphone permissions changes
1888
+ try {
1889
+ navigator.permissions.query({ name: 'microphone' }).then((micPermissions) => {
1890
+ micPermissions.removeEventListener('change', this.permissionsApiStateChangeHandler);
1891
+ });
1892
+ }
1893
+ catch (e) {
1894
+ console.info('Could not Unsubscribe to Permissions API Camera changed events, API is not supported by browser', e);
1895
+ }
1887
1896
  }
1888
1897
  };
1889
1898
  this.permissionsApiStateChangeHandler = () => __awaiter$X(this, void 0, void 0, function* () {
@@ -1924,16 +1933,18 @@ class ProxyDeviceManager {
1924
1933
  // information about the device permission state, but is not supported yet in Firefox or Android WebView.
1925
1934
  // Note: It also has the limitation where it cannot detect if the device is blocked by the Operating System
1926
1935
  // permissions.
1927
- try {
1928
- const [cameraPermissions, micPermissions] = yield Promise.all([
1929
- navigator.permissions.query({ name: 'camera' }),
1930
- navigator.permissions.query({ name: 'microphone' })
1931
- ]);
1932
- hasCameraPermission = cameraPermissions.state === 'granted';
1933
- hasMicPermission = micPermissions.state === 'granted';
1934
- }
1935
- catch (e) {
1936
- console.info('Permissions API is not supported by browser', e);
1936
+ if (navigator.permissions) {
1937
+ try {
1938
+ const [cameraPermissions, micPermissions] = yield Promise.all([
1939
+ navigator.permissions.query({ name: 'camera' }),
1940
+ navigator.permissions.query({ name: 'microphone' })
1941
+ ]);
1942
+ hasCameraPermission = cameraPermissions.state === 'granted';
1943
+ hasMicPermission = micPermissions.state === 'granted';
1944
+ }
1945
+ catch (e) {
1946
+ console.info('Permissions API is not supported by browser', e);
1947
+ }
1937
1948
  }
1938
1949
  this._context.setDeviceManagerDeviceAccess({
1939
1950
  video: hasCameraPermission,
@@ -2542,7 +2553,10 @@ let CallContext$2 = class CallContext {
2542
2553
  // Performance note: This loop should run only once because the number of entries
2543
2554
  // is never allowed to exceed MAX_CALL_HISTORY_LENGTH. A loop is used for correctness.
2544
2555
  while (Object.keys(draft.callsEnded).length >= MAX_CALL_HISTORY_LENGTH) {
2545
- delete draft.callsEnded[findOldestCallEnded(draft.callsEnded)];
2556
+ const oldestCall = findOldestCallEnded(draft.callsEnded);
2557
+ if (oldestCall) {
2558
+ delete draft.callsEnded[oldestCall];
2559
+ }
2546
2560
  }
2547
2561
  draft.callsEnded[latestCallId] = call;
2548
2562
  }
@@ -2804,6 +2818,12 @@ let CallContext$2 = class CallContext {
2804
2818
  if (participantKey === toFlatCommunicationIdentifier(this._state.userId)) {
2805
2819
  call.localParticipantReaction = newReactionState;
2806
2820
  }
2821
+ else if (!participant) {
2822
+ // Warn if we can't find the participant in the call but we are trying to set their reaction state to a new reaction.
2823
+ if (reactionMessage !== null) {
2824
+ console.warn(`Participant ${participantKey} not found in call ${callId}. Cannot set reaction state.`);
2825
+ }
2826
+ }
2807
2827
  else {
2808
2828
  participant.reactionState = newReactionState;
2809
2829
  }
@@ -2841,7 +2861,7 @@ let CallContext$2 = class CallContext {
2841
2861
  viewAttendeeNames.reason === 'MeetingRestricted') {
2842
2862
  call.hideAttendeeNames = true;
2843
2863
  }
2844
- else {
2864
+ else if (call) {
2845
2865
  call.hideAttendeeNames = false;
2846
2866
  }
2847
2867
  }
@@ -3156,7 +3176,10 @@ let CallContext$2 = class CallContext {
3156
3176
  // Performance note: This loop should run only once because the number of entries
3157
3177
  // is never allowed to exceed MAX_CALL_HISTORY_LENGTH. A loop is used for correctness.
3158
3178
  while (Object.keys(draft.incomingCallsEnded).length >= MAX_CALL_HISTORY_LENGTH) {
3159
- delete draft.incomingCallsEnded[findOldestCallEnded(draft.incomingCallsEnded)];
3179
+ const oldestCall = findOldestCallEnded(draft.incomingCallsEnded);
3180
+ if (oldestCall) {
3181
+ delete draft.incomingCallsEnded[oldestCall];
3182
+ }
3160
3183
  }
3161
3184
  draft.incomingCallsEnded[callId] = call;
3162
3185
  }
@@ -3229,9 +3252,9 @@ let CallContext$2 = class CallContext {
3229
3252
  }
3230
3253
  setDeviceManagerUnparentedViewVideoEffects(localVideoStream, videoEffects) {
3231
3254
  this.modifyState((draft) => {
3232
- const foundIndex = draft.deviceManager.unparentedViews.findIndex((stream) => stream.mediaStreamType === localVideoStream.mediaStreamType);
3233
- if (foundIndex !== -1) {
3234
- draft.deviceManager.unparentedViews[foundIndex].videoEffects = videoEffects;
3255
+ const view = draft.deviceManager.unparentedViews.find((stream) => stream.mediaStreamType === localVideoStream.mediaStreamType);
3256
+ if (view) {
3257
+ view.videoEffects = videoEffects;
3235
3258
  }
3236
3259
  });
3237
3260
  }
@@ -3241,6 +3264,7 @@ let CallContext$2 = class CallContext {
3241
3264
  return id;
3242
3265
  }
3243
3266
  processNewCaption(captions, newCaption) {
3267
+ var _a;
3244
3268
  // time stamp when new caption comes in
3245
3269
  newCaption.timestamp = new Date();
3246
3270
  // if this is the first caption, push it in
@@ -3248,19 +3272,24 @@ let CallContext$2 = class CallContext {
3248
3272
  captions.push(newCaption);
3249
3273
  }
3250
3274
  // if the last caption is final, then push the new one in
3251
- else if (captions[captions.length - 1].resultType === 'Final') {
3275
+ else if (((_a = captions[captions.length - 1]) === null || _a === void 0 ? void 0 : _a.resultType) === 'Final') {
3252
3276
  captions.push(newCaption);
3253
3277
  }
3254
3278
  // if the last caption is Partial, then check if the speaker is the same as the new caption, if so, update the last caption
3255
3279
  else {
3256
- if (toFlatCommunicationIdentifier(captions[captions.length - 1].speaker.identifier) === toFlatCommunicationIdentifier(newCaption.speaker.identifier)) {
3280
+ const lastCaption = captions[captions.length - 1];
3281
+ if (lastCaption &&
3282
+ lastCaption.speaker.identifier &&
3283
+ newCaption.speaker.identifier &&
3284
+ toFlatCommunicationIdentifier(lastCaption.speaker.identifier) ===
3285
+ toFlatCommunicationIdentifier(newCaption.speaker.identifier)) {
3257
3286
  captions[captions.length - 1] = newCaption;
3258
3287
  }
3259
3288
  // if different speaker, ignore the interjector until the current speaker finishes
3260
3289
  // edge case: if we dont receive the final caption from the current speaker for 5 secs, we turn the current speaker caption to final and push in the new interjector
3261
- else {
3262
- if (Date.now() - captions[captions.length - 1].timestamp.getTime() > 5000) {
3263
- captions[captions.length - 1].resultType = 'Final';
3290
+ else if (lastCaption) {
3291
+ if (Date.now() - lastCaption.timestamp.getTime() > 5000) {
3292
+ lastCaption.resultType = 'Final';
3264
3293
  captions.push(newCaption);
3265
3294
  }
3266
3295
  }
@@ -3443,7 +3472,11 @@ const toCallError = (target, error) => {
3443
3472
  const findOldestCallEnded = (calls) => {
3444
3473
  var _a, _b, _c, _d;
3445
3474
  const callEntries = Object.entries(calls);
3446
- let [oldestCallId, oldestCall] = callEntries[0];
3475
+ const firstCallEntry = callEntries[0];
3476
+ if (!firstCallEntry) {
3477
+ return undefined; // no calls exist
3478
+ }
3479
+ let [oldestCallId, oldestCall] = firstCallEntry;
3447
3480
  if (oldestCall.endTime === undefined) {
3448
3481
  return oldestCallId;
3449
3482
  }
@@ -4552,8 +4585,8 @@ class UserFacingDiagnosticsSubscriber {
4552
4585
  for (const diagnostic of args.diagnostics) {
4553
4586
  const { remoteParticipant: _, rawId } = diagnostic, participantDiagnostic = __rest(diagnostic, ["remoteParticipant", "rawId"]);
4554
4587
  const participant = call.remoteParticipants[rawId];
4555
- participant.diagnostics = participant.diagnostics || {};
4556
4588
  if (participant) {
4589
+ participant.diagnostics = participant.diagnostics || {};
4557
4590
  participant.diagnostics[participantDiagnostic.diagnostic] = participantDiagnostic;
4558
4591
  }
4559
4592
  }
@@ -4846,7 +4879,7 @@ class BreakoutRoomsSubscriber {
4846
4879
  this._context.setAssignedBreakoutRoom(this._callIdRef.callId, breakoutRoom);
4847
4880
  };
4848
4881
  this.onBreakoutRoomsJoined = (call) => {
4849
- var _a, _b;
4882
+ var _a, _b, _c;
4850
4883
  this._context.setBreakoutRoomOriginCallId(this._callIdRef.callId, call.id);
4851
4884
  this._context.deleteLatestNotification(this._callIdRef.callId, 'assignedBreakoutRoomOpened');
4852
4885
  this._context.deleteLatestNotification(this._callIdRef.callId, 'assignedBreakoutRoomOpenedPromptJoin');
@@ -4857,7 +4890,7 @@ class BreakoutRoomsSubscriber {
4857
4890
  timestamp: new Date(Date.now())
4858
4891
  });
4859
4892
  // If assigned breakout room has a display name, set the display name for its call state.
4860
- const assignedBreakoutRoomDisplayName = (_b = (_a = this._context.getState().calls[this._callIdRef.callId].breakoutRooms) === null || _a === void 0 ? void 0 : _a.assignedBreakoutRoom) === null || _b === void 0 ? void 0 : _b.displayName;
4893
+ const assignedBreakoutRoomDisplayName = (_c = (_b = (_a = this._context.getState().calls[this._callIdRef.callId]) === null || _a === void 0 ? void 0 : _a.breakoutRooms) === null || _b === void 0 ? void 0 : _b.assignedBreakoutRoom) === null || _c === void 0 ? void 0 : _c.displayName;
4861
4894
  if (assignedBreakoutRoomDisplayName) {
4862
4895
  this._context.setBreakoutRoomDisplayName(call.id, assignedBreakoutRoomDisplayName);
4863
4896
  }
@@ -15296,7 +15329,7 @@ class _ErrorBoundary extends React.Component {
15296
15329
  // Copyright (c) Microsoft Corporation.
15297
15330
  // Licensed under the MIT License.
15298
15331
  /* @conditional-compile-remove(rich-text-editor) */
15299
- const ChatMessageComponentAsRichTextEditBox = React.lazy(() => Promise.resolve().then(function () { return require('./ChatMessageComponentAsRichTextEditBox-BkiCWROx.js'); }));
15332
+ const ChatMessageComponentAsRichTextEditBox = React.lazy(() => Promise.resolve().then(function () { return require('./ChatMessageComponentAsRichTextEditBox-BwIa2hTH.js'); }));
15300
15333
  /**
15301
15334
  * @private
15302
15335
  * Use this function to load RoosterJS dependencies early in the lifecycle.
@@ -15304,7 +15337,7 @@ const ChatMessageComponentAsRichTextEditBox = React.lazy(() => Promise.resolve()
15304
15337
  *
15305
15338
  * @conditional-compile-remove(rich-text-editor)
15306
15339
  */
15307
- const loadChatMessageComponentAsRichTextEditBox = () => Promise.resolve().then(function () { return require('./ChatMessageComponentAsRichTextEditBox-BkiCWROx.js'); });
15340
+ const loadChatMessageComponentAsRichTextEditBox = () => Promise.resolve().then(function () { return require('./ChatMessageComponentAsRichTextEditBox-BwIa2hTH.js'); });
15308
15341
  /**
15309
15342
  * @private
15310
15343
  */
@@ -25440,7 +25473,8 @@ const getRemoteParticipantsExcludingConsumers = reselect.createSelector([getRemo
25440
25473
  {
25441
25474
  const newRemoteParticipants = Object.assign({}, remoteParticipants);
25442
25475
  Object.keys(newRemoteParticipants).forEach((k) => {
25443
- if (newRemoteParticipants[k].role === 'Consumer') {
25476
+ var _a;
25477
+ if (((_a = newRemoteParticipants[k]) === null || _a === void 0 ? void 0 : _a.role) === 'Consumer') {
25444
25478
  delete newRemoteParticipants[k];
25445
25479
  }
25446
25480
  });
@@ -25673,7 +25707,7 @@ const useHandlers$3 = (component) => {
25673
25707
  *
25674
25708
  * @public
25675
25709
  */
25676
- const useSelector$3 = (selector, selectorProps) => {
25710
+ const useSelector$4 = (selector, selectorProps) => {
25677
25711
  var _a, _b, _c;
25678
25712
  const callClient = (_a = React.useContext(CallClientContext)) === null || _a === void 0 ? void 0 : _a.callClient;
25679
25713
  const callId = (_c = (_b = React.useContext(CallContext$1)) === null || _b === void 0 ? void 0 : _b.call) === null || _c === void 0 ? void 0 : _c.id;
@@ -25727,7 +25761,7 @@ const useSelector$3 = (selector, selectorProps) => {
25727
25761
  *
25728
25762
  * @public
25729
25763
  */
25730
- const errorBarSelector$1 = reselect.createSelector([getLatestErrors$1, getDiagnostics, getDeviceManager$1, getEnvironmentInfo], (latestErrors, diagnostics, deviceManager, environmentInfo) => {
25764
+ const errorBarSelector$1 = reselect.createSelector([getLatestErrors$1, getDiagnostics, getDeviceManager$1, getEnvironmentInfo$1], (latestErrors, diagnostics, deviceManager, environmentInfo) => {
25731
25765
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
25732
25766
  // The order in which the errors are returned is significant: The `ErrorBar` shows errors on the UI in that order.
25733
25767
  // There are several options for the ordering:
@@ -26198,7 +26232,7 @@ const useHandlers$2 = (component) => {
26198
26232
  *
26199
26233
  * @public
26200
26234
  */
26201
- const useSelector$2 = (selector, selectorProps) => {
26235
+ const useSelector$3 = (selector, selectorProps) => {
26202
26236
  var _a;
26203
26237
  const chatClient = React.useContext(ChatClientContext);
26204
26238
  const threadId = (_a = React.useContext(ChatThreadClientContext)) === null || _a === void 0 ? void 0 : _a.threadId;
@@ -26240,7 +26274,7 @@ const useSelector$2 = (selector, selectorProps) => {
26240
26274
  /**
26241
26275
  * @private
26242
26276
  */
26243
- const getUserId = (state) => toFlatCommunicationIdentifier(state.userId);
26277
+ const getUserId$1 = (state) => toFlatCommunicationIdentifier(state.userId);
26244
26278
  /**
26245
26279
  * @private
26246
26280
  */
@@ -26248,7 +26282,7 @@ const getDisplayName$1 = (state) => state.displayName;
26248
26282
  /**
26249
26283
  * @private
26250
26284
  */
26251
- const getChatMessages = (state, props) => { var _a; return (props.threadId && ((_a = state.threads[props.threadId]) === null || _a === void 0 ? void 0 : _a.chatMessages)) || {}; };
26285
+ const getChatMessages$1 = (state, props) => { var _a; return (props.threadId && ((_a = state.threads[props.threadId]) === null || _a === void 0 ? void 0 : _a.chatMessages)) || {}; };
26252
26286
  /**
26253
26287
  * @private
26254
26288
  */
@@ -26291,7 +26325,7 @@ const getLatestErrors = (state) => state.latestErrors;
26291
26325
  *
26292
26326
  * @public
26293
26327
  */
26294
- const sendBoxSelector = reselect.createSelector([getUserId, getDisplayName$1], (userId, displayName) => ({
26328
+ const sendBoxSelector = reselect.createSelector([getUserId$1, getDisplayName$1], (userId, displayName) => ({
26295
26329
  displayName: displayName,
26296
26330
  userId: userId
26297
26331
  }));
@@ -26627,7 +26661,7 @@ const hasValidParticipant = (chatMessage) => { var _a; return !!((_a = chatMessa
26627
26661
  *
26628
26662
  * @private
26629
26663
  */
26630
- const messageThreadSelectorWithThread = () => reselect.createSelector([getUserId, getChatMessages, getLatestReadTime, getIsLargeGroup, getReadReceipts, getParticipants], (userId, chatMessages, latestReadTime, isLargeGroup, readReceipts = [], participants) => {
26664
+ const messageThreadSelectorWithThread = () => reselect.createSelector([getUserId$1, getChatMessages$1, getLatestReadTime, getIsLargeGroup, getReadReceipts, getParticipants], (userId, chatMessages, latestReadTime, isLargeGroup, readReceipts = [], participants) => {
26631
26665
  // We can't get displayName in teams meeting interop for now, disable rr feature when it is teams interop
26632
26666
  const isTeamsInterop = Object.values(participants).find((p) => 'microsoftTeamsUserId' in p.id) !== undefined;
26633
26667
  // get number of participants
@@ -26747,7 +26781,7 @@ const convertSdkTypingIndicatorsToCommunicationParticipants = (typingIndicators,
26747
26781
  *
26748
26782
  * @public
26749
26783
  */
26750
- const typingIndicatorSelector = reselect.createSelector([getTypingIndicators, getParticipants, getUserId], (typingIndicators, participants, userId) => {
26784
+ const typingIndicatorSelector = reselect.createSelector([getTypingIndicators, getParticipants, getUserId$1], (typingIndicators, participants, userId) => {
26751
26785
  // if the participant size reaches the threshold then return no typing users
26752
26786
  if (Object.values(participants).length >= PARTICIPANTS_THRESHOLD) {
26753
26787
  return { typingUsers: [] };
@@ -26782,7 +26816,7 @@ const moderatorIndex = (participants) => {
26782
26816
  *
26783
26817
  * @public
26784
26818
  */
26785
- const chatParticipantListSelector = reselect__namespace.createSelector([getUserId, getParticipants, getDisplayName$1], (userId, chatParticipants, displayName) => {
26819
+ const chatParticipantListSelector = reselect__namespace.createSelector([getUserId$1, getParticipants, getDisplayName$1], (userId, chatParticipants, displayName) => {
26786
26820
  let participants = convertChatParticipantsToCommunicationParticipants(Object.values(chatParticipants));
26787
26821
  if (0 !== participants.length) {
26788
26822
  const moderatorIdx = moderatorIndex(participants);
@@ -28829,7 +28863,7 @@ const isChatError = (e) => {
28829
28863
  return 'target' in e && e['target'] !== undefined && 'innerError' in e && e['innerError'] !== undefined;
28830
28864
  };
28831
28865
 
28832
- var call$l={cameraLabel:"Camera",noCamerasLabel:"No cameras found",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",chatButtonLabel:"Chat",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkButtonActionedLabel:"Link copied",copyInviteLinkActionedAriaLabel:"Invite link copied",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",videoEffectsPaneTitle:"Effects",videoEffectsPaneBackgroundSelectionTitle:"Background",configurationPageVideoEffectsButtonLabel:"Effects",unableToStartVideoEffect:"Unable to apply video effect.",blurBackgroundEffectButtonLabel:"Blur",blurBackgroundTooltip:"Blur Background",removeBackgroundEffectButtonLabel:"None",removeBackgroundTooltip:"Remove Background",cameraOffBackgroundEffectWarningText:"Your camera is off. Turn on camera to see video effect.",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leavingCallTitle:"Leaving...",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",notInvitedToRoomDetails:"You are not able to join this room because you do not have an invite.",notInvitedToRoomTitle:"Not invited to room",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",peoplePaneTitle:"People",peoplePaneMoreButtonAriaLabel:"More",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call {numberOfPeople}",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",startSpotlightMenuLabel:"Spotlight for everyone",addSpotlightMenuLabel:"Add spotlight",stopSpotlightMenuLabel:"Stop spotlighting",stopSpotlightOnSelfMenuLabel:"Exit spotlight",spotlightLimitReachedMenuTitle:"Spotlight limit reached",stopAllSpotlightMenuLabel:"Stop all spotlights",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",roomNotFoundDetails:"The room ID provided could not be found.",roomNotFoundTitle:"Room not found",roomNotValidDetails:"This room is not valid at this current time.",roomNotValidTitle:"Room not valid",inviteToRoomRemovedDetails:"Your invite to join this room was removed.",inviteToRoomRemovedTitle:"Invite to room removed",soundLabel:"Sound",noMicrophonesLabel:"No microphones found",noSpeakersLabel:"No speakers found",startCallButtonLabel:"Start call",openDialpadButtonLabel:"Dial phone number",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",moreButtonCallingLabel:"More",resumeCallButtonLabel:"Resume",resumingCallButtonLabel:"Resuming...",resumeCallButtonAriaLabel:"Resume call",resumingCallButtonAriaLabel:"Resume call",holdScreenLabel:"You're on hold",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number",outboundCallingNoticeString:"Calling...",participantJoinedNoticeString:"{displayName} joined",twoParticipantJoinedNoticeString:"{displayName1} and {displayName2} have joined",threeParticipantJoinedNoticeString:"{displayName1}, {displayName2} and {displayName3} have joined",participantLeftNoticeString:"{displayName} left",twoParticipantLeftNoticeString:"{displayName1} and {displayName2} have left",threeParticipantLeftNoticeString:"{displayName1}, {displayName2} and {displayName3} have left",unnamedParticipantString:"unnamed participant",manyUnnamedParticipantsJoined:"unnamed participant and {numOfParticipants} other participants joined",manyUnnamedParticipantsLeft:"unnamed participant and {numOfParticipants} other participants left",manyParticipantsJoined:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants joined",manyParticipantsLeft:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants left",liveCaptionsLabel:"Live captions",captionsSettingsLabel:"Caption settings",startCaptionsButtonOnLabel:"Turn on captions",startCaptionsButtonOffLabel:"Turn off captions",startCaptionsButtonTooltipOnContent:"Turn off captions",startCaptionsButtonTooltipOffContent:"Turn on captions",captionsSettingsModalTitle:"Captions Settings",captionsSettingsSpokenLanguageDropdownLabel:"Spoken language",captionsSettingsCaptionLanguageDropdownLabel:"Captions language",captionsSettingsSpokenLanguageDropdownInfoText:"Language that everyone on this call is speaking.",captionsSettingsCaptionLanguageDropdownInfoText:"Captions will appear in this langugage.",captionsSettingsConfirmButtonLabel:"Confirm",captionsSettingsCancelButtonLabel:"Cancel",captionsSettingsModalAriaLabel:"Captions Setting Modal",captionsSettingsCloseModalButtonAriaLabel:"Close Captions Setting",captionsBannerMoreButtonCallingLabel:"More",captionsBannerMoreButtonTooltip:"More options",dismissModalAriaLabel:"Local and remote picture and picture, press enter to return to call",callRejectedTitle:"The call could not be completed",callRejectedMoreDetails:"The person you are trying to reach is unavailable. Please try again later.",callTimeoutTitle:"The call could not be completed",callTimeoutDetails:"The person you are trying to reach is unavailable. Please try again later.",callTimeoutBotTitle:"The call could not be completed",callTimeoutBotDetails:"The service that you are trying to reach is unavailable. Please try again later.",dtmfDialerButtonLabel:"Dialpad",dtmfDialerButtonTooltipOn:"Show dialpad",dtmfDialerButtonTooltipOff:"Hide dialpad",dtmfDialerMoreButtonLabelOn:"Show dialpad",dtmfDialerMoreButtonLabelOff:"Hide dialpad",phoneCallMoreButtonLabel:"Phone Call",spokenLanguageStrings:{"ar-ae":"Arabic - U.A.E.","ar-sa":"Arabic - Saudi Arabia","da-dk":"Danish","de-de":"German - Germany","en-au":"English - Australia","en-ca":"English - Canada","en-gb":"English - United Kingdom","en-in":"English - India","en-nz":"English - New Zealand","en-us":"English - United States","es-es":"Spanish - Spain (Modern Sort)","es-mx":"Spanish - Mexico","fi-fi":"Finnish","fr-ca":"French - Canada","fr-fr":"French - France","hi-in":"Hindi","it-it":"Italian - Italy","ja-jp":"Japanese","ko-kr":"Korean","nb-no":"Norwegian (Bokmål)","nl-be":"Dutch - Belgium","nl-nl":"Dutch - Netherlands","pl-pl":"Polish","pt-br":"Portuguese - Brazil","ru-ru":"Russian","sv-se":"Swedish","zh-cn":"Chinese - People's Republic of China","zh-hk":"Chinese - Hong Kong SAR","cs-cz":"Czech","pt-pt":"Portuguese - Portugal","tr-tr":"Turkish","vi-vn":"Vietnamese","th-th":"Thai","he-il":"Hebrew","cy-gb":"Welsh","uk-ua":"Ukrainian","el-gr":"Greek","hu-hu":"Hungarian","ro-ro":"Romanian","sk-sk":"Slovak","zh-tw":"Chinese - Taiwan"},captionLanguageStrings:{ar:"Arabic",da:"Danish",de:"German",en:"English",es:"Spanish",fi:"Finnish","fr-ca":"French - Canada",fr:"French - France",hi:"Hindi",it:"Italian",ja:"Japanese",ko:"Korean",nb:"Norwegian (Bokmål)",nl:"Dutch",pl:"Polish",pt:"Portuguese - Brazil",ru:"Russian",sv:"Swedish","zh-Hans":"Chinese (Simplified)","zh-Hant":"Chinese (Traditional)",cs:"Czech","pt-pt":"Portuguese - Portugal",tr:"Turkish",vi:"Vietnamese",th:"Thai",he:"Hebrew",cy:"Welsh",uk:"Ukrainian",el:"Greek",hu:"Hungarian",ro:"Romanian",sk:"Slovak"},captionsBannerSpinnerText:"Starting captions...",transferPageTransferorText:"Transferring...",transferPageTransferTargetText:"Connecting...",transferPageUnknownTransferorDisplayName:"Unknown",transferPageUnknownTransferTargetDisplayName:"Unknown",transferPageNoticeString:"You are being transferred",participantCouldNotBeReachedTitle:"Target participant is currently not available",participantCouldNotBeReachedMoreDetails:"Please contact participant when they are available",permissionToReachTargetParticipantNotAllowedTitle:"Permission to reach target participant is not allowed",permissionToReachTargetParticipantNotAllowedMoreDetails:"Please check that the target participant is in the same tenant",unableToResolveTenantTitle:"Unable to resolve tenant id for the target participant",unableToResolveTenantMoreDetails:"Please check the participant id is entered correctly",participantIdIsMalformedTitle:"Participant id is not in the correct format",participantIdIsMalformedMoreDetails:"Please check that the participant id is in the correct format",moreButtonGalleryControlLabel:"View",moreButtonGalleryPositionToggleLabel:"Move gallery to top",moreButtonGallerySpeakerLayoutLabel:"Speaker",moreButtonGalleryFloatingLocalLayoutLabel:"Dynamic",moreButtonGalleryDefaultLayoutLabel:"Gallery view",moreButtonGalleryFocusedContentLayoutLabel:"Focus on content",moreButtonLargeGalleryDefaultLayoutLabel:"Large Gallery",capabilityChangedNotification:{turnVideoOn:{lostDueToMeetingOption:"Your camera has been disabled. You can no longer share video.",grantedDueToMeetingOption:"Your camera has been enabled. Turn it on if you'd like to share video."},unmuteMic:{lostDueToMeetingOption:"Your mic has been disabled. You can no longer unmute.",grantedDueToMeetingOption:"Your mic has been enabled. Unmute if you'd like to speak."},shareScreen:{lostDueToRoleChangeToAttendee:"Your role has been changed. Some actions, like sharing content, won't be available to you.",grantedDueToRoleChangeToPresenter:"You're a presenter. You can share content and facilitate the meeting."},hideAttendeeNames:{hideAttendeeNameAttendee:"Your name is hidden from other attendees. Organizers and presenters can see your real name.",hideAttendeeNamePresenter:"Attendee names are hidden. Only organizers and presenters can see names to protect attendee privacy."}},surveyTitle:"Help us improve",starSurveyHelperText:"How was the quality of the call?",starSurveyOneStarText:"The quality was bad.",starSurveyTwoStarText:"The quality was poor.",starSurveyThreeStarText:"The quality was good.",starSurveyFourStarText:"The quality was great.",starSurveyFiveStarText:"The quality was excellent.",surveyConfirmButtonLabel:"Send Feedback",starRatingAriaLabel:"Select {0} of {1} stars",surveySkipButtonLabel:"Skip",tagsSurveyQuestion:"What could have been better?",tagsSurveyTextFieldDefaultText:"Other, please specify",tagsSurveyHelperText:"Check any issues you experienced",endOfSurveyText:"Thank you for your feedback!",surveyIssues:{overallRating:{callCannotJoin:"I could not join call",callCannotInvite:"I could not invite others into the call",hadToRejoin:"I had to rejoin the call",callEndedUnexpectedly:"Call ended for me unexpectedly",otherIssues:"I was having other issues with the call"},audioRating:{noLocalAudio:"The other side could not hear any sound",noRemoteAudio:"I could not hear any sound",echo:"I heard echos on the call",audioNoise:"I heard noise on the call",lowVolume:"Volume was low",audioStoppedUnexpectedly:"Audio stopped unexpectedly",distortedSpeech:"Audio was distorted",audioInterruption:"Audio was interrupted",otherIssues:"I was having other audio issues in this call"},videoRating:{noVideoReceived:"I could not see any video",noVideoSent:"Others could not see me",lowQuality:"Video quality was low",freezes:"Video frozen",stoppedUnexpectedly:"Video stopped unexpectedly",darkVideoReceived:"I can only see dark screens when others turn on their camera",audioVideoOutOfSync:"Audio and Video was out of sync",otherIssues:"I was having other video issues in this call"},screenshareRating:{noContentLocal:"Other people could not see my screenshare",noContentRemote:"I could not see other people's screenshare",cannotPresent:"I could not present my screen",lowQuality:"Screen share quality was low",freezes:"Screen share frozen",stoppedUnexpectedly:"Screen share stopped unexpectedly",largeDelay:"Screen share has a large delay",otherIssues:"I was having other screen share issues in this call"}},surveyIssuesHeadingStrings:{overallRating:"Overall",audioRating:"Audio",videoRating:"Video",screenshareRating:"Presenting"},spotlightPrompt:{startSpotlightHeading:"Spotlight for everyone?",startSpotlightText:"You'll highlight this video for everyone in the meeting.",startSpotlightOnSelfText:"You'll highlight your video for everyone in the meeting.",startSpotlightConfirmButtonLabel:"Spotlight for everyone",startSpotlightCancelButtonLabel:"Cancel",stopSpotlightHeading:"Stop spotlighting this video?",stopSpotlightOnSelfHeading:"Exit spotlight?",stopAllSpotlightHeading:"Stop spotlighting all videos?",stopSpotlightText:"This video will no longer be highlighted for everyone in the meeting.",stopSpotlightOnSelfText:"Your video will no longer be highlighted for everyone in the meeting.",stopAllSpotlightText:"The videos will no longer be highlighted for everyone in the meeting.",stopSpotlightConfirmButtonLabel:"Stop spotlighting",stopSpotlightOnSelfConfirmButtonLabel:"Exit spotlight",stopSpotlightCancelButtonLabel:"Cancel"},exitSpotlightButtonLabel:"Exit spotlight",exitSpotlightButtonTooltip:"Exit spotlight",leaveConfirmButtonLabel:"Leave",endCallConfirmButtonLabel:"End call",hangUpCancelButtonLabel:"Cancel",leaveConfirmDialogTitle:"Leave the call?",leaveConfirmDialogContent:"Are you sure you want to leave the call?",endCallConfirmDialogTitle:"End the call?",endCallConfirmDialogContent:"You'll end the call for everyone.",invalidMeetingIdentifier:"Invalid meeting ID or passcode",pinParticipantMenuLabel:"Pin for me",pinParticipantLimitReachedMenuLabel:"Pin (limit reached)",unpinParticipantMenuLabel:"Unpin",pinParticipantMenuItemAriaLabel:"Pin",unpinParticipantMenuItemAriaLabel:"Unpin",muteAllMenuLabel:"Mute all",muteAllDialogTitle:"Mute everyone?",muteAllDialogContent:"This will mute everyone in the meeting but you.",muteAllConfirmButtonLabel:"Mute all",muteAllCancelButtonLabel:"Cancel",joinBreakoutRoomButtonLabel:"Join breakout room",returnFromBreakoutRoomButtonLabel:"Leave room",leaveBreakoutRoomAndMeetingButtonLabel:"Leave meeting",breakoutRoomJoinedNotificationTitle:"You've joined Breakout room '{roomName}'",joinBreakoutRoomBannerTitle:"Breakout room '{roomName}' is open",joinBreakoutRoomBannerButtonLabel:"Join",returnFromBreakoutRoomBannerTitle:"Return to main meeting",returnFromBreakoutRoomBannerButtonLabel:"Rejoin"};var chat$l={chatListHeader:"In this chat",uploadAttachment:"Upload Attachment",uploadImageDataNotProvided:"Image data is not provided.",uploadImageIsTooLarge:"Image is too large. Choose one that's less than {maxImageSize} MB.",uploadImageExtensionIsNotAllowed:"Uploading .{imageExtension} image is not allowed.",uploadImageFailed:"Unable to upload image. Please try again later."};var callWithChat$l={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkButtonActionedLabel:"Link copied",copyInviteLinkActionedAriaLabel:"Invite link copied",dismissSidePaneButtonLabel:"Close",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",moreDrawerCaptionsMenuTitle:"Live captions",moreDrawerSpokenLanguageMenuTitle:"Spoken language",moreDrawerCaptionLanguageMenuTitle:"Caption language",moreDrawerGalleryOptionsMenuTitle:"Gallery options",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peopleButtonTooltipOpenAriaLabel:"People button, Show participants",peopleButtonTooltipCloseAriaLabel:"People button, Hide participants",peoplePaneSubTitle:"In this call",peoplePaneTitle:"People",pictureInPictureTileAriaLabel:"Video Feeds. Click to return to call screen.",removeMenuLabel:"Remove",openDialpadButtonLabel:"Dial phone number",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number",breakoutRoomChatPaneTitle:"Breakout Room Chat",chatContentSpinnerLabel:"Loading..."};var en_US = {call:call$l,chat:chat$l,callWithChat:callWithChat$l};
28866
+ var call$l={cameraLabel:"Camera",noCamerasLabel:"No cameras found",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",chatButtonLabel:"Chat",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkButtonActionedLabel:"Link copied",copyInviteLinkActionedAriaLabel:"Invite link copied",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",videoEffectsPaneTitle:"Effects",videoEffectsPaneBackgroundSelectionTitle:"Background",videoEffectsPaneAriaLabel:"Video effects pane",configurationPageVideoEffectsButtonLabel:"Effects",unableToStartVideoEffect:"Unable to apply video effect.",blurBackgroundEffectButtonLabel:"Blur",blurBackgroundTooltip:"Blur Background",removeBackgroundEffectButtonLabel:"None",removeBackgroundTooltip:"Remove Background",cameraOffBackgroundEffectWarningText:"Your camera is off. Turn on camera to see video effect.",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leavingCallTitle:"Leaving...",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",notInvitedToRoomDetails:"You are not able to join this room because you do not have an invite.",notInvitedToRoomTitle:"Not invited to room",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",peoplePaneTitle:"People",peoplePaneMoreButtonAriaLabel:"More",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call {numberOfPeople}",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",startSpotlightMenuLabel:"Spotlight for everyone",addSpotlightMenuLabel:"Add spotlight",stopSpotlightMenuLabel:"Stop spotlighting",stopSpotlightOnSelfMenuLabel:"Exit spotlight",spotlightLimitReachedMenuTitle:"Spotlight limit reached",stopAllSpotlightMenuLabel:"Stop all spotlights",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",roomNotFoundDetails:"The room ID provided could not be found.",roomNotFoundTitle:"Room not found",roomNotValidDetails:"This room is not valid at this current time.",roomNotValidTitle:"Room not valid",inviteToRoomRemovedDetails:"Your invite to join this room was removed.",inviteToRoomRemovedTitle:"Invite to room removed",soundLabel:"Sound",noMicrophonesLabel:"No microphones found",noSpeakersLabel:"No speakers found",startCallButtonLabel:"Start call",openDialpadButtonLabel:"Dial phone number",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",moreButtonCallingLabel:"More",resumeCallButtonLabel:"Resume",resumingCallButtonLabel:"Resuming...",resumeCallButtonAriaLabel:"Resume call",resumingCallButtonAriaLabel:"Resume call",holdScreenLabel:"You're on hold",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number",outboundCallingNoticeString:"Calling...",participantJoinedNoticeString:"{displayName} joined",twoParticipantJoinedNoticeString:"{displayName1} and {displayName2} have joined",threeParticipantJoinedNoticeString:"{displayName1}, {displayName2} and {displayName3} have joined",participantLeftNoticeString:"{displayName} left",twoParticipantLeftNoticeString:"{displayName1} and {displayName2} have left",threeParticipantLeftNoticeString:"{displayName1}, {displayName2} and {displayName3} have left",unnamedParticipantString:"unnamed participant",manyUnnamedParticipantsJoined:"unnamed participant and {numOfParticipants} other participants joined",manyUnnamedParticipantsLeft:"unnamed participant and {numOfParticipants} other participants left",manyParticipantsJoined:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants joined",manyParticipantsLeft:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants left",liveCaptionsLabel:"Live captions",captionsSettingsLabel:"Caption settings",startCaptionsButtonOnLabel:"Turn on captions",startCaptionsButtonOffLabel:"Turn off captions",startCaptionsButtonTooltipOnContent:"Turn off captions",startCaptionsButtonTooltipOffContent:"Turn on captions",captionsSettingsModalTitle:"Captions Settings",captionsSettingsSpokenLanguageDropdownLabel:"Spoken language",captionsSettingsCaptionLanguageDropdownLabel:"Captions language",captionsSettingsSpokenLanguageDropdownInfoText:"Language that everyone on this call is speaking.",captionsSettingsCaptionLanguageDropdownInfoText:"Captions will appear in this langugage.",captionsSettingsConfirmButtonLabel:"Confirm",captionsSettingsCancelButtonLabel:"Cancel",captionsSettingsModalAriaLabel:"Captions Setting Modal",captionsSettingsCloseModalButtonAriaLabel:"Close Captions Setting",captionsBannerMoreButtonCallingLabel:"More",captionsBannerMoreButtonTooltip:"More options",dismissModalAriaLabel:"Local and remote picture and picture, press enter to return to call",callRejectedTitle:"The call could not be completed",callRejectedMoreDetails:"The person you are trying to reach is unavailable. Please try again later.",callTimeoutTitle:"The call could not be completed",callTimeoutDetails:"The person you are trying to reach is unavailable. Please try again later.",callTimeoutBotTitle:"The call could not be completed",callTimeoutBotDetails:"The service that you are trying to reach is unavailable. Please try again later.",dtmfDialerButtonLabel:"Dialpad",dtmfDialerButtonTooltipOn:"Show dialpad",dtmfDialerButtonTooltipOff:"Hide dialpad",dtmfDialerMoreButtonLabelOn:"Show dialpad",dtmfDialerMoreButtonLabelOff:"Hide dialpad",phoneCallMoreButtonLabel:"Phone Call",spokenLanguageStrings:{"ar-ae":"Arabic - U.A.E.","ar-sa":"Arabic - Saudi Arabia","da-dk":"Danish","de-de":"German - Germany","en-au":"English - Australia","en-ca":"English - Canada","en-gb":"English - United Kingdom","en-in":"English - India","en-nz":"English - New Zealand","en-us":"English - United States","es-es":"Spanish - Spain (Modern Sort)","es-mx":"Spanish - Mexico","fi-fi":"Finnish","fr-ca":"French - Canada","fr-fr":"French - France","hi-in":"Hindi","it-it":"Italian - Italy","ja-jp":"Japanese","ko-kr":"Korean","nb-no":"Norwegian (Bokmål)","nl-be":"Dutch - Belgium","nl-nl":"Dutch - Netherlands","pl-pl":"Polish","pt-br":"Portuguese - Brazil","ru-ru":"Russian","sv-se":"Swedish","zh-cn":"Chinese - People's Republic of China","zh-hk":"Chinese - Hong Kong SAR","cs-cz":"Czech","pt-pt":"Portuguese - Portugal","tr-tr":"Turkish","vi-vn":"Vietnamese","th-th":"Thai","he-il":"Hebrew","cy-gb":"Welsh","uk-ua":"Ukrainian","el-gr":"Greek","hu-hu":"Hungarian","ro-ro":"Romanian","sk-sk":"Slovak","zh-tw":"Chinese - Taiwan"},captionLanguageStrings:{ar:"Arabic",da:"Danish",de:"German",en:"English",es:"Spanish",fi:"Finnish","fr-ca":"French - Canada",fr:"French - France",hi:"Hindi",it:"Italian",ja:"Japanese",ko:"Korean",nb:"Norwegian (Bokmål)",nl:"Dutch",pl:"Polish",pt:"Portuguese - Brazil",ru:"Russian",sv:"Swedish","zh-Hans":"Chinese (Simplified)","zh-Hant":"Chinese (Traditional)",cs:"Czech","pt-pt":"Portuguese - Portugal",tr:"Turkish",vi:"Vietnamese",th:"Thai",he:"Hebrew",cy:"Welsh",uk:"Ukrainian",el:"Greek",hu:"Hungarian",ro:"Romanian",sk:"Slovak"},captionsBannerSpinnerText:"Starting captions...",transferPageTransferorText:"Transferring...",transferPageTransferTargetText:"Connecting...",transferPageUnknownTransferorDisplayName:"Unknown",transferPageUnknownTransferTargetDisplayName:"Unknown",transferPageNoticeString:"You are being transferred",participantCouldNotBeReachedTitle:"Target participant is currently not available",participantCouldNotBeReachedMoreDetails:"Please contact participant when they are available",permissionToReachTargetParticipantNotAllowedTitle:"Permission to reach target participant is not allowed",permissionToReachTargetParticipantNotAllowedMoreDetails:"Please check that the target participant is in the same tenant",unableToResolveTenantTitle:"Unable to resolve tenant id for the target participant",unableToResolveTenantMoreDetails:"Please check the participant id is entered correctly",participantIdIsMalformedTitle:"Participant id is not in the correct format",participantIdIsMalformedMoreDetails:"Please check that the participant id is in the correct format",moreButtonGalleryControlLabel:"View",moreButtonGalleryPositionToggleLabel:"Move gallery to top",moreButtonGallerySpeakerLayoutLabel:"Speaker",moreButtonGalleryFloatingLocalLayoutLabel:"Dynamic",moreButtonGalleryDefaultLayoutLabel:"Gallery view",moreButtonGalleryFocusedContentLayoutLabel:"Focus on content",moreButtonLargeGalleryDefaultLayoutLabel:"Large Gallery",capabilityChangedNotification:{turnVideoOn:{lostDueToMeetingOption:"Your camera has been disabled. You can no longer share video.",grantedDueToMeetingOption:"Your camera has been enabled. Turn it on if you'd like to share video."},unmuteMic:{lostDueToMeetingOption:"Your mic has been disabled. You can no longer unmute.",grantedDueToMeetingOption:"Your mic has been enabled. Unmute if you'd like to speak."},shareScreen:{lostDueToRoleChangeToAttendee:"Your role has been changed. Some actions, like sharing content, won't be available to you.",grantedDueToRoleChangeToPresenter:"You're a presenter. You can share content and facilitate the meeting."},hideAttendeeNames:{hideAttendeeNameAttendee:"Your name is hidden from other attendees. Organizers and presenters can see your real name.",hideAttendeeNamePresenter:"Attendee names are hidden. Only organizers and presenters can see names to protect attendee privacy."}},surveyTitle:"Help us improve",starSurveyHelperText:"How was the quality of the call?",starSurveyOneStarText:"The quality was bad.",starSurveyTwoStarText:"The quality was poor.",starSurveyThreeStarText:"The quality was good.",starSurveyFourStarText:"The quality was great.",starSurveyFiveStarText:"The quality was excellent.",surveyConfirmButtonLabel:"Send Feedback",starRatingAriaLabel:"Select {0} of {1} stars",surveySkipButtonLabel:"Skip",tagsSurveyQuestion:"What could have been better?",tagsSurveyTextFieldDefaultText:"Other, please specify",tagsSurveyHelperText:"Check any issues you experienced",endOfSurveyText:"Thank you for your feedback!",surveyIssues:{overallRating:{callCannotJoin:"I could not join call",callCannotInvite:"I could not invite others into the call",hadToRejoin:"I had to rejoin the call",callEndedUnexpectedly:"Call ended for me unexpectedly",otherIssues:"I was having other issues with the call"},audioRating:{noLocalAudio:"The other side could not hear any sound",noRemoteAudio:"I could not hear any sound",echo:"I heard echos on the call",audioNoise:"I heard noise on the call",lowVolume:"Volume was low",audioStoppedUnexpectedly:"Audio stopped unexpectedly",distortedSpeech:"Audio was distorted",audioInterruption:"Audio was interrupted",otherIssues:"I was having other audio issues in this call"},videoRating:{noVideoReceived:"I could not see any video",noVideoSent:"Others could not see me",lowQuality:"Video quality was low",freezes:"Video frozen",stoppedUnexpectedly:"Video stopped unexpectedly",darkVideoReceived:"I can only see dark screens when others turn on their camera",audioVideoOutOfSync:"Audio and Video was out of sync",otherIssues:"I was having other video issues in this call"},screenshareRating:{noContentLocal:"Other people could not see my screenshare",noContentRemote:"I could not see other people's screenshare",cannotPresent:"I could not present my screen",lowQuality:"Screen share quality was low",freezes:"Screen share frozen",stoppedUnexpectedly:"Screen share stopped unexpectedly",largeDelay:"Screen share has a large delay",otherIssues:"I was having other screen share issues in this call"}},surveyIssuesHeadingStrings:{overallRating:"Overall",audioRating:"Audio",videoRating:"Video",screenshareRating:"Presenting"},spotlightPrompt:{startSpotlightHeading:"Spotlight for everyone?",startSpotlightText:"You'll highlight this video for everyone in the meeting.",startSpotlightOnSelfText:"You'll highlight your video for everyone in the meeting.",startSpotlightConfirmButtonLabel:"Spotlight for everyone",startSpotlightCancelButtonLabel:"Cancel",stopSpotlightHeading:"Stop spotlighting this video?",stopSpotlightOnSelfHeading:"Exit spotlight?",stopAllSpotlightHeading:"Stop spotlighting all videos?",stopSpotlightText:"This video will no longer be highlighted for everyone in the meeting.",stopSpotlightOnSelfText:"Your video will no longer be highlighted for everyone in the meeting.",stopAllSpotlightText:"The videos will no longer be highlighted for everyone in the meeting.",stopSpotlightConfirmButtonLabel:"Stop spotlighting",stopSpotlightOnSelfConfirmButtonLabel:"Exit spotlight",stopSpotlightCancelButtonLabel:"Cancel"},exitSpotlightButtonLabel:"Exit spotlight",exitSpotlightButtonTooltip:"Exit spotlight",leaveConfirmButtonLabel:"Leave",endCallConfirmButtonLabel:"End call",hangUpCancelButtonLabel:"Cancel",leaveConfirmDialogTitle:"Leave the call?",leaveConfirmDialogContent:"Are you sure you want to leave the call?",endCallConfirmDialogTitle:"End the call?",endCallConfirmDialogContent:"You'll end the call for everyone.",invalidMeetingIdentifier:"Invalid meeting ID or passcode",pinParticipantMenuLabel:"Pin for me",pinParticipantLimitReachedMenuLabel:"Pin (limit reached)",unpinParticipantMenuLabel:"Unpin",pinParticipantMenuItemAriaLabel:"Pin",unpinParticipantMenuItemAriaLabel:"Unpin",muteAllMenuLabel:"Mute all",muteAllDialogTitle:"Mute everyone?",muteAllDialogContent:"This will mute everyone in the meeting but you.",muteAllConfirmButtonLabel:"Mute all",muteAllCancelButtonLabel:"Cancel",joinBreakoutRoomButtonLabel:"Join breakout room",returnFromBreakoutRoomButtonLabel:"Leave room",leaveBreakoutRoomAndMeetingButtonLabel:"Leave meeting",breakoutRoomJoinedNotificationTitle:"You've joined Breakout room '{roomName}'",joinBreakoutRoomBannerTitle:"Breakout room '{roomName}' is open",joinBreakoutRoomBannerButtonLabel:"Join",returnFromBreakoutRoomBannerTitle:"Return to main meeting",returnFromBreakoutRoomBannerButtonLabel:"Rejoin"};var chat$l={chatListHeader:"In this chat",uploadAttachment:"Upload Attachment",uploadImageDataNotProvided:"Image data is not provided.",uploadImageIsTooLarge:"Image is too large. Choose one that's less than {maxImageSize} MB.",uploadImageExtensionIsNotAllowed:"Uploading .{imageExtension} image is not allowed.",uploadImageFailed:"Unable to upload image. Please try again later."};var callWithChat$l={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkButtonActionedLabel:"Link copied",copyInviteLinkActionedAriaLabel:"Invite link copied",dismissSidePaneButtonLabel:"Close",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",moreDrawerCaptionsMenuTitle:"Live captions",moreDrawerSpokenLanguageMenuTitle:"Spoken language",moreDrawerCaptionLanguageMenuTitle:"Caption language",moreDrawerGalleryOptionsMenuTitle:"Gallery options",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peopleButtonTooltipOpenAriaLabel:"People button, Show participants",peopleButtonTooltipCloseAriaLabel:"People button, Hide participants",peoplePaneSubTitle:"In this call",peoplePaneTitle:"People",pictureInPictureTileAriaLabel:"Video Feeds. Click to return to call screen.",removeMenuLabel:"Remove",openDialpadButtonLabel:"Dial phone number",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number",breakoutRoomChatPaneTitle:"Breakout Room Chat",chatContentSpinnerLabel:"Loading..."};var en_US = {call:call$l,chat:chat$l,callWithChat:callWithChat$l};
28833
28867
 
28834
28868
  // Copyright (c) Microsoft Corporation.
28835
28869
  // Licensed under the MIT License.
@@ -29774,7 +29808,7 @@ const AttachmentDownloadErrorBar = (props) => {
29774
29808
  /**
29775
29809
  * Wrapper for RichTextSendBox component to allow us to use usePropsFor with richTextSendBox with lazy loading
29776
29810
  */
29777
- const RichTextSendBoxWrapper = React.lazy(() => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-BQc7785_.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper })));
29811
+ const RichTextSendBoxWrapper = React.lazy(() => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-CMAkkxJl.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper })));
29778
29812
  /**
29779
29813
  * @private
29780
29814
  * Use this function to load RoosterJS dependencies early in the lifecycle.
@@ -29782,7 +29816,7 @@ const RichTextSendBoxWrapper = React.lazy(() => Promise.resolve().then(function
29782
29816
  *
29783
29817
  /* @conditional-compile-remove(rich-text-editor-composite-support)
29784
29818
  */
29785
- const loadRichTextSendBox = () => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-BQc7785_.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper }));
29819
+ const loadRichTextSendBox = () => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-CMAkkxJl.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper }));
29786
29820
  /**
29787
29821
  * @private
29788
29822
  */
@@ -30114,6 +30148,31 @@ const ImageUploadReducer = (state, action) => {
30114
30148
  }
30115
30149
  };
30116
30150
 
30151
+ // Copyright (c) Microsoft Corporation.
30152
+ // Licensed under the MIT License.
30153
+ /**
30154
+ * @private
30155
+ */
30156
+ const useSelector$2 = (selector, selectorProps) => {
30157
+ // use selector with no adaptation
30158
+ return useSelectorWithAdaptation$1(selector, (state) => state, selectorProps);
30159
+ };
30160
+
30161
+ // Copyright (c) Microsoft Corporation.
30162
+ // Licensed under the MIT License.
30163
+ /** @private */
30164
+ const getUserId = (state) => state.userId;
30165
+ /** @private */
30166
+ const getThreadId = (state) => state.thread.threadId;
30167
+ /** @private */
30168
+ const getChatMessages = (state) => state.thread.chatMessages;
30169
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
30170
+ /** @private */
30171
+ const getTextOnlyChat = (state) => { var _a, _b; return (_b = (_a = state.thread.properties) === null || _a === void 0 ? void 0 : _a.messagingPolicy) === null || _b === void 0 ? void 0 : _b.textOnlyChat; };
30172
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
30173
+ /** @private */
30174
+ const getCreatedBy = (state) => { var _a; return (_a = state.thread.properties) === null || _a === void 0 ? void 0 : _a.createdBy; };
30175
+
30117
30176
  // Copyright (c) Microsoft Corporation.
30118
30177
  // Licensed under the MIT License.
30119
30178
  var __awaiter$r = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
@@ -30145,29 +30204,15 @@ const ChatScreen = (props) => {
30145
30204
  /* @conditional-compile-remove(rich-text-editor-image-upload) */
30146
30205
  const localeStrings = useLocale().strings;
30147
30206
  /* @conditional-compile-remove(rich-text-editor-image-upload) */
30148
- const [textOnlyChat, setTextOnlyChat] = React.useState(false);
30207
+ const textOnlyChat = !!useSelector$2(getTextOnlyChat);
30208
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
30209
+ const createdBy = useSelector$2(getCreatedBy);
30149
30210
  /* @conditional-compile-remove(rich-text-editor-image-upload) */
30150
- const [isACSChat, setIsACSChat] = React.useState(false);
30211
+ const isACSChat = createdBy && !communicationCommon.isMicrosoftTeamsUserIdentifier(createdBy);
30151
30212
  /* @conditional-compile-remove(rich-text-editor-image-upload) */
30152
30213
  const [editBoxInlineImageUploads, handleEditBoxInlineImageUploadAction] = React.useReducer(ImageUploadReducer, undefined);
30153
30214
  /* @conditional-compile-remove(rich-text-editor-image-upload) */
30154
30215
  const [sendBoxInlineImageUploads, handleSendBoxInlineImageUploadAction] = React.useReducer(ImageUploadReducer, undefined);
30155
- /* @conditional-compile-remove(rich-text-editor-image-upload) */
30156
- React.useEffect(() => {
30157
- const updateChatState = (newState) => {
30158
- var _a, _b, _c, _d;
30159
- setTextOnlyChat(((_b = (_a = newState.thread.properties) === null || _a === void 0 ? void 0 : _a.messagingPolicy) === null || _b === void 0 ? void 0 : _b.textOnlyChat) === true);
30160
- if ((_c = newState.thread.properties) === null || _c === void 0 ? void 0 : _c.createdBy) {
30161
- setIsACSChat(!communicationCommon.isMicrosoftTeamsUserIdentifier((_d = newState.thread.properties) === null || _d === void 0 ? void 0 : _d.createdBy));
30162
- }
30163
- };
30164
- // set initial state for textOnlyChat and isACSChat
30165
- updateChatState(adapter.getState());
30166
- adapter.onStateChange(updateChatState);
30167
- return () => {
30168
- adapter.offStateChange(updateChatState);
30169
- };
30170
- }, [adapter]);
30171
30216
  React.useEffect(() => {
30172
30217
  // Initial data should be always fetched by the composite(or external caller) instead of the adapter
30173
30218
  const fetchData = () => __awaiter$r(void 0, void 0, void 0, function* () {
@@ -30191,25 +30236,30 @@ const ChatScreen = (props) => {
30191
30236
  const typingIndicatorProps = usePropsFor$2(TypingIndicator);
30192
30237
  const headerProps = useAdaptedSelector$1(getHeaderProps);
30193
30238
  const errorBarProps = usePropsFor$2(ErrorBar);
30239
+ const overlayImageItemRef = React.useRef(overlayImageItem);
30240
+ overlayImageItemRef.current = overlayImageItem;
30241
+ const adapterChatMessages = useSelector$2(getChatMessages);
30194
30242
  React.useEffect(() => {
30195
- if (overlayImageItem === undefined) {
30243
+ if (overlayImageItemRef.current === undefined) {
30196
30244
  return;
30197
30245
  }
30198
- const message = adapter.getState().thread.chatMessages[overlayImageItem.messageId];
30246
+ const message = adapterChatMessages[overlayImageItemRef.current.messageId];
30199
30247
  if (message === undefined) {
30200
30248
  return;
30201
30249
  }
30202
30250
  const resourceCache = message.resourceCache;
30203
- if (overlayImageItem.imageSrc === '' && resourceCache && resourceCache[overlayImageItem.imageUrl]) {
30204
- const fullSizeImageSrc = getResourceSourceUrl(resourceCache[overlayImageItem.imageUrl]);
30205
- if (fullSizeImageSrc === undefined || fullSizeImageSrc === '' || overlayImageItem.imageSrc === fullSizeImageSrc) {
30251
+ if (overlayImageItemRef.current.imageSrc === '' &&
30252
+ resourceCache &&
30253
+ resourceCache[overlayImageItemRef.current.imageUrl]) {
30254
+ const fullSizeImageSrc = getResourceSourceUrl(resourceCache[overlayImageItemRef.current.imageUrl]);
30255
+ if (fullSizeImageSrc === undefined ||
30256
+ fullSizeImageSrc === '' ||
30257
+ overlayImageItemRef.current.imageSrc === fullSizeImageSrc) {
30206
30258
  return;
30207
30259
  }
30208
- setOverlayImageItem(Object.assign(Object.assign({}, overlayImageItem), { imageSrc: fullSizeImageSrc }));
30260
+ setOverlayImageItem(Object.assign(Object.assign({}, overlayImageItemRef.current), { imageSrc: fullSizeImageSrc }));
30209
30261
  }
30210
- // Disable eslint because we are using the overlayImageItem in this effect but don't want to have it as a dependency, as it will cause an infinite loop.
30211
- // eslint-disable-next-line react-hooks/exhaustive-deps
30212
- }, [messageThreadProps.messages]);
30262
+ }, [adapterChatMessages]);
30213
30263
  const getResourceSourceUrl = (result) => {
30214
30264
  let src = '';
30215
30265
  if (result.error || !result.sourceUrl) {
@@ -30232,7 +30282,8 @@ const ChatScreen = (props) => {
30232
30282
  const sendBoxStyles = React.useMemo(() => {
30233
30283
  return Object.assign({}, styles === null || styles === void 0 ? void 0 : styles.sendBox);
30234
30284
  }, [styles === null || styles === void 0 ? void 0 : styles.sendBox]);
30235
- const userId = toFlatCommunicationIdentifier(adapter.getState().userId);
30285
+ const userIdObject = useSelector$2(getUserId);
30286
+ const userId = toFlatCommunicationIdentifier(userIdObject);
30236
30287
  /* @conditional-compile-remove(file-sharing-acs) */
30237
30288
  const setKeyboardFocusAfterFileSelection = React.useCallback(() => {
30238
30289
  var _a;
@@ -30296,9 +30347,10 @@ const ChatScreen = (props) => {
30296
30347
  setDownloadErrorMessage(errorMessage);
30297
30348
  } })) : (React.createElement(React.Fragment, null));
30298
30349
  }, [(_b = attachmentOptions === null || attachmentOptions === void 0 ? void 0 : attachmentOptions.downloadOptions) === null || _b === void 0 ? void 0 : _b.actionsForAttachment]);
30350
+ const threadId = useSelector$2(getThreadId);
30299
30351
  const onInlineImageClicked = React.useCallback((attachmentId, messageId) => {
30300
30352
  var _a, _b;
30301
- const message = adapter.getState().thread.chatMessages[messageId];
30353
+ const message = adapterChatMessages[messageId];
30302
30354
  const inlinedImages = (_b = (_a = message.content) === null || _a === void 0 ? void 0 : _a.attachments) === null || _b === void 0 ? void 0 : _b.filter((attachment) => {
30303
30355
  return attachment.attachmentType === 'image' && attachment.id === attachmentId;
30304
30356
  });
@@ -30314,8 +30366,8 @@ const ChatScreen = (props) => {
30314
30366
  }
30315
30367
  else {
30316
30368
  adapter.downloadResourceToCache({
30317
- threadId: adapter.getState().thread.threadId,
30318
- messageId: messageId,
30369
+ threadId,
30370
+ messageId,
30319
30371
  resourceUrl: attachment.url
30320
30372
  });
30321
30373
  }
@@ -30338,10 +30390,10 @@ const ChatScreen = (props) => {
30338
30390
  };
30339
30391
  setIsImageOverlayOpen(true);
30340
30392
  setOverlayImageItem(overlayImage);
30341
- }, [adapter, onRenderAvatarCallback, userId]);
30393
+ }, [adapter, adapterChatMessages, onRenderAvatarCallback, userId, threadId]);
30342
30394
  const onRenderInlineImage = React.useCallback((inlineImage, defaultOnRender) => {
30343
30395
  var _a, _b;
30344
- const message = adapter.getState().thread.chatMessages[inlineImage.messageId];
30396
+ const message = adapterChatMessages[inlineImage.messageId];
30345
30397
  const attachment = (_b = (_a = message === null || message === void 0 ? void 0 : message.content) === null || _a === void 0 ? void 0 : _a.attachments) === null || _b === void 0 ? void 0 : _b.find((attachment) => attachment.id === inlineImage.imageAttributes.id);
30346
30398
  if (attachment === undefined) {
30347
30399
  return defaultOnRender(inlineImage);
@@ -30359,7 +30411,7 @@ const ChatScreen = (props) => {
30359
30411
  onInlineImageClicked(inlineImage.imageAttributes.id || '', inlineImage.messageId);
30360
30412
  }
30361
30413
  }, style: { cursor: 'pointer', pointerEvents } }, defaultOnRender(inlineImage)));
30362
- }, [adapter, onInlineImageClicked]);
30414
+ }, [adapterChatMessages, onInlineImageClicked]);
30363
30415
  const inlineImageOptions = React.useMemo(() => {
30364
30416
  return { onRenderInlineImage: onRenderInlineImage };
30365
30417
  }, [onRenderInlineImage]);
@@ -30462,7 +30514,7 @@ const ChatScreen = (props) => {
30462
30514
  /* @conditional-compile-remove(rich-text-editor-composite-support) */
30463
30515
  const richTextEditorOptions = React.useMemo(() => {
30464
30516
  /* @conditional-compile-remove(rich-text-editor-image-upload) */
30465
- const onPasteCallback = isACSChat || textOnlyChat ? removeImageTags : undefined;
30517
+ const onPasteCallback = !!isACSChat || textOnlyChat ? removeImageTags : undefined;
30466
30518
  return (options === null || options === void 0 ? void 0 : options.richTextEditor)
30467
30519
  ? {
30468
30520
  /* @conditional-compile-remove(rich-text-editor-image-upload) */ onPaste: onPasteCallback
@@ -30559,7 +30611,7 @@ const ChatScreen = (props) => {
30559
30611
  setOverlayImageItem(undefined);
30560
30612
  setIsImageOverlayOpen(false);
30561
30613
  adapter.removeResourceFromCache({
30562
- threadId: adapter.getState().thread.threadId,
30614
+ threadId,
30563
30615
  messageId: overlayImageItem.messageId,
30564
30616
  resourceUrl: overlayImageItem.imageUrl
30565
30617
  });
@@ -31344,6 +31396,180 @@ function computeComplianceNotification(complianceProps, cachedProps) {
31344
31396
  }
31345
31397
  }
31346
31398
 
31399
+ // Copyright (c) Microsoft Corporation.
31400
+ // Licensed under the MIT License.
31401
+ /**
31402
+ * @private
31403
+ */
31404
+ const useSelector$1 = (selector, selectorProps) => {
31405
+ // use selector with no adaptation
31406
+ return useSelectorWithAdaptation(selector, (state) => state, selectorProps);
31407
+ };
31408
+
31409
+ // Copyright (c) Microsoft Corporation.
31410
+ // Licensed under the MIT License.
31411
+ /**
31412
+ * @private
31413
+ */
31414
+ const getDisplayName = (state) => state.displayName;
31415
+ /**
31416
+ * @private
31417
+ */
31418
+ const getEndedCall = (state) => state.endedCall;
31419
+ /**
31420
+ * @private
31421
+ */
31422
+ const getCallStatus = (state) => { var _a, _b; return (_b = (_a = state.call) === null || _a === void 0 ? void 0 : _a.state) !== null && _b !== void 0 ? _b : 'None'; };
31423
+ /**
31424
+ * @private
31425
+ */
31426
+ const getDeviceManager = (state) => state.devices;
31427
+ /**
31428
+ * @private
31429
+ */
31430
+ const getIsScreenShareOn = (state) => { var _a, _b; return (_b = (_a = state.call) === null || _a === void 0 ? void 0 : _a.isScreenSharingOn) !== null && _b !== void 0 ? _b : false; };
31431
+ /**
31432
+ * @private
31433
+ */
31434
+ const getLocalParticipantRaisedHand = (state) => { var _a; return (_a = state.call) === null || _a === void 0 ? void 0 : _a.raiseHand.localParticipantRaisedHand; };
31435
+ /**
31436
+ * @private
31437
+ */
31438
+ const getCapabilites = (state) => { var _a, _b; return (_b = (_a = state.call) === null || _a === void 0 ? void 0 : _a.capabilitiesFeature) === null || _b === void 0 ? void 0 : _b.capabilities; };
31439
+ /**
31440
+ * @private
31441
+ */
31442
+ const getMicrophones = (state) => state.devices.microphones;
31443
+ /**
31444
+ * @private
31445
+ */
31446
+ const getCameras = (state) => state.devices.cameras;
31447
+ /**
31448
+ * @private
31449
+ */
31450
+ const getRole = (state) => { var _a; return (_a = state.call) === null || _a === void 0 ? void 0 : _a.role; };
31451
+ /**
31452
+ * @private
31453
+ */
31454
+ const getPage = (state) => state.page;
31455
+ /**
31456
+ * @private
31457
+ */
31458
+ const getTransferCall = (state) => state.acceptedTransferCallState;
31459
+ /**
31460
+ * @private
31461
+ */
31462
+ const getLocalMicrophoneEnabled = (state) => state.isLocalPreviewMicrophoneEnabled;
31463
+ /**
31464
+ * @private
31465
+ */
31466
+ const getLocalVideoStreams = (state) => { var _a; return (_a = state.call) === null || _a === void 0 ? void 0 : _a.localVideoStreams; };
31467
+ /**
31468
+ * @private
31469
+ */
31470
+ const getIsTranscriptionActive = (state) => { var _a; return !!((_a = state.call) === null || _a === void 0 ? void 0 : _a.transcription.isTranscriptionActive); };
31471
+ /**
31472
+ * @private
31473
+ */
31474
+ const getIsRecordingActive = (state) => { var _a; return !!((_a = state.call) === null || _a === void 0 ? void 0 : _a.recording.isRecordingActive); };
31475
+ /**
31476
+ * @private
31477
+ */
31478
+ const getUserFacingDiagnostics = (state) => { var _a; return (_a = state.call) === null || _a === void 0 ? void 0 : _a.diagnostics; };
31479
+ /**
31480
+ * @private
31481
+ */
31482
+ const getDominantSpeakerInfo = (state) => { var _a; return (_a = state.call) === null || _a === void 0 ? void 0 : _a.dominantSpeakers; };
31483
+ /**
31484
+ * @private
31485
+ */
31486
+ const getRemoteParticipants = (state) => { var _a; return (_a = state.call) === null || _a === void 0 ? void 0 : _a.remoteParticipants; };
31487
+ /* @conditional-compile-remove(unsupported-browser) */
31488
+ /**
31489
+ * @private
31490
+ */
31491
+ const getEnvironmentInfo = (state) => state.environmentInfo;
31492
+ /**
31493
+ * @private
31494
+ */
31495
+ const getSelectedVideoEffect = (state) => state.selectedVideoBackgroundEffect;
31496
+ /* @conditional-compile-remove(acs-close-captions) */
31497
+ /** @private */
31498
+ const getCaptionsKind = (state) => {
31499
+ var _a;
31500
+ return (_a = state.call) === null || _a === void 0 ? void 0 : _a.captionsFeature.captionsKind;
31501
+ };
31502
+ /** @private */
31503
+ const getCaptionsStatus = (state) => {
31504
+ var _a;
31505
+ return (_a = state.call) === null || _a === void 0 ? void 0 : _a.captionsFeature.isCaptionsFeatureActive;
31506
+ };
31507
+ /**
31508
+ * @private
31509
+ */
31510
+ const getIsTeamsCall = (state) => state.isTeamsCall;
31511
+ /**
31512
+ * @private
31513
+ */
31514
+ const getIsTeamsMeeting = (state) => state.isTeamsMeeting;
31515
+ /**
31516
+ * @private
31517
+ */
31518
+ const getTeamsMeetingCoordinates = (state) => { var _a, _b; return (_b = (_a = state.call) === null || _a === void 0 ? void 0 : _a.meetingConference) === null || _b === void 0 ? void 0 : _b.conferencePhones; };
31519
+ /**
31520
+ * @private
31521
+ */
31522
+ const getLatestCapabilitiesChangedInfo = (state) => {
31523
+ var _a, _b;
31524
+ return (_b = (_a = state.call) === null || _a === void 0 ? void 0 : _a.capabilitiesFeature) === null || _b === void 0 ? void 0 : _b.latestCapabilitiesChangeInfo;
31525
+ };
31526
+ /**
31527
+ * @private
31528
+ */
31529
+ const getTargetCallees = (state) => state.targetCallees;
31530
+ /**
31531
+ * @private
31532
+ */
31533
+ const getStartTime = (state) => { var _a; return (_a = state.call) === null || _a === void 0 ? void 0 : _a.startTime; };
31534
+ /**
31535
+ * @private
31536
+ */
31537
+ const getSpotlightedParticipants = (state) => { var _a, _b; return (_b = (_a = state.call) === null || _a === void 0 ? void 0 : _a.spotlight) === null || _b === void 0 ? void 0 : _b.spotlightedParticipants; };
31538
+ /* @conditional-compile-remove(breakout-rooms) */
31539
+ /**
31540
+ * @private
31541
+ */
31542
+ const getAssignedBreakoutRoom = (state) => { var _a, _b; return (_b = (_a = state.call) === null || _a === void 0 ? void 0 : _a.breakoutRooms) === null || _b === void 0 ? void 0 : _b.assignedBreakoutRoom; };
31543
+ /* @conditional-compile-remove(breakout-rooms) */
31544
+ /**
31545
+ * @private
31546
+ */
31547
+ const getBreakoutRoomSettings = (state) => { var _a, _b; return (_b = (_a = state.call) === null || _a === void 0 ? void 0 : _a.breakoutRooms) === null || _b === void 0 ? void 0 : _b.breakoutRoomSettings; };
31548
+ /* @conditional-compile-remove(breakout-rooms) */
31549
+ /**
31550
+ * @private
31551
+ */
31552
+ const getBreakoutRoomDisplayName = (state) => { var _a, _b; return (_b = (_a = state.call) === null || _a === void 0 ? void 0 : _a.breakoutRooms) === null || _b === void 0 ? void 0 : _b.breakoutRoomDisplayName; };
31553
+ /** @private */
31554
+ const getVideoEffectsDependency = (state) => state.onResolveVideoEffectDependency;
31555
+ /* @conditional-compile-remove(DNS) */
31556
+ /** @private */
31557
+ const getDeepNoiseSuppresionEffectsDependency = (state) => state.onResolveDeepNoiseSuppressionDependency;
31558
+ /* @conditional-compile-remove(DNS) */
31559
+ /** @private */
31560
+ const getDeepNoiseSuppresionIsOnByDefault = (state) => state.deepNoiseSuppressionOnByDefault;
31561
+ /* @conditional-compile-remove(DNS) */
31562
+ /** @private */
31563
+ const getHideDeepNoiseSupressionButton = (state) => state.hideDeepNoiseSuppressionButton;
31564
+ /** @private */
31565
+ const getReactionResources = (state) => state.reactions;
31566
+ /** @private */
31567
+ const getAlternateCallerId = (state) => state.alternateCallerId;
31568
+ /** @private */
31569
+ const getIsRoomsCall = (state) => state.isRoomsCall;
31570
+ /** @private */
31571
+ const getVideoBackgroundImages = (state) => state.videoBackgroundImages;
31572
+
31347
31573
  // Copyright (c) Microsoft Corporation.
31348
31574
  // Licensed under the MIT License.
31349
31575
  var __awaiter$p = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
@@ -31362,9 +31588,8 @@ var __awaiter$p = (window && window.__awaiter) || function (thisArg, _arguments,
31362
31588
  const useHandlers = (
31363
31589
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
31364
31590
  _component) => {
31365
- var _a, _b;
31366
31591
  const adapter = useAdapter();
31367
- const capabilities = (_b = (_a = adapter.getState().call) === null || _a === void 0 ? void 0 : _a.capabilitiesFeature) === null || _b === void 0 ? void 0 : _b.capabilities;
31592
+ const capabilities = useSelector$1(getCapabilites);
31368
31593
  return createCompositeHandlers(adapter, capabilities);
31369
31594
  };
31370
31595
  const createCompositeHandlers = memoizeOne((adapter, capabilities) => {
@@ -31835,13 +32060,13 @@ const usePropsFor$1 = (component) => {
31835
32060
  * @private
31836
32061
  */
31837
32062
  const Camera = (props) => {
31838
- var _a, _b, _c;
32063
+ var _a;
31839
32064
  const cameraButtonProps = usePropsFor$1(CameraButton);
31840
32065
  const styles = React.useMemo(() => { var _a; return concatButtonBaseStyles((_a = props.styles) !== null && _a !== void 0 ? _a : {}); }, [props.styles]);
31841
- const adapter = useAdapter();
31842
- const isRoomsCall = adapter.getState().isRoomsCall;
31843
- const turnVideoOnCapability = (_b = (_a = adapter.getState().call) === null || _a === void 0 ? void 0 : _a.capabilitiesFeature) === null || _b === void 0 ? void 0 : _b.capabilities.turnVideoOn;
31844
- return (React.createElement(CameraButton, Object.assign({ "data-ui-id": "call-composite-camera-button" }, cameraButtonProps, { showLabel: props.displayType !== 'compact', styles: styles, enableDeviceSelectionMenu: props.splitButtonsForDeviceSelection, disableTooltip: props.disableTooltip, disabled: cameraButtonProps.disabled || props.disabled || (isRoomsCall && ((_c = adapter.getState().call) === null || _c === void 0 ? void 0 : _c.role) === 'Unknown'), onRenderOffIcon: turnVideoOnCapability && !turnVideoOnCapability.isPresent
32066
+ const isRoomsCall = useSelector$1(getIsRoomsCall);
32067
+ const role = useSelector$1(getRole);
32068
+ const turnVideoOnCapability = (_a = useSelector$1(getCapabilites)) === null || _a === void 0 ? void 0 : _a.turnVideoOn;
32069
+ return (React.createElement(CameraButton, Object.assign({ "data-ui-id": "call-composite-camera-button" }, cameraButtonProps, { showLabel: props.displayType !== 'compact', styles: styles, enableDeviceSelectionMenu: props.splitButtonsForDeviceSelection, disableTooltip: props.disableTooltip, disabled: cameraButtonProps.disabled || props.disabled || !!(isRoomsCall && role === 'Unknown'), onRenderOffIcon: turnVideoOnCapability && !turnVideoOnCapability.isPresent
31845
32070
  ? () => React.createElement(_HighContrastAwareIcon, { disabled: true, iconName: 'ControlButtonCameraProhibited' })
31846
32071
  : undefined, onClickVideoEffects: props.onClickVideoEffects, componentRef: props.componentRef })));
31847
32072
  };
@@ -31850,10 +32075,9 @@ const Camera = (props) => {
31850
32075
  // Licensed under the MIT License.
31851
32076
  /** @private */
31852
32077
  const Devices = (props) => {
31853
- var _a, _b;
32078
+ var _a;
31854
32079
  const devicesButtonProps = usePropsFor$1(DevicesButton);
31855
- const adapter = useAdapter();
31856
- const role = (_b = (_a = adapter.getState().call) === null || _a === void 0 ? void 0 : _a.role) !== null && _b !== void 0 ? _b : 'Unknown';
32080
+ const role = (_a = useSelector$1(getRole)) !== null && _a !== void 0 ? _a : 'Unknown';
31857
32081
  const augmentedDeviceButtonProps = React.useMemo(() => (Object.assign(Object.assign({}, devicesButtonProps), { microphones: role === 'Consumer' ? [] : devicesButtonProps.microphones, cameras: role === 'Consumer' ? [] : devicesButtonProps.cameras })), [devicesButtonProps, role]);
31858
32082
  const styles = React.useMemo(() => {
31859
32083
  var _a;
@@ -32012,169 +32236,19 @@ const EndCall = (props) => {
32012
32236
  React.createElement(Prompt, Object.assign({}, dialogLabels, { styles: { main: { minWidth: '22.5rem', padding: '1.5rem' } }, cancelButtonLabel: localeStrings.call.hangUpCancelButtonLabel, onConfirm: () => onHangUpConfirm(props.enableEndCallMenu), isOpen: showHangUpConfirm, onCancel: toggleConfirm }))));
32013
32237
  };
32014
32238
 
32015
- // Copyright (c) Microsoft Corporation.
32016
- // Licensed under the MIT License.
32017
- /**
32018
- * @private
32019
- */
32020
- const useSelector$1 = (selector, selectorProps) => {
32021
- // use selector with no adaptation
32022
- return useSelectorWithAdaptation(selector, (state) => state, selectorProps);
32023
- };
32024
-
32025
- // Copyright (c) Microsoft Corporation.
32026
- // Licensed under the MIT License.
32027
- /**
32028
- * @private
32029
- */
32030
- const getDisplayName = (state) => state.displayName;
32031
- /**
32032
- * @private
32033
- */
32034
- const getEndedCall = (state) => state.endedCall;
32035
- /**
32036
- * @private
32037
- */
32038
- const getCallStatus = (state) => { var _a, _b; return (_b = (_a = state.call) === null || _a === void 0 ? void 0 : _a.state) !== null && _b !== void 0 ? _b : 'None'; };
32039
- /**
32040
- * @private
32041
- */
32042
- const getDeviceManager = (state) => state.devices;
32043
- /**
32044
- * @private
32045
- */
32046
- const getIsScreenShareOn = (state) => { var _a, _b; return (_b = (_a = state.call) === null || _a === void 0 ? void 0 : _a.isScreenSharingOn) !== null && _b !== void 0 ? _b : false; };
32047
- /**
32048
- * @private
32049
- */
32050
- const getLocalParticipantRaisedHand = (state) => { var _a; return (_a = state.call) === null || _a === void 0 ? void 0 : _a.raiseHand.localParticipantRaisedHand; };
32051
- /**
32052
- * @private
32053
- */
32054
- const getCapabilites = (state) => { var _a, _b; return (_b = (_a = state.call) === null || _a === void 0 ? void 0 : _a.capabilitiesFeature) === null || _b === void 0 ? void 0 : _b.capabilities; };
32055
- /**
32056
- * @private
32057
- */
32058
- const getMicrophones = (state) => state.devices.microphones;
32059
- /**
32060
- * @private
32061
- */
32062
- const getCameras = (state) => state.devices.cameras;
32063
- /**
32064
- * @private
32065
- */
32066
- const getRole = (state) => { var _a; return (_a = state.call) === null || _a === void 0 ? void 0 : _a.role; };
32067
- /**
32068
- * @private
32069
- */
32070
- const getPage = (state) => state.page;
32071
- /**
32072
- * @private
32073
- */
32074
- const getTransferCall = (state) => state.acceptedTransferCallState;
32075
- /**
32076
- * @private
32077
- */
32078
- const getLocalMicrophoneEnabled = (state) => state.isLocalPreviewMicrophoneEnabled;
32079
- /**
32080
- * @private
32081
- */
32082
- const getLocalVideoStreams = (state) => { var _a; return (_a = state.call) === null || _a === void 0 ? void 0 : _a.localVideoStreams; };
32083
- /**
32084
- * @private
32085
- */
32086
- const getIsTranscriptionActive = (state) => { var _a; return !!((_a = state.call) === null || _a === void 0 ? void 0 : _a.transcription.isTranscriptionActive); };
32087
- /**
32088
- * @private
32089
- */
32090
- const getIsRecordingActive = (state) => { var _a; return !!((_a = state.call) === null || _a === void 0 ? void 0 : _a.recording.isRecordingActive); };
32091
- /**
32092
- * @private
32093
- */
32094
- const getUserFacingDiagnostics = (state) => { var _a; return (_a = state.call) === null || _a === void 0 ? void 0 : _a.diagnostics; };
32095
- /**
32096
- * @private
32097
- */
32098
- const getDominantSpeakerInfo = (state) => { var _a; return (_a = state.call) === null || _a === void 0 ? void 0 : _a.dominantSpeakers; };
32099
- /**
32100
- * @private
32101
- */
32102
- const getRemoteParticipants = (state) => { var _a; return (_a = state.call) === null || _a === void 0 ? void 0 : _a.remoteParticipants; };
32103
- /**
32104
- * @private
32105
- */
32106
- const getSelectedVideoEffect = (state) => state.selectedVideoBackgroundEffect;
32107
- /* @conditional-compile-remove(acs-close-captions) */
32108
- /** @private */
32109
- const getCaptionsKind = (state) => {
32110
- var _a;
32111
- return (_a = state.call) === null || _a === void 0 ? void 0 : _a.captionsFeature.captionsKind;
32112
- };
32113
- /** @private */
32114
- const getCaptionsStatus = (state) => {
32115
- var _a;
32116
- return (_a = state.call) === null || _a === void 0 ? void 0 : _a.captionsFeature.isCaptionsFeatureActive;
32117
- };
32118
- /**
32119
- * @private
32120
- */
32121
- const getIsTeamsCall = (state) => state.isTeamsCall;
32122
- /**
32123
- * @private
32124
- */
32125
- const getIsTeamsMeeting = (state) => state.isTeamsMeeting;
32126
- /**
32127
- * @private
32128
- */
32129
- const getTeamsMeetingCoordinates = (state) => { var _a, _b; return (_b = (_a = state.call) === null || _a === void 0 ? void 0 : _a.meetingConference) === null || _b === void 0 ? void 0 : _b.conferencePhones; };
32130
- /**
32131
- * @private
32132
- */
32133
- const getLatestCapabilitiesChangedInfo = (state) => {
32134
- var _a, _b;
32135
- return (_b = (_a = state.call) === null || _a === void 0 ? void 0 : _a.capabilitiesFeature) === null || _b === void 0 ? void 0 : _b.latestCapabilitiesChangeInfo;
32136
- };
32137
- /**
32138
- * @private
32139
- */
32140
- const getTargetCallees = (state) => state.targetCallees;
32141
- /**
32142
- * @private
32143
- */
32144
- const getStartTime = (state) => { var _a; return (_a = state.call) === null || _a === void 0 ? void 0 : _a.startTime; };
32145
- /**
32146
- * @private
32147
- */
32148
- const getSpotlightedParticipants = (state) => { var _a, _b; return (_b = (_a = state.call) === null || _a === void 0 ? void 0 : _a.spotlight) === null || _b === void 0 ? void 0 : _b.spotlightedParticipants; };
32149
- /* @conditional-compile-remove(breakout-rooms) */
32150
- /**
32151
- * @private
32152
- */
32153
- const getAssignedBreakoutRoom = (state) => { var _a, _b; return (_b = (_a = state.call) === null || _a === void 0 ? void 0 : _a.breakoutRooms) === null || _b === void 0 ? void 0 : _b.assignedBreakoutRoom; };
32154
- /* @conditional-compile-remove(breakout-rooms) */
32155
- /**
32156
- * @private
32157
- */
32158
- const getBreakoutRoomSettings = (state) => { var _a, _b; return (_b = (_a = state.call) === null || _a === void 0 ? void 0 : _a.breakoutRooms) === null || _b === void 0 ? void 0 : _b.breakoutRoomSettings; };
32159
- /* @conditional-compile-remove(breakout-rooms) */
32160
- /**
32161
- * @private
32162
- */
32163
- const getBreakoutRoomDisplayName = (state) => { var _a, _b; return (_b = (_a = state.call) === null || _a === void 0 ? void 0 : _a.breakoutRooms) === null || _b === void 0 ? void 0 : _b.breakoutRoomDisplayName; };
32164
-
32165
32239
  // Copyright (c) Microsoft Corporation.
32166
32240
  // Licensed under the MIT License.
32167
32241
  /**
32168
32242
  * @private
32169
32243
  */
32170
32244
  const Microphone = (props) => {
32171
- var _a, _b, _c;
32245
+ var _a;
32172
32246
  const microphoneButtonProps = usePropsFor$1(MicrophoneButton);
32173
32247
  const callStatus = useSelector$1(getCallStatus);
32174
32248
  const isLocalMicrophoneEnabled = useSelector$1(getLocalMicrophoneEnabled);
32175
- const adapter = useAdapter();
32176
- const isRoomsCall = adapter.getState().isRoomsCall;
32177
- const unmuteMicCapability = (_b = (_a = adapter.getState().call) === null || _a === void 0 ? void 0 : _a.capabilitiesFeature) === null || _b === void 0 ? void 0 : _b.capabilities.unmuteMic;
32249
+ const isRoomsCall = useSelector$1(getIsRoomsCall);
32250
+ const role = useSelector$1(getRole);
32251
+ const unmuteMicCapability = (_a = useSelector$1(getCapabilites)) === null || _a === void 0 ? void 0 : _a.unmuteMic;
32178
32252
  /**
32179
32253
  * When call is in connecting state, microphone button should be disabled.
32180
32254
  * This is due to to headless limitation where a call can not be muted/unmuted in lobby.
@@ -32192,7 +32266,7 @@ const Microphone = (props) => {
32192
32266
  /* @conditional-compile-remove(DNS) */
32193
32267
  onClickNoiseSuppression: props.onClickNoiseSuppression,
32194
32268
  /* @conditional-compile-remove(DNS) */
32195
- showNoiseSuppressionButton: props.showNoiseSuppressionButton, showLabel: props.displayType !== 'compact', disableTooltip: props.disableTooltip, styles: styles, enableDeviceSelectionMenu: props.splitButtonsForDeviceSelection, disabled: microphoneButtonProps.disabled || props.disabled || (isRoomsCall && ((_c = adapter.getState().call) === null || _c === void 0 ? void 0 : _c.role) === 'Unknown'), onRenderOffIcon: unmuteMicCapability && !unmuteMicCapability.isPresent
32269
+ showNoiseSuppressionButton: props.showNoiseSuppressionButton, showLabel: props.displayType !== 'compact', disableTooltip: props.disableTooltip, styles: styles, enableDeviceSelectionMenu: props.splitButtonsForDeviceSelection, disabled: microphoneButtonProps.disabled || props.disabled || !!(isRoomsCall && role === 'Unknown'), onRenderOffIcon: unmuteMicCapability && !unmuteMicCapability.isPresent
32196
32270
  ? () => React.createElement(_HighContrastAwareIcon, { disabled: true, iconName: 'ControlButtonMicProhibited' })
32197
32271
  : undefined })));
32198
32272
  };
@@ -32219,16 +32293,15 @@ const isDisabled$3 = (option) => {
32219
32293
  // Licensed under the MIT License.
32220
32294
  /** @private */
32221
32295
  const ScreenShare = (props) => {
32222
- var _a;
32223
32296
  const screenShareButtonProps = usePropsFor$1(ScreenShareButton);
32224
32297
  const styles = React.useMemo(() => { var _a; return concatButtonBaseStyles((_a = props.styles) !== null && _a !== void 0 ? _a : {}); }, [props.styles]);
32225
- const adapter = useAdapter();
32226
- const isRoomsCall = adapter.getState().isRoomsCall;
32298
+ const isRoomsCall = useSelector$1(getIsRoomsCall);
32299
+ const role = useSelector$1(getRole);
32227
32300
  const screenShareButtonDisabled = () => {
32228
32301
  var _a;
32229
32302
  return (_a = screenShareButtonProps === null || screenShareButtonProps === void 0 ? void 0 : screenShareButtonProps.disabled) !== null && _a !== void 0 ? _a : isDisabled$2(props.option);
32230
32303
  };
32231
- return (React.createElement(ScreenShareButton, Object.assign({ "data-ui-id": "call-composite-screenshare-button" }, screenShareButtonProps, { showLabel: props.displayType !== 'compact', disabled: screenShareButtonDisabled() || props.disabled || (isRoomsCall && ((_a = adapter.getState().call) === null || _a === void 0 ? void 0 : _a.role) === 'Unknown'), styles: styles })));
32304
+ return (React.createElement(ScreenShareButton, Object.assign({ "data-ui-id": "call-composite-screenshare-button" }, screenShareButtonProps, { showLabel: props.displayType !== 'compact', disabled: screenShareButtonDisabled() || props.disabled || !!(isRoomsCall && role === 'Unknown'), styles: styles })));
32232
32305
  };
32233
32306
  const isDisabled$2 = (option) => {
32234
32307
  if (option === undefined || option === true || option === false) {
@@ -32534,34 +32607,38 @@ const inferCallControlOptions = (mobileView, callControlOptions) => {
32534
32607
  * @private
32535
32608
  */
32536
32609
  const CallControls = (props) => {
32537
- var _a, _b;
32610
+ var _a;
32538
32611
  const options = React.useMemo(() => inferCallControlOptions(!!props.isMobile, props.options), [props.isMobile, props.options]);
32539
- const adapter = useAdapter();
32540
32612
  const localeStrings = useLocale();
32541
32613
  /* @conditional-compile-remove(DNS) */
32542
32614
  const [isDeepNoiseSuppressionOn, setDeepNoiseSuppressionOn] = React.useState(false);
32543
32615
  /* @conditional-compile-remove(DNS) */
32616
+ const adapter = useAdapter();
32617
+ /* @conditional-compile-remove(DNS) */
32544
32618
  const startDeepNoiseSuppression = React.useCallback(() => __awaiter$m(void 0, void 0, void 0, function* () {
32545
32619
  yield adapter.startNoiseSuppressionEffect();
32546
32620
  }), [adapter]);
32547
32621
  /* @conditional-compile-remove(DNS) */
32622
+ const deepNoiseSuppresionEffectsDependency = useSelector$1(getDeepNoiseSuppresionEffectsDependency);
32623
+ /* @conditional-compile-remove(DNS) */
32624
+ const deepNoiseSuppressionOnByDefault = useSelector$1(getDeepNoiseSuppresionIsOnByDefault);
32625
+ /* @conditional-compile-remove(DNS) */
32548
32626
  React.useEffect(() => {
32549
- if (adapter.getState().onResolveDeepNoiseSuppressionDependency &&
32550
- adapter.getState().deepNoiseSuppressionOnByDefault) {
32627
+ if (deepNoiseSuppresionEffectsDependency && deepNoiseSuppressionOnByDefault) {
32551
32628
  startDeepNoiseSuppression();
32552
32629
  setDeepNoiseSuppressionOn(true);
32553
32630
  }
32554
- }, [adapter, startDeepNoiseSuppression]);
32631
+ }, [deepNoiseSuppresionEffectsDependency, deepNoiseSuppressionOnByDefault, startDeepNoiseSuppression]);
32555
32632
  /* @conditional-compile-remove(DNS) */
32556
- const environmentInfo = adapter.getState().environmentInfo;
32633
+ const environmentInfo = useSelector$1(getEnvironmentInfo);
32557
32634
  /* @conditional-compile-remove(DNS) */
32558
32635
  const isSafari = _isSafari(environmentInfo);
32559
32636
  /* @conditional-compile-remove(DNS) */
32560
- const showNoiseSuppressionButton = adapter.getState().onResolveDeepNoiseSuppressionDependency &&
32561
- !adapter.getState().hideDeepNoiseSuppressionButton &&
32562
- !isSafari
32563
- ? true
32564
- : false;
32637
+ const hideDeepNoiseSuppressionButton = useSelector$1(getHideDeepNoiseSupressionButton);
32638
+ /* @conditional-compile-remove(DNS) */
32639
+ const showNoiseSuppressionButton = !!(deepNoiseSuppresionEffectsDependency &&
32640
+ !hideDeepNoiseSuppressionButton &&
32641
+ !isSafari);
32565
32642
  /* @conditional-compile-remove(DNS) */
32566
32643
  const onClickNoiseSuppression = React.useCallback(() => __awaiter$m(void 0, void 0, void 0, function* () {
32567
32644
  if (isDeepNoiseSuppressionOn) {
@@ -32614,6 +32691,7 @@ const CallControls = (props) => {
32614
32691
  if (showReactionButtonInControlBar) {
32615
32692
  numberOfButtons++;
32616
32693
  }
32694
+ const isRoomsCall = useSelector$1(getIsRoomsCall);
32617
32695
  const moreButtonContextualMenuItems = () => {
32618
32696
  const items = [];
32619
32697
  if (props.isMobile && props.onPeopleButtonClicked && isEnabled$2(options === null || options === void 0 ? void 0 : options.participantsButton)) {
@@ -32633,7 +32711,7 @@ const CallControls = (props) => {
32633
32711
  ['data-ui-id']: 'call-composite-more-menu-people-button'
32634
32712
  });
32635
32713
  }
32636
- if (!isRoomsCallTrampoline(adapter)) {
32714
+ if (!isRoomsCall) {
32637
32715
  items.push({
32638
32716
  key: 'holdButtonKey',
32639
32717
  text: localeStrings.component.strings.holdButton.tooltipOffContent,
@@ -32666,11 +32744,11 @@ const CallControls = (props) => {
32666
32744
  showDevicesButtonInControlBar = false;
32667
32745
  showMoreButton = isEnabled$2(options === null || options === void 0 ? void 0 : options.moreButton);
32668
32746
  }
32669
- const reactionResources = adapter.getState().reactions;
32747
+ const reactionResources = useSelector$1(getReactionResources);
32670
32748
  const raiseHandButtonIsEnabled = isEnabled$2(options === null || options === void 0 ? void 0 : options.raiseHandButton);
32671
32749
  let showRaiseHandButtonInControlBar = raiseHandButtonIsEnabled;
32672
- const role = (_a = adapter.getState().call) === null || _a === void 0 ? void 0 : _a.role;
32673
- const hideRaiseHandButtonInRoomsCall = adapter.getState().isRoomsCall && role && ['Consumer', 'Unknown'].includes(role);
32750
+ const role = useSelector$1(getRole);
32751
+ const hideRaiseHandButtonInRoomsCall = isRoomsCall && role && ['Consumer', 'Unknown'].includes(role);
32674
32752
  if (showRaiseHandButtonInControlBar && (props.isMobile ? numberOfButtons < 5 : true)) {
32675
32753
  numberOfButtons++;
32676
32754
  }
@@ -32757,8 +32835,8 @@ const CallControls = (props) => {
32757
32835
  showRaiseHandButtonInControlBar && !hideRaiseHandButtonInRoomsCall && (React.createElement(RaiseHand, { displayType: options === null || options === void 0 ? void 0 : options.displayType })),
32758
32836
  screenShareButtonIsEnabled && (React.createElement(ScreenShare, { option: options === null || options === void 0 ? void 0 : options.screenShareButton, displayType: options === null || options === void 0 ? void 0 : options.displayType, disabled: isDisabled$4(options === null || options === void 0 ? void 0 : options.screenShareButton) })),
32759
32837
  showParticipantsButtonInControlBar && (React.createElement(Participants, { option: options === null || options === void 0 ? void 0 : options.participantsButton, callInvitationURL: props.callInvitationURL, onFetchParticipantMenuItems: props.onFetchParticipantMenuItems, displayType: options === null || options === void 0 ? void 0 : options.displayType, increaseFlyoutItemSize: props.increaseFlyoutItemSize, isMobile: props.isMobile, disabled: isDisabled$4(options === null || options === void 0 ? void 0 : options.participantsButton) })) && (React.createElement(People, { checked: props.peopleButtonChecked, ariaLabel: peopleButtonStrings === null || peopleButtonStrings === void 0 ? void 0 : peopleButtonStrings.label, showLabel: (options === null || options === void 0 ? void 0 : options.displayType) !== 'compact', onClick: props.onPeopleButtonClicked, "data-ui-id": "call-composite-people-button", strings: peopleButtonStrings, disabled: isDisabled$4(options === null || options === void 0 ? void 0 : options.participantsButton), disableTooltip: props.isMobile })),
32760
- showDevicesButtonInControlBar && (React.createElement(Devices, { displayType: options === null || options === void 0 ? void 0 : options.displayType, increaseFlyoutItemSize: props.increaseFlyoutItemSize, disabled: isDisabled$4(options === null || options === void 0 ? void 0 : options.devicesButton) })), (_b = customButtons['primary']) === null || _b === void 0 ? void 0 :
32761
- _b.slice(0, props.isMobile
32838
+ showDevicesButtonInControlBar && (React.createElement(Devices, { displayType: options === null || options === void 0 ? void 0 : options.displayType, increaseFlyoutItemSize: props.increaseFlyoutItemSize, disabled: isDisabled$4(options === null || options === void 0 ? void 0 : options.devicesButton) })), (_a = customButtons['primary']) === null || _a === void 0 ? void 0 :
32839
+ _a.slice(0, props.isMobile
32762
32840
  ? CUSTOM_BUTTON_OPTIONS.MAX_PRIMARY_MOBILE_CUSTOM_BUTTONS
32763
32841
  : CUSTOM_BUTTON_OPTIONS.MAX_PRIMARY_DESKTOP_CUSTOM_BUTTONS).map((CustomButton, i) => {
32764
32842
  return (React.createElement(CustomButton, { key: `primary-custom-button-${i}`,
@@ -32769,10 +32847,6 @@ const CallControls = (props) => {
32769
32847
  isEnabled$2(options === null || options === void 0 ? void 0 : options.endCallButton) && React.createElement(EndCall, { displayType: options === null || options === void 0 ? void 0 : options.displayType })))));
32770
32848
  };
32771
32849
  const isEnabled$2 = (option) => option !== false;
32772
- /** @private */
32773
- const isRoomsCallTrampoline = (adapter) => {
32774
- return adapter.getState().isRoomsCall;
32775
- };
32776
32850
 
32777
32851
  // Copyright (c) Microsoft Corporation.
32778
32852
  // Licensed under the MIT License.
@@ -34738,7 +34812,7 @@ const SidePane = (props) => {
34738
34812
  if (!ContentRenderer && !OverrideContentRenderer) {
34739
34813
  return React.createElement(EmptyElement, null);
34740
34814
  }
34741
- return (React.createElement(react.Stack, { verticalFill: true, grow: true, styles: paneStyles, "data-ui-id": "SidePane", tokens: props.mobileView || (!props.showAddPeopleButton && (sidePaneRenderer === null || sidePaneRenderer === void 0 ? void 0 : sidePaneRenderer.id) === 'people') ? {} : sidePaneTokens },
34815
+ return (React.createElement(react.Stack, { "aria-label": props.ariaLabel, "data-is-focusable": !!props.ariaLabel, role: props.ariaLabel ? 'navigation' : undefined, tabIndex: props.ariaLabel ? 0 : undefined, verticalFill: true, grow: true, styles: paneStyles, "data-ui-id": "SidePane", tokens: props.mobileView || (!props.showAddPeopleButton && (sidePaneRenderer === null || sidePaneRenderer === void 0 ? void 0 : sidePaneRenderer.id) === 'people') ? {} : sidePaneTokens },
34742
34816
  HeaderToRender,
34743
34817
  React.createElement(react.Stack.Item, { verticalFill: true, grow: true, styles: paneBodyContainer },
34744
34818
  React.createElement(react.Stack, { verticalFill: true, styles: scrollableContainer },
@@ -35200,9 +35274,8 @@ const PeoplePaneContent = (props) => {
35200
35274
  const addParticipantToCall = React.useCallback((participant, options) => __awaiter$h(void 0, void 0, void 0, function* () {
35201
35275
  yield adapter.addParticipant(participant, options);
35202
35276
  }), [adapter]);
35203
- const alternateCallerId = adapter.getState().alternateCallerId;
35204
35277
  const participantListDefaultProps = usePropsFor$1(ParticipantList$l);
35205
- const removeButtonAllowed = canRemoveParticipants(adapter);
35278
+ const removeButtonAllowed = canRemoveParticipants(props.role);
35206
35279
  const setDrawerMenuItemsForParticipant = React.useMemo(() => {
35207
35280
  return (participant) => {
35208
35281
  if (participant) {
@@ -35240,9 +35313,9 @@ const PeoplePaneContent = (props) => {
35240
35313
  if (props.mobileView) {
35241
35314
  return (React.createElement(react.Stack, { verticalFill: true, styles: peoplePaneContainerStyle, tokens: peoplePaneContainerTokens, "data-ui-id": "people-pane-content" },
35242
35315
  React.createElement(react.Stack.Item, { grow: true, styles: participantListContainerStyles }, participantList),
35243
- React.createElement(AddPeopleButton, { inviteLink: inviteLink, mobileView: props.mobileView, participantList: participantList, strings: strings, onAddParticipant: addParticipantToCall, alternateCallerId: alternateCallerId })));
35316
+ React.createElement(AddPeopleButton, { inviteLink: inviteLink, mobileView: props.mobileView, participantList: participantList, strings: strings, onAddParticipant: addParticipantToCall, alternateCallerId: props.alternateCallerId })));
35244
35317
  }
35245
- return (React.createElement(AddPeopleButton, { inviteLink: inviteLink, mobileView: props.mobileView, participantList: participantList, strings: strings, onAddParticipant: addParticipantToCall, alternateCallerId: alternateCallerId }));
35318
+ return (React.createElement(AddPeopleButton, { inviteLink: inviteLink, mobileView: props.mobileView, participantList: participantList, strings: strings, onAddParticipant: addParticipantToCall, alternateCallerId: props.alternateCallerId }));
35246
35319
  };
35247
35320
  /**
35248
35321
  * Create default contextual menu items for particant
@@ -35272,13 +35345,11 @@ const createDefaultContextualMenuItems = (participant, strings, onRemoveParticip
35272
35345
  }
35273
35346
  return menuItems;
35274
35347
  };
35275
- const canRemoveParticipants = (adapter) => {
35276
- var _a;
35348
+ const canRemoveParticipants = (role) => {
35277
35349
  // TODO: We should be using the removeParticipant capability here but there is an SDK bug for Rooms where a
35278
35350
  // Presenter's removeParticipant capability is {isPresent: false, reason: 'CapabilityNotApplicableForTheCallType'}.
35279
35351
  // But a Presenter in Rooms should be able to remove participants according to the following documentation
35280
35352
  // https://learn.microsoft.com/en-us/azure/communication-services/concepts/rooms/room-concept#predefined-participant-roles-and-permissions
35281
- const role = (_a = adapter.getState().call) === null || _a === void 0 ? void 0 : _a.role;
35282
35353
  const canRemove = role === 'Presenter' || role === 'Unknown' || role === undefined;
35283
35354
  return canRemove;
35284
35355
  };
@@ -35520,11 +35591,13 @@ const usePeoplePane = (props) => {
35520
35591
  localeStrings.unpinParticipantMenuItemAriaLabel,
35521
35592
  localeStrings.pinParticipantMenuItemAriaLabel
35522
35593
  ]);
35594
+ const role = useSelector$1(getRole);
35595
+ const alternateCallerId = useSelector$1(getAlternateCallerId);
35523
35596
  const onRenderContent = React.useCallback(() => {
35524
35597
  return (React.createElement(React.Fragment, null,
35525
35598
  /* @conditional-compile-remove(soft-mute) */
35526
35599
  React.createElement(Prompt, Object.assign({}, muteAllPromptLabels, { styles: { main: { minWidth: '22.5rem', padding: '1.5rem' } }, onConfirm: () => onMuteAllPromptConfirm(), isOpen: showMuteAllPrompt, onCancel: () => setShowMuteAllPrompt(false) })),
35527
- React.createElement(PeoplePaneContent, { inviteLink: inviteLink, onFetchAvatarPersonaData: onFetchAvatarPersonaData, onFetchParticipantMenuItems: onFetchParticipantMenuItemsForCallComposite, setDrawerMenuItems: setDrawerMenuItems, mobileView: mobileView, setParticipantActioned: setParticipantActioned, participantListHeadingMoreButtonProps: sidePaneHeaderMenuProps, pinnedParticipants: pinnedParticipants })));
35600
+ React.createElement(PeoplePaneContent, { inviteLink: inviteLink, onFetchAvatarPersonaData: onFetchAvatarPersonaData, onFetchParticipantMenuItems: onFetchParticipantMenuItemsForCallComposite, setDrawerMenuItems: setDrawerMenuItems, mobileView: mobileView, setParticipantActioned: setParticipantActioned, participantListHeadingMoreButtonProps: sidePaneHeaderMenuProps, pinnedParticipants: pinnedParticipants, role: role, alternateCallerId: alternateCallerId })));
35528
35601
  }, [
35529
35602
  inviteLink,
35530
35603
  mobileView,
@@ -35534,6 +35607,8 @@ const usePeoplePane = (props) => {
35534
35607
  setParticipantActioned,
35535
35608
  sidePaneHeaderMenuProps,
35536
35609
  pinnedParticipants,
35610
+ role,
35611
+ alternateCallerId,
35537
35612
  /* @conditional-compile-remove(soft-mute) */ showMuteAllPrompt,
35538
35613
  /* @conditional-compile-remove(soft-mute) */ setShowMuteAllPrompt,
35539
35614
  /* @conditional-compile-remove(soft-mute) */ muteAllPromptLabels,
@@ -35830,9 +35905,8 @@ const VideoEffectsPaneContent = (props) => {
35830
35905
  }
35831
35906
  }
35832
35907
  ];
35833
- const videoEffectImages = adapter.getState().videoBackgroundImages;
35834
- if (videoEffectImages) {
35835
- videoEffectImages.forEach((img) => {
35908
+ if (props.backgroundImages) {
35909
+ props.backgroundImages.forEach((img) => {
35836
35910
  var _a;
35837
35911
  videoEffects.push({
35838
35912
  itemKey: img.key,
@@ -35846,7 +35920,13 @@ const VideoEffectsPaneContent = (props) => {
35846
35920
  });
35847
35921
  }
35848
35922
  return videoEffects;
35849
- }, [strings, adapter]);
35923
+ }, [
35924
+ strings.removeBackgroundEffectButtonLabel,
35925
+ strings.removeBackgroundTooltip,
35926
+ strings.blurBackgroundEffectButtonLabel,
35927
+ strings.blurBackgroundTooltip,
35928
+ props.backgroundImages
35929
+ ]);
35850
35930
  const onEffectChange = React.useCallback((effectKey) => __awaiter$g(void 0, void 0, void 0, function* () {
35851
35931
  if (effectKey === 'blur') {
35852
35932
  const blurEffect = {
@@ -35931,12 +36011,13 @@ const useVideoEffectsPane = (updateSidePaneRenderer, mobileView, latestErrors, o
35931
36011
  }, [closePane, locale.strings, mobileView]);
35932
36012
  const latestVideoEffectError = latestErrors.find((error) => error.type === 'unableToStartVideoEffect');
35933
36013
  const updateFocusHandle = React.useMemo(() => React.createRef(), []);
36014
+ const backgroundImages = useSelector$1(getVideoBackgroundImages);
35934
36015
  const onRenderContent = React.useCallback(() => {
35935
36016
  return (React.createElement(VideoEffectsPaneContent, { onDismissError: onDismissError, activeVideoEffectError: latestVideoEffectError, activeVideoEffectChange: () => {
35936
36017
  // Clear any existing video effects error when the user clicks on a new video effect
35937
36018
  latestVideoEffectError && (onDismissError === null || onDismissError === void 0 ? void 0 : onDismissError(latestVideoEffectError));
35938
- }, updateFocusHandle: updateFocusHandle }));
35939
- }, [latestVideoEffectError, onDismissError, updateFocusHandle]);
36019
+ }, updateFocusHandle: updateFocusHandle, backgroundImages: backgroundImages }));
36020
+ }, [latestVideoEffectError, onDismissError, updateFocusHandle, backgroundImages]);
35940
36021
  const sidePaneRenderer = React.useMemo(() => ({
35941
36022
  headerRenderer: onRenderHeader,
35942
36023
  contentRenderer: onRenderContent,
@@ -36146,10 +36227,9 @@ const DRAG_OPTIONS = {
36146
36227
  * @private
36147
36228
  */
36148
36229
  const ModalLocalAndRemotePIP = (props) => {
36149
- var _a, _b;
36230
+ var _a;
36150
36231
  const rootStyles = props.hidden ? hiddenStyle : PIPContainerStyle;
36151
- const adapter = useAdapter();
36152
- const role = (_a = adapter.getState().call) === null || _a === void 0 ? void 0 : _a.role;
36232
+ const role = useSelector$1(getRole);
36153
36233
  const locale = useLocale();
36154
36234
  const pictureInPictureProps = useSelector$1(localAndRemotePIPSelector);
36155
36235
  const [touchStartTouches, setTouchStartTouches] = React.useState(null);
@@ -36195,7 +36275,7 @@ const ModalLocalAndRemotePIP = (props) => {
36195
36275
  if (role === 'Consumer' && !remoteParticipant) {
36196
36276
  return null;
36197
36277
  }
36198
- const modalStylesThemed = react.concatStyleSets(modalStyle, (_b = props.styles) === null || _b === void 0 ? void 0 : _b.modal);
36278
+ const modalStylesThemed = react.concatStyleSets(modalStyle, (_a = props.styles) === null || _a === void 0 ? void 0 : _a.modal);
36199
36279
  return (React.createElement(react.Stack, { styles: rootStyles },
36200
36280
  React.createElement(react.Stack, { onTouchStart: onTouchStart, onTouchEnd: onTouchEnd },
36201
36281
  React.createElement(_ModalClone, { isOpen: true, isModeless: true, dragOptions: DRAG_OPTIONS, styles: modalStylesThemed, layerProps: { hostId: props.modalLayerHostId }, minDragPosition: props.minDragPosition, maxDragPosition: props.maxDragPosition },
@@ -36562,7 +36642,7 @@ const MAX_PINNED_REMOTE_VIDEO_TILES = 4;
36562
36642
  * @private
36563
36643
  */
36564
36644
  const CallArrangement = (props) => {
36565
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
36645
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
36566
36646
  const containerClassName = React.useMemo(() => {
36567
36647
  return props.mobileView ? containerStyleMobile : containerStyleDesktop;
36568
36648
  }, [props.mobileView]);
@@ -36614,7 +36694,7 @@ const CallArrangement = (props) => {
36614
36694
  setParticipantActioned
36615
36695
  ]);
36616
36696
  const locale = useLocale();
36617
- const role = (_b = adapter.getState().call) === null || _b === void 0 ? void 0 : _b.role;
36697
+ const role = useSelector$1(getRole);
36618
36698
  const videoGalleryProps = usePropsFor$1(VideoGallery);
36619
36699
  /* @conditional-compile-remove(soft-mute) */
36620
36700
  const muteAllHandlers = useHandlers();
@@ -36663,7 +36743,7 @@ const CallArrangement = (props) => {
36663
36743
  }, [onPinParticipant, onUnpinParticipant, pinnedParticipants]);
36664
36744
  const { onStartLocalSpotlightWithPrompt, onStopLocalSpotlightWithPrompt } = useLocalSpotlightCallbacksWithPrompt(onStartLocalSpotlight, onStopLocalSpotlight, setIsPromptOpen, setPromptProps);
36665
36745
  const { onStartRemoteSpotlightWithPrompt, onStopRemoteSpotlightWithPrompt } = useRemoteSpotlightCallbacksWithPrompt(onStartRemoteSpotlight, onStopRemoteSpotlight, setIsPromptOpen, setPromptProps);
36666
- const canRemoveSpotlight = (_d = (_c = adapter.getState().call) === null || _c === void 0 ? void 0 : _c.capabilitiesFeature) === null || _d === void 0 ? void 0 : _d.capabilities.removeParticipantsSpotlight.isPresent;
36746
+ const canRemoveSpotlight = (_b = useSelector$1(getCapabilites)) === null || _b === void 0 ? void 0 : _b.removeParticipantsSpotlight.isPresent;
36667
36747
  const stopAllSpotlight = React.useMemo(() => (canRemoveSpotlight ? () => adapter.stopAllSpotlight() : undefined), [canRemoveSpotlight, adapter]);
36668
36748
  const { stopAllSpotlightWithPrompt } = useStopAllSpotlightCallbackWithPrompt(stopAllSpotlight, setIsPromptOpen, setPromptProps);
36669
36749
  const onMuteParticipantPeoplePaneProps = React.useMemo(() => {
@@ -36737,8 +36817,8 @@ const CallArrangement = (props) => {
36737
36817
  position: 'relative'
36738
36818
  };
36739
36819
  }, [isMobileWithActivePane, props.mobileView]);
36740
- const onResolveVideoEffectDependency = adapter.getState().onResolveVideoEffectDependency;
36741
- const { openVideoEffectsPane } = useVideoEffectsPane(props.updateSidePaneRenderer, props.mobileView, props.latestErrors, props.onDismissError, cameraButtonRef);
36820
+ const onResolveVideoEffectDependency = useSelector$1(getVideoEffectsDependency);
36821
+ const { openVideoEffectsPane, isVideoEffectsPaneOpen } = useVideoEffectsPane(props.updateSidePaneRenderer, props.mobileView, props.latestErrors, props.onDismissError, cameraButtonRef);
36742
36822
  const [showDrawer, setShowDrawer] = React.useState(false);
36743
36823
  const onMoreButtonClicked = React.useCallback(() => {
36744
36824
  setShowDrawer(true);
@@ -36781,7 +36861,7 @@ const CallArrangement = (props) => {
36781
36861
  const galleryContainerStyles = React.useMemo(() => {
36782
36862
  var _a;
36783
36863
  return Object.assign(Object.assign({}, mediaGalleryContainerStyles$1), (((_a = props === null || props === void 0 ? void 0 : props.captionsOptions) === null || _a === void 0 ? void 0 : _a.height) === 'full' ? { root: { postion: 'absolute' } } : {}));
36784
- }, [(_e = props === null || props === void 0 ? void 0 : props.captionsOptions) === null || _e === void 0 ? void 0 : _e.height]);
36864
+ }, [(_c = props === null || props === void 0 ? void 0 : props.captionsOptions) === null || _c === void 0 ? void 0 : _c.height]);
36785
36865
  if (isTeamsMeeting) {
36786
36866
  filteredLatestErrorNotifications
36787
36867
  .filter((notification) => notification.type === 'teamsMeetingCallNetworkQualityLow')
@@ -36794,8 +36874,8 @@ const CallArrangement = (props) => {
36794
36874
  const verticalControlBar = props.mobileView && containerWidth && containerHeight && containerWidth / containerHeight > 1 ? true : false;
36795
36875
  // Filter out shareScreen capability notifications if on mobile
36796
36876
  const filteredCapabilitesChangedNotifications = props.mobileView
36797
- ? (_f = props.capabilitiesChangedNotificationBarProps) === null || _f === void 0 ? void 0 : _f.capabilitiesChangedNotifications.filter((notification) => notification.capabilityName !== 'shareScreen')
36798
- : (_g = props.capabilitiesChangedNotificationBarProps) === null || _g === void 0 ? void 0 : _g.capabilitiesChangedNotifications;
36877
+ ? (_d = props.capabilitiesChangedNotificationBarProps) === null || _d === void 0 ? void 0 : _d.capabilitiesChangedNotifications.filter((notification) => notification.capabilityName !== 'shareScreen')
36878
+ : (_e = props.capabilitiesChangedNotificationBarProps) === null || _e === void 0 ? void 0 : _e.capabilitiesChangedNotifications;
36799
36879
  /* @conditional-compile-remove(breakout-rooms) */
36800
36880
  const notificationStackStrings = useCompositeStringsForNotificationStackStrings(locale);
36801
36881
  let latestNotifications = props.latestNotifications;
@@ -36805,17 +36885,18 @@ const CallArrangement = (props) => {
36805
36885
  latestNotifications = props.mobileView
36806
36886
  ? (latestNotifications !== null && latestNotifications !== void 0 ? latestNotifications : []).filter((notification) => notification.type !== 'assignedBreakoutRoomOpenedPromptJoin')
36807
36887
  : latestNotifications;
36888
+ const reactionResources = useSelector$1(getReactionResources);
36808
36889
  return (React.createElement("div", { ref: containerRef, className: react.mergeStyles(containerDivStyles), id: props.id },
36809
36890
  React.createElement(react.Stack, { verticalFill: true, horizontalAlign: "stretch", className: containerClassName, "data-ui-id": props.dataUiId },
36810
36891
  React.createElement(react.Stack, { reversed: true, horizontal: verticalControlBar, grow: true, styles: callArrangementContainerStyles(verticalControlBar) },
36811
- ((_h = props.callControlProps) === null || _h === void 0 ? void 0 : _h.options) !== false && !isMobileWithActivePane && (React.createElement(react.Stack, { verticalAlign: 'center', className: react.mergeStyles({
36892
+ ((_f = props.callControlProps) === null || _f === void 0 ? void 0 : _f.options) !== false && !isMobileWithActivePane && (React.createElement(react.Stack, { verticalAlign: 'center', className: react.mergeStyles({
36812
36893
  zIndex: CONTROL_BAR_Z_INDEX,
36813
36894
  padding: verticalControlBar ? '0.25rem' : 'unset'
36814
- }) }, isLegacyCallControlEnabled((_j = props.callControlProps) === null || _j === void 0 ? void 0 : _j.options) ? (React.createElement(CallControls, Object.assign({}, props.callControlProps, { containerWidth: containerWidth, containerHeight: containerHeight, isMobile: props.mobileView, peopleButtonChecked: isPeoplePaneOpen, onPeopleButtonClicked: togglePeoplePane, displayVertical: verticalControlBar }))) : (React.createElement(CommonCallControlBar, Object.assign({}, props.callControlProps, { callControls: props.callControlProps.options, callAdapter: adapter, mobileView: props.mobileView, disableButtonsForLobbyPage: isInLobby, disableButtonsForHoldScreen: isInLocalHold, peopleButtonChecked: isPeoplePaneOpen, onPeopleButtonClicked: togglePeoplePane, onMoreButtonClicked: onMoreButtonClicked, isCaptionsSupported: (useTeamsCaptions && hasJoinedCall) ||
36895
+ }) }, isLegacyCallControlEnabled((_g = props.callControlProps) === null || _g === void 0 ? void 0 : _g.options) ? (React.createElement(CallControls, Object.assign({}, props.callControlProps, { containerWidth: containerWidth, containerHeight: containerHeight, isMobile: props.mobileView, peopleButtonChecked: isPeoplePaneOpen, onPeopleButtonClicked: togglePeoplePane, displayVertical: verticalControlBar }))) : (React.createElement(CommonCallControlBar, Object.assign({}, props.callControlProps, { callControls: props.callControlProps.options, callAdapter: adapter, mobileView: props.mobileView, disableButtonsForLobbyPage: isInLobby, disableButtonsForHoldScreen: isInLocalHold, peopleButtonChecked: isPeoplePaneOpen, onPeopleButtonClicked: togglePeoplePane, onMoreButtonClicked: onMoreButtonClicked, isCaptionsSupported: (useTeamsCaptions && hasJoinedCall) ||
36815
36896
  /* @conditional-compile-remove(acs-close-captions) */ hasJoinedCall, useTeamsCaptions: useTeamsCaptions, isCaptionsOn: isCaptionsOn, onClickVideoEffects: onResolveVideoEffectDependency ? openVideoEffectsPane : undefined, displayVertical: verticalControlBar, onUserSetOverflowGalleryPositionChange: props.onUserSetOverflowGalleryPositionChange, onUserSetGalleryLayout: props.onUserSetGalleryLayoutChange, userSetGalleryLayout: props.userSetGalleryLayout, onSetDialpadPage: props.onSetDialpadPage, dtmfDialerPresent: props.dtmfDialerPresent, peopleButtonRef: peopleButtonRef, cameraButtonRef: cameraButtonRef, onStopLocalSpotlight: !hideSpotlightButtons && localParticipant.spotlight ? onStopLocalSpotlightWithPrompt : undefined, onToggleTeamsMeetingConferenceModal: toggleTeamsMeetingConferenceModal, teamsMeetingConferenceModalPresent: showTeamsMeetingConferenceModal }))))),
36816
- ((_k = props.callControlProps) === null || _k === void 0 ? void 0 : _k.options) !== false && showDrawer && (React.createElement(react.Stack, { styles: drawerContainerStylesValue },
36897
+ ((_h = props.callControlProps) === null || _h === void 0 ? void 0 : _h.options) !== false && showDrawer && (React.createElement(react.Stack, { styles: drawerContainerStylesValue },
36817
36898
  React.createElement(PreparedMoreDrawer, { callControls: props.callControlProps.options, onLightDismiss: closeDrawer, onPeopleButtonClicked: onMoreDrawerPeopleClicked, disableButtonsForHoldScreen: isInLocalHold, isCaptionsSupported: (useTeamsCaptions && hasJoinedCall) ||
36818
- /* @conditional-compile-remove(acs-close-captions) */ hasJoinedCall, useTeamsCaptions: useTeamsCaptions, onUserSetGalleryLayout: props.onUserSetGalleryLayoutChange, userSetGalleryLayout: props.userSetGalleryLayout, onSetDialpadPage: props.onSetDialpadPage, dtmfDialerPresent: props.dtmfDialerPresent, reactionResources: adapter.getState().reactions, onClickMeetingPhoneInfo: onMeetingPhoneInfoClicked }))),
36899
+ /* @conditional-compile-remove(acs-close-captions) */ hasJoinedCall, useTeamsCaptions: useTeamsCaptions, onUserSetGalleryLayout: props.onUserSetGalleryLayoutChange, userSetGalleryLayout: props.userSetGalleryLayout, onSetDialpadPage: props.onSetDialpadPage, dtmfDialerPresent: props.dtmfDialerPresent, reactionResources: reactionResources, onClickMeetingPhoneInfo: onMeetingPhoneInfoClicked }))),
36819
36900
  React.createElement(react.Stack, { horizontal: true, grow: true },
36820
36901
  React.createElement(react.Stack.Item, { style: callCompositeContainerCSS },
36821
36902
  React.createElement(react.Stack.Item, { styles: callGalleryStyles, grow: true },
@@ -36837,7 +36918,7 @@ const CallArrangement = (props) => {
36837
36918
  React.createElement(SidePane, { mobileView: props.mobileView, maxWidth: isVideoPaneOpen ? `${VIDEO_EFFECTS_SIDE_PANE_WIDTH_REM}rem` : undefined, minWidth: isVideoPaneOpen ? `${VIDEO_EFFECTS_SIDE_PANE_WIDTH_REM}rem` : undefined, updateSidePaneRenderer: props.updateSidePaneRenderer, onPeopleButtonClicked: props.mobileView && !shouldShowPeopleTabHeaderButton(props.callControlProps.options)
36838
36919
  ? undefined
36839
36920
  : togglePeoplePane, disablePeopleButton: typeof props.callControlProps.options !== 'boolean' &&
36840
- isDisabled$4((_l = props.callControlProps.options) === null || _l === void 0 ? void 0 : _l.participantsButton), onChatButtonClicked: (_m = props.mobileChatTabHeader) === null || _m === void 0 ? void 0 : _m.onClick, disableChatButton: (_o = props.mobileChatTabHeader) === null || _o === void 0 ? void 0 : _o.disabled, showAddPeopleButton: !!props.callControlProps.callInvitationURL }),
36921
+ isDisabled$4((_j = props.callControlProps.options) === null || _j === void 0 ? void 0 : _j.participantsButton), onChatButtonClicked: (_k = props.mobileChatTabHeader) === null || _k === void 0 ? void 0 : _k.onClick, disableChatButton: (_l = props.mobileChatTabHeader) === null || _l === void 0 ? void 0 : _l.disabled, showAddPeopleButton: !!props.callControlProps.callInvitationURL, ariaLabel: isVideoEffectsPaneOpen ? locale.strings.call.videoEffectsPaneAriaLabel : undefined }),
36841
36922
  props.mobileView && (React.createElement(ModalLocalAndRemotePIP, { modalLayerHostId: props.modalLayerHostId, hidden: !isSidePaneOpen, styles: pipStyles, strings: modalStrings, minDragPosition: minMaxDragPosition.minDragPosition, maxDragPosition: minMaxDragPosition.maxDragPosition, onDismissSidePane: () => {
36842
36923
  closePeoplePane();
36843
36924
  if (props.onCloseChatPane) {
@@ -36893,21 +36974,20 @@ const remoteVideoViewOptions = {
36893
36974
  * @private
36894
36975
  */
36895
36976
  const MediaGallery = (props) => {
36896
- var _a, _b, _c;
36977
+ var _a, _b;
36897
36978
  const { pinnedParticipants = [], setPinnedParticipants, setIsPromptOpen, setPromptProps, hideSpotlightButtons, videoTilesOptions, captionsOptions } = props;
36898
36979
  const videoGalleryProps = usePropsFor$1(VideoGallery);
36899
36980
  const cameraSwitcherCameras = useSelector$1(localVideoCameraCycleButtonSelector);
36900
36981
  const cameraSwitcherCallback = useHandlers();
36901
36982
  const announcerString = useParticipantChangedAnnouncement();
36902
- const adapter = useAdapter();
36903
- const userRole = (_a = adapter.getState().call) === null || _a === void 0 ? void 0 : _a.role;
36904
- const isRoomsCall = adapter.getState().isRoomsCall;
36983
+ const userRole = useSelector$1(getRole);
36984
+ const isRoomsCall = useSelector$1(getIsRoomsCall);
36905
36985
  const containerRef = React.useRef(null);
36906
36986
  const containerWidth = _useContainerWidth(containerRef);
36907
36987
  const containerHeight = _useContainerHeight(containerRef);
36908
36988
  const containerAspectRatio = containerWidth && containerHeight ? containerWidth / containerHeight : 0;
36909
- const reactionResources = adapter.getState().reactions;
36910
- const layoutBasedOnTilePosition = getVideoGalleryLayoutBasedOnLocalOptions((_b = props.localVideoTileOptions) === null || _b === void 0 ? void 0 : _b.position);
36989
+ const reactionResources = useSelector$1(getReactionResources);
36990
+ const layoutBasedOnTilePosition = getVideoGalleryLayoutBasedOnLocalOptions((_a = props.localVideoTileOptions) === null || _a === void 0 ? void 0 : _a.position);
36911
36991
  const cameraSwitcherProps = React.useMemo(() => {
36912
36992
  return Object.assign(Object.assign({}, cameraSwitcherCallback), cameraSwitcherCameras);
36913
36993
  }, [cameraSwitcherCallback, cameraSwitcherCameras]);
@@ -36922,7 +37002,7 @@ const MediaGallery = (props) => {
36922
37002
  : props.isMobile
36923
37003
  ? { kind: 'drawer', hostId: props.drawerMenuHostId }
36924
37004
  : { kind: 'contextual' };
36925
- }, [(_c = props.remoteVideoTileMenuOptions) === null || _c === void 0 ? void 0 : _c.isHidden, props.isMobile, props.drawerMenuHostId]);
37005
+ }, [(_b = props.remoteVideoTileMenuOptions) === null || _b === void 0 ? void 0 : _b.isHidden, props.isMobile, props.drawerMenuHostId]);
36926
37006
  const overflowGalleryPosition = React.useMemo(() => {
36927
37007
  /* @conditional-compile-remove(overflow-top-composite) */
36928
37008
  if (props.userSetOverflowGalleryPosition === 'horizontalTop') {
@@ -37252,12 +37332,10 @@ var __awaiter$e = (window && window.__awaiter) || function (thisArg, _arguments,
37252
37332
  });
37253
37333
  };
37254
37334
  const DtmfDialpadPageContent = (props) => {
37255
- var _a, _b;
37256
- const { adapter } = props;
37257
- const adapterState = adapter.getState();
37258
37335
  const theme = react.useTheme();
37259
- const calleeId = (_a = adapterState.targetCallees) === null || _a === void 0 ? void 0 : _a[0];
37260
- const remoteParticipants = (_b = adapterState.call) === null || _b === void 0 ? void 0 : _b.remoteParticipants;
37336
+ const targetCallees = useSelector$1(getTargetCallees);
37337
+ const remoteParticipants = useSelector$1(getRemoteParticipants);
37338
+ const calleeId = targetCallees === null || targetCallees === void 0 ? void 0 : targetCallees[0];
37261
37339
  let calleeName;
37262
37340
  if (remoteParticipants) {
37263
37341
  const remoteParticipantValues = Object.values(remoteParticipants);
@@ -37268,6 +37346,7 @@ const DtmfDialpadPageContent = (props) => {
37268
37346
  calleeName = remoteParticipantValues.find((p) => p.identifier === calleeId);
37269
37347
  }
37270
37348
  }
37349
+ const adapter = useAdapter();
37271
37350
  return (React.createElement(react.Stack, { style: { height: '100%', width: '100%', background: theme.palette.white } },
37272
37351
  React.createElement(react.Stack, { verticalAlign: 'center', style: { margin: 'auto' } },
37273
37352
  React.createElement(DtmfDialerContentTimer, null),
@@ -37298,8 +37377,7 @@ const DtmfDialerContentTimer = () => {
37298
37377
  * @internal
37299
37378
  */
37300
37379
  const DtmfDialpadPage = (props) => {
37301
- const adapter = useAdapter();
37302
- return React.createElement(DtmfDialpadPageContent, Object.assign({ adapter: adapter }, props, { mobileView: props.mobileView }));
37380
+ return React.createElement(DtmfDialpadPageContent, Object.assign({}, props, { mobileView: props.mobileView }));
37303
37381
  };
37304
37382
 
37305
37383
  // Copyright (c) Microsoft Corporation.
@@ -37816,18 +37894,18 @@ const localVideoViewOptions = {
37816
37894
  * @private
37817
37895
  */
37818
37896
  const LocalDeviceSettings = (props) => {
37819
- var _a, _b, _c;
37897
+ var _a, _b;
37820
37898
  const theme = useTheme();
37821
37899
  const locale = useLocale();
37822
37900
  const adapter = useAdapter();
37823
- const onResolveVideoEffectDependency = adapter.getState().onResolveVideoEffectDependency;
37901
+ const onResolveVideoEffectDependency = useSelector$1(getVideoEffectsDependency);
37824
37902
  const defaultPlaceHolder = locale.strings.call.defaultPlaceHolder;
37825
37903
  const cameraLabel = locale.strings.call.cameraLabel;
37826
37904
  const soundLabel = locale.strings.call.soundLabel;
37827
37905
  const noSpeakersLabel = locale.strings.call.noSpeakersLabel;
37828
37906
  const noCameraLabel = locale.strings.call.noCamerasLabel;
37829
37907
  const noMicLabel = locale.strings.call.noMicrophonesLabel;
37830
- const role = (_a = adapter.getState().call) === null || _a === void 0 ? void 0 : _a.role;
37908
+ const role = useSelector$1(getRole);
37831
37909
  const cameraPermissionGranted = props.cameraPermissionGranted;
37832
37910
  const micPermissionGranted = props.microphonePermissionGranted;
37833
37911
  const roleCanUseCamera = role !== 'Consumer';
@@ -37849,15 +37927,15 @@ const LocalDeviceSettings = (props) => {
37849
37927
  const hasCameras = props.cameras.length > 0;
37850
37928
  const hasMicrophones = props.microphones.length > 0;
37851
37929
  const hasSpeakers = props.speakers.length > 0;
37852
- /* @conditional-compile-remove(unsupported-browser) */
37853
- const isSafariWithNoSpeakers = ((_b = adapter.getState().environmentInfo) === null || _b === void 0 ? void 0 : _b.environment.browser.toLowerCase()) === 'safari' && !hasSpeakers;
37930
+ /* @conditional-compile-remove(calling-environment-info) */
37931
+ const isSafariWithNoSpeakers = ((_a = useSelector$1(getEnvironmentInfo)) === null || _a === void 0 ? void 0 : _a.environment.browser.toLowerCase()) === 'safari' && !hasSpeakers;
37854
37932
  const cameraGrantedDropdown = (React.createElement(react.Dropdown, { "data-ui-id": "call-composite-local-camera-settings", "aria-labelledby": 'call-composite-local-camera-settings-label', placeholder: hasCameras ? defaultPlaceHolder : noCameraLabel, options: cameraPermissionGranted ? getDropDownList(props.cameras) : [{ key: 'deniedOrUnknown', text: '' }], styles: dropDownStyles(theme), disabled: !cameraPermissionGranted || !hasCameras, errorMessage: props.cameraPermissionGranted === undefined || props.cameraPermissionGranted
37855
37933
  ? undefined
37856
37934
  : locale.strings.call.cameraPermissionDenied, defaultSelectedKey: micPermissionGranted
37857
37935
  ? props.selectedCamera
37858
37936
  ? props.selectedCamera.id
37859
37937
  : props.cameras
37860
- ? (_c = props.cameras[0]) === null || _c === void 0 ? void 0 : _c.id
37938
+ ? (_b = props.cameras[0]) === null || _b === void 0 ? void 0 : _b.id
37861
37939
  : ''
37862
37940
  : 'deniedOrUnknown', onChange: (event, option, index) => {
37863
37941
  props.onSelectCamera(props.cameras[index !== null && index !== void 0 ? index : 0], localVideoViewOptions);
@@ -37875,7 +37953,7 @@ const LocalDeviceSettings = (props) => {
37875
37953
  props.onSelectSpeaker(props.speakers[index !== null && index !== void 0 ? index : 0]);
37876
37954
  }, onRenderTitle: (props) => onRenderTitle('Speaker', props) }));
37877
37955
  const safariBrowserSpeakerDropdownTrampoline = () => {
37878
- /* @conditional-compile-remove(unsupported-browser) */
37956
+ /* @conditional-compile-remove(calling-environment-info) */
37879
37957
  if (isSafariWithNoSpeakers) {
37880
37958
  return React.createElement(React.Fragment, null);
37881
37959
  }
@@ -38440,7 +38518,7 @@ var __awaiter$c = (window && window.__awaiter) || function (thisArg, _arguments,
38440
38518
  * @private
38441
38519
  */
38442
38520
  const ConfigurationPage = (props) => {
38443
- var _a, _b, _c, _d;
38521
+ var _a;
38444
38522
  const { startCallHandler, mobileView, modalLayerHostId,
38445
38523
  /* @conditional-compile-remove(call-readiness) */ deviceChecks,
38446
38524
  /* @conditional-compile-remove(call-readiness) */ onPermissionsTroubleshootingClick,
@@ -38457,12 +38535,11 @@ const ConfigurationPage = (props) => {
38457
38535
  /* @conditional-compile-remove(call-readiness) */
38458
38536
  getDevicePermissionState(setVideoState, setAudioState);
38459
38537
  const errorBarProps = usePropsFor$1(ErrorBar);
38460
- const adapter = useAdapter();
38461
- const deviceState = adapter.getState().devices;
38538
+ const microphones = useSelector$1(getMicrophones);
38462
38539
  /* @conditional-compile-remove(unsupported-browser) */
38463
- const environmentInfo = adapter.getState().environmentInfo;
38464
- let disableStartCallButton = !microphonePermissionGranted || ((_a = deviceState.microphones) === null || _a === void 0 ? void 0 : _a.length) === 0;
38465
- const role = (_b = adapter.getState().call) === null || _b === void 0 ? void 0 : _b.role;
38540
+ const environmentInfo = useSelector$1(getEnvironmentInfo);
38541
+ let disableStartCallButton = !microphonePermissionGranted || (microphones === null || microphones === void 0 ? void 0 : microphones.length) === 0;
38542
+ const role = useSelector$1(getRole);
38466
38543
  const isCameraOn = useSelector$1(localVideoSelector).isAvailable;
38467
38544
  let filteredLatestErrors = props.latestErrors;
38468
38545
  // TODO: move this logic to the error bar selector once role is plumbed from the headless SDK
@@ -38478,6 +38555,8 @@ const ConfigurationPage = (props) => {
38478
38555
  disableStartCallButton = false;
38479
38556
  }
38480
38557
  /* @conditional-compile-remove(call-readiness) */
38558
+ const cameras = useSelector$1(getCameras);
38559
+ /* @conditional-compile-remove(call-readiness) */
38481
38560
  // Overrides role permissions if CallCompositeOptions deviceChecks are set
38482
38561
  if (deviceChecks) {
38483
38562
  if (['doNotPrompt', 'optional'].includes(deviceChecks.camera) &&
@@ -38485,7 +38564,7 @@ const ConfigurationPage = (props) => {
38485
38564
  disableStartCallButton = false;
38486
38565
  }
38487
38566
  else if (deviceChecks.camera === 'required') {
38488
- disableStartCallButton = !cameraPermissionGranted || ((_c = deviceState.cameras) === null || _c === void 0 ? void 0 : _c.length) === 0;
38567
+ disableStartCallButton = !cameraPermissionGranted || (cameras === null || cameras === void 0 ? void 0 : cameras.length) === 0;
38489
38568
  }
38490
38569
  }
38491
38570
  const locale = useLocale();
@@ -38538,7 +38617,7 @@ const ConfigurationPage = (props) => {
38538
38617
  hostId: modalLayerHostId
38539
38618
  }), [modalLayerHostId]);
38540
38619
  const filteredErrorBarProps = React.useMemo(() => (Object.assign(Object.assign({}, errorBarProps), { activeErrorMessages: filteredLatestErrors })), [errorBarProps, filteredLatestErrors]);
38541
- const containerStyles = React.useMemo(() => { var _a; return configurationContainerStyle(!mobileView, (_a = props.backgroundImage) === null || _a === void 0 ? void 0 : _a.url); }, [mobileView, (_d = props.backgroundImage) === null || _d === void 0 ? void 0 : _d.url]);
38620
+ const containerStyles = React.useMemo(() => { var _a; return configurationContainerStyle(!mobileView, (_a = props.backgroundImage) === null || _a === void 0 ? void 0 : _a.url); }, [mobileView, (_a = props.backgroundImage) === null || _a === void 0 ? void 0 : _a.url]);
38542
38621
  return (React.createElement(react.Stack, { styles: containerStyles },
38543
38622
  React.createElement(react.Stack, { styles: bannerNotificationStyles },
38544
38623
  React.createElement(ConfigurationPageErrorBar
@@ -38591,7 +38670,7 @@ const ConfigurationPage = (props) => {
38591
38670
  React.createElement(react.Stack, { styles: mobileWithPreview ? startCallButtonContainerStyleMobile : startCallButtonContainerStyleDesktop, horizontalAlign: mobileWithPreview ? 'stretch' : 'end' },
38592
38671
  React.createElement(StartCallButton, { className: mobileWithPreview ? startCallButtonStyleMobile : startCallButtonStyleDesktop, onClick: startCall, disabled: disableStartCallButton, hideIcon: true }))))),
38593
38672
  React.createElement(react.Panel, { isOpen: isVideoEffectsPaneOpen, hasCloseButton: false, isBlocking: false, isHiddenOnDismiss: false, styles: panelStyles, focusTrapZoneProps: panelFocusProps, layerProps: panelLayerProps, type: react.PanelType.custom, customWidth: `${VIDEO_EFFECTS_SIDE_PANE_WIDTH_REM}rem` },
38594
- React.createElement(SidePane, { mobileView: props.mobileView, updateSidePaneRenderer: props.updateSidePaneRenderer, maxWidth: `${VIDEO_EFFECTS_SIDE_PANE_WIDTH_REM}rem`, minWidth: `${VIDEO_EFFECTS_SIDE_PANE_WIDTH_REM}rem` })))));
38673
+ React.createElement(SidePane, { ariaLabel: isVideoEffectsPaneOpen ? locale.strings.call.videoEffectsPaneAriaLabel : undefined, mobileView: props.mobileView, updateSidePaneRenderer: props.updateSidePaneRenderer, maxWidth: `${VIDEO_EFFECTS_SIDE_PANE_WIDTH_REM}rem`, minWidth: `${VIDEO_EFFECTS_SIDE_PANE_WIDTH_REM}rem` })))));
38595
38674
  };
38596
38675
  const localPreviewTrampoline = (mobileView, doNotShow) => {
38597
38676
  if (doNotShow) {
@@ -39577,16 +39656,15 @@ const MainScreen = (props) => {
39577
39656
  const { camerasCount, microphonesCount } = useSelector$1(deviceCountSelector);
39578
39657
  const hasCameras = camerasCount > 0;
39579
39658
  const hasMicrophones = microphonesCount > 0;
39659
+ const role = useSelector$1(getRole);
39580
39660
  React.useEffect(() => {
39581
39661
  (() => __awaiter$9(void 0, void 0, void 0, function* () {
39582
- var _a, _b, _c, _d, _e;
39583
- const constrain = getQueryOptions({
39584
- role: (_a = adapter.getState().call) === null || _a === void 0 ? void 0 : _a.role
39585
- });
39662
+ var _a, _b, _c, _d;
39663
+ const constrain = getQueryOptions({ role });
39586
39664
  /* @conditional-compile-remove(call-readiness) */
39587
39665
  {
39588
- constrain.audio = ((_c = (_b = props.options) === null || _b === void 0 ? void 0 : _b.deviceChecks) === null || _c === void 0 ? void 0 : _c.microphone) === 'doNotPrompt' ? false : constrain.audio;
39589
- constrain.video = ((_e = (_d = props.options) === null || _d === void 0 ? void 0 : _d.deviceChecks) === null || _e === void 0 ? void 0 : _e.camera) === 'doNotPrompt' ? false : constrain.video;
39666
+ constrain.audio = ((_b = (_a = props.options) === null || _a === void 0 ? void 0 : _a.deviceChecks) === null || _b === void 0 ? void 0 : _b.microphone) === 'doNotPrompt' ? false : constrain.audio;
39667
+ constrain.video = ((_d = (_c = props.options) === null || _c === void 0 ? void 0 : _c.deviceChecks) === null || _d === void 0 ? void 0 : _d.camera) === 'doNotPrompt' ? false : constrain.video;
39590
39668
  }
39591
39669
  yield adapter.askDevicePermission(constrain);
39592
39670
  adapter.queryCameras();
@@ -39595,6 +39673,7 @@ const MainScreen = (props) => {
39595
39673
  }))();
39596
39674
  }, [
39597
39675
  adapter,
39676
+ role,
39598
39677
  /* @conditional-compile-remove(call-readiness) */
39599
39678
  (_a = props.options) === null || _a === void 0 ? void 0 : _a.deviceChecks,
39600
39679
  // Ensure we re-ask for permissions if the number of devices goes from 0 -> n during a call
@@ -39702,7 +39781,7 @@ const MainScreen = (props) => {
39702
39781
  const callees = useSelector$1(getTargetCallees);
39703
39782
  const locale = useLocale();
39704
39783
  const palette = useTheme().palette;
39705
- const alternateCallerId = adapter.getState().alternateCallerId;
39784
+ const alternateCallerId = useSelector$1(getAlternateCallerId);
39706
39785
  const leavePageStyle = React.useMemo(() => leavingPageStyle(palette), [palette]);
39707
39786
  let pageElement;
39708
39787
  const [pinnedParticipants, setPinnedParticipants] = React.useState([]);
@@ -39767,11 +39846,13 @@ const MainScreen = (props) => {
39767
39846
  }
39768
39847
  useEndedCallConsoleErrors(endedCall);
39769
39848
  /* @conditional-compile-remove(unsupported-browser) */
39849
+ const environmentInfo = useSelector$1(getEnvironmentInfo);
39850
+ /* @conditional-compile-remove(unsupported-browser) */
39770
39851
  switch (page) {
39771
39852
  case 'unsupportedEnvironment':
39772
39853
  pageElement = (React.createElement(React.Fragment, null,
39773
39854
  /* @conditional-compile-remove(unsupported-browser) */
39774
- React.createElement(UnsupportedBrowserPage, { onTroubleshootingClick: (_s = props.options) === null || _s === void 0 ? void 0 : _s.onEnvironmentInfoTroubleshootingClick, environmentInfo: adapter.getState().environmentInfo })));
39855
+ React.createElement(UnsupportedBrowserPage, { onTroubleshootingClick: (_s = props.options) === null || _s === void 0 ? void 0 : _s.onEnvironmentInfoTroubleshootingClick, environmentInfo: environmentInfo })));
39775
39856
  break;
39776
39857
  }
39777
39858
  if (!pageElement) {
@@ -44090,8 +44171,8 @@ const useSelector = (selector, selectorProps, type) => {
44090
44171
  // Return undefined and skip execution when not in that context
44091
44172
  const callingMode = !type || type === 'calling';
44092
44173
  const chatMode = !type || type === 'chat';
44093
- const callProps = useSelector$3(callingMode ? selector : undefined, selectorProps);
44094
- const chatProps = useSelector$2(chatMode ? selector : undefined, selectorProps);
44174
+ const callProps = useSelector$4(callingMode ? selector : undefined, selectorProps);
44175
+ const chatProps = useSelector$3(chatMode ? selector : undefined, selectorProps);
44095
44176
  return callProps !== null && callProps !== void 0 ? callProps : chatProps;
44096
44177
  };
44097
44178
  /**
@@ -44121,8 +44202,8 @@ const useSelector = (selector, selectorProps, type) => {
44121
44202
  const usePropsFor = (component, type) => {
44122
44203
  const callingSelector = type === 'calling' || !type ? getSelector$1(component) : undefined;
44123
44204
  const chatSelector = type === 'chat' || !type ? getSelector(component) : undefined;
44124
- const callProps = useSelector$3(callingSelector);
44125
- const chatProps = useSelector$2(chatSelector);
44205
+ const callProps = useSelector$4(callingSelector);
44206
+ const chatProps = useSelector$3(chatSelector);
44126
44207
  const callingHandlers = useHandlers$3();
44127
44208
  const chatHandlers = useHandlers$2();
44128
44209
  if (chatProps) {
@@ -44306,4 +44387,4 @@ exports.useTeamsCall = useTeamsCall;
44306
44387
  exports.useTeamsCallAdapter = useTeamsCallAdapter;
44307
44388
  exports.useTeamsCallAgent = useTeamsCallAgent;
44308
44389
  exports.useTheme = useTheme;
44309
- //# sourceMappingURL=index-Cs1eMyS2.js.map
44390
+ //# sourceMappingURL=index-Bj4O6YVq.js.map