{"version":3,"file":"static/js/7781_e3c9b1f0cb41a08b91e1.js","mappings":"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","sources":["file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/StartCaptionsButton.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/StreamMedia.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/Survey/StarSurvey/StarSurvey.styles.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/Survey/StarSurvey/StarSurvey.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/Survey/TagsSurvey/TagsSurvey.styles.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/Survey/TagsSurvey/TagsSurvey.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/SystemMessage.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/TypingIndicator.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VerticalGallery.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoEffects/VideoEffectsItem.styles.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoEffects/VideoEffectsItem.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoEffects/VideoBackgroundEffectsPicker.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoGallery/styles/RemoteScreenShare.styles.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoGallery/RemoteScreenShare.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoGallery/LocalScreenShare.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoGallery/styles/DefaultLayout.styles.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoGallery/styles/Layout.styles.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoGallery/styles/ScrollableHorizontalGallery.style.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoGallery/ScrollableHorizontalGallery.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoGallery/OverflowGallery.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoGallery/DefaultLayout.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoGallery/FloatingLocalVideo.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoGallery/styles/FloatingLocalVideoLayout.styles.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoGallery/FloatingLocalVideoLayout.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoGallery/SpeakerVideoLayout.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoGallery/FocusContentLayout.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoGallery.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoGallery/ParticipantVideoTileOverlay.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoGallery/RemoteContentShareReactionOverlay.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoGallery/styles/FloatingLocalVideo.styles.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoGallery/styles/RemoteVideoTile.styles.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoGallery/styles/VideoGalleryResponsiveHorizontalGallery.styles.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoGallery/styles/VideoGalleryResponsiveVerticalGallery.styles.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoGallery/useVideoStreamLifecycleMaintainer.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoGallery/useVideoTileContextualMenuProps.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoGallery/utils/OverflowGalleryUtils.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoGallery/utils/reactionUtils.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoGallery/utils/videoGalleryLayoutUtils.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.22.0_kdreznvoqpxsq65rzwgw6zo7je/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/VideoTile.js"],"sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { ControlBarButton } from './ControlBarButton';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { _HighContrastAwareIcon } from './HighContrastAwareIcon';\nimport { defaultSpokenLanguage } from './utils';\nimport { useLocale } from '../localization';\n/**\n * a button to start or stop captions\n *\n * Can be used with {@link ControlBar}\n *\n * @param props - properties for the start captions button.\n * @public\n */\nexport const StartCaptionsButton = (props) => {\n const { onStartCaptions, onStopCaptions, onSetSpokenLanguage, currentSpokenLanguage } = props;\n const localeStrings = useLocale().strings.startCaptionsButton;\n const strings = Object.assign(Object.assign({}, localeStrings), props.strings);\n const onRenderStartIcon = () => {\n return React.createElement(_HighContrastAwareIcon, { disabled: props.disabled, iconName: \"CaptionsIcon\" });\n };\n const onRenderOffIcon = () => {\n return React.createElement(_HighContrastAwareIcon, { disabled: props.disabled, iconName: \"CaptionsOffIcon\" });\n };\n const options = useMemo(() => {\n return {\n spokenLanguage: currentSpokenLanguage === '' ? defaultSpokenLanguage : currentSpokenLanguage\n };\n }, [currentSpokenLanguage]);\n const [hasSetSpokenLanguage, setHasSetSpokenLanguage] = useState(false);\n const onToggleStartCaptions = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {\n if (props.checked) {\n onStopCaptions();\n }\n else {\n yield onStartCaptions(options);\n }\n }), [props.checked, onStartCaptions, onStopCaptions, options]);\n useEffect(() => {\n if (props.checked && !hasSetSpokenLanguage) {\n // set spoken language when start captions with a spoken language specified.\n // this is to fix the bug when a second user starts captions with a new spoken language, captions bot ignore that spoken language\n onSetSpokenLanguage(options.spokenLanguage);\n // we only need to call set spoken language once when first starting captions\n setHasSetSpokenLanguage(true);\n }\n }, [props.checked, onSetSpokenLanguage, options.spokenLanguage, hasSetSpokenLanguage]);\n return React.createElement(ControlBarButton, Object.assign({}, props, { strings: strings, onClick: onToggleStartCaptions !== null && onToggleStartCaptions !== void 0 ? onToggleStartCaptions : props.onClick, onRenderOnIcon: onRenderStartIcon, onRenderOffIcon: onRenderOffIcon }));\n};\n//# sourceMappingURL=StartCaptionsButton.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { mergeStyles, Spinner } from '@fluentui/react';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { invertedVideoInPipStyle, mediaContainer, container, loadingSpinnerContainer, loadSpinnerStyles } from './styles/StreamMedia.styles';\nimport { useTheme } from '../theming';\n/**\n * Utility component to convert an HTMLElement with a video stream into a JSX element.\n *\n * Use to convert an HTMLElement returned by headless calling API into a component that can be rendered as a {@link VideoTile}.\n *\n * @public\n */\nexport const StreamMedia = (props) => {\n const containerEl = useRef(null);\n const theme = useTheme();\n const { isMirrored, videoStreamElement, styles, loadingState = 'none' } = props;\n const [pipEnabled, setPipEnabled] = useState(false);\n useEffect(() => {\n const container = containerEl.current;\n if (!container) {\n return;\n }\n // If videoStreamElement changes, we clear the container to make sure we don't have duplicate, and replace it with\n // the new videoStreamElement. If videoStreamElement is undefined nothing is appended and container should be empty\n // and we don't render anyting.\n container.innerHTML = '';\n setPipEnabled(false);\n if (videoStreamElement) {\n videoStreamElement.addEventListener('enterpictureinpicture', () => {\n setPipEnabled(true);\n });\n videoStreamElement.addEventListener('leavepictureinpicture', () => {\n setPipEnabled(false);\n });\n container.appendChild(videoStreamElement);\n }\n return () => {\n container.innerHTML = '';\n setPipEnabled(false);\n };\n }, [videoStreamElement]);\n return React.createElement(\"div\", { className: container() },\n React.createElement(\"div\", { \"data-ui-id\": \"stream-media-container\", className: mergeStyles(isMirrored && pipEnabled ? invertedVideoInPipStyle(theme) : mediaContainer(theme), styles === null || styles === void 0 ? void 0 : styles.root), ref: containerEl }),\n loadingState === 'loading' && React.createElement(\"div\", { className: loadingSpinnerContainer() },\n React.createElement(Spinner, { \"data-ui-id\": \"stream-media-loading-spinner\", styles: loadSpinnerStyles })));\n};\n//# sourceMappingURL=StreamMedia.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { mergeStyles } from '@fluentui/react';\nimport { _pxToRem } from \"../../../../../acs-ui-common/src\";\n/**\n * @private\n */\nexport const helperTextStyle = (theme) => mergeStyles({\n fontWeight: 600,\n fontSize: _pxToRem(16),\n lineHeight: _pxToRem(20),\n color: theme.palette.neutralPrimary,\n paddingTop: _pxToRem(24)\n});\n/**\n * @private\n */\nexport const ratingHelperTextStyle = (theme) => mergeStyles({\n fontWeight: 400,\n fontSize: _pxToRem(12),\n lineHeight: _pxToRem(12),\n color: theme.palette.themePrimary,\n marginBottom: _pxToRem(8),\n marginTop: _pxToRem(8),\n textAlign: 'center'\n});\n/**\n * @private\n */\nexport const ratingStyles = (theme) => {\n return {\n root: {\n textAlign: 'center',\n height: 'auto',\n marginTop: _pxToRem(8)\n },\n ratingStarIsLarge: {\n height: 'auto',\n padding: 0\n },\n ratingStar: {\n transform: 'scale(1.4)',\n margin: _pxToRem(6),\n height: 'auto'\n },\n ratingStarFront: {\n color: theme.palette.themePrimary\n }\n };\n};\n/**\n * @private\n */\nexport const titleContainerClassName = mergeStyles({\n paddingBottom: _pxToRem(6)\n});\n//# sourceMappingURL=StarSurvey.styles.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport React, { useState, useCallback } from 'react';\nimport { Text, useTheme, Stack } from '@fluentui/react';\nimport { Rating, RatingSize } from '@fluentui/react';\nimport { helperTextStyle, ratingHelperTextStyle, ratingStyles, titleContainerClassName } from './StarSurvey.styles';\n/**\n * A component to allow users to send numerical ratings regarding call quality\n *\n * @internal\n */\nexport const _StarSurvey = (props) => {\n const { onStarRatingSelected, selectedIcon, unselectedIcon, strings } = props;\n const [rating, setRating] = useState(0);\n const [ratingHelperText, setRatingHelperText] = useState('');\n const theme = useTheme();\n const onRatingChange = useCallback((ev, rating) => {\n if (rating) {\n setRating(rating);\n switch (rating) {\n case 1:\n setRatingHelperText(strings === null || strings === void 0 ? void 0 : strings.starSurveyOneStarText);\n break;\n case 2:\n setRatingHelperText(strings === null || strings === void 0 ? void 0 : strings.starSurveyTwoStarText);\n break;\n case 3:\n setRatingHelperText(strings === null || strings === void 0 ? void 0 : strings.starSurveyThreeStarText);\n break;\n case 4:\n setRatingHelperText(strings === null || strings === void 0 ? void 0 : strings.starSurveyFourStarText);\n break;\n case 5:\n setRatingHelperText(strings === null || strings === void 0 ? void 0 : strings.starSurveyFiveStarText);\n break;\n default:\n break;\n }\n onStarRatingSelected === null || onStarRatingSelected === void 0 ? void 0 : onStarRatingSelected(rating);\n }\n }, [strings === null || strings === void 0 ? void 0 : strings.starSurveyOneStarText, strings === null || strings === void 0 ? void 0 : strings.starSurveyTwoStarText, strings === null || strings === void 0 ? void 0 : strings.starSurveyThreeStarText, strings === null || strings === void 0 ? void 0 : strings.starSurveyFourStarText, strings === null || strings === void 0 ? void 0 : strings.starSurveyFiveStarText, onStarRatingSelected]);\n return React.createElement(Stack, { verticalAlign: \"center\" },\n React.createElement(Stack, { className: titleContainerClassName },\n React.createElement(Text, { className: helperTextStyle(theme) }, strings === null || strings === void 0 ? void 0 : strings.starSurveyHelperText)),\n React.createElement(Rating, { max: 5, size: RatingSize.Large, defaultRating: 0, allowZeroStars: true, rating: rating, onChange: onRatingChange, styles: ratingStyles(theme), icon: selectedIcon !== null && selectedIcon !== void 0 ? selectedIcon : 'SurveyStarIconFilled', unselectedIcon: unselectedIcon !== null && unselectedIcon !== void 0 ? unselectedIcon : 'SurveyStarIcon', ariaLabelFormat: strings === null || strings === void 0 ? void 0 : strings.starRatingAriaLabel }),\n React.createElement(Text, { className: ratingHelperTextStyle(theme) }, ratingHelperText));\n};\n//# sourceMappingURL=StarSurvey.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { mergeStyles } from '@fluentui/react';\nimport { _pxToRem } from \"../../../../../acs-ui-common/src\";\n/**\n * @private\n */\nexport const questionTextStyle = (theme) => mergeStyles({\n fontWeight: 600,\n fontSize: _pxToRem(16),\n lineHeight: _pxToRem(20),\n color: theme.palette.neutralPrimary,\n marginTop: _pxToRem(8),\n marginBottom: _pxToRem(4)\n});\n/**\n * @private\n */\nexport const helperTextStyle = (theme) => mergeStyles({\n fontWeight: 400,\n fontSize: _pxToRem(12),\n lineHeight: _pxToRem(16),\n marginTop: _pxToRem(4),\n color: theme.palette.neutralSecondary\n});\n/**\n * @private\n */\nexport const checkboxClassName = mergeStyles({\n padding: _pxToRem(8),\n paddingLeft: 0\n});\n/**\n * @private\n */\nexport const freeFormTextCheckboxStyles = {\n root: {\n paddingBottom: _pxToRem(8),\n width: '100%'\n },\n label: {\n width: '100%'\n }\n};\n/**\n * @private\n */\nexport const freeFormTextFieldClassName = mergeStyles({\n width: '100%',\n marginLeft: _pxToRem(4),\n input: {\n padding: 0\n }\n});\n//# sourceMappingURL=TagsSurvey.styles.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n// Permit `any` in this file to handle the overloaded issue type. Todo: refactor CallSurvey to have PartialDeep<_CallSurvey> instead of any\n// for tracking incomplete survey responses.\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { Text, useTheme, Stack, Checkbox, Pivot, PivotItem, TextField } from '@fluentui/react';\nimport { _getKeys } from \"../../../../../acs-ui-common/src\";\nimport { checkboxClassName, questionTextStyle, helperTextStyle, freeFormTextFieldClassName, freeFormTextCheckboxStyles } from './TagsSurvey.styles';\n/**\n * A component to allow users to send numerical ratings regarding call quality\n *\n * @internal\n */\nexport const _TagsSurvey = (props) => {\n const { callIssuesToTag, categoryHeadings, onConfirm, strings, showFreeFormTextField } = props;\n const [selectedTags, setSelectedTags] = useState({});\n const [textResponse, setTextResponse] = useState({});\n const [selectedTextResponse, setSelectedTextResponse] = useState({});\n const [checkedTextFields, setCheckedTextFields] = useState([]);\n const tags = useMemo(() => {\n const tags = {\n overallRating: [],\n audioRating: [],\n videoRating: [],\n screenshareRating: []\n };\n _getKeys(callIssuesToTag).forEach(issueCategory => {\n _getKeys(callIssuesToTag[issueCategory]).map(issue => {\n const issueCapitalized = (issue === null || issue === void 0 ? void 0 : issue.charAt(0).toUpperCase()) + (issue === null || issue === void 0 ? void 0 : issue.slice(1));\n const issueMessages = callIssuesToTag[issueCategory];\n if (tags[issueCategory]) {\n tags[issueCategory].push({\n message: issueMessages[issue],\n issue: issueCapitalized\n });\n }\n else {\n tags[issueCategory] = [{\n message: issueMessages[issue],\n issue: issueCapitalized\n }];\n }\n });\n });\n return tags;\n }, [callIssuesToTag]);\n const onChange = React.useCallback((issueCategory, checked, issue) => {\n if (checked) {\n if (issue) {\n setSelectedTags(prevState => {\n const category = prevState === null || prevState === void 0 ? void 0 : prevState[issueCategory];\n if (category && category.issues) {\n category.issues = [category.issues, issue];\n }\n else {\n prevState[issueCategory] = {\n issues: [issue]\n };\n }\n return prevState;\n });\n }\n else {\n setCheckedTextFields([...checkedTextFields, issueCategory]);\n setSelectedTextResponse(prevState => {\n prevState[issueCategory] = textResponse[issueCategory];\n return prevState;\n });\n }\n }\n else {\n if (issue) {\n setSelectedTags(prevState => {\n var _a, _b;\n // 'prevState[issueCategory]?.issues as ...' typing is required here to avoid a typescript limitation\n // \"This expression is not callable\" caused by filter().\n // More information can be found here: https://github.com/microsoft/TypeScript/issues/44373\n const categoryIssues = (_b = (_a = prevState[issueCategory]) === null || _a === void 0 ? void 0 : _a.issues) === null || _b === void 0 ? void 0 : _b.filter((value) => value !== issue);\n return Object.assign(Object.assign({}, prevState), { [issueCategory]: Object.assign(Object.assign({}, (prevState[issueCategory] || {})), { issues: categoryIssues }) });\n });\n }\n else {\n setCheckedTextFields(checkedTextFields.filter(id => id !== issueCategory));\n setSelectedTextResponse(prevState => {\n delete prevState[issueCategory];\n return prevState;\n });\n }\n }\n }, [textResponse, checkedTextFields]);\n const theme = useTheme();\n const onRenderLabel = useCallback((issueCategory) => {\n return React.createElement(TextField, { key: issueCategory, className: freeFormTextFieldClassName, underlined: true, placeholder: strings === null || strings === void 0 ? void 0 : strings.tagsSurveyTextFieldDefaultText, onChange: (e, v) => {\n if (v) {\n setCheckedTextFields([...checkedTextFields, issueCategory]);\n setTextResponse(prevState => {\n prevState[issueCategory] = v;\n return prevState;\n });\n setSelectedTextResponse(prevState => {\n prevState[issueCategory] = v;\n return prevState;\n });\n }\n } });\n }, [strings === null || strings === void 0 ? void 0 : strings.tagsSurveyTextFieldDefaultText, checkedTextFields]);\n useEffect(() => {\n if (onConfirm) {\n onConfirm(selectedTags, selectedTextResponse);\n }\n }, [selectedTags, selectedTextResponse, onConfirm]);\n return React.createElement(React.Fragment, null,\n React.createElement(Stack, { verticalAlign: \"center\" },\n React.createElement(Text, { className: questionTextStyle(theme) }, strings === null || strings === void 0 ? void 0 : strings.tagsSurveyQuestion)),\n React.createElement(Pivot, null, _getKeys(tags).map((key, i) => {\n return React.createElement(PivotItem, { key: `key-${i}`, headerText: categoryHeadings[key], headerButtonProps: {\n 'data-order': i,\n 'data-title': key\n }, alwaysRender: true },\n tags[key].map((t, i) => {\n return React.createElement(Checkbox, { className: checkboxClassName, key: `checkBox_${i}`, label: t.message, onChange: (ev, checked) => onChange(key, checked !== null && checked !== void 0 ? checked : false, t.issue) });\n }),\n showFreeFormTextField && React.createElement(Checkbox, { checked: checkedTextFields.includes(key), styles: freeFormTextCheckboxStyles, onChange: (ev, checked) => onChange(key, checked !== null && checked !== void 0 ? checked : false), onRenderLabel: () => {\n return onRenderLabel(key);\n } }));\n })),\n React.createElement(Text, { className: helperTextStyle(theme) }, strings === null || strings === void 0 ? void 0 : strings.tagsSurveyHelperText));\n};\n//# sourceMappingURL=TagsSurvey.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { FontIcon, mergeStyles, Stack, Text } from '@fluentui/react';\nimport React, { useEffect, useState } from 'react';\nimport { systemMessageIconStyle } from './styles/SystemMessage.styles';\nimport LiveMessage from './Announcer/LiveMessage';\n/**\n * @private\n */\nexport const SystemMessage = (props) => {\n const { iconName, content } = props;\n const Icon = React.createElement(FontIcon, { iconName: iconName, className: mergeStyles(systemMessageIconStyle) });\n const [liveMessage, setLiveMessage] = useState('');\n useEffect(() => {\n // Timeout is needed to handle situation when the same user joins and leaves a chat a few times in a row, otherwise Narrator won't repeat the system message text.\n // Because delay value is not provided, setMessage function will be executed asynchronously in the next event cycle\n setTimeout(() => {\n setLiveMessage(content);\n });\n }, [content]);\n return React.createElement(React.Fragment, null,\n React.createElement(LiveMessage, { message: liveMessage, ariaLive: \"polite\", clearOnUnmount: true }),\n React.createElement(Stack, { horizontal: true, className: mergeStyles(props === null || props === void 0 ? void 0 : props.containerStyle), tabIndex: 0 },\n Icon,\n React.createElement(Text, { style: {\n wordBreak: 'break-word'\n }, role: \"status\", title: content, variant: 'small' }, content)));\n};\n//# sourceMappingURL=SystemMessage.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { typingIndicatorContainerStyle, typingIndicatorStringStyle } from './styles/TypingIndicator.styles';\nimport React from 'react';\nimport { mergeStyles, Stack, Text } from '@fluentui/react';\nimport { useLocale } from '../localization/LocalizationProvider';\nimport { useIdentifiers } from '../identifiers';\nconst MAXIMUM_LENGTH_OF_TYPING_USERS = 35;\n/**\n * Helper function to create element wrapping all typing users\n * @param typingUsers typing users\n * @param delimiter string to separate typing users\n * @param onRenderUser optional callback to render each typing user\n * @param userDisplayNameStyles optional additional IStyle to apply to each element containing users name\n * @returns element wrapping all typing users\n */\nconst getUsersElement = (typingUsers, delimiter, onRenderUser, userDisplayNameStyles) => {\n const userElements = [];\n typingUsers.forEach((user, index) => {\n let truncatedDisplayName = user.displayName;\n if (truncatedDisplayName && truncatedDisplayName.length > 50) {\n truncatedDisplayName = truncatedDisplayName.substring(0, 50) + '...';\n }\n userElements.push(onRenderUser ? onRenderUser(user) : React.createElement(Text, { className: mergeStyles(userDisplayNameStyles), key: `user-${index}` }, truncatedDisplayName));\n userElements.push(React.createElement(Text, { key: `comma-${index}` }, `${delimiter}`));\n });\n // pop last comma\n userElements.pop();\n return React.createElement(React.Fragment, null, userElements);\n};\n/**\n * Helper function to get a string of all typing users\n * @param typingUsers typing users\n * @param delimiter string to separate typing users\n * @returns string of all typing users\n */\nconst getNamesString = (typingUsers, delimiter) => {\n const userNames = [];\n typingUsers.forEach(user => {\n if (user.displayName) {\n userNames.push(user.displayName);\n }\n });\n return userNames.join(delimiter);\n};\n/**\n * Helper function to create span elements making up the typing indicator string\n * @param strings TypingIndicatorStrings containing strings to create span elements\n * @param usersElement JSX.Element containing all typing users\n * @param numTypingUsers number of total typing users\n * @param numUserNotMentioned number of typing users abbreviated\n * @returns array of span elements making up the typing indicator string\n */\nconst getSpanElements = (strings, usersElement, numTypingUsers, numTypingUsersAbbreviated) => {\n let variables = {};\n let typingString = '';\n if (numTypingUsers === 1) {\n typingString = strings.singleUser;\n variables = {\n user: usersElement\n };\n }\n else if (numTypingUsers > 1 && numTypingUsersAbbreviated === 0) {\n typingString = strings.multipleUsers;\n variables = {\n users: usersElement\n };\n }\n else if (numTypingUsers > 1 && numTypingUsersAbbreviated === 1) {\n typingString = strings.multipleUsersAbbreviateOne;\n variables = {\n users: usersElement\n };\n }\n else if (numTypingUsers > 1 && numTypingUsersAbbreviated > 1) {\n typingString = strings.multipleUsersAbbreviateMany;\n variables = {\n users: usersElement,\n numOthers: React.createElement(React.Fragment, null, numTypingUsersAbbreviated)\n };\n }\n return formatInlineElements(typingString, variables);\n};\n/**\n * Helper function to get the string making up the typing indicator string\n * @param strings TypingIndicatorStrings containing strings to create span elements\n * @param namesString string of all typing users\n * @param numTypingUsers number of total typing users\n * @param numUserNotMentioned number of typing users abbreviated\n * @returns typing indicator string\n */\nconst getIndicatorString = (strings, namesString, numTypingUsers, numTypingUsersAbbreviated) => {\n if (numTypingUsers === 1) {\n return strings.singleUser.replace('{user}', namesString);\n }\n if (numTypingUsers > 1 && numTypingUsersAbbreviated === 0) {\n return strings.multipleUsers.replace('{users}', namesString);\n }\n if (numTypingUsers > 1 && numTypingUsersAbbreviated === 1) {\n return strings.multipleUsersAbbreviateOne.replace('{users}', namesString);\n }\n if (numTypingUsers > 1 && numTypingUsersAbbreviated > 1) {\n return strings.multipleUsersAbbreviateMany.replace('{users}', namesString).replace('{numOthers}', `${numTypingUsersAbbreviated}`);\n }\n return undefined;\n};\nconst IndicatorComponent = (typingUsers, strings, onRenderUser, styles) => {\n const typingUsersMentioned = [];\n let totalCharacterCount = 0;\n const ids = useIdentifiers();\n for (const typingUser of typingUsers) {\n if (!typingUser.displayName) {\n continue;\n }\n let additionalCharCount = typingUser.displayName.length;\n // The typing users will be separated by the delimiter. We account for that additional length when we generate the final string.\n if (typingUsersMentioned.length > 0) {\n additionalCharCount += strings.delimiter.length;\n }\n if (totalCharacterCount + additionalCharCount <= MAXIMUM_LENGTH_OF_TYPING_USERS || typingUsersMentioned.length === 0) {\n typingUsersMentioned.push(typingUser);\n totalCharacterCount += additionalCharCount;\n }\n else {\n break;\n }\n }\n const usersElement = getUsersElement(typingUsersMentioned, strings.delimiter, onRenderUser, styles === null || styles === void 0 ? void 0 : styles.typingUserDisplayName);\n const numUserNotMentioned = typingUsers.length - typingUsersMentioned.length;\n const spanElements = getSpanElements(strings, usersElement, typingUsers.length, numUserNotMentioned);\n const labelString = getIndicatorString(strings, getNamesString(typingUsersMentioned, strings.delimiter), typingUsers.length, numUserNotMentioned);\n return React.createElement(\"div\", { \"data-ui-id\": ids.typingIndicator, className: mergeStyles(typingIndicatorStringStyle, styles === null || styles === void 0 ? void 0 : styles.typingString), key: \"typingStringKey\", role: \"status\", \"aria-label\": labelString }, spanElements);\n};\n/**\n * Component to notify local user when one or more participants in the chat thread are typing.\n *\n * @public\n */\nexport const TypingIndicator = (props) => {\n const { typingUsers, onRenderUser, styles } = props;\n const { strings } = useLocale();\n const typingUsersToRender = typingUsers.filter(typingUser => typingUser.displayName !== undefined);\n const indicatorComponent = IndicatorComponent(typingUsersToRender, Object.assign(Object.assign({}, strings.typingIndicator), props.strings), onRenderUser, styles);\n return React.createElement(Stack, { className: mergeStyles(typingIndicatorContainerStyle, styles === null || styles === void 0 ? void 0 : styles.root) }, indicatorComponent);\n};\n/**\n * Create an array of span elements by replacing the pattern \"\\{\\}\" in str with the elements\n * passed in as vars and creating inline elements from the rest\n *\n * @param str - The string to be formatted\n * @param vars - Variables to use to format the string\n * @returns formatted JSX elements\n */\nconst formatInlineElements = (str, vars) => {\n if (!str) {\n return [];\n }\n if (!vars) {\n return [];\n }\n const elements = [];\n // regex to search for the pattern \"{}\"\n const placeholdersRegex = /{(\\w+)}/g;\n const regex = RegExp(placeholdersRegex);\n let array = regex.exec(str);\n let prev = 0;\n while (array !== null) {\n if (prev !== array.index) {\n elements.push(React.createElement(Text, { key: elements.length }, str.substring(prev, array.index)));\n }\n elements.push(React.createElement(Text, { key: elements.length }, vars[array[0].substring(1, array[0].length - 1)]));\n prev = regex.lastIndex;\n array = regex.exec(str);\n }\n elements.push(React.createElement(Text, { key: elements.length }, str.substring(prev)));\n return elements;\n};\n//# sourceMappingURL=TypingIndicator.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { DefaultButton, Icon, mergeStyles, Stack, Text } from '@fluentui/react';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { useLocale } from '../localization';\nimport { useIdentifiers } from '../identifiers';\nimport { useTheme } from '../theming';\nimport { childrenContainerStyle, pageNavigationControlBarContainerStyle, participantPageCounter, leftRightButtonStyles, navIconStyles, rootStyle } from './styles/VerticalGallery.styles';\nimport { bucketize } from './utils/overFlowGalleriesUtils';\nimport { _formatString } from \"../../../acs-ui-common/src\";\n/**\n * VerticalGallery is a overflow gallery for participants in the {@link VideoGallery} component. Stacks\n * participants on the Y-axis of the VideoGallery for better use of horizontal space.\n *\n * @public\n */\nexport const VerticalGallery = (props) => {\n const { children, styles, childrenPerPage, onFetchTilesToRender } = props;\n const [page, setPage] = useState(1);\n const [buttonState, setButtonState] = useState({\n previous: true,\n next: true\n });\n const ids = useIdentifiers();\n const numberOfChildren = React.Children.count(children);\n const lastPage = Math.ceil(numberOfChildren / childrenPerPage);\n const indexesArray = useMemo(() => {\n return bucketize([...Array(numberOfChildren).keys()], childrenPerPage);\n }, [numberOfChildren, childrenPerPage]);\n useEffect(() => {\n var _a;\n if (onFetchTilesToRender && indexesArray) {\n onFetchTilesToRender((_a = indexesArray[page - 1]) !== null && _a !== void 0 ? _a : []);\n }\n }, [indexesArray, onFetchTilesToRender, page]);\n const firstIndexOfCurrentPage = (page - 1) * childrenPerPage;\n const clippedPage = firstIndexOfCurrentPage < numberOfChildren - 1 ? page : lastPage;\n const childrenOnCurrentPage = useMemo(() => {\n var _a;\n if (indexesArray[0] !== undefined) {\n return (_a = indexesArray[clippedPage - 1]) === null || _a === void 0 ? void 0 : _a.map(index => {\n return React.Children.toArray(children)[index];\n });\n }\n return;\n }, [indexesArray, clippedPage, children]);\n const showButtons = numberOfChildren > childrenPerPage;\n const onPreviousButtonClick = () => {\n setPage(page - 1);\n };\n const onNextButtonClick = () => {\n setPage(page + 1);\n };\n if (page > lastPage && lastPage > 0) {\n setPage(lastPage);\n }\n useEffect(() => {\n if (page > 1 && page < lastPage && showButtons) {\n // we are somewhere in between first and last pages.\n setButtonState({\n previous: false,\n next: false\n });\n }\n else if (page === 1 && showButtons) {\n // we are on the first page.\n setButtonState({\n previous: true,\n next: false\n });\n }\n else if (page === lastPage && showButtons) {\n // we are on the last page.\n setButtonState({\n previous: false,\n next: true\n });\n }\n }, [page, numberOfChildren, lastPage, showButtons]);\n const childContainerStyle = useMemo(() => {\n return {\n root: childrenContainerStyle(2)\n };\n }, []);\n const childrenStyles = useMemo(() => {\n return {\n root: styles === null || styles === void 0 ? void 0 : styles.children\n };\n }, [styles === null || styles === void 0 ? void 0 : styles.children]);\n if (childrenPerPage <= 0) {\n return React.createElement(React.Fragment, null);\n }\n return React.createElement(Stack, { className: mergeStyles(rootStyle, styles === null || styles === void 0 ? void 0 : styles.root) },\n React.createElement(Stack, { styles: childContainerStyle }, childrenOnCurrentPage === null || childrenOnCurrentPage === void 0 ? void 0 : childrenOnCurrentPage.map((child, i) => {\n return React.createElement(Stack.Item, { key: i, styles: childrenStyles, \"data-ui-id\": ids.verticalGalleryVideoTile }, child);\n })),\n showButtons && React.createElement(VerticalGalleryControlBar, { buttonsDisabled: buttonState, onPreviousButtonClick: onPreviousButtonClick, onNextButtonClick: onNextButtonClick, totalPages: lastPage, currentPage: page }));\n};\nconst VerticalGalleryControlBar = (props) => {\n const { onNextButtonClick, onPreviousButtonClick, buttonsDisabled, currentPage, totalPages, styles } = props;\n const theme = useTheme();\n const ids = useIdentifiers();\n const strings = useLocale().strings.verticalGallery;\n const pageCounterContainerStyles = useMemo(() => {\n return mergeStyles(pageNavigationControlBarContainerStyle, styles === null || styles === void 0 ? void 0 : styles.root);\n }, [styles === null || styles === void 0 ? void 0 : styles.root]);\n const previousButtonSyles = useMemo(() => {\n return mergeStyles(leftRightButtonStyles(theme), styles === null || styles === void 0 ? void 0 : styles.previousButton);\n }, [styles === null || styles === void 0 ? void 0 : styles.previousButton, theme]);\n const pageCounterStyles = useMemo(() => {\n return mergeStyles(participantPageCounter, styles === null || styles === void 0 ? void 0 : styles.counter);\n }, [styles === null || styles === void 0 ? void 0 : styles.counter]);\n const nextButtonsStyles = useMemo(() => {\n return mergeStyles(leftRightButtonStyles(theme), styles === null || styles === void 0 ? void 0 : styles.nextButton);\n }, [styles === null || styles === void 0 ? void 0 : styles.nextButton, theme]);\n const controlBarSpacing = {\n childrenGap: '0.5rem'\n };\n const previousButtonAriaLabel = strings.leftNavButtonAriaLabel ? _formatString(strings.leftNavButtonAriaLabel, {\n current: `${currentPage}`,\n total: `${totalPages}`\n }) : undefined;\n const nextButtonAriaLabel = strings.rightNavButtonAriaLabel ? _formatString(strings.rightNavButtonAriaLabel, {\n current: `${currentPage}`,\n total: `${totalPages}`\n }) : undefined;\n return React.createElement(Stack, { horizontalAlign: \"center\", tokens: controlBarSpacing, horizontal: true, className: pageCounterContainerStyles },\n React.createElement(DefaultButton, { className: previousButtonSyles, onClick: onPreviousButtonClick, disabled: buttonsDisabled === null || buttonsDisabled === void 0 ? void 0 : buttonsDisabled.previous, ariaLabel: previousButtonAriaLabel, \"data-ui-id\": ids.overflowGalleryLeftNavButton },\n React.createElement(Icon, { iconName: \"VerticalGalleryLeftButton\", styles: navIconStyles })),\n React.createElement(Text, { \"data-ui-id\": ids.verticalGalleryPageCounter, className: pageCounterStyles }, `${currentPage} / ${totalPages}`),\n React.createElement(DefaultButton, { className: nextButtonsStyles, onClick: onNextButtonClick, disabled: buttonsDisabled === null || buttonsDisabled === void 0 ? void 0 : buttonsDisabled.next, ariaLabel: nextButtonAriaLabel, \"data-ui-id\": ids.overflowGalleryRightNavButton },\n React.createElement(Icon, { iconName: \"VerticalGalleryRightButton\", styles: navIconStyles })));\n};\n//# sourceMappingURL=VerticalGallery.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nconst VideoEffectsItemContainerHeight = '3.375rem';\nconst VideoEffectsItemContainerWidth = '4.83rem';\nconst VideoEffectsItemContainerBorderHeight = '3.373rem';\nconst VideoEffectsItemContainerBorderWidth = '4.85rem';\nconst VideoEffectsItemContainerBorderSize = '2px';\n/** @private */\nexport const hiddenVideoEffectsItemContainerStyles = {\n root: {\n visibility: 'hidden',\n height: VideoEffectsItemContainerHeight,\n width: VideoEffectsItemContainerWidth,\n border: VideoEffectsItemContainerBorderSize\n }\n};\n/** @private */\nexport const videoEffectsItemContainerStyles = (args) => {\n const borderDefaultThickness = '1px';\n const borderActiveThickness = '2px';\n return {\n root: {\n background: args.disabled ? args.theme.palette.neutralQuaternaryAlt : undefined,\n backgroundImage: args.backgroundImage ? `url(${args.backgroundImage})` : undefined,\n backgroundPosition: 'center',\n backgroundSize: 'cover',\n borderRadius: '0.25rem',\n color: args.theme.palette.neutralPrimary,\n cursor: args.disabled ? 'default' : 'pointer',\n height: VideoEffectsItemContainerHeight,\n width: VideoEffectsItemContainerWidth,\n outlineOffset: '-1px',\n outline: args.isSelected ? `${borderActiveThickness} solid ${args.theme.palette.themePrimary}` : `${borderDefaultThickness} solid ${args.theme.palette.neutralQuaternaryAlt}`,\n ':hover': {\n boxSizing: 'border-box',\n width: VideoEffectsItemContainerBorderWidth,\n height: VideoEffectsItemContainerBorderHeight,\n outlineOffset: '-1px',\n outline: args.disabled && !args.isSelected ? `${borderDefaultThickness} solid ${args.theme.palette.neutralQuaternaryAlt}` : `${borderActiveThickness} solid ${args.theme.palette.themePrimary}`\n },\n padding: '0.5rem'\n }\n };\n};\n//# sourceMappingURL=VideoEffectsItem.styles.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { DefaultButton, Icon, mergeStyles, Stack, Text, TooltipHost, useTheme } from '@fluentui/react';\nimport React, { useCallback } from 'react';\nimport { videoEffectsItemContainerStyles } from './VideoEffectsItem.styles';\n/**\n * A component for displaying a Video Background Effect Option.\n *\n * @internal\n */\nexport const _VideoEffectsItem = (props) => {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n const theme = useTheme();\n const isSelected = (_a = props.isSelected) !== null && _a !== void 0 ? _a : false;\n const disabled = (_b = props.disabled) !== null && _b !== void 0 ? _b : false;\n const backgroundImage = (_c = props.backgroundProps) === null || _c === void 0 ? void 0 : _c.url;\n const iconContainerStyles = mergeStyles({\n height: '1.25rem'\n }, (_d = props.styles) === null || _d === void 0 ? void 0 : _d.iconContainer);\n const textContainerStyles = mergeStyles({\n height: '1.25rem',\n width: '100%',\n overflow: 'hidden'\n }, (_e = props.styles) === null || _e === void 0 ? void 0 : _e.textContainer);\n const containerStyles = useCallback(() => videoEffectsItemContainerStyles({\n theme,\n isSelected,\n disabled,\n backgroundImage\n }), [backgroundImage, disabled, isSelected, theme]);\n return React.createElement(TooltipHost, Object.assign({}, props.tooltipProps),\n React.createElement(Stack, { key: props.itemKey, className: mergeStyles((_f = props.styles) === null || _f === void 0 ? void 0 : _f.root), verticalAlign: \"center\", horizontalAlign: \"center\", \"data-ui-id\": `video-effects-item` },\n React.createElement(DefaultButton, { styles: containerStyles(), onClick: disabled ? undefined : () => { var _a; return (_a = props.onSelect) === null || _a === void 0 ? void 0 : _a.call(props, props.itemKey); }, componentRef: props.componentRef, ariaLabel: (_j = (_g = props.ariaLabel) !== null && _g !== void 0 ? _g : (_h = props.tooltipProps) === null || _h === void 0 ? void 0 : _h.content) !== null && _j !== void 0 ? _j : props.itemKey, \"aria-disabled\": props.disabled, role: \"radio\", \"aria-checked\": isSelected },\n React.createElement(Stack, { horizontalAlign: 'center', className: mergeStyles({\n width: '100%'\n }) },\n props.iconProps && React.createElement(Stack.Item, { className: iconContainerStyles },\n React.createElement(Icon, Object.assign({}, props.iconProps))),\n props.title && React.createElement(Stack.Item, { className: textContainerStyles },\n React.createElement(Text, { variant: \"small\", styles: {\n root: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n }\n } }, props.title))))));\n};\n//# sourceMappingURL=VideoEffectsItem.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { FocusZone, Label, mergeStyles, Stack } from '@fluentui/react';\nimport { useId, useWarnings } from '@fluentui/react-hooks';\nimport React from 'react';\nimport { chunk } from '../utils';\nimport { _VideoEffectsItem } from './VideoEffectsItem';\nimport { hiddenVideoEffectsItemContainerStyles } from './VideoEffectsItem.styles';\n/**\n * Picker for choosing a Video Background Effect.\n *\n * @remarks\n * This functions similar to a radio group of buttons, where the user can select one of the options.\n *\n * @internal\n */\nexport const _VideoBackgroundEffectsPicker = (props) => {\n var _a, _b, _c, _d, _e;\n const [componentControlledSelectedEffectKey, setComponentControlledSelectedEffectKey] = React.useState(props.defaultSelectedEffectKey);\n // Warn the developer if they use the component in an incorrect controlled way.\n useWarnings({\n name: 'VideoBackgroundEffectsPicker',\n props,\n controlledUsage: {\n onChangeProp: 'onChange',\n valueProp: 'selectedEffectKey',\n defaultValueProp: 'defaultSelectedEffectKey'\n }\n });\n const selectedEffect = (_a = props.selectedEffectKey) !== null && _a !== void 0 ? _a : componentControlledSelectedEffectKey;\n const setSelectedEffect = (selectedEffectKey) => {\n var _a;\n setComponentControlledSelectedEffectKey(selectedEffectKey);\n (_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, selectedEffectKey);\n };\n const convertedOptions = props.options.map(option => (Object.assign({ isSelected: option.itemKey === selectedEffect, onSelect: () => setSelectedEffect(option.itemKey) }, option)));\n const itemsPerRow = (_b = props.itemsPerRow) !== null && _b !== void 0 ? _b : 3;\n const optionsByRow = itemsPerRow === 'wrap' ? [convertedOptions] : chunk(convertedOptions, itemsPerRow);\n // If the final row is not full, fill it with hidden items to ensure layout.\n const fillCount = itemsPerRow === 'wrap' ? 0 : itemsPerRow - ((_d = (_c = optionsByRow[optionsByRow.length - 1]) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0);\n const effectsLabelId = useId('effects-radio-label');\n return React.createElement(FocusZone, null,\n React.createElement(Stack, { tokens: {\n childrenGap: '0.5rem'\n }, role: \"radiogroup\", \"aria-labelledby\": effectsLabelId },\n React.createElement(Label, { id: effectsLabelId, className: mergeStyles((_e = props.styles) === null || _e === void 0 ? void 0 : _e.label) }, props.label),\n optionsByRow.map((options, rowIndex) => {\n var _a;\n return React.createElement(Stack, { className: mergeStyles((_a = props.styles) === null || _a === void 0 ? void 0 : _a.rowRoot), wrap: props.itemsPerRow === 'wrap', horizontal: true, key: rowIndex, tokens: {\n childrenGap: '0.5rem'\n }, \"data-ui-id\": \"video-effects-picker-row\" },\n options.map((option, i) => {\n if (i === 0 && rowIndex === 0) {\n return React.createElement(_VideoEffectsItem, Object.assign({}, option, { itemKey: option.itemKey, key: option.itemKey, componentRef: props.componentRef }));\n }\n return React.createElement(_VideoEffectsItem, Object.assign({}, option, { itemKey: option.itemKey, key: option.itemKey }));\n }),\n fillCount > 0 && rowIndex === optionsByRow.length - 1 && Array.from({\n length: fillCount\n }).map((_, index) => React.createElement(Stack, { key: index, styles: hiddenVideoEffectsItemContainerStyles, \"data-ui-id\": \"video-effects-hidden-item\" })));\n })));\n};\n//# sourceMappingURL=VideoBackgroundEffectsPicker.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { mergeStyles } from '@fluentui/react';\n/**\n * @private\n */\nexport const loadingStyle = mergeStyles({\n height: '100%',\n width: '100%'\n});\n//# sourceMappingURL=RemoteScreenShare.styles.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { Spinner, SpinnerSize, Stack } from '@fluentui/react';\nimport React, { useEffect } from 'react';\nimport { useLocale } from '../../localization';\nimport { StreamMedia } from '../StreamMedia';\nimport { VideoTile } from '../VideoTile';\nimport { loadingStyle } from './styles/RemoteScreenShare.styles';\nimport { _formatString } from \"../../../../acs-ui-common/src\";\nimport { MeetingReactionOverlay } from '../MeetingReactionOverlay';\n/**\n * A memoized version of VideoTile for rendering the remote screen share stream. React.memo is used for a performance\n * boost by memoizing the same rendered component to avoid rerendering this when the parent component rerenders.\n * https://reactjs.org/docs/react-api.html#reactmemo\n */\nexport const RemoteScreenShare = React.memo((props) => {\n const { userId, displayName, isMuted, renderElement, onCreateRemoteStreamView, onDisposeRemoteStreamView, isReceiving, participantVideoScalingMode, reactionResources, localParticipant, remoteParticipants } = props;\n const locale = useLocale();\n if (!renderElement) {\n /**\n * TODO: We need to pass in the scaling mode of the screen share participant to this function because when we\n * call this it will recreate both streams (video and screen share) and we need to make sure that the scaling\n * mode is the same as before we started the screen share.\n *\n * We should deprecate the current function and replace it with a\n * createRemoteScreenShareStreamView and createRemoteVideoStreamView.\n */\n onCreateRemoteStreamView && onCreateRemoteStreamView(userId, participantVideoScalingMode);\n }\n useEffect(() => {\n return () => {\n // TODO: Isolate disposing behaviors for screenShare and videoStream\n onDisposeRemoteStreamView && onDisposeRemoteStreamView(userId);\n };\n }, [onDisposeRemoteStreamView, userId]);\n const loadingMessage = displayName ? _formatString(locale.strings.videoGallery.screenShareLoadingMessage, {\n participant: displayName\n }) : '';\n return React.createElement(VideoTile, { displayName: displayName, isMuted: isMuted, renderElement: renderElement ? React.createElement(StreamMedia, { videoStreamElement: renderElement, loadingState: isReceiving === false ? 'loading' : 'none' }) : undefined, onRenderPlaceholder: () => React.createElement(LoadingSpinner, { loadingMessage: loadingMessage }), overlay: reactionResources && React.createElement(MeetingReactionOverlay, { reactionResources: reactionResources, localParticipant: localParticipant, remoteParticipants: remoteParticipants, overlayMode: \"screen-share\" }) });\n});\n/**\n * LoadingSpinner component for displaying a loading spinner.\n *\n * @param {string} props.loadingMessage - The loading message to display.\n * @returns {JSX.Element} The JSX element representing the loading spinner.\n */\nexport const LoadingSpinner = (props) => {\n return React.createElement(Stack, { verticalAlign: \"center\", className: loadingStyle },\n React.createElement(Spinner, { label: props.loadingMessage, size: SpinnerSize.xSmall, \"aria-live\": 'assertive' }));\n};\n//# sourceMappingURL=RemoteScreenShare.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport React, { useEffect } from 'react';\nimport { useLocale } from '../../localization';\nimport { VideoTile } from '../VideoTile';\nimport { StreamMedia } from '../StreamMedia';\nimport { LoadingSpinner } from './RemoteScreenShare';\n/**\n * A memoized version of local screen share component. React.memo is used for a performance\n * boost by memoizing the same rendered component to avoid rerendering this when the parent component rerenders.\n * https://reactjs.org/docs/react-api.html#reactmemo\n */\nexport const LocalScreenShare = React.memo((props) => {\n const { localParticipant, renderElement, isAvailable, onCreateLocalStreamView, onDisposeLocalScreenShareStreamView } = props;\n const locale = useLocale();\n if (!renderElement) {\n onCreateLocalStreamView && onCreateLocalStreamView();\n }\n useEffect(() => {\n return () => {\n // TODO: Isolate disposing behaviors for screenShare and videoStream\n onDisposeLocalScreenShareStreamView && onDisposeLocalScreenShareStreamView();\n };\n }, [onDisposeLocalScreenShareStreamView]);\n if (!localParticipant || !localParticipant.isScreenSharingOn) {\n return null;\n }\n const displayName = !(localParticipant === null || localParticipant === void 0 ? void 0 : localParticipant.displayName) ? locale.strings.videoGallery.displayNamePlaceholder : localParticipant === null || localParticipant === void 0 ? void 0 : localParticipant.displayName;\n const loadingMessage = locale.strings.videoGallery.localScreenShareLoadingMessage;\n return React.createElement(VideoTile, { displayName: displayName, isMuted: localParticipant === null || localParticipant === void 0 ? void 0 : localParticipant.isMuted, renderElement: renderElement ? React.createElement(StreamMedia, { videoStreamElement: renderElement, loadingState: isAvailable === false ? 'loading' : 'none' }) : undefined, onRenderPlaceholder: () => React.createElement(LoadingSpinner, { loadingMessage: loadingMessage }) });\n});\n//# sourceMappingURL=LocalScreenShare.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n/**\n * @private\n */\nexport const rootLayoutStyle = {\n root: {\n position: 'relative',\n height: '100%',\n width: '100%',\n padding: '0.5rem'\n }\n};\n//# sourceMappingURL=DefaultLayout.styles.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n/**\n * @private\n */\nexport const videoGalleryLayoutGap = {\n childrenGap: '0.5rem'\n};\n//# sourceMappingURL=Layout.styles.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM, SMALL_HORIZONTAL_GALLERY_TILE_STYLE } from './VideoGalleryResponsiveHorizontalGallery.styles';\n/**\n * @private\n */\nexport const scrollableHorizontalGalleryStyles = {\n root: {\n width: '100%',\n minHeight: `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,\n paddingRight: '0.5rem',\n '> *': SMALL_HORIZONTAL_GALLERY_TILE_STYLE\n }\n};\n/**\n * @private\n */\nexport const scrollableHorizontalGalleryContainerStyles = {\n display: 'flex',\n minHeight: `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,\n overflow: 'scroll',\n '-ms-overflow-style': 'none',\n 'scrollbar-width': 'none',\n '::-webkit-scrollbar': {\n display: 'none'\n }\n};\n//# sourceMappingURL=ScrollableHorizontalGallery.style.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { Stack, mergeStyles } from '@fluentui/react';\nimport React, { useEffect, useRef } from 'react';\nimport { useDraggable } from 'react-use-draggable-scroll';\nimport { scrollableHorizontalGalleryContainerStyles, scrollableHorizontalGalleryStyles } from './styles/ScrollableHorizontalGallery.style';\n/**\n * Component to display elements horizontally in a scrollable container\n * @private\n */\nexport const ScrollableHorizontalGallery = (props) => {\n const { horizontalGalleryElements, onFetchTilesToRender, containerStyles } = props;\n useEffect(() => {\n const indexesArray = [...Array(horizontalGalleryElements === null || horizontalGalleryElements === void 0 ? void 0 : horizontalGalleryElements.length).keys()];\n if (onFetchTilesToRender && indexesArray) {\n onFetchTilesToRender(indexesArray !== null && indexesArray !== void 0 ? indexesArray : []);\n }\n }, [onFetchTilesToRender, horizontalGalleryElements === null || horizontalGalleryElements === void 0 ? void 0 : horizontalGalleryElements.length]);\n const ref = useRef();\n const { events: dragabbleEvents } = useDraggable(ref);\n return React.createElement(\"div\", Object.assign({ ref: ref }, dragabbleEvents, { className: mergeStyles(scrollableHorizontalGalleryContainerStyles, containerStyles) }),\n React.createElement(Stack, { \"data-ui-id\": \"scrollable-horizontal-gallery\", horizontal: true, styles: scrollableHorizontalGalleryStyles, tokens: {\n childrenGap: '0.5rem'\n } }, horizontalGalleryElements));\n};\n//# sourceMappingURL=ScrollableHorizontalGallery.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { concatStyleSets } from '@fluentui/react';\nimport React, { useMemo } from 'react';\nimport { ResponsiveHorizontalGallery } from '../ResponsiveHorizontalGallery';\nimport { ResponsiveVerticalGallery } from '../ResponsiveVerticalGallery';\nimport { HORIZONTAL_GALLERY_BUTTON_WIDTH, HORIZONTAL_GALLERY_GAP } from '../styles/HorizontalGallery.styles';\nimport { ScrollableHorizontalGallery } from './ScrollableHorizontalGallery';\nimport { SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM, horizontalGalleryContainerStyle, horizontalGalleryStyle } from './styles/VideoGalleryResponsiveHorizontalGallery.styles';\nimport { _convertPxToRem } from \"../../../../acs-ui-common/src\";\nimport { SMALL_FLOATING_MODAL_SIZE_REM } from './styles/FloatingLocalVideo.styles';\nimport { verticalGalleryContainerStyle, verticalGalleryStyle } from './styles/VideoGalleryResponsiveVerticalGallery.styles';\n/**\n * A ResponsiveHorizontalGallery styled for the {@link VideoGallery}\n *\n * @private\n */\nexport const OverflowGallery = (props) => {\n const { shouldFloatLocalVideo = false, onFetchTilesToRender, isNarrow = false, isShort = false, overflowGalleryElements, horizontalGalleryStyles, overflowGalleryPosition = 'horizontalBottom', verticalGalleryStyles, onChildrenPerPageChange, parentWidth } = props;\n const containerStyles = useMemo(() => {\n if (overflowGalleryPosition === 'verticalRight') {\n return verticalGalleryContainerStyle(shouldFloatLocalVideo, isNarrow, isShort);\n }\n return horizontalGalleryContainerStyle(shouldFloatLocalVideo, isNarrow);\n }, [shouldFloatLocalVideo, isShort, isNarrow, overflowGalleryPosition]);\n const galleryStyles = useMemo(() => {\n if (overflowGalleryPosition === 'verticalRight') {\n return concatStyleSets(verticalGalleryStyle(isShort), verticalGalleryStyles);\n }\n return concatStyleSets(horizontalGalleryStyle(isNarrow), horizontalGalleryStyles);\n }, [isNarrow, isShort, horizontalGalleryStyles, overflowGalleryPosition, verticalGalleryStyles]);\n const scrollableHorizontalGalleryContainerStyles = useMemo(() => {\n if (isNarrow && parentWidth) {\n return {\n width: shouldFloatLocalVideo ? `${_convertPxToRem(parentWidth) - SMALL_FLOATING_MODAL_SIZE_REM.width - 1}rem` : `${_convertPxToRem(parentWidth) - 1}rem`\n };\n }\n return undefined;\n }, [isNarrow, parentWidth, shouldFloatLocalVideo]);\n if (overflowGalleryPosition === 'verticalRight') {\n return React.createElement(ResponsiveVerticalGallery, { key: \"responsive-vertical-gallery\", containerStyles: containerStyles, verticalGalleryStyles: galleryStyles, controlBarHeightRem: HORIZONTAL_GALLERY_BUTTON_WIDTH, gapHeightRem: HORIZONTAL_GALLERY_GAP, isShort: isShort, onFetchTilesToRender: onFetchTilesToRender, onChildrenPerPageChange: onChildrenPerPageChange }, overflowGalleryElements ? overflowGalleryElements : [React.createElement(React.Fragment, null)]);\n }\n SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM;\n if (isNarrow) {\n // There are no pages for ScrollableHorizontalGallery so we will approximate the first 3 remote\n // participant tiles are visible\n onChildrenPerPageChange === null || onChildrenPerPageChange === void 0 ? void 0 : onChildrenPerPageChange(3);\n return React.createElement(ScrollableHorizontalGallery, { horizontalGalleryElements: overflowGalleryElements ? overflowGalleryElements : [React.createElement(React.Fragment, null)], onFetchTilesToRender: onFetchTilesToRender, key: \"scrollable-horizontal-gallery\", containerStyles: scrollableHorizontalGalleryContainerStyles });\n }\n return React.createElement(ResponsiveHorizontalGallery, { key: \"responsive-horizontal-gallery\", containerStyles: containerStyles, onFetchTilesToRender: onFetchTilesToRender, horizontalGalleryStyles: galleryStyles, buttonWidthRem: HORIZONTAL_GALLERY_BUTTON_WIDTH, gapWidthRem: HORIZONTAL_GALLERY_GAP, onChildrenPerPageChange: onChildrenPerPageChange }, overflowGalleryElements ? overflowGalleryElements : [React.createElement(React.Fragment, null)]);\n};\n//# sourceMappingURL=OverflowGallery.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { Stack } from '@fluentui/react';\nimport React, { useMemo, useState, useRef } from 'react';\nimport { GridLayout } from '../GridLayout';\nimport { isNarrowWidth } from '../utils/responsive';\nimport { isShortHeight } from '../utils/responsive';\nimport { rootLayoutStyle } from './styles/DefaultLayout.styles';\nimport { videoGalleryLayoutGap } from './styles/Layout.styles';\nimport { MAX_GRID_PARTICIPANTS_NOT_LARGE_GALLERY, renderTiles, useOrganizedParticipants } from './utils/videoGalleryLayoutUtils';\nimport { OverflowGallery } from './OverflowGallery';\n/**\n * DefaultLayout displays remote participants, local video component, and screen sharing component in\n * a grid an overflow gallery.\n *\n * @private\n */\nexport const DefaultLayout = (props) => {\n const { remoteParticipants = [], localParticipant, dominantSpeakers, localVideoComponent, screenShareComponent, onRenderRemoteParticipant, styles, maxRemoteVideoStreams, parentWidth, parentHeight, pinnedParticipantUserIds = [], overflowGalleryPosition = 'horizontalBottom', spotlightedParticipantUserIds = [] } = props;\n const isNarrow = parentWidth ? isNarrowWidth(parentWidth) : false;\n const isShort = parentHeight ? isShortHeight(parentHeight) : false;\n // This is for tracking the number of children in the first page of overflow gallery.\n // This number will be used for the maxOverflowGalleryDominantSpeakers when organizing the remote participants.\n // We need to add the local participant to the pinned participant count so we are placing the speakers correctly.\n const childrenPerPage = useRef(4);\n const remoteVideosOn = remoteParticipants.filter(p => { var _a; return (_a = p.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable; }).length > 0;\n const { gridParticipants, overflowGalleryParticipants } = useOrganizedParticipants({\n remoteParticipants,\n localParticipant,\n dominantSpeakers,\n maxGridParticipants: remoteVideosOn ? maxRemoteVideoStreams : MAX_GRID_PARTICIPANTS_NOT_LARGE_GALLERY,\n isScreenShareActive: !!screenShareComponent,\n maxOverflowGalleryDominantSpeakers: screenShareComponent ? childrenPerPage.current - (pinnedParticipantUserIds.length + 1) % childrenPerPage.current : childrenPerPage.current,\n pinnedParticipantUserIds,\n layout: 'default',\n spotlightedParticipantUserIds\n });\n /**\n * instantiate indexes available to render with indexes available that would be on first page\n *\n * For some components which do not strictly follow the order of the array, we might\n * re-render the initial tiles -> dispose them -> create new tiles, we need to take care of\n * this case when those components are here\n */\n const [indexesToRender, setIndexesToRender] = useState([]);\n let { gridTiles, overflowGalleryTiles } = renderTiles(gridParticipants, onRenderRemoteParticipant, maxRemoteVideoStreams, indexesToRender, overflowGalleryParticipants, dominantSpeakers);\n if (localVideoComponent) {\n if (screenShareComponent || spotlightedParticipantUserIds.length > 0) {\n overflowGalleryTiles = [localVideoComponent].concat(overflowGalleryTiles);\n }\n else {\n gridTiles = [localVideoComponent].concat(gridTiles);\n }\n }\n const overflowGallery = useMemo(() => {\n if (overflowGalleryTiles.length === 0) {\n return null;\n }\n return React.createElement(OverflowGallery, { isNarrow: isNarrow, isShort: isShort, shouldFloatLocalVideo: false, overflowGalleryElements: overflowGalleryTiles, horizontalGalleryStyles: styles === null || styles === void 0 ? void 0 : styles.horizontalGallery, verticalGalleryStyles: styles === null || styles === void 0 ? void 0 : styles.verticalGallery, overflowGalleryPosition: overflowGalleryPosition, onFetchTilesToRender: setIndexesToRender, onChildrenPerPageChange: (n) => {\n childrenPerPage.current = n;\n }, parentWidth: parentWidth });\n }, [isNarrow, isShort, overflowGalleryTiles, styles === null || styles === void 0 ? void 0 : styles.horizontalGallery, overflowGalleryPosition, setIndexesToRender, styles === null || styles === void 0 ? void 0 : styles.verticalGallery, parentWidth]);\n return React.createElement(Stack, { horizontal: overflowGalleryPosition === 'verticalRight', styles: rootLayoutStyle, tokens: videoGalleryLayoutGap },\n props.overflowGalleryPosition === 'horizontalTop' ? overflowGallery : React.createElement(React.Fragment, null),\n screenShareComponent ? screenShareComponent : React.createElement(GridLayout, { key: \"grid-layout\", styles: styles === null || styles === void 0 ? void 0 : styles.gridLayout }, gridTiles),\n overflowGalleryTrampoline(overflowGallery, props.overflowGalleryPosition));\n};\nconst overflowGalleryTrampoline = (gallery, galleryPosition) => {\n return galleryPosition !== 'horizontalTop' ? gallery : React.createElement(React.Fragment, null);\n return gallery;\n};\n//# sourceMappingURL=DefaultLayout.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { ContextualMenu, Stack } from '@fluentui/react';\nimport { _convertRemToPx } from \"../../../../acs-ui-common/src\";\nimport React, { useMemo } from 'react';\nimport { useTheme } from '../../theming';\nimport { _ModalClone } from '../ModalClone/ModalClone';\nimport { floatingLocalVideoModalStyle, floatinglocalVideoModalInitialPositionGapRem } from './styles/FloatingLocalVideo.styles';\nimport { useLocale } from '../../localization';\nconst DRAG_OPTIONS = {\n moveMenuItemText: 'Move',\n closeMenuItemText: 'Close',\n menu: ContextualMenu,\n keepInBounds: true\n};\n// Manually override the max position used to keep the modal in the bounds of its container.\n// This is a workaround for: https://github.com/microsoft/fluentui/issues/20122\n// Because our modal starts in the bottom right corner, we can say that this is the max (i.e. rightmost and bottomost)\n// position the modal can be dragged to.\nconst modalMaxDragPosition = {\n x: _convertRemToPx(floatinglocalVideoModalInitialPositionGapRem),\n y: _convertRemToPx(floatinglocalVideoModalInitialPositionGapRem)\n};\n/**\n * @private\n */\nexport const FloatingLocalVideo = (props) => {\n var _a;\n const { localVideoComponent, layerHostId, localVideoSizeRem, parentWidth, parentHeight } = props;\n const theme = useTheme();\n const strings = useLocale().strings.videoGallery;\n // The minimum drag position is the top left of the video gallery. i.e. the modal (PiP) should not be able\n // to be dragged offscreen and these are the top and left bounds of that calculation.\n const modalMinDragPosition = useMemo(() => parentWidth && parentHeight ? {\n // We use -parentWidth/Height because our modal is positioned to start in the bottom right,\n // hence (0,0) is the bottom right of the video gallery.\n x: -parentWidth + _convertRemToPx(localVideoSizeRem.width) + _convertRemToPx(floatinglocalVideoModalInitialPositionGapRem),\n y: -parentHeight + _convertRemToPx(localVideoSizeRem.height) + _convertRemToPx(floatinglocalVideoModalInitialPositionGapRem)\n } : undefined, [parentHeight, parentWidth, localVideoSizeRem.width, localVideoSizeRem.height]);\n const modalStyles = useMemo(() => floatingLocalVideoModalStyle(theme, localVideoSizeRem), [theme, localVideoSizeRem]);\n const layerProps = useMemo(() => ({\n hostId: layerHostId\n }), [layerHostId]);\n return React.createElement(_ModalClone, { isOpen: true, isModeless: true, dragOptions: DRAG_OPTIONS, styles: modalStyles, layerProps: layerProps, maxDragPosition: modalMaxDragPosition, minDragPosition: modalMinDragPosition, dataUiId: \"floating-local-video-host\" },\n React.createElement(Stack, { \"aria-label\": (_a = strings.localVideoMovementAriaLabel) !== null && _a !== void 0 ? _a : strings.localVideoMovementLabel, tabIndex: 0, role: 'dialog' }, localVideoComponent));\n};\n//# sourceMappingURL=FloatingLocalVideo.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n/**\n * @private\n */\nexport const rootLayoutStyle = {\n root: {\n position: 'relative',\n height: '100%',\n width: '100%'\n }\n};\n/**\n * @private\n */\nexport const innerLayoutStyle = {\n root: {\n position: 'relative',\n height: '100%',\n width: '100%',\n padding: '0.5rem'\n }\n};\n/**\n * @private\n */\nexport const layerHostStyle = {\n position: 'absolute',\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n // pointer events for layerHost set to none to make descendants interactive\n pointerEvents: 'none'\n};\n//# sourceMappingURL=FloatingLocalVideoLayout.styles.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { LayerHost, mergeStyles, Stack } from '@fluentui/react';\nimport { useId } from '@fluentui/react-hooks';\nimport React, { useMemo, useRef, useState } from 'react';\nimport { useTheme } from '../../theming';\nimport { GridLayout } from '../GridLayout';\nimport { isNarrowWidth } from '../utils/responsive';\nimport { isShortHeight } from '../utils/responsive';\nimport { FloatingLocalVideo } from './FloatingLocalVideo';\nimport { LARGE_FLOATING_MODAL_SIZE_REM, localVideoTileContainerStyle, localVideoTileWithControlsContainerStyle, LOCAL_VIDEO_TILE_ZINDEX, SMALL_FLOATING_MODAL_SIZE_REM } from './styles/FloatingLocalVideo.styles';\nimport { SHORT_VERTICAL_GALLERY_FLOATING_MODAL_SIZE_REM, VERTICAL_GALLERY_FLOATING_MODAL_SIZE_REM } from './styles/FloatingLocalVideo.styles';\nimport { innerLayoutStyle, layerHostStyle, rootLayoutStyle } from './styles/FloatingLocalVideoLayout.styles';\nimport { videoGalleryLayoutGap } from './styles/Layout.styles';\nimport { MAX_GRID_PARTICIPANTS_NOT_LARGE_GALLERY, renderTiles, useOrganizedParticipants } from './utils/videoGalleryLayoutUtils';\nimport { OverflowGallery } from './OverflowGallery';\n/**\n * FloatingLocalVideoLayout displays remote participants and a screen sharing component in\n * a grid and overflow gallery while floating the local video\n *\n * @private\n */\nexport const FloatingLocalVideoLayout = (props) => {\n const { remoteParticipants = [], dominantSpeakers, localVideoComponent, screenShareComponent, onRenderRemoteParticipant, styles, maxRemoteVideoStreams, showCameraSwitcherInLocalPreview, parentWidth, parentHeight, overflowGalleryPosition = 'horizontalBottom', pinnedParticipantUserIds = [], localVideoTileSize, spotlightedParticipantUserIds } = props;\n const theme = useTheme();\n const isNarrow = parentWidth ? isNarrowWidth(parentWidth) : false;\n const isShort = parentHeight ? isShortHeight(parentHeight) : false;\n // This is for tracking the number of children in the first page of overflow gallery.\n // This number will be used for the maxOverflowGalleryDominantSpeakers when organizing the remote participants.\n const childrenPerPage = useRef(4);\n const remoteVideosOn = remoteParticipants.filter(p => { var _a; return (_a = p.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable; }).length > 0;\n const { gridParticipants, overflowGalleryParticipants } = useOrganizedParticipants({\n remoteParticipants,\n dominantSpeakers,\n maxGridParticipants: remoteVideosOn ? maxRemoteVideoStreams : MAX_GRID_PARTICIPANTS_NOT_LARGE_GALLERY,\n isScreenShareActive: !!screenShareComponent,\n maxOverflowGalleryDominantSpeakers: screenShareComponent ? childrenPerPage.current - pinnedParticipantUserIds.length % childrenPerPage.current : childrenPerPage.current,\n pinnedParticipantUserIds,\n layout: 'floatingLocalVideo',\n spotlightedParticipantUserIds\n });\n /**\n * instantiate indexes available to render with indexes available that would be on first page\n *\n * For some components which do not strictly follow the order of the array, we might\n * re-render the initial tiles -> dispose them -> create new tiles, we need to take care of\n * this case when those components are here\n */\n const [indexesToRender, setIndexesToRender] = useState([]);\n const { gridTiles, overflowGalleryTiles } = renderTiles(gridParticipants, onRenderRemoteParticipant, maxRemoteVideoStreams, indexesToRender, overflowGalleryParticipants, dominantSpeakers);\n const shouldFloatLocalVideo = remoteParticipants.length > 0;\n if (!shouldFloatLocalVideo && localVideoComponent) {\n gridTiles.push(localVideoComponent);\n }\n const layerHostId = useId('layerhost');\n const localVideoSizeRem = useMemo(() => {\n if (isNarrow || localVideoTileSize === '9:16') {\n return SMALL_FLOATING_MODAL_SIZE_REM;\n }\n if ((overflowGalleryTiles.length > 0 || screenShareComponent) && overflowGalleryPosition === 'verticalRight') {\n return isNarrow ? SMALL_FLOATING_MODAL_SIZE_REM : isShort ? SHORT_VERTICAL_GALLERY_FLOATING_MODAL_SIZE_REM : VERTICAL_GALLERY_FLOATING_MODAL_SIZE_REM;\n }\n if ((overflowGalleryTiles.length > 0 || screenShareComponent) && overflowGalleryPosition === 'horizontalBottom') {\n return localVideoTileSize === '16:9' || !isNarrow ? LARGE_FLOATING_MODAL_SIZE_REM : SMALL_FLOATING_MODAL_SIZE_REM;\n }\n return LARGE_FLOATING_MODAL_SIZE_REM;\n }, [overflowGalleryTiles.length, isNarrow, screenShareComponent, isShort, overflowGalleryPosition, localVideoTileSize]);\n const wrappedLocalVideoComponent = localVideoComponent && shouldFloatLocalVideo || screenShareComponent && localVideoComponent ?\n // When we use showCameraSwitcherInLocalPreview it disables dragging to allow keyboard navigation.\n showCameraSwitcherInLocalPreview ? React.createElement(Stack, { className: mergeStyles(localVideoTileWithControlsContainerStyle(theme, localVideoSizeRem), {\n boxShadow: theme.effects.elevation8,\n zIndex: LOCAL_VIDEO_TILE_ZINDEX\n }) }, localVideoComponent) : overflowGalleryTiles.length > 0 || screenShareComponent ? React.createElement(Stack, { className: mergeStyles(localVideoTileContainerStyle(theme, localVideoSizeRem, !!screenShareComponent, overflowGalleryPosition)) }, localVideoComponent) : React.createElement(FloatingLocalVideo, { localVideoComponent: localVideoComponent, layerHostId: layerHostId, localVideoSizeRem: localVideoSizeRem, parentWidth: parentWidth, parentHeight: parentHeight }) : undefined;\n const overflowGallery = useMemo(() => {\n if (overflowGalleryTiles.length === 0 && !screenShareComponent) {\n return null;\n }\n return React.createElement(OverflowGallery, { isShort: isShort, onFetchTilesToRender: setIndexesToRender, isNarrow: isNarrow, shouldFloatLocalVideo: !!localVideoComponent, overflowGalleryElements: overflowGalleryTiles, horizontalGalleryStyles: styles === null || styles === void 0 ? void 0 : styles.horizontalGallery, verticalGalleryStyles: styles === null || styles === void 0 ? void 0 : styles.verticalGallery, overflowGalleryPosition: overflowGalleryPosition, onChildrenPerPageChange: (n) => {\n childrenPerPage.current = n;\n }, parentWidth: parentWidth });\n }, [isNarrow, isShort, screenShareComponent, overflowGalleryTiles, styles === null || styles === void 0 ? void 0 : styles.horizontalGallery, overflowGalleryPosition, setIndexesToRender, styles === null || styles === void 0 ? void 0 : styles.verticalGallery, parentWidth, localVideoComponent]);\n return React.createElement(Stack, { styles: rootLayoutStyle },\n wrappedLocalVideoComponent,\n React.createElement(LayerHost, { id: layerHostId, className: mergeStyles(layerHostStyle) }),\n React.createElement(Stack, { horizontal: overflowGalleryPosition === 'verticalRight', styles: innerLayoutStyle, tokens: videoGalleryLayoutGap },\n props.overflowGalleryPosition === 'horizontalTop' ? overflowGallery : React.createElement(React.Fragment, null),\n screenShareComponent ? screenShareComponent : React.createElement(GridLayout, { key: \"grid-layout\", styles: styles === null || styles === void 0 ? void 0 : styles.gridLayout }, gridTiles),\n overflowGalleryTrampoline(overflowGallery, props.overflowGalleryPosition)));\n};\nconst overflowGalleryTrampoline = (gallery, galleryPosition) => {\n return galleryPosition !== 'horizontalTop' ? gallery : React.createElement(React.Fragment, null);\n return gallery;\n};\n//# sourceMappingURL=FloatingLocalVideoLayout.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { LayerHost, Stack, mergeStyles, useTheme } from '@fluentui/react';\nimport { isNarrowWidth } from '../utils/responsive';\nimport { isShortHeight } from '../utils/responsive';\nimport React, { useMemo, useRef, useState } from 'react';\nimport { OverflowGallery } from './OverflowGallery';\nimport { SMALL_FLOATING_MODAL_SIZE_REM, LARGE_FLOATING_MODAL_SIZE_REM, localVideoTileContainerStyle } from './styles/FloatingLocalVideo.styles';\nimport { VERTICAL_GALLERY_FLOATING_MODAL_SIZE_REM, SHORT_VERTICAL_GALLERY_FLOATING_MODAL_SIZE_REM } from './styles/FloatingLocalVideo.styles';\nimport { renderTiles, useOrganizedParticipants } from './utils/videoGalleryLayoutUtils';\nimport { GridLayout } from '../GridLayout';\nimport { rootLayoutStyle } from './styles/FloatingLocalVideoLayout.styles';\nimport { layerHostStyle, innerLayoutStyle } from './styles/FloatingLocalVideoLayout.styles';\nimport { videoGalleryLayoutGap } from './styles/Layout.styles';\nimport { useId } from '@fluentui/react-hooks';\n/**\n * Layout for the gallery mode to highlight the current dominant speaker\n *\n * @private\n */\nexport const SpeakerVideoLayout = (props) => {\n const { remoteParticipants = [], dominantSpeakers, localVideoComponent, screenShareComponent, onRenderRemoteParticipant, styles, maxRemoteVideoStreams, parentWidth, parentHeight, overflowGalleryPosition = 'horizontalBottom', pinnedParticipantUserIds = [], localVideoTileSize } = props;\n const theme = useTheme();\n const isNarrow = parentWidth ? isNarrowWidth(parentWidth) : false;\n const isShort = parentHeight ? isShortHeight(parentHeight) : false;\n // This is for tracking the number of children in the first page of overflow gallery.\n // This number will be used for the maxOverflowGalleryDominantSpeakers when organizing the remote participants.\n const childrenPerPage = useRef(4);\n const { gridParticipants, overflowGalleryParticipants } = useOrganizedParticipants({\n remoteParticipants,\n dominantSpeakers,\n maxGridParticipants: maxRemoteVideoStreams,\n isScreenShareActive: !!screenShareComponent,\n maxOverflowGalleryDominantSpeakers: screenShareComponent ? childrenPerPage.current - pinnedParticipantUserIds.length % childrenPerPage.current : childrenPerPage.current,\n pinnedParticipantUserIds,\n layout: 'speaker'\n });\n /**\n * instantiate indexes available to render with indexes available that would be on first page\n *\n * For some components which do not strictly follow the order of the array, we might\n * re-render the initial tiles -> dispose them -> create new tiles, we need to take care of\n * this case when those components are here\n */\n const [indexesToRender, setIndexesToRender] = useState([]);\n const { gridTiles, overflowGalleryTiles } = renderTiles(gridParticipants, onRenderRemoteParticipant, maxRemoteVideoStreams, indexesToRender, overflowGalleryParticipants, dominantSpeakers);\n const shouldFloatLocalVideo = remoteParticipants.length > 0;\n if (!shouldFloatLocalVideo && localVideoComponent) {\n gridTiles.push(localVideoComponent);\n }\n const layerHostId = useId('layerhost');\n const localVideoSizeRem = useMemo(() => {\n if (isNarrow || localVideoTileSize === '9:16') {\n return SMALL_FLOATING_MODAL_SIZE_REM;\n }\n if ((overflowGalleryTiles.length > 0 || screenShareComponent) && overflowGalleryPosition === 'verticalRight') {\n return isNarrow ? SMALL_FLOATING_MODAL_SIZE_REM : isShort ? SHORT_VERTICAL_GALLERY_FLOATING_MODAL_SIZE_REM : VERTICAL_GALLERY_FLOATING_MODAL_SIZE_REM;\n }\n if ((overflowGalleryTiles.length > 0 || screenShareComponent) && overflowGalleryPosition === 'horizontalBottom') {\n return localVideoTileSize === '16:9' || !isNarrow ? LARGE_FLOATING_MODAL_SIZE_REM : SMALL_FLOATING_MODAL_SIZE_REM;\n }\n return LARGE_FLOATING_MODAL_SIZE_REM;\n }, [overflowGalleryTiles.length, isNarrow, screenShareComponent, isShort, overflowGalleryPosition, localVideoTileSize]);\n const wrappedLocalVideoComponent = localVideoComponent || screenShareComponent && localVideoComponent ? React.createElement(Stack, { className: mergeStyles(localVideoTileContainerStyle(theme, localVideoSizeRem, !!screenShareComponent, overflowGalleryPosition)) }, localVideoComponent) : undefined;\n const overflowGallery = useMemo(() => {\n if (overflowGalleryTiles.length === 0 && !screenShareComponent) {\n return null;\n }\n return React.createElement(OverflowGallery, { isShort: isShort, onFetchTilesToRender: setIndexesToRender, isNarrow: isNarrow, shouldFloatLocalVideo: !!localVideoComponent, overflowGalleryElements: overflowGalleryTiles, horizontalGalleryStyles: styles === null || styles === void 0 ? void 0 : styles.horizontalGallery, verticalGalleryStyles: styles === null || styles === void 0 ? void 0 : styles.verticalGallery, overflowGalleryPosition: overflowGalleryPosition, onChildrenPerPageChange: (n) => {\n childrenPerPage.current = n;\n }, parentWidth: parentWidth });\n }, [isNarrow, isShort, screenShareComponent, overflowGalleryTiles, styles === null || styles === void 0 ? void 0 : styles.horizontalGallery, overflowGalleryPosition, setIndexesToRender, styles === null || styles === void 0 ? void 0 : styles.verticalGallery, parentWidth, localVideoComponent]);\n return React.createElement(Stack, { styles: rootLayoutStyle },\n wrappedLocalVideoComponent,\n React.createElement(LayerHost, { id: layerHostId, className: mergeStyles(layerHostStyle) }),\n React.createElement(Stack, { horizontal: overflowGalleryPosition === 'verticalRight', styles: innerLayoutStyle, tokens: videoGalleryLayoutGap },\n props.overflowGalleryPosition === 'horizontalTop' ? overflowGallery : React.createElement(React.Fragment, null),\n screenShareComponent ? screenShareComponent : React.createElement(GridLayout, { key: \"grid-layout\", styles: styles === null || styles === void 0 ? void 0 : styles.gridLayout }, gridTiles),\n overflowGalleryTrampoline(overflowGallery, props.overflowGalleryPosition)));\n};\nconst overflowGalleryTrampoline = (gallery, galleryPosition) => {\n return galleryPosition !== 'horizontalTop' ? gallery : React.createElement(React.Fragment, null);\n return gallery;\n};\n//# sourceMappingURL=SpeakerVideoLayout.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { LayerHost, Stack, mergeStyles } from '@fluentui/react';\nimport React from 'react';\nimport { innerLayoutStyle, layerHostStyle, rootLayoutStyle } from './styles/FloatingLocalVideoLayout.styles';\nimport { videoGalleryLayoutGap } from './styles/Layout.styles';\nimport { useId } from '@fluentui/react-hooks';\n/**\n * Video gallery layout to focus on the screenshare stream that is present in the call.\n */\nexport const FocusedContentLayout = (props) => {\n const { screenShareComponent } = props;\n const layerHostId = useId('layerhost');\n return React.createElement(Stack, { styles: rootLayoutStyle },\n React.createElement(LayerHost, { id: layerHostId, className: mergeStyles(layerHostStyle) }),\n React.createElement(Stack, { styles: innerLayoutStyle, tokens: videoGalleryLayoutGap }, screenShareComponent ? screenShareComponent : React.createElement(React.Fragment, null)));\n};\n//# sourceMappingURL=FocusContentLayout.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { concatStyleSets, mergeStyles, Stack } from '@fluentui/react';\nimport React, { useCallback, useMemo, useRef } from 'react';\nimport { Announcer } from './Announcer';\nimport { useEffect } from 'react';\nimport { useLocale } from '../localization';\nimport { useTheme } from '../theming';\nimport { _RemoteVideoTile } from './RemoteVideoTile';\nimport { isNarrowWidth, _useContainerHeight, _useContainerWidth } from './utils/responsive';\nimport { LocalScreenShare } from './VideoGallery/LocalScreenShare';\nimport { RemoteScreenShare } from './VideoGallery/RemoteScreenShare';\nimport { _LocalVideoTile } from './LocalVideoTile';\nimport { DefaultLayout } from './VideoGallery/DefaultLayout';\nimport { FloatingLocalVideoLayout } from './VideoGallery/FloatingLocalVideoLayout';\nimport { useIdentifiers } from '../identifiers';\nimport { localVideoTileContainerStyles, videoGalleryOuterDivStyle } from './styles/VideoGallery.styles';\nimport { floatingLocalVideoTileStyle } from './VideoGallery/styles/FloatingLocalVideo.styles';\nimport { useId } from '@fluentui/react-hooks';\nimport { SpeakerVideoLayout } from './VideoGallery/SpeakerVideoLayout';\nimport { FocusedContentLayout } from './VideoGallery/FocusContentLayout';\n/**\n * @private\n * Currently the Calling JS SDK supports up to 4 remote video streams\n */\nexport const DEFAULT_MAX_REMOTE_VIDEO_STREAMS = 4;\n/**\n * @private\n * Styles to disable the selectivity of a text in video gallery\n */\nexport const unselectable = {\n '-webkit-user-select': 'none',\n '-webkit-touch-callout': 'none',\n '-moz-user-select': 'none',\n '-ms-user-select': 'none',\n 'user-select': 'none'\n};\n/**\n * @private\n * Set aside only 6 dominant speakers for remaining audio participants\n */\nexport const MAX_AUDIO_DOMINANT_SPEAKERS = 6;\n/**\n * @private\n * Default remote video tile menu options\n */\nexport const DEFAULT_REMOTE_VIDEO_TILE_MENU_OPTIONS = {\n kind: 'contextual'\n};\n/**\n * @private\n * Maximum number of remote video tiles that can be pinned\n */\nexport const MAX_PINNED_REMOTE_VIDEO_TILES = 4;\n/**\n * VideoGallery represents a layout of video tiles for a specific call.\n * It displays a {@link VideoTile} for the local user as well as for each remote participant who has joined the call.\n *\n * @public\n */\nexport const VideoGallery = (props) => {\n var _a, _b, _c, _d;\n const { localParticipant, remoteParticipants = [], localVideoViewOptions, remoteVideoViewOptions, dominantSpeakers, onRenderLocalVideoTile, onRenderRemoteVideoTile, onCreateLocalStreamView, onDisposeLocalStreamView, onCreateRemoteStreamView, onDisposeRemoteScreenShareStreamView, onDisposeLocalScreenShareStreamView, onDisposeRemoteVideoStreamView, styles, layout, onRenderAvatar, showMuteIndicator, maxRemoteVideoStreams = DEFAULT_MAX_REMOTE_VIDEO_STREAMS, showCameraSwitcherInLocalPreview, localVideoCameraCycleButtonProps, onPinParticipant: onPinParticipantHandler, onUnpinParticipant: onUnpinParticipantHandler, remoteVideoTileMenu = DEFAULT_REMOTE_VIDEO_TILE_MENU_OPTIONS, overflowGalleryPosition = 'horizontalBottom', localVideoTileSize = 'followDeviceOrientation', spotlightedParticipants, onStartLocalSpotlight, onStartRemoteSpotlight, onStopLocalSpotlight, onStopRemoteSpotlight, maxParticipantsToSpotlight, reactionResources, videoTilesOptions, onMuteParticipant } = props;\n const ids = useIdentifiers();\n const theme = useTheme();\n const localeStrings = useLocale().strings.videoGallery;\n const strings = useMemo(() => (Object.assign(Object.assign({}, localeStrings), props.strings)), [localeStrings, props.strings]);\n const drawerMenuHostIdFromProp = remoteVideoTileMenu && remoteVideoTileMenu.kind === 'drawer' ? remoteVideoTileMenu.hostId : undefined;\n const drawerMenuHostId = useId('drawerMenuHost', drawerMenuHostIdFromProp);\n const localTileNotInGrid = (layout === 'floatingLocalVideo' || layout === 'speaker') && remoteParticipants.length > 0;\n const containerRef = useRef(null);\n const containerWidth = _useContainerWidth(containerRef);\n const containerHeight = _useContainerHeight(containerRef);\n const isNarrow = containerWidth ? isNarrowWidth(containerWidth) : false;\n const [pinnedParticipantsState, setPinnedParticipantsState] = React.useState([]);\n const [selectedScalingModeState, setselectedScalingModeState] = React.useState({});\n const onUpdateScalingMode = useCallback((remoteUserId, scalingMode) => {\n setselectedScalingModeState(current => (Object.assign(Object.assign({}, current), { [remoteUserId]: {\n scalingMode,\n isMirrored: remoteVideoViewOptions === null || remoteVideoViewOptions === void 0 ? void 0 : remoteVideoViewOptions.isMirrored\n } })));\n }, [remoteVideoViewOptions === null || remoteVideoViewOptions === void 0 ? void 0 : remoteVideoViewOptions.isMirrored]);\n useEffect(() => {\n var _a;\n (_a = props.pinnedParticipants) === null || _a === void 0 ? void 0 : _a.forEach(pinParticipant => {\n var _a;\n if (!((_a = props.remoteParticipants) === null || _a === void 0 ? void 0 : _a.find(t => t.userId === pinParticipant))) {\n // warning will be logged in the console when invalid participant id is passed in pinned participants\n console.warn('Invalid pinned participant UserId :' + pinParticipant);\n }\n });\n }, [props.pinnedParticipants, props.remoteParticipants]);\n // Use pinnedParticipants from props but if it is not defined use the maintained state of pinned participants\n const pinnedParticipants = useMemo(() => { var _a; return (_a = props.pinnedParticipants) !== null && _a !== void 0 ? _a : pinnedParticipantsState.filter(pinnedParticipantId => remoteParticipants.find(remoteParticipant => remoteParticipant.userId === pinnedParticipantId)); }, [props.pinnedParticipants, pinnedParticipantsState, remoteParticipants]);\n const showLocalVideoTileLabel = !(localTileNotInGrid && isNarrow || localVideoTileSize === '9:16') || layout === 'default';\n /**\n * Utility function for memoized rendering of LocalParticipant.\n */\n const localVideoTile = useMemo(() => {\n var _a, _b;\n if (localVideoTileSize === 'hidden') {\n return undefined;\n }\n if (onRenderLocalVideoTile) {\n return onRenderLocalVideoTile(localParticipant);\n }\n const isSpotlighted = !!localParticipant.spotlight;\n const localVideoTileStyles = concatStyleSets(localTileNotInGrid ? floatingLocalVideoTileStyle : {}, {\n root: {\n borderRadius: theme.effects.roundedCorner4\n }\n }, styles === null || styles === void 0 ? void 0 : styles.localVideo);\n const initialsName = !localParticipant.displayName ? '' : localParticipant.displayName;\n const showDisplayNameTrampoline = () => {\n return layout === 'default' ? strings.localVideoLabel : isNarrow ? '' : strings.localVideoLabel;\n return isNarrow ? '' : strings.localVideoLabel;\n };\n return React.createElement(Stack, { styles: localVideoTileContainerStyles, key: \"local-video-tile-key\" },\n React.createElement(_LocalVideoTile, { alwaysShowLabelBackground: videoTilesOptions === null || videoTilesOptions === void 0 ? void 0 : videoTilesOptions.alwaysShowLabelBackground, userId: localParticipant.userId, onCreateLocalStreamView: onCreateLocalStreamView, onDisposeLocalStreamView: onDisposeLocalStreamView, isAvailable: (_a = localParticipant === null || localParticipant === void 0 ? void 0 : localParticipant.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable, isMuted: localParticipant.isMuted, renderElement: (_b = localParticipant === null || localParticipant === void 0 ? void 0 : localParticipant.videoStream) === null || _b === void 0 ? void 0 : _b.renderElement, displayName: showDisplayNameTrampoline(), initialsName: initialsName, localVideoViewOptions: localVideoViewOptions, onRenderAvatar: onRenderAvatar, showLabel: showLocalVideoTileLabel, showMuteIndicator: showMuteIndicator, showCameraSwitcherInLocalPreview: showCameraSwitcherInLocalPreview, localVideoCameraCycleButtonProps: localVideoCameraCycleButtonProps, localVideoCameraSwitcherLabel: strings.localVideoCameraSwitcherLabel, localVideoSelectedDescription: strings.localVideoSelectedDescription, styles: localVideoTileStyles, raisedHand: localParticipant.raisedHand, reaction: localParticipant.reaction, spotlightedParticipantUserIds: spotlightedParticipants, isSpotlighted: isSpotlighted, onStartSpotlight: onStartLocalSpotlight, onStopSpotlight: onStopLocalSpotlight, maxParticipantsToSpotlight: maxParticipantsToSpotlight, menuKind: remoteVideoTileMenu ? remoteVideoTileMenu.kind === 'drawer' ? 'drawer' : 'contextual' : undefined, drawerMenuHostId: drawerMenuHostId, strings: strings, reactionResources: reactionResources, participantsCount: remoteParticipants.length + 1, isScreenSharingOn: localParticipant.isScreenSharingOn }));\n }, [isNarrow, localParticipant, localVideoCameraCycleButtonProps, localVideoViewOptions, onCreateLocalStreamView, onDisposeLocalStreamView, onRenderAvatar, onRenderLocalVideoTile, localTileNotInGrid, showCameraSwitcherInLocalPreview, showMuteIndicator, styles === null || styles === void 0 ? void 0 : styles.localVideo, theme.effects.roundedCorner4, localVideoTileSize, layout, showLocalVideoTileLabel, spotlightedParticipants, onStartLocalSpotlight, onStopLocalSpotlight, maxParticipantsToSpotlight, remoteVideoTileMenu, strings, drawerMenuHostId, reactionResources, videoTilesOptions, remoteParticipants.length]);\n const onPinParticipant = useCallback((userId) => {\n if (pinnedParticipants.length >= MAX_PINNED_REMOTE_VIDEO_TILES) {\n return;\n }\n if (!pinnedParticipants.includes(userId)) {\n setPinnedParticipantsState(pinnedParticipants.concat(userId));\n }\n onPinParticipantHandler === null || onPinParticipantHandler === void 0 ? void 0 : onPinParticipantHandler(userId);\n }, [pinnedParticipants, setPinnedParticipantsState, onPinParticipantHandler]);\n const onUnpinParticipant = useCallback((userId) => {\n setPinnedParticipantsState(pinnedParticipantsState.filter(p => p !== userId));\n onUnpinParticipantHandler === null || onUnpinParticipantHandler === void 0 ? void 0 : onUnpinParticipantHandler(userId);\n }, [pinnedParticipantsState, setPinnedParticipantsState, onUnpinParticipantHandler]);\n const [announcementString, setAnnouncementString] = React.useState('');\n /**\n * sets the announcement string for VideoGallery actions so that the screenreader will trigger\n */\n const toggleAnnouncerString = useCallback((announcement) => {\n setAnnouncementString(announcement);\n /**\n * Clears the announcer string after VideoGallery action allowing it to be re-announced.\n */\n setTimeout(() => {\n setAnnouncementString('');\n }, 3000);\n }, [setAnnouncementString]);\n const defaultOnRenderVideoTile = useCallback((participant, isVideoParticipant) => {\n const remoteVideoStream = participant.videoStream;\n const selectedScalingMode = remoteVideoStream ? selectedScalingModeState[participant.userId] : undefined;\n let isPinned = pinnedParticipants === null || pinnedParticipants === void 0 ? void 0 : pinnedParticipants.includes(participant.userId);\n const isSpotlighted = !!participant.spotlight;\n isPinned = isSpotlighted ? false : isPinned;\n const createViewOptions = () => {\n var _a, _b;\n if (selectedScalingMode) {\n return selectedScalingMode;\n }\n return (remoteVideoStream === null || remoteVideoStream === void 0 ? void 0 : remoteVideoStream.streamSize) && ((_a = remoteVideoStream.streamSize) === null || _a === void 0 ? void 0 : _a.height) > ((_b = remoteVideoStream.streamSize) === null || _b === void 0 ? void 0 : _b.width) ? {\n scalingMode: 'Fit',\n isMirrored: remoteVideoViewOptions === null || remoteVideoViewOptions === void 0 ? void 0 : remoteVideoViewOptions.isMirrored\n } : remoteVideoViewOptions;\n };\n return React.createElement(_RemoteVideoTile, { alwaysShowLabelBackground: videoTilesOptions === null || videoTilesOptions === void 0 ? void 0 : videoTilesOptions.alwaysShowLabelBackground, streamId: remoteVideoStream === null || remoteVideoStream === void 0 ? void 0 : remoteVideoStream.id, key: participant.userId, userId: participant.userId, remoteParticipant: participant, onCreateRemoteStreamView: isVideoParticipant ? onCreateRemoteStreamView : undefined, onDisposeRemoteStreamView: isVideoParticipant ? onDisposeRemoteVideoStreamView : undefined, isAvailable: isVideoParticipant ? remoteVideoStream === null || remoteVideoStream === void 0 ? void 0 : remoteVideoStream.isAvailable : false, isReceiving: isVideoParticipant ? remoteVideoStream === null || remoteVideoStream === void 0 ? void 0 : remoteVideoStream.isReceiving : false, renderElement: isVideoParticipant ? remoteVideoStream === null || remoteVideoStream === void 0 ? void 0 : remoteVideoStream.renderElement : undefined, remoteVideoViewOptions: createViewOptions(), onRenderAvatar: onRenderAvatar, showMuteIndicator: showMuteIndicator, strings: strings, participantState: participant.state, menuKind: participant.userId === localParticipant.userId ? undefined : remoteVideoTileMenu ? remoteVideoTileMenu.kind === 'drawer' ? 'drawer' : 'contextual' : undefined, drawerMenuHostId: drawerMenuHostId, onPinParticipant: onPinParticipant, onUnpinParticipant: onUnpinParticipant, onUpdateScalingMode: onUpdateScalingMode, isPinned: isPinned, disablePinMenuItem: pinnedParticipants.length >= MAX_PINNED_REMOTE_VIDEO_TILES, toggleAnnouncerString: toggleAnnouncerString, spotlightedParticipantUserIds: spotlightedParticipants, isSpotlighted: isSpotlighted, onStartSpotlight: onStartRemoteSpotlight, onStopSpotlight: onStopRemoteSpotlight, maxParticipantsToSpotlight: maxParticipantsToSpotlight, reactionResources: reactionResources, onMuteParticipant: onMuteParticipant });\n }, [onCreateRemoteStreamView, onDisposeRemoteVideoStreamView, remoteVideoViewOptions, localParticipant, onRenderAvatar, showMuteIndicator, strings, drawerMenuHostId, remoteVideoTileMenu, selectedScalingModeState, pinnedParticipants, onPinParticipant, onUnpinParticipant, toggleAnnouncerString, onUpdateScalingMode, spotlightedParticipants, onStartRemoteSpotlight, onStopRemoteSpotlight, maxParticipantsToSpotlight, onMuteParticipant, reactionResources, videoTilesOptions]);\n const screenShareParticipant = remoteParticipants.find(participant => { var _a; return (_a = participant.screenShareStream) === null || _a === void 0 ? void 0 : _a.isAvailable; });\n const localScreenShareStreamComponent = React.createElement(LocalScreenShare, { localParticipant: localParticipant, renderElement: (_a = localParticipant.screenShareStream) === null || _a === void 0 ? void 0 : _a.renderElement, isAvailable: (_b = localParticipant.screenShareStream) === null || _b === void 0 ? void 0 : _b.isAvailable, onCreateLocalStreamView: onCreateLocalStreamView, onDisposeLocalScreenShareStreamView: onDisposeLocalScreenShareStreamView });\n const remoteScreenShareComponent = screenShareParticipant && React.createElement(RemoteScreenShare, Object.assign({}, screenShareParticipant, { renderElement: (_c = screenShareParticipant.screenShareStream) === null || _c === void 0 ? void 0 : _c.renderElement, onCreateRemoteStreamView: onCreateRemoteStreamView, onDisposeRemoteStreamView: onDisposeRemoteScreenShareStreamView, isReceiving: (_d = screenShareParticipant.screenShareStream) === null || _d === void 0 ? void 0 : _d.isReceiving, participantVideoScalingMode: selectedScalingModeState[screenShareParticipant.userId], localParticipant: localParticipant, remoteParticipants: remoteParticipants, reactionResources: reactionResources }));\n const screenShareComponent = remoteScreenShareComponent ? remoteScreenShareComponent : localParticipant.isScreenSharingOn ? localScreenShareStreamComponent : undefined;\n const layoutProps = useMemo(() => ({\n remoteParticipants,\n localParticipant,\n screenShareComponent,\n showCameraSwitcherInLocalPreview,\n maxRemoteVideoStreams,\n dominantSpeakers,\n styles,\n onRenderRemoteParticipant: onRenderRemoteVideoTile !== null && onRenderRemoteVideoTile !== void 0 ? onRenderRemoteVideoTile : defaultOnRenderVideoTile,\n localVideoComponent: localVideoTile,\n parentWidth: containerWidth,\n parentHeight: containerHeight,\n pinnedParticipantUserIds: pinnedParticipants,\n overflowGalleryPosition,\n localVideoTileSize,\n spotlightedParticipantUserIds: spotlightedParticipants\n }), [remoteParticipants, localParticipant, screenShareComponent, showCameraSwitcherInLocalPreview, maxRemoteVideoStreams, dominantSpeakers, styles, localVideoTile, containerWidth, containerHeight, onRenderRemoteVideoTile, defaultOnRenderVideoTile, pinnedParticipants, overflowGalleryPosition, localVideoTileSize, spotlightedParticipants]);\n const videoGalleryLayout = useMemo(() => {\n if (screenShareParticipant && layout === 'focusedContent') {\n return React.createElement(FocusedContentLayout, Object.assign({}, layoutProps));\n }\n if (layout === 'floatingLocalVideo') {\n return React.createElement(FloatingLocalVideoLayout, Object.assign({}, layoutProps));\n }\n if (layout === 'speaker') {\n return React.createElement(SpeakerVideoLayout, Object.assign({}, layoutProps));\n }\n return React.createElement(DefaultLayout, Object.assign({}, layoutProps));\n }, [layout, layoutProps, screenShareParticipant]);\n return React.createElement(\"div\", { \n // We don't assign an drawer menu host id to the VideoGallery when a drawerMenuHostId is assigned from props\n id: drawerMenuHostIdFromProp ? undefined : drawerMenuHostId, \"data-ui-id\": ids.videoGallery, ref: containerRef, className: mergeStyles(videoGalleryOuterDivStyle, styles === null || styles === void 0 ? void 0 : styles.root, unselectable) },\n videoGalleryLayout,\n React.createElement(Announcer, { announcementString: announcementString, ariaLive: \"polite\" }));\n};\n//# sourceMappingURL=VideoGallery.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { getEmojiFrameCount, getEmojiResource } from './utils/videoGalleryLayoutUtils';\nimport { Stack, mergeStyles } from '@fluentui/react';\nimport { reactionRenderingStyle, videoContainerStyles } from '../styles/VideoTile.styles';\nimport { REACTION_DEFAULT_RESOURCE_FRAME_SIZE_PX, REACTION_NUMBER_OF_ANIMATION_FRAMES, REACTION_SCREEN_SHARE_ANIMATION_TIME_MS, REACTION_START_DISPLAY_SIZE, getReceivedUnixTime } from './utils/reactionUtils';\n/**\n * Reaction overlay component for Grid\n *\n * Can be used with {@link MeetingReactionOverlay}.\n *\n * @internal\n */\nexport const ParticipantVideoTileOverlay = React.memo((props) => {\n const { reaction, reactionResources, emojiSize = REACTION_START_DISPLAY_SIZE } = props;\n const [isValidImageSource, setIsValidImageSource] = useState(false);\n const backgroundImageUrl = reaction !== undefined && reactionResources !== undefined ? getEmojiResource(reaction === null || reaction === void 0 ? void 0 : reaction.reactionType, reactionResources) : undefined;\n const frameCount = reaction !== undefined && reactionResources !== undefined ? getEmojiFrameCount(reaction === null || reaction === void 0 ? void 0 : reaction.reactionType, reactionResources) : undefined;\n const currentUnixTimeStamp = Date.now();\n const receivedUnixTimestamp = reaction ? getReceivedUnixTime(reaction.receivedOn) : undefined;\n const canRenderReaction = (receivedUnixTimestamp ? currentUnixTimeStamp - receivedUnixTimestamp < REACTION_SCREEN_SHARE_ANIMATION_TIME_MS : false) && backgroundImageUrl !== undefined;\n useEffect(() => {\n if (!backgroundImageUrl || backgroundImageUrl.length === 0) {\n return;\n }\n fetch(`${backgroundImageUrl}`).then(res => {\n setIsValidImageSource(res.ok);\n }).catch(warning => console.warn(`Sprite image for animation rendering failed with warning: ${warning}`));\n return () => setIsValidImageSource(false);\n }, [backgroundImageUrl]);\n const spriteImageUrl = backgroundImageUrl !== null && backgroundImageUrl !== void 0 ? backgroundImageUrl : undefined;\n const reactionContainerStyles = useCallback(() => reactionRenderingStyle({\n spriteImageUrl: spriteImageUrl !== null && spriteImageUrl !== void 0 ? spriteImageUrl : '',\n emojiSize: emojiSize,\n frameCount: frameCount !== null && frameCount !== void 0 ? frameCount : REACTION_NUMBER_OF_ANIMATION_FRAMES,\n rawFrameSize: REACTION_DEFAULT_RESOURCE_FRAME_SIZE_PX\n }), [spriteImageUrl, emojiSize, frameCount]);\n return React.createElement(Stack, { className: mergeStyles(videoContainerStyles, {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: canRenderReaction ? 'rgba(0, 0, 0, 0.5)' : 'transparent',\n borderRadius: '0.25rem'\n }) },\n React.createElement(\"div\", { style: {\n height: '33.33%'\n } }),\n canRenderReaction && isValidImageSource && React.createElement(\"div\", { style: {\n minHeight: `${emojiSize}px`,\n height: `${emojiSize}px`,\n width: `${emojiSize}px`\n } },\n React.createElement(\"div\", { className: reactionContainerStyles() })));\n});\n//# sourceMappingURL=ParticipantVideoTileOverlay.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { Stack, mergeStyles } from '@fluentui/react';\nimport { videoContainerStyles } from '../styles/VideoTile.styles';\nimport { getEmojiResource } from './utils/videoGalleryLayoutUtils';\nimport { generateStartPositionWave, getReactionMovementStyle, getReactionStyleBucket, moveAnimationStyles, opacityAnimationStyles, reactionOverlayStyle, spriteAnimationStyles } from '../styles/ReactionOverlay.style';\nimport { REACTION_NUMBER_OF_ANIMATION_FRAMES, REACTION_SCREEN_SHARE_ANIMATION_TIME_MS, REACTION_START_DISPLAY_SIZE, getCombinedKey, getReceivedUnixTime } from './utils/reactionUtils';\nconst MAX_NUMBER_OF_EMOJIS = 50;\nconst NUMBER_OF_EMOJI_TYPES = 5;\nconst REACTION_POSITION_ARRAY_SIZE = 55;\n/**\n * The overlay responsible for rendering multiple reactions all at once in presentation mode\n * @internal\n */\nexport const RemoteContentShareReactionOverlay = React.memo((props) => {\n const { reactionResources, localParticipant, remoteParticipants, hostDivHeight, hostDivWidth } = props;\n // Reactions that are currently being animated\n const [visibleReactions, setVisibleReactions] = useState([]);\n // Dictionary of userId to a reaction status. This is used to track the latest received reaction\n // per user to avoid animating the same reaction multiple times and to limit the number of\n // active reactions of a certain type.\n const latestReceivedReaction = useRef({});\n // Track the number of active reactions of each type to limit the number of active reactions\n // of a certain type.\n const activeTypeCount = useRef({\n like: 0,\n heart: 0,\n laugh: 0,\n applause: 0,\n surprised: 0\n });\n // Used to track the total number of reactions ever played. This is a helper variable\n // to calculate the reaction movement index (i.e. the .left position of the reaction)\n const visibleReactionPosition = useRef(new Array(REACTION_POSITION_ARRAY_SIZE).fill(false));\n const remoteParticipantReactions = useMemo(() => { var _a; return (_a = remoteParticipants === null || remoteParticipants === void 0 ? void 0 : remoteParticipants.map(remoteParticipant => remoteParticipant.reaction).filter((reaction) => !!reaction)) !== null && _a !== void 0 ? _a : []; }, [remoteParticipants]);\n const findFirstEmptyPosition = () => {\n return visibleReactionPosition.current.findIndex(item => item === false);\n };\n const updateVisibleReactions = useCallback((reaction, userId) => {\n var _a, _b;\n const combinedKey = getCombinedKey(userId, reaction.reactionType, reaction.receivedOn);\n const alreadyHandled = ((_a = latestReceivedReaction.current[userId]) === null || _a === void 0 ? void 0 : _a.id) === combinedKey;\n if (alreadyHandled) {\n return;\n }\n const activeCount = (_b = activeTypeCount.current[reaction.reactionType]) !== null && _b !== void 0 ? _b : 0;\n if (activeCount >= MAX_NUMBER_OF_EMOJIS / NUMBER_OF_EMOJI_TYPES) {\n latestReceivedReaction.current[userId] = {\n id: combinedKey,\n status: 'ignored'\n };\n return;\n }\n activeTypeCount.current[reaction.reactionType] += 1;\n latestReceivedReaction.current[userId] = {\n id: combinedKey,\n status: 'animating'\n };\n const reactionMovementIndex = findFirstEmptyPosition();\n visibleReactionPosition.current[reactionMovementIndex] = true;\n setVisibleReactions([...visibleReactions, {\n reaction: reaction,\n id: combinedKey,\n reactionMovementIndex: reactionMovementIndex,\n styleBucket: getReactionStyleBucket()\n }]);\n return;\n }, [activeTypeCount, visibleReactions]);\n const removeVisibleReaction = (reactionType, id, index) => {\n setVisibleReactions(visibleReactions.filter(reaction => reaction.id !== id));\n visibleReactionPosition.current[index] = false;\n activeTypeCount.current[reactionType] -= 1;\n Object.entries(latestReceivedReaction.current).forEach(([userId, reaction]) => {\n const userLastReaction = latestReceivedReaction.current[userId];\n if (reaction.id === id && userLastReaction) {\n userLastReaction.status = 'completedAnimating';\n }\n });\n };\n // Update visible reactions when local participant sends a reaction\n useEffect(() => {\n if (localParticipant === null || localParticipant === void 0 ? void 0 : localParticipant.reaction) {\n updateVisibleReactions(localParticipant.reaction, localParticipant.userId);\n }\n }, [localParticipant, updateVisibleReactions]);\n // Update visible reactions when remote participants send a reaction\n useEffect(() => {\n remoteParticipants === null || remoteParticipants === void 0 ? void 0 : remoteParticipants.map(participant => {\n if (participant === null || participant === void 0 ? void 0 : participant.reaction) {\n updateVisibleReactions(participant.reaction, participant.userId);\n }\n });\n }, [remoteParticipantReactions, remoteParticipants, updateVisibleReactions]);\n // Note: canRenderReaction shouldn't be needed as we remove the animation on the onAnimationEnd event\n const canRenderReaction = (reaction, id, movementIndex) => {\n // compare current time to reaction.received at and see if more than 4 seconds has elapsed\n const canRender = Date.now() - getReceivedUnixTime(reaction.receivedOn) < REACTION_SCREEN_SHARE_ANIMATION_TIME_MS;\n // Clean up the reaction if it's not in the visible reaction list\n if (!canRender) {\n removeVisibleReaction(reaction === null || reaction === void 0 ? void 0 : reaction.reactionType, id, movementIndex);\n }\n return canRender;\n };\n const styleBucket = () => getReactionStyleBucket();\n const displaySizePx = () => REACTION_START_DISPLAY_SIZE * styleBucket().sizeScale;\n const containerHeight = hostDivHeight !== null && hostDivHeight !== void 0 ? hostDivHeight : 0;\n const containerWidth = (hostDivWidth !== null && hostDivWidth !== void 0 ? hostDivWidth : 0) - displaySizePx();\n const leftPosition = (position) => generateStartPositionWave(position, containerWidth / 2, true);\n const reactionMovementStyle = (position) => getReactionMovementStyle(leftPosition(position));\n return React.createElement(Stack, { className: mergeStyles(videoContainerStyles, {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: 'transparent'\n }) }, visibleReactions.map(reaction => {\n var _a;\n return React.createElement(\"div\", { key: reaction.id, style: reactionOverlayStyle },\n React.createElement(\"div\", { className: \"reaction-item\" }, canRenderReaction(reaction.reaction, reaction.id, reaction.reactionMovementIndex) &&\n // First div - Section that fixes the travel height and applies the movement animation\n // Second div - Keeps track of active sprites and responsible for marking, counting\n // and removing reactions. Responsible for opacity controls as the sprite emoji animates\n // Third div - Responsible for calculating the point of X axis where the reaction will start animation\n // Fourth div - Play Animation as the other animation applies on the base play animation for the sprite\n React.createElement(\"div\", { style: moveAnimationStyles(containerHeight / 2, \n // dividing by two because reactionOverlayStyle height is set to 50%\n containerHeight / 2 * (1 - reaction.styleBucket.heightMaxScale)) },\n React.createElement(\"div\", { onAnimationEnd: () => {\n removeVisibleReaction(reaction.reaction.reactionType, reaction.id, reaction.reactionMovementIndex);\n }, style: opacityAnimationStyles(reaction.styleBucket.opacityMax) },\n React.createElement(\"div\", { style: reactionMovementStyle(reaction.reactionMovementIndex) },\n React.createElement(\"div\", { style: spriteAnimationStyles(REACTION_NUMBER_OF_ANIMATION_FRAMES, displaySizePx(), (_a = getEmojiResource(reaction === null || reaction === void 0 ? void 0 : reaction.reaction.reactionType, reactionResources)) !== null && _a !== void 0 ? _a : '') }))))));\n }));\n});\n//# sourceMappingURL=RemoteContentShareReactionOverlay.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { concatStyleSets, mergeStyles } from '@fluentui/react';\nimport { _pxToRem } from \"../../../../../acs-ui-common/src\";\n/**\n * @private\n */\nexport const videoGalleryOuterDivStyle = mergeStyles({\n position: 'relative',\n width: '100%',\n height: '100%'\n});\n/**\n * @private\n */\nexport const videoGalleryContainerStyle = {\n root: {\n position: 'relative',\n height: '100%',\n width: '100%',\n padding: '0.5rem'\n }\n};\n/**\n * Small floating modal width and height in rem for small screen\n */\nexport const SMALL_FLOATING_MODAL_SIZE_REM = {\n width: 3.625,\n height: 6.5\n};\n/**\n * Large floating modal width and height in rem for large screen\n * Aspect ratio: 16:9\n */\nexport const LARGE_FLOATING_MODAL_SIZE_REM = {\n width: 13.75,\n height: 7.5\n};\n/**\n * Vertical gallery floating modal width and height in rem\n * Aspect ratio: 16:9\n */\nexport const SHORT_VERTICAL_GALLERY_FLOATING_MODAL_SIZE_REM = {\n width: 9,\n height: 5.063\n};\n/**\n * Vertical gallery floating modal width and height in rem\n * Aspect ratio: 16:9\n */\nexport const VERTICAL_GALLERY_FLOATING_MODAL_SIZE_REM = {\n width: 11,\n height: 6.25\n};\n/**\n * @private\n * z-index to ensure that the local video tile is above the video gallery.\n */\nexport const LOCAL_VIDEO_TILE_ZINDEX = 2;\n/**\n * @private\n */\nexport const localVideoTileContainerStyle = (theme, localVideoTileSizeRem, screenSharePresent, overflowGalleryPosition) => {\n return {\n width: screenSharePresent ? `${localVideoTileSizeRem.width}rem` : '',\n height: screenSharePresent ? `${localVideoTileSizeRem.height}rem` : '',\n minWidth: screenSharePresent ? '' : `${localVideoTileSizeRem.width}rem`,\n minHeight: screenSharePresent ? '' : `${localVideoTileSizeRem.height}rem`,\n position: 'absolute',\n bottom: overflowGalleryPosition !== 'horizontalTop' ? `${dockedlocalVideoTileContainerPaddingRem}rem` : 'unset',\n top: overflowGalleryPosition === 'horizontalTop' ? `${dockedlocalVideoTileContainerPaddingRem}rem` : 'unset',\n borderRadius: theme.effects.roundedCorner4,\n overflow: 'hidden',\n right: `${dockedlocalVideoTileContainerPaddingRem}rem`\n };\n};\n/**\n * @private\n */\nexport const localVideoTileWithControlsContainerStyle = (theme, localVideoTileSizeRem) => {\n return concatStyleSets(localVideoTileContainerStyle(theme, localVideoTileSizeRem), {\n root: {\n boxShadow: theme.effects.elevation8\n }\n });\n};\n/**\n * @private\n */\nexport const floatingLocalVideoModalStyle = (theme, modalSizeRem) => {\n return concatStyleSets({\n main: mergeStyles(localVideoTileContainerStyle(theme, modalSizeRem), {\n bottom: `${floatinglocalVideoModalInitialPositionGapRem}rem`,\n right: `${floatinglocalVideoModalInitialPositionGapRem}rem`\n })\n }, {\n main: {\n boxShadow: theme.effects.elevation8,\n ':focus-within': {\n boxShadow: theme.effects.elevation16,\n border: `${_pxToRem(2)} solid ${theme.palette.neutralPrimary}`\n }\n }\n }, localVideoModalStyles);\n};\n/**\n * Initial position gap of the floating local video modal.\n * ie. if this is 1rem, then floating local video modal would initially be positioned 1rem from\n * the bottom and 1rem from the right.\n * @private\n */\nexport const floatinglocalVideoModalInitialPositionGapRem = 1;\n/**\n * Padding of the docked local video tile container.\n * @private\n */\nexport const dockedlocalVideoTileContainerPaddingRem = 0.5;\n/**\n * @private\n */\nexport const floatingLocalVideoTileStyle = {\n root: {\n position: 'absolute',\n zIndex: LOCAL_VIDEO_TILE_ZINDEX,\n height: '100%',\n width: '100%'\n }\n};\n/**\n * @private\n */\nexport const localVideoCameraCycleButtonStyles = (theme) => {\n return {\n root: {\n position: 'absolute',\n width: _pxToRem(32),\n height: _pxToRem(32),\n right: '0rem',\n top: '0rem',\n color: '#FFFFFF',\n // only shows up on running video feed to we want to force specific colours.\n zIndex: 2,\n // shows the button directly over the local video feed.\n background: 'rgba(0,0,0,0.4)',\n borderRadius: theme.effects.roundedCorner2\n },\n rootFocused: {\n // styles to remove the unwanted white highlight and blue colour after tapping on button.\n color: '#FFFFFF',\n background: 'rgba(0,0,0,0.4)' // sets opacity of background to be visible on all backdrops in video stream.\n },\n icon: {\n paddingLeft: _pxToRem(3),\n paddingRight: _pxToRem(3),\n margin: 0\n },\n flexContainer: {\n paddingBottom: _pxToRem(8)\n }\n };\n};\n/**\n * Styles for the local video tile modal when it is focused, will cause keyboard move icon to appear over video\n * @private\n */\nexport const localVideoModalStyles = {\n keyboardMoveIconContainer: {\n zIndex: LOCAL_VIDEO_TILE_ZINDEX + 1 // zIndex to set the keyboard movement Icon above the other layers in the video tile.\n }\n};\n//# sourceMappingURL=FloatingLocalVideo.styles.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n/** @private */\nexport const remoteVideoTileWrapperStyle = {\n height: '100%',\n width: '100%',\n position: 'relative'\n};\n/** @private */\nexport const drawerMenuWrapperStyles = {\n root: {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n // Any zIndex > 0 will work because this is the only absolutely\n // positioned element in the container.\n zIndex: 2\n }\n};\n//# sourceMappingURL=RemoteVideoTile.styles.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { LARGE_FLOATING_MODAL_SIZE_REM, SMALL_FLOATING_MODAL_SIZE_REM } from './FloatingLocalVideo.styles';\n/**\n * @private\n */\nexport const horizontalGalleryContainerStyle = (shouldFloatLocalVideo, isNarrow) => {\n return {\n minHeight: isNarrow ? `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem` : `${LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,\n width: shouldFloatLocalVideo ? isNarrow ? `calc(100% - ${SMALL_FLOATING_MODAL_SIZE_REM.width}rem)` : `calc(100% - ${LARGE_FLOATING_MODAL_SIZE_REM.width}rem)` : '100%',\n paddingRight: '0.5rem'\n };\n};\n/**\n * @private\n */\nexport const horizontalGalleryStyle = (isNarrow) => {\n return {\n children: isNarrow ? SMALL_HORIZONTAL_GALLERY_TILE_STYLE : LARGE_HORIZONTAL_GALLERY_TILE_STYLE\n };\n};\n/**\n * Small horizontal gallery tile size in rem\n * @private\n */\nexport const SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM = {\n height: 6.5,\n width: 6.5\n};\n/**\n * Large horizontal gallery tile size in rem\n * @private\n */\nexport const LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM = {\n height: 7.5,\n minWidth: 7.5,\n maxWidth: 13.43\n};\n/**\n * @private\n */\nexport const SMALL_HORIZONTAL_GALLERY_TILE_STYLE = {\n minHeight: `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,\n minWidth: `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.width}rem`,\n maxHeight: `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,\n maxWidth: `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.width}rem`\n};\n/**\n * @private\n */\nexport const LARGE_HORIZONTAL_GALLERY_TILE_STYLE = {\n minHeight: `${LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,\n minWidth: `${LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.minWidth}rem`,\n maxHeight: `${LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,\n maxWidth: `${LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.maxWidth}rem`,\n width: '100%',\n height: '100%'\n};\n//# sourceMappingURL=VideoGalleryResponsiveHorizontalGallery.styles.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { SHORT_VERTICAL_GALLERY_FLOATING_MODAL_SIZE_REM, SMALL_FLOATING_MODAL_SIZE_REM, VERTICAL_GALLERY_FLOATING_MODAL_SIZE_REM } from './FloatingLocalVideo.styles';\n/**\n * VerticalGallery tile size in rem:\n *\n * min - smallest possible size of the tile (90px)\n * max - Largest size we want the vertical tiles (144px)\n *\n * @private\n */\nexport const SHORT_VERTICAL_GALLERY_TILE_SIZE_REM = {\n minHeight: 5.625,\n maxHeight: 9,\n width: 9\n};\n/**\n * VerticalGallery tile size in rem:\n *\n * min - smallest possible size of the tile (90px)\n * max - Largest size we want the vertical tiles (144px)\n *\n * @private\n */\nexport const VERTICAL_GALLERY_TILE_SIZE_REM = {\n minHeight: 6.75,\n maxHeight: 11,\n width: 11\n};\n/**\n * Styles for the VerticalGallery's container set in parent.\n *\n * width is being increased by 1rem to account for the gap width desired for the VerticalGallery.\n *\n * @param shouldFloatLocalVideo whether rendered in floating layout or not\n * @returns Style set for VerticalGallery container.\n */\nexport const verticalGalleryContainerStyle = (shouldFloatLocalVideo, isNarrow, isShort) => {\n return isNarrow && isShort ? {\n width: `${SHORT_VERTICAL_GALLERY_TILE_SIZE_REM.width}rem`,\n height: shouldFloatLocalVideo ? `calc(100% - ${SMALL_FLOATING_MODAL_SIZE_REM.height}rem)` : '100%',\n paddingBottom: '0.5rem'\n } : !isNarrow && isShort ? {\n width: `${SHORT_VERTICAL_GALLERY_TILE_SIZE_REM.width}rem`,\n height: shouldFloatLocalVideo ? `calc(100% - ${SHORT_VERTICAL_GALLERY_FLOATING_MODAL_SIZE_REM.height}rem)` : '100%',\n paddingBottom: '0.5rem'\n } : {\n width: `${VERTICAL_GALLERY_TILE_SIZE_REM.width}rem`,\n height: shouldFloatLocalVideo ? `calc(100% - ${VERTICAL_GALLERY_FLOATING_MODAL_SIZE_REM.height}rem)` : '100%',\n paddingBottom: '0.5rem'\n };\n};\n/**\n * @private\n */\nexport const SHORT_VERTICAL_GALLERY_TILE_STYLE = {\n minHeight: `${SHORT_VERTICAL_GALLERY_TILE_SIZE_REM.minHeight}rem`,\n minWidth: `${SHORT_VERTICAL_GALLERY_TILE_SIZE_REM.width}rem`,\n maxHeight: `${SHORT_VERTICAL_GALLERY_TILE_SIZE_REM.maxHeight}rem`,\n maxWidth: `${SHORT_VERTICAL_GALLERY_TILE_SIZE_REM.width}rem`,\n width: '100%',\n height: '100%'\n};\n/**\n * @private\n */\nexport const VERTICAL_GALLERY_TILE_STYLE = {\n minHeight: `${VERTICAL_GALLERY_TILE_SIZE_REM.minHeight}rem`,\n minWidth: `${VERTICAL_GALLERY_TILE_SIZE_REM.width}rem`,\n maxHeight: `${VERTICAL_GALLERY_TILE_SIZE_REM.maxHeight}rem`,\n maxWidth: `${VERTICAL_GALLERY_TILE_SIZE_REM.width}rem`,\n width: '100%',\n height: '100%'\n};\n/**\n * @private\n */\nexport const verticalGalleryStyle = (isShort) => {\n return isShort ? {\n children: SHORT_VERTICAL_GALLERY_TILE_STYLE\n } : {\n children: VERTICAL_GALLERY_TILE_STYLE\n };\n};\n//# sourceMappingURL=VideoGalleryResponsiveVerticalGallery.styles.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { useEffect, useMemo, useState } from 'react';\nimport { callingComponentLogger } from '../utils/Logger';\n/**\n * Helper hook to maintain the video stream lifecycle. This calls onCreateStreamView and onDisposeStreamView\n * appropriately based on react lifecycle events and prop changes.\n *\n * @remarks\n *\n * Notes on handling changes to scaling mode:\n *\n * Ideally we have access to the original StreamRenderView and can call view.updateScalingMode() and do not need to recreate the stream view.\n * However, to support backwards compat we cannot guarantee this. If we don't have access to the original StreamRenderView we need to dispose\n * the old view and create a new one.\n *\n * Supporting both of these scenarios became too complex and fragile. When we introduce a breaking change this should be update to ensure that\n * onCreateStreamView _must_ return a view object with updateScalingMode and update logic in this hook to call view.updateScalingMode instead\n * of recreating the stream.\n *\n * @private\n */\nconst useVideoStreamLifecycleMaintainer = (props) => {\n const { isMirrored, isScreenSharingOn, isStreamAvailable, onCreateStreamView, onDisposeStreamView, renderElementExists, scalingMode, streamId } = props;\n const [videoStreamViewResult, setVideoStreamViewResult] = useState();\n useEffect(() => {\n var _a;\n if (isStreamAvailable && !renderElementExists) {\n (_a = onCreateStreamView === null || onCreateStreamView === void 0 ? void 0 : onCreateStreamView({\n isMirrored,\n scalingMode\n })) === null || _a === void 0 ? void 0 : _a.then(result => {\n result && setVideoStreamViewResult(result);\n });\n }\n // Always clean up element to make tile up to date and be able to dispose correctly\n return () => {\n if (renderElementExists) {\n // TODO: Remove `if isScreenSharingOn` when we isolate dispose behavior for screen share\n if (!isScreenSharingOn) {\n onDisposeStreamView === null || onDisposeStreamView === void 0 ? void 0 : onDisposeStreamView();\n }\n }\n else {\n callingComponentLogger.warning('Stream view element does not exist when disposing stream view');\n }\n };\n }, [isMirrored, isScreenSharingOn, isStreamAvailable, onCreateStreamView, onDisposeStreamView, renderElementExists, scalingMode,\n /**\n * this is here in order to force a re-render when streamId changes\n * - this should not happen but to recover for the user we will make sure that we subscribe to the\n * new stream by forcing a re-render.\n */\n streamId]);\n // The execution order for above useEffect is onCreateRemoteStreamView =>(async time gap) RenderElement generated => element disposed => onDisposeRemoteStreamView\n // Element disposed could happen during async time gap, which still cause leaks for unused renderElement.\n // Need to do an entire cleanup when remoteTile gets disposed and make sure element gets correctly disposed\n useEffect(() => {\n return () => {\n // TODO: Remove `if isScreenSharingOn` when we isolate dispose behavior for screen share\n if (!isScreenSharingOn) {\n onDisposeStreamView === null || onDisposeStreamView === void 0 ? void 0 : onDisposeStreamView();\n }\n };\n }, [isScreenSharingOn, onDisposeStreamView]);\n return videoStreamViewResult;\n};\n/**\n * Extension of {@link useVideoStreamLifecycleMaintainer} specifically for local video streams\n *\n * @private\n */\nexport const useLocalVideoStreamLifecycleMaintainer = (props) => {\n const { onCreateLocalStreamView, onDisposeLocalStreamView } = props;\n const onCreateStreamView = useMemo(() => (options) => {\n return onCreateLocalStreamView === null || onCreateLocalStreamView === void 0 ? void 0 : onCreateLocalStreamView(options);\n }, [onCreateLocalStreamView]);\n const onDisposeStreamView = useMemo(() => () => {\n onDisposeLocalStreamView === null || onDisposeLocalStreamView === void 0 ? void 0 : onDisposeLocalStreamView();\n }, [onDisposeLocalStreamView]);\n return useVideoStreamLifecycleMaintainer(Object.assign(Object.assign({}, props), { onCreateStreamView,\n onDisposeStreamView }));\n};\n/**\n * Extension of {@link useVideoStreamLifecycleMaintainer} specifically for remote video streams\n *\n * @private\n */\nexport const useRemoteVideoStreamLifecycleMaintainer = (props) => {\n const { remoteParticipantId, onCreateRemoteStreamView, onDisposeRemoteStreamView } = props;\n const onCreateStreamView = useMemo(() => (options) => {\n return onCreateRemoteStreamView === null || onCreateRemoteStreamView === void 0 ? void 0 : onCreateRemoteStreamView(remoteParticipantId, options);\n }, [onCreateRemoteStreamView, remoteParticipantId]);\n const onDisposeStreamView = useMemo(() => () => {\n onDisposeRemoteStreamView === null || onDisposeRemoteStreamView === void 0 ? void 0 : onDisposeRemoteStreamView(remoteParticipantId);\n }, [onDisposeRemoteStreamView, remoteParticipantId]);\n return useVideoStreamLifecycleMaintainer(Object.assign(Object.assign({}, props), { onCreateStreamView,\n onDisposeStreamView }));\n};\n//# sourceMappingURL=useVideoStreamLifecycleMaintainer.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { _formatString } from \"../../../../acs-ui-common/src\";\nimport { useMemo } from 'react';\nimport { _preventDismissOnEvent as preventDismissOnEvent } from \"../../../../acs-ui-common/src\";\n/**\n * @private\n */\nexport const useVideoTileContextualMenuProps = (props) => {\n var _a;\n const { participant, view, strings, isPinned, onPinParticipant, onUnpinParticipant, onUpdateScalingMode, disablePinMenuItem, toggleAnnouncerString, spotlightedParticipantUserIds = [], isSpotlighted, onStartSpotlight, onStopSpotlight, maxParticipantsToSpotlight, myUserId, onMuteParticipant } = props;\n const scalingMode = useMemo(() => {\n var _a;\n return (_a = props.participant.videoStream) === null || _a === void 0 ? void 0 : _a.scalingMode;\n }, [(_a = props.participant.videoStream) === null || _a === void 0 ? void 0 : _a.scalingMode]);\n const contextualMenuProps = useMemo(() => {\n const items = [];\n if (onMuteParticipant && (strings === null || strings === void 0 ? void 0 : strings.muteParticipantMenuItemLabel)) {\n items.push({\n key: 'mute',\n text: strings === null || strings === void 0 ? void 0 : strings.muteParticipantMenuItemLabel,\n iconProps: {\n iconName: 'ContextualMenuMicMutedIcon',\n styles: {\n root: {\n lineHeight: 0\n }\n }\n },\n onClick: () => onMuteParticipant(participant.userId),\n 'data-ui-id': 'video-tile-mute-participant',\n ariaLabel: strings === null || strings === void 0 ? void 0 : strings.muteParticipantMenuItemLabel,\n disabled: participant.isMuted\n });\n }\n if (isPinned !== undefined) {\n if (isPinned && onUnpinParticipant && (strings === null || strings === void 0 ? void 0 : strings.unpinParticipantForMe)) {\n let unpinActionString = undefined;\n if (toggleAnnouncerString && strings.unpinParticipantMenuItemAriaLabel && participant.displayName) {\n unpinActionString = _formatString(strings === null || strings === void 0 ? void 0 : strings.unpinParticipantMenuItemAriaLabel, {\n participantName: participant.displayName\n });\n }\n items.push({\n key: 'unpin',\n text: strings.unpinParticipantForMe,\n iconProps: {\n iconName: 'UnpinParticipant',\n styles: {\n root: {\n lineHeight: '1rem',\n textAlign: 'center'\n }\n }\n },\n onClick: () => {\n onUnpinParticipant(participant.userId);\n unpinActionString && (toggleAnnouncerString === null || toggleAnnouncerString === void 0 ? void 0 : toggleAnnouncerString(unpinActionString));\n },\n 'data-ui-id': 'video-tile-unpin-participant-button',\n ariaLabel: unpinActionString\n });\n }\n if (!isPinned && onPinParticipant && (strings === null || strings === void 0 ? void 0 : strings.pinParticipantForMe)) {\n let pinActionString = undefined;\n if (toggleAnnouncerString && strings.pinnedParticipantAnnouncementAriaLabel && participant.displayName) {\n pinActionString = _formatString(strings === null || strings === void 0 ? void 0 : strings.pinnedParticipantAnnouncementAriaLabel, {\n participantName: participant.displayName\n });\n }\n items.push({\n key: 'pin',\n text: disablePinMenuItem ? strings.pinParticipantForMeLimitReached : strings.pinParticipantForMe,\n iconProps: {\n iconName: 'PinParticipant',\n styles: {\n root: {\n lineHeight: '1rem',\n textAlign: 'center'\n }\n }\n },\n onClick: () => {\n onPinParticipant(participant.userId);\n pinActionString && (toggleAnnouncerString === null || toggleAnnouncerString === void 0 ? void 0 : toggleAnnouncerString(pinActionString));\n },\n 'data-ui-id': 'video-tile-pin-participant-button',\n disabled: disablePinMenuItem || isSpotlighted,\n ariaLabel: strings.pinParticipantForMe\n });\n }\n }\n if (isSpotlighted) {\n const stopSpotlightMenuLabel = myUserId === participant.userId ? strings === null || strings === void 0 ? void 0 : strings.stopSpotlightOnSelfVideoTileMenuLabel : strings === null || strings === void 0 ? void 0 : strings.stopSpotlightVideoTileMenuLabel;\n if (onStopSpotlight && participant.userId && (strings === null || strings === void 0 ? void 0 : strings.stopSpotlightVideoTileMenuLabel)) {\n items.push({\n key: 'stopSpotlight',\n text: stopSpotlightMenuLabel,\n iconProps: {\n iconName: 'StopSpotlightContextualMenuItem',\n styles: {\n root: {\n lineHeight: 0\n }\n }\n },\n onClick: () => onStopSpotlight([participant.userId]),\n ariaLabel: strings.stopSpotlightVideoTileMenuLabel\n });\n }\n }\n else {\n const startSpotlightMenuLabel = spotlightedParticipantUserIds && spotlightedParticipantUserIds.length > 0 ? strings === null || strings === void 0 ? void 0 : strings.addSpotlightVideoTileMenuLabel : strings === null || strings === void 0 ? void 0 : strings.startSpotlightVideoTileMenuLabel;\n const maxSpotlightedParticipantsReached = maxParticipantsToSpotlight ? spotlightedParticipantUserIds.length >= maxParticipantsToSpotlight : false;\n if (onStartSpotlight && participant.userId && startSpotlightMenuLabel) {\n items.push({\n key: 'startSpotlight',\n text: startSpotlightMenuLabel,\n iconProps: {\n iconName: 'StartSpotlightContextualMenuItem',\n styles: {\n root: {\n lineHeight: 0\n }\n }\n },\n onClick: () => onStartSpotlight([participant.userId]),\n ariaLabel: startSpotlightMenuLabel,\n disabled: maxSpotlightedParticipantsReached,\n title: maxSpotlightedParticipantsReached ? strings === null || strings === void 0 ? void 0 : strings.spotlightLimitReachedMenuTitle : undefined\n });\n }\n }\n if (scalingMode) {\n if (scalingMode === 'Crop' && (strings === null || strings === void 0 ? void 0 : strings.fitRemoteParticipantToFrame)) {\n items.push({\n key: 'fitRemoteParticipantToFrame',\n text: strings.fitRemoteParticipantToFrame,\n iconProps: {\n iconName: 'VideoTileScaleFit',\n styles: {\n root: {\n lineHeight: '1rem',\n textAlign: 'center'\n }\n }\n },\n onClick: () => {\n onUpdateScalingMode === null || onUpdateScalingMode === void 0 ? void 0 : onUpdateScalingMode(participant.userId, 'Fit');\n view === null || view === void 0 ? void 0 : view.updateScalingMode('Fit');\n },\n 'data-ui-id': 'video-tile-fit-to-frame',\n ariaLabel: strings.fitRemoteParticipantToFrame\n });\n }\n else if (scalingMode === 'Fit' && (strings === null || strings === void 0 ? void 0 : strings.fillRemoteParticipantFrame)) {\n items.push({\n key: 'fillRemoteParticipantFrame',\n text: strings.fillRemoteParticipantFrame,\n iconProps: {\n iconName: 'VideoTileScaleFill',\n styles: {\n root: {\n lineHeight: '1rem',\n textAlign: 'center'\n }\n }\n },\n onClick: () => {\n onUpdateScalingMode === null || onUpdateScalingMode === void 0 ? void 0 : onUpdateScalingMode(participant.userId, 'Crop');\n view === null || view === void 0 ? void 0 : view.updateScalingMode('Crop');\n },\n 'data-ui-id': 'video-tile-fill-frame',\n ariaLabel: strings.fillRemoteParticipantFrame\n });\n }\n }\n if (items.length === 0) {\n return undefined;\n }\n return {\n items,\n styles: {},\n calloutProps: {\n preventDismissOnEvent\n },\n shouldFocusOnContainer: false\n };\n }, [scalingMode, strings, view, isPinned, onPinParticipant, onUnpinParticipant, onUpdateScalingMode, participant.userId, participant.displayName, disablePinMenuItem, toggleAnnouncerString, spotlightedParticipantUserIds, isSpotlighted, onStartSpotlight, onStopSpotlight, maxParticipantsToSpotlight, myUserId, onMuteParticipant, participant.isMuted]);\n return contextualMenuProps;\n};\n//# sourceMappingURL=useVideoTileContextualMenuProps.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { _convertRemToPx as convertRemToPx } from \"../../../../../acs-ui-common/src\";\nimport { LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM } from '../styles/VideoGalleryResponsiveHorizontalGallery.styles';\nimport { SHORT_VERTICAL_GALLERY_TILE_SIZE_REM, VERTICAL_GALLERY_TILE_SIZE_REM } from '../styles/VideoGalleryResponsiveVerticalGallery.styles';\n/**\n * Helper function to calculate children per page for HorizontalGallery based on width of container, child, buttons, and\n * gaps in between\n *\n * @private\n */\nexport const calculateHorizontalChildrenPerPage = (args) => {\n const { numberOfChildren, containerWidth, buttonWidthRem, gapWidthRem } = args;\n const childMinWidth = convertRemToPx(LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.minWidth);\n const gapWidth = convertRemToPx(gapWidthRem);\n /** First check how many children can fit in containerWidth.\n * __________________________________\n * | || |\n * | || |\n * |________________||________________|\n * <-----------containerWidth--------->\n * containerWidth = n * childWidth + (n - 1) * gapWidth. Isolate n and take the floor.\n */\n const numberOfChildrenInContainer = Math.floor((containerWidth + gapWidth) / (childMinWidth + gapWidth));\n // If all children fit then return numberOfChildrenInContainer\n if (numberOfChildren <= numberOfChildrenInContainer) {\n return numberOfChildrenInContainer;\n }\n const buttonWidth = convertRemToPx(buttonWidthRem);\n /** We know we need to paginate. So we need to subtract the buttonWidth twice and gapWidth twice from\n * containerWidth to compute childrenSpace\n * <-----------containerWidth--------->\n * __________________________________\n * | || || || |\n * |<|| || ||>|\n * |_||_____________||_____________||_|\n * <-------childrenSpace------>\n */\n const childrenSpace = containerWidth - 2 * buttonWidth - 2 * gapWidth;\n // Now that we have childrenSpace width we can figure out how many children can fit in childrenSpace.\n // childrenSpace = n * childWidth + (n - 1) * gapWidth. Isolate n and take the floor.\n return Math.max(Math.floor((childrenSpace + gapWidth) / (childMinWidth + gapWidth)), 1);\n};\n/**\n * Helper function to find the number of children for the VerticalGallery on each page.\n *\n * @private\n */\nexport const calculateVerticalChildrenPerPage = (args) => {\n const { numberOfChildren, containerHeight, gapHeightRem, controlBarHeight, isShort } = args;\n const childMinHeightPx = convertRemToPx(isShort ? SHORT_VERTICAL_GALLERY_TILE_SIZE_REM.minHeight : VERTICAL_GALLERY_TILE_SIZE_REM.minHeight);\n const gapHeightPx = convertRemToPx(gapHeightRem);\n const controlBarHeightPx = convertRemToPx(controlBarHeight);\n /** First check how many children can fit in containerHeight.\n *\n * _________________\n * | |\n * | |\n * |________________|\n * _________________\n * | |\n * | |\n * |________________|\n *\n * < n/m >\n *\n * number of children = container height - (2* gap height + button height) / childMinHeight\n *\n * we want to find the maximum number of children at the smallest size we can fit in the gallery and then resize them\n * to fill in the space as much as possible\n *\n * First we will find the max number of children without any controls we can fit.\n */\n const maxNumberOfChildrenInContainer = Math.floor((containerHeight + gapHeightPx) / (childMinHeightPx + gapHeightPx));\n // if all of the children fit in the container just return the number of children\n if (numberOfChildren <= maxNumberOfChildrenInContainer) {\n return maxNumberOfChildrenInContainer;\n }\n /**\n * For the pagination we know the container height, the height of the button bar and the 2 times the gap\n * height, top tile and bottom tile above control bar. So the child space is calculated as:\n *\n * space = height - controlbar - (2 * gap)\n */\n const childSpace = containerHeight - controlBarHeightPx - 2 * gapHeightPx;\n /**\n * Now that we have the childrenSpace height we can figure out how many Children can fir in the childrenSpace.\n * childrenSpace = n * childHeightMin + (n - 1) * gapHeight. isolate n and take the floor.\n *\n * We want to always return at least one video tile if there are children present.So we take the max.\n */\n return Math.max(Math.floor((childSpace + gapHeightPx) / (childMinHeightPx + gapHeightPx)), 1);\n};\n//# sourceMappingURL=OverflowGalleryUtils.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n/** @private */\nexport const REACTION_START_DISPLAY_SIZE = 44;\n/** @private */\nexport const REACTION_NUMBER_OF_ANIMATION_FRAMES = 51;\n/** @private */\nexport const REACTION_SCREEN_SHARE_ANIMATION_TIME_MS = 4133;\n/** @private */\nexport const REACTION_DEFAULT_RESOURCE_FRAME_SIZE_PX = 128;\n/** @private */\nexport const getCombinedKey = (userId, reactionType, receivedAt) => {\n const receivedTime = receivedAt.toISOString();\n return userId + reactionType + receivedTime;\n};\n/** @private */\nexport const getReceivedUnixTime = (receivedTime) => {\n return receivedTime.getTime();\n};\n//# sourceMappingURL=reactionUtils.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { useRef } from 'react';\nimport { smartDominantSpeakerParticipants } from '../../../gallery';\nconst DEFAULT_MAX_OVERFLOW_GALLERY_DOMINANT_SPEAKERS = 6;\nconst DEFAULT_MAX_VIDEO_SREAMS = 4;\n/**\n * @private\n */\nexport const MAX_GRID_PARTICIPANTS_NOT_LARGE_GALLERY = 9;\nconst getOrganizedParticipants = (props) => {\n const { remoteParticipants = [], dominantSpeakers = [], maxGridParticipants = DEFAULT_MAX_VIDEO_SREAMS, maxOverflowGalleryDominantSpeakers = DEFAULT_MAX_OVERFLOW_GALLERY_DOMINANT_SPEAKERS, layout, previousGridParticipants = [], previousOverflowParticipants = [] } = props;\n const callingParticipants = remoteParticipants.filter(p => p.state === 'Connecting' || p.state === 'Ringing');\n const callingParticipantsSet = new Set(callingParticipants.map(p => p.userId));\n const connectedParticipants = remoteParticipants.filter(p => !callingParticipantsSet.has(p.userId));\n const remoteParticipantsOrdered = putVideoParticipantsFirst(connectedParticipants);\n const videoParticipants = remoteParticipants.filter(p => { var _a; return (_a = p.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable; });\n const participantsForGrid = layout === 'floatingLocalVideo' && videoParticipants.length > 0 ? videoParticipants : remoteParticipantsOrdered;\n let newGridParticipants = smartDominantSpeakerParticipants({\n participants: participantsForGrid,\n dominantSpeakers,\n currentParticipants: previousGridParticipants,\n maxDominantSpeakers: maxGridParticipants\n }).slice(0, maxGridParticipants);\n if (layout === 'speaker') {\n if (dominantSpeakers === null || dominantSpeakers === void 0 ? void 0 : dominantSpeakers[0]) {\n newGridParticipants = newGridParticipants.filter(p => p.userId === dominantSpeakers[0]);\n }\n else {\n newGridParticipants = newGridParticipants.slice(1);\n }\n }\n const gridParticipantSet = new Set(newGridParticipants.map(p => p.userId));\n const newOverflowGalleryParticipants = smartDominantSpeakerParticipants({\n participants: remoteParticipantsOrdered.filter(p => !gridParticipantSet.has(p.userId)),\n dominantSpeakers: dominantSpeakers,\n currentParticipants: previousOverflowParticipants,\n maxDominantSpeakers: maxOverflowGalleryDominantSpeakers\n });\n let gridParticipants = newGridParticipants;\n let overflowGalleryParticipants = newOverflowGalleryParticipants;\n // Add the participants being called into the call.\n // If there are already overflow participants, add these to the array of overflow participants\n // Otherwise, add the maximum number to the main grid, then put the rest in the overflow\n if (overflowGalleryParticipants.length === 0) {\n const numberOfCallingParticipantsInGrid = maxGridParticipants - gridParticipants.length;\n const gridCallingParticipants = callingParticipants.slice(0, numberOfCallingParticipantsInGrid);\n const overflowGalleryCallingParticipants = callingParticipants.slice(numberOfCallingParticipantsInGrid);\n gridParticipants = gridParticipants.concat(gridCallingParticipants);\n overflowGalleryParticipants = overflowGalleryCallingParticipants;\n }\n else {\n overflowGalleryParticipants = overflowGalleryParticipants.concat(callingParticipants);\n }\n return {\n gridParticipants,\n overflowGalleryParticipants\n };\n};\n/**\n * Hook to determine which participants should be in grid and overflow gallery and their order respectively\n * @private\n */\nexport const useOrganizedParticipants = (props) => {\n var _a, _b;\n const spotlightedParticipantUserIds = (_a = props.spotlightedParticipantUserIds) !== null && _a !== void 0 ? _a : [];\n const pinnedParticipantUserIds = (_b = props.pinnedParticipantUserIds) !== null && _b !== void 0 ? _b : [];\n // Focussed participants are the participants that are either spotlighted or pinned. Ordered by spotlighted first and then pinned.\n // A set is used to dedupe participants.\n const focusedParticipantUserIdSet = new Set(spotlightedParticipantUserIds.concat(pinnedParticipantUserIds));\n const focusedParticipants = [...focusedParticipantUserIdSet].map(userId => props.remoteParticipants.find(p => p.userId === userId)).filter(p => p !== undefined);\n // Unfocused participants are the rest of the participants\n const unfocusedParticipants = props.remoteParticipants.filter(p => !focusedParticipantUserIdSet.has(p.userId));\n const currentGridParticipants = useRef([]);\n const currentOverflowGalleryParticipants = useRef([]);\n const organizedParticipantsArgs = Object.assign(Object.assign({}, props), { \n // if there are focused participants then leave no room in the grid by setting maxGridParticipants to 0\n maxGridParticipants: focusedParticipants.length > 0 || props.isScreenShareActive ? 0 : props.maxGridParticipants, remoteParticipants: unfocusedParticipants, previousGridParticipants: currentGridParticipants.current, previousOverflowParticipants: currentOverflowGalleryParticipants.current });\n const organizedParticipants = getOrganizedParticipants(organizedParticipantsArgs);\n currentGridParticipants.current = organizedParticipants.gridParticipants;\n currentOverflowGalleryParticipants.current = organizedParticipants.overflowGalleryParticipants;\n return focusedParticipants.length > 0 ? {\n gridParticipants: props.isScreenShareActive ? [] : focusedParticipants,\n overflowGalleryParticipants: props.isScreenShareActive ? focusedParticipants.concat(organizedParticipants.overflowGalleryParticipants) : organizedParticipants.overflowGalleryParticipants\n } : organizedParticipants;\n};\nconst putVideoParticipantsFirst = (remoteParticipants) => {\n const videoParticipants = [];\n const audioParticipants = [];\n remoteParticipants.forEach(p => {\n var _a;\n if ((_a = p.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable) {\n videoParticipants.push(p);\n }\n else {\n audioParticipants.push(p);\n }\n });\n const remoteParticipantSortedByVideo = videoParticipants.concat(audioParticipants);\n return remoteParticipantSortedByVideo;\n};\n/**\n * @private\n */\nexport const renderTiles = (gridParticipants, onRenderRemoteParticipant, maxRemoteVideoStreams, indexesToRender, overflowGalleryParticipants, dominantSpeakers) => {\n const _dominantSpeakers = dominantSpeakers !== null && dominantSpeakers !== void 0 ? dominantSpeakers : [];\n let streamsLeftToRender = maxRemoteVideoStreams;\n // Render the grid participants\n const participantWithStreamsToRenderInGrid = gridParticipants.filter(p => { var _a; return (_a = p === null || p === void 0 ? void 0 : p.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable; });\n const dominantSpeakerWithStreamsToRenderInGrid = _dominantSpeakers.filter(userId => participantWithStreamsToRenderInGrid.find(p => (p === null || p === void 0 ? void 0 : p.userId) === userId)).slice(0, streamsLeftToRender);\n streamsLeftToRender = streamsLeftToRender - dominantSpeakerWithStreamsToRenderInGrid.length;\n const gridTiles = gridParticipants.map(p => {\n var _a;\n return onRenderRemoteParticipant(p, dominantSpeakerWithStreamsToRenderInGrid.includes(p.userId) || ((_a = p.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable) && streamsLeftToRender-- > 0);\n });\n // Render the overflow participants\n const participantWithStreamsToRenderInOverflow = indexesToRender.map(i => {\n return overflowGalleryParticipants.at(i);\n }).filter(p => { var _a; return (_a = p === null || p === void 0 ? void 0 : p.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable; });\n const dominantSpeakerWithStreamsToRenderInOverflow = _dominantSpeakers.filter(userId => participantWithStreamsToRenderInOverflow.find(p => (p === null || p === void 0 ? void 0 : p.userId) === userId)).slice(0, streamsLeftToRender);\n streamsLeftToRender = streamsLeftToRender - dominantSpeakerWithStreamsToRenderInOverflow.length;\n const overflowGalleryTiles = overflowGalleryParticipants.map(p => {\n var _a;\n return onRenderRemoteParticipant(p, dominantSpeakerWithStreamsToRenderInOverflow.includes(p.userId) || ((_a = p.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable) && streamsLeftToRender-- > 0);\n });\n return {\n gridTiles,\n overflowGalleryTiles\n };\n};\n/**\n * @private\n */\nexport const getEmojiResource = (reactionName, reactionResources) => {\n var _a, _b, _c, _d, _e;\n switch (reactionName) {\n case 'like':\n return (_a = reactionResources.likeReaction) === null || _a === void 0 ? void 0 : _a.url;\n case 'heart':\n return (_b = reactionResources.heartReaction) === null || _b === void 0 ? void 0 : _b.url;\n case 'laugh':\n return (_c = reactionResources.laughReaction) === null || _c === void 0 ? void 0 : _c.url;\n case 'applause':\n return (_d = reactionResources.applauseReaction) === null || _d === void 0 ? void 0 : _d.url;\n case 'surprised':\n return (_e = reactionResources.surprisedReaction) === null || _e === void 0 ? void 0 : _e.url;\n }\n return undefined;\n};\n/**\n * @private\n */\nexport const getEmojiFrameCount = (reactionName, reactionResources) => {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n switch (reactionName) {\n case 'like':\n return (_b = (_a = reactionResources.likeReaction) === null || _a === void 0 ? void 0 : _a.frameCount) !== null && _b !== void 0 ? _b : 0;\n case 'heart':\n return (_d = (_c = reactionResources.heartReaction) === null || _c === void 0 ? void 0 : _c.frameCount) !== null && _d !== void 0 ? _d : 0;\n case 'laugh':\n return (_f = (_e = reactionResources.laughReaction) === null || _e === void 0 ? void 0 : _e.frameCount) !== null && _f !== void 0 ? _f : 0;\n case 'applause':\n return (_h = (_g = reactionResources.applauseReaction) === null || _g === void 0 ? void 0 : _g.frameCount) !== null && _h !== void 0 ? _h : 0;\n case 'surprised':\n return (_k = (_j = reactionResources.surprisedReaction) === null || _j === void 0 ? void 0 : _j.frameCount) !== null && _k !== void 0 ? _k : 0;\n default:\n return 0;\n }\n};\n//# sourceMappingURL=videoGalleryLayoutUtils.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { DirectionalHint, Icon, IconButton, mergeStyles, Persona, Stack, Text } from '@fluentui/react';\nimport React, { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { useIdentifiers } from '../identifiers';\nimport { useLocale } from '../localization';\nimport { useTheme } from '../theming';\nimport { RaisedHandIcon } from './assets/RaisedHandIcon';\nimport { disabledVideoHint, displayNameStyle, iconContainerStyle, overlayContainerStyles, rootStyles, videoContainerStyles, tileInfoContainerStyle, participantStateStringStyles, videoTileHighContrastStyles } from './styles/VideoTile.styles';\nimport { pinIconStyle } from './styles/VideoTile.styles';\nimport useLongPress from './utils/useLongPress';\nimport { moreButtonStyles } from './styles/VideoTile.styles';\nimport { raiseHandContainerStyles } from './styles/VideoTile.styles';\nimport { formatMoreButtonAriaDescription } from './utils';\n// Coin max size is set to PersonaSize.size100\nconst DEFAULT_PERSONA_MAX_SIZE_PX = 100;\n// Coin min size is set PersonaSize.size32\nconst DEFAULT_PERSONA_MIN_SIZE_PX = 32;\nconst DefaultPlaceholder = (props) => {\n const { text, noVideoAvailableAriaLabel, coinSize, hidePersonaDetails } = props;\n return React.createElement(Stack, { className: mergeStyles({\n position: 'absolute',\n height: '100%',\n width: '100%'\n }) },\n React.createElement(Stack, { styles: defaultPersonaStyles }, coinSize && React.createElement(Persona, { coinSize: coinSize, hidePersonaDetails: hidePersonaDetails, text: text !== null && text !== void 0 ? text : '', initialsTextColor: \"white\", \"aria-label\": noVideoAvailableAriaLabel !== null && noVideoAvailableAriaLabel !== void 0 ? noVideoAvailableAriaLabel : '', showOverflowTooltip: false })));\n};\nconst defaultPersonaStyles = {\n root: {\n margin: 'auto',\n maxHeight: '100%'\n }\n};\nconst videoTileMoreMenuIconProps = {\n iconName: undefined,\n style: {\n display: 'none'\n }\n};\nconst videoTileMoreMenuProps = {\n directionalHint: DirectionalHint.topLeftEdge,\n isBeakVisible: false,\n styles: {\n container: {\n maxWidth: '8rem'\n }\n }\n};\nconst VideoTileMoreOptionsButton = (props) => {\n const locale = useLocale().strings.videoTile;\n const theme = useTheme();\n const { contextualMenu, canShowContextMenuButton, participantDisplayName, participantHandRaised, participantIsSpeaking, participantState, participantIsMuted } = props;\n const [moreButtonAiraDescription, setMoreButtonAriaDescription] = useState('');\n useEffect(() => {\n setMoreButtonAriaDescription(formatMoreButtonAriaDescription(participantDisplayName, participantIsMuted, participantHandRaised, participantState, participantIsSpeaking, locale));\n }, [participantDisplayName, participantHandRaised, participantIsMuted, participantIsSpeaking, participantState, locale]);\n if (!contextualMenu) {\n return React.createElement(React.Fragment, null);\n }\n const optionsIcon = canShowContextMenuButton ? 'VideoTileMoreOptions' : undefined;\n return React.createElement(IconButton, { \"data-ui-id\": \"video-tile-more-options-button\", ariaLabel: moreButtonAiraDescription, styles: moreButtonStyles(theme), menuIconProps: videoTileMoreMenuIconProps, menuProps: Object.assign(Object.assign({}, videoTileMoreMenuProps), contextualMenu), iconProps: {\n iconName: optionsIcon\n } });\n};\n/**\n * A component to render the video stream for a single call participant.\n *\n * Use with {@link GridLayout} in a {@link VideoGallery}.\n *\n * @public\n */\nexport const VideoTile = (props) => {\n const { children, displayName, initialsName, isMirrored, isMuted, isSpotlighted, isPinned, onRenderPlaceholder, renderElement, overlay: reactionOverlay, showLabel = true, showMuteIndicator = true, styles, userId, noVideoAvailableAriaLabel, isSpeaking, raisedHand, personaMinSize = DEFAULT_PERSONA_MIN_SIZE_PX, personaMaxSize = DEFAULT_PERSONA_MAX_SIZE_PX, contextualMenu } = props;\n const [isHovered, setIsHovered] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n // need to set a default otherwise the resizeObserver will get stuck in an infinite loop.\n const [personaSize, setPersonaSize] = useState(1);\n const videoTileRef = useRef(null);\n const locale = useLocale();\n const theme = useTheme();\n const callingPalette = theme.callingPalette;\n const isVideoRendered = !!renderElement;\n const observer = useRef(new ResizeObserver((entries) => {\n if (!entries[0]) {\n return;\n }\n const { width, height } = entries[0].contentRect;\n const personaCalcSize = Math.min(width, height) / 3;\n // we only want to set the persona size if it has changed\n if (personaCalcSize !== personaSize) {\n setPersonaSize(Math.max(Math.min(personaCalcSize, personaMaxSize), personaMinSize));\n }\n }));\n useLayoutEffect(() => {\n if (videoTileRef.current) {\n observer.current.observe(videoTileRef.current);\n }\n const currentObserver = observer.current;\n return () => currentObserver.disconnect();\n }, [videoTileRef]);\n // TODO: Remove after calling sdk fix the keybaord focus\n useEffect(() => {\n var _a;\n // PPTLive stream id is null\n if ((_a = videoTileRef.current) === null || _a === void 0 ? void 0 : _a.id) {\n return;\n }\n let observer;\n if (videoTileRef.current) {\n observer = new MutationObserver(mutationsList => {\n for (const mutation of mutationsList) {\n if (mutation.type === 'childList') {\n const iframe = document.querySelector('iframe');\n if (iframe) {\n if (!iframe.getAttribute('tabIndex')) {\n iframe.setAttribute('tabIndex', '-1');\n }\n }\n }\n }\n });\n observer.observe(videoTileRef.current, {\n childList: true,\n subtree: true\n });\n }\n return () => {\n observer === null || observer === void 0 ? void 0 : observer.disconnect();\n };\n }, [displayName, renderElement]);\n const useLongPressProps = useMemo(() => {\n return {\n onLongPress: () => {\n var _a;\n (_a = props.onLongTouch) === null || _a === void 0 ? void 0 : _a.call(props);\n },\n touchEventsOnly: true\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.onLongTouch]);\n const longPressHandlers = useLongPress(useLongPressProps);\n const hoverHandlers = useMemo(() => {\n return {\n onMouseEnter: () => setIsHovered(true),\n onMouseLeave: () => setIsHovered(false),\n onFocus: () => setIsFocused(true),\n onBlur: () => setIsFocused(false)\n };\n }, []);\n const placeholderOptions = {\n userId,\n text: initialsName !== null && initialsName !== void 0 ? initialsName : displayName,\n noVideoAvailableAriaLabel,\n coinSize: personaSize,\n styles: defaultPersonaStyles,\n hidePersonaDetails: true\n };\n const videoHintWithBorderRadius = mergeStyles(disabledVideoHint, {\n borderRadius: theme.effects.roundedCorner4,\n backgroundColor: callingPalette.videoTileLabelBackgroundLight\n });\n const tileInfoStyle = useMemo(() => mergeStyles(isVideoRendered || props.alwaysShowLabelBackground ? videoHintWithBorderRadius : disabledVideoHint, styles === null || styles === void 0 ? void 0 : styles.displayNameContainer), [isVideoRendered, videoHintWithBorderRadius, styles === null || styles === void 0 ? void 0 : styles.displayNameContainer, props.alwaysShowLabelBackground]);\n const ids = useIdentifiers();\n const canShowLabel = showLabel && (displayName || showMuteIndicator && isMuted);\n const participantStateString = getParticipantStateString(props, locale);\n const canShowContextMenuButton = isHovered || isFocused;\n let raisedHandBackgroundColor = '';\n raisedHandBackgroundColor = callingPalette.raiseHandGold;\n return React.createElement(Stack, Object.assign({ \"data-ui-id\": ids.videoTile, className: mergeStyles(rootStyles, {\n background: theme.palette.neutralLighter,\n borderRadius: theme.effects.roundedCorner4\n }, isSpeaking || raisedHand ? {\n '&::after': {\n content: `''`,\n position: 'absolute',\n border: `0.25rem solid ${isSpeaking ? theme.palette.themePrimary : raisedHandBackgroundColor}`,\n borderRadius: theme.effects.roundedCorner4,\n width: '100%',\n height: '100%',\n pointerEvents: 'none'\n }\n } : {}, videoTileHighContrastStyles(theme), styles === null || styles === void 0 ? void 0 : styles.root) }, longPressHandlers),\n React.createElement(\"div\", Object.assign({ ref: videoTileRef, style: {\n width: '100%',\n height: '100%'\n } }, hoverHandlers, { \"data-is-focusable\": true }),\n isVideoRendered ? React.createElement(Stack, { className: mergeStyles(videoContainerStyles, isMirrored && {\n transform: 'scaleX(-1)'\n }, styles === null || styles === void 0 ? void 0 : styles.videoContainer) }, renderElement) : React.createElement(Stack, { className: mergeStyles(videoContainerStyles, {\n opacity: participantStateString || props.participantState === 'Idle' ? 0.4 : 1\n }) }, onRenderPlaceholder ? onRenderPlaceholder(userId !== null && userId !== void 0 ? userId : '', placeholderOptions, DefaultPlaceholder) : React.createElement(DefaultPlaceholder, Object.assign({}, placeholderOptions))),\n reactionOverlay,\n (canShowLabel || participantStateString) && React.createElement(Stack, { horizontal: true, className: tileInfoContainerStyle, tokens: tileInfoContainerTokens },\n React.createElement(Stack, { horizontal: true, className: tileInfoStyle },\n canShowLabel && React.createElement(Text, { className: mergeStyles(displayNameStyle), title: displayName, style: {\n color: participantStateString ? theme.palette.neutralSecondary : 'inherit'\n }, \"data-ui-id\": \"video-tile-display-name\" }, displayName),\n participantStateString && React.createElement(Text, { className: mergeStyles(participantStateStringStyles(theme)) }, bracketedParticipantString(participantStateString, !!canShowLabel)),\n showMuteIndicator && isMuted && React.createElement(Stack, { className: mergeStyles(iconContainerStyle) },\n React.createElement(Icon, { iconName: \"VideoTileMicOff\" })),\n isSpotlighted && React.createElement(Stack, { className: mergeStyles(iconContainerStyle) },\n React.createElement(Icon, { iconName: \"VideoTileSpotlighted\" })),\n isPinned && React.createElement(Stack, { className: mergeStyles(iconContainerStyle) },\n React.createElement(Icon, { iconName: \"VideoTilePinned\", className: mergeStyles(pinIconStyle) })),\n React.createElement(VideoTileMoreOptionsButton, { contextualMenu: contextualMenu, participantDisplayName: displayName, participantHandRaised: !!raisedHand, participantIsMuted: isMuted, participantState: participantStateString, participantIsSpeaking: isSpeaking, canShowContextMenuButton: canShowContextMenuButton }))),\n children && React.createElement(Stack, { className: mergeStyles(overlayContainerStyles, styles === null || styles === void 0 ? void 0 : styles.overlayContainer) }, children),\n raisedHand && React.createElement(Stack, { horizontal: true, tokens: {\n childrenGap: '0.2rem'\n }, className: raiseHandContainerStyles(theme, !canShowLabel) },\n React.createElement(Stack.Item, null,\n React.createElement(Text, null, raisedHand.raisedHandOrderPosition)),\n React.createElement(Stack.Item, null,\n React.createElement(RaisedHandIcon, null)))));\n};\nconst getParticipantStateString = (props, locale) => {\n const strings = Object.assign(Object.assign({}, locale.strings.videoTile), props.strings);\n return props.participantState === 'EarlyMedia' || props.participantState === 'Ringing' ? strings === null || strings === void 0 ? void 0 : strings.participantStateRinging : props.participantState === 'Hold' ? strings === null || strings === void 0 ? void 0 : strings.participantStateHold : undefined;\n};\nconst tileInfoContainerTokens = {\n // A horizontal Stack sets the left margin to 0 for all it's children.\n // We need to allow the children to set their own margins\n childrenGap: 'none'\n};\nconst bracketedParticipantString = (participantString, withBrackets) => {\n return withBrackets ? `(${participantString})` : participantString;\n};\n//# sourceMappingURL=VideoTile.js.map"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","StartCaptionsButton","props","onStartCaptions","onStopCaptions","onSetSpokenLanguage","currentSpokenLanguage","localeStrings","strings","startCaptionsButton","Object","assign","options","useMemo","spokenLanguage","hasSetSpokenLanguage","setHasSetSpokenLanguage","useState","onToggleStartCaptions","useCallback","checked","useEffect","onClick","onRenderOnIcon","disabled","iconName","onRenderOffIcon","StreamMedia","containerEl","useRef","theme","isMirrored","videoStreamElement","styles","loadingState","pipEnabled","setPipEnabled","container","current","innerHTML","addEventListener","appendChild","className","root","ref","helperTextStyle","fontWeight","fontSize","lineHeight","color","palette","neutralPrimary","paddingTop","ratingHelperTextStyle","themePrimary","marginBottom","marginTop","textAlign","ratingStyles","height","ratingStarIsLarge","padding","ratingStar","transform","margin","ratingStarFront","titleContainerClassName","paddingBottom","_StarSurvey","onStarRatingSelected","selectedIcon","unselectedIcon","rating","setRating","ratingHelperText","setRatingHelperText","useTheme","onRatingChange","ev","starSurveyOneStarText","starSurveyTwoStarText","starSurveyThreeStarText","starSurveyFourStarText","starSurveyFiveStarText","Stack","verticalAlign","Text","starSurveyHelperText","Rating","max","size","defaultRating","allowZeroStars","onChange","icon","ariaLabelFormat","starRatingAriaLabel","questionTextStyle","neutralSecondary","checkboxClassName","paddingLeft","freeFormTextCheckboxStyles","width","label","freeFormTextFieldClassName","marginLeft","input","_TagsSurvey","callIssuesToTag","categoryHeadings","onConfirm","showFreeFormTextField","selectedTags","setSelectedTags","textResponse","setTextResponse","selectedTextResponse","setSelectedTextResponse","checkedTextFields","setCheckedTextFields","tags","overallRating","audioRating","videoRating","screenshareRating","forEach","issueCategory","map","issue","issueCapitalized","charAt","toUpperCase","slice","issueMessages","push","message","prevState","category","issues","_a","_b","categoryIssues","filter","id","onRenderLabel","TextField","key","underlined","placeholder","tagsSurveyTextFieldDefaultText","v","tagsSurveyQuestion","Pivot","i","PivotItem","headerText","headerButtonProps","alwaysRender","t","Checkbox","includes","tagsSurveyHelperText","SystemMessage","content","Icon","liveMessage","setLiveMessage","setTimeout","ariaLive","clearOnUnmount","horizontal","containerStyle","tabIndex","style","wordBreak","role","title","variant","IndicatorComponent","typingUsers","onRenderUser","typingUsersMentioned","totalCharacterCount","ids","typingUser","displayName","additionalCharCount","length","delimiter","usersElement","userDisplayNameStyles","userElements","user","index","truncatedDisplayName","substring","pop","getUsersElement","typingUserDisplayName","numUserNotMentioned","spanElements","numTypingUsers","numTypingUsersAbbreviated","variables","typingString","singleUser","multipleUsers","users","multipleUsersAbbreviateOne","multipleUsersAbbreviateMany","numOthers","formatInlineElements","getSpanElements","labelString","namesString","replace","getIndicatorString","userNames","join","getNamesString","typingIndicator","TypingIndicator","typingUsersToRender","undefined","indicatorComponent","str","vars","elements","regex","RegExp","array","exec","prev","lastIndex","VerticalGallery","children","childrenPerPage","onFetchTilesToRender","page","setPage","buttonState","setButtonState","previous","numberOfChildren","lastPage","Math","ceil","indexesArray","Array","keys","clippedPage","childrenOnCurrentPage","showButtons","childContainerStyle","childrenStyles","child","verticalGalleryVideoTile","VerticalGalleryControlBar","buttonsDisabled","onPreviousButtonClick","onNextButtonClick","totalPages","currentPage","verticalGallery","pageCounterContainerStyles","previousButtonSyles","previousButton","pageCounterStyles","counter","nextButtonsStyles","nextButton","previousButtonAriaLabel","leftNavButtonAriaLabel","total","nextButtonAriaLabel","rightNavButtonAriaLabel","horizontalAlign","tokens","childrenGap","ariaLabel","overflowGalleryLeftNavButton","verticalGalleryPageCounter","overflowGalleryRightNavButton","VideoEffectsItemContainerHeight","VideoEffectsItemContainerWidth","hiddenVideoEffectsItemContainerStyles","visibility","border","_VideoEffectsItem","_c","_d","_e","_f","_g","_h","_j","isSelected","backgroundImage","backgroundProps","url","iconContainerStyles","iconContainer","textContainerStyles","overflow","textContainer","containerStyles","videoEffectsItemContainerStyles","background","args","neutralQuaternaryAlt","backgroundPosition","backgroundSize","borderRadius","cursor","outlineOffset","outline","boxSizing","TooltipHost","tooltipProps","itemKey","DefaultButton","onSelect","call","componentRef","iconProps","whiteSpace","textOverflow","_VideoBackgroundEffectsPicker","componentControlledSelectedEffectKey","setComponentControlledSelectedEffectKey","defaultSelectedEffectKey","useWarnings","name","controlledUsage","onChangeProp","valueProp","defaultValueProp","selectedEffect","selectedEffectKey","convertedOptions","option","setSelectedEffect","itemsPerRow","optionsByRow","fillCount","effectsLabelId","useId","FocusZone","Label","rowIndex","rowRoot","wrap","from","_","loadingStyle","RemoteScreenShare","userId","isMuted","renderElement","onCreateRemoteStreamView","onDisposeRemoteStreamView","isReceiving","participantVideoScalingMode","reactionResources","localParticipant","remoteParticipants","locale","loadingMessage","videoGallery","screenShareLoadingMessage","participant","VideoTile","onRenderPlaceholder","LoadingSpinner","overlay","MeetingReactionOverlay","overlayMode","Spinner","LocalScreenShare","isAvailable","onCreateLocalStreamView","onDisposeLocalScreenShareStreamView","isScreenSharingOn","displayNamePlaceholder","localScreenShareLoadingMessage","rootLayoutStyle","position","videoGalleryLayoutGap","scrollableHorizontalGalleryStyles","minHeight","paddingRight","scrollableHorizontalGalleryContainerStyles","display","ScrollableHorizontalGallery","horizontalGalleryElements","events","dragabbleEvents","OverflowGallery","shouldFloatLocalVideo","isNarrow","isShort","overflowGalleryElements","horizontalGalleryStyles","overflowGalleryPosition","verticalGalleryStyles","onChildrenPerPageChange","parentWidth","galleryStyles","ResponsiveVerticalGallery","controlBarHeightRem","gapHeightRem","ResponsiveHorizontalGallery","buttonWidthRem","gapWidthRem","DefaultLayout","dominantSpeakers","localVideoComponent","screenShareComponent","onRenderRemoteParticipant","maxRemoteVideoStreams","parentHeight","pinnedParticipantUserIds","spotlightedParticipantUserIds","remoteVideosOn","p","videoStream","gridParticipants","overflowGalleryParticipants","maxGridParticipants","isScreenShareActive","maxOverflowGalleryDominantSpeakers","layout","indexesToRender","setIndexesToRender","gridTiles","overflowGalleryTiles","concat","overflowGallery","horizontalGallery","n","GridLayout","gridLayout","overflowGalleryTrampoline","gallery","galleryPosition","DRAG_OPTIONS","moveMenuItemText","closeMenuItemText","menu","ContextualMenu","keepInBounds","modalMaxDragPosition","x","y","FloatingLocalVideo","layerHostId","localVideoSizeRem","modalMinDragPosition","modalStyles","layerProps","hostId","isOpen","isModeless","dragOptions","maxDragPosition","minDragPosition","dataUiId","localVideoMovementAriaLabel","localVideoMovementLabel","innerLayoutStyle","layerHostStyle","left","top","pointerEvents","FloatingLocalVideoLayout","showCameraSwitcherInLocalPreview","localVideoTileSize","wrappedLocalVideoComponent","boxShadow","effects","elevation8","zIndex","LayerHost","SpeakerVideoLayout","FocusedContentLayout","DEFAULT_MAX_REMOTE_VIDEO_STREAMS","unselectable","DEFAULT_REMOTE_VIDEO_TILE_MENU_OPTIONS","kind","VideoGallery","localVideoViewOptions","remoteVideoViewOptions","onRenderLocalVideoTile","onRenderRemoteVideoTile","onDisposeLocalStreamView","onDisposeRemoteScreenShareStreamView","onDisposeRemoteVideoStreamView","onRenderAvatar","showMuteIndicator","localVideoCameraCycleButtonProps","onPinParticipant","onPinParticipantHandler","onUnpinParticipant","onUnpinParticipantHandler","remoteVideoTileMenu","spotlightedParticipants","onStartLocalSpotlight","onStartRemoteSpotlight","onStopLocalSpotlight","onStopRemoteSpotlight","maxParticipantsToSpotlight","videoTilesOptions","onMuteParticipant","drawerMenuHostIdFromProp","drawerMenuHostId","localTileNotInGrid","containerRef","containerWidth","containerHeight","pinnedParticipantsState","setPinnedParticipantsState","selectedScalingModeState","setselectedScalingModeState","onUpdateScalingMode","remoteUserId","scalingMode","pinnedParticipants","pinParticipant","find","console","warn","pinnedParticipantId","remoteParticipant","showLocalVideoTileLabel","localVideoTile","isSpotlighted","spotlight","localVideoTileStyles","roundedCorner4","localVideo","initialsName","alwaysShowLabelBackground","localVideoLabel","showLabel","localVideoCameraSwitcherLabel","localVideoSelectedDescription","raisedHand","reaction","onStartSpotlight","onStopSpotlight","menuKind","participantsCount","announcementString","setAnnouncementString","toggleAnnouncerString","announcement","defaultOnRenderVideoTile","isVideoParticipant","remoteVideoStream","selectedScalingMode","isPinned","streamId","streamSize","createViewOptions","participantState","state","disablePinMenuItem","screenShareParticipant","screenShareStream","localScreenShareStreamComponent","remoteScreenShareComponent","layoutProps","videoGalleryLayout","Announcer","ParticipantVideoTileOverlay","emojiSize","isValidImageSource","setIsValidImageSource","backgroundImageUrl","reactionType","frameCount","currentUnixTimeStamp","Date","now","receivedUnixTimestamp","ge","receivedOn","canRenderReaction","fetch","res","ok","catch","warning","spriteImageUrl","reactionContainerStyles","rawFrameSize","justifyContent","alignItems","backgroundColor","RemoteContentShareReactionOverlay","hostDivHeight","hostDivWidth","visibleReactions","setVisibleReactions","latestReceivedReaction","activeTypeCount","like","heart","laugh","applause","surprised","visibleReactionPosition","fill","remoteParticipantReactions","updateVisibleReactions","combinedKey","MAX_NUMBER_OF_EMOJIS","status","reactionMovementIndex","findIndex","item","styleBucket","removeVisibleReaction","entries","userLastReaction","displaySizePx","sizeScale","reactionMovementStyle","leftPosition","movementIndex","canRender","heightMaxScale","onAnimationEnd","opacityMax","SMALL_FLOATING_MODAL_SIZE_REM","LARGE_FLOATING_MODAL_SIZE_REM","SHORT_VERTICAL_GALLERY_FLOATING_MODAL_SIZE_REM","VERTICAL_GALLERY_FLOATING_MODAL_SIZE_REM","LOCAL_VIDEO_TILE_ZINDEX","localVideoTileContainerStyle","localVideoTileSizeRem","screenSharePresent","minWidth","bottom","dockedlocalVideoTileContainerPaddingRem","right","localVideoTileWithControlsContainerStyle","floatingLocalVideoModalStyle","modalSizeRem","main","floatinglocalVideoModalInitialPositionGapRem","elevation16","localVideoModalStyles","floatingLocalVideoTileStyle","keyboardMoveIconContainer","remoteVideoTileWrapperStyle","drawerMenuWrapperStyles","horizontalGalleryContainerStyle","SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM","LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM","horizontalGalleryStyle","SMALL_HORIZONTAL_GALLERY_TILE_STYLE","LARGE_HORIZONTAL_GALLERY_TILE_STYLE","maxWidth","maxHeight","SHORT_VERTICAL_GALLERY_TILE_SIZE_REM","VERTICAL_GALLERY_TILE_SIZE_REM","verticalGalleryContainerStyle","SHORT_VERTICAL_GALLERY_TILE_STYLE","VERTICAL_GALLERY_TILE_STYLE","verticalGalleryStyle","useVideoStreamLifecycleMaintainer","isStreamAvailable","onCreateStreamView","onDisposeStreamView","renderElementExists","videoStreamViewResult","setVideoStreamViewResult","useLocalVideoStreamLifecycleMaintainer","useRemoteVideoStreamLifecycleMaintainer","remoteParticipantId","useVideoTileContextualMenuProps","view","myUserId","items","muteParticipantMenuItemLabel","text","unpinParticipantForMe","unpinActionString","unpinParticipantMenuItemAriaLabel","participantName","pinParticipantForMe","pinActionString","pinnedParticipantAnnouncementAriaLabel","pinParticipantForMeLimitReached","stopSpotlightMenuLabel","stopSpotlightOnSelfVideoTileMenuLabel","stopSpotlightVideoTileMenuLabel","startSpotlightMenuLabel","addSpotlightVideoTileMenuLabel","startSpotlightVideoTileMenuLabel","maxSpotlightedParticipantsReached","spotlightLimitReachedMenuTitle","fitRemoteParticipantToFrame","updateScalingMode","fillRemoteParticipantFrame","calloutProps","preventDismissOnEvent","shouldFocusOnContainer","calculateHorizontalChildrenPerPage","childMinWidth","gapWidth","numberOfChildrenInContainer","floor","childrenSpace","calculateVerticalChildrenPerPage","controlBarHeight","childMinHeightPx","gapHeightPx","controlBarHeightPx","maxNumberOfChildrenInContainer","childSpace","REACTION_START_DISPLAY_SIZE","REACTION_NUMBER_OF_ANIMATION_FRAMES","REACTION_SCREEN_SHARE_ANIMATION_TIME_MS","REACTION_DEFAULT_RESOURCE_FRAME_SIZE_PX","getCombinedKey","receivedAt","toISOString","getReceivedUnixTime","receivedTime","getTime","DEFAULT_MAX_OVERFLOW_GALLERY_DOMINANT_SPEAKERS","DEFAULT_MAX_VIDEO_SREAMS","MAX_GRID_PARTICIPANTS_NOT_LARGE_GALLERY","useOrganizedParticipants","focusedParticipantUserIdSet","Set","focusedParticipants","unfocusedParticipants","has","currentGridParticipants","currentOverflowGalleryParticipants","organizedParticipants","previousGridParticipants","previousOverflowParticipants","callingParticipants","callingParticipantsSet","connectedParticipants","remoteParticipantsOrdered","putVideoParticipantsFirst","videoParticipants","participantsForGrid","newGridParticipants","participants","currentParticipants","maxDominantSpeakers","gridParticipantSet","numberOfCallingParticipantsInGrid","gridCallingParticipants","overflowGalleryCallingParticipants","getOrganizedParticipants","audioParticipants","renderTiles","_dominantSpeakers","streamsLeftToRender","participantWithStreamsToRenderInGrid","dominantSpeakerWithStreamsToRenderInGrid","participantWithStreamsToRenderInOverflow","at","dominantSpeakerWithStreamsToRenderInOverflow","getEmojiResource","reactionName","likeReaction","heartReaction","laughReaction","applauseReaction","surprisedReaction","getEmojiFrameCount","_k","DEFAULT_PERSONA_MAX_SIZE_PX","DEFAULT_PERSONA_MIN_SIZE_PX","DefaultPlaceholder","noVideoAvailableAriaLabel","coinSize","hidePersonaDetails","defaultPersonaStyles","initialsTextColor","showOverflowTooltip","videoTileMoreMenuIconProps","videoTileMoreMenuProps","directionalHint","isBeakVisible","VideoTileMoreOptionsButton","videoTile","contextualMenu","canShowContextMenuButton","participantDisplayName","participantHandRaised","participantIsSpeaking","participantIsMuted","moreButtonAiraDescription","setMoreButtonAriaDescription","optionsIcon","menuIconProps","menuProps","reactionOverlay","isSpeaking","personaMinSize","personaMaxSize","isHovered","setIsHovered","isFocused","setIsFocused","personaSize","setPersonaSize","videoTileRef","callingPalette","isVideoRendered","observer","ResizeObserver","contentRect","personaCalcSize","min","useLayoutEffect","observe","currentObserver","disconnect","MutationObserver","mutationsList","mutation","type","iframe","document","querySelector","getAttribute","setAttribute","childList","subtree","useLongPressProps","onLongPress","onLongTouch","touchEventsOnly","longPressHandlers","hoverHandlers","onMouseEnter","onMouseLeave","onFocus","onBlur","placeholderOptions","videoHintWithBorderRadius","videoTileLabelBackgroundLight","tileInfoStyle","displayNameContainer","canShowLabel","participantStateString","getParticipantStateString","raisedHandBackgroundColor","raiseHandGold","neutralLighter","videoContainer","opacity","tileInfoContainerTokens","bracketedParticipantString","overlayContainer","raisedHandOrderPosition","participantStateRinging","participantStateHold","participantString","withBrackets"],"sourceRoot":""}