@azure/communication-react 1.10.0-alpha-202311090013 → 1.10.0-alpha-202311100012

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 (26) hide show
  1. package/dist/dist-cjs/communication-react/index.js +89 -11
  2. package/dist/dist-cjs/communication-react/index.js.map +1 -1
  3. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  4. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  5. package/dist/dist-esm/calling-stateful-client/src/CallSubscriber.js +9 -4
  6. package/dist/dist-esm/calling-stateful-client/src/CallSubscriber.js.map +1 -1
  7. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.d.ts +1 -0
  8. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js +8 -0
  9. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js.map +1 -1
  10. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallingSoundSubscriber.d.ts +17 -0
  11. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallingSoundSubscriber.js +41 -0
  12. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallingSoundSubscriber.js.map +1 -0
  13. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalPreview.js +1 -1
  14. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalPreview.js.map +1 -1
  15. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js +4 -2
  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 +2 -0
  18. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.js +19 -2
  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/LocalPreview.styles.d.ts +2 -1
  21. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/LocalPreview.styles.js +2 -2
  22. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/LocalPreview.styles.js.map +1 -1
  23. package/dist/dist-esm/react-composites/src/composites/common/sounds/CallEndedSound.d.ts +7 -0
  24. package/dist/dist-esm/react-composites/src/composites/common/sounds/CallEndedSound.js +9 -0
  25. package/dist/dist-esm/react-composites/src/composites/common/sounds/CallEndedSound.js.map +1 -0
  26. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"LocalPreview.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/components/LocalPreview.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { mergeStyles, Stack, Text } from '@fluentui/react';\nimport {\n CameraButton,\n ControlBar,\n MicrophoneButton,\n DevicesButton,\n StreamMedia,\n useTheme,\n VideoTile\n} from '@internal/react-components';\nimport React, { useCallback } from 'react';\nimport { CallCompositeIcon } from '../../common/icons';\nimport { useLocale } from '../../localization';\nimport { useAdapter } from '../adapter/CallAdapterProvider';\nimport { usePropsFor } from '../hooks/usePropsFor';\nimport { useSelector } from '../hooks/useSelector';\nimport { getLocalMicrophoneEnabled } from '../selectors/baseSelectors';\nimport { devicePermissionSelector } from '../selectors/devicePermissionSelector';\nimport { localPreviewSelector } from '../selectors/localPreviewSelector';\nimport { buttonFlyoutIncreasedSizeStyles } from '../styles/Buttons.styles';\nimport {\n cameraOffLabelStyle,\n localPreviewButtonStyle,\n localPreviewContainerStyleDesktop,\n localPreviewContainerStyleMobile,\n localPreviewTileStyle\n} from '../styles/LocalPreview.styles';\n\n/**\n * @private\n */\nexport interface LocalPreviewProps {\n mobileView: boolean;\n showDevicesButton: boolean;\n}\n\n/**\n * @private\n */\nexport const LocalPreview = (props: LocalPreviewProps): JSX.Element => {\n const locale = useLocale();\n const cameraButtonProps = usePropsFor(CameraButton);\n const localPreviewProps = useSelector(localPreviewSelector);\n const devicesButtonProps = usePropsFor(DevicesButton);\n const { audio: microphonePermissionGranted, video: cameraPermissionGranted } = useSelector(devicePermissionSelector);\n\n const isLocalMicrophoneEnabled = useSelector(getLocalMicrophoneEnabled);\n const adapter = useAdapter();\n\n const onToggleMic = useCallback(async () => {\n isLocalMicrophoneEnabled ? adapter.mute() : adapter.unmute();\n }, [adapter, isLocalMicrophoneEnabled]);\n\n const hasNoDevices =\n devicesButtonProps.cameras.length === 0 &&\n devicesButtonProps.microphones.length === 0 &&\n devicesButtonProps.speakers.length === 0;\n\n const hasCameras = devicesButtonProps.cameras.length > 0;\n const hasMicrophones = devicesButtonProps.microphones.length > 0;\n\n const theme = useTheme();\n const onRenderPlaceholder = useCallback((): JSX.Element => {\n return (\n <Stack\n className={mergeStyles({ width: '100%', height: '100%' })}\n verticalAlign=\"center\"\n tokens={{ childrenGap: '0.25rem' }}\n >\n <Stack.Item align=\"center\">\n <CallCompositeIcon\n iconName=\"LocalPreviewPlaceholder\"\n className={mergeStyles(cameraOffLabelStyle, { color: theme.palette.neutralTertiary })}\n />\n </Stack.Item>\n <Stack.Item align=\"center\">\n <Text className={mergeStyles(cameraOffLabelStyle, { color: theme.palette.neutralSecondary })}>\n {locale.strings.call.cameraTurnedOff}\n </Text>\n </Stack.Item>\n </Stack>\n );\n }, [theme, locale.strings.call.cameraTurnedOff]);\n\n const devicesButtonStyles = props.mobileView\n ? {\n menuStyles: {\n menuItemStyles: buttonFlyoutIncreasedSizeStyles\n }\n }\n : undefined;\n\n return (\n <Stack\n data-ui-id=\"call-composite-local-preview\"\n className={props.mobileView ? localPreviewContainerStyleMobile : localPreviewContainerStyleDesktop}\n >\n <VideoTile\n styles={localPreviewTileStyle}\n renderElement={\n localPreviewProps?.videoStreamElement ? (\n <StreamMedia videoStreamElement={localPreviewProps.videoStreamElement} />\n ) : undefined\n }\n onRenderPlaceholder={onRenderPlaceholder}\n >\n <ControlBar layout=\"floatingBottom\">\n <MicrophoneButton\n data-ui-id=\"call-composite-local-device-settings-microphone-button\"\n checked={isLocalMicrophoneEnabled}\n onToggleMicrophone={onToggleMic}\n disabled={!microphonePermissionGranted || !hasMicrophones}\n showLabel={true}\n // disable tooltip as it obscures list of devices on mobile\n strings={\n props.mobileView ? { tooltipOnContent: '', tooltipOffContent: '', tooltipDisabledContent: '' } : {}\n }\n styles={localPreviewButtonStyle}\n />\n <CameraButton\n data-ui-id=\"call-composite-local-device-settings-camera-button\"\n {...cameraButtonProps}\n showLabel={true}\n disabled={!cameraPermissionGranted || !hasCameras}\n // disable tooltip as it obscures list of devices on mobile\n strings={\n props.mobileView\n ? {\n tooltipOnContent: '',\n tooltipOffContent: '',\n tooltipDisabledContent: '',\n tooltipVideoLoadingContent: ''\n }\n : {}\n }\n styles={localPreviewButtonStyle}\n />\n {props.showDevicesButton && (\n <DevicesButton\n data-ui-id=\"call-composite-local-device-settings-options-button\"\n {...devicesButtonProps}\n // disable button whilst all other buttons are disabled\n disabled={!microphonePermissionGranted || !cameraPermissionGranted || hasNoDevices}\n showLabel={true}\n // disable tooltip as it obscures list of devices on mobile\n strings={props.mobileView ? { tooltipContent: '' } : {}}\n styles={devicesButtonStyles}\n />\n )}\n </ControlBar>\n </VideoTile>\n </Stack>\n );\n};\n\"../../../../../react-components/src\""]}
1
+ {"version":3,"file":"LocalPreview.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/components/LocalPreview.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { mergeStyles, Stack, Text } from '@fluentui/react';\nimport {\n CameraButton,\n ControlBar,\n MicrophoneButton,\n DevicesButton,\n StreamMedia,\n useTheme,\n VideoTile\n} from '@internal/react-components';\nimport React, { useCallback } from 'react';\nimport { CallCompositeIcon } from '../../common/icons';\nimport { useLocale } from '../../localization';\nimport { useAdapter } from '../adapter/CallAdapterProvider';\nimport { usePropsFor } from '../hooks/usePropsFor';\nimport { useSelector } from '../hooks/useSelector';\nimport { getLocalMicrophoneEnabled } from '../selectors/baseSelectors';\nimport { devicePermissionSelector } from '../selectors/devicePermissionSelector';\nimport { localPreviewSelector } from '../selectors/localPreviewSelector';\nimport { buttonFlyoutIncreasedSizeStyles } from '../styles/Buttons.styles';\nimport {\n cameraOffLabelStyle,\n localPreviewButtonStyle,\n localPreviewContainerStyleDesktop,\n localPreviewContainerStyleMobile,\n localPreviewTileStyle\n} from '../styles/LocalPreview.styles';\n\n/**\n * @private\n */\nexport interface LocalPreviewProps {\n mobileView: boolean;\n showDevicesButton: boolean;\n}\n\n/**\n * @private\n */\nexport const LocalPreview = (props: LocalPreviewProps): JSX.Element => {\n const locale = useLocale();\n const cameraButtonProps = usePropsFor(CameraButton);\n const localPreviewProps = useSelector(localPreviewSelector);\n const devicesButtonProps = usePropsFor(DevicesButton);\n const { audio: microphonePermissionGranted, video: cameraPermissionGranted } = useSelector(devicePermissionSelector);\n\n const isLocalMicrophoneEnabled = useSelector(getLocalMicrophoneEnabled);\n const adapter = useAdapter();\n\n const onToggleMic = useCallback(async () => {\n isLocalMicrophoneEnabled ? adapter.mute() : adapter.unmute();\n }, [adapter, isLocalMicrophoneEnabled]);\n\n const hasNoDevices =\n devicesButtonProps.cameras.length === 0 &&\n devicesButtonProps.microphones.length === 0 &&\n devicesButtonProps.speakers.length === 0;\n\n const hasCameras = devicesButtonProps.cameras.length > 0;\n const hasMicrophones = devicesButtonProps.microphones.length > 0;\n\n const theme = useTheme();\n const onRenderPlaceholder = useCallback((): JSX.Element => {\n return (\n <Stack\n className={mergeStyles({ width: '100%', height: '100%' })}\n verticalAlign=\"center\"\n tokens={{ childrenGap: '0.25rem' }}\n >\n <Stack.Item align=\"center\">\n <CallCompositeIcon\n iconName=\"LocalPreviewPlaceholder\"\n className={mergeStyles(cameraOffLabelStyle, { color: theme.palette.neutralTertiary })}\n />\n </Stack.Item>\n <Stack.Item align=\"center\">\n <Text className={mergeStyles(cameraOffLabelStyle, { color: theme.palette.neutralSecondary })}>\n {locale.strings.call.cameraTurnedOff}\n </Text>\n </Stack.Item>\n </Stack>\n );\n }, [theme, locale.strings.call.cameraTurnedOff]);\n\n const devicesButtonStyles = props.mobileView\n ? {\n menuStyles: {\n menuItemStyles: buttonFlyoutIncreasedSizeStyles\n }\n }\n : undefined;\n\n return (\n <Stack\n data-ui-id=\"call-composite-local-preview\"\n className={props.mobileView ? localPreviewContainerStyleMobile : localPreviewContainerStyleDesktop(theme)}\n >\n <VideoTile\n styles={localPreviewTileStyle}\n renderElement={\n localPreviewProps?.videoStreamElement ? (\n <StreamMedia videoStreamElement={localPreviewProps.videoStreamElement} />\n ) : undefined\n }\n onRenderPlaceholder={onRenderPlaceholder}\n >\n <ControlBar layout=\"floatingBottom\">\n <MicrophoneButton\n data-ui-id=\"call-composite-local-device-settings-microphone-button\"\n checked={isLocalMicrophoneEnabled}\n onToggleMicrophone={onToggleMic}\n disabled={!microphonePermissionGranted || !hasMicrophones}\n showLabel={true}\n // disable tooltip as it obscures list of devices on mobile\n strings={\n props.mobileView ? { tooltipOnContent: '', tooltipOffContent: '', tooltipDisabledContent: '' } : {}\n }\n styles={localPreviewButtonStyle}\n />\n <CameraButton\n data-ui-id=\"call-composite-local-device-settings-camera-button\"\n {...cameraButtonProps}\n showLabel={true}\n disabled={!cameraPermissionGranted || !hasCameras}\n // disable tooltip as it obscures list of devices on mobile\n strings={\n props.mobileView\n ? {\n tooltipOnContent: '',\n tooltipOffContent: '',\n tooltipDisabledContent: '',\n tooltipVideoLoadingContent: ''\n }\n : {}\n }\n styles={localPreviewButtonStyle}\n />\n {props.showDevicesButton && (\n <DevicesButton\n data-ui-id=\"call-composite-local-device-settings-options-button\"\n {...devicesButtonProps}\n // disable button whilst all other buttons are disabled\n disabled={!microphonePermissionGranted || !cameraPermissionGranted || hasNoDevices}\n showLabel={true}\n // disable tooltip as it obscures list of devices on mobile\n strings={props.mobileView ? { tooltipContent: '' } : {}}\n styles={devicesButtonStyles}\n />\n )}\n </ControlBar>\n </VideoTile>\n </Stack>\n );\n};\n\"../../../../../react-components/src\""]}
@@ -21,7 +21,7 @@ import { useSelector } from '../hooks/useSelector';
21
21
  import { DevicesButton, ErrorBar, useTheme } from "../../../../../react-components/src";
22
22
  import { getCallingSelector } from "../../../../../calling-component-bindings/src";
23
23
  import { Image, Panel, PanelType, Stack } from '@fluentui/react';
24
- import { callDetailsContainerStyles, configurationSectionStyle, fillWidth, logoStyles, panelFocusProps, panelStyles, startCallButtonStyleDesktop } from '../styles/CallConfiguration.styles';
24
+ import { callDetailsContainerStyles, configurationCenteredContent, configurationSectionStyle, fillWidth, logoStyles, panelFocusProps, panelStyles, startCallButtonStyleDesktop } from '../styles/CallConfiguration.styles';
25
25
  import { LocalPreview } from '../components/LocalPreview';
26
26
  import { callDetailsStyleDesktop, callDetailsStyleMobile, configurationStackTokensDesktop, configurationStackTokensMobile, configurationContainerStyle, selectionContainerStyle, startCallButtonContainerStyleDesktop, startCallButtonContainerStyleMobile, startCallButtonStyleMobile, titleContainerStyleDesktop, titleContainerStyleMobile } from '../styles/CallConfiguration.styles';
27
27
  import { useLocale } from '../../localization';
@@ -186,7 +186,9 @@ export const ConfigurationPage = (props) => {
186
186
  /* @conditional-compile-remove(unsupported-browser) */
187
187
  environmentInfo: environmentInfo, setIsPermissionsModalDismissed: setIsPermissionsModalDismissed, onPermissionsTroubleshootingClick: onPermissionsTroubleshootingClick })),
188
188
  React.createElement(Stack, { verticalFill: true, grow: true, horizontal: true, className: fillWidth },
189
- React.createElement(Stack, { className: fillWidth, verticalAlign: "center", verticalFill: mobileWithPreview, tokens: mobileWithPreview ? configurationStackTokensMobile : configurationStackTokensDesktop },
189
+ React.createElement(Stack, { className: configurationCenteredContent(mobileWithPreview,
190
+ /* @conditional-compile-remove(custom-branding) */
191
+ !!props.logo), verticalAlign: "center", verticalFill: mobileWithPreview, tokens: mobileWithPreview ? configurationStackTokensMobile : configurationStackTokensDesktop },
190
192
  React.createElement(Stack.Item, { styles: callDetailsContainerStyles },
191
193
  React.createElement(Logo
192
194
  /* @conditional-compile-remove(custom-branding) */
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigurationPage.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/pages/ConfigurationPage.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { useCallback, useMemo } from 'react';\n/* @conditional-compile-remove(call-readiness) */\nimport { useState } from 'react';\nimport { useAdaptedSelector } from '../hooks/useAdaptedSelector';\nimport { useHandlers } from '../hooks/useHandlers';\nimport { LocalDeviceSettings } from '../components/LocalDeviceSettings';\nimport { StartCallButton } from '../components/StartCallButton';\nimport { devicePermissionSelector } from '../selectors/devicePermissionSelector';\nimport { useSelector } from '../hooks/useSelector';\nimport { ActiveErrorMessage, DevicesButton, ErrorBar, useTheme } from '@internal/react-components';\nimport { getCallingSelector } from '@internal/calling-component-bindings';\nimport { Image, Panel, PanelType, Stack } from '@fluentui/react';\nimport {\n callDetailsContainerStyles,\n configurationSectionStyle,\n fillWidth,\n logoStyles,\n panelFocusProps,\n panelStyles,\n startCallButtonStyleDesktop\n} from '../styles/CallConfiguration.styles';\nimport { LocalPreview } from '../components/LocalPreview';\nimport {\n callDetailsStyleDesktop,\n callDetailsStyleMobile,\n configurationStackTokensDesktop,\n configurationStackTokensMobile,\n configurationContainerStyle,\n selectionContainerStyle,\n startCallButtonContainerStyleDesktop,\n startCallButtonContainerStyleMobile,\n startCallButtonStyleMobile,\n titleContainerStyleDesktop,\n titleContainerStyleMobile\n} from '../styles/CallConfiguration.styles';\nimport { useLocale } from '../../localization';\nimport { bannerNotificationStyles } from '../styles/CallPage.styles';\nimport { usePropsFor } from '../hooks/usePropsFor';\nimport { useAdapter } from '../adapter/CallAdapterProvider';\n/* @conditional-compile-remove(call-readiness) */\nimport { DeviceCheckOptions } from '../CallComposite';\nimport { ConfigurationPageErrorBar } from '../components/ConfigurationPageErrorBar';\n/* @conditional-compile-remove(call-readiness) */\nimport { getDevicePermissionState } from '../utils';\n/* @conditional-compile-remove(call-readiness) */\nimport { CallReadinessModal, CallReadinessModalFallBack } from '../components/CallReadinessModal';\n/* @conditional-compile-remove(video-background-effects) */\nimport { VIDEO_EFFECTS_SIDE_PANE_WIDTH_REM, useVideoEffectsPane } from '../components/SidePane/useVideoEffectsPane';\nimport { SidePane } from '../components/SidePane/SidePane';\nimport { SidePaneRenderer } from '../components/SidePane/SidePaneProvider';\n/* @conditional-compile-remove(video-background-effects) */\nimport { useIsParticularSidePaneOpen } from '../components/SidePane/SidePaneProvider';\n/* @conditional-compile-remove(video-background-effects) */\nimport { localVideoSelector } from '../../CallComposite/selectors/localVideoStreamSelector';\n/* @conditional-compile-remove(capabilities) */\nimport { CapabilitiesChangeNotificationBarProps } from '../components/CapabilitiesChangedNotificationBar';\n\n/**\n * @private\n */\nexport interface ConfigurationPageProps {\n mobileView: boolean;\n startCallHandler(): void;\n updateSidePaneRenderer: (renderer: SidePaneRenderer | undefined) => void;\n latestErrors: ActiveErrorMessage[];\n onDismissError: (error: ActiveErrorMessage) => void;\n modalLayerHostId: string;\n /* @conditional-compile-remove(call-readiness) */\n deviceChecks?: DeviceCheckOptions;\n /* @conditional-compile-remove(call-readiness) */\n onPermissionsTroubleshootingClick?: (permissionsState: {\n camera: PermissionState;\n microphone: PermissionState;\n }) => void;\n /* @conditional-compile-remove(call-readiness) */\n onNetworkingTroubleShootingClick?: () => void;\n /* @conditional-compile-remove(capabilities) */\n capabilitiesChangedNotificationBarProps?: CapabilitiesChangeNotificationBarProps;\n /* @conditional-compile-remove(custom-branding) */\n logo?: {\n url: string;\n alt?: string;\n shape?: 'circle' | 'square';\n };\n /* @conditional-compile-remove(custom-branding) */\n backgroundImage?: {\n url: string;\n };\n}\n\n/**\n * @private\n */\nexport const ConfigurationPage = (props: ConfigurationPageProps): JSX.Element => {\n const {\n startCallHandler,\n mobileView,\n modalLayerHostId,\n /* @conditional-compile-remove(call-readiness) */ deviceChecks,\n /* @conditional-compile-remove(call-readiness) */ onPermissionsTroubleshootingClick,\n /* @conditional-compile-remove(call-readiness) */ onNetworkingTroubleShootingClick\n } = props;\n\n const theme = useTheme();\n\n const options = useAdaptedSelector(getCallingSelector(DevicesButton));\n const localDeviceSettingsHandlers = useHandlers(LocalDeviceSettings);\n const { video: cameraPermissionGranted, audio: microphonePermissionGranted } = useSelector(devicePermissionSelector);\n /* @conditional-compile-remove(call-readiness) */\n // use permission API to get video and audio permission state\n const [videoState, setVideoState] = useState<PermissionState | 'unsupported' | undefined>(undefined);\n /* @conditional-compile-remove(call-readiness) */\n const [audioState, setAudioState] = useState<PermissionState | 'unsupported' | undefined>(undefined);\n /* @conditional-compile-remove(call-readiness) */\n getDevicePermissionState(setVideoState, setAudioState);\n\n const errorBarProps = usePropsFor(ErrorBar);\n const adapter = useAdapter();\n const deviceState = adapter.getState().devices;\n /* @conditional-compile-remove(unsupported-browser) */\n const environmentInfo = adapter.getState().environmentInfo;\n\n let disableStartCallButton = !microphonePermissionGranted || deviceState.microphones?.length === 0;\n /* @conditional-compile-remove(rooms) */\n const role = adapter.getState().call?.role;\n\n /* @conditional-compile-remove(video-background-effects) */\n const isCameraOn = useSelector(localVideoSelector).isAvailable;\n\n let filteredLatestErrors: ActiveErrorMessage[] = props.latestErrors;\n\n /* @conditional-compile-remove(rooms) */\n // TODO: move this logic to the error bar selector once role is plumbed from the headless SDK\n if (role !== 'Consumer') {\n filteredLatestErrors = filteredLatestErrors.filter(\n (e) => e.type !== 'callCameraAccessDenied' && e.type !== 'callCameraAccessDeniedSafari'\n );\n }\n\n /* @conditional-compile-remove(video-background-effects) */\n if ((useIsParticularSidePaneOpen('videoeffects') || !isCameraOn) && errorBarProps) {\n filteredLatestErrors = filteredLatestErrors.filter((e) => e.type !== 'unableToStartVideoEffect');\n }\n\n /* @conditional-compile-remove(rooms) */\n if (role === 'Consumer') {\n // If user's role permissions do not allow access to the microphone button then DO NOT disable the start call button\n // because microphone device permission is not needed for the user's role\n disableStartCallButton = false;\n }\n\n /* @conditional-compile-remove(call-readiness) */\n // Overrides role permissions if CallCompositeOptions deviceChecks are set\n if (deviceChecks) {\n if (\n ['doNotPrompt', 'optional'].includes(deviceChecks.camera) &&\n ['doNotPrompt', 'optional'].includes(deviceChecks.microphone)\n ) {\n disableStartCallButton = false;\n } else if (deviceChecks.camera === 'required') {\n disableStartCallButton = !cameraPermissionGranted || deviceState.cameras?.length === 0;\n }\n }\n\n const locale = useLocale();\n const title = (\n <Stack.Item\n className={mobileView ? titleContainerStyleMobile : titleContainerStyleDesktop}\n role=\"heading\"\n aria-level={1}\n >\n {locale.strings.call.configurationPageTitle}\n </Stack.Item>\n );\n\n const callDescription = locale.strings.call.configurationPageCallDetails && (\n <Stack.Item className={mobileView ? callDetailsStyleMobile : callDetailsStyleDesktop}>\n {locale.strings.call.configurationPageCallDetails}\n </Stack.Item>\n );\n\n let mobileWithPreview = mobileView;\n /* @conditional-compile-remove(rooms) */\n mobileWithPreview = mobileWithPreview && role !== 'Consumer';\n\n /* @conditional-compile-remove(call-readiness) */\n const permissionsState: {\n camera: PermissionState;\n microphone: PermissionState;\n } = {\n // fall back to using cameraPermissionGranted and microphonePermissionGranted if permission API is not supported\n camera:\n videoState && videoState !== 'unsupported'\n ? cameraPermissionGranted !== false\n ? videoState\n : 'denied'\n : cameraPermissionGranted !== false\n ? cameraPermissionGranted\n ? 'granted'\n : 'prompt'\n : 'denied',\n microphone:\n audioState && audioState !== 'unsupported'\n ? microphonePermissionGranted !== false\n ? audioState\n : 'denied'\n : microphonePermissionGranted !== false\n ? microphonePermissionGranted\n ? 'granted'\n : 'prompt'\n : 'denied'\n };\n /* @conditional-compile-remove(call-readiness) */\n const networkErrors = errorBarProps.activeErrorMessages.filter((message) => message.type === 'callNetworkQualityLow');\n\n /* @conditional-compile-remove(call-readiness) */\n const [isPermissionsModalDismissed, setIsPermissionsModalDismissed] = useState(true);\n\n // When permission API is not available, we want to show screen saying checking for access (disappears on its own)\n // then based on permission setting, we show permission denied or nothing\n /* @conditional-compile-remove(call-readiness) */\n const [minimumFallbackTimerElapsed, setMinimumFallbackTimerElapsed] = useState(false);\n /* @conditional-compile-remove(call-readiness) */\n setTimeout(() => {\n setMinimumFallbackTimerElapsed(true);\n }, 2000);\n /* @conditional-compile-remove(call-readiness) */\n const forceShowingCheckPermissions = !minimumFallbackTimerElapsed;\n\n /* @conditional-compile-remove(video-background-effects) */\n const { toggleVideoEffectsPane, closeVideoEffectsPane, isVideoEffectsPaneOpen } = useVideoEffectsPane(\n props.updateSidePaneRenderer,\n mobileView,\n props.latestErrors,\n props.onDismissError\n );\n\n const startCall = useCallback(async () => {\n /* @conditional-compile-remove(video-background-effects) */\n closeVideoEffectsPane();\n startCallHandler();\n }, [startCallHandler, /* @conditional-compile-remove(video-background-effects) */ closeVideoEffectsPane]);\n\n const panelLayerProps = useMemo(\n () => ({\n hostId: modalLayerHostId\n }),\n [modalLayerHostId]\n );\n\n const filteredErrorBarProps = useMemo(\n () => ({\n ...errorBarProps,\n activeErrorMessages: filteredLatestErrors\n }),\n [errorBarProps, filteredLatestErrors]\n );\n\n const containerStyles = useMemo(\n () =>\n configurationContainerStyle(\n !mobileView,\n /* @conditional-compile-remove(custom-branding) */\n props.backgroundImage?.url\n ),\n [mobileView, /* @conditional-compile-remove(custom-branding) */ props.backgroundImage?.url]\n );\n\n return (\n <Stack styles={containerStyles}>\n <Stack styles={bannerNotificationStyles}>\n <ConfigurationPageErrorBar\n /* @conditional-compile-remove(call-readiness) */\n // show trouble shooting error bar when encountering network error/ permission error\n showTroubleShootingErrorBar={\n !cameraPermissionGranted || !microphonePermissionGranted || networkErrors.length > 0\n }\n /* @conditional-compile-remove(call-readiness) */\n permissionsState={permissionsState}\n /* @conditional-compile-remove(call-readiness) */\n onNetworkingTroubleShootingClick={onNetworkingTroubleShootingClick}\n /* @conditional-compile-remove(call-readiness) */\n onPermissionsTroubleshootingClick={onPermissionsTroubleshootingClick}\n errorBarProps={filteredErrorBarProps}\n onDismissError={props.onDismissError}\n />\n </Stack>\n {\n /* @conditional-compile-remove(call-readiness) */\n // show the following screen if permission API is availible (not unsupported) and videoState, audioState is assigned values\n videoState && videoState !== 'unsupported' && audioState && audioState !== 'unsupported' && (\n <CallReadinessModal\n modalLayerHostId={modalLayerHostId}\n mobileView={mobileView}\n /* @conditional-compile-remove(unsupported-browser) */\n environmentInfo={environmentInfo}\n permissionsState={permissionsState}\n isPermissionsModalDismissed={isPermissionsModalDismissed}\n setIsPermissionsModalDismissed={setIsPermissionsModalDismissed}\n onPermissionsTroubleshootingClick={onPermissionsTroubleshootingClick}\n />\n )\n }\n\n {\n /* @conditional-compile-remove(call-readiness) */\n // show the following screen if permission API is not availible (unsupported) and videoState, audioState is assigned values\n videoState && audioState && (videoState === 'unsupported' || audioState === 'unsupported') && (\n <CallReadinessModalFallBack\n /* @conditional-compile-remove(call-readiness) */\n modalLayerHostId={modalLayerHostId}\n mobileView={mobileView}\n checkPermissionModalShowing={forceShowingCheckPermissions}\n permissionsState={permissionsState}\n isPermissionsModalDismissed={isPermissionsModalDismissed}\n /* @conditional-compile-remove(unsupported-browser) */\n environmentInfo={environmentInfo}\n setIsPermissionsModalDismissed={setIsPermissionsModalDismissed}\n onPermissionsTroubleshootingClick={onPermissionsTroubleshootingClick}\n />\n )\n }\n\n <Stack verticalFill grow horizontal className={fillWidth}>\n <Stack\n className={fillWidth}\n verticalAlign=\"center\"\n verticalFill={mobileWithPreview}\n tokens={mobileWithPreview ? configurationStackTokensMobile : configurationStackTokensDesktop}\n >\n <Stack.Item styles={callDetailsContainerStyles}>\n <Logo\n /* @conditional-compile-remove(custom-branding) */\n logo={props.logo}\n />\n {title}\n {callDescription}\n </Stack.Item>\n <Stack\n horizontal={!mobileWithPreview}\n horizontalAlign={mobileWithPreview ? 'stretch' : 'center'}\n verticalFill={mobileWithPreview}\n tokens={configurationStackTokensMobile}\n >\n {localPreviewTrampoline(\n mobileWithPreview,\n /* @conditional-compile-remove(rooms) */ !!(role === 'Consumer')\n )}\n <Stack styles={mobileView ? undefined : configurationSectionStyle}>\n {!mobileWithPreview && (\n <Stack className={mobileView ? undefined : selectionContainerStyle(theme)}>\n <LocalDeviceSettings\n {...options}\n {...localDeviceSettingsHandlers}\n cameraPermissionGranted={cameraPermissionGrantedTrampoline(\n cameraPermissionGranted,\n /* @conditional-compile-remove(call-readiness) */ videoState\n )}\n microphonePermissionGranted={micPermissionGrantedTrampoline(\n microphonePermissionGranted,\n /* @conditional-compile-remove(call-readiness) */ audioState\n )}\n /* @conditional-compile-remove(call-readiness) */\n onClickEnableDevicePermission={() => {\n setIsPermissionsModalDismissed(true);\n }}\n /* @conditional-compile-remove(video-background-effects) */\n onClickVideoEffects={toggleVideoEffectsPane}\n />\n </Stack>\n )}\n <Stack\n styles={mobileWithPreview ? startCallButtonContainerStyleMobile : startCallButtonContainerStyleDesktop}\n horizontalAlign={mobileWithPreview ? 'stretch' : 'end'}\n >\n <StartCallButton\n className={mobileWithPreview ? startCallButtonStyleMobile : startCallButtonStyleDesktop}\n onClick={startCall}\n disabled={disableStartCallButton}\n hideIcon={true}\n />\n </Stack>\n </Stack>\n </Stack>\n </Stack>\n <Panel\n /* @conditional-compile-remove(video-background-effects) */\n isOpen={isVideoEffectsPaneOpen}\n hasCloseButton={false}\n isBlocking={false}\n isHiddenOnDismiss={false}\n styles={panelStyles}\n focusTrapZoneProps={panelFocusProps}\n layerProps={panelLayerProps}\n type={PanelType.custom}\n /* @conditional-compile-remove(video-background-effects) */\n customWidth={`${VIDEO_EFFECTS_SIDE_PANE_WIDTH_REM}rem`}\n >\n <SidePane mobileView={props.mobileView} updateSidePaneRenderer={props.updateSidePaneRenderer} />\n </Panel>\n </Stack>\n </Stack>\n );\n};\n\nconst localPreviewTrampoline = (mobileView: boolean, doNotShow?: boolean): JSX.Element | undefined => {\n /* @conditional-compile-remove(rooms) */\n if (doNotShow) {\n return undefined;\n }\n return <LocalPreview mobileView={mobileView} showDevicesButton={mobileView} />;\n};\n\nconst cameraPermissionGrantedTrampoline = (\n cameraPermissionGranted: boolean | undefined,\n videoState?: PermissionState | 'unsupported' | undefined\n): boolean | undefined => {\n /* @conditional-compile-remove(call-readiness) */\n return videoState && videoState !== 'unsupported' ? videoState === 'granted' : cameraPermissionGranted;\n\n return cameraPermissionGranted;\n};\n\nconst micPermissionGrantedTrampoline = (\n microphonePermissionGranted: boolean | undefined,\n audioState?: PermissionState | 'unsupported' | undefined\n): boolean | undefined => {\n /* @conditional-compile-remove(call-readiness) */\n return audioState && audioState !== 'unsupported' ? audioState === 'granted' : microphonePermissionGranted;\n\n return microphonePermissionGranted;\n};\n\nconst Logo = (props: { logo?: { url: string; alt?: string; shape?: 'circle' | 'square' } }): JSX.Element => {\n if (!props.logo) {\n return <></>;\n }\n return <Image styles={logoStyles(props.logo.shape ?? 'circle')} src={props.logo.url} alt={props.logo.alt} />;\n};\n\"../../../../../react-components/src\"\"../../../../../calling-component-bindings/src\""]}
1
+ {"version":3,"file":"ConfigurationPage.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/pages/ConfigurationPage.tsx"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;;;;;;;;;;AAElC,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACpD,iDAAiD;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAsB,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,4CAAmC;AACnG,OAAO,EAAE,kBAAkB,EAAE,sDAA6C;AAC1E,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,yBAAyB,EACzB,SAAS,EACT,UAAU,EACV,eAAe,EACf,WAAW,EACX,2BAA2B,EAC5B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,+BAA+B,EAC/B,8BAA8B,EAC9B,2BAA2B,EAC3B,uBAAuB,EACvB,oCAAoC,EACpC,mCAAmC,EACnC,0BAA0B,EAC1B,0BAA0B,EAC1B,yBAAyB,EAC1B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAG5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,iDAAiD;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AACpD,iDAAiD;AACjD,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAClG,2DAA2D;AAC3D,OAAO,EAAE,iCAAiC,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACpH,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAE3D,2DAA2D;AAC3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,yCAAyC,CAAC;AACtF,2DAA2D;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wDAAwD,CAAC;AAqC5F;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAA6B,EAAe,EAAE;;IAC9E,MAAM,EACJ,gBAAgB,EAChB,UAAU,EACV,gBAAgB;IAChB,iDAAiD,CAAC,YAAY;IAC9D,iDAAiD,CAAC,iCAAiC;IACnF,iDAAiD,CAAC,gCAAgC,EACnF,GAAG,KAAK,CAAC;IAEV,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IAEzB,MAAM,OAAO,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC;IACtE,MAAM,2BAA2B,GAAG,WAAW,CAAC,mBAAmB,CAAC,CAAC;IACrE,MAAM,EAAE,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,2BAA2B,EAAE,GAAG,WAAW,CAAC,wBAAwB,CAAC,CAAC;IACrH,iDAAiD;IACjD,6DAA6D;IAC7D,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAA8C,SAAS,CAAC,CAAC;IACrG,iDAAiD;IACjD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAA8C,SAAS,CAAC,CAAC;IACrG,iDAAiD;IACjD,wBAAwB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAEvD,MAAM,aAAa,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC;IAC/C,sDAAsD;IACtD,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC;IAE3D,IAAI,sBAAsB,GAAG,CAAC,2BAA2B,IAAI,CAAA,MAAA,WAAW,CAAC,WAAW,0CAAE,MAAM,MAAK,CAAC,CAAC;IACnG,wCAAwC;IACxC,MAAM,IAAI,GAAG,MAAA,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,0CAAE,IAAI,CAAC;IAE3C,2DAA2D;IAC3D,MAAM,UAAU,GAAG,WAAW,CAAC,kBAAkB,CAAC,CAAC,WAAW,CAAC;IAE/D,IAAI,oBAAoB,GAAyB,KAAK,CAAC,YAAY,CAAC;IAEpE,wCAAwC;IACxC,6FAA6F;IAC7F,IAAI,IAAI,KAAK,UAAU,EAAE;QACvB,oBAAoB,GAAG,oBAAoB,CAAC,MAAM,CAChD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,wBAAwB,IAAI,CAAC,CAAC,IAAI,KAAK,8BAA8B,CACxF,CAAC;KACH;IAED,2DAA2D;IAC3D,IAAI,CAAC,2BAA2B,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,aAAa,EAAE;QACjF,oBAAoB,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,0BAA0B,CAAC,CAAC;KAClG;IAED,wCAAwC;IACxC,IAAI,IAAI,KAAK,UAAU,EAAE;QACvB,oHAAoH;QACpH,yEAAyE;QACzE,sBAAsB,GAAG,KAAK,CAAC;KAChC;IAED,iDAAiD;IACjD,0EAA0E;IAC1E,IAAI,YAAY,EAAE;QAChB,IACE,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC;YACzD,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,EAC7D;YACA,sBAAsB,GAAG,KAAK,CAAC;SAChC;aAAM,IAAI,YAAY,CAAC,MAAM,KAAK,UAAU,EAAE;YAC7C,sBAAsB,GAAG,CAAC,uBAAuB,IAAI,CAAA,MAAA,WAAW,CAAC,OAAO,0CAAE,MAAM,MAAK,CAAC,CAAC;SACxF;KACF;IAED,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,CACZ,oBAAC,KAAK,CAAC,IAAI,IACT,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,0BAA0B,EAC9E,IAAI,EAAC,SAAS,gBACF,CAAC,IAEZ,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAChC,CACd,CAAC;IAEF,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAC1E,oBAAC,KAAK,CAAC,IAAI,IAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,uBAAuB,IACjF,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,4BAA4B,CACtC,CACd,CAAC;IAEF,IAAI,iBAAiB,GAAG,UAAU,CAAC;IACnC,wCAAwC;IACxC,iBAAiB,GAAG,iBAAiB,IAAI,IAAI,KAAK,UAAU,CAAC;IAE7D,iDAAiD;IACjD,MAAM,gBAAgB,GAGlB;QACF,gHAAgH;QAChH,MAAM,EACJ,UAAU,IAAI,UAAU,KAAK,aAAa;YACxC,CAAC,CAAC,uBAAuB,KAAK,KAAK;gBACjC,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,QAAQ;YACZ,CAAC,CAAC,uBAAuB,KAAK,KAAK;gBACnC,CAAC,CAAC,uBAAuB;oBACvB,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,QAAQ;gBACZ,CAAC,CAAC,QAAQ;QACd,UAAU,EACR,UAAU,IAAI,UAAU,KAAK,aAAa;YACxC,CAAC,CAAC,2BAA2B,KAAK,KAAK;gBACrC,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,QAAQ;YACZ,CAAC,CAAC,2BAA2B,KAAK,KAAK;gBACvC,CAAC,CAAC,2BAA2B;oBAC3B,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,QAAQ;gBACZ,CAAC,CAAC,QAAQ;KACf,CAAC;IACF,iDAAiD;IACjD,MAAM,aAAa,GAAG,aAAa,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,uBAAuB,CAAC,CAAC;IAEtH,iDAAiD;IACjD,MAAM,CAAC,2BAA2B,EAAE,8BAA8B,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAErF,kHAAkH;IAClH,yEAAyE;IACzE,iDAAiD;IACjD,MAAM,CAAC,2BAA2B,EAAE,8BAA8B,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtF,iDAAiD;IACjD,UAAU,CAAC,GAAG,EAAE;QACd,8BAA8B,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,EAAE,IAAI,CAAC,CAAC;IACT,iDAAiD;IACjD,MAAM,4BAA4B,GAAG,CAAC,2BAA2B,CAAC;IAElE,2DAA2D;IAC3D,MAAM,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,GAAG,mBAAmB,CACnG,KAAK,CAAC,sBAAsB,EAC5B,UAAU,EACV,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,cAAc,CACrB,CAAC;IAEF,MAAM,SAAS,GAAG,WAAW,CAAC,GAAS,EAAE;QACvC,2DAA2D;QAC3D,qBAAqB,EAAE,CAAC;QACxB,gBAAgB,EAAE,CAAC;IACrB,CAAC,CAAA,EAAE,CAAC,gBAAgB,EAAE,2DAA2D,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAE1G,MAAM,eAAe,GAAG,OAAO,CAC7B,GAAG,EAAE,CAAC,CAAC;QACL,MAAM,EAAE,gBAAgB;KACzB,CAAC,EACF,CAAC,gBAAgB,CAAC,CACnB,CAAC;IAEF,MAAM,qBAAqB,GAAG,OAAO,CACnC,GAAG,EAAE,CAAC,iCACD,aAAa,KAChB,mBAAmB,EAAE,oBAAoB,IACzC,EACF,CAAC,aAAa,EAAE,oBAAoB,CAAC,CACtC,CAAC;IAEF,MAAM,eAAe,GAAG,OAAO,CAC7B,GAAG,EAAE;;QACH,OAAA,2BAA2B,CACzB,CAAC,UAAU;QACX,kDAAkD;QAClD,MAAA,KAAK,CAAC,eAAe,0CAAE,GAAG,CAC3B,CAAA;KAAA,EACH,CAAC,UAAU,EAAE,kDAAkD,CAAC,MAAA,KAAK,CAAC,eAAe,0CAAE,GAAG,CAAC,CAC5F,CAAC;IAEF,OAAO,CACL,oBAAC,KAAK,IAAC,MAAM,EAAE,eAAe;QAC5B,oBAAC,KAAK,IAAC,MAAM,EAAE,wBAAwB;YACrC,oBAAC,yBAAyB;YACxB,iDAAiD;YACjD,oFAAoF;;gBADpF,iDAAiD;gBACjD,oFAAoF;gBACpF,2BAA2B,EACzB,CAAC,uBAAuB,IAAI,CAAC,2BAA2B,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;gBAEtF,iDAAiD;gBACjD,gBAAgB,EAAE,gBAAgB;gBAClC,iDAAiD;gBACjD,gCAAgC,EAAE,gCAAgC;gBAClE,iDAAiD;gBACjD,iCAAiC,EAAE,iCAAiC,EACpE,aAAa,EAAE,qBAAqB,EACpC,cAAc,EAAE,KAAK,CAAC,cAAc,GACpC,CACI;QAEN,iDAAiD;QACjD,2HAA2H;QAC3H,UAAU,IAAI,UAAU,KAAK,aAAa,IAAI,UAAU,IAAI,UAAU,KAAK,aAAa,IAAI,CAC1F,oBAAC,kBAAkB,IACjB,gBAAgB,EAAE,gBAAgB,EAClC,UAAU,EAAE,UAAU;YACtB,sDAAsD;YACtD,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,gBAAgB,EAClC,2BAA2B,EAAE,2BAA2B,EACxD,8BAA8B,EAAE,8BAA8B,EAC9D,iCAAiC,EAAE,iCAAiC,GACpE,CACH;QAID,iDAAiD;QACjD,2HAA2H;QAC3H,UAAU,IAAI,UAAU,IAAI,CAAC,UAAU,KAAK,aAAa,IAAI,UAAU,KAAK,aAAa,CAAC,IAAI,CAC5F,oBAAC,0BAA0B;QACzB,iDAAiD;;YAAjD,iDAAiD;YACjD,gBAAgB,EAAE,gBAAgB,EAClC,UAAU,EAAE,UAAU,EACtB,2BAA2B,EAAE,4BAA4B,EACzD,gBAAgB,EAAE,gBAAgB,EAClC,2BAA2B,EAAE,2BAA2B;YACxD,sDAAsD;YACtD,eAAe,EAAE,eAAe,EAChC,8BAA8B,EAAE,8BAA8B,EAC9D,iCAAiC,EAAE,iCAAiC,GACpE,CACH;QAGH,oBAAC,KAAK,IAAC,YAAY,QAAC,IAAI,QAAC,UAAU,QAAC,SAAS,EAAE,SAAS;YACtD,oBAAC,KAAK,IACJ,SAAS,EAAE,4BAA4B,CACrC,iBAAiB;gBACjB,kDAAkD;gBAClD,CAAC,CAAC,KAAK,CAAC,IAAI,CACb,EACD,aAAa,EAAC,QAAQ,EACtB,YAAY,EAAE,iBAAiB,EAC/B,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,+BAA+B;gBAE5F,oBAAC,KAAK,CAAC,IAAI,IAAC,MAAM,EAAE,0BAA0B;oBAC5C,oBAAC,IAAI;oBACH,kDAAkD;;wBAAlD,kDAAkD;wBAClD,IAAI,EAAE,KAAK,CAAC,IAAI,GAChB;oBACD,KAAK;oBACL,eAAe,CACL;gBACb,oBAAC,KAAK,IACJ,UAAU,EAAE,CAAC,iBAAiB,EAC9B,eAAe,EAAE,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EACzD,YAAY,EAAE,iBAAiB,EAC/B,MAAM,EAAE,8BAA8B;oBAErC,sBAAsB,CACrB,iBAAiB;oBACjB,wCAAwC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CACjE;oBACD,oBAAC,KAAK,IAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,yBAAyB;wBAC9D,CAAC,iBAAiB,IAAI,CACrB,oBAAC,KAAK,IAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC;4BACvE,oBAAC,mBAAmB,oBACd,OAAO,EACP,2BAA2B,IAC/B,uBAAuB,EAAE,iCAAiC,CACxD,uBAAuB;gCACvB,iDAAiD,CAAC,UAAU,CAC7D,EACD,2BAA2B,EAAE,8BAA8B,CACzD,2BAA2B;gCAC3B,iDAAiD,CAAC,UAAU,CAC7D;gCACD,iDAAiD;gCACjD,6BAA6B,EAAE,GAAG,EAAE;oCAClC,8BAA8B,CAAC,IAAI,CAAC,CAAC;gCACvC,CAAC;gCACD,2DAA2D;gCAC3D,mBAAmB,EAAE,sBAAsB,IAC3C,CACI,CACT;wBACD,oBAAC,KAAK,IACJ,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,oCAAoC,EACtG,eAAe,EAAE,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;4BAEtD,oBAAC,eAAe,IACd,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,2BAA2B,EACvF,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,sBAAsB,EAChC,QAAQ,EAAE,IAAI,GACd,CACI,CACF,CACF,CACF;YACR,oBAAC,KAAK;YACJ,2DAA2D;;gBAA3D,2DAA2D;gBAC3D,MAAM,EAAE,sBAAsB,EAC9B,cAAc,EAAE,KAAK,EACrB,UAAU,EAAE,KAAK,EACjB,iBAAiB,EAAE,KAAK,EACxB,MAAM,EAAE,WAAW,EACnB,kBAAkB,EAAE,eAAe,EACnC,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,SAAS,CAAC,MAAM;gBACtB,2DAA2D;gBAC3D,WAAW,EAAE,GAAG,iCAAiC,KAAK;gBAEtD,oBAAC,QAAQ,IAAC,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,sBAAsB,EAAE,KAAK,CAAC,sBAAsB,GAAI,CAC1F,CACF,CACF,CACT,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,UAAmB,EAAE,SAAmB,EAA2B,EAAE;IACnG,wCAAwC;IACxC,IAAI,SAAS,EAAE;QACb,OAAO,SAAS,CAAC;KAClB;IACD,OAAO,oBAAC,YAAY,IAAC,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,UAAU,GAAI,CAAC;AACjF,CAAC,CAAC;AAEF,MAAM,iCAAiC,GAAG,CACxC,uBAA4C,EAC5C,UAAwD,EACnC,EAAE;IACvB,iDAAiD;IACjD,OAAO,UAAU,IAAI,UAAU,KAAK,aAAa,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC;IAEvG,OAAO,uBAAuB,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,8BAA8B,GAAG,CACrC,2BAAgD,EAChD,UAAwD,EACnC,EAAE;IACvB,iDAAiD;IACjD,OAAO,UAAU,IAAI,UAAU,KAAK,aAAa,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,2BAA2B,CAAC;IAE3G,OAAO,2BAA2B,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,CAAC,KAA4E,EAAe,EAAE;;IACzG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;QACf,OAAO,yCAAK,CAAC;KACd;IACD,OAAO,oBAAC,KAAK,IAAC,MAAM,EAAE,UAAU,CAAC,MAAA,KAAK,CAAC,IAAI,CAAC,KAAK,mCAAI,QAAQ,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,GAAI,CAAC;AAC/G,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { useCallback, useMemo } from 'react';\n/* @conditional-compile-remove(call-readiness) */\nimport { useState } from 'react';\nimport { useAdaptedSelector } from '../hooks/useAdaptedSelector';\nimport { useHandlers } from '../hooks/useHandlers';\nimport { LocalDeviceSettings } from '../components/LocalDeviceSettings';\nimport { StartCallButton } from '../components/StartCallButton';\nimport { devicePermissionSelector } from '../selectors/devicePermissionSelector';\nimport { useSelector } from '../hooks/useSelector';\nimport { ActiveErrorMessage, DevicesButton, ErrorBar, useTheme } from '@internal/react-components';\nimport { getCallingSelector } from '@internal/calling-component-bindings';\nimport { Image, Panel, PanelType, Stack } from '@fluentui/react';\nimport {\n callDetailsContainerStyles,\n configurationCenteredContent,\n configurationSectionStyle,\n fillWidth,\n logoStyles,\n panelFocusProps,\n panelStyles,\n startCallButtonStyleDesktop\n} from '../styles/CallConfiguration.styles';\nimport { LocalPreview } from '../components/LocalPreview';\nimport {\n callDetailsStyleDesktop,\n callDetailsStyleMobile,\n configurationStackTokensDesktop,\n configurationStackTokensMobile,\n configurationContainerStyle,\n selectionContainerStyle,\n startCallButtonContainerStyleDesktop,\n startCallButtonContainerStyleMobile,\n startCallButtonStyleMobile,\n titleContainerStyleDesktop,\n titleContainerStyleMobile\n} from '../styles/CallConfiguration.styles';\nimport { useLocale } from '../../localization';\nimport { bannerNotificationStyles } from '../styles/CallPage.styles';\nimport { usePropsFor } from '../hooks/usePropsFor';\nimport { useAdapter } from '../adapter/CallAdapterProvider';\n/* @conditional-compile-remove(call-readiness) */\nimport { DeviceCheckOptions } from '../CallComposite';\nimport { ConfigurationPageErrorBar } from '../components/ConfigurationPageErrorBar';\n/* @conditional-compile-remove(call-readiness) */\nimport { getDevicePermissionState } from '../utils';\n/* @conditional-compile-remove(call-readiness) */\nimport { CallReadinessModal, CallReadinessModalFallBack } from '../components/CallReadinessModal';\n/* @conditional-compile-remove(video-background-effects) */\nimport { VIDEO_EFFECTS_SIDE_PANE_WIDTH_REM, useVideoEffectsPane } from '../components/SidePane/useVideoEffectsPane';\nimport { SidePane } from '../components/SidePane/SidePane';\nimport { SidePaneRenderer } from '../components/SidePane/SidePaneProvider';\n/* @conditional-compile-remove(video-background-effects) */\nimport { useIsParticularSidePaneOpen } from '../components/SidePane/SidePaneProvider';\n/* @conditional-compile-remove(video-background-effects) */\nimport { localVideoSelector } from '../../CallComposite/selectors/localVideoStreamSelector';\n/* @conditional-compile-remove(capabilities) */\nimport { CapabilitiesChangeNotificationBarProps } from '../components/CapabilitiesChangedNotificationBar';\n\n/**\n * @private\n */\nexport interface ConfigurationPageProps {\n mobileView: boolean;\n startCallHandler(): void;\n updateSidePaneRenderer: (renderer: SidePaneRenderer | undefined) => void;\n latestErrors: ActiveErrorMessage[];\n onDismissError: (error: ActiveErrorMessage) => void;\n modalLayerHostId: string;\n /* @conditional-compile-remove(call-readiness) */\n deviceChecks?: DeviceCheckOptions;\n /* @conditional-compile-remove(call-readiness) */\n onPermissionsTroubleshootingClick?: (permissionsState: {\n camera: PermissionState;\n microphone: PermissionState;\n }) => void;\n /* @conditional-compile-remove(call-readiness) */\n onNetworkingTroubleShootingClick?: () => void;\n /* @conditional-compile-remove(capabilities) */\n capabilitiesChangedNotificationBarProps?: CapabilitiesChangeNotificationBarProps;\n /* @conditional-compile-remove(custom-branding) */\n logo?: {\n url: string;\n alt?: string;\n shape?: 'circle' | 'square';\n };\n /* @conditional-compile-remove(custom-branding) */\n backgroundImage?: {\n url: string;\n };\n}\n\n/**\n * @private\n */\nexport const ConfigurationPage = (props: ConfigurationPageProps): JSX.Element => {\n const {\n startCallHandler,\n mobileView,\n modalLayerHostId,\n /* @conditional-compile-remove(call-readiness) */ deviceChecks,\n /* @conditional-compile-remove(call-readiness) */ onPermissionsTroubleshootingClick,\n /* @conditional-compile-remove(call-readiness) */ onNetworkingTroubleShootingClick\n } = props;\n\n const theme = useTheme();\n\n const options = useAdaptedSelector(getCallingSelector(DevicesButton));\n const localDeviceSettingsHandlers = useHandlers(LocalDeviceSettings);\n const { video: cameraPermissionGranted, audio: microphonePermissionGranted } = useSelector(devicePermissionSelector);\n /* @conditional-compile-remove(call-readiness) */\n // use permission API to get video and audio permission state\n const [videoState, setVideoState] = useState<PermissionState | 'unsupported' | undefined>(undefined);\n /* @conditional-compile-remove(call-readiness) */\n const [audioState, setAudioState] = useState<PermissionState | 'unsupported' | undefined>(undefined);\n /* @conditional-compile-remove(call-readiness) */\n getDevicePermissionState(setVideoState, setAudioState);\n\n const errorBarProps = usePropsFor(ErrorBar);\n const adapter = useAdapter();\n const deviceState = adapter.getState().devices;\n /* @conditional-compile-remove(unsupported-browser) */\n const environmentInfo = adapter.getState().environmentInfo;\n\n let disableStartCallButton = !microphonePermissionGranted || deviceState.microphones?.length === 0;\n /* @conditional-compile-remove(rooms) */\n const role = adapter.getState().call?.role;\n\n /* @conditional-compile-remove(video-background-effects) */\n const isCameraOn = useSelector(localVideoSelector).isAvailable;\n\n let filteredLatestErrors: ActiveErrorMessage[] = props.latestErrors;\n\n /* @conditional-compile-remove(rooms) */\n // TODO: move this logic to the error bar selector once role is plumbed from the headless SDK\n if (role !== 'Consumer') {\n filteredLatestErrors = filteredLatestErrors.filter(\n (e) => e.type !== 'callCameraAccessDenied' && e.type !== 'callCameraAccessDeniedSafari'\n );\n }\n\n /* @conditional-compile-remove(video-background-effects) */\n if ((useIsParticularSidePaneOpen('videoeffects') || !isCameraOn) && errorBarProps) {\n filteredLatestErrors = filteredLatestErrors.filter((e) => e.type !== 'unableToStartVideoEffect');\n }\n\n /* @conditional-compile-remove(rooms) */\n if (role === 'Consumer') {\n // If user's role permissions do not allow access to the microphone button then DO NOT disable the start call button\n // because microphone device permission is not needed for the user's role\n disableStartCallButton = false;\n }\n\n /* @conditional-compile-remove(call-readiness) */\n // Overrides role permissions if CallCompositeOptions deviceChecks are set\n if (deviceChecks) {\n if (\n ['doNotPrompt', 'optional'].includes(deviceChecks.camera) &&\n ['doNotPrompt', 'optional'].includes(deviceChecks.microphone)\n ) {\n disableStartCallButton = false;\n } else if (deviceChecks.camera === 'required') {\n disableStartCallButton = !cameraPermissionGranted || deviceState.cameras?.length === 0;\n }\n }\n\n const locale = useLocale();\n const title = (\n <Stack.Item\n className={mobileView ? titleContainerStyleMobile : titleContainerStyleDesktop}\n role=\"heading\"\n aria-level={1}\n >\n {locale.strings.call.configurationPageTitle}\n </Stack.Item>\n );\n\n const callDescription = locale.strings.call.configurationPageCallDetails && (\n <Stack.Item className={mobileView ? callDetailsStyleMobile : callDetailsStyleDesktop}>\n {locale.strings.call.configurationPageCallDetails}\n </Stack.Item>\n );\n\n let mobileWithPreview = mobileView;\n /* @conditional-compile-remove(rooms) */\n mobileWithPreview = mobileWithPreview && role !== 'Consumer';\n\n /* @conditional-compile-remove(call-readiness) */\n const permissionsState: {\n camera: PermissionState;\n microphone: PermissionState;\n } = {\n // fall back to using cameraPermissionGranted and microphonePermissionGranted if permission API is not supported\n camera:\n videoState && videoState !== 'unsupported'\n ? cameraPermissionGranted !== false\n ? videoState\n : 'denied'\n : cameraPermissionGranted !== false\n ? cameraPermissionGranted\n ? 'granted'\n : 'prompt'\n : 'denied',\n microphone:\n audioState && audioState !== 'unsupported'\n ? microphonePermissionGranted !== false\n ? audioState\n : 'denied'\n : microphonePermissionGranted !== false\n ? microphonePermissionGranted\n ? 'granted'\n : 'prompt'\n : 'denied'\n };\n /* @conditional-compile-remove(call-readiness) */\n const networkErrors = errorBarProps.activeErrorMessages.filter((message) => message.type === 'callNetworkQualityLow');\n\n /* @conditional-compile-remove(call-readiness) */\n const [isPermissionsModalDismissed, setIsPermissionsModalDismissed] = useState(true);\n\n // When permission API is not available, we want to show screen saying checking for access (disappears on its own)\n // then based on permission setting, we show permission denied or nothing\n /* @conditional-compile-remove(call-readiness) */\n const [minimumFallbackTimerElapsed, setMinimumFallbackTimerElapsed] = useState(false);\n /* @conditional-compile-remove(call-readiness) */\n setTimeout(() => {\n setMinimumFallbackTimerElapsed(true);\n }, 2000);\n /* @conditional-compile-remove(call-readiness) */\n const forceShowingCheckPermissions = !minimumFallbackTimerElapsed;\n\n /* @conditional-compile-remove(video-background-effects) */\n const { toggleVideoEffectsPane, closeVideoEffectsPane, isVideoEffectsPaneOpen } = useVideoEffectsPane(\n props.updateSidePaneRenderer,\n mobileView,\n props.latestErrors,\n props.onDismissError\n );\n\n const startCall = useCallback(async () => {\n /* @conditional-compile-remove(video-background-effects) */\n closeVideoEffectsPane();\n startCallHandler();\n }, [startCallHandler, /* @conditional-compile-remove(video-background-effects) */ closeVideoEffectsPane]);\n\n const panelLayerProps = useMemo(\n () => ({\n hostId: modalLayerHostId\n }),\n [modalLayerHostId]\n );\n\n const filteredErrorBarProps = useMemo(\n () => ({\n ...errorBarProps,\n activeErrorMessages: filteredLatestErrors\n }),\n [errorBarProps, filteredLatestErrors]\n );\n\n const containerStyles = useMemo(\n () =>\n configurationContainerStyle(\n !mobileView,\n /* @conditional-compile-remove(custom-branding) */\n props.backgroundImage?.url\n ),\n [mobileView, /* @conditional-compile-remove(custom-branding) */ props.backgroundImage?.url]\n );\n\n return (\n <Stack styles={containerStyles}>\n <Stack styles={bannerNotificationStyles}>\n <ConfigurationPageErrorBar\n /* @conditional-compile-remove(call-readiness) */\n // show trouble shooting error bar when encountering network error/ permission error\n showTroubleShootingErrorBar={\n !cameraPermissionGranted || !microphonePermissionGranted || networkErrors.length > 0\n }\n /* @conditional-compile-remove(call-readiness) */\n permissionsState={permissionsState}\n /* @conditional-compile-remove(call-readiness) */\n onNetworkingTroubleShootingClick={onNetworkingTroubleShootingClick}\n /* @conditional-compile-remove(call-readiness) */\n onPermissionsTroubleshootingClick={onPermissionsTroubleshootingClick}\n errorBarProps={filteredErrorBarProps}\n onDismissError={props.onDismissError}\n />\n </Stack>\n {\n /* @conditional-compile-remove(call-readiness) */\n // show the following screen if permission API is availible (not unsupported) and videoState, audioState is assigned values\n videoState && videoState !== 'unsupported' && audioState && audioState !== 'unsupported' && (\n <CallReadinessModal\n modalLayerHostId={modalLayerHostId}\n mobileView={mobileView}\n /* @conditional-compile-remove(unsupported-browser) */\n environmentInfo={environmentInfo}\n permissionsState={permissionsState}\n isPermissionsModalDismissed={isPermissionsModalDismissed}\n setIsPermissionsModalDismissed={setIsPermissionsModalDismissed}\n onPermissionsTroubleshootingClick={onPermissionsTroubleshootingClick}\n />\n )\n }\n\n {\n /* @conditional-compile-remove(call-readiness) */\n // show the following screen if permission API is not availible (unsupported) and videoState, audioState is assigned values\n videoState && audioState && (videoState === 'unsupported' || audioState === 'unsupported') && (\n <CallReadinessModalFallBack\n /* @conditional-compile-remove(call-readiness) */\n modalLayerHostId={modalLayerHostId}\n mobileView={mobileView}\n checkPermissionModalShowing={forceShowingCheckPermissions}\n permissionsState={permissionsState}\n isPermissionsModalDismissed={isPermissionsModalDismissed}\n /* @conditional-compile-remove(unsupported-browser) */\n environmentInfo={environmentInfo}\n setIsPermissionsModalDismissed={setIsPermissionsModalDismissed}\n onPermissionsTroubleshootingClick={onPermissionsTroubleshootingClick}\n />\n )\n }\n\n <Stack verticalFill grow horizontal className={fillWidth}>\n <Stack\n className={configurationCenteredContent(\n mobileWithPreview,\n /* @conditional-compile-remove(custom-branding) */\n !!props.logo\n )}\n verticalAlign=\"center\"\n verticalFill={mobileWithPreview}\n tokens={mobileWithPreview ? configurationStackTokensMobile : configurationStackTokensDesktop}\n >\n <Stack.Item styles={callDetailsContainerStyles}>\n <Logo\n /* @conditional-compile-remove(custom-branding) */\n logo={props.logo}\n />\n {title}\n {callDescription}\n </Stack.Item>\n <Stack\n horizontal={!mobileWithPreview}\n horizontalAlign={mobileWithPreview ? 'stretch' : 'center'}\n verticalFill={mobileWithPreview}\n tokens={configurationStackTokensMobile}\n >\n {localPreviewTrampoline(\n mobileWithPreview,\n /* @conditional-compile-remove(rooms) */ !!(role === 'Consumer')\n )}\n <Stack styles={mobileView ? undefined : configurationSectionStyle}>\n {!mobileWithPreview && (\n <Stack className={mobileView ? undefined : selectionContainerStyle(theme)}>\n <LocalDeviceSettings\n {...options}\n {...localDeviceSettingsHandlers}\n cameraPermissionGranted={cameraPermissionGrantedTrampoline(\n cameraPermissionGranted,\n /* @conditional-compile-remove(call-readiness) */ videoState\n )}\n microphonePermissionGranted={micPermissionGrantedTrampoline(\n microphonePermissionGranted,\n /* @conditional-compile-remove(call-readiness) */ audioState\n )}\n /* @conditional-compile-remove(call-readiness) */\n onClickEnableDevicePermission={() => {\n setIsPermissionsModalDismissed(true);\n }}\n /* @conditional-compile-remove(video-background-effects) */\n onClickVideoEffects={toggleVideoEffectsPane}\n />\n </Stack>\n )}\n <Stack\n styles={mobileWithPreview ? startCallButtonContainerStyleMobile : startCallButtonContainerStyleDesktop}\n horizontalAlign={mobileWithPreview ? 'stretch' : 'end'}\n >\n <StartCallButton\n className={mobileWithPreview ? startCallButtonStyleMobile : startCallButtonStyleDesktop}\n onClick={startCall}\n disabled={disableStartCallButton}\n hideIcon={true}\n />\n </Stack>\n </Stack>\n </Stack>\n </Stack>\n <Panel\n /* @conditional-compile-remove(video-background-effects) */\n isOpen={isVideoEffectsPaneOpen}\n hasCloseButton={false}\n isBlocking={false}\n isHiddenOnDismiss={false}\n styles={panelStyles}\n focusTrapZoneProps={panelFocusProps}\n layerProps={panelLayerProps}\n type={PanelType.custom}\n /* @conditional-compile-remove(video-background-effects) */\n customWidth={`${VIDEO_EFFECTS_SIDE_PANE_WIDTH_REM}rem`}\n >\n <SidePane mobileView={props.mobileView} updateSidePaneRenderer={props.updateSidePaneRenderer} />\n </Panel>\n </Stack>\n </Stack>\n );\n};\n\nconst localPreviewTrampoline = (mobileView: boolean, doNotShow?: boolean): JSX.Element | undefined => {\n /* @conditional-compile-remove(rooms) */\n if (doNotShow) {\n return undefined;\n }\n return <LocalPreview mobileView={mobileView} showDevicesButton={mobileView} />;\n};\n\nconst cameraPermissionGrantedTrampoline = (\n cameraPermissionGranted: boolean | undefined,\n videoState?: PermissionState | 'unsupported' | undefined\n): boolean | undefined => {\n /* @conditional-compile-remove(call-readiness) */\n return videoState && videoState !== 'unsupported' ? videoState === 'granted' : cameraPermissionGranted;\n\n return cameraPermissionGranted;\n};\n\nconst micPermissionGrantedTrampoline = (\n microphonePermissionGranted: boolean | undefined,\n audioState?: PermissionState | 'unsupported' | undefined\n): boolean | undefined => {\n /* @conditional-compile-remove(call-readiness) */\n return audioState && audioState !== 'unsupported' ? audioState === 'granted' : microphonePermissionGranted;\n\n return microphonePermissionGranted;\n};\n\nconst Logo = (props: { logo?: { url: string; alt?: string; shape?: 'circle' | 'square' } }): JSX.Element => {\n if (!props.logo) {\n return <></>;\n }\n return <Image styles={logoStyles(props.logo.shape ?? 'circle')} src={props.logo.url} alt={props.logo.alt} />;\n};\n\"../../../../../react-components/src\"\"../../../../../calling-component-bindings/src\""]}
@@ -68,6 +68,8 @@ export declare const effectsButtonStyles: (theme: Theme) => IButtonStyles;
68
68
  /** @private */
69
69
  export declare const fillWidth: string;
70
70
  /** @private */
71
+ export declare const configurationCenteredContent: (fillsHeight: boolean, hasLogo?: boolean | undefined) => string;
72
+ /** @private */
71
73
  export declare const panelStyles: Partial<IPanelStyles>;
72
74
  /** @private */
73
75
  export declare const panelFocusProps: IFocusTrapZoneProps;
@@ -8,6 +8,8 @@ export const CONFIGURATION_PAGE_SECTION_MIN_WIDTH_REM = 11;
8
8
  export const CONFIGURATION_PAGE_SECTION_MAX_WIDTH_REM = 20.625;
9
9
  /** @private */
10
10
  export const CONFIGURATION_PAGE_SECTION_HEIGHT_REM = 13.625;
11
+ const LOGO_HEIGHT_REM = 3;
12
+ const LOGO_MARGIN_BOTTOM_REM = 1;
11
13
  /**
12
14
  * @private
13
15
  */
@@ -192,6 +194,17 @@ export const fillWidth = mergeStyles({
192
194
  position: 'relative'
193
195
  });
194
196
  /** @private */
197
+ export const configurationCenteredContent = (fillsHeight, hasLogo) => mergeStyles({
198
+ width: '100%',
199
+ position: 'relative',
200
+ // If the content does not fill the height, center it vertically.
201
+ // We do not include the logo in the centering per design. This allows it to fade
202
+ // in and not shift the content. To exclude the logo, we subtract the logo height
203
+ // and margin from the actual height. This allows the flex box's natural centering
204
+ // to appropriately center the content.
205
+ height: `calc(100% - ${!fillsHeight && hasLogo ? `${LOGO_HEIGHT_REM + LOGO_MARGIN_BOTTOM_REM}rem` : '0rem'})`
206
+ });
207
+ /** @private */
195
208
  export const panelStyles = {
196
209
  content: {
197
210
  display: 'flex',
@@ -220,8 +233,12 @@ export const logoStyles = (shape) => ({
220
233
  overflow: 'initial',
221
234
  display: 'flex',
222
235
  justifyContent: 'center',
223
- marginBottom: '1rem'
236
+ marginBottom: `${LOGO_MARGIN_BOTTOM_REM}rem`
224
237
  },
225
- image: { borderRadius: shape === 'circle' ? '100%' : undefined, height: '3rem', width: '3rem' }
238
+ image: {
239
+ borderRadius: shape === 'circle' ? '100%' : undefined,
240
+ height: `${LOGO_HEIGHT_REM}rem`,
241
+ width: `${LOGO_HEIGHT_REM}rem` // width should match height
242
+ }
226
243
  });
227
244
  //# sourceMappingURL=CallConfiguration.styles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CallConfiguration.styles.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAKL,WAAW,EAMX,eAAe,EAEhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,yCAAgC;AAEnD,eAAe;AACf,MAAM,CAAC,MAAM,wCAAwC,GAAG,EAAE,CAAC;AAC3D,eAAe;AACf,MAAM,CAAC,MAAM,wCAAwC,GAAG,MAAM,CAAC;AAC/D,eAAe;AACf,MAAM,CAAC,MAAM,qCAAqC,GAAG,MAAM,CAAC;AAE5D;;GAEG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAiB;IAC3D,WAAW,EAAE,MAAM;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAiB;IAC1D,WAAW,EAAE,QAAQ;CACtB,CAAC;AAEF,eAAe;AACf,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,OAAgB,EAAE,kBAA2B,EAAgB,EAAE,CAAC,CAAC;IAC3G,IAAI,EAAE;QACJ,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,qBAAqB;QAC9B,QAAQ,EAAE,OAAO;YACf,CAAC,CAAC,OAAO,CAAC,oHAAoH;YAC9H,CAAC,CAAC,OAAO;QACX,SAAS,EAAE,OAAO;YAChB,CAAC,CAAC,OAAO,CAAC,gEAAgE;YAC1E,CAAC,CAAC,OAAO;QACX,UAAU,EAAE,CAAC,kBAAkB;YAC7B,CAAC,CAAC,SAAS;YACX,CAAC,iBACG,OAAO,EAAE,IAAI,EACb,QAAQ,EAAE,UAAU,EACpB,GAAG,EAAE,CAAC,EACN,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,CAAC,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,OAAO,kBAAkB,GAAG,EAC7C,cAAc,EAAE,OAAO,EACvB,kBAAkB,EAAE,QAAQ,IACzB,eAAe,CAAC,SAAS,CAC7B;KACN;CACF,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAiB;IACrD,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,GAAG,wCAAwC,KAAK;QAC1D,QAAQ,EAAE,GAAG,wCAAwC,KAAK;KAC3D;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAAa,EAAU,EAAE,CAC/D,WAAW,CAAC;IACV,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,GAAG,qCAAqC,KAAK;IACrD,OAAO,EAAE,MAAM;IACf,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc;IAC1C,MAAM,EAAE,mBAAmB,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE;IACvD,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU;IACnC,sEAAsE;IACtE,sFAAsF;IACtF,uFAAuF;IACvF,yBAAyB;IACzB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE;QACT,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,UAAU;QACpB,GAAG,EAAE,CAAC;QACN,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;QAC/B,OAAO,EAAE,GAAG;QACZ,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc;KAC3C;CACF,CAAC,CAAC;AAEL;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,WAAW,CAAC;IACpD,QAAQ,EAAE,SAAS;IACnB,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE,GAAG;CAChB,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,WAAW,CAAC;IACnD,QAAQ,EAAE,WAAW;IACrB,UAAU,EAAE,UAAU;IACtB,UAAU,EAAE,GAAG;IACf,SAAS,EAAE,QAAQ;CACpB,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAiB;IACtD,IAAI,EAAE;QACJ,SAAS,EAAE,QAAQ;QACnB,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC;QACvB,SAAS,EAAE,QAAQ;KACpB;CACF,CAAC;AAEF,MAAM,gBAAgB,GAAW;IAC/B,QAAQ,EAAE,QAAQ;IAClB,UAAU,EAAE,SAAS;IACrB,SAAS,EAAE,SAAS;CACrB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,WAAW,mBAC7C,gBAAgB,EACnB,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,WAAW,iCAC5C,gBAAgB,KACnB,SAAS,EAAE,QAAQ,IACnB,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAAiB;IAChE,IAAI,EAAE;QACJ,UAAU,EAAE,UAAU;KACvB;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAiB;IAC/D,IAAI,EAAE;QACJ,SAAS,EAAE,QAAQ;KACpB;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,WAAW,CAAC;IACpD,KAAK,EAAE,MAAM;IACb,QAAQ,EAAE,OAAO;IACjB,YAAY,EAAE,SAAS;CACxB,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,WAAW,CAAC;IACrD,YAAY,EAAE,SAAS;IACvB,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,SAAS;CAClB,CAAC,CAAC;AAEH,eAAe;AACf,MAAM,CAAC,MAAM,0CAA0C,GAAqB;IAC1E,IAAI,EAAE;QACJ,UAAU,EAAE,QAAQ;KACrB;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAY,EAAiB,EAAE;IACjE,OAAO;QACL,IAAI,EAAE;YACJ,UAAU,EAAE,aAAa;YACzB,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY;YACjC,oEAAoE;YACpE,OAAO,EAAE,aAAa;YACtB,gBAAgB,EAAE;gBAChB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY;aAClC;YACD,GAAG,EAAE;gBACH,MAAM,EAAE,MAAM;gBACd,KAAK,EAAE,MAAM;aACd;SACF;QACD,WAAW,EAAE;YACX,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY;SAClC;QACD,WAAW,EAAE;YACX,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY;SAClC;QACD,WAAW,EAAE;YACX,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY;SAClC;QACD,WAAW,EAAE;YACX,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY;SAClC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe;AACf,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC;IACnC,KAAK,EAAE,MAAM;IACb,QAAQ,EAAE,UAAU;CACrB,CAAC,CAAC;AAEH,eAAe;AACf,MAAM,CAAC,MAAM,WAAW,GAA0B;IAChD,OAAO,EAAE;QACP,OAAO,EAAE,MAAM;QACf,SAAS,EAAE,MAAM;QACjB,WAAW,EAAE,MAAM;QACnB,YAAY,EAAE,MAAM,CAAC,yBAAyB;KAC/C;IACD,QAAQ,EAAE;QACR,UAAU,EAAE,MAAM,CAAC,yBAAyB;KAC7C;IACD,iBAAiB,EAAE;QACjB,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,QAAQ;QACvB,MAAM,EAAE,MAAM;KACf;CACF,CAAC;AAEF,eAAe;AACf,MAAM,CAAC,MAAM,eAAe,GAAwB;IAClD,oBAAoB,EAAE,KAAK;CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAA0B,EAAgB,EAAE,CAAC,CAAC;IACvE,IAAI,EAAE;QACJ,QAAQ,EAAE,SAAS;QACnB,OAAO,EAAE,MAAM;QACf,cAAc,EAAE,QAAQ;QACxB,YAAY,EAAE,MAAM;KACrB;IACD,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;CAChG,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport {\n IStackItemStyles,\n IStackStyles,\n IStackTokens,\n IStyle,\n mergeStyles,\n IButtonStyles,\n Theme,\n IPanelStyles,\n IFocusTrapZoneProps,\n IImageStyles,\n AnimationStyles,\n ITheme\n} from '@fluentui/react';\nimport { _pxToRem } from '@internal/acs-ui-common';\n\n/** @private */\nexport const CONFIGURATION_PAGE_SECTION_MIN_WIDTH_REM = 11;\n/** @private */\nexport const CONFIGURATION_PAGE_SECTION_MAX_WIDTH_REM = 20.625;\n/** @private */\nexport const CONFIGURATION_PAGE_SECTION_HEIGHT_REM = 13.625;\n\n/**\n * @private\n */\nexport const configurationStackTokensDesktop: IStackTokens = {\n childrenGap: '1rem'\n};\n\n/**\n * @private\n */\nexport const configurationStackTokensMobile: IStackTokens = {\n childrenGap: '1.5rem'\n};\n\n/** @private */\nexport const configurationContainerStyle = (desktop: boolean, backgroundImageUrl?: string): IStackStyles => ({\n root: {\n height: '100%',\n width: '100%',\n padding: '2rem 1rem 2rem 1rem',\n minWidth: desktop\n ? '25rem' // sum of min-width from children + ChildrenGap * (nb of children - 1) + padding * 2 = (11 + 11) + (2 * 1) + 0.5 * 2\n : '16rem', // from LocalPreview: ControlBar width + 0.5 * 2 for spacing + padding * 2 = 14 + 0.5 * 2 + 0.5 * 2\n minHeight: desktop\n ? '22rem' // max height of SelectionContainer + padding * 2 = 21 + 0.5 * 2\n : '13rem',\n '::before': !backgroundImageUrl\n ? undefined\n : {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n zIndex: 0,\n width: '100%',\n height: '100%',\n backgroundImage: `url(${backgroundImageUrl})`,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n ...AnimationStyles.fadeIn500\n }\n }\n});\n\n/**\n * @private\n */\nexport const configurationSectionStyle: IStackStyles = {\n root: {\n width: '100%',\n minWidth: `${CONFIGURATION_PAGE_SECTION_MIN_WIDTH_REM}rem`,\n maxWidth: `${CONFIGURATION_PAGE_SECTION_MAX_WIDTH_REM}rem`\n }\n};\n\n/**\n * @private\n */\nexport const selectionContainerStyle = (theme: ITheme): string =>\n mergeStyles({\n width: '100%',\n height: `${CONFIGURATION_PAGE_SECTION_HEIGHT_REM}rem`,\n padding: '1rem',\n borderRadius: theme.effects.roundedCorner6,\n border: `0.0625rem solid ${theme.palette.neutralLight}`,\n boxShadow: theme.effects.elevation4,\n // Style the background of the container to have partial transparency.\n // Using `before:` pseudo-element to avoid having to wrap the content in an extra div.\n // Ideally rgba would be used but we cannot garauntee the format of theme.palette.white\n // to parse it correctly.\n position: 'relative',\n ':before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n zIndex: 0,\n background: theme.palette.white,\n opacity: 0.9,\n borderRadius: theme.effects.roundedCorner4\n }\n });\n\n/**\n * @private\n */\nexport const titleContainerStyleDesktop = mergeStyles({\n fontSize: '1.25rem',\n lineHeight: '1.75rem',\n fontWeight: 600\n});\n\n/**\n * @private\n */\nexport const titleContainerStyleMobile = mergeStyles({\n fontSize: '1.0625rem',\n lineHeight: '1.375rem',\n fontWeight: 600,\n textAlign: 'center'\n});\n\n/**\n * @private\n */\nexport const callDetailsContainerStyles: IStackStyles = {\n root: {\n textAlign: 'center',\n maxWidth: _pxToRem(700),\n alignSelf: 'center'\n }\n};\n\nconst callDetailsStyle: IStyle = {\n fontSize: '0.9375',\n lineHeight: '1.25rem',\n marginTop: '0.25rem'\n};\n\n/**\n * @private\n */\nexport const callDetailsStyleDesktop = mergeStyles({\n ...callDetailsStyle\n});\n\n/**\n * @private\n */\nexport const callDetailsStyleMobile = mergeStyles({\n ...callDetailsStyle,\n textAlign: 'center'\n});\n\n/**\n * @private\n */\nexport const startCallButtonContainerStyleDesktop: IStackStyles = {\n root: {\n paddingTop: '1.125rem'\n }\n};\n\n/**\n * @private\n */\nexport const startCallButtonContainerStyleMobile: IStackStyles = {\n root: {\n textAlign: 'center'\n }\n};\n\n/**\n * @private\n */\nexport const startCallButtonStyleMobile = mergeStyles({\n width: '100%',\n maxWidth: 'unset',\n borderRadius: '0.25rem'\n});\n\n/**\n * @private\n */\nexport const startCallButtonStyleDesktop = mergeStyles({\n borderRadius: '0.25rem',\n width: 'auto',\n height: '2.25rem'\n});\n\n/** @private */\nexport const cameraAndVideoEffectsContainerStyleDesktop: IStackItemStyles = {\n root: {\n alignItems: 'center'\n }\n};\n\n/**\n * @private\n */\nexport const effectsButtonStyles = (theme: Theme): IButtonStyles => {\n return {\n root: {\n background: 'transparent',\n border: 'none',\n color: theme.palette.themePrimary,\n // Top and bottom padding needs to be 5px to match the label padding\n padding: '5px 0.25rem',\n ':hover, :focus': {\n color: theme.palette.themePrimary\n },\n svg: {\n height: '1rem',\n width: '1rem'\n }\n },\n rootChecked: {\n color: theme.palette.themePrimary\n },\n rootHovered: {\n color: theme.palette.themePrimary\n },\n rootPressed: {\n color: theme.palette.themePrimary\n },\n rootFocused: {\n color: theme.palette.themePrimary\n }\n };\n};\n\n/** @private */\nexport const fillWidth = mergeStyles({\n width: '100%',\n position: 'relative'\n});\n\n/** @private */\nexport const panelStyles: Partial<IPanelStyles> = {\n content: {\n display: 'flex',\n flexBasis: '100%',\n paddingLeft: '0rem', // remove default padding\n paddingRight: '0rem' // remove default padding\n },\n commands: {\n paddingTop: '0rem' // remove default padding\n },\n scrollableContent: {\n display: 'flex',\n flexDirection: 'column',\n height: '100%'\n }\n};\n\n/** @private */\nexport const panelFocusProps: IFocusTrapZoneProps = {\n forceFocusInsideTrap: false\n};\n\n/**\n * @private\n */\nexport const logoStyles = (shape: 'circle' | 'square'): IImageStyles => ({\n root: {\n overflow: 'initial', // prevent the image being clipped\n display: 'flex',\n justifyContent: 'center',\n marginBottom: '1rem'\n },\n image: { borderRadius: shape === 'circle' ? '100%' : undefined, height: '3rem', width: '3rem' }\n});\n\"../../../../../acs-ui-common/src\""]}
1
+ {"version":3,"file":"CallConfiguration.styles.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport {\n IStackItemStyles,\n IStackStyles,\n IStackTokens,\n IStyle,\n mergeStyles,\n IButtonStyles,\n Theme,\n IPanelStyles,\n IFocusTrapZoneProps,\n IImageStyles,\n AnimationStyles,\n ITheme\n} from '@fluentui/react';\nimport { _pxToRem } from '@internal/acs-ui-common';\n\n/** @private */\nexport const CONFIGURATION_PAGE_SECTION_MIN_WIDTH_REM = 11;\n/** @private */\nexport const CONFIGURATION_PAGE_SECTION_MAX_WIDTH_REM = 20.625;\n/** @private */\nexport const CONFIGURATION_PAGE_SECTION_HEIGHT_REM = 13.625;\n\nconst LOGO_HEIGHT_REM = 3;\nconst LOGO_MARGIN_BOTTOM_REM = 1;\n\n/**\n * @private\n */\nexport const configurationStackTokensDesktop: IStackTokens = {\n childrenGap: '1rem'\n};\n\n/**\n * @private\n */\nexport const configurationStackTokensMobile: IStackTokens = {\n childrenGap: '1.5rem'\n};\n\n/** @private */\nexport const configurationContainerStyle = (desktop: boolean, backgroundImageUrl?: string): IStackStyles => ({\n root: {\n height: '100%',\n width: '100%',\n padding: '2rem 1rem 2rem 1rem',\n minWidth: desktop\n ? '25rem' // sum of min-width from children + ChildrenGap * (nb of children - 1) + padding * 2 = (11 + 11) + (2 * 1) + 0.5 * 2\n : '16rem', // from LocalPreview: ControlBar width + 0.5 * 2 for spacing + padding * 2 = 14 + 0.5 * 2 + 0.5 * 2\n minHeight: desktop\n ? '22rem' // max height of SelectionContainer + padding * 2 = 21 + 0.5 * 2\n : '13rem',\n '::before': !backgroundImageUrl\n ? undefined\n : {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n zIndex: 0,\n width: '100%',\n height: '100%',\n backgroundImage: `url(${backgroundImageUrl})`,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n ...AnimationStyles.fadeIn500\n }\n }\n});\n\n/**\n * @private\n */\nexport const configurationSectionStyle: IStackStyles = {\n root: {\n width: '100%',\n minWidth: `${CONFIGURATION_PAGE_SECTION_MIN_WIDTH_REM}rem`,\n maxWidth: `${CONFIGURATION_PAGE_SECTION_MAX_WIDTH_REM}rem`\n }\n};\n\n/**\n * @private\n */\nexport const selectionContainerStyle = (theme: ITheme): string =>\n mergeStyles({\n width: '100%',\n height: `${CONFIGURATION_PAGE_SECTION_HEIGHT_REM}rem`,\n padding: '1rem',\n borderRadius: theme.effects.roundedCorner6,\n border: `0.0625rem solid ${theme.palette.neutralLight}`,\n boxShadow: theme.effects.elevation4,\n // Style the background of the container to have partial transparency.\n // Using `before:` pseudo-element to avoid having to wrap the content in an extra div.\n // Ideally rgba would be used but we cannot garauntee the format of theme.palette.white\n // to parse it correctly.\n position: 'relative',\n ':before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n zIndex: 0,\n background: theme.palette.white,\n opacity: 0.9,\n borderRadius: theme.effects.roundedCorner4\n }\n });\n\n/**\n * @private\n */\nexport const titleContainerStyleDesktop = mergeStyles({\n fontSize: '1.25rem',\n lineHeight: '1.75rem',\n fontWeight: 600\n});\n\n/**\n * @private\n */\nexport const titleContainerStyleMobile = mergeStyles({\n fontSize: '1.0625rem',\n lineHeight: '1.375rem',\n fontWeight: 600,\n textAlign: 'center'\n});\n\n/**\n * @private\n */\nexport const callDetailsContainerStyles: IStackStyles = {\n root: {\n textAlign: 'center',\n maxWidth: _pxToRem(700),\n alignSelf: 'center'\n }\n};\n\nconst callDetailsStyle: IStyle = {\n fontSize: '0.9375',\n lineHeight: '1.25rem',\n marginTop: '0.25rem'\n};\n\n/**\n * @private\n */\nexport const callDetailsStyleDesktop = mergeStyles({\n ...callDetailsStyle\n});\n\n/**\n * @private\n */\nexport const callDetailsStyleMobile = mergeStyles({\n ...callDetailsStyle,\n textAlign: 'center'\n});\n\n/**\n * @private\n */\nexport const startCallButtonContainerStyleDesktop: IStackStyles = {\n root: {\n paddingTop: '1.125rem'\n }\n};\n\n/**\n * @private\n */\nexport const startCallButtonContainerStyleMobile: IStackStyles = {\n root: {\n textAlign: 'center'\n }\n};\n\n/**\n * @private\n */\nexport const startCallButtonStyleMobile = mergeStyles({\n width: '100%',\n maxWidth: 'unset',\n borderRadius: '0.25rem'\n});\n\n/**\n * @private\n */\nexport const startCallButtonStyleDesktop = mergeStyles({\n borderRadius: '0.25rem',\n width: 'auto',\n height: '2.25rem'\n});\n\n/** @private */\nexport const cameraAndVideoEffectsContainerStyleDesktop: IStackItemStyles = {\n root: {\n alignItems: 'center'\n }\n};\n\n/**\n * @private\n */\nexport const effectsButtonStyles = (theme: Theme): IButtonStyles => {\n return {\n root: {\n background: 'transparent',\n border: 'none',\n color: theme.palette.themePrimary,\n // Top and bottom padding needs to be 5px to match the label padding\n padding: '5px 0.25rem',\n ':hover, :focus': {\n color: theme.palette.themePrimary\n },\n svg: {\n height: '1rem',\n width: '1rem'\n }\n },\n rootChecked: {\n color: theme.palette.themePrimary\n },\n rootHovered: {\n color: theme.palette.themePrimary\n },\n rootPressed: {\n color: theme.palette.themePrimary\n },\n rootFocused: {\n color: theme.palette.themePrimary\n }\n };\n};\n\n/** @private */\nexport const fillWidth = mergeStyles({\n width: '100%',\n position: 'relative'\n});\n\n/** @private */\nexport const configurationCenteredContent = (fillsHeight: boolean, hasLogo?: boolean): string =>\n mergeStyles({\n width: '100%',\n position: 'relative',\n\n // If the content does not fill the height, center it vertically.\n // We do not include the logo in the centering per design. This allows it to fade\n // in and not shift the content. To exclude the logo, we subtract the logo height\n // and margin from the actual height. This allows the flex box's natural centering\n // to appropriately center the content.\n height: `calc(100% - ${!fillsHeight && hasLogo ? `${LOGO_HEIGHT_REM + LOGO_MARGIN_BOTTOM_REM}rem` : '0rem'})`\n });\n\n/** @private */\nexport const panelStyles: Partial<IPanelStyles> = {\n content: {\n display: 'flex',\n flexBasis: '100%',\n paddingLeft: '0rem', // remove default padding\n paddingRight: '0rem' // remove default padding\n },\n commands: {\n paddingTop: '0rem' // remove default padding\n },\n scrollableContent: {\n display: 'flex',\n flexDirection: 'column',\n height: '100%'\n }\n};\n\n/** @private */\nexport const panelFocusProps: IFocusTrapZoneProps = {\n forceFocusInsideTrap: false\n};\n\n/**\n * @private\n */\nexport const logoStyles = (shape: 'circle' | 'square'): IImageStyles => ({\n root: {\n overflow: 'initial', // prevent the image being clipped\n display: 'flex',\n justifyContent: 'center',\n marginBottom: `${LOGO_MARGIN_BOTTOM_REM}rem`\n },\n image: {\n borderRadius: shape === 'circle' ? '100%' : undefined,\n height: `${LOGO_HEIGHT_REM}rem`,\n width: `${LOGO_HEIGHT_REM}rem` // width should match height\n }\n});\n\"../../../../../acs-ui-common/src\""]}
@@ -1,7 +1,8 @@
1
+ import { ITheme } from '@fluentui/react';
1
2
  /**
2
3
  * @private
3
4
  */
4
- export declare const localPreviewContainerStyleDesktop: string;
5
+ export declare const localPreviewContainerStyleDesktop: (theme: ITheme) => string;
5
6
  /**
6
7
  * @private
7
8
  */
@@ -8,11 +8,11 @@ const localPreviewContainerStyle = {
8
8
  /**
9
9
  * @private
10
10
  */
11
- export const localPreviewContainerStyleDesktop = 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` }));
11
+ export const localPreviewContainerStyleDesktop = (theme) => 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`, border: `0.0625rem solid ${theme.palette.neutralLight}`, boxShadow: theme.effects.elevation4 }));
12
12
  /**
13
13
  * @private
14
14
  */
15
- export const localPreviewContainerStyleMobile = mergeStyles(Object.assign(Object.assign({}, localPreviewContainerStyle), { width: '100%', height: '100%' }));
15
+ export const localPreviewContainerStyleMobile = mergeStyles(Object.assign(Object.assign({}, localPreviewContainerStyle), { width: '100%', height: '100%', minHeight: `${CONFIGURATION_PAGE_SECTION_HEIGHT_REM}rem` }));
16
16
  /**
17
17
  * @private
18
18
  */
@@ -1 +1 @@
1
- {"version":3,"file":"LocalPreview.styles.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/styles/LocalPreview.styles.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAU,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EACL,qCAAqC,EACrC,wCAAwC,EACxC,wCAAwC,EACzC,MAAM,4BAA4B,CAAC;AAEpC,MAAM,0BAA0B,GAAW;IACzC,YAAY,EAAE,QAAQ;CACvB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,WAAW,iCACvD,0BAA0B,KAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,GAAG,qCAAqC,KAAK,EACrD,QAAQ,EAAE,GAAG,wCAAwC,KAAK,EAC1D,QAAQ,EAAE,GAAG,wCAAwC,KAAK,IAC1D,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,WAAW,iCACtD,0BAA0B,KAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,IACd,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC;IAC7C,QAAQ,EAAE,SAAS,CAAC,OAAO;CAC5B,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE;QACJ,YAAY,EAAE,QAAQ;QACtB,gCAAgC,EAAE;YAChC,WAAW,EAAE,SAAS;YACtB,MAAM,EAAE,WAAW;SACpB;KACF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,IAAI,EAAE;QACJ,gCAAgC,EAAE;YAChC,QAAQ,EAAE;gBACR,MAAM,EAAE,sBAAsB,CAAC,qDAAqD;aACrF;YACD,eAAe,EAAE;gBACf,MAAM,EAAE,kBAAkB;gBAC1B,OAAO,EAAE,kBAAkB;aAC5B;SACF;KACF;CACF,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { IStyle, mergeStyles } from '@fluentui/react';\nimport {\n CONFIGURATION_PAGE_SECTION_HEIGHT_REM,\n CONFIGURATION_PAGE_SECTION_MAX_WIDTH_REM,\n CONFIGURATION_PAGE_SECTION_MIN_WIDTH_REM\n} from './CallConfiguration.styles';\n\nconst localPreviewContainerStyle: IStyle = {\n borderRadius: '.25rem'\n};\n\n/**\n * @private\n */\nexport const localPreviewContainerStyleDesktop = mergeStyles({\n ...localPreviewContainerStyle,\n width: '100%',\n height: `${CONFIGURATION_PAGE_SECTION_HEIGHT_REM}rem`,\n minWidth: `${CONFIGURATION_PAGE_SECTION_MIN_WIDTH_REM}rem`,\n maxWidth: `${CONFIGURATION_PAGE_SECTION_MAX_WIDTH_REM}rem`\n});\n\n/**\n * @private\n */\nexport const localPreviewContainerStyleMobile = mergeStyles({\n ...localPreviewContainerStyle,\n width: '100%',\n height: '100%'\n});\n\n/**\n * @private\n */\nexport const cameraOffLabelStyle = mergeStyles({\n fontSize: '0.75rem' // 12px\n});\n\n/**\n * @private\n */\nexport const localPreviewTileStyle = {\n root: {\n borderRadius: '.25rem',\n '@media (forced-colors: active)': {\n borderColor: '#FFFFFF',\n border: '1px solid'\n }\n }\n};\n\n/**\n * @private\n */\nexport const localPreviewButtonStyle = {\n root: {\n '@media (forced-colors: active)': {\n ':focus': {\n border: '1px solid !important' // we need bang important to override fluents colours\n },\n ':focus::after': {\n border: 'unset !important', // we need bang important to override fluents colours\n outline: 'unset !important'\n }\n }\n }\n};\n"]}
1
+ {"version":3,"file":"LocalPreview.styles.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/styles/LocalPreview.styles.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAkB,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EACL,qCAAqC,EACrC,wCAAwC,EACxC,wCAAwC,EACzC,MAAM,4BAA4B,CAAC;AAEpC,MAAM,0BAA0B,GAAW;IACzC,YAAY,EAAE,QAAQ;CACvB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,KAAa,EAAU,EAAE,CACzE,WAAW,iCACN,0BAA0B,KAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,GAAG,qCAAqC,KAAK,EACrD,QAAQ,EAAE,GAAG,wCAAwC,KAAK,EAC1D,QAAQ,EAAE,GAAG,wCAAwC,KAAK,EAC1D,MAAM,EAAE,mBAAmB,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EACvD,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,IACnC,CAAC;AAEL;;GAEG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,WAAW,iCACtD,0BAA0B,KAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,GAAG,qCAAqC,KAAK,IACxD,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC;IAC7C,QAAQ,EAAE,SAAS,CAAC,OAAO;CAC5B,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE;QACJ,YAAY,EAAE,QAAQ;QACtB,gCAAgC,EAAE;YAChC,WAAW,EAAE,SAAS;YACtB,MAAM,EAAE,WAAW;SACpB;KACF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,IAAI,EAAE;QACJ,gCAAgC,EAAE;YAChC,QAAQ,EAAE;gBACR,MAAM,EAAE,sBAAsB,CAAC,qDAAqD;aACrF;YACD,eAAe,EAAE;gBACf,MAAM,EAAE,kBAAkB;gBAC1B,OAAO,EAAE,kBAAkB;aAC5B;SACF;KACF;CACF,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { IStyle, ITheme, mergeStyles } from '@fluentui/react';\nimport {\n CONFIGURATION_PAGE_SECTION_HEIGHT_REM,\n CONFIGURATION_PAGE_SECTION_MAX_WIDTH_REM,\n CONFIGURATION_PAGE_SECTION_MIN_WIDTH_REM\n} from './CallConfiguration.styles';\n\nconst localPreviewContainerStyle: IStyle = {\n borderRadius: '.25rem'\n};\n\n/**\n * @private\n */\nexport const localPreviewContainerStyleDesktop = (theme: ITheme): string =>\n mergeStyles({\n ...localPreviewContainerStyle,\n width: '100%',\n height: `${CONFIGURATION_PAGE_SECTION_HEIGHT_REM}rem`,\n minWidth: `${CONFIGURATION_PAGE_SECTION_MIN_WIDTH_REM}rem`,\n maxWidth: `${CONFIGURATION_PAGE_SECTION_MAX_WIDTH_REM}rem`,\n border: `0.0625rem solid ${theme.palette.neutralLight}`,\n boxShadow: theme.effects.elevation4\n });\n\n/**\n * @private\n */\nexport const localPreviewContainerStyleMobile = mergeStyles({\n ...localPreviewContainerStyle,\n width: '100%',\n height: '100%',\n minHeight: `${CONFIGURATION_PAGE_SECTION_HEIGHT_REM}rem`\n});\n\n/**\n * @private\n */\nexport const cameraOffLabelStyle = mergeStyles({\n fontSize: '0.75rem' // 12px\n});\n\n/**\n * @private\n */\nexport const localPreviewTileStyle = {\n root: {\n borderRadius: '.25rem',\n '@media (forced-colors: active)': {\n borderColor: '#FFFFFF',\n border: '1px solid'\n }\n }\n};\n\n/**\n * @private\n */\nexport const localPreviewButtonStyle = {\n root: {\n '@media (forced-colors: active)': {\n ':focus': {\n border: '1px solid !important' // we need bang important to override fluents colours\n },\n ':focus::after': {\n border: 'unset !important', // we need bang important to override fluents colours\n outline: 'unset !important'\n }\n }\n }\n};\n"]}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @private
3
+ *
4
+ * Base 64 string for encoding the call ended sound.
5
+ */
6
+ export declare const callEndedSoundString = "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cNyp/r3/////////////////8noIm6E9Du78SpYO//////////////+/PUsxIqIAAfgAABaOPOUZHLusSiqoo62PzyTLxWuzR+LCICsOSCTAbmCAKigsoaBcHxR4PiUNyaUUSNi7GCHQjkurj6lHHCOouguLChMnZh+49xh6jzhxDOLktojQeIcoZydLY2rHnsTTFkjLouTqIohx7MghS8DXSdmEw0bdkljYiS3dt6skUyTwltaepph////////+4w2Iy/////////FDTIHUmIKaiqqqMmocfT6gIjcxKxZIP30wZzJwW4g7iU/lMX+FSzDsAbc1bUIgMMgBfDhEwgowBgGUMD4AdzAdwCgwH4AtMAAAaRYFBMANAjBOmoSBigkDS5JgDIUDaiHUMHtZRsUOhmXMNaG8jprGaROwpplWXQqNuQ+8WblD99mcCxKefempozIHZdJ44Zd9yaapQROCow9jdW7NIhl9n5yaY4UDVoFhuUXZOuXGg3Up4aqOU79LeygWZbo5DqQuXxKHZZDcxE7Mbl8AS/ebXXiftrE2/WnjllRrUF337onLij0ym9L559ndgWDrkqd965RMRR2XaxiDlyqSaaTSR+OwY88sdyAXLn4ahtxIy/DcI3DUm68EMyF/ndjUsqQE9r4/////////////////ZirvsQhyMxSTwA8MHf//////////////ZmbEgeq9K4i3acg8AAHAAAf6juc5LUyVsUSq5KK4tkelrmfUO2rQ0BihI4EBlHmGoGhCSCOOcwL0UrhE6VIX9tGzjjCaCiffxEl4ZJUXWJ7RyU2YvZe2yzDN1cUmhRVBSFnplInNWHkoTjX2CzjdaXxJncqi+b7SWqY2VOT1JO8tAqcKZNqQOxI4n////////////+i+OBrgmUUv//////////vkZPAACk6FPwZ/QACesJhlwxgAKCoK/Bn9AAKUwqGbBoAA//8hg5eH90VmNSpZp8FOjYY+4y2nV2cfRjSCOUex8MVGsAgUZgcIIOZxkJBGAyAk5vKQ2YYEQBzGA0gF5gM4DCYKCAJCwDCYGOAuGAygCATEMCDMKnSoOWcAIOVFrck73Pethj9Slm7pyh0qZ0IQ9bTWLK5m4XGcqlFPQ8+8DqwvxALpSJpTytQfGWLzfaqyiWUsqfRfN6fgSWLqirV3WlUy5EcfOD45Dcpiz2RV0XAdGpDbd4pCI+/NaX5alUefWpOtIjT0U7rv/WdCHLMswhuJ2oerQmildNKNRmIxaYf61IKZTzowDANFEYw0t/+/ArtSSG7lqGaGS33lm4GdKX08Ov3GpQ/D3wbKX7glob922bP8qk/kMthkkMQVbn5fdpM4P///////////////6eco4akVH//////////////////K3RhbVN0YACKwAAAAAxnZEGEjjuxESQXGliFByWNJEAI7gwbQi1w9CQwPTRgeiIHx5wcguODgRRFZCYY9BkOlsUg+KWydYghXES7GZN4SJI8gqSh44abnMbNWcMsRaezrkpGWFU0ectObUGDUqKGY0cMOJgtD44RR0cb2NpUGipMQM1oxzhUYSUOLikFlY4wseO///////4XJeTrGSP///////2gbY5xzniw2bQADAOQSAwk0MGMQTHLDR708A0CAMFMdXWlzEBhBswiAETMCQAczARQFgwH0DuMDTABzAawAZZxUACGdkoB+miAiilQ1acjM+WoCLMiC8hvGuuW6yuLqqNJ8uBvnScp2nQbpRR4T+ZcxWNYZaNcaeKo92b259HbnGsVscIOnJ6wMi1eeFZoq4d8+pBis0OeE7kfNzk1PJXV8xpHlZWOdpV0FZb2+VhiRn93KRxfej1RsrjFVzl5osV6zsN2R9p4/c6v2WR4+gP2dyvdzUzpxzCbn0rykN4+u+iYgbiNe2t7PAgzt07LaLmJS0KLbyWg0cbamyrqRrNsbeXzyC1yriJhocpmeqdlAAMBHBTjCow3QxKcguNRxWgjSYg3MyF9m/MSYEsTCcAT0wKYCFMBTAaDAkQRQwPMAPMB/ADl7EAAUpuOgJ6WoAyC2LipSYQ1EcSfSJeLtipb3yaVRiG1HTKvMs6pEnFhx5VjatlSrxxUbAhywermyNquj3V91R8vFBLZcRIu7KyNDhuKQjM7S3QZocCzc9hSQ2mz3s8WI6TUNiXTldiXTlZ4wxpYj//vkRNaN2DJ5wBd94AMM7zfy77wAYqHA+A/l7cQ5OB8B/LG4qsZm23axtu05ruNlQvoEd7DqsSTYrddxIjg4w4MB0q252+bWJzWpX86fZ3kCOwKpDKOmis8iko1RmOsaimcnj+DEiMMFma38GE/67ylu5QrZdRqwosFwYOy6fUtrCeo/ZKtbizagmBtAm5gbIRoY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VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTEFNRTMuOTdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//vkZPAP8AAAaQAAAAgAAA0gAAABAAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTEFNRTMuOTdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV";
7
+ //# sourceMappingURL=CallEndedSound.d.ts.map