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

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 (30) hide show
  1. package/dist/communication-react.d.ts +68 -0
  2. package/dist/dist-cjs/communication-react/index.js +141 -44
  3. package/dist/dist-cjs/communication-react/index.js.map +1 -1
  4. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  5. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  6. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.d.ts +34 -0
  7. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js +8 -4
  8. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js.map +1 -1
  9. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalDeviceSettings.js +2 -2
  10. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalDeviceSettings.js.map +1 -1
  11. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/StartCallButton.d.ts +1 -0
  12. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/StartCallButton.js +1 -1
  13. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/StartCallButton.js.map +1 -1
  14. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.d.ts +8 -0
  15. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js +30 -11
  16. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js.map +1 -1
  17. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.d.ts +15 -7
  18. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.js +71 -18
  19. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.js.map +1 -1
  20. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/LocalDeviceSettings.styles.d.ts +1 -1
  21. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/LocalDeviceSettings.styles.js +13 -10
  22. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/LocalDeviceSettings.styles.js.map +1 -1
  23. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/LocalPreview.styles.js +2 -1
  24. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/LocalPreview.styles.js.map +1 -1
  25. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.d.ts +34 -0
  26. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js +15 -3
  27. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js.map +1 -1
  28. package/dist/dist-esm/react-composites/src/composites/common/VideoEffectsPane.js +1 -1
  29. package/dist/dist-esm/react-composites/src/composites/common/VideoEffectsPane.js.map +1 -1
  30. package/package.json +1 -1
@@ -1537,6 +1537,40 @@ export declare type CallCompositeOptions = {
1537
1537
  */
1538
1538
  layout?: VideoGalleryLayout;
1539
1539
  };
1540
+ /**
1541
+ * Logo displayed on the configuration page.
1542
+ */
1543
+ logo?: {
1544
+ /**
1545
+ * URL for the logo image.
1546
+ *
1547
+ * @remarks
1548
+ * Recommended size is 80x80 pixels.
1549
+ */
1550
+ url: string;
1551
+ /**
1552
+ * Alt text for the logo image.
1553
+ */
1554
+ alt?: string;
1555
+ /**
1556
+ * The logo can be displayed as a circle or a square.
1557
+ *
1558
+ * @defaultValue 'circle'
1559
+ */
1560
+ shape?: 'circle' | 'square';
1561
+ };
1562
+ /**
1563
+ * Background image displayed on the configuration page.
1564
+ */
1565
+ backgroundImage?: {
1566
+ /**
1567
+ * URL for the background image.
1568
+ *
1569
+ * @remarks
1570
+ * Background image should be larger than 576x567 pixels and smaller than 2048x2048 pixels pixels.
1571
+ */
1572
+ url: string;
1573
+ };
1540
1574
  };
1541
1575
 
1542
1576
  /**
@@ -3148,6 +3182,40 @@ export declare type CallWithChatCompositeOptions = {
3148
3182
  */
3149
3183
  layout?: VideoGalleryLayout;
3150
3184
  };
3185
+ /**
3186
+ * Logo displayed on the configuration page.
3187
+ */
3188
+ logo?: {
3189
+ /**
3190
+ * URL for the logo image.
3191
+ *
3192
+ * @remarks
3193
+ * Recommended size is 80x80 pixels.
3194
+ */
3195
+ url: string;
3196
+ /**
3197
+ * Alt text for the logo image.
3198
+ */
3199
+ alt?: string;
3200
+ /**
3201
+ * The logo can be displayed as a circle or a square.
3202
+ *
3203
+ * @defaultValue 'circle'
3204
+ */
3205
+ shape?: 'circle' | 'square';
3206
+ };
3207
+ /**
3208
+ * Background image displayed on the configuration page.
3209
+ */
3210
+ backgroundImage?: {
3211
+ /**
3212
+ * URL for the background image.
3213
+ *
3214
+ * @remarks
3215
+ * Background image should be larger than 576x567 pixels and smaller than 2048x2048 pixels pixels.
3216
+ */
3217
+ url: string;
3218
+ };
3151
3219
  };
3152
3220
 
3153
3221
  /**
@@ -177,7 +177,7 @@ const _isValidIdentifier = (identifier) => {
177
177
  // Copyright (c) Microsoft Corporation.
178
178
  // Licensed under the MIT License.
179
179
  // GENERATED FILE. DO NOT EDIT MANUALLY.
180
- var telemetryVersion = '1.9.0-alpha-202310310013';
180
+ var telemetryVersion = '1.9.0-alpha-202311020014';
181
181
 
182
182
  // Copyright (c) Microsoft Corporation.
183
183
  /**
@@ -26548,7 +26548,7 @@ const VideoEffectsPaneTrampoline = (onDismissError, activeVideoEffectError, sele
26548
26548
  /* @conditional-compile-remove(video-background-effects) */
26549
26549
  const locale = useLocale();
26550
26550
  /* @conditional-compile-remove(video-background-effects) */
26551
- return (React__default["default"].createElement(react.Stack, { className: react.mergeStyles({ paddingLeft: '0.5rem' }) },
26551
+ return (React__default["default"].createElement(react.Stack, { tokens: { childrenGap: '0.75rem' }, className: react.mergeStyles({ paddingLeft: '0.5rem' }) },
26552
26552
  activeVideoEffectError && isCameraOn && (React__default["default"].createElement(react.MessageBar, { messageBarType: react.MessageBarType.error, onDismiss: () => onDismissError(activeVideoEffectError) }, locale.strings.call.unableToStartVideoEffect)),
26553
26553
  showWarning && (React__default["default"].createElement(react.MessageBar, { messageBarType: react.MessageBarType.warning }, locale.strings.call.cameraOffBackgroundEffectWarningText)),
26554
26554
  React__default["default"].createElement(_VideoBackgroundEffectsPicker, { label: locale.strings.call.videoEffectsPaneBackgroundSelectionTitle, styles: backgroundPickerStyles, options: selectableVideoEffects !== null && selectableVideoEffects !== void 0 ? selectableVideoEffects : [], onChange: onEffectChange, selectedEffectKey: selectedEffect })));
@@ -27786,27 +27786,34 @@ const isNetworkHealthy = (value) => {
27786
27786
  };
27787
27787
 
27788
27788
  // Copyright (c) Microsoft Corporation.
27789
+ const DROPDOWN_HEIGHT_REM = 2.25;
27789
27790
  /**
27790
27791
  * @private
27791
27792
  */
27792
27793
  const mainStackTokens = {
27793
- childrenGap: '1rem'
27794
+ childrenGap: '0.5rem'
27795
+ };
27796
+ /**
27797
+ * @private
27798
+ */
27799
+ const soundStackTokens = {
27800
+ childrenGap: '0.5rem'
27794
27801
  };
27795
27802
  /**
27796
27803
  * @private
27797
27804
  */
27798
27805
  const dropDownStyles = (theme) => ({
27799
27806
  caretDownWrapper: {
27800
- height: '2.5rem',
27801
- lineHeight: '2.5rem'
27807
+ height: `${DROPDOWN_HEIGHT_REM}rem`,
27808
+ lineHeight: `${DROPDOWN_HEIGHT_REM}rem`
27802
27809
  },
27803
27810
  dropdownItem: {
27804
27811
  fontSize: '0.875rem',
27805
- height: '2.5rem',
27812
+ height: `${DROPDOWN_HEIGHT_REM}rem`,
27806
27813
  background: theme.palette.white
27807
27814
  },
27808
27815
  dropdown: {
27809
- height: '2.5rem',
27816
+ height: `${DROPDOWN_HEIGHT_REM}rem`,
27810
27817
  width: '100%',
27811
27818
  svg: {
27812
27819
  verticalAlign: 'top'
@@ -27814,14 +27821,16 @@ const dropDownStyles = (theme) => ({
27814
27821
  },
27815
27822
  title: {
27816
27823
  fontSize: '0.875rem',
27817
- height: '2.5rem',
27818
- lineHeight: '2.3125rem',
27824
+ height: `${DROPDOWN_HEIGHT_REM}rem`,
27825
+ lineHeight: '2rem',
27819
27826
  borderRadius: '0.25rem',
27820
27827
  border: `1px solid ${theme.palette.neutralQuaternaryAlt}`
27821
27828
  },
27822
27829
  label: {
27823
27830
  fontWeight: 600,
27824
- fontSize: '0.875rem'
27831
+ fontSize: '0.875rem',
27832
+ // Add z-index to ensure labels are rendered above the configuration section background
27833
+ zIndex: 1
27825
27834
  },
27826
27835
  errorMessage: {
27827
27836
  fontSize: '0.875rem'
@@ -27883,6 +27892,12 @@ const ConfigurationPageMicDropdown = (props) => {
27883
27892
  };
27884
27893
 
27885
27894
  // Copyright (c) Microsoft Corporation.
27895
+ /** @private */
27896
+ const CONFIGURATION_PAGE_SECTION_MIN_WIDTH_REM = 11;
27897
+ /** @private */
27898
+ const CONFIGURATION_PAGE_SECTION_MAX_WIDTH_REM = 20.625;
27899
+ /** @private */
27900
+ const CONFIGURATION_PAGE_SECTION_HEIGHT_REM = 13.625;
27886
27901
  /**
27887
27902
  * @private
27888
27903
  */
@@ -27895,28 +27910,60 @@ const configurationStackTokensDesktop = {
27895
27910
  const configurationStackTokensMobile = {
27896
27911
  childrenGap: '1.5rem'
27897
27912
  };
27898
- const configurationContainerStyle = {
27899
- height: '100%',
27900
- width: '100%',
27901
- padding: '2rem 1rem 2rem 1rem'
27902
- };
27903
- /**
27904
- * @private
27905
- */
27906
- const configurationContainerStyleDesktop = react.mergeStyles(Object.assign(Object.assign({}, configurationContainerStyle), { minWidth: '25rem', minHeight: '22rem' // max height of SelectionContainer + padding * 2 = 21 + 0.5 * 2
27907
- }));
27913
+ /** @private */
27914
+ const configurationContainerStyle = (desktop, backgroundImageUrl) => ({
27915
+ root: {
27916
+ height: '100%',
27917
+ width: '100%',
27918
+ padding: '2rem 1rem 2rem 1rem',
27919
+ minWidth: desktop
27920
+ ? '25rem' // sum of min-width from children + ChildrenGap * (nb of children - 1) + padding * 2 = (11 + 11) + (2 * 1) + 0.5 * 2
27921
+ : '16rem',
27922
+ minHeight: desktop
27923
+ ? '22rem' // max height of SelectionContainer + padding * 2 = 21 + 0.5 * 2
27924
+ : '13rem',
27925
+ '::before': !backgroundImageUrl
27926
+ ? undefined
27927
+ : Object.assign({ content: '""', position: 'absolute', top: 0, left: 0, zIndex: 0, width: '100%', height: '100%', backgroundImage: `url(${backgroundImageUrl})`, backgroundSize: 'cover', backgroundPosition: 'center' }, react.AnimationStyles.fadeIn500)
27928
+ }
27929
+ });
27908
27930
  /**
27909
27931
  * @private
27910
27932
  */
27911
- const configurationContainerStyleMobile = react.mergeStyles(Object.assign(Object.assign({}, configurationContainerStyle), { minWidth: '16rem', minHeight: '13rem' }));
27933
+ const configurationSectionStyle = {
27934
+ root: {
27935
+ width: '100%',
27936
+ minWidth: `${CONFIGURATION_PAGE_SECTION_MIN_WIDTH_REM}rem`,
27937
+ maxWidth: `${CONFIGURATION_PAGE_SECTION_MAX_WIDTH_REM}rem`
27938
+ }
27939
+ };
27912
27940
  /**
27913
27941
  * @private
27914
27942
  */
27915
- const selectionContainerStyle = react.mergeStyles({
27943
+ const selectionContainerStyle = (theme) => react.mergeStyles({
27916
27944
  width: '100%',
27917
- minWidth: '11rem',
27918
- maxWidth: '18.75rem',
27919
- padding: '0.5rem'
27945
+ height: `${CONFIGURATION_PAGE_SECTION_HEIGHT_REM}rem`,
27946
+ padding: '1rem',
27947
+ borderRadius: theme.effects.roundedCorner6,
27948
+ border: `0.0625rem solid ${theme.palette.neutralLight}`,
27949
+ boxShadow: theme.effects.elevation4,
27950
+ // Style the background of the container to have partial transparency.
27951
+ // Using `before:` pseudo-element to avoid having to wrap the content in an extra div.
27952
+ // Ideally rgba would be used but we cannot garauntee the format of theme.palette.white
27953
+ // to parse it correctly.
27954
+ position: 'relative',
27955
+ ':before': {
27956
+ content: '""',
27957
+ position: 'absolute',
27958
+ top: 0,
27959
+ bottom: 0,
27960
+ left: 0,
27961
+ right: 0,
27962
+ zIndex: 0,
27963
+ background: theme.palette.white,
27964
+ opacity: 0.9,
27965
+ borderRadius: theme.effects.roundedCorner4
27966
+ }
27920
27967
  });
27921
27968
  /**
27922
27969
  * @private
@@ -27986,7 +28033,9 @@ const startCallButtonStyleMobile = react.mergeStyles({
27986
28033
  * @private
27987
28034
  */
27988
28035
  const startCallButtonStyleDesktop = react.mergeStyles({
27989
- borderRadius: '0.25rem'
28036
+ borderRadius: '0.25rem',
28037
+ width: 'auto',
28038
+ height: '2.25rem'
27990
28039
  });
27991
28040
  /** @private */
27992
28041
  const cameraAndVideoEffectsContainerStyleDesktop = {
@@ -28029,7 +28078,8 @@ const effectsButtonStyles = (theme) => {
28029
28078
  };
28030
28079
  /** @private */
28031
28080
  const fillWidth = react.mergeStyles({
28032
- width: '100%'
28081
+ width: '100%',
28082
+ position: 'relative'
28033
28083
  });
28034
28084
  /** @private */
28035
28085
  const panelStyles = {
@@ -28052,6 +28102,18 @@ const panelStyles = {
28052
28102
  const panelFocusProps = {
28053
28103
  forceFocusInsideTrap: false
28054
28104
  };
28105
+ /**
28106
+ * @private
28107
+ */
28108
+ const logoStyles = (shape) => ({
28109
+ root: {
28110
+ overflow: 'initial',
28111
+ display: 'flex',
28112
+ justifyContent: 'center',
28113
+ marginBottom: '1rem'
28114
+ },
28115
+ image: { borderRadius: shape === 'circle' ? '100%' : undefined, height: '3rem', width: '3rem' }
28116
+ });
28055
28117
 
28056
28118
  // Copyright (c) Microsoft Corporation.
28057
28119
  const getDropDownList = (list) => {
@@ -28171,7 +28233,7 @@ const LocalDeviceSettings = (props) => {
28171
28233
  onClickEnableDevicePermission: props.onClickEnableDevicePermission }))),
28172
28234
  React__default["default"].createElement(react.Stack, null,
28173
28235
  React__default["default"].createElement(react.Label, { id: 'call-composite-local-sound-settings-label', className: react.mergeStyles(dropDownStyles(theme).label), disabled: !micPermissionGranted }, soundLabel),
28174
- React__default["default"].createElement(react.Stack, { "data-ui-id": "call-composite-sound-settings", tokens: mainStackTokens },
28236
+ React__default["default"].createElement(react.Stack, { "data-ui-id": "call-composite-sound-settings", tokens: soundStackTokens },
28175
28237
  React__default["default"].createElement(ConfigurationPageMicDropdown, { micGrantedDropdown: micGrantedDropdown, micPermissionGranted: micPermissionGranted !== null && micPermissionGranted !== void 0 ? micPermissionGranted : false,
28176
28238
  /* @conditional-compile-remove(call-readiness) */
28177
28239
  dropdownProps: dropdownProps,
@@ -28225,7 +28287,7 @@ const buttonWithIconStyles = {
28225
28287
  const StartCallButton = (props) => {
28226
28288
  const { rejoinCall } = props;
28227
28289
  const locale = useLocale();
28228
- return (React__default["default"].createElement(react.PrimaryButton, Object.assign({}, props, { "data-ui-id": "call-composite-start-call-button", className: react.mergeStyles(buttonStyle, props.className), styles: buttonWithIconStyles, text: rejoinCall ? locale.strings.call.rejoinCallButtonLabel : locale.strings.call.startCallButtonLabel, onRenderIcon: () => React__default["default"].createElement(reactIcons.Video20Filled, { className: videoCameraIconStyle }) })));
28290
+ return (React__default["default"].createElement(react.PrimaryButton, Object.assign({}, props, { "data-ui-id": "call-composite-start-call-button", className: react.mergeStyles(buttonStyle, props.className), styles: buttonWithIconStyles, text: rejoinCall ? locale.strings.call.rejoinCallButtonLabel : locale.strings.call.startCallButtonLabel, onRenderIcon: props.hideIcon ? undefined : () => React__default["default"].createElement(reactIcons.Video20Filled, { className: videoCameraIconStyle }) })));
28229
28291
  };
28230
28292
 
28231
28293
  // Copyright (c) Microsoft Corporation.
@@ -28261,7 +28323,7 @@ const localPreviewContainerStyle = {
28261
28323
  /**
28262
28324
  * @private
28263
28325
  */
28264
- const localPreviewContainerStyleDesktop = react.mergeStyles(Object.assign(Object.assign({}, localPreviewContainerStyle), { width: '50%', minWidth: '11rem', maxWidth: '25rem', height: '18.75rem', padding: '0.5rem' }));
28326
+ const localPreviewContainerStyleDesktop = react.mergeStyles(Object.assign(Object.assign({}, localPreviewContainerStyle), { width: '100%', height: `${CONFIGURATION_PAGE_SECTION_HEIGHT_REM}rem`, minWidth: `${CONFIGURATION_PAGE_SECTION_MIN_WIDTH_REM}rem`, maxWidth: `${CONFIGURATION_PAGE_SECTION_MAX_WIDTH_REM}rem` }));
28265
28327
  /**
28266
28328
  * @private
28267
28329
  */
@@ -28604,11 +28666,12 @@ var __awaiter$9 = (window && window.__awaiter) || function (thisArg, _arguments,
28604
28666
  * @private
28605
28667
  */
28606
28668
  const ConfigurationPage = (props) => {
28607
- var _a, _b, _c;
28669
+ var _a, _b, _c, _d;
28608
28670
  const { startCallHandler, mobileView, modalLayerHostId,
28609
28671
  /* @conditional-compile-remove(call-readiness) */ deviceChecks,
28610
28672
  /* @conditional-compile-remove(call-readiness) */ onPermissionsTroubleshootingClick,
28611
28673
  /* @conditional-compile-remove(call-readiness) */ onNetworkingTroubleShootingClick } = props;
28674
+ const theme = useTheme();
28612
28675
  const options = useAdaptedSelector(getSelector$1(DevicesButton));
28613
28676
  const localDeviceSettingsHandlers = useHandlers();
28614
28677
  const { video: cameraPermissionGranted, audio: microphonePermissionGranted } = useSelector$1(devicePermissionSelector);
@@ -28709,7 +28772,13 @@ const ConfigurationPage = (props) => {
28709
28772
  hostId: modalLayerHostId
28710
28773
  }), [modalLayerHostId]);
28711
28774
  const filteredErrorBarProps = React.useMemo(() => (Object.assign(Object.assign({}, errorBarProps), { activeErrorMessages: filteredLatestErrors })), [errorBarProps, filteredLatestErrors]);
28712
- return (React__default["default"].createElement(react.Stack, { className: mobileView ? configurationContainerStyleMobile : configurationContainerStyleDesktop },
28775
+ const containerStyles = React.useMemo(() => {
28776
+ var _a;
28777
+ return configurationContainerStyle(!mobileView,
28778
+ /* @conditional-compile-remove(custom-branding) */
28779
+ (_a = props.backgroundImage) === null || _a === void 0 ? void 0 : _a.url);
28780
+ }, [mobileView, /* @conditional-compile-remove(custom-branding) */ (_d = props.backgroundImage) === null || _d === void 0 ? void 0 : _d.url]);
28781
+ return (React__default["default"].createElement(react.Stack, { styles: containerStyles },
28713
28782
  React__default["default"].createElement(react.Stack, { styles: bannerNotificationStyles },
28714
28783
  React__default["default"].createElement(ConfigurationPageErrorBar
28715
28784
  /* @conditional-compile-remove(call-readiness) */
@@ -28741,13 +28810,18 @@ const ConfigurationPage = (props) => {
28741
28810
  React__default["default"].createElement(react.Stack, { verticalFill: true, grow: true, horizontal: true, className: fillWidth },
28742
28811
  React__default["default"].createElement(react.Stack, { className: fillWidth, verticalAlign: "center", verticalFill: mobileWithPreview, tokens: mobileWithPreview ? configurationStackTokensMobile : configurationStackTokensDesktop },
28743
28812
  React__default["default"].createElement(react.Stack.Item, { styles: callDetailsContainerStyles },
28813
+ React__default["default"].createElement(Logo
28814
+ /* @conditional-compile-remove(custom-branding) */
28815
+ , {
28816
+ /* @conditional-compile-remove(custom-branding) */
28817
+ logo: props.logo }),
28744
28818
  title,
28745
28819
  callDescription),
28746
- React__default["default"].createElement(react.Stack, { horizontal: !mobileWithPreview, horizontalAlign: mobileWithPreview ? 'stretch' : 'center', verticalFill: mobileWithPreview, tokens: mobileWithPreview ? configurationStackTokensMobile : undefined },
28820
+ React__default["default"].createElement(react.Stack, { horizontal: !mobileWithPreview, horizontalAlign: mobileWithPreview ? 'stretch' : 'center', verticalFill: mobileWithPreview, tokens: configurationStackTokensMobile },
28747
28821
  localPreviewTrampoline(mobileWithPreview,
28748
28822
  /* @conditional-compile-remove(rooms) */ !!(role === 'Consumer')),
28749
- React__default["default"].createElement(react.Stack, { className: mobileView ? undefined : selectionContainerStyle },
28750
- !mobileWithPreview && (React__default["default"].createElement(React__default["default"].Fragment, null,
28823
+ React__default["default"].createElement(react.Stack, { styles: mobileView ? undefined : configurationSectionStyle },
28824
+ !mobileWithPreview && (React__default["default"].createElement(react.Stack, { className: mobileView ? undefined : selectionContainerStyle(theme) },
28751
28825
  React__default["default"].createElement(LocalDeviceSettings, Object.assign({}, options, localDeviceSettingsHandlers, { cameraPermissionGranted: cameraPermissionGrantedTrampoline(cameraPermissionGranted,
28752
28826
  /* @conditional-compile-remove(call-readiness) */ videoState), microphonePermissionGranted: micPermissionGrantedTrampoline(microphonePermissionGranted,
28753
28827
  /* @conditional-compile-remove(call-readiness) */ audioState),
@@ -28757,8 +28831,8 @@ const ConfigurationPage = (props) => {
28757
28831
  },
28758
28832
  /* @conditional-compile-remove(video-background-effects) */
28759
28833
  onClickVideoEffects: toggleVideoEffectsPane })))),
28760
- React__default["default"].createElement(react.Stack, { styles: mobileWithPreview ? startCallButtonContainerStyleMobile : startCallButtonContainerStyleDesktop },
28761
- React__default["default"].createElement(StartCallButton, { className: mobileWithPreview ? startCallButtonStyleMobile : startCallButtonStyleDesktop, onClick: startCall, disabled: disableStartCallButton }))))),
28834
+ React__default["default"].createElement(react.Stack, { styles: mobileWithPreview ? startCallButtonContainerStyleMobile : startCallButtonContainerStyleDesktop, horizontalAlign: mobileWithPreview ? 'stretch' : 'end' },
28835
+ React__default["default"].createElement(StartCallButton, { className: mobileWithPreview ? startCallButtonStyleMobile : startCallButtonStyleDesktop, onClick: startCall, disabled: disableStartCallButton, hideIcon: true }))))),
28762
28836
  React__default["default"].createElement(react.Panel
28763
28837
  /* @conditional-compile-remove(video-background-effects) */
28764
28838
  , {
@@ -28783,6 +28857,13 @@ const micPermissionGrantedTrampoline = (microphonePermissionGranted, audioState)
28783
28857
  /* @conditional-compile-remove(call-readiness) */
28784
28858
  return audioState && audioState !== 'unsupported' ? audioState === 'granted' : microphonePermissionGranted;
28785
28859
  };
28860
+ const Logo = (props) => {
28861
+ var _a;
28862
+ if (!props.logo) {
28863
+ return React__default["default"].createElement(React__default["default"].Fragment, null);
28864
+ }
28865
+ return React__default["default"].createElement(react.Image, { styles: logoStyles((_a = props.logo.shape) !== null && _a !== void 0 ? _a : 'circle'), src: props.logo.url, alt: props.logo.alt });
28866
+ };
28786
28867
 
28787
28868
  // Copyright (c) Microsoft Corporation.
28788
28869
  // Licensed under the MIT License.
@@ -29466,7 +29547,7 @@ const isShowing = (overrideSidePane) => {
29466
29547
  return !!(overrideSidePane === null || overrideSidePane === void 0 ? void 0 : overrideSidePane.isActive);
29467
29548
  };
29468
29549
  const MainScreen = (props) => {
29469
- var _a, _b, _c, _d, _e, _f, _g, _h;
29550
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
29470
29551
  const adapter = useAdapter();
29471
29552
  const { camerasCount, microphonesCount } = useSelector$1(deviceCountSelector);
29472
29553
  const hasCameras = camerasCount > 0;
@@ -29553,7 +29634,11 @@ const MainScreen = (props) => {
29553
29634
  /* @conditional-compile-remove(call-readiness) */
29554
29635
  onNetworkingTroubleShootingClick: (_f = props.options) === null || _f === void 0 ? void 0 : _f.onNetworkingTroubleShootingClick,
29555
29636
  /* @conditional-compile-remove(capabilities) */
29556
- capabilitiesChangedNotificationBarProps: capabilitiesChangedNotificationBarProps }));
29637
+ capabilitiesChangedNotificationBarProps: capabilitiesChangedNotificationBarProps,
29638
+ /* @conditional-compile-remove(custom-branding) */
29639
+ logo: (_g = props.options) === null || _g === void 0 ? void 0 : _g.logo,
29640
+ /* @conditional-compile-remove(custom-branding) */
29641
+ backgroundImage: (_h = props.options) === null || _h === void 0 ? void 0 : _h.backgroundImage }));
29557
29642
  break;
29558
29643
  case 'accessDeniedTeamsMeeting':
29559
29644
  pageElement = (React__default["default"].createElement(NoticePage, { iconName: "NoticePageAccessDeniedTeamsMeeting", title: locale.strings.call.failedToJoinTeamsMeetingReasonAccessDeniedTitle, moreDetails: locale.strings.call.failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails, dataUiId: 'access-denied-teams-meeting-page' }));
@@ -29565,7 +29650,7 @@ const MainScreen = (props) => {
29565
29650
  pageElement = (React__default["default"].createElement(NoticePage, { iconName: "NoticePageJoinCallFailedDueToNoNetwork", title: locale.strings.call.failedToJoinCallDueToNoNetworkTitle, moreDetails: locale.strings.call.failedToJoinCallDueToNoNetworkMoreDetails, dataUiId: 'join-call-failed-due-to-no-network-page' }));
29566
29651
  break;
29567
29652
  case 'leaving':
29568
- pageElement = (React__default["default"].createElement(NoticePage, { title: (_g = locale.strings.call.leavingCallTitle) !== null && _g !== void 0 ? _g : 'Leaving...', dataUiId: 'leaving-page', pageStyle: leavePageStyle, disableStartCallButton: true }));
29653
+ pageElement = (React__default["default"].createElement(NoticePage, { title: (_j = locale.strings.call.leavingCallTitle) !== null && _j !== void 0 ? _j : 'Leaving...', dataUiId: 'leaving-page', pageStyle: leavePageStyle, disableStartCallButton: true }));
29569
29654
  break;
29570
29655
  case 'leftCall': {
29571
29656
  const { title, moreDetails, disableStartCallButton } = getEndedCallStrings(locale, endedCall);
@@ -29608,7 +29693,7 @@ const MainScreen = (props) => {
29608
29693
  case 'unsupportedEnvironment':
29609
29694
  pageElement = (React__default["default"].createElement(React__default["default"].Fragment, null,
29610
29695
  /* @conditional-compile-remove(unsupported-browser) */
29611
- React__default["default"].createElement(UnsupportedBrowserPage, { onTroubleshootingClick: (_h = props.options) === null || _h === void 0 ? void 0 : _h.onEnvironmentInfoTroubleshootingClick, environmentInfo: adapter.getState().environmentInfo })));
29696
+ React__default["default"].createElement(UnsupportedBrowserPage, { onTroubleshootingClick: (_k = props.options) === null || _k === void 0 ? void 0 : _k.onEnvironmentInfoTroubleshootingClick, environmentInfo: adapter.getState().environmentInfo })));
29612
29697
  break;
29613
29698
  }
29614
29699
  if (!pageElement) {
@@ -31697,7 +31782,11 @@ const CallWithChatScreen = (props) => {
31697
31782
  /* @conditional-compile-remove(gallery-layouts) */
31698
31783
  galleryOptions: props.galleryOptions,
31699
31784
  /* @conditional-compile-remove(click-to-call) */
31700
- localVideoTile: props.localVideoTile
31785
+ localVideoTile: props.localVideoTile,
31786
+ /* @conditional-compile-remove(custom-branding) */
31787
+ logo: props.logo,
31788
+ /* @conditional-compile-remove(custom-branding) */
31789
+ backgroundImage: props.backgroundImage
31701
31790
  }), [
31702
31791
  props.callControls,
31703
31792
  callControlOptionsFromProps,
@@ -31717,7 +31806,11 @@ const CallWithChatScreen = (props) => {
31717
31806
  /* @conditional-compile-remove(click-to-call) */
31718
31807
  props.localVideoTile,
31719
31808
  /* @conditional-compile-remove(pinned-participants) */
31720
- props.remoteVideoTileMenuOptions
31809
+ props.remoteVideoTileMenuOptions,
31810
+ /* @conditional-compile-remove(custom-branding) */
31811
+ props.logo,
31812
+ /* @conditional-compile-remove(custom-branding) */
31813
+ props.backgroundImage
31721
31814
  ]);
31722
31815
  const onRenderChatContent = React.useCallback(() => (React__default["default"].createElement(ChatComposite, Object.assign({}, chatProps, { fluentTheme: theme, options: {
31723
31816
  topic: false,
@@ -31776,7 +31869,11 @@ const CallWithChatComposite = (props) => {
31776
31869
  /* @conditional-compile-remove(click-to-call) */
31777
31870
  localVideoTile: options === null || options === void 0 ? void 0 : options.localVideoTile,
31778
31871
  /* @conditional-compile-remove(gallery-layouts) */
31779
- galleryOptions: options === null || options === void 0 ? void 0 : options.galleryOptions }))));
31872
+ galleryOptions: options === null || options === void 0 ? void 0 : options.galleryOptions,
31873
+ /* @conditional-compile-remove(custom-branding) */
31874
+ logo: options === null || options === void 0 ? void 0 : options.logo,
31875
+ /* @conditional-compile-remove(custom-branding) */
31876
+ backgroundImage: options === null || options === void 0 ? void 0 : options.backgroundImage }))));
31780
31877
  };
31781
31878
  const hasJoinedCallFn = (page, callStatus) => {
31782
31879
  /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(one-to-n-calling) */