@azure/communication-react 1.3.3-alpha-202210250024.0 → 1.3.3-alpha-202210270017.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/communication-react.d.ts +3 -0
  2. package/dist/dist-cjs/communication-react/index.js +181 -24
  3. package/dist/dist-cjs/communication-react/index.js.map +1 -1
  4. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  5. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  6. package/dist/dist-esm/calling-component-bindings/src/callControlSelectors.js +6 -3
  7. package/dist/dist-esm/calling-component-bindings/src/callControlSelectors.js.map +1 -1
  8. package/dist/dist-esm/calling-stateful-client/src/StatefulCallClient.d.ts +1 -0
  9. package/dist/dist-esm/calling-stateful-client/src/StatefulCallClient.js.map +1 -1
  10. package/dist/dist-esm/react-components/src/components/MessageThread.d.ts +2 -0
  11. package/dist/dist-esm/react-components/src/components/MessageThread.js +7 -7
  12. package/dist/dist-esm/react-components/src/components/MessageThread.js.map +1 -1
  13. package/dist/dist-esm/react-components/src/components/TroubleshootingGuideErrorBar.d.ts +2 -1
  14. package/dist/dist-esm/react-components/src/components/TroubleshootingGuideErrorBar.js +24 -14
  15. package/dist/dist-esm/react-components/src/components/TroubleshootingGuideErrorBar.js.map +1 -1
  16. package/dist/dist-esm/react-components/src/components/VideoTile.js +1 -1
  17. package/dist/dist-esm/react-components/src/components/VideoTile.js.map +1 -1
  18. package/dist/dist-esm/react-components/src/components/styles/VideoTile.styles.d.ts +1 -1
  19. package/dist/dist-esm/react-components/src/components/styles/VideoTile.styles.js +4 -3
  20. package/dist/dist-esm/react-components/src/components/styles/VideoTile.styles.js.map +1 -1
  21. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js +7 -3
  22. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js.map +1 -1
  23. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ConfigurationpageErrorBar.d.ts +27 -0
  24. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ConfigurationpageErrorBar.js +30 -0
  25. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ConfigurationpageErrorBar.js.map +1 -0
  26. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LobbyTile.js +1 -1
  27. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LobbyTile.js.map +1 -1
  28. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.d.ts +5 -0
  29. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js +25 -2
  30. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js.map +1 -1
  31. package/dist/dist-esm/react-composites/src/composites/common/PeoplePaneContent.js +1 -1
  32. package/dist/dist-esm/react-composites/src/composites/common/PeoplePaneContent.js.map +1 -1
  33. package/dist/dist-esm/react-composites/src/composites/common/SendDtmfDialpad.js +6 -1
  34. package/dist/dist-esm/react-composites/src/composites/common/SendDtmfDialpad.js.map +1 -1
  35. package/dist/dist-esm/react-composites/src/composites/common/SendDtmfDialpad.styles.js +0 -1
  36. package/dist/dist-esm/react-composites/src/composites/common/SendDtmfDialpad.styles.js.map +1 -1
  37. package/package.json +8 -8
@@ -6028,6 +6028,8 @@ export declare interface MessageThreadStyles extends BaseCustomStyles {
6028
6028
  chatItemMessageContainer?: ComponentSlotStyle;
6029
6029
  /** Styles for my chat message container. */
6030
6030
  myChatMessageContainer?: ComponentSlotStyle;
6031
+ /** Styles for my chat message container in case of failure. */
6032
+ failedMyChatMessageContainer?: ComponentSlotStyle;
6031
6033
  /** Styles for chat message container. */
6032
6034
  chatMessageContainer?: ComponentSlotStyle;
6033
6035
  /** Styles for system message container. */
@@ -7072,6 +7074,7 @@ export declare interface StatefulCallClient extends CallClient {
7072
7074
  * @param stream - The LocalVideoStreamState or RemoteVideoStreamState to dispose.
7073
7075
  */
7074
7076
  disposeView(callId: string | undefined, participantId: CommunicationIdentifier | undefined, stream: LocalVideoStreamState | RemoteVideoStreamState): void;
7077
+ /** @conditional-compile-remove(one-to-n-calling) */
7075
7078
  /**
7076
7079
  * The CallAgent is used to handle calls.
7077
7080
  * To create the CallAgent, pass a CommunicationTokenCredential object provided from SDK.
@@ -202,7 +202,7 @@ const _toCommunicationIdentifier = (id) => {
202
202
  // Copyright (c) Microsoft Corporation.
203
203
  // Licensed under the MIT license.
204
204
  // GENERATED FILE. DO NOT EDIT MANUALLY.
205
- var telemetryVersion = '1.3.3-alpha-202210250024.0';
205
+ var telemetryVersion = '1.3.3-alpha-202210270017.0';
206
206
 
207
207
  // Copyright (c) Microsoft Corporation.
208
208
  /**
@@ -525,14 +525,17 @@ const screenShareButtonSelector = reselect__namespace.createSelector([getIsScree
525
525
  */
526
526
  const devicesButtonSelector = reselect__namespace.createSelector([getDeviceManager$1], (deviceManager) => {
527
527
  return {
528
- microphones: deviceManager.microphones,
529
- speakers: deviceManager.speakers,
530
- cameras: deviceManager.cameras,
528
+ microphones: removeBlankNameDevices(deviceManager.microphones),
529
+ speakers: removeBlankNameDevices(deviceManager.speakers),
530
+ cameras: removeBlankNameDevices(deviceManager.cameras),
531
531
  selectedMicrophone: deviceManager.selectedMicrophone,
532
532
  selectedSpeaker: deviceManager.selectedSpeaker,
533
533
  selectedCamera: deviceManager.selectedCamera
534
534
  };
535
535
  });
536
+ function removeBlankNameDevices(devices) {
537
+ return devices.filter((device) => device.name !== '');
538
+ }
536
539
  /* @conditional-compile-remove(PSTN-calls) */
537
540
  /**
538
541
  * Selector for the {@link HoldButton} component.
@@ -3923,7 +3926,7 @@ const DefaultSystemMessage = (props) => {
3923
3926
  return React__default['default'].createElement(React__default['default'].Fragment, null);
3924
3927
  };
3925
3928
  const memoizeAllMessages = memoizeFnAll((_messageKey, message, showMessageDate, showMessageStatus, onRenderAvatar, shouldOverlapAvatarAndMessage, styles, onRenderMessageStatus, defaultStatusRenderer, defaultChatMessageRenderer, strings, _attached, statusToRender, participantCount, readCount, onRenderMessage, onUpdateMessage, onDeleteMessage, onSendMessage) => {
3926
- var _a, _b, _c;
3929
+ var _a, _b, _c, _d, _e, _f, _g;
3927
3930
  const messageProps = {
3928
3931
  message,
3929
3932
  strings,
@@ -3934,10 +3937,10 @@ const memoizeAllMessages = memoizeFnAll((_messageKey, message, showMessageDate,
3934
3937
  };
3935
3938
  switch (message.messageType) {
3936
3939
  case 'chat': {
3937
- const myChatMessageStyle = (styles === null || styles === void 0 ? void 0 : styles.myChatMessageContainer) || message.status === 'failed'
3938
- ? FailedMyChatMessageContainer
3939
- : defaultMyChatMessageContainer;
3940
- const chatMessageStyle = (styles === null || styles === void 0 ? void 0 : styles.chatMessageContainer) || defaultChatMessageContainer;
3940
+ const myChatMessageStyle = message.status === 'failed'
3941
+ ? (_b = (_a = styles === null || styles === void 0 ? void 0 : styles.failedMyChatMessageContainer) !== null && _a !== void 0 ? _a : styles === null || styles === void 0 ? void 0 : styles.myChatMessageContainer) !== null && _b !== void 0 ? _b : FailedMyChatMessageContainer
3942
+ : (_c = styles === null || styles === void 0 ? void 0 : styles.myChatMessageContainer) !== null && _c !== void 0 ? _c : defaultMyChatMessageContainer;
3943
+ const chatMessageStyle = (_d = styles === null || styles === void 0 ? void 0 : styles.chatMessageContainer) !== null && _d !== void 0 ? _d : defaultChatMessageContainer;
3941
3944
  messageProps.messageContainerStyle = message.mine ? myChatMessageStyle : chatMessageStyle;
3942
3945
  const chatMessageComponent = onRenderMessage === undefined
3943
3946
  ? defaultChatMessageRenderer(messageProps)
@@ -3954,14 +3957,14 @@ const memoizeAllMessages = memoizeFnAll((_messageKey, message, showMessageDate,
3954
3957
  return {
3955
3958
  gutter: {
3956
3959
  styles: chatGutterStyles,
3957
- content: message.mine ? ('') : onRenderAvatar ? (onRenderAvatar((_a = message.senderId) !== null && _a !== void 0 ? _a : '', personaOptions)) : (React__default['default'].createElement(react.Persona, Object.assign({}, personaOptions)))
3960
+ content: message.mine ? ('') : onRenderAvatar ? (onRenderAvatar((_e = message.senderId) !== null && _e !== void 0 ? _e : '', personaOptions)) : (React__default['default'].createElement(react.Persona, Object.assign({}, personaOptions)))
3958
3961
  },
3959
3962
  contentPosition: message.mine ? 'end' : 'start',
3960
3963
  message: {
3961
3964
  styles: chatItemMessageStyle,
3962
3965
  content: (React__default['default'].createElement(reactNorthstar.Flex, { hAlign: message.mine ? 'end' : undefined, vAlign: "end" },
3963
3966
  chatMessageComponent,
3964
- React__default['default'].createElement("div", { className: react.mergeStyles(messageStatusContainerStyle((_b = message.mine) !== null && _b !== void 0 ? _b : false), (styles === null || styles === void 0 ? void 0 : styles.messageStatusContainer) ? styles.messageStatusContainer((_c = message.mine) !== null && _c !== void 0 ? _c : false) : '') }, showMessageStatus && statusToRender ? (onRenderMessageStatus ? (onRenderMessageStatus({ status: statusToRender })) : (defaultStatusRenderer(message, statusToRender, participantCount !== null && participantCount !== void 0 ? participantCount : 0, readCount !== null && readCount !== void 0 ? readCount : 0))) : (React__default['default'].createElement("div", { className: react.mergeStyles(noMessageStatusStyle) })))))
3967
+ React__default['default'].createElement("div", { className: react.mergeStyles(messageStatusContainerStyle((_f = message.mine) !== null && _f !== void 0 ? _f : false), (styles === null || styles === void 0 ? void 0 : styles.messageStatusContainer) ? styles.messageStatusContainer((_g = message.mine) !== null && _g !== void 0 ? _g : false) : '') }, showMessageStatus && statusToRender ? (onRenderMessageStatus ? (onRenderMessageStatus({ status: statusToRender })) : (defaultStatusRenderer(message, statusToRender, participantCount !== null && participantCount !== void 0 ? participantCount : 0, readCount !== null && readCount !== void 0 ? readCount : 0))) : (React__default['default'].createElement("div", { className: react.mergeStyles(noMessageStatusStyle) })))))
3965
3968
  },
3966
3969
  attached: message.attached,
3967
3970
  key: _messageKey
@@ -4990,14 +4993,15 @@ const displayNameStyle = {
4990
4993
  /**
4991
4994
  * @private
4992
4995
  */
4993
- const iconContainerStyle = (theme) => ({
4996
+ const iconContainerStyle = {
4994
4997
  margin: 'auto',
4995
4998
  alignItems: 'center',
4996
4999
  '& svg': {
4997
5000
  display: 'block',
4998
- color: theme.palette.neutralPrimary
5001
+ // Similar to text color, icon color will be inherited from parent container
5002
+ color: 'inherit'
4999
5003
  }
5000
- });
5004
+ };
5001
5005
  /**
5002
5006
  * @private
5003
5007
  */
@@ -5094,7 +5098,7 @@ const VideoTile = (props) => {
5094
5098
  React__default['default'].createElement(react.Stack, { horizontal: true, className: tileInfoStyle },
5095
5099
  canShowLabel && (React__default['default'].createElement(react.Text, { className: react.mergeStyles(displayNameStyle), title: displayName, style: { color: participantStateString ? theme.palette.neutralSecondary : 'inherit' } }, displayName)),
5096
5100
  participantStateString && (React__default['default'].createElement(react.Text, { className: react.mergeStyles(participantStateStringStyles(theme)) }, bracketedParticipantString(participantStateString, !!canShowLabel))),
5097
- showMuteIndicator && isMuted && (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(iconContainerStyle(theme)) },
5101
+ showMuteIndicator && isMuted && (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(iconContainerStyle) },
5098
5102
  React__default['default'].createElement(react.Icon, { iconName: "VideoTileMicOff" })))))),
5099
5103
  children && (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(overlayContainerStyles, styles === null || styles === void 0 ? void 0 : styles.overlayContainer) }, children)))));
5100
5104
  };
@@ -8345,6 +8349,102 @@ const UnsupportedBrowser = (props) => {
8345
8349
  return React__default['default'].createElement(UnsupportedBrowserContainer, Object.assign({}, props, { strings: strings }));
8346
8350
  };
8347
8351
 
8352
+ // Copyright (c) Microsoft Corporation.
8353
+ /**
8354
+ * @private
8355
+ */
8356
+ const dismissButtonStyle = (theme) => ({
8357
+ root: {
8358
+ padding: '0.375rem 1.25rem',
8359
+ width: '3.75rem',
8360
+ height: '2rem',
8361
+ background: theme.palette.white,
8362
+ border: `1px solid ${theme.palette.neutralQuaternaryAlt}`,
8363
+ borderRadius: '0.063rem',
8364
+ color: theme.palette.black
8365
+ }
8366
+ });
8367
+ /**
8368
+ * @private
8369
+ */
8370
+ const messageBarStyle = (theme, errorType) => ({
8371
+ innerText: {
8372
+ paddingTop: errorType === react.MessageBarType.warning ? '0.15rem' : '0.1rem',
8373
+ lineHeight: 'none',
8374
+ color: theme.palette.black,
8375
+ alignSelf: 'center',
8376
+ whiteSpace: 'normal'
8377
+ },
8378
+ icon: {
8379
+ marginTop: '0.375rem',
8380
+ marginBottom: '0.375rem'
8381
+ },
8382
+ content: {
8383
+ lineHeight: 'inherit'
8384
+ },
8385
+ dismissal: {
8386
+ height: 0,
8387
+ paddingTop: '0.8rem'
8388
+ }
8389
+ });
8390
+ /**
8391
+ * @private
8392
+ */
8393
+ const linkStyle = (theme) => ({
8394
+ root: {
8395
+ span: {
8396
+ color: theme.palette.black
8397
+ }
8398
+ }
8399
+ });
8400
+
8401
+ // Copyright (c) Microsoft Corporation.
8402
+ /**
8403
+ * @internal
8404
+ * A component to show device Permission/network connection related errors, contains link that leads to further trouble shooting guide
8405
+ */
8406
+ const _TroubleshootingGuideErrorBar = (props) => {
8407
+ var _a;
8408
+ const theme = react.useTheme();
8409
+ // error bar strings
8410
+ const localeStrings = useLocale$1().strings.errorBar;
8411
+ const strings = (_a = props.strings) !== null && _a !== void 0 ? _a : localeStrings;
8412
+ const [dismissedErrors, setDismissedErrors] = React.useState([]);
8413
+ const { onPermissionsTroubleshootingClick, onNetworkingTroubleshootingClick, permissionsState = {
8414
+ camera: 'denied',
8415
+ microphone: 'denied'
8416
+ }, troubleshootingGuideStrings } = props;
8417
+ // dropDismissalsForInactiveErrors only returns a new object if `dismissedErrors` actually changes.
8418
+ // Without this behaviour, this `useEffect` block would cause a render loop.
8419
+ React.useEffect(() => setDismissedErrors(dropDismissalsForInactiveErrors(props.activeErrorMessages, dismissedErrors)), [props.activeErrorMessages, dismissedErrors]);
8420
+ const toShow = errorsToShow(props.activeErrorMessages, dismissedErrors);
8421
+ return (React__default['default'].createElement(react.Stack, { "data-ui-id": "error-bar-stack" }, toShow.map((error) => {
8422
+ const devicePermissionErrorBar = (React__default['default'].createElement("div", null,
8423
+ strings[error.type],
8424
+ ' ',
8425
+ onPermissionsTroubleshootingClick && (React__default['default'].createElement(react.Link, { styles: linkStyle(theme), onClick: () => {
8426
+ onPermissionsTroubleshootingClick(permissionsState);
8427
+ }, underline: true },
8428
+ React__default['default'].createElement("span", null, troubleshootingGuideStrings.devicePermissionLinkText)))));
8429
+ const networkErrorBar = (React__default['default'].createElement("div", null,
8430
+ strings[error.type],
8431
+ ' ',
8432
+ onNetworkingTroubleshootingClick && (React__default['default'].createElement(react.Link, { styles: linkStyle(theme), onClick: onNetworkingTroubleshootingClick, underline: true },
8433
+ React__default['default'].createElement("span", null, troubleshootingGuideStrings.networkTroubleshootingLinkText)))));
8434
+ return (React__default['default'].createElement(react.MessageBar, Object.assign({}, props, { styles: messageBarStyle(theme, messageBarType(error.type)), key: error.type, messageBarType: messageBarType(error.type), messageBarIconProps: messageBarIconProps(error.type), actions: React__default['default'].createElement(react.MessageBarButton, { text: troubleshootingGuideStrings.dismissButtonText, styles: dismissButtonStyle(theme), onClick: () => {
8435
+ setDismissedErrors(dismissError(dismissedErrors, error));
8436
+ }, ariaLabel: strings.dismissButtonAriaLabel }), isMultiline: false }), showErrorBar(error.type, devicePermissionErrorBar, networkErrorBar)));
8437
+ })));
8438
+ };
8439
+ const showErrorBar = (errorType, devicePermissionErrorBar, networkErrorBar) => {
8440
+ if (errorType === 'callNetworkQualityLow') {
8441
+ return networkErrorBar;
8442
+ }
8443
+ else {
8444
+ return devicePermissionErrorBar;
8445
+ }
8446
+ };
8447
+
8348
8448
  // Copyright (c) Microsoft Corporation.
8349
8449
  /**
8350
8450
  * A dropdown to trigger device permission prompt
@@ -15489,7 +15589,6 @@ const themedDialpadStyle$1 = (isMobile, theme) => ({
15489
15589
  backgroundColor: theme.palette.white,
15490
15590
  fontSize: theme.fonts.large.fontSize,
15491
15591
  padding: '0 0.5rem ',
15492
- direction: 'rtl',
15493
15592
  textAlign: 'center',
15494
15593
  ':active': {
15495
15594
  padding: '0 0.5rem'
@@ -15554,7 +15653,12 @@ const SendDtmfDialpad = (props) => {
15554
15653
  };
15555
15654
  const [textFieldValue, setTextFieldValue] = React.useState();
15556
15655
  const onChange = (input) => {
15557
- setTextFieldValue(input);
15656
+ if (input.length > 25) {
15657
+ setTextFieldValue(input.slice(1));
15658
+ }
15659
+ else {
15660
+ setTextFieldValue(input);
15661
+ }
15558
15662
  };
15559
15663
  const dialpadModalStyle = React.useMemo(() => themeddialpadModalStyle$1(theme), [theme]);
15560
15664
  const dialpadStyle = React.useMemo(() => themedDialpadStyle$1(isMobile, theme), [theme, isMobile]);
@@ -16467,7 +16571,7 @@ const PeoplePaneContent = (props) => {
16467
16571
  const setDrawerMenuItemsForParticipant = React.useMemo(() => {
16468
16572
  return (participant) => {
16469
16573
  if (participant) {
16470
- let contextualMenuItems = createDefaultContextualMenuItems(participant, strings, removeButtonAllowed ? participantListDefaultProps.onRemoveParticipant : undefined, participantListDefaultProps.myUserId);
16574
+ let contextualMenuItems = createDefaultContextualMenuItems(participant, strings, removeButtonAllowed && participant.isRemovable ? participantListDefaultProps.onRemoveParticipant : undefined, participantListDefaultProps.myUserId);
16471
16575
  if (onFetchParticipantMenuItems) {
16472
16576
  contextualMenuItems = onFetchParticipantMenuItems(participant.userId, participantListDefaultProps.myUserId, contextualMenuItems);
16473
16577
  }
@@ -17620,13 +17724,43 @@ const startCallButtonStyleMobile = react.mergeStyles({
17620
17724
  maxWidth: 'unset'
17621
17725
  });
17622
17726
 
17727
+ // Copyright (c) Microsoft Corporation.
17728
+ /**
17729
+ * @private
17730
+ */
17731
+ const ConfigurationpageErrorBar = (props) => {
17732
+ const { errorBarProps,
17733
+ /* @conditional-compile-remove(call-readiness) */
17734
+ showTroubleShootingErrorBar = false,
17735
+ /* @conditional-compile-remove(call-readiness) */
17736
+ onPermissionsTroubleshootingClick,
17737
+ /* @conditional-compile-remove(call-readiness) */
17738
+ onNetworkingTroubleShootingClick,
17739
+ /* @conditional-compile-remove(call-readiness) */
17740
+ permissionsState } = props;
17741
+ /* @conditional-compile-remove(call-readiness) */
17742
+ const permissionTroubleshootingGuideStrings = {
17743
+ devicePermissionLinkText: 'Troubleshooting Camera and Microphone Permissions',
17744
+ networkTroubleshootingLinkText: 'Troubleshooting Network Connection',
17745
+ dismissButtonText: 'OK'
17746
+ };
17747
+ /* @conditional-compile-remove(call-readiness) */
17748
+ if (showTroubleShootingErrorBar) {
17749
+ return (React__default['default'].createElement(_TroubleshootingGuideErrorBar, Object.assign({ troubleshootingGuideStrings: permissionTroubleshootingGuideStrings, onPermissionsTroubleshootingClick: onPermissionsTroubleshootingClick, onNetworkingTroubleshootingClick: onNetworkingTroubleShootingClick, permissionsState: permissionsState }, errorBarProps)));
17750
+ }
17751
+ return React__default['default'].createElement(ErrorBar, Object.assign({}, errorBarProps));
17752
+ };
17753
+
17623
17754
  // Copyright (c) Microsoft Corporation.
17624
17755
  /**
17625
17756
  * @private
17626
17757
  */
17627
17758
  const ConfigurationPage = (props) => {
17628
17759
  var _a, _b;
17629
- const { startCallHandler, mobileView, /* @conditional-compile-remove(call-readiness) */ devicePermissions } = props;
17760
+ const { startCallHandler, mobileView,
17761
+ /* @conditional-compile-remove(call-readiness) */ devicePermissions,
17762
+ /* @conditional-compile-remove(call-readiness) */ onPermissionsTroubleshootingClick,
17763
+ /* @conditional-compile-remove(call-readiness) */ onNetworkingTroubleShootingClick } = props;
17630
17764
  const options = useAdaptedSelector(getSelector$1(DevicesButton));
17631
17765
  const localDeviceSettingsHandlers = useHandlers();
17632
17766
  const { video: cameraPermissionGranted, audio: microphonePermissionGranted } = useSelector$1(devicePermissionSelector);
@@ -17664,9 +17798,28 @@ const ConfigurationPage = (props) => {
17664
17798
  let mobileWithPreview = mobileView;
17665
17799
  /* @conditional-compile-remove(rooms) */
17666
17800
  mobileWithPreview = mobileWithPreview && rolePermissions.cameraButton;
17801
+ /* @conditional-compile-remove(call-readiness) */
17802
+ const permissionsState = {
17803
+ camera: cameraPermissionGranted ? 'granted' : 'denied',
17804
+ microphone: microphonePermissionGranted ? 'granted' : 'denied'
17805
+ };
17806
+ /* @conditional-compile-remove(call-readiness) */
17807
+ const networkErrors = errorBarProps.activeErrorMessages.filter((message) => message.type === 'callNetworkQualityLow');
17667
17808
  return (React__default['default'].createElement(react.Stack, { className: mobileView ? configurationContainerStyleMobile : configurationContainerStyleDesktop },
17668
17809
  React__default['default'].createElement(react.Stack, { styles: bannerNotificationStyles },
17669
- React__default['default'].createElement(ErrorBar, Object.assign({}, errorBarProps))),
17810
+ React__default['default'].createElement(ConfigurationpageErrorBar
17811
+ /* @conditional-compile-remove(call-readiness) */
17812
+ // show trouble shooting error bar when encountering network error/ permission error
17813
+ , {
17814
+ /* @conditional-compile-remove(call-readiness) */
17815
+ // show trouble shooting error bar when encountering network error/ permission error
17816
+ showTroubleShootingErrorBar: !cameraPermissionGranted || !microphonePermissionGranted || networkErrors.length > 0,
17817
+ /* @conditional-compile-remove(call-readiness) */
17818
+ permissionsState: permissionsState,
17819
+ /* @conditional-compile-remove(call-readiness) */
17820
+ onNetworkingTroubleShootingClick: onNetworkingTroubleShootingClick,
17821
+ /* @conditional-compile-remove(call-readiness) */
17822
+ onPermissionsTroubleshootingClick: onPermissionsTroubleshootingClick, errorBarProps: errorBarProps })),
17670
17823
  React__default['default'].createElement(react.Stack, { grow: true, horizontal: !mobileWithPreview, horizontalAlign: mobileWithPreview ? 'stretch' : 'center', verticalAlign: "center", tokens: mobileWithPreview ? configurationStackTokensMobile : configurationStackTokensDesktop },
17671
17824
  mobileWithPreview && (React__default['default'].createElement(react.Stack.Item, null,
17672
17825
  title,
@@ -17785,7 +17938,7 @@ const LobbyTile = (props) => {
17785
17938
  const handlers = useHandlers();
17786
17939
  return (React__default['default'].createElement(ExpandedLocalVideoTile, Object.assign({ localParticipantVideoStream: props.localParticipantVideoStream, overlayContent: props.overlayProps ? (React__default['default'].createElement(react.Stack, { verticalFill: true, horizontalAlign: "center", verticalAlign: "center", className: react.mergeStyles(overlayContainerStyle), "aria-atomic": true },
17787
17940
  React__default['default'].createElement(react.Stack.Item, { className: react.mergeStyles(titleStyle(palette, isVideoReady)) }, props.overlayProps.overlayIcon),
17788
- React__default['default'].createElement(react.Text, { className: react.mergeStyles(titleStyle(palette, isVideoReady)), "aria-live": "assertive" }, props.overlayProps.title),
17941
+ React__default['default'].createElement(react.Text, { className: react.mergeStyles(titleStyle(palette, isVideoReady)), "aria-live": "assertive", "data-ui-id": "lobbyScreenTitle" }, props.overlayProps.title),
17789
17942
  props.overlayProps.moreDetails && (React__default['default'].createElement(react.Text, { className: react.mergeStyles(moreDetailsStyle(palette, isVideoReady)), "aria-live": "assertive" }, props.overlayProps.moreDetails)))) : undefined }, handlers)));
17790
17943
  };
17791
17944
 
@@ -18077,7 +18230,7 @@ var __awaiter$5 = (window && window.__awaiter) || function (thisArg, _arguments,
18077
18230
  });
18078
18231
  };
18079
18232
  const MainScreen = (props) => {
18080
- var _a, _b;
18233
+ var _a, _b, _c, _d;
18081
18234
  const { callInvitationUrl, onRenderAvatar, onFetchAvatarPersonaData, onFetchParticipantMenuItems } = props;
18082
18235
  const page = useSelector$1(getPage);
18083
18236
  const adapter = useAdapter();
@@ -18098,7 +18251,11 @@ const MainScreen = (props) => {
18098
18251
  adapter.joinCall();
18099
18252
  },
18100
18253
  /* @conditional-compile-remove(call-readiness) */
18101
- devicePermissions: (_a = props.options) === null || _a === void 0 ? void 0 : _a.devicePermissions }));
18254
+ devicePermissions: (_a = props.options) === null || _a === void 0 ? void 0 : _a.devicePermissions,
18255
+ /* @conditional-compile-remove(call-readiness) */
18256
+ onPermissionsTroubleshootingClick: (_b = props.options) === null || _b === void 0 ? void 0 : _b.onPermissionsTroubleshootingClick,
18257
+ /* @conditional-compile-remove(call-readiness) */
18258
+ onNetworkingTroubleShootingClick: (_c = props.options) === null || _c === void 0 ? void 0 : _c.onNetworkingTroubleShootingClick }));
18102
18259
  break;
18103
18260
  case 'accessDeniedTeamsMeeting':
18104
18261
  pageElement = (React__default['default'].createElement(NoticePage, { iconName: "NoticePageAccessDeniedTeamsMeeting", title: locale.strings.call.failedToJoinTeamsMeetingReasonAccessDeniedTitle, moreDetails: locale.strings.call.failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails, dataUiId: 'access-denied-teams-meeting-page' }));
@@ -18130,7 +18287,7 @@ const MainScreen = (props) => {
18130
18287
  case unsupportedEnvironmentPageTrampoline():
18131
18288
  pageElement = (React__default['default'].createElement(React__default['default'].Fragment, null,
18132
18289
  /* @conditional-compile-remove(unsupported-browser) */
18133
- React__default['default'].createElement(UnsupportedBrowserPage, { onTroubleshootingClick: (_b = props.options) === null || _b === void 0 ? void 0 : _b.onEnvironmentInfoTroubleshootingClick })));
18290
+ React__default['default'].createElement(UnsupportedBrowserPage, { onTroubleshootingClick: (_d = props.options) === null || _d === void 0 ? void 0 : _d.onEnvironmentInfoTroubleshootingClick })));
18134
18291
  }
18135
18292
  if (!pageElement) {
18136
18293
  throw new Error('Invalid call composite page');