{"version":3,"file":"static/js/7182_7ff1c6823d4d03003222.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/MessageStatusIndicator.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/MessageThread.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/MicrophoneButton.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/ModalClone/ModalClone.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/ParticipantItem.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/ParticipantList.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/ParticipantsButton.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/PictureInPictureInPicture/PictureInPictureInPictureTile.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/PictureInPictureInPicture/PictureInPictureInPicture.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/RaiseHandButton.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/RemoteVideoTile.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/ResponsiveHorizontalGallery.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/ResponsiveVerticalGallery.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/ScreenShareButton.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/SendBoxErrorBar.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/SendBoxErrors.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/SendBox.js"],"sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { Icon, mergeStyles, TooltipHost } from '@fluentui/react';\nimport { _formatString } from \"../../../acs-ui-common/src\";\nimport React, { useState } from 'react';\nimport { useLocale } from '../localization';\nimport { useTheme } from '../theming';\nimport { isDarkThemed } from '../theming/themeUtils';\nimport { MessageStatusIndicatorErrorIconStyle, MessageStatusIndicatorIconStyle } from './styles/MessageStatusIndicator.styles';\nimport LiveMessage from './Announcer/LiveMessage';\n/**\n * Component to display the status of a sent message.\n *\n * Adds an icon and tooltip corresponding to the message status.\n *\n * @public\n */\nexport const MessageStatusIndicator = (props) => {\n const { status, styles, remoteParticipantsCount, onToggleToolTip, readCount } = props;\n const localeStrings = useLocale().strings.messageStatusIndicator;\n const [isTooltipToggled, setIsTooltipToggled] = useState(false);\n const strings = Object.assign(Object.assign({}, localeStrings), props.strings);\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 switch (status) {\n case 'failed':\n return React.createElement(TooltipHost, { content: strings.failedToSendTooltipText, \"data-ui-id\": \"chat-composite-message-tooltip\", calloutProps: Object.assign({}, calloutProps), styles: hostStyles },\n strings.failedToSendAriaLabel &&\n // live message is used here and in the following tooltips so that aria labels are announced on mobile\n React.createElement(LiveMessage, { message: strings.failedToSendAriaLabel, ariaLive: \"polite\" }),\n React.createElement(Icon, { role: \"status\", \"data-ui-id\": \"chat-composite-message-status-icon\", \"aria-label\": strings.failedToSendAriaLabel, iconName: \"MessageFailed\", className: mergeStyles(MessageStatusIndicatorErrorIconStyle, {\n color: theme.palette.redDark\n }, styles === null || styles === void 0 ? void 0 : styles.root) }));\n case 'sending':\n return React.createElement(TooltipHost, { content: strings.sendingTooltipText, \"data-ui-id\": \"chat-composite-message-tooltip\", calloutProps: Object.assign({}, calloutProps), styles: hostStyles },\n strings.sendingAriaLabel && React.createElement(LiveMessage, { message: strings.sendingAriaLabel, ariaLive: \"polite\" }),\n React.createElement(Icon, { role: \"status\", \"data-ui-id\": \"chat-composite-message-status-icon\", \"aria-label\": strings.sendingAriaLabel, iconName: \"MessageSending\", className: mergeStyles(MessageStatusIndicatorIconStyle, {\n color: theme.palette.themePrimary\n }, styles === null || styles === void 0 ? void 0 : styles.root) }));\n case 'seen':\n return React.createElement(TooltipHost, { calloutProps: Object.assign({}, calloutProps), \"data-ui-id\": \"chat-composite-message-tooltip\", styles: hostStyles, content: \n // when it's just 1 to 1 texting, we don't need to know who has read the message, just show message as 'seen'\n // when readcount is 0, we have a bug, show 'seen' to cover up as a fall back\n // when participant count is 0, we have a bug, show 'seen' to cover up as a fall back\n readCount === 0 || remoteParticipantsCount && remoteParticipantsCount <= 1 || !readCount || !remoteParticipantsCount || strings.readByTooltipText === undefined ? strings.seenTooltipText : _formatString(strings.readByTooltipText, {\n messageThreadReadCount: `${readCount}`,\n remoteParticipantsCount: `${remoteParticipantsCount}`\n }), onTooltipToggle: () => {\n if (onToggleToolTip) {\n onToggleToolTip(!isTooltipToggled);\n setIsTooltipToggled(!isTooltipToggled);\n }\n } },\n strings.seenAriaLabel && React.createElement(LiveMessage, { message: strings.seenAriaLabel, ariaLive: \"polite\" }),\n React.createElement(Icon, { \"data-ui-id\": \"chat-composite-message-status-icon\", role: \"status\", \"aria-label\": strings.seenAriaLabel, iconName: \"MessageSeen\", className: mergeStyles({\n color: theme.palette.themePrimary\n }, styles === null || styles === void 0 ? void 0 : styles.root) }));\n case 'delivered':\n return React.createElement(TooltipHost, { calloutProps: Object.assign({}, calloutProps), content: strings.deliveredTooltipText, \"data-ui-id\": \"chat-composite-message-tooltip\", styles: hostStyles },\n strings.deliveredAriaLabel && React.createElement(LiveMessage, { message: strings.deliveredAriaLabel, ariaLive: \"polite\" }),\n React.createElement(Icon, { role: \"status\", \"data-ui-id\": \"chat-composite-message-status-icon\", \"aria-label\": strings.deliveredAriaLabel, iconName: \"MessageDelivered\", className: mergeStyles(MessageStatusIndicatorIconStyle, {\n color: theme.palette.themePrimary\n }, styles === null || styles === void 0 ? void 0 : styles.root) }));\n default:\n return React.createElement(React.Fragment, null);\n }\n};\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//# sourceMappingURL=MessageStatusIndicator.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, useEffect, useMemo, useRef, useState } from 'react';\nimport { Icon, mergeStyles, PrimaryButton, Persona, PersonaSize } from '@fluentui/react';\nimport { Chat, ChatMessage as FluentChatMessage, ChatMyMessage as FluentChatMyMessage } from '@fluentui-contrib/react-chat';\nimport { mergeClasses } from '@fluentui/react-components';\nimport { DownIconStyle, newMessageButtonContainerStyle, messageThreadContainerStyle, messageThreadWrapperContainerStyle, useChatStyles, buttonWithIconStyles, newMessageButtonStyle, noMessageStatusStyle, useChatMessageRenderStyles, gutterWithAvatar, gutterWithHiddenAvatar } from './styles/MessageThread.styles';\nimport { delay } from './utils/delay';\nimport { MessageStatusIndicator } from './MessageStatusIndicator';\nimport { memoizeFnAll } from \"../../../acs-ui-common/src\";\nimport { SystemMessage as SystemMessageComponent } from './SystemMessage';\nimport { ChatMessageComponent } from './ChatMessage/ChatMessageComponent';\nimport { useLocale } from '../localization/LocalizationProvider';\nimport { isNarrowWidth, _useContainerWidth } from './utils/responsive';\nimport getParticipantsWhoHaveReadMessage from './utils/getParticipantsWhoHaveReadMessage';\nimport { useTheme } from '../theming';\nimport { FluentV9ThemeProvider } from './../theming/FluentV9ThemeProvider';\nimport LiveAnnouncer from './Announcer/LiveAnnouncer';\nimport { createStyleFromV8Style } from './styles/v8StyleShim';\nconst isMessageSame = (first, second) => {\n return first.messageId === second.messageId && first.content === second.content && first.contentType === second.contentType && JSON.stringify(first.createdOn) === JSON.stringify(second.createdOn) && first.senderId === second.senderId && first.senderDisplayName === second.senderDisplayName && first.status === second.status;\n};\n/**\n * Get the latest message from the message array.\n *\n * @param messages\n */\nconst getLatestChatMessage = (messages) => {\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i];\n if (message.messageType === 'chat' && !!message.createdOn) {\n return message;\n }\n }\n return undefined;\n};\n/**\n * Compare latestMessageFromPreviousMessages & latestMessageFromNewMessages to see if the new message is not from\n * current user.\n */\nconst isThereNewMessageNotFromCurrentUser = (userId, latestMessageFromPreviousMessages, latestMessageFromNewMessages) => {\n if (latestMessageFromNewMessages === undefined) {\n return false;\n }\n if (latestMessageFromPreviousMessages === undefined) {\n return latestMessageFromNewMessages.senderId !== userId;\n }\n return !isMessageSame(latestMessageFromNewMessages, latestMessageFromPreviousMessages) && latestMessageFromNewMessages.senderId !== userId;\n};\n/**\n * Returns true if the current user sent the latest message and false otherwise. It will ignore messages that have no\n * sender, messages that have failed to send, and messages from the current user that is marked as SEEN. This is meant\n * as an indirect way to detect if user is at bottom of the chat when the component updates with new messages. If we\n * updated this component due to current user sending a message we want to then call scrollToBottom.\n */\nconst didUserSendTheLatestMessage = (userId, latestMessageFromPreviousMessages, latestMessageFromNewMessages) => {\n if (latestMessageFromNewMessages === undefined) {\n return false;\n }\n if (latestMessageFromPreviousMessages === undefined) {\n return latestMessageFromNewMessages.senderId === userId;\n }\n return !isMessageSame(latestMessageFromNewMessages, latestMessageFromPreviousMessages) && latestMessageFromNewMessages.senderId === userId;\n};\nconst DefaultJumpToNewMessageButton = (props) => {\n const { text, onClick } = props;\n return React.createElement(PrimaryButton, { className: newMessageButtonStyle, styles: buttonWithIconStyles, text: text, onClick: onClick, onRenderIcon: () => React.createElement(Icon, { iconName: \"Down\", className: DownIconStyle }) });\n};\nconst generateParticipantsStr = (participants, defaultName) => participants.map(participant => `${!participant.displayName || participant.displayName === '' ? defaultName : participant.displayName}`).join(', ');\nconst ParticipantSystemMessageComponent = ({ message, style, defaultName }) => {\n const { strings } = useLocale();\n const participantsStr = generateParticipantsStr(message.participants, defaultName);\n const messageSuffix = message.systemMessageType === 'participantAdded' ? strings.messageThread.participantJoined : strings.messageThread.participantLeft;\n if (participantsStr !== '') {\n return React.createElement(SystemMessageComponent, { iconName: (message.iconName ? message.iconName : ''), content: `${participantsStr} ${messageSuffix}`, containerStyle: style });\n }\n return React.createElement(React.Fragment, null);\n};\nconst DefaultSystemMessage = (props) => {\n var _a;\n const message = props.message;\n switch (message.messageType) {\n case 'system':\n switch (message.systemMessageType) {\n case 'content':\n return React.createElement(SystemMessageComponent, { iconName: (message.iconName ? message.iconName : ''), content: (_a = message.content) !== null && _a !== void 0 ? _a : '', containerStyle: props === null || props === void 0 ? void 0 : props.messageContainerStyle });\n case 'participantAdded':\n case 'participantRemoved':\n return React.createElement(ParticipantSystemMessageComponent, { message: message, style: props.messageContainerStyle, defaultName: props.strings.noDisplayNameSub });\n }\n }\n return React.createElement(React.Fragment, null);\n};\nconst memoizeAllMessages = memoizeFnAll((_messageKey, message, showMessageDate, showMessageStatus, onRenderAvatar, shouldOverlapAvatarAndMessage, styles, onRenderMessageStatus, defaultStatusRenderer, defaultChatMessageRenderer, strings, theme, chatMessageRenderStyles, _attached, statusToRender, participantCount, readCount, onRenderMessage, onUpdateMessage, onCancelEditMessage, onDeleteMessage, onSendMessage, disableEditing) => {\n var _a;\n const messageProps = {\n message,\n strings,\n showDate: showMessageDate,\n onUpdateMessage,\n onCancelEditMessage,\n onDeleteMessage,\n onSendMessage,\n disableEditing\n };\n const chatMessage = (message, messageProps) => {\n var _a;\n const messageStatusRenderer = showMessageStatus && statusToRender ? onRenderMessageStatus ? (status) => onRenderMessageStatus({\n status\n }) : (status) => defaultStatusRenderer(message, status, participantCount !== null && participantCount !== void 0 ? participantCount : 0, readCount !== null && readCount !== void 0 ? readCount : 0) : () => React.createElement(\"div\", { className: mergeStyles(noMessageStatusStyle) });\n let chatMessageComponent;\n const shouldShowAvatar = message.attached === 'top' || message.attached === false;\n const attached = shouldShowAvatar ? 'top' : 'center';\n if (message.mine === true) {\n chatMessageComponent = React.createElement(FluentChatMyMessage, { attached: attached, root: {\n // myChatItemMessageContainer used in className and style prop as style prop can't handle CSS selectors\n className: mergeClasses(chatMessageRenderStyles.rootMyMessage, chatMessageRenderStyles.rootCommon, mergeStyles(styles === null || styles === void 0 ? void 0 : styles.myChatItemMessageContainer)),\n style: (styles === null || styles === void 0 ? void 0 : styles.myChatItemMessageContainer) !== undefined ? createStyleFromV8Style(styles === null || styles === void 0 ? void 0 : styles.myChatItemMessageContainer) : {},\n role: 'none'\n }, body: {\n className: mergeClasses(chatMessageRenderStyles.bodyCommon, chatMessageRenderStyles.bodyMyMessage),\n // make body not focusable to remove repetitions from narrators.\n // inner components are already focusable\n tabIndex: -1,\n role: 'none'\n }, statusIcon: React.createElement(\"div\", { className: mergeStyles({\n paddingLeft: '0.25rem'\n }, (styles === null || styles === void 0 ? void 0 : styles.messageStatusContainer) ? styles.messageStatusContainer((_a = message.mine) !== null && _a !== void 0 ? _a : false) : '') }, message.status ? messageStatusRenderer(message.status) : undefined) }, onRenderMessage === undefined ? defaultChatMessageRenderer(Object.assign(Object.assign({}, messageProps), { messageStatusRenderer })) : onRenderMessage(messageProps, defaultChatMessageRenderer));\n }\n else {\n const chatAvatarStyle = shouldShowAvatar ? gutterWithAvatar : gutterWithHiddenAvatar;\n const personaOptions = {\n hidePersonaDetails: true,\n size: PersonaSize.size32,\n text: message.senderDisplayName,\n showOverflowTooltip: false\n };\n chatMessageComponent = React.createElement(FluentChatMessage, { attached: attached, root: {\n className: mergeClasses(chatMessageRenderStyles.rootMessage, chatMessageRenderStyles.rootCommon)\n }, body: {\n // chatItemMessageContainer used in className and style prop as style prop can't handle CSS selectors\n className: mergeClasses(chatMessageRenderStyles.bodyCommon, !shouldShowAvatar ? chatMessageRenderStyles.bodyWithoutAvatar : chatMessageRenderStyles.bodyWithAvatar, shouldOverlapAvatarAndMessage ? chatMessageRenderStyles.avatarOverlap : chatMessageRenderStyles.avatarNoOverlap, mergeStyles(styles === null || styles === void 0 ? void 0 : styles.chatItemMessageContainer)),\n style: (styles === null || styles === void 0 ? void 0 : styles.chatItemMessageContainer) !== undefined ? createStyleFromV8Style(styles === null || styles === void 0 ? void 0 : styles.chatItemMessageContainer) : {},\n // make body not focusable to remove repetitions from narrators.\n // inner components are already focusable\n tabIndex: -1,\n role: 'none'\n }, avatar: React.createElement(\"div\", { className: mergeStyles(chatAvatarStyle) }, onRenderAvatar ? onRenderAvatar === null || onRenderAvatar === void 0 ? void 0 : onRenderAvatar(message.senderId, personaOptions) : React.createElement(Persona, Object.assign({}, personaOptions))) }, onRenderMessage === undefined ? defaultChatMessageRenderer(Object.assign(Object.assign({}, messageProps), { messageStatusRenderer })) : onRenderMessage(messageProps, defaultChatMessageRenderer));\n }\n return React.createElement(\"div\", { key: _messageKey }, chatMessageComponent);\n };\n switch (message.messageType) {\n case 'chat':\n {\n const myChatMessageStyle = message.status === 'failed' ? (_a = styles === null || styles === void 0 ? void 0 : styles.failedMyChatMessageContainer) !== null && _a !== void 0 ? _a : styles === null || styles === void 0 ? void 0 : styles.myChatMessageContainer : styles === null || styles === void 0 ? void 0 : styles.myChatMessageContainer;\n const chatMessageStyle = styles === null || styles === void 0 ? void 0 : styles.chatMessageContainer;\n messageProps.messageContainerStyle = message.mine ? myChatMessageStyle : chatMessageStyle;\n return chatMessage(message, messageProps);\n }\n case 'system':\n {\n messageProps.messageContainerStyle = styles === null || styles === void 0 ? void 0 : styles.systemMessageContainer;\n const systemMessageComponent = onRenderMessage === undefined ? React.createElement(DefaultSystemMessage, Object.assign({}, messageProps)) : onRenderMessage(messageProps, props => React.createElement(DefaultSystemMessage, Object.assign({}, props)));\n return React.createElement(\"div\", { key: _messageKey, style: {\n paddingTop: '0.5rem'\n } }, systemMessageComponent);\n }\n default:\n {\n // We do not handle custom type message by default, users can handle custom type by using onRenderMessage function.\n const customMessageComponent = onRenderMessage === undefined ? React.createElement(React.Fragment, null) : onRenderMessage(messageProps);\n return React.createElement(\"div\", { key: _messageKey, style: {\n paddingTop: '1rem',\n paddingBottom: '0.25rem'\n } }, customMessageComponent);\n }\n }\n});\nconst getLastChatMessageIdWithStatus = (messages, status) => {\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i];\n if (message.messageType === 'chat' && message.status === status && message.mine) {\n return message.messageId;\n }\n }\n return undefined;\n};\n/**\n * `MessageThread` allows you to easily create a component for rendering chat messages, handling scrolling behavior of new/old messages and customizing icons & controls inside the chat thread.\n * @param props - of type MessageThreadProps\n *\n * Users will need to provide at least chat messages and userId to render the `MessageThread` component.\n * Users can also customize `MessageThread` by passing in their own Avatar, `MessageStatusIndicator` icon, `JumpToNewMessageButton`, `LoadPreviousMessagesButton` and the behavior of these controls.\n *\n * `MessageThread` internally uses the `Chat` component from `@fluentui-contrib/chat`. You can checkout the details about these components [here](https://microsoft.github.io/fluentui-contrib/react-chat/).\n *\n * @public\n */\nexport const MessageThread = (props) => {\n var _a;\n const theme = useTheme();\n const chatBody = useMemo(() => {\n return React.createElement(FluentV9ThemeProvider, { v8Theme: theme },\n React.createElement(MessageThreadWrapper, Object.assign({}, props)));\n }, [theme, props]);\n return React.createElement(\"div\", { className: mergeStyles(messageThreadContainerStyle, (_a = props.styles) === null || _a === void 0 ? void 0 : _a.root) }, chatBody);\n};\n/**\n * @private\n */\nexport const MessageThreadWrapper = (props) => {\n var _a;\n const { messages: newMessages, userId, participantCount, readReceiptsBySenderId, styles, disableJumpToNewMessageButton = false, showMessageDate = false, showMessageStatus = false, numberOfChatMessagesToReload = 5, onMessageSeen, onRenderMessageStatus, onRenderAvatar, onLoadPreviousChatMessages, onRenderJumpToNewMessageButton, onRenderMessage, onUpdateMessage, onCancelEditMessage, onDeleteMessage, onSendMessage } = props;\n const onRenderFileDownloads = onRenderFileDownloadsTrampoline(props);\n const [messages, setMessages] = useState([]);\n // We need this state to wait for one tick and scroll to bottom after messages have been initialized.\n // Otherwise chatScrollDivRef.current.clientHeight is wrong if we scroll to bottom before messages are initialized.\n const [chatMessagesInitialized, setChatMessagesInitialized] = useState(false);\n const [isAtBottomOfScroll, setIsAtBottomOfScroll] = useState(true);\n const [forceUpdate, setForceUpdate] = useState(0);\n // Used to decide if should auto scroll to bottom or show \"new message\" button\n const [latestPreviousChatMessage, setLatestPreviousChatMessage] = useState(undefined);\n const [latestCurrentChatMessage, setLatestCurrentChatMessage] = useState(undefined);\n const [existsNewChatMessage, setExistsNewChatMessage] = useState(false);\n const [lastSeenChatMessage, setLastSeenChatMessage] = useState(undefined);\n const [lastDeliveredChatMessage, setLastDeliveredChatMessage] = useState(undefined);\n const [lastSendingChatMessage, setLastSendingChatMessage] = useState(undefined);\n // readCount and participantCount will only need to be updated on-fly when user hover on an indicator\n const [readCountForHoveredIndicator, setReadCountForHoveredIndicator] = useState(undefined);\n const isAllChatMessagesLoadedRef = useRef(false);\n // isAllChatMessagesLoadedRef needs to be updated every time when a new adapter is set in order to display correct data\n // onLoadPreviousChatMessages is updated when a new adapter is set\n useEffect(() => {\n if (onLoadPreviousChatMessages) {\n isAllChatMessagesLoadedRef.current = false;\n }\n }, [onLoadPreviousChatMessages]);\n const previousTopRef = useRef(-1);\n const previousHeightRef = useRef(-1);\n const messageIdSeenByMeRef = useRef('');\n const chatScrollDivRef = useRef(null);\n const isLoadingChatMessagesRef = useRef(false);\n const messagesRef = useRef(messages);\n const setMessagesRef = (messagesWithAttachedValue) => {\n messagesRef.current = messagesWithAttachedValue;\n setMessages(messagesWithAttachedValue);\n };\n const isAtBottomOfScrollRef = useRef(isAtBottomOfScroll);\n const setIsAtBottomOfScrollRef = (isAtBottomOfScrollValue) => {\n isAtBottomOfScrollRef.current = isAtBottomOfScrollValue;\n setIsAtBottomOfScroll(isAtBottomOfScrollValue);\n };\n const chatMessagesInitializedRef = useRef(chatMessagesInitialized);\n const setChatMessagesInitializedRef = (chatMessagesInitialized) => {\n chatMessagesInitializedRef.current = chatMessagesInitialized;\n setChatMessagesInitialized(chatMessagesInitialized);\n };\n const chatThreadRef = useRef(null);\n // When the chat thread is narrow, we perform space optimizations such as overlapping\n // the avatar on top of the chat message and moving the chat accept/reject edit buttons\n // to a new line\n const chatThreadWidth = _useContainerWidth(chatThreadRef);\n const isNarrow = chatThreadWidth ? isNarrowWidth(chatThreadWidth) : false;\n /**\n * ClientHeight controls the number of messages to render. However ClientHeight will not be initialized after the\n * first render (not sure but I guess Fluent is updating it in hook which is after render maybe?) so we need to\n * trigger a re-render until ClientHeight is initialized. This force re-render should only happen once.\n */\n const clientHeight = (_a = chatThreadRef.current) === null || _a === void 0 ? void 0 : _a.clientHeight;\n // we try to only send those message status if user is scrolled to the bottom.\n const sendMessageStatusIfAtBottom = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {\n if (!isAtBottomOfScrollRef.current || !document.hasFocus() || !messagesRef.current || messagesRef.current.length === 0 || !showMessageStatus) {\n return;\n }\n const messagesWithId = messagesRef.current.filter(message => {\n return message.messageType === 'chat' && !message.mine && !!message.messageId;\n });\n if (messagesWithId.length === 0) {\n return;\n }\n const lastMessage = messagesWithId[messagesWithId.length - 1];\n try {\n if (onMessageSeen && lastMessage && lastMessage.messageId && lastMessage.messageId !== messageIdSeenByMeRef.current) {\n yield onMessageSeen(lastMessage.messageId);\n messageIdSeenByMeRef.current = lastMessage.messageId;\n }\n }\n catch (e) {\n console.log('onMessageSeen Error', lastMessage, e);\n }\n }), [showMessageStatus, onMessageSeen]);\n const scrollToBottom = useCallback(() => {\n if (chatScrollDivRef.current) {\n chatScrollDivRef.current.scrollTop = chatScrollDivRef.current.scrollHeight;\n }\n setExistsNewChatMessage(false);\n setIsAtBottomOfScrollRef(true);\n sendMessageStatusIfAtBottom();\n }, [sendMessageStatusIfAtBottom]);\n const handleScrollToTheBottom = useCallback(() => {\n if (!chatScrollDivRef.current) {\n return;\n }\n const atBottom = Math.ceil(chatScrollDivRef.current.scrollTop) >= chatScrollDivRef.current.scrollHeight - chatScrollDivRef.current.clientHeight;\n if (atBottom) {\n sendMessageStatusIfAtBottom();\n if (!isAtBottomOfScrollRef.current) {\n scrollToBottom();\n }\n }\n setIsAtBottomOfScrollRef(atBottom);\n }, [scrollToBottom, sendMessageStatusIfAtBottom]);\n // Infinite scrolling + threadInitialize function\n const fetchNewMessageWhenAtTop = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {\n if (!isLoadingChatMessagesRef.current) {\n if (onLoadPreviousChatMessages) {\n isLoadingChatMessagesRef.current = true;\n try {\n // Fetch message until scrollTop reach the threshold for fetching new message\n while (!isAllChatMessagesLoadedRef.current && chatScrollDivRef.current && chatScrollDivRef.current.scrollTop <= 500) {\n isAllChatMessagesLoadedRef.current = yield onLoadPreviousChatMessages(numberOfChatMessagesToReload);\n yield delay(200);\n }\n }\n finally {\n // Set isLoadingChatMessagesRef to false after messages are fetched\n isLoadingChatMessagesRef.current = false;\n }\n }\n }\n }), [numberOfChatMessagesToReload, onLoadPreviousChatMessages]);\n // The below 2 of useEffects are design for fixing infinite scrolling problem\n // Scrolling element will behave differently when scrollTop = 0(it sticks at the top)\n // we need to get previousTop before it prepend contents\n // Execute order [newMessage useEffect] => get previousTop => dom update => [messages useEffect]\n useEffect(() => {\n if (!chatScrollDivRef.current) {\n return;\n }\n previousTopRef.current = chatScrollDivRef.current.scrollTop;\n previousHeightRef.current = chatScrollDivRef.current.scrollHeight;\n }, [newMessages]);\n useEffect(() => {\n if (!chatScrollDivRef.current) {\n return;\n }\n chatScrollDivRef.current.scrollTop = chatScrollDivRef.current.scrollHeight - (previousHeightRef.current - previousTopRef.current);\n }, [messages]);\n // Fetch more messages to make the scroll bar appear, infinity scroll is then handled in the handleScroll function.\n useEffect(() => {\n fetchNewMessageWhenAtTop();\n }, [fetchNewMessageWhenAtTop]);\n /**\n * One time run useEffects. Sets up listeners when component is mounted and tears down listeners when component\n * unmounts unless these function changed\n */\n useEffect(() => {\n window && window.addEventListener('click', sendMessageStatusIfAtBottom);\n window && window.addEventListener('focus', sendMessageStatusIfAtBottom);\n return () => {\n window && window.removeEventListener('click', sendMessageStatusIfAtBottom);\n window && window.removeEventListener('focus', sendMessageStatusIfAtBottom);\n };\n }, [sendMessageStatusIfAtBottom]);\n useEffect(() => {\n const chatScrollDiv = chatScrollDivRef.current;\n chatScrollDiv === null || chatScrollDiv === void 0 ? void 0 : chatScrollDiv.addEventListener('scroll', handleScrollToTheBottom);\n chatScrollDiv === null || chatScrollDiv === void 0 ? void 0 : chatScrollDiv.addEventListener('scroll', fetchNewMessageWhenAtTop);\n return () => {\n chatScrollDiv === null || chatScrollDiv === void 0 ? void 0 : chatScrollDiv.removeEventListener('scroll', handleScrollToTheBottom);\n chatScrollDiv === null || chatScrollDiv === void 0 ? void 0 : chatScrollDiv.removeEventListener('scroll', fetchNewMessageWhenAtTop);\n };\n }, [fetchNewMessageWhenAtTop, handleScrollToTheBottom]);\n useEffect(() => {\n if (clientHeight === undefined) {\n setForceUpdate(forceUpdate + 1);\n return;\n }\n // Only scroll to bottom if isAtBottomOfScrollRef is true\n isAtBottomOfScrollRef.current && scrollToBottom();\n }, [clientHeight, forceUpdate, scrollToBottom, chatMessagesInitialized]);\n /**\n * This needs to run to update latestPreviousChatMessage & latestCurrentChatMessage.\n * These two states are used to manipulate scrollbar\n */\n useEffect(() => {\n setLatestPreviousChatMessage(getLatestChatMessage(messagesRef.current));\n setLatestCurrentChatMessage(getLatestChatMessage(newMessages));\n setMessagesRef(newMessages);\n !chatMessagesInitializedRef.current && setChatMessagesInitializedRef(true);\n setLastDeliveredChatMessage(getLastChatMessageIdWithStatus(newMessages, 'delivered'));\n setLastSeenChatMessage(getLastChatMessageIdWithStatus(newMessages, 'seen'));\n setLastSendingChatMessage(getLastChatMessageIdWithStatus(newMessages, 'sending'));\n }, [newMessages]);\n /**\n * This needs to run after messages are rendered so we can manipulate the scroll bar.\n */\n useEffect(() => {\n // If user just sent the latest message then we assume we can move user to bottom of scroll.\n if (isThereNewMessageNotFromCurrentUser(userId, latestPreviousChatMessage, latestCurrentChatMessage) && !isAtBottomOfScrollRef.current) {\n setExistsNewChatMessage(true);\n }\n else if (didUserSendTheLatestMessage(userId, latestPreviousChatMessage, latestCurrentChatMessage) || isAtBottomOfScrollRef.current) {\n scrollToBottom();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [messages]);\n const participantCountRef = useRef(participantCount);\n const readReceiptsBySenderIdRef = useRef(readReceiptsBySenderId);\n participantCountRef.current = participantCount;\n readReceiptsBySenderIdRef.current = readReceiptsBySenderId;\n const onActionButtonClickMemo = useCallback((message, setMessageReadBy) => {\n if (participantCountRef.current && participantCountRef.current - 1 > 1 && readReceiptsBySenderIdRef.current) {\n setMessageReadBy(getParticipantsWhoHaveReadMessage(message, readReceiptsBySenderIdRef.current));\n }\n }, []);\n const localeStrings = useLocale().strings.messageThread;\n const strings = useMemo(() => (Object.assign(Object.assign({}, localeStrings), props.strings)), [localeStrings, props.strings]);\n // To rerender the defaultChatMessageRenderer if app running across days(every new day chat time stamp need to be regenerated)\n const defaultChatMessageRenderer = useCallback((messageProps) => {\n if (messageProps.message.messageType === 'chat') {\n return React.createElement(ChatMessageComponent, Object.assign({}, messageProps, { onRenderFileDownloads: onRenderFileDownloads, message: messageProps.message, userId: props.userId, remoteParticipantsCount: participantCount ? participantCount - 1 : 0, shouldOverlapAvatarAndMessage: isNarrow, onRenderAvatar: onRenderAvatar, showMessageStatus: showMessageStatus, messageStatus: messageProps.message.status, onActionButtonClick: onActionButtonClickMemo }));\n }\n return React.createElement(React.Fragment, null);\n }, [onRenderFileDownloads, props.userId, participantCount, isNarrow, onRenderAvatar, showMessageStatus, onActionButtonClickMemo]);\n const defaultStatusRenderer = useCallback((message, status, participantCount, readCount) => {\n const onToggleToolTip = (isToggled) => {\n if (isToggled && readReceiptsBySenderIdRef.current) {\n setReadCountForHoveredIndicator(getParticipantsWhoHaveReadMessage(message, readReceiptsBySenderIdRef.current).length);\n }\n else {\n setReadCountForHoveredIndicator(undefined);\n }\n };\n return React.createElement(MessageStatusIndicator, { status: status, readCount: readCount, onToggleToolTip: onToggleToolTip, \n // -1 because participant count does not include myself\n remoteParticipantsCount: participantCount ? participantCount - 1 : 0 });\n }, []);\n const theme = useTheme();\n const chatMessageRenderStyles = useChatMessageRenderStyles();\n const messagesToDisplay = useMemo(() => memoizeAllMessages(memoizedMessageFn => {\n return messages.map((message, index) => {\n let key = message.messageId;\n let statusToRender = undefined;\n if (message.messageType === 'chat') {\n if ((!message.messageId || message.messageId === '') && 'clientMessageId' in message) {\n key = message.clientMessageId;\n }\n if (showMessageStatus && message.mine) {\n switch (message.messageId) {\n case lastSeenChatMessage:\n {\n statusToRender = 'seen';\n break;\n }\n case lastSendingChatMessage:\n {\n statusToRender = 'sending';\n break;\n }\n case lastDeliveredChatMessage:\n {\n statusToRender = 'delivered';\n break;\n }\n }\n }\n if (message.mine && message.status === 'failed') {\n statusToRender = 'failed';\n }\n }\n return memoizedMessageFn(key !== null && key !== void 0 ? key : 'id_' + index, message, showMessageDate, showMessageStatus, onRenderAvatar, isNarrow, styles, onRenderMessageStatus, defaultStatusRenderer, defaultChatMessageRenderer, strings, theme, chatMessageRenderStyles, \n // Temporary solution to make sure we re-render if attach attribute is changed.\n // The proper fix should be in selector.\n message.messageType === 'chat' ? message.attached : undefined, statusToRender, participantCount, readCountForHoveredIndicator, onRenderMessage, onUpdateMessage, onCancelEditMessage, onDeleteMessage, onSendMessage, props.disableEditing);\n });\n }), [messages, showMessageDate, showMessageStatus, onRenderAvatar, isNarrow, styles, onRenderMessageStatus, defaultStatusRenderer, defaultChatMessageRenderer, strings, theme, chatMessageRenderStyles, participantCount, readCountForHoveredIndicator, onRenderMessage, onUpdateMessage, onCancelEditMessage, onDeleteMessage, onSendMessage, props.disableEditing, lastSeenChatMessage, lastSendingChatMessage, lastDeliveredChatMessage]);\n const classes = useChatStyles();\n const chatBody = useMemo(() => {\n return React.createElement(LiveAnnouncer, null,\n React.createElement(FluentV9ThemeProvider, { v8Theme: theme },\n React.createElement(Chat\n // styles?.chatContainer used in className and style prop as style prop can't handle CSS selectors\n , { \n // styles?.chatContainer used in className and style prop as style prop can't handle CSS selectors\n className: mergeClasses(classes.root, mergeStyles(styles === null || styles === void 0 ? void 0 : styles.chatContainer)), ref: chatScrollDivRef, style: Object.assign({}, createStyleFromV8Style(styles === null || styles === void 0 ? void 0 : styles.chatContainer)) }, messagesToDisplay)));\n }, [theme, classes.root, styles === null || styles === void 0 ? void 0 : styles.chatContainer, messagesToDisplay]);\n return React.createElement(\"div\", { className: mergeStyles(messageThreadWrapperContainerStyle), ref: chatThreadRef },\n existsNewChatMessage && !disableJumpToNewMessageButton && React.createElement(\"div\", { className: mergeStyles(newMessageButtonContainerStyle, styles === null || styles === void 0 ? void 0 : styles.newMessageButtonContainer) }, onRenderJumpToNewMessageButton ? onRenderJumpToNewMessageButton({\n text: strings.newMessagesIndicator,\n onClick: scrollToBottom\n }) : React.createElement(DefaultJumpToNewMessageButton, { text: strings.newMessagesIndicator, onClick: scrollToBottom })),\n chatBody);\n};\nconst onRenderFileDownloadsTrampoline = (props) => {\n return undefined;\n};\n//# sourceMappingURL=MessageThread.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, { useState, useCallback } 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';\n/**\n * A button to turn microphone on / off.\n *\n * Can be used with {@link ControlBar}.\n *\n * @public\n */\nexport const MicrophoneButton = (props) => {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\n const { onToggleMicrophone } = props;\n const localeStrings = useLocale().strings.microphoneButton;\n const strings = Object.assign(Object.assign({}, localeStrings), props.strings);\n const [announcerString, setAnnouncerString] = useState(undefined);\n const isSplit = (_a = props.split) !== null && _a !== void 0 ? _a : props.enableDeviceSelectionMenu;\n // The button should be disabled when there are no mics. However if the button is a split button, if there are\n // no mics but there are speakers, then only the primary part of the button should be disabled to allow for\n // speaker change.\n const primaryDisabled = props.primaryDisabled || (isSplit && !((_b = props.microphones) === null || _b === void 0 ? void 0 : _b.length) ? true : undefined);\n const disabled = props.disabled || isSplit && !((_c = props.microphones) === null || _c === void 0 ? void 0 : _c.length) && !((_d = props.speakers) === null || _d === void 0 ? void 0 : _d.length) || !isSplit && props.microphones && ((_e = props.microphones) === null || _e === void 0 ? void 0 : _e.length) === 0;\n const onRenderMicOnIcon = () => {\n return React.createElement(_HighContrastAwareIcon, { disabled: disabled, iconName: \"ControlButtonMicOn\" });\n };\n const onRenderMicOffIcon = () => {\n return React.createElement(_HighContrastAwareIcon, { disabled: disabled, iconName: \"ControlButtonMicOff\" });\n };\n const isMicOn = props.checked;\n const splitButtonAriaString = isMicOn ? strings.onSplitButtonAriaLabel : strings.offSplitButtonAriaLabel;\n const toggleAnnouncerString = useCallback((isMicOn) => {\n setAnnouncerString(!isMicOn ? strings.microphoneActionTurnedOffAnnouncement : strings.microphoneActionTurnedOnAnnouncement);\n }, [strings.microphoneActionTurnedOffAnnouncement, strings.microphoneActionTurnedOnAnnouncement]);\n const onToggleClick = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {\n if (onToggleMicrophone) {\n try {\n yield onToggleMicrophone();\n // allows for the setting of narrator strings triggering the announcer when microphone is turned on or off.\n toggleAnnouncerString(!isMicOn);\n // eslint-disable-next-line no-empty\n }\n finally { }\n }\n }), [isMicOn, onToggleMicrophone, toggleAnnouncerString]);\n /**\n * We need to also include the primary action of the button to the\n * split button for mobile devices.\n */\n const splitButtonPrimaryAction = {\n key: 'primaryAction',\n title: 'toggle mic',\n itemType: ContextualMenuItemType.Section,\n sectionProps: {\n topDivider: true,\n items: [{\n key: 'microphonePrimaryAction',\n text: props.checked ? strings.onSplitButtonMicrophonePrimaryAction : strings.offSplitButtonMicrophonePrimaryAction,\n onClick: () => {\n onToggleClick();\n },\n iconProps: {\n iconName: props.checked ? 'SplitButtonPrimaryActionMicUnmuted' : 'SplitButtonPrimaryActionMicMuted',\n styles: {\n root: {\n lineHeight: 0\n }\n }\n }\n }]\n }\n };\n return React.createElement(React.Fragment, null,\n React.createElement(Announcer, { announcementString: announcerString, ariaLive: 'polite' }),\n React.createElement(ControlBarButton, Object.assign({}, props, { onClick: props.onToggleMicrophone ? onToggleClick : props.onClick, onRenderOnIcon: (_f = props.onRenderOnIcon) !== null && _f !== void 0 ? _f : onRenderMicOnIcon, onRenderOffIcon: (_g = props.onRenderOffIcon) !== null && _g !== void 0 ? _g : onRenderMicOffIcon, strings: strings, labelKey: (_h = props.labelKey) !== null && _h !== void 0 ? _h : 'microphoneButtonLabel', menuProps: (_j = props.menuProps) !== null && _j !== void 0 ? _j : (props.enableDeviceSelectionMenu ? generateDefaultDeviceMenuProps(Object.assign(Object.assign({}, props), { styles: (_k = props.styles) === null || _k === void 0 ? void 0 : _k.menuStyles }), strings, splitButtonPrimaryAction) : undefined), menuIconProps: ((_l = props.menuIconProps) !== null && _l !== void 0 ? _l : !props.enableDeviceSelectionMenu) ? {\n hidden: true\n } : undefined, split: (_m = props.split) !== null && _m !== void 0 ? _m : props.enableDeviceSelectionMenu, \"aria-roledescription\": props.enableDeviceSelectionMenu ? strings.microphoneButtonSplitRoleDescription : undefined, splitButtonAriaLabel: props.enableDeviceSelectionMenu ? splitButtonAriaString : undefined, disabled: disabled, primaryDisabled: primaryDisabled })));\n};\n//# sourceMappingURL=MicrophoneButton.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n/* eslint-disable react/prop-types */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport * as React from 'react';\nimport { useBoolean, useMergedRefs, useConst, useSetTimeout, useId, useUnmount } from '@fluentui/react-hooks';\nimport { allowOverscrollOnElement, allowScrollOnElement, AnimationVariables, classNamesFunction, DirectionalHint, elementContains, EventGroup, FocusTrapZone, getGlobalClassNames, getPropsWithDefaults, Icon, KeyCodes, Layer, memoizeFunction, mergeStyles, on, Overlay, Popup, ResponsiveMode, styled, useResponsiveMode, ZIndexes } from '@fluentui/react';\nimport { useWindow } from '@fluentui/react-window-provider';\nconst animationDuration = AnimationVariables.durationValue2;\nconst ZERO = {\n x: 0,\n y: 0\n};\nconst DEFAULT_PROPS = {\n isOpen: false,\n isDarkOverlay: true,\n className: '',\n containerClassName: '',\n enableAriaHiddenSiblings: true\n};\nconst getModalClassNames = classNamesFunction();\nconst getMoveDelta = (ev) => {\n let delta = 10;\n if (ev.shiftKey) {\n if (!ev.ctrlKey) {\n delta = 50;\n }\n }\n else if (ev.ctrlKey) {\n delta = 1;\n }\n return delta;\n};\nconst useComponentRef = (props, focusTrapZone) => {\n React.useImperativeHandle(props.componentRef, () => ({\n focus() {\n if (focusTrapZone.current) {\n focusTrapZone.current.focus();\n }\n }\n }), [focusTrapZone]);\n};\nconst ModalBase = React.forwardRef((propsWithoutDefaults, ref) => {\n const props = getPropsWithDefaults(DEFAULT_PROPS, propsWithoutDefaults);\n const { allowTouchBodyScroll, className, children, containerClassName, scrollableContentClassName, elementToFocusOnDismiss, firstFocusableSelector, forceFocusInsideTrap, ignoreExternalFocusing, isBlocking, isAlert, isClickableOutsideFocusTrap, isDarkOverlay, onDismiss, layerProps, overlay, isOpen, titleAriaId, styles, subtitleAriaId, theme, topOffsetFixed, responsiveMode, onLayerDidMount, isModeless, dragOptions, onDismissed, minDragPosition, maxDragPosition } = props;\n const rootRef = React.useRef(null);\n const focusTrapZone = React.useRef(null);\n const focusTrapZoneElm = React.useRef(null);\n const mergedRef = useMergedRefs(rootRef, ref);\n const modalResponsiveMode = useResponsiveMode(mergedRef);\n const focusTrapZoneId = useId('ModalFocusTrapZone');\n const win = useWindow();\n const { setTimeout, clearTimeout } = useSetTimeout();\n const [isModalOpen, setIsModalOpen] = React.useState(isOpen);\n const [isVisible, setIsVisible] = React.useState(isOpen);\n const [coordinates, setCoordinates] = React.useState(ZERO);\n const [modalRectangleTop, setModalRectangleTop] = React.useState();\n const [isModalMenuOpen, { toggle: toggleModalMenuOpen, setFalse: setModalMenuClose }] = useBoolean(false);\n const internalState = useConst(() => ({\n onModalCloseTimer: 0,\n allowTouchBodyScroll,\n scrollableContent: null,\n lastSetCoordinates: ZERO,\n events: new EventGroup({})\n }));\n const { keepInBounds } = dragOptions || {};\n const isAlertRole = isAlert !== null && isAlert !== void 0 ? isAlert : (isBlocking && !isModeless);\n const layerClassName = layerProps === undefined ? '' : layerProps.className;\n const classNames = getModalClassNames(styles, {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n theme: theme,\n className,\n containerClassName,\n scrollableContentClassName,\n isOpen,\n isVisible,\n hasBeenOpened: internalState.hasBeenOpened,\n modalRectangleTop,\n topOffsetFixed,\n isModeless,\n layerClassName,\n windowInnerHeight: win === null || win === void 0 ? void 0 : win.innerHeight,\n isDefaultDragHandle: dragOptions && !dragOptions.dragHandleSelector\n });\n const mergedLayerProps = Object.assign(Object.assign({ eventBubblingEnabled: false }, layerProps), { onLayerDidMount: layerProps && layerProps.onLayerDidMount ? layerProps.onLayerDidMount : onLayerDidMount, insertFirst: isModeless, className: classNames.layer });\n // Allow the user to scroll within the modal but not on the body\n const allowScrollOnModal = React.useCallback((elt) => {\n if (elt) {\n if (internalState.allowTouchBodyScroll) {\n allowOverscrollOnElement(elt, internalState.events);\n }\n else {\n allowScrollOnElement(elt, internalState.events);\n }\n }\n else {\n internalState.events.off(internalState.scrollableContent);\n }\n internalState.scrollableContent = elt;\n }, [internalState]);\n const registerInitialModalPosition = () => {\n const dialogMain = focusTrapZoneElm.current;\n const modalRectangle = dialogMain === null || dialogMain === void 0 ? void 0 : dialogMain.getBoundingClientRect();\n if (modalRectangle) {\n if (topOffsetFixed) {\n setModalRectangleTop(modalRectangle.top);\n }\n if (keepInBounds) {\n // x/y are unavailable in IE, so use the equivalent left/top\n internalState.minPosition = minDragPosition !== null && minDragPosition !== void 0 ? minDragPosition : {\n x: -modalRectangle.left,\n y: -modalRectangle.top\n };\n internalState.maxPosition = maxDragPosition !== null && maxDragPosition !== void 0 ? maxDragPosition : {\n x: modalRectangle.left,\n y: modalRectangle.top\n };\n // Make sure the initial co-ordinates are within clamp bounds.\n setCoordinates({\n x: getClampedAxis('x', coordinates.x),\n y: getClampedAxis('y', coordinates.y)\n });\n }\n }\n };\n /**\n * Clamps an axis to a specified min and max position.\n *\n * @param axis A string that represents the axis (x/y).\n * @param position The position on the axis.\n */\n const getClampedAxis = React.useCallback((axis, position) => {\n const { minPosition, maxPosition } = internalState;\n if (keepInBounds && minPosition && maxPosition) {\n position = Math.max(minPosition[axis], position);\n position = Math.min(maxPosition[axis], position);\n }\n return position;\n }, [keepInBounds, internalState]);\n const handleModalClose = () => {\n var _a;\n internalState.lastSetCoordinates = ZERO;\n setModalMenuClose();\n internalState.isInKeyboardMoveMode = false;\n setIsModalOpen(false);\n setCoordinates(ZERO);\n (_a = internalState.disposeOnKeyUp) === null || _a === void 0 ? void 0 : _a.call(internalState);\n onDismissed === null || onDismissed === void 0 ? void 0 : onDismissed();\n };\n const handleDragStart = React.useCallback(() => {\n setModalMenuClose();\n internalState.isInKeyboardMoveMode = false;\n }, [internalState, setModalMenuClose]);\n const handleDrag = React.useCallback(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (ev, dragData) => {\n setCoordinates(prevValue => ({\n x: getClampedAxis('x', prevValue.x + dragData.delta.x),\n y: getClampedAxis('y', prevValue.y + dragData.delta.y)\n }));\n }, [getClampedAxis]);\n const handleDragStop = React.useCallback(() => {\n if (focusTrapZone.current) {\n focusTrapZone.current.focus();\n }\n }, []);\n const handleEnterKeyboardMoveMode = () => {\n // We need a global handleKeyDown event when we are in the move mode so that we can\n // handle the key presses and the components inside the modal do not get the events\n const handleKeyDown = (ev) => {\n if (ev.altKey && ev.ctrlKey && ev.keyCode === KeyCodes.space) {\n // CTRL + ALT + SPACE is handled during keyUp\n ev.preventDefault();\n ev.stopPropagation();\n return;\n }\n const newLocal = ev.altKey || ev.keyCode === KeyCodes.escape;\n if (isModalMenuOpen && newLocal) {\n setModalMenuClose();\n }\n if (internalState.isInKeyboardMoveMode && (ev.keyCode === KeyCodes.escape || ev.keyCode === KeyCodes.enter)) {\n internalState.isInKeyboardMoveMode = false;\n ev.preventDefault();\n ev.stopPropagation();\n }\n if (internalState.isInKeyboardMoveMode) {\n let handledEvent = true;\n const delta = getMoveDelta(ev);\n switch (ev.keyCode) {\n /* eslint-disable no-fallthrough */\n case KeyCodes.escape:\n setCoordinates(internalState.lastSetCoordinates);\n case KeyCodes.enter:\n {\n // TODO: determine if fallthrough was intentional\n /* eslint-enable no-fallthrough */\n internalState.lastSetCoordinates = ZERO;\n // setIsInKeyboardMoveMode(false);\n break;\n }\n case KeyCodes.up:\n {\n setCoordinates(prevValue => ({\n x: prevValue.x,\n y: getClampedAxis('y', prevValue.y - delta)\n }));\n break;\n }\n case KeyCodes.down:\n {\n setCoordinates(prevValue => ({\n x: prevValue.x,\n y: getClampedAxis('y', prevValue.y + delta)\n }));\n break;\n }\n case KeyCodes.left:\n {\n setCoordinates(prevValue => ({\n x: getClampedAxis('x', prevValue.x - delta),\n y: prevValue.y\n }));\n break;\n }\n case KeyCodes.right:\n {\n setCoordinates(prevValue => ({\n x: getClampedAxis('x', prevValue.x + delta),\n y: prevValue.y\n }));\n break;\n }\n default:\n {\n handledEvent = false;\n }\n }\n if (handledEvent) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n }\n };\n internalState.lastSetCoordinates = coordinates;\n setModalMenuClose();\n internalState.isInKeyboardMoveMode = true;\n internalState.events.on(win, 'keydown', handleKeyDown, true /* useCapture */);\n internalState.disposeOnKeyDown = () => {\n internalState.events.off(win, 'keydown', handleKeyDown, true /* useCapture */);\n internalState.disposeOnKeyDown = undefined;\n };\n };\n const handleExitKeyboardMoveMode = () => {\n var _a;\n internalState.lastSetCoordinates = ZERO;\n internalState.isInKeyboardMoveMode = false;\n (_a = internalState.disposeOnKeyDown) === null || _a === void 0 ? void 0 : _a.call(internalState);\n };\n const registerForKeyUp = () => {\n const handleKeyUp = (ev) => {\n // Needs to handle the CTRL + ALT + SPACE key during keyup due to FireFox bug:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n if (ev.altKey && ev.ctrlKey && ev.keyCode === KeyCodes.space) {\n if (elementContains(internalState.scrollableContent, ev.target)) {\n toggleModalMenuOpen();\n ev.preventDefault();\n ev.stopPropagation();\n }\n }\n };\n if (!internalState.disposeOnKeyUp) {\n internalState.events.on(win, 'keyup', handleKeyUp, true /* useCapture */);\n internalState.disposeOnKeyUp = () => {\n internalState.events.off(win, 'keyup', handleKeyUp, true /* useCapture */);\n internalState.disposeOnKeyUp = undefined;\n };\n }\n };\n React.useEffect(() => {\n clearTimeout(internalState.onModalCloseTimer);\n // Opening the dialog\n if (isOpen) {\n // This must be done after the modal content has rendered\n requestAnimationFrame(() => setTimeout(registerInitialModalPosition, 0));\n setIsModalOpen(true);\n // Add a keyUp handler for all key up events once the dialog is open.\n if (dragOptions) {\n registerForKeyUp();\n }\n internalState.hasBeenOpened = true;\n setIsVisible(true);\n }\n // Closing the dialog\n if (!isOpen && isModalOpen) {\n internalState.onModalCloseTimer = setTimeout(handleModalClose, parseFloat(animationDuration) * 1000);\n setIsVisible(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps -- should only run if isModalOpen or isOpen mutates or if min/max drag bounds are updated.\n }, [isModalOpen, isOpen, minDragPosition, maxDragPosition]);\n useUnmount(() => {\n internalState.events.dispose();\n });\n useComponentRef(props, focusTrapZone);\n const modalContent = React.createElement(FocusTrapZone, { disabled: true, id: focusTrapZoneId, ref: focusTrapZoneElm, componentRef: focusTrapZone, className: classNames.main, elementToFocusOnDismiss: elementToFocusOnDismiss, isClickableOutsideFocusTrap: isModeless || isClickableOutsideFocusTrap || !isBlocking, ignoreExternalFocusing: ignoreExternalFocusing, forceFocusInsideTrap: forceFocusInsideTrap && !isModeless, firstFocusableSelector: firstFocusableSelector, focusPreviouslyFocusedInnerElement: true, onBlur: internalState.isInKeyboardMoveMode ? handleExitKeyboardMoveMode : undefined, \"data-ui-id\": props['data-ui-id'] },\n dragOptions && internalState.isInKeyboardMoveMode && React.createElement(\"div\", { className: classNames.keyboardMoveIconContainer }, dragOptions.keyboardMoveIconProps ? React.createElement(Icon, Object.assign({}, dragOptions.keyboardMoveIconProps)) : React.createElement(Icon, { iconName: \"move\", className: classNames.keyboardMoveIcon })),\n React.createElement(\"div\", { ref: allowScrollOnModal, className: classNames.scrollableContent, \"data-is-scrollable\": true },\n dragOptions && isModalMenuOpen && React.createElement(dragOptions.menu, { items: [{\n key: 'move',\n text: dragOptions.moveMenuItemText,\n onClick: handleEnterKeyboardMoveMode\n }, {\n key: 'close',\n text: dragOptions.closeMenuItemText,\n onClick: handleModalClose\n }], onDismiss: setModalMenuClose, alignTargetEdge: true, coverTarget: true, directionalHint: DirectionalHint.topLeftEdge, directionalHintFixed: true, shouldFocusOnMount: true, target: internalState.scrollableContent }),\n children));\n return (\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n isModalOpen && modalResponsiveMode >= (responsiveMode || ResponsiveMode.small) && React.createElement(Layer, Object.assign({ ref: mergedRef }, mergedLayerProps),\n React.createElement(Popup, { role: isAlertRole ? 'alertdialog' : 'dialog', ariaLabelledBy: titleAriaId, ariaDescribedBy: subtitleAriaId, \n // onDismiss={onDismiss}\n shouldRestoreFocus: !ignoreExternalFocusing, \"aria-modal\": !isModeless },\n React.createElement(\"div\", { className: classNames.root, role: !isModeless ? 'document' : undefined },\n !isModeless && React.createElement(Overlay, Object.assign({ \"aria-hidden\": true, isDarkThemed: isDarkOverlay, onClick: isBlocking ? undefined : onDismiss, allowTouchBodyScroll: allowTouchBodyScroll }, overlay)),\n dragOptions ? React.createElement(DraggableZone, { handleSelector: dragOptions.dragHandleSelector || `#${focusTrapZoneId}`, preventDragSelector: \"button\", onStart: handleDragStart, onDragChange: handleDrag, onStop: handleDragStop, position: coordinates }, modalContent) : modalContent))) || null);\n});\nModalBase.displayName = 'ModalBase';\nconst getDraggableZoneClassNames = memoizeFunction((className, isDragging) => {\n return {\n root: mergeStyles(className, isDragging && {\n touchAction: 'none',\n selectors: {\n '& *': {\n userSelect: 'none'\n }\n }\n })\n };\n});\nconst eventMapping = {\n touch: {\n start: 'touchstart',\n move: 'touchmove',\n stop: 'touchend'\n },\n mouse: {\n start: 'mousedown',\n move: 'mousemove',\n stop: 'mouseup'\n }\n};\nclass DraggableZone extends React.Component {\n constructor(props) {\n super(props);\n this._currentEventType = eventMapping.mouse;\n this._events = [];\n this._onMouseDown = (event) => {\n const onMouseDown = React.Children.only(this.props.children).props.onMouseDown;\n if (onMouseDown) {\n onMouseDown(event);\n }\n this._currentEventType = eventMapping.mouse;\n return this._onDragStart(event);\n };\n this._onMouseUp = (event) => {\n const onMouseUp = React.Children.only(this.props.children).props.onMouseUp;\n if (onMouseUp) {\n onMouseUp(event);\n }\n this._currentEventType = eventMapping.mouse;\n return this._onDragStop(event);\n };\n this._onTouchStart = (event) => {\n const onTouchStart = React.Children.only(this.props.children).props.onTouchStart;\n if (onTouchStart) {\n onTouchStart(event);\n }\n this._currentEventType = eventMapping.touch;\n return this._onDragStart(event);\n };\n this._onTouchEnd = (event) => {\n const onTouchEnd = React.Children.only(this.props.children).props.onTouchEnd;\n if (onTouchEnd) {\n onTouchEnd(event);\n }\n this._currentEventType = eventMapping.touch;\n this._onDragStop(event);\n };\n this._onDragStart = (event) => {\n // Only handle left click for dragging\n if (typeof event.button === 'number' && event.button !== 0) {\n return false;\n }\n // If the target doesn't match the handleSelector OR\n // if the target does match the preventDragSelector, bail out\n if (this.props.handleSelector && !this._matchesSelector(event.target, this.props.handleSelector) || this.props.preventDragSelector && this._matchesSelector(event.target, this.props.preventDragSelector)) {\n return;\n }\n // Remember the touch identifier if this is a touch event so we can\n // distinguish between individual touches in multitouch scenarios\n // by remembering which touch point we were given\n this._touchId = this._getTouchId(event);\n const position = this._getControlPosition(event);\n if (position === undefined) {\n return;\n }\n const dragData = this._createDragDataFromPosition(position);\n this.props.onStart && this.props.onStart(event, dragData);\n this.setState({\n isDragging: true,\n lastPosition: position\n });\n // hook up the appropriate mouse/touch events to the body to ensure\n // smooth dragging\n this._events = [on(document.body, this._currentEventType.move, this._onDrag, true /* use capture phase */), on(document.body, this._currentEventType.stop, this._onDragStop, true /* use capture phase */)];\n return;\n };\n this._onDrag = (event) => {\n // Prevent scrolling on mobile devices\n if (event.type === 'touchmove') {\n event.preventDefault();\n }\n const position = this._getControlPosition(event);\n if (!position) {\n return;\n }\n // create the updated drag data from the position data\n const updatedData = this._createUpdatedDragData(this._createDragDataFromPosition(position));\n const updatedPosition = updatedData.position;\n this.props.onDragChange && this.props.onDragChange(event, updatedData);\n this.setState({\n position: updatedPosition,\n lastPosition: position\n });\n };\n this._onDragStop = (event) => {\n if (!this.state.isDragging) {\n return;\n }\n const position = this._getControlPosition(event);\n if (!position) {\n return;\n }\n const baseDragData = this._createDragDataFromPosition(position);\n // Set dragging to false and reset the lastPosition\n this.setState({\n isDragging: false,\n lastPosition: undefined\n });\n this.props.onStop && this.props.onStop(event, baseDragData);\n if (this.props.position) {\n this.setState({\n position: this.props.position\n });\n }\n // Remove event handlers\n this._events.forEach(dispose => dispose());\n };\n this.state = {\n isDragging: false,\n position: this.props.position || {\n x: 0,\n y: 0\n },\n lastPosition: undefined\n };\n }\n componentDidUpdate(prevProps) {\n if (this.props.position && (!prevProps.position || this.props.position !== prevProps.position)) {\n this.setState({\n position: this.props.position\n });\n }\n }\n componentWillUnmount() {\n this._events.forEach(dispose => dispose());\n }\n render() {\n const child = React.Children.only(this.props.children);\n const { props } = child;\n const { position } = this.props;\n const { position: statePosition, isDragging } = this.state;\n let x = statePosition.x;\n let y = statePosition.y;\n if (position && !isDragging) {\n x = position.x;\n y = position.y;\n }\n return React.cloneElement(child, {\n style: Object.assign(Object.assign({}, props.style), { transform: `translate(${x}px, ${y}px)` }),\n className: getDraggableZoneClassNames(props.className, this.state.isDragging).root,\n onMouseDown: this._onMouseDown,\n onMouseUp: this._onMouseUp,\n onTouchStart: this._onTouchStart,\n onTouchEnd: this._onTouchEnd\n });\n }\n /**\n * Get the control position based off the event that fired\n * @param event - The event to get offsets from\n */\n _getControlPosition(event) {\n const touchObj = this._getActiveTouch(event);\n // did we get the right touch?\n if (this._touchId !== undefined && !touchObj) {\n return undefined;\n }\n const eventToGetOffset = touchObj || event;\n return {\n x: eventToGetOffset.clientX,\n y: eventToGetOffset.clientY\n };\n }\n /**\n * Get the active touch point that we have saved from the event's TouchList\n * @param event - The event used to get the TouchList for the active touch point\n */\n _getActiveTouch(event) {\n return event.targetTouches && this._findTouchInTouchList(event.targetTouches) || event.changedTouches && this._findTouchInTouchList(event.changedTouches);\n }\n /**\n * Get the initial touch identifier associated with the given event\n * @param event - The event that contains the TouchList\n */\n _getTouchId(event) {\n const touch = event.targetTouches && event.targetTouches[0] || event.changedTouches && event.changedTouches[0];\n if (touch) {\n return touch.identifier;\n }\n return;\n }\n /**\n * Returns if an element (or any of the element's parents) match the given selector\n */\n _matchesSelector(element, selector) {\n if (!element || element === document.body) {\n return false;\n }\n // eslint-disable-next-line @typescript-eslint/ban-types\n const matchesSelectorFn = element.matches || element.webkitMatchesSelector || element.msMatchesSelector; /* for IE */\n if (!matchesSelectorFn) {\n return false;\n }\n return matchesSelectorFn.call(element, selector) || this._matchesSelector(element.parentElement, selector);\n }\n /**\n * Attempts to find the Touch that matches the identifier we stored in dragStart\n * @param touchList The TouchList to look for the stored identifier from dragStart\n */\n _findTouchInTouchList(touchList) {\n if (this._touchId === undefined) {\n return;\n }\n for (let i = 0; i < touchList.length; i++) {\n if (touchList[i].identifier === this._touchId) {\n return touchList[i];\n }\n }\n return undefined;\n }\n /**\n * Create DragData based off of the last known position and the new position passed in\n * @param position The new position as part of the drag\n */\n _createDragDataFromPosition(position) {\n const { lastPosition } = this.state;\n // If we have no lastPosition, use the given position\n // for last position\n if (lastPosition === undefined) {\n return {\n delta: {\n x: 0,\n y: 0\n },\n lastPosition: position,\n position\n };\n }\n return {\n delta: {\n x: position.x - lastPosition.x,\n y: position.y - lastPosition.y\n },\n lastPosition,\n position\n };\n }\n /**\n * Creates an updated DragData based off the current position and given baseDragData\n * @param baseDragData The base DragData (from _createDragDataFromPosition) used to calculate the updated positions\n */\n _createUpdatedDragData(baseDragData) {\n const { position } = this.state;\n return {\n position: {\n x: position.x + baseDragData.delta.x,\n y: position.y + baseDragData.delta.y\n },\n delta: baseDragData.delta,\n lastPosition: position\n };\n }\n}\nconst globalClassNames = {\n root: 'ms-Modal',\n main: 'ms-Dialog-main',\n scrollableContent: 'ms-Modal-scrollableContent',\n isOpen: 'is-open',\n layer: 'ms-Modal-Layer'\n};\nconst getStyles = (props) => {\n const { className, containerClassName, scrollableContentClassName, isOpen, isVisible, hasBeenOpened, modalRectangleTop, theme, topOffsetFixed, isModeless, layerClassName, isDefaultDragHandle, windowInnerHeight } = props;\n const { palette, effects, fonts } = theme;\n const classNames = getGlobalClassNames(globalClassNames, theme);\n return {\n root: [classNames.root, fonts.medium, {\n backgroundColor: 'transparent',\n position: isModeless ? 'absolute' : 'fixed',\n height: '100%',\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n opacity: 0,\n pointerEvents: 'none',\n transition: `opacity ${animationDuration}`\n }, topOffsetFixed && typeof modalRectangleTop === 'number' && hasBeenOpened && {\n alignItems: 'flex-start'\n }, isOpen && classNames.isOpen, isVisible && {\n opacity: 1,\n pointerEvents: 'auto'\n }, className],\n main: [classNames.main, {\n boxShadow: effects.elevation64,\n borderRadius: effects.roundedCorner2,\n backgroundColor: palette.white,\n boxSizing: 'border-box',\n position: 'relative',\n textAlign: 'left',\n outline: '3px solid transparent',\n maxHeight: 'calc(100% - 32px)',\n maxWidth: 'calc(100% - 32px)',\n minHeight: '176px',\n minWidth: '288px',\n overflowY: 'auto',\n zIndex: isModeless ? ZIndexes.Layer : undefined\n }, topOffsetFixed && typeof modalRectangleTop === 'number' && hasBeenOpened && {\n top: modalRectangleTop\n }, isDefaultDragHandle && {\n cursor: 'move'\n }, containerClassName],\n scrollableContent: [classNames.scrollableContent, {\n overflowY: 'auto',\n flexGrow: 1,\n maxHeight: '100vh',\n selectors: {\n ['@supports (-webkit-overflow-scrolling: touch)']: {\n maxHeight: windowInnerHeight\n }\n }\n }, scrollableContentClassName],\n layer: isModeless && [layerClassName, classNames.layer, {\n position: 'static',\n width: 'unset',\n height: 'unset'\n }],\n keyboardMoveIconContainer: {\n position: 'absolute',\n display: 'flex',\n justifyContent: 'center',\n width: '100%',\n padding: '3px 0px'\n },\n keyboardMoveIcon: {\n fontSize: fonts.xLargePlus.fontSize,\n width: '24px'\n }\n };\n};\n/** @internal */\nexport const _ModalClone = styled(ModalBase, getStyles, undefined, {\n scope: 'Modal',\n fields: ['theme', 'styles', 'enableAriaHiddenSiblings']\n});\n_ModalClone.displayName = 'Modal';\n//# sourceMappingURL=ModalClone.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { ContextualMenu, DirectionalHint, Icon, mergeStyles, Persona, PersonaSize, Stack, Text } from '@fluentui/react';\nimport React, { useMemo, useRef, useState } from 'react';\nimport { useIdentifiers } from '../identifiers';\nimport { useLocale } from '../localization';\nimport { useTheme } from '../theming';\nimport { iconContainerStyle, iconStyles, meContainerStyle, menuButtonContainerStyle, participantItemContainerStyle, participantStateMaxWidth, participantStateStringStyles } from './styles/ParticipantItem.styles';\nimport { _preventDismissOnEvent as preventDismissOnEvent } from \"../../../acs-ui-common/src\";\nimport { useId } from '@fluentui/react-hooks';\n/**\n * Component to render a calling or chat participant.\n *\n * Displays the participant's avatar, displayName and status as well as optional icons and context menu.\n *\n * @public\n */\nexport const ParticipantItem = (props) => {\n const { userId, displayName, onRenderAvatar, menuItems, onRenderIcon, presence, styles, me, onClick, showParticipantOverflowTooltip } = props;\n const [itemHovered, setItemHovered] = useState(false);\n const [itemFocused, setItemFocused] = useState(false);\n const [menuHidden, setMenuHidden] = useState(true);\n const containerRef = useRef(null);\n const theme = useTheme();\n const localeStrings = useLocale().strings.participantItem;\n const ids = useIdentifiers();\n const uniqueId = useId();\n const strings = Object.assign(Object.assign({}, localeStrings), props.strings);\n // For 'me' show empty name so avatar will get 'Person' icon, when there is no name\n const meAvatarText = (displayName === null || displayName === void 0 ? void 0 : displayName.trim()) || '';\n const avatarOptions = {\n text: me ? meAvatarText : (displayName === null || displayName === void 0 ? void 0 : displayName.trim()) || strings.displayNamePlaceholder,\n size: PersonaSize.size32,\n presence: presence,\n initialsTextColor: 'white',\n showOverflowTooltip: showParticipantOverflowTooltip,\n showUnknownPersonaCoin: !me && (!(displayName === null || displayName === void 0 ? void 0 : displayName.trim()) || displayName === strings.displayNamePlaceholder)\n };\n const avatar = onRenderAvatar ? onRenderAvatar(userId !== null && userId !== void 0 ? userId : '', avatarOptions) : React.createElement(Persona, Object.assign({ className: mergeStyles({\n // Prevents persona text from being vertically truncated if a global line height is less than 1.15.\n lineHeight: '1.15rem'\n }, styles === null || styles === void 0 ? void 0 : styles.avatar) }, avatarOptions));\n const meTextStyle = useMemo(() => mergeStyles(meContainerStyle, {\n color: theme.palette.neutralSecondary\n }, styles === null || styles === void 0 ? void 0 : styles.me), [theme.palette.neutralSecondary, styles === null || styles === void 0 ? void 0 : styles.me]);\n const contextualMenuStyle = useMemo(() => mergeStyles({\n background: theme.palette.neutralLighterAlt\n }, styles === null || styles === void 0 ? void 0 : styles.menu), [theme.palette.neutralLighterAlt, styles === null || styles === void 0 ? void 0 : styles.menu]);\n const infoContainerStyle = useMemo(() => mergeStyles(iconContainerStyle, {\n color: theme.palette.neutralTertiary,\n marginLeft: 'auto'\n }, styles === null || styles === void 0 ? void 0 : styles.iconContainer), [theme.palette.neutralTertiary, styles === null || styles === void 0 ? void 0 : styles.iconContainer]);\n const menuButton = useMemo(() => React.createElement(Stack, { horizontal: true, horizontalAlign: \"end\", className: mergeStyles(menuButtonContainerStyle), title: strings.menuTitle, \"data-ui-id\": ids.participantItemMenuButton },\n React.createElement(Icon, { iconName: itemHovered || itemFocused || !menuHidden ? 'ParticipantItemOptionsHovered' : 'ParticipantItemOptions', className: iconStyles })), [strings.menuTitle, ids.participantItemMenuButton, itemHovered, itemFocused, menuHidden]);\n const onDismissMenu = () => {\n setItemHovered(false);\n setItemFocused(false);\n setMenuHidden(true);\n };\n const participantStateString = participantStateStringTrampoline(props, strings);\n return React.createElement(\"div\", { ref: containerRef, role: 'menuitem', \"data-is-focusable\": true, \"data-ui-id\": \"participant-item\", className: mergeStyles(participantItemContainerStyle({\n localparticipant: me,\n clickable: !!menuItems && menuItems.length > 0\n }), styles === null || styles === void 0 ? void 0 : styles.root), onMouseEnter: () => setItemHovered(true), onMouseLeave: () => setItemHovered(false), onFocus: () => setItemFocused(true), onBlur: () => setItemFocused(false), onClick: () => {\n if (!participantStateString) {\n setItemHovered(true);\n setMenuHidden(false);\n onClick === null || onClick === void 0 ? void 0 : onClick(props);\n }\n }, tabIndex: 0 },\n React.createElement(Stack, { horizontal: true, className: mergeStyles({\n width: `calc(100% - ${!me && participantStateString ? participantStateMaxWidth : menuButtonContainerStyle.width})`,\n alignItems: 'center'\n }), id: uniqueId, \"aria-labelledby\": `${props.ariaLabelledBy} ${uniqueId}` },\n avatar,\n me && React.createElement(Text, { className: meTextStyle }, strings.isMeText),\n React.createElement(Stack, { horizontal: true, className: mergeStyles(infoContainerStyle) }, onRenderIcon && onRenderIcon(props))),\n !me && participantStateString ? React.createElement(Text, { \"data-ui-id\": \"participant-item-state-string\", className: mergeStyles(participantStateStringStyles) }, participantStateString) : React.createElement(\"div\", null, menuItems && menuItems.length > 0 && React.createElement(React.Fragment, null,\n menuButton,\n React.createElement(ContextualMenu, { items: menuItems, hidden: menuHidden, target: containerRef, onItemClick: onDismissMenu, onDismiss: onDismissMenu, directionalHint: DirectionalHint.bottomRightEdge, className: contextualMenuStyle, calloutProps: {\n preventDismissOnEvent\n } }))));\n};\nconst participantStateStringTrampoline = (props, strings) => {\n return undefined;\n};\n//# sourceMappingURL=ParticipantItem.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { Icon, merge, mergeStyles, PersonaPresence, Stack } from '@fluentui/react';\n/* @conditional-compile-remove(total-participant-count) */ /* @conditional-compile-remove(raise-hand) */\nimport { Text } from '@fluentui/react';\n/* @conditional-compile-remove(raise-hand) */\nimport { useTheme } from '../theming';\n/* @conditional-compile-remove(raise-hand) */\nimport { RaisedHandIcon } from './assets/RaisedHandIcon';\nimport React, { useCallback, useMemo } from 'react';\nimport { useIdentifiers } from '../identifiers';\nimport { useLocale } from '../localization';\nimport { ParticipantItem } from './ParticipantItem';\nimport { iconStyles, participantListItemStyle, participantListStyle } from './styles/ParticipantList.styles';\nconst onRenderParticipantDefault = (participant, strings, myUserId, onRenderAvatar, createParticipantMenuItems, styles, onParticipantClick, showParticipantOverflowTooltip, participantAriaLabelledBy, theme, attendeeRoleString) => {\n const callingParticipant = participant;\n let presence = undefined;\n if (callingParticipant) {\n presence = PersonaPresence.none;\n }\n const menuItems = createParticipantMenuItems && createParticipantMenuItems(participant);\n let displayName = participant.displayName;\n const onRenderIcon = (callingParticipant === null || callingParticipant === void 0 ? void 0 : callingParticipant.isScreenSharing) || (callingParticipant === null || callingParticipant === void 0 ? void 0 : callingParticipant.isMuted) || /* @conditional-compile-remove(raise-hand) */ (callingParticipant === null || callingParticipant === void 0 ? void 0 : callingParticipant.raisedHand) ? () => {\n var _a;\n return React.createElement(Stack, { horizontal: true, tokens: {\n childrenGap: '0.5rem'\n } },\n callingParticipant.raisedHand && React.createElement(Stack, { horizontal: true, tokens: {\n childrenGap: '0.2rem'\n }, style: {\n alignItems: 'center',\n padding: '0.1rem 0.2rem',\n backgroundColor: theme === null || theme === void 0 ? void 0 : theme.palette.neutralLighter,\n borderRadius: '0.3rem'\n } },\n callingParticipant.raisedHand.raisedHandOrderPosition && React.createElement(Stack.Item, null,\n React.createElement(Text, null, (_a = callingParticipant.raisedHand) === null || _a === void 0 ? void 0 : _a.raisedHandOrderPosition)),\n React.createElement(Stack.Item, null,\n React.createElement(RaisedHandIcon, null))),\n callingParticipant.isScreenSharing && React.createElement(Icon, { iconName: \"ParticipantItemScreenShareStart\", className: iconStyles, ariaLabel: strings.sharingIconLabel }),\n callingParticipant.isMuted && React.createElement(Icon, { iconName: \"ParticipantItemMicOff\", className: iconStyles, ariaLabel: strings.mutedIconLabel }));\n } : () => null;\n return React.createElement(ParticipantItem, { styles: styles, key: participant.userId, userId: participant.userId, displayName: displayName, me: myUserId ? participant.userId === myUserId : false, menuItems: menuItems, presence: presence, onRenderIcon: onRenderIcon, onRenderAvatar: onRenderAvatar, onClick: () => onParticipantClick === null || onParticipantClick === void 0 ? void 0 : onParticipantClick(participant), showParticipantOverflowTooltip: showParticipantOverflowTooltip, ariaLabelledBy: participantAriaLabelledBy });\n};\n/**\n * Sort participants by raised hand order position\n */\nconst sortParticipants = (participants) => {\n /* @conditional-compile-remove(raise-hand) */\n const isParticipantListCallParticipant = function (participant) {\n return 'raisedHand' in participant;\n };\n /* @conditional-compile-remove(raise-hand) */\n participants.sort((a, b) => {\n if (!isParticipantListCallParticipant(a) || !isParticipantListCallParticipant(b)) {\n return 0;\n }\n const callA = a;\n const callB = b;\n if (callA.raisedHand && callB.raisedHand) {\n return callA.raisedHand.raisedHandOrderPosition - callB.raisedHand.raisedHandOrderPosition;\n }\n else if (callA.raisedHand) {\n return -1;\n }\n else if (callB.raisedHand) {\n return 1;\n }\n return 0;\n });\n return participants;\n};\nconst getParticipantsForDefaultRender = (participants, excludeMe, myUserId) => {\n if (!excludeMe || !myUserId) {\n return [...participants];\n }\n const userIndex = participants.map(p => p.userId).indexOf(myUserId);\n if (userIndex === -1) {\n return [...participants];\n }\n const remoteParticipants = [...participants];\n remoteParticipants.splice(userIndex, 1);\n return remoteParticipants;\n};\n/**\n * Component to render all calling or chat participants.\n *\n * By default, each participant is rendered with {@link ParticipantItem}. See {@link ParticipantListProps.onRenderParticipant} to override.\n *\n * @public\n */\nexport const ParticipantList = (props) => {\n var _a, _b, _c, _d;\n const { excludeMe = false, myUserId, participants, onRemoveParticipant, onRenderAvatar, onRenderParticipant, onFetchParticipantMenuItems, showParticipantOverflowTooltip, participantAriaLabelledBy } = props;\n /* @conditional-compile-remove(raise-hand) */\n const theme = useTheme();\n const ids = useIdentifiers();\n const participantItemStrings = useLocale().strings.participantItem;\n const displayedParticipants = useMemo(() => {\n return onRenderParticipant ? participants : getParticipantsForDefaultRender(participants, excludeMe, myUserId);\n }, [participants, excludeMe, myUserId, onRenderParticipant]);\n sortParticipants(displayedParticipants);\n const createParticipantMenuItems = useCallback((participant) => {\n var _a, _b;\n let menuItems = [];\n const participantIsRemovable = participant.isRemovable;\n if (participant.userId !== myUserId && onRemoveParticipant && participantIsRemovable) {\n menuItems.push({\n key: 'remove',\n text: participantItemStrings.removeButtonLabel,\n onClick: () => onRemoveParticipant(participant.userId),\n itemProps: {\n styles: (_b = (_a = props.styles) === null || _a === void 0 ? void 0 : _a.participantItemStyles) === null || _b === void 0 ? void 0 : _b.participantSubMenuItemsStyles\n },\n 'data-ui-id': ids.participantListRemoveParticipantButton\n });\n }\n if (onFetchParticipantMenuItems) {\n menuItems = onFetchParticipantMenuItems(participant.userId, myUserId, menuItems);\n }\n return menuItems;\n }, [ids.participantListRemoveParticipantButton, myUserId, onFetchParticipantMenuItems, onRemoveParticipant, (_b = (_a = props.styles) === null || _a === void 0 ? void 0 : _a.participantItemStyles) === null || _b === void 0 ? void 0 : _b.participantSubMenuItemsStyles, /* @conditional-compile-remove(raise-hand) */ participantItemStrings.removeButtonLabel]);\n const participantItemStyles = useMemo(() => { var _a; return merge(participantListItemStyle, (_a = props.styles) === null || _a === void 0 ? void 0 : _a.participantItemStyles); }, [(_c = props.styles) === null || _c === void 0 ? void 0 : _c.participantItemStyles]);\n return React.createElement(Stack, { \"data-ui-id\": ids.participantList, className: mergeStyles(participantListStyle, (_d = props.styles) === null || _d === void 0 ? void 0 : _d.root), role: 'menu' }, displayedParticipants.map((participant) => onRenderParticipant ? onRenderParticipant(participant) : onRenderParticipantDefault(participant, participantItemStrings, myUserId, onRenderAvatar, createParticipantMenuItems, participantItemStyles, props.onParticipantClick, showParticipantOverflowTooltip, participantAriaLabelledBy, /* @conditional-compile-remove(raise-hand) */ theme)));\n};\n//# sourceMappingURL=ParticipantList.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { ContextualMenuItemType, merge } from '@fluentui/react';\nimport { _formatString } from \"../../../acs-ui-common/src\";\nimport copy from 'copy-to-clipboard';\nimport React, { useCallback, useMemo, useState } from 'react';\nimport { ParticipantList } from './ParticipantList';\nimport { participantsButtonMenuPropsStyle } from './styles/ControlBar.styles';\nimport { useLocale } from '../localization';\nimport { ControlBarButton } from './ControlBarButton';\nimport { useIdentifiers } from '../identifiers';\nimport { _HighContrastAwareIcon } from './HighContrastAwareIcon';\nimport { _preventDismissOnEvent as preventDismissOnEvent } from \"../../../acs-ui-common/src\";\nimport { Announcer } from './Announcer';\n/**\n * A button to show a menu with calling or chat participants.\n *\n * Can be used with {@link ControlBar}.\n *\n * This button contains dropdown menu items defined through its property `menuProps`. By default, it can display the number of remote participants with the full list\n * as sub-menu and an option to mute all participants, as well as a copy-to-clipboard button to copy the call invitation URL.\n * This `menuProps` can be fully redefined and its property is of type [IContextualMenuProps](https://developer.microsoft.com/fluentui#/controls/web/contextualmenu#IContextualMenuProps).\n *\n * @public\n */\nexport const ParticipantsButton = (props) => {\n var _a, _b, _c, _d;\n const { callInvitationURL, styles, onMuteAll, onRenderIcon, onRenderParticipantList, participants, myUserId, excludeMe, onRenderParticipant, onRenderAvatar, onRemoveParticipant, onFetchParticipantMenuItems, showParticipantOverflowTooltip } = props;\n const disabled = props.disabled;\n const [copyInviteLinkAnnouncerStrings, setCopyInviteLinkAnnouncerStrings] = useState('');\n const onRenderPeopleIcon = () => React.createElement(_HighContrastAwareIcon, { disabled: disabled, iconName: \"ControlButtonParticipants\" });\n const ids = useIdentifiers();\n const onMuteAllCallback = useCallback(() => {\n if (onMuteAll) {\n onMuteAll();\n }\n }, [onMuteAll]);\n const defaultParticipantList = useCallback(() => {\n var _a;\n return React.createElement(ParticipantList, { participants: participants, myUserId: myUserId, excludeMe: excludeMe, onRenderParticipant: onRenderParticipant, onRenderAvatar: onRenderAvatar, onRemoveParticipant: onRemoveParticipant, onFetchParticipantMenuItems: onFetchParticipantMenuItems, styles: (_a = styles === null || styles === void 0 ? void 0 : styles.menuStyles) === null || _a === void 0 ? void 0 : _a.participantListStyles, showParticipantOverflowTooltip: showParticipantOverflowTooltip });\n }, [excludeMe, myUserId, onRemoveParticipant, onRenderAvatar, onRenderParticipant, participants, (_a = styles === null || styles === void 0 ? void 0 : styles.menuStyles) === null || _a === void 0 ? void 0 : _a.participantListStyles, onFetchParticipantMenuItems, showParticipantOverflowTooltip]);\n const onCopyCallback = useCallback(() => {\n if (callInvitationURL) {\n return copy(callInvitationURL);\n }\n return false;\n }, [callInvitationURL]);\n const localeStrings = useLocale().strings.participantsButton;\n const strings = useMemo(() => (Object.assign(Object.assign({}, localeStrings), props.strings)), [localeStrings, props.strings]);\n const participantCount = participants.length;\n /**\n * sets the announcement string for when the link is copied.\n */\n const toggleAnnouncerString = useCallback(() => {\n setCopyInviteLinkAnnouncerStrings(strings.copyInviteLinkActionedAriaLabel);\n /**\n * Clears the announcer string after the user clicks the\n * copyInviteLink button allowing it to be re-announced.\n */\n setTimeout(() => {\n setCopyInviteLinkAnnouncerStrings('');\n }, 3000);\n }, [strings.copyInviteLinkActionedAriaLabel]);\n const generateDefaultParticipantsSubMenuProps = useCallback(() => {\n var _a;\n const items = [];\n if (participantCount > 0) {\n items.push({\n key: 'participantListMenuItemKey',\n onRender: onRenderParticipantList !== null && onRenderParticipantList !== void 0 ? onRenderParticipantList : defaultParticipantList\n });\n items.push({\n key: 'participantsDivider1',\n itemType: ContextualMenuItemType.Divider\n });\n if (onMuteAll) {\n items.push({\n key: 'muteAllKey',\n text: strings.muteAllButtonLabel,\n title: strings.muteAllButtonLabel,\n styles: (_a = styles === null || styles === void 0 ? void 0 : styles.menuStyles) === null || _a === void 0 ? void 0 : _a.menuItemStyles,\n iconProps: {\n iconName: 'MicOff2'\n },\n onClick: onMuteAllCallback\n });\n }\n }\n return items;\n }, [participantCount, onRenderParticipantList, defaultParticipantList, onMuteAll, strings.muteAllButtonLabel, (_b = styles === null || styles === void 0 ? void 0 : styles.menuStyles) === null || _b === void 0 ? void 0 : _b.menuItemStyles, onMuteAllCallback]);\n const defaultMenuProps = useMemo(() => {\n var _a, _b;\n const menuProps = {\n title: strings.menuHeader,\n ariaLabel: strings.menuHeader,\n styles: merge(participantsButtonMenuPropsStyle, styles === null || styles === void 0 ? void 0 : styles.menuStyles),\n items: [],\n calloutProps: {\n preventDismissOnEvent\n }\n };\n if (participantCount > 0) {\n const participantIds = participants.map(p => p.userId);\n let participantCountWithoutMe = participantIds.length;\n if (excludeMe) {\n participantCountWithoutMe -= 1;\n }\n menuProps.items.push({\n key: 'participantCountKey',\n name: _formatString(strings.participantsListButtonLabel, {\n numParticipants: `${participantCountWithoutMe}`\n }),\n itemProps: {\n styles: (_a = styles === null || styles === void 0 ? void 0 : styles.menuStyles) === null || _a === void 0 ? void 0 : _a.menuItemStyles\n },\n iconProps: {\n iconName: 'People'\n },\n subMenuProps: {\n items: generateDefaultParticipantsSubMenuProps(),\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 maxWidth: '100%'\n }\n },\n style: {\n maxHeight: '20rem'\n },\n // Disable dismiss on resize to work around a couple Fluent UI bugs\n // See reasoning in the props for the parent menu.\n preventDismissOnEvent\n }\n },\n 'data-ui-id': ids.participantButtonPeopleMenuItem\n });\n }\n if (callInvitationURL) {\n menuProps.items.push({\n key: 'InviteLinkKey',\n name: strings.copyInviteLinkButtonLabel,\n title: strings.copyInviteLinkButtonLabel,\n itemProps: {\n styles: (_b = styles === null || styles === void 0 ? void 0 : styles.menuStyles) === null || _b === void 0 ? void 0 : _b.menuItemStyles\n },\n iconProps: {\n iconName: 'Link'\n },\n onClick: () => {\n onCopyCallback();\n toggleAnnouncerString();\n }\n });\n }\n return menuProps;\n }, [strings.menuHeader, strings.participantsListButtonLabel, strings.copyInviteLinkButtonLabel, styles === null || styles === void 0 ? void 0 : styles.menuStyles, participantCount, callInvitationURL, participants, excludeMe, ids.participantButtonPeopleMenuItem, generateDefaultParticipantsSubMenuProps, onCopyCallback, toggleAnnouncerString]);\n return React.createElement(React.Fragment, null,\n React.createElement(Announcer, { announcementString: copyInviteLinkAnnouncerStrings, ariaLive: 'polite' }),\n React.createElement(ControlBarButton, Object.assign({}, props, { disabled: disabled, menuProps: (_c = props.menuProps) !== null && _c !== void 0 ? _c : defaultMenuProps, menuIconProps: {\n hidden: true\n }, onRenderIcon: onRenderIcon !== null && onRenderIcon !== void 0 ? onRenderIcon : onRenderPeopleIcon, strings: strings, labelKey: (_d = props.labelKey) !== null && _d !== void 0 ? _d : 'participantsButtonLabel' })));\n};\n//# sourceMappingURL=ParticipantsButton.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { memoizeFunction, Stack } from '@fluentui/react';\nimport React from 'react';\nimport { useTheme } from '../../theming/FluentThemeProvider';\n/** @private */\nexport const PictureInPictureInPicturePrimaryTile = (props) => {\n const boxShadow = useTheme().effects.elevation8;\n return React.createElement(PictureInPictureInPictureTile, { styles: primaryTileStyles(props.orientation, boxShadow) }, props.children);\n};\n/** @private */\nexport const PictureInPictureInPictureSecondaryTile = (props) => React.createElement(PictureInPictureInPictureTile, { styles: secondaryTileStyles(props.orientation) }, props.children);\nconst PictureInPictureInPictureTile = (props) => React.createElement(Stack, { styles: props.styles }, props.children);\nconst primaryTileStyles = memoizeFunction((orientation, themeElevation) => ({\n root: {\n borderRadius: '0.25rem',\n height: orientation === 'landscape' ? '5.5rem' : '8rem',\n width: orientation === 'landscape' ? '8rem' : '5.5rem',\n boxShadow: themeElevation,\n // PiPiP tiles were not designed to host scrollable content. If removed check no scrollbar is showing in e2e tests\n overflow: 'hidden'\n }\n}));\nconst secondaryTileStyles = memoizeFunction((orientation) => ({\n root: {\n borderRadius: '0.25rem',\n height: orientation === 'landscape' ? '1.625rem' : '2rem',\n width: orientation === 'landscape' ? '2rem' : '1.625rem',\n // PiPiP tiles were not designed to host scrollable content. If removed check no scrollbar is showing in e2e tests\n overflow: 'hidden'\n }\n}));\n//# sourceMappingURL=PictureInPictureInPictureTile.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport React from 'react';\nimport { submitWithKeyboard } from '../utils/keyboardNavigation';\nimport { PictureInPictureInPicturePrimaryTile, PictureInPictureInPictureSecondaryTile } from './PictureInPictureInPictureTile';\n/**\n * Component that displays a video feed for use as a Picture-in-Picture style component.\n * It contains a secondary video feed resulting in an inner Picture-in-Picture style feed.\n *\n * @remarks\n * The double nature of the Picture-in-Picture styles is where this component gets its name; Picture-in-Picture-in-Picture.\n *\n * @internal\n */\nexport const _PictureInPictureInPicture = (props) => {\n return React.createElement(PictureInPictureInPictureContainer, { onClick: props.onClick, primaryView: React.createElement(PictureInPictureInPicturePrimaryTile, Object.assign({}, props.primaryTile)), secondaryView: props.secondaryTile && React.createElement(PictureInPictureInPictureSecondaryTile, Object.assign({}, props.secondaryTile)), ariaLabel: props.strings.rootAriaLabel });\n};\n/**\n * Container for the picture in picture in picture component.\n * This governs positioning and floating of the secondary PiP.\n */\nconst PictureInPictureInPictureContainer = (props) => {\n const onKeyPress = (e) => props.onClick && submitWithKeyboard(e, props.onClick);\n return React.createElement(\"aside\", { style: tileContainerStyles, onClick: props.onClick, onKeyPress: onKeyPress, \"aria-label\": props.ariaLabel, tabIndex: props.onClick ? 0 : -1, \"data-ui-id\": \"picture-in-picture-in-picture-root\" },\n props.primaryView,\n React.createElement(\"div\", { style: secondaryTileFloatingStyles }, props.secondaryView));\n};\nconst tileContainerStyles = {\n display: 'flex',\n width: 'min-content',\n position: 'relative',\n cursor: 'pointer'\n};\nconst secondaryTileFloatingStyles = {\n // The secondary tile should float above the primary tile, aligned to the bottom right.\n position: 'absolute',\n bottom: '0.125rem',\n right: '0.125rem'\n};\n//# sourceMappingURL=PictureInPictureInPicture.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n/* @conditional-compile-remove(raise-hand) */\nimport React from 'react';\n/* @conditional-compile-remove(raise-hand) */\nimport { useLocale } from '../localization';\n/* @conditional-compile-remove(raise-hand) */\nimport { ControlBarButton } from './ControlBarButton';\n/* @conditional-compile-remove(raise-hand) */\nimport { DefaultPalette, mergeStyles, useTheme } from '@fluentui/react';\n/* @conditional-compile-remove(raise-hand) */\nimport { _HighContrastAwareIcon } from './HighContrastAwareIcon';\n/* @conditional-compile-remove(raise-hand) */\n/**\n * A button to start / stop screen sharing.\n *\n * Can be used with {@link ControlBar}.\n *\n * @public\n */\nexport const RaiseHandButton = (props) => {\n var _a, _b, _c, _d;\n const localeStrings = useLocale().strings.raiseHandButton;\n const strings = Object.assign(Object.assign({}, localeStrings), props.strings);\n const theme = useTheme();\n const styles = raiseHandButtonStyles(theme);\n const onRenderRaiseHandIcon = () => React.createElement(_HighContrastAwareIcon, { disabled: props.disabled, iconName: \"ControlButtonRaiseHand\" });\n const onRenderLowerHandIcon = () => React.createElement(_HighContrastAwareIcon, { disabled: props.disabled, iconName: \"ControlButtonLowerHand\" });\n return React.createElement(ControlBarButton, Object.assign({}, props, { className: mergeStyles(styles, props.styles), onClick: (_a = props.onToggleRaiseHand) !== null && _a !== void 0 ? _a : props.onClick, onRenderOnIcon: (_b = props.onRenderOnIcon) !== null && _b !== void 0 ? _b : onRenderLowerHandIcon, onRenderOffIcon: (_c = props.onRenderOffIcon) !== null && _c !== void 0 ? _c : onRenderRaiseHandIcon, strings: strings, labelKey: (_d = props.labelKey) !== null && _d !== void 0 ? _d : 'raiseHandButtonLabel', disabled: props.disabled }));\n};\n/* @conditional-compile-remove(raise-hand) */\nconst raiseHandButtonStyles = (theme) => ({\n rootChecked: {\n background: theme.palette.themePrimary,\n color: DefaultPalette.white,\n ':focus::after': {\n outlineColor: `${DefaultPalette.white}`\n }\n },\n rootCheckedHovered: {\n background: theme.palette.themePrimary,\n color: DefaultPalette.white,\n ':focus::after': {\n outlineColor: `${DefaultPalette.white}`\n }\n },\n labelChecked: {\n color: DefaultPalette.white\n }\n});\n//# sourceMappingURL=RaiseHandButton.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { Layer, Stack } from '@fluentui/react';\nimport React, { useMemo } from 'react';\n/* @conditional-compile-remove(pinned-participants) */\nimport { useCallback } from 'react';\nimport { _DrawerMenu } from './Drawer';\nimport { StreamMedia } from './StreamMedia';\nimport { drawerMenuWrapperStyles, remoteVideoTileWrapperStyle } from './VideoGallery/styles/RemoteVideoTile.styles';\nimport { useRemoteVideoStreamLifecycleMaintainer } from './VideoGallery/useVideoStreamLifecycleMaintainer';\nimport { useVideoTileContextualMenuProps } from './VideoGallery/useVideoTileContextualMenuProps';\nimport { VideoTile } from './VideoTile';\n/**\n * A memoized version of VideoTile for rendering remote participants. React.memo is used for a performance\n * boost by memoizing the same rendered component to avoid rerendering a VideoTile when its position in the\n * array changes causing a rerender in the parent component. https://reactjs.org/docs/react-api.html#reactmemo\n *\n * @internal\n */\nexport const _RemoteVideoTile = React.memo((props) => {\n var _a;\n const { isAvailable, isReceiving = true, \n // default to true to prevent any breaking change\n isScreenSharingOn, onCreateRemoteStreamView, onDisposeRemoteStreamView, remoteVideoViewOptions, renderElement, userId, onRenderAvatar, showMuteIndicator, remoteParticipant, participantState, menuKind, isPinned, onPinParticipant, onUnpinParticipant, onUpdateScalingMode, disablePinMenuItem, toggleAnnouncerString, strings } = props;\n const remoteVideoStreamProps = useMemo(() => ({\n isMirrored: remoteVideoViewOptions === null || remoteVideoViewOptions === void 0 ? void 0 : remoteVideoViewOptions.isMirrored,\n isScreenSharingOn,\n isStreamAvailable: isAvailable,\n isStreamReceiving: isReceiving,\n onCreateRemoteStreamView,\n onDisposeRemoteStreamView,\n remoteParticipantId: userId,\n renderElementExists: !!renderElement,\n scalingMode: remoteVideoViewOptions === null || remoteVideoViewOptions === void 0 ? void 0 : remoteVideoViewOptions.scalingMode\n }), [isAvailable, isReceiving, isScreenSharingOn, onCreateRemoteStreamView, onDisposeRemoteStreamView, remoteVideoViewOptions === null || remoteVideoViewOptions === void 0 ? void 0 : remoteVideoViewOptions.isMirrored, remoteVideoViewOptions === null || remoteVideoViewOptions === void 0 ? void 0 : remoteVideoViewOptions.scalingMode, renderElement, userId]);\n // Handle creating, destroying and updating the video stream as necessary\n const createVideoStreamResult = useRemoteVideoStreamLifecycleMaintainer(remoteVideoStreamProps);\n const contextualMenuProps = useVideoTileContextualMenuProps({\n remoteParticipant,\n view: createVideoStreamResult === null || createVideoStreamResult === void 0 ? void 0 : createVideoStreamResult.view,\n /* @conditional-compile-remove(pinned-participants) */\n strings: Object.assign({}, props.strings),\n isPinned,\n onPinParticipant,\n onUnpinParticipant,\n onUpdateScalingMode,\n disablePinMenuItem,\n toggleAnnouncerString\n });\n const videoTileContextualMenuProps = useMemo(() => {\n if (menuKind !== 'contextual') {\n return {};\n }\n return videoTileContextualMenuPropsTrampoline(contextualMenuProps);\n }, [contextualMenuProps, menuKind]);\n const showLoadingIndicator = isAvailable && isReceiving === false && participantState !== 'Disconnected';\n const [drawerMenuItemProps, setDrawerMenuItemProps] = React.useState([]);\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(StreamMedia, { videoStreamElement: renderElement, loadingState: showLoadingIndicator ? 'loading' : 'none' });\n }, [renderElement, showLoadingIndicator]);\n /* @conditional-compile-remove(pinned-participants) */\n const onKeyDown = useCallback((e) => {\n if (e.key === 'Enter') {\n setDrawerMenuItemProps(convertContextualMenuItemsToDrawerMenuItemProps(contextualMenuProps, () => setDrawerMenuItemProps([])));\n }\n }, [setDrawerMenuItemProps, contextualMenuProps]);\n let displayName = remoteParticipant.displayName || (strings === null || strings === void 0 ? void 0 : strings.displayNamePlaceholder);\n return React.createElement(Stack\n /* @conditional-compile-remove(pinned-participants) */ , { \n /* @conditional-compile-remove(pinned-participants) */ tabIndex: menuKind === 'drawer' ? 0 : undefined, \n /* @conditional-compile-remove(pinned-participants) */ onKeyDown: menuKind === 'drawer' ? onKeyDown : undefined, style: remoteVideoTileWrapperStyle },\n React.createElement(VideoTile, Object.assign({ key: userId, userId: userId, initialsName: (_a = remoteParticipant.displayName) !== null && _a !== void 0 ? _a : '', renderElement: renderVideoStreamElement, displayName: displayName, onRenderPlaceholder: onRenderAvatar, isMuted: remoteParticipant.isMuted, \n /* @conditional-compile-remove(raise-hand) */ raisedHand: remoteParticipant.raisedHand, isSpeaking: remoteParticipant.isSpeaking, showMuteIndicator: showMuteIndicator, personaMinSize: props.personaMinSize, showLabel: props.showLabel }, videoTileContextualMenuProps, { \n /* @conditional-compile-remove(pinned-participants) */ isPinned: props.isPinned, \n /* @conditional-compile-remove(pinned-participants) */ onLongTouch: () => setDrawerMenuItemProps(convertContextualMenuItemsToDrawerMenuItemProps(contextualMenuProps, () => setDrawerMenuItemProps([]))) })),\n drawerMenuItemProps.length > 0 && React.createElement(Layer, { hostId: props.drawerMenuHostId },\n React.createElement(Stack, { styles: drawerMenuWrapperStyles },\n React.createElement(_DrawerMenu, { onLightDismiss: () => setDrawerMenuItemProps([]), items: drawerMenuItemProps, heading: remoteParticipant.displayName }))));\n});\nconst videoTileContextualMenuPropsTrampoline = (contextualMenuProps) => {\n if (!contextualMenuProps) {\n return {};\n }\n /* @conditional-compile-remove(pinned-participants) */\n return {\n contextualMenu: contextualMenuProps\n };\n return {};\n};\n/* @conditional-compile-remove(pinned-participants) */\nconst convertContextualMenuItemsToDrawerMenuItemProps = (contextualMenuProps, onLightDismiss) => {\n if (!contextualMenuProps) {\n return [];\n }\n return contextualMenuProps.items.map(item => {\n return {\n itemKey: item.key,\n text: item.text,\n iconProps: item.iconProps,\n disabled: item.disabled,\n onItemClick: () => {\n var _a;\n (_a = item.onClick) === null || _a === void 0 ? void 0 : _a.call(item);\n onLightDismiss === null || onLightDismiss === void 0 ? void 0 : onLightDismiss();\n }\n };\n });\n};\n//# sourceMappingURL=RemoteVideoTile.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { mergeStyles } from '@fluentui/react';\nimport React, { useRef } from 'react';\nimport { HorizontalGallery } from './HorizontalGallery';\nimport { _useContainerWidth } from './utils/responsive';\nimport { calculateHorizontalChildrenPerPage } from './VideoGallery/utils/OverflowGalleryUtils';\n/**\n * Wrapped HorizontalGallery that adjusts the number of items per page based on the\n * available width obtained from a ResizeObserver, width per child, gap width, and button width\n */\nexport const ResponsiveHorizontalGallery = (props) => {\n const { gapWidthRem, buttonWidthRem = 0, onFetchTilesToRender, onChildrenPerPageChange } = props;\n const containerRef = useRef(null);\n const containerWidth = _useContainerWidth(containerRef);\n const leftPadding = containerRef.current ? parseFloat(getComputedStyle(containerRef.current).paddingLeft) : 0;\n const rightPadding = containerRef.current ? parseFloat(getComputedStyle(containerRef.current).paddingRight) : 0;\n const childrenPerPage = calculateHorizontalChildrenPerPage({\n numberOfChildren: React.Children.count(props.children),\n containerWidth: (containerWidth !== null && containerWidth !== void 0 ? containerWidth : 0) - leftPadding - rightPadding,\n gapWidthRem,\n buttonWidthRem\n });\n onChildrenPerPageChange === null || onChildrenPerPageChange === void 0 ? void 0 : onChildrenPerPageChange(childrenPerPage);\n return React.createElement(\"div\", { \"data-ui-id\": \"responsive-horizontal-gallery\", ref: containerRef, className: mergeStyles(props.containerStyles) },\n React.createElement(HorizontalGallery, { childrenPerPage: childrenPerPage, styles: props.horizontalGalleryStyles, onFetchTilesToRender: onFetchTilesToRender }, props.children));\n};\n//# sourceMappingURL=ResponsiveHorizontalGallery.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { mergeStyles } from '@fluentui/react';\nimport React, { useRef } from 'react';\nimport { _useContainerHeight } from './utils/responsive';\nimport { VerticalGallery } from './VerticalGallery';\nimport { calculateVerticalChildrenPerPage } from './VideoGallery/utils/OverflowGalleryUtils';\n/**\n * Responsive container for the VerticalGallery Component. Performs calculations for number of children\n * for the VerticalGallery\n * @param props\n *\n * @beta\n */\nexport const ResponsiveVerticalGallery = (props) => {\n var _a;\n const { children, containerStyles, verticalGalleryStyles, gapHeightRem, controlBarHeightRem, isShort, onFetchTilesToRender, onChildrenPerPageChange } = props;\n const containerRef = useRef(null);\n const containerHeight = _useContainerHeight(containerRef);\n const topPadding = containerRef.current ? parseFloat(getComputedStyle(containerRef.current).paddingTop) : 0;\n const bottomPadding = containerRef.current ? parseFloat(getComputedStyle(containerRef.current).paddingBottom) : 0;\n const childrenPerPage = calculateVerticalChildrenPerPage({\n numberOfChildren: (_a = React.Children.count(children)) !== null && _a !== void 0 ? _a : 0,\n containerHeight: (containerHeight !== null && containerHeight !== void 0 ? containerHeight : 0) - topPadding - bottomPadding,\n gapHeightRem,\n controlBarHeight: controlBarHeightRem !== null && controlBarHeightRem !== void 0 ? controlBarHeightRem : 2,\n isShort: isShort !== null && isShort !== void 0 ? isShort : false\n });\n onChildrenPerPageChange === null || onChildrenPerPageChange === void 0 ? void 0 : onChildrenPerPageChange(childrenPerPage);\n return React.createElement(\"div\", { \"data-ui-id\": \"responsive-vertical-gallery\", ref: containerRef, className: mergeStyles(containerStyles) },\n React.createElement(VerticalGallery, { childrenPerPage: childrenPerPage, styles: verticalGalleryStyles, onFetchTilesToRender: onFetchTilesToRender }, children));\n};\n//# sourceMappingURL=ResponsiveVerticalGallery.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport React from 'react';\nimport { useLocale } from '../localization';\nimport { ControlBarButton } from './ControlBarButton';\nimport { DefaultPalette, mergeStyles, useTheme } from '@fluentui/react';\nimport { _HighContrastAwareIcon } from './HighContrastAwareIcon';\n/**\n * A button to start / stop screen sharing.\n *\n * Can be used with {@link ControlBar}.\n *\n * @public\n */\nexport const ScreenShareButton = (props) => {\n var _a, _b, _c, _d;\n const localeStrings = useLocale().strings.screenShareButton;\n const strings = Object.assign(Object.assign({}, localeStrings), props.strings);\n const theme = useTheme();\n const styles = screenshareButtonStyles(theme);\n const onRenderScreenShareOnIcon = () => React.createElement(_HighContrastAwareIcon, { disabled: props.disabled, iconName: \"ControlButtonScreenShareStop\" });\n const onRenderScreenShareOffIcon = () => React.createElement(_HighContrastAwareIcon, { disabled: props.disabled, iconName: \"ControlButtonScreenShareStart\" });\n return React.createElement(ControlBarButton, Object.assign({}, props, { className: mergeStyles(styles, props.styles), onClick: (_a = props.onToggleScreenShare) !== null && _a !== void 0 ? _a : props.onClick, onRenderOnIcon: (_b = props.onRenderOnIcon) !== null && _b !== void 0 ? _b : onRenderScreenShareOnIcon, onRenderOffIcon: (_c = props.onRenderOffIcon) !== null && _c !== void 0 ? _c : onRenderScreenShareOffIcon, strings: strings, labelKey: (_d = props.labelKey) !== null && _d !== void 0 ? _d : 'screenShareButtonLabel', disabled: props.disabled }));\n};\nconst screenshareButtonStyles = (theme) => ({\n rootChecked: {\n background: theme.palette.themePrimary,\n color: DefaultPalette.white,\n ':focus::after': {\n outlineColor: `${DefaultPalette.white} !important`\n },\n // added !important to avoid override by FluentUI button styles\n '@media (forced-colors: active)': {\n border: '1px solid',\n borderColor: theme.palette.black\n }\n },\n rootCheckedHovered: {\n background: theme.palette.themePrimary,\n color: DefaultPalette.white,\n ':focus::after': {\n outlineColor: `${DefaultPalette.white} !important`\n },\n // added !important to avoid override by FluentUI button styles\n '@media (forced-colors: active)': {\n border: '1px solid',\n borderColor: theme.palette.black\n }\n },\n labelChecked: {\n color: DefaultPalette.white\n }\n});\n//# sourceMappingURL=ScreenShareButton.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { MessageBar, MessageBarType } from '@fluentui/react';\nimport React, { useEffect } from 'react';\nimport { Announcer } from './Announcer';\n/**\n * @private\n */\nexport const SendBoxErrorBar = (props) => {\n const { error, dismissAfterMs, onDismiss } = props;\n const [errorMessage, setErrorMessage] = React.useState(error === null || error === void 0 ? void 0 : error.message);\n // Using `any` because `NodeJS.Timeout` here will cause `declaration error` with jest.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const timeoutRef = React.useRef();\n React.useEffect(() => {\n setErrorMessage(error === null || error === void 0 ? void 0 : error.message);\n }, [error]);\n useEffect(() => {\n if (error && dismissAfterMs !== undefined) {\n timeoutRef.current = setTimeout(() => {\n setErrorMessage(undefined);\n onDismiss && onDismiss();\n }, dismissAfterMs);\n }\n return () => {\n timeoutRef.current && clearTimeout(timeoutRef.current);\n };\n }, [dismissAfterMs, onDismiss, error]);\n if (errorMessage) {\n return React.createElement(React.Fragment, null,\n React.createElement(Announcer, { announcementString: errorMessage, ariaLive: 'polite' }),\n React.createElement(MessageBar, { messageBarType: MessageBarType.warning, styles: {\n iconContainer: {\n display: 'none'\n }\n } }, errorMessage));\n }\n else {\n return React.createElement(React.Fragment, null);\n }\n};\n//# sourceMappingURL=SendBoxErrorBar.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport React from 'react';\nimport { SendBoxErrorBar } from './SendBoxErrorBar';\n/**\n * @private\n */\nexport const SendBoxErrors = (props) => {\n const { fileUploadError, fileUploadsPendingError } = props;\n const errorToDisplay = React.useMemo(() => {\n if (fileUploadError && fileUploadsPendingError) {\n return fileUploadError.timestamp > fileUploadsPendingError.timestamp ? fileUploadError : fileUploadsPendingError;\n }\n return fileUploadError || fileUploadsPendingError;\n }, [fileUploadError, fileUploadsPendingError]);\n return React.createElement(SendBoxErrorBar, { error: errorToDisplay, dismissAfterMs: 10 * 1000 });\n};\n//# sourceMappingURL=SendBoxErrors.js.map","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport React, { useState, useMemo, useCallback } from 'react';\nimport { mergeStyles, concatStyleSets, Icon, Stack } from '@fluentui/react';\nimport { sendButtonStyle, sendIconStyle, sendBoxWrapperStyles, borderAndBoxShadowStyle } from './styles/SendBox.styles';\nimport { useTheme } from '../theming';\nimport { useLocale } from '../localization';\nimport { useIdentifiers } from '../identifiers';\nimport { InputBoxButton, InputBoxComponent } from './InputBoxComponent';\nimport { SendBoxErrors } from './SendBoxErrors';\nconst EMPTY_MESSAGE_REGEX = /^\\s*$/;\nconst MAXIMUM_LENGTH_OF_MESSAGE = 8000;\n/**\n * Component for typing and sending messages.\n *\n * Supports sending typing notification when user starts entering text.\n * Supports an optional message below the text input field.\n *\n * @public\n */\nexport const SendBox = (props) => {\n const { disabled, systemMessage, supportNewline, onSendMessage, onTyping, onRenderIcon, onRenderSystemMessage, styles, autoFocus } = props;\n const theme = useTheme();\n const localeStrings = useLocale().strings.sendBox;\n const strings = Object.assign(Object.assign({}, localeStrings), props.strings);\n const ids = useIdentifiers();\n const activeFileUploads = activeFileUploadsTrampoline(props);\n const [textValue, setTextValue] = useState('');\n const [textValueOverflow, setTextValueOverflow] = useState(false);\n const sendTextFieldRef = React.useRef(null);\n const [fileUploadsPendingError, setFileUploadsPendingError] = useState(undefined);\n const sendMessageOnClick = () => {\n var _a;\n // don't send a message when disabled\n if (disabled || textValueOverflow) {\n return;\n }\n // Don't send message until all files have been uploaded successfully\n setFileUploadsPendingError(undefined);\n if (hasIncompleteFileUploads(props)) {\n return;\n }\n const message = textValue;\n // we don't want to send empty messages including spaces, newlines, tabs\n // Message can be empty if there is a valid file upload\n if (!EMPTY_MESSAGE_REGEX.test(message) || hasFile(props)) {\n onSendMessage && onSendMessage(sanitizeText(message));\n setTextValue('');\n }\n (_a = sendTextFieldRef.current) === null || _a === void 0 ? void 0 : _a.focus();\n };\n const setText = (newValue) => {\n if (newValue === undefined) {\n return;\n }\n if (newValue.length > MAXIMUM_LENGTH_OF_MESSAGE) {\n setTextValueOverflow(true);\n }\n else {\n setTextValueOverflow(false);\n }\n setTextValue(newValue);\n };\n const textTooLongMessage = textValueOverflow ? strings.textTooLong : undefined;\n const errorMessage = systemMessage !== null && systemMessage !== void 0 ? systemMessage : textTooLongMessage;\n const mergedSendButtonStyle = useMemo(() => mergeStyles(sendButtonStyle, styles === null || styles === void 0 ? void 0 : styles.sendMessageIconContainer), [styles === null || styles === void 0 ? void 0 : styles.sendMessageIconContainer]);\n const mergedStyles = useMemo(() => concatStyleSets(styles), [styles]);\n const hasText = !!textValue;\n const hasTextOrFile = hasText || hasFile(props);\n const mergedSendIconStyle = useMemo(() => mergeStyles(sendIconStyle, {\n color: !!errorMessage || !hasTextOrFile ? theme.palette.neutralTertiary : theme.palette.themePrimary\n }, styles === null || styles === void 0 ? void 0 : styles.sendMessageIcon), [errorMessage, hasTextOrFile, theme, styles === null || styles === void 0 ? void 0 : styles.sendMessageIcon]);\n const onRenderSendIcon = useCallback((isHover) => onRenderIcon ? onRenderIcon(isHover) : React.createElement(Icon, { iconName: isHover && textValue ? 'SendBoxSendHovered' : 'SendBoxSend', className: mergedSendIconStyle }), [mergedSendIconStyle, onRenderIcon, textValue]);\n // Ensure that errors are cleared when there are no files in sendBox\n React.useEffect(() => {\n if (!(activeFileUploads === null || activeFileUploads === void 0 ? void 0 : activeFileUploads.filter(upload => !upload.error).length)) {\n setFileUploadsPendingError(undefined);\n }\n }, [activeFileUploads]);\n const sendBoxErrorsProps = useMemo(() => {\n var _a;\n return {\n fileUploadsPendingError: fileUploadsPendingError,\n fileUploadError: (_a = activeFileUploads === null || activeFileUploads === void 0 ? void 0 : activeFileUploads.filter(fileUpload => fileUpload.error).pop()) === null || _a === void 0 ? void 0 : _a.error\n };\n }, [activeFileUploads, fileUploadsPendingError]);\n return React.createElement(Stack, { className: mergeStyles(sendBoxWrapperStyles, {\n overflow: 'visible'\n } // This is needed for the mention popup to be visible\n ) },\n React.createElement(SendBoxErrors, Object.assign({}, sendBoxErrorsProps)),\n React.createElement(Stack, { className: mergeStyles(borderAndBoxShadowStyle({\n theme,\n hasErrorMessage: !!errorMessage,\n disabled: !!disabled\n })) },\n React.createElement(InputBoxComponent, { autoFocus: autoFocus, \"data-ui-id\": ids.sendboxTextField, disabled: disabled, errorMessage: onRenderSystemMessage ? onRenderSystemMessage(errorMessage) : errorMessage, textFieldRef: sendTextFieldRef, id: \"sendbox\", placeholderText: strings.placeholderText, textValue: textValue, onChange: (_, newValue) => setText(newValue), onKeyDown: ev => {\n const keyWasSendingMessage = ev.key === 'Enter' && (ev.shiftKey === false || !supportNewline);\n if (!keyWasSendingMessage) {\n onTyping === null || onTyping === void 0 ? void 0 : onTyping();\n }\n }, onEnterKeyDown: () => {\n sendMessageOnClick();\n }, styles: mergedStyles, supportNewline: supportNewline, maxLength: MAXIMUM_LENGTH_OF_MESSAGE },\n React.createElement(InputBoxButton, { onRenderIcon: onRenderSendIcon, onClick: e => {\n if (!textValueOverflow) {\n sendMessageOnClick();\n }\n e.stopPropagation();\n }, id: 'sendIconWrapper', className: mergedSendButtonStyle, ariaLabel: localeStrings.sendButtonAriaLabel, tooltipContent: localeStrings.sendButtonAriaLabel }))));\n};\n/**\n * @private\n */\nconst hasIncompleteFileUploads = (props) => {\n const activeFileUploads = activeFileUploadsTrampoline(props);\n return !!((activeFileUploads === null || activeFileUploads === void 0 ? void 0 : activeFileUploads.length) && !activeFileUploads.filter(fileUpload => !fileUpload.error).every(fileUpload => fileUpload.uploadComplete));\n};\nconst hasFile = (props) => {\n const activeFileUploads = activeFileUploadsTrampoline(props);\n return !!(activeFileUploads === null || activeFileUploads === void 0 ? void 0 : activeFileUploads.find(file => !file.error));\n return false;\n};\nconst sanitizeText = (message) => {\n if (EMPTY_MESSAGE_REGEX.test(message)) {\n return '';\n }\n else {\n return message;\n }\n};\nconst activeFileUploadsTrampoline = (props) => {\n return [];\n};\n//# sourceMappingURL=SendBox.js.map"],"names":["MessageStatusIndicator","props","status","styles","remoteParticipantsCount","onToggleToolTip","readCount","localeStrings","strings","messageStatusIndicator","isTooltipToggled","setIsTooltipToggled","useState","Object","assign","theme","calloutProps","gapSpace","root","padding","calloutMain","backgroundColor","palette","neutralLighter","TooltipHost","content","failedToSendTooltipText","hostStyles","failedToSendAriaLabel","LiveMessage","message","ariaLive","Icon","role","iconName","className","color","redDark","sendingTooltipText","sendingAriaLabel","themePrimary","undefined","readByTooltipText","seenTooltipText","messageThreadReadCount","onTooltipToggle","seenAriaLabel","deliveredTooltipText","deliveredAriaLabel","display","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","isMessageSame","first","second","messageId","contentType","JSON","stringify","createdOn","senderId","senderDisplayName","getLatestChatMessage","messages","i","length","messageType","DefaultJumpToNewMessageButton","text","onClick","PrimaryButton","onRenderIcon","ParticipantSystemMessageComponent","style","defaultName","participantsStr","participants","map","participant","displayName","join","generateParticipantsStr","messageSuffix","systemMessageType","messageThread","participantJoined","participantLeft","SystemMessage","containerStyle","DefaultSystemMessage","_a","messageContainerStyle","noDisplayNameSub","memoizeAllMessages","memoizeFnAll","_messageKey","showMessageDate","showMessageStatus","onRenderAvatar","shouldOverlapAvatarAndMessage","onRenderMessageStatus","defaultStatusRenderer","defaultChatMessageRenderer","chatMessageRenderStyles","_attached","statusToRender","participantCount","onRenderMessage","onUpdateMessage","onCancelEditMessage","onDeleteMessage","onSendMessage","disableEditing","messageProps","showDate","myChatMessageStyle","failedMyChatMessageContainer","myChatMessageContainer","chatMessageStyle","chatMessageContainer","mine","messageStatusRenderer","chatMessageComponent","shouldShowAvatar","attached","rootMyMessage","rootCommon","myChatItemMessageContainer","body","bodyCommon","bodyMyMessage","tabIndex","statusIcon","paddingLeft","messageStatusContainer","chatAvatarStyle","personaOptions","hidePersonaDetails","size","showOverflowTooltip","rootMessage","bodyWithAvatar","bodyWithoutAvatar","avatarOverlap","avatarNoOverlap","chatItemMessageContainer","avatar","Persona","key","chatMessage","systemMessageContainer","systemMessageComponent","paddingTop","customMessageComponent","paddingBottom","getLastChatMessageIdWithStatus","MessageThread","chatBody","useMemo","FluentV9ThemeProvider","v8Theme","MessageThreadWrapper","newMessages","userId","readReceiptsBySenderId","disableJumpToNewMessageButton","numberOfChatMessagesToReload","onMessageSeen","onLoadPreviousChatMessages","onRenderJumpToNewMessageButton","onRenderFileDownloads","onRenderFileDownloadsTrampoline","setMessages","chatMessagesInitialized","setChatMessagesInitialized","isAtBottomOfScroll","setIsAtBottomOfScroll","forceUpdate","setForceUpdate","latestPreviousChatMessage","setLatestPreviousChatMessage","latestCurrentChatMessage","setLatestCurrentChatMessage","existsNewChatMessage","setExistsNewChatMessage","lastSeenChatMessage","setLastSeenChatMessage","lastDeliveredChatMessage","setLastDeliveredChatMessage","lastSendingChatMessage","setLastSendingChatMessage","readCountForHoveredIndicator","setReadCountForHoveredIndicator","isAllChatMessagesLoadedRef","useRef","useEffect","current","previousTopRef","previousHeightRef","messageIdSeenByMeRef","chatScrollDivRef","isLoadingChatMessagesRef","messagesRef","isAtBottomOfScrollRef","setIsAtBottomOfScrollRef","isAtBottomOfScrollValue","chatMessagesInitializedRef","chatThreadRef","chatThreadWidth","isNarrow","clientHeight","sendMessageStatusIfAtBottom","useCallback","document","hasFocus","messagesWithId","filter","lastMessage","console","log","scrollToBottom","scrollTop","scrollHeight","handleScrollToTheBottom","atBottom","Math","ceil","fetchNewMessageWhenAtTop","delay","window","addEventListener","removeEventListener","chatScrollDiv","messagesWithAttachedValue","setChatMessagesInitializedRef","latestMessageFromPreviousMessages","latestMessageFromNewMessages","isThereNewMessageNotFromCurrentUser","didUserSendTheLatestMessage","participantCountRef","readReceiptsBySenderIdRef","onActionButtonClickMemo","setMessageReadBy","getParticipantsWhoHaveReadMessage","ChatMessageComponent","messageStatus","onActionButtonClick","isToggled","messagesToDisplay","memoizedMessageFn","index","clientMessageId","classes","LiveAnnouncer","Chat","chatContainer","ref","newMessageButtonContainer","newMessagesIndicator","MicrophoneButton","_b","_c","_d","_e","_f","_g","_h","_j","_k","_l","_m","onToggleMicrophone","microphoneButton","announcerString","setAnnouncerString","isSplit","split","enableDeviceSelectionMenu","primaryDisabled","microphones","disabled","speakers","isMicOn","checked","splitButtonAriaString","onSplitButtonAriaLabel","offSplitButtonAriaLabel","toggleAnnouncerString","microphoneActionTurnedOnAnnouncement","microphoneActionTurnedOffAnnouncement","onToggleClick","splitButtonPrimaryAction","title","itemType","sectionProps","topDivider","items","onSplitButtonMicrophonePrimaryAction","offSplitButtonMicrophonePrimaryAction","iconProps","lineHeight","announcementString","onRenderOnIcon","onRenderOffIcon","labelKey","menuProps","menuStyles","menuIconProps","hidden","microphoneButtonSplitRoleDescription","splitButtonAriaLabel","animationDuration","ZERO","x","y","DEFAULT_PROPS","isOpen","isDarkOverlay","containerClassName","enableAriaHiddenSiblings","getModalClassNames","ModalBase","propsWithoutDefaults","allowTouchBodyScroll","children","scrollableContentClassName","elementToFocusOnDismiss","firstFocusableSelector","forceFocusInsideTrap","ignoreExternalFocusing","isBlocking","isAlert","isClickableOutsideFocusTrap","onDismiss","layerProps","overlay","titleAriaId","subtitleAriaId","topOffsetFixed","responsiveMode","onLayerDidMount","isModeless","dragOptions","onDismissed","minDragPosition","maxDragPosition","rootRef","focusTrapZone","focusTrapZoneElm","mergedRef","modalResponsiveMode","focusTrapZoneId","win","setTimeout","clearTimeout","isModalOpen","setIsModalOpen","isVisible","setIsVisible","coordinates","setCoordinates","modalRectangleTop","setModalRectangleTop","isModalMenuOpen","toggle","toggleModalMenuOpen","setFalse","setModalMenuClose","internalState","onModalCloseTimer","scrollableContent","lastSetCoordinates","events","keepInBounds","isAlertRole","layerClassName","classNames","hasBeenOpened","windowInnerHeight","innerHeight","isDefaultDragHandle","dragHandleSelector","mergedLayerProps","eventBubblingEnabled","insertFirst","layer","allowScrollOnModal","elt","off","registerInitialModalPosition","dialogMain","modalRectangle","getBoundingClientRect","top","minPosition","left","maxPosition","getClampedAxis","axis","position","max","min","handleModalClose","isInKeyboardMoveMode","disposeOnKeyUp","call","handleDragStart","handleDrag","ev","dragData","prevValue","delta","handleDragStop","focus","requestAnimationFrame","handleKeyUp","altKey","ctrlKey","keyCode","target","preventDefault","stopPropagation","on","registerForKeyUp","parseFloat","dispose","componentRef","useComponentRef","modalContent","id","main","focusPreviouslyFocusedInnerElement","onBlur","disposeOnKeyDown","keyboardMoveIconContainer","keyboardMoveIconProps","keyboardMoveIcon","menu","moveMenuItemText","handleKeyDown","newLocal","handledEvent","shiftKey","getMoveDelta","closeMenuItemText","alignTargetEdge","coverTarget","directionalHint","directionalHintFixed","shouldFocusOnMount","ariaLabelledBy","ariaDescribedBy","shouldRestoreFocus","isDarkThemed","DraggableZone","handleSelector","preventDragSelector","onStart","onDragChange","onStop","getDraggableZoneClassNames","isDragging","touchAction","selectors","userSelect","eventMapping","start","move","stop","constructor","super","this","_currentEventType","_events","_onMouseDown","event","onMouseDown","_onDragStart","_onMouseUp","onMouseUp","_onDragStop","_onTouchStart","onTouchStart","_onTouchEnd","onTouchEnd","button","_matchesSelector","_touchId","_getTouchId","_getControlPosition","_createDragDataFromPosition","setState","lastPosition","_onDrag","type","updatedData","_createUpdatedDragData","updatedPosition","state","baseDragData","forEach","componentDidUpdate","prevProps","componentWillUnmount","render","child","statePosition","transform","touchObj","_getActiveTouch","eventToGetOffset","clientX","clientY","targetTouches","_findTouchInTouchList","changedTouches","touch","identifier","element","selector","matchesSelectorFn","matches","webkitMatchesSelector","msMatchesSelector","parentElement","touchList","globalClassNames","_ModalClone","effects","fonts","medium","height","width","alignItems","justifyContent","opacity","pointerEvents","transition","boxShadow","elevation64","borderRadius","roundedCorner2","white","boxSizing","textAlign","outline","maxHeight","maxWidth","minHeight","minWidth","overflowY","zIndex","cursor","flexGrow","fontSize","xLargePlus","scope","fields","ParticipantItem","menuItems","presence","me","showParticipantOverflowTooltip","itemHovered","setItemHovered","itemFocused","setItemFocused","menuHidden","setMenuHidden","containerRef","participantItem","ids","uniqueId","useId","meAvatarText","trim","avatarOptions","displayNamePlaceholder","initialsTextColor","showUnknownPersonaCoin","meTextStyle","neutralSecondary","contextualMenuStyle","background","neutralLighterAlt","infoContainerStyle","neutralTertiary","marginLeft","iconContainer","menuButton","Stack","horizontal","horizontalAlign","menuTitle","participantItemMenuButton","onDismissMenu","participantStateString","participantStateStringTrampoline","localparticipant","clickable","onMouseEnter","onMouseLeave","onFocus","Text","isMeText","ContextualMenu","onItemClick","DirectionalHint","preventDismissOnEvent","ParticipantList","excludeMe","myUserId","onRemoveParticipant","onRenderParticipant","onFetchParticipantMenuItems","participantAriaLabelledBy","participantItemStrings","displayedParticipants","userIndex","p","indexOf","remoteParticipants","splice","getParticipantsForDefaultRender","isParticipantListCallParticipant","sort","a","b","callA","callB","raisedHand","raisedHandOrderPosition","sortParticipants","createParticipantMenuItems","participantIsRemovable","isRemovable","push","removeButtonLabel","itemProps","participantItemStyles","participantSubMenuItemsStyles","participantListRemoveParticipantButton","merge","participantList","onParticipantClick","attendeeRoleString","callingParticipant","isScreenSharing","isMuted","tokens","childrenGap","RaisedHandIcon","ariaLabel","sharingIconLabel","mutedIconLabel","onRenderParticipantDefault","ParticipantsButton","callInvitationURL","onMuteAll","onRenderParticipantList","copyInviteLinkAnnouncerStrings","setCopyInviteLinkAnnouncerStrings","onMuteAllCallback","defaultParticipantList","participantListStyles","onCopyCallback","participantsButton","copyInviteLinkActionedAriaLabel","generateDefaultParticipantsSubMenuProps","onRender","muteAllButtonLabel","menuItemStyles","defaultMenuProps","menuHeader","participantCountWithoutMe","name","participantsListButtonLabel","numParticipants","subMenuProps","participantButtonPeopleMenuItem","copyInviteLinkButtonLabel","PictureInPictureInPicturePrimaryTile","elevation8","PictureInPictureInPictureTile","primaryTileStyles","orientation","PictureInPictureInPictureSecondaryTile","secondaryTileStyles","memoize","themeElevation","overflow","_PictureInPictureInPicture","PictureInPictureInPictureContainer","primaryView","primaryTile","secondaryView","secondaryTile","rootAriaLabel","tileContainerStyles","onKeyPress","secondaryTileFloatingStyles","bottom","right","RaiseHandButton","raiseHandButton","raiseHandButtonStyles","onToggleRaiseHand","rootChecked","outlineColor","rootCheckedHovered","labelChecked","_RemoteVideoTile","isAvailable","isReceiving","isScreenSharingOn","onCreateRemoteStreamView","onDisposeRemoteStreamView","remoteVideoViewOptions","renderElement","showMuteIndicator","remoteParticipant","participantState","menuKind","isPinned","onPinParticipant","onUnpinParticipant","onUpdateScalingMode","disablePinMenuItem","remoteVideoStreamProps","isMirrored","isStreamAvailable","isStreamReceiving","remoteParticipantId","renderElementExists","scalingMode","createVideoStreamResult","contextualMenuProps","view","videoTileContextualMenuProps","videoTileContextualMenuPropsTrampoline","showLoadingIndicator","drawerMenuItemProps","setDrawerMenuItemProps","renderVideoStreamElement","childElementCount","videoStreamElement","loadingState","onKeyDown","convertContextualMenuItemsToDrawerMenuItemProps","initialsName","onRenderPlaceholder","isSpeaking","personaMinSize","showLabel","onLongTouch","hostId","drawerMenuHostId","onLightDismiss","heading","contextualMenu","item","itemKey","ResponsiveHorizontalGallery","gapWidthRem","buttonWidthRem","onFetchTilesToRender","onChildrenPerPageChange","containerWidth","leftPadding","getComputedStyle","rightPadding","paddingRight","childrenPerPage","numberOfChildren","containerStyles","horizontalGalleryStyles","ResponsiveVerticalGallery","verticalGalleryStyles","gapHeightRem","controlBarHeightRem","isShort","containerHeight","topPadding","bottomPadding","controlBarHeight","ScreenShareButton","screenShareButton","screenshareButtonStyles","onToggleScreenShare","border","borderColor","black","SendBoxErrorBar","error","dismissAfterMs","errorMessage","setErrorMessage","timeoutRef","Announcer","MessageBar","messageBarType","SendBoxErrors","fileUploadError","fileUploadsPendingError","errorToDisplay","timestamp","EMPTY_MESSAGE_REGEX","SendBox","systemMessage","supportNewline","onTyping","onRenderSystemMessage","autoFocus","sendBox","activeFileUploads","activeFileUploadsTrampoline","textValue","setTextValue","textValueOverflow","setTextValueOverflow","sendTextFieldRef","setFileUploadsPendingError","sendMessageOnClick","hasIncompleteFileUploads","test","hasFile","sanitizeText","textTooLongMessage","textTooLong","mergedSendButtonStyle","sendMessageIconContainer","mergedStyles","hasTextOrFile","mergedSendIconStyle","sendMessageIcon","onRenderSendIcon","isHover","upload","sendBoxErrorsProps","fileUpload","pop","hasErrorMessage","InputBoxComponent","sendboxTextField","textFieldRef","placeholderText","onChange","_","newValue","setText","onEnterKeyDown","maxLength","sendButtonAriaLabel","tooltipContent","every","uploadComplete","find","file"],"sourceRoot":""}