{"version":3,"file":"static/js/9799_e5b163311b755833eddf.js","mappings":"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","sources":["file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/Announcer.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/Announcer/AnnouncerContext.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/Announcer/MessageBlock.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/Announcer/Announcer.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/Announcer/LiveAnnouncer.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/Announcer/AnnouncerMessage.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/Announcer/LiveMessage.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/CameraButton.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/Caption.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/CaptionsBanner.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/CaptionsSettingsModal.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/FileCard.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/FileCardGroup.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/FileUploadCards.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsEditBox.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageActionsFlyout.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageContent.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/FileDownloadCards.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsMessageBubble.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageActionMenu.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponent.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/ComplianceBanner/BannerMessage.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/ComplianceBanner/DelayedUpdateBanner.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/ComplianceBanner/ComplianceBanner.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/ComplianceBanner/Utils.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/ControlBar.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/ControlButtonTooltip.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/ControlBarButton.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/DevicesButton.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/Drawer/DrawerMenuItem.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/Drawer/DrawerContentContainer.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/Drawer/DrawerLightDismiss.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/Drawer/DrawerSurface.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/Drawer/DrawerMenu.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/EndCallButton.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/ErrorBar.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/GridLayout.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/HighContrastAwareIcon.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/HorizontalGallery.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/InputBoxComponent.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/LocalVideoCameraButton.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@azure+communication-react@1.10.0_6x3ev4d3227te4dl7uene6lmqi/node_modules/@azure/communication-react/dist/dist-esm/react-components/src/components/LocalVideoTile.js"],"sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { Stack } from '@fluentui/react';\nimport React from 'react';\n/**\n * @internal\n * Announcer component to maker aria announcements on actions\n */\nexport const Announcer = (props) => {\n const { announcementString, ariaLive } = props;\n return React.createElement(Stack, { \"aria-label\": announcementString, \"aria-live\": ariaLive, styles: announcerStyles });\n};\n/**\n * Styles to hide the announcer from view but still existing on the DOM tree it so that narration can happen.\n */\nconst announcerStyles = {\n root: {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: 0,\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0,0,0,0)',\n whiteSpace: 'nowrap',\n border: 0\n }\n};\n//# sourceMappingURL=Announcer.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n/// Adapted from: https://github.com/AlmeroSteyn/react-aria-live/blob/master/src/modules/AnnouncerContext.js\nimport React from 'react';\n/** @private */\nconst AnnouncerContext = React.createContext({\n announceAssertive: logContextWarning,\n announcePolite: logContextWarning\n});\nfunction logContextWarning() {\n console.warn('Announcement failed, LiveAnnouncer context is missing');\n}\nexport default AnnouncerContext;\n//# sourceMappingURL=AnnouncerContext.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n/// Adapted from: https://github.com/AlmeroSteyn/react-aria-live/blob/master/src/modules/MessageBlock.js\nimport React from 'react';\nconst offScreenStyle = {\n border: 0,\n clip: 'rect(0 0 0 0)',\n height: '1px',\n margin: '-1px',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n padding: 0,\n width: '1px',\n position: 'absolute'\n};\n/** @private */\nconst MessageBlock = (props) => React.createElement(\"div\", { style: offScreenStyle, role: \"log\", \"aria-live\": props.ariaLive }, props.message ? props.message : '');\nexport default MessageBlock;\n//# sourceMappingURL=MessageBlock.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n/// Adapted from: https://github.com/AlmeroSteyn/react-aria-live/blob/master/src/modules/Announcer.js\nimport React, { useEffect } from 'react';\nimport MessageBlock from './MessageBlock';\n/** @private */\nexport const EMPTY_MESSAGE = {\n message: '',\n id: ''\n};\n/** @private */\nconst Announcer = (props) => {\n var _a, _b;\n const newAssertive = (_a = props.assertive) !== null && _a !== void 0 ? _a : EMPTY_MESSAGE;\n const oldAssertive = React.useRef(EMPTY_MESSAGE);\n const [activeAssertive1, setActiveAssertive1] = React.useState(EMPTY_MESSAGE);\n const [activeAssertive2, setActiveAssertive2] = React.useState(EMPTY_MESSAGE);\n const alternateAssertive = React.useRef(false);\n useEffect(() => {\n if (oldAssertive.current.message !== (newAssertive === null || newAssertive === void 0 ? void 0 : newAssertive.message) || oldAssertive.current.id !== (newAssertive === null || newAssertive === void 0 ? void 0 : newAssertive.id)) {\n setActiveAssertive1(alternateAssertive.current ? EMPTY_MESSAGE : newAssertive);\n setActiveAssertive2(alternateAssertive.current ? newAssertive : EMPTY_MESSAGE);\n oldAssertive.current = newAssertive;\n alternateAssertive.current = !alternateAssertive.current;\n }\n }, [newAssertive]);\n const newPolite = (_b = props.polite) !== null && _b !== void 0 ? _b : EMPTY_MESSAGE;\n const oldPolite = React.useRef(EMPTY_MESSAGE);\n const [activePolite1, setActivePolite1] = React.useState(EMPTY_MESSAGE);\n const [activePolite2, setActivePolite2] = React.useState(EMPTY_MESSAGE);\n const alternatePolite = React.useRef(false);\n useEffect(() => {\n if (oldPolite.current.message !== (newPolite === null || newPolite === void 0 ? void 0 : newPolite.message) || oldPolite.current.id !== (newPolite === null || newPolite === void 0 ? void 0 : newPolite.id)) {\n setActivePolite1(alternatePolite.current ? EMPTY_MESSAGE : newPolite);\n setActivePolite2(alternatePolite.current ? newPolite : EMPTY_MESSAGE);\n oldPolite.current = newPolite;\n alternatePolite.current = !alternatePolite.current;\n }\n }, [newPolite]);\n return React.createElement(\"div\", null,\n React.createElement(MessageBlock, { ariaLive: \"assertive\", message: activeAssertive1.message }),\n React.createElement(MessageBlock, { ariaLive: \"assertive\", message: activeAssertive2.message }),\n React.createElement(MessageBlock, { ariaLive: \"polite\", message: activePolite1.message }),\n React.createElement(MessageBlock, { ariaLive: \"polite\", message: activePolite2.message }));\n};\nexport default Announcer;\n//# sourceMappingURL=Announcer.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n/// Adapted from: https://github.com/AlmeroSteyn/react-aria-live/blob/master/src/modules/LiveAnnouncer.js\nimport React, { useCallback, useMemo } from 'react';\nimport Announcer, { EMPTY_MESSAGE } from './Announcer';\nimport AnnouncerContext from './AnnouncerContext';\n/** @private */\nconst LiveAnnouncer = (props) => {\n const [politeMessage, setPoliteMessage] = React.useState(EMPTY_MESSAGE);\n const [assertiveMessage, setAssertiveMessage] = React.useState(EMPTY_MESSAGE);\n const announcePolite = useCallback((message, id) => {\n setPoliteMessage({\n message,\n id\n });\n }, []);\n const announceAssertive = useCallback((message, id) => {\n setAssertiveMessage({\n message,\n id\n });\n }, []);\n const updateFunctions = useMemo(() => ({\n announcePolite,\n announceAssertive\n }), [announceAssertive, announcePolite]);\n return React.createElement(AnnouncerContext.Provider, { value: updateFunctions },\n props.children,\n React.createElement(Announcer, { assertive: assertiveMessage, polite: politeMessage }));\n};\nexport default LiveAnnouncer;\n//# sourceMappingURL=LiveAnnouncer.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n/// Adapted from: https://github.com/AlmeroSteyn/react-aria-live/blob/master/src/modules/AnnouncerMessage.js\nimport { useCallback, useEffect } from 'react';\nimport { v1 as createGUID } from 'uuid';\n/** @private */\nconst AnnouncerMessage = (props) => {\n const { message, ariaLive, clearOnUnmount, announceAssertive, announcePolite } = props;\n const announce = useCallback(() => {\n if (ariaLive === 'assertive') {\n announceAssertive(message || '', createGUID());\n }\n if (ariaLive === 'polite') {\n announcePolite(message || '', createGUID());\n }\n }, [announceAssertive, announcePolite, ariaLive, message]);\n useEffect(() => {\n announce();\n return () => {\n if (clearOnUnmount) {\n announceAssertive('', createGUID());\n announcePolite('', createGUID());\n }\n };\n }, [message, clearOnUnmount, announce, announceAssertive, announcePolite]);\n return null;\n};\nexport default AnnouncerMessage;\n//# sourceMappingURL=AnnouncerMessage.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n/// Adapted from: https://github.com/AlmeroSteyn/react-aria-live/blob/master/src/modules/LiveMessage.js\nimport React from 'react';\nimport AnnouncerContext from './AnnouncerContext';\nimport AnnouncerMessage from './AnnouncerMessage';\n/** @private */\nconst LiveMessage = (props) => React.createElement(AnnouncerContext.Consumer, null, contextProps => React.createElement(AnnouncerMessage, Object.assign({}, contextProps, props)));\nexport default LiveMessage;\n//# sourceMappingURL=LiveMessage.js.map","// 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 React, { useCallback, useState, useMemo } from 'react';\nimport { useLocale } from '../localization';\nimport { ControlBarButton } from './ControlBarButton';\nimport { _HighContrastAwareIcon } from './HighContrastAwareIcon';\nimport { ContextualMenuItemType } from '@fluentui/react';\nimport { generateDefaultDeviceMenuProps } from './DevicesButton';\nimport { Announcer } from './Announcer';\nconst defaultLocalVideoViewOptions = {\n scalingMode: 'Crop',\n isMirrored: true\n};\n/**\n * A button to turn camera on / off.\n *\n * Can be used with {@link ControlBar}.\n *\n * @public\n */\nexport const CameraButton = (props) => {\n var _a, _b, _c, _d, _e, _f, _g;\n const { localVideoViewOptions, onToggleCamera } = props;\n const [waitForCamera, setWaitForCamera] = useState(false);\n const localeStrings = useLocale().strings.cameraButton;\n const strings = Object.assign(Object.assign({}, localeStrings), props.strings);\n const [announcerString, setAnnouncerString] = useState(undefined);\n const disabled = props.disabled || waitForCamera;\n const onRenderCameraOnIcon = () => React.createElement(_HighContrastAwareIcon, { disabled: disabled, iconName: \"ControlButtonCameraOn\" });\n const onRenderCameraOffIcon = () => React.createElement(_HighContrastAwareIcon, { disabled: disabled, iconName: \"ControlButtonCameraOff\" });\n if (waitForCamera && strings.tooltipVideoLoadingContent) {\n strings.tooltipDisabledContent = strings.tooltipVideoLoadingContent;\n }\n const cameraOn = props.checked;\n const splitButtonAriaString = cameraOn ? strings.onSplitButtonAriaLabel : strings.offSplitButtonAriaLabel;\n const toggleAnnouncerString = useCallback((isCameraOn) => {\n setAnnouncerString(!isCameraOn ? strings.cameraActionTurnedOffAnnouncement : strings.cameraActionTurnedOnAnnouncement);\n }, [strings.cameraActionTurnedOffAnnouncement, strings.cameraActionTurnedOnAnnouncement]);\n const onToggleClick = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {\n // Throttle click on camera, need to await onToggleCamera then allow another click\n if (onToggleCamera) {\n setWaitForCamera(true);\n try {\n yield onToggleCamera(localVideoViewOptions !== null && localVideoViewOptions !== void 0 ? localVideoViewOptions : defaultLocalVideoViewOptions);\n // allows for the setting of narrator strings triggering the announcer when camera is turned on or off.\n toggleAnnouncerString(!cameraOn);\n }\n finally {\n setWaitForCamera(false);\n }\n }\n }), [cameraOn, localVideoViewOptions, onToggleCamera, toggleAnnouncerString]);\n const splitButtonMenuItems = [];\n /* @conditional-compile-remove(video-background-effects) */\n if (props.onClickVideoEffects) {\n splitButtonMenuItems.push({\n key: 'effects',\n 'data-ui-id': 'camera-split-button-video-effects',\n text: strings.videoEffectsMenuItemTitle,\n iconProps: {\n iconName: 'ControlButtonVideoEffectsOption',\n styles: {\n root: {\n lineHeight: 0\n }\n }\n },\n onClick: () => {\n if (props.onClickVideoEffects) {\n props.onClickVideoEffects(true);\n }\n }\n });\n }\n splitButtonMenuItems.push({\n key: 'cameraPrimaryAction',\n text: props.checked ? strings.onSplitButtonPrimaryActionCamera : strings.offSplitButtonPrimaryActionCamera,\n onClick: () => {\n onToggleClick();\n },\n iconProps: {\n iconName: props.checked ? 'SplitButtonPrimaryActionCameraOn' : 'SplitButtonPrimaryActionCameraOff',\n styles: {\n root: {\n lineHeight: 0\n }\n }\n }\n });\n const splitButtonPrimaryAction = {\n key: 'primaryAction',\n title: 'toggle camera',\n itemType: ContextualMenuItemType.Section,\n sectionProps: {\n topDivider: true,\n items: splitButtonMenuItems\n }\n };\n const splitButtonMenuProps = useMemo(() => (Object.assign(Object.assign({}, props.splitButtonMenuProps), { className: 'camera-split-button' })), [props.splitButtonMenuProps]);\n return React.createElement(React.Fragment, null,\n React.createElement(Announcer, { announcementString: announcerString, ariaLive: 'polite' }),\n React.createElement(ControlBarButton, Object.assign({}, props, { disabled: disabled, onClick: onToggleCamera ? onToggleClick : props.onClick, onRenderOnIcon: (_a = props.onRenderOnIcon) !== null && _a !== void 0 ? _a : onRenderCameraOnIcon, onRenderOffIcon: (_b = props.onRenderOffIcon) !== null && _b !== void 0 ? _b : onRenderCameraOffIcon, strings: strings, labelKey: (_c = props.labelKey) !== null && _c !== void 0 ? _c : 'cameraButtonLabel', menuProps: (_d = props.menuProps) !== null && _d !== void 0 ? _d : (props.enableDeviceSelectionMenu ? generateDefaultDeviceMenuProps(Object.assign(Object.assign({}, props), { styles: (_e = props.styles) === null || _e === void 0 ? void 0 : _e.menuStyles }), strings, splitButtonPrimaryAction) : undefined), menuIconProps: ((_f = props.menuIconProps) !== null && _f !== void 0 ? _f : !props.enableDeviceSelectionMenu) ? {\n hidden: true\n } : undefined, split: (_g = props.split) !== null && _g !== void 0 ? _g : props.enableDeviceSelectionMenu, \"aria-roledescription\": props.enableDeviceSelectionMenu ? strings.cameraButtonSplitRoleDescription : undefined, splitButtonAriaLabel: props.enableDeviceSelectionMenu ? splitButtonAriaString : undefined, splitButtonMenuProps: splitButtonMenuProps })));\n};\n//# sourceMappingURL=CameraButton.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { Persona, Stack, PersonaSize, Text } from '@fluentui/react';\nimport React from 'react';\nimport { captionClassName, captionsContentContainerClassName, displayNameClassName, displayNameContainerClassName, iconClassName } from './styles/Captions.style';\n/**\n * @internal\n * A component for displaying a single line of caption\n */\nexport const _Caption = (props) => {\n const { displayName, userId, captionText, onRenderAvatar } = props;\n const personaOptions = {\n hidePersonaDetails: true,\n size: PersonaSize.size32,\n text: displayName,\n showOverflowTooltip: false,\n imageShouldStartVisible: true,\n initialsTextColor: 'white',\n styles: {\n root: {\n margin: '0.25rem'\n }\n }\n };\n const userIcon = onRenderAvatar ? onRenderAvatar(userId !== null && userId !== void 0 ? userId : '', personaOptions) : React.createElement(Persona, Object.assign({}, personaOptions));\n return React.createElement(Stack, { horizontal: true, verticalAlign: \"start\", horizontalAlign: \"start\" },\n React.createElement(Stack.Item, { className: iconClassName }, userIcon),\n React.createElement(Stack, { verticalAlign: \"start\", className: captionsContentContainerClassName },\n React.createElement(Stack.Item, { className: displayNameContainerClassName },\n React.createElement(Text, { className: displayNameClassName }, displayName)),\n React.createElement(Stack.Item, { className: captionClassName, dir: \"auto\" }, captionText)));\n};\n//# sourceMappingURL=Caption.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { Stack, FocusZone, Spinner } from '@fluentui/react';\nimport React, { useEffect, useRef, useState, useCallback } from 'react';\nimport { _Caption } from './Caption';\nimport { captionContainerClassName, captionsBannerClassName, captionsContainerClassName, loadingBannerStyles } from './styles/Captions.style';\n/**\n * @internal\n * A component for displaying a CaptionsBanner with user icon, displayName and captions text.\n */\nexport const _CaptionsBanner = (props) => {\n const { captions, isCaptionsOn, startCaptionsInProgress, onRenderAvatar, strings, formFactor = 'default' } = props;\n const captionsScrollDivRef = useRef(null);\n const [isAtBottomOfScroll, setIsAtBottomOfScroll] = useState(true);\n const scrollToBottom = () => {\n if (captionsScrollDivRef.current) {\n captionsScrollDivRef.current.scrollTop = captionsScrollDivRef.current.scrollHeight;\n }\n };\n const handleScrollToTheBottom = useCallback(() => {\n if (!captionsScrollDivRef.current) {\n return;\n }\n const atBottom = Math.ceil(captionsScrollDivRef.current.scrollTop) >= captionsScrollDivRef.current.scrollHeight - captionsScrollDivRef.current.clientHeight;\n setIsAtBottomOfScroll(atBottom);\n }, []);\n useEffect(() => {\n const captionsScrollDiv = captionsScrollDivRef.current;\n captionsScrollDiv === null || captionsScrollDiv === void 0 ? void 0 : captionsScrollDiv.addEventListener('scroll', handleScrollToTheBottom);\n return () => {\n captionsScrollDiv === null || captionsScrollDiv === void 0 ? void 0 : captionsScrollDiv.removeEventListener('scroll', handleScrollToTheBottom);\n };\n }, [handleScrollToTheBottom, isCaptionsOn]);\n useEffect(() => {\n // only auto scroll to bottom is already is at bottom of scroll before new caption comes in\n if (isAtBottomOfScroll) {\n scrollToBottom();\n }\n }, [captions, isAtBottomOfScroll]);\n return React.createElement(React.Fragment, null, startCaptionsInProgress && React.createElement(FocusZone, { as: \"ul\", className: captionsContainerClassName },\n isCaptionsOn && React.createElement(\"div\", { ref: captionsScrollDivRef, className: captionsBannerClassName(formFactor) }, captions.map(caption => {\n return React.createElement(\"div\", { key: caption.id, className: captionContainerClassName, \"data-is-focusable\": true },\n React.createElement(_Caption, Object.assign({}, caption, { onRenderAvatar: onRenderAvatar })));\n })),\n !isCaptionsOn && React.createElement(Stack, { verticalAlign: \"center\", styles: loadingBannerStyles(formFactor), \"data-is-focusable\": true },\n React.createElement(Spinner, { label: strings === null || strings === void 0 ? void 0 : strings.captionsBannerSpinnerText, ariaLive: \"assertive\", labelPosition: \"right\" }))));\n};\n//# sourceMappingURL=CaptionsBanner.js.map","// 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 React, { useCallback } from 'react';\nimport { useMemo, useState, useEffect } from 'react';\nimport { Modal, Stack, useTheme, Text, IconButton, Dropdown, DefaultButton, PrimaryButton } from '@fluentui/react';\nimport { buttonsContainerClassName, buttonStyles, dropdownContainerClassName, dropdownInfoTextStyle, dropdownStyles, themedCaptionsSettingsModalStyle, titleClassName, titleContainerClassName } from './styles/CaptionsSettingsModal.styles';\nimport { defaultSpokenLanguage } from './utils';\nimport { _spokenLanguageToCaptionLanguage } from '../types';\nimport { _preventDismissOnEvent } from \"../../../acs-ui-common/src\";\n/**\n * @internal\n * a component for setting spoken languages\n */\nexport const _CaptionsSettingsModal = (props) => {\n const { supportedSpokenLanguages, supportedCaptionLanguages, currentSpokenLanguage, currentCaptionLanguage, isCaptionsFeatureActive, showModal, onSetSpokenLanguage, onSetCaptionLanguage, onDismissCaptionsSettings, onStartCaptions, strings, spokenLanguageStrings, captionLanguageStrings, changeCaptionLanguage = false } = props;\n const theme = useTheme();\n const [hasSetSpokenLanguage, setHasSetSpokenLanguage] = useState(false);\n const [selectedSpokenLanguage, setSelectedSpokenLanguage] = useState({\n key: currentSpokenLanguage !== '' ? currentSpokenLanguage : defaultSpokenLanguage,\n text: currentSpokenLanguage !== '' ? currentSpokenLanguage : defaultSpokenLanguage\n });\n const [selectedCaptionLanguage, setSelectedCaptionLanguage] = useState({\n key: currentCaptionLanguage !== '' ? currentCaptionLanguage : _spokenLanguageToCaptionLanguage[selectedSpokenLanguage.key],\n text: currentCaptionLanguage !== '' ? currentCaptionLanguage : _spokenLanguageToCaptionLanguage[selectedSpokenLanguage.key]\n });\n useEffect(() => {\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 if (isCaptionsFeatureActive && !hasSetSpokenLanguage) {\n onSetSpokenLanguage(selectedSpokenLanguage.key.toString());\n // we only need to call set spoken language once when first starting captions\n setHasSetSpokenLanguage(true);\n }\n }, [isCaptionsFeatureActive, onSetSpokenLanguage, selectedSpokenLanguage.key, hasSetSpokenLanguage]);\n const onDismiss = useCallback(() => {\n if (onDismissCaptionsSettings) {\n onDismissCaptionsSettings();\n }\n }, [onDismissCaptionsSettings]);\n const onConfirm = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {\n const spokenLanguageCode = selectedSpokenLanguage.key.toString();\n const captionLanguageCode = selectedCaptionLanguage.key.toString();\n if (isCaptionsFeatureActive) {\n onSetSpokenLanguage(spokenLanguageCode);\n onSetCaptionLanguage(captionLanguageCode);\n }\n else {\n yield onStartCaptions({\n spokenLanguage: spokenLanguageCode\n });\n }\n onDismiss();\n }), [onDismiss, isCaptionsFeatureActive, onSetSpokenLanguage, onSetCaptionLanguage, onStartCaptions, selectedSpokenLanguage.key, selectedCaptionLanguage.key]);\n const spokenLanguageDropdownOptions = useMemo(() => {\n return supportedSpokenLanguages.map(languageCode => {\n return {\n key: languageCode,\n text: spokenLanguageStrings ? spokenLanguageStrings[languageCode] : languageCode\n };\n });\n }, [supportedSpokenLanguages, spokenLanguageStrings]);\n const captionLanguageDropdownOptions = useMemo(() => {\n return supportedCaptionLanguages.map(languageCode => {\n return {\n key: languageCode,\n text: captionLanguageStrings ? captionLanguageStrings[languageCode] : languageCode\n };\n });\n }, [supportedCaptionLanguages, captionLanguageStrings]);\n const sortedSpokenLanguageDropdownOptions = useMemo(() => {\n const copy = [...spokenLanguageDropdownOptions];\n return copy.sort((a, b) => a.text > b.text ? 1 : -1);\n }, [spokenLanguageDropdownOptions]);\n const sortedCaptionLanguageDropdownOptions = useMemo(() => {\n const copy = [...captionLanguageDropdownOptions];\n return copy.sort((a, b) => a.text > b.text ? 1 : -1);\n }, [captionLanguageDropdownOptions]);\n const onSpokenLanguageChange = (event, option) => {\n if (option) {\n setSelectedSpokenLanguage(option);\n }\n };\n const onCaptionLanguageChange = (event, option) => {\n if (option) {\n setSelectedCaptionLanguage(option);\n }\n };\n const calloutProps = useMemo(() => ({\n preventDismissOnEvent: _preventDismissOnEvent\n }), []);\n const CaptionsSettingsComponent = useCallback(() => {\n const placeholderSpokenLanguage = currentSpokenLanguage !== '' ? currentSpokenLanguage : defaultSpokenLanguage;\n const placeholderCaptionLanguage = currentCaptionLanguage !== '' ? currentCaptionLanguage : _spokenLanguageToCaptionLanguage[placeholderSpokenLanguage];\n return React.createElement(Stack, null,\n React.createElement(Dropdown, { label: strings === null || strings === void 0 ? void 0 : strings.captionsSettingsSpokenLanguageDropdownLabel, selectedKey: selectedSpokenLanguage ? selectedSpokenLanguage.key : undefined, onChange: onSpokenLanguageChange, calloutProps: calloutProps, placeholder: placeholderSpokenLanguage, options: sortedSpokenLanguageDropdownOptions, styles: dropdownStyles }),\n React.createElement(Text, { className: dropdownInfoTextStyle(theme) }, strings === null || strings === void 0 ? void 0 : strings.captionsSettingsSpokenLanguageDropdownInfoText),\n changeCaptionLanguage && React.createElement(React.Fragment, null,\n React.createElement(Dropdown, { label: strings === null || strings === void 0 ? void 0 : strings.captionsSettingsCaptionLanguageDropdownLabel, selectedKey: selectedCaptionLanguage ? selectedCaptionLanguage.key : undefined, onChange: onCaptionLanguageChange, calloutProps: calloutProps, placeholder: placeholderCaptionLanguage, options: sortedCaptionLanguageDropdownOptions, styles: dropdownStyles }),\n React.createElement(Text, { className: dropdownInfoTextStyle(theme) }, strings === null || strings === void 0 ? void 0 : strings.captionsSettingsCaptionLanguageDropdownInfoText)));\n }, [calloutProps, currentSpokenLanguage, currentCaptionLanguage, sortedSpokenLanguageDropdownOptions, sortedCaptionLanguageDropdownOptions, selectedCaptionLanguage, selectedSpokenLanguage, strings === null || strings === void 0 ? void 0 : strings.captionsSettingsSpokenLanguageDropdownInfoText, strings === null || strings === void 0 ? void 0 : strings.captionsSettingsCaptionLanguageDropdownLabel, strings === null || strings === void 0 ? void 0 : strings.captionsSettingsSpokenLanguageDropdownLabel, strings === null || strings === void 0 ? void 0 : strings.captionsSettingsCaptionLanguageDropdownInfoText, theme, changeCaptionLanguage]);\n const CaptionsSettingsModalStyle = useMemo(() => themedCaptionsSettingsModalStyle(theme), [theme]);\n return React.createElement(React.Fragment, null, React.createElement(Modal, { titleAriaId: strings === null || strings === void 0 ? void 0 : strings.captionsSettingsModalAriaLabel, isOpen: showModal, onDismiss: onDismiss, isBlocking: true, styles: CaptionsSettingsModalStyle },\n React.createElement(Stack, { horizontal: true, horizontalAlign: \"space-between\", verticalAlign: \"center\", className: titleContainerClassName },\n React.createElement(Text, { className: titleClassName }, strings === null || strings === void 0 ? void 0 : strings.captionsSettingsModalTitle),\n React.createElement(IconButton, { iconProps: {\n iconName: 'Cancel'\n }, ariaLabel: strings === null || strings === void 0 ? void 0 : strings.captionsSettingsCloseModalButtonAriaLabel, onClick: onDismiss, style: {\n color: theme.palette.black\n } })),\n React.createElement(Stack, { className: dropdownContainerClassName }, CaptionsSettingsComponent()),\n React.createElement(Stack, { horizontal: true, horizontalAlign: \"end\", className: buttonsContainerClassName },\n React.createElement(PrimaryButton, { styles: buttonStyles(theme), onClick: onConfirm },\n React.createElement(\"span\", null, strings === null || strings === void 0 ? void 0 : strings.captionsSettingsConfirmButtonLabel)),\n React.createElement(DefaultButton, { onClick: onDismiss, styles: buttonStyles(theme) },\n React.createElement(\"span\", null, strings === null || strings === void 0 ? void 0 : strings.captionsSettingsCancelButtonLabel)))));\n};\n//# sourceMappingURL=CaptionsSettingsModal.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { \n// eslint-disable-next-line no-restricted-imports\nIcon, mergeStyles, ProgressIndicator, Stack, Text, useTheme } from '@fluentui/react';\nimport { getFileTypeIconProps } from '@fluentui/react-file-type-icons';\nimport React from 'react';\nimport { _pxToRem } from \"../../../acs-ui-common/src\";\nimport { Announcer } from './Announcer';\nimport { useEffect, useState } from 'react';\nimport { useLocaleFileCardStringsTrampoline } from './utils/common';\n/**\n * @internal\n * A component for displaying a file card with file icon and progress bar.\n */\nexport const _FileCard = (props) => {\n var _a, _b, _c, _d;\n const { fileName, fileExtension, progress, actionIcon } = props;\n const theme = useTheme();\n const [announcerString, setAnnouncerString] = useState(undefined);\n const localeStrings = useLocaleFileCardStringsTrampoline();\n const uploadStartedString = (_b = (_a = props.strings) === null || _a === void 0 ? void 0 : _a.uploading) !== null && _b !== void 0 ? _b : localeStrings.uploading;\n const uploadCompletedString = (_d = (_c = props.strings) === null || _c === void 0 ? void 0 : _c.uploadCompleted) !== null && _d !== void 0 ? _d : localeStrings.uploadCompleted;\n const showProgressIndicator = progress !== undefined && progress > 0 && progress < 1;\n useEffect(() => {\n if (showProgressIndicator) {\n setAnnouncerString(`${uploadStartedString} ${fileName}`);\n }\n else if (progress === 1) {\n setAnnouncerString(`${fileName} ${uploadCompletedString}`);\n }\n else {\n setAnnouncerString(undefined);\n }\n }, [progress, showProgressIndicator, fileName, uploadStartedString, uploadCompletedString]);\n const progressBarThicknessPx = 4;\n const containerClassName = mergeStyles({\n width: '12rem',\n background: theme.palette.neutralLighter,\n borderRadius: theme.effects.roundedCorner4,\n border: `${_pxToRem(1)} solid ${theme.palette.neutralQuaternary}`,\n cursor: 'pointer'\n });\n const fileInfoWrapperClassName = mergeStyles({\n padding: _pxToRem(12),\n // To make space for the progress indicator.\n paddingBottom: showProgressIndicator ? _pxToRem(12 - progressBarThicknessPx * 2) : _pxToRem(12)\n });\n const fileNameContainerClassName = mergeStyles({\n paddingLeft: _pxToRem(4),\n minWidth: '75%',\n maxWidth: '75%'\n });\n const fileNameTextClassName = mergeStyles({\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n lineHeight: 'normal',\n whiteSpace: 'nowrap',\n paddingRight: _pxToRem(4)\n });\n const actionIconClassName = mergeStyles({\n cursor: 'pointer'\n });\n const progressIndicatorStyles = {\n itemProgress: {\n padding: `${_pxToRem(progressBarThicknessPx - 1)} 0`,\n // item progress height won't apply without an explicit padding\n // To make the progress indicator border curve along the bottom of file card.\n borderRadius: `0 0 ${theme.effects.roundedCorner4} ${theme.effects.roundedCorner4}`\n },\n progressBar: {\n height: _pxToRem(progressBarThicknessPx)\n }\n };\n return React.createElement(\"div\", { \"data-is-focusable\": true },\n React.createElement(Announcer, { announcementString: announcerString, ariaLive: 'polite' }),\n React.createElement(Stack, { className: containerClassName, onClick: () => {\n var _a;\n (_a = props.actionHandler) === null || _a === void 0 ? void 0 : _a.call(props);\n } },\n React.createElement(Stack, { horizontal: true, horizontalAlign: \"space-between\", verticalAlign: \"center\", className: fileInfoWrapperClassName },\n React.createElement(Stack, null,\n React.createElement(Icon, { \"data-ui-id\": 'filetype-icon', iconName: getFileTypeIconProps({\n extension: fileExtension,\n size: 24,\n imageFileType: 'svg'\n }).iconName })),\n React.createElement(Stack, { className: fileNameContainerClassName },\n React.createElement(Text, { className: fileNameTextClassName }, fileName)),\n React.createElement(Stack, { verticalAlign: \"center\", className: actionIconClassName }, actionIcon && actionIcon)),\n showProgressIndicator && React.createElement(ProgressIndicator, { percentComplete: progress, styles: progressIndicatorStyles })));\n};\n//# sourceMappingURL=FileCard.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { mergeStyles, Stack } from '@fluentui/react';\nimport { _pxToRem } from \"../../../acs-ui-common/src\";\nimport React from 'react';\n/**\n * Note: If we use stack tokens.childrenGap, when child elements are wrapped and moved to the next line,\n * an extra margin is added to the left of each line.\n * This is a workaround to avoid this issue.\n */\nconst fileCardGroupClassName = mergeStyles({\n flexFlow: 'row wrap',\n '& > *': {\n margin: _pxToRem(2)\n },\n /**\n * margin for children is overriden by parent stack, so adding left margin for each child\n */\n '& > *:not(:first-child)': {\n marginLeft: _pxToRem(2)\n }\n});\n/**\n * @internal\n * Used with `_FileCard` component where `_FileCard` components are passed as children.\n * Renders the children equally spaced in multiple rows.\n */\nexport const _FileCardGroup = (props) => {\n const { children, ariaLabel } = props;\n if (!children) {\n return React.createElement(React.Fragment, null);\n }\n return React.createElement(Stack, { horizontal: true, className: fileCardGroupClassName, \"aria-label\": ariaLabel }, children);\n};\n//# sourceMappingURL=FileCardGroup.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { Icon, IconButton } from '@fluentui/react';\nimport React from 'react';\nimport { _FileCard } from './FileCard';\nimport { _FileCardGroup } from './FileCardGroup';\nimport { extension } from './utils';\nimport { iconButtonClassName } from './styles/IconButton.styles';\nimport { useMemo } from 'react';\nimport { useLocaleFileCardStringsTrampoline } from './utils/common';\nconst actionIconStyle = {\n height: '1rem'\n};\n/**\n * @internal\n */\nexport const _FileUploadCards = (props) => {\n var _a;\n const files = props.activeFileUploads;\n const localeStrings = useLocaleFileCardStringsTrampoline();\n const removeFileButtonString = useMemo(() => () => {\n var _a, _b;\n return (_b = (_a = props.strings) === null || _a === void 0 ? void 0 : _a.removeFile) !== null && _b !== void 0 ? _b : localeStrings.removeFile;\n }, [(_a = props.strings) === null || _a === void 0 ? void 0 : _a.removeFile, localeStrings.removeFile]);\n if (!files || files.length === 0) {\n return React.createElement(React.Fragment, null);\n }\n return React.createElement(_FileCardGroup, null, files && files.filter(file => !file.error).map(file => React.createElement(_FileCard, { fileName: file.filename, progress: file.progress, key: file.id, fileExtension: extension(file.filename), actionIcon: React.createElement(IconButton, { className: iconButtonClassName, ariaLabel: removeFileButtonString() },\n React.createElement(Icon, { iconName: \"CancelFileUpload\", style: actionIconStyle })), actionHandler: () => {\n props.onCancelFileUpload && props.onCancelFileUpload(file.id);\n }, strings: props.strings })));\n};\n//# sourceMappingURL=FileUploadCards.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { concatStyleSets, Icon, mergeStyles, Stack } from '@fluentui/react';\nimport { ChatMyMessage } from '@fluentui-contrib/react-chat';\nimport { mergeClasses } from '@fluentui/react-components';\nimport { _formatString } from \"../../../../acs-ui-common/src\";\nimport { useTheme } from '../../theming/FluentThemeProvider';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { editBoxStyle, inputBoxIcon, editingButtonStyle, editBoxStyleSet } from '../styles/EditBox.styles';\nimport { InputBoxButton, InputBoxComponent } from '../InputBoxComponent';\nimport { useChatMyMessageStyles } from '../styles/MessageThread.styles';\nimport { _FileUploadCards } from '../FileUploadCards';\nimport { chatMessageFailedTagStyle, editChatMessageFailedTagStyle, chatMessageFailedTagStackItemStyle, editChatMessageButtonsStackStyle, useChatMessageEditContainerStyles } from '../styles/ChatMessageComponent.styles';\nconst MAXIMUM_LENGTH_OF_MESSAGE = 8000;\nconst onRenderCancelIcon = (color) => {\n const className = mergeStyles(inputBoxIcon, {\n color\n });\n return React.createElement(Icon, { iconName: 'EditBoxCancel', className: className });\n};\nconst onRenderSubmitIcon = (color) => {\n const className = mergeStyles(inputBoxIcon, {\n color\n });\n return React.createElement(Icon, { iconName: 'EditBoxSubmit', className: className });\n};\n/**\n * @private\n */\nexport const ChatMessageComponentAsEditBox = (props) => {\n const { onCancel, onSubmit, strings, message } = props;\n const [textValue, setTextValue] = useState(message.content || '');\n const [attachedFilesMetadata, setAttachedFilesMetadata] = React.useState(getMessageAttachedFilesMetadata(message));\n const editTextFieldRef = React.useRef(null);\n const theme = useTheme();\n const messageState = getMessageState(textValue, attachedFilesMetadata !== null && attachedFilesMetadata !== void 0 ? attachedFilesMetadata : []);\n const submitEnabled = messageState === 'OK';\n const editContainerStyles = useChatMessageEditContainerStyles();\n const chatMyMessageStyles = useChatMyMessageStyles();\n useEffect(() => {\n var _a;\n (_a = editTextFieldRef.current) === null || _a === void 0 ? void 0 : _a.focus();\n }, []);\n const setText = (event, newValue) => {\n setTextValue(newValue !== null && newValue !== void 0 ? newValue : '');\n };\n const textTooLongMessage = messageState === 'too long' ? _formatString(strings.editBoxTextLimit, {\n limitNumber: `${MAXIMUM_LENGTH_OF_MESSAGE}`\n }) : undefined;\n const onRenderThemedCancelIcon = useCallback((isHover) => onRenderCancelIcon(isHover ? theme.palette.accent : theme.palette.neutralSecondary), [theme.palette.neutralSecondary, theme.palette.accent]);\n const onRenderThemedSubmitIcon = useCallback((isHover) => onRenderSubmitIcon(isHover ? theme.palette.accent : theme.palette.neutralSecondary), [theme.palette.neutralSecondary, theme.palette.accent]);\n const editBoxStyles = useMemo(() => {\n return concatStyleSets(editBoxStyleSet, {\n textField: {\n borderColor: theme.palette.themePrimary\n }\n });\n }, [theme.palette.themePrimary]);\n const onRenderFileUploads = useCallback(() => {\n return !!attachedFilesMetadata && attachedFilesMetadata.length > 0 && React.createElement(\"div\", { style: {\n margin: '0.25rem'\n } },\n React.createElement(_FileUploadCards, { activeFileUploads: attachedFilesMetadata === null || attachedFilesMetadata === void 0 ? void 0 : attachedFilesMetadata.map(file => ({\n id: file.name,\n filename: file.name,\n progress: 1\n })), onCancelFileUpload: fileId => {\n setAttachedFilesMetadata(attachedFilesMetadata === null || attachedFilesMetadata === void 0 ? void 0 : attachedFilesMetadata.filter(file => file.name !== fileId));\n } }));\n }, [attachedFilesMetadata]);\n const getContent = () => {\n return React.createElement(React.Fragment, null,\n React.createElement(InputBoxComponent, { \"data-ui-id\": \"edit-box\", textFieldRef: editTextFieldRef, inputClassName: editBoxStyle, placeholderText: strings.editBoxPlaceholderText, textValue: textValue, onChange: setText, onKeyDown: ev => {\n if (ev.key === 'ArrowUp' || ev.key === 'ArrowDown') {\n ev.stopPropagation();\n }\n }, onEnterKeyDown: () => {\n submitEnabled && onSubmit(textValue, message.metadata, {\n attachedFilesMetadata\n });\n }, supportNewline: false, maxLength: MAXIMUM_LENGTH_OF_MESSAGE, errorMessage: textTooLongMessage, styles: editBoxStyles }),\n React.createElement(Stack, { horizontal: true, horizontalAlign: \"end\", className: editChatMessageButtonsStackStyle, tokens: {\n childrenGap: '0.25rem'\n } },\n message.failureReason && React.createElement(Stack.Item, { grow: true, align: \"stretch\", className: chatMessageFailedTagStackItemStyle },\n React.createElement(\"div\", { className: mergeStyles(chatMessageFailedTagStyle(theme), editChatMessageFailedTagStyle) }, message.failureReason)),\n React.createElement(Stack.Item, { align: \"end\" },\n React.createElement(InputBoxButton, { className: editingButtonStyle, ariaLabel: strings.editBoxCancelButton, tooltipContent: strings.editBoxCancelButton, onRenderIcon: onRenderThemedCancelIcon, onClick: () => {\n onCancel && onCancel(message.messageId);\n }, id: 'dismissIconWrapper' })),\n React.createElement(Stack.Item, { align: \"end\" },\n React.createElement(InputBoxButton, { className: editingButtonStyle, ariaLabel: strings.editBoxSubmitButton, tooltipContent: strings.editBoxSubmitButton, onRenderIcon: onRenderThemedSubmitIcon, onClick: e => {\n submitEnabled && onSubmit(textValue, message.metadata, {\n attachedFilesMetadata\n });\n e.stopPropagation();\n }, id: 'submitIconWrapper' }))),\n onRenderFileUploads());\n };\n const bodyClassName = mergeClasses(editContainerStyles.body, message.failureReason !== undefined ? editContainerStyles.bodyError : editContainerStyles.bodyDefault);\n return React.createElement(ChatMyMessage, { root: {\n className: mergeClasses(chatMyMessageStyles.root, editContainerStyles.root)\n }, body: {\n className: bodyClassName\n } }, getContent());\n};\nconst isMessageTooLong = (messageText) => messageText.length > MAXIMUM_LENGTH_OF_MESSAGE;\nconst isMessageEmpty = (messageText, attachedFilesMetadata) => messageText.trim().length === 0 && attachedFilesMetadata.length === 0;\nconst getMessageState = (messageText, attachedFilesMetadata) => isMessageEmpty(messageText, attachedFilesMetadata) ? 'too short' : isMessageTooLong(messageText) ? 'too long' : 'OK';\n// @TODO: Remove when file-sharing feature becomes stable.\nconst getMessageAttachedFilesMetadata = (message) => {\n return [];\n};\n//# sourceMappingURL=ChatMessageComponentAsEditBox.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { concatStyleSets, ContextualMenu, DirectionalHint, Persona, PersonaSize, useTheme } from '@fluentui/react';\nimport { _pxToRem, _formatString } from \"../../../../acs-ui-common/src\";\nimport React, { useMemo } from 'react';\nimport { chatMessageMenuStyle, menuIconStyleSet, menuItemIncreasedSizeStyles, menuSubIconStyleSet } from '../styles/ChatMessageComponent.styles';\n/**\n * Chat message actions flyout that contains actions such as Edit Message, or Remove Message.\n *\n * @private\n */\nexport const ChatMessageActionFlyout = (props) => {\n var _a, _b;\n const theme = useTheme();\n const messageReadByCount = (_a = props.messageReadBy) === null || _a === void 0 ? void 0 : _a.length;\n const sortedMessageReadyByList = [...((_b = props.messageReadBy) !== null && _b !== void 0 ? _b : [])].sort((a, b) => a.displayName.localeCompare(b.displayName));\n const messageReadByList = sortedMessageReadyByList === null || sortedMessageReadyByList === void 0 ? void 0 : sortedMessageReadyByList.map(person => {\n const personaOptions = {\n hidePersonaDetails: true,\n size: PersonaSize.size24,\n text: person.displayName,\n showOverflowTooltip: false,\n styles: {\n root: {\n margin: '0.25rem'\n }\n }\n };\n const { onRenderAvatar } = props;\n return {\n 'data-ui-id': 'chat-composite-message-contextual-menu-read-name-list-item',\n key: person.displayName,\n text: person.displayName,\n itemProps: {\n styles: props.increaseFlyoutItemSize ? menuItemIncreasedSizeStyles : undefined\n },\n onRenderIcon: () => { var _a; return onRenderAvatar ? onRenderAvatar((_a = person.id) !== null && _a !== void 0 ? _a : '', personaOptions) : React.createElement(Persona, Object.assign({}, personaOptions)); },\n iconProps: {\n styles: menuIconStyleSet\n }\n };\n });\n const menuItems = useMemo(() => {\n const items = [{\n key: 'Edit',\n 'data-ui-id': 'chat-composite-message-contextual-menu-edit-action',\n text: props.strings.editMessage,\n itemProps: {\n styles: props.increaseFlyoutItemSize ? menuItemIncreasedSizeStyles : undefined\n },\n iconProps: {\n iconName: 'MessageEdit',\n styles: menuIconStyleSet\n },\n onClick: props.onEditClick\n }, {\n key: 'Remove',\n text: props.strings.removeMessage,\n itemProps: {\n styles: props.increaseFlyoutItemSize ? menuItemIncreasedSizeStyles : undefined\n },\n iconProps: {\n iconName: 'MessageRemove',\n styles: menuIconStyleSet\n },\n onClick: props.onRemoveClick\n }];\n // only show read by x of x if more than 3 participants in total including myself\n // TODO: change strings.messageReadCount to be required if we can fallback to our own en-us strings for anything that Contoso doesn't provide\n if (props.remoteParticipantsCount && messageReadByCount !== undefined && props.remoteParticipantsCount >= 2 && props.showMessageStatus && props.strings.messageReadCount && props.messageStatus !== 'failed') {\n items.push({\n key: 'Read Count',\n 'data-ui-id': 'chat-composite-message-contextual-menu-read-info',\n text: _formatString(props.strings.messageReadCount, {\n messageReadByCount: `${messageReadByCount}`,\n remoteParticipantsCount: `${props.remoteParticipantsCount}`\n }),\n itemProps: {\n styles: concatStyleSets({\n linkContent: {\n color: messageReadByCount > 0 ? theme.palette.neutralPrimary : theme.palette.neutralTertiary\n },\n root: {\n borderTop: `1px solid ${theme.palette.neutralLighter}`\n }\n }, props.increaseFlyoutItemSize ? menuItemIncreasedSizeStyles : undefined)\n },\n calloutProps: preventUnwantedDismissProps,\n subMenuProps: {\n items: messageReadByList !== null && messageReadByList !== void 0 ? messageReadByList : [],\n calloutProps: preventUnwantedDismissProps,\n styles: concatStyleSets({\n root: {\n maxWidth: _pxToRem(320),\n span: {\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n }\n }\n })\n },\n iconProps: {\n iconName: 'MessageSeen',\n styles: {\n root: {\n color: messageReadByCount > 0 ? theme.palette.themeDarkAlt : theme.palette.neutralTertiary\n }\n }\n },\n submenuIconProps: {\n iconName: 'HorizontalGalleryRightButton',\n styles: menuSubIconStyleSet\n },\n disabled: messageReadByCount <= 0\n });\n }\n else if (props.messageStatus === 'failed' && props.strings.resendMessage) {\n items.push({\n key: 'Resend',\n text: props.strings.resendMessage,\n itemProps: {\n styles: concatStyleSets({\n linkContent: {\n color: theme.palette.neutralPrimary\n },\n root: {\n borderTop: `1px solid ${theme.palette.neutralLighter}`\n }\n }, props.increaseFlyoutItemSize ? menuItemIncreasedSizeStyles : undefined)\n },\n calloutProps: preventUnwantedDismissProps,\n iconProps: {\n iconName: 'MessageResend',\n styles: {\n root: {\n color: theme.palette.themeDarkAlt\n }\n }\n },\n onClick: props.onResendClick\n });\n }\n return items;\n }, [props.strings.editMessage, props.strings.removeMessage, props.strings.messageReadCount, props.strings.resendMessage, props.messageStatus, props.increaseFlyoutItemSize, props.onEditClick, props.onRemoveClick, props.onResendClick, props.remoteParticipantsCount, props.showMessageStatus, messageReadByCount, theme.palette.neutralPrimary, theme.palette.neutralTertiary, theme.palette.neutralLighter, theme.palette.themeDarkAlt, messageReadByList]);\n // gap space uses pixels\n return React.createElement(ContextualMenu, { alignTargetEdge: true, gapSpace: 2 /*px*/, isBeakVisible: false, items: menuItems, hidden: props.hidden, target: props.target, onDismiss: props.onDismiss, directionalHint: DirectionalHint.topRightEdge, className: chatMessageMenuStyle, calloutProps: calloutMenuProps });\n};\n/**\n * Similar to {@link preventDismissOnEvent}, but not prevent dismissing from scrolling, since it is causing bugs in chat thread.\n */\nconst preventUnwantedDismissProps = {\n preventDismissOnEvent: (ev) => {\n return ev.type === 'resize';\n }\n};\nconst calloutMenuProps = Object.assign(Object.assign({}, preventUnwantedDismissProps), { styles: {\n root: {\n marginRight: '3px'\n }\n } });\n//# sourceMappingURL=ChatMessageActionsFlyout.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport React from 'react';\nimport { _formatString } from \"../../../../acs-ui-common/src\";\nimport { Parser, ProcessNodeDefinitions, IsValidNodeDefinitions } from 'html-to-react';\nimport Linkify from 'react-linkify';\nimport { Link } from '@fluentui/react';\nimport LiveMessage from '../Announcer/LiveMessage';\nimport DOMPurify from 'dompurify';\n/** @private */\nexport const ChatMessageContent = (props) => {\n switch (props.message.contentType) {\n case 'text':\n return MessageContentAsText(props);\n case 'html':\n return MessageContentAsRichTextHTML(props);\n case 'richtext/html':\n return MessageContentAsRichTextHTML(props);\n default:\n console.warn('unknown message content type');\n return React.createElement(React.Fragment, null);\n }\n};\nconst MessageContentWithLiveAria = (props) => {\n return React.createElement(\"div\", { \"data-ui-status\": props.message.status, role: \"text\", \"aria-label\": props.ariaLabel },\n React.createElement(LiveMessage, { message: props.liveMessage, ariaLive: \"polite\" }),\n props.content);\n};\nconst MessageContentAsRichTextHTML = (props) => {\n return React.createElement(MessageContentWithLiveAria, { message: props.message, liveMessage: generateLiveMessage(props), ariaLabel: messageContentAriaText(props), content: processHtmlToReact(props) });\n};\nconst MessageContentAsText = (props) => {\n return React.createElement(MessageContentWithLiveAria, { message: props.message, liveMessage: generateLiveMessage(props), ariaLabel: messageContentAriaText(props), content: React.createElement(Linkify, { componentDecorator: (decoratedHref, decoratedText, key) => {\n return React.createElement(Link, { target: \"_blank\", href: decoratedHref, key: key }, decoratedText);\n } }, props.message.content) });\n};\n// https://stackoverflow.com/questions/28899298/extract-the-text-out-of-html-string-using-javascript\nconst extractContent = (s) => {\n const span = document.createElement('span');\n span.innerHTML = s;\n return span.textContent || span.innerText;\n};\nconst generateLiveMessage = (props) => {\n const liveAuthor = _formatString(props.strings.liveAuthorIntro, {\n author: `${props.message.senderDisplayName}`\n });\n return `${props.message.editedOn ? props.strings.editedTag : ''} ${props.message.mine ? '' : liveAuthor} ${extractContent(props.message.content || '')} `;\n};\nconst messageContentAriaText = (props) => {\n // Strip all html tags from the content for aria.\n return props.message.content ? props.message.mine ? _formatString(props.strings.messageContentMineAriaText, {\n message: DOMPurify.sanitize(props.message.content, {\n ALLOWED_TAGS: []\n })\n }) : _formatString(props.strings.messageContentAriaText, {\n author: `${props.message.senderDisplayName}`,\n message: DOMPurify.sanitize(props.message.content, {\n ALLOWED_TAGS: []\n })\n }) : undefined;\n};\nconst processNodeDefinitions = ProcessNodeDefinitions();\nconst htmlToReactParser = Parser();\nconst processHtmlToReact = (props) => {\n var _a;\n const steps = [{\n // Process everything else in the default way\n shouldProcessNode: IsValidNodeDefinitions.alwaysValid,\n processNode: processNodeDefinitions.processDefaultNode\n }];\n return htmlToReactParser.parseWithInstructions((_a = props.message.content) !== null && _a !== void 0 ? _a : '', IsValidNodeDefinitions.alwaysValid, steps);\n};\n//# sourceMappingURL=ChatMessageContent.js.map","// 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 { Icon, IconButton, Spinner, SpinnerSize, TooltipHost } from '@fluentui/react';\nimport React, { useCallback, useState } from 'react';\nimport { useMemo } from 'react';\nimport { _FileCard } from './FileCard';\nimport { _FileCardGroup } from './FileCardGroup';\nimport { iconButtonClassName } from './styles/IconButton.styles';\nimport { _formatString } from \"../../../acs-ui-common/src\";\nconst fileDownloadCardsStyle = {\n marginTop: '0.25rem'\n};\nconst actionIconStyle = {\n height: '1rem'\n};\n/**\n * @internal\n */\nexport const _FileDownloadCards = (props) => {\n var _a, _b;\n const { userId, fileMetadata } = props;\n const [showSpinner, setShowSpinner] = useState(false);\n const localeStrings = useLocaleStringsTrampoline();\n const downloadFileButtonString = useMemo(() => () => {\n var _a, _b;\n return (_b = (_a = props.strings) === null || _a === void 0 ? void 0 : _a.downloadFile) !== null && _b !== void 0 ? _b : localeStrings.downloadFile;\n }, [(_a = props.strings) === null || _a === void 0 ? void 0 : _a.downloadFile, localeStrings.downloadFile]);\n const isFileSharingAttachment = useCallback((attachment) => {\n return false;\n }, []);\n const fileCardGroupDescription = useMemo(() => () => {\n var _a, _b;\n const fileGroupLocaleString = (_b = (_a = props.strings) === null || _a === void 0 ? void 0 : _a.fileCardGroupMessage) !== null && _b !== void 0 ? _b : localeStrings.fileCardGroupMessage;\n return _formatString(fileGroupLocaleString, {\n fileCount: `${fileMetadata.length}`\n });\n }, [(_b = props.strings) === null || _b === void 0 ? void 0 : _b.fileCardGroupMessage, localeStrings.fileCardGroupMessage, fileMetadata, isFileSharingAttachment]);\n const fileDownloadHandler = useCallback((userId, file) => __awaiter(void 0, void 0, void 0, function* () {\n if (!props.downloadHandler) {\n window.open(file.url, '_blank', 'noopener,noreferrer');\n }\n else {\n setShowSpinner(true);\n try {\n const response = yield props.downloadHandler(userId, file);\n setShowSpinner(false);\n if (response instanceof URL) {\n window.open(response.toString(), '_blank', 'noopener,noreferrer');\n }\n else {\n props.onDownloadErrorMessage && props.onDownloadErrorMessage(response.errorMessage);\n }\n }\n finally {\n setShowSpinner(false);\n }\n }\n }), [props]);\n if (!fileMetadata || fileMetadata.length === 0) {\n return React.createElement(React.Fragment, null);\n }\n return React.createElement(\"div\", { style: fileDownloadCardsStyle, \"data-ui-id\": \"file-download-card-group\" },\n React.createElement(_FileCardGroup, { ariaLabel: fileCardGroupDescription() }, fileMetadata && fileMetadata.filter(attachment => {\n return true;\n }).map(file => React.createElement(TooltipHost, { content: downloadFileButtonString(), key: file.name },\n React.createElement(_FileCard, { fileName: file.name, key: file.name, fileExtension: file.extension, actionIcon: showSpinner ? React.createElement(Spinner, { size: SpinnerSize.medium, \"aria-live\": 'polite', role: 'status' }) : true ? React.createElement(IconButton, { className: iconButtonClassName, ariaLabel: downloadFileButtonString() },\n React.createElement(DownloadIconTrampoline, null)) : undefined, actionHandler: () => fileDownloadHandler(userId, file) })))));\n};\n/**\n * @private\n */\nconst DownloadIconTrampoline = () => {\n // Return _some_ available icon, as the real icon is beta-only.\n return React.createElement(Icon, { iconName: \"EditBoxCancel\", style: actionIconStyle });\n};\nconst useLocaleStringsTrampoline = () => {\n return {\n downloadFile: '',\n fileCardGroupMessage: ''\n };\n};\n//# sourceMappingURL=FileDownloadCards.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { Text, mergeStyles } from '@fluentui/react';\nimport { ChatMessage as FluentChatMessage, ChatMyMessage } from '@fluentui-contrib/react-chat';\nimport React, { useCallback, useRef, useState } from 'react';\nimport { chatMessageEditedTagStyle, chatMessageDateStyle, chatMessageFailedTagStyle, chatMessageAuthorStyle } from '../styles/ChatMessageComponent.styles';\nimport { formatTimeForChatMessage, formatTimestampForChatMessage } from '../utils/Datetime';\nimport { useIdentifiers } from '../../identifiers/IdentifierProvider';\nimport { useTheme } from '../../theming';\nimport { ChatMessageActionFlyout } from './ChatMessageActionsFlyout';\nimport { ChatMessageContent } from './ChatMessageContent';\nimport { chatMessageActionMenuProps } from './ChatMessageActionMenu';\nimport { _FileDownloadCards } from '../FileDownloadCards';\nimport { useLocale } from '../../localization';\nimport { createStyleFromV8Style } from '../styles/v8StyleShim';\nimport { mergeClasses } from '@fluentui/react-components';\nimport { useChatMessageStyles, useChatMyMessageStyles, useChatMessageCommonStyles } from '../styles/MessageThread.styles';\nconst generateDefaultTimestamp = (createdOn, showDate, strings) => {\n const formattedTimestamp = showDate ? formatTimestampForChatMessage(createdOn, new Date(), strings) : formatTimeForChatMessage(createdOn);\n return formattedTimestamp;\n};\n// onDisplayDateTimeString from props overwrite onDisplayDateTimeString from locale\nconst generateCustomizedTimestamp = (props, createdOn, locale) => {\n return '';\n};\n/** @private */\nconst MessageBubble = (props) => {\n var _a;\n const ids = useIdentifiers();\n const theme = useTheme();\n const locale = useLocale();\n const { userId, message, onRemoveClick, onResendClick, disableEditing, showDate, messageContainerStyle, strings, onEditClick, remoteParticipantsCount = 0, onRenderAvatar, showMessageStatus, messageStatus, fileDownloadHandler, shouldOverlapAvatarAndMessage } = props;\n const defaultTimeStamp = message.createdOn ? generateDefaultTimestamp(message.createdOn, showDate, strings) : undefined;\n const customTimestamp = message.createdOn ? generateCustomizedTimestamp(props, message.createdOn, locale) : '';\n const formattedTimestamp = customTimestamp || defaultTimeStamp;\n // Track if the action menu was opened by touch - if so we increase the touch targets for the items\n const [wasInteractionByTouch, setWasInteractionByTouch] = useState(false);\n // `focused` state is used for show/hide actionMenu\n const [focused, setFocused] = React.useState(false);\n // The chat message action flyout should target the Chat.Message action menu if clicked,\n // or target the chat message if opened via touch press.\n // Undefined indicates the flyout menu should not be being shown.\n const messageRef = useRef(null);\n const messageActionButtonRef = useRef(null);\n const [chatMessageActionFlyoutTarget, setChatMessageActionFlyoutTarget] = useState(undefined);\n const chatActionsEnabled = !disableEditing && message.status !== 'sending' && !!message.mine;\n const [messageReadBy, setMessageReadBy] = useState([]);\n const actionMenuProps = chatMessageActionMenuProps({\n ariaLabel: (_a = strings.actionMenuMoreOptions) !== null && _a !== void 0 ? _a : '',\n enabled: chatActionsEnabled,\n menuButtonRef: messageActionButtonRef,\n menuExpanded: chatMessageActionFlyoutTarget === messageActionButtonRef,\n onActionButtonClick: () => {\n if (message.messageType === 'chat') {\n props.onActionButtonClick(message, setMessageReadBy);\n setChatMessageActionFlyoutTarget(messageActionButtonRef);\n }\n },\n theme\n });\n const onActionFlyoutDismiss = useCallback(() => {\n // When the flyout dismiss is called, since we control if the action flyout is visible\n // or not we need to set the target to undefined here to actually hide the action flyout\n setChatMessageActionFlyoutTarget(undefined);\n }, [setChatMessageActionFlyoutTarget]);\n const defaultOnRenderFileDownloads = useCallback(() => React.createElement(_FileDownloadCards, { userId: userId, fileMetadata: message['attachedFilesMetadata'] || [], downloadHandler: fileDownloadHandler }), [userId, message, fileDownloadHandler]);\n const editedOn = 'editedOn' in message ? message.editedOn : undefined;\n const getMessageDetails = useCallback(() => {\n if (messageStatus === 'failed') {\n return React.createElement(\"div\", { className: chatMessageFailedTagStyle(theme) }, strings.failToSendTag);\n }\n else if (message.messageType === 'chat' && editedOn) {\n return React.createElement(\"div\", { className: chatMessageEditedTagStyle(theme) }, strings.editedTag);\n }\n return undefined;\n }, [editedOn, message.messageType, messageStatus, strings.editedTag, strings.failToSendTag, theme]);\n const getContent = useCallback(() => {\n return React.createElement(\"div\", { tabIndex: 0, className: \"ui-chat__message__content\" },\n React.createElement(ChatMessageContent, { message: message, strings: strings }),\n props.onRenderFileDownloads ? props.onRenderFileDownloads(userId, message) : defaultOnRenderFileDownloads());\n }, [defaultOnRenderFileDownloads, message, props, strings, userId]);\n const isBlockedMessage = false;\n const chatMyMessageStyles = useChatMyMessageStyles();\n const chatMessageCommonStyles = useChatMessageCommonStyles();\n const chatMessageStyles = useChatMessageStyles();\n const chatItemMessageContainerClassName = mergeClasses(\n // messageContainerStyle used in className and style prop as style prop can't handle CSS selectors\n chatMessageStyles.body, isBlockedMessage ? chatMessageCommonStyles.blocked : props.message.status === 'failed' ? chatMessageCommonStyles.failed : undefined, shouldOverlapAvatarAndMessage ? chatMessageStyles.avatarOverlap : chatMessageStyles.avatarNoOverlap, message.attached === 'top' || message.attached === false ? chatMessageStyles.bodyWithAvatar : chatMessageStyles.bodyWithoutAvatar, mergeStyles(messageContainerStyle));\n const attached = message.attached === true ? 'center' : message.attached === 'bottom' ? 'bottom' : 'top';\n const chatMessage = React.createElement(React.Fragment, null,\n React.createElement(\"div\", { key: props.message.messageId }, message.mine ? React.createElement(ChatMyMessage, { attached: attached, key: props.message.messageId, body: {\n // messageContainerStyle used in className and style prop as style prop can't handle CSS selectors\n className: mergeClasses(chatMyMessageStyles.body, isBlockedMessage ? chatMessageCommonStyles.blocked : props.message.status === 'failed' ? chatMessageCommonStyles.failed : undefined, attached !== 'top' ? chatMyMessageStyles.bodyAttached : undefined, mergeStyles(messageContainerStyle)),\n style: Object.assign({}, createStyleFromV8Style(messageContainerStyle)),\n ref: messageRef\n }, root: {\n className: chatMyMessageStyles.root,\n onBlur: e => {\n // `focused` controls is focused the whole `ChatMessage` or any of its children. When we're navigating\n // with keyboard the focused element will be changed and there is no way to use `:focus` selector\n if (chatMessageActionFlyoutTarget === null || chatMessageActionFlyoutTarget === void 0 ? void 0 : chatMessageActionFlyoutTarget.current) {\n // doesn't dismiss action button if flyout is open, otherwise, narrator's focus will stay on the closed action menu\n return;\n }\n const shouldPreserveFocusState = e.currentTarget.contains(e.relatedTarget);\n setFocused(shouldPreserveFocusState);\n },\n onFocus: () => {\n // react onFocus is called even when nested component receives focus (i.e. it bubbles)\n // so when focus moves within actionMenu, the `focus` state in chatMessage remains true, and keeps actionMenu visible\n setFocused(true);\n },\n // make body not focusable to remove repetitions from narrators.\n // inner components are already focusable\n role: 'none',\n tabIndex: -1\n }, \"data-ui-id\": \"chat-composite-message\", author: React.createElement(Text, { className: chatMessageDateStyle, tabIndex: 0 }, message.senderDisplayName), timestamp: React.createElement(Text, { className: chatMessageDateStyle, \"data-ui-id\": ids.messageTimestamp, tabIndex: 0 }, formattedTimestamp), details: getMessageDetails(), actions: {\n children: actionMenuProps === null || actionMenuProps === void 0 ? void 0 : actionMenuProps.children,\n className: mergeClasses(chatMyMessageStyles.menu, \n // Make actions menu visible when the message is focused or the flyout is shown\n focused || (chatMessageActionFlyoutTarget === null || chatMessageActionFlyoutTarget === void 0 ? void 0 : chatMessageActionFlyoutTarget.current) ? chatMyMessageStyles.menuVisible : chatMyMessageStyles.menuHidden, attached !== 'top' ? chatMyMessageStyles.menuAttached : undefined)\n }, onTouchStart: () => setWasInteractionByTouch(true), onPointerDown: () => setWasInteractionByTouch(false), onKeyDown: () => setWasInteractionByTouch(false), onClick: () => {\n if (!wasInteractionByTouch) {\n return;\n }\n // If the message was touched via touch we immediately open the menu\n // flyout (when using mouse the 3-dot menu that appears on hover\n // must be clicked to open the flyout).\n // In doing so here we set the target of the flyout to be the message and\n // not the 3-dot menu button to position the flyout correctly.\n setChatMessageActionFlyoutTarget(messageRef);\n if (message.messageType === 'chat') {\n props.onActionButtonClick(message, setMessageReadBy);\n }\n } }, getContent()) : React.createElement(FluentChatMessage, { attached: attached, key: props.message.messageId, root: {\n className: chatMessageStyles.root,\n // make body not focusable to remove repetitions from narrators.\n // inner components are already focusable\n tabIndex: -1,\n role: 'none'\n }, author: React.createElement(Text, { className: chatMessageAuthorStyle }, message.senderDisplayName), body: {\n className: chatItemMessageContainerClassName,\n style: Object.assign({}, createStyleFromV8Style(messageContainerStyle))\n }, \"data-ui-id\": \"chat-composite-message\", timestamp: React.createElement(Text, { className: chatMessageDateStyle, \"data-ui-id\": ids.messageTimestamp }, formattedTimestamp) }, getContent())),\n chatActionsEnabled && React.createElement(ChatMessageActionFlyout, { hidden: !chatMessageActionFlyoutTarget, target: chatMessageActionFlyoutTarget, increaseFlyoutItemSize: wasInteractionByTouch, onDismiss: onActionFlyoutDismiss, onEditClick: onEditClick, onRemoveClick: onRemoveClick, onResendClick: onResendClick, strings: strings, messageReadBy: messageReadBy, messageStatus: messageStatus !== null && messageStatus !== void 0 ? messageStatus : 'failed', remoteParticipantsCount: remoteParticipantsCount, onRenderAvatar: onRenderAvatar, showMessageStatus: showMessageStatus }));\n return chatMessage;\n};\n/** @private */\nexport const ChatMessageComponentAsMessageBubble = React.memo(MessageBubble);\n//# sourceMappingURL=ChatMessageComponentAsMessageBubble.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { Icon } from '@fluentui/react';\nimport React from 'react';\nimport { iconWrapperStyle } from '../styles/ChatMessageComponent.styles';\n/**\n * Props for the Chat.Message action menu.\n * This is the 3 dots that appear when hovering over one of your own chat messages.\n *\n * @private\n */\nexport const chatMessageActionMenuProps = (menuProps) => {\n const { ariaLabel, enabled, theme, menuExpanded } = menuProps;\n // Show the action button while the flyout is open (otherwise this will dismiss when the pointer is hovered over the flyout)\n const showActionMenu = enabled || menuExpanded;\n const actionMenuProps = {\n children: React.createElement(\"div\", { tabIndex: showActionMenu ? 0 : undefined, key: \"menuButton\", \"data-ui-id\": \"chat-composite-message-action-icon\", ref: menuProps.menuButtonRef, onClick: showActionMenu ? () => menuProps.onActionButtonClick() : undefined, style: {\n margin: showActionMenu ? '1px' : 0,\n minHeight: showActionMenu ? undefined : '30px'\n }, role: \"button\", \"aria-label\": showActionMenu ? ariaLabel : undefined, \"aria-haspopup\": showActionMenu, \"aria-expanded\": menuExpanded }, showActionMenu ? React.createElement(Icon, { iconName: \"ChatMessageOptions\", \"aria-label\": ariaLabel, styles: iconWrapperStyle(theme, menuExpanded) }) : undefined)\n };\n return actionMenuProps;\n};\n//# sourceMappingURL=ChatMessageActionMenu.js.map","// 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 React, { useCallback, useState } from 'react';\nimport { ChatMessageComponentAsEditBox } from './ChatMessageComponentAsEditBox';\nimport { ChatMessageComponentAsMessageBubble } from './ChatMessageComponentAsMessageBubble';\n/**\n * @private\n */\nexport const ChatMessageComponent = (props) => {\n const [isEditing, setIsEditing] = useState(false);\n const onEditClick = useCallback(() => setIsEditing(true), [setIsEditing]);\n const { onDeleteMessage, onSendMessage, message } = props;\n const clientMessageId = 'clientMessageId' in message ? message.clientMessageId : undefined;\n const content = 'content' in message ? message.content : undefined;\n const onRemoveClick = useCallback(() => {\n if (onDeleteMessage && message.messageId) {\n onDeleteMessage(message.messageId);\n }\n // when fail to send, message does not have message id, delete message using clientMessageId\n else if (onDeleteMessage && message.messageType === 'chat' && clientMessageId) {\n onDeleteMessage(clientMessageId);\n }\n }, [onDeleteMessage, message.messageId, message.messageType, clientMessageId]);\n const onResendClick = useCallback(() => {\n onDeleteMessage && clientMessageId && onDeleteMessage(clientMessageId);\n onSendMessage && onSendMessage(content !== undefined ? content : '');\n }, [clientMessageId, content, onSendMessage, onDeleteMessage]);\n if (isEditing && message.messageType === 'chat') {\n return React.createElement(ChatMessageComponentAsEditBox, { message: message, strings: props.strings, onSubmit: (text, metadata, options) => __awaiter(void 0, void 0, void 0, function* () {\n props.onUpdateMessage && message.messageId && (yield props.onUpdateMessage(message.messageId, text, metadata, options));\n setIsEditing(false);\n }), onCancel: messageId => {\n props.onCancelEditMessage && props.onCancelEditMessage(messageId);\n setIsEditing(false);\n } });\n }\n else {\n return React.createElement(ChatMessageComponentAsMessageBubble, Object.assign({}, props, { onRemoveClick: onRemoveClick, onEditClick: onEditClick, onResendClick: onResendClick, onRenderAvatar: props.onRenderAvatar, strings: props.strings }));\n }\n};\n//# sourceMappingURL=ChatMessageComponent.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { Link } from '@fluentui/react';\nimport React from 'react';\n/** @private */\nexport function BannerMessage(props) {\n const { variant, strings } = props;\n switch (variant) {\n case 'TRANSCRIPTION_STOPPED_STILL_RECORDING':\n return React.createElement(React.Fragment, null,\n React.createElement(\"b\", null, strings.complianceBannerTranscriptionStopped),\n ` ${strings.complianceBannerNowOnlyRecording}`,\n React.createElement(PrivacyPolicy, { linkText: strings.privacyPolicy }));\n case 'RECORDING_STOPPED_STILL_TRANSCRIBING':\n return React.createElement(React.Fragment, null,\n React.createElement(\"b\", null, strings.complianceBannerRecordingStopped),\n ` ${strings.complianceBannerNowOnlyTranscription}`,\n React.createElement(PrivacyPolicy, { linkText: strings.privacyPolicy }));\n case 'RECORDING_AND_TRANSCRIPTION_STOPPED':\n return React.createElement(React.Fragment, null,\n React.createElement(\"b\", null, strings.complianceBannerRecordingAndTranscriptionSaved),\n ` ${strings.complianceBannerRecordingAndTranscriptionStopped}`,\n React.createElement(LearnMore, { linkText: strings.learnMore }));\n case 'RECORDING_AND_TRANSCRIPTION_STARTED':\n return React.createElement(React.Fragment, null,\n React.createElement(\"b\", null, strings.complianceBannerRecordingAndTranscriptionStarted),\n ` ${strings.complianceBannerTranscriptionConsent}`,\n React.createElement(PrivacyPolicy, { linkText: strings.privacyPolicy }));\n case 'TRANSCRIPTION_STARTED':\n return React.createElement(React.Fragment, null,\n React.createElement(\"b\", null, strings.complianceBannerTranscriptionStarted),\n ` ${strings.complianceBannerTranscriptionConsent}`,\n React.createElement(PrivacyPolicy, { linkText: strings.privacyPolicy }));\n case 'RECORDING_STOPPED':\n return React.createElement(React.Fragment, null,\n React.createElement(\"b\", null, strings.complianceBannerRecordingSaving),\n ` ${strings.complianceBannerRecordingStopped}`,\n React.createElement(LearnMore, { linkText: strings.learnMore }));\n case 'RECORDING_STARTED':\n return React.createElement(React.Fragment, null,\n React.createElement(\"b\", null, strings.complianceBannerRecordingStarted),\n ` ${strings.complianceBannerTranscriptionConsent}`,\n React.createElement(PrivacyPolicy, { linkText: strings.privacyPolicy }));\n case 'TRANSCRIPTION_STOPPED':\n return React.createElement(React.Fragment, null,\n React.createElement(\"b\", null, strings.complianceBannerTranscriptionSaving),\n ` ${strings.complianceBannerTranscriptionStopped}`,\n React.createElement(LearnMore, { linkText: strings.learnMore }));\n }\n return React.createElement(React.Fragment, null);\n}\nfunction PrivacyPolicy(props) {\n return React.createElement(Link, { href: \"https://privacy.microsoft.com/privacystatement#mainnoticetoendusersmodule\", target: \"_blank\", underline: true }, props.linkText);\n}\nfunction LearnMore(props) {\n return React.createElement(Link, { href: \"https://support.microsoft.com/office/record-a-meeting-in-teams-34dfbe7f-b07d-4a27-b4c6-de62f1348c24\", target: \"_blank\", underline: true }, props.linkText);\n}\n//# sourceMappingURL=BannerMessage.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { MessageBar, MessageBarType } from '@fluentui/react';\nimport React, { useRef, useState } from 'react';\nimport { BannerMessage } from './BannerMessage';\nconst BANNER_OVERWRITE_DELAY_MS = 3000;\n/**\n * Shows a {@link BannerMessage} in a {@link MessageBar} tracking `variant` internally.\n *\n * This component delays and combines frequent updates to `variant` such that:\n * - Updates that happen within {@link BANNER_OVERWRITE_DELAY_MS} are delayed.\n * - Once {@link BANNER_OVERWRITE_DELAY_MS} has passed since the last update, the _latest_ pending update is shown.\n *\n * This ensures that there is enough time for the user to see a banner message before it is overwritten.\n * In case of multiple delayed messages, the user always sees the final message as it reflects the final state\n * of recording and transcription.\n *\n * @private\n */\nexport function DelayedUpdateBanner(props) {\n const { variant, lastUpdated: variantLastUpdated } = props.variant;\n // Tracks the variant that is currently visible in the UI.\n const [visible, setVisible] = useState({\n variant,\n lastUpdated: Date.now()\n });\n const pendingUpdateHandle = useRef(null);\n if (variant !== visible.variant && variantLastUpdated > visible.lastUpdated) {\n // Always clear pending updates.\n // We'll either update now, or schedule an update for later.\n if (pendingUpdateHandle.current) {\n clearTimeout(pendingUpdateHandle.current);\n }\n const now = Date.now();\n const timeToNextUpdate = BANNER_OVERWRITE_DELAY_MS - (now - visible.lastUpdated);\n if (variant === 'NO_STATE' || timeToNextUpdate <= 0) {\n setVisible({\n variant,\n lastUpdated: now\n });\n }\n else {\n pendingUpdateHandle.current = setTimeout(() => {\n // Set the actual update time, not the computed time when the update should happen.\n // The actual update might be later than we planned.\n setVisible({\n variant,\n lastUpdated: Date.now()\n });\n }, timeToNextUpdate);\n }\n }\n if (visible.variant === 'NO_STATE') {\n return React.createElement(React.Fragment, null);\n }\n return React.createElement(MessageBar, { messageBarType: MessageBarType.warning, onDismiss: () => {\n // when closing the banner, change variant to nostate and change stopped state to off state.\n // Reason: on banner close, going back to the default state.\n setVisible({\n variant: 'NO_STATE',\n lastUpdated: Date.now()\n });\n props.onDismiss();\n }, dismissButtonAriaLabel: props.strings.close },\n React.createElement(BannerMessage, { variant: visible.variant, strings: props.strings }));\n}\n//# sourceMappingURL=DelayedUpdateBanner.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport React, { useRef } from 'react';\nimport { computeVariant } from './Utils';\nimport { DelayedUpdateBanner } from './DelayedUpdateBanner';\n/**\n * A component that displays banners to notify the user when call recording and\n * transcription is enabled or disabled in a call.\n *\n * This component implements a state machine that tracks the changes to call\n * recording and transcription state and shows the corresponding message.\n *\n * @internal\n */\nexport const _ComplianceBanner = (props) => {\n const cachedProps = useRef({\n latestBooleanState: {\n callTranscribeState: false,\n callRecordState: false\n },\n latestStringState: {\n callTranscribeState: 'off',\n callRecordState: 'off'\n },\n lastUpdated: Date.now()\n });\n // Only update cached props and variant if there is _some_ change in the latest props.\n // This ensures that state machine is only updated if there is an actual change in the props.\n const shouldUpdateCached = props.callRecordState !== cachedProps.current.latestBooleanState.callRecordState || props.callTranscribeState !== cachedProps.current.latestBooleanState.callTranscribeState;\n // The following three operations must be performed in this exact order:\n // [1]: Update cached state to transition the state machine.\n if (shouldUpdateCached) {\n cachedProps.current = {\n latestBooleanState: props,\n latestStringState: {\n callRecordState: determineStates(cachedProps.current.latestStringState.callRecordState, props.callRecordState),\n callTranscribeState: determineStates(cachedProps.current.latestStringState.callTranscribeState, props.callTranscribeState)\n },\n lastUpdated: Date.now()\n };\n }\n // [2]: Compute the variant, using the transitioned state machine.\n const variant = computeVariant(cachedProps.current.latestStringState.callRecordState, cachedProps.current.latestStringState.callTranscribeState);\n // [3]: Transition the state machine again to deal with some end-states.\n if (shouldUpdateCached && cachedProps.current.latestStringState.callRecordState === 'stopped' && cachedProps.current.latestStringState.callTranscribeState === 'stopped') {\n // When both states are stopped, after displaying message \"RECORDING_AND_TRANSCRIPTION_STOPPED\", change both states to off (going back to the default state).\n cachedProps.current.latestStringState.callRecordState = 'off';\n cachedProps.current.latestStringState.callTranscribeState = 'off';\n }\n return React.createElement(DelayedUpdateBanner, { variant: {\n variant,\n lastUpdated: cachedProps.current.lastUpdated\n }, strings: props.strings, onDismiss: () => {\n if (cachedProps.current.latestStringState.callRecordState === 'stopped') {\n cachedProps.current.latestStringState.callRecordState = 'off';\n }\n if (cachedProps.current.latestStringState.callTranscribeState === 'stopped') {\n cachedProps.current.latestStringState.callTranscribeState = 'off';\n }\n } });\n};\nfunction determineStates(previous, current) {\n // if current state is on, then return on\n if (current) {\n return 'on';\n }\n // if current state is off\n else {\n // if previous state is on and current state is off, return stopped (on -> off)\n if (previous === 'on') {\n return 'stopped';\n }\n // otherwise remain previous state unchanged\n else {\n return previous;\n }\n }\n}\n//# sourceMappingURL=ComplianceBanner.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n/**\n * Return different conditions based on the current and previous state of recording and transcribing\n *\n * @param callRecordState - The current call record state: on, off, stopped\n * @param callTranscribeState - The current call transcribe state: on, off, stopped\n *\n * @remarks - The stopped state means: previously on but currently off\n *\n * @private\n */\nexport const computeVariant = (callRecordState, callTranscribeState) => {\n if (callRecordState === 'on' && callTranscribeState === 'on') {\n return 'RECORDING_AND_TRANSCRIPTION_STARTED';\n }\n else if (callRecordState === 'on' && callTranscribeState === 'off') {\n return 'RECORDING_STARTED';\n }\n else if (callRecordState === 'off' && callTranscribeState === 'on') {\n return 'TRANSCRIPTION_STARTED';\n }\n else if (callRecordState === 'on' && callTranscribeState === 'stopped') {\n return 'TRANSCRIPTION_STOPPED_STILL_RECORDING';\n }\n else if (callRecordState === 'stopped' && callTranscribeState === 'on') {\n return 'RECORDING_STOPPED_STILL_TRANSCRIBING';\n }\n else if (callRecordState === 'off' && callTranscribeState === 'stopped') {\n return 'TRANSCRIPTION_STOPPED';\n }\n else if (callRecordState === 'stopped' && callTranscribeState === 'off') {\n return 'RECORDING_STOPPED';\n }\n else if (callRecordState === 'stopped' && callTranscribeState === 'stopped') {\n return 'RECORDING_AND_TRANSCRIPTION_STOPPED';\n }\n else {\n return 'NO_STATE';\n }\n};\n//# sourceMappingURL=Utils.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { mergeStyles, Stack } from '@fluentui/react';\nimport React, { useMemo } from 'react';\nimport { controlBarStyles } from './styles/ControlBar.styles';\nimport { useTheme } from '../theming';\nimport { isDarkThemed } from '../theming/themeUtils';\nconst mainDivStyle = {\n position: 'relative',\n height: '100%',\n width: '100%'\n};\n/**\n * A container for various buttons for call controls.\n *\n * Use with various call control buttons in this library, e.g., {@link CameraButton}, or your own instances of\n * {@link ControlBarButton} directly.\n *\n * @public\n */\nexport const ControlBar = (props) => {\n const { styles, layout } = props;\n const theme = useTheme();\n const controlBarClassName = useMemo(() => {\n const controlBarStyle = controlBarStyles[layout !== null && layout !== void 0 ? layout : 'horizontal'];\n // if theme is dark and layout is floating then use palette.neutralQuaternaryAlt as background, otherwise use theme.palette.white\n const backgroundStyle = {\n background: isDarkThemed(theme) && (layout === null || layout === void 0 ? void 0 : layout.startsWith('floating')) ? theme.palette.neutralQuaternaryAlt : theme.palette.white\n };\n const borderAndBoxShadowStyle = (layout === null || layout === void 0 ? void 0 : layout.startsWith('floating')) ? {\n boxShadow: theme.effects.elevation16,\n borderRadius: theme.effects.roundedCorner6\n } : {};\n // if rtl is true and layout is either floatingTop or floatingBottom then we need to override the transform-style property\n // to translate 50% to right instead of the left\n const transformOverrideStyle = theme.rtl && (layout === 'floatingTop' || layout === 'floatingBottom') ? {\n transform: 'translateX(50%)'\n } : {};\n return mergeStyles(controlBarStyle, backgroundStyle, borderAndBoxShadowStyle, transformOverrideStyle, styles === null || styles === void 0 ? void 0 : styles.root);\n }, [layout, styles === null || styles === void 0 ? void 0 : styles.root, theme]);\n return React.createElement(\"div\", { className: mergeStyles(mainDivStyle) },\n React.createElement(Stack, { className: controlBarClassName }, props.children));\n};\n//# sourceMappingURL=ControlBar.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport React from 'react';\nimport { TooltipHost, mergeStyleSets, useTheme } from '@fluentui/react';\nimport { isDarkThemed } from '../theming/themeUtils';\n// The TooltipHost root uses display: inline by default.\n// To prevent sizing issues or tooltip positioning issues, we override to inline-block.\n// For more details see \"Icon Button with Tooltip\" on https://developer.microsoft.com/en-us/fluentui#/controls/web/button\nconst hostStyles = {\n root: {\n display: 'inline-block'\n }\n};\n/**\n * Tooltip that should wrap control bar buttons.\n *\n * @private\n */\nexport const ControlButtonTooltip = (props) => {\n const theme = useTheme();\n const calloutStyle = {\n root: {\n padding: 0\n },\n calloutMain: {\n padding: '0.5rem'\n }\n };\n // Place callout with no gap between it and the button.\n const calloutProps = {\n gapSpace: 0,\n styles: calloutStyle,\n backgroundColor: isDarkThemed(theme) ? theme.palette.neutralLighter : ''\n };\n return React.createElement(TooltipHost, Object.assign({}, props, { \"data-ui-id\": props.id, calloutProps: Object.assign(Object.assign({}, calloutProps), props.calloutProps), styles: mergeStyleSets(hostStyles, props.styles) }), props.children);\n};\n//# sourceMappingURL=ControlButtonTooltip.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport React from 'react';\nimport { DefaultButton, concatStyleSets, KeyCodes } from '@fluentui/react';\nimport { controlButtonStyles } from './styles/ControlBar.styles';\nimport { ControlButtonTooltip } from './ControlButtonTooltip';\nconst DefaultRenderIcon = (props) => {\n return (props === null || props === void 0 ? void 0 : props.checked) ? (props === null || props === void 0 ? void 0 : props.onRenderOnIcon) ? props === null || props === void 0 ? void 0 : props.onRenderOnIcon() : null : (props === null || props === void 0 ? void 0 : props.onRenderOffIcon) ? props === null || props === void 0 ? void 0 : props.onRenderOffIcon() : null;\n};\n/**\n * Default button styled for the {@link ControlBar}.\n *\n * Use this component create custom buttons that are styled the same as other buttons provided by the UI Library.\n *\n * @public\n */\nexport const ControlBarButton = (props) => {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;\n const componentStyles = concatStyleSets(controlButtonStyles, (_a = props.styles) !== null && _a !== void 0 ? _a : {});\n const labelText = (_d = (_b = props === null || props === void 0 ? void 0 : props.text) !== null && _b !== void 0 ? _b : (_c = props === null || props === void 0 ? void 0 : props.strings) === null || _c === void 0 ? void 0 : _c.label) !== null && _d !== void 0 ? _d : ((props === null || props === void 0 ? void 0 : props.checked) ? (_e = props === null || props === void 0 ? void 0 : props.strings) === null || _e === void 0 ? void 0 : _e.onLabel : (_f = props === null || props === void 0 ? void 0 : props.strings) === null || _f === void 0 ? void 0 : _f.offLabel);\n const tooltipContent = (_h = (_g = props === null || props === void 0 ? void 0 : props.strings) === null || _g === void 0 ? void 0 : _g.tooltipContent) !== null && _h !== void 0 ? _h : ((props === null || props === void 0 ? void 0 : props.disabled) ? (_j = props === null || props === void 0 ? void 0 : props.strings) === null || _j === void 0 ? void 0 : _j.tooltipDisabledContent : (props === null || props === void 0 ? void 0 : props.checked) ? (_k = props === null || props === void 0 ? void 0 : props.strings) === null || _k === void 0 ? void 0 : _k.tooltipOnContent : (_l = props === null || props === void 0 ? void 0 : props.strings) === null || _l === void 0 ? void 0 : _l.tooltipOffContent);\n const tooltipId = ((_m = props.tooltipId) !== null && _m !== void 0 ? _m : props.labelKey) ? props.labelKey + '-tooltip' : undefined;\n return React.createElement(ControlButtonTooltip, { hidden: props.disableTooltip, content: tooltipContent, id: tooltipId },\n React.createElement(DefaultButton, Object.assign({}, props, { styles: componentStyles, onRenderText: props.showLabel && props.onRenderText ? props.onRenderText : undefined, onRenderIcon: (_o = props.onRenderIcon) !== null && _o !== void 0 ? _o : DefaultRenderIcon, ariaLabel: (_r = (_q = (_p = props.splitButtonAriaLabel) !== null && _p !== void 0 ? _p : props.ariaLabel) !== null && _q !== void 0 ? _q : tooltipContent) !== null && _r !== void 0 ? _r : labelText, allowDisabledFocus: (_s = props.allowDisabledFocus) !== null && _s !== void 0 ? _s : true, menuTriggerKeyCode: KeyCodes.down, text: undefined }), props.showLabel ? labelText : React.createElement(React.Fragment, null)));\n};\n//# sourceMappingURL=ControlBarButton.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { ContextualMenuItemType, merge } from '@fluentui/react';\nimport React from 'react';\nimport { useLocale } from '../localization';\nimport { ControlBarButton } from './ControlBarButton';\nimport { _HighContrastAwareIcon } from './HighContrastAwareIcon';\nimport { buttonFlyoutItemStyles } from './styles/ControlBar.styles';\nimport { _preventDismissOnEvent as preventDismissOnEvent } from \"../../../acs-ui-common/src\";\n/**\n * Generates default {@link IContextualMenuProps} for buttons that\n * show a drop-down to select devices to use.\n *\n * @internal\n */\nexport const generateDefaultDeviceMenuProps = (props, strings, primaryActionItem, isSelectCamAllowed = true, isSelectMicAllowed = true) => {\n var _a, _b;\n const { microphones, speakers, cameras, selectedMicrophone, selectedSpeaker, selectedCamera, onSelectCamera, onSelectMicrophone, onSelectSpeaker } = props;\n const defaultMenuProps = {\n items: [],\n styles: props.styles,\n calloutProps: {\n styles: {\n root: {\n // Confine the menu to the parents bounds.\n // More info: https://github.com/microsoft/fluentui/issues/18835\n // NB: 95% to keep some space for margin, drop shadow etc around the Callout.\n maxWidth: '95%'\n }\n },\n preventDismissOnEvent\n }\n };\n const menuItemStyles = merge(buttonFlyoutItemStyles, (_b = (_a = props.styles) === null || _a === void 0 ? void 0 : _a.menuItemStyles) !== null && _b !== void 0 ? _b : {});\n if (cameras && selectedCamera && onSelectCamera && isSelectCamAllowed) {\n defaultMenuProps.items.push({\n key: 'cameras',\n itemType: ContextualMenuItemType.Section,\n sectionProps: {\n title: strings.cameraMenuTitle,\n items: [{\n key: 'sectionCamera',\n title: strings.cameraMenuTooltip,\n subMenuProps: {\n calloutProps: {\n preventDismissOnEvent\n },\n items: cameras.map(camera => ({\n key: camera.id,\n text: camera.name,\n title: camera.name,\n iconProps: {\n iconName: 'ContextMenuCameraIcon',\n styles: {\n root: {\n lineHeight: 0\n }\n }\n },\n itemProps: {\n styles: menuItemStyles\n },\n canCheck: true,\n isChecked: camera.id === (selectedCamera === null || selectedCamera === void 0 ? void 0 : selectedCamera.id),\n onClick: () => {\n if (camera.id !== (selectedCamera === null || selectedCamera === void 0 ? void 0 : selectedCamera.id)) {\n onSelectCamera(camera);\n }\n }\n }))\n },\n text: selectedCamera.name\n }]\n }\n });\n if (primaryActionItem) {\n defaultMenuProps.items.push(primaryActionItem);\n }\n }\n if (microphones && selectedMicrophone && onSelectMicrophone && isSelectMicAllowed) {\n // Set props as Microphone if speakers can be enumerated else set as Audio Device\n const speakersAvailable = speakers && speakers.length > 0;\n const key = speakersAvailable ? 'sectionMicrophone' : 'sectionAudioDevice';\n const title = speakersAvailable ? strings.microphoneMenuTooltip : strings.audioDeviceMenuTooltip;\n defaultMenuProps.items.push({\n key: 'microphones',\n itemType: ContextualMenuItemType.Section,\n sectionProps: {\n title: strings.microphoneMenuTitle,\n items: [{\n key: key,\n title: title,\n subMenuProps: {\n calloutProps: {\n preventDismissOnEvent\n },\n items: microphones.map(microphone => ({\n key: microphone.id,\n text: microphone.name,\n title: microphone.name,\n itemProps: {\n styles: menuItemStyles\n },\n iconProps: {\n iconName: 'ContextMenuMicIcon',\n styles: {\n root: {\n lineHeight: 0\n }\n }\n },\n canCheck: true,\n isChecked: microphone.id === (selectedMicrophone === null || selectedMicrophone === void 0 ? void 0 : selectedMicrophone.id),\n onClick: () => {\n if (microphone.id !== (selectedMicrophone === null || selectedMicrophone === void 0 ? void 0 : selectedMicrophone.id)) {\n onSelectMicrophone(microphone);\n }\n }\n }))\n },\n text: selectedMicrophone.name\n }]\n }\n });\n }\n if (speakers && selectedSpeaker && onSelectSpeaker) {\n defaultMenuProps.items.push({\n key: 'speakers',\n itemType: ContextualMenuItemType.Section,\n sectionProps: {\n title: strings.speakerMenuTitle,\n items: [{\n key: 'sectionSpeaker',\n subMenuProps: {\n calloutProps: {\n preventDismissOnEvent\n },\n items: speakers.map(speaker => ({\n key: speaker.id,\n text: speaker.name,\n title: speaker.name,\n itemProps: {\n styles: menuItemStyles\n },\n iconProps: {\n iconName: 'ContextMenuSpeakerIcon',\n styles: {\n root: {\n lineHeight: 0\n }\n }\n },\n canCheck: true,\n isChecked: speaker.id === (selectedSpeaker === null || selectedSpeaker === void 0 ? void 0 : selectedSpeaker.id),\n onClick: () => {\n if (speaker.id !== (selectedSpeaker === null || selectedSpeaker === void 0 ? void 0 : selectedSpeaker.id)) {\n onSelectSpeaker(speaker);\n }\n }\n }))\n },\n text: selectedSpeaker.name\n }]\n }\n });\n }\n if (microphones && selectedMicrophone && onSelectMicrophone && isSelectMicAllowed && primaryActionItem) {\n defaultMenuProps.items.push(primaryActionItem);\n }\n if (defaultMenuProps.items.length === 0) {\n // Avoids creating an empty context menu.\n return undefined;\n }\n return defaultMenuProps;\n};\n/**\n * A button to open a menu that controls device options.\n *\n * Can be used with {@link ControlBar}.\n *\n * @public\n */\nexport const DevicesButton = (props) => {\n var _a, _b, _c;\n const { onRenderIcon } = props;\n const localeStrings = useLocale().strings.devicesButton;\n const strings = Object.assign(Object.assign({}, localeStrings), props.strings);\n const devicesButtonMenu = (_a = props.menuProps) !== null && _a !== void 0 ? _a : generateDefaultDeviceMenuProps(Object.assign(Object.assign({}, props), { styles: (_b = props.styles) === null || _b === void 0 ? void 0 : _b.menuStyles }), strings);\n const onRenderOptionsIcon = () => {\n return React.createElement(_HighContrastAwareIcon, { disabled: props.disabled, iconName: \"ControlButtonOptions\" });\n };\n return React.createElement(ControlBarButton, Object.assign({}, props, { menuProps: devicesButtonMenu, menuIconProps: {\n hidden: true\n }, onRenderIcon: onRenderIcon !== null && onRenderIcon !== void 0 ? onRenderIcon : onRenderOptionsIcon, strings: strings, labelKey: (_c = props.labelKey) !== null && _c !== void 0 ? _c : 'devicesButtonLabel' }));\n};\n//# sourceMappingURL=DevicesButton.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { FocusZone, FontIcon, mergeStyles, Stack, Text } from '@fluentui/react';\nimport React from 'react';\nimport { useTheme } from '../../theming/FluentThemeProvider';\nimport { submitWithKeyboard } from '../utils/keyboardNavigation';\n/**\n * Maps the individual item in menuProps.items passed in the {@link DrawerMenu} into a UI component.\n *\n * @private\n */\nexport const DrawerMenuItem = (props) => {\n var _a;\n const theme = useTheme();\n const onClick = (ev) => props.onItemClick && props.onItemClick(ev, props.itemKey);\n const onKeyPress = (ev) => onClick && submitWithKeyboard(ev, onClick);\n const secondaryIcon = props.secondaryIconProps ? React.createElement(MenuItemIcon, Object.assign({}, props.secondaryIconProps)) : props.subMenuProps ? React.createElement(MenuItemIcon, { iconName: \"ChevronRight\" }) : undefined;\n return React.createElement(FocusZone, { shouldFocusOnMount: props.shouldFocusOnMount },\n React.createElement(Stack, { tabIndex: 0, role: \"menuitem\", horizontal: true, className: mergeStyles(drawerMenuItemRootStyles(theme.palette.neutralLight, theme.fonts.small), props.disabled ? disabledDrawerMenuItemRootStyles(theme.palette.neutralQuaternaryAlt) : undefined, (_a = props.styles) === null || _a === void 0 ? void 0 : _a.root), onKeyPress: props.disabled ? undefined : onKeyPress, onClick: props.disabled ? undefined : onClick, tokens: menuItemChildrenGap, id: props.id },\n props.iconProps && React.createElement(Stack.Item, { role: \"presentation\", styles: props.disabled ? {\n root: {\n color: theme.palette.neutralTertiaryAlt\n }\n } : undefined },\n React.createElement(MenuItemIcon, Object.assign({}, props.iconProps))),\n React.createElement(Stack.Item, { styles: drawerMenuItemTextStyles, grow: true },\n React.createElement(Text, { styles: props.disabled ? {\n root: {\n color: theme.palette.neutralTertiaryAlt\n }\n } : undefined }, props.text)),\n props.secondaryText && React.createElement(Stack.Item, { styles: drawerMenuItemTextStyles, className: mergeStyles(secondaryTextStyles) },\n React.createElement(Text, { styles: {\n root: {\n color: props.disabled ? theme.palette.neutralTertiaryAlt : theme.palette.neutralSecondary\n }\n } }, props.secondaryText)),\n props.secondaryComponent && React.createElement(Stack.Item, null, props.secondaryComponent),\n secondaryIcon && React.createElement(Stack.Item, null, secondaryIcon)));\n};\nconst MenuItemIcon = (props) => React.createElement(FontIcon, Object.assign({ className: mergeStyles(iconStyles) }, props));\nconst menuItemChildrenGap = {\n childrenGap: '0.5rem'\n};\nconst drawerMenuItemRootStyles = (hoverBackground, fontSize) => (Object.assign(Object.assign({}, fontSize), { height: '3rem', lineHeight: '3rem', padding: '0rem 0.75rem', cursor: 'pointer', ':hover, :focus': {\n background: hoverBackground\n } }));\nconst disabledDrawerMenuItemRootStyles = (background) => ({\n pointerEvents: 'none',\n background: background,\n ':hover, :focus': {\n background: background\n }\n});\n/** Ensure long text entries appropriately show ellipsis instead of wrapping to a new line or showing a scrollbar */\nconst drawerMenuItemTextStyles = {\n root: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap'\n }\n};\nconst iconStyles = {\n // Vertically center icons in the menu item. Using line-height does not work for centering fluent SVG icons.\n display: 'flex',\n alignItems: 'center',\n height: '100%',\n // This can be removed when we upgrade to fluent-react-icons v2 (that removes the inner span element)\n ' span': {\n display: 'flex',\n alignItems: 'center',\n height: '100%'\n }\n};\nconst secondaryTextStyles = {\n // limit width for secondaryText in the menu item so it does not overlap with text on left.\n maxWidth: '50%'\n};\n//# sourceMappingURL=DrawerMenuItem.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { AnimationStyles, mergeStyles, Stack, Text, useTheme } from '@fluentui/react';\nimport React from 'react';\n/**\n * Container that holds the content of the drawer\n *\n * @private\n */\nexport const DrawerContentContainer = (props) => {\n var _a;\n const theme = useTheme();\n const backgroundColor = theme.palette.white;\n const borderRadius = theme.effects.roundedCorner4;\n const rootStyles = mergeStyles(containerStyles(backgroundColor, borderRadius), (_a = props.styles) === null || _a === void 0 ? void 0 : _a.root);\n return React.createElement(Stack, { className: rootStyles },\n props.heading && React.createElement(Stack, { className: mergeStyles(headingContainerStyles) },\n React.createElement(Text, { className: mergeStyles(headingStyles(theme)) }, props.heading)),\n props.children);\n};\nconst containerStyles = (backgroundColor, borderRadius) => (Object.assign({ background: backgroundColor, borderTopRightRadius: borderRadius, borderTopLeftRadius: borderRadius }, AnimationStyles.slideUpIn10));\nconst headingContainerStyles = {\n textAlign: 'center',\n width: '100%',\n padding: '0.5rem'\n};\nconst headingStyles = (theme) => ({\n color: theme.palette.neutralSecondary,\n fontSize: theme.fonts.smallPlus.fontSize,\n lineHeight: '1rem',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n});\n//# sourceMappingURL=DrawerContentContainer.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { mergeStyles, Stack } from '@fluentui/react';\nimport React from 'react';\n/**\n * An element that fills the space the DrawerContentContainer does not take up.\n * This is the element that enables the light dismiss feature.\n *\n * @private\n */\nexport const DrawerLightDismiss = (props) => {\n return React.createElement(Stack, { className: mergeStyles(lightDismissContainerStyles, props.styles), grow: true, onClick: () => props.onDismiss() });\n};\nconst lightDismissContainerStyles = {\n root: {\n height: '100%'\n }\n};\n//# sourceMappingURL=DrawerLightDismiss.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { FocusTrapZone, mergeStyles, mergeStyleSets, Stack } from '@fluentui/react';\nimport React from 'react';\nimport { DrawerContentContainer } from './DrawerContentContainer';\nimport { DrawerLightDismiss } from './DrawerLightDismiss';\n/**\n * A `Drawer` can be used to reveal lightweight views inside your application.\n * They appear from the bottom of the screen upwards and are light-dismissed.\n *\n * @internal\n */\nexport const _DrawerSurface = (props) => {\n var _a, _b, _c, _d;\n const rootStyles = props.disableMaxHeight ? mergeStyles(drawerSurfaceStyles, (_a = props.styles) === null || _a === void 0 ? void 0 : _a.root) : mergeStyles(drawerSurfaceStyles, focusTrapZoneStyles, (_b = props.styles) === null || _b === void 0 ? void 0 : _b.root);\n const containerStyles = mergeStyleSets(drawerContentContainerStyles, (_c = props.styles) === null || _c === void 0 ? void 0 : _c.drawerContentContainer);\n return React.createElement(Stack, { className: rootStyles },\n React.createElement(DrawerLightDismiss, { styles: (_d = props.styles) === null || _d === void 0 ? void 0 : _d.lightDismissRoot, onDismiss: props.onLightDismiss }),\n React.createElement(FocusTrapZone, { onKeyDown: e => {\n if (e.key === 'Escape' || e.key === 'Esc') {\n props.onLightDismiss && props.onLightDismiss();\n }\n }, \n // Ensure when the focus trap has focus, the light dismiss area can still be clicked with mouse to dismiss.\n // Note: this still correctly captures keyboard focus, this just allows mouse click outside of the focus trap.\n isClickableOutsideFocusTrap: true },\n React.createElement(DrawerContentContainer, { styles: containerStyles, heading: props.heading }, props.children)));\n};\nconst drawerSurfaceStyles = {\n width: '100%',\n height: '100%',\n background: 'rgba(0,0,0,0.4)'\n};\nconst focusTrapZoneStyles = {\n // Targets FocusTrapZone in drawer.\n // Setting percentage to Height to transform a container does not work unless the\n // direct parent container also has a Height set other than 'auto'.\n '> div:nth-child(2)': {\n maxHeight: '75%',\n overflow: 'auto'\n }\n};\nconst drawerContentContainerStyles = {\n root: {\n height: 'auto'\n }\n};\n//# sourceMappingURL=DrawerSurface.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { merge, Stack } from '@fluentui/react';\nimport React, { useCallback, useMemo, useState } from 'react';\nimport { useTheme } from '../../theming/FluentThemeProvider';\nimport { DrawerMenuItem } from './DrawerMenuItem';\nimport { _DrawerSurface } from './DrawerSurface';\n/**\n * Takes a set of menu items and returns a created menu inside a {@link _DrawerSurface}.\n *\n * @internal\n */\nexport const _DrawerMenu = (props) => {\n var _a, _b;\n // This component breaks from a pure component pattern in order to internally support sub menus.\n // When a sub menu item is clicked the menu items displayed is updated to be that of the submenu.\n // To track this state we store a list of the keys clicked up until this point.\n const [selectedKeyPath, setSelectedKeyPath] = useState([]);\n // Get the menu items that should be rendered\n const menuItemsToRender = useMemo(() => {\n var _a;\n let items = props.items;\n for (const subMenuKey of selectedKeyPath) {\n items = (_a = items === null || items === void 0 ? void 0 : items.find(item => item.itemKey === subMenuKey)) === null || _a === void 0 ? void 0 : _a.subMenuProps;\n }\n return items;\n }, [props.items, selectedKeyPath]);\n // When an item is clicked and it contains a submenu, push the key for the submenu. This will ensure\n // a new render is triggered, menuItemsToRender will be re-calculated and the submenu will render.\n const onItemClick = useCallback((item, ev, itemKey) => {\n var _a;\n if (item.subMenuProps) {\n setSelectedKeyPath([...selectedKeyPath, item.itemKey]);\n }\n (_a = item.onItemClick) === null || _a === void 0 ? void 0 : _a.call(item, ev, itemKey);\n }, [selectedKeyPath]);\n // Ensure the first item has a border radius that matches the DrawerSurface\n const borderRadius = useTheme().effects.roundedCorner4;\n const firstItemStyle = menuItemsToRender && ((_a = menuItemsToRender[0]) === null || _a === void 0 ? void 0 : _a.styles);\n const modifiedFirstItemStyle = useMemo(() => merge(firstItemStyle !== null && firstItemStyle !== void 0 ? firstItemStyle : {}, {\n root: {\n borderTopRightRadius: borderRadius,\n borderTopLeftRadius: borderRadius\n }\n }), [firstItemStyle, borderRadius]);\n return React.createElement(_DrawerSurface, { disableMaxHeight: props.disableMaxHeight, styles: (_b = props.styles) === null || _b === void 0 ? void 0 : _b.drawerSurfaceStyles, onLightDismiss: props.onLightDismiss, heading: props.heading },\n React.createElement(Stack, { styles: props.styles, role: \"menu\", \"data-ui-id\": \"drawer-menu\" }, menuItemsToRender === null || menuItemsToRender === void 0 ? void 0 :\n menuItemsToRender.slice(0, 1).map(item => React.createElement(DrawerMenuItem, Object.assign({}, item, { key: `${item.itemKey}` + '0', shouldFocusOnMount: true, styles: modifiedFirstItemStyle, onItemClick: (ev, itemKey) => {\n onItemClick(item, ev, itemKey);\n } }))), menuItemsToRender === null || menuItemsToRender === void 0 ? void 0 :\n menuItemsToRender.slice(1).map((item, i) => React.createElement(DrawerMenuItem, Object.assign({}, item, { key: `${item.itemKey}` + `${i + 1}`, onItemClick: (ev, itemKey) => {\n onItemClick(item, ev, itemKey);\n } })))));\n};\n//# sourceMappingURL=DrawerMenu.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { concatStyleSets, Icon } from '@fluentui/react';\nimport React from 'react';\nimport { useLocale } from '../localization';\nimport { useTheme } from '../theming';\nimport { darkTheme, lightTheme } from '../theming/themes';\nimport { isDarkThemed } from '../theming/themeUtils';\nimport { ControlBarButton } from './ControlBarButton';\nconst onRenderEndCallIcon = () => React.createElement(Icon, { iconName: \"ControlButtonEndCall\" });\n/**\n * A button to end an ongoing call.\n *\n * Can be used with {@link ControlBar}.\n *\n * @public\n */\nexport const EndCallButton = (props) => {\n var _a, _b, _c;\n const { styles } = props;\n const localeStrings = useLocale().strings.endCallButton;\n const strings = Object.assign(Object.assign({}, localeStrings), props.strings);\n const theme = useTheme();\n const isDarkTheme = isDarkThemed(theme);\n const componentStyles = concatStyleSets(isDarkTheme ? darkThemeCallButtonStyles : lightThemeCallButtonStyles, styles !== null && styles !== void 0 ? styles : {});\n return React.createElement(ControlBarButton, Object.assign({}, props, { onClick: (_a = props.onHangUp) !== null && _a !== void 0 ? _a : props.onClick, styles: componentStyles, onRenderIcon: (_b = props.onRenderIcon) !== null && _b !== void 0 ? _b : onRenderEndCallIcon, strings: strings, labelKey: (_c = props.labelKey) !== null && _c !== void 0 ? _c : 'endCallButtonLabel' }));\n};\n// using media query to prevent windows from overwriting the button color\nconst darkThemeCallButtonStyles = {\n root: {\n color: darkTheme.callingPalette.iconWhite,\n background: darkTheme.callingPalette.callRed,\n '@media (forced-colors: active)': {\n forcedColorAdjust: 'none'\n },\n ':focus::after': {\n outlineColor: `${darkTheme.callingPalette.iconWhite} !important`\n } // added !important to avoid override by FluentUI button styles\n },\n rootHovered: {\n color: darkTheme.callingPalette.iconWhite,\n background: darkTheme.callingPalette.callRed,\n '@media (forced-colors: active)': {\n forcedColorAdjust: 'none'\n }\n },\n rootPressed: {\n color: darkTheme.callingPalette.iconWhite,\n background: darkTheme.callingPalette.callRed,\n '@media (forced-colors: active)': {\n forcedColorAdjust: 'none'\n }\n },\n label: {\n color: darkTheme.callingPalette.iconWhite\n }\n};\nconst lightThemeCallButtonStyles = {\n root: {\n color: lightTheme.callingPalette.iconWhite,\n background: lightTheme.callingPalette.callRed,\n '@media (forced-colors: active)': {\n forcedColorAdjust: 'none'\n },\n ':focus::after': {\n outlineColor: `${lightTheme.callingPalette.iconWhite} !important`\n } // added !important to avoid override by FluentUI button styles\n },\n rootHovered: {\n color: lightTheme.callingPalette.iconWhite,\n background: lightTheme.callingPalette.callRed,\n '@media (forced-colors: active)': {\n forcedColorAdjust: 'none'\n }\n },\n rootPressed: {\n color: lightTheme.callingPalette.iconWhite,\n background: lightTheme.callingPalette.callRed,\n '@media (forced-colors: active)': {\n forcedColorAdjust: 'none'\n }\n },\n label: {\n color: lightTheme.callingPalette.iconWhite\n }\n};\n//# sourceMappingURL=EndCallButton.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport React, { useEffect, useRef, useState } from 'react';\nimport { MessageBar, Stack } from '@fluentui/react';\nimport { useLocale } from '../localization';\nimport { dismissError, dropDismissalsForInactiveErrors, errorsToShow, messageBarIconProps, messageBarType } from './utils';\n/**\n * A component to show error messages on the UI.\n * All strings that can be shown are accepted as the {@link ErrorBarProps.strings} so that they can be localized.\n * Active errors are selected by {@link ErrorBarProps.activeErrorMessages}.\n *\n * This component internally tracks dismissed by the user.\n * * Errors that have an associated timestamp: The error is shown on the UI again if it occurs after being dismissed.\n * * Errors that do not have a timestamp: The error is dismissed until it disappears from the props.\n * If the error recurs, it is shown in the UI.\n *\n * Uses {@link @fluentui/react#MessageBar} UI element.\n *\n * @public\n */\nexport const ErrorBar = (props) => {\n var _a;\n const localeStrings = useLocale().strings.errorBar;\n const strings = (_a = props.strings) !== null && _a !== void 0 ? _a : localeStrings;\n const trackDismissedErrorsInternally = !props.onDismissError;\n // Timestamp for when this comopnent is first mounted.\n // Never updated through the lifecycle of this component.\n const mountTimestamp = useRef(new Date(Date.now()));\n const [dismissedErrors, setDismissedErrors] = useState([]);\n // dropDismissalsForInactiveErrors only returns a new object if `dismissedErrors` actually changes.\n // Without this behaviour, this `useEffect` block would cause a render loop.\n useEffect(() => {\n trackDismissedErrorsInternally && setDismissedErrors(dropDismissalsForInactiveErrors(props.activeErrorMessages, dismissedErrors));\n }, [props.activeErrorMessages, dismissedErrors, trackDismissedErrorsInternally]);\n const toShow = errorsToShow(props.activeErrorMessages, dismissedErrors, props.ignorePremountErrors ? mountTimestamp.current : undefined);\n return React.createElement(Stack, { \"data-ui-id\": \"error-bar-stack\" }, toShow.map(error => React.createElement(MessageBar, Object.assign({}, props, { styles: {\n innerText: {\n alignSelf: 'center'\n },\n icon: {\n height: 0\n },\n content: {\n lineHeight: 'inherit'\n },\n dismissal: {\n height: 0,\n paddingTop: '0.8rem'\n }\n }, key: error.type, messageBarType: messageBarType(error.type), messageBarIconProps: messageBarIconProps(error.type), onDismiss: () => { var _a; return trackDismissedErrorsInternally ? setDismissedErrors(dismissError(dismissedErrors, error)) : (_a = props.onDismissError) === null || _a === void 0 ? void 0 : _a.call(props, error); }, dismissButtonAriaLabel: strings.dismissButtonAriaLabel, dismissIconProps: {\n iconName: 'ErrorBarClear'\n } }), strings[error.type])));\n};\n//# sourceMappingURL=ErrorBar.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { mergeStyles } from '@fluentui/react';\nimport React, { useRef, useEffect, useState, useMemo } from 'react';\nimport { gridLayoutStyle } from './styles/GridLayout.styles';\n/**\n * A component to lay out audio / video participants tiles in a call.\n *\n * @public\n */\nexport const GridLayout = (props) => {\n const { children, styles } = props;\n const numberOfChildren = React.Children.count(children);\n const [currentWidth, setCurrentWidth] = useState(0);\n const [currentHeight, setCurrentHeight] = useState(0);\n const containerRef = useRef(null);\n const observer = useRef(new ResizeObserver((entries) => {\n const { width, height } = entries[0].contentRect;\n setCurrentWidth(width);\n setCurrentHeight(height);\n }));\n useEffect(() => {\n if (containerRef.current) {\n observer.current.observe(containerRef.current);\n }\n const currentObserver = observer.current;\n return () => currentObserver.disconnect();\n }, [observer, containerRef]);\n const gridProps = useMemo(() => {\n return calculateGridProps(numberOfChildren, currentWidth, currentHeight);\n }, [numberOfChildren, currentWidth, currentHeight]);\n const cssGridStyles = useMemo(() => createGridStyles(numberOfChildren, gridProps), [numberOfChildren, gridProps]);\n return React.createElement(\"div\", { ref: containerRef, className: mergeStyles(gridLayoutStyle, cssGridStyles, styles === null || styles === void 0 ? void 0 : styles.root), \"data-ui-id\": \"grid-layout\" }, children);\n};\n/**\n * The cell aspect ratio we aim for in a grid\n */\nconst TARGET_CELL_ASPECT_RATIO = 16 / 9;\n/**\n * The minimum cell aspect ratio we allow\n */\nconst MINIMUM_CELL_ASPECT_RATIO_ALLOWED = 8 / 9;\nconst isCloserThan = (a, b, target) => {\n return Math.abs(target - a) < Math.abs(target - b);\n};\n/**\n * Get the best GridProps to place a number of items in a grid as evenly as possible given the width and height of the grid\n * @param numberOfItems - number of items to place in grid\n * @param width - width of grid\n * @param height - height of grid\n * @returns GridProps\n */\nexport const calculateGridProps = (numberOfItems, width, height) => {\n if (numberOfItems <= 0) {\n return {\n fillDirection: 'horizontal',\n rows: 0,\n columns: 0\n };\n }\n // If width or height are 0 then we return rows and column evenly\n if (width <= 0 || height <= 0) {\n return {\n fillDirection: 'horizontal',\n rows: Math.ceil(Math.sqrt(numberOfItems)),\n columns: Math.ceil(Math.sqrt(numberOfItems))\n };\n }\n const aspectRatio = width / height;\n // Approximate how many rows to divide the grid to achieve cells close to the TARGET_CELL_ASPECT_RATIO\n let rows = Math.floor(Math.sqrt(TARGET_CELL_ASPECT_RATIO / aspectRatio * numberOfItems)) || 1;\n // Make sure rows do not exceed numberOfItems\n rows = Math.min(rows, numberOfItems);\n // Given the rows, get the minimum columns needed to create enough cells for the number of items\n let columns = Math.ceil(numberOfItems / rows);\n // Default fill direction to horizontal\n let fillDirection = 'horizontal';\n while (rows < numberOfItems) {\n // If cell aspect ratio is less than MINIMUM_CELL_ASPECT_RATIO_ALLOWED then try more rows\n if (rows / columns * aspectRatio < MINIMUM_CELL_ASPECT_RATIO_ALLOWED) {\n rows += 1;\n columns = Math.ceil(numberOfItems / rows);\n continue;\n }\n if (numberOfItems < rows * columns) {\n // We need to check that stretching columns vertically will result in only one less cell in stretched columns.\n // Likewise, we need to check that stretching rows horizonally will result in only one less cell in stretched rows.\n // e.g. For 4 rows, 2 columns, but only 6 items, we cannot stretch vertically because that would result in a\n // column of 2 cells which is less by more than 1 compared to the unstretched column.\n // _________\n // |____| |\n // |____|____|\n // |____| |\n // |____|____|\n const canStretchVertically = numberOfItems >= rows + (columns - 1) * (rows - 1);\n const canStretchHorizontally = numberOfItems >= columns + (rows - 1) * (columns - 1);\n if (!canStretchVertically && !canStretchHorizontally) {\n rows += 1;\n columns = Math.ceil(numberOfItems / rows);\n continue;\n }\n else if (!canStretchVertically) {\n break;\n }\n else if (!canStretchHorizontally) {\n fillDirection = 'vertical';\n break;\n }\n // We need to figure out whether the big cells should stretch horizontally or vertically\n // to fill in the empty spaces\n // e.g. For 2 rows, 3 columns, but only 5 items, we need to choose whether to stretch cells\n // horizontally or vertically\n // ______________________ _______________________\n // | | | | | | | |\n // |_______|_______|______| |_______|_______| |\n // | | | | | | |\n // |___________|__________| |_______|_______|_______|\n // Calculate the aspect ratio of big cells stretched horizontally\n const horizontallyStretchedCellRatio = rows / (columns - 1) * aspectRatio;\n // Calculate the aspect ratio of big cells stretched vertically\n const verticallyStretchedCellRatio = (rows - 1) / columns * aspectRatio;\n // We know the horizontally stretched cells aspect ratio is higher than MINIMUM_CELL_ASPECT_RATIO_ALLOWED. If vertically stretched cells\n // is also higher than the MINIMUM_CELL_ASPECT_RATIO_ALLOWED, then choose which aspect ratio is better.\n if (verticallyStretchedCellRatio >= MINIMUM_CELL_ASPECT_RATIO_ALLOWED) {\n // If vertically stetched cell has an aspect ratio closer to TARGET_CELL_ASPECT_RATIO then change the fill direction to vertical\n if (isCloserThan(verticallyStretchedCellRatio, horizontallyStretchedCellRatio, TARGET_CELL_ASPECT_RATIO)) {\n fillDirection = 'vertical';\n }\n }\n }\n break;\n }\n return {\n fillDirection,\n rows,\n columns\n };\n};\n/**\n * Creates a styles classname with CSS Grid related styles given GridProps and the number of items to distribute as evenly as possible.\n * @param numberOfItems - number of items to place in grid\n * @param gridProps - GridProps that define the number of rows, number of columns, and the fill direction\n * @returns - classname\n */\nexport const createGridStyles = (numberOfItems, gridProps) => {\n const isHorizontal = gridProps.fillDirection === 'horizontal';\n // Blocks are either rows or columns depending on whether we fill horizontally or vertically. Each block may differ in the number of cells.\n const blocks = isHorizontal ? gridProps.rows : gridProps.columns;\n const smallCellsPerBlock = Math.ceil(numberOfItems / blocks);\n const bigCellsPerBlock = Math.floor(numberOfItems / blocks);\n const numBigCells = (gridProps.rows * gridProps.columns - numberOfItems) * bigCellsPerBlock;\n // Get grid units\n // e.g. If some blocks have 2 big cells while others have 3 small cells, we need to work with 6 units per block\n const units = smallCellsPerBlock * bigCellsPerBlock;\n const gridStyles = isHorizontal ? {\n gridTemplateColumns: `repeat(${units}, minmax(0, 1fr))`,\n gridTemplateRows: `repeat(${blocks}, minmax(0, 1fr))`,\n gridAutoFlow: 'row'\n } : {\n gridTemplateColumns: `repeat(${blocks}, minmax(0, 1fr))`,\n gridTemplateRows: `repeat(${units}, minmax(0, 1fr))`,\n gridAutoFlow: 'column'\n };\n const smallCellStyle = isHorizontal ? {\n '> *': {\n gridColumn: `auto / span ${units / smallCellsPerBlock}`\n }\n } : {\n '> *': {\n gridRow: `auto / span ${units / smallCellsPerBlock}`\n }\n };\n // If there are big cells, we are choosing to place the latest children into the big cells.\n // That is why we use the '> *:nth-last-child(-n + ${numBigCells})' CSS selector below\n const bigCellStyle = numBigCells ? {\n [`> *:nth-last-child(-n + ${numBigCells})`]: isHorizontal ? {\n gridColumn: `auto / span ${units / bigCellsPerBlock}`\n } : {\n gridRow: `auto / span ${units / bigCellsPerBlock}`\n }\n } : {};\n return mergeStyles(gridStyles, smallCellStyle, bigCellStyle);\n};\n//# sourceMappingURL=GridLayout.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { Icon, mergeStyles } from '@fluentui/react';\nimport React from 'react';\nimport { useTheme } from '../theming';\n/**\n * This is a helper component to define and unify icon colors\n *\n * @internal\n */\nexport const _HighContrastAwareIcon = (props) => {\n const { iconName, disabled } = props;\n const theme = useTheme();\n // setting colors for the icons using color from theme, so in dark mode or other accessibility modes, they have pre-defined contrast colors\n // the media query is for when in specific window accessibility mode, change the svg colors\n return React.createElement(Icon, { iconName: iconName, className: mergeStyles({\n svg: {\n fill: disabled ? theme.palette.neutralTertiary : theme.palette.neutralPrimaryAlt,\n '@media (forced-colors: active) and (prefers-color-scheme: dark)': {\n fill: disabled ? theme.palette.neutralPrimaryAlt : theme.palette.neutralTertiary\n }\n }\n }) });\n};\n//# sourceMappingURL=HighContrastAwareIcon.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { DefaultButton, Icon, Stack, mergeStyles } from '@fluentui/react';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { useTheme } from '../theming';\nimport { rootStyle, childrenContainerStyle, leftRightButtonStyles } from './styles/HorizontalGallery.styles';\nimport { useIdentifiers } from '../identifiers';\nimport { bucketize } from './utils/overFlowGalleriesUtils';\n/**\n * {@link HorizontalGallery} default children per page\n */\nconst DEFAULT_CHILDREN_PER_PAGE = 5;\n/**\n * Renders a horizontal gallery that parents children horizontally. Handles pagination based on the childrenPerPage prop.\n * @param props - HorizontalGalleryProps {@link @azure/communication-react#HorizontalGalleryProps}\n * @returns\n */\nexport const HorizontalGallery = (props) => {\n var _a;\n const { children, childrenPerPage = DEFAULT_CHILDREN_PER_PAGE, styles, onFetchTilesToRender } = props;\n const ids = useIdentifiers();\n const [page, setPage] = useState(0);\n const numberOfChildren = React.Children.count(children);\n const lastPage = Math.ceil(numberOfChildren / childrenPerPage) - 1;\n const indexesArray = useMemo(() => {\n return bucketize([...Array(numberOfChildren).keys()], childrenPerPage);\n }, [numberOfChildren, childrenPerPage]);\n useEffect(() => {\n if (onFetchTilesToRender && indexesArray) {\n onFetchTilesToRender(indexesArray[page]);\n }\n }, [indexesArray, onFetchTilesToRender, page]);\n const firstIndexOfCurrentPage = page * childrenPerPage;\n const clippedPage = firstIndexOfCurrentPage < numberOfChildren - 1 ? page : lastPage;\n const childrenOnCurrentPage = useMemo(() => {\n if (indexesArray[0] !== undefined) {\n return indexesArray[clippedPage].map(index => {\n return React.Children.toArray(children)[index];\n });\n }\n return [];\n }, [indexesArray, clippedPage, children]);\n const showButtons = numberOfChildren > childrenPerPage;\n const disablePreviousButton = page === 0;\n const disableNextButton = page === lastPage;\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 children per page is 0 or less return empty element\n if (childrenPerPage <= 0) {\n return React.createElement(React.Fragment, null);\n }\n return React.createElement(Stack, { horizontal: true, className: mergeStyles(rootStyle, (_a = props.styles) === null || _a === void 0 ? void 0 : _a.root) },\n showButtons && React.createElement(HorizontalGalleryNavigationButton, { key: \"previous-nav-button\", icon: React.createElement(Icon, { iconName: \"HorizontalGalleryLeftButton\" }), styles: styles === null || styles === void 0 ? void 0 : styles.previousButton, onClick: () => setPage(Math.max(0, Math.min(lastPage, page - 1))), disabled: disablePreviousButton, identifier: ids.overflowGalleryLeftNavButton }),\n React.createElement(Stack, { horizontal: true, className: mergeStyles(childrenContainerStyle) }, childrenOnCurrentPage.map((child, i) => {\n return React.createElement(Stack.Item, { styles: childrenStyles, key: i, \"data-ui-id\": ids.horizontalGalleryVideoTile }, child);\n })),\n showButtons && React.createElement(HorizontalGalleryNavigationButton, { key: \"next-nav-button\", icon: React.createElement(Icon, { iconName: \"HorizontalGalleryRightButton\" }), styles: styles === null || styles === void 0 ? void 0 : styles.nextButton, onClick: () => setPage(Math.min(lastPage, page + 1)), disabled: disableNextButton, identifier: ids.overflowGalleryRightNavButton }));\n};\nconst HorizontalGalleryNavigationButton = (props) => {\n const theme = useTheme();\n return React.createElement(DefaultButton, { className: mergeStyles(leftRightButtonStyles(theme), props.styles), onClick: props.onClick, disabled: props.disabled, \"data-ui-id\": props.identifier }, props.icon);\n};\n//# sourceMappingURL=HorizontalGallery.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport React, { useState, useCallback } from 'react';\nimport { Stack, TextField, mergeStyles, concatStyleSets, IconButton, TooltipHost } from '@fluentui/react';\nimport { isEnterKeyEventFromCompositionSession } from './utils';\nimport { inputBoxStyle, inputBoxWrapperStyle, inputButtonStyle, textFieldStyle, textContainerStyle, inputButtonTooltipStyle, iconWrapperStyle } from './styles/InputBoxComponent.style';\nimport { isDarkThemed } from '../theming/themeUtils';\nimport { useTheme } from '../theming';\n/**\n * @private\n */\nexport const InputBoxComponent = (props) => {\n const { styles, id, 'data-ui-id': dataUiId, textValue, onChange, textFieldRef, placeholderText, onKeyDown, onEnterKeyDown, supportNewline, inputClassName, errorMessage, disabled, children } = props;\n const mergedRootStyle = mergeStyles(inputBoxWrapperStyle, styles === null || styles === void 0 ? void 0 : styles.root);\n const mergedInputFieldStyle = mergeStyles(inputBoxStyle, inputClassName);\n const mergedTextContainerStyle = mergeStyles(textContainerStyle, styles === null || styles === void 0 ? void 0 : styles.textFieldContainer);\n const mergedTextFieldStyle = concatStyleSets(textFieldStyle, {\n fieldGroup: styles === null || styles === void 0 ? void 0 : styles.textField,\n errorMessage: styles === null || styles === void 0 ? void 0 : styles.systemMessage,\n suffix: {\n backgroundColor: 'transparent',\n padding: '0 0'\n }\n });\n const onTextFieldKeyDown = useCallback((ev) => {\n if (isEnterKeyEventFromCompositionSession(ev)) {\n return;\n }\n if (ev.key === 'Enter' && (ev.shiftKey === false || !supportNewline)) {\n ev.preventDefault();\n onEnterKeyDown && onEnterKeyDown();\n }\n onKeyDown && onKeyDown(ev);\n }, [onEnterKeyDown, onKeyDown, supportNewline]);\n const onRenderChildren = () => {\n return React.createElement(React.Fragment, null, children);\n };\n const renderTextField = () => {\n const textFieldProps = {\n autoFocus: props.autoFocus === 'sendBoxTextField',\n multiline: true,\n autoAdjustHeight: true,\n multiple: false,\n resizable: false,\n componentRef: textFieldRef,\n id,\n inputClassName: mergedInputFieldStyle,\n placeholder: placeholderText,\n autoComplete: 'off',\n styles: mergedTextFieldStyle,\n disabled,\n errorMessage,\n onRenderSuffix: props.children ? onRenderChildren : undefined\n };\n return React.createElement(\"div\", { style: textFieldProps.errorMessage ? {\n padding: '0 0 5px 5px'\n } : undefined },\n React.createElement(TextField, Object.assign({}, textFieldProps, { \"data-ui-id\": dataUiId, value: textValue, onChange: onChange, onKeyDown: onTextFieldKeyDown, onFocus: e => {\n // Fix for setting the cursor to the correct position when multiline is true\n // This approach should be reviewed during migration to FluentUI v9\n e.currentTarget.value = '';\n e.currentTarget.value = textValue;\n } })));\n };\n return React.createElement(Stack, { className: mergedRootStyle },\n React.createElement(\"div\", { className: mergedTextContainerStyle }, renderTextField()));\n};\n/**\n * @private\n */\nexport const InputBoxButton = (props) => {\n const { onRenderIcon, onClick, ariaLabel, className, id, tooltipContent } = props;\n const [isHover, setIsHover] = useState(false);\n const mergedButtonStyle = mergeStyles(inputButtonStyle, className);\n const theme = useTheme();\n const calloutStyle = {\n root: {\n padding: 0\n },\n calloutMain: {\n padding: '0.5rem'\n }\n };\n // Place callout with no gap between it and the button.\n const calloutProps = {\n gapSpace: 0,\n styles: calloutStyle,\n backgroundColor: isDarkThemed(theme) ? theme.palette.neutralLighter : ''\n };\n return React.createElement(TooltipHost, { hostClassName: inputButtonTooltipStyle, content: tooltipContent, calloutProps: Object.assign({}, calloutProps) },\n React.createElement(IconButton, { className: mergedButtonStyle, ariaLabel: ariaLabel, onClick: onClick, id: id, onMouseEnter: () => {\n setIsHover(true);\n }, onMouseLeave: () => {\n setIsHover(false);\n }, \n // VoiceOver fix: Avoid icon from stealing focus when IconButton is double-tapped to send message by wrapping with Stack with pointerEvents style to none\n onRenderIcon: () => React.createElement(Stack, { className: iconWrapperStyle }, onRenderIcon(isHover)) }));\n};\n//# sourceMappingURL=InputBoxComponent.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { IconButton, useTheme } from '@fluentui/react';\nimport React from 'react';\nimport { localVideoCameraCycleButtonStyles } from './styles/VideoGallery.styles';\n/**\n * local video tile camera cycle button - for use on mobile screens only.\n * @internal\n */\nexport const LocalVideoCameraCycleButton = (props) => {\n const { cameras, selectedCamera, onSelectCamera, label, ariaDescription } = props;\n const theme = useTheme();\n return React.createElement(IconButton, { \"data-ui-id\": 'local-camera-switcher-button', styles: localVideoCameraCycleButtonStyles(theme), iconProps: {\n iconName: 'LocalCameraSwitch'\n }, ariaLabel: label, ariaDescription: ariaDescription, \"aria-live\": 'polite', onClick: () => {\n if (cameras && cameras.length > 1 && selectedCamera !== undefined) {\n const index = cameras.findIndex(camera => selectedCamera.id === camera.id);\n const newCamera = cameras[(index + 1) % cameras.length];\n if (onSelectCamera !== undefined) {\n onSelectCamera(newCamera);\n }\n }\n } });\n};\n//# sourceMappingURL=LocalVideoCameraButton.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { Stack } from '@fluentui/react';\nimport { _formatString } from \"../../../acs-ui-common/src\";\nimport React, { useMemo } from 'react';\nimport { LocalVideoCameraCycleButton } from './LocalVideoCameraButton';\nimport { StreamMedia } from './StreamMedia';\nimport { useLocalVideoStreamLifecycleMaintainer } from './VideoGallery/useVideoStreamLifecycleMaintainer';\nimport { VideoTile } from './VideoTile';\n/**\n * A memoized version of VideoTile for rendering local participant.\n *\n * @internal\n */\nexport const _LocalVideoTile = React.memo((props) => {\n const { isAvailable, isMuted, onCreateLocalStreamView, onDisposeLocalStreamView, localVideoViewOptions, renderElement, userId, showLabel, displayName, initialsName, onRenderAvatar, showMuteIndicator, styles, showCameraSwitcherInLocalPreview, localVideoCameraCycleButtonProps, localVideoCameraSwitcherLabel, localVideoSelectedDescription, \n /* @conditional-compile-remove(raise-hand) */\n raisedHand } = props;\n const localVideoStreamProps = useMemo(() => ({\n isMirrored: localVideoViewOptions === null || localVideoViewOptions === void 0 ? void 0 : localVideoViewOptions.isMirrored,\n isStreamAvailable: isAvailable,\n onCreateLocalStreamView,\n onDisposeLocalStreamView,\n renderElementExists: !!renderElement,\n scalingMode: localVideoViewOptions === null || localVideoViewOptions === void 0 ? void 0 : localVideoViewOptions.scalingMode\n }), [isAvailable, localVideoViewOptions === null || localVideoViewOptions === void 0 ? void 0 : localVideoViewOptions.isMirrored, localVideoViewOptions === null || localVideoViewOptions === void 0 ? void 0 : localVideoViewOptions.scalingMode, onCreateLocalStreamView, onDisposeLocalStreamView, renderElement]);\n // Handle creating, destroying and updating the video stream as necessary\n useLocalVideoStreamLifecycleMaintainer(localVideoStreamProps);\n const renderVideoStreamElement = useMemo(() => {\n // Checking if renderElement is well defined or not as calling SDK has a number of video streams limitation which\n // implies that, after their threshold, all streams have no child (blank video)\n if (!renderElement || !renderElement.childElementCount) {\n // Returning `undefined` results in the placeholder with avatar being shown\n return undefined;\n }\n return React.createElement(React.Fragment, null,\n React.createElement(FloatingLocalCameraCycleButton, { showCameraSwitcherInLocalPreview: showCameraSwitcherInLocalPreview !== null && showCameraSwitcherInLocalPreview !== void 0 ? showCameraSwitcherInLocalPreview : false, localVideoCameraCycleButtonProps: localVideoCameraCycleButtonProps, localVideoCameraSwitcherLabel: localVideoCameraSwitcherLabel, localVideoSelectedDescription: localVideoSelectedDescription }),\n React.createElement(StreamMedia, { videoStreamElement: renderElement, isMirrored: true }));\n }, [localVideoCameraCycleButtonProps, localVideoCameraSwitcherLabel, localVideoSelectedDescription, renderElement, showCameraSwitcherInLocalPreview]);\n return React.createElement(VideoTile, { key: userId !== null && userId !== void 0 ? userId : 'local-video-tile', userId: userId, renderElement: renderVideoStreamElement, showLabel: showLabel, displayName: displayName, initialsName: initialsName, styles: styles, onRenderPlaceholder: onRenderAvatar, isMuted: isMuted, showMuteIndicator: showMuteIndicator, personaMinSize: props.personaMinSize, \n /* @conditional-compile-remove(raise-hand) */ raisedHand: raisedHand });\n});\nconst FloatingLocalCameraCycleButton = (props) => {\n const { showCameraSwitcherInLocalPreview, localVideoCameraCycleButtonProps, localVideoCameraSwitcherLabel, localVideoSelectedDescription } = props;\n const ariaDescription = (localVideoCameraCycleButtonProps === null || localVideoCameraCycleButtonProps === void 0 ? void 0 : localVideoCameraCycleButtonProps.selectedCamera) && localVideoSelectedDescription && _formatString(localVideoSelectedDescription, {\n cameraName: localVideoCameraCycleButtonProps.selectedCamera.name\n });\n return React.createElement(Stack, { horizontalAlign: \"end\" }, showCameraSwitcherInLocalPreview && (localVideoCameraCycleButtonProps === null || localVideoCameraCycleButtonProps === void 0 ? void 0 : localVideoCameraCycleButtonProps.cameras) !== undefined && (localVideoCameraCycleButtonProps === null || localVideoCameraCycleButtonProps === void 0 ? void 0 : localVideoCameraCycleButtonProps.selectedCamera) !== undefined && (localVideoCameraCycleButtonProps === null || localVideoCameraCycleButtonProps === void 0 ? void 0 : localVideoCameraCycleButtonProps.onSelectCamera) !== undefined && React.createElement(LocalVideoCameraCycleButton, { cameras: localVideoCameraCycleButtonProps.cameras, selectedCamera: localVideoCameraCycleButtonProps.selectedCamera, onSelectCamera: localVideoCameraCycleButtonProps.onSelectCamera, label: localVideoCameraSwitcherLabel, ariaDescription: ariaDescription }));\n};\n//# sourceMappingURL=LocalVideoTile.js.map"],"names":["Announcer","props","announcementString","ariaLive","styles","announcerStyles","root","position","width","height","padding","margin","overflow","clip","whiteSpace","border","logContextWarning","console","warn","announceAssertive","announcePolite","offScreenStyle","style","role","message","EMPTY_MESSAGE","id","_a","_b","newAssertive","assertive","oldAssertive","activeAssertive1","setActiveAssertive1","activeAssertive2","setActiveAssertive2","alternateAssertive","useEffect","current","newPolite","polite","oldPolite","activePolite1","setActivePolite1","activePolite2","setActivePolite2","alternatePolite","politeMessage","setPoliteMessage","assertiveMessage","setAssertiveMessage","useCallback","updateFunctions","useMemo","AnnouncerContext","value","children","clearOnUnmount","announce","contextProps","Object","assign","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","e","rejected","result","done","then","apply","defaultLocalVideoViewOptions","scalingMode","isMirrored","CameraButton","_c","_d","_e","_f","_g","localVideoViewOptions","onToggleCamera","waitForCamera","setWaitForCamera","useState","localeStrings","strings","cameraButton","announcerString","setAnnouncerString","undefined","disabled","tooltipVideoLoadingContent","tooltipDisabledContent","cameraOn","checked","splitButtonAriaString","onSplitButtonAriaLabel","offSplitButtonAriaLabel","toggleAnnouncerString","isCameraOn","cameraActionTurnedOnAnnouncement","cameraActionTurnedOffAnnouncement","onToggleClick","splitButtonMenuItems","onClickVideoEffects","push","key","text","videoEffectsMenuItemTitle","iconProps","iconName","lineHeight","onClick","onSplitButtonPrimaryActionCamera","offSplitButtonPrimaryActionCamera","splitButtonPrimaryAction","title","itemType","sectionProps","topDivider","items","splitButtonMenuProps","className","onRenderOnIcon","onRenderOffIcon","labelKey","menuProps","enableDeviceSelectionMenu","menuStyles","menuIconProps","hidden","split","cameraButtonSplitRoleDescription","splitButtonAriaLabel","_Caption","displayName","userId","captionText","onRenderAvatar","personaOptions","hidePersonaDetails","size","showOverflowTooltip","imageShouldStartVisible","initialsTextColor","userIcon","Persona","Stack","horizontal","verticalAlign","horizontalAlign","Text","dir","_CaptionsBanner","captions","isCaptionsOn","startCaptionsInProgress","formFactor","captionsScrollDivRef","useRef","isAtBottomOfScroll","setIsAtBottomOfScroll","handleScrollToTheBottom","atBottom","Math","ceil","scrollTop","scrollHeight","clientHeight","captionsScrollDiv","addEventListener","removeEventListener","FocusZone","as","ref","map","caption","Spinner","label","captionsBannerSpinnerText","labelPosition","_CaptionsSettingsModal","supportedSpokenLanguages","supportedCaptionLanguages","currentSpokenLanguage","currentCaptionLanguage","isCaptionsFeatureActive","showModal","onSetSpokenLanguage","onSetCaptionLanguage","onDismissCaptionsSettings","onStartCaptions","spokenLanguageStrings","captionLanguageStrings","changeCaptionLanguage","theme","hasSetSpokenLanguage","setHasSetSpokenLanguage","selectedSpokenLanguage","setSelectedSpokenLanguage","selectedCaptionLanguage","setSelectedCaptionLanguage","toString","onDismiss","onConfirm","spokenLanguageCode","captionLanguageCode","spokenLanguage","spokenLanguageDropdownOptions","languageCode","captionLanguageDropdownOptions","sortedSpokenLanguageDropdownOptions","sort","a","b","sortedCaptionLanguageDropdownOptions","onSpokenLanguageChange","event","option","onCaptionLanguageChange","calloutProps","preventDismissOnEvent","CaptionsSettingsComponent","placeholderSpokenLanguage","placeholderCaptionLanguage","captionsSettingsSpokenLanguageDropdownLabel","selectedKey","onChange","placeholder","options","captionsSettingsSpokenLanguageDropdownInfoText","captionsSettingsCaptionLanguageDropdownLabel","captionsSettingsCaptionLanguageDropdownInfoText","CaptionsSettingsModalStyle","titleAriaId","captionsSettingsModalAriaLabel","isOpen","isBlocking","captionsSettingsModalTitle","ariaLabel","captionsSettingsCloseModalButtonAriaLabel","color","palette","black","captionsSettingsConfirmButtonLabel","captionsSettingsCancelButtonLabel","_FileCard","fileName","fileExtension","progress","actionIcon","useTheme","uploadStartedString","uploading","uploadCompletedString","uploadCompleted","showProgressIndicator","containerClassName","background","neutralLighter","borderRadius","effects","roundedCorner4","neutralQuaternary","cursor","fileInfoWrapperClassName","paddingBottom","fileNameContainerClassName","paddingLeft","minWidth","maxWidth","fileNameTextClassName","textOverflow","paddingRight","actionIconClassName","progressIndicatorStyles","itemProgress","progressBarThicknessPx","progressBar","actionHandler","call","Icon","getFileTypeIconProps","extension","imageFileType","ProgressIndicator","percentComplete","fileCardGroupClassName","flexFlow","marginLeft","_FileCardGroup","actionIconStyle","_FileUploadCards","files","activeFileUploads","removeFileButtonString","removeFile","length","filter","file","error","filename","IconButton","onCancelFileUpload","MAXIMUM_LENGTH_OF_MESSAGE","ChatMessageComponentAsEditBox","onCancel","onSubmit","textValue","setTextValue","content","attachedFilesMetadata","setAttachedFilesMetadata","getMessageAttachedFilesMetadata","editTextFieldRef","messageState","getMessageState","submitEnabled","editContainerStyles","chatMyMessageStyles","focus","setText","newValue","textTooLongMessage","editBoxTextLimit","limitNumber","onRenderThemedCancelIcon","isHover","onRenderCancelIcon","accent","neutralSecondary","onRenderThemedSubmitIcon","onRenderSubmitIcon","editBoxStyles","textField","borderColor","themePrimary","onRenderFileUploads","name","fileId","bodyClassName","body","failureReason","bodyError","bodyDefault","ChatMyMessage","InputBoxComponent","textFieldRef","inputClassName","placeholderText","editBoxPlaceholderText","onKeyDown","ev","stopPropagation","onEnterKeyDown","metadata","supportNewline","maxLength","errorMessage","tokens","childrenGap","grow","align","editBoxCancelButton","tooltipContent","onRenderIcon","messageId","editBoxSubmitButton","messageText","trim","isMessageEmpty","isMessageTooLong","ChatMessageActionFlyout","messageReadByCount","messageReadBy","sortedMessageReadyByList","localeCompare","messageReadByList","person","itemProps","increaseFlyoutItemSize","menuItems","editMessage","onEditClick","removeMessage","onRemoveClick","remoteParticipantsCount","showMessageStatus","messageReadCount","messageStatus","linkContent","neutralPrimary","neutralTertiary","borderTop","preventUnwantedDismissProps","subMenuProps","span","themeDarkAlt","submenuIconProps","resendMessage","onResendClick","ContextualMenu","alignTargetEdge","gapSpace","isBeakVisible","target","directionalHint","DirectionalHint","calloutMenuProps","type","marginRight","ChatMessageContent","contentType","MessageContentAsText","MessageContentAsRichTextHTML","MessageContentWithLiveAria","status","LiveMessage","liveMessage","generateLiveMessage","messageContentAriaText","processHtmlToReact","componentDecorator","decoratedHref","decoratedText","Link","href","liveAuthor","liveAuthorIntro","author","senderDisplayName","editedOn","editedTag","mine","s","document","createElement","innerHTML","textContent","innerText","extractContent","messageContentMineAriaText","ALLOWED_TAGS","processNodeDefinitions","ProcessNodeDefinitions","htmlToReactParser","Parser","steps","shouldProcessNode","IsValidNodeDefinitions","processNode","processDefaultNode","parseWithInstructions","fileDownloadCardsStyle","marginTop","_FileDownloadCards","fileMetadata","showSpinner","setShowSpinner","useLocaleStringsTrampoline","downloadFileButtonString","downloadFile","isFileSharingAttachment","attachment","fileCardGroupDescription","fileGroupLocaleString","fileCardGroupMessage","fileCount","fileDownloadHandler","downloadHandler","response","URL","window","open","onDownloadErrorMessage","url","TooltipHost","DownloadIconTrampoline","ChatMessageComponentAsMessageBubble","ids","disableEditing","showDate","messageContainerStyle","shouldOverlapAvatarAndMessage","defaultTimeStamp","createdOn","Date","generateDefaultTimestamp","formattedTimestamp","wasInteractionByTouch","setWasInteractionByTouch","focused","setFocused","messageRef","messageActionButtonRef","chatMessageActionFlyoutTarget","setChatMessageActionFlyoutTarget","chatActionsEnabled","setMessageReadBy","actionMenuProps","enabled","menuExpanded","showActionMenu","tabIndex","menuButtonRef","onActionButtonClick","minHeight","chatMessageActionMenuProps","actionMenuMoreOptions","messageType","onActionFlyoutDismiss","defaultOnRenderFileDownloads","getMessageDetails","failToSendTag","getContent","onRenderFileDownloads","chatMessageCommonStyles","chatMessageStyles","chatItemMessageContainerClassName","failed","avatarOverlap","avatarNoOverlap","attached","bodyWithAvatar","bodyWithoutAvatar","bodyAttached","onBlur","shouldPreserveFocusState","currentTarget","contains","relatedTarget","onFocus","timestamp","messageTimestamp","details","actions","menu","menuVisible","menuHidden","menuAttached","onTouchStart","onPointerDown","ChatMessageComponent","isEditing","setIsEditing","onDeleteMessage","onSendMessage","clientMessageId","onUpdateMessage","onCancelEditMessage","BannerMessage","variant","complianceBannerTranscriptionStopped","complianceBannerNowOnlyRecording","PrivacyPolicy","linkText","privacyPolicy","complianceBannerRecordingStopped","complianceBannerNowOnlyTranscription","complianceBannerRecordingAndTranscriptionSaved","complianceBannerRecordingAndTranscriptionStopped","LearnMore","learnMore","complianceBannerRecordingAndTranscriptionStarted","complianceBannerTranscriptionConsent","complianceBannerTranscriptionStarted","complianceBannerRecordingSaving","complianceBannerRecordingStarted","complianceBannerTranscriptionSaving","underline","DelayedUpdateBanner","lastUpdated","variantLastUpdated","visible","setVisible","now","pendingUpdateHandle","clearTimeout","timeToNextUpdate","setTimeout","MessageBar","messageBarType","dismissButtonAriaLabel","close","_ComplianceBanner","cachedProps","latestBooleanState","callTranscribeState","callRecordState","latestStringState","shouldUpdateCached","determineStates","previous","mainDivStyle","ControlBar","layout","controlBarClassName","controlBarStyle","backgroundStyle","startsWith","neutralQuaternaryAlt","white","borderAndBoxShadowStyle","boxShadow","elevation16","roundedCorner6","transformOverrideStyle","rtl","transform","hostStyles","display","ControlButtonTooltip","calloutMain","backgroundColor","DefaultRenderIcon","ControlBarButton","_h","_j","_k","_l","_m","_o","_p","_q","_r","_s","componentStyles","labelText","onLabel","offLabel","tooltipOnContent","tooltipOffContent","tooltipId","disableTooltip","DefaultButton","onRenderText","showLabel","allowDisabledFocus","menuTriggerKeyCode","KeyCodes","generateDefaultDeviceMenuProps","primaryActionItem","isSelectCamAllowed","isSelectMicAllowed","microphones","speakers","cameras","selectedMicrophone","selectedSpeaker","selectedCamera","onSelectCamera","onSelectMicrophone","onSelectSpeaker","defaultMenuProps","menuItemStyles","cameraMenuTitle","cameraMenuTooltip","camera","canCheck","isChecked","speakersAvailable","microphoneMenuTooltip","audioDeviceMenuTooltip","microphoneMenuTitle","microphone","speakerMenuTitle","speaker","DevicesButton","devicesButton","devicesButtonMenu","DrawerMenuItem","onItemClick","itemKey","secondaryIcon","secondaryIconProps","MenuItemIcon","shouldFocusOnMount","drawerMenuItemRootStyles","neutralLight","fonts","small","disabledDrawerMenuItemRootStyles","onKeyPress","menuItemChildrenGap","neutralTertiaryAlt","drawerMenuItemTextStyles","secondaryText","secondaryTextStyles","secondaryComponent","FontIcon","iconStyles","hoverBackground","fontSize","pointerEvents","alignItems","DrawerContentContainer","rootStyles","containerStyles","heading","headingContainerStyles","headingStyles","borderTopRightRadius","borderTopLeftRadius","textAlign","smallPlus","DrawerLightDismiss","lightDismissContainerStyles","_DrawerSurface","disableMaxHeight","drawerSurfaceStyles","focusTrapZoneStyles","drawerContentContainerStyles","drawerContentContainer","lightDismissRoot","onLightDismiss","FocusTrapZone","isClickableOutsideFocusTrap","maxHeight","_DrawerMenu","selectedKeyPath","setSelectedKeyPath","menuItemsToRender","subMenuKey","find","item","firstItemStyle","modifiedFirstItemStyle","merge","slice","i","onRenderEndCallIcon","EndCallButton","endCallButton","isDarkTheme","darkThemeCallButtonStyles","lightThemeCallButtonStyles","onHangUp","forcedColorAdjust","outlineColor","rootHovered","rootPressed","ErrorBar","errorBar","trackDismissedErrorsInternally","onDismissError","mountTimestamp","dismissedErrors","setDismissedErrors","activeErrorMessages","toShow","ignorePremountErrors","alignSelf","icon","dismissal","paddingTop","messageBarIconProps","dismissIconProps","GridLayout","numberOfChildren","currentWidth","setCurrentWidth","currentHeight","setCurrentHeight","containerRef","observer","ResizeObserver","entries","contentRect","observe","currentObserver","disconnect","gridProps","calculateGridProps","cssGridStyles","createGridStyles","TARGET_CELL_ASPECT_RATIO","MINIMUM_CELL_ASPECT_RATIO_ALLOWED","numberOfItems","fillDirection","rows","columns","sqrt","aspectRatio","floor","min","canStretchVertically","canStretchHorizontally","verticallyStretchedCellRatio","abs","isHorizontal","blocks","smallCellsPerBlock","bigCellsPerBlock","numBigCells","units","gridStyles","gridTemplateColumns","gridTemplateRows","gridAutoFlow","smallCellStyle","gridColumn","gridRow","bigCellStyle","_HighContrastAwareIcon","svg","fill","neutralPrimaryAlt","DEFAULT_CHILDREN_PER_PAGE","HorizontalGallery","childrenPerPage","onFetchTilesToRender","page","setPage","lastPage","indexesArray","Array","keys","clippedPage","childrenOnCurrentPage","index","showButtons","disablePreviousButton","disableNextButton","childrenStyles","HorizontalGalleryNavigationButton","previousButton","max","identifier","overflowGalleryLeftNavButton","child","horizontalGalleryVideoTile","nextButton","overflowGalleryRightNavButton","dataUiId","mergedRootStyle","mergedInputFieldStyle","mergedTextContainerStyle","textFieldContainer","mergedTextFieldStyle","fieldGroup","systemMessage","suffix","onTextFieldKeyDown","shiftKey","preventDefault","onRenderChildren","textFieldProps","autoFocus","multiline","autoAdjustHeight","multiple","resizable","componentRef","autoComplete","onRenderSuffix","renderTextField","InputBoxButton","setIsHover","mergedButtonStyle","hostClassName","onMouseEnter","onMouseLeave","LocalVideoCameraCycleButton","ariaDescription","findIndex","newCamera","_LocalVideoTile","isAvailable","isMuted","onCreateLocalStreamView","onDisposeLocalStreamView","renderElement","initialsName","showMuteIndicator","showCameraSwitcherInLocalPreview","localVideoCameraCycleButtonProps","localVideoCameraSwitcherLabel","localVideoSelectedDescription","raisedHand","localVideoStreamProps","isStreamAvailable","renderElementExists","renderVideoStreamElement","childElementCount","FloatingLocalCameraCycleButton","videoStreamElement","onRenderPlaceholder","personaMinSize","cameraName"],"sourceRoot":""}