botframework-webchat-fluent-theme 4.18.1-main.20250515.4c7400a → 4.18.1-main.20250701.b63791f
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/botframework-webchat-fluent-theme.css.map +1 -1
- package/dist/botframework-webchat-fluent-theme.development.css.map +1 -1
- package/dist/botframework-webchat-fluent-theme.development.js +8 -8
- package/dist/botframework-webchat-fluent-theme.development.js.map +1 -1
- package/dist/botframework-webchat-fluent-theme.js +1 -1
- package/dist/botframework-webchat-fluent-theme.js.map +1 -1
- package/dist/botframework-webchat-fluent-theme.mjs +1 -1
- package/dist/botframework-webchat-fluent-theme.mjs.map +1 -1
- package/dist/botframework-webchat-fluent-theme.production.min.css.map +1 -1
- package/dist/botframework-webchat-fluent-theme.production.min.js +8 -8
- package/dist/botframework-webchat-fluent-theme.production.min.js.map +1 -1
- package/package.json +6 -6
- package/src/components/activity/ActivityDecorator.module.css +12 -2
- package/src/components/dropZone/DropZone.tsx +2 -2
- package/src/components/icon/FluentIcon.module.css +53 -0
- package/src/components/icon/FluentIcon.tsx +51 -0
- package/src/components/icon/index.ts +1 -0
- package/src/components/preChatActivity/PreChatMessageActivity.module.css +1 -0
- package/src/components/preChatActivity/StarterPromptsCardAction.module.css +1 -1
- package/src/components/preChatActivity/StarterPromptsCardAction.tsx +7 -4
- package/src/components/sendBox/AddAttachmentButton.tsx +3 -2
- package/src/components/sendBox/SendBox.module.css +69 -5
- package/src/components/sendBox/SendBox.tsx +18 -14
- package/src/components/sendBox/TelephoneKeypadToolbarButton.tsx +2 -2
- package/src/components/sendBox/Toolbar.module.css +2 -0
- package/src/components/suggestedActions/SuggestedAction.tsx +2 -2
- package/src/components/suggestedActions/SuggestedActions.tsx +2 -2
- package/src/components/telephoneKeypad/private/TelephoneKeypad.tsx +4 -4
- package/src/components/theme/Theme.module.css +45 -45
- package/src/components/typingIndicator/SlidingDotsTypingIndicator.module.css +1 -1
- package/src/private/FluentThemeProvider.tsx +6 -10
- package/src/components/sendBox/Attachments.module.css +0 -7
- package/src/components/sendBox/Attachments.tsx +0 -35
- package/src/components/sendBox/TextArea.module.css +0 -82
- package/src/components/sendBox/TextArea.tsx +0 -111
- package/src/icons/AddDocumentIcon.tsx +0 -13
- package/src/icons/AttachmentIcon.tsx +0 -13
- package/src/icons/InfoSmallIcon.tsx +0 -13
- package/src/icons/SendIcon.tsx +0 -13
- package/src/icons/TelephoneKeypadIcon.tsx +0 -13
- package/src/icons/index.ts +0 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/components/sendBox/SendBox.tsx","../src/icons/AddDocumentIcon.tsx","../src/icons/AttachmentIcon.tsx","../src/icons/InfoSmallIcon.tsx","../src/icons/SendIcon.tsx","../src/icons/TelephoneKeypadIcon.tsx","../../styles/src/private/makeCreateStyles.ts","../src/styles/createStyles.ts","../../styles/src/react/private/useStyles.ts","../src/styles/useVariantClassName.ts","../src/private/useVariants.ts","../src/private/VariantComposer.ts","../src/private/createComposer.tsx","../src/testIds.ts","../src/components/dropZone/DropZone.tsx","../src/components/dropZone/DropZone.module.css","../src/components/suggestedActions/SuggestedActions.tsx","../src/components/preChatActivity/isPreChatMessageActivity.ts","../src/components/preChatActivity/PreChatMessageActivity.tsx","../src/components/preChatActivity/PreChatMessageActivity.module.css","../src/components/preChatActivity/StarterPromptsToolbar.tsx","../src/components/preChatActivity/StarterPromptsCardAction.tsx","../src/components/preChatActivity/StarterPromptsCardAction.module.css","../src/components/preChatActivity/StarterPromptsToolbar.module.css","../src/components/activity/ActivityDecorator.tsx","../src/components/activity/ActivityDecorator.module.css","../src/components/activity/CopilotMessageHeader.tsx","../src/components/activity/private/useActivityStyleOptions.ts","../src/components/activity/private/isAIGeneratedActivity.ts","../src/components/activity/private/useActivityAuthor.ts","../src/components/activity/CopilotMessageHeader.module.css","../src/components/suggestedActions/private/computeSuggestedActionText.ts","../src/components/suggestedActions/private/rovingFocus.tsx","../src/components/suggestedActions/SuggestedAction.tsx","../src/components/suggestedActions/AccessibleButton.tsx","../src/components/suggestedActions/SuggestedAction.module.css","../src/components/suggestedActions/SuggestedActions.module.css","../src/components/telephoneKeypad/Provider.tsx","../src/components/telephoneKeypad/private/Context.ts","../src/components/telephoneKeypad/Surrogate.tsx","../src/components/telephoneKeypad/private/TelephoneKeypad.tsx","../src/components/telephoneKeypad/private/Button.tsx","../src/components/telephoneKeypad/private/Button.module.css","../src/components/telephoneKeypad/useShown.ts","../src/components/telephoneKeypad/private/TelephoneKeypad.module.css","../src/components/sendBox/AddAttachmentButton.tsx","../src/components/sendBox/Toolbar.tsx","../src/components/sendBox/Toolbar.module.css","../src/components/sendBox/AddAttachmentButton.module.css","../src/components/sendBox/Attachments.tsx","../src/components/sendBox/Attachments.module.css","../src/components/sendBox/ErrorMessage.tsx","../src/components/sendBox/ErrorMessage.module.css","../src/components/sendBox/private/useSubmitError.ts","../src/components/sendBox/private/useTranscriptNavigation.ts","../src/components/sendBox/private/useUniqueId.ts","../src/components/sendBox/SendBox.module.css","../src/components/sendBox/TelephoneKeypadToolbarButton.tsx","../src/components/sendBox/TextArea.tsx","../src/components/sendBox/TextArea.module.css","../src/private/FluentThemeProvider.tsx","../src/components/activity/ActivityLoader.tsx","../src/components/assets/SlidingDots.tsx","../src/components/assets/private/useContext.ts","../src/components/assets/private/Context.ts","../src/components/assets/private/useAssetURL.ts","../src/components/activity/ActivityLoader.module.css","../src/components/assets/AssetComposer.tsx","../src/components/linerActivity/private/isLinerMessageActivity.ts","../src/components/linerActivity/private/LinerActivity.tsx","../src/components/linerActivity/private/LinerMessageActivity.module.css","../src/components/theme/Theme.tsx","../src/components/theme/Theme.module.css","../src/components/typingIndicator/SlidingDotsTypingIndicator.tsx","../src/components/typingIndicator/SlidingDotsTypingIndicator.module.css"],"sourcesContent":["import { injectMetaTag } from 'inject-meta-tag';\n\nimport { SendBox as FluentSendBox } from './components/sendBox/index';\nimport FluentThemeProvider from './private/FluentThemeProvider';\nimport testIds from './testIds';\n\nconst buildTool = process.env['build_tool'];\nconst moduleFormat = process.env['module_format'];\nconst version = process.env['npm_package_version'];\n\nconst buildInfo = { buildTool, moduleFormat, version };\n\ninjectMetaTag(\n 'botframework-webchat:fluent-theme',\n `version=${process.env['npm_package_version']}; build-tool=${process.env['build_tool']}; module-format=${process.env['module_format']}`\n);\n\nexport { FluentThemeProvider, FluentSendBox, buildInfo, testIds };\n","import { hooks, type SendBoxFocusOptions } from 'botframework-webchat-component';\nimport cx from 'classnames';\nimport React, {\n memo,\n ReactNode,\n useCallback,\n useRef,\n useState,\n type FormEventHandler,\n type MouseEventHandler\n} from 'react';\nimport { useRefFrom } from 'use-ref-from';\nimport { SendIcon } from '../../icons';\nimport { useStyles, useVariantClassName } from '../../styles';\nimport testIds from '../../testIds';\nimport { DropZone } from '../dropZone';\nimport { SuggestedActions } from '../suggestedActions';\nimport { TelephoneKeypadSurrogate, useTelephoneKeypadShown, type DTMF } from '../telephoneKeypad';\nimport AddAttachmentButton from './AddAttachmentButton';\nimport Attachments from './Attachments';\nimport ErrorMessage from './ErrorMessage';\nimport useSubmitError from './private/useSubmitError';\nimport useTranscriptNavigation from './private/useTranscriptNavigation';\nimport useUniqueId from './private/useUniqueId';\nimport styles from './SendBox.module.css';\nimport TelephoneKeypadToolbarButton from './TelephoneKeypadToolbarButton';\nimport TextArea from './TextArea';\nimport { Toolbar, ToolbarButton, ToolbarSeparator } from './Toolbar';\n\nconst {\n useFocus,\n useLocalizer,\n useMakeThumbnail,\n useRegisterFocusSendBox,\n useSendBoxAttachments,\n useSendBoxValue,\n useSendMessage,\n useStyleOptions,\n useUIState\n} = hooks;\n\ntype Props = Readonly<{\n className?: string | undefined;\n completion?: ReactNode | undefined;\n isPrimary?: boolean | undefined;\n placeholder?: string | undefined;\n}>;\n\nfunction SendBox(props: Props) {\n const [{ hideTelephoneKeypadButton, hideUploadButton, maxMessageLength }] = useStyleOptions();\n const [attachments, setAttachments] = useSendBoxAttachments();\n const [globalMessage, setGlobalMessage] = useSendBoxValue();\n const [localMessage, setLocalMessage] = useState('');\n const [telephoneKeypadShown] = useTelephoneKeypadShown();\n const [uiState] = useUIState();\n const classNames = useStyles(styles);\n const variantClassName = useVariantClassName(styles);\n const errorMessageId = useUniqueId('sendbox__error-message-id');\n const inputRef = useRef<HTMLTextAreaElement>(null);\n const localize = useLocalizer();\n const makeThumbnail = useMakeThumbnail();\n const sendMessage = useSendMessage();\n const setFocus = useFocus();\n\n const message = props.isPrimary ? globalMessage : localMessage;\n const setMessage = props.isPrimary ? setGlobalMessage : setLocalMessage;\n const isBlueprint = uiState === 'blueprint';\n\n const [errorMessage, commitLatestError] = useSubmitError({ message, attachments });\n const isMessageLengthExceeded = !!maxMessageLength && message.length > maxMessageLength;\n const shouldShowMessageLength =\n !isBlueprint && !telephoneKeypadShown && maxMessageLength && isFinite(maxMessageLength);\n const shouldShowTelephoneKeypad = !isBlueprint && telephoneKeypadShown;\n\n useRegisterFocusSendBox(\n useCallback(\n ({ noKeyboard, waitUntil }: SendBoxFocusOptions) => {\n if (!inputRef.current) {\n return;\n }\n if (noKeyboard) {\n waitUntil(\n (async () => {\n const previousReadOnly = inputRef.current?.getAttribute('readonly');\n inputRef.current?.setAttribute('readonly', 'true');\n // TODO: [P2] We should update this logic to handle quickly-successive `focusCallback`.\n // If a succeeding `focusCallback` is being called, the `setTimeout` should run immediately.\n // Or the second `focusCallback` should not set `readonly` to `true`.\n // eslint-disable-next-line no-restricted-globals\n await new Promise(resolve => setTimeout(resolve, 0));\n inputRef.current?.focus();\n if (typeof previousReadOnly !== 'string') {\n inputRef.current?.removeAttribute('readonly');\n } else {\n inputRef.current?.setAttribute('readonly', previousReadOnly);\n }\n })()\n );\n } else {\n inputRef.current?.focus();\n }\n },\n [inputRef]\n )\n );\n\n const attachmentsRef = useRefFrom(attachments);\n const messageRef = useRefFrom(message);\n\n const handleSendBoxClick = useCallback<MouseEventHandler>(\n event => {\n if ('tabIndex' in event.target && typeof event.target.tabIndex === 'number' && event.target.tabIndex >= 0) {\n return;\n }\n\n setFocus('sendBox');\n },\n [setFocus]\n );\n\n const handleMessageChange: React.FormEventHandler<HTMLTextAreaElement> = useCallback(\n event => setMessage(event.currentTarget.value),\n [setMessage]\n );\n\n const handleAddFiles = useCallback(\n async (inputFiles: File[]) => {\n const newAttachments = Object.freeze(\n await Promise.all(\n inputFiles.map(file =>\n makeThumbnail(file).then(thumbnailURL =>\n Object.freeze({\n blob: file,\n ...(thumbnailURL && { thumbnailURL })\n })\n )\n )\n )\n );\n\n setAttachments(newAttachments);\n\n // TODO: Currently in the UX, we have no way to remove attachments.\n // Keep concatenating doesn't make sense in current UX.\n // When end-user can remove attachment, we should enable the code again.\n // setAttachments(attachments => attachments.concat(newAttachments));\n },\n [makeThumbnail, setAttachments]\n );\n\n const handleFormSubmit: FormEventHandler<HTMLFormElement> = useCallback(\n event => {\n event.preventDefault();\n const error = commitLatestError();\n\n if (error !== 'empty' && !isMessageLengthExceeded) {\n sendMessage(messageRef.current, undefined, { attachments: attachmentsRef.current });\n\n setMessage('');\n setAttachments([]);\n }\n\n setFocus('sendBox');\n },\n [\n commitLatestError,\n isMessageLengthExceeded,\n setFocus,\n sendMessage,\n setMessage,\n messageRef,\n attachmentsRef,\n setAttachments\n ]\n );\n\n const handleTelephoneKeypadButtonClick = useCallback(\n // TODO: We need more official way of sending DTMF.\n (dtmf: DTMF) => sendMessage(`/DTMFKey ${dtmf}`),\n [sendMessage]\n );\n\n const handleTranscriptNavigation = useTranscriptNavigation();\n\n const aria = {\n 'aria-invalid': 'false' as const,\n ...(errorMessage && {\n 'aria-describedby': errorMessageId,\n 'aria-errormessage': errorMessageId,\n 'aria-invalid': 'true' as const\n })\n };\n\n return (\n <form\n {...aria}\n className={cx(classNames['sendbox'], variantClassName, props.className)}\n data-testid={testIds.sendBoxContainer}\n onSubmit={handleFormSubmit}\n >\n <SuggestedActions />\n <div\n className={cx(classNames['sendbox__sendbox'])}\n onClickCapture={handleSendBoxClick}\n onKeyDown={handleTranscriptNavigation}\n >\n <TextArea\n aria-label={isMessageLengthExceeded ? localize('TEXT_INPUT_LENGTH_EXCEEDED_ALT') : localize('TEXT_INPUT_ALT')}\n className={cx(classNames['sendbox__sendbox-text'], classNames['sendbox__text-area--in-grid'])}\n completion={props.completion}\n data-testid={testIds.sendBoxTextBox}\n hidden={shouldShowTelephoneKeypad}\n onInput={handleMessageChange}\n placeholder={props.placeholder ?? localize('TEXT_INPUT_PLACEHOLDER')}\n ref={inputRef}\n value={message}\n />\n <TelephoneKeypadSurrogate\n autoFocus={true}\n className={classNames['sendbox__telephone-keypad--in-grid']}\n isHorizontal={false}\n onButtonClick={handleTelephoneKeypadButtonClick}\n />\n <Attachments attachments={attachments} className={classNames['sendbox__attachment--in-grid']} />\n <div className={cx(classNames['sendbox__sendbox-controls'], classNames['sendbox__sendbox-controls--in-grid'])}>\n {shouldShowMessageLength && (\n <div\n className={cx(classNames['sendbox__text-counter'], {\n [classNames['sendbox__text-counter--error']]: isMessageLengthExceeded\n })}\n >\n {`${message.length}/${maxMessageLength}`}\n </div>\n )}\n <Toolbar>\n {!hideTelephoneKeypadButton && <TelephoneKeypadToolbarButton />}\n {!hideUploadButton && <AddAttachmentButton onFilesAdded={handleAddFiles} />}\n <ToolbarSeparator />\n <ToolbarButton\n aria-label={localize('TEXT_INPUT_SEND_BUTTON_ALT')}\n data-testid={testIds.sendBoxSendButton}\n disabled={isMessageLengthExceeded || shouldShowTelephoneKeypad}\n type=\"submit\"\n >\n <SendIcon />\n </ToolbarButton>\n </Toolbar>\n </div>\n <DropZone onFilesAdded={handleAddFiles} />\n <ErrorMessage error={errorMessage} id={errorMessageId} />\n </div>\n </form>\n );\n}\n\nconst PrimarySendBox = memo((props: Exclude<Props, 'primary'>) => <SendBox {...props} isPrimary={true} />);\n\nPrimarySendBox.displayName = 'PrimarySendBox';\n\nexport default memo(SendBox);\n\nexport { PrimarySendBox };\n","import { Components } from 'botframework-webchat-component';\nimport cx from 'classnames';\nimport React, { memo } from 'react';\n\nconst { MonochromeImageMasker } = Components;\n\nconst addDocumentIcon = `data:image/svg+xml;utf8,${encodeURIComponent('<svg viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 2a2 2 0 0 0-2 2v5.2c.32-.08.66-.15 1-.18V4a1 1 0 0 1 1-1h4v3.5c0 .83.67 1.5 1.5 1.5H15v8a1 1 0 0 1-1 1h-3.6c-.18.36-.4.7-.66 1H14a2 2 0 0 0 2-2V7.41c0-.4-.16-.78-.44-1.06l-3.91-3.91A1.5 1.5 0 0 0 10.59 2H6Zm8.8 5h-3.3a.5.5 0 0 1-.5-.5V3.2L14.8 7ZM10 14.5a4.5 4.5 0 1 1-9 0 4.5 4.5 0 0 1 9 0Zm-4-2a.5.5 0 0 0-1 0V14H3.5a.5.5 0 0 0 0 1H5v1.5a.5.5 0 0 0 1 0V15h1.5a.5.5 0 0 0 0-1H6v-1.5Z\"/></svg>')}`;\n\nfunction AddDocumentIcon(props: Readonly<{ className?: string }>) {\n return <MonochromeImageMasker className={cx('icon__add-document', props.className)} src={addDocumentIcon} />;\n}\n\nexport default memo(AddDocumentIcon);\n","import { Components } from 'botframework-webchat-component';\nimport cx from 'classnames';\nimport React, { memo } from 'react';\n\nconst { MonochromeImageMasker } = Components;\n\nconst attachmentIcon = `data:image/svg+xml;utf8,${encodeURIComponent('<svg viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m4.83 10.48 5.65-5.65a3 3 0 0 1 4.25 4.24L8 15.8a1.5 1.5 0 0 1-2.12-2.12l6-6.01a.5.5 0 1 0-.7-.71l-6 6.01a2.5 2.5 0 0 0 3.53 3.54l6.71-6.72a4 4 0 1 0-5.65-5.66L4.12 9.78a.5.5 0 0 0 .7.7Z\"/></svg>')}`;\n\nfunction AttachmentIcon(props: Readonly<{ className?: string }>) {\n return <MonochromeImageMasker className={cx('icon__attachment', props.className)} src={attachmentIcon} />;\n}\n\nexport default memo(AttachmentIcon);\n","import { Components } from 'botframework-webchat-component';\nimport cx from 'classnames';\nimport React, { memo } from 'react';\n\nconst { MonochromeImageMasker } = Components;\n\nconst infoSmallIcon = `data:image/svg+xml;utf8,${encodeURIComponent('<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.5 7.5a.5.5 0 1 0-1 0v3a.5.5 0 0 0 1 0v-3Zm.25-2a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0ZM8 1a7 7 0 1 0 0 14A7 7 0 0 0 8 1ZM2 8a6 6 0 1 1 12 0A6 6 0 0 1 2 8Z\"/></svg>')}`;\n\nfunction InfoSmallIcon(props: Readonly<{ readonly className?: string }>) {\n return <MonochromeImageMasker className={cx('icon__info--small', props.className)} src={infoSmallIcon} />;\n}\n\nexport default memo(InfoSmallIcon);\n","import { Components } from 'botframework-webchat-component';\nimport cx from 'classnames';\nimport React, { memo } from 'react';\n\nconst { MonochromeImageMasker } = Components;\n\nconst sendIcon = `data:image/svg+xml;utf8,${encodeURIComponent('<svg viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.18 2.11a.5.5 0 0 1 .54-.06l15 7.5a.5.5 0 0 1 0 .9l-15 7.5a.5.5 0 0 1-.7-.58L3.98 10 2.02 2.63a.5.5 0 0 1 .16-.52Zm2.7 8.39-1.61 6.06L16.38 10 3.27 3.44 4.88 9.5h6.62a.5.5 0 1 1 0 1H4.88Z\"/></svg>')}`;\n\nfunction SendIcon(props: Readonly<{ readonly className?: string }>) {\n return <MonochromeImageMasker className={cx('icon__send', props.className)} src={sendIcon} />;\n}\n\nexport default memo(SendIcon);\n","import { Components } from 'botframework-webchat-component';\nimport cx from 'classnames';\nimport React, { memo } from 'react';\n\nconst { MonochromeImageMasker } = Components;\n\nconst telephoneKeypadIcon = `data:image/svg+xml;utf8,${encodeURIComponent('<svg viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 5.25a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5Zm0 4a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5ZM7.25 12a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0ZM10 5.25a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5ZM11.25 8a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0ZM10 13.25a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5ZM11.25 16a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0ZM14 5.25a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5ZM15.25 8a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0ZM14 13.25a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5Z\"/></svg>')}`;\n\nfunction TelephoneKeypadIcon(props: Readonly<{ readonly className?: string }>) {\n return <MonochromeImageMasker className={cx('icon__telephone-keypad', props.className)} src={telephoneKeypadIcon} />;\n}\n\nexport default memo(TelephoneKeypadIcon);\n","function createStyle(content: string) {\n const style = document.createElement('style');\n\n style.append(document.createTextNode(content));\n\n return style;\n}\n\nexport default function makeCreateStyles(...contents: string[]) {\n return function createStyles() {\n if (!globalThis.document) {\n throw new Error('Unable to create styles: document is not defined');\n }\n\n return contents.map(content => createStyle(content));\n };\n}\n","import { makeCreateStyles } from 'botframework-webchat-styles';\n\nexport const fluentStyleContent = '@--FLUENT-STYLES-CONTENT--@';\n\nexport default makeCreateStyles(fluentStyleContent);\n","import { useMemo } from 'react';\n\nfunction useStyles<T extends CSSModuleClasses>(styles: T): T {\n // @ts-expect-error: entries/fromEntries don't allow to specify keys type\n return useMemo(\n () =>\n Object.freeze(\n Object.fromEntries(\n Object.entries(styles).map(([baseClassName, resultClassName]) => [\n baseClassName,\n `${baseClassName} ${resultClassName}`\n ])\n )\n ),\n [styles]\n );\n}\n\nexport default useStyles;\n","import { useMemo } from 'react';\nimport useVariants from '../private/useVariants';\nimport useStyles from './useStyles';\n\nexport default function useVariantClassName<T extends CSSModuleClasses>(styles: T): string {\n const classNames = useStyles(styles);\n const variants = useVariants();\n return useMemo(\n () =>\n variants\n .map(variant => classNames[`variant-${variant}`])\n .filter(value => value)\n .join(' '),\n [classNames, variants]\n );\n}\n","import { useContext, useMemo } from 'react';\nimport { VariantContext } from './VariantComposer';\n\nexport default function useVariants() {\n const { variant } = useContext(VariantContext);\n return useMemo(() => variant.split(' '), [variant]);\n}\n","import { createContext } from 'react';\n\nimport createComposer from './createComposer';\n\ntype VariantName = 'fluent' | 'copilot' | '';\n\nexport type VariantList = `${VariantName}`;\n\nexport type VariantContextType = {\n variant: VariantList;\n};\n\nexport const VariantContext = createContext<VariantContextType>(\n new Proxy(\n {},\n {\n get() {\n throw new Error('Unable to use VariantContext without VariantComposer');\n }\n }\n ) as unknown as VariantContextType\n);\n\nconst VariantComposer = createComposer<VariantContextType>(VariantContext, {\n defaults: { variant: '' },\n displayName: 'VariantComposer'\n});\n\nexport default VariantComposer;\n","import React, { type Context, memo, type ReactNode, useMemo } from 'react';\n\nexport default function createComposer<\n C,\n P extends { children?: ReactNode | undefined } = Partial<C> & { children?: ReactNode | undefined }\n>({ Provider }: Context<C>, { defaults, displayName }: Readonly<{ defaults: Readonly<C>; displayName: string }>) {\n const Composer = ({ children, ...props }: Readonly<P>) => {\n const value = useMemo(() => Object.freeze({ ...defaults, ...props }), [props]);\n\n return <Provider value={value}>{children}</Provider>;\n };\n\n Composer.displayName = displayName;\n\n return memo(Composer);\n}\n","const testIds = {\n preChatMessageActivityStarterPromptsCardAction: 'pre-chat message activity starter prompts card action',\n sendBoxContainer: 'send box container',\n sendBoxDropZone: 'send box drop zone',\n sendBoxSendButton: 'send box send button',\n sendBoxSuggestedAction: 'send box suggested action',\n sendBoxTextBox: 'send box text area',\n sendBoxTelephoneKeypadButton1: `send box telephone keypad button 1`,\n sendBoxTelephoneKeypadButton2: `send box telephone keypad button 2`,\n sendBoxTelephoneKeypadButton3: `send box telephone keypad button 3`,\n sendBoxTelephoneKeypadButton4: `send box telephone keypad button 4`,\n sendBoxTelephoneKeypadButton5: `send box telephone keypad button 5`,\n sendBoxTelephoneKeypadButton6: `send box telephone keypad button 6`,\n sendBoxTelephoneKeypadButton7: `send box telephone keypad button 7`,\n sendBoxTelephoneKeypadButton8: `send box telephone keypad button 8`,\n sendBoxTelephoneKeypadButton9: `send box telephone keypad button 9`,\n sendBoxTelephoneKeypadButton0: `send box telephone keypad button 0`,\n sendBoxTelephoneKeypadButtonStar: `send box telephone keypad button star`,\n sendBoxTelephoneKeypadButtonPound: `send box telephone keypad button pound`,\n sendBoxTelephoneKeypadToolbarButton: 'send box telephone keypad toolbar button',\n sendBoxUploadButton: 'send box upload button'\n};\n\nexport default testIds;\n","import { hooks } from 'botframework-webchat-component';\nimport cx from 'classnames';\nimport React, {\n memo,\n useCallback,\n useEffect,\n useRef,\n useState,\n type DragEvent as ReactDragEvent,\n type DragEventHandler\n} from 'react';\nimport { useRefFrom } from 'use-ref-from';\n\nimport { AddDocumentIcon } from '../../icons';\nimport testIds from '../../testIds';\nimport styles from './DropZone.module.css';\nimport { useStyles } from '../../styles';\n\nconst { useLocalizer } = hooks;\n\nconst handleDragOver = (event: ReactDragEvent<unknown> | DragEvent) => {\n // Prevent default dragover behavior to enable drop event triggering.\n // Browsers require this to fire subsequent drop events - without it,\n // they would handle the drop directly (e.g., open files in new tabs).\n // This is needed regardless of whether we prevent default drop behavior,\n // as it ensures our dropzone receives the drop event first. If we allow\n // default drop handling (by not calling preventDefault there), the browser\n // will still process the drop after our event handlers complete.\n event.preventDefault();\n};\n\n// Notes: For files dragging from outside of browser, it only tell us if it is a \"File\" instead of \"text/plain\" or \"text/uri-list\".\n// For images dragging inside of browser, it only tell us that it is \"text/plain\", \"text/uri-list\" and \"text/html\". But not \"image/*\".\n// So we cannot allowlist what is droppable.\n// We are using case-insensitive of type \"files\" so we can drag in WebDriver.\nconst isFilesTransferEvent = (event: DragEvent) =>\n !!event.dataTransfer?.types?.some(type => type.toLowerCase() === 'files');\n\nfunction isDescendantOf(target: Node, ancestor: Node): boolean {\n let current = target.parentNode;\n\n while (current) {\n if (current === ancestor) {\n return true;\n }\n\n current = current.parentNode;\n }\n\n return false;\n}\n\nconst DropZone = (props: { readonly onFilesAdded: (files: File[]) => void }) => {\n const [dropZoneState, setDropZoneState] = useState<false | 'visible' | 'droppable'>(false);\n const classNames = useStyles(styles);\n const dropZoneRef = useRef<HTMLDivElement>(null);\n const localize = useLocalizer();\n const onFilesAddedRef = useRefFrom(props.onFilesAdded);\n\n useEffect(() => {\n let entranceCounter = 0;\n\n const handleDragEnter = (event: DragEvent) => {\n document.addEventListener('dragover', handleDragOver);\n\n entranceCounter++;\n\n if (isFilesTransferEvent(event)) {\n setDropZoneState(\n dropZoneRef.current &&\n (event.target === dropZoneRef.current ||\n (event.target instanceof HTMLElement && isDescendantOf(event.target, dropZoneRef.current)))\n ? 'droppable'\n : 'visible'\n );\n }\n };\n\n const handleDragLeave = () => --entranceCounter <= 0 && setDropZoneState(false);\n\n const handleDragEnd = () => {\n document.removeEventListener('dragover', handleDragOver);\n\n entranceCounter = 0;\n\n setDropZoneState(false);\n };\n\n const handleDocumentDrop = (event: DragEvent) => {\n if (!dropZoneRef.current?.contains(event.target as Node)) {\n handleDragEnd();\n }\n };\n\n document.addEventListener('dragend', handleDragEnd);\n document.addEventListener('dragenter', handleDragEnter);\n document.addEventListener('dragleave', handleDragLeave);\n document.addEventListener('drop', handleDocumentDrop);\n\n return () => {\n document.removeEventListener('dragend', handleDragEnd);\n document.removeEventListener('dragenter', handleDragEnter);\n document.removeEventListener('dragleave', handleDragLeave);\n document.removeEventListener('dragover', handleDragOver);\n document.removeEventListener('drop', handleDocumentDrop);\n };\n }, [setDropZoneState]);\n\n const handleDrop = useCallback<DragEventHandler<HTMLDivElement>>(\n event => {\n event.preventDefault();\n\n setDropZoneState(false);\n\n if (!isFilesTransferEvent(event.nativeEvent)) {\n return;\n }\n\n onFilesAddedRef.current([...event.dataTransfer.files]);\n },\n [onFilesAddedRef, setDropZoneState]\n );\n\n return dropZoneState ? (\n <div\n className={cx(classNames['sendbox__attachment-drop-zone'], {\n [classNames['sendbox__attachment-drop-zone--droppable']]: dropZoneState === 'droppable'\n })}\n data-testid={testIds.sendBoxDropZone}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n ref={dropZoneRef}\n >\n <AddDocumentIcon className={classNames['sendbox__attachment-drop-zone-icon']} />\n {localize('TEXT_INPUT_DROP_ZONE')}\n </div>\n ) : null;\n};\n\nDropZone.displayName = 'DropZone';\n\nexport default memo(DropZone);\n",":global(.webchat-fluent) .sendbox__attachment-drop-zone {\n background-color: var(--webchat-colorNeutralBackground4);\n border-radius: inherit;\n cursor: copy;\n display: grid;\n gap: 8px;\n inset: 0;\n place-content: center;\n place-items: center;\n position: absolute;\n transition: all var(--webchat-durationNormal) var(--webchat-curveDecelerateMid);\n}\n\n:global(.webchat-fluent) .sendbox__attachment-drop-zone--droppable {\n background-color: var(--webchat-colorBrandBackground2Hover);\n}\n\n:global(.webchat-fluent) .sendbox__attachment-drop-zone-icon {\n font-size: 36px;\n /* Set \"pointer-events: none\" to ignore dragging over the icon. Otherwise, when dragging over the icon; it would disable the \"--droppable\" modifier.*/\n pointer-events: none;\n}\n","import { hooks } from 'botframework-webchat-component';\nimport cx from 'classnames';\nimport React, { memo, useCallback, type ReactNode } from 'react';\nimport { useStyles } from '../../styles';\nimport { isPreChatMessageActivity } from '../preChatActivity';\nimport computeSuggestedActionText from './private/computeSuggestedActionText';\nimport RovingFocusProvider from './private/rovingFocus';\nimport SuggestedAction from './SuggestedAction';\nimport styles from './SuggestedActions.module.css';\n\nconst { useFocus, useLocalizer, useStyleOptions, useStyleSet, useSuggestedActions, useUIState } = hooks;\n\nfunction SuggestedActionStackedOrFlowContainer(\n props: Readonly<{\n 'aria-label'?: string | undefined;\n children?: ReactNode | undefined;\n className?: string | undefined;\n }>\n) {\n const [{ suggestedActionLayout }] = useStyleOptions();\n const [{ suggestedActions: suggestedActionsStyleSet }] = useStyleSet();\n const [uiState] = useUIState();\n const classNames = useStyles(styles);\n\n return (\n <div\n aria-label={props['aria-label']}\n aria-orientation=\"vertical\"\n className={cx(\n classNames['suggested-actions'],\n suggestedActionsStyleSet + '',\n {\n [classNames['suggested-actions--flow']]: suggestedActionLayout === 'flow',\n [classNames['suggested-actions--stacked']]: suggestedActionLayout !== 'flow'\n },\n props.className\n )}\n role=\"toolbar\"\n >\n {uiState !== 'blueprint' && props.children}\n </div>\n );\n}\n\nfunction SuggestedActions() {\n const classNames = useStyles(styles);\n const localize = useLocalizer();\n const [suggestedActions, _, { activity }] = useSuggestedActions();\n const focus = useFocus();\n\n const handleEscapeKey = useCallback(() => {\n focus('sendBox');\n }, [focus]);\n\n const children = isPreChatMessageActivity(activity)\n ? [] // Do not show suggested actions for pre-chat message, suggested actions has already shown inlined.\n : suggestedActions.map((cardAction, index) => {\n const { displayText, image, imageAltText, text, type, value } = cardAction as {\n displayText?: string;\n image?: string;\n imageAltText?: string;\n text?: string;\n type:\n | 'call'\n | 'downloadFile'\n | 'imBack'\n | 'messageBack'\n | 'openUrl'\n | 'playAudio'\n | 'playVideo'\n | 'postBack'\n | 'showImage'\n | 'signin';\n value?: { [key: string]: any } | string;\n };\n\n if (!suggestedActions?.length) {\n return null;\n }\n\n return (\n <SuggestedAction\n buttonText={computeSuggestedActionText(cardAction)}\n displayText={displayText}\n image={image}\n // Image alt text should use `imageAltText` field and fallback to `text` field.\n // https://github.com/microsoft/botframework-sdk/blob/main/specs/botframework-activity/botframework-activity.md#image-alt-text\n imageAlt={image && (imageAltText || text)}\n itemIndex={index}\n // eslint-disable-next-line react/no-array-index-key\n key={index}\n text={text}\n type={type}\n value={value}\n />\n );\n });\n\n return (\n <RovingFocusProvider onEscapeKey={handleEscapeKey}>\n <SuggestedActionStackedOrFlowContainer\n aria-label={localize('SUGGESTED_ACTIONS_LABEL_ALT')}\n className={classNames['suggested-actions']}\n >\n {children}\n </SuggestedActionStackedOrFlowContainer>\n </RovingFocusProvider>\n );\n}\n\nexport default memo(SuggestedActions);\n","import { getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat-core';\n\nexport default function isPreChatMessageActivity(\n activity: undefined | WebChatActivity\n): activity is WebChatActivity & { type: 'message' } {\n return !!(activity && getOrgSchemaMessage(activity?.entities || [])?.keywords?.includes('PreChatMessage'));\n}\n","import { hooks } from 'botframework-webchat-component';\nimport { type WebChatActivity } from 'botframework-webchat-core';\nimport cx from 'classnames';\nimport React, { memo, useMemo } from 'react';\nimport { useStyles } from '../../styles/index.js';\nimport styles from './PreChatMessageActivity.module.css';\nimport StarterPromptsToolbar from './StarterPromptsToolbar.js';\nimport { useActivityAuthor } from '../activity/index.js';\n\ntype Props = Readonly<{ activity: WebChatActivity & { type: 'message' } }>;\n\nconst { useLocalizer, useRenderMarkdownAsHTML, useUIState } = hooks;\n\nconst PreChatMessageActivity = ({ activity }: Props) => {\n const [uiState] = useUIState();\n const classNames = useStyles(styles);\n const renderMarkdownAsHTML = useRenderMarkdownAsHTML();\n const localize = useLocalizer();\n\n const author = useActivityAuthor(activity);\n\n const html = useMemo(\n () => (renderMarkdownAsHTML ? { __html: renderMarkdownAsHTML(author?.description || '') } : { __html: '' }),\n [author?.description, renderMarkdownAsHTML]\n );\n\n return (\n <div className={classNames['pre-chat-message-activity']}>\n {author && (\n <div\n className={cx(\n classNames['pre-chat-message-activity__body'],\n uiState === 'blueprint' && classNames['pre-chat-message-activity__body--blueprint']\n )}\n >\n {author.image && (\n <img\n alt={localize('AVATAR_ALT', author.name)}\n className={classNames['pre-chat-message-activity__body-avatar']}\n src={author.image}\n />\n )}\n {author.name && <h2 className={classNames['pre-chat-message-activity__body-title']}>{author.name}</h2>}\n {author.description && (\n // eslint-disable-next-line react/no-danger\n <div className={classNames['pre-chat-message-activity__body-subtitle']} dangerouslySetInnerHTML={html} />\n )}\n </div>\n )}\n <StarterPromptsToolbar\n cardActions={activity.suggestedActions?.actions || []}\n className={classNames['pre-chat-message-activity__toolbar']}\n />\n </div>\n );\n};\n\nPreChatMessageActivity.displayName = 'PreChatMessageActivity';\n\nexport default memo(PreChatMessageActivity);\n",":global(.webchat-fluent) .pre-chat-message-activity {\n box-sizing: border-box;\n display: grid;\n gap: var(--webchat-spacingHorizontalXXXL);\n grid-template-areas: 'body' 'toolbar';\n grid-template-rows: auto auto;\n padding: var(--webchat-spacingHorizontalXXXL) var(--webchat-spacingHorizontalM);\n position: relative;\n}\n\n:global(.webchat-fluent) .pre-chat-message-activity__body {\n align-items: center;\n display: flex;\n flex-flow: column nowrap;\n font-family: var(--webchat-fontFamilyBase);\n font-size: var(--webchat-fontSizeBase300);\n font-weight: var(--webchat-fontWeightRegular);\n gap: var(--webchat-spacingVerticalXS);\n grid-area: body;\n line-height: var(--webchat-lineHeightBase300);\n text-align: center;\n}\n\n:global(.webchat-fluent) .pre-chat-message-activity__body--blueprint {\n opacity: 60%;\n\n .pre-chat-message-activity__body-avatar {\n filter: grayscale(1);\n }\n}\n\n:global(.webchat-fluent) .pre-chat-message-activity__body-avatar {\n border-radius: var(--webchat-borderRadiusMedium);\n height: 64px;\n margin-block-end: var(--webchat-spacingVerticalM);\n}\n\n:global(.webchat-fluent) .pre-chat-message-activity__body-title {\n color: var(--webchat-colorNeutralForeground1);\n font-family: inherit;\n font-size: var(--webchat-fontSizeHero700);\n font-weight: var(--webchat-fontWeightSemibold);\n line-height: var(--webchat-lineHeightHero700);\n margin: 0;\n overflow-wrap: anywhere;\n}\n\n:global(.webchat-fluent) .pre-chat-message-activity__body-subtitle {\n font-size: var(--webchat-fontSizeBase300);\n line-height: var(--webchat-lineHeightBase300);\n overflow-wrap: anywhere;\n}\n\n:global(.webchat-fluent) .pre-chat-message-activity__toolbar {\n grid-area: toolbar;\n}\n","import { hooks } from 'botframework-webchat-api';\nimport { type DirectLineCardAction } from 'botframework-webchat-core';\nimport cx from 'classnames';\nimport React, { Fragment, memo } from 'react';\nimport { useStyles } from '../../styles/index.js';\nimport StarterPromptsCardAction from './StarterPromptsCardAction.js';\nimport styles from './StarterPromptsToolbar.module.css';\n\nconst { useUIState } = hooks;\n\ntype Props = Readonly<{\n cardActions: readonly DirectLineCardAction[];\n className?: string | undefined;\n}>;\n\nconst StarterPromptsToolbar = ({ cardActions, className }: Props) => {\n const classNames = useStyles(styles);\n const [uiState] = useUIState();\n\n return (\n // TODO: Accessibility-wise, this should be role=\"toolbar\" with keyboard navigation.\n <div className={cx(className, classNames['pre-chat-message-activity__card-action-toolbar'])}>\n <div className={classNames['pre-chat-message-activity__card-action-toolbar-grid']}>\n {uiState === 'blueprint' ? (\n <Fragment>\n <StarterPromptsCardAction />\n <StarterPromptsCardAction />\n <StarterPromptsCardAction />\n </Fragment>\n ) : (\n cardActions\n .filter<DirectLineCardAction & { type: 'messageBack' }>(\n (card: DirectLineCardAction): card is DirectLineCardAction & { type: 'messageBack' } =>\n card.type === 'messageBack'\n )\n // There is no other usable keys in card actions.\n // eslint-disable-next-line react/no-array-index-key\n .map((cardAction, index) => <StarterPromptsCardAction key={index} messageBackAction={cardAction} />)\n )}\n </div>\n </div>\n );\n};\n\nStarterPromptsToolbar.displayName = 'StarterPromptsToolbar';\n\nexport default memo(StarterPromptsToolbar);\n","import { Components, hooks } from 'botframework-webchat-component';\nimport { type DirectLineCardAction } from 'botframework-webchat-core';\nimport cx from 'classnames';\nimport React, { memo, useCallback, useMemo } from 'react';\nimport { useRefFrom } from 'use-ref-from';\nimport { useStyles } from '../../styles/index.js';\nimport testIds from '../../testIds.js';\nimport styles from './StarterPromptsCardAction.module.css';\n\nconst { useFocus, useRenderMarkdownAsHTML, useSendBoxValue, useUIState } = hooks;\nconst { MonochromeImageMasker } = Components;\n\ntype Props = Readonly<{\n className?: string | undefined;\n messageBackAction?: (DirectLineCardAction & { type: 'messageBack' }) | undefined;\n}>;\n\nconst StarterPromptsCardAction = ({ className, messageBackAction }: Props) => {\n const [_, setSendBoxValue] = useSendBoxValue();\n const [uiState] = useUIState();\n const classNames = useStyles(styles);\n const focus = useFocus();\n const inputTextRef = useRefFrom(messageBackAction?.displayText || messageBackAction?.text || '');\n const renderMarkdownAsHTML = useRenderMarkdownAsHTML('message activity');\n const subtitleHTML = useMemo<{ __html: string } | undefined>(\n () => (renderMarkdownAsHTML ? { __html: renderMarkdownAsHTML(messageBackAction?.text || '') } : undefined),\n [messageBackAction?.text, renderMarkdownAsHTML]\n );\n const disabled = uiState === 'disabled';\n const title = messageBackAction && 'title' in messageBackAction && messageBackAction.title;\n\n // Every starter prompt card action must have \"title\" field.\n const shouldShowBlueprint = uiState === 'blueprint' || !title;\n\n const handleClick = useCallback(() => {\n setSendBoxValue(inputTextRef.current);\n\n // Focus on the send box after the value is \"pasted.\"\n focus('sendBox');\n }, [focus, inputTextRef, setSendBoxValue]);\n\n return shouldShowBlueprint ? (\n <div\n className={cx(className, classNames['pre-chat-message-activity__card-action-box'])}\n data-testid={testIds.preChatMessageActivityStarterPromptsCardAction}\n />\n ) : (\n <button\n aria-disabled={disabled ? true : undefined}\n className={cx(className, classNames['pre-chat-message-activity__card-action-box'])}\n data-testid={testIds.preChatMessageActivityStarterPromptsCardAction}\n onClick={disabled ? undefined : handleClick}\n // eslint-disable-next-line no-magic-numbers\n tabIndex={disabled ? -1 : undefined}\n type=\"button\"\n >\n <div className={classNames['pre-chat-message-activity__card-action-title']}>{title}</div>\n {'image' in messageBackAction && messageBackAction.image && (\n <MonochromeImageMasker\n className={classNames['pre-chat-message-activity__card-action-image']}\n src={messageBackAction.image}\n />\n )}\n <div\n className={classNames['pre-chat-message-activity__card-action-subtitle']}\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={subtitleHTML}\n />\n </button>\n );\n};\n\nStarterPromptsCardAction.displayName = 'StarterPromptsCardAction';\n\nexport default memo(StarterPromptsCardAction);\n",":global(.webchat-fluent) .pre-chat-message-activity__card-action-box {\n appearance: none;\n background-color: var(--webchat-colorNeutralBackground1);\n border: 0;\n border-radius: 16px;\n box-shadow: var(--webchat-shadow2);\n color: var(--webchat-colorNeutralForeground1);\n cursor: pointer;\n display: grid;\n gap: var(--webchat-spacingVerticalS);\n grid-template-areas: 'title' 'subtitle';\n grid-template-columns: 1fr;\n grid-template-rows: auto 1fr;\n overflow: hidden;\n padding: 16px 20px;\n text-align: left;\n transition: background-color var(--webchat-durationNormal) var(--webchat-curveDecelerateMid);\n user-select: none;\n\n &:has(.pre-chat-message-activity__card-action-image) {\n grid-template-areas: 'image title' 'image subtitle';\n grid-template-columns: 20px 1fr;\n }\n\n &:empty {\n row-gap: 14px;\n }\n\n &[aria-disabled='true'],\n &:empty {\n cursor: default;\n }\n\n &[aria-disabled='true']:not(:empty) {\n background-color: var(--webchat-colorNeutralBackgroundDisabled);\n }\n\n &:hover:not([aria-disabled='true'], :empty) {\n background-color: var(--webchat-colorNeutralBackground1Hover);\n }\n\n &:active:not([aria-disabled='true'], :empty) {\n background-color: var(--webchat-colorNeutralBackground1Pressed);\n }\n\n &:focus-visible {\n outline: solid 2px var(--webchat-colorStrokeFocus2);\n outline-offset: -2px;\n }\n\n &:empty::after,\n &:empty::before {\n animation: blueprintAnimation 3s linear infinite;\n background-attachment: fixed;\n background-image: linear-gradient(\n -90deg,\n var(--webchat-colorNeutralStencil1) 0%,\n var(--webchat-colorNeutralStencil2) 50%,\n var(--webchat-colorNeutralStencil1) 100%\n );\n background-size: 300% 100%;\n content: '';\n display: block;\n }\n\n /* animation-* needs to position after animation shorthand. */\n @media (prefers-reduced-motion: reduce) {\n &:empty::after,\n &:empty::before {\n animation-delay: -1s;\n animation-play-state: paused;\n }\n }\n\n &:dir(rtl) {\n &:empty::after,\n &:empty::before {\n animation-direction: reverse;\n }\n }\n\n &:empty::after {\n border-radius: 16px;\n height: 16px;\n width: 100%;\n }\n\n &:empty::before {\n border-radius: 18px;\n height: 18px;\n width: 66%;\n }\n}\n\n@keyframes blueprintAnimation {\n from {\n background-position-x: 0%;\n }\n\n to {\n background-position-x: -300%;\n }\n}\n\n:global(.webchat-fluent) .pre-chat-message-activity__card-action-image {\n color: var(--webchat-colorNeutralForeground4);\n font-size: 20px;\n grid-area: image;\n}\n\n:global(.webchat-fluent) .pre-chat-message-activity__card-action-subtitle {\n font-family: var(--webchat-fontFamilyBase);\n font-size: 14px;\n font-weight: var(--webchat-fontWeightRegular);\n grid-area: subtitle;\n line-height: 20px;\n pointer-events: none; /* Links in subtitle are not clickable. */\n}\n\n:global(.webchat-fluent) .pre-chat-message-activity__card-action-title {\n font-family: var(--webchat-fontFamilyBase);\n font-size: 14px;\n font-weight: var(--webchat-fontWeightSemibold);\n grid-area: title;\n line-height: 20px;\n}\n",":global(.webchat-fluent) .pre-chat-message-activity__card-action-toolbar {\n container-name: webchat-container;\n container-type: inline-size;\n}\n\n:global(.webchat-fluent) .pre-chat-message-activity__card-action-toolbar-grid {\n display: grid;\n gap: var(--webchat-spacingHorizontalM);\n grid-template-columns: 1fr 1fr 1fr;\n padding: 0;\n}\n\n/* TODO: What is the good width to show as 3 columns? Web Chat, by default, has a bubble max width of 480px. */\n@container webchat-container (width <= 480px) {\n :global(.webchat-fluent) .pre-chat-message-activity__card-action-toolbar-grid {\n grid-template-columns: 1fr;\n }\n}\n","import { WebChatActivity } from 'botframework-webchat-component';\nimport cx from 'classnames';\nimport React, { ReactNode, memo } from 'react';\nimport useVariants from '../../private/useVariants';\nimport { useStyles, useVariantClassName } from '../../styles';\nimport styles from './ActivityDecorator.module.css';\nimport CopilotMessageHeader from './CopilotMessageHeader';\n\nfunction ActivityDecorator({ activity, children }: Readonly<{ activity: WebChatActivity; children: ReactNode }>) {\n const classNames = useStyles(styles);\n const variants = useVariants();\n const variantClassName = useVariantClassName(styles);\n\n const shouldRenderHeader = variants.includes('copilot') && activity?.from?.role === 'bot' && !!children;\n\n return (\n <div className={cx(classNames['activity-decorator'], variantClassName)}>\n {shouldRenderHeader && <CopilotMessageHeader activity={activity} />}\n {children}\n </div>\n );\n}\n\nActivityDecorator.displayName = 'ActivityDecorator';\n\nexport default memo(ActivityDecorator);\n",":global(.webchat-fluent) .activity-decorator {\n display: contents;\n font-family: var(--webchat__font--primary);\n\n --webchat__bubble--inline-padding: var(--webchat-spacingHorizontalL);\n --webchat__bubble--block-padding: var(--webchat-spacingVerticalM);\n --webchat__bubble--min-height: var(--webchat-bubble-minHeight);\n --webchat__bubble--max-width: var(--webchat-bubble-maxWidth);\n --webchat__bubble--min-width: var(--webchat-bubble-minWidth);\n\n --webchat-bubble-maxWidth: var(--bubble-maxWidth, max(450px, 75%));\n --webchat-bubble-minWidth: var(--bubble-minWidth, auto);\n --webchat-bubble-minHeight: var(--bubble-minHeight, 36px);\n --webchat-externalLink-mask: var(\n --externalLink-mask,\n var(--webchat__icon-url--external-link) center center /\n 10px 10px\n );\n --webchat-externalLink-maxWidth: var(--externalLink-maxWidth, 204px);\n\n /* Override for stacked layout message which has user message bubble props */\n &:has(:global(.webchat__stacked-layout .webchat__bubble--from-user)) {\n --webchat__bubble--background-color: var(--webchat-colorBrandBackground2);\n --webchat__bubble--block-padding: var(--webchat-spacingVerticalS);\n --webchat__bubble--min-width: auto;\n }\n}\n\n/* Decorator fluent variant */\n:global(.webchat-fluent) .activity-decorator.variant-fluent {\n --webchat__bubble--background-color: var(--webchat-colorNeutralBackground1);\n --webchat__bubble--border-radius: var(--webchat-borderRadiusXLarge);\n --webchat__bubble--box-shadow: var(--webchat-shadow4);\n}\n\n/* Decorator copilot variant */\n:global(.webchat-fluent) .activity-decorator.variant-copilot {\n --webchat__bubble--border-radius: var(--webchat-borderRadiusXLarge);\n\n :global(.webchat__activity-status) {\n margin: 0 0 var(--webchat-spacingHorizontalXXS);\n }\n\n :global(.webchat__stacked-layout__status) {\n order: -1;\n }\n\n &:has(:global(.webchat__bubble--from-user)) :global(.webchat__bubble) {\n margin-block-end: var(--webchat-spacingVerticalM);\n }\n\n /* Hide generated badge as it is in the copilot header */\n :global(.webchat__bubble .webchat__text-content .webchat__text-content__generated-badge) {\n display: none;\n }\n}\n\n/* Decorator copilot variant which has bot message */\n:global(.webchat-fluent) .activity-decorator.variant-copilot:not(:has(:global(.webchat__bubble--from-user))) {\n --webchat__bubble--block-padding: 0;\n --webchat__bubble--border-radius: var(--webchat-borderRadiusMedium);\n --webchat__bubble--inline-padding: 0;\n --webchat__bubble--max-width: 100%;\n --webchat__bubble--min-height: 20px;\n\n display: flex;\n flex-flow: column nowrap;\n gap: var(--webchat-spacingVerticalS);\n margin-inline: var(--webchat-spacingHorizontalM);\n padding: var(--webchat-spacingVerticalMNudge) var(--webchat-spacingHorizontalM) var(--webchat-spacingVerticalM);\n position: relative;\n\n :global(.webchat__stacked-layout) {\n margin: 0;\n position: static;\n }\n\n :global(.webchat__bubble) {\n position: static;\n width: var(--webchat__bubble--max-width);\n }\n\n :global(.webchat__bubble .webchat__bubble__content) {\n overflow: visible;\n }\n\n :global(.webchat__text-content) {\n margin-inline-start: 28px;\n }\n\n :global(.border-loader) {\n display: flex;\n flex-flow: column nowrap;\n gap: var(--webchat-spacingVerticalS);\n padding-inline-end: var(--webchat-spacingHorizontalM);\n width: 500px;\n }\n\n :global(.border-loader__track) {\n border-radius: inherit;\n box-sizing: border-box;\n clip-path: border-box;\n margin-inline-start: 28px;\n order: -1;\n width: auto;\n }\n\n :global(.webchat__stacked-layout__status) {\n display: none;\n }\n}\n\n/* Transcript activity non-empty */\n:global(.webchat-fluent) .activity-decorator :global(.webchat__basic-transcript__activity-body:not(:empty)) {\n padding-block-end: var(--webchat-spacingVerticalXL);\n}\n\n/* Stacked layout */\n:global(.webchat-fluent) .activity-decorator :global(.webchat__stacked-layout) {\n display: flex;\n flex-flow: column nowrap;\n}\n\n/* Stacked layout which has message bubble */\n:global(.webchat-fluent)\n .activity-decorator\n :global(.webchat__stacked-layout .webchat__stacked-layout__content:has(.webchat__bubble)) {\n max-width: 100%;\n overflow: visible;\n}\n\n/* Message status */\n:global(.webchat-fluent) .activity-decorator :global(.webchat__stacked-layout .webchat__stacked-layout__status) {\n font-size: var(--webchat__font-size--small);\n line-height: var(--webchat__line-height--small);\n}\n\n/* Message bubble */\n:global(.webchat-fluent) .activity-decorator :global(.webchat__stacked-layout .webchat__bubble) {\n max-width: min(var(--webchat__bubble--max-width), 100%);\n min-width: var(--webchat__bubble--min-width);\n overflow: visible;\n\n /* Take all width available when has message bubble latency loader */\n &:has(:global(.border-loader)) {\n width: 100%;\n }\n\n /* Ensure activity loader doesn't have bubble and shadow */\n &:has(:global(.activity-loader)) :global(.webchat__bubble__content) {\n background: transparent;\n box-shadow: none;\n }\n}\n\n/* Message bubble content */\n:global(.webchat-fluent)\n .activity-decorator\n :global(.webchat__stacked-layout .webchat__bubble .webchat__bubble__content) {\n background-color: var(--webchat__bubble--background-color);\n border-radius: var(--webchat__bubble--border-radius);\n border-width: 0;\n box-shadow: var(--webchat__bubble--box-shadow);\n box-sizing: border-box;\n color: var(--webchat-colorNeutralForeground1);\n max-width: 100%;\n min-height: var(--webchat__bubble--min-height);\n}\n\n/* Message bubble text content */\n:global(.webchat-fluent) .activity-decorator :global(.webchat__stacked-layout .webchat__bubble .webchat__text-content) {\n font-size: var(--webchat__font-size--medium);\n line-height: var(--webchat__line-height--medium);\n min-height: auto;\n padding-block: var(--webchat__bubble--block-padding);\n padding-inline: var(--webchat__bubble--inline-padding);\n\n &:empty {\n padding-block-end: 0;\n }\n\n + :global(.webchat__text-content) {\n margin-top: calc(var(--webchat__bubble--block-padding) * -1);\n }\n}\n\n/* Message bubble text content generated badge */\n:global(.webchat-fluent)\n .activity-decorator\n :global(.webchat__stacked-layout .webchat__bubble .webchat__text-content__generated-badge) {\n align-items: center;\n align-self: flex-start;\n background-color: var(--webchat-colorNeutralBackground5);\n border-radius: var(--webchat-borderRadiusMedium);\n box-sizing: border-box;\n color: var(--webchat-colorNeutralForeground3);\n cursor: default;\n display: inline-flex;\n font-size: var(--webchat-fontSizeBase100);\n height: 16px;\n line-height: var(--webchat-lineHeightBase100);\n padding-inline: var(--webchat-spacingHorizontalXS);\n}\n\n/* Message bubble attachment content */\n:global(.webchat-fluent)\n .activity-decorator\n :global(.webchat__stacked-layout .webchat__bubble .webchat__fileContent__badge) {\n cursor: default;\n font-size: var(--webchat-fontSizeBase300);\n line-height: var(--webchat-lineHeightBase300);\n\n :global(.webchat__fileContent__fileName) {\n color: var(--webchat-colorBrandForegroundLink);\n font-family: inherit;\n }\n :global(.webchat__fileContent__size) {\n color: var(--webchat-colorNeutralForeground2);\n font-family: inherit;\n }\n}\n\n/* Markdown links and citation links */\n:global(.webchat-fluent)\n .activity-decorator\n :global(.webchat__render-markdown)\n a[href]:not(:global(.webchat__render-markdown__pure-identifier)) {\n color: var(--webchat-colorBrandForegroundLink);\n text-decoration-color: transparent;\n\n &:target {\n color: var(--webchat-colorBrandForegroundLinkSelected);\n }\n\n &:hover {\n color: var(--webchat-colorBrandForegroundLinkHover);\n text-decoration: underline 1px currentColor;\n }\n\n &:active {\n color: var(--webchat-colorBrandForegroundLinkPressed);\n }\n\n &:focus-visible {\n outline: none;\n text-decoration: underline 1px double var(--webchat-colorStrokeFocus2);\n }\n\n :global(.webchat__render-markdown__external-link-icon) {\n background: currentColor;\n -webkit-mask: var(--webchat__icon-url--external-link) no-repeat;\n mask: var(--webchat__icon-url--external-link) no-repeat;\n }\n}\n\n/* Citation inline references */\n:global(.webchat-fluent)\n .activity-decorator\n :global(.webchat__render-markdown)\n :global(.webchat__render-markdown__citation),\n:global(.webchat-fluent)\n .activity-decorator\n :global(.webchat__render-markdown)\n :global(.webchat__render-markdown__pure-identifier) {\n align-items: center;\n background-color: var(--webchat-colorNeutralBackground3);\n border-radius: var(--webchat-borderRadiusMedium);\n border: var(--webchat-strokeWidthThin) solid var(--webchat-colorNeutralStroke2);\n box-sizing: border-box;\n color: var(--webchat-colorNeutralForeground2);\n display: inline-flex;\n font-size: var(--webchat-fontSizeBase100);\n font-weight: var(--webchat-fontWeightSemibold);\n height: 14px;\n justify-content: center;\n line-height: var(--webchat-lineHeightBase100);\n margin-left: var(--webchat-spacingHorizontalXXS);\n margin-right: var(--webchat-spacingHorizontalXXS);\n min-width: 14px;\n text-decoration: none;\n transition: all var(--webchat-durationNormal) var(--webchat-curveDecelerateMid);\n vertical-align: calc((var(--webchat-lineHeightBase100) - var(--webchat-fontSizeBase100)) / 2);\n\n &:hover {\n background-color: var(--webchat-colorBrandBackground2Hover);\n border-color: var(--webchat-colorBrandStroke2Hover);\n color: var(--webchat-colorBrandForeground2Hover);\n cursor: pointer;\n }\n\n &:hover:active {\n background-color: var(--webchat-colorBrandBackground2Pressed);\n border-color: var(--webchat-colorBrandStroke2Pressed);\n color: var(--webchat-colorBrandForeground2Pressed);\n }\n\n &::before,\n &::after {\n all: unset;\n }\n\n &:has(:global(.webchat__render-markdown__external-link-icon)) {\n padding-inline: 3px;\n }\n\n :global(.webchat__render-markdown__external-link-icon) {\n background: currentColor;\n height: 0.7em;\n -webkit-mask: var(--webchat__icon-url--external-link) no-repeat;\n mask: var(--webchat__icon-url--external-link) no-repeat;\n }\n}\n\n/* Citation summary chevron */\n:global(.webchat-fluent) .activity-decorator :global(.webchat__link-definitions__header) {\n border-radius: var(--webchat-borderRadiusMedium);\n\n :global(.webchat__link-definitions__header-text) {\n color: var(--webchat-colorNeutralForeground3);\n }\n\n :global(.webchat__link-definitions__header-chevron) {\n fill: var(--webchat-colorNeutralForeground3);\n font-size: var(--webchat__font-size--small);\n width: 1em;\n }\n\n &:focus-visible {\n outline-offset: 1px;\n outline: var(--webchat-strokeWidthThin) solid var(--webchat-colorStrokeFocus2);\n }\n}\n\n/* Citation link definitions */\n:global(.webchat-fluent) .activity-decorator :global(.webchat__link-definitions) {\n --webchat__citation__external-link--mask: var(--webchat-externalLink-mask);\n --webchat__citation__link--max-width: var(--webchat-externalLink-maxWidth);\n\n :global(.webchat__link-definitions__list) {\n color: var(--webchat__color--subtle);\n display: flex;\n flex-flow: row wrap;\n gap: var(--webchat-spacingHorizontalS);\n }\n\n :global(.webchat__link-definitions__list-item) {\n border-radius: var(--webchat-borderRadiusMedium);\n max-width: var(--webchat__citation__link--max-width);\n }\n\n :global(.webchat__link-definitions__list-item-box) {\n background-color: var(--webchat-colorNeutralBackground3);\n border-radius: var(--webchat-borderRadiusMedium);\n border: var(--webchat-strokeWidthThin) solid var(--webchat-colorNeutralStroke2);\n box-sizing: border-box;\n color: currentColor;\n display: inline-flex;\n font-size: var(--webchat__font-size--small);\n height: 24px;\n padding-inline-end: var(--webchat-spacingHorizontalS);\n }\n\n :global(.webchat__link-definitions__list-item-body) {\n font-family: inherit;\n gap: var(--webchat-spacingHorizontalSNudge);\n min-width: 0;\n padding: 0;\n }\n\n :global(.webchat__link-definitions__badge) {\n align-self: center;\n background-color: transparent;\n border-radius: 0;\n border: none;\n color: currentColor;\n font-size: var(--webchat-fontSizeBase100);\n font-weight: var(--webchat-fontWeightSemibold);\n line-height: var(--webchat-lineHeightBase100);\n margin: 0;\n min-width: 20px;\n padding: 0;\n position: relative;\n text-align: center;\n }\n\n :global(.webchat__link-definitions__badge)::after {\n border-right: var(--webchat-strokeWidthThin) solid var(--webchat-colorNeutralStroke2);\n bottom: 0;\n content: '';\n display: block;\n height: 16px;\n position: absolute;\n right: 0;\n top: 0;\n width: 0;\n }\n\n :global(.webchat__link-definitions__list-item-main-text) {\n gap: var(--webchat-spacingHorizontalXS);\n }\n\n :global(.webchat__link-definitions__list-item-text) {\n color: currentColor;\n text-decoration: none;\n text-overflow: ellipsis;\n }\n\n :global(.webchat__link-definitions__list-item-main-text):has(\n :global(.webchat__link-definitions__open-in-new-window-icon)\n )::before {\n align-self: center;\n background: currentColor;\n color: currentColor;\n content: '';\n flex: none;\n font-size: var(--webchat-fontSizeBase400);\n height: 1em;\n -webkit-mask: var(--webchat__citation__external-link--mask) no-repeat;\n mask: var(--webchat__citation__external-link--mask) no-repeat;\n padding: 0;\n width: 1em;\n }\n\n /* It seems Copilot does not show per-item sensitivity label, i.e. \"General\", etc. */\n :global(.webchat__link-definitions__list-item-badge) {\n display: none;\n }\n\n :global(.webchat__link-definitions__open-in-new-window-icon) {\n display: none;\n }\n}\n","import React, { memo, useMemo, type CSSProperties } from 'react';\nimport { WebChatActivity, hooks } from 'botframework-webchat-component';\n\nimport useActivityStyleOptions from './private/useActivityStyleOptions';\nimport isAIGeneratedActivity from './private/isAIGeneratedActivity';\nimport useActivityAuthor from './private/useActivityAuthor';\nimport { useStyles } from '../../styles';\nimport styles from './CopilotMessageHeader.module.css';\n\nconst { useLocalizer } = hooks;\n\nfunction CopilotMessageHeader({ activity }: Readonly<{ activity?: WebChatActivity | undefined }>) {\n const [{ botAvatarImage, botAvatarBackgroundColor }] = useActivityStyleOptions(activity);\n const classNames = useStyles(styles);\n const localize = useLocalizer();\n const isAIGenerated = isAIGeneratedActivity(activity);\n\n const avatarStyle = useMemo(\n () => ({ '--background-color': botAvatarBackgroundColor }) as CSSProperties,\n [botAvatarBackgroundColor]\n );\n\n const author = useActivityAuthor(activity);\n const avatarImage = author?.image || botAvatarImage;\n const botTitle = author?.name || activity?.from?.name;\n\n return (\n <div className={classNames['copilot-message-header']}>\n {avatarImage && (\n <img\n alt={localize('AVATAR_ALT', botTitle)}\n className={classNames['copilot-message-header__avatar']}\n src={avatarImage}\n style={avatarStyle}\n />\n )}\n <span className={classNames['copilot-message-header__title']} title={botTitle}>\n {botTitle}\n </span>\n {isAIGenerated && (\n <span className={classNames['copilot-message-header__ai-generated-content']}>\n {localize('ACTIVITY_CONTENT_CAUTION')}\n </span>\n )}\n </div>\n );\n}\n\nexport default memo(CopilotMessageHeader);\n","import { useMemo } from 'react';\nimport { hooks, type WebChatActivity } from 'botframework-webchat-component';\nimport { type StrictStyleOptions } from 'botframework-webchat-api';\n\nconst { useStyleOptions } = hooks;\n\nexport default function useActivityStyleOptions(activity?: WebChatActivity | undefined) {\n const [styleOptions] = useStyleOptions();\n return useMemo<readonly [Readonly<StrictStyleOptions>]>(\n () =>\n Object.freeze([\n {\n ...styleOptions,\n ...activity?.channelData?.webChat?.styleOptions\n }\n ]),\n [activity?.channelData?.webChat?.styleOptions, styleOptions]\n );\n}\n","import { getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat-core';\n\nexport default function isAIGeneratedActivity(activity: undefined | WebChatActivity) {\n return !!(activity && getOrgSchemaMessage(activity?.entities || [])?.keywords?.includes('AIGeneratedContent'));\n}\n","import { useMemo } from 'react';\nimport { getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat-core';\n\nexport default function useActivityAuthor(activity?: WebChatActivity | undefined) {\n return useMemo(() => {\n const entity = getOrgSchemaMessage(activity?.entities || []);\n return typeof entity?.author === 'string'\n ? {\n '@type': 'Person',\n description: undefined,\n image: undefined,\n name: entity?.author\n }\n : entity?.author;\n }, [activity]);\n}\n",":global(.webchat-fluent) .copilot-message-header {\n align-items: center;\n box-sizing: border-box;\n cursor: default;\n display: flex;\n flex-wrap: nowrap;\n gap: var(--webchat-spacingHorizontalS);\n max-width: var(--webchat__bubble--max-width);\n}\n\n:global(.webchat-fluent) .copilot-message-header__avatar {\n aspect-ratio: 1;\n background-color: var(--background-color);\n border-radius: var(--webchat-borderRadiusSmall);\n width: 20px;\n}\n\n:global(.webchat-fluent) .copilot-message-header__title {\n font-size: var(--webchat-fontSizeBase300);\n font-weight: var(--webchat-fontWeightSemibold);\n line-height: var(--webchat-lineHeightBase300);\n overflow: hidden;\n text-overflow: ellipsis;\n text-wrap: nowrap;\n}\n\n:global(.webchat-fluent) .copilot-message-header__ai-generated-content {\n align-items: center;\n background-color: var(--webchat-colorNeutralBackground5);\n border-radius: var(--webchat-borderRadiusMedium);\n color: var(--webchat-colorNeutralForeground3);\n display: flex;\n flex: none;\n font-size: var(--webchat-fontSizeBase100);\n height: 20px;\n line-height: var(--webchat-lineHeightBase100);\n padding-inline: var(--webchat-spacingHorizontalXS);\n}\n","import type { DirectLineCardAction } from 'botframework-webchat-core';\n\n// Please refer to this article to find out how to compute the \"button text\" for suggested action.\n// https://github.com/Microsoft/botframework-sdk/blob/main/specs/botframework-activity/botframework-activity.md#card-action\nexport default function computeSuggestedActionText(cardAction: DirectLineCardAction) {\n // \"CardAction\" must contains at least image or title.\n const { title } = cardAction as { title?: string };\n const { type, value } = cardAction;\n\n if (type === 'messageBack') {\n return title || cardAction.displayText;\n } else if (title) {\n return title;\n } else if (typeof value === 'string') {\n return value;\n }\n\n return JSON.stringify(value);\n}\n\n// TODO: [P1] This is copied from botframework-webchat-component. Think about what we should do to eliminate duplications.\n","/* eslint-disable no-magic-numbers */\nimport React, {\n type MutableRefObject,\n createContext,\n memo,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef\n} from 'react';\n\ntype ItemRef = MutableRefObject<HTMLElement | undefined>;\n\ntype RovingFocusContextType = {\n itemEffector: <T extends HTMLElement>(ref: MutableRefObject<T | null>, index: number) => () => void;\n};\n\nconst RovingFocusContext = createContext<RovingFocusContextType>({\n itemEffector: () => {\n // This will be implemented when using in <RovingFocusProvider>.\n throw new Error('botframework-webchat-fluent-theme rovingFocus: no provider for RovingFocusContext.');\n }\n});\n\nfunction RovingFocusProvider(\n props: Readonly<{\n children?: React.ReactNode | undefined;\n direction?: 'vertical' | 'horizontal' | undefined;\n onEscapeKey?: () => void;\n }>\n) {\n const activeItemIndexRef = useRef(0);\n const itemRefsRef = useRef<ItemRef[]>([]);\n\n const updateItemTabIndex = useCallback(\n ({ current }: ItemRef, index: number) =>\n current && (current.tabIndex = activeItemIndexRef.current === index ? 0 : -1),\n [activeItemIndexRef]\n );\n\n const setActiveItemIndex = useCallback(\n (valueOrFunction: number | ((value: number) => number)) => {\n // All calls to this function is expected to be under event handlers (post-rendering).\n let nextActiveItemIndex;\n\n if (typeof valueOrFunction === 'number') {\n nextActiveItemIndex = valueOrFunction;\n } else {\n nextActiveItemIndex = valueOrFunction(activeItemIndexRef.current);\n }\n\n // If the index points to no item, fallback to the first item.\n // This makes sure at least one of the item in the container is selected.\n if (nextActiveItemIndex && !itemRefsRef.current.at(nextActiveItemIndex)?.current) {\n nextActiveItemIndex = 0;\n }\n\n if (activeItemIndexRef.current !== nextActiveItemIndex) {\n activeItemIndexRef.current = nextActiveItemIndex;\n\n itemRefsRef.current.forEach((ref, index) => updateItemTabIndex(ref, index));\n itemRefsRef.current.at(nextActiveItemIndex)?.current?.focus();\n }\n },\n [updateItemTabIndex, itemRefsRef, activeItemIndexRef]\n );\n\n const handleFocus = useCallback(\n event => {\n const { target } = event;\n\n const index = itemRefsRef.current.findIndex(({ current }) => current === target);\n\n // prevent focusing the last element, if we didn't found the element focused\n if (index !== -1) {\n setActiveItemIndex(index);\n }\n },\n [itemRefsRef, setActiveItemIndex]\n );\n\n const handleSetNextActive = useCallback(\n (key: string) =>\n (currentIndex: number): number => {\n const isUnidirectional = !props.direction;\n const isVerticalMove = /up|down/iu.test(key) && props.direction === 'vertical';\n const isHorizontalMove = /left|right/iu.test(key) && props.direction === 'horizontal';\n const isForwardMove = /right|down/iu.test(key);\n const direction = isUnidirectional || isVerticalMove || isHorizontalMove ? (isForwardMove ? 1 : -1) : 0;\n // The `itemRefsRef` array could be a sparse array.\n // Thus, the next item may not be immediately next to the current one.\n const itemIndices = itemRefsRef.current.map((_, index) => index);\n const nextIndex = itemIndices.indexOf(currentIndex) + direction;\n\n return itemIndices.at(nextIndex) ?? 0;\n },\n [props.direction]\n );\n\n const handleKeyDown = useCallback<(event: KeyboardEvent) => void>(\n event => {\n const { key } = event;\n\n switch (key) {\n case 'Up':\n case 'ArrowUp':\n case 'Left':\n case 'ArrowLeft':\n case 'Down':\n case 'ArrowDown':\n case 'Right':\n case 'ArrowRight':\n setActiveItemIndex(handleSetNextActive(key));\n break;\n\n case 'Home':\n setActiveItemIndex(0);\n break;\n\n case 'End':\n setActiveItemIndex(-1);\n break;\n\n case 'Escape':\n props.onEscapeKey?.();\n break;\n\n default:\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n },\n [setActiveItemIndex, handleSetNextActive, props]\n );\n\n const itemEffector = useCallback(\n (ref, index) => {\n const { current } = ref;\n\n itemRefsRef.current[Number(index)] = ref;\n\n current.addEventListener('focus', handleFocus);\n current.addEventListener('keydown', handleKeyDown);\n\n updateItemTabIndex(ref, index);\n\n return () => {\n current.removeEventListener('focus', handleFocus);\n current.removeEventListener('keydown', handleKeyDown);\n\n delete itemRefsRef.current[Number(index)];\n };\n },\n [handleFocus, handleKeyDown, updateItemTabIndex, itemRefsRef]\n );\n\n const value = useMemo<RovingFocusContextType>(\n () => ({\n itemEffector\n }),\n [itemEffector]\n );\n\n return <RovingFocusContext.Provider value={value}>{props.children}</RovingFocusContext.Provider>;\n}\n\nexport function useRovingFocusItemRef<T extends HTMLElement>(itemIndex: number): MutableRefObject<T | null> {\n const ref = useRef<T>(null);\n\n const { itemEffector } = useContext(RovingFocusContext);\n\n useEffect(() => itemEffector(ref, itemIndex));\n\n return ref;\n}\n\nexport default memo(RovingFocusProvider);\n","import { hooks } from 'botframework-webchat-component';\nimport { type DirectLineCardAction } from 'botframework-webchat-core';\nimport cx from 'classnames';\nimport React, { MouseEventHandler, memo, useCallback } from 'react';\n\nimport { useStyles } from '../../styles';\nimport testIds from '../../testIds';\nimport AccessibleButton from './AccessibleButton';\nimport { useRovingFocusItemRef } from './private/rovingFocus';\nimport styles from './SuggestedAction.module.css';\n\nconst { useFocus, usePerformCardAction, useScrollToEnd, useStyleSet, useSuggestedActions, useUIState } = hooks;\n\ntype SuggestedActionProps = Readonly<{\n buttonText: string | undefined;\n className?: string | undefined;\n displayText?: string | undefined;\n image?: string | undefined;\n imageAlt?: string | undefined;\n itemIndex: number;\n text?: string | undefined;\n type?:\n | 'call'\n | 'downloadFile'\n | 'imBack'\n | 'messageBack'\n | 'openUrl'\n | 'playAudio'\n | 'playVideo'\n | 'postBack'\n | 'showImage'\n | 'signin';\n value?: any;\n}>;\n\nfunction SuggestedAction({\n buttonText,\n className,\n displayText,\n image,\n imageAlt,\n itemIndex,\n text,\n type,\n value\n}: SuggestedActionProps) {\n const [_, setSuggestedActions] = useSuggestedActions();\n const [{ suggestedAction: suggestedActionStyleSet }] = useStyleSet();\n const [uiState] = useUIState();\n const focus = useFocus();\n const focusRef = useRovingFocusItemRef<HTMLButtonElement>(itemIndex);\n const performCardAction = usePerformCardAction();\n const classNames = useStyles(styles);\n const scrollToEnd = useScrollToEnd();\n\n const handleClick = useCallback<MouseEventHandler<HTMLButtonElement>>(\n ({ target }) => {\n (async function () {\n // We need to focus to the send box before we are performing this card action.\n // The will make sure the focus is always on Web Chat.\n // Otherwise, the focus may momentarily send to `document.body` and screen reader will be confused.\n await focus('sendBoxWithoutKeyboard');\n\n // TODO: [P3] #XXX We should not destruct DirectLineCardAction into React props and pass them in. It makes typings difficult.\n // Instead, we should pass a \"cardAction\" props.\n performCardAction({ displayText, text, type, value } as DirectLineCardAction, { target });\n\n // Since \"openUrl\" action do not submit, the suggested action buttons do not hide after click.\n type === 'openUrl' && setSuggestedActions([]);\n\n scrollToEnd();\n })();\n },\n [displayText, focus, performCardAction, scrollToEnd, setSuggestedActions, text, type, value]\n );\n\n return (\n <AccessibleButton\n className={cx(classNames['suggested-action'], suggestedActionStyleSet + '', (className || '') + '')}\n data-testid={testIds.sendBoxSuggestedAction}\n disabled={uiState === 'disabled'}\n onClick={handleClick}\n ref={focusRef}\n type=\"button\"\n >\n {image && <img alt={imageAlt} className={classNames['suggested-action__image']} src={image} />}\n <span>{buttonText}</span>\n </AccessibleButton>\n );\n}\n\nexport default memo(SuggestedAction);\n","import React, { MouseEventHandler, ReactNode, forwardRef, memo, useRef } from 'react';\n\nconst preventDefaultHandler: MouseEventHandler<HTMLButtonElement> = event => event.preventDefault();\n\ntype AccessibleButtonProps = Readonly<{\n 'aria-hidden'?: boolean | undefined;\n 'data-testid'?: string | undefined;\n children?: ReactNode | undefined;\n className?: string | undefined;\n disabled?: boolean | undefined;\n onClick?: MouseEventHandler<HTMLButtonElement> | undefined;\n tabIndex?: number | undefined;\n type: 'button';\n}>;\n\n// Differences between <button> and <AccessibleButton>:\n// - Disable behavior\n// - When the widget is disabled\n// - Set \"aria-disabled\" attribute to \"true\"\n// - Set \"readonly\" attribute\n// - Set \"tabIndex\" to -1\n// - Remove \"onClick\" handler\n// - Why this is needed\n// - Browser compatibility: when the widget is disabled, different browser send focus to different places\n// - When the widget become disabled, it's reasonable to keep the focus on the same widget for an extended period of time\n// - When the user presses TAB after the current widget is disabled, it should jump to the next non-disabled widget\n\n// Developers using this accessible widget will need to:\n// - Style the disabled widget themselves, using CSS query `:disabled, [aria-disabled=\"true\"] {}`\n// - Modify all code that check disabled through \"disabled\" attribute to use aria-disabled=\"true\" instead\n// - aria-disabled=\"true\" is the source of truth\n// - If the widget is contained by a <form>, the developer need to filter out some `onSubmit` event caused by this widget\n\nconst AccessibleButton = forwardRef<HTMLButtonElement, AccessibleButtonProps>(\n (\n { 'aria-hidden': ariaHidden, children, className, 'data-testid': dataTestId, disabled, onClick, tabIndex },\n forwardedRef\n ) => {\n const targetRef = useRef<HTMLButtonElement>(null);\n\n const ref = forwardedRef || targetRef;\n\n return (\n <button\n aria-disabled={disabled ? 'true' : undefined}\n aria-hidden={ariaHidden}\n className={className}\n data-testid={dataTestId}\n onClick={disabled ? preventDefaultHandler : onClick}\n ref={ref}\n // eslint-disable-next-line no-magic-numbers\n tabIndex={disabled ? -1 : tabIndex}\n type=\"button\"\n >\n {children}\n </button>\n );\n }\n);\n\nexport default memo(AccessibleButton);\n",":global(.webchat-fluent) .suggested-action {\n align-items: center;\n background: transparent;\n border-radius: var(--webchat-borderRadiusXLarge);\n border: var(--webchat-strokeWidthThin) solid var(--webchat-colorBrandStroke2);\n color: currentColor;\n cursor: pointer;\n display: flex;\n font-family: var(--webchat__font--primary);\n font-size: var(--webchat-fontSizeBase200);\n gap: var(--webchat-spacingHorizontalXS);\n padding: var(--webchat-spacingVerticalXS) var(--webchat-spacingHorizontalS);\n text-align: start;\n transition: all var(--webchat-durationNormal) var(--webchat-curveDecelerateMid);\n\n @media (hover: hover) {\n &:not([aria-disabled='true']):hover {\n background-color: var(--webchat-colorBrandBackground2Hover);\n color: var(--webchat-colorBrandForeground2Hover);\n }\n }\n &:not([aria-disabled='true']):active {\n background-color: var(--webchat-colorBrandBackground2Pressed);\n color: var(--webchat-colorBrandForeground2Pressed);\n }\n &[aria-disabled='true'] {\n color: var(--webchat-colorNeutralForegroundDisabled);\n cursor: not-allowed;\n }\n}\n\n:global(.webchat-fluent) .suggested-action__image {\n font-size: var(--webchat-fontSizeBase200);\n height: 1em;\n width: 1em;\n}\n",":global(.webchat-fluent) .suggested-actions {\n align-items: flex-end;\n align-self: flex-end;\n display: flex;\n flex-direction: column;\n gap: 8px;\n\n &:not(:empty) {\n padding-block-end: 8px;\n padding-inline-start: 4px;\n }\n\n &.suggested-actions--flow {\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-end;\n }\n\n &.suggested-actions--stacked {\n flex-direction: column;\n }\n}\n","import React, { memo, useMemo, useState, type ReactNode } from 'react';\n\nimport Context from './private/Context';\n\ntype Props = Readonly<{ children?: ReactNode | undefined }>;\n\nconst Provider = memo(({ children }: Props) => {\n const [shown, setShown] = useState(false);\n\n const context = useMemo(\n () =>\n Object.freeze({\n setShown,\n shown\n }),\n [setShown, shown]\n );\n\n return <Context.Provider value={context}>{children}</Context.Provider>;\n});\n\nexport default Provider;\n","import { createContext, type Dispatch, type SetStateAction } from 'react';\n\ntype ContextType = Readonly<{\n setShown: Dispatch<SetStateAction<boolean>>;\n shown: boolean;\n}>;\n\nconst Context = createContext<ContextType>(\n new Proxy({} as ContextType, {\n get() {\n throw new Error('botframework-webchat: This hook can only used under its corresponding <Provider>.');\n }\n })\n);\n\nContext.displayName = 'TelephoneKeypad.Context';\n\nexport default Context;\n","import React, { memo } from 'react';\n\nimport type { PropsOf } from '../../types';\nimport TelephoneKeypad from './private/TelephoneKeypad';\nimport useShown from './useShown';\n\ntype Props = PropsOf<typeof TelephoneKeypad>;\n\nconst TelephoneKeypadSurrogate = memo((props: Props) => (useShown()[0] ? <TelephoneKeypad {...props} /> : null));\n\nTelephoneKeypadSurrogate.displayName = 'TelephoneKeypad.Surrogate';\n\nexport default TelephoneKeypadSurrogate;\n","import { Components } from 'botframework-webchat-component';\nimport cx from 'classnames';\nimport React, { memo, useCallback, useEffect, useRef, type KeyboardEventHandler, type ReactNode } from 'react';\nimport { useRefFrom } from 'use-ref-from';\n\nimport Button from './Button';\n// import HorizontalDialPadController from './HorizontalDialPadController';\nimport testIds from '../../../testIds';\nimport { type DTMF } from '../types';\nimport useShown from '../useShown';\nimport styles from './TelephoneKeypad.module.css';\nimport { useStyles } from '../../../styles';\nimport { InfoSmallIcon } from '../../../icons';\n\nconst { LocalizedString } = Components;\n\ntype Props = Readonly<{\n autoFocus?: boolean | undefined;\n className?: string | undefined;\n isHorizontal: boolean;\n onButtonClick: (button: DTMF) => void;\n}>;\n\nconst Orientation = memo(\n ({ children, isHorizontal }: Readonly<{ children?: ReactNode | undefined; isHorizontal: boolean }>) => {\n const classNames = useStyles(styles);\n\n return isHorizontal ? null : ( // <HorizontalDialPadController>{children}</HorizontalDialPadController>\n <div className={classNames['telephone-keypad__box']}>{children}</div>\n );\n }\n);\n\nOrientation.displayName = 'TelephoneKeypad:Orientation';\n\nconst TelephoneKeypad = memo(({ autoFocus, className, onButtonClick, isHorizontal }: Props) => {\n const autoFocusRef = useRefFrom(autoFocus);\n const classNames = useStyles(styles);\n const firstButtonRef = useRef<HTMLButtonElement>(null);\n const onButtonClickRef = useRefFrom(onButtonClick);\n const [, setShown] = useShown();\n\n const handleButton1Click = useCallback(() => onButtonClickRef.current?.('1'), [onButtonClickRef]);\n const handleButton2Click = useCallback(() => onButtonClickRef.current?.('2'), [onButtonClickRef]);\n const handleButton3Click = useCallback(() => onButtonClickRef.current?.('3'), [onButtonClickRef]);\n const handleButton4Click = useCallback(() => onButtonClickRef.current?.('4'), [onButtonClickRef]);\n const handleButton5Click = useCallback(() => onButtonClickRef.current?.('5'), [onButtonClickRef]);\n const handleButton6Click = useCallback(() => onButtonClickRef.current?.('6'), [onButtonClickRef]);\n const handleButton7Click = useCallback(() => onButtonClickRef.current?.('7'), [onButtonClickRef]);\n const handleButton8Click = useCallback(() => onButtonClickRef.current?.('8'), [onButtonClickRef]);\n const handleButton9Click = useCallback(() => onButtonClickRef.current?.('9'), [onButtonClickRef]);\n const handleButton0Click = useCallback(() => onButtonClickRef.current?.('0'), [onButtonClickRef]);\n const handleButtonStarClick = useCallback(() => onButtonClickRef.current?.('*'), [onButtonClickRef]);\n const handleButtonPoundClick = useCallback(() => onButtonClickRef.current?.('#'), [onButtonClickRef]);\n const handleKeyDown = useCallback<KeyboardEventHandler<HTMLDivElement>>(\n event => {\n if (event.key === 'Escape') {\n // TODO: Should send focus to the send box.\n setShown(false);\n }\n },\n [setShown]\n );\n\n useEffect(() => {\n autoFocusRef.current && firstButtonRef.current?.focus();\n }, [autoFocusRef, firstButtonRef]);\n\n return (\n <div className={cx(classNames['telephone-keypad'], className)} onKeyDown={handleKeyDown}>\n <Orientation isHorizontal={isHorizontal}>\n <Button\n button=\"1\"\n data-testid={testIds.sendBoxTelephoneKeypadButton1}\n onClick={handleButton1Click}\n ref={firstButtonRef}\n />\n <Button\n button=\"2\"\n data-testid={testIds.sendBoxTelephoneKeypadButton2}\n onClick={handleButton2Click}\n ruby=\"ABC\"\n />\n <Button\n button=\"3\"\n data-testid={testIds.sendBoxTelephoneKeypadButton3}\n onClick={handleButton3Click}\n ruby=\"DEF\"\n />\n <Button\n button=\"4\"\n data-testid={testIds.sendBoxTelephoneKeypadButton4}\n onClick={handleButton4Click}\n ruby=\"GHI\"\n />\n <Button\n button=\"5\"\n data-testid={testIds.sendBoxTelephoneKeypadButton5}\n onClick={handleButton5Click}\n ruby=\"JKL\"\n />\n <Button\n button=\"6\"\n data-testid={testIds.sendBoxTelephoneKeypadButton6}\n onClick={handleButton6Click}\n ruby=\"MNO\"\n />\n <Button\n button=\"7\"\n data-testid={testIds.sendBoxTelephoneKeypadButton7}\n onClick={handleButton7Click}\n ruby=\"PQRS\"\n />\n <Button\n button=\"8\"\n data-testid={testIds.sendBoxTelephoneKeypadButton8}\n onClick={handleButton8Click}\n ruby=\"TUV\"\n />\n <Button\n button=\"9\"\n data-testid={testIds.sendBoxTelephoneKeypadButton9}\n onClick={handleButton9Click}\n ruby=\"WXYZ\"\n />\n <Button button=\"*\" data-testid={testIds.sendBoxTelephoneKeypadButtonStar} onClick={handleButtonStarClick} />\n <Button button=\"0\" data-testid={testIds.sendBoxTelephoneKeypadButton0} onClick={handleButton0Click} ruby=\"+\" />\n <Button button=\"#\" data-testid={testIds.sendBoxTelephoneKeypadButtonPound} onClick={handleButtonPoundClick} />\n </Orientation>\n <div className={classNames['telephone-keypad__info-message']}>\n <InfoSmallIcon />\n <LocalizedString\n linkClassName={classNames['telephone-keypad__info-message-link']}\n stringIds=\"TELEPHONE_KEYPAD_INPUT_MESSAGE\"\n />\n </div>\n </div>\n );\n});\n\nTelephoneKeypad.displayName = 'TelephoneKeypad';\n\nexport default TelephoneKeypad;\n","import React, { forwardRef, memo, useCallback, type Ref } from 'react';\n\nimport { useRefFrom } from 'use-ref-from';\n\nimport { type DTMF } from '../types';\n\nimport styles from './Button.module.css';\nimport { useStyles } from '../../../styles';\n\ntype Props = Readonly<{\n button: DTMF;\n ['data-testid']?: string | undefined;\n onClick?: (() => void) | undefined;\n ruby?: string | undefined;\n}>;\n\nconst Button = memo(\n forwardRef(({ button, 'data-testid': dataTestId, onClick, ruby }: Props, ref: Ref<HTMLButtonElement>) => {\n const classNames = useStyles(styles);\n const onClickRef = useRefFrom(onClick);\n\n const handleClick = useCallback(() => onClickRef.current?.(), [onClickRef]);\n\n return (\n <button\n className={classNames['telephone-keypad__button']}\n data-testid={dataTestId}\n onClick={handleClick}\n ref={ref}\n type=\"button\"\n >\n <span className={classNames['telephone-keypad__button__text']}>{button === '*' ? '\\u2217' : button}</span>\n {!!ruby && <ruby className={classNames['telephone-keypad__button__ruby']}>{ruby}</ruby>}\n </button>\n );\n })\n);\n\nButton.displayName = 'TelephoneKeypad.Button';\n\nexport default Button;\n",":global(.webchat-fluent) .telephone-keypad__button {\n -webkit-user-select: none;\n align-items: center;\n appearance: none;\n /* backgroundColor: isDarkTheme() || isHighContrastTheme() ? black : white, */\n background-color: White;\n border-radius: 100%;\n\n /* Whitelabel styles */\n /* border: `solid 1px ${isHighContrastTheme() ? white : isDarkTheme() ? gray160 : gray40}`, */\n /* color: inherit; */\n\n border: solid 1px var(--webchat-colorNeutralStroke1);\n color: var(--webchat-colorGray200);\n font-weight: var(--webchat-fontWeightSemibold);\n\n cursor: pointer;\n display: flex;\n flex-direction: column;\n height: 60px;\n opacity: 0.7;\n padding: 0;\n position: relative;\n touch-action: none;\n user-select: none;\n width: 60px;\n\n &:hover {\n /* backgroundColor: isHighContrastTheme() ? gray210 : isDarkTheme() ? gray150 : gray30 */\n background-color: var(--webchat-colorGray30);\n }\n}\n\n:global(.webchat-fluent) .telephone-keypad__button__ruby {\n /* color: isHighContrastTheme() ? white : isDarkTheme() ? gray40 : gray160, */\n color: var(--webchat-colorGray190);\n font-size: 10px;\n}\n\n:global(.webchat-fluent) .telephone-keypad__button__text {\n font-size: 24px;\n margin-top: 8px;\n}\n\n:global(.webchat-fluent) .telephone-keypad--horizontal {\n & .telephone-keypad__button {\n height: 32px;\n justify-content: center;\n margin: 8px 4px;\n width: 32px;\n }\n\n .telephone-keypad__button__ruby {\n display: none;\n }\n\n & .telephone-keypad__button__text {\n font-size: 20px;\n margin-top: 0;\n }\n}\n","import { useContext, useMemo, type Dispatch, type SetStateAction } from 'react';\n\nimport Context from './private/Context';\n\nexport default function useShown(): readonly [boolean, Dispatch<SetStateAction<boolean>>] {\n const { setShown, shown } = useContext(Context);\n\n return useMemo(() => Object.freeze([shown, setShown]), [shown, setShown]);\n}\n",":global(.webchat-fluent) .telephone-keypad {\n /* Commented out whitelabel styles for now. */\n /* background: getHighContrastDarkThemeColor(highContrastColor: black, darkThemeColor: gray190, string, defaultColor: gray10), */\n /* borderRadius: '8px 8px 0px 0px; */\n /* boxShadow: '-3px 0px 7px 0px rgba(0, 0, 0, 0.13), -0.6px 0px 1.8px 0px rgba(0, 0, 0, 0.10)', */\n\n align-items: center;\n background: var(--webchat-colorNeutralBackground1);\n /* border: isHighContrastTheme() ? `1px solid ${white}` : none; */\n border: none;\n border-radius: var(--webchat-borderRadiusXLarge);\n /* boxShadow: var(--shadow16); */\n display: flex;\n flex-direction: column;\n font-family: var(--webchat-fontFamilyBase);\n justify-content: center;\n /* margin: var(--spacingHorizontalMNudge)' */\n}\n\n:global(.webchat-fluent) .telephone-keypad__box {\n box-sizing: border-box;\n display: grid;\n gap: 16px;\n grid-template-columns: repeat(3, 1fr);\n grid-template-rows: repeat(4, 1fr);\n justify-items: center;\n padding: 16px;\n width: 100%;\n}\n\n:global(.webchat-fluent) .telephone-keypad__info-message {\n align-items: center;\n color: var(--webchat-colorNeutralForeground4);\n display: flex;\n font-size: 12px;\n gap: 6px;\n margin-block-end: 6px;\n}\n\n:global(.webchat-fluent) .telephone-keypad__info-message-link {\n color: var(--webchat-colorBrandForegroundLink);\n text-decoration-color: transparent;\n\n &:target {\n color: var(--webchat-colorBrandForegroundLinkSelected);\n }\n &:hover {\n color: var(--webchat-colorBrandForegroundLinkHover);\n text-decoration: underline 1px currentColor;\n }\n &:active {\n color: var(--webchat-colorBrandForegroundLinkPressed);\n }\n &:focus-visible {\n outline: none;\n text-decoration: underline 1px double var(--webchat-colorStrokeFocus2);\n }\n}\n","import { hooks } from 'botframework-webchat-component';\nimport React, { useCallback, useRef, type ChangeEventHandler, memo } from 'react';\nimport { useRefFrom } from 'use-ref-from';\nimport { AttachmentIcon } from '../../icons';\nimport testIds from '../../testIds';\nimport { ToolbarButton } from './Toolbar';\nimport styles from './AddAttachmentButton.module.css';\nimport { useStyles } from '../../styles';\n\nconst { useLocalizer, useStyleOptions } = hooks;\n\nfunction AddAttachmentButton(\n props: Readonly<{\n disabled?: boolean | undefined;\n onFilesAdded: ((files: File[]) => void) | undefined;\n }>\n) {\n const inputRef = useRef<HTMLInputElement>(null);\n const classNames = useStyles(styles);\n const localize = useLocalizer();\n const [{ uploadAccept, uploadMultiple }] = useStyleOptions();\n const onFilesAddedRef = useRefFrom(props.onFilesAdded);\n\n const handleClick = useCallback(() => inputRef.current?.click(), [inputRef]);\n\n const handleFileChange = useCallback<ChangeEventHandler<HTMLInputElement>>(\n ({ target: { files } }) => {\n if (files) {\n onFilesAddedRef.current?.([...files]);\n\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n }\n },\n [inputRef, onFilesAddedRef]\n );\n\n return (\n <div className={classNames['sendbox__add-attachment']}>\n <input\n accept={uploadAccept}\n aria-disabled={props.disabled}\n aria-hidden=\"true\"\n className={classNames['sendbox__add-attachment-input']}\n multiple={uploadMultiple}\n onInput={props.disabled ? undefined : handleFileChange}\n readOnly={props.disabled}\n ref={inputRef}\n role=\"button\"\n tabIndex={-1}\n type=\"file\"\n />\n <ToolbarButton\n aria-label={localize('TEXT_INPUT_UPLOAD_BUTTON_ALT')}\n data-testid={testIds.sendBoxUploadButton}\n onClick={handleClick}\n >\n <AttachmentIcon />\n </ToolbarButton>\n </div>\n );\n}\n\nexport default memo(AddAttachmentButton);\n","import { hooks } from 'botframework-webchat-api';\nimport cx from 'classnames';\nimport React, { memo, type MouseEventHandler, type ReactNode } from 'react';\nimport { useStyles } from '../../styles';\nimport styles from './Toolbar.module.css';\n\nconst { useUIState } = hooks;\n\nconst preventDefaultHandler: MouseEventHandler<HTMLButtonElement> = event => event.preventDefault();\n\nexport const ToolbarButton = memo(\n (\n props: Readonly<{\n 'aria-label'?: string | undefined;\n children?: ReactNode | undefined;\n className?: string | undefined;\n 'data-testid'?: string | undefined;\n disabled?: boolean | undefined;\n onClick?: MouseEventHandler<HTMLButtonElement> | undefined;\n selected?: boolean | undefined;\n type?: 'button' | 'submit' | undefined;\n }>\n ) => {\n const classNames = useStyles(styles);\n const [uiState] = useUIState();\n\n const disabled = props.disabled || uiState === 'disabled';\n\n return (\n <button\n aria-disabled={disabled ? 'true' : undefined}\n aria-label={props['aria-label']}\n className={cx(classNames['sendbox__toolbar-button'], props.className, {\n [classNames['sendbox__toolbar-button--selected']]: props.selected\n })}\n data-testid={props['data-testid']}\n onClick={disabled ? preventDefaultHandler : props.onClick}\n // eslint-disable-next-line no-magic-numbers\n tabIndex={disabled ? -1 : undefined}\n type={props.type === 'submit' ? 'submit' : 'button'}\n >\n {props.children}\n </button>\n );\n }\n);\n\nToolbarButton.displayName = 'ToolbarButton';\n\nexport const Toolbar = memo((props: Readonly<{ children?: ReactNode | undefined; className?: string | undefined }>) => {\n const [uiState] = useUIState();\n const classNames = useStyles(styles);\n\n return (\n <div className={cx(classNames['sendbox__toolbar'], props.className)}>\n {uiState !== 'blueprint' && props.children}\n </div>\n );\n});\n\nToolbar.displayName = 'Toolbar';\n\nexport const ToolbarSeparator = memo(\n (props: Readonly<{ children?: ReactNode | undefined; className?: string | undefined }>) => {\n const classNames = useStyles(styles);\n\n return (\n <div\n aria-orientation=\"vertical\"\n className={cx(classNames['sendbox__toolbar-separator'], props.className)}\n role=\"separator\"\n />\n );\n }\n);\n\nToolbarSeparator.displayName = 'ToolbarSeparator';\n",":global(.webchat-fluent) .sendbox__toolbar {\n --webchat__sendbox-button-height: 32px;\n\n display: flex;\n gap: 4px;\n height: var(--webchat__sendbox-button-height);\n margin-inline-start: auto;\n}\n\n:global(.webchat-fluent) .sendbox__toolbar-button {\n align-items: center;\n appearance: none;\n aspect-ratio: 1;\n background: transparent;\n border-radius: var(--webchat-borderRadiusSmall);\n border: none;\n color: currentColor;\n cursor: pointer;\n display: flex;\n height: var(--webchat__sendbox-button-height);\n justify-content: center;\n padding: 3px;\n\n > :global(.webchat__monochrome-image-masker) {\n font-size: 20px;\n pointer-events: none;\n }\n\n &.sendbox__toolbar-button--selected {\n color: var(--webchat-colorNeutralForeground2BrandSelected);\n }\n\n @media (hover: hover) {\n &:not([aria-disabled='true']):hover {\n color: var(--webchat-colorNeutralForeground2BrandHover);\n }\n }\n\n &:not([aria-disabled='true']):active {\n color: var(--webchat-colorNeutralForeground2BrandPressed);\n }\n\n &[aria-disabled='true'] {\n color: var(--webchat-colorNeutralForegroundDisabled);\n cursor: not-allowed;\n }\n}\n\n:global(.webchat-fluent) .sendbox__toolbar-separator {\n align-self: center;\n border-inline-end: 1px solid var(--webchat-colorNeutralStroke2);\n height: 28px;\n\n &:first-child,\n &:last-child,\n &:only-child {\n display: none;\n }\n}\n",":global(.webchat-fluent) .sendbox__add-attachment {\n display: grid;\n}\n\n:global(.webchat-fluent) .sendbox__add-attachment-input {\n font-size: 0;\n height: 0;\n opacity: 0;\n width: 1px; /* iOS Safari does not honor 0px for the width. */\n}\n","import { hooks } from 'botframework-webchat-component';\nimport cx from 'classnames';\nimport React, { memo } from 'react';\nimport { useStyles } from '../../styles';\nimport styles from './Attachments.module.css';\n\nconst { useLocalizer, useUIState } = hooks;\n\nconst attachmentsPluralStringIds = {\n one: 'TEXT_INPUT_ATTACHMENTS_ONE',\n two: 'TEXT_INPUT_ATTACHMENTS_TWO',\n few: 'TEXT_INPUT_ATTACHMENTS_FEW',\n many: 'TEXT_INPUT_ATTACHMENTS_MANY',\n other: 'TEXT_INPUT_ATTACHMENTS_OTHER'\n};\n\nfunction Attachments({\n attachments,\n className\n}: Readonly<{\n readonly attachments: readonly Readonly<{ blob: Blob | File; thumbnailURL?: URL | undefined }>[];\n readonly className?: string | undefined;\n}>) {\n const [uiState] = useUIState();\n const classNames = useStyles(styles);\n const localizeWithPlural = useLocalizer({ plural: true });\n\n return uiState !== 'blueprint' && attachments.length ? (\n <div className={cx(classNames['sendbox__attachment'], className)}>\n {localizeWithPlural(attachmentsPluralStringIds, attachments.length)}\n </div>\n ) : null;\n}\n\nexport default memo(Attachments);\n",":global(.webchat-fluent) .sendbox__attachment {\n border-radius: var(--webchat-borderRadiusLarge);\n border: 1px solid var(--webchat-colorNeutralStroke1);\n cursor: default;\n padding: 6px 8px;\n width: fit-content;\n}\n","import { useLiveRegion } from 'botframework-webchat-component/internal';\nimport React, { memo } from 'react';\nimport { useStyles } from '../../styles';\nimport styles from './ErrorMessage.module.css';\n\ntype ErrorMessageProps = Readonly<{\n error?: string | undefined;\n id: string;\n}>;\n\nfunction ErrorMessage({ error, id }: ErrorMessageProps) {\n const classNames = useStyles(styles);\n\n useLiveRegion(() => error && <div className=\"sendbox__error-message__status\">{error}</div>, [error]);\n\n return (\n // eslint-disable-next-line react/forbid-dom-props\n <span className={classNames['sendbox__error-message']} id={id}>\n {error}\n </span>\n );\n}\n\nErrorMessage.displayName = 'ErrorMessage';\n\nexport default memo(ErrorMessage);\n",":global(.webchat-fluent) .sendbox__error-message {\n color: transparent;\n font-size: 0;\n height: 0;\n left: 0;\n position: absolute;\n top: 0;\n width: 0;\n}\n","import { hooks } from 'botframework-webchat-component';\nimport { useCallback, useMemo, useState } from 'react';\nimport { useRefFrom } from 'use-ref-from';\n\nconst { useConnectivityStatus, useLocalizer } = hooks;\n\ntype ErrorMessageStringMap = ReadonlyMap<SendError, string>;\n\ntype SendError = 'empty' | 'offline';\n\nconst useSubmitError = ({\n attachments,\n message\n}: Readonly<{\n attachments: readonly Readonly<{ blob: Blob | File; thumbnailURL?: URL | undefined }>[];\n message: string;\n}>) => {\n const [connectivityStatus] = useConnectivityStatus();\n const [error, setError] = useState<SendError | undefined>();\n const localize = useLocalizer();\n\n const submitErrorRef = useRefFrom<'empty' | 'offline' | undefined>(\n connectivityStatus !== 'connected' && connectivityStatus !== 'reconnected'\n ? 'offline'\n : !message && !attachments.length\n ? 'empty'\n : undefined\n );\n\n const errorMessageStringMap = useMemo<ErrorMessageStringMap>(\n () =>\n Object.freeze(\n new Map<SendError, string>()\n .set('empty', localize('SEND_BOX_IS_EMPTY_TOOLTIP_ALT'))\n // TODO: [P0] We should add a new string for \"Cannot send message while offline.\"\n .set('offline', localize('CONNECTIVITY_STATUS_ALT_FATAL'))\n ),\n [localize]\n );\n\n // TODO: we may want to improve this later e.g. to avoid re-render\n // Reset visible error if there is a value\n const hasValue = !!message?.trim();\n if (error === 'empty' && hasValue) {\n setError(undefined);\n }\n\n const commitLatestError = useCallback(() => {\n setError(submitErrorRef.current);\n return submitErrorRef.current;\n }, [submitErrorRef]);\n\n return useMemo<Readonly<[string | undefined, () => typeof submitErrorRef.current]>>(\n () => Object.freeze([error && errorMessageStringMap.get(error), commitLatestError]),\n [error, errorMessageStringMap, commitLatestError]\n );\n};\n\nexport default useSubmitError;\n","import { useCallback, type KeyboardEvent } from 'react';\nimport { hooks } from 'botframework-webchat-component';\n\nconst { useScrollDown, useScrollUp } = hooks;\n\nexport default function useTranscriptNavigation() {\n const scrollDown = useScrollDown();\n const scrollUp = useScrollUp();\n\n return useCallback(\n (event: KeyboardEvent<unknown>) => {\n if (event.target instanceof HTMLTextAreaElement && event.target.value) {\n return;\n }\n\n const { ctrlKey, metaKey, shiftKey } = event;\n\n if (ctrlKey || metaKey || shiftKey) {\n return;\n }\n\n let handled = true;\n\n switch (event.key) {\n case 'End':\n scrollDown({ displacement: Infinity });\n break;\n\n case 'Home':\n scrollUp({ displacement: Infinity });\n break;\n\n case 'PageDown':\n scrollDown();\n break;\n\n case 'PageUp':\n scrollUp();\n break;\n\n default:\n handled = false;\n break;\n }\n\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [scrollDown, scrollUp]\n );\n}\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [2, 5, 36] }] */\n\nimport { useMemo } from 'react';\n// TODO: fix math-random fails to import crypto\n// import random from 'math-random';\n\nexport default function useUniqueId(prefix?: string): string {\n const id = useMemo(() => Math.random().toString(36).substr(2, 5), []);\n\n prefix = prefix ? `${prefix}--` : '';\n\n return `${prefix}${id}`;\n}\n",":global(.webchat-fluent) .sendbox {\n --webchat__sendbox--padding: var(--webchat__padding--sendbox);\n\n color: var(--webchat-colorNeutralForeground1);\n font-family: var(--webchat-fontFamilyBase);\n padding: var(--webchat__sendbox--padding);\n text-rendering: optimizeLegibility;\n\n --webchat-sendbox-attachment-area-active: ;\n --webchat-sendbox-border-radius: var(--webchat-borderRadiusLarge);\n}\n\n/* Copilot variant */\n:global(.webchat-fluent) .sendbox.variant-copilot {\n .sendbox__text-counter:not(.sendbox__text-counter--error) {\n visibility: hidden;\n }\n}\n\n:global(.webchat-fluent) .sendbox__sendbox {\n background-color: var(--webchat-colorNeutralBackground1);\n border-radius: var(--webchat-sendbox-border-radius);\n border: 1px solid var(--webchat-colorNeutralStroke1);\n display: grid;\n font-family: var(--webchat-fontFamilyBase);\n font-size: 14px;\n gap: 6px;\n grid-template:\n [telephone-keypad-start] 'text-area' [telephone-keypad-end]\n var(--webchat-sendbox-attachment-area-active)\n 'controls' / [telephone-keypad] 1fr;\n line-height: 20px;\n padding: 8px;\n position: relative;\n\n &:has(.sendbox__attachment--in-grid) {\n --webchat-sendbox-attachment-area-active: 'attachment';\n }\n\n &:focus-within {\n border-color: var(--webchat-colorNeutralStroke1Selected);\n }\n\n &::after {\n border-bottom-left-radius: var(--webchat-sendbox-border-radius);\n border-bottom-right-radius: var(--webchat-sendbox-border-radius);\n border-bottom: var(--webchat-strokeWidthThicker) solid var(--webchat-colorCompoundBrandForeground1Hover);\n bottom: -1px;\n clip-path: inset(calc(100% - var(--webchat-strokeWidthThicker)) 50% 0 50%);\n content: '';\n height: var(--webchat-sendbox-border-radius);\n left: -1px;\n position: absolute;\n right: -1px;\n transition: clip-path var(--webchat-durationUltraFast) var(--webchat-curveAccelerateMid);\n }\n\n &:focus-within::after {\n clip-path: inset(calc(100% - var(--webchat-strokeWidthThicker)) 0 0 0);\n transition: clip-path var(--webchat-durationNormal) var(--webchat-curveDecelerateMid);\n }\n\n > .sendbox__text-area--in-grid {\n grid-area: text-area;\n }\n\n > .sendbox__attachment--in-grid {\n grid-area: attachment;\n }\n\n > .sendbox__sendbox-controls--in-grid {\n grid-area: controls;\n }\n\n > .sendbox__telephone-keypad--in-grid {\n grid-area: telephone-keypad;\n }\n}\n\n:global(.webchat-fluent) .sendbox__sendbox-text {\n background-color: transparent;\n border: none;\n flex: auto;\n font-family: var(--webchat-fontFamilyBase);\n font-size: 14px;\n line-height: 20px;\n outline: none;\n margin: var(--webchat-spacingVerticalXS) var(--webchat-spacingHorizontalXS) var(--webchat-spacingVerticalNone);\n resize: none;\n\n /* Prevent zoom on focus on iOS */\n @media only screen and (hover: none) and (pointer: coarse) {\n &:focus-within {\n font-size: 16px;\n }\n }\n}\n\n:global(.webchat-fluent) .sendbox__sendbox-controls {\n align-items: center;\n display: flex;\n padding-inline-start: 4px;\n}\n\n:global(.webchat-fluent) .sendbox__text-counter {\n color: var(--webchat-colorNeutralForeground4);\n cursor: default;\n font-family: var(--webchat-fontFamilyNumeric);\n font-size: 10px;\n line-height: 14px;\n margin-inline-end: 4px;\n}\n\n:global(.webchat-fluent) .sendbox__text-counter--error {\n color: var(--webchat-colorStatusDangerForeground1);\n}\n","import React, { memo, useCallback } from 'react';\n\nimport { hooks } from 'botframework-webchat-component';\nimport { TelephoneKeypadIcon } from '../../icons';\nimport testIds from '../../testIds';\nimport { useTelephoneKeypadShown } from '../telephoneKeypad';\nimport { ToolbarButton } from './Toolbar';\n\nconst { useLocalizer } = hooks;\n\nconst TelephoneKeypadToolbarButton = memo(() => {\n const [telephoneKeypadShown, setTelephoneKeypadShown] = useTelephoneKeypadShown();\n const localize = useLocalizer();\n\n const handleClick = useCallback(() => setTelephoneKeypadShown(shown => !shown), [setTelephoneKeypadShown]);\n\n return (\n <ToolbarButton\n aria-label={localize('TEXT_INPUT_TELEPHONE_KEYPAD_BUTTON_ALT')}\n data-testid={testIds.sendBoxTelephoneKeypadToolbarButton}\n onClick={handleClick}\n selected={telephoneKeypadShown}\n >\n <TelephoneKeypadIcon />\n </ToolbarButton>\n );\n});\n\nTelephoneKeypadToolbarButton.displayName = 'SendBox.TelephoneKeypadToolbarButton';\n\nexport default TelephoneKeypadToolbarButton;\n","import { hooks } from 'botframework-webchat-api';\nimport cx from 'classnames';\nimport React, {\n forwardRef,\n Fragment,\n useCallback,\n useRef,\n type FormEventHandler,\n type KeyboardEventHandler,\n type ReactNode\n} from 'react';\nimport { useStyles } from '../../styles';\nimport styles from './TextArea.module.css';\n\nconst { useUIState } = hooks;\n\nconst TextArea = forwardRef<\n HTMLTextAreaElement,\n Readonly<{\n 'aria-label'?: string | undefined;\n className?: string | undefined;\n completion?: ReactNode | undefined;\n 'data-testid'?: string | undefined;\n\n /**\n * `true`, if the text area should be hidden but stay in the DOM, otherwise, `false`.\n *\n * Keeping the element in the DOM while making it invisible to users and PWDs is useful in these scenarios:\n *\n * - When the DTMF keypad is going away, we need to send focus to the text area before we unmount DTMF keypad,\n * This ensures the flow of focus did not sent to document body\n */\n hidden?: boolean | undefined;\n onInput?: FormEventHandler<HTMLTextAreaElement> | undefined;\n placeholder?: string | undefined;\n startRows?: number | undefined;\n value?: string | undefined;\n }>\n>((props, ref) => {\n const [uiState] = useUIState();\n const classNames = useStyles(styles);\n const isInCompositionRef = useRef<boolean>(false);\n\n const disabled = uiState === 'disabled';\n\n const handleCompositionEnd = useCallback(() => {\n isInCompositionRef.current = false;\n }, [isInCompositionRef]);\n\n const handleCompositionStart = useCallback(() => {\n isInCompositionRef.current = true;\n }, [isInCompositionRef]);\n\n const handleKeyDown = useCallback<KeyboardEventHandler<HTMLTextAreaElement>>(event => {\n // Shift+Enter adds a new line\n // Enter requests related form submission\n if (!event.shiftKey && event.key === 'Enter' && !isInCompositionRef.current) {\n event.preventDefault();\n\n if ('form' in event.target && event.target.form instanceof HTMLFormElement) {\n event.target?.form?.requestSubmit();\n }\n }\n }, []);\n\n return (\n <div\n className={cx(\n classNames['sendbox__text-area'],\n classNames['sendbox__text-area--scroll'],\n { [classNames['sendbox__text-area--hidden']]: props.hidden },\n { [classNames['sendbox__text-area--in-completion']]: props.completion },\n props.className\n )}\n role={props.hidden ? 'hidden' : undefined}\n >\n {uiState === 'blueprint' ? (\n <div className={cx(classNames['sendbox__text-area-doppelganger'], classNames['sendbox__text-area-shared'])}>\n {' '}\n </div>\n ) : (\n <Fragment>\n <div className={cx(classNames['sendbox__text-area-doppelganger'], classNames['sendbox__text-area-shared'])}>\n {props.completion ? props.completion : props.value || props.placeholder}{' '}\n </div>\n <textarea\n aria-disabled={disabled}\n aria-label={props['aria-label']}\n className={cx(classNames['sendbox__text-area-input'], classNames['sendbox__text-area-shared'])}\n data-testid={props['data-testid']}\n onCompositionEnd={handleCompositionEnd}\n onCompositionStart={handleCompositionStart}\n onInput={props.onInput}\n onKeyDown={handleKeyDown}\n placeholder={props.placeholder}\n readOnly={disabled}\n ref={ref}\n rows={props.startRows ?? 1}\n // eslint-disable-next-line no-magic-numbers\n tabIndex={props.hidden ? -1 : undefined}\n value={props.value}\n />\n </Fragment>\n )}\n </div>\n );\n});\n\nTextArea.displayName = 'TextArea';\n\nexport default TextArea;\n",":global(.webchat-fluent) .sendbox__text-area {\n display: grid;\n grid-template-areas: 'main';\n max-height: 200px;\n overflow: auto;\n scrollbar-gutter: stable;\n}\n\n:global(.webchat-fluent) .sendbox__text-area--hidden {\n /* TODO: Not perfect way of hiding the text box. */\n height: 0;\n visibility: collapse;\n}\n\n:global(.webchat-fluent) .sendbox__text-area--in-completion {\n .sendbox__text-area-doppelganger {\n visibility: unset;\n }\n\n .sendbox__text-area-input {\n background-color: transparent;\n caret-color: var(--webchat-colorNeutralForeground1);\n color: transparent;\n }\n\n textarea::placeholder {\n color: transparent;\n }\n}\n\n:global(.webchat-fluent) .sendbox__text-area-shared {\n border: none;\n font: inherit;\n grid-area: main;\n outline: inherit;\n overflow-wrap: anywhere;\n resize: inherit;\n}\n\n:global(.webchat-fluent) .sendbox__text-area-doppelganger {\n overflow: visible;\n pointer-events: none;\n user-select: none;\n visibility: hidden;\n white-space: pre-wrap;\n}\n\n:global(.webchat-fluent) .sendbox__text-area-input {\n background-color: inherit;\n color: currentColor;\n contain: size;\n overflow: hidden;\n padding: 0;\n}\n\n:global(.webchat-fluent) .sendbox__text-area--scroll {\n /* Edge uses -webkit-scrollbar if scrollbar-* is not set */\n scrollbar-color: unset;\n scrollbar-width: unset;\n /* Firefox */\n -moz-scrollbar-color: var(--webchat-colorNeutralBackground5) var(--webchat-colorNeutralForeground2);\n -moz-scrollbar-width: thin;\n\n /* Chrome, Edge, and Safari */\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background-color: var(--webchat-colorNeutralBackground5);\n border-radius: 16px;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: var(--webchat-colorNeutralForeground2);\n border-radius: 16px;\n }\n\n &::-webkit-scrollbar-corner {\n background-color: var(--webchat-colorNeutralBackground5);\n }\n}\n","import { type ActivityMiddleware, type StyleOptions, type TypingIndicatorMiddleware } from 'botframework-webchat-api';\nimport {\n DecoratorComposer,\n DecoratorMiddleware,\n type DecoratorMiddlewareInit,\n type DecoratorMiddlewareTypes\n} from 'botframework-webchat-api/decorator';\nimport { Components } from 'botframework-webchat-component';\nimport { WebChatDecorator } from 'botframework-webchat-component/decorator';\nimport React, { memo, type ReactNode } from 'react';\n\nimport { ActivityDecorator } from '../components/activity';\nimport ActivityLoader from '../components/activity/ActivityLoader';\nimport AssetComposer from '../components/assets/AssetComposer';\nimport { isLinerMessageActivity, LinerMessageActivity } from '../components/linerActivity';\nimport { isPreChatMessageActivity, PreChatMessageActivity } from '../components/preChatActivity';\nimport { PrimarySendBox } from '../components/sendBox';\nimport { TelephoneKeypadProvider } from '../components/telephoneKeypad';\nimport { WebChatTheme } from '../components/theme';\nimport SlidingDotsTypingIndicator from '../components/typingIndicator/SlidingDotsTypingIndicator';\nimport { createStyles } from '../styles';\nimport VariantComposer, { VariantList } from './VariantComposer';\n\nconst { ThemeProvider } = Components;\n\ntype FluentThemeProviderProps = Readonly<{\n children?: ReactNode | undefined;\n variant?: VariantList | undefined;\n}>;\n\nconst activityMiddleware: readonly ActivityMiddleware[] = Object.freeze([\n () =>\n next =>\n (...args) => {\n const activity = args[0]?.activity;\n\n // TODO: Should show pre-chat only when it is the very first message in the chat history.\n if (isPreChatMessageActivity(activity)) {\n return () => <PreChatMessageActivity activity={activity} />;\n }\n\n if (isLinerMessageActivity(activity)) {\n return () => <LinerMessageActivity activity={activity} />;\n }\n\n const renderActivity = next(...args);\n\n return renderActivity\n ? (...args) => <ActivityDecorator activity={activity}>{renderActivity(...args)}</ActivityDecorator>\n : renderActivity;\n }\n]);\n\nconst sendBoxMiddleware = [() => () => () => PrimarySendBox];\n\nconst decoratorMiddleware: readonly DecoratorMiddleware[] = Object.freeze([\n (init: DecoratorMiddlewareInit) =>\n init === 'activity border' &&\n ((next => request =>\n request.livestreamingState === 'preparing'\n ? ActivityLoader\n : next(request)) satisfies DecoratorMiddlewareTypes['activity border'])\n]);\n\nconst styles = createStyles();\n\nconst fluentStyleOptions: StyleOptions = Object.freeze({\n feedbackActionsPlacement: 'activity-actions'\n});\n\nconst typingIndicatorMiddleware = Object.freeze([\n () =>\n next =>\n (...args) =>\n args[0].visible ? <SlidingDotsTypingIndicator /> : next(...args)\n] satisfies TypingIndicatorMiddleware[]);\n\nfunction FluentThemeProvider({ children, variant = 'fluent' }: FluentThemeProviderProps) {\n return (\n <VariantComposer variant={variant}>\n <WebChatTheme>\n <TelephoneKeypadProvider>\n <ThemeProvider\n activityMiddleware={activityMiddleware}\n sendBoxMiddleware={sendBoxMiddleware}\n styleOptions={fluentStyleOptions}\n styles={styles}\n typingIndicatorMiddleware={typingIndicatorMiddleware}\n >\n <AssetComposer>\n <WebChatDecorator>\n <DecoratorComposer middleware={decoratorMiddleware}>{children}</DecoratorComposer>\n </WebChatDecorator>\n </AssetComposer>\n </ThemeProvider>\n </TelephoneKeypadProvider>\n </WebChatTheme>\n </VariantComposer>\n );\n}\n\nexport default memo(FluentThemeProvider);\nexport { type FluentThemeProviderProps };\n","import { useStyles } from 'botframework-webchat-styles/react';\nimport cx from 'classnames';\nimport React, { Fragment, memo, type ReactNode } from 'react';\n\nimport { useVariantClassName } from '../../styles';\nimport SlidingDots from '../assets/SlidingDots';\nimport styles from './ActivityLoader.module.css';\n\nfunction FluentActivityLoader({ children }: Readonly<{ children?: ReactNode | undefined }>) {\n const classNames = useStyles(styles);\n const variantClassName = useVariantClassName(classNames);\n\n return (\n <Fragment>\n {children}\n <SlidingDots className={cx(classNames['activity-loader'], variantClassName)} />\n </Fragment>\n );\n}\n\nexport default memo(FluentActivityLoader);\n","import { hooks } from 'botframework-webchat-component';\nimport React, { memo, useCallback, useEffect, useRef } from 'react';\nimport { useRefFrom } from 'use-ref-from';\n\nimport useAssetURL from './private/useAssetURL';\n\nconst { useLocalizer, useShouldReduceMotion } = hooks;\n\ntype SlidingDotsProps = Readonly<{ className: string }>;\n\nconst SlidingDots = ({ className }: SlidingDotsProps) => {\n const [shouldReduceMotion] = useShouldReduceMotion();\n const [url] = useAssetURL('sliding dots');\n const localize = useLocalizer();\n const objectElementRef = useRef<HTMLObjectElement>(null);\n\n const altText = localize('TYPING_INDICATOR_ALT');\n const shouldReduceMotionRef = useRefFrom(shouldReduceMotion);\n\n const pauseAnimations = useCallback(() => {\n const contentDocument = objectElementRef.current?.contentDocument;\n const svgElement = contentDocument?.documentElement;\n const { SVGSVGElement } = contentDocument?.defaultView || {};\n\n SVGSVGElement && svgElement instanceof SVGSVGElement && svgElement.pauseAnimations();\n }, [objectElementRef]);\n\n const unpauseAnimations = useCallback(() => {\n const contentDocument = objectElementRef.current?.contentDocument;\n const svgElement = contentDocument?.documentElement;\n const { SVGSVGElement } = contentDocument?.defaultView || {};\n\n SVGSVGElement && svgElement instanceof SVGSVGElement && svgElement.unpauseAnimations();\n }, [objectElementRef]);\n\n const pauseOrUnpauseAnimations = useCallback(\n () => (shouldReduceMotionRef.current ? pauseAnimations() : unpauseAnimations()),\n [pauseAnimations, shouldReduceMotionRef, unpauseAnimations]\n );\n\n useEffect(pauseOrUnpauseAnimations, [\n pauseOrUnpauseAnimations,\n // Call \"pauseOrUnpauseAnimations()\" when \"shouldReduceMotion\" change.\n shouldReduceMotion\n ]);\n\n return (\n <object\n aria-label={altText}\n className={className}\n data={url.href}\n onLoad={pauseOrUnpauseAnimations}\n ref={objectElementRef}\n type=\"image/svg+xml\"\n />\n );\n};\n\nSlidingDots.displayName = 'SlidingDots';\n\nexport default memo(SlidingDots);\n","import { type ContextOf } from 'botframework-webchat-api';\nimport { useContext as useReactContext } from 'react';\n\nimport Context from './Context';\n\nexport default function useContext(): ContextOf<typeof Context> {\n return useReactContext(Context);\n}\n","import { createContext } from 'react';\n\nimport type { AssetName } from '../AssetName';\n\ntype ContextType = Readonly<{\n urlStateMap: ReadonlyMap<AssetName, readonly [URL]>;\n}>;\n\ntype ContextAsGetter<T extends Record<string, unknown>> =\n T extends Record<infer K, infer V> ? Record<K, { get(): V }> : never;\n\nconst defaultContextValue: ContextAsGetter<ContextType> = {\n urlStateMap: {\n get() {\n throw new Error('urlMap cannot be used outside of <AssetComposerContext>.');\n }\n }\n};\n\nconst Context = createContext<ContextType>(Object.create({}, defaultContextValue));\n\nContext.displayName = 'AssetComposerContext';\n\nexport default Context;\n","import { type AssetName } from '../AssetName';\nimport useContext from './useContext';\n\nexport default function useAssetURL(assetName: AssetName): readonly [URL] {\n const urlState = useContext().urlStateMap.get(assetName);\n\n if (!urlState) {\n throw new Error(`botframework-webchat-fluent-theme internal: Asset \"${assetName}\" was not found.`);\n }\n\n return urlState;\n}\n",":global(.webchat-fluent) .activity-loader {\n flex: none;\n height: 8px;\n margin: var(--webchat-spacingHorizontalM) 0 0 18px;\n width: auto;\n\n &.variant-fluent {\n margin: 0 0 var(--webchat-spacingHorizontalM) var(--webchat-spacingVerticalSNudge);\n }\n}\n","import { type ContextOf } from 'botframework-webchat-api';\nimport React, { memo, useEffect, useMemo, type ReactNode } from 'react';\n\nimport { type AssetName } from './AssetName';\nimport Context from './private/Context';\n\ntype ContextType = ContextOf<typeof Context>;\n\ntype AssetComposerProps = Readonly<{\n children?: ReactNode | undefined;\n}>;\n\nconst SLIDING_DOTS_SVG_STRING =\n '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"400\" height=\"20\" viewBox=\"0 0 400 20\"><defs><linearGradient id=\"a\" x1=\"0\" x2=\"100%\" y1=\"0\" y2=\"0\" gradientUnits=\"userSpaceOnUse\"><stop offset=\"0%\"><animate attributeName=\"stop-color\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"#ad5ae1;#ad5ae1;#0E94E1;#0E94E1;#669fc2;#669fc2;#ad5ae1\"/></stop><stop offset=\"50%\"><animate attributeName=\"stop-color\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"#e9618d;#e9618d;#57AB82;#57AB82;#6377e0;#6377e0;#e9618d\"/></stop><stop offset=\"100%\"><animate attributeName=\"stop-color\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"#fd9e5f;#fd9e5f;#C6C225;#C6C225;#9b80ec;#9b80ec;#fd9e5f\"/></stop></linearGradient></defs><g fill=\"url(#a)\"><rect height=\"20\" rx=\"10\"><animate attributeName=\"x\" dur=\"2s\" keyTimes=\"0;0.5;0.66;1\" repeatCount=\"indefinite\" values=\"26;26;0;0\"/><animate attributeName=\"width\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;1\" repeatCount=\"indefinite\" values=\"20;20;30;30;20;20\"/><animate attributeName=\"opacity\" dur=\"2s\" keyTimes=\"0;0.5;0.66;1\" repeatCount=\"indefinite\" values=\"1;1;0;0\"/></rect><rect height=\"20\" rx=\"10\"><animate attributeName=\"x\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"62;62;72;72;26;26;0\"/><animate attributeName=\"width\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"104;104;20;20;70;70;20\"/><animate attributeName=\"opacity\" dur=\"2s\" keyTimes=\"0;0.8;1\" repeatCount=\"indefinite\" values=\"1;1;0\"/></rect><rect height=\"20\" rx=\"10\"><animate attributeName=\"x\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"182;182;108;108;112;112;26\"/><animate attributeName=\"width\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;1\" repeatCount=\"indefinite\" values=\"20;20;60;60;20;20\"/></rect><rect height=\"20\" rx=\"10\"><animate attributeName=\"x\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"218;218;184;184;148;148;62\"/><animate attributeName=\"width\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"60;60;80;80;40;40;104\"/></rect><rect height=\"20\" rx=\"10\"><animate attributeName=\"x\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"294;294;280;280;204;204;182\"/><animate attributeName=\"width\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"40;40;20;20;80;80;20\"/></rect><rect height=\"20\" rx=\"10\"><animate attributeName=\"x\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"350;350;316;316;300;300;218\"/><animate attributeName=\"width\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"20;20;60;60;20;20;60\"/></rect><rect height=\"20\" rx=\"10\"><animate attributeName=\"x\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"386;386;392;392;336;336;294\"/><animate attributeName=\"width\" dur=\"2s\" keyTimes=\"0;0.5;0.66;1\" repeatCount=\"indefinite\" values=\"20;20;40;40\"/><animate attributeName=\"opacity\" dur=\"2s\" keyTimes=\"0;0.5;0.66;1\" repeatCount=\"indefinite\" values=\"0;0;1;1\"/></rect><rect width=\"20\" height=\"20\" rx=\"10\"><animate attributeName=\"x\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"422;422;428;428;392;392;350\"/><animate attributeName=\"opacity\" dur=\"2s\" keyTimes=\"0;0.8;1\" repeatCount=\"indefinite\" values=\"0;0;1\"/></rect></g></svg>';\n\nconst AssetComposer = memo(({ children }: AssetComposerProps) => {\n const slidingDotsURL = useMemo(\n () => URL.createObjectURL(new Blob([SLIDING_DOTS_SVG_STRING], { type: 'image/svg+xml' })),\n []\n );\n\n useEffect(() => () => URL.revokeObjectURL(slidingDotsURL), [slidingDotsURL]);\n\n const context = useMemo<ContextType>(\n () =>\n Object.freeze({\n urlStateMap: new Map<AssetName, readonly [URL]>([['sliding dots', Object.freeze([new URL(slidingDotsURL)])]])\n }),\n [slidingDotsURL]\n );\n\n return <Context.Provider value={context}>{children}</Context.Provider>;\n});\n\nAssetComposer.displayName = 'AssetComposer';\n\nexport default AssetComposer;\n","import { type WebChatActivity } from 'botframework-webchat-core';\n\nexport default function isLinerMessageActivity(\n activity: undefined | WebChatActivity\n): activity is WebChatActivity & { type: 'message'; from: { role: 'channel' } } {\n return !!(activity && activity.from.role === 'channel' && activity.type === 'message' && 'text' in activity);\n}\n","import { type WebChatActivity } from 'botframework-webchat-core';\nimport React, { memo } from 'react';\nimport { useStyles } from '../../../styles/index.js';\nimport styles from './LinerMessageActivity.module.css';\n\ntype Props = Readonly<{ activity: WebChatActivity & { type: 'message' } }>;\n\nconst LinerMessageActivity = ({ activity }: Props) => {\n const classNames = useStyles(styles);\n\n return (\n <div className={classNames['liner-message-activity']} role=\"separator\">\n <span className={classNames['liner-message-activity__text']}>{activity.text}</span>\n </div>\n );\n};\n\nLinerMessageActivity.displayName = 'LinerMessageActivity';\n\nexport default memo(LinerMessageActivity);\n",":global(.webchat-fluent) .liner-message-activity {\n align-items: center;\n box-sizing: border-box;\n color: var(--webchat-colorNeutralForeground3);\n display: flex;\n flex-direction: row;\n font-family: var(--webchat__font--primary);\n font-size: var(--webchat-fontSizeBase200);\n font-weight: var(--webchat-fontWeightRegular);\n gap: var(--webchat-spacingHorizontalM);\n line-height: var(--webchat-lineHeightBase200);\n padding: var(--webchat-spacingVerticalSNudge) var(--webchat-spacingHorizontalM);\n text-align: center;\n width: 100%;\n\n &::before,\n &::after {\n border-top: var(--webchat-strokeWidthThin) solid var(--webchat-colorNeutralStroke2);\n content: '';\n display: flex;\n flex: auto;\n min-width: 8px;\n }\n}\n\n:global(.webchat-fluent) .liner-message-activity__text {\n text-align: center;\n}\n","import React, { type ReactNode } from 'react';\nimport cx from 'classnames';\nimport styles from './Theme.module.css';\nimport { useStyles, useVariantClassName } from '../../styles';\n\nexport const rootClassName = 'webchat-fluent';\n\nexport default function Theme(props: Readonly<{ readonly children: ReactNode | undefined }>) {\n const classNames = useStyles(styles);\n const variantClassName = useVariantClassName(styles);\n return <div className={cx(rootClassName, classNames['theme'], variantClassName)}>{props.children}</div>;\n}\n",":global {\n /* biome-ignore format: do not print each class on the new line */\n .a, .b, .c, .d, .e, .f, .g, .h, .i, .j, .k, .l, .m, .n, .o, .p, .q, .r, .s, .t, .v, .w, .u, .x, .y, .z,\n .A, .B, .C, .D, .E, .F, .G, .H, .I, .J, .K, .L, .M, .N, .O, .P, .Q, .R, .S, .T, .V, .W, .U, .X, .Y, .Z {\n /* esbuild considers empty global classes as used and removes them due to lack of rules */\n }\n}\n\n:global(.webchat-fluent).theme {\n display: contents;\n\n --webchat-colorNeutralForegroundDisabled: var(--colorNeutralForegroundDisabled, #bdbdbd);\n --webchat-colorNeutralForeground1: var(--colorNeutralForeground1, #242424);\n --webchat-colorNeutralForeground1Hover: var(--colorNeutralForeground1Hover, #242424);\n --webchat-colorNeutralForeground1Pressed: var(--colorNeutralForeground1Pressed, #242424);\n --webchat-colorNeutralForeground2: var(--colorNeutralForeground2, #424242);\n --webchat-colorNeutralForeground2BrandHover: var(--colorNeutralForeground2BrandHover, #02729c);\n --webchat-colorNeutralForeground2BrandPressed: var(--colorNeutralForeground2BrandPressed, #01678c);\n --webchat-colorNeutralForeground2BrandSelected: var(--colorNeutralForeground2BrandSelected, #067191);\n --webchat-colorNeutralForeground3: var(--colorNeutralForeground3, #616161);\n --webchat-colorNeutralForeground4: var(--colorNeutralForeground4, #707070);\n --webchat-colorNeutralForeground5: var(--colorNeutralForeground5, #7e7e7e);\n\n --webchat-colorNeutralForegroundOnBrand: var(--colorNeutralForegroundOnBrand, #fff);\n\n --webchat-colorNeutralBackgroundDisabled: var(--colorNeutralBackgroundDisabled, #f0f0f0);\n --webchat-colorNeutralBackground1: var(--colorNeutralBackground1, #ffffff);\n --webchat-colorNeutralBackground1Hover: var(--colorNeutralBackground1Hover, #f5f5f5);\n --webchat-colorNeutralBackground1Pressed: var(--colorNeutralBackground1Pressed, #e0e0e0);\n --webchat-colorNeutralBackground3: var(--colorNeutralBackground3, #f5f5f5);\n --webchat-colorNeutralBackground4: var(--colorNeutralBackground4, #f0f0f0);\n --webchat-colorNeutralBackground5: var(--colorNeutralBackground5, #ebebeb);\n --webchat-colorNeutralBackground6: var(--colorNeutralBackground6, #e6e6e6);\n\n --webchat-colorNeutralStencil1: var(--colorNeutralStencil1, #e6e6e6); /* #575757 for dark mode */\n --webchat-colorNeutralStencil2: var(--colorNeutralStencil2, #fafafa); /* #333333 for dark mode */\n\n --webchat-colorNeutralShadowAmbient: var(--colorNeutralShadowAmbient, rgba(0, 0, 0, 0.12));\n --webchat-colorNeutralShadowKey: var(--colorNeutralShadowKey, rgba(0, 0, 0, 0.14));\n\n --webchat-colorTransparentBackground: var(--colorTransparentBackground, rgba(0, 0, 0, 0.4));\n\n --webchat-colorNeutralStrokeDisabled: var(--colorNeutralStrokeDisabled, #e0e0e0);\n --webchat-colorNeutralStroke1: var(--colorNeutralStroke1, #d1d1d1);\n --webchat-colorNeutralStroke1Hover: var(--colorNeutralStroke1Hover, #c7c7c7);\n --webchat-colorNeutralStroke1Pressed: var(--colorNeutralStroke1Pressed, #b3b3b3);\n --webchat-colorNeutralStroke1Selected: var(--colorNeutralStroke1Selected, #bdbdbd);\n --webchat-colorNeutralStroke2: var(--colorNeutralStroke2, #e0e0e0);\n\n --webchat-colorStrokeFocus2: var(--colorStrokeFocus2, #000000);\n\n --webchat-colorBrandStroke2: var(--colorBrandStroke2, #9edcf7);\n --webchat-colorBrandStroke2Pressed: var(--colorBrandStroke2Pressed, #01384d);\n\n --webchat-colorTransparentStroke: var(--colorTransparentStroke, transparent);\n\n --webchat-colorBrandForeground1: var(--colorBrandForeground1, #01678c);\n --webchat-colorBrandForeground2Hover: var(--colorBrandForeground2Hover, #015a7a);\n --webchat-colorBrandForeground2Pressed: var(--colorBrandForeground2Pressed, #01384d);\n\n --webchat-colorBrandForegroundLink: var(--colorBrandForegroundLink, #01678c);\n --webchat-colorBrandForegroundLinkHover: var(--colorBrandForegroundLinkHover, #015a7a);\n --webchat-colorBrandForegroundLinkPressed: var(--colorBrandForegroundLinkPressed, #014259);\n --webchat-colorBrandForegroundLinkSelected: var(--colorBrandForegroundLinkSelected, #01678c);\n\n --webchat-colorBrandBackground: var(--colorBrandBackground, #077fab);\n --webchat-colorBrandBackgroundHover: var(--colorBrandBackgroundHover, #06729a);\n --webchat-colorBrandBackgroundPressed: var(--colorBrandBackgroundPressed, #044760);\n --webchat-colorBrandBackground2: var(--colorBrandBackground2, #def2fc);\n --webchat-colorBrandBackground2Hover: var(--colorBrandBackground2Hover, #bee7fa);\n --webchat-colorBrandBackground2Pressed: var(--colorBrandBackground2Pressed, #7fd2f5);\n\n --webchat-colorCompoundBrandForeground1Hover: var(--colorCompoundBrandForeground1Hover, #02729c);\n\n --webchat-colorStatusDangerForeground1: var(--colorStatusDangerForeground1, #b10e1c);\n\n /* https://github.com/microsoft/fluentui/blob/master/packages/tokens/src/global/colors.ts */\n --webchat-colorGray30: var(--colorGray30, #edebe9);\n --webchat-colorGray160: var(--colorGray160, #323130);\n --webchat-colorGray190: var(--colorGray190, #201f1e);\n --webchat-colorGray200: var(--colorGray200, #1b1a19);\n\n /* New greys from the link above not exposed by Fluent */\n --webchat-colorGrey8: #141414;\n --webchat-colorGrey14: #242424;\n --webchat-colorGrey92: #ebebeb;\n --webchat-colorGrey98: #fafafa;\n\n /* https://github.com/microsoft/fluentui/blob/master/packages/tokens/src/utils/shadows.ts */\n --webchat-shadow2: var(--shadow2, 0 0 2px rgba(0, 0, 0, 12%), 0 1px 2px rgba(0, 0, 0, 14%));\n --webchat-shadow4: var(--shadow4, 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 4px rgba(0, 0, 0, 0.14));\n --webchat-shadow16: var(--shadow16, 0 6.4px 14.4px 0 rgba(0, 0, 0, 0.132), 0 1.2px 3.6px 0 rgba(0, 0, 0, 0.108));\n --webchat-shadow64: var(--shadow64, 0 0 8px rgba(0, 0, 0, 0.12), 0 32px 64px rgba(0, 0, 0, 0.14));\n\n /* https://github.com/microsoft/fluentui/blob/master/packages/tokens/src/global/spacings.ts */\n --webchat-spacingHorizontalNone: var(--spacingHorizontalNone, 0);\n --webchat-spacingHorizontalXXS: var(--spacingHorizontalXXS, 2px);\n --webchat-spacingHorizontalXS: var(--spacingHorizontalXS, 4px);\n --webchat-spacingHorizontalSNudge: var(--spacingHorizontalSNudge, 6px);\n --webchat-spacingHorizontalS: var(--spacingHorizontalS, 8px);\n --webchat-spacingHorizontalMNudge: var(--spacingHorizontalMNudge, 10px);\n --webchat-spacingHorizontalM: var(--spacingHorizontalM, 12px);\n --webchat-spacingHorizontalL: var(--spacingHorizontalL, 16px);\n --webchat-spacingHorizontalXL: var(--spacingHorizontalXL, 20px);\n --webchat-spacingHorizontalXXL: var(--spacingHorizontalXXL, 24px);\n --webchat-spacingHorizontalXXXL: var(--spacingHorizontalXXXL, 32px);\n\n /* https://github.com/microsoft/fluentui/blob/master/packages/tokens/src/global/spacings.ts */\n --webchat-spacingVerticalNone: var(--spacingVerticalNone, 0);\n --webchat-spacingVerticalXXS: var(--spacingVerticalXXS, 2px);\n --webchat-spacingVerticalXS: var(--spacingVerticalXS, 4px);\n --webchat-spacingVerticalSNudge: var(--spacingVerticalSNudge, 6px);\n --webchat-spacingVerticalS: var(--spacingVerticalS, 8px);\n --webchat-spacingVerticalMNudge: var(--spacingVerticalMNudge, 10px);\n --webchat-spacingVerticalM: var(--spacingVerticalM, 12px);\n --webchat-spacingVerticalL: var(--spacingVerticalL, 16px);\n --webchat-spacingVerticalXL: var(--spacingVerticalXL, 20px);\n --webchat-spacingVerticalXXL: var(--spacingVerticalXXL, 24px);\n --webchat-spacingVerticalXXXL: var(--spacingVerticalXXXL, 32px);\n\n /* https://github.com/microsoft/fluentui/blob/master/packages/tokens/src/global/fonts.ts */\n --webchat-fontFamilyBase: var(\n --fontFamilyBase,\n 'Segoe UI',\n 'Segoe UI Web (West European)',\n -apple-system,\n BlinkMacSystemFont,\n Roboto,\n 'Helvetica Neue',\n sans-serif\n );\n --webchat-fontFamilyMonospace: var(--fontFamilyMonospace, Consolas, 'Courier New', Courier, monospace);\n --webchat-fontFamilyNumeric: var(\n --fontFamilyNumeric,\n Bahnschrift,\n 'Segoe UI',\n 'Segoe UI Web (West European)',\n -apple-system,\n BlinkMacSystemFont,\n Roboto,\n 'Helvetica Neue',\n sans-serif\n );\n\n /* https://github.com/microsoft/fluentui/blob/master/packages/tokens/src/global/fonts.ts */\n --webchat-fontWeightRegular: var(--fontWeightRegular, 400);\n --webchat-fontWeightSemibold: var(--fontWeightSemibold, 600);\n\n /* https://github.com/microsoft/fluentui/blob/master/packages/tokens/src/global/fonts.ts */\n --webchat-fontSizeBase100: var(--fontSizeBase100, 10px);\n --webchat-fontSizeBase200: var(--fontSizeBase200, 12px);\n --webchat-fontSizeBase300: var(--fontSizeBase300, 14px);\n --webchat-fontSizeBase400: var(--fontSizeBase400, 16px);\n --webchat-fontSizeBase500: var(--fontSizeBase500, 20px);\n --webchat-fontSizeBase600: var(--fontSizeBase600, 24px);\n --webchat-fontSizeHero700: var(--fontSizeHero700, 28px);\n --webchat-fontSizeHero800: var(--fontSizeHero800, 32px);\n --webchat-fontSizeHero900: var(--fontSizeHero900, 40px);\n\n --webchat-lineHeightBase100: var(--lineHeightBase100, 14px);\n --webchat-lineHeightBase200: var(--lineHeightBase200, 16px);\n --webchat-lineHeightBase300: var(--lineHeightBase300, 20px);\n --webchat-lineHeightBase400: var(--lineHeightBase400, 22px);\n --webchat-lineHeightBase500: var(--lineHeightBase500, 28px);\n --webchat-lineHeightBase600: var(--lineHeightBase600, 32px);\n --webchat-lineHeightHero700: var(--lineHeightHero700, 36px);\n --webchat-lineHeightHero800: var(--lineHeightHero800, 40px);\n --webchat-lineHeightHero900: var(--lineHeightHero900, 52px);\n --webchat-lineHeightHero1000: var(--lineHeightHero1000, 92px);\n\n /* https://github.com/microsoft/fluentui/blob/master/packages/tokens/src/global/borderRadius.ts */\n --webchat-borderRadiusSmall: var(--borderRadiusSmall, 2px);\n --webchat-borderRadiusMedium: var(--borderRadiusMedium, 4px);\n --webchat-borderRadiusLarge: var(--borderRadiusLarge, 6px);\n --webchat-borderRadiusXLarge: var(--borderRadiusXLarge, 8px);\n\n /* https://github.com/microsoft/fluentui/blob/master/packages/tokens/src/global/strokeWidths.ts */\n --webchat-strokeWidthThin: var(--strokeWidthThin, 1px);\n --webchat-strokeWidthThick: var(--strokeWidthThick, 2px);\n --webchat-strokeWidthThicker: var(--strokeWidthThicker, 3px);\n\n /* https://github.com/microsoft/fluentui/blob/master/packages/tokens/src/global/durations.ts */\n --webchat-durationUltraFast: var(--durationUltraFast, 0);\n --webchat-durationNormal: var(--durationNormal, 200ms);\n --webchat-durationUltraSlow: var(--durationUltraSlow, 500ms);\n\n /* https://github.com/microsoft/fluentui/blob/master/packages/tokens/src/global/curves.ts */\n --webchat-curveAccelerateMid: var(--curveAccelerateMid, cubic-bezier(1, 0, 1, 1));\n --webchat-curveDecelerateMid: var(--curveDecelerateMid, cubic-bezier(0, 0, 0, 1));\n}\n\n@media (prefers-reduced-motion) {\n :global(.webchat-fluent).theme {\n --webchat-durationUltraFast: 0.01ms;\n --webchat-durationNormal: 0.01ms;\n }\n}\n\n/* Style Options override */\n:global(.webchat-fluent).theme :global(.webchat__css-custom-properties) {\n --webchat__color--accent: var(--webchat-colorBrandForeground1);\n --webchat__color--subtle: var(--webchat-colorNeutralForeground2);\n --webchat__color--timestamp: var(--webchat-colorNeutralForeground3);\n --webchat__font--primary: var(--webchat-fontFamilyBase);\n --webchat__font-size--small: var(--webchat-fontSizeBase200);\n --webchat__font-size--medium: var(--webchat-fontSizeBase300);\n --webchat__line-height--small: var(--webchat-lineHeightBase200);\n --webchat__line-height--medium: var(--webchat-lineHeightBase300);\n --webchat__max-width--bubble: var(--webchat-bubble-maxWidth);\n --webchat__min-height--bubble: var(--webchat-bubble-minHeight);\n --webchat__padding--regular: var(--webchat-spacingVerticalS);\n --webchat__padding--sendbox: var(--webchat-spacingVerticalNone) var(--webchat-spacingHorizontalMNudge)\n var(--webchat-spacingHorizontalMNudge);\n --webchat__border-animation--color-1: #464feb;\n --webchat__border-animation--color-2: #47cffa;\n --webchat__border-animation--color-3: #b47cf8;\n}\n\n:global(.webchat-fluent).theme.variant-copilot :global(.webchat__css-custom-properties) {\n --webchat__padding--sendbox: var(--webchat-spacingVerticalNone) var(--webchat-spacingHorizontalXL)\n var(--webchat-spacingVerticalMNudge) var(--webchat-spacingHorizontalMNudge);\n}\n\n/* Transcript surface */\n:global(.webchat-fluent).theme :global(.webchat__surface) {\n background-color: var(--webchat__color--surface);\n}\n\n:global(.webchat-fluent).theme.variant-copilot :global(.webchat__surface) {\n box-sizing: border-box;\n padding-inline-start: var(--webchat-spacingHorizontalMNudge);\n}\n\n/* Scrollbars */\n:global(.webchat-fluent).theme :global(.webchat__basic-transcript .webchat__basic-transcript__scrollable),\n:global(.webchat-fluent).theme :global(.webchat__view-code-dialog__code-body),\n:global(.webchat-fluent).theme :global(.webchat__render-markdown [data-math-type='block']),\n:global(.webchat-fluent).theme :global(.webchat__feedback-form-text-area-input--scroll),\n:global(.webchat-fluent).theme :global(.webchat__view-code-dialog__body) {\n /* Edge uses -webkit-scrollbar if scrollbar-* is not set */\n scrollbar-color: unset;\n scrollbar-width: unset;\n /* Firefox */\n -moz-scrollbar-color: var(--webchat-colorNeutralForeground5) transparent;\n -moz-scrollbar-width: thin;\n\n &::-webkit-scrollbar {\n height: var(--webchat-spacingVerticalMNudge);\n width: var(--webchat-spacingVerticalMNudge);\n visibility: hidden;\n }\n\n &::-webkit-scrollbar-corner {\n background: transparent;\n }\n\n &:hover::-webkit-scrollbar {\n height: var(--webchat-spacingVerticalMNudge);\n width: var(--webchat-spacingVerticalMNudge);\n }\n\n &:hover::-webkit-scrollbar-thumb {\n background-clip: padding-box;\n background-color: var(--webchat-colorNeutralForeground5);\n border-radius: 10px;\n border-right: 4px solid transparent;\n border: 3px solid transparent;\n }\n\n &:hover::-webkit-scrollbar-thumb:hover {\n background-clip: padding-box;\n background-color: var(--webchat-colorNeutralForeground5);\n border-radius: 10px;\n border-right: 2px solid transparent;\n border: 1px solid transparent;\n }\n}\n\n:global(.webchat-fluent).theme.variant-copilot\n :global(.webchat__basic-transcript .webchat__basic-transcript__scrollable) {\n scrollbar-gutter: stable;\n}\n\n/* Transcript focus indicator color when in focus-visible state */\n:global(.webchat-fluent).theme\n :global(\n .webchat__basic-transcript\n .webchat__basic-transcript__terminator:focus-visible\n + .webchat__basic-transcript__focus-indicator\n ) {\n border-color: var(--webchat-colorStrokeFocus2);\n}\n\n/* Transcript Activity indicator without focus-visible state */\n:global(.webchat-fluent).theme\n :global(.webchat__basic-transcript:not(:focus-visible) .webchat__basic-transcript__activity-indicator--focus) {\n /* Hide activity focus when no focus-visible state */\n display: none;\n}\n\n/* Transcript Focus indicator when activity focused */\n:global(.webchat-fluent).theme\n :global(.webchat__basic-transcript:focus-visible:has(.webchat__basic-transcript__activity-indicator--focus)) {\n :global(.webchat__basic-transcript__focus-indicator) {\n /* Hide transcript focus when an activity is focused */\n display: none;\n }\n}\n\n/* Transcript focused activity */\n:global(.webchat-fluent).theme\n :global(\n .webchat__basic-transcript:focus-visible\n .webchat__basic-transcript__activity:has(.webchat__basic-transcript__activity-indicator--focus)\n ) {\n :global(.webchat__basic-transcript__activity-indicator--focus) {\n /* Hide transcript activity focus when the activity is focused */\n display: none;\n }\n\n :global(.webchat__bubble)::after,\n :global(.pre-chat-message-activity)::after {\n border-radius: var(--webchat__bubble--border-radius);\n content: '';\n inset: 0;\n outline-offset: 0;\n outline: var(--webchat-strokeWidthThick) solid var(--webchat-colorStrokeFocus2);\n pointer-events: none;\n position: absolute;\n }\n\n :global(.pre-chat-message-activity)::after {\n border-radius: var(--webchat-borderRadiusMedium);\n outline-offset: -3px;\n }\n\n :global(.liner-message-activity__text) {\n border-radius: 20px;\n outline-offset: 4px;\n outline: var(--webchat-strokeWidthThick) solid var(--webchat-colorStrokeFocus2);\n }\n}\n\n/* Transcript filer in copilot variant */\n:global(.webchat-fluent).theme.variant-copilot :global(.webchat__basic-transcript .webchat__basic-transcript__filler) {\n /* No filler unless pre-chat activity, see next rule */\n flex-grow: 0;\n}\n\n/* Transcript with a single pre-chat activity */\n:global(.webchat-fluent).theme\n :global(\n .webchat__basic-transcript:has(.webchat__basic-transcript__activity:only-child):has(.pre-chat-message-activity)\n .webchat__basic-transcript__filler\n ) {\n /* limit grow to half of the size to center the activity */\n flex-grow: 0.5;\n}\n\n/* Modal */\n:global(.webchat-fluent).theme :global(.webchat__modal-dialog) {\n height: 100%;\n display: grid;\n place-items: center;\n\n &::backdrop {\n background-color: var(--webchat-colorTransparentBackground);\n }\n\n :global(.webchat__modal-dialog__box) {\n background-color: var(--webchat-colorNeutralBackground1);\n border-radius: var(--webchat-borderRadiusXLarge);\n position: relative;\n color: var(--webchat-colorNeutralForeground1);\n box-shadow: var(--webchat-shadow64);\n }\n\n :global(.webchat__modal-dialog__close-button) {\n color: var(--webchat-colorNeutralForeground1);\n transition: background-color var(--webchat-durationNormal) var(--webchat-curveDecelerateMid);\n }\n\n /* TODO: align with original fluent modal styles in WebChat as they don't match v9 anymore */\n :global(.webchat__modal-dialog__close-button):not(:active):hover {\n background-color: var(--webchat-colorNeutralBackground3);\n }\n\n :global(.webchat__modal-dialog__close-button):focus:active {\n background-color: var(--webchat-colorNeutralBackground4);\n }\n\n :global(.webchat__modal-dialog__close-button):not(:focus-visible) {\n border: none;\n }\n\n :global(.webchat__modal-dialog__close-button):focus {\n border-color: var(--webchat-colorStrokeFocus2);\n }\n\n :global(.webchat__modal-dialog__close-button-image) {\n fill: currentColor;\n }\n}\n\n/* Code block */\n:global(.webchat-fluent).theme :global(.webchat__code-block) {\n border: none;\n font-family: var(--webchat-fontFamilyMonospace);\n font-size: var(--webchat-fontSizeBase300);\n\n --webchat__code-block__copy-button--color: var(--webchat-colorNeutralForeground1);\n --webchat__code-block__copy-button--background: var(--webchat-colorNeutralBackground3);\n\n :global(.webchat__code-block-copy-button) {\n background: transparent;\n border: none;\n color: var(--webchat__code-block__copy-button--color);\n height: 20px;\n margin-inline-start: var(--webchat-spacingHorizontalS);\n padding: 0;\n width: 20px;\n transition: background-color var(--webchat-durationNormal) var(--webchat-curveDecelerateMid);\n\n :global(.webchat__code-block-copy-button__icon) {\n background-color: currentColor;\n }\n\n &:hover {\n background: var(--webchat__code-block__copy-button--background);\n color: var(--webchat__code-block__copy-button--color);\n }\n\n &:active {\n background: var(--webchat__code-block__copy-button--background);\n color: var(--webchat__code-block__copy-button--color);\n }\n\n &:focus {\n color: var(--webchat__code-block__copy-button--color);\n outline-color: currentColor;\n }\n }\n\n &:global(:has(.webchat__code-block__body:focus-visible)):focus-within {\n outline: var(--webchat-strokeWidthThick) solid var(--webchat-colorStrokeFocus2);\n outline-offset: calc(var(--webchat-strokeWidthThick) * -1);\n\n :global(.webchat__code-block__body) {\n outline: none;\n }\n }\n\n &:global(:has(> .webchat__code-block__theme--github-dark-default)) {\n --webchat__background--code-block: var(--codeBlockBackground, var(--webchat-colorGrey8));\n --webchat__code-block__copy-button--background: var(\n --codeBlockCopyButtonBackgroundPressed,\n var(--webchat-colorGrey14)\n );\n --webchat__code-block__copy-button--color: var(--codeBlockCopyButtonForeground, var(--webchat__color--code-block));\n --webchat__color--code-block: var(--codeBlockForeground, var(--webchat-colorGrey98));\n }\n\n &:global(:has(> .webchat__code-block__theme--github-light-default)) {\n --webchat__background--code-block: var(--codeBlockBackground, var(--webchat-colorGrey98));\n --webchat__code-block__copy-button--background: var(--codeBlockBackgroundPressed, var(--webchat-colorGrey92));\n --webchat__code-block__copy-button--color: var(--codeBlockCopyButtonForeground, var(--webchat__color--code-block));\n --webchat__color--code-block: var(--codeBlockForeground, var(--webchat-colorGrey8));\n }\n}\n\n/* View Code dialog */\n:global(.webchat-fluent).theme :global(.webchat__modal-dialog.webchat__view-code-dialog) {\n :global(.webchat__modal-dialog__close-button-layout) {\n display: flex;\n padding: var(--webchat-spacingVerticalS) var(--webchat-spacingHorizontalS);\n }\n\n :global(.webchat__modal-dialog__close-button) {\n align-items: center;\n aspect-ratio: 1;\n display: flex;\n height: var(--webchat-lineHeightBase300);\n justify-content: center;\n padding: 0;\n width: unset;\n }\n\n :global(.webchat__code-block-copy-button) {\n --webchat__code-block__copy-button--color: var(--webchat-colorNeutralForeground1);\n --webchat__code-block__copy-button--background: var(--webchat-colorNeutralBackground3);\n\n margin-block-start: var(--webchat-spacingVerticalS);\n position: absolute;\n right: 32px;\n top: 0;\n }\n\n :global(.webchat__modal-dialog__box) {\n width: fit-content;\n }\n\n :global(.webchat__modal-dialog__body) {\n margin: 0;\n padding: var(--webchat-spacingVerticalS) var(--webchat-spacingHorizontalM);\n }\n\n :global(.webchat__view-code-dialog__title) {\n font-size: var(--webchat-fontSizeBase300);\n font-weight: var(--webchat-fontWeightSemibold);\n line-height: var(--webchat-lineHeightBase300);\n }\n\n :global(.webchat__view-code-dialog__body) {\n font-family: var(--webchat-fontFamilyMonospace);\n font-size: var(--webchat-fontSizeBase300);\n margin: 0 calc(var(--webchat-spacingHorizontalM) * -1);\n padding: 0 var(--webchat-spacingHorizontalM);\n }\n\n :global(.webchat__view-code-dialog__footer) {\n color: var(--webchat-colorNeutralForeground4);\n font-size: var(--webchat-fontSizeBase100);\n line-height: var(--webchat-lineHeightBase100);\n }\n\n :global(.webchat__view-code-dialog__link) {\n color: var(--webchat-colorBrandForegroundLink);\n text-decoration-color: transparent;\n\n &:target {\n color: var(--webchat-colorBrandForegroundLinkSelected);\n }\n &:hover {\n color: var(--webchat-colorBrandForegroundLinkHover);\n text-decoration: underline 1px currentColor;\n }\n &:active {\n color: var(--webchat-colorBrandForegroundLinkPressed);\n }\n &:focus-visible {\n outline: none;\n text-decoration: underline 1px double var(--webchat-colorStrokeFocus2);\n }\n }\n}\n\n/* Activity button */\n:global(.webchat-fluent).theme :global(.webchat__activity-button) {\n background: var(--webchat-colorNeutralBackground1);\n border-radius: var(--webchat-borderRadiusMedium);\n border: var(--webchat-strokeWidthThin) solid var(--webchat-colorNeutralStroke1);\n color: var(--webchat-colorNeutralForeground1);\n gap: var(--webchat-spacingHorizontalXS);\n padding: 5px var(--webchat-spacingHorizontalM);\n\n &:hover {\n background: var(--webchat-colorNeutralBackground1Hover);\n border: var(--webchat-strokeWidthThin) solid var(--webchat-colorNeutralStroke1Hover);\n color: var(--webchat-colorNeutralForeground1Hover);\n }\n\n &:active {\n background: var(--webchat-colorNeutralBackground1Pressed);\n border: var(--webchat-strokeWidthThin) solid var(--webchat-colorNeutralStroke1Pressed);\n color: var(--webchat-colorNeutralForeground1Pressed);\n }\n\n &:focus-visible {\n background: var(--webchat-colorNeutralBackground1);\n outline: var(--webchat-strokeWidthThick) solid var(--webchat-colorStrokeFocus2);\n outline-offset: calc(var(--webchat-strokeWidthThick) * -1);\n }\n\n &[aria-disabled='true'] {\n background: var(--webchat-colorNeutralBackgroundDisabled);\n border: var(--webchat-strokeWidthThin) solid var(--webchat-colorNeutralStrokeDisabled);\n color: var(--webchat-colorNeutralForegroundDisabled);\n }\n\n :global(.webchat__activity-button__icon) {\n height: 20px;\n width: 20px;\n }\n}\n\n/* Copy button */\n:global(.webchat-fluent).theme :global(.webchat__activity-copy-button) {\n :global(.webchat__activity-copy-button__copied-text) {\n background-color: var(--webchat-colorNeutralBackground1);\n }\n\n &:global(.webchat__activity-copy-button--copied) :global(.webchat__activity-copy-button__copied-text) {\n animation-duration: var(--webchat-durationUltraSlow);\n }\n}\n\n/* Monochrome image masker */\n:global(.webchat-fluent).theme :global(.webchat__monochrome-image-masker) {\n background-color: currentColor;\n height: 1em;\n width: 1em;\n}\n\n/* Feedback button */\n:global(.webchat-fluent).theme :global(.webchat__thumb-button) {\n color: var(--webchat-colorNeutralForeground1);\n\n &:focus-visible {\n outline: var(--webchat-strokeWidthThick) solid var(--webchat-colorStrokeFocus2);\n }\n\n &[aria-disabled='true'] {\n color: var(--webchat-colorNeutralForegroundDisabled);\n }\n}\n\n/* Tooltip */\n:global(.webchat-fluent).theme :global(.webchat__tooltip) {\n --webchat__tooltip-background: var(--tooltip-background, var(--webchat-colorNeutralBackground1));\n\n color: var(--webchat-colorNeutralForeground1);\n filter: drop-shadow(0 0 2px var(--webchat-colorNeutralShadowAmbient))\n drop-shadow(0 4px 8px var(--webchat-colorNeutralShadowKey));\n font-family: var(--webchat-fontFamilyBase);\n font-size: var(--webchat-fontSizeBase200);\n font-weight: var(--webchat-fontWeightRegular);\n line-height: var(--webchat-lineHeightBase200);\n padding: var(--webchat-spacingVerticalSNudge) var(--webchat-spacingHorizontalM);\n transition: opacity var(--webchat-durationNormal) var(--webchat-curveDecelerateMid);\n}\n\n/* Feedback Form */\n:global(.webchat-fluent).theme :global(.webchat__feedback-form) {\n gap: var(--webchat-spacingVerticalXS);\n\n :global(.webchat__feedback-form__body) {\n font-family: var(--webchat-fontFamilyBase);\n color: var(--webchat-colorNeutralForeground1);\n font-size: var(--webchat-fontSizeBase300);\n font-weight: var(--webchat-fontWeightRegular);\n line-height: var(--webchat-lineHeightBase300);\n }\n \n :global(.webchat__feedback-form__caption) {\n font-family: var(--webchat-fontFamilyBase);\n color: var(--webchat-colorNeutralForeground1);\n font-size: var(--webchat-fontSizeBase100);\n font-weight: var(--webchat-fontWeightRegular);\n line-height: var(--webchat-lineHeightBase200);\n }\n \n :global(.webchat__feedback-form__submit-button) {\n background-color: var(--webchat-colorBrandBackground);\n border: var(--webchat-strokeWidthThin) solid var(--webchat-colorBrandBackground);\n border-radius: var(--webchat-borderRadiusMedium);\n color: var(--webchat-colorNeutralForegroundOnBrand);\n cursor: pointer;\n font-family: var(--webchat-fontFamilyBase);\n font-size: var(--webchat-fontSizeBase300);\n padding: var(--webchat-spacingVerticalNone) var(--webchat-spacingHorizontalS);\n transition: background-color var(--webchat-durationNormal) var(--webchat-curveDecelerateMid);\n \n &:hover {\n background-color: var(--webchat-colorBrandBackgroundHover);\n border: var(--webchat-strokeWidthThin) solid var(--webchat-colorBrandBackgroundHover);\n }\n \n &:focus-visible {\n outline: var(--webchat-strokeWidthThick) solid var(--webchat-colorStrokeFocus2);\n outline-offset: calc(var(--webchat-strokeWidthThin) * -1);\n }\n \n &:active {\n background-color: var(--webchat-colorBrandBackgroundPressed);\n border: var(--webchat-strokeWidthThin) solid var(--webchat-colorBrandBackgroundPressed);\n }\n }\n \n :global(.webchat__feedback-form__cancel-button) {\n background-color: var(--webchat-colorNeutralBackground1);\n border: var(--webchat-strokeWidthThin) solid var(--webchat-colorNeutralStroke1);\n border-radius: var(--webchat-borderRadiusMedium);\n color: var(--webchat-colorNeutralForeground1);\n cursor: pointer;\n font-family: var(--webchat-fontFamilyBase);\n font-size: var(--webchat-fontSizeBase300);\n padding: var(--webchat-spacingVerticalNone) var(--webchat-spacingHorizontalS);\n transition: background-color var(--webchat-durationNormal) var(--webchat-curveDecelerateMid);\n \n &:hover {\n background-color: var(--webchat-colorNeutralBackground1Hover);\n border: var(--webchat-strokeWidthThin) solid var(--webchat-colorNeutralStroke1Hover);\n }\n \n &:focus-visible {\n outline: var(--webchat-strokeWidthThick) solid var(--webchat-colorStrokeFocus2);\n outline-offset: calc(var(--webchat-strokeWidthThin) * -1);\n }\n \n &:active {\n background-color: var(--webchat-colorNeutralBackground1Pressed);\n border: var(--webchat-strokeWidthThin) solid var(--webchat-colorNeutralStroke1Pressed);\n }\n }\n \n :global(.webchat__feedback-form-text-area) {\n background-color: var(--webchat-colorNeutralBackground1);\n border-radius: var(--webchat-borderRadiusMedium);\n border: var(--webchat-strokeWidthThin) solid var(--webchat-colorNeutralStroke1);\n font-family: var(--webchat-fontFamilyBase);\n font-size: var(--webchat-fontSizeBase300);\n line-height: var(--webchat-lineHeightBase300);\n gap: var(--webchat-spacingVerticalSNudge);\n padding: var(--webchat-spacingVerticalS) var(--webchat-spacingHorizontalM);\n &::after {\n border-bottom-left-radius: var(--webchat-borderRadiusMedium);\n border-bottom-right-radius: var(--webchat-borderRadiusMedium);\n border-bottom: var(--webchat-strokeWidthThicker) solid var(--webchat-colorBrandForeground1);\n clip-path: inset(calc(100% - var(--webchat-strokeWidthThicker)) 50% 0 50%);\n transition: clip-path var(--webchat-durationNormal) var(--webchat-curveDecelerateMid);\n }\n &:focus-within {\n border: var(--webchat-strokeWidthThin) solid var(--webchat-colorNeutralStroke1);\n }\n &:focus-within::after {\n clip-path: inset(calc(100% - var(--webchat-strokeWidthThicker)) 0 0 0);\n transition: clip-path var(--webchat-durationNormal) var(--webchat-curveDecelerateMid);\n }\n } \n}","import { testIds } from 'botframework-webchat-component';\nimport { useStyles } from 'botframework-webchat-styles/react';\nimport cx from 'classnames';\nimport React, { memo } from 'react';\n\nimport SlidingDots from '../assets/SlidingDots';\nimport styles from './SlidingDotsTypingIndicator.module.css';\n\nfunction SlidingDotsTypingIndicator() {\n const classNames = useStyles(styles);\n\n return (\n <div className={classNames['sliding-dots-typing-indicator']} data-testid={testIds.typingIndicator}>\n <SlidingDots className={cx(classNames['sliding-dots-typing-indicator__image'])} />\n </div>\n );\n}\n\nexport default memo(SlidingDotsTypingIndicator);\n",":global(.webchat-fluent) .sliding-dots-typing-indicator {\n align-self: start;\n display: flex;\n flex: none;\n height: 16px;\n margin: auto var(--webchat-spacingHorizontalMNudge);\n}\n\n:global(.webchat-fluent) .sliding-dots-typing-indicator__image {\n height: 6px;\n width: auto;\n}\n"],"mappings":"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","names":["injectMetaTag","hooks","cx","React","memo","useCallback","useRef","useState","useRefFrom","Components","cx","React","memo","MonochromeImageMasker","addDocumentIcon","AddDocumentIcon","props","AddDocumentIcon_default","Components","cx","React","memo","MonochromeImageMasker","attachmentIcon","AttachmentIcon","props","AttachmentIcon_default","Components","cx","React","memo","MonochromeImageMasker","infoSmallIcon","InfoSmallIcon","props","InfoSmallIcon_default","Components","cx","React","memo","MonochromeImageMasker","sendIcon","SendIcon","props","SendIcon_default","Components","cx","React","memo","MonochromeImageMasker","telephoneKeypadIcon","TelephoneKeypadIcon","props","TelephoneKeypadIcon_default","createStyle","content","style","makeCreateStyles","contents","fluentStyleContent","createStyles_default","n","useMemo","useStyles","styles","baseClassName","resultClassName","useStyles_default","useMemo","useContext","useMemo","createContext","React","memo","useMemo","createComposer","Provider","defaults","displayName","Composer","children","props","value","VariantContext","createContext","VariantComposer","createComposer","VariantComposer_default","useVariants","variant","useContext","VariantContext","useMemo","useVariantClassName","styles","classNames","f","variants","useVariants","useMemo","variant","value","testIds","testIds_default","hooks","cx","React","memo","useCallback","useEffect","useRef","useState","useRefFrom","DropZone_default","sendbox__attachment-drop-zone","sendbox__attachment-drop-zone--droppable","sendbox__attachment-drop-zone-icon","useLocalizer","hooks","handleDragOver","event","isFilesTransferEvent","type","isDescendantOf","target","ancestor","current","DropZone","props","dropZoneState","setDropZoneState","useState","classNames","f","DropZone_default","dropZoneRef","useRef","localize","onFilesAddedRef","useRefFrom","useEffect","entranceCounter","handleDragEnter","handleDragLeave","handleDragEnd","handleDocumentDrop","handleDrop","useCallback","React","cx","testIds_default","AddDocumentIcon_default","memo","hooks","cx","React","memo","useCallback","getOrgSchemaMessage","isPreChatMessageActivity","activity","hooks","cx","React","memo","useMemo","PreChatMessageActivity_default","pre-chat-message-activity","pre-chat-message-activity__body","pre-chat-message-activity__body--blueprint","pre-chat-message-activity__body-avatar","pre-chat-message-activity__body-title","pre-chat-message-activity__body-subtitle","pre-chat-message-activity__toolbar","hooks","cx","React","Fragment","memo","Components","hooks","cx","React","memo","useCallback","useMemo","useRefFrom","StarterPromptsCardAction_default","pre-chat-message-activity__card-action-box","pre-chat-message-activity__card-action-image","blueprintAnimation","pre-chat-message-activity__card-action-subtitle","pre-chat-message-activity__card-action-title","useFocus","useRenderMarkdownAsHTML","useSendBoxValue","useUIState","hooks","MonochromeImageMasker","Components","StarterPromptsCardAction","className","messageBackAction","_","setSendBoxValue","uiState","classNames","f","StarterPromptsCardAction_default","focus","inputTextRef","useRefFrom","renderMarkdownAsHTML","subtitleHTML","useMemo","disabled","title","shouldShowBlueprint","handleClick","useCallback","React","cx","testIds_default","memo","StarterPromptsToolbar_default","pre-chat-message-activity__card-action-toolbar","webchat-container","pre-chat-message-activity__card-action-toolbar-grid","useUIState","hooks","StarterPromptsToolbar","cardActions","className","classNames","f","StarterPromptsToolbar_default","uiState","React","cx","Fragment","StarterPromptsCardAction_default","card","cardAction","index","memo","cx","React","memo","ActivityDecorator_default","activity-decorator","variant-fluent","variant-copilot","React","memo","useMemo","hooks","useMemo","hooks","useStyleOptions","useActivityStyleOptions","activity","styleOptions","getOrgSchemaMessage","isAIGeneratedActivity","activity","useMemo","getOrgSchemaMessage","useActivityAuthor","activity","entity","CopilotMessageHeader_default","copilot-message-header","copilot-message-header__avatar","copilot-message-header__title","copilot-message-header__ai-generated-content","useLocalizer","hooks","CopilotMessageHeader","activity","botAvatarImage","botAvatarBackgroundColor","useActivityStyleOptions","classNames","f","CopilotMessageHeader_default","localize","isAIGenerated","isAIGeneratedActivity","avatarStyle","useMemo","author","useActivityAuthor","avatarImage","botTitle","React","memo","ActivityDecorator","activity","children","classNames","f","ActivityDecorator_default","variants","useVariants","variantClassName","useVariantClassName","shouldRenderHeader","React","cx","CopilotMessageHeader_default","memo","useLocalizer","useRenderMarkdownAsHTML","useUIState","hooks","PreChatMessageActivity","activity","uiState","classNames","f","PreChatMessageActivity_default","renderMarkdownAsHTML","localize","author","useActivityAuthor","html","useMemo","React","cx","StarterPromptsToolbar_default","memo","computeSuggestedActionText","cardAction","title","type","value","React","createContext","memo","useCallback","useContext","useEffect","useMemo","useRef","RovingFocusContext","RovingFocusProvider","props","activeItemIndexRef","itemRefsRef","updateItemTabIndex","current","index","setActiveItemIndex","valueOrFunction","nextActiveItemIndex","ref","handleFocus","event","target","handleSetNextActive","key","currentIndex","isUnidirectional","isVerticalMove","isHorizontalMove","isForwardMove","direction","itemIndices","_","nextIndex","handleKeyDown","itemEffector","value","useRovingFocusItemRef","itemIndex","rovingFocus_default","hooks","cx","React","memo","useCallback","React","forwardRef","memo","useRef","preventDefaultHandler","event","AccessibleButton","ariaHidden","children","className","dataTestId","disabled","onClick","tabIndex","forwardedRef","targetRef","AccessibleButton_default","SuggestedAction_default","suggested-action","suggested-action__image","useFocus","usePerformCardAction","useScrollToEnd","useStyleSet","useSuggestedActions","useUIState","hooks","SuggestedAction","buttonText","className","displayText","image","imageAlt","itemIndex","text","type","value","_","setSuggestedActions","suggestedActionStyleSet","uiState","focus","focusRef","useRovingFocusItemRef","performCardAction","classNames","f","SuggestedAction_default","scrollToEnd","handleClick","useCallback","target","React","AccessibleButton_default","cx","testIds_default","memo","SuggestedActions_default","suggested-actions","suggested-actions--flow","suggested-actions--stacked","useFocus","useLocalizer","useStyleOptions","useStyleSet","useSuggestedActions","useUIState","hooks","SuggestedActionStackedOrFlowContainer","props","suggestedActionLayout","suggestedActionsStyleSet","uiState","classNames","f","SuggestedActions_default","React","cx","SuggestedActions","localize","suggestedActions","_","activity","focus","handleEscapeKey","useCallback","children","isPreChatMessageActivity","cardAction","index","displayText","image","imageAltText","text","type","value","SuggestedAction_default","computeSuggestedActionText","rovingFocus_default","memo","React","memo","useMemo","useState","createContext","Context","Context_default","Provider","memo","children","shown","setShown","useState","context","useMemo","React","Context_default","Provider_default","React","memo","Components","cx","React","memo","useCallback","useEffect","useRef","useRefFrom","React","forwardRef","memo","useCallback","useRefFrom","Button_default","telephone-keypad__button","telephone-keypad__button__ruby","telephone-keypad__button__text","telephone-keypad--horizontal","Button","memo","forwardRef","button","dataTestId","onClick","ruby","ref","classNames","f","Button_default","onClickRef","useRefFrom","handleClick","useCallback","React","useContext","useMemo","useShown","setShown","shown","useContext","Context_default","useMemo","TelephoneKeypad_default","telephone-keypad","telephone-keypad__box","telephone-keypad__info-message","telephone-keypad__info-message-link","LocalizedString","Components","Orientation","memo","children","isHorizontal","classNames","f","TelephoneKeypad_default","React","TelephoneKeypad","autoFocus","className","onButtonClick","autoFocusRef","useRefFrom","firstButtonRef","useRef","onButtonClickRef","setShown","useShown","handleButton1Click","useCallback","handleButton2Click","handleButton3Click","handleButton4Click","handleButton5Click","handleButton6Click","handleButton7Click","handleButton8Click","handleButton9Click","handleButton0Click","handleButtonStarClick","handleButtonPoundClick","handleKeyDown","event","useEffect","cx","Button_default","testIds_default","InfoSmallIcon_default","TelephoneKeypadSurrogate","memo","props","useShown","React","TelephoneKeypad_default","Surrogate_default","hooks","React","useCallback","useRef","memo","useRefFrom","hooks","cx","React","memo","Toolbar_default","sendbox__toolbar","sendbox__toolbar-button","sendbox__toolbar-button--selected","sendbox__toolbar-separator","useUIState","hooks","preventDefaultHandler","event","ToolbarButton","memo","props","classNames","f","Toolbar_default","uiState","disabled","React","cx","Toolbar","ToolbarSeparator","AddAttachmentButton_default","sendbox__add-attachment","sendbox__add-attachment-input","useLocalizer","useStyleOptions","hooks","AddAttachmentButton","props","inputRef","useRef","classNames","f","AddAttachmentButton_default","localize","uploadAccept","uploadMultiple","onFilesAddedRef","useRefFrom","handleClick","useCallback","handleFileChange","files","React","ToolbarButton","testIds_default","AttachmentIcon_default","memo","hooks","cx","React","memo","Attachments_default","sendbox__attachment","useLocalizer","useUIState","hooks","attachmentsPluralStringIds","Attachments","attachments","className","uiState","classNames","f","Attachments_default","localizeWithPlural","React","cx","memo","useLiveRegion","React","memo","ErrorMessage_default","sendbox__error-message","ErrorMessage","error","id","classNames","f","ErrorMessage_default","useLiveRegion","React","memo","hooks","useCallback","useMemo","useState","useRefFrom","useConnectivityStatus","useLocalizer","useSubmitError","attachments","message","connectivityStatus","error","setError","localize","submitErrorRef","errorMessageStringMap","hasValue","commitLatestError","useSubmitError_default","useCallback","hooks","useScrollDown","useScrollUp","useTranscriptNavigation","scrollDown","scrollUp","event","ctrlKey","metaKey","shiftKey","handled","useMemo","useUniqueId","prefix","id","SendBox_default","sendbox","variant-copilot","sendbox__text-counter","sendbox__text-counter--error","sendbox__sendbox","sendbox__attachment--in-grid","sendbox__text-area--in-grid","sendbox__sendbox-controls--in-grid","sendbox__telephone-keypad--in-grid","sendbox__sendbox-text","sendbox__sendbox-controls","React","memo","useCallback","hooks","useLocalizer","hooks","TelephoneKeypadToolbarButton","memo","telephoneKeypadShown","setTelephoneKeypadShown","useShown","localize","handleClick","useCallback","shown","React","ToolbarButton","testIds_default","TelephoneKeypadIcon_default","TelephoneKeypadToolbarButton_default","hooks","cx","React","forwardRef","Fragment","useCallback","useRef","TextArea_default","sendbox__text-area","sendbox__text-area--hidden","sendbox__text-area--in-completion","sendbox__text-area-doppelganger","sendbox__text-area-input","sendbox__text-area-shared","sendbox__text-area--scroll","useUIState","hooks","TextArea","forwardRef","props","ref","uiState","classNames","f","TextArea_default","isInCompositionRef","useRef","disabled","handleCompositionEnd","useCallback","handleCompositionStart","handleKeyDown","event","React","cx","Fragment","useFocus","useLocalizer","useMakeThumbnail","useRegisterFocusSendBox","useSendBoxAttachments","useSendBoxValue","useSendMessage","useStyleOptions","useUIState","hooks","SendBox","props","hideTelephoneKeypadButton","hideUploadButton","maxMessageLength","attachments","setAttachments","globalMessage","setGlobalMessage","localMessage","setLocalMessage","useState","telephoneKeypadShown","useShown","uiState","classNames","f","SendBox_default","variantClassName","useVariantClassName","errorMessageId","useUniqueId","inputRef","useRef","localize","makeThumbnail","sendMessage","setFocus","message","setMessage","isBlueprint","errorMessage","commitLatestError","useSubmitError_default","isMessageLengthExceeded","shouldShowMessageLength","shouldShowTelephoneKeypad","useCallback","noKeyboard","waitUntil","previousReadOnly","resolve","attachmentsRef","useRefFrom","messageRef","handleSendBoxClick","event","handleMessageChange","handleAddFiles","inputFiles","newAttachments","file","thumbnailURL","handleFormSubmit","handleTelephoneKeypadButtonClick","dtmf","handleTranscriptNavigation","useTranscriptNavigation","aria","React","cx","testIds_default","SuggestedActions_default","TextArea_default","Surrogate_default","Attachments_default","Toolbar","TelephoneKeypadToolbarButton_default","AddAttachmentButton_default","ToolbarSeparator","ToolbarButton","SendIcon_default","DropZone_default","ErrorMessage_default","PrimarySendBox","memo","DecoratorComposer","Components","WebChatDecorator","React","memo","cx","React","Fragment","memo","hooks","React","memo","useCallback","useEffect","useRef","useRefFrom","useReactContext","createContext","defaultContextValue","Context","Context_default","useContext","useReactContext","Context_default","useAssetURL","assetName","urlState","useContext","useLocalizer","useShouldReduceMotion","hooks","SlidingDots","className","shouldReduceMotion","url","useAssetURL","localize","objectElementRef","useRef","altText","shouldReduceMotionRef","useRefFrom","pauseAnimations","useCallback","contentDocument","svgElement","SVGSVGElement","unpauseAnimations","pauseOrUnpauseAnimations","useEffect","React","SlidingDots_default","memo","ActivityLoader_default","activity-loader","variant-fluent","FluentActivityLoader","children","classNames","f","ActivityLoader_default","variantClassName","useVariantClassName","React","Fragment","SlidingDots_default","cx","memo","React","memo","useEffect","useMemo","SLIDING_DOTS_SVG_STRING","AssetComposer","memo","children","slidingDotsURL","useMemo","useEffect","context","React","Context_default","AssetComposer_default","isLinerMessageActivity","activity","React","memo","LinerMessageActivity_default","liner-message-activity","liner-message-activity__text","LinerMessageActivity","activity","classNames","f","LinerMessageActivity_default","React","LinerActivity_default","memo","React","cx","Theme_default","theme","variant-copilot","rootClassName","Theme","props","classNames","f","Theme_default","variantClassName","useVariantClassName","React","cx","testIds","cx","React","memo","SlidingDotsTypingIndicator_default","sliding-dots-typing-indicator","sliding-dots-typing-indicator__image","SlidingDotsTypingIndicator","classNames","f","SlidingDotsTypingIndicator_default","React","testIds","SlidingDots_default","cx","memo","ThemeProvider","Components","activityMiddleware","next","args","activity","isPreChatMessageActivity","React","PreChatMessageActivity_default","isLinerMessageActivity","LinerActivity_default","renderActivity","ActivityDecorator_default","sendBoxMiddleware","PrimarySendBox","decoratorMiddleware","init","request","ActivityLoader_default","styles","createStyles_default","fluentStyleOptions","typingIndicatorMiddleware","SlidingDotsTypingIndicator_default","FluentThemeProvider","children","variant","VariantComposer_default","Theme","Provider_default","AssetComposer_default","WebChatDecorator","DecoratorComposer","FluentThemeProvider_default","memo","buildTool","moduleFormat","version","buildInfo","injectMetaTag"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/components/sendBox/SendBox.tsx","../src/components/icon/FluentIcon.tsx","../../react-valibot/src/reactNode.ts","../../react-valibot/src/validateProps.ts","../../styles/src/react/private/useStyles.ts","unplugin-lightningcss:/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/icon/FluentIcon.module.css?css_module","../../styles/src/private/makeCreateStyles.ts","../src/styles/createStyles.ts","../src/styles/useVariantClassName.ts","../src/private/useVariants.ts","../src/private/VariantComposer.ts","../src/private/createComposer.tsx","../src/testIds.ts","../src/components/dropZone/DropZone.tsx","unplugin-lightningcss:/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/dropZone/DropZone.module.css?css_module","../src/components/suggestedActions/SuggestedActions.tsx","../src/components/preChatActivity/isPreChatMessageActivity.ts","../src/components/preChatActivity/PreChatMessageActivity.tsx","unplugin-lightningcss:/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/preChatActivity/PreChatMessageActivity.module.css?css_module","../src/components/preChatActivity/StarterPromptsToolbar.tsx","../src/components/preChatActivity/StarterPromptsCardAction.tsx","unplugin-lightningcss:/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/preChatActivity/StarterPromptsCardAction.module.css?css_module","unplugin-lightningcss:/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/preChatActivity/StarterPromptsToolbar.module.css?css_module","../src/components/activity/ActivityDecorator.tsx","unplugin-lightningcss:/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/activity/ActivityDecorator.module.css?css_module","../src/components/activity/CopilotMessageHeader.tsx","../src/components/activity/private/useActivityStyleOptions.ts","../src/components/activity/private/isAIGeneratedActivity.ts","../src/components/activity/private/useActivityAuthor.ts","unplugin-lightningcss:/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/activity/CopilotMessageHeader.module.css?css_module","../src/components/suggestedActions/private/computeSuggestedActionText.ts","../src/components/suggestedActions/private/rovingFocus.tsx","../src/components/suggestedActions/SuggestedAction.tsx","../src/components/suggestedActions/AccessibleButton.tsx","unplugin-lightningcss:/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/suggestedActions/SuggestedAction.module.css?css_module","unplugin-lightningcss:/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/suggestedActions/SuggestedActions.module.css?css_module","../src/components/telephoneKeypad/Provider.tsx","../src/components/telephoneKeypad/private/Context.ts","../src/components/telephoneKeypad/Surrogate.tsx","../src/components/telephoneKeypad/private/TelephoneKeypad.tsx","../src/components/telephoneKeypad/useShown.ts","../src/components/telephoneKeypad/private/Button.tsx","unplugin-lightningcss:/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/telephoneKeypad/private/Button.module.css?css_module","unplugin-lightningcss:/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/telephoneKeypad/private/TelephoneKeypad.module.css?css_module","../src/components/sendBox/AddAttachmentButton.tsx","../src/components/sendBox/Toolbar.tsx","unplugin-lightningcss:/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/sendBox/Toolbar.module.css?css_module","unplugin-lightningcss:/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/sendBox/AddAttachmentButton.module.css?css_module","../src/components/sendBox/ErrorMessage.tsx","unplugin-lightningcss:/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/sendBox/ErrorMessage.module.css?css_module","../src/components/sendBox/private/useSubmitError.ts","../src/components/sendBox/private/useTranscriptNavigation.ts","../src/components/sendBox/private/useUniqueId.ts","unplugin-lightningcss:/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/sendBox/SendBox.module.css?css_module","../src/components/sendBox/TelephoneKeypadToolbarButton.tsx","../src/private/FluentThemeProvider.tsx","../src/components/activity/ActivityLoader.tsx","../src/components/assets/SlidingDots.tsx","../src/components/assets/private/useContext.ts","../src/components/assets/private/Context.ts","../src/components/assets/private/useAssetURL.ts","unplugin-lightningcss:/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/activity/ActivityLoader.module.css?css_module","../src/components/assets/AssetComposer.tsx","../src/components/linerActivity/private/isLinerMessageActivity.ts","../src/components/linerActivity/private/LinerActivity.tsx","unplugin-lightningcss:/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/linerActivity/private/LinerMessageActivity.module.css?css_module","../src/components/theme/Theme.tsx","unplugin-lightningcss:/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/theme/Theme.module.css?css_module","../src/components/typingIndicator/SlidingDotsTypingIndicator.tsx","unplugin-lightningcss:/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/typingIndicator/SlidingDotsTypingIndicator.module.css?css_module"],"sourcesContent":["import { injectMetaTag } from 'inject-meta-tag';\n\nimport { SendBox as FluentSendBox } from './components/sendBox/index';\nimport FluentThemeProvider from './private/FluentThemeProvider';\nimport testIds from './testIds';\n\nconst buildTool = process.env['build_tool'];\nconst moduleFormat = process.env['module_format'];\nconst version = process.env['npm_package_version'];\n\nconst buildInfo = { buildTool, moduleFormat, version };\n\ninjectMetaTag(\n 'botframework-webchat:fluent-theme',\n `version=${process.env['npm_package_version']}; build-tool=${process.env['build_tool']}; module-format=${process.env['module_format']}`\n);\n\nexport { FluentThemeProvider, FluentSendBox, buildInfo, testIds };\n","import { hooks, Components, type SendBoxFocusOptions } from 'botframework-webchat-component';\nimport cx from 'classnames';\nimport React, {\n memo,\n ReactNode,\n useCallback,\n useRef,\n useState,\n type FormEventHandler,\n type MouseEventHandler\n} from 'react';\nimport { useRefFrom } from 'use-ref-from';\n\nimport { FluentIcon } from '../icon';\nimport { useStyles, useVariantClassName } from '../../styles';\nimport testIds from '../../testIds';\nimport { DropZone } from '../dropZone';\nimport { SuggestedActions } from '../suggestedActions';\nimport { TelephoneKeypadSurrogate, useTelephoneKeypadShown, type DTMF } from '../telephoneKeypad';\nimport AddAttachmentButton from './AddAttachmentButton';\nimport ErrorMessage from './ErrorMessage';\nimport useSubmitError from './private/useSubmitError';\nimport useTranscriptNavigation from './private/useTranscriptNavigation';\nimport useUniqueId from './private/useUniqueId';\nimport styles from './SendBox.module.css';\nimport TelephoneKeypadToolbarButton from './TelephoneKeypadToolbarButton';\nimport { Toolbar, ToolbarButton, ToolbarSeparator } from './Toolbar';\n\nconst {\n useFocus,\n useLocalizer,\n useMakeThumbnail,\n useRegisterFocusSendBox,\n useSendBoxAttachments,\n useSendBoxValue,\n useSendMessage,\n useStyleOptions,\n useUIState\n} = hooks;\n\nconst { AttachmentBar, TextArea } = Components;\n\ntype Props = Readonly<{\n className?: string | undefined;\n completion?: ReactNode | undefined;\n isPrimary?: boolean | undefined;\n placeholder?: string | undefined;\n}>;\n\nfunction SendBox(props: Props) {\n const [{ hideTelephoneKeypadButton, hideUploadButton, maxMessageLength }] = useStyleOptions();\n const [attachments, setAttachments] = useSendBoxAttachments();\n const [globalMessage, setGlobalMessage] = useSendBoxValue();\n const [localMessage, setLocalMessage] = useState('');\n const [telephoneKeypadShown] = useTelephoneKeypadShown();\n const [uiState] = useUIState();\n const classNames = useStyles(styles);\n const variantClassName = useVariantClassName(styles);\n const errorMessageId = useUniqueId('sendbox__error-message-id');\n const inputRef = useRef<HTMLTextAreaElement>(null);\n const localize = useLocalizer();\n const makeThumbnail = useMakeThumbnail();\n const sendMessage = useSendMessage();\n const setFocus = useFocus();\n\n const message = props.isPrimary ? globalMessage : localMessage;\n const setMessage = props.isPrimary ? setGlobalMessage : setLocalMessage;\n const isBlueprint = uiState === 'blueprint';\n\n const [errorMessage, commitLatestError] = useSubmitError({ message, attachments });\n const isMessageLengthExceeded = !!maxMessageLength && message.length > maxMessageLength;\n const shouldShowMessageLength =\n !isBlueprint && !telephoneKeypadShown && maxMessageLength && isFinite(maxMessageLength);\n const shouldShowTelephoneKeypad = !isBlueprint && telephoneKeypadShown;\n\n useRegisterFocusSendBox(\n useCallback(\n ({ noKeyboard, waitUntil }: SendBoxFocusOptions) => {\n if (!inputRef.current) {\n return;\n }\n if (noKeyboard) {\n waitUntil(\n (async () => {\n const previousReadOnly = inputRef.current?.getAttribute('readonly');\n inputRef.current?.setAttribute('readonly', 'true');\n // TODO: [P2] We should update this logic to handle quickly-successive `focusCallback`.\n // If a succeeding `focusCallback` is being called, the `setTimeout` should run immediately.\n // Or the second `focusCallback` should not set `readonly` to `true`.\n // eslint-disable-next-line no-restricted-globals\n await new Promise(resolve => setTimeout(resolve, 0));\n inputRef.current?.focus();\n if (typeof previousReadOnly !== 'string') {\n inputRef.current?.removeAttribute('readonly');\n } else {\n inputRef.current?.setAttribute('readonly', previousReadOnly);\n }\n })()\n );\n } else {\n inputRef.current?.focus();\n }\n },\n [inputRef]\n )\n );\n\n const attachmentsRef = useRefFrom(attachments);\n const messageRef = useRefFrom(message);\n\n const handleSendBoxClick = useCallback<MouseEventHandler>(\n event => {\n if ('tabIndex' in event.target && typeof event.target.tabIndex === 'number' && event.target.tabIndex >= 0) {\n return;\n }\n\n setFocus('sendBox');\n },\n [setFocus]\n );\n\n const handleMessageChange: React.FormEventHandler<HTMLTextAreaElement> = useCallback(\n event => setMessage(event.currentTarget.value),\n [setMessage]\n );\n\n const handleAddFiles = useCallback(\n async (inputFiles: File[]) => {\n const newAttachments = Object.freeze(\n await Promise.all(\n inputFiles.map(file =>\n makeThumbnail(file).then(thumbnailURL =>\n Object.freeze({\n blob: file,\n ...(thumbnailURL && { thumbnailURL })\n })\n )\n )\n )\n );\n\n setAttachments(attachmentsRef.current.concat(newAttachments));\n },\n [attachmentsRef, makeThumbnail, setAttachments]\n );\n\n const handleFormSubmit: FormEventHandler<HTMLFormElement> = useCallback(\n event => {\n event.preventDefault();\n const error = commitLatestError();\n\n if (error !== 'empty' && !isMessageLengthExceeded) {\n sendMessage(messageRef.current, undefined, { attachments: attachmentsRef.current });\n\n setMessage('');\n setAttachments([]);\n }\n\n setFocus('sendBox');\n },\n [\n commitLatestError,\n isMessageLengthExceeded,\n setFocus,\n sendMessage,\n setMessage,\n messageRef,\n attachmentsRef,\n setAttachments\n ]\n );\n\n const handleTelephoneKeypadButtonClick = useCallback(\n // TODO: We need more official way of sending DTMF.\n (dtmf: DTMF) => sendMessage(`/DTMFKey ${dtmf}`),\n [sendMessage]\n );\n\n const handleTranscriptNavigation = useTranscriptNavigation();\n\n const aria = {\n 'aria-invalid': 'false' as const,\n ...(errorMessage && {\n 'aria-describedby': errorMessageId,\n 'aria-errormessage': errorMessageId,\n 'aria-invalid': 'true' as const\n })\n };\n\n return (\n <form\n {...aria}\n className={cx(classNames['sendbox'], variantClassName, props.className)}\n data-testid={testIds.sendBoxContainer}\n onSubmit={handleFormSubmit}\n >\n <SuggestedActions />\n <div\n className={cx(classNames['sendbox__sendbox'])}\n onClickCapture={handleSendBoxClick}\n onKeyDown={handleTranscriptNavigation}\n >\n <TextArea\n aria-label={isMessageLengthExceeded ? localize('TEXT_INPUT_LENGTH_EXCEEDED_ALT') : localize('TEXT_INPUT_ALT')}\n className={cx(classNames['sendbox__sendbox-text-area'], classNames['sendbox__text-area--in-grid'])}\n completion={props.completion}\n data-testid={testIds.sendBoxTextBox}\n hidden={shouldShowTelephoneKeypad}\n onInput={handleMessageChange}\n placeholder={props.placeholder ?? localize('TEXT_INPUT_PLACEHOLDER')}\n ref={inputRef}\n value={message}\n />\n <TelephoneKeypadSurrogate\n autoFocus={true}\n className={classNames['sendbox__telephone-keypad--in-grid']}\n isHorizontal={false}\n onButtonClick={handleTelephoneKeypadButtonClick}\n />\n {!isBlueprint && (\n <AttachmentBar\n className={cx(\n 'webchat__send-box__attachment-bar',\n classNames['sendbox__attachment-bar'],\n classNames['sendbox__attachment-bar--in-grid']\n )}\n />\n )}\n <div className={cx(classNames['sendbox__sendbox-controls'], classNames['sendbox__sendbox-controls--in-grid'])}>\n {shouldShowMessageLength && (\n <div\n className={cx(classNames['sendbox__text-counter'], {\n [classNames['sendbox__text-counter--error']]: isMessageLengthExceeded\n })}\n >\n {`${message.length}/${maxMessageLength}`}\n </div>\n )}\n <Toolbar>\n {!hideTelephoneKeypadButton && <TelephoneKeypadToolbarButton />}\n {!hideUploadButton && <AddAttachmentButton onFilesAdded={handleAddFiles} />}\n <ToolbarSeparator />\n <ToolbarButton\n aria-label={localize('TEXT_INPUT_SEND_BUTTON_ALT')}\n data-testid={testIds.sendBoxSendButton}\n disabled={isMessageLengthExceeded || shouldShowTelephoneKeypad}\n type=\"submit\"\n >\n <FluentIcon appearance=\"text\" icon=\"send\" />\n </ToolbarButton>\n </Toolbar>\n </div>\n <DropZone onFilesAdded={handleAddFiles} />\n <ErrorMessage error={errorMessage} id={errorMessageId} />\n </div>\n </form>\n );\n}\n\nconst PrimarySendBox = memo((props: Exclude<Props, 'primary'>) => <SendBox {...props} isPrimary={true} />);\n\nPrimarySendBox.displayName = 'PrimarySendBox';\n\nexport default memo(SendBox);\n\nexport { PrimarySendBox };\n","import { createIconComponent } from 'botframework-webchat-component/internal';\nimport { validateProps } from 'botframework-webchat-react-valibot';\nimport { useStyles } from 'botframework-webchat-styles/react';\nimport cx from 'classnames';\nimport React, { memo, useMemo, type CSSProperties } from 'react';\nimport { object, optional, pipe, readonly, string, type InferInput } from 'valibot';\n\nimport styles from './FluentIcon.module.css';\n\nconst baseFluentIconPropsSchema = pipe(\n object({\n className: optional(string()),\n mask: optional(string())\n }),\n readonly()\n);\n\nfunction BaseFluentIcon(props: InferInput<typeof baseFluentIconPropsSchema>) {\n const { className } = validateProps(baseFluentIconPropsSchema, props);\n\n const classNames = useStyles(styles);\n\n const maskStyle = useMemo(\n () =>\n props.mask ? ({ '--webchat__fluent-icon--mask': `url(${JSON.stringify(props.mask)})` } as CSSProperties) : {},\n [props.mask]\n );\n\n return <div className={cx(classNames['fluent-icon'], className)} style={maskStyle} />;\n}\n\nconst { component: FluentIcon, modifierPropsSchema } = createIconComponent(\n styles,\n ['appearance', 'icon'],\n BaseFluentIcon\n);\n\nFluentIcon.displayName = 'FluentIcon';\n\nconst fluentIconPropsSchema = pipe(\n object({\n ...baseFluentIconPropsSchema.entries,\n ...modifierPropsSchema.entries\n }),\n readonly()\n);\n\ntype FluentIconProps = InferInput<typeof fluentIconPropsSchema>;\n\nexport default memo(FluentIcon);\nexport { fluentIconPropsSchema, type FluentIconProps };\n","import { type ReactNode } from 'react';\nimport { custom, type CustomIssue, type CustomSchema, type ErrorMessage } from 'valibot';\n\nfunction reactNode(): CustomSchema<ReactNode, undefined>;\n\nfunction reactNode<\n const TMessage extends ErrorMessage<CustomIssue> | undefined = ErrorMessage<CustomIssue> | undefined\n>(message: TMessage): CustomSchema<ReactNode, TMessage>;\n\nfunction reactNode<\n const TMessage extends ErrorMessage<CustomIssue> | undefined = ErrorMessage<CustomIssue> | undefined\n>(message?: TMessage): CustomSchema<ReactNode, TMessage> {\n return custom<ReactNode, TMessage>(\n () => true,\n // TODO: Probably lacking some undefined checks, thus, we need to force cast.\n message as TMessage\n );\n}\n\nexport default reactNode;\n","import { parse, safeParse, type BaseIssue, type BaseSchema, type InferInput, type InferOutput } from 'valibot';\n\n/**\n * Specifies the props isolation mode.\n *\n * - `\"no isolation\"` will return the props as-is without cloning or modifications\n * - `\"strict\"` will isolate the props using `valibot.parse()`\n * - Depends on schema design, it could clone object instances, remove extraneous properties from objects, or fill in optional fields\n */\ntype IsolationMode = 'no isolation' | 'strict';\n\ndeclare const process: {\n env: {\n NODE_ENV?: string | undefined;\n };\n};\n\nexport default function validateProps<const TSchema extends BaseSchema<unknown, unknown, BaseIssue<unknown>>>(\n propsSchema: TSchema,\n props: unknown,\n isolationMode?: 'no isolation' | undefined\n): InferInput<TSchema>;\n\nexport default function validateProps<const TSchema extends BaseSchema<unknown, unknown, BaseIssue<unknown>>>(\n propsSchema: TSchema,\n props: unknown,\n isolationMode?: 'strict'\n): InferOutput<TSchema>;\n\n/**\n * Validates props against the specified valibot schema when running under development mode.\n *\n * This function will not perform any validations when running under production mode.\n *\n * @param propsSchema validation schema\n * @param props props to validate\n * @param mode specifies the isolation mode, default to `\"no isolation\"`\n * @returns\n */\nexport default function validateProps<const TSchema extends BaseSchema<unknown, unknown, BaseIssue<unknown>>>(\n propsSchema: TSchema,\n props: InferInput<TSchema>,\n isolationMode?: IsolationMode | undefined\n): InferInput<TSchema> | InferOutput<TSchema> {\n if (process.env.NODE_ENV === 'production') {\n return props as unknown as InferInput<TSchema>;\n }\n\n if (isolationMode !== 'strict' && safeParse(propsSchema, props).success) {\n return props as unknown as InferInput<TSchema>;\n }\n\n // Code path hit here when under strict isolation, or no isolation and failed earlier.\n\n try {\n return parse(propsSchema, props);\n } catch (error) {\n console.error(\n 'botframework-webchat: Validation error while parsing props.',\n error && typeof error === 'object' && 'issues' in error && error.issues\n );\n\n throw error;\n }\n}\n","import { useMemo } from 'react';\n\nfunction useStyles<T extends CSSModuleClasses>(styles: T): T {\n // @ts-expect-error: entries/fromEntries don't allow to specify keys type\n return useMemo(\n () =>\n Object.freeze(\n Object.fromEntries(\n Object.entries(styles).map(([baseClassName, resultClassName]) => [\n baseClassName,\n `${baseClassName} ${resultClassName}`\n ])\n )\n ),\n [styles]\n );\n}\n\nexport default useStyles;\n","import \"/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/icon/FluentIcon.module_built.css\";\nconst classes = {\"fluent-icon\":\"wdGN4aG_fluent-icon\",\"icon--send\":\"wdGN4aG_icon--send\",\"icon--info-16\":\"wdGN4aG_icon--info-16\",\"appearance--text\":\"wdGN4aG_appearance--text\",\"icon--attachment\":\"wdGN4aG_icon--attachment\",\"icon--keypad\":\"wdGN4aG_icon--keypad\",\"icon--add-document\":\"wdGN4aG_icon--add-document\"}\nexport default classes\n\nconst _fluent_icon0 = classes[\"fluent-icon\"]\nexport { _fluent_icon0 as \"fluent-icon\" }\n\nconst _icon__send0 = classes[\"icon--send\"]\nexport { _icon__send0 as \"icon--send\" }\n\nconst _icon__info_160 = classes[\"icon--info-16\"]\nexport { _icon__info_160 as \"icon--info-16\" }\n\nconst _appearance__text0 = classes[\"appearance--text\"]\nexport { _appearance__text0 as \"appearance--text\" }\n\nconst _icon__attachment0 = classes[\"icon--attachment\"]\nexport { _icon__attachment0 as \"icon--attachment\" }\n\nconst _icon__keypad0 = classes[\"icon--keypad\"]\nexport { _icon__keypad0 as \"icon--keypad\" }\n\nconst _icon__add_document0 = classes[\"icon--add-document\"]\nexport { _icon__add_document0 as \"icon--add-document\" }\n","function createStyle(content: string, origin?: string) {\n const style = document.createElement('style');\n\n style.append(document.createTextNode(content));\n\n if (origin) {\n style.dataset['webchatInjected'] = origin;\n }\n\n return style;\n}\n\nexport default function makeCreateStyles(...contents: string[]) {\n return function createStyles(origin?: string) {\n if (!globalThis.document) {\n throw new Error('Unable to create styles: document is not defined');\n }\n\n return contents.map(content => createStyle(content, origin));\n };\n}\n","import { makeCreateStyles } from 'botframework-webchat-styles';\n\nexport const fluentStyleContent = '@--FLUENT-STYLES-CONTENT--@';\n\nexport default makeCreateStyles(fluentStyleContent);\n","import { useMemo } from 'react';\nimport useVariants from '../private/useVariants';\nimport useStyles from './useStyles';\n\nexport default function useVariantClassName<T extends CSSModuleClasses>(styles: T): string {\n const classNames = useStyles(styles);\n const variants = useVariants();\n return useMemo(\n () =>\n variants\n .map(variant => classNames[`variant-${variant}`])\n .filter(value => value)\n .join(' '),\n [classNames, variants]\n );\n}\n","import { useContext, useMemo } from 'react';\nimport { VariantContext } from './VariantComposer';\n\nexport default function useVariants() {\n const { variant } = useContext(VariantContext);\n return useMemo(() => variant.split(' '), [variant]);\n}\n","import { createContext } from 'react';\n\nimport createComposer from './createComposer';\n\ntype VariantName = 'fluent' | 'copilot' | '';\n\nexport type VariantList = `${VariantName}`;\n\nexport type VariantContextType = {\n variant: VariantList;\n};\n\nexport const VariantContext = createContext<VariantContextType>(\n new Proxy(\n {},\n {\n get() {\n throw new Error('Unable to use VariantContext without VariantComposer');\n }\n }\n ) as unknown as VariantContextType\n);\n\nconst VariantComposer = createComposer<VariantContextType>(VariantContext, {\n defaults: { variant: '' },\n displayName: 'VariantComposer'\n});\n\nexport default VariantComposer;\n","import React, { type Context, memo, type ReactNode, useMemo } from 'react';\n\nexport default function createComposer<\n C,\n P extends { children?: ReactNode | undefined } = Partial<C> & { children?: ReactNode | undefined }\n>({ Provider }: Context<C>, { defaults, displayName }: Readonly<{ defaults: Readonly<C>; displayName: string }>) {\n const Composer = ({ children, ...props }: Readonly<P>) => {\n const value = useMemo(() => Object.freeze({ ...defaults, ...props }), [props]);\n\n return <Provider value={value}>{children}</Provider>;\n };\n\n Composer.displayName = displayName;\n\n return memo(Composer);\n}\n","const testIds = {\n preChatMessageActivityStarterPromptsCardAction: 'pre-chat message activity starter prompts card action',\n sendBoxContainer: 'send box container',\n sendBoxDropZone: 'send box drop zone',\n sendBoxSendButton: 'send box send button',\n sendBoxSuggestedAction: 'send box suggested action',\n sendBoxTextBox: 'send box text area',\n sendBoxTelephoneKeypadButton1: `send box telephone keypad button 1`,\n sendBoxTelephoneKeypadButton2: `send box telephone keypad button 2`,\n sendBoxTelephoneKeypadButton3: `send box telephone keypad button 3`,\n sendBoxTelephoneKeypadButton4: `send box telephone keypad button 4`,\n sendBoxTelephoneKeypadButton5: `send box telephone keypad button 5`,\n sendBoxTelephoneKeypadButton6: `send box telephone keypad button 6`,\n sendBoxTelephoneKeypadButton7: `send box telephone keypad button 7`,\n sendBoxTelephoneKeypadButton8: `send box telephone keypad button 8`,\n sendBoxTelephoneKeypadButton9: `send box telephone keypad button 9`,\n sendBoxTelephoneKeypadButton0: `send box telephone keypad button 0`,\n sendBoxTelephoneKeypadButtonStar: `send box telephone keypad button star`,\n sendBoxTelephoneKeypadButtonPound: `send box telephone keypad button pound`,\n sendBoxTelephoneKeypadToolbarButton: 'send box telephone keypad toolbar button',\n sendBoxUploadButton: 'send box upload button'\n};\n\nexport default testIds;\n","import { hooks } from 'botframework-webchat-component';\nimport cx from 'classnames';\nimport React, {\n memo,\n useCallback,\n useEffect,\n useRef,\n useState,\n type DragEvent as ReactDragEvent,\n type DragEventHandler\n} from 'react';\nimport { useRefFrom } from 'use-ref-from';\n\nimport { FluentIcon } from '../icon';\nimport testIds from '../../testIds';\nimport styles from './DropZone.module.css';\nimport { useStyles } from '../../styles';\n\nconst { useLocalizer } = hooks;\n\nconst handleDragOver = (event: ReactDragEvent<unknown> | DragEvent) => {\n // Prevent default dragover behavior to enable drop event triggering.\n // Browsers require this to fire subsequent drop events - without it,\n // they would handle the drop directly (e.g., open files in new tabs).\n // This is needed regardless of whether we prevent default drop behavior,\n // as it ensures our dropzone receives the drop event first. If we allow\n // default drop handling (by not calling preventDefault there), the browser\n // will still process the drop after our event handlers complete.\n event.preventDefault();\n};\n\n// Notes: For files dragging from outside of browser, it only tell us if it is a \"File\" instead of \"text/plain\" or \"text/uri-list\".\n// For images dragging inside of browser, it only tell us that it is \"text/plain\", \"text/uri-list\" and \"text/html\". But not \"image/*\".\n// So we cannot allowlist what is droppable.\n// We are using case-insensitive of type \"files\" so we can drag in WebDriver.\nconst isFilesTransferEvent = (event: DragEvent) =>\n !!event.dataTransfer?.types?.some(type => type.toLowerCase() === 'files');\n\nfunction isDescendantOf(target: Node, ancestor: Node): boolean {\n let current = target.parentNode;\n\n while (current) {\n if (current === ancestor) {\n return true;\n }\n\n current = current.parentNode;\n }\n\n return false;\n}\n\nconst DropZone = (props: { readonly onFilesAdded: (files: File[]) => void }) => {\n const [dropZoneState, setDropZoneState] = useState<false | 'visible' | 'droppable'>(false);\n const classNames = useStyles(styles);\n const dropZoneRef = useRef<HTMLDivElement>(null);\n const localize = useLocalizer();\n const onFilesAddedRef = useRefFrom(props.onFilesAdded);\n\n useEffect(() => {\n let entranceCounter = 0;\n\n const handleDragEnter = (event: DragEvent) => {\n document.addEventListener('dragover', handleDragOver);\n\n entranceCounter++;\n\n if (isFilesTransferEvent(event)) {\n setDropZoneState(\n dropZoneRef.current &&\n (event.target === dropZoneRef.current ||\n (event.target instanceof HTMLElement && isDescendantOf(event.target, dropZoneRef.current)))\n ? 'droppable'\n : 'visible'\n );\n }\n };\n\n const handleDragLeave = () => --entranceCounter <= 0 && setDropZoneState(false);\n\n const handleDragEnd = () => {\n document.removeEventListener('dragover', handleDragOver);\n\n entranceCounter = 0;\n\n setDropZoneState(false);\n };\n\n const handleDocumentDrop = (event: DragEvent) => {\n if (!dropZoneRef.current?.contains(event.target as Node)) {\n handleDragEnd();\n }\n };\n\n document.addEventListener('dragend', handleDragEnd);\n document.addEventListener('dragenter', handleDragEnter);\n document.addEventListener('dragleave', handleDragLeave);\n document.addEventListener('drop', handleDocumentDrop);\n\n return () => {\n document.removeEventListener('dragend', handleDragEnd);\n document.removeEventListener('dragenter', handleDragEnter);\n document.removeEventListener('dragleave', handleDragLeave);\n document.removeEventListener('dragover', handleDragOver);\n document.removeEventListener('drop', handleDocumentDrop);\n };\n }, [setDropZoneState]);\n\n const handleDrop = useCallback<DragEventHandler<HTMLDivElement>>(\n event => {\n event.preventDefault();\n\n setDropZoneState(false);\n\n if (!isFilesTransferEvent(event.nativeEvent)) {\n return;\n }\n\n onFilesAddedRef.current([...event.dataTransfer.files]);\n },\n [onFilesAddedRef, setDropZoneState]\n );\n\n return dropZoneState ? (\n <div\n className={cx(classNames['sendbox__attachment-drop-zone'], {\n [classNames['sendbox__attachment-drop-zone--droppable']]: dropZoneState === 'droppable'\n })}\n data-testid={testIds.sendBoxDropZone}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n ref={dropZoneRef}\n >\n <FluentIcon appearance=\"text\" className={classNames['sendbox__attachment-drop-zone-icon']} icon=\"add-document\" />\n {localize('TEXT_INPUT_DROP_ZONE')}\n </div>\n ) : null;\n};\n\nDropZone.displayName = 'DropZone';\n\nexport default memo(DropZone);\n","import \"/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/dropZone/DropZone.module_built.css\";\nconst classes = {\"sendbox__attachment-drop-zone--droppable\":\"wbibrda_sendbox__attachment-drop-zone--droppable\",\"sendbox__attachment-drop-zone\":\"wbibrda_sendbox__attachment-drop-zone\",\"sendbox__attachment-drop-zone-icon\":\"wbibrda_sendbox__attachment-drop-zone-icon\"}\nexport default classes\n\nconst _sendbox__attachment_drop_zone__droppable0 = classes[\"sendbox__attachment-drop-zone--droppable\"]\nexport { _sendbox__attachment_drop_zone__droppable0 as \"sendbox__attachment-drop-zone--droppable\" }\n\nconst _sendbox__attachment_drop_zone0 = classes[\"sendbox__attachment-drop-zone\"]\nexport { _sendbox__attachment_drop_zone0 as \"sendbox__attachment-drop-zone\" }\n\nconst _sendbox__attachment_drop_zone_icon0 = classes[\"sendbox__attachment-drop-zone-icon\"]\nexport { _sendbox__attachment_drop_zone_icon0 as \"sendbox__attachment-drop-zone-icon\" }\n","import { hooks } from 'botframework-webchat-component';\nimport cx from 'classnames';\nimport React, { memo, useCallback, type ReactNode } from 'react';\nimport { useStyles } from '../../styles';\nimport { isPreChatMessageActivity } from '../preChatActivity';\nimport computeSuggestedActionText from './private/computeSuggestedActionText';\nimport RovingFocusProvider from './private/rovingFocus';\nimport SuggestedAction from './SuggestedAction';\nimport styles from './SuggestedActions.module.css';\n\nconst { useFocus, useLocalizer, useStyleOptions, useStyleSet, useSuggestedActionsHooks, useUIState } = hooks;\n\nfunction SuggestedActionStackedOrFlowContainer(\n props: Readonly<{\n 'aria-label'?: string | undefined;\n children?: ReactNode | undefined;\n className?: string | undefined;\n }>\n) {\n const [{ suggestedActionLayout }] = useStyleOptions();\n const [{ suggestedActions: suggestedActionsStyleSet }] = useStyleSet();\n const [uiState] = useUIState();\n const classNames = useStyles(styles);\n\n return (\n <div\n aria-label={props['aria-label']}\n aria-orientation=\"vertical\"\n className={cx(\n classNames['suggested-actions'],\n suggestedActionsStyleSet + '',\n {\n [classNames['suggested-actions--flow']]: suggestedActionLayout === 'flow',\n [classNames['suggested-actions--stacked']]: suggestedActionLayout !== 'flow'\n },\n props.className\n )}\n role=\"toolbar\"\n >\n {uiState !== 'blueprint' && props.children}\n </div>\n );\n}\n\nfunction SuggestedActions() {\n const classNames = useStyles(styles);\n const localize = useLocalizer();\n const [suggestedActions, _, { activity }] = useSuggestedActionsHooks().useSuggestedActions();\n const focus = useFocus();\n\n const handleEscapeKey = useCallback(() => {\n focus('sendBox');\n }, [focus]);\n\n const children = isPreChatMessageActivity(activity)\n ? [] // Do not show suggested actions for pre-chat message, suggested actions has already shown inlined.\n : suggestedActions.map((cardAction, index) => {\n const { displayText, image, imageAltText, text, type, value } = cardAction as {\n displayText?: string;\n image?: string;\n imageAltText?: string;\n text?: string;\n type:\n | 'call'\n | 'downloadFile'\n | 'imBack'\n | 'messageBack'\n | 'openUrl'\n | 'playAudio'\n | 'playVideo'\n | 'postBack'\n | 'showImage'\n | 'signin';\n value?: { [key: string]: any } | string;\n };\n\n if (!suggestedActions?.length) {\n return null;\n }\n\n return (\n <SuggestedAction\n buttonText={computeSuggestedActionText(cardAction)}\n displayText={displayText}\n image={image}\n // Image alt text should use `imageAltText` field and fallback to `text` field.\n // https://github.com/microsoft/botframework-sdk/blob/main/specs/botframework-activity/botframework-activity.md#image-alt-text\n imageAlt={image && (imageAltText || text)}\n itemIndex={index}\n // eslint-disable-next-line react/no-array-index-key\n key={index}\n text={text}\n type={type}\n value={value}\n />\n );\n });\n\n return (\n <RovingFocusProvider onEscapeKey={handleEscapeKey}>\n <SuggestedActionStackedOrFlowContainer\n aria-label={localize('SUGGESTED_ACTIONS_LABEL_ALT')}\n className={classNames['suggested-actions']}\n >\n {children}\n </SuggestedActionStackedOrFlowContainer>\n </RovingFocusProvider>\n );\n}\n\nexport default memo(SuggestedActions);\n","import { getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat-core';\n\nexport default function isPreChatMessageActivity(\n activity: undefined | WebChatActivity\n): activity is WebChatActivity & { type: 'message' } {\n return !!(activity && getOrgSchemaMessage(activity?.entities || [])?.keywords?.includes('PreChatMessage'));\n}\n","import { hooks } from 'botframework-webchat-component';\nimport { type WebChatActivity } from 'botframework-webchat-core';\nimport cx from 'classnames';\nimport React, { memo, useMemo } from 'react';\nimport { useStyles } from '../../styles/index.js';\nimport styles from './PreChatMessageActivity.module.css';\nimport StarterPromptsToolbar from './StarterPromptsToolbar.js';\nimport { useActivityAuthor } from '../activity/index.js';\n\ntype Props = Readonly<{ activity: WebChatActivity & { type: 'message' } }>;\n\nconst { useLocalizer, useRenderMarkdownAsHTML, useUIState } = hooks;\n\nconst PreChatMessageActivity = ({ activity }: Props) => {\n const [uiState] = useUIState();\n const classNames = useStyles(styles);\n const renderMarkdownAsHTML = useRenderMarkdownAsHTML();\n const localize = useLocalizer();\n\n const author = useActivityAuthor(activity);\n\n const html = useMemo(\n () => (renderMarkdownAsHTML ? { __html: renderMarkdownAsHTML(author?.description || '') } : { __html: '' }),\n [author?.description, renderMarkdownAsHTML]\n );\n\n return (\n <div className={classNames['pre-chat-message-activity']}>\n {author && (\n <div\n className={cx(\n classNames['pre-chat-message-activity__body'],\n uiState === 'blueprint' && classNames['pre-chat-message-activity__body--blueprint']\n )}\n >\n {author.image && (\n <img\n alt={localize('AVATAR_ALT', author.name)}\n className={classNames['pre-chat-message-activity__body-avatar']}\n src={author.image}\n />\n )}\n {author.name && <h2 className={classNames['pre-chat-message-activity__body-title']}>{author.name}</h2>}\n {author.description && (\n // eslint-disable-next-line react/no-danger\n <div className={classNames['pre-chat-message-activity__body-subtitle']} dangerouslySetInnerHTML={html} />\n )}\n </div>\n )}\n <StarterPromptsToolbar\n cardActions={activity.suggestedActions?.actions || []}\n className={classNames['pre-chat-message-activity__toolbar']}\n />\n </div>\n );\n};\n\nPreChatMessageActivity.displayName = 'PreChatMessageActivity';\n\nexport default memo(PreChatMessageActivity);\n","import \"/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/preChatActivity/PreChatMessageActivity.module_built.css\";\nconst classes = {\"pre-chat-message-activity__body-title\":\"wdPvBTa_pre-chat-message-activity__body-title\",\"pre-chat-message-activity__body-subtitle\":\"wdPvBTa_pre-chat-message-activity__body-subtitle\",\"pre-chat-message-activity__toolbar\":\"wdPvBTa_pre-chat-message-activity__toolbar\",\"pre-chat-message-activity__body-avatar\":\"wdPvBTa_pre-chat-message-activity__body-avatar\",\"pre-chat-message-activity\":\"wdPvBTa_pre-chat-message-activity\",\"pre-chat-message-activity__body\":\"wdPvBTa_pre-chat-message-activity__body\",\"pre-chat-message-activity__body--blueprint\":\"wdPvBTa_pre-chat-message-activity__body--blueprint\"}\nexport default classes\n\nconst _pre_chat_message_activity__body_title0 = classes[\"pre-chat-message-activity__body-title\"]\nexport { _pre_chat_message_activity__body_title0 as \"pre-chat-message-activity__body-title\" }\n\nconst _pre_chat_message_activity__body_subtitle0 = classes[\"pre-chat-message-activity__body-subtitle\"]\nexport { _pre_chat_message_activity__body_subtitle0 as \"pre-chat-message-activity__body-subtitle\" }\n\nconst _pre_chat_message_activity__toolbar0 = classes[\"pre-chat-message-activity__toolbar\"]\nexport { _pre_chat_message_activity__toolbar0 as \"pre-chat-message-activity__toolbar\" }\n\nconst _pre_chat_message_activity__body_avatar0 = classes[\"pre-chat-message-activity__body-avatar\"]\nexport { _pre_chat_message_activity__body_avatar0 as \"pre-chat-message-activity__body-avatar\" }\n\nconst _pre_chat_message_activity0 = classes[\"pre-chat-message-activity\"]\nexport { _pre_chat_message_activity0 as \"pre-chat-message-activity\" }\n\nconst _pre_chat_message_activity__body0 = classes[\"pre-chat-message-activity__body\"]\nexport { _pre_chat_message_activity__body0 as \"pre-chat-message-activity__body\" }\n\nconst _pre_chat_message_activity__body__blueprint0 = classes[\"pre-chat-message-activity__body--blueprint\"]\nexport { _pre_chat_message_activity__body__blueprint0 as \"pre-chat-message-activity__body--blueprint\" }\n","import { hooks } from 'botframework-webchat-api';\nimport { type DirectLineCardAction } from 'botframework-webchat-core';\nimport cx from 'classnames';\nimport React, { Fragment, memo } from 'react';\nimport { useStyles } from '../../styles/index.js';\nimport StarterPromptsCardAction from './StarterPromptsCardAction.js';\nimport styles from './StarterPromptsToolbar.module.css';\n\nconst { useUIState } = hooks;\n\ntype Props = Readonly<{\n cardActions: readonly DirectLineCardAction[];\n className?: string | undefined;\n}>;\n\nconst StarterPromptsToolbar = ({ cardActions, className }: Props) => {\n const classNames = useStyles(styles);\n const [uiState] = useUIState();\n\n return (\n // TODO: Accessibility-wise, this should be role=\"toolbar\" with keyboard navigation.\n <div className={cx(className, classNames['pre-chat-message-activity__card-action-toolbar'])}>\n <div className={classNames['pre-chat-message-activity__card-action-toolbar-grid']}>\n {uiState === 'blueprint' ? (\n <Fragment>\n <StarterPromptsCardAction />\n <StarterPromptsCardAction />\n <StarterPromptsCardAction />\n </Fragment>\n ) : (\n cardActions\n .filter<DirectLineCardAction & { type: 'messageBack' }>(\n (card: DirectLineCardAction): card is DirectLineCardAction & { type: 'messageBack' } =>\n card.type === 'messageBack'\n )\n // There is no other usable keys in card actions.\n // eslint-disable-next-line react/no-array-index-key\n .map((cardAction, index) => <StarterPromptsCardAction key={index} messageBackAction={cardAction} />)\n )}\n </div>\n </div>\n );\n};\n\nStarterPromptsToolbar.displayName = 'StarterPromptsToolbar';\n\nexport default memo(StarterPromptsToolbar);\n","import { hooks } from 'botframework-webchat-component';\nimport { type DirectLineCardAction } from 'botframework-webchat-core';\nimport cx from 'classnames';\nimport React, { memo, useCallback, useMemo } from 'react';\nimport { useRefFrom } from 'use-ref-from';\n\nimport { useStyles } from '../../styles/index.js';\nimport testIds from '../../testIds.js';\nimport { FluentIcon } from '../icon';\n\nimport styles from './StarterPromptsCardAction.module.css';\n\nconst { useFocus, useRenderMarkdownAsHTML, useSendBoxValue, useUIState } = hooks;\n\ntype Props = Readonly<{\n className?: string | undefined;\n messageBackAction?: (DirectLineCardAction & { type: 'messageBack' }) | undefined;\n}>;\n\nconst StarterPromptsCardAction = ({ className, messageBackAction }: Props) => {\n const [_, setSendBoxValue] = useSendBoxValue();\n const [uiState] = useUIState();\n const classNames = useStyles(styles);\n const focus = useFocus();\n const inputTextRef = useRefFrom(messageBackAction?.displayText || messageBackAction?.text || '');\n const renderMarkdownAsHTML = useRenderMarkdownAsHTML('message activity');\n const subtitleHTML = useMemo<{ __html: string } | undefined>(\n () => (renderMarkdownAsHTML ? { __html: renderMarkdownAsHTML(messageBackAction?.text || '') } : undefined),\n [messageBackAction?.text, renderMarkdownAsHTML]\n );\n const disabled = uiState === 'disabled';\n const title = messageBackAction && 'title' in messageBackAction && messageBackAction.title;\n\n // Every starter prompt card action must have \"title\" field.\n const shouldShowBlueprint = uiState === 'blueprint' || !title;\n\n const handleClick = useCallback(() => {\n setSendBoxValue(inputTextRef.current);\n\n // Focus on the send box after the value is \"pasted.\"\n focus('sendBox');\n }, [focus, inputTextRef, setSendBoxValue]);\n\n return shouldShowBlueprint ? (\n <div\n className={cx(className, classNames['pre-chat-message-activity__card-action-box'])}\n data-testid={testIds.preChatMessageActivityStarterPromptsCardAction}\n />\n ) : (\n <button\n aria-disabled={disabled ? true : undefined}\n className={cx(className, classNames['pre-chat-message-activity__card-action-box'])}\n data-testid={testIds.preChatMessageActivityStarterPromptsCardAction}\n onClick={disabled ? undefined : handleClick}\n // eslint-disable-next-line no-magic-numbers\n tabIndex={disabled ? -1 : undefined}\n type=\"button\"\n >\n <div className={classNames['pre-chat-message-activity__card-action-title']}>{title}</div>\n {'image' in messageBackAction && messageBackAction.image && (\n <FluentIcon\n appearance=\"text\"\n className={classNames['pre-chat-message-activity__card-action-image']}\n mask={messageBackAction.image}\n />\n )}\n <div\n className={classNames['pre-chat-message-activity__card-action-subtitle']}\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={subtitleHTML}\n />\n </button>\n );\n};\n\nStarterPromptsCardAction.displayName = 'StarterPromptsCardAction';\n\nexport default memo(StarterPromptsCardAction);\n","import \"/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/preChatActivity/StarterPromptsCardAction.module_built.css\";\nconst classes = {\"pre-chat-message-activity__card-action-image\":\"woY4Pxq_pre-chat-message-activity__card-action-image\",\"pre-chat-message-activity__card-action-subtitle\":\"woY4Pxq_pre-chat-message-activity__card-action-subtitle\",\"pre-chat-message-activity__card-action-box\":\"woY4Pxq_pre-chat-message-activity__card-action-box\",\"pre-chat-message-activity__card-action-title\":\"woY4Pxq_pre-chat-message-activity__card-action-title\"}\nexport default classes\n\nconst _pre_chat_message_activity__card_action_image0 = classes[\"pre-chat-message-activity__card-action-image\"]\nexport { _pre_chat_message_activity__card_action_image0 as \"pre-chat-message-activity__card-action-image\" }\n\nconst _pre_chat_message_activity__card_action_subtitle0 = classes[\"pre-chat-message-activity__card-action-subtitle\"]\nexport { _pre_chat_message_activity__card_action_subtitle0 as \"pre-chat-message-activity__card-action-subtitle\" }\n\nconst _pre_chat_message_activity__card_action_box0 = classes[\"pre-chat-message-activity__card-action-box\"]\nexport { _pre_chat_message_activity__card_action_box0 as \"pre-chat-message-activity__card-action-box\" }\n\nconst _pre_chat_message_activity__card_action_title0 = classes[\"pre-chat-message-activity__card-action-title\"]\nexport { _pre_chat_message_activity__card_action_title0 as \"pre-chat-message-activity__card-action-title\" }\n","import \"/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/preChatActivity/StarterPromptsToolbar.module_built.css\";\nconst classes = {\"pre-chat-message-activity__card-action-toolbar-grid\":\"wvd8n9G_pre-chat-message-activity__card-action-toolbar-grid\",\"pre-chat-message-activity__card-action-toolbar\":\"wvd8n9G_pre-chat-message-activity__card-action-toolbar\"}\nexport default classes\n\nconst _pre_chat_message_activity__card_action_toolbar_grid0 = classes[\"pre-chat-message-activity__card-action-toolbar-grid\"]\nexport { _pre_chat_message_activity__card_action_toolbar_grid0 as \"pre-chat-message-activity__card-action-toolbar-grid\" }\n\nconst _pre_chat_message_activity__card_action_toolbar0 = classes[\"pre-chat-message-activity__card-action-toolbar\"]\nexport { _pre_chat_message_activity__card_action_toolbar0 as \"pre-chat-message-activity__card-action-toolbar\" }\n","import { WebChatActivity } from 'botframework-webchat-component';\nimport cx from 'classnames';\nimport React, { ReactNode, memo } from 'react';\nimport useVariants from '../../private/useVariants';\nimport { useStyles, useVariantClassName } from '../../styles';\nimport styles from './ActivityDecorator.module.css';\nimport CopilotMessageHeader from './CopilotMessageHeader';\n\nfunction ActivityDecorator({ activity, children }: Readonly<{ activity: WebChatActivity; children: ReactNode }>) {\n const classNames = useStyles(styles);\n const variants = useVariants();\n const variantClassName = useVariantClassName(styles);\n\n const shouldRenderHeader = variants.includes('copilot') && activity?.from?.role === 'bot' && !!children;\n\n return (\n <div className={cx(classNames['activity-decorator'], variantClassName)}>\n {shouldRenderHeader && <CopilotMessageHeader activity={activity} />}\n {children}\n </div>\n );\n}\n\nActivityDecorator.displayName = 'ActivityDecorator';\n\nexport default memo(ActivityDecorator);\n","import \"/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/activity/ActivityDecorator.module_built.css\";\nconst classes = {\"variant-fluent\":\"wLpvzAq_variant-fluent\",\"activity-decorator\":\"wLpvzAq_activity-decorator\",\"variant-copilot\":\"wLpvzAq_variant-copilot\"}\nexport default classes\n\nconst _variant_fluent0 = classes[\"variant-fluent\"]\nexport { _variant_fluent0 as \"variant-fluent\" }\n\nconst _activity_decorator0 = classes[\"activity-decorator\"]\nexport { _activity_decorator0 as \"activity-decorator\" }\n\nconst _variant_copilot0 = classes[\"variant-copilot\"]\nexport { _variant_copilot0 as \"variant-copilot\" }\n","import React, { memo, useMemo, type CSSProperties } from 'react';\nimport { WebChatActivity, hooks } from 'botframework-webchat-component';\n\nimport useActivityStyleOptions from './private/useActivityStyleOptions';\nimport isAIGeneratedActivity from './private/isAIGeneratedActivity';\nimport useActivityAuthor from './private/useActivityAuthor';\nimport { useStyles } from '../../styles';\nimport styles from './CopilotMessageHeader.module.css';\n\nconst { useLocalizer } = hooks;\n\nfunction CopilotMessageHeader({ activity }: Readonly<{ activity?: WebChatActivity | undefined }>) {\n const [{ botAvatarImage, botAvatarBackgroundColor }] = useActivityStyleOptions(activity);\n const classNames = useStyles(styles);\n const localize = useLocalizer();\n const isAIGenerated = isAIGeneratedActivity(activity);\n\n const avatarStyle = useMemo(\n () => ({ '--background-color': botAvatarBackgroundColor }) as CSSProperties,\n [botAvatarBackgroundColor]\n );\n\n const author = useActivityAuthor(activity);\n const avatarImage = author?.image || botAvatarImage;\n const botTitle = author?.name || activity?.from?.name;\n\n return (\n <div className={classNames['copilot-message-header']}>\n {avatarImage && (\n <img\n alt={localize('AVATAR_ALT', botTitle)}\n className={classNames['copilot-message-header__avatar']}\n src={avatarImage}\n style={avatarStyle}\n />\n )}\n <span className={classNames['copilot-message-header__title']} title={botTitle}>\n {botTitle}\n </span>\n {isAIGenerated && (\n <span className={classNames['copilot-message-header__ai-generated-content']}>\n {localize('ACTIVITY_CONTENT_CAUTION')}\n </span>\n )}\n </div>\n );\n}\n\nexport default memo(CopilotMessageHeader);\n","import { useMemo } from 'react';\nimport { hooks, type WebChatActivity } from 'botframework-webchat-component';\nimport { type StrictStyleOptions } from 'botframework-webchat-api';\n\nconst { useStyleOptions } = hooks;\n\nexport default function useActivityStyleOptions(activity?: WebChatActivity | undefined) {\n const [styleOptions] = useStyleOptions();\n return useMemo<readonly [Readonly<StrictStyleOptions>]>(\n () =>\n Object.freeze([\n {\n ...styleOptions,\n ...activity?.channelData?.webChat?.styleOptions\n }\n ]),\n [activity?.channelData?.webChat?.styleOptions, styleOptions]\n );\n}\n","import { getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat-core';\n\nexport default function isAIGeneratedActivity(activity: undefined | WebChatActivity) {\n return !!(activity && getOrgSchemaMessage(activity?.entities || [])?.keywords?.includes('AIGeneratedContent'));\n}\n","import { useMemo } from 'react';\nimport { getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat-core';\n\nexport default function useActivityAuthor(activity?: WebChatActivity | undefined) {\n return useMemo(() => {\n const entity = getOrgSchemaMessage(activity?.entities || []);\n return typeof entity?.author === 'string'\n ? {\n '@type': 'Person',\n description: undefined,\n image: undefined,\n name: entity?.author\n }\n : entity?.author;\n }, [activity]);\n}\n","import \"/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/activity/CopilotMessageHeader.module_built.css\";\nconst classes = {\"copilot-message-header__ai-generated-content\":\"wyJATiG_copilot-message-header__ai-generated-content\",\"copilot-message-header__title\":\"wyJATiG_copilot-message-header__title\",\"copilot-message-header__avatar\":\"wyJATiG_copilot-message-header__avatar\",\"copilot-message-header\":\"wyJATiG_copilot-message-header\"}\nexport default classes\n\nconst _copilot_message_header__ai_generated_content0 = classes[\"copilot-message-header__ai-generated-content\"]\nexport { _copilot_message_header__ai_generated_content0 as \"copilot-message-header__ai-generated-content\" }\n\nconst _copilot_message_header__title0 = classes[\"copilot-message-header__title\"]\nexport { _copilot_message_header__title0 as \"copilot-message-header__title\" }\n\nconst _copilot_message_header__avatar0 = classes[\"copilot-message-header__avatar\"]\nexport { _copilot_message_header__avatar0 as \"copilot-message-header__avatar\" }\n\nconst _copilot_message_header0 = classes[\"copilot-message-header\"]\nexport { _copilot_message_header0 as \"copilot-message-header\" }\n","import type { DirectLineCardAction } from 'botframework-webchat-core';\n\n// Please refer to this article to find out how to compute the \"button text\" for suggested action.\n// https://github.com/Microsoft/botframework-sdk/blob/main/specs/botframework-activity/botframework-activity.md#card-action\nexport default function computeSuggestedActionText(cardAction: DirectLineCardAction) {\n // \"CardAction\" must contains at least image or title.\n const { title } = cardAction as { title?: string };\n const { type, value } = cardAction;\n\n if (type === 'messageBack') {\n return title || cardAction.displayText;\n } else if (title) {\n return title;\n } else if (typeof value === 'string') {\n return value;\n }\n\n return JSON.stringify(value);\n}\n\n// TODO: [P1] This is copied from botframework-webchat-component. Think about what we should do to eliminate duplications.\n","/* eslint-disable no-magic-numbers */\nimport React, {\n type MutableRefObject,\n createContext,\n memo,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef\n} from 'react';\n\ntype ItemRef = MutableRefObject<HTMLElement | undefined>;\n\ntype RovingFocusContextType = {\n itemEffector: <T extends HTMLElement>(ref: MutableRefObject<T | null>, index: number) => () => void;\n};\n\nconst RovingFocusContext = createContext<RovingFocusContextType>({\n itemEffector: () => {\n // This will be implemented when using in <RovingFocusProvider>.\n throw new Error('botframework-webchat-fluent-theme rovingFocus: no provider for RovingFocusContext.');\n }\n});\n\nfunction RovingFocusProvider(\n props: Readonly<{\n children?: React.ReactNode | undefined;\n direction?: 'vertical' | 'horizontal' | undefined;\n onEscapeKey?: () => void;\n }>\n) {\n const activeItemIndexRef = useRef(0);\n const itemRefsRef = useRef<ItemRef[]>([]);\n\n const updateItemTabIndex = useCallback(\n ({ current }: ItemRef, index: number) =>\n current && (current.tabIndex = activeItemIndexRef.current === index ? 0 : -1),\n [activeItemIndexRef]\n );\n\n const setActiveItemIndex = useCallback(\n (valueOrFunction: number | ((value: number) => number)) => {\n // All calls to this function is expected to be under event handlers (post-rendering).\n let nextActiveItemIndex;\n\n if (typeof valueOrFunction === 'number') {\n nextActiveItemIndex = valueOrFunction;\n } else {\n nextActiveItemIndex = valueOrFunction(activeItemIndexRef.current);\n }\n\n // If the index points to no item, fallback to the first item.\n // This makes sure at least one of the item in the container is selected.\n if (nextActiveItemIndex && !itemRefsRef.current.at(nextActiveItemIndex)?.current) {\n nextActiveItemIndex = 0;\n }\n\n if (activeItemIndexRef.current !== nextActiveItemIndex) {\n activeItemIndexRef.current = nextActiveItemIndex;\n\n itemRefsRef.current.forEach((ref, index) => updateItemTabIndex(ref, index));\n itemRefsRef.current.at(nextActiveItemIndex)?.current?.focus();\n }\n },\n [updateItemTabIndex, itemRefsRef, activeItemIndexRef]\n );\n\n const handleFocus = useCallback(\n event => {\n const { target } = event;\n\n const index = itemRefsRef.current.findIndex(({ current }) => current === target);\n\n // prevent focusing the last element, if we didn't found the element focused\n if (index !== -1) {\n setActiveItemIndex(index);\n }\n },\n [itemRefsRef, setActiveItemIndex]\n );\n\n const handleSetNextActive = useCallback(\n (key: string) =>\n (currentIndex: number): number => {\n const isUnidirectional = !props.direction;\n const isVerticalMove = /up|down/iu.test(key) && props.direction === 'vertical';\n const isHorizontalMove = /left|right/iu.test(key) && props.direction === 'horizontal';\n const isForwardMove = /right|down/iu.test(key);\n const direction = isUnidirectional || isVerticalMove || isHorizontalMove ? (isForwardMove ? 1 : -1) : 0;\n // The `itemRefsRef` array could be a sparse array.\n // Thus, the next item may not be immediately next to the current one.\n const itemIndices = itemRefsRef.current.map((_, index) => index);\n const nextIndex = itemIndices.indexOf(currentIndex) + direction;\n\n return itemIndices.at(nextIndex) ?? 0;\n },\n [props.direction]\n );\n\n const handleKeyDown = useCallback<(event: KeyboardEvent) => void>(\n event => {\n const { key } = event;\n\n switch (key) {\n case 'Up':\n case 'ArrowUp':\n case 'Left':\n case 'ArrowLeft':\n case 'Down':\n case 'ArrowDown':\n case 'Right':\n case 'ArrowRight':\n setActiveItemIndex(handleSetNextActive(key));\n break;\n\n case 'Home':\n setActiveItemIndex(0);\n break;\n\n case 'End':\n setActiveItemIndex(-1);\n break;\n\n case 'Escape':\n props.onEscapeKey?.();\n break;\n\n default:\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n },\n [setActiveItemIndex, handleSetNextActive, props]\n );\n\n const itemEffector = useCallback(\n (ref, index) => {\n const { current } = ref;\n\n itemRefsRef.current[Number(index)] = ref;\n\n current.addEventListener('focus', handleFocus);\n current.addEventListener('keydown', handleKeyDown);\n\n updateItemTabIndex(ref, index);\n\n return () => {\n current.removeEventListener('focus', handleFocus);\n current.removeEventListener('keydown', handleKeyDown);\n\n delete itemRefsRef.current[Number(index)];\n };\n },\n [handleFocus, handleKeyDown, updateItemTabIndex, itemRefsRef]\n );\n\n const value = useMemo<RovingFocusContextType>(\n () => ({\n itemEffector\n }),\n [itemEffector]\n );\n\n return <RovingFocusContext.Provider value={value}>{props.children}</RovingFocusContext.Provider>;\n}\n\nexport function useRovingFocusItemRef<T extends HTMLElement>(itemIndex: number): MutableRefObject<T | null> {\n const ref = useRef<T>(null);\n\n const { itemEffector } = useContext(RovingFocusContext);\n\n useEffect(() => itemEffector(ref, itemIndex));\n\n return ref;\n}\n\nexport default memo(RovingFocusProvider);\n","import { hooks } from 'botframework-webchat-component';\nimport { type DirectLineCardAction } from 'botframework-webchat-core';\nimport cx from 'classnames';\nimport React, { MouseEventHandler, memo, useCallback } from 'react';\n\nimport { useStyles } from '../../styles';\nimport testIds from '../../testIds';\nimport AccessibleButton from './AccessibleButton';\nimport { useRovingFocusItemRef } from './private/rovingFocus';\nimport styles from './SuggestedAction.module.css';\n\nconst { useFocus, usePerformCardAction, useScrollToEnd, useStyleSet, useSuggestedActionsHooks, useUIState } = hooks;\n\ntype SuggestedActionProps = Readonly<{\n buttonText: string | undefined;\n className?: string | undefined;\n displayText?: string | undefined;\n image?: string | undefined;\n imageAlt?: string | undefined;\n itemIndex: number;\n text?: string | undefined;\n type?:\n | 'call'\n | 'downloadFile'\n | 'imBack'\n | 'messageBack'\n | 'openUrl'\n | 'playAudio'\n | 'playVideo'\n | 'postBack'\n | 'showImage'\n | 'signin';\n value?: any;\n}>;\n\nfunction SuggestedAction({\n buttonText,\n className,\n displayText,\n image,\n imageAlt,\n itemIndex,\n text,\n type,\n value\n}: SuggestedActionProps) {\n const [_, setSuggestedActions] = useSuggestedActionsHooks().useSuggestedActions();\n const [{ suggestedAction: suggestedActionStyleSet }] = useStyleSet();\n const [uiState] = useUIState();\n const focus = useFocus();\n const focusRef = useRovingFocusItemRef<HTMLButtonElement>(itemIndex);\n const performCardAction = usePerformCardAction();\n const classNames = useStyles(styles);\n const scrollToEnd = useScrollToEnd();\n\n const handleClick = useCallback<MouseEventHandler<HTMLButtonElement>>(\n ({ target }) => {\n (async function () {\n // We need to focus to the send box before we are performing this card action.\n // The will make sure the focus is always on Web Chat.\n // Otherwise, the focus may momentarily send to `document.body` and screen reader will be confused.\n await focus('sendBoxWithoutKeyboard');\n\n // TODO: [P3] #XXX We should not destruct DirectLineCardAction into React props and pass them in. It makes typings difficult.\n // Instead, we should pass a \"cardAction\" props.\n performCardAction({ displayText, text, type, value } as DirectLineCardAction, { target });\n\n // Since \"openUrl\" action do not submit, the suggested action buttons do not hide after click.\n type === 'openUrl' && setSuggestedActions([]);\n\n scrollToEnd();\n })();\n },\n [displayText, focus, performCardAction, scrollToEnd, setSuggestedActions, text, type, value]\n );\n\n return (\n <AccessibleButton\n className={cx(classNames['suggested-action'], suggestedActionStyleSet + '', (className || '') + '')}\n data-testid={testIds.sendBoxSuggestedAction}\n disabled={uiState === 'disabled'}\n onClick={handleClick}\n ref={focusRef}\n type=\"button\"\n >\n {image && <img alt={imageAlt} className={classNames['suggested-action__image']} src={image} />}\n <span>{buttonText}</span>\n </AccessibleButton>\n );\n}\n\nexport default memo(SuggestedAction);\n","import React, { MouseEventHandler, ReactNode, forwardRef, memo, useRef } from 'react';\n\nconst preventDefaultHandler: MouseEventHandler<HTMLButtonElement> = event => event.preventDefault();\n\ntype AccessibleButtonProps = Readonly<{\n 'aria-hidden'?: boolean | undefined;\n 'data-testid'?: string | undefined;\n children?: ReactNode | undefined;\n className?: string | undefined;\n disabled?: boolean | undefined;\n onClick?: MouseEventHandler<HTMLButtonElement> | undefined;\n tabIndex?: number | undefined;\n type: 'button';\n}>;\n\n// Differences between <button> and <AccessibleButton>:\n// - Disable behavior\n// - When the widget is disabled\n// - Set \"aria-disabled\" attribute to \"true\"\n// - Set \"readonly\" attribute\n// - Set \"tabIndex\" to -1\n// - Remove \"onClick\" handler\n// - Why this is needed\n// - Browser compatibility: when the widget is disabled, different browser send focus to different places\n// - When the widget become disabled, it's reasonable to keep the focus on the same widget for an extended period of time\n// - When the user presses TAB after the current widget is disabled, it should jump to the next non-disabled widget\n\n// Developers using this accessible widget will need to:\n// - Style the disabled widget themselves, using CSS query `:disabled, [aria-disabled=\"true\"] {}`\n// - Modify all code that check disabled through \"disabled\" attribute to use aria-disabled=\"true\" instead\n// - aria-disabled=\"true\" is the source of truth\n// - If the widget is contained by a <form>, the developer need to filter out some `onSubmit` event caused by this widget\n\nconst AccessibleButton = forwardRef<HTMLButtonElement, AccessibleButtonProps>(\n (\n { 'aria-hidden': ariaHidden, children, className, 'data-testid': dataTestId, disabled, onClick, tabIndex },\n forwardedRef\n ) => {\n const targetRef = useRef<HTMLButtonElement>(null);\n\n const ref = forwardedRef || targetRef;\n\n return (\n <button\n aria-disabled={disabled ? 'true' : undefined}\n aria-hidden={ariaHidden}\n className={className}\n data-testid={dataTestId}\n onClick={disabled ? preventDefaultHandler : onClick}\n ref={ref}\n // eslint-disable-next-line no-magic-numbers\n tabIndex={disabled ? -1 : tabIndex}\n type=\"button\"\n >\n {children}\n </button>\n );\n }\n);\n\nexport default memo(AccessibleButton);\n","import \"/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/suggestedActions/SuggestedAction.module_built.css\";\nconst classes = {\"suggested-action\":\"wenGMeW_suggested-action\",\"suggested-action__image\":\"wenGMeW_suggested-action__image\"}\nexport default classes\n\nconst _suggested_action0 = classes[\"suggested-action\"]\nexport { _suggested_action0 as \"suggested-action\" }\n\nconst _suggested_action__image0 = classes[\"suggested-action__image\"]\nexport { _suggested_action__image0 as \"suggested-action__image\" }\n","import \"/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/suggestedActions/SuggestedActions.module_built.css\";\nconst classes = {\"suggested-actions\":\"wy3OzFW_suggested-actions\",\"suggested-actions--flow\":\"wy3OzFW_suggested-actions--flow\",\"suggested-actions--stacked\":\"wy3OzFW_suggested-actions--stacked\"}\nexport default classes\n\nconst _suggested_actions0 = classes[\"suggested-actions\"]\nexport { _suggested_actions0 as \"suggested-actions\" }\n\nconst _suggested_actions__flow0 = classes[\"suggested-actions--flow\"]\nexport { _suggested_actions__flow0 as \"suggested-actions--flow\" }\n\nconst _suggested_actions__stacked0 = classes[\"suggested-actions--stacked\"]\nexport { _suggested_actions__stacked0 as \"suggested-actions--stacked\" }\n","import React, { memo, useMemo, useState, type ReactNode } from 'react';\n\nimport Context from './private/Context';\n\ntype Props = Readonly<{ children?: ReactNode | undefined }>;\n\nconst Provider = memo(({ children }: Props) => {\n const [shown, setShown] = useState(false);\n\n const context = useMemo(\n () =>\n Object.freeze({\n setShown,\n shown\n }),\n [setShown, shown]\n );\n\n return <Context.Provider value={context}>{children}</Context.Provider>;\n});\n\nexport default Provider;\n","import { createContext, type Dispatch, type SetStateAction } from 'react';\n\ntype ContextType = Readonly<{\n setShown: Dispatch<SetStateAction<boolean>>;\n shown: boolean;\n}>;\n\nconst Context = createContext<ContextType>(\n new Proxy({} as ContextType, {\n get() {\n throw new Error('botframework-webchat: This hook can only used under its corresponding <Provider>.');\n }\n })\n);\n\nContext.displayName = 'TelephoneKeypad.Context';\n\nexport default Context;\n","import React, { memo } from 'react';\n\nimport type { PropsOf } from '../../types';\nimport TelephoneKeypad from './private/TelephoneKeypad';\nimport useShown from './useShown';\n\ntype Props = PropsOf<typeof TelephoneKeypad>;\n\nconst TelephoneKeypadSurrogate = memo((props: Props) => (useShown()[0] ? <TelephoneKeypad {...props} /> : null));\n\nTelephoneKeypadSurrogate.displayName = 'TelephoneKeypad.Surrogate';\n\nexport default TelephoneKeypadSurrogate;\n","import { Components } from 'botframework-webchat-component';\nimport cx from 'classnames';\nimport React, { memo, useCallback, useEffect, useRef, type KeyboardEventHandler, type ReactNode } from 'react';\nimport { useRefFrom } from 'use-ref-from';\n\n// import HorizontalDialPadController from './HorizontalDialPadController';\nimport { useStyles } from '../../../styles';\nimport testIds from '../../../testIds';\nimport { FluentIcon } from '../../icon';\nimport { type DTMF } from '../types';\nimport useShown from '../useShown';\nimport Button from './Button';\nimport styles from './TelephoneKeypad.module.css';\n\nconst { LocalizedString } = Components;\n\ntype Props = Readonly<{\n autoFocus?: boolean | undefined;\n className?: string | undefined;\n isHorizontal: boolean;\n onButtonClick: (button: DTMF) => void;\n}>;\n\nconst Orientation = memo(\n ({ children, isHorizontal }: Readonly<{ children?: ReactNode | undefined; isHorizontal: boolean }>) => {\n const classNames = useStyles(styles);\n\n return isHorizontal ? null : ( // <HorizontalDialPadController>{children}</HorizontalDialPadController>\n <div className={classNames['telephone-keypad__box']}>{children}</div>\n );\n }\n);\n\nOrientation.displayName = 'TelephoneKeypad:Orientation';\n\nconst TelephoneKeypad = memo(({ autoFocus, className, onButtonClick, isHorizontal }: Props) => {\n const autoFocusRef = useRefFrom(autoFocus);\n const classNames = useStyles(styles);\n const firstButtonRef = useRef<HTMLButtonElement>(null);\n const onButtonClickRef = useRefFrom(onButtonClick);\n const [, setShown] = useShown();\n\n const handleButton1Click = useCallback(() => onButtonClickRef.current?.('1'), [onButtonClickRef]);\n const handleButton2Click = useCallback(() => onButtonClickRef.current?.('2'), [onButtonClickRef]);\n const handleButton3Click = useCallback(() => onButtonClickRef.current?.('3'), [onButtonClickRef]);\n const handleButton4Click = useCallback(() => onButtonClickRef.current?.('4'), [onButtonClickRef]);\n const handleButton5Click = useCallback(() => onButtonClickRef.current?.('5'), [onButtonClickRef]);\n const handleButton6Click = useCallback(() => onButtonClickRef.current?.('6'), [onButtonClickRef]);\n const handleButton7Click = useCallback(() => onButtonClickRef.current?.('7'), [onButtonClickRef]);\n const handleButton8Click = useCallback(() => onButtonClickRef.current?.('8'), [onButtonClickRef]);\n const handleButton9Click = useCallback(() => onButtonClickRef.current?.('9'), [onButtonClickRef]);\n const handleButton0Click = useCallback(() => onButtonClickRef.current?.('0'), [onButtonClickRef]);\n const handleButtonStarClick = useCallback(() => onButtonClickRef.current?.('*'), [onButtonClickRef]);\n const handleButtonPoundClick = useCallback(() => onButtonClickRef.current?.('#'), [onButtonClickRef]);\n const handleKeyDown = useCallback<KeyboardEventHandler<HTMLDivElement>>(\n event => {\n if (event.key === 'Escape') {\n // TODO: Should send focus to the send box.\n setShown(false);\n }\n },\n [setShown]\n );\n\n useEffect(() => {\n autoFocusRef.current && firstButtonRef.current?.focus();\n }, [autoFocusRef, firstButtonRef]);\n\n return (\n <div className={cx(classNames['telephone-keypad'], className)} onKeyDown={handleKeyDown}>\n <Orientation isHorizontal={isHorizontal}>\n <Button\n button=\"1\"\n data-testid={testIds.sendBoxTelephoneKeypadButton1}\n onClick={handleButton1Click}\n ref={firstButtonRef}\n />\n <Button\n button=\"2\"\n data-testid={testIds.sendBoxTelephoneKeypadButton2}\n onClick={handleButton2Click}\n ruby=\"ABC\"\n />\n <Button\n button=\"3\"\n data-testid={testIds.sendBoxTelephoneKeypadButton3}\n onClick={handleButton3Click}\n ruby=\"DEF\"\n />\n <Button\n button=\"4\"\n data-testid={testIds.sendBoxTelephoneKeypadButton4}\n onClick={handleButton4Click}\n ruby=\"GHI\"\n />\n <Button\n button=\"5\"\n data-testid={testIds.sendBoxTelephoneKeypadButton5}\n onClick={handleButton5Click}\n ruby=\"JKL\"\n />\n <Button\n button=\"6\"\n data-testid={testIds.sendBoxTelephoneKeypadButton6}\n onClick={handleButton6Click}\n ruby=\"MNO\"\n />\n <Button\n button=\"7\"\n data-testid={testIds.sendBoxTelephoneKeypadButton7}\n onClick={handleButton7Click}\n ruby=\"PQRS\"\n />\n <Button\n button=\"8\"\n data-testid={testIds.sendBoxTelephoneKeypadButton8}\n onClick={handleButton8Click}\n ruby=\"TUV\"\n />\n <Button\n button=\"9\"\n data-testid={testIds.sendBoxTelephoneKeypadButton9}\n onClick={handleButton9Click}\n ruby=\"WXYZ\"\n />\n <Button button=\"*\" data-testid={testIds.sendBoxTelephoneKeypadButtonStar} onClick={handleButtonStarClick} />\n <Button button=\"0\" data-testid={testIds.sendBoxTelephoneKeypadButton0} onClick={handleButton0Click} ruby=\"+\" />\n <Button button=\"#\" data-testid={testIds.sendBoxTelephoneKeypadButtonPound} onClick={handleButtonPoundClick} />\n </Orientation>\n <div className={classNames['telephone-keypad__info-message']}>\n <FluentIcon appearance=\"text\" icon=\"info-16\" />\n <LocalizedString\n linkClassName={classNames['telephone-keypad__info-message-link']}\n stringIds=\"TELEPHONE_KEYPAD_INPUT_MESSAGE\"\n />\n </div>\n </div>\n );\n});\n\nTelephoneKeypad.displayName = 'TelephoneKeypad';\n\nexport default TelephoneKeypad;\n","import { useContext, useMemo, type Dispatch, type SetStateAction } from 'react';\n\nimport Context from './private/Context';\n\nexport default function useShown(): readonly [boolean, Dispatch<SetStateAction<boolean>>] {\n const { setShown, shown } = useContext(Context);\n\n return useMemo(() => Object.freeze([shown, setShown]), [shown, setShown]);\n}\n","import React, { forwardRef, memo, useCallback, type Ref } from 'react';\n\nimport { useRefFrom } from 'use-ref-from';\n\nimport { type DTMF } from '../types';\n\nimport styles from './Button.module.css';\nimport { useStyles } from '../../../styles';\n\ntype Props = Readonly<{\n button: DTMF;\n ['data-testid']?: string | undefined;\n onClick?: (() => void) | undefined;\n ruby?: string | undefined;\n}>;\n\nconst Button = memo(\n forwardRef(({ button, 'data-testid': dataTestId, onClick, ruby }: Props, ref: Ref<HTMLButtonElement>) => {\n const classNames = useStyles(styles);\n const onClickRef = useRefFrom(onClick);\n\n const handleClick = useCallback(() => onClickRef.current?.(), [onClickRef]);\n\n return (\n <button\n className={classNames['telephone-keypad__button']}\n data-testid={dataTestId}\n onClick={handleClick}\n ref={ref}\n type=\"button\"\n >\n <span className={classNames['telephone-keypad__button__text']}>{button === '*' ? '\\u2217' : button}</span>\n {!!ruby && <ruby className={classNames['telephone-keypad__button__ruby']}>{ruby}</ruby>}\n </button>\n );\n })\n);\n\nButton.displayName = 'TelephoneKeypad.Button';\n\nexport default Button;\n","import \"/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/telephoneKeypad/private/Button.module_built.css\";\nconst classes = {\"telephone-keypad__button\":\"wwTs9lq_telephone-keypad__button\",\"telephone-keypad--horizontal\":\"wwTs9lq_telephone-keypad--horizontal\",\"telephone-keypad__button__text\":\"wwTs9lq_telephone-keypad__button__text\",\"telephone-keypad__button__ruby\":\"wwTs9lq_telephone-keypad__button__ruby\"}\nexport default classes\n\nconst _telephone_keypad__button0 = classes[\"telephone-keypad__button\"]\nexport { _telephone_keypad__button0 as \"telephone-keypad__button\" }\n\nconst _telephone_keypad__horizontal0 = classes[\"telephone-keypad--horizontal\"]\nexport { _telephone_keypad__horizontal0 as \"telephone-keypad--horizontal\" }\n\nconst _telephone_keypad__button__text0 = classes[\"telephone-keypad__button__text\"]\nexport { _telephone_keypad__button__text0 as \"telephone-keypad__button__text\" }\n\nconst _telephone_keypad__button__ruby0 = classes[\"telephone-keypad__button__ruby\"]\nexport { _telephone_keypad__button__ruby0 as \"telephone-keypad__button__ruby\" }\n","import \"/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/telephoneKeypad/private/TelephoneKeypad.module_built.css\";\nconst classes = {\"telephone-keypad__info-message-link\":\"wEgqGmW_telephone-keypad__info-message-link\",\"telephone-keypad\":\"wEgqGmW_telephone-keypad\",\"telephone-keypad__box\":\"wEgqGmW_telephone-keypad__box\",\"telephone-keypad__info-message\":\"wEgqGmW_telephone-keypad__info-message\"}\nexport default classes\n\nconst _telephone_keypad__info_message_link0 = classes[\"telephone-keypad__info-message-link\"]\nexport { _telephone_keypad__info_message_link0 as \"telephone-keypad__info-message-link\" }\n\nconst _telephone_keypad0 = classes[\"telephone-keypad\"]\nexport { _telephone_keypad0 as \"telephone-keypad\" }\n\nconst _telephone_keypad__box0 = classes[\"telephone-keypad__box\"]\nexport { _telephone_keypad__box0 as \"telephone-keypad__box\" }\n\nconst _telephone_keypad__info_message0 = classes[\"telephone-keypad__info-message\"]\nexport { _telephone_keypad__info_message0 as \"telephone-keypad__info-message\" }\n","import { hooks } from 'botframework-webchat-component';\nimport React, { useCallback, useRef, type ChangeEventHandler, memo } from 'react';\nimport { useRefFrom } from 'use-ref-from';\n\nimport { FluentIcon } from '../icon';\nimport testIds from '../../testIds';\nimport { ToolbarButton } from './Toolbar';\nimport styles from './AddAttachmentButton.module.css';\nimport { useStyles } from '../../styles';\n\nconst { useLocalizer, useStyleOptions } = hooks;\n\nfunction AddAttachmentButton(\n props: Readonly<{\n disabled?: boolean | undefined;\n onFilesAdded: ((files: File[]) => void) | undefined;\n }>\n) {\n const inputRef = useRef<HTMLInputElement>(null);\n const classNames = useStyles(styles);\n const localize = useLocalizer();\n const [{ uploadAccept, uploadMultiple }] = useStyleOptions();\n const onFilesAddedRef = useRefFrom(props.onFilesAdded);\n\n const handleClick = useCallback(() => inputRef.current?.click(), [inputRef]);\n\n const handleFileChange = useCallback<ChangeEventHandler<HTMLInputElement>>(\n ({ target: { files } }) => {\n if (files) {\n onFilesAddedRef.current?.([...files]);\n\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n }\n },\n [inputRef, onFilesAddedRef]\n );\n\n return (\n <div className={classNames['sendbox__add-attachment']}>\n <input\n accept={uploadAccept}\n aria-disabled={props.disabled}\n aria-hidden=\"true\"\n className={classNames['sendbox__add-attachment-input']}\n multiple={uploadMultiple}\n onInput={props.disabled ? undefined : handleFileChange}\n readOnly={props.disabled}\n ref={inputRef}\n role=\"button\"\n tabIndex={-1}\n type=\"file\"\n />\n <ToolbarButton\n aria-label={localize('TEXT_INPUT_UPLOAD_BUTTON_ALT')}\n data-testid={testIds.sendBoxUploadButton}\n onClick={handleClick}\n >\n <FluentIcon appearance=\"text\" icon=\"attachment\" />\n </ToolbarButton>\n </div>\n );\n}\n\nexport default memo(AddAttachmentButton);\n","import { hooks } from 'botframework-webchat-api';\nimport cx from 'classnames';\nimport React, { memo, type MouseEventHandler, type ReactNode } from 'react';\nimport { useStyles } from '../../styles';\nimport styles from './Toolbar.module.css';\n\nconst { useUIState } = hooks;\n\nconst preventDefaultHandler: MouseEventHandler<HTMLButtonElement> = event => event.preventDefault();\n\nexport const ToolbarButton = memo(\n (\n props: Readonly<{\n 'aria-label'?: string | undefined;\n children?: ReactNode | undefined;\n className?: string | undefined;\n 'data-testid'?: string | undefined;\n disabled?: boolean | undefined;\n onClick?: MouseEventHandler<HTMLButtonElement> | undefined;\n selected?: boolean | undefined;\n type?: 'button' | 'submit' | undefined;\n }>\n ) => {\n const classNames = useStyles(styles);\n const [uiState] = useUIState();\n\n const disabled = props.disabled || uiState === 'disabled';\n\n return (\n <button\n aria-disabled={disabled ? 'true' : undefined}\n aria-label={props['aria-label']}\n className={cx(classNames['sendbox__toolbar-button'], props.className, {\n [classNames['sendbox__toolbar-button--selected']]: props.selected\n })}\n data-testid={props['data-testid']}\n onClick={disabled ? preventDefaultHandler : props.onClick}\n // eslint-disable-next-line no-magic-numbers\n tabIndex={disabled ? -1 : undefined}\n type={props.type === 'submit' ? 'submit' : 'button'}\n >\n {props.children}\n </button>\n );\n }\n);\n\nToolbarButton.displayName = 'ToolbarButton';\n\nexport const Toolbar = memo((props: Readonly<{ children?: ReactNode | undefined; className?: string | undefined }>) => {\n const [uiState] = useUIState();\n const classNames = useStyles(styles);\n\n return (\n <div className={cx(classNames['sendbox__toolbar'], props.className)}>\n {uiState !== 'blueprint' && props.children}\n </div>\n );\n});\n\nToolbar.displayName = 'Toolbar';\n\nexport const ToolbarSeparator = memo(\n (props: Readonly<{ children?: ReactNode | undefined; className?: string | undefined }>) => {\n const classNames = useStyles(styles);\n\n return (\n <div\n aria-orientation=\"vertical\"\n className={cx(classNames['sendbox__toolbar-separator'], props.className)}\n role=\"separator\"\n />\n );\n }\n);\n\nToolbarSeparator.displayName = 'ToolbarSeparator';\n","import \"/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/sendBox/Toolbar.module_built.css\";\nconst classes = {\"sendbox__toolbar-button\":\"weDCCeq_sendbox__toolbar-button\",\"sendbox__toolbar-separator\":\"weDCCeq_sendbox__toolbar-separator\",\"sendbox__toolbar-button--selected\":\"weDCCeq_sendbox__toolbar-button--selected\",\"sendbox__toolbar\":\"weDCCeq_sendbox__toolbar\"}\nexport default classes\n\nconst _sendbox__toolbar_button0 = classes[\"sendbox__toolbar-button\"]\nexport { _sendbox__toolbar_button0 as \"sendbox__toolbar-button\" }\n\nconst _sendbox__toolbar_separator0 = classes[\"sendbox__toolbar-separator\"]\nexport { _sendbox__toolbar_separator0 as \"sendbox__toolbar-separator\" }\n\nconst _sendbox__toolbar_button__selected0 = classes[\"sendbox__toolbar-button--selected\"]\nexport { _sendbox__toolbar_button__selected0 as \"sendbox__toolbar-button--selected\" }\n\nconst _sendbox__toolbar0 = classes[\"sendbox__toolbar\"]\nexport { _sendbox__toolbar0 as \"sendbox__toolbar\" }\n","import \"/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/sendBox/AddAttachmentButton.module_built.css\";\nconst classes = {\"sendbox__add-attachment-input\":\"wTxWh-G_sendbox__add-attachment-input\",\"sendbox__add-attachment\":\"wTxWh-G_sendbox__add-attachment\"}\nexport default classes\n\nconst _sendbox__add_attachment_input0 = classes[\"sendbox__add-attachment-input\"]\nexport { _sendbox__add_attachment_input0 as \"sendbox__add-attachment-input\" }\n\nconst _sendbox__add_attachment0 = classes[\"sendbox__add-attachment\"]\nexport { _sendbox__add_attachment0 as \"sendbox__add-attachment\" }\n","import { useLiveRegion } from 'botframework-webchat-component/internal';\nimport React, { memo } from 'react';\nimport { useStyles } from '../../styles';\nimport styles from './ErrorMessage.module.css';\n\ntype ErrorMessageProps = Readonly<{\n error?: string | undefined;\n id: string;\n}>;\n\nfunction ErrorMessage({ error, id }: ErrorMessageProps) {\n const classNames = useStyles(styles);\n\n useLiveRegion(() => error && <div className=\"sendbox__error-message__status\">{error}</div>, [error]);\n\n return (\n // eslint-disable-next-line react/forbid-dom-props\n <span className={classNames['sendbox__error-message']} id={id}>\n {error}\n </span>\n );\n}\n\nErrorMessage.displayName = 'ErrorMessage';\n\nexport default memo(ErrorMessage);\n","import \"/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/sendBox/ErrorMessage.module_built.css\";\nconst classes = {\"sendbox__error-message\":\"wa8yVAW_sendbox__error-message\"}\nexport default classes\n\nconst _sendbox__error_message0 = classes[\"sendbox__error-message\"]\nexport { _sendbox__error_message0 as \"sendbox__error-message\" }\n","import { hooks } from 'botframework-webchat-component';\nimport { useCallback, useMemo, useState } from 'react';\nimport { useRefFrom } from 'use-ref-from';\n\nconst { useConnectivityStatus, useLocalizer } = hooks;\n\ntype ErrorMessageStringMap = ReadonlyMap<SendError, string>;\n\ntype SendError = 'empty' | 'offline';\n\nconst useSubmitError = ({\n attachments,\n message\n}: Readonly<{\n attachments: readonly Readonly<{ blob: Blob | File; thumbnailURL?: URL | undefined }>[];\n message: string;\n}>) => {\n const [connectivityStatus] = useConnectivityStatus();\n const [error, setError] = useState<SendError | undefined>();\n const localize = useLocalizer();\n\n const submitErrorRef = useRefFrom<'empty' | 'offline' | undefined>(\n connectivityStatus !== 'connected' && connectivityStatus !== 'reconnected'\n ? 'offline'\n : !message && !attachments.length\n ? 'empty'\n : undefined\n );\n\n const errorMessageStringMap = useMemo<ErrorMessageStringMap>(\n () =>\n Object.freeze(\n new Map<SendError, string>()\n .set('empty', localize('SEND_BOX_IS_EMPTY_TOOLTIP_ALT'))\n // TODO: [P0] We should add a new string for \"Cannot send message while offline.\"\n .set('offline', localize('CONNECTIVITY_STATUS_ALT_FATAL'))\n ),\n [localize]\n );\n\n // TODO: we may want to improve this later e.g. to avoid re-render\n // Reset visible error if there is a value\n const hasValue = !!message?.trim();\n if (error === 'empty' && hasValue) {\n setError(undefined);\n }\n\n const commitLatestError = useCallback(() => {\n setError(submitErrorRef.current);\n return submitErrorRef.current;\n }, [submitErrorRef]);\n\n return useMemo<Readonly<[string | undefined, () => typeof submitErrorRef.current]>>(\n () => Object.freeze([error && errorMessageStringMap.get(error), commitLatestError]),\n [error, errorMessageStringMap, commitLatestError]\n );\n};\n\nexport default useSubmitError;\n","import { useCallback, type KeyboardEvent } from 'react';\nimport { hooks } from 'botframework-webchat-component';\n\nconst { useScrollDown, useScrollUp } = hooks;\n\nexport default function useTranscriptNavigation() {\n const scrollDown = useScrollDown();\n const scrollUp = useScrollUp();\n\n return useCallback(\n (event: KeyboardEvent<unknown>) => {\n if (event.target instanceof HTMLTextAreaElement && event.target.value) {\n return;\n }\n\n const { ctrlKey, metaKey, shiftKey } = event;\n\n if (ctrlKey || metaKey || shiftKey) {\n return;\n }\n\n let handled = true;\n\n switch (event.key) {\n case 'End':\n scrollDown({ displacement: Infinity });\n break;\n\n case 'Home':\n scrollUp({ displacement: Infinity });\n break;\n\n case 'PageDown':\n scrollDown();\n break;\n\n case 'PageUp':\n scrollUp();\n break;\n\n default:\n handled = false;\n break;\n }\n\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [scrollDown, scrollUp]\n );\n}\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [2, 5, 36] }] */\n\nimport { useMemo } from 'react';\n// TODO: fix math-random fails to import crypto\n// import random from 'math-random';\n\nexport default function useUniqueId(prefix?: string): string {\n const id = useMemo(() => Math.random().toString(36).substr(2, 5), []);\n\n prefix = prefix ? `${prefix}--` : '';\n\n return `${prefix}${id}`;\n}\n","import \"/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/sendBox/SendBox.module_built.css\";\nconst classes = {\"sendbox__sendbox-controls--in-grid\":\"wHTirJa_sendbox__sendbox-controls--in-grid\",\"variant-copilot\":\"wHTirJa_variant-copilot\",\"sendbox__telephone-keypad--in-grid\":\"wHTirJa_sendbox__telephone-keypad--in-grid\",\"sendbox__sendbox-text-area\":\"wHTirJa_sendbox__sendbox-text-area\",\"sendbox__text-counter--error\":\"wHTirJa_sendbox__text-counter--error\",\"sendbox__sendbox\":\"wHTirJa_sendbox__sendbox\",\"sendbox__text-counter\":\"wHTirJa_sendbox__text-counter\",\"sendbox__attachment-bar\":\"wHTirJa_sendbox__attachment-bar\",\"sendbox__text-area--in-grid\":\"wHTirJa_sendbox__text-area--in-grid\",\"sendbox__sendbox-controls\":\"wHTirJa_sendbox__sendbox-controls\",\"sendbox\":\"wHTirJa_sendbox\",\"sendbox__attachment-bar--in-grid\":\"wHTirJa_sendbox__attachment-bar--in-grid\"}\nexport default classes\n\nconst _sendbox__sendbox_controls__in_grid0 = classes[\"sendbox__sendbox-controls--in-grid\"]\nexport { _sendbox__sendbox_controls__in_grid0 as \"sendbox__sendbox-controls--in-grid\" }\n\nconst _variant_copilot0 = classes[\"variant-copilot\"]\nexport { _variant_copilot0 as \"variant-copilot\" }\n\nconst _sendbox__telephone_keypad__in_grid0 = classes[\"sendbox__telephone-keypad--in-grid\"]\nexport { _sendbox__telephone_keypad__in_grid0 as \"sendbox__telephone-keypad--in-grid\" }\n\nconst _sendbox__sendbox_text_area0 = classes[\"sendbox__sendbox-text-area\"]\nexport { _sendbox__sendbox_text_area0 as \"sendbox__sendbox-text-area\" }\n\nconst _sendbox__text_counter__error0 = classes[\"sendbox__text-counter--error\"]\nexport { _sendbox__text_counter__error0 as \"sendbox__text-counter--error\" }\n\nconst _sendbox__sendbox0 = classes[\"sendbox__sendbox\"]\nexport { _sendbox__sendbox0 as \"sendbox__sendbox\" }\n\nconst _sendbox__text_counter0 = classes[\"sendbox__text-counter\"]\nexport { _sendbox__text_counter0 as \"sendbox__text-counter\" }\n\nconst _sendbox__attachment_bar0 = classes[\"sendbox__attachment-bar\"]\nexport { _sendbox__attachment_bar0 as \"sendbox__attachment-bar\" }\n\nconst _sendbox__text_area__in_grid0 = classes[\"sendbox__text-area--in-grid\"]\nexport { _sendbox__text_area__in_grid0 as \"sendbox__text-area--in-grid\" }\n\nconst _sendbox__sendbox_controls0 = classes[\"sendbox__sendbox-controls\"]\nexport { _sendbox__sendbox_controls0 as \"sendbox__sendbox-controls\" }\n\nconst _sendbox0 = classes[\"sendbox\"]\nexport { _sendbox0 as \"sendbox\" }\n\nconst _sendbox__attachment_bar__in_grid0 = classes[\"sendbox__attachment-bar--in-grid\"]\nexport { _sendbox__attachment_bar__in_grid0 as \"sendbox__attachment-bar--in-grid\" }\n","import React, { memo, useCallback } from 'react';\n\nimport { hooks } from 'botframework-webchat-component';\nimport { FluentIcon } from '../icon';\nimport testIds from '../../testIds';\nimport { useTelephoneKeypadShown } from '../telephoneKeypad';\nimport { ToolbarButton } from './Toolbar';\n\nconst { useLocalizer } = hooks;\n\nconst TelephoneKeypadToolbarButton = memo(() => {\n const [telephoneKeypadShown, setTelephoneKeypadShown] = useTelephoneKeypadShown();\n const localize = useLocalizer();\n\n const handleClick = useCallback(() => setTelephoneKeypadShown(shown => !shown), [setTelephoneKeypadShown]);\n\n return (\n <ToolbarButton\n aria-label={localize('TEXT_INPUT_TELEPHONE_KEYPAD_BUTTON_ALT')}\n data-testid={testIds.sendBoxTelephoneKeypadToolbarButton}\n onClick={handleClick}\n selected={telephoneKeypadShown}\n >\n <FluentIcon appearance=\"text\" icon=\"keypad\" />\n </ToolbarButton>\n );\n});\n\nTelephoneKeypadToolbarButton.displayName = 'SendBox.TelephoneKeypadToolbarButton';\n\nexport default TelephoneKeypadToolbarButton;\n","import { type ActivityMiddleware, type StyleOptions, type TypingIndicatorMiddleware } from 'botframework-webchat-api';\nimport {\n createActivityBorderMiddleware,\n DecoratorComposer,\n type DecoratorMiddleware\n} from 'botframework-webchat-api/decorator';\nimport { Components } from 'botframework-webchat-component';\nimport { WebChatDecorator } from 'botframework-webchat-component/decorator';\nimport React, { memo, type ReactNode } from 'react';\n\nimport { ActivityDecorator } from '../components/activity';\nimport ActivityLoader from '../components/activity/ActivityLoader';\nimport AssetComposer from '../components/assets/AssetComposer';\nimport { isLinerMessageActivity, LinerMessageActivity } from '../components/linerActivity';\nimport { isPreChatMessageActivity, PreChatMessageActivity } from '../components/preChatActivity';\nimport { PrimarySendBox } from '../components/sendBox';\nimport { TelephoneKeypadProvider } from '../components/telephoneKeypad';\nimport { WebChatTheme } from '../components/theme';\nimport SlidingDotsTypingIndicator from '../components/typingIndicator/SlidingDotsTypingIndicator';\nimport { createStyles } from '../styles';\nimport VariantComposer, { VariantList } from './VariantComposer';\n\nconst { ThemeProvider } = Components;\n\ntype FluentThemeProviderProps = Readonly<{\n children?: ReactNode | undefined;\n variant?: VariantList | undefined;\n}>;\n\nconst activityMiddleware: readonly ActivityMiddleware[] = Object.freeze([\n () =>\n next =>\n (...args) => {\n const activity = args[0]?.activity;\n\n // TODO: Should show pre-chat only when it is the very first message in the chat history.\n if (isPreChatMessageActivity(activity)) {\n return () => <PreChatMessageActivity activity={activity} />;\n }\n\n if (isLinerMessageActivity(activity)) {\n return () => <LinerMessageActivity activity={activity} />;\n }\n\n const renderActivity = next(...args);\n\n return renderActivity\n ? (...args) => <ActivityDecorator activity={activity}>{renderActivity(...args)}</ActivityDecorator>\n : renderActivity;\n }\n]);\n\nconst sendBoxMiddleware = [() => () => () => PrimarySendBox];\n\nconst decoratorMiddleware: readonly DecoratorMiddleware[] = Object.freeze([\n createActivityBorderMiddleware(\n next => request => (request.livestreamingState === 'preparing' ? ActivityLoader : next(request))\n )\n]);\n\nconst styles = createStyles('fluent-theme');\n\nconst fluentStyleOptions: StyleOptions = Object.freeze({\n feedbackActionsPlacement: 'activity-actions'\n});\n\nconst typingIndicatorMiddleware = Object.freeze([\n () =>\n next =>\n (...args) =>\n args[0].visible ? <SlidingDotsTypingIndicator /> : next(...args)\n] satisfies TypingIndicatorMiddleware[]);\n\nfunction FluentThemeProvider({ children, variant = 'fluent' }: FluentThemeProviderProps) {\n return (\n <VariantComposer variant={variant}>\n <WebChatTheme>\n <TelephoneKeypadProvider>\n <ThemeProvider\n activityMiddleware={activityMiddleware}\n sendBoxMiddleware={sendBoxMiddleware}\n styleOptions={fluentStyleOptions}\n styles={styles}\n typingIndicatorMiddleware={typingIndicatorMiddleware}\n >\n <AssetComposer>\n <WebChatDecorator>\n <DecoratorComposer middleware={decoratorMiddleware}>{children}</DecoratorComposer>\n </WebChatDecorator>\n </AssetComposer>\n </ThemeProvider>\n </TelephoneKeypadProvider>\n </WebChatTheme>\n </VariantComposer>\n );\n}\n\nexport default memo(FluentThemeProvider);\nexport { type FluentThemeProviderProps };\n","import { useStyles } from 'botframework-webchat-styles/react';\nimport cx from 'classnames';\nimport React, { Fragment, memo, type ReactNode } from 'react';\n\nimport { useVariantClassName } from '../../styles';\nimport SlidingDots from '../assets/SlidingDots';\nimport styles from './ActivityLoader.module.css';\n\nfunction FluentActivityLoader({ children }: Readonly<{ children?: ReactNode | undefined }>) {\n const classNames = useStyles(styles);\n const variantClassName = useVariantClassName(classNames);\n\n return (\n <Fragment>\n {children}\n <SlidingDots className={cx(classNames['activity-loader'], variantClassName)} />\n </Fragment>\n );\n}\n\nexport default memo(FluentActivityLoader);\n","import { hooks } from 'botframework-webchat-component';\nimport React, { memo, useCallback, useEffect, useRef } from 'react';\nimport { useRefFrom } from 'use-ref-from';\n\nimport useAssetURL from './private/useAssetURL';\n\nconst { useLocalizer, useShouldReduceMotion } = hooks;\n\ntype SlidingDotsProps = Readonly<{ className: string }>;\n\nconst SlidingDots = ({ className }: SlidingDotsProps) => {\n const [shouldReduceMotion] = useShouldReduceMotion();\n const [url] = useAssetURL('sliding dots');\n const localize = useLocalizer();\n const objectElementRef = useRef<HTMLObjectElement>(null);\n\n const altText = localize('TYPING_INDICATOR_ALT');\n const shouldReduceMotionRef = useRefFrom(shouldReduceMotion);\n\n const pauseAnimations = useCallback(() => {\n const contentDocument = objectElementRef.current?.contentDocument;\n const svgElement = contentDocument?.documentElement;\n const { SVGSVGElement } = contentDocument?.defaultView || {};\n\n SVGSVGElement && svgElement instanceof SVGSVGElement && svgElement.pauseAnimations();\n }, [objectElementRef]);\n\n const unpauseAnimations = useCallback(() => {\n const contentDocument = objectElementRef.current?.contentDocument;\n const svgElement = contentDocument?.documentElement;\n const { SVGSVGElement } = contentDocument?.defaultView || {};\n\n SVGSVGElement && svgElement instanceof SVGSVGElement && svgElement.unpauseAnimations();\n }, [objectElementRef]);\n\n const pauseOrUnpauseAnimations = useCallback(\n () => (shouldReduceMotionRef.current ? pauseAnimations() : unpauseAnimations()),\n [pauseAnimations, shouldReduceMotionRef, unpauseAnimations]\n );\n\n useEffect(pauseOrUnpauseAnimations, [\n pauseOrUnpauseAnimations,\n // Call \"pauseOrUnpauseAnimations()\" when \"shouldReduceMotion\" change.\n shouldReduceMotion\n ]);\n\n return (\n <object\n aria-label={altText}\n className={className}\n data={url.href}\n onLoad={pauseOrUnpauseAnimations}\n ref={objectElementRef}\n type=\"image/svg+xml\"\n />\n );\n};\n\nSlidingDots.displayName = 'SlidingDots';\n\nexport default memo(SlidingDots);\n","import { type ContextOf } from 'botframework-webchat-api';\nimport { useContext as useReactContext } from 'react';\n\nimport Context from './Context';\n\nexport default function useContext(): ContextOf<typeof Context> {\n return useReactContext(Context);\n}\n","import { createContext } from 'react';\n\nimport type { AssetName } from '../AssetName';\n\ntype ContextType = Readonly<{\n urlStateMap: ReadonlyMap<AssetName, readonly [URL]>;\n}>;\n\ntype ContextAsGetter<T extends Record<string, unknown>> =\n T extends Record<infer K, infer V> ? Record<K, { get(): V }> : never;\n\nconst defaultContextValue: ContextAsGetter<ContextType> = {\n urlStateMap: {\n get() {\n throw new Error('urlMap cannot be used outside of <AssetComposerContext>.');\n }\n }\n};\n\nconst Context = createContext<ContextType>(Object.create({}, defaultContextValue));\n\nContext.displayName = 'AssetComposerContext';\n\nexport default Context;\n","import { type AssetName } from '../AssetName';\nimport useContext from './useContext';\n\nexport default function useAssetURL(assetName: AssetName): readonly [URL] {\n const urlState = useContext().urlStateMap.get(assetName);\n\n if (!urlState) {\n throw new Error(`botframework-webchat-fluent-theme internal: Asset \"${assetName}\" was not found.`);\n }\n\n return urlState;\n}\n","import \"/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/activity/ActivityLoader.module_built.css\";\nconst classes = {\"activity-loader\":\"wnVy-QG_activity-loader\",\"variant-fluent\":\"wnVy-QG_variant-fluent\"}\nexport default classes\n\nconst _activity_loader0 = classes[\"activity-loader\"]\nexport { _activity_loader0 as \"activity-loader\" }\n\nconst _variant_fluent0 = classes[\"variant-fluent\"]\nexport { _variant_fluent0 as \"variant-fluent\" }\n","import { type ContextOf } from 'botframework-webchat-api';\nimport React, { memo, useEffect, useMemo, type ReactNode } from 'react';\n\nimport { type AssetName } from './AssetName';\nimport Context from './private/Context';\n\ntype ContextType = ContextOf<typeof Context>;\n\ntype AssetComposerProps = Readonly<{\n children?: ReactNode | undefined;\n}>;\n\nconst SLIDING_DOTS_SVG_STRING =\n '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"400\" height=\"20\" viewBox=\"0 0 400 20\"><defs><linearGradient id=\"a\" x1=\"0\" x2=\"100%\" y1=\"0\" y2=\"0\" gradientUnits=\"userSpaceOnUse\"><stop offset=\"0%\"><animate attributeName=\"stop-color\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"#ad5ae1;#ad5ae1;#0E94E1;#0E94E1;#669fc2;#669fc2;#ad5ae1\"/></stop><stop offset=\"50%\"><animate attributeName=\"stop-color\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"#e9618d;#e9618d;#57AB82;#57AB82;#6377e0;#6377e0;#e9618d\"/></stop><stop offset=\"100%\"><animate attributeName=\"stop-color\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"#fd9e5f;#fd9e5f;#C6C225;#C6C225;#9b80ec;#9b80ec;#fd9e5f\"/></stop></linearGradient></defs><g fill=\"url(#a)\"><rect height=\"20\" rx=\"10\"><animate attributeName=\"x\" dur=\"2s\" keyTimes=\"0;0.5;0.66;1\" repeatCount=\"indefinite\" values=\"26;26;0;0\"/><animate attributeName=\"width\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;1\" repeatCount=\"indefinite\" values=\"20;20;30;30;20;20\"/><animate attributeName=\"opacity\" dur=\"2s\" keyTimes=\"0;0.5;0.66;1\" repeatCount=\"indefinite\" values=\"1;1;0;0\"/></rect><rect height=\"20\" rx=\"10\"><animate attributeName=\"x\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"62;62;72;72;26;26;0\"/><animate attributeName=\"width\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"104;104;20;20;70;70;20\"/><animate attributeName=\"opacity\" dur=\"2s\" keyTimes=\"0;0.8;1\" repeatCount=\"indefinite\" values=\"1;1;0\"/></rect><rect height=\"20\" rx=\"10\"><animate attributeName=\"x\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"182;182;108;108;112;112;26\"/><animate attributeName=\"width\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;1\" repeatCount=\"indefinite\" values=\"20;20;60;60;20;20\"/></rect><rect height=\"20\" rx=\"10\"><animate attributeName=\"x\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"218;218;184;184;148;148;62\"/><animate attributeName=\"width\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"60;60;80;80;40;40;104\"/></rect><rect height=\"20\" rx=\"10\"><animate attributeName=\"x\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"294;294;280;280;204;204;182\"/><animate attributeName=\"width\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"40;40;20;20;80;80;20\"/></rect><rect height=\"20\" rx=\"10\"><animate attributeName=\"x\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"350;350;316;316;300;300;218\"/><animate attributeName=\"width\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"20;20;60;60;20;20;60\"/></rect><rect height=\"20\" rx=\"10\"><animate attributeName=\"x\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"386;386;392;392;336;336;294\"/><animate attributeName=\"width\" dur=\"2s\" keyTimes=\"0;0.5;0.66;1\" repeatCount=\"indefinite\" values=\"20;20;40;40\"/><animate attributeName=\"opacity\" dur=\"2s\" keyTimes=\"0;0.5;0.66;1\" repeatCount=\"indefinite\" values=\"0;0;1;1\"/></rect><rect width=\"20\" height=\"20\" rx=\"10\"><animate attributeName=\"x\" dur=\"2s\" keyTimes=\"0;0.2;0.33;0.5;0.66;0.8;1\" repeatCount=\"indefinite\" values=\"422;422;428;428;392;392;350\"/><animate attributeName=\"opacity\" dur=\"2s\" keyTimes=\"0;0.8;1\" repeatCount=\"indefinite\" values=\"0;0;1\"/></rect></g></svg>';\n\nconst AssetComposer = memo(({ children }: AssetComposerProps) => {\n const slidingDotsURL = useMemo(\n () => URL.createObjectURL(new Blob([SLIDING_DOTS_SVG_STRING], { type: 'image/svg+xml' })),\n []\n );\n\n useEffect(() => () => URL.revokeObjectURL(slidingDotsURL), [slidingDotsURL]);\n\n const context = useMemo<ContextType>(\n () =>\n Object.freeze({\n urlStateMap: new Map<AssetName, readonly [URL]>([['sliding dots', Object.freeze([new URL(slidingDotsURL)])]])\n }),\n [slidingDotsURL]\n );\n\n return <Context.Provider value={context}>{children}</Context.Provider>;\n});\n\nAssetComposer.displayName = 'AssetComposer';\n\nexport default AssetComposer;\n","import { type WebChatActivity } from 'botframework-webchat-core';\n\nexport default function isLinerMessageActivity(\n activity: undefined | WebChatActivity\n): activity is WebChatActivity & { type: 'message'; from: { role: 'channel' } } {\n return !!(activity && activity.from.role === 'channel' && activity.type === 'message' && 'text' in activity);\n}\n","import { type WebChatActivity } from 'botframework-webchat-core';\nimport React, { memo } from 'react';\nimport { useStyles } from '../../../styles/index.js';\nimport styles from './LinerMessageActivity.module.css';\n\ntype Props = Readonly<{ activity: WebChatActivity & { type: 'message' } }>;\n\nconst LinerMessageActivity = ({ activity }: Props) => {\n const classNames = useStyles(styles);\n\n return (\n <div className={classNames['liner-message-activity']} role=\"separator\">\n <span className={classNames['liner-message-activity__text']}>{activity.text}</span>\n </div>\n );\n};\n\nLinerMessageActivity.displayName = 'LinerMessageActivity';\n\nexport default memo(LinerMessageActivity);\n","import \"/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/linerActivity/private/LinerMessageActivity.module_built.css\";\nconst classes = {\"liner-message-activity\":\"wQVQNzG_liner-message-activity\",\"liner-message-activity__text\":\"wQVQNzG_liner-message-activity__text\"}\nexport default classes\n\nconst _liner_message_activity0 = classes[\"liner-message-activity\"]\nexport { _liner_message_activity0 as \"liner-message-activity\" }\n\nconst _liner_message_activity__text0 = classes[\"liner-message-activity__text\"]\nexport { _liner_message_activity__text0 as \"liner-message-activity__text\" }\n","import React, { type ReactNode } from 'react';\nimport cx from 'classnames';\nimport styles from './Theme.module.css';\nimport { useStyles, useVariantClassName } from '../../styles';\n\nexport const rootClassName = 'webchat-fluent';\n\nexport default function Theme(props: Readonly<{ readonly children: ReactNode | undefined }>) {\n const classNames = useStyles(styles);\n const variantClassName = useVariantClassName(styles);\n return <div className={cx(rootClassName, classNames['theme'], variantClassName)}>{props.children}</div>;\n}\n","import \"/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/theme/Theme.module_built.css\";\nconst classes = {\"theme\":\"w2roZmq_theme\",\"variant-copilot\":\"w2roZmq_variant-copilot\"}\nexport default classes\n\nconst _theme0 = classes[\"theme\"]\nexport { _theme0 as \"theme\" }\n\nconst _variant_copilot0 = classes[\"variant-copilot\"]\nexport { _variant_copilot0 as \"variant-copilot\" }\n","import { testIds } from 'botframework-webchat-component';\nimport { useStyles } from 'botframework-webchat-styles/react';\nimport cx from 'classnames';\nimport React, { memo } from 'react';\n\nimport SlidingDots from '../assets/SlidingDots';\nimport styles from './SlidingDotsTypingIndicator.module.css';\n\nfunction SlidingDotsTypingIndicator() {\n const classNames = useStyles(styles);\n\n return (\n <div className={classNames['sliding-dots-typing-indicator']} data-testid={testIds.typingIndicator}>\n <SlidingDots className={cx(classNames['sliding-dots-typing-indicator__image'])} />\n </div>\n );\n}\n\nexport default memo(SlidingDotsTypingIndicator);\n","import \"/__w/1/s/BotFramework-WebChat/packages/fluent-theme/src/components/typingIndicator/SlidingDotsTypingIndicator.module_built.css\";\nconst classes = {\"sliding-dots-typing-indicator__image\":\"wQOMcSW_sliding-dots-typing-indicator__image\",\"sliding-dots-typing-indicator\":\"wQOMcSW_sliding-dots-typing-indicator\"}\nexport default classes\n\nconst _sliding_dots_typing_indicator__image0 = classes[\"sliding-dots-typing-indicator__image\"]\nexport { _sliding_dots_typing_indicator__image0 as \"sliding-dots-typing-indicator__image\" }\n\nconst _sliding_dots_typing_indicator0 = classes[\"sliding-dots-typing-indicator\"]\nexport { _sliding_dots_typing_indicator0 as \"sliding-dots-typing-indicator\" }\n"],"mappings":"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","names":["injectMetaTag","hooks","Components","cx","React","memo","useCallback","useRef","useState","useRefFrom","createIconComponent","custom","parse","validateProps","propsSchema","props","isolationMode","parse","error","useMemo","useStyles","styles","baseClassName","resultClassName","useStyles_default","cx","React","memo","useMemo","object","optional","pipe","readonly","string","classes","FluentIcon_module_default","_fluent_icon0","_icon__send0","classes","_icon__info_160","classes","_appearance__text0","classes","_icon__attachment0","classes","_icon__keypad0","classes","_icon__add_document0","classes","baseFluentIconPropsSchema","pipe","object","optional","string","readonly","BaseFluentIcon","props","className","t","classNames","f","FluentIcon_module_default","maskStyle","useMemo","React","cx","FluentIcon","modifierPropsSchema","createIconComponent","fluentIconPropsSchema","FluentIcon_default","memo","createStyle","content","origin","style","makeCreateStyles","contents","fluentStyleContent","createStyles_default","r","useMemo","useContext","useMemo","createContext","React","memo","useMemo","createComposer","Provider","defaults","displayName","Composer","children","props","value","VariantContext","createContext","VariantComposer","createComposer","VariantComposer_default","useVariants","variant","useContext","VariantContext","useMemo","useVariantClassName","styles","classNames","f","variants","useVariants","useMemo","variant","value","testIds","testIds_default","hooks","cx","React","memo","useCallback","useEffect","useRef","useState","useRefFrom","classes","DropZone_module_default","_sendbox__attachment_drop_zone__droppable0","_sendbox__attachment_drop_zone0","classes","_sendbox__attachment_drop_zone_icon0","classes","useLocalizer","hooks","handleDragOver","event","isFilesTransferEvent","type","isDescendantOf","target","ancestor","current","DropZone","props","dropZoneState","setDropZoneState","useState","classNames","f","DropZone_module_default","dropZoneRef","useRef","localize","onFilesAddedRef","useRefFrom","useEffect","entranceCounter","handleDragEnter","handleDragLeave","handleDragEnd","handleDocumentDrop","handleDrop","useCallback","React","cx","testIds_default","FluentIcon_default","DropZone_default","memo","hooks","cx","React","memo","useCallback","getOrgSchemaMessage","isPreChatMessageActivity","activity","hooks","cx","React","memo","useMemo","classes","PreChatMessageActivity_module_default","_pre_chat_message_activity__body_title0","_pre_chat_message_activity__body_subtitle0","classes","_pre_chat_message_activity__toolbar0","classes","_pre_chat_message_activity__body_avatar0","classes","_pre_chat_message_activity0","classes","_pre_chat_message_activity__body0","classes","_pre_chat_message_activity__body__blueprint0","classes","hooks","cx","React","Fragment","memo","hooks","cx","React","memo","useCallback","useMemo","useRefFrom","classes","StarterPromptsCardAction_module_default","_pre_chat_message_activity__card_action_image0","_pre_chat_message_activity__card_action_subtitle0","classes","_pre_chat_message_activity__card_action_box0","classes","_pre_chat_message_activity__card_action_title0","classes","useFocus","useRenderMarkdownAsHTML","useSendBoxValue","useUIState","hooks","StarterPromptsCardAction","className","messageBackAction","_","setSendBoxValue","uiState","classNames","f","StarterPromptsCardAction_module_default","focus","inputTextRef","useRefFrom","renderMarkdownAsHTML","subtitleHTML","useMemo","disabled","title","shouldShowBlueprint","handleClick","useCallback","React","cx","testIds_default","FluentIcon_default","StarterPromptsCardAction_default","memo","classes","StarterPromptsToolbar_module_default","_pre_chat_message_activity__card_action_toolbar_grid0","_pre_chat_message_activity__card_action_toolbar0","classes","useUIState","hooks","StarterPromptsToolbar","cardActions","className","classNames","f","StarterPromptsToolbar_module_default","uiState","React","cx","Fragment","StarterPromptsCardAction_default","card","cardAction","index","StarterPromptsToolbar_default","memo","cx","React","memo","classes","ActivityDecorator_module_default","_variant_fluent0","_activity_decorator0","classes","_variant_copilot0","classes","React","memo","useMemo","hooks","useMemo","hooks","useStyleOptions","useActivityStyleOptions","activity","styleOptions","getOrgSchemaMessage","isAIGeneratedActivity","activity","useMemo","getOrgSchemaMessage","useActivityAuthor","activity","entity","classes","CopilotMessageHeader_module_default","_copilot_message_header__ai_generated_content0","_copilot_message_header__title0","classes","_copilot_message_header__avatar0","classes","_copilot_message_header0","classes","useLocalizer","hooks","CopilotMessageHeader","activity","botAvatarImage","botAvatarBackgroundColor","useActivityStyleOptions","classNames","f","CopilotMessageHeader_module_default","localize","isAIGenerated","isAIGeneratedActivity","avatarStyle","useMemo","author","useActivityAuthor","avatarImage","botTitle","React","CopilotMessageHeader_default","memo","ActivityDecorator","activity","children","classNames","f","ActivityDecorator_module_default","variants","useVariants","variantClassName","useVariantClassName","shouldRenderHeader","React","cx","CopilotMessageHeader_default","ActivityDecorator_default","memo","useLocalizer","useRenderMarkdownAsHTML","useUIState","hooks","PreChatMessageActivity","activity","uiState","classNames","f","PreChatMessageActivity_module_default","renderMarkdownAsHTML","localize","author","useActivityAuthor","html","useMemo","React","cx","StarterPromptsToolbar_default","PreChatMessageActivity_default","memo","computeSuggestedActionText","cardAction","title","type","value","React","createContext","memo","useCallback","useContext","useEffect","useMemo","useRef","RovingFocusContext","RovingFocusProvider","props","activeItemIndexRef","itemRefsRef","updateItemTabIndex","current","index","setActiveItemIndex","valueOrFunction","nextActiveItemIndex","ref","handleFocus","event","target","handleSetNextActive","key","currentIndex","isUnidirectional","isVerticalMove","isHorizontalMove","isForwardMove","direction","itemIndices","_","nextIndex","handleKeyDown","itemEffector","value","useRovingFocusItemRef","itemIndex","rovingFocus_default","hooks","cx","React","memo","useCallback","React","forwardRef","memo","useRef","preventDefaultHandler","event","AccessibleButton","ariaHidden","children","className","dataTestId","disabled","onClick","tabIndex","forwardedRef","targetRef","AccessibleButton_default","classes","SuggestedAction_module_default","_suggested_action0","_suggested_action__image0","classes","useFocus","usePerformCardAction","useScrollToEnd","useStyleSet","useSuggestedActionsHooks","useUIState","hooks","SuggestedAction","buttonText","className","displayText","image","imageAlt","itemIndex","text","type","value","_","setSuggestedActions","suggestedActionStyleSet","uiState","focus","focusRef","useRovingFocusItemRef","performCardAction","classNames","f","SuggestedAction_module_default","scrollToEnd","handleClick","useCallback","target","React","AccessibleButton_default","cx","testIds_default","SuggestedAction_default","memo","classes","SuggestedActions_module_default","_suggested_actions0","_suggested_actions__flow0","classes","_suggested_actions__stacked0","classes","useFocus","useLocalizer","useStyleOptions","useStyleSet","useSuggestedActionsHooks","useUIState","hooks","SuggestedActionStackedOrFlowContainer","props","suggestedActionLayout","suggestedActionsStyleSet","uiState","classNames","f","SuggestedActions_module_default","React","cx","SuggestedActions","localize","suggestedActions","_","activity","focus","handleEscapeKey","useCallback","children","isPreChatMessageActivity","cardAction","index","displayText","image","imageAltText","text","type","value","SuggestedAction_default","computeSuggestedActionText","rovingFocus_default","SuggestedActions_default","memo","React","memo","useMemo","useState","createContext","Context","Context_default","Provider","memo","children","shown","setShown","useState","context","useMemo","React","Context_default","Provider_default","React","memo","Components","cx","React","memo","useCallback","useEffect","useRef","useRefFrom","useContext","useMemo","useShown","setShown","shown","useContext","Context_default","useMemo","React","forwardRef","memo","useCallback","useRefFrom","classes","Button_module_default","_telephone_keypad__button0","_telephone_keypad__horizontal0","classes","_telephone_keypad__button__text0","classes","_telephone_keypad__button__ruby0","classes","Button","memo","forwardRef","button","dataTestId","onClick","ruby","ref","classNames","f","Button_module_default","onClickRef","useRefFrom","handleClick","useCallback","React","Button_default","classes","TelephoneKeypad_module_default","_telephone_keypad__info_message_link0","_telephone_keypad0","classes","_telephone_keypad__box0","classes","_telephone_keypad__info_message0","classes","LocalizedString","Components","Orientation","memo","children","isHorizontal","classNames","f","TelephoneKeypad_module_default","React","TelephoneKeypad","autoFocus","className","onButtonClick","autoFocusRef","useRefFrom","firstButtonRef","useRef","onButtonClickRef","setShown","useShown","handleButton1Click","useCallback","handleButton2Click","handleButton3Click","handleButton4Click","handleButton5Click","handleButton6Click","handleButton7Click","handleButton8Click","handleButton9Click","handleButton0Click","handleButtonStarClick","handleButtonPoundClick","handleKeyDown","event","useEffect","cx","Button_default","testIds_default","FluentIcon_default","TelephoneKeypad_default","TelephoneKeypadSurrogate","memo","props","useShown","React","TelephoneKeypad_default","Surrogate_default","hooks","React","useCallback","useRef","memo","useRefFrom","hooks","cx","React","memo","classes","Toolbar_module_default","_sendbox__toolbar_button0","_sendbox__toolbar_separator0","classes","_sendbox__toolbar_button__selected0","classes","_sendbox__toolbar0","classes","useUIState","hooks","preventDefaultHandler","event","ToolbarButton","memo","props","classNames","f","Toolbar_module_default","uiState","disabled","React","cx","Toolbar","ToolbarSeparator","classes","AddAttachmentButton_module_default","_sendbox__add_attachment_input0","_sendbox__add_attachment0","classes","useLocalizer","useStyleOptions","hooks","AddAttachmentButton","props","inputRef","useRef","classNames","f","AddAttachmentButton_module_default","localize","uploadAccept","uploadMultiple","onFilesAddedRef","useRefFrom","handleClick","useCallback","handleFileChange","files","React","ToolbarButton","testIds_default","FluentIcon_default","AddAttachmentButton_default","memo","useLiveRegion","React","memo","classes","ErrorMessage_module_default","_sendbox__error_message0","ErrorMessage","error","id","classNames","f","ErrorMessage_module_default","useLiveRegion","React","ErrorMessage_default","memo","hooks","useCallback","useMemo","useState","useRefFrom","useConnectivityStatus","useLocalizer","useSubmitError","attachments","message","connectivityStatus","error","setError","localize","submitErrorRef","errorMessageStringMap","hasValue","commitLatestError","useSubmitError_default","useCallback","hooks","useScrollDown","useScrollUp","useTranscriptNavigation","scrollDown","scrollUp","event","ctrlKey","metaKey","shiftKey","handled","useMemo","useUniqueId","prefix","id","classes","SendBox_module_default","_sendbox__sendbox_controls__in_grid0","_variant_copilot0","classes","_sendbox__telephone_keypad__in_grid0","classes","_sendbox__sendbox_text_area0","classes","_sendbox__text_counter__error0","classes","_sendbox__sendbox0","classes","_sendbox__text_counter0","classes","_sendbox__attachment_bar0","classes","_sendbox__text_area__in_grid0","classes","_sendbox__sendbox_controls0","classes","_sendbox0","classes","_sendbox__attachment_bar__in_grid0","classes","React","memo","useCallback","hooks","useLocalizer","hooks","TelephoneKeypadToolbarButton","memo","telephoneKeypadShown","setTelephoneKeypadShown","useShown","localize","handleClick","useCallback","shown","React","ToolbarButton","testIds_default","FluentIcon_default","TelephoneKeypadToolbarButton_default","useFocus","useLocalizer","useMakeThumbnail","useRegisterFocusSendBox","useSendBoxAttachments","useSendBoxValue","useSendMessage","useStyleOptions","useUIState","hooks","AttachmentBar","TextArea","Components","SendBox","props","hideTelephoneKeypadButton","hideUploadButton","maxMessageLength","attachments","setAttachments","globalMessage","setGlobalMessage","localMessage","setLocalMessage","useState","telephoneKeypadShown","useShown","uiState","classNames","f","SendBox_module_default","variantClassName","useVariantClassName","errorMessageId","useUniqueId","inputRef","useRef","localize","makeThumbnail","sendMessage","setFocus","message","setMessage","isBlueprint","errorMessage","commitLatestError","useSubmitError_default","isMessageLengthExceeded","shouldShowMessageLength","shouldShowTelephoneKeypad","useCallback","noKeyboard","waitUntil","previousReadOnly","resolve","attachmentsRef","useRefFrom","messageRef","handleSendBoxClick","event","handleMessageChange","handleAddFiles","inputFiles","newAttachments","file","thumbnailURL","handleFormSubmit","handleTelephoneKeypadButtonClick","dtmf","handleTranscriptNavigation","useTranscriptNavigation","aria","React","cx","testIds_default","SuggestedActions_default","Surrogate_default","Toolbar","TelephoneKeypadToolbarButton_default","AddAttachmentButton_default","ToolbarSeparator","ToolbarButton","FluentIcon_default","DropZone_default","ErrorMessage_default","PrimarySendBox","memo","SendBox_default","createActivityBorderMiddleware","DecoratorComposer","Components","WebChatDecorator","React","memo","cx","React","Fragment","memo","hooks","React","memo","useCallback","useEffect","useRef","useRefFrom","useReactContext","createContext","defaultContextValue","Context","Context_default","useContext","useReactContext","Context_default","useAssetURL","assetName","urlState","useContext","useLocalizer","useShouldReduceMotion","hooks","SlidingDots","className","shouldReduceMotion","url","useAssetURL","localize","objectElementRef","useRef","altText","shouldReduceMotionRef","useRefFrom","pauseAnimations","useCallback","contentDocument","svgElement","SVGSVGElement","unpauseAnimations","pauseOrUnpauseAnimations","useEffect","React","SlidingDots_default","memo","classes","ActivityLoader_module_default","_activity_loader0","_variant_fluent0","classes","FluentActivityLoader","children","classNames","f","ActivityLoader_module_default","variantClassName","useVariantClassName","React","Fragment","SlidingDots_default","cx","ActivityLoader_default","memo","React","memo","useEffect","useMemo","SLIDING_DOTS_SVG_STRING","AssetComposer","memo","children","slidingDotsURL","useMemo","useEffect","context","React","Context_default","AssetComposer_default","isLinerMessageActivity","activity","React","memo","classes","LinerMessageActivity_module_default","_liner_message_activity0","_liner_message_activity__text0","classes","LinerMessageActivity","activity","classNames","f","LinerMessageActivity_module_default","React","LinerActivity_default","memo","React","cx","classes","Theme_module_default","_theme0","_variant_copilot0","classes","rootClassName","Theme","props","classNames","f","Theme_module_default","variantClassName","useVariantClassName","React","cx","testIds","cx","React","memo","classes","SlidingDotsTypingIndicator_module_default","_sliding_dots_typing_indicator__image0","_sliding_dots_typing_indicator0","classes","SlidingDotsTypingIndicator","classNames","f","SlidingDotsTypingIndicator_module_default","React","testIds","SlidingDots_default","cx","SlidingDotsTypingIndicator_default","memo","ThemeProvider","Components","activityMiddleware","next","args","activity","isPreChatMessageActivity","React","PreChatMessageActivity_default","isLinerMessageActivity","LinerActivity_default","renderActivity","ActivityDecorator_default","sendBoxMiddleware","PrimarySendBox","decoratorMiddleware","createActivityBorderMiddleware","request","ActivityLoader_default","styles","createStyles_default","fluentStyleOptions","typingIndicatorMiddleware","SlidingDotsTypingIndicator_default","FluentThemeProvider","children","variant","VariantComposer_default","Theme","Provider_default","AssetComposer_default","WebChatDecorator","DecoratorComposer","FluentThemeProvider_default","memo","buildTool","moduleFormat","version","buildInfo","injectMetaTag"]}
|