botframework-webchat-component 4.18.1-main.20260518.2a3d1d3 → 4.18.2
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-component.d.mts +2312 -64
- package/dist/botframework-webchat-component.internal.d.mts +3 -68
- package/dist/botframework-webchat-component.internal.mjs +2 -1
- package/dist/botframework-webchat-component.internal.mjs.LEGAL.txt +0 -0
- package/dist/botframework-webchat-component.mjs +11 -1
- package/dist/botframework-webchat-component.mjs.LEGAL.txt +0 -0
- package/dist/botframework-webchat-component.mjs.map +1 -1
- package/dist/chunk-X37JABN5.mjs +5 -0
- package/dist/chunk-X37JABN5.mjs.LEGAL.txt +0 -0
- package/dist/chunk-X37JABN5.mjs.map +1 -0
- package/dist/metafile-esm.json +1 -1
- package/internal.js +1 -1
- package/lib/Activity/Avatar.d.ts +10 -0
- package/lib/Activity/Avatar.d.ts.map +1 -0
- package/lib/Activity/Avatar.js +35 -0
- package/lib/Activity/Bubble.d.ts +11 -0
- package/lib/Activity/Bubble.d.ts.map +1 -0
- package/lib/Activity/Bubble.js +137 -0
- package/lib/Activity/CarouselFilmStrip.js +264 -0
- package/lib/Activity/CarouselFilmStripAttachment.js +93 -0
- package/lib/Activity/CarouselLayout.js +133 -0
- package/lib/Activity/SayAlt.js +31 -0
- package/lib/Activity/Speak.d.ts +8 -0
- package/lib/Activity/Speak.d.ts.map +1 -0
- package/lib/Activity/Speak.js +99 -0
- package/lib/Activity/StackedLayout.d.ts +17 -0
- package/lib/Activity/StackedLayout.d.ts.map +1 -0
- package/lib/Activity/StackedLayout.js +233 -0
- package/lib/ActivityStatus/AbsoluteTime.js +38 -0
- package/lib/ActivityStatus/OthersActivityStatus.d.ts +8 -0
- package/lib/ActivityStatus/OthersActivityStatus.d.ts.map +1 -0
- package/lib/ActivityStatus/OthersActivityStatus.js +105 -0
- package/lib/ActivityStatus/SelfActivityStatus.d.ts +8 -0
- package/lib/ActivityStatus/SelfActivityStatus.d.ts.map +1 -0
- package/lib/ActivityStatus/SelfActivityStatus.js +37 -0
- package/lib/ActivityStatus/SendStatus/SendStatus.d.ts +10 -0
- package/lib/ActivityStatus/SendStatus/SendStatus.d.ts.map +1 -0
- package/lib/ActivityStatus/SendStatus/SendStatus.js +58 -0
- package/lib/ActivityStatus/SendStatus/private/SendFailedRetry.js +35 -0
- package/lib/ActivityStatus/Slotted.d.ts +7 -0
- package/lib/ActivityStatus/Slotted.d.ts.map +1 -0
- package/lib/ActivityStatus/Slotted.js +31 -0
- package/lib/ActivityStatus/Timestamp.d.ts +7 -0
- package/lib/ActivityStatus/Timestamp.d.ts.map +1 -0
- package/lib/ActivityStatus/Timestamp.js +36 -0
- package/lib/ActivityStatus/private/Feedback/Feedback.d.ts +8 -0
- package/lib/ActivityStatus/private/Feedback/Feedback.d.ts.map +1 -0
- package/lib/ActivityStatus/private/Feedback/Feedback.js +67 -0
- package/lib/ActivityStatus/private/Feedback/private/ThumbButton.Image.d.ts +9 -0
- package/lib/ActivityStatus/private/Feedback/private/ThumbButton.Image.d.ts.map +1 -0
- package/lib/ActivityStatus/private/Feedback/private/ThumbButton.Image.js +34 -0
- package/lib/ActivityStatus/private/Feedback/private/ThumbButton.d.ts +9 -0
- package/lib/ActivityStatus/private/Feedback/private/ThumbButton.d.ts.map +1 -0
- package/lib/ActivityStatus/private/Feedback/private/ThumbButton.js +57 -0
- package/lib/ActivityStatus/private/Feedback/private/VoteButton.d.ts +10 -0
- package/lib/ActivityStatus/private/Feedback/private/VoteButton.d.ts.map +1 -0
- package/lib/ActivityStatus/private/Feedback/private/VoteButton.js +43 -0
- package/lib/ActivityStatus/private/Feedback/private/icons/ThumbDislike16Filled.d.ts +7 -0
- package/lib/ActivityStatus/private/Feedback/private/icons/ThumbDislike16Filled.d.ts.map +1 -0
- package/lib/ActivityStatus/private/Feedback/private/icons/ThumbDislike16Filled.js +28 -0
- package/lib/ActivityStatus/private/Feedback/private/icons/ThumbDislike16Regular.d.ts +7 -0
- package/lib/ActivityStatus/private/Feedback/private/icons/ThumbDislike16Regular.d.ts.map +1 -0
- package/lib/ActivityStatus/private/Feedback/private/icons/ThumbDislike16Regular.js +28 -0
- package/lib/ActivityStatus/private/Feedback/private/icons/ThumbLike16Filled.d.ts +7 -0
- package/lib/ActivityStatus/private/Feedback/private/icons/ThumbLike16Filled.d.ts.map +1 -0
- package/lib/ActivityStatus/private/Feedback/private/icons/ThumbLike16Filled.js +28 -0
- package/lib/ActivityStatus/private/Feedback/private/icons/ThumbLike16Regular.d.ts +7 -0
- package/lib/ActivityStatus/private/Feedback/private/icons/ThumbLike16Regular.d.ts.map +1 -0
- package/lib/ActivityStatus/private/Feedback/private/icons/ThumbLike16Regular.js +28 -0
- package/lib/ActivityStatus/private/Originator.d.ts +8 -0
- package/lib/ActivityStatus/private/Originator.d.ts.map +1 -0
- package/lib/ActivityStatus/private/Originator.js +29 -0
- package/lib/ActivityStatus/private/RelativeTime.js +37 -0
- package/lib/Assets/TypingAnimation.js +47 -0
- package/lib/Attachment/Assets/DownloadIcon.js +35 -0
- package/lib/Attachment/AudioAttachment.js +38 -0
- package/lib/Attachment/AudioContent.d.ts +11 -0
- package/lib/Attachment/AudioContent.d.ts.map +1 -0
- package/lib/Attachment/AudioContent.js +51 -0
- package/lib/Attachment/FileAttachment.js +43 -0
- package/lib/Attachment/FileContent.d.ts +10 -0
- package/lib/Attachment/FileContent.d.ts.map +1 -0
- package/lib/Attachment/FileContent.js +120 -0
- package/lib/Attachment/HTMLVideoContent.d.ts +11 -0
- package/lib/Attachment/HTMLVideoContent.d.ts.map +1 -0
- package/lib/Attachment/HTMLVideoContent.js +51 -0
- package/lib/Attachment/ImageAttachment.js +41 -0
- package/lib/Attachment/ImageContent.d.ts +8 -0
- package/lib/Attachment/ImageContent.d.ts.map +1 -0
- package/lib/Attachment/ImageContent.js +41 -0
- package/lib/Attachment/Text/TextAttachment.d.ts +12 -0
- package/lib/Attachment/Text/TextAttachment.d.ts.map +1 -0
- package/lib/Attachment/Text/TextAttachment.js +27 -0
- package/lib/Attachment/Text/TextContent.d.ts +10 -0
- package/lib/Attachment/Text/TextContent.d.ts.map +1 -0
- package/lib/Attachment/Text/TextContent.js +34 -0
- package/lib/Attachment/Text/private/CitationModalContent.d.ts +8 -0
- package/lib/Attachment/Text/private/CitationModalContent.d.ts.map +1 -0
- package/lib/Attachment/Text/private/CitationModalContent.js +45 -0
- package/lib/Attachment/Text/private/MarkdownTextContent.d.ts +9 -0
- package/lib/Attachment/Text/private/MarkdownTextContent.d.ts.map +1 -0
- package/lib/Attachment/Text/private/MarkdownTextContent.js +204 -0
- package/lib/Attachment/Text/private/MessageSensitivityLabel.d.ts +12 -0
- package/lib/Attachment/Text/private/MessageSensitivityLabel.d.ts.map +1 -0
- package/lib/Attachment/Text/private/MessageSensitivityLabel.js +38 -0
- package/lib/Attachment/Text/private/PlainTextContent.d.ts +7 -0
- package/lib/Attachment/Text/private/PlainTextContent.d.ts.map +1 -0
- package/lib/Attachment/Text/private/PlainTextContent.js +35 -0
- package/lib/Attachment/Text/private/ShieldIcon.d.ts +9 -0
- package/lib/Attachment/Text/private/ShieldIcon.d.ts.map +1 -0
- package/lib/Attachment/Text/private/ShieldIcon.js +39 -0
- package/lib/Attachment/Text/private/isHTMLButtonElement.d.ts +2 -0
- package/lib/Attachment/Text/private/isHTMLButtonElement.d.ts.map +1 -0
- package/lib/Attachment/Text/private/isHTMLButtonElement.js +10 -0
- package/lib/Attachment/VideoAttachment.js +45 -0
- package/lib/Attachment/VideoContent.d.ts +11 -0
- package/lib/Attachment/VideoContent.d.ts.map +1 -0
- package/lib/Attachment/VideoContent.js +103 -0
- package/lib/Attachment/VimeoContent.d.ts +10 -0
- package/lib/Attachment/VimeoContent.d.ts.map +1 -0
- package/lib/Attachment/VimeoContent.js +59 -0
- package/lib/Attachment/YouTubeContent.d.ts +10 -0
- package/lib/Attachment/YouTubeContent.d.ts.map +1 -0
- package/lib/Attachment/YouTubeContent.js +60 -0
- package/lib/Attachment/createMiddleware.d.ts +3 -0
- package/lib/Attachment/createMiddleware.d.ts.map +1 -0
- package/lib/Attachment/createMiddleware.js +64 -0
- package/lib/Attachment/private/types/WebChatAttachment.d.ts +9 -0
- package/lib/Attachment/private/types/WebChatAttachment.d.ts.map +1 -0
- package/lib/Attachment/private/types/WebChatAttachment.js +2 -0
- package/lib/Avatar/ImageAvatar.js +59 -0
- package/lib/Avatar/InitialsAvatar.js +57 -0
- package/lib/BasicConnectivityStatus.js +46 -0
- package/lib/BasicToast.js +103 -0
- package/lib/BasicToaster.js +176 -0
- package/lib/BasicTranscript.d.ts +7 -0
- package/lib/BasicTranscript.d.ts.map +1 -0
- package/lib/BasicTranscript.js +735 -0
- package/lib/BasicTypingIndicator.d.ts +6 -0
- package/lib/BasicTypingIndicator.d.ts.map +1 -0
- package/lib/BasicTypingIndicator.js +54 -0
- package/lib/BasicWebChat.d.ts +9 -0
- package/lib/BasicWebChat.d.ts.map +1 -0
- package/lib/BasicWebChat.js +90 -0
- package/lib/Composer.d.ts +50 -0
- package/lib/Composer.d.ts.map +1 -0
- package/lib/Composer.js +336 -0
- package/lib/ConnectivityStatus/Assets/ErrorNotificationIcon.js +47 -0
- package/lib/ConnectivityStatus/Assets/SpinnerAnimation.js +32 -0
- package/lib/ConnectivityStatus/Assets/WarningNotificationIcon.js +47 -0
- package/lib/ConnectivityStatus/Connected.js +20 -0
- package/lib/ConnectivityStatus/Connecting.js +82 -0
- package/lib/ConnectivityStatus/FailedToConnect.js +41 -0
- package/lib/ConnectivityStatus/JavaScriptError.js +41 -0
- package/lib/Dictation.js +158 -0
- package/lib/ErrorBox.d.ts +8 -0
- package/lib/ErrorBox.d.ts.map +1 -0
- package/lib/ErrorBox.js +42 -0
- package/lib/LinkDefinition/LinkDefinitionItem.d.ts +12 -0
- package/lib/LinkDefinition/LinkDefinitionItem.d.ts.map +1 -0
- package/lib/LinkDefinition/LinkDefinitionItem.js +57 -0
- package/lib/LinkDefinition/LinkDefinitions.d.ts +12 -0
- package/lib/LinkDefinition/LinkDefinitions.d.ts.map +1 -0
- package/lib/LinkDefinition/LinkDefinitions.js +69 -0
- package/lib/LinkDefinition/index.d.ts +4 -0
- package/lib/LinkDefinition/index.d.ts.map +1 -0
- package/lib/LinkDefinition/index.js +21 -0
- package/lib/LinkDefinition/private/Badge.d.ts +7 -0
- package/lib/LinkDefinition/private/Badge.d.ts.map +1 -0
- package/lib/LinkDefinition/private/Badge.js +20 -0
- package/lib/LinkDefinition/private/Chevron.d.ts +4 -0
- package/lib/LinkDefinition/private/Chevron.d.ts.map +1 -0
- package/lib/LinkDefinition/private/Chevron.js +27 -0
- package/lib/LinkDefinition/private/ItemBody.d.ts +11 -0
- package/lib/LinkDefinition/private/ItemBody.d.ts.map +1 -0
- package/lib/LinkDefinition/private/ItemBody.js +41 -0
- package/lib/LinkDefinition/private/OpenInNewWindowIcon.d.ts +7 -0
- package/lib/LinkDefinition/private/OpenInNewWindowIcon.d.ts.map +1 -0
- package/lib/LinkDefinition/private/OpenInNewWindowIcon.js +23 -0
- package/lib/LinkDefinition/private/extractHostnameWithSubdomain.d.ts +2 -0
- package/lib/LinkDefinition/private/extractHostnameWithSubdomain.d.ts.map +1 -0
- package/lib/LinkDefinition/private/extractHostnameWithSubdomain.js +24 -0
- package/lib/LinkDefinition/private/extractHostnameWithSubdomain.spec.d.ts +2 -0
- package/lib/LinkDefinition/private/extractHostnameWithSubdomain.spec.d.ts.map +1 -0
- package/lib/LiveRegion/LiveRegionActivity.d.ts +9 -0
- package/lib/LiveRegion/LiveRegionActivity.d.ts.map +1 -0
- package/lib/LiveRegion/LiveRegionActivity.js +70 -0
- package/lib/LiveRegion/private/LiveRegionAttachments.d.ts +11 -0
- package/lib/LiveRegion/private/LiveRegionAttachments.d.ts.map +1 -0
- package/lib/LiveRegion/private/LiveRegionAttachments.js +53 -0
- package/lib/LiveRegion/private/LiveRegionSuggestedActions.d.ts +8 -0
- package/lib/LiveRegion/private/LiveRegionSuggestedActions.d.ts.map +1 -0
- package/lib/LiveRegion/private/LiveRegionSuggestedActions.js +37 -0
- package/lib/Middleware/Activity/createCoreMiddleware.d.ts +3 -0
- package/lib/Middleware/Activity/createCoreMiddleware.d.ts.map +1 -0
- package/lib/Middleware/Activity/createCoreMiddleware.js +95 -0
- package/lib/Middleware/ActivityStatus/createCoreMiddleware.d.ts +3 -0
- package/lib/Middleware/ActivityStatus/createCoreMiddleware.d.ts.map +1 -0
- package/lib/Middleware/ActivityStatus/createCoreMiddleware.js +13 -0
- package/lib/Middleware/ActivityStatus/createSendStatusMiddleware.d.ts +3 -0
- package/lib/Middleware/ActivityStatus/createSendStatusMiddleware.d.ts.map +1 -0
- package/lib/Middleware/ActivityStatus/createSendStatusMiddleware.js +41 -0
- package/lib/Middleware/ActivityStatus/createTimestampMiddleware.d.ts +3 -0
- package/lib/Middleware/ActivityStatus/createTimestampMiddleware.d.ts.map +1 -0
- package/lib/Middleware/ActivityStatus/createTimestampMiddleware.js +48 -0
- package/lib/Middleware/AttachmentForScreenReader/AudioAttachment.js +18 -0
- package/lib/Middleware/AttachmentForScreenReader/FileAttachment.js +28 -0
- package/lib/Middleware/AttachmentForScreenReader/ImageAttachment.js +18 -0
- package/lib/Middleware/AttachmentForScreenReader/TextAttachment.js +28 -0
- package/lib/Middleware/AttachmentForScreenReader/VideoAttachment.js +18 -0
- package/lib/Middleware/AttachmentForScreenReader/createCoreMiddleware.d.ts +3 -0
- package/lib/Middleware/AttachmentForScreenReader/createCoreMiddleware.d.ts.map +1 -0
- package/lib/Middleware/AttachmentForScreenReader/createCoreMiddleware.js +61 -0
- package/lib/Middleware/Avatar/createCoreMiddleware.d.ts +11 -0
- package/lib/Middleware/Avatar/createCoreMiddleware.d.ts.map +1 -0
- package/lib/Middleware/Avatar/createCoreMiddleware.js +82 -0
- package/lib/Middleware/CardAction/createCoreMiddleware.js +108 -0
- package/lib/Middleware/ScrollToEndButton/ScrollToEndButton.js +52 -0
- package/lib/Middleware/ScrollToEndButton/createScrollToEndButtonMiddleware.d.ts +3 -0
- package/lib/Middleware/ScrollToEndButton/createScrollToEndButtonMiddleware.d.ts.map +1 -0
- package/lib/Middleware/ScrollToEndButton/createScrollToEndButtonMiddleware.js +27 -0
- package/lib/Middleware/Toast/createCoreMiddleware.d.ts +4 -0
- package/lib/Middleware/Toast/createCoreMiddleware.d.ts.map +1 -0
- package/lib/Middleware/Toast/createCoreMiddleware.js +27 -0
- package/lib/Middleware/TypingIndicator/createCoreMiddleware.d.ts +3 -0
- package/lib/Middleware/TypingIndicator/createCoreMiddleware.d.ts.map +1 -0
- package/lib/Middleware/TypingIndicator/createCoreMiddleware.js +47 -0
- package/lib/ReactWebChat.d.ts +42 -0
- package/lib/ReactWebChat.d.ts.map +1 -0
- package/lib/ReactWebChat.js +52 -0
- package/lib/ScreenReaderText.d.ts +9 -0
- package/lib/ScreenReaderText.d.ts.map +1 -0
- package/lib/ScreenReaderText.js +58 -0
- package/lib/SendBox/Assets/MicrophoneIcon.js +25 -0
- package/lib/SendBox/Assets/SendIcon.js +45 -0
- package/lib/SendBox/AutoResizeTextArea.d.ts +24 -0
- package/lib/SendBox/AutoResizeTextArea.d.ts.map +1 -0
- package/lib/SendBox/AutoResizeTextArea.js +113 -0
- package/lib/SendBox/BasicSendBox.d.ts +9 -0
- package/lib/SendBox/BasicSendBox.d.ts.map +1 -0
- package/lib/SendBox/BasicSendBox.js +123 -0
- package/lib/SendBox/DictationInterims.d.ts +7 -0
- package/lib/SendBox/DictationInterims.d.ts.map +1 -0
- package/lib/SendBox/DictationInterims.js +68 -0
- package/lib/SendBox/IconButton.d.ts +11 -0
- package/lib/SendBox/IconButton.d.ts.map +1 -0
- package/lib/SendBox/IconButton.js +73 -0
- package/lib/SendBox/MicrophoneButton.d.ts +10 -0
- package/lib/SendBox/MicrophoneButton.d.ts.map +1 -0
- package/lib/SendBox/MicrophoneButton.js +160 -0
- package/lib/SendBox/SendButton.d.ts +7 -0
- package/lib/SendBox/SendButton.d.ts.map +1 -0
- package/lib/SendBox/SendButton.js +53 -0
- package/lib/SendBox/SuggestedAction.d.ts +16 -0
- package/lib/SendBox/SuggestedAction.d.ts.map +1 -0
- package/lib/SendBox/SuggestedAction.js +166 -0
- package/lib/SendBox/SuggestedActions.d.ts +7 -0
- package/lib/SendBox/SuggestedActions.d.ts.map +1 -0
- package/lib/SendBox/SuggestedActions.js +256 -0
- package/lib/SendBox/TextBox.d.ts +24 -0
- package/lib/SendBox/TextBox.d.ts.map +1 -0
- package/lib/SendBox/TextBox.js +252 -0
- package/lib/SendBox/createMiddleware.d.ts +4 -0
- package/lib/SendBox/createMiddleware.d.ts.map +1 -0
- package/lib/SendBox/createMiddleware.js +38 -0
- package/lib/SendBoxToolbar/Assets/AttachmentIcon.d.ts +7 -0
- package/lib/SendBoxToolbar/Assets/AttachmentIcon.d.ts.map +1 -0
- package/lib/SendBoxToolbar/Assets/AttachmentIcon.js +63 -0
- package/lib/SendBoxToolbar/BasicSendBoxToolbar.d.ts +6 -0
- package/lib/SendBoxToolbar/BasicSendBoxToolbar.d.ts.map +1 -0
- package/lib/SendBoxToolbar/BasicSendBoxToolbar.js +32 -0
- package/lib/SendBoxToolbar/UploadButton.d.ts +7 -0
- package/lib/SendBoxToolbar/UploadButton.d.ts.map +1 -0
- package/lib/SendBoxToolbar/UploadButton.js +156 -0
- package/lib/SendBoxToolbar/createMiddleware.d.ts +4 -0
- package/lib/SendBoxToolbar/createMiddleware.d.ts.map +1 -0
- package/lib/SendBoxToolbar/createMiddleware.js +20 -0
- package/lib/Styles/CSSTokens.d.ts +16 -0
- package/lib/Styles/CSSTokens.d.ts.map +1 -0
- package/lib/Styles/CSSTokens.js +19 -0
- package/lib/Styles/CustomPropertyNames.d.ts +13 -0
- package/lib/Styles/CustomPropertyNames.d.ts.map +1 -0
- package/lib/Styles/CustomPropertyNames.js +24 -0
- package/lib/Styles/StyleSet/Activities.d.ts +5 -0
- package/lib/Styles/StyleSet/Activities.d.ts.map +1 -0
- package/lib/Styles/StyleSet/Activities.js +13 -0
- package/lib/Styles/StyleSet/AudioAttachment.d.ts +6 -0
- package/lib/Styles/StyleSet/AudioAttachment.d.ts.map +1 -0
- package/lib/Styles/StyleSet/AudioAttachment.js +15 -0
- package/lib/Styles/StyleSet/AudioContent.d.ts +4 -0
- package/lib/Styles/StyleSet/AudioContent.d.ts.map +1 -0
- package/lib/Styles/StyleSet/AudioContent.js +12 -0
- package/lib/Styles/StyleSet/AutoResizeTextArea.d.ts +37 -0
- package/lib/Styles/StyleSet/AutoResizeTextArea.d.ts.map +1 -0
- package/lib/Styles/StyleSet/AutoResizeTextArea.js +45 -0
- package/lib/Styles/StyleSet/Avatar.d.ts +9 -0
- package/lib/Styles/StyleSet/Avatar.d.ts.map +1 -0
- package/lib/Styles/StyleSet/Avatar.js +18 -0
- package/lib/Styles/StyleSet/BasicTranscript.d.ts +85 -0
- package/lib/Styles/StyleSet/BasicTranscript.d.ts.map +1 -0
- package/lib/Styles/StyleSet/BasicTranscript.js +110 -0
- package/lib/Styles/StyleSet/Bubble.d.ts +5 -0
- package/lib/Styles/StyleSet/Bubble.d.ts.map +1 -0
- package/lib/Styles/StyleSet/Bubble.js +153 -0
- package/lib/Styles/StyleSet/CSSCustomProperties.d.ts +16 -0
- package/lib/Styles/StyleSet/CSSCustomProperties.d.ts.map +1 -0
- package/lib/Styles/StyleSet/CSSCustomProperties.js +27 -0
- package/lib/Styles/StyleSet/CarouselFilmStrip.d.ts +5 -0
- package/lib/Styles/StyleSet/CarouselFilmStrip.d.ts.map +1 -0
- package/lib/Styles/StyleSet/CarouselFilmStrip.js +90 -0
- package/lib/Styles/StyleSet/CarouselFilmStripAttachment.d.ts +3 -0
- package/lib/Styles/StyleSet/CarouselFilmStripAttachment.d.ts.map +1 -0
- package/lib/Styles/StyleSet/CarouselFilmStripAttachment.js +57 -0
- package/lib/Styles/StyleSet/CarouselFlipper.d.ts +27 -0
- package/lib/Styles/StyleSet/CarouselFlipper.d.ts.map +1 -0
- package/lib/Styles/StyleSet/CarouselFlipper.js +42 -0
- package/lib/Styles/StyleSet/CitationModalDialog.d.ts +8 -0
- package/lib/Styles/StyleSet/CitationModalDialog.d.ts.map +1 -0
- package/lib/Styles/StyleSet/CitationModalDialog.js +16 -0
- package/lib/Styles/StyleSet/ConnectivityNotification.d.ts +13 -0
- package/lib/Styles/StyleSet/ConnectivityNotification.d.ts.map +1 -0
- package/lib/Styles/StyleSet/ConnectivityNotification.js +26 -0
- package/lib/Styles/StyleSet/Constants.d.ts +6 -0
- package/lib/Styles/StyleSet/Constants.d.ts.map +1 -0
- package/lib/Styles/StyleSet/Constants.js +15 -0
- package/lib/Styles/StyleSet/DictationInterims.d.ts +13 -0
- package/lib/Styles/StyleSet/DictationInterims.d.ts.map +1 -0
- package/lib/Styles/StyleSet/DictationInterims.js +22 -0
- package/lib/Styles/StyleSet/ErrorBox.d.ts +33 -0
- package/lib/Styles/StyleSet/ErrorBox.d.ts.map +1 -0
- package/lib/Styles/StyleSet/ErrorBox.js +43 -0
- package/lib/Styles/StyleSet/ErrorNotification.d.ts +23 -0
- package/lib/Styles/StyleSet/ErrorNotification.d.ts.map +1 -0
- package/lib/Styles/StyleSet/ErrorNotification.js +36 -0
- package/lib/Styles/StyleSet/FileContent.d.ts +32 -0
- package/lib/Styles/StyleSet/FileContent.d.ts.map +1 -0
- package/lib/Styles/StyleSet/FileContent.js +43 -0
- package/lib/Styles/StyleSet/ImageAvatar.d.ts +7 -0
- package/lib/Styles/StyleSet/ImageAvatar.d.ts.map +1 -0
- package/lib/Styles/StyleSet/ImageAvatar.js +15 -0
- package/lib/Styles/StyleSet/InitialsAvatar.d.ts +19 -0
- package/lib/Styles/StyleSet/InitialsAvatar.d.ts.map +1 -0
- package/lib/Styles/StyleSet/InitialsAvatar.js +31 -0
- package/lib/Styles/StyleSet/KeyboardHelp.d.ts +152 -0
- package/lib/Styles/StyleSet/KeyboardHelp.d.ts.map +1 -0
- package/lib/Styles/StyleSet/KeyboardHelp.js +168 -0
- package/lib/Styles/StyleSet/LinkDefinitions.d.ts +165 -0
- package/lib/Styles/StyleSet/LinkDefinitions.d.ts.map +1 -0
- package/lib/Styles/StyleSet/LinkDefinitions.js +180 -0
- package/lib/Styles/StyleSet/MicrophoneButton.d.ts +13 -0
- package/lib/Styles/StyleSet/MicrophoneButton.d.ts.map +1 -0
- package/lib/Styles/StyleSet/MicrophoneButton.js +21 -0
- package/lib/Styles/StyleSet/ModalDialog.d.ts +94 -0
- package/lib/Styles/StyleSet/ModalDialog.d.ts.map +1 -0
- package/lib/Styles/StyleSet/ModalDialog.js +98 -0
- package/lib/Styles/StyleSet/RenderMarkdown.d.ts +51 -0
- package/lib/Styles/StyleSet/RenderMarkdown.d.ts.map +1 -0
- package/lib/Styles/StyleSet/RenderMarkdown.js +67 -0
- package/lib/Styles/StyleSet/Root.d.ts +8 -0
- package/lib/Styles/StyleSet/Root.d.ts.map +1 -0
- package/lib/Styles/StyleSet/Root.js +19 -0
- package/lib/Styles/StyleSet/ScrollToEndButton.d.ts +36 -0
- package/lib/Styles/StyleSet/ScrollToEndButton.d.ts.map +1 -0
- package/lib/Styles/StyleSet/ScrollToEndButton.js +55 -0
- package/lib/Styles/StyleSet/SendBox.d.ts +24 -0
- package/lib/Styles/StyleSet/SendBox.d.ts.map +1 -0
- package/lib/Styles/StyleSet/SendBox.js +37 -0
- package/lib/Styles/StyleSet/SendBoxButton.d.ts +79 -0
- package/lib/Styles/StyleSet/SendBoxButton.d.ts.map +1 -0
- package/lib/Styles/StyleSet/SendBoxButton.js +112 -0
- package/lib/Styles/StyleSet/SendBoxTextBox.d.ts +41 -0
- package/lib/Styles/StyleSet/SendBoxTextBox.d.ts.map +1 -0
- package/lib/Styles/StyleSet/SendBoxTextBox.js +57 -0
- package/lib/Styles/StyleSet/SendStatus.d.ts +19 -0
- package/lib/Styles/StyleSet/SendStatus.d.ts.map +1 -0
- package/lib/Styles/StyleSet/SendStatus.js +29 -0
- package/lib/Styles/StyleSet/SingleAttachmentActivity.d.ts +11 -0
- package/lib/Styles/StyleSet/SingleAttachmentActivity.d.ts.map +1 -0
- package/lib/Styles/StyleSet/SingleAttachmentActivity.js +21 -0
- package/lib/Styles/StyleSet/SlottedActivityStatus.d.ts +12 -0
- package/lib/Styles/StyleSet/SlottedActivityStatus.d.ts.map +1 -0
- package/lib/Styles/StyleSet/SlottedActivityStatus.js +22 -0
- package/lib/Styles/StyleSet/SpinnerAnimation.d.ts +15 -0
- package/lib/Styles/StyleSet/SpinnerAnimation.d.ts.map +1 -0
- package/lib/Styles/StyleSet/SpinnerAnimation.js +34 -0
- package/lib/Styles/StyleSet/StackedLayout.d.ts +63 -0
- package/lib/Styles/StyleSet/StackedLayout.d.ts.map +1 -0
- package/lib/Styles/StyleSet/StackedLayout.js +77 -0
- package/lib/Styles/StyleSet/SuggestedAction.d.ts +94 -0
- package/lib/Styles/StyleSet/SuggestedAction.d.ts.map +1 -0
- package/lib/Styles/StyleSet/SuggestedAction.js +152 -0
- package/lib/Styles/StyleSet/SuggestedActions.d.ts +139 -0
- package/lib/Styles/StyleSet/SuggestedActions.d.ts.map +1 -0
- package/lib/Styles/StyleSet/SuggestedActions.js +165 -0
- package/lib/Styles/StyleSet/TextContent.d.ts +24 -0
- package/lib/Styles/StyleSet/TextContent.d.ts.map +1 -0
- package/lib/Styles/StyleSet/TextContent.js +34 -0
- package/lib/Styles/StyleSet/ThumbButton.d.ts +32 -0
- package/lib/Styles/StyleSet/ThumbButton.d.ts.map +1 -0
- package/lib/Styles/StyleSet/ThumbButton.js +44 -0
- package/lib/Styles/StyleSet/Toast.d.ts +65 -0
- package/lib/Styles/StyleSet/Toast.d.ts.map +1 -0
- package/lib/Styles/StyleSet/Toast.js +83 -0
- package/lib/Styles/StyleSet/Toaster.d.ts +111 -0
- package/lib/Styles/StyleSet/Toaster.d.ts.map +1 -0
- package/lib/Styles/StyleSet/Toaster.js +137 -0
- package/lib/Styles/StyleSet/TypingAnimation.d.ts +8 -0
- package/lib/Styles/StyleSet/TypingAnimation.d.ts.map +1 -0
- package/lib/Styles/StyleSet/TypingAnimation.js +26 -0
- package/lib/Styles/StyleSet/TypingIndicator.d.ts +11 -0
- package/lib/Styles/StyleSet/TypingIndicator.d.ts.map +1 -0
- package/lib/Styles/StyleSet/TypingIndicator.js +19 -0
- package/lib/Styles/StyleSet/UploadButton.d.ts +14 -0
- package/lib/Styles/StyleSet/UploadButton.d.ts.map +1 -0
- package/lib/Styles/StyleSet/UploadButton.js +27 -0
- package/lib/Styles/StyleSet/VideoAttachment.d.ts +2 -0
- package/lib/Styles/StyleSet/VideoAttachment.d.ts.map +1 -0
- package/lib/Styles/StyleSet/VideoAttachment.js +10 -0
- package/lib/Styles/StyleSet/VideoContent.d.ts +6 -0
- package/lib/Styles/StyleSet/VideoContent.d.ts.map +1 -0
- package/lib/Styles/StyleSet/VideoContent.js +14 -0
- package/lib/Styles/StyleSet/VimeoContent.d.ts +7 -0
- package/lib/Styles/StyleSet/VimeoContent.d.ts.map +1 -0
- package/lib/Styles/StyleSet/VimeoContent.js +15 -0
- package/lib/Styles/StyleSet/WarningNotification.d.ts +22 -0
- package/lib/Styles/StyleSet/WarningNotification.d.ts.map +1 -0
- package/lib/Styles/StyleSet/WarningNotification.js +37 -0
- package/lib/Styles/StyleSet/YouTubeContent.d.ts +7 -0
- package/lib/Styles/StyleSet/YouTubeContent.d.ts.map +1 -0
- package/lib/Styles/StyleSet/YouTubeContent.js +15 -0
- package/lib/Styles/createStyleSet.d.ts +1803 -0
- package/lib/Styles/createStyleSet.d.ts.map +1 -0
- package/lib/Styles/createStyleSet.js +121 -0
- package/lib/Styles/mirrorStyle.js +40 -0
- package/lib/Toast/CheckMarkIcon.js +36 -0
- package/lib/Toast/CollapseIcon.js +32 -0
- package/lib/Toast/DismissIcon.js +32 -0
- package/lib/Toast/ExclamationMarkIcon.js +34 -0
- package/lib/Toast/ExpandIcon.js +32 -0
- package/lib/Toast/NotificationIcon.js +46 -0
- package/lib/Toast/createToastMiddleware.d.ts +4 -0
- package/lib/Toast/createToastMiddleware.d.ts.map +1 -0
- package/lib/Toast/createToastMiddleware.js +26 -0
- package/lib/Transcript/ActivityRow.d.ts +9 -0
- package/lib/Transcript/ActivityRow.d.ts.map +1 -0
- package/lib/Transcript/ActivityRow.js +137 -0
- package/lib/Transcript/FocusTrap.d.ts +9 -0
- package/lib/Transcript/FocusTrap.d.ts.map +1 -0
- package/lib/Transcript/FocusTrap.js +76 -0
- package/lib/Transcript/KeyboardHelp.d.ts +4 -0
- package/lib/Transcript/KeyboardHelp.d.ts.map +1 -0
- package/lib/Transcript/KeyboardHelp.js +562 -0
- package/lib/Transcript/LiveRegion/SendFailed.d.ts +14 -0
- package/lib/Transcript/LiveRegion/SendFailed.d.ts.map +1 -0
- package/lib/Transcript/LiveRegion/SendFailed.js +90 -0
- package/lib/Transcript/LiveRegion/isPresentational.d.ts +9 -0
- package/lib/Transcript/LiveRegion/isPresentational.d.ts.map +1 -0
- package/lib/Transcript/LiveRegion/isPresentational.js +30 -0
- package/lib/Transcript/LiveRegionTranscript.d.ts +8 -0
- package/lib/Transcript/LiveRegionTranscript.d.ts.map +1 -0
- package/lib/Transcript/LiveRegionTranscript.js +178 -0
- package/lib/Transcript/types.d.ts +2 -0
- package/lib/Transcript/types.d.ts.map +1 -0
- package/lib/Transcript/types.js +2 -0
- package/lib/Transcript/useActivityAccessibleName.d.ts +11 -0
- package/lib/Transcript/useActivityAccessibleName.d.ts.map +1 -0
- package/lib/Transcript/useActivityAccessibleName.js +103 -0
- package/lib/Transcript/useTypistNames.d.ts +3 -0
- package/lib/Transcript/useTypistNames.d.ts.map +1 -0
- package/lib/Transcript/useTypistNames.js +50 -0
- package/lib/TranscriptActivity.d.ts +17 -0
- package/lib/TranscriptActivity.d.ts.map +1 -0
- package/lib/TranscriptActivity.js +48 -0
- package/lib/Utils/AccessKeySink/Surface.js +74 -0
- package/lib/Utils/AccessKeySink/internal/Context.js +11 -0
- package/lib/Utils/AccessKeySink/internal/useContext.js +13 -0
- package/lib/Utils/AccessKeySink/useFocusAccessKeyEffect.js +34 -0
- package/lib/Utils/AccessibleButton.d.ts +11 -0
- package/lib/Utils/AccessibleButton.d.ts.map +1 -0
- package/lib/Utils/AccessibleButton.js +78 -0
- package/lib/Utils/AccessibleInputText.d.ts +22 -0
- package/lib/Utils/AccessibleInputText.d.ts.map +1 -0
- package/lib/Utils/AccessibleInputText.js +114 -0
- package/lib/Utils/AccessibleTextArea.d.ts +20 -0
- package/lib/Utils/AccessibleTextArea.d.ts.map +1 -0
- package/lib/Utils/AccessibleTextArea.js +105 -0
- package/lib/Utils/CroppedImage.js +61 -0
- package/lib/Utils/FocusRedirector.d.ts +9 -0
- package/lib/Utils/FocusRedirector.d.ts.map +1 -0
- package/lib/Utils/FocusRedirector.js +61 -0
- package/lib/Utils/InlineMarkdown.js +166 -0
- package/lib/Utils/JSONLinkedData/BlankNode.d.ts +15 -0
- package/lib/Utils/JSONLinkedData/BlankNode.d.ts.map +1 -0
- package/lib/Utils/JSONLinkedData/BlankNode.js +2 -0
- package/lib/Utils/JSONLinkedData/__snapshots__/dereferenceBlankNodes.spec.ts.snap +92 -0
- package/lib/Utils/JSONLinkedData/dereferenceBlankNodes.d.ts +16 -0
- package/lib/Utils/JSONLinkedData/dereferenceBlankNodes.d.ts.map +1 -0
- package/lib/Utils/JSONLinkedData/dereferenceBlankNodes.js +96 -0
- package/lib/Utils/JSONLinkedData/dereferenceBlankNodes.spec.d.ts +2 -0
- package/lib/Utils/JSONLinkedData/dereferenceBlankNodes.spec.d.ts.map +1 -0
- package/lib/Utils/JSONLinkedData/getSafeOwnPropertyNames.d.ts +10 -0
- package/lib/Utils/JSONLinkedData/getSafeOwnPropertyNames.d.ts.map +1 -0
- package/lib/Utils/JSONLinkedData/getSafeOwnPropertyNames.js +22 -0
- package/lib/Utils/JSONLinkedData/isBlankNode.d.ts +10 -0
- package/lib/Utils/JSONLinkedData/isBlankNode.d.ts.map +1 -0
- package/lib/Utils/JSONLinkedData/isBlankNode.js +22 -0
- package/lib/Utils/JSONLinkedData/isBlankNode.spec.d.ts +2 -0
- package/lib/Utils/JSONLinkedData/isBlankNode.spec.d.ts.map +1 -0
- package/lib/Utils/JSONLinkedData/isUnconnectedBlankNode.d.ts +10 -0
- package/lib/Utils/JSONLinkedData/isUnconnectedBlankNode.d.ts.map +1 -0
- package/lib/Utils/JSONLinkedData/isUnconnectedBlankNode.js +21 -0
- package/lib/Utils/JSONLinkedData/isUnconnectedBlankNode.spec.d.ts +2 -0
- package/lib/Utils/JSONLinkedData/isUnconnectedBlankNode.spec.d.ts.map +1 -0
- package/lib/Utils/JSONLinkedData/visitOnce.d.ts +2 -0
- package/lib/Utils/JSONLinkedData/visitOnce.d.ts.map +1 -0
- package/lib/Utils/JSONLinkedData/visitOnce.js +17 -0
- package/lib/Utils/LocalizedString.d.ts +26 -0
- package/lib/Utils/LocalizedString.d.ts.map +1 -0
- package/lib/Utils/LocalizedString.js +138 -0
- package/lib/Utils/TypeFocusSink/Context.js +14 -0
- package/lib/Utils/TypeFocusSink/FocusBox.js +91 -0
- package/lib/Utils/TypeFocusSink/getTabIndex.d.ts +2 -0
- package/lib/Utils/TypeFocusSink/getTabIndex.d.ts.map +1 -0
- package/lib/Utils/TypeFocusSink/getTabIndex.js +27 -0
- package/lib/Utils/TypeFocusSink/index.js +18 -0
- package/lib/Utils/TypeFocusSink/inputtableKey.d.ts +2 -0
- package/lib/Utils/TypeFocusSink/inputtableKey.d.ts.map +1 -0
- package/lib/Utils/TypeFocusSink/inputtableKey.js +28 -0
- package/lib/Utils/TypeFocusSink/navigableEvent.js +59 -0
- package/lib/Utils/activityAltText.d.ts +8 -0
- package/lib/Utils/activityAltText.d.ts.map +1 -0
- package/lib/Utils/activityAltText.js +79 -0
- package/lib/Utils/addTargetBlankToHyperlinksMarkdown.js +34 -0
- package/lib/Utils/betterLinks.d.ts +28 -0
- package/lib/Utils/betterLinks.d.ts.map +1 -0
- package/lib/Utils/betterLinks.js +142 -0
- package/lib/Utils/computeSuggestedActionText.d.ts +3 -0
- package/lib/Utils/computeSuggestedActionText.d.ts.map +1 -0
- package/lib/Utils/computeSuggestedActionText.js +24 -0
- package/lib/Utils/createCSSKey.js +16 -0
- package/lib/Utils/createCustomEvent.js +34 -0
- package/lib/Utils/detectBrowser.js +27 -0
- package/lib/Utils/downscaleImageToDataURL/WorkerJob.d.ts +16 -0
- package/lib/Utils/downscaleImageToDataURL/WorkerJob.d.ts.map +1 -0
- package/lib/Utils/downscaleImageToDataURL/WorkerJob.js +2 -0
- package/lib/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingBrowser.d.ts +2 -0
- package/lib/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingBrowser.d.ts.map +1 -0
- package/lib/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingBrowser.js +90 -0
- package/lib/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingWorker.d.ts +4 -0
- package/lib/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingWorker.d.ts.map +1 -0
- package/lib/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingWorker.js +198 -0
- package/lib/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingWorker.worker.js +96 -0
- package/lib/Utils/downscaleImageToDataURL/index.d.ts +2 -0
- package/lib/Utils/downscaleImageToDataURL/index.d.ts.map +1 -0
- package/lib/Utils/downscaleImageToDataURL/index.js +44 -0
- package/lib/Utils/filterMap.js +28 -0
- package/lib/Utils/findAncestor.d.ts +2 -0
- package/lib/Utils/findAncestor.d.ts.map +1 -0
- package/lib/Utils/findAncestor.js +15 -0
- package/lib/Utils/firstTabbableDescendant.js +40 -0
- package/lib/Utils/getActivityUniqueId.d.ts +3 -0
- package/lib/Utils/getActivityUniqueId.d.ts.map +1 -0
- package/lib/Utils/getActivityUniqueId.js +11 -0
- package/lib/Utils/intersectionOf.d.ts +5 -0
- package/lib/Utils/intersectionOf.d.ts.map +1 -0
- package/lib/Utils/intersectionOf.js +27 -0
- package/lib/Utils/isZeroOrPositive.d.ts +5 -0
- package/lib/Utils/isZeroOrPositive.d.ts.map +1 -0
- package/lib/Utils/isZeroOrPositive.js +14 -0
- package/lib/Utils/mapMap.js +27 -0
- package/lib/Utils/parseDocumentFromString.d.ts +2 -0
- package/lib/Utils/parseDocumentFromString.d.ts.map +1 -0
- package/lib/Utils/parseDocumentFromString.js +11 -0
- package/lib/Utils/randomId.js +15 -0
- package/lib/Utils/readDataURIToBlob.js +44 -0
- package/lib/Utils/removeInline.js +18 -0
- package/lib/Utils/scrollIntoViewWithBlockNearest.d.ts +7 -0
- package/lib/Utils/scrollIntoViewWithBlockNearest.d.ts.map +1 -0
- package/lib/Utils/scrollIntoViewWithBlockNearest.js +38 -0
- package/lib/Utils/serializeDocumentIntoString.d.ts +2 -0
- package/lib/Utils/serializeDocumentIntoString.d.ts.map +1 -0
- package/lib/Utils/serializeDocumentIntoString.js +27 -0
- package/lib/Utils/shallowEquals.js +21 -0
- package/lib/Utils/singleToArray.d.ts +2 -0
- package/lib/Utils/singleToArray.d.ts.map +1 -0
- package/lib/Utils/singleToArray.js +10 -0
- package/lib/Utils/supportPseudoClass.d.ts +2 -0
- package/lib/Utils/supportPseudoClass.d.ts.map +1 -0
- package/lib/Utils/supportPseudoClass.js +21 -0
- package/lib/Utils/tabbableElements.d.ts +2 -0
- package/lib/Utils/tabbableElements.d.ts.map +1 -0
- package/lib/Utils/tabbableElements.js +20 -0
- package/lib/Utils/textFormatToContentType.js +17 -0
- package/lib/Utils/updateMarkdownAttrs.js +16 -0
- package/lib/Utils/walkMarkdownTokens.js +19 -0
- package/lib/hooks/index.d.ts +22 -0
- package/lib/hooks/index.d.ts.map +1 -0
- package/lib/hooks/index.js +152 -0
- package/lib/hooks/internal/BypassSpeechSynthesisPonyfill.js +278 -0
- package/lib/hooks/internal/UITracker.js +39 -0
- package/lib/hooks/internal/WebChatUIContext.d.ts +8 -0
- package/lib/hooks/internal/WebChatUIContext.d.ts.map +1 -0
- package/lib/hooks/internal/WebChatUIContext.js +11 -0
- package/lib/hooks/internal/createWaitUntilable.d.ts +5 -0
- package/lib/hooks/internal/createWaitUntilable.d.ts.map +1 -0
- package/lib/hooks/internal/createWaitUntilable.js +50 -0
- package/lib/hooks/internal/createWaitUntilable.spec.d.ts +2 -0
- package/lib/hooks/internal/createWaitUntilable.spec.d.ts.map +1 -0
- package/lib/hooks/internal/private/createOnEventShim.d.ts +5 -0
- package/lib/hooks/internal/private/createOnEventShim.d.ts.map +1 -0
- package/lib/hooks/internal/private/createOnEventShim.js +25 -0
- package/lib/hooks/internal/private/createOnEventShim.spec.d.ts +2 -0
- package/lib/hooks/internal/private/createOnEventShim.spec.d.ts.map +1 -0
- package/lib/hooks/internal/useChanged.d.ts +9 -0
- package/lib/hooks/internal/useChanged.d.ts.map +1 -0
- package/lib/hooks/internal/useChanged.js +21 -0
- package/lib/hooks/internal/useDispatchScrollPosition.js +12 -0
- package/lib/hooks/internal/useDispatchTranscriptFocusByActivityKey.d.ts +2 -0
- package/lib/hooks/internal/useDispatchTranscriptFocusByActivityKey.d.ts.map +1 -0
- package/lib/hooks/internal/useDispatchTranscriptFocusByActivityKey.js +12 -0
- package/lib/hooks/internal/useEnterKeyHint.js +18 -0
- package/lib/hooks/internal/useFocusVisible.d.ts +3 -0
- package/lib/hooks/internal/useFocusVisible.d.ts.map +1 -0
- package/lib/hooks/internal/useFocusVisible.js +37 -0
- package/lib/hooks/internal/useFocusWithin.d.ts +3 -0
- package/lib/hooks/internal/useFocusWithin.d.ts.map +1 -0
- package/lib/hooks/internal/useFocusWithin.js +38 -0
- package/lib/hooks/internal/useForceRender.js +24 -0
- package/lib/hooks/internal/useForceRenderAtInterval.d.ts +3 -0
- package/lib/hooks/internal/useForceRenderAtInterval.d.ts.map +1 -0
- package/lib/hooks/internal/useForceRenderAtInterval.js +57 -0
- package/lib/hooks/internal/useInternalMarkdownIt.js +14 -0
- package/lib/hooks/internal/useInternalRenderMarkdownInline.js +16 -0
- package/lib/hooks/internal/useLocalizeAccessKey.d.ts +2 -0
- package/lib/hooks/internal/useLocalizeAccessKey.d.ts.map +1 -0
- package/lib/hooks/internal/useLocalizeAccessKey.js +38 -0
- package/lib/hooks/internal/useMemoWithPrevious.d.ts +3 -0
- package/lib/hooks/internal/useMemoWithPrevious.d.ts.map +1 -0
- package/lib/hooks/internal/useMemoWithPrevious.js +20 -0
- package/lib/hooks/internal/useMemoized.d.ts +11 -0
- package/lib/hooks/internal/useMemoized.d.ts.map +1 -0
- package/lib/hooks/internal/useMemoized.js +82 -0
- package/lib/hooks/internal/useMemoized.spec.jsx +159 -0
- package/lib/hooks/internal/useNavigatorPlatform.js +31 -0
- package/lib/hooks/internal/useNonce.js +14 -0
- package/lib/hooks/internal/useObserveFocusVisible.d.ts +3 -0
- package/lib/hooks/internal/useObserveFocusVisible.d.ts.map +1 -0
- package/lib/hooks/internal/useObserveFocusVisible.js +201 -0
- package/lib/hooks/internal/usePrevious.d.ts +2 -0
- package/lib/hooks/internal/usePrevious.d.ts.map +1 -0
- package/lib/hooks/internal/usePrevious.js +17 -0
- package/lib/hooks/internal/useRegisterFocusTranscript.js +27 -0
- package/lib/hooks/internal/useRegisterScrollTo.js +27 -0
- package/lib/hooks/internal/useRegisterScrollToEnd.js +25 -0
- package/lib/hooks/internal/useReplaceEmoticon.js +58 -0
- package/lib/hooks/internal/useResumeAudioContext.d.ts +2 -0
- package/lib/hooks/internal/useResumeAudioContext.d.ts.map +1 -0
- package/lib/hooks/internal/useResumeAudioContext.js +23 -0
- package/lib/hooks/internal/useSendBoxFocusRef.js +12 -0
- package/lib/hooks/internal/useSettableDictateAbortable.js +15 -0
- package/lib/hooks/internal/useStateRef.d.ts +3 -0
- package/lib/hooks/internal/useStateRef.d.ts.map +1 -0
- package/lib/hooks/internal/useStateRef.js +30 -0
- package/lib/hooks/internal/useStyleToEmotionObject.js +12 -0
- package/lib/hooks/internal/useSuggestedActionsAccessKey.js +14 -0
- package/lib/hooks/internal/useTimer.d.ts +5 -0
- package/lib/hooks/internal/useTimer.d.ts.map +1 -0
- package/lib/hooks/internal/useTimer.js +46 -0
- package/lib/hooks/internal/useTranscriptActivityElementsRef.js +12 -0
- package/lib/hooks/internal/useTranscriptFocusRef.js +12 -0
- package/lib/hooks/internal/useUniqueId.d.ts +2 -0
- package/lib/hooks/internal/useUniqueId.d.ts.map +1 -0
- package/lib/hooks/internal/useUniqueId.js +19 -0
- package/lib/hooks/internal/useValueRef.d.ts +3 -0
- package/lib/hooks/internal/useValueRef.d.ts.map +1 -0
- package/lib/hooks/internal/useValueRef.js +24 -0
- package/lib/hooks/internal/useWebChatUIContext.js +17 -0
- package/lib/hooks/sendBoxFocus.d.ts +7 -0
- package/lib/hooks/sendBoxFocus.d.ts.map +1 -0
- package/lib/hooks/sendBoxFocus.js +13 -0
- package/lib/hooks/transcriptScrollRelative.d.ts +7 -0
- package/lib/hooks/transcriptScrollRelative.d.ts.map +1 -0
- package/lib/hooks/transcriptScrollRelative.js +13 -0
- package/lib/hooks/useDictateAbortable.d.ts +2 -0
- package/lib/hooks/useDictateAbortable.d.ts.map +1 -0
- package/lib/hooks/useDictateAbortable.js +22 -0
- package/lib/hooks/useFocus.d.ts +2 -0
- package/lib/hooks/useFocus.d.ts.map +1 -0
- package/lib/hooks/useFocus.js +65 -0
- package/lib/hooks/useMakeThumbnail.d.ts +2 -0
- package/lib/hooks/useMakeThumbnail.d.ts.map +1 -0
- package/lib/hooks/useMakeThumbnail.js +74 -0
- package/lib/hooks/useObserveScrollPosition.d.ts +3 -0
- package/lib/hooks/useObserveScrollPosition.d.ts.map +1 -0
- package/lib/hooks/useObserveScrollPosition.js +31 -0
- package/lib/hooks/useObserveTranscriptFocus.d.ts +5 -0
- package/lib/hooks/useObserveTranscriptFocus.d.ts.map +1 -0
- package/lib/hooks/useObserveTranscriptFocus.js +31 -0
- package/lib/hooks/useRenderMarkdownAsHTML.d.ts +5 -0
- package/lib/hooks/useRenderMarkdownAsHTML.d.ts.map +1 -0
- package/lib/hooks/useRenderMarkdownAsHTML.js +62 -0
- package/lib/hooks/useScrollDown.d.ts +4 -0
- package/lib/hooks/useScrollDown.d.ts.map +1 -0
- package/lib/hooks/useScrollDown.js +20 -0
- package/lib/hooks/useScrollTo.d.ts +5 -0
- package/lib/hooks/useScrollTo.d.ts.map +1 -0
- package/lib/hooks/useScrollTo.js +22 -0
- package/lib/hooks/useScrollToEnd.d.ts +2 -0
- package/lib/hooks/useScrollToEnd.d.ts.map +1 -0
- package/lib/hooks/useScrollToEnd.js +21 -0
- package/lib/hooks/useScrollUp.d.ts +4 -0
- package/lib/hooks/useScrollUp.d.ts.map +1 -0
- package/lib/hooks/useScrollUp.js +20 -0
- package/lib/hooks/useSendFiles.d.ts +5 -0
- package/lib/hooks/useSendFiles.d.ts.map +1 -0
- package/lib/hooks/useSendFiles.js +63 -0
- package/lib/hooks/useSendMessage.d.ts +8 -0
- package/lib/hooks/useSendMessage.d.ts.map +1 -0
- package/lib/hooks/useSendMessage.js +102 -0
- package/lib/hooks/useStyleSet.d.ts +3 -0
- package/lib/hooks/useStyleSet.d.ts.map +1 -0
- package/lib/hooks/useStyleSet.js +13 -0
- package/lib/hooks/useWebSpeechPonyfill.d.ts +3 -0
- package/lib/hooks/useWebSpeechPonyfill.d.ts.map +1 -0
- package/lib/hooks/useWebSpeechPonyfill.js +12 -0
- package/lib/index.d.ts +330 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +164 -0
- package/lib/internal.d.ts +4 -0
- package/lib/internal.d.ts.map +1 -0
- package/lib/internal.js +21 -0
- package/lib/providers/ActivityTree/ActivityTreeComposer.d.ts +7 -0
- package/lib/providers/ActivityTree/ActivityTreeComposer.d.ts.map +1 -0
- package/lib/providers/ActivityTree/ActivityTreeComposer.js +90 -0
- package/lib/providers/ActivityTree/private/Context.d.ts +9 -0
- package/lib/providers/ActivityTree/private/Context.d.ts.map +1 -0
- package/lib/providers/ActivityTree/private/Context.js +10 -0
- package/lib/providers/ActivityTree/private/types.d.ts +10 -0
- package/lib/providers/ActivityTree/private/types.d.ts.map +1 -0
- package/lib/providers/ActivityTree/private/types.js +2 -0
- package/lib/providers/ActivityTree/private/useActivitiesWithRenderer.d.ts +4 -0
- package/lib/providers/ActivityTree/private/useActivitiesWithRenderer.d.ts.map +1 -0
- package/lib/providers/ActivityTree/private/useActivitiesWithRenderer.js +36 -0
- package/lib/providers/ActivityTree/private/useActivityTreeWithRenderer.d.ts +5 -0
- package/lib/providers/ActivityTree/private/useActivityTreeWithRenderer.d.ts.map +1 -0
- package/lib/providers/ActivityTree/private/useActivityTreeWithRenderer.js +147 -0
- package/lib/providers/ActivityTree/private/useContext.d.ts +3 -0
- package/lib/providers/ActivityTree/private/useContext.d.ts.map +1 -0
- package/lib/providers/ActivityTree/private/useContext.js +18 -0
- package/lib/providers/ActivityTree/useActivityTreeWithRenderer.d.ts +8 -0
- package/lib/providers/ActivityTree/useActivityTreeWithRenderer.d.ts.map +1 -0
- package/lib/providers/ActivityTree/useActivityTreeWithRenderer.js +14 -0
- package/lib/providers/LiveRegionTwin/LiveRegionTwinComposer.d.ts +37 -0
- package/lib/providers/LiveRegionTwin/LiveRegionTwinComposer.d.ts.map +1 -0
- package/lib/providers/LiveRegionTwin/LiveRegionTwinComposer.js +145 -0
- package/lib/providers/LiveRegionTwin/private/Context.d.ts +10 -0
- package/lib/providers/LiveRegionTwin/private/Context.d.ts.map +1 -0
- package/lib/providers/LiveRegionTwin/private/Context.js +11 -0
- package/lib/providers/LiveRegionTwin/private/LiveRegionTwinContainer.d.ts +12 -0
- package/lib/providers/LiveRegionTwin/private/LiveRegionTwinContainer.d.ts.map +1 -0
- package/lib/providers/LiveRegionTwin/private/LiveRegionTwinContainer.js +77 -0
- package/lib/providers/LiveRegionTwin/private/types.d.ts +8 -0
- package/lib/providers/LiveRegionTwin/private/types.d.ts.map +1 -0
- package/lib/providers/LiveRegionTwin/private/types.js +2 -0
- package/lib/providers/LiveRegionTwin/private/useContext.d.ts +3 -0
- package/lib/providers/LiveRegionTwin/private/useContext.d.ts.map +1 -0
- package/lib/providers/LiveRegionTwin/private/useContext.js +18 -0
- package/lib/providers/LiveRegionTwin/private/useMarkAllAsRenderedEffect.d.ts +2 -0
- package/lib/providers/LiveRegionTwin/private/useMarkAllAsRenderedEffect.d.ts.map +1 -0
- package/lib/providers/LiveRegionTwin/private/useMarkAllAsRenderedEffect.js +20 -0
- package/lib/providers/LiveRegionTwin/private/useStaticElementEntries.d.ts +3 -0
- package/lib/providers/LiveRegionTwin/private/useStaticElementEntries.d.ts.map +1 -0
- package/lib/providers/LiveRegionTwin/private/useStaticElementEntries.js +12 -0
- package/lib/providers/LiveRegionTwin/useQueueStaticElement.d.ts +8 -0
- package/lib/providers/LiveRegionTwin/useQueueStaticElement.d.ts.map +1 -0
- package/lib/providers/LiveRegionTwin/useQueueStaticElement.js +17 -0
- package/lib/providers/ModalDialog/ModalDialogComposer.d.ts +7 -0
- package/lib/providers/ModalDialog/ModalDialogComposer.d.ts.map +1 -0
- package/lib/providers/ModalDialog/ModalDialogComposer.js +51 -0
- package/lib/providers/ModalDialog/private/Context.d.ts +13 -0
- package/lib/providers/ModalDialog/private/Context.d.ts.map +1 -0
- package/lib/providers/ModalDialog/private/Context.js +24 -0
- package/lib/providers/ModalDialog/private/Popover.d.ts +10 -0
- package/lib/providers/ModalDialog/private/Popover.d.ts.map +1 -0
- package/lib/providers/ModalDialog/private/Popover.js +79 -0
- package/lib/providers/ModalDialog/private/useContext.d.ts +4 -0
- package/lib/providers/ModalDialog/private/useContext.d.ts.map +1 -0
- package/lib/providers/ModalDialog/private/useContext.js +13 -0
- package/lib/providers/ModalDialog/useClose.d.ts +3 -0
- package/lib/providers/ModalDialog/useClose.d.ts.map +1 -0
- package/lib/providers/ModalDialog/useClose.js +12 -0
- package/lib/providers/ModalDialog/useShowModal.d.ts +3 -0
- package/lib/providers/ModalDialog/useShowModal.d.ts.map +1 -0
- package/lib/providers/ModalDialog/useShowModal.js +12 -0
- package/lib/providers/RovingTabIndex/RovingTabIndexComposer.d.ts +8 -0
- package/lib/providers/RovingTabIndex/RovingTabIndexComposer.d.ts.map +1 -0
- package/lib/providers/RovingTabIndex/RovingTabIndexComposer.js +163 -0
- package/lib/providers/RovingTabIndex/private/Context.d.ts +8 -0
- package/lib/providers/RovingTabIndex/private/Context.d.ts.map +1 -0
- package/lib/providers/RovingTabIndex/private/Context.js +17 -0
- package/lib/providers/RovingTabIndex/private/useContext.d.ts +2 -0
- package/lib/providers/RovingTabIndex/private/useContext.d.ts.map +1 -0
- package/lib/providers/RovingTabIndex/private/useContext.js +18 -0
- package/lib/providers/RovingTabIndex/useItemRef.d.ts +3 -0
- package/lib/providers/RovingTabIndex/useItemRef.d.ts.map +1 -0
- package/lib/providers/RovingTabIndex/useItemRef.js +19 -0
- package/lib/providers/Theme/ThemeProvider.d.ts +7 -0
- package/lib/providers/Theme/ThemeProvider.d.ts.map +1 -0
- package/lib/providers/Theme/ThemeProvider.js +103 -0
- package/lib/providers/Theme/private/Context.d.ts +19 -0
- package/lib/providers/Theme/private/Context.d.ts.map +1 -0
- package/lib/providers/Theme/private/Context.js +26 -0
- package/lib/providers/Theme/useTheme.d.ts +2 -0
- package/lib/providers/Theme/useTheme.d.ts.map +1 -0
- package/lib/providers/Theme/useTheme.js +13 -0
- package/lib/providers/TranscriptFocus/TranscriptFocusComposer.d.ts +7 -0
- package/lib/providers/TranscriptFocus/TranscriptFocusComposer.d.ts.map +1 -0
- package/lib/providers/TranscriptFocus/TranscriptFocusComposer.js +153 -0
- package/lib/providers/TranscriptFocus/private/Context.d.ts +12 -0
- package/lib/providers/TranscriptFocus/private/Context.d.ts.map +1 -0
- package/lib/providers/TranscriptFocus/private/Context.js +11 -0
- package/lib/providers/TranscriptFocus/private/useContext.d.ts +2 -0
- package/lib/providers/TranscriptFocus/private/useContext.d.ts.map +1 -0
- package/lib/providers/TranscriptFocus/private/useContext.js +18 -0
- package/lib/providers/TranscriptFocus/useActiveDescendantId.d.ts +2 -0
- package/lib/providers/TranscriptFocus/useActiveDescendantId.d.ts.map +1 -0
- package/lib/providers/TranscriptFocus/useActiveDescendantId.js +12 -0
- package/lib/providers/TranscriptFocus/useFocusByActivityKey.d.ts +8 -0
- package/lib/providers/TranscriptFocus/useFocusByActivityKey.d.ts.map +1 -0
- package/lib/providers/TranscriptFocus/useFocusByActivityKey.js +18 -0
- package/lib/providers/TranscriptFocus/useFocusRelativeActivity.d.ts +2 -0
- package/lib/providers/TranscriptFocus/useFocusRelativeActivity.d.ts.map +1 -0
- package/lib/providers/TranscriptFocus/useFocusRelativeActivity.js +12 -0
- package/lib/providers/TranscriptFocus/useFocusedActivityKey.d.ts +2 -0
- package/lib/providers/TranscriptFocus/useFocusedActivityKey.d.ts.map +1 -0
- package/lib/providers/TranscriptFocus/useFocusedActivityKey.js +12 -0
- package/lib/providers/TranscriptFocus/useFocusedExplicitly.d.ts +2 -0
- package/lib/providers/TranscriptFocus/useFocusedExplicitly.d.ts.map +1 -0
- package/lib/providers/TranscriptFocus/useFocusedExplicitly.js +12 -0
- package/lib/providers/TranscriptFocus/useGetDescendantIdByActivityKey.d.ts +2 -0
- package/lib/providers/TranscriptFocus/useGetDescendantIdByActivityKey.d.ts.map +1 -0
- package/lib/providers/TranscriptFocus/useGetDescendantIdByActivityKey.js +12 -0
- package/lib/providers/internal/SendBox/SendBoxComposer.d.ts +4 -0
- package/lib/providers/internal/SendBox/SendBoxComposer.d.ts.map +1 -0
- package/lib/providers/internal/SendBox/SendBoxComposer.js +161 -0
- package/lib/providers/internal/SendBox/private/Context.d.ts +4 -0
- package/lib/providers/internal/SendBox/private/Context.d.ts.map +1 -0
- package/lib/providers/internal/SendBox/private/Context.js +11 -0
- package/lib/providers/internal/SendBox/private/types.d.ts +8 -0
- package/lib/providers/internal/SendBox/private/types.d.ts.map +1 -0
- package/lib/providers/internal/SendBox/private/types.js +2 -0
- package/lib/providers/internal/SendBox/private/useContext.d.ts +3 -0
- package/lib/providers/internal/SendBox/private/useContext.d.ts.map +1 -0
- package/lib/providers/internal/SendBox/private/useContext.js +17 -0
- package/lib/providers/internal/SendBox/useErrorMessageId.d.ts +12 -0
- package/lib/providers/internal/SendBox/useErrorMessageId.d.ts.map +1 -0
- package/lib/providers/internal/SendBox/useErrorMessageId.js +22 -0
- package/lib/providers/internal/SendBox/useSubmit.d.ts +14 -0
- package/lib/providers/internal/SendBox/useSubmit.d.ts.map +1 -0
- package/lib/providers/internal/SendBox/useSubmit.js +20 -0
- package/lib/tsconfig.json +18 -0
- package/lib/types/ContextOf.d.ts +4 -0
- package/lib/types/ContextOf.d.ts.map +1 -0
- package/lib/types/ContextOf.js +2 -0
- package/lib/types/PropsOf.d.ts +3 -0
- package/lib/types/PropsOf.d.ts.map +1 -0
- package/lib/types/PropsOf.js +2 -0
- package/lib/types/ScrollPosition.d.ts +6 -0
- package/lib/types/ScrollPosition.d.ts.map +1 -0
- package/lib/types/ScrollPosition.js +2 -0
- package/lib/types/internal/FocusTranscriptInit.d.ts +4 -0
- package/lib/types/internal/FocusTranscriptInit.d.ts.map +1 -0
- package/lib/types/internal/FocusTranscriptInit.js +2 -0
- package/lib/types/internal/SendStatus.d.ts +7 -0
- package/lib/types/internal/SendStatus.d.ts.map +1 -0
- package/lib/types/internal/SendStatus.js +19 -0
- package/lib/types/internal/TypeOfArray.d.ts +2 -0
- package/lib/types/internal/TypeOfArray.d.ts.map +1 -0
- package/lib/types/internal/TypeOfArray.js +2 -0
- package/lib/withEmoji/private/UndoEntry.d.ts +9 -0
- package/lib/withEmoji/private/UndoEntry.d.ts.map +1 -0
- package/lib/withEmoji/private/UndoEntry.js +69 -0
- package/lib/withEmoji/private/useUndoStack.d.ts +6 -0
- package/lib/withEmoji/private/useUndoStack.d.ts.map +1 -0
- package/lib/withEmoji/private/useUndoStack.js +64 -0
- package/lib/withEmoji/withEmoji.d.ts +15 -0
- package/lib/withEmoji/withEmoji.d.ts.map +1 -0
- package/lib/withEmoji/withEmoji.js +128 -0
- package/package.json +81 -146
- package/src/Activity/Avatar.tsx +23 -20
- package/src/Activity/Bubble.tsx +70 -45
- package/src/Activity/CarouselFilmStrip.js +112 -31
- package/src/Activity/CarouselFilmStripAttachment.js +15 -14
- package/src/Activity/CarouselLayout.js +17 -16
- package/src/Activity/SayAlt.js +26 -0
- package/src/Activity/Speak.tsx +42 -84
- package/src/Activity/StackedLayout.tsx +198 -265
- package/src/ActivityStatus/AbsoluteTime.js +32 -0
- package/src/ActivityStatus/OthersActivityStatus.tsx +53 -52
- package/src/ActivityStatus/SelfActivityStatus.tsx +8 -11
- package/src/ActivityStatus/SendStatus/SendStatus.tsx +23 -23
- package/src/ActivityStatus/Slotted.tsx +26 -0
- package/src/ActivityStatus/Timestamp.tsx +12 -17
- package/src/ActivityStatus/private/Feedback/Feedback.tsx +60 -0
- package/src/ActivityStatus/private/Feedback/private/ThumbButton.Image.tsx +30 -0
- package/src/ActivityStatus/private/Feedback/private/ThumbButton.tsx +54 -0
- package/src/ActivityStatus/private/Feedback/private/VoteButton.tsx +36 -0
- package/src/ActivityStatus/private/Feedback/private/icons/ThumbDislike16Filled.tsx +16 -0
- package/src/ActivityStatus/private/Feedback/private/icons/ThumbDislike16Regular.tsx +16 -0
- package/src/ActivityStatus/private/Feedback/private/icons/ThumbLike16Filled.tsx +16 -0
- package/src/ActivityStatus/private/Feedback/private/icons/ThumbLike16Regular.tsx +16 -0
- package/src/ActivityStatus/private/Originator.tsx +10 -33
- package/src/ActivityStatus/private/RelativeTime.js +31 -0
- package/src/Assets/TypingAnimation.js +1 -3
- package/src/Attachment/Assets/DownloadIcon.js +29 -0
- package/src/Attachment/AudioContent.tsx +29 -20
- package/src/Attachment/FileContent.tsx +46 -46
- package/src/Attachment/HTMLVideoContent.tsx +27 -21
- package/src/Attachment/ImageAttachment.js +37 -0
- package/src/Attachment/ImageContent.tsx +27 -13
- package/src/Attachment/Text/TextAttachment.tsx +14 -38
- package/src/Attachment/Text/TextContent.tsx +16 -40
- package/src/Attachment/Text/private/CitationModalContent.tsx +21 -28
- package/src/Attachment/Text/private/MarkdownTextContent.tsx +126 -223
- package/src/Attachment/Text/private/MessageSensitivityLabel.tsx +34 -47
- package/src/Attachment/Text/private/PlainTextContent.tsx +14 -24
- package/src/Attachment/Text/private/ShieldIcon.tsx +34 -52
- package/src/Attachment/VideoAttachment.js +1 -1
- package/src/Attachment/VideoContent.tsx +27 -21
- package/src/Attachment/VimeoContent.tsx +25 -21
- package/src/Attachment/YouTubeContent.tsx +25 -21
- package/src/Avatar/ImageAvatar.js +49 -0
- package/src/Avatar/InitialsAvatar.js +50 -0
- package/src/BasicConnectivityStatus.js +7 -7
- package/src/BasicToast.js +1 -1
- package/src/BasicToaster.js +8 -47
- package/src/BasicTranscript.tsx +587 -402
- package/src/BasicWebChat.tsx +34 -28
- package/src/Composer.tsx +128 -226
- package/src/ConnectivityStatus/Connecting.js +72 -0
- package/src/Dictation.js +24 -16
- package/src/ErrorBox.tsx +26 -54
- package/src/LinkDefinition/LinkDefinitionItem.tsx +21 -51
- package/src/LinkDefinition/LinkDefinitions.tsx +19 -84
- package/src/LinkDefinition/index.ts +4 -6
- package/src/LinkDefinition/private/Badge.tsx +1 -12
- package/src/LinkDefinition/private/Chevron.tsx +21 -0
- package/src/LinkDefinition/private/ItemBody.tsx +15 -24
- package/src/LinkDefinition/private/OpenInNewWindowIcon.tsx +13 -20
- package/src/LinkDefinition/private/extractHostnameWithSubdomain.spec.ts +0 -2
- package/src/LinkDefinition/private/extractHostnameWithSubdomain.ts +1 -1
- package/src/LiveRegion/LiveRegionActivity.tsx +18 -18
- package/src/LiveRegion/private/LiveRegionSuggestedActions.tsx +25 -34
- package/src/Middleware/Activity/createCoreMiddleware.tsx +102 -0
- package/src/Middleware/ActivityStatus/createTimestampMiddleware.tsx +2 -2
- package/src/Middleware/Avatar/createCoreMiddleware.tsx +76 -0
- package/src/Middleware/ScrollToEndButton/ScrollToEndButton.js +45 -0
- package/src/ReactWebChat.tsx +8 -3
- package/src/ScreenReaderText.tsx +34 -27
- package/src/SendBox/Assets/MicrophoneIcon.js +12 -0
- package/src/SendBox/Assets/SendIcon.js +36 -0
- package/src/SendBox/AutoResizeTextArea.tsx +64 -28
- package/src/SendBox/BasicSendBox.tsx +30 -99
- package/src/SendBox/DictationInterims.tsx +21 -32
- package/src/SendBox/IconButton.tsx +30 -32
- package/src/SendBox/MicrophoneButton.tsx +23 -29
- package/src/SendBox/SendButton.tsx +21 -26
- package/src/SendBox/SuggestedAction.tsx +72 -60
- package/src/SendBox/SuggestedActions.tsx +9 -6
- package/src/SendBox/TextBox.tsx +39 -57
- package/src/SendBoxToolbar/Assets/AttachmentIcon.tsx +23 -6
- package/src/SendBoxToolbar/BasicSendBoxToolbar.tsx +2 -4
- package/src/SendBoxToolbar/UploadButton.tsx +26 -47
- package/src/Styles/CustomPropertyNames.ts +6 -66
- package/src/Styles/StyleSet/AudioAttachment.ts +3 -3
- package/src/Styles/StyleSet/Avatar.ts +3 -4
- package/src/Styles/StyleSet/CSSCustomProperties.ts +46 -0
- package/src/Styles/StyleSet/CarouselFilmStrip.ts +7 -9
- package/src/Styles/StyleSet/CarouselFilmStripAttachment.ts +4 -3
- package/src/Styles/StyleSet/ErrorBox.ts +2 -2
- package/src/Styles/StyleSet/FileContent.ts +1 -2
- package/src/Styles/StyleSet/ImageAvatar.ts +5 -8
- package/src/Styles/StyleSet/InitialsAvatar.ts +5 -4
- package/src/Styles/StyleSet/KeyboardHelp.ts +204 -0
- package/src/Styles/StyleSet/LinkDefinitions.ts +11 -17
- package/src/Styles/StyleSet/MicrophoneButton.ts +1 -1
- package/src/Styles/StyleSet/ModalDialog.ts +8 -14
- package/src/Styles/StyleSet/RenderMarkdown.ts +0 -35
- package/src/Styles/StyleSet/ScrollToEndButton.ts +11 -0
- package/src/Styles/StyleSet/SendBox.ts +7 -57
- package/src/Styles/StyleSet/SendBoxButton.ts +5 -7
- package/src/Styles/StyleSet/SendBoxTextBox.ts +1 -6
- package/src/Styles/StyleSet/SendStatus.ts +0 -12
- package/src/Styles/StyleSet/SingleAttachmentActivity.ts +18 -0
- package/src/Styles/StyleSet/SlottedActivityStatus.ts +16 -0
- package/src/Styles/StyleSet/SpinnerAnimation.ts +1 -3
- package/src/Styles/StyleSet/StackedLayout.ts +9 -18
- package/src/Styles/StyleSet/SuggestedAction.ts +13 -1
- package/src/Styles/StyleSet/TextContent.ts +2 -17
- package/src/Styles/StyleSet/ThumbButton.ts +24 -77
- package/src/Styles/StyleSet/TypingAnimation.ts +1 -3
- package/src/Styles/createStyleSet.ts +14 -14
- package/src/Transcript/ActivityRow.tsx +39 -100
- package/src/Transcript/FocusTrap.tsx +38 -96
- package/src/Transcript/KeyboardHelp.tsx +319 -0
- package/src/Transcript/LiveRegion/SendFailed.tsx +10 -8
- package/src/Transcript/LiveRegionTranscript.tsx +62 -11
- package/src/TranscriptActivity.tsx +64 -0
- package/src/Utils/AccessKeySink/Surface.js +56 -0
- package/src/Utils/AccessibleButton.tsx +49 -64
- package/src/Utils/AccessibleInputText.tsx +106 -97
- package/src/Utils/AccessibleTextArea.tsx +41 -10
- package/src/Utils/CroppedImage.js +45 -0
- package/src/Utils/FocusRedirector.tsx +26 -31
- package/src/Utils/InlineMarkdown.js +1 -6
- package/src/Utils/JSONLinkedData/__snapshots__/dereferenceBlankNodes.spec.ts.snap +17 -17
- package/src/Utils/JSONLinkedData/dereferenceBlankNodes.spec.ts +0 -2
- package/src/Utils/JSONLinkedData/dereferenceBlankNodes.ts +1 -1
- package/src/Utils/JSONLinkedData/getSafeOwnPropertyNames.ts +2 -2
- package/src/Utils/JSONLinkedData/isUnconnectedBlankNode.spec.ts +0 -2
- package/src/Utils/LocalizedString.tsx +3 -3
- package/src/Utils/addTargetBlankToHyperlinksMarkdown.spec.js +4 -4
- package/src/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingBrowser.ts +0 -2
- package/src/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingWorker.ts +4 -4
- package/src/Utils/firstTabbableDescendant.js +1 -0
- package/src/Utils/parseDocumentFromString.ts +5 -0
- package/src/Utils/readDataURIToBlob.js +31 -0
- package/src/Utils/serializeDocumentIntoString.ts +10 -0
- package/src/Utils/singleToArray.ts +3 -0
- package/src/Utils/supportPseudoClass.ts +1 -1
- package/src/Utils/tabbableElements.ts +1 -7
- package/src/Utils/textFormatToContentType.js +12 -0
- package/src/Utils/updateMarkdownAttrs.spec.js +14 -14
- package/src/Utils/walkMarkdownTokens.spec.js +1 -1
- package/src/hooks/index.ts +0 -4
- package/src/hooks/internal/UITracker.js +1 -1
- package/src/hooks/internal/WebChatUIContext.ts +1 -19
- package/src/hooks/internal/createWaitUntilable.spec.ts +2 -4
- package/src/hooks/internal/createWaitUntilable.ts +1 -1
- package/src/hooks/internal/private/createOnEventShim.spec.ts +0 -2
- package/src/hooks/internal/useForceRenderAtInterval.ts +6 -6
- package/src/hooks/internal/useMemoWithPrevious.ts +16 -0
- package/src/hooks/internal/useMemoized.spec.jsx +3 -3
- package/src/hooks/internal/useMemoized.ts +1 -1
- package/src/hooks/internal/useNonce.js +7 -0
- package/src/hooks/internal/useObserveFocusVisible.ts +1 -0
- package/src/hooks/internal/useStateRef.ts +1 -1
- package/src/hooks/internal/useStyleToEmotionObject.js +5 -0
- package/src/hooks/sendBoxFocus.ts +2 -6
- package/src/hooks/transcriptScrollRelative.ts +3 -6
- package/src/hooks/useObserveScrollPosition.ts +0 -3
- package/src/hooks/useObserveTranscriptFocus.ts +3 -9
- package/src/hooks/useRenderMarkdownAsHTML.ts +29 -32
- package/src/hooks/useSendFiles.ts +1 -4
- package/src/index.ts +125 -30
- package/src/internal.ts +4 -0
- package/src/providers/ActivityTree/ActivityTreeComposer.tsx +90 -0
- package/src/providers/ActivityTree/private/Context.ts +12 -0
- package/src/providers/ActivityTree/private/types.ts +12 -0
- package/src/providers/ActivityTree/private/useActivitiesWithRenderer.ts +40 -0
- package/src/providers/ActivityTree/private/useActivityTreeWithRenderer.ts +140 -0
- package/src/providers/ActivityTree/private/useContext.ts +15 -0
- package/src/providers/ActivityTree/useActivityTreeWithRenderer.ts +16 -0
- package/src/providers/LiveRegionTwin/LiveRegionTwinComposer.tsx +172 -0
- package/src/providers/LiveRegionTwin/private/Context.ts +15 -0
- package/src/providers/LiveRegionTwin/private/LiveRegionTwinContainer.tsx +39 -27
- package/src/providers/LiveRegionTwin/private/useContext.ts +8 -2
- package/src/providers/LiveRegionTwin/useQueueStaticElement.ts +2 -2
- package/src/providers/ModalDialog/private/Popover.tsx +15 -5
- package/src/providers/RovingTabIndex/RovingTabIndexComposer.tsx +23 -20
- package/src/providers/Theme/ThemeProvider.tsx +40 -119
- package/src/providers/Theme/private/Context.ts +18 -18
- package/src/providers/TranscriptFocus/TranscriptFocusComposer.tsx +68 -325
- package/src/providers/TranscriptFocus/private/Context.ts +0 -4
- package/src/providers/TranscriptFocus/useActiveDescendantId.ts +1 -4
- package/src/providers/TranscriptFocus/useFocusRelativeActivity.ts +1 -1
- package/src/providers/internal/SendBox/SendBoxComposer.tsx +38 -30
- package/src/tsconfig.json +14 -8
- package/LICENSE +0 -21
- package/boot/deprecated/component.js +0 -7
- package/boot/deprecated/component.mjs +0 -5
- package/boot/deprecated/decorator.js +0 -7
- package/boot/deprecated/decorator.mjs +0 -5
- package/boot/deprecated/hook.js +0 -7
- package/boot/deprecated/hook.mjs +0 -5
- package/boot/deprecated/internal.js +0 -7
- package/boot/deprecated/internal.mjs +0 -5
- package/component.js +0 -3
- package/decorator.js +0 -3
- package/dist/TextBox-BEU2rUID.d.mts +0 -46
- package/dist/TextBox-BEU2rUID.d.ts +0 -46
- package/dist/_dtsroll-chunks/BlpMO3PT-empty-object.d.ts +0 -34
- package/dist/_dtsroll-chunks/Cha1SOtx-botframework-webchat-styles.react.d.ts +0 -38
- package/dist/_dtsroll-chunks/DP9nda2m-botframework-webchat-react-hooks.d.ts +0 -19
- package/dist/botframework-webchat-component.component.css +0 -2
- package/dist/botframework-webchat-component.component.css.map +0 -1
- package/dist/botframework-webchat-component.component.d.mts +0 -9
- package/dist/botframework-webchat-component.component.d.ts +0 -9
- package/dist/botframework-webchat-component.component.js +0 -2
- package/dist/botframework-webchat-component.component.js.map +0 -1
- package/dist/botframework-webchat-component.component.mjs +0 -2
- package/dist/botframework-webchat-component.component.mjs.map +0 -1
- package/dist/botframework-webchat-component.css +0 -2
- package/dist/botframework-webchat-component.css.map +0 -1
- package/dist/botframework-webchat-component.d.ts +0 -90
- package/dist/botframework-webchat-component.decorator.css +0 -2
- package/dist/botframework-webchat-component.decorator.css.map +0 -1
- package/dist/botframework-webchat-component.decorator.d.mts +0 -28
- package/dist/botframework-webchat-component.decorator.d.ts +0 -28
- package/dist/botframework-webchat-component.decorator.js +0 -2
- package/dist/botframework-webchat-component.decorator.js.map +0 -1
- package/dist/botframework-webchat-component.decorator.mjs +0 -2
- package/dist/botframework-webchat-component.decorator.mjs.map +0 -1
- package/dist/botframework-webchat-component.hook.css +0 -2
- package/dist/botframework-webchat-component.hook.css.map +0 -1
- package/dist/botframework-webchat-component.hook.d.mts +0 -8
- package/dist/botframework-webchat-component.hook.d.ts +0 -8
- package/dist/botframework-webchat-component.hook.js +0 -2
- package/dist/botframework-webchat-component.hook.js.map +0 -1
- package/dist/botframework-webchat-component.hook.mjs +0 -2
- package/dist/botframework-webchat-component.hook.mjs.map +0 -1
- package/dist/botframework-webchat-component.internal.css +0 -2
- package/dist/botframework-webchat-component.internal.css.map +0 -1
- package/dist/botframework-webchat-component.internal.d.ts +0 -70
- package/dist/botframework-webchat-component.internal.js +0 -2
- package/dist/botframework-webchat-component.internal.js.map +0 -1
- package/dist/botframework-webchat-component.js +0 -2
- package/dist/botframework-webchat-component.js.map +0 -1
- package/dist/chunk-4IEFVGFY.mjs +0 -2
- package/dist/chunk-4IEFVGFY.mjs.map +0 -1
- package/dist/chunk-AUUHHO4G.mjs +0 -2
- package/dist/chunk-AUUHHO4G.mjs.map +0 -1
- package/dist/chunk-BUJ23PGG.js +0 -77
- package/dist/chunk-BUJ23PGG.js.map +0 -1
- package/dist/chunk-EYXG4PAK.js +0 -2
- package/dist/chunk-EYXG4PAK.js.map +0 -1
- package/dist/chunk-FA5SN6F3.js +0 -2
- package/dist/chunk-FA5SN6F3.js.map +0 -1
- package/dist/chunk-H443W2JC.mjs +0 -2
- package/dist/chunk-H443W2JC.mjs.map +0 -1
- package/dist/chunk-I2HRS7P3.js +0 -2
- package/dist/chunk-I2HRS7P3.js.map +0 -1
- package/dist/chunk-I6DJ35K3.mjs +0 -2
- package/dist/chunk-I6DJ35K3.mjs.map +0 -1
- package/dist/chunk-I6EXXZUN.js +0 -2
- package/dist/chunk-I6EXXZUN.js.map +0 -1
- package/dist/chunk-IB5KEWTO.js +0 -2
- package/dist/chunk-IB5KEWTO.js.map +0 -1
- package/dist/chunk-NNNAE55I.mjs +0 -2
- package/dist/chunk-NNNAE55I.mjs.map +0 -1
- package/dist/chunk-TMUNLKZW.js +0 -2
- package/dist/chunk-TMUNLKZW.js.map +0 -1
- package/dist/chunk-UKBRB4EA.mjs +0 -2
- package/dist/chunk-UKBRB4EA.mjs.map +0 -1
- package/dist/chunk-UXADOWHM.mjs +0 -77
- package/dist/chunk-UXADOWHM.mjs.map +0 -1
- package/dist/component-BtSxgJS5.d.mts +0 -539
- package/dist/component-Fyy8iCRE.d.ts +0 -539
- package/dist/hook-B7KuomGm.d.mts +0 -2259
- package/dist/hook-o9AgRedV.d.ts +0 -2259
- package/dist/metafile-cjs.json +0 -1
- package/hook.js +0 -3
- package/src/Activity/AttachmentRow.tsx +0 -56
- package/src/Activity/Bubble.module.css +0 -131
- package/src/Activity/CarouselFilmStrip.module.css +0 -155
- package/src/Activity/CarouselFilmStripAttachment.module.css +0 -38
- package/src/Activity/CarouselLayout.module.css +0 -30
- package/src/Activity/CodeBlockContent.module.css +0 -40
- package/src/Activity/CodeBlockContent.tsx +0 -42
- package/src/Activity/CollapsibleContent.module.css +0 -43
- package/src/Activity/CollapsibleContent.tsx +0 -68
- package/src/Activity/SayAlt.module.css +0 -4
- package/src/Activity/SayAlt.tsx +0 -25
- package/src/Activity/StackedLayout.module.css +0 -233
- package/src/Activity/StackedLayoutMain.tsx +0 -36
- package/src/Activity/StackedLayoutMessageStatus.tsx +0 -57
- package/src/Activity/StackedLayoutRoot.tsx +0 -71
- package/src/Activity/StackedLayoutStatus.tsx +0 -36
- package/src/Activity/private/MessageStatusLoader.module.css +0 -18
- package/src/Activity/private/MessageStatusLoader.tsx +0 -27
- package/src/ActivityDebug/RestrictedActivityDebugAPI.ts +0 -15
- package/src/ActivityDebug/index.ts +0 -1
- package/src/ActivityFeedback/ActivityFeedback.tsx +0 -88
- package/src/ActivityFeedback/private/FeedbackForm.module.css +0 -123
- package/src/ActivityFeedback/private/FeedbackForm.tsx +0 -83
- package/src/ActivityFeedback/private/FeedbackVoteButton.tsx +0 -88
- package/src/ActivityFeedback/private/FeedbackVoteButtonBar.tsx +0 -40
- package/src/ActivityFeedback/private/ThumbButton.Image.tsx +0 -35
- package/src/ActivityFeedback/private/ThumbButton.module.css +0 -91
- package/src/ActivityFeedback/private/ThumbButton.tsx +0 -103
- package/src/ActivityFeedback/private/canActionResubmit.ts +0 -6
- package/src/ActivityFeedback/private/getDisclaimerFromFeedbackLoop.ts +0 -10
- package/src/ActivityFeedback/private/getDisclaimerFromReviewAction.ts +0 -12
- package/src/ActivityFeedback/private/hasFeedbackLoop.ts +0 -42
- package/src/ActivityFeedback/private/isActionRequireReview.ts +0 -10
- package/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx +0 -372
- package/src/ActivityFeedback/providers/private/ActivityFeedbackContext.ts +0 -24
- package/src/ActivityFeedback/providers/private/FocusPropagation.ts +0 -10
- package/src/ActivityFeedback/providers/useActivityFeedbackHooks.ts +0 -6
- package/src/ActivityStatus/AbsoluteTime.tsx +0 -37
- package/src/ActivityStatus/ActivityStatus.module.css +0 -31
- package/src/ActivityStatus/StatusSlot.tsx +0 -17
- package/src/ActivityStatus/private/RelativeTime.tsx +0 -43
- package/src/Attachment/ImageAttachment.tsx +0 -58
- package/src/Attachment/Text/TextContent.module.css +0 -45
- package/src/Attachment/Text/private/ActivityButton.module.css +0 -45
- package/src/Attachment/Text/private/ActivityButton.tsx +0 -71
- package/src/Attachment/Text/private/ActivityCopyButton.module.css +0 -45
- package/src/Attachment/Text/private/ActivityCopyButton.tsx +0 -109
- package/src/Attachment/Text/private/ActivityViewCodeButton.tsx +0 -66
- package/src/Attachment/Text/private/CitationModal.module.css +0 -9
- package/src/Attachment/Text/private/CodeContent.tsx +0 -44
- package/src/Attachment/Text/private/Markdownable.tsx +0 -39
- package/src/Attachment/Text/private/ViewCodeDialog.module.css +0 -59
- package/src/Attachment/Text/private/isAIGeneratedActivity.ts +0 -5
- package/src/Avatar/ImageAvatar.tsx +0 -48
- package/src/Avatar/InitialsAvatar.tsx +0 -55
- package/src/BuiltInDecorator.tsx +0 -17
- package/src/ChatHistory/ChatHistoryBox.tsx +0 -27
- package/src/ChatHistory/ChatHistoryToolbar.tsx +0 -36
- package/src/ChatHistory/private/ScrollToEndButton.tsx +0 -105
- package/src/ConnectivityStatus/Connecting.tsx +0 -77
- package/src/Icon/ComponentIcon.module.css +0 -113
- package/src/Icon/ComponentIcon.tsx +0 -59
- package/src/Icon/index.ts +0 -1
- package/src/LinkDefinition/LinkDefinitions.module.css +0 -209
- package/src/Middleware/Activity/defaultActivityPolymiddleware.tsx +0 -104
- package/src/Middleware/ActivityGrouping/createDefaultActivityGroupingDecoratorMiddleware.tsx +0 -21
- package/src/Middleware/ActivityGrouping/ui/LegacyActivityBridgeComposer.tsx +0 -91
- package/src/Middleware/ActivityGrouping/ui/PartGrouping/CollapsibleGrouping.module.css +0 -76
- package/src/Middleware/ActivityGrouping/ui/PartGrouping/CollapsibleGrouping.tsx +0 -97
- package/src/Middleware/ActivityGrouping/ui/PartGrouping/CollapsibleGroupingList.tsx +0 -30
- package/src/Middleware/ActivityGrouping/ui/PartGrouping/CollapsibleGroupingTitle.tsx +0 -29
- package/src/Middleware/ActivityGrouping/ui/PartGrouping/PartGrouping.tsx +0 -52
- package/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.module.css +0 -29
- package/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx +0 -258
- package/src/Middleware/ActivityGrouping/ui/PartGrouping/private/usePartGroupingLogicalGroup.ts +0 -41
- package/src/Middleware/ActivityGrouping/ui/RenderActivity.tsx +0 -37
- package/src/Middleware/ActivityGrouping/ui/RenderActivityGrouping.tsx +0 -41
- package/src/Middleware/ActivityGrouping/ui/SenderGrouping/SenderGrouping.tsx +0 -49
- package/src/Middleware/ActivityGrouping/ui/SenderGrouping/private/SenderGroupingContext.ts +0 -18
- package/src/Middleware/ActivityGrouping/ui/SenderGrouping/private/useSenderGroupingContext.ts +0 -6
- package/src/Middleware/ActivityGrouping/ui/SenderGrouping/useFirstActivity.ts +0 -6
- package/src/Middleware/ActivityGrouping/ui/SenderGrouping/useLastActivity.ts +0 -6
- package/src/Middleware/ActivityGrouping/ui/StatusGrouping/StatusGrouping.tsx +0 -49
- package/src/Middleware/ActivityGrouping/ui/StatusGrouping/private/StatusGroupingContext.ts +0 -18
- package/src/Middleware/ActivityGrouping/ui/StatusGrouping/private/useStatusGroupingContext.ts +0 -6
- package/src/Middleware/ActivityGrouping/ui/StatusGrouping/useFirstActivity.ts +0 -6
- package/src/Middleware/ActivityGrouping/ui/StatusGrouping/useLastActivity.ts +0 -6
- package/src/Middleware/Avatar/DefaultAvatar.tsx +0 -61
- package/src/Middleware/Avatar/createDefaultAvatarPolymiddleware.tsx +0 -22
- package/src/Middleware/ScrollToEndButton/ScrollToEndButton.tsx +0 -58
- package/src/SendBox/AttachmentBar/AttachmentBar.module.css +0 -32
- package/src/SendBox/AttachmentBar/AttachmentBar.tsx +0 -71
- package/src/SendBox/AttachmentBar/AttachmentBarItem.module.css +0 -137
- package/src/SendBox/AttachmentBar/AttachmentBarItem.tsx +0 -103
- package/src/SendBox/AttachmentBar/ItemDeleteButton.tsx +0 -61
- package/src/SendBox/AttachmentBar/ItemPreview.tsx +0 -52
- package/src/SendBox/AttachmentBar/Preview/FilePreview.module.css +0 -35
- package/src/SendBox/AttachmentBar/Preview/FilePreview.tsx +0 -63
- package/src/SendBox/AttachmentBar/Preview/ImagePreview.module.css +0 -5
- package/src/SendBox/AttachmentBar/Preview/ImagePreview.tsx +0 -46
- package/src/SendBox/AttachmentBar/Preview/sendBoxAttachment.ts +0 -13
- package/src/SendBox/AttachmentBar/index.ts +0 -3
- package/src/SendBox/DropZone.tsx +0 -64
- package/src/Styles/CSSCustomPropertiesContainer.tsx +0 -195
- package/src/Styles/StyleSet/ActivityButton.ts +0 -49
- package/src/Styles/StyleSet/ActivityCopyButton.ts +0 -40
- package/src/Styles/StyleSet/ChatHistoryBox.ts +0 -22
- package/src/Styles/StyleSet/CodeBlock.ts +0 -39
- package/src/Styles/StyleSet/CodeBlockCopyButton.ts +0 -71
- package/src/Styles/StyleSet/Tooltip.ts +0 -66
- package/src/Styles/StyleSet/ViewCodeDialog.ts +0 -70
- package/src/Styles/StyleSet/types/StyleSet.ts +0 -11
- package/src/TextArea/TextArea.module.css +0 -75
- package/src/TextArea/TextArea.tsx +0 -126
- package/src/TextArea/index.ts +0 -1
- package/src/Tooltip/index.ts +0 -1
- package/src/Tooltip/private/Tooltip.tsx +0 -26
- package/src/Transcript/ActivityTree.tsx +0 -35
- package/src/Transcript/TranscriptFocus/TranscriptActivityList.tsx +0 -22
- package/src/Transcript/TranscriptFocus/TranscriptFocus.module.css +0 -117
- package/src/Transcript/TranscriptFocus/TranscriptFocusArea.tsx +0 -27
- package/src/Transcript/TranscriptFocus/TranscriptFocusContent.tsx +0 -34
- package/src/Transcript/TranscriptFocus/TranscriptFocusContentActiveDescendant.tsx +0 -26
- package/src/Transcript/TranscriptFocus/TranscriptFocusContentBody.tsx +0 -20
- package/src/Transcript/TranscriptFocus/TranscriptFocusContentOverlay.tsx +0 -20
- package/src/Transcript/TranscriptFocus/TranscriptFocusIndicator.tsx +0 -28
- package/src/Transcript/TranscriptFocus/TranscriptFocusTerminator.tsx +0 -42
- package/src/Transcript/TranscriptFocus/TranscriptFocusTerminatorBody.tsx +0 -20
- package/src/Transcript/TranscriptFocus/TranscriptFocusTerminatorText.tsx +0 -20
- package/src/Transcript/TranscriptFocus/index.ts +0 -25
- package/src/Transcript/hooks/useRenderActivityProps.ts +0 -88
- package/src/Utils/AccessKeySink/Surface.tsx +0 -63
- package/src/Utils/FixedWidthImage.tsx +0 -60
- package/src/Utils/createIconComponent.tsx +0 -126
- package/src/Utils/orgSchema/getFirstBaseOfSoftwareSourceCode.ts +0 -15
- package/src/Utils/parseDocumentFragmentFromString.ts +0 -9
- package/src/Utils/readDataURIToBlob.ts +0 -37
- package/src/Utils/serializeDocumentFragmentIntoString.ts +0 -3
- package/src/Utils/textFormatToContentType.ts +0 -14
- package/src/__tests__/addMetaTag.spec.js +0 -8
- package/src/__tests__/addMetaTag.spec.mjs +0 -8
- package/src/boot/component.ts +0 -45
- package/src/boot/decorator.ts +0 -1
- package/src/boot/hook.ts +0 -118
- package/src/boot/internal.ts +0 -15
- package/src/buildInfo.ts +0 -9
- package/src/decorator/index.ts +0 -3
- package/src/decorator/private/BorderFlair.module.css +0 -566
- package/src/decorator/private/BorderFlair.tsx +0 -39
- package/src/decorator/private/BorderLoader.module.css +0 -53
- package/src/decorator/private/BorderLoader.tsx +0 -24
- package/src/decorator/private/WebChatDecorator.tsx +0 -64
- package/src/decorator/stylesheet/DecoratorStylesheet.tsx +0 -33
- package/src/decorator/stylesheet/createDecoratorStyleElements.ts +0 -8
- package/src/env.d.ts +0 -11
- package/src/hooks/RenderMarkdown.module.css +0 -102
- package/src/hooks/internal/codeHighlighter/index.ts +0 -3
- package/src/hooks/internal/codeHighlighter/private/CodeHighlighterComposer.tsx +0 -32
- package/src/hooks/internal/codeHighlighter/private/createCodeHighlighterComposer.tsx +0 -32
- package/src/hooks/internal/codeHighlighter/private/defaultHighlightCode.tsx +0 -22
- package/src/hooks/internal/styleToEmotionObject/index.ts +0 -1
- package/src/hooks/internal/styleToEmotionObject/private/StyleToEmotionObjectComposer.tsx +0 -20
- package/src/hooks/internal/styleToEmotionObject/private/createStyleToEmotionObjectComposer.tsx +0 -22
- package/src/hooks/internal/useEmotion.ts +0 -37
- package/src/hooks/internal/useFeedbackActions.ts +0 -120
- package/src/hooks/internal/useNonce.ts +0 -7
- package/src/hooks/internal/useSanitizeHrefCallback.ts +0 -37
- package/src/hooks/useStreamingMarkdownWithDefinitions.ts +0 -193
- package/src/providers/ActivityLogicalGrouping/ActivityLogicalGroupingComposer.ts +0 -100
- package/src/providers/ActivityLogicalGrouping/index.ts +0 -7
- package/src/providers/ActivityLogicalGrouping/private/ActivityLogicalGroupingContext.ts +0 -31
- package/src/providers/ActivityLogicalGrouping/private/useStateWithOptimisticRef.ts +0 -13
- package/src/providers/ActivityLogicalGrouping/useAddLogicalGrouping.ts +0 -5
- package/src/providers/ActivityLogicalGrouping/useGetGroupState.ts +0 -5
- package/src/providers/ActivityLogicalGrouping/useGetLogicalGroupBoundaries.ts +0 -5
- package/src/providers/ActivityLogicalGrouping/useGetLogicalGroupKey.ts +0 -5
- package/src/providers/ActivityLogicalGrouping/useRemoveLogicalGrouping.ts +0 -5
- package/src/providers/ChatHistoryDOM/ChatHistoryDOMComposer.tsx +0 -18
- package/src/providers/ChatHistoryDOM/private/ChatHistoryDOMContext.ts +0 -11
- package/src/providers/ChatHistoryDOM/useActivityElementRef.ts +0 -6
- package/src/providers/CustomElements/CustomElementsComposer.tsx +0 -58
- package/src/providers/CustomElements/customElements/CodeBlock.module.css +0 -35
- package/src/providers/CustomElements/customElements/CodeBlock.ts +0 -230
- package/src/providers/CustomElements/customElements/CodeBlockCopyButton.module.css +0 -63
- package/src/providers/CustomElements/customElements/CodeBlockCopyButton.tsx +0 -108
- package/src/providers/CustomElements/customElements/wrapAsCustomElement.ts +0 -85
- package/src/providers/CustomElements/private/CustomElementsContext.ts +0 -15
- package/src/providers/CustomElements/private/useCustomElementsContext.ts +0 -6
- package/src/providers/CustomElements/useCodeBlockCopyButtonTagName.ts +0 -8
- package/src/providers/CustomElements/useCodeBlockTagName.ts +0 -19
- package/src/providers/GroupedRenderingActivities/GroupedRenderingActivities.ts +0 -10
- package/src/providers/GroupedRenderingActivities/GroupedRenderingActivitiesComposer.tsx +0 -87
- package/src/providers/GroupedRenderingActivities/private/GroupedRenderingActivitiesContext.ts +0 -14
- package/src/providers/GroupedRenderingActivities/private/group.spec.ts +0 -31
- package/src/providers/GroupedRenderingActivities/private/group.ts +0 -19
- package/src/providers/GroupedRenderingActivities/private/pick.spec.ts +0 -35
- package/src/providers/GroupedRenderingActivities/private/pick.ts +0 -20
- package/src/providers/GroupedRenderingActivities/useGroupedRenderingActivities.ts +0 -6
- package/src/providers/GroupedRenderingActivities/useNumRenderingActivities.ts +0 -5
- package/src/providers/HTMLContentTransformCOR/HTMLContentTransformComposer.tsx +0 -41
- package/src/providers/HTMLContentTransformCOR/index.ts +0 -8
- package/src/providers/HTMLContentTransformCOR/private/HTMLContentTransformContext.ts +0 -34
- package/src/providers/HTMLContentTransformCOR/private/useHTMLContentTransformContext.ts +0 -6
- package/src/providers/HTMLContentTransformCOR/useTransformHTMLContent.ts +0 -187
- package/src/providers/LiveRegionTwin/index.ts +0 -3
- package/src/providers/LiveRegionTwin/private/LiveRegionTwinComposer.ts +0 -27
- package/src/providers/LiveRegionTwin/private/createLiveRegionTwinComposer.tsx +0 -155
- package/src/providers/LiveRegionTwin/useLiveRegion.ts +0 -27
- package/src/providers/ReducedMotion/ReducedMotionComposer.tsx +0 -35
- package/src/providers/ReducedMotion/private/Context.ts +0 -22
- package/src/providers/ReducedMotion/private/useContext.ts +0 -8
- package/src/providers/ReducedMotion/useShouldReduceMotion.ts +0 -5
- package/src/providers/RenderingActivities/RenderingActivitiesComposer.tsx +0 -103
- package/src/providers/RenderingActivities/private/RenderingActivitiesContext.ts +0 -15
- package/src/providers/RenderingActivities/useActivityRendererMap.ts +0 -9
- package/src/providers/RenderingActivities/useRenderingActivities.ts +0 -7
- package/src/providers/RenderingActivities/useRenderingActivityKeys.ts +0 -5
- package/src/providers/TranscriptFocus/TranscriptFocusComposer.spec.tsx +0 -611
- package/src/providers/TranscriptFocus/useFocusByGroupKey.ts +0 -11
- package/src/providers/TranscriptFocus/useFocusedKey.ts +0 -6
- package/src/providers/TranscriptFocus/useGetGroupDescendantIdByActivityKey.ts +0 -5
- package/src/providers/createContextAndHook.ts +0 -23
- package/src/stylesheet/ComponentStylesheet.tsx +0 -33
- package/src/stylesheet/createComponentStyleElements.ts +0 -8
- package/src/testIds.ts +0 -18
- package/src/types/internal/mutableRefObject.ts +0 -40
- package/src/types/internal/refObject.ts +0 -40
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/buildInfo.ts"],"sourcesContent":["export { concatMiddleware, localize } from 'botframework-webchat-api';\nexport { type WebChatActivity } from 'botframework-webchat-core';\n\nexport { default as createCoreAttachmentMiddleware } from './Attachment/createMiddleware';\nexport { default as Context } from './hooks/internal/WebChatUIContext';\nexport { createCoreActivityMiddleware } from './Middleware/Activity/defaultActivityPolymiddleware';\nexport { default as createCoreActivityStatusMiddleware } from './Middleware/ActivityStatus/createCoreMiddleware';\nexport {\n type HTMLContentTransformEnhancer,\n type HTMLContentTransformFunction,\n type HTMLContentTransformMiddleware,\n type HTMLContentTransformRequest\n} from './providers/HTMLContentTransformCOR/index';\nexport { default as createStyleSet } from './Styles/createStyleSet';\nexport { default as testIds } from './testIds';\nexport { default as getTabIndex } from './Utils/TypeFocusSink/getTabIndex';\nexport { default as withEmoji } from './withEmoji/withEmoji';\n\nexport type * from './boot/component';\nexport * as Components from './boot/component';\nexport type * from './boot/hook';\nexport * as hooks from './boot/hook';\n\nexport { ReactWebChat as default } from './boot/component';\n\n// #region Build info\nimport buildInfo from './buildInfo';\n\nconst { object: buildInfoObject, version } = buildInfo;\n\nexport { buildInfoObject as buildInfo, version };\n// #endregion\n","import { createBuildInfo } from '@msinternal/botframework-webchat-base/utils';\n\nconst buildInfo = createBuildInfo('botframework-webchat:component');\n\nbuildInfo.set('buildTool', globalThis.WEB_CHAT_BUILD_INFO_BUILD_TOOL);\nbuildInfo.set('moduleFormat', globalThis.WEB_CHAT_BUILD_INFO_MODULE_FORMAT);\nbuildInfo.set('version', globalThis.WEB_CHAT_BUILD_INFO_VERSION);\n\nexport default buildInfo;\n"],"mappings":"0SAAA,OAAS,oBAAAA,EAAkB,YAAAC,MAAgB,2BCE3C,IAAMC,EAAYC,EAAgB,gCAAgC,EAElED,EAAU,IAAI,YAAa,MAAyC,EACpEA,EAAU,IAAI,eAAgB,WAA4C,EAC1EA,EAAU,IAAI,UAAW,8BAAsC,EAE/D,IAAOE,EAAQF,EDoBf,GAAM,CAAE,OAAQG,EAAiB,QAAAC,CAAQ,EAAIC","names":["concatMiddleware","localize","buildInfo","_u","buildInfo_default","buildInfoObject","version","buildInfo_default"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/ReactWebChat.tsx","../src/BasicWebChat.tsx","../src/BasicConnectivityStatus.js","../src/ConnectivityStatus/Connected.js","../src/ScreenReaderText.tsx","../src/hooks/internal/useWebChatUIContext.js","../src/hooks/internal/WebChatUIContext.ts","../src/hooks/internal/useStyleToEmotionObject.js","../src/ConnectivityStatus/Connecting.js","../src/ConnectivityStatus/Assets/SpinnerAnimation.js","../src/hooks/useStyleSet.ts","../src/hooks/internal/useForceRender.js","../src/hooks/internal/useTimer.ts","../src/ConnectivityStatus/Assets/WarningNotificationIcon.js","../src/ConnectivityStatus/FailedToConnect.js","../src/ConnectivityStatus/Assets/ErrorNotificationIcon.js","../src/ConnectivityStatus/JavaScriptError.js","../src/BasicToaster.js","../src/Toast/CollapseIcon.js","../src/Toast/ExpandIcon.js","../src/Toast/NotificationIcon.js","../src/Toast/CheckMarkIcon.js","../src/Toast/ExclamationMarkIcon.js","../src/Utils/randomId.js","../src/BasicTranscript.tsx","../src/Utils/detectBrowser.js","../src/BasicTypingIndicator.tsx","../src/Utils/FocusRedirector.tsx","../src/Utils/TypeFocusSink/inputtableKey.ts","../src/Utils/isZeroOrPositive.ts","../src/Transcript/KeyboardHelp.tsx","../src/hooks/internal/useUniqueId.ts","../src/hooks/useFocus.ts","../src/hooks/internal/createWaitUntilable.ts","../src/hooks/sendBoxFocus.ts","../src/Transcript/LiveRegionTranscript.tsx","../src/Transcript/LiveRegion/isPresentational.ts","../src/LiveRegion/LiveRegionActivity.tsx","../src/Utils/textFormatToContentType.js","../src/Utils/activityAltText.ts","../src/LiveRegion/private/LiveRegionAttachments.tsx","../src/LiveRegion/private/LiveRegionSuggestedActions.tsx","../src/Utils/computeSuggestedActionText.ts","../src/hooks/useRenderMarkdownAsHTML.ts","../src/Transcript/LiveRegion/SendFailed.tsx","../src/types/internal/SendStatus.ts","../src/hooks/internal/usePrevious.ts","../src/providers/LiveRegionTwin/private/useContext.ts","../src/providers/LiveRegionTwin/private/Context.ts","../src/providers/LiveRegionTwin/useQueueStaticElement.ts","../src/providers/LiveRegionTwin/LiveRegionTwinComposer.tsx","../src/providers/LiveRegionTwin/private/LiveRegionTwinContainer.tsx","../src/providers/LiveRegionTwin/private/useMarkAllAsRenderedEffect.ts","../src/providers/LiveRegionTwin/private/useStaticElementEntries.ts","../src/hooks/internal/useValueRef.ts","../src/Utils/tabbableElements.ts","../src/hooks/internal/useLocalizeAccessKey.ts","../src/hooks/internal/useNavigatorPlatform.js","../src/hooks/internal/useSuggestedActionsAccessKey.js","../src/Transcript/useTypistNames.ts","../src/providers/TranscriptFocus/TranscriptFocusComposer.tsx","../src/Utils/scrollIntoViewWithBlockNearest.ts","../src/providers/TranscriptFocus/private/Context.ts","../src/providers/ActivityTree/private/useContext.ts","../src/providers/ActivityTree/private/Context.ts","../src/providers/ActivityTree/useActivityTreeWithRenderer.ts","../src/hooks/internal/useStateRef.ts","../src/providers/TranscriptFocus/private/useContext.ts","../src/providers/TranscriptFocus/useActiveDescendantId.ts","../src/hooks/internal/useDispatchScrollPosition.js","../src/hooks/internal/useDispatchTranscriptFocusByActivityKey.ts","../src/providers/TranscriptFocus/useFocusByActivityKey.ts","../src/providers/TranscriptFocus/useFocusedActivityKey.ts","../src/providers/TranscriptFocus/useFocusedExplicitly.ts","../src/providers/TranscriptFocus/useFocusRelativeActivity.ts","../src/hooks/internal/useObserveFocusVisible.ts","../src/Utils/supportPseudoClass.ts","../src/hooks/internal/useNonce.js","../src/hooks/internal/useRegisterFocusTranscript.js","../src/Utils/removeInline.js","../src/hooks/internal/useRegisterScrollTo.js","../src/hooks/internal/useRegisterScrollToEnd.js","../src/TranscriptActivity.tsx","../src/Transcript/ActivityRow.tsx","../src/Transcript/FocusTrap.tsx","../src/Activity/Speak.tsx","../src/Activity/SayAlt.js","../src/Transcript/useActivityAccessibleName.ts","../src/providers/TranscriptFocus/useGetDescendantIdByActivityKey.ts","../src/hooks/internal/useMemoized.ts","../src/hooks/transcriptScrollRelative.ts","../src/Utils/AccessKeySink/Surface.js","../src/Utils/TypeFocusSink/getTabIndex.ts","../src/Utils/firstTabbableDescendant.js","../src/Utils/AccessKeySink/internal/Context.js","../src/Composer.tsx","../src/Attachment/createMiddleware.tsx","../src/Attachment/AudioAttachment.js","../src/Attachment/AudioContent.tsx","../src/Attachment/FileAttachment.js","../src/Attachment/FileContent.tsx","../src/Attachment/Assets/DownloadIcon.js","../src/Attachment/ImageAttachment.js","../src/Attachment/ImageContent.tsx","../src/Utils/CroppedImage.js","../src/Utils/readDataURIToBlob.js","../src/Attachment/Text/TextAttachment.tsx","../src/Attachment/Text/TextContent.tsx","../src/Attachment/Text/private/MarkdownTextContent.tsx","../src/LinkDefinition/LinkDefinitionItem.tsx","../src/LinkDefinition/private/ItemBody.tsx","../src/LinkDefinition/private/Badge.tsx","../src/LinkDefinition/private/OpenInNewWindowIcon.tsx","../src/LinkDefinition/private/extractHostnameWithSubdomain.ts","../src/LinkDefinition/LinkDefinitions.tsx","../src/LinkDefinition/private/Chevron.tsx","../src/Utils/JSONLinkedData/dereferenceBlankNodes.ts","../src/Utils/JSONLinkedData/getSafeOwnPropertyNames.ts","../src/Utils/JSONLinkedData/isBlankNode.ts","../src/Utils/JSONLinkedData/isUnconnectedBlankNode.ts","../src/Utils/JSONLinkedData/visitOnce.ts","../src/providers/ModalDialog/private/useContext.ts","../src/providers/ModalDialog/private/Context.ts","../src/providers/ModalDialog/useShowModal.ts","../src/Attachment/Text/private/CitationModalContent.tsx","../src/Attachment/Text/private/MessageSensitivityLabel.tsx","../src/Attachment/Text/private/ShieldIcon.tsx","../src/Attachment/Text/private/isHTMLButtonElement.ts","../src/Attachment/Text/private/PlainTextContent.tsx","../src/Attachment/VideoAttachment.js","../src/Attachment/VideoContent.tsx","../src/Attachment/HTMLVideoContent.tsx","../src/Attachment/VimeoContent.tsx","../src/Attachment/YouTubeContent.tsx","../src/Dictation.js","../src/hooks/useWebSpeechPonyfill.ts","../src/hooks/internal/useResumeAudioContext.ts","../src/hooks/internal/useSettableDictateAbortable.js","../src/ErrorBox.tsx","../src/hooks/internal/private/createOnEventShim.ts","../src/hooks/internal/BypassSpeechSynthesisPonyfill.js","../src/hooks/internal/UITracker.js","../src/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingWorker.worker.js","../src/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingWorker.ts","../src/Middleware/Activity/createCoreMiddleware.tsx","../src/Activity/CarouselLayout.js","../src/Activity/CarouselFilmStrip.js","../src/Activity/Bubble.tsx","../src/Activity/CarouselFilmStripAttachment.js","../src/Activity/StackedLayout.tsx","../src/Middleware/ActivityStatus/createSendStatusMiddleware.tsx","../src/ActivityStatus/SendStatus/SendStatus.tsx","../src/ActivityStatus/SendStatus/private/SendFailedRetry.js","../src/Utils/InlineMarkdown.js","../src/Utils/createCustomEvent.js","../src/hooks/internal/useInternalMarkdownIt.js","../src/Utils/walkMarkdownTokens.js","../src/Middleware/ActivityStatus/createTimestampMiddleware.tsx","../src/ActivityStatus/AbsoluteTime.js","../src/ActivityStatus/OthersActivityStatus.tsx","../src/ActivityStatus/private/Feedback/Feedback.tsx","../src/ActivityStatus/private/Feedback/private/VoteButton.tsx","../src/ActivityStatus/private/Feedback/private/ThumbButton.tsx","../src/ActivityStatus/private/Feedback/private/ThumbButton.Image.tsx","../src/ActivityStatus/private/Feedback/private/icons/ThumbDislike16Filled.tsx","../src/ActivityStatus/private/Feedback/private/icons/ThumbDislike16Regular.tsx","../src/ActivityStatus/private/Feedback/private/icons/ThumbLike16Filled.tsx","../src/ActivityStatus/private/Feedback/private/icons/ThumbLike16Regular.tsx","../src/ActivityStatus/private/Originator.tsx","../src/ActivityStatus/Slotted.tsx","../src/ActivityStatus/Timestamp.tsx","../src/ActivityStatus/private/RelativeTime.js","../src/hooks/internal/useForceRenderAtInterval.ts","../src/ActivityStatus/SelfActivityStatus.tsx","../src/Middleware/ActivityStatus/createCoreMiddleware.tsx","../src/Middleware/AttachmentForScreenReader/createCoreMiddleware.tsx","../src/Middleware/AttachmentForScreenReader/AudioAttachment.js","../src/Middleware/AttachmentForScreenReader/FileAttachment.js","../src/Middleware/AttachmentForScreenReader/ImageAttachment.js","../src/Middleware/AttachmentForScreenReader/TextAttachment.js","../src/Middleware/AttachmentForScreenReader/VideoAttachment.js","../src/Middleware/Avatar/createCoreMiddleware.tsx","../src/Avatar/ImageAvatar.js","../src/Avatar/InitialsAvatar.js","../src/Middleware/CardAction/createCoreMiddleware.js","../src/Middleware/ScrollToEndButton/ScrollToEndButton.js","../src/Middleware/ScrollToEndButton/createScrollToEndButtonMiddleware.ts","../src/Toast/createToastMiddleware.tsx","../src/BasicToast.js","../src/Toast/DismissIcon.js","../src/hooks/internal/useInternalRenderMarkdownInline.js","../src/Middleware/Toast/createCoreMiddleware.tsx","../src/Middleware/TypingIndicator/createCoreMiddleware.tsx","../src/Assets/TypingAnimation.js","../src/providers/ActivityTree/ActivityTreeComposer.tsx","../src/hooks/internal/useMemoWithPrevious.ts","../src/providers/ActivityTree/private/useActivitiesWithRenderer.ts","../src/providers/ActivityTree/private/useActivityTreeWithRenderer.ts","../src/Utils/intersectionOf.ts","../src/providers/internal/SendBox/SendBoxComposer.tsx","../src/hooks/useScrollToEnd.ts","../src/providers/internal/SendBox/private/Context.ts","../src/providers/ModalDialog/ModalDialogComposer.tsx","../src/providers/ModalDialog/private/Popover.tsx","../src/providers/Theme/useTheme.tsx","../src/providers/Theme/private/Context.ts","../src/SendBox/createMiddleware.tsx","../src/SendBox/BasicSendBox.tsx","../src/providers/internal/SendBox/private/useContext.ts","../src/providers/internal/SendBox/useErrorMessageId.ts","../src/SendBox/DictationInterims.tsx","../src/SendBox/MicrophoneButton.tsx","../src/hooks/useDictateAbortable.ts","../src/SendBox/Assets/MicrophoneIcon.js","../src/SendBox/IconButton.tsx","../src/Utils/AccessibleButton.tsx","../src/hooks/internal/useFocusVisible.ts","../src/SendBox/SendButton.tsx","../src/SendBox/Assets/SendIcon.js","../src/providers/internal/SendBox/useSubmit.ts","../src/SendBox/SuggestedActions.tsx","../src/hooks/internal/useFocusWithin.ts","../src/providers/RovingTabIndex/RovingTabIndexComposer.tsx","../src/providers/RovingTabIndex/private/Context.ts","../src/SendBox/SuggestedAction.tsx","../src/providers/RovingTabIndex/useItemRef.ts","../src/providers/RovingTabIndex/private/useContext.ts","../src/Utils/AccessKeySink/useFocusAccessKeyEffect.js","../src/Utils/AccessKeySink/internal/useContext.js","../src/SendBox/TextBox.tsx","../src/Utils/AccessibleInputText.tsx","../src/hooks/internal/useEnterKeyHint.js","../src/Utils/TypeFocusSink/navigableEvent.js","../src/hooks/useScrollDown.ts","../src/hooks/useScrollUp.ts","../src/withEmoji/withEmoji.tsx","../src/withEmoji/private/useUndoStack.ts","../src/withEmoji/private/UndoEntry.ts","../src/SendBox/AutoResizeTextArea.tsx","../src/Utils/AccessibleTextArea.tsx","../src/SendBoxToolbar/BasicSendBoxToolbar.tsx","../src/SendBoxToolbar/UploadButton.tsx","../src/hooks/useMakeThumbnail.ts","../src/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingBrowser.ts","../src/Utils/downscaleImageToDataURL/index.ts","../src/SendBoxToolbar/Assets/AttachmentIcon.tsx","../src/SendBoxToolbar/createMiddleware.tsx","../src/Styles/createStyleSet.ts","../src/Styles/StyleSet/Activities.ts","../src/Styles/StyleSet/AudioAttachment.ts","../src/Styles/StyleSet/AudioContent.ts","../src/Styles/StyleSet/AutoResizeTextArea.ts","../src/Styles/StyleSet/Avatar.ts","../src/Styles/StyleSet/BasicTranscript.ts","../src/Styles/mirrorStyle.js","../src/Styles/StyleSet/Bubble.ts","../src/Styles/StyleSet/CarouselFilmStrip.ts","../src/Styles/StyleSet/CarouselFilmStripAttachment.ts","../src/Styles/StyleSet/CarouselFlipper.ts","../src/Styles/StyleSet/CitationModalDialog.ts","../src/Styles/StyleSet/ConnectivityNotification.ts","../src/Styles/CustomPropertyNames.ts","../src/Styles/StyleSet/CSSCustomProperties.ts","../src/Styles/StyleSet/DictationInterims.ts","../src/Styles/StyleSet/ErrorBox.ts","../src/Styles/StyleSet/ErrorNotification.ts","../src/Styles/StyleSet/FileContent.ts","../src/Styles/StyleSet/ImageAvatar.ts","../src/Styles/StyleSet/InitialsAvatar.ts","../src/Styles/StyleSet/KeyboardHelp.ts","../src/Styles/StyleSet/Constants.ts","../src/Styles/CSSTokens.ts","../src/Styles/StyleSet/LinkDefinitions.ts","../src/Styles/StyleSet/MicrophoneButton.ts","../src/Styles/StyleSet/ModalDialog.ts","../src/Styles/StyleSet/RenderMarkdown.ts","../src/Styles/StyleSet/Root.ts","../src/Styles/StyleSet/ScrollToEndButton.ts","../src/Styles/StyleSet/SendBoxButton.ts","../src/Styles/StyleSet/SendBox.ts","../src/Styles/StyleSet/SendBoxTextBox.ts","../src/Styles/StyleSet/SendStatus.ts","../src/Styles/StyleSet/SingleAttachmentActivity.ts","../src/Styles/StyleSet/SlottedActivityStatus.ts","../src/Styles/StyleSet/SpinnerAnimation.ts","../src/Styles/StyleSet/StackedLayout.ts","../src/Styles/StyleSet/SuggestedActions.ts","../src/Styles/StyleSet/SuggestedAction.ts","../src/Styles/StyleSet/TextContent.ts","../src/Styles/StyleSet/ThumbButton.ts","../src/Styles/StyleSet/Toaster.ts","../src/Styles/StyleSet/Toast.ts","../src/Styles/StyleSet/TypingAnimation.ts","../src/Styles/StyleSet/TypingIndicator.ts","../src/Styles/StyleSet/UploadButton.ts","../src/Styles/StyleSet/VideoAttachment.ts","../src/Styles/StyleSet/VideoContent.ts","../src/Styles/StyleSet/VimeoContent.ts","../src/Styles/StyleSet/WarningNotification.ts","../src/Styles/StyleSet/YouTubeContent.ts","../src/Utils/updateMarkdownAttrs.js","../src/Utils/addTargetBlankToHyperlinksMarkdown.js","../src/Utils/createCSSKey.js","../src/Utils/mapMap.js","../src/Activity/Avatar.tsx","../src/Utils/LocalizedString.tsx","../src/Utils/betterLinks.ts","../src/providers/Theme/ThemeProvider.tsx","../src/hooks/index.ts","../src/hooks/useObserveScrollPosition.ts","../src/hooks/useObserveTranscriptFocus.ts","../src/hooks/useScrollTo.ts","../src/hooks/useSendFiles.ts","../src/hooks/useSendMessage.ts"],"sourcesContent":["import { hooks as apiHooks, concatMiddleware, localize } from 'botframework-webchat-api';\nimport { type WebChatActivity } from 'botframework-webchat-core';\n\nimport ReactWebChat, { ReactWebChatProps } from './ReactWebChat';\n\nimport Composer, { ComposerProps } from './Composer';\n\nimport AccessKeySinkSurface from './Utils/AccessKeySink/Surface';\n\nimport BasicConnectivityStatus from './BasicConnectivityStatus';\nimport BasicToaster from './BasicToaster';\nimport BasicTranscript from './BasicTranscript';\nimport BasicWebChat, { BasicWebChatProps } from './BasicWebChat';\nimport BasicSendBox from './SendBox/BasicSendBox';\nimport BasicSendBoxToolbar from './SendBoxToolbar/BasicSendBoxToolbar';\n\nimport Avatar from './Activity/Avatar';\nimport Bubble from './Activity/Bubble';\nimport SpeakActivity from './Activity/Speak';\nimport SendStatus from './ActivityStatus/SendStatus/SendStatus';\nimport Timestamp from './ActivityStatus/Timestamp';\nimport ErrorBox from './ErrorBox';\n\nimport LocalizedString from './Utils/LocalizedString';\n\nimport AudioContent from './Attachment/AudioContent';\nimport FileContent from './Attachment/FileContent';\nimport HTMLVideoContent from './Attachment/HTMLVideoContent';\nimport ImageContent from './Attachment/ImageContent';\nimport TextContent from './Attachment/Text/TextContent';\nimport VideoContent from './Attachment/VideoContent';\nimport VimeoContent from './Attachment/VimeoContent';\nimport YouTubeContent from './Attachment/YouTubeContent';\n\nimport DictationInterims from './SendBox/DictationInterims';\nimport MicrophoneButton from './SendBox/MicrophoneButton';\nimport SendButton from './SendBox/SendButton';\nimport SuggestedActions from './SendBox/SuggestedActions';\nimport SendTextBox from './SendBox/TextBox';\nimport UploadButton from './SendBoxToolbar/UploadButton';\n\nimport createCoreAttachmentMiddleware from './Attachment/createMiddleware';\nimport createCoreActivityMiddleware from './Middleware/Activity/createCoreMiddleware';\nimport createCoreActivityStatusMiddleware from './Middleware/ActivityStatus/createCoreMiddleware';\nimport createStyleSet from './Styles/createStyleSet';\nimport getTabIndex from './Utils/TypeFocusSink/getTabIndex';\nimport Context from './hooks/internal/WebChatUIContext';\nimport ThemeProvider from './providers/Theme/ThemeProvider';\nimport withEmoji from './withEmoji/withEmoji';\n\nimport * as componentHooks from './hooks/index';\n\nexport { type SendBoxFocusOptions } from './hooks/index';\n\nconst hooks = {\n ...apiHooks,\n ...componentHooks\n};\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\nconst Components = {\n BasicWebChat,\n Composer,\n ThemeProvider,\n\n // Components for restructuring BasicWebChat\n AccessKeySinkSurface,\n BasicConnectivityStatus,\n BasicSendBox,\n BasicSendBoxToolbar,\n BasicToaster,\n BasicTranscript,\n\n // Components for recomposing activities and attachments\n AudioContent,\n FileContent,\n HTMLVideoContent,\n ImageContent,\n TextContent,\n VideoContent,\n VimeoContent,\n YouTubeContent,\n\n // Components for recomposing transcript\n Avatar,\n Bubble,\n ErrorBox,\n SendStatus,\n SpeakActivity,\n Timestamp,\n\n // Components for recomposing send box\n DictationInterims,\n MicrophoneButton,\n SendButton,\n SendTextBox,\n SuggestedActions,\n UploadButton,\n\n // Components for localization\n LocalizedString\n};\n\nexport default ReactWebChat;\n\nexport {\n Components,\n Context,\n buildInfo,\n concatMiddleware,\n createCoreActivityMiddleware,\n createCoreActivityStatusMiddleware,\n createCoreAttachmentMiddleware,\n createStyleSet,\n getTabIndex,\n hooks,\n localize,\n version,\n withEmoji\n};\n\nexport type { BasicWebChatProps, ComposerProps, ReactWebChatProps, WebChatActivity };\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport BasicWebChat from './BasicWebChat';\nimport Composer, { ComposerProps } from './Composer';\n\n// Please keep this file as simple as possible. This is for setting up the surface (a.k.a. <Composer>) and <BasicWebChat> only.\n\n// Web developers may choose to put things before/after <BasicWebChat> while still inside the surface.\n// For example,\n// - They can hide our default send box and built their own using hooks\n// - They can run hooks outside of activity/attachment middleware\n// - They will put <Composer> as very top of their page, and allow buttons on their existing page to send message to bot\n\n// Subset of landmark roles: https://w3.org/TR/wai-aria/#landmark_roles\nconst ARIA_LANDMARK_ROLES = ['complementary', 'contentinfo', 'form', 'main', 'region'];\n\ntype ReactWebChatProps = Readonly<\n Omit<ComposerProps, 'children'> & {\n className?: string;\n role?: 'complementary' | 'contentinfo' | 'form' | 'main' | 'region';\n }\n>;\n\nconst ReactWebChat = ({ className, role, ...composerProps }: ReactWebChatProps) => (\n <Composer {...composerProps}>\n <BasicWebChat className={className} role={role} />\n </Composer>\n);\n\nReactWebChat.defaultProps = {\n className: undefined,\n role: undefined,\n ...Composer.defaultProps\n};\n\nconst {\n // Excluding \"children\" from ComposerProps.\n children: _,\n ...composerPropTypesWithoutChildren\n} = Composer.propTypes;\n\nReactWebChat.propTypes = {\n className: PropTypes.string,\n // Ignoring deficiencies with TypeScript/PropTypes inference.\n // @ts-ignore\n role: PropTypes.oneOf(ARIA_LANDMARK_ROLES),\n ...composerPropTypesWithoutChildren\n};\n\nexport default ReactWebChat;\n\nexport type { ReactWebChatProps };\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [0, 1, 2] }] */\n/* eslint react/no-unsafe: off */\n\nimport { SendBoxMiddlewareProxy, hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, { FC } from 'react';\n\nimport BasicConnectivityStatus from './BasicConnectivityStatus';\nimport BasicToaster from './BasicToaster';\nimport BasicTranscript from './BasicTranscript';\nimport AccessKeySinkSurface from './Utils/AccessKeySink/Surface';\nimport useStyleToEmotionObject from './hooks/internal/useStyleToEmotionObject';\nimport useStyleSet from './hooks/useStyleSet';\n\nconst { useStyleOptions } = hooks;\n\nconst ROOT_STYLE = {\n display: 'flex',\n flexDirection: 'column'\n};\n\nconst CONNECTIVITY_STATUS_STYLE = {\n flexShrink: 0\n};\n\nconst SEND_BOX_CSS = {\n flexShrink: 0\n};\n\nconst TOASTER_STYLE = {\n flexShrink: 0\n};\n\nconst TRANSCRIPT_STYLE = {\n flex: 1\n};\n\n// Subset of landmark roles: https://w3.org/TR/wai-aria/#landmark_roles\nconst ARIA_LANDMARK_ROLES = ['complementary', 'contentinfo', 'form', 'main', 'region'];\n\ntype BasicWebChatProps = {\n className?: string;\n role?: 'complementary' | 'contentinfo' | 'form' | 'main' | 'region';\n};\n\nconst BasicWebChat: FC<BasicWebChatProps> = ({ className, role }) => {\n const [{ root: rootStyleSet }] = useStyleSet();\n const [options] = useStyleOptions();\n const styleToEmotionObject = useStyleToEmotionObject();\n\n const connectivityStatusClassName = styleToEmotionObject(CONNECTIVITY_STATUS_STYLE) + '';\n const rootClassName = styleToEmotionObject(ROOT_STYLE) + '';\n const sendBoxClassName = styleToEmotionObject(SEND_BOX_CSS) + '';\n const toasterClassName = styleToEmotionObject(TOASTER_STYLE) + '';\n const transcriptClassName = styleToEmotionObject(TRANSCRIPT_STYLE) + '';\n\n // Fallback to \"complementary\" if specified is not a valid landmark role.\n if (!ARIA_LANDMARK_ROLES.includes(role)) {\n role = 'complementary';\n }\n\n return (\n <AccessKeySinkSurface className={classNames(rootClassName, rootStyleSet + '', (className || '') + '')} role={role}>\n {!options.hideToaster && <BasicToaster className={toasterClassName} />}\n <BasicTranscript className={transcriptClassName} />\n <BasicConnectivityStatus className={connectivityStatusClassName} />\n <SendBoxMiddlewareProxy className={sendBoxClassName} request={undefined} />\n </AccessKeySinkSurface>\n );\n};\n\nBasicWebChat.defaultProps = {\n className: '',\n role: 'complementary'\n};\n\nBasicWebChat.propTypes = {\n className: PropTypes.string,\n // Ignoring deficiencies with TypeScript/PropTypes inference.\n // @ts-ignore\n role: PropTypes.oneOf(ARIA_LANDMARK_ROLES)\n};\n\nexport default BasicWebChat;\n\nexport type { BasicWebChatProps };\n","import { hooks } from 'botframework-webchat-api';\nimport React from 'react';\n\nimport ConnectivityStatusConnected from './ConnectivityStatus/Connected';\nimport ConnectivityStatusConnecting from './ConnectivityStatus/Connecting';\nimport ConnectivityStatusFailedToConnect from './ConnectivityStatus/FailedToConnect';\nimport ConnectivityStatusJavaScriptError from './ConnectivityStatus/JavaScriptError';\n\nconst { useDebouncedNotifications } = hooks;\n\nconst BasicConnectivityStatus = () => {\n const [{ connectivitystatus: connectivityStatus }] = useDebouncedNotifications();\n\n if (!connectivityStatus) {\n return false;\n }\n\n switch (connectivityStatus.message) {\n case 'connecting':\n return <ConnectivityStatusConnecting />;\n\n case 'javascripterror':\n return <ConnectivityStatusJavaScriptError />;\n\n case 'failedtoconnect':\n return <ConnectivityStatusFailedToConnect />;\n\n case 'reconnecting':\n return <ConnectivityStatusConnecting reconnect={true} />;\n\n case 'connected':\n default:\n return <ConnectivityStatusConnected />;\n }\n};\n\nexport default BasicConnectivityStatus;\n","import { hooks } from 'botframework-webchat-api';\nimport React from 'react';\n\nimport ScreenReaderText from '../ScreenReaderText';\n\nconst { useLocalizer } = hooks;\n\nconst ConnectivityStatusConnected = () => {\n const localize = useLocalizer();\n\n return <ScreenReaderText text={localize('CONNECTIVITY_STATUS_ALT', localize('CONNECTIVITY_STATUS_ALT_CONNECTED'))} />;\n};\n\nexport default ConnectivityStatusConnected;\n","/* eslint react/forbid-dom-props: [\"off\"] */\n\nimport PropTypes from 'prop-types';\nimport React, { forwardRef, memo } from 'react';\n\nimport type { VFC } from 'react';\n\nimport useStyleToEmotionObject from './hooks/internal/useStyleToEmotionObject';\n\nconst ROOT_STYLE = {\n // .sr-only - This component is intended to be invisible to the visual Web Chat user, but read by the AT when using a screen reader\n color: 'transparent',\n height: 1,\n overflow: 'hidden',\n position: 'absolute',\n // We need to set top: 0, otherwise, it will repro:\n // - Run NVDA\n // - Make the transcript long enough to show the scrollbar\n // - Press SHIFT-TAB, focus on upload button\n // - Press up arrow multiple times\n top: 0,\n whiteSpace: 'nowrap',\n width: 1\n};\n\ntype ScreenReaderTextProps = {\n 'aria-hidden'?: boolean;\n id?: string;\n text: string;\n};\n\nconst ScreenReaderText: VFC<ScreenReaderTextProps> = forwardRef<HTMLDivElement, ScreenReaderTextProps>(\n ({ 'aria-hidden': ariaHidden, id, text }, ref) => {\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n\n if (ariaHidden && !id) {\n console.warn(\n 'botframework-webchat assertion: when \"aria-hidden\" is set, the screen reader text should be read by \"aria-labelledby\". Thus, \"id\" must be set.'\n );\n }\n\n return (\n <div aria-hidden={ariaHidden} className={rootClassName} id={id} ref={ref}>\n {text}\n </div>\n );\n }\n);\n\nScreenReaderText.defaultProps = {\n 'aria-hidden': undefined,\n id: undefined\n};\n\nScreenReaderText.propTypes = {\n 'aria-hidden': PropTypes.bool,\n id: PropTypes.string,\n text: PropTypes.string.isRequired\n};\n\nScreenReaderText.displayName = 'ScreenReaderText';\n\nexport default memo(ScreenReaderText);\n","import { useContext } from 'react';\n\nimport WebChatUIContext from './WebChatUIContext';\n\nexport default function useWebChatUIContext() {\n const context = useContext(WebChatUIContext);\n\n if (!context) {\n throw new Error('This hook can only be used on a component that is a descendant of <Composer>');\n }\n\n return context;\n}\n","import { createContext, type MutableRefObject } from 'react';\n\nimport { type FocusTranscriptInit } from '../../types/internal/FocusTranscriptInit';\n\nexport type ContextType = {\n focusTranscriptCallbacksRef: MutableRefObject<((init: FocusTranscriptInit) => Promise<void>)[]>;\n};\n\nconst context = createContext<ContextType>(undefined as ContextType);\n\nexport default context;\n","import useWebChatUIContext from './useWebChatUIContext';\n\nexport default function useStyleToEmotionObject() {\n return useWebChatUIContext().styleToEmotionObject;\n}\n","import { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, { useState } from 'react';\n\nimport ScreenReaderText from '../ScreenReaderText';\nimport SpinnerAnimation from './Assets/SpinnerAnimation';\nimport useForceRender from '../hooks/internal/useForceRender';\nimport useStyleSet from '../hooks/useStyleSet';\nimport useTimer from '../hooks/internal/useTimer';\nimport WarningNotificationIcon from './Assets/WarningNotificationIcon';\n\nconst { useDirection, useLocalizer, usePonyfill, useStyleOptions } = hooks;\n\nconst ConnectivityStatusConnecting = ({ reconnect }) => {\n const [{ Date }] = usePonyfill();\n const [{ slowConnectionAfter }] = useStyleOptions();\n const [\n { connectivityNotification: connectivityNotificationStyleSet, warningNotification: warningNotificationStyleSet }\n ] = useStyleSet();\n const [direction] = useDirection();\n const [initialRenderAt] = useState(() => Date.now());\n const forceRender = useForceRender();\n const localize = useLocalizer();\n\n const initialConnectionText = localize('CONNECTIVITY_STATUS_ALT_CONNECTING');\n const interruptedConnectionText = localize('CONNECTIVITY_STATUS_ALT_RECONNECTING');\n const slowConnectionText = localize('CONNECTIVITY_STATUS_ALT_SLOW_CONNECTION');\n\n useTimer(initialRenderAt + slowConnectionAfter, forceRender);\n\n const now = Date.now();\n const slow = now >= initialRenderAt + slowConnectionAfter;\n\n return slow ? (\n <React.Fragment>\n <ScreenReaderText text={localize('CONNECTIVITY_STATUS_ALT', slowConnectionText)} />\n <div\n aria-hidden={true}\n className={classNames('webchat__connectivityStatus', warningNotificationStyleSet + '')}\n dir={direction}\n >\n <WarningNotificationIcon />\n {slowConnectionText}\n </div>\n </React.Fragment>\n ) : (\n <React.Fragment>\n <ScreenReaderText\n text={localize('CONNECTIVITY_STATUS_ALT', reconnect ? interruptedConnectionText : initialConnectionText)}\n />\n <div\n aria-hidden={true}\n className={classNames('webchat__connectivityStatus', connectivityNotificationStyleSet + '')}\n dir={direction}\n >\n <SpinnerAnimation />\n {reconnect ? interruptedConnectionText : initialConnectionText}\n </div>\n </React.Fragment>\n );\n};\n\nConnectivityStatusConnecting.defaultProps = {\n reconnect: false\n};\n\nConnectivityStatusConnecting.propTypes = {\n reconnect: PropTypes.bool\n};\n\nexport default ConnectivityStatusConnecting;\n","import { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport React from 'react';\n\nimport useStyleSet from '../../hooks/useStyleSet';\n\nconst { useDirection } = hooks;\n\nconst SpinnerAnimation = () => {\n const [{ spinnerAnimation: spinnerAnimationStyleSet }] = useStyleSet();\n const [direction] = useDirection();\n\n return <div className={classNames(spinnerAnimationStyleSet + '', direction === 'rtl' && 'webchat__spinner--rtl')} />;\n};\n\nexport default SpinnerAnimation;\n","import type createStyleSet from '../Styles/createStyleSet';\nimport useWebChatUIContext from './internal/useWebChatUIContext';\n\n// TODO: Seems type of value is `string`.\nexport default function useStyleSet(): readonly [Record<keyof ReturnType<typeof createStyleSet>, any>] {\n return Object.freeze([useWebChatUIContext().styleSet] as const);\n}\n","import { useCallback, useState } from 'react';\n\nfunction useForceRender() {\n const [, setForceRender] = useState();\n\n return useCallback(() => setForceRender({}), [setForceRender]);\n}\n\nexport default useForceRender;\n","import { hooks } from 'botframework-webchat-api';\nimport { useEffect } from 'react';\n\nconst { usePonyfill } = hooks;\n\n// TODO: [P2] Dedupe this function from \"api\", possibly create a new \"util\" package.\n\n/**\n * Calls a callback function at a specific time.\n */\nexport default function useTimer(at: number, fn: () => void): void {\n const [{ clearTimeout, Date, setTimeout }] = usePonyfill();\n\n useEffect(() => {\n if (typeof at === 'number') {\n const ms = Math.max(0, at - Date.now());\n\n // useEffect() is running after yielding to sync code via setImmediate (IE), MessageChannel (4ms), or setTimeout.\n // Thus, when calling setTimeout(..., 0), under Lolex, it will be waited for another loop.\n // In other words, setTimeout(..., 0) won't fire right away. It will be fired after clock.tick(<any number>).\n if (ms) {\n const timeout = setTimeout(fn, ms);\n\n return () => clearTimeout(timeout);\n }\n\n fn();\n }\n }, [at, clearTimeout, Date, fn, setTimeout]);\n}\n","import { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nconst { useDirection } = hooks;\n\nconst ICON_SIZE_FACTOR = 16;\n\nconst WarningNotificationIcon = ({ className, size }) => {\n const [direction] = useDirection();\n\n return (\n <svg\n alt=\"\"\n className={classNames(className + '', direction === 'rtl' && 'webchat_warning--rtl')}\n height={ICON_SIZE_FACTOR * size}\n viewBox=\"0 0 13.1 13.1\"\n width={ICON_SIZE_FACTOR * size}\n >\n <path d=\"M13.1,13.1H0L6.6,0L13.1,13.1z M7,10.5H6.1v0.9H7V10.5z M7,9.7V5.2H6.1v4.4L7,9.7z\" fillRule=\"evenodd\" />\n </svg>\n );\n};\n\nWarningNotificationIcon.defaultProps = {\n className: '',\n size: 1\n};\n\nWarningNotificationIcon.propTypes = {\n className: PropTypes.string,\n size: PropTypes.number\n};\n\nexport default WarningNotificationIcon;\n","import { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport React from 'react';\n\nimport ErrorNotificationIcon from './Assets/ErrorNotificationIcon';\nimport ScreenReaderText from '../ScreenReaderText';\nimport useStyleSet from '../hooks/useStyleSet';\n\nconst { useDirection, useLocalizer } = hooks;\n\nconst ConnectivityStatusFailedToConnect = () => {\n const [{ errorNotification: errorNotificationStyleSet }] = useStyleSet();\n const [direction] = useDirection();\n const localize = useLocalizer();\n\n const failedConnectionText = localize('CONNECTIVITY_STATUS_ALT_FATAL');\n\n return (\n <React.Fragment>\n <ScreenReaderText text={localize('CONNECTIVITY_STATUS_ALT', failedConnectionText)} />\n <div\n aria-hidden={true}\n className={classNames('webchat__connectivityStatus', errorNotificationStyleSet + '')}\n dir={direction}\n >\n <ErrorNotificationIcon />\n {failedConnectionText}\n </div>\n </React.Fragment>\n );\n};\n\nexport default ConnectivityStatusFailedToConnect;\n","import { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nconst { useDirection } = hooks;\n\nconst ICON_SIZE_FACTOR = 16;\n\nconst ErrorNotificationIcon = ({ className, size }) => {\n const [direction] = useDirection();\n\n return (\n <svg\n alt=\"\"\n className={classNames(className + '', direction === 'rtl' && 'webchat__error--rtl')}\n height={ICON_SIZE_FACTOR * size}\n viewBox=\"0 0 13.1 13.1\"\n width={ICON_SIZE_FACTOR * size}\n >\n <path\n d=\"M6.5,13C2.9,13,0,10.1,0,6.5S2.9,0,6.5,0S13,2.9,13,6.5S10.1,13,6.5,13z M6.1,3.5v4.3h0.9V3.5H6.1z M6.1,8.7v0.9h0.9V8.7H6.1z\"\n fillRule=\"evenodd\"\n />\n </svg>\n );\n};\n\nErrorNotificationIcon.defaultProps = {\n className: '',\n size: 1\n};\n\nErrorNotificationIcon.propTypes = {\n className: PropTypes.string,\n size: PropTypes.number\n};\n\nexport default ErrorNotificationIcon;\n","import { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport React from 'react';\n\nimport ErrorNotificationIcon from './Assets/ErrorNotificationIcon';\nimport ScreenReaderText from '../ScreenReaderText';\nimport useStyleSet from '../hooks/useStyleSet';\n\nconst { useDirection, useLocalizer } = hooks;\n\nconst ConnectivityStatusJavaScriptError = () => {\n const [{ errorNotification: errorNotificationStyleSet }] = useStyleSet();\n const [direction] = useDirection();\n const localize = useLocalizer();\n\n const renderErrorNotificationText = localize('CONNECTIVITY_STATUS_ALT_RENDER_ERROR');\n\n return (\n <React.Fragment>\n <ScreenReaderText text={localize('CONNECTIVITY_STATUS_ALT', renderErrorNotificationText)} />\n <div\n aria-hidden={true}\n className={classNames('webchat__connectivityStatus', errorNotificationStyleSet + '')}\n dir={direction}\n >\n <ErrorNotificationIcon />\n {renderErrorNotificationText}\n </div>\n </React.Fragment>\n );\n};\n\nexport default ConnectivityStatusJavaScriptError;\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [0, 1, 2, 3, 4, 5] }] */\n/* eslint react/forbid-dom-props: \"off\" */\n\nimport { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport CollapseIcon from './Toast/CollapseIcon';\nimport ExpandIcon from './Toast/ExpandIcon';\nimport NotificationIcon from './Toast/NotificationIcon';\nimport randomId from './Utils/randomId';\nimport useStyleSet from './hooks/useStyleSet';\nimport useStyleToEmotionObject from './hooks/internal/useStyleToEmotionObject';\n\nconst { useDebouncedNotifications, useLocalizer, useRenderToast } = hooks;\n\nconst ROOT_STYLE = {\n display: 'flex',\n flexDirection: 'column',\n\n '& .webchat__toaster__header': {\n display: 'flex',\n flexShrink: 0\n },\n\n '& .webchat__toaster__expandText': {\n flex: 1\n },\n\n '& .webchat__toaster__list': {\n display: 'block',\n listStyleType: 'none'\n }\n};\n\nconst LEVEL_AS_NUMBER = {\n error: 1,\n warn: 2,\n info: 3,\n success: 4\n};\n\nconst LEVEL_AS_NUMBER_KEYS = Object.keys(LEVEL_AS_NUMBER);\n\nfunction getLevelAsNumber(level) {\n // Mitigated through allowlisting.\n // eslint-disable-next-line security/detect-object-injection\n return LEVEL_AS_NUMBER_KEYS.includes(level) ? LEVEL_AS_NUMBER[level] : 5;\n}\n\nfunction compareLevel(x, y) {\n return getLevelAsNumber(x) - getLevelAsNumber(y);\n}\n\nfunction sortNotifications(map) {\n return (\n Object.values(map)\n // We want the order reversed, most recent on top.\n .sort(({ timestamp: x }, { timestamp: y }) => y - x)\n );\n}\n\nconst PASSTHRU_FN = value => value;\nconst TOAST_ACCORDION_IDS = {\n two: 'TOAST_ACCORDION_TWO',\n few: 'TOAST_ACCORDION_FEW',\n many: 'TOAST_ACCORDION_MANY',\n other: 'TOAST_ACCORDION_OTHER'\n};\n\nconst BasicToaster = () => {\n const instanceId = useMemo(randomId, []);\n const [{ toaster: toasterStyleSet }] = useStyleSet();\n const [debouncedNotifications] = useDebouncedNotifications();\n const [expanded, setExpanded] = useState(false);\n const localizeWithPlural = useLocalizer({ plural: true });\n const renderToast = useRenderToast();\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n\n const handleToggleExpand = useCallback(() => setExpanded(!expanded), [expanded, setExpanded]);\n const sortedNotifications = useMemo(() => sortNotifications(debouncedNotifications), [debouncedNotifications]);\n const sortedNotificationsWithChildren = useMemo(\n () =>\n sortedNotifications\n .map(notification => {\n const children = renderToast({ notification });\n\n return children && { children, notification };\n })\n .filter(PASSTHRU_FN),\n [renderToast, sortedNotifications]\n );\n\n const expandable = sortedNotificationsWithChildren.length > 1;\n const [highestLevel] = sortedNotificationsWithChildren.map(({ notification: { level } }) => level).sort(compareLevel);\n\n const expandableElementId = useMemo(\n () => (!expandable || expanded ? `webchat__toaster__list__${instanceId}` : undefined),\n [expandable, expanded, instanceId]\n );\n const headerElementId = useMemo(\n () => (expandable ? `webchat__toaster__header__${instanceId}` : undefined),\n [expandable, instanceId]\n );\n\n useEffect(() => {\n !expandable && setExpanded(false);\n }, [expandable]);\n\n return (\n <div\n aria-labelledby={headerElementId}\n aria-live=\"polite\"\n aria-relevant=\"all\"\n className={classNames(\n 'webchat__toaster',\n {\n 'webchat__toaster--expandable': expandable,\n 'webchat__toaster--expanded': expanded,\n 'webchat__toaster--error': highestLevel === 'error',\n 'webchat__toaster--info': highestLevel === 'info',\n 'webchat__toaster--success': highestLevel === 'success',\n 'webchat__toaster--warn': highestLevel === 'warn'\n },\n rootClassName,\n toasterStyleSet + ''\n )}\n role=\"log\"\n >\n {expandable && (\n <button\n aria-controls={expandableElementId}\n aria-expanded={expanded}\n className=\"webchat__toaster__header\"\n id={headerElementId}\n onClick={handleToggleExpand}\n type=\"button\"\n >\n <div aria-hidden={true} className=\"webchat__toaster__expandLevelIconBox\">\n <NotificationIcon className=\"webchat__toaster__expandLevelIcon\" level={highestLevel} />\n </div>\n <div className=\"webchat__toaster__expandText\">\n {localizeWithPlural(TOAST_ACCORDION_IDS, sortedNotificationsWithChildren.length)}\n </div>\n <div aria-hidden={true} className=\"webchat__toaster__expandIcon\">\n <div className=\"webchat__toaster__expandIconFocus\">{expanded ? <CollapseIcon /> : <ExpandIcon />}</div>\n </div>\n </button>\n )}\n {(!expandable || expanded) && (\n <div aria-labelledby={headerElementId} className=\"webchat__toaster__list\" id={expandableElementId}>\n {sortedNotificationsWithChildren.map(({ children, notification: { id } }) => (\n <div aria-atomic={true} className=\"webchat__toaster__listItem\" key={id}>\n {children}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n};\n\nexport default BasicToaster;\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nconst CollapseIcon = ({ className }) => (\n <svg\n className={(className || '') + ''}\n focusable={false}\n height=\"9\"\n role=\"presentation\"\n viewBox=\"0 0 16 9\"\n width=\"16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M15.2734 8.97656L8 1.71094L0.726563 8.97656L0.0234375 8.27344L8 0.289062L15.9766 8.27344L15.2734 8.97656Z\" />\n </svg>\n);\n\nCollapseIcon.defaultProps = {\n className: undefined\n};\n\nCollapseIcon.propTypes = {\n className: PropTypes.string\n};\n\nexport default CollapseIcon;\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nconst ExpandIcon = ({ className }) => (\n <svg\n className={(className || '') + ''}\n focusable={false}\n height=\"10\"\n role=\"presentation\"\n viewBox=\"0 0 16 10\"\n width=\"16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M15.1484 0.648437L15.8516 1.35156L8 9.20312L0.148438 1.35156L0.851563 0.648438L8 7.79687L15.1484 0.648437Z\" />\n </svg>\n);\n\nExpandIcon.defaultProps = {\n className: undefined\n};\n\nExpandIcon.propTypes = {\n className: PropTypes.string\n};\n\nexport default ExpandIcon;\n","import { hooks } from 'botframework-webchat-api';\nimport { isForbiddenPropertyName } from 'botframework-webchat-core';\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nimport CheckMarkIcon from './CheckMarkIcon';\nimport ExclamationMarkIcon from './ExclamationMarkIcon';\n\nconst { useLocalizer } = hooks;\n\nconst NotificationIcon = ({ className, level }) => {\n const localize = useLocalizer();\n\n const prefixes = {\n error: localize('TOAST_ALT_ERROR'),\n info: localize('TOAST_ALT_INFO'),\n success: localize('TOAST_ALT_SUCCESS'),\n warn: localize('TOAST_ALT_WARN')\n };\n\n // Mitigated through denylisting.\n // eslint-disable-next-line security/detect-object-injection\n const prefix = (!isForbiddenPropertyName(level) && prefixes[level]) || '';\n\n return (\n <React.Fragment>\n {level === 'success' ? (\n <CheckMarkIcon aria-label={prefix} className={className} />\n ) : (\n <ExclamationMarkIcon aria-label={prefix} className={className} />\n )}\n </React.Fragment>\n );\n};\n\nNotificationIcon.defaultProps = {\n className: undefined\n};\n\nNotificationIcon.propTypes = {\n className: PropTypes.string,\n level: PropTypes.oneOf(['error', 'info', 'success', 'warn']).isRequired\n};\n\nexport default NotificationIcon;\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nconst CheckMarkIcon = ({ 'aria-label': ariaLabel, className }) => (\n <svg\n aria-label={ariaLabel}\n className={(className || '') + ''}\n fill=\"none\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M14.5605 5.81055L15.4395 6.68945L8.125 14.0039L4.56055 10.4395L5.43945 9.56055L8.125 12.2461L14.5605 5.81055ZM10 0C10.918 0 11.8034 0.120443 12.6562 0.361328C13.5091 0.595703 14.3066 0.93099 15.0488 1.36719C15.791 1.79688 16.4648 2.31771 17.0703 2.92969C17.6823 3.53516 18.2031 4.20898 18.6328 4.95117C19.069 5.69336 19.4043 6.49089 19.6387 7.34375C19.8796 8.19661 20 9.08203 20 10C20 10.918 19.8796 11.8034 19.6387 12.6562C19.4043 13.5091 19.069 14.3066 18.6328 15.0488C18.2031 15.791 17.6823 16.4681 17.0703 17.0801C16.4648 17.6855 15.791 18.2064 15.0488 18.6426C14.3066 19.0723 13.5091 19.4076 12.6562 19.6484C11.8034 19.8828 10.918 20 10 20C9.08203 20 8.19661 19.8828 7.34375 19.6484C6.49089 19.4076 5.69336 19.0723 4.95117 18.6426C4.20898 18.2064 3.5319 17.6855 2.91992 17.0801C2.31445 16.4681 1.79362 15.791 1.35742 15.0488C0.927734 14.3066 0.592448 13.5124 0.351562 12.666C0.117188 11.8132 0 10.9245 0 10C0 9.08203 0.117188 8.19661 0.351562 7.34375C0.592448 6.49089 0.927734 5.69336 1.35742 4.95117C1.79362 4.20898 2.31445 3.53516 2.91992 2.92969C3.5319 2.31771 4.20898 1.79688 4.95117 1.36719C5.69336 0.93099 6.48763 0.595703 7.33398 0.361328C8.18685 0.120443 9.07552 0 10 0ZM10 18.75C10.8008 18.75 11.5723 18.6458 12.3145 18.4375C13.0632 18.2292 13.7598 17.9362 14.4043 17.5586C15.0553 17.1745 15.6478 16.7155 16.1816 16.1816C16.7155 15.6478 17.1712 15.0586 17.5488 14.4141C17.9329 13.763 18.2292 13.0664 18.4375 12.3242C18.6458 11.582 18.75 10.8073 18.75 10C18.75 9.19922 18.6458 8.42773 18.4375 7.68555C18.2292 6.93685 17.9329 6.24023 17.5488 5.5957C17.1712 4.94466 16.7155 4.35221 16.1816 3.81836C15.6478 3.28451 15.0553 2.82878 14.4043 2.45117C13.7598 2.06706 13.0632 1.77083 12.3145 1.5625C11.5723 1.35417 10.8008 1.25 10 1.25C9.19922 1.25 8.42448 1.35417 7.67578 1.5625C6.93359 1.77083 6.23698 2.06706 5.58594 2.45117C4.94141 2.82878 4.35221 3.28451 3.81836 3.81836C3.28451 4.35221 2.82552 4.94466 2.44141 5.5957C2.0638 6.24023 1.77083 6.93685 1.5625 7.68555C1.35417 8.42773 1.25 9.19922 1.25 10C1.25 10.8008 1.35417 11.5755 1.5625 12.3242C1.77083 13.0664 2.0638 13.763 2.44141 14.4141C2.82552 15.0586 3.28451 15.6478 3.81836 16.1816C4.35221 16.7155 4.94141 17.1745 5.58594 17.5586C6.23698 17.9362 6.93359 18.2292 7.67578 18.4375C8.41797 18.6458 9.19271 18.75 10 18.75Z\"\n fill=\"#107C10\"\n />\n </svg>\n);\n\nCheckMarkIcon.defaultProps = {\n 'aria-label': undefined,\n className: undefined\n};\n\nCheckMarkIcon.propTypes = {\n 'aria-label': PropTypes.string,\n className: PropTypes.string\n};\n\nexport default CheckMarkIcon;\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nconst ExclamationMarkIcon = ({ 'aria-label': ariaLabel, className }) => (\n <svg\n aria-label={ariaLabel}\n className={(className || '') + ''}\n height=\"19\"\n viewBox=\"0 0 19 19\"\n width=\"19\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M9.375 0C10.2409 0 11.071 0.110677 11.8652 0.332031C12.666 0.553385 13.4147 0.869141 14.1113 1.2793C14.8079 1.68294 15.4395 2.17122 16.0059 2.74414C16.5788 3.31055 17.0671 3.94206 17.4707 4.63867C17.8809 5.33529 18.1966 6.08398 18.418 6.88477C18.6393 7.67904 18.75 8.50911 18.75 9.375C18.75 10.2409 18.6393 11.0742 18.418 11.875C18.1966 12.6693 17.8809 13.4147 17.4707 14.1113C17.0671 14.8079 16.5788 15.4427 16.0059 16.0156C15.4395 16.582 14.8079 17.0703 14.1113 17.4805C13.4147 17.8841 12.666 18.1966 11.8652 18.418C11.071 18.6393 10.2409 18.75 9.375 18.75C8.50911 18.75 7.67578 18.6393 6.875 18.418C6.08073 18.1966 5.33529 17.8841 4.63867 17.4805C3.94206 17.0703 3.30729 16.582 2.73438 16.0156C2.16797 15.4427 1.67969 14.8079 1.26953 14.1113C0.865885 13.4147 0.553385 12.6693 0.332031 11.875C0.110677 11.0742 0 10.2409 0 9.375C0 8.50911 0.110677 7.67904 0.332031 6.88477C0.553385 6.08398 0.865885 5.33529 1.26953 4.63867C1.67969 3.94206 2.16797 3.31055 2.73438 2.74414C3.30729 2.17122 3.94206 1.68294 4.63867 1.2793C5.33529 0.869141 6.08073 0.553385 6.875 0.332031C7.67578 0.110677 8.50911 0 9.375 0ZM9.375 17.5C10.1172 17.5 10.8333 17.4023 11.5234 17.207C12.2201 17.0117 12.8678 16.7383 13.4668 16.3867C14.0723 16.0352 14.6224 15.612 15.1172 15.1172C15.612 14.6224 16.0352 14.0755 16.3867 13.4766C16.7383 12.8711 17.0117 12.2233 17.207 11.5332C17.4023 10.8431 17.5 10.1237 17.5 9.375C17.5 8.63281 17.4023 7.91667 17.207 7.22656C17.0117 6.52995 16.7383 5.88216 16.3867 5.2832C16.0352 4.67773 15.612 4.1276 15.1172 3.63281C14.6224 3.13802 14.0723 2.71484 13.4668 2.36328C12.8678 2.01172 12.2201 1.73828 11.5234 1.54297C10.8333 1.34766 10.1172 1.25 9.375 1.25C8.6263 1.25 7.9069 1.34766 7.2168 1.54297C6.52669 1.73828 5.87891 2.01172 5.27344 2.36328C4.67448 2.71484 4.1276 3.13802 3.63281 3.63281C3.13802 4.1276 2.71484 4.67773 2.36328 5.2832C2.01172 5.88216 1.73828 6.52995 1.54297 7.22656C1.34766 7.91667 1.25 8.63281 1.25 9.375C1.25 10.1172 1.34766 10.8366 1.54297 11.5332C1.73828 12.2233 2.01172 12.8711 2.36328 13.4766C2.71484 14.0755 3.13802 14.6224 3.63281 15.1172C4.1276 15.612 4.67448 16.0352 5.27344 16.3867C5.87891 16.7383 6.52669 17.0117 7.2168 17.207C7.9069 17.4023 8.6263 17.5 9.375 17.5ZM8.75 5H10V11.25H8.75V5ZM8.75 12.5H10V13.75H8.75V12.5Z\" />\n </svg>\n);\n\nExclamationMarkIcon.defaultProps = {\n 'aria-label': undefined,\n className: undefined\n};\n\nExclamationMarkIcon.propTypes = {\n 'aria-label': PropTypes.string,\n className: PropTypes.string\n};\n\nexport default ExclamationMarkIcon;\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [2, 5, 36] }] */\n\nimport random from 'math-random';\n\nexport default function randomId(maxLength = 5) {\n return random().toString(36).substr(2, maxLength);\n}\n","import { hooks } from 'botframework-webchat-api';\nimport {\n Composer as ReactScrollToBottomComposer,\n Panel as ReactScrollToBottomPanel,\n useAnimatingToEnd,\n useAtEnd,\n useObserveScrollPosition,\n useScrollTo,\n useScrollToEnd,\n useSticky\n} from 'react-scroll-to-bottom';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, { forwardRef, Fragment, memo, useCallback, useMemo, useRef } from 'react';\n\nimport type { ActivityElementMap } from './Transcript/types';\nimport type { FC, KeyboardEventHandler, MutableRefObject, ReactNode } from 'react';\nimport type { WebChatActivity } from 'botframework-webchat-core';\n\nimport { android } from './Utils/detectBrowser';\nimport BasicTypingIndicator from './BasicTypingIndicator';\nimport FocusRedirector from './Utils/FocusRedirector';\nimport inputtableKey from './Utils/TypeFocusSink/inputtableKey';\nimport isZeroOrPositive from './Utils/isZeroOrPositive';\nimport KeyboardHelp from './Transcript/KeyboardHelp';\nimport LiveRegionTranscript from './Transcript/LiveRegionTranscript';\n// TODO: [P2] #4133 Rename to \"getTabbableElements\".\nimport tabbableElements from './Utils/tabbableElements';\nimport TranscriptFocusComposer from './providers/TranscriptFocus/TranscriptFocusComposer';\nimport useActiveDescendantId from './providers/TranscriptFocus/useActiveDescendantId';\nimport useActivityTreeWithRenderer from './providers/ActivityTree/useActivityTreeWithRenderer';\nimport useDispatchScrollPosition from './hooks/internal/useDispatchScrollPosition';\nimport useDispatchTranscriptFocusByActivityKey from './hooks/internal/useDispatchTranscriptFocusByActivityKey';\nimport useFocus from './hooks/useFocus';\nimport useFocusByActivityKey from './providers/TranscriptFocus/useFocusByActivityKey';\nimport useFocusedActivityKey from './providers/TranscriptFocus/useFocusedActivityKey';\nimport useFocusedExplicitly from './providers/TranscriptFocus/useFocusedExplicitly';\nimport useFocusRelativeActivity from './providers/TranscriptFocus/useFocusRelativeActivity';\nimport useObserveFocusVisible from './hooks/internal/useObserveFocusVisible';\nimport usePrevious from './hooks/internal/usePrevious';\nimport useRegisterFocusTranscript from './hooks/internal/useRegisterFocusTranscript';\nimport useRegisterScrollTo from './hooks/internal/useRegisterScrollTo';\nimport useRegisterScrollToEnd from './hooks/internal/useRegisterScrollToEnd';\nimport useStyleSet from './hooks/useStyleSet';\nimport useStyleToEmotionObject from './hooks/internal/useStyleToEmotionObject';\nimport useUniqueId from './hooks/internal/useUniqueId';\nimport useValueRef from './hooks/internal/useValueRef';\nimport TranscriptActivity from './TranscriptActivity';\nimport useMemoized from './hooks/internal/useMemoized';\nimport {\n useRegisterScrollRelativeTranscript,\n type TranscriptScrollRelativeOptions\n} from './hooks/transcriptScrollRelative';\n\nconst {\n useActivityKeys,\n useActivityKeysByRead,\n useCreateAvatarRenderer,\n useCreateScrollToEndButtonRenderer,\n useDirection,\n useGetActivityByKey,\n useGetKeyByActivity,\n useGetKeyByActivityId,\n useLastAcknowledgedActivityKey,\n useLocalizer,\n useMarkActivityKeyAsRead,\n useMarkAllAsAcknowledged,\n useStyleOptions\n} = hooks;\n\nconst ROOT_STYLE = {\n '&.webchat__basic-transcript': {\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n // Make sure to set \"position: relative\" here to form another stacking context for the scroll-to-end button.\n // Stacking context help isolating elements that use \"z-index\" from global pollution.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context\n position: 'relative',\n\n '& .webchat__basic-transcript__filler': {\n flex: 1\n },\n\n '& .webchat__basic-transcript__scrollable': {\n display: 'flex',\n flexDirection: 'column',\n overflowX: 'hidden',\n WebkitOverflowScrolling: 'touch'\n },\n\n '& .webchat__basic-transcript__transcript': {\n listStyleType: 'none'\n }\n }\n};\n\ntype ScrollBehavior = 'auto' | 'smooth';\ntype ScrollToOptions = { behavior?: ScrollBehavior };\ntype ScrollToPosition = { activityID?: string; scrollTop?: number };\n\ntype InternalTranscriptProps = {\n activityElementMapRef: MutableRefObject<ActivityElementMap>;\n className?: string;\n};\n\n// TODO: [P1] #4133 Add telemetry for computing how many re-render done so far.\nconst InternalTranscript = forwardRef<HTMLDivElement, InternalTranscriptProps>(\n ({ activityElementMapRef, className }, ref) => {\n const [{ basicTranscript: basicTranscriptStyleSet }] = useStyleSet();\n const [{ bubbleFromUserNubOffset, bubbleNubOffset, groupTimestamp, showAvatarInGroup }] = useStyleOptions();\n const [activeDescendantId] = useActiveDescendantId();\n const [activityWithRendererTree] = useActivityTreeWithRenderer();\n const [direction] = useDirection();\n const [focusedActivityKey] = useFocusedActivityKey();\n const [focusedExplicitly] = useFocusedExplicitly();\n const createAvatarRenderer = useCreateAvatarRenderer();\n const focus = useFocus();\n const focusByActivityKey = useFocusByActivityKey();\n const focusRelativeActivity = useFocusRelativeActivity();\n const getActivityByKey = useGetActivityByKey();\n const getKeyByActivity = useGetKeyByActivity();\n const getKeyByActivityId = useGetKeyByActivityId();\n const localize = useLocalizer();\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n const rootElementRef = useRef<HTMLDivElement>();\n const terminatorLabelId = useUniqueId('webchat__basic-transcript__terminator-label');\n const terminatorRef = useRef<HTMLDivElement>();\n\n const focusedActivityKeyRef = useValueRef(focusedActivityKey);\n const hideAllTimestamps = groupTimestamp === false;\n const terminatorText = localize('TRANSCRIPT_TERMINATOR_TEXT');\n const transcriptAriaLabel = localize('TRANSCRIPT_ARIA_LABEL_ALT');\n\n const callbackRef = useCallback(\n (element: HTMLDivElement) => {\n if (typeof ref === 'function') {\n ref(element);\n } else {\n ref.current = element;\n }\n\n rootElementRef.current = element;\n },\n [ref, rootElementRef]\n );\n\n const createAvatarRendererMemoized = useMemoized(\n (activity: WebChatActivity) => createAvatarRenderer({ activity }),\n [createAvatarRenderer]\n );\n\n // Flatten the tree back into an array with information related to rendering.\n const renderingElements = useMemo(() => {\n const renderingElements: ReactNode[] = [];\n const topSideBotNub = isZeroOrPositive(bubbleNubOffset);\n const topSideUserNub = isZeroOrPositive(bubbleFromUserNubOffset);\n\n activityWithRendererTree.forEach(entriesWithSameSender => {\n const [[{ activity: firstActivity }]] = entriesWithSameSender;\n const renderAvatar = createAvatarRendererMemoized(firstActivity);\n\n entriesWithSameSender.forEach((entriesWithSameSenderAndStatus, indexWithinSenderGroup) => {\n const firstInSenderGroup = !indexWithinSenderGroup;\n const lastInSenderGroup = indexWithinSenderGroup === entriesWithSameSender.length - 1;\n\n entriesWithSameSenderAndStatus.forEach(({ activity, renderActivity }, indexWithinSenderAndStatusGroup) => {\n // We only show the timestamp at the end of the sender group. But we always show the \"Send failed, retry\" prompt.\n const firstInSenderAndStatusGroup = !indexWithinSenderAndStatusGroup;\n const key: string = getKeyByActivity(activity);\n const lastInSenderAndStatusGroup =\n indexWithinSenderAndStatusGroup === entriesWithSameSenderAndStatus.length - 1;\n const topSideNub = activity.from?.role === 'user' ? topSideUserNub : topSideBotNub;\n\n let showCallout: boolean;\n\n // Depending on the \"showAvatarInGroup\" setting, the avatar will render in different positions.\n if (showAvatarInGroup === 'sender') {\n if (topSideNub) {\n showCallout = firstInSenderGroup && firstInSenderAndStatusGroup;\n } else {\n showCallout = lastInSenderGroup && lastInSenderAndStatusGroup;\n }\n } else if (showAvatarInGroup === 'status') {\n if (topSideNub) {\n showCallout = firstInSenderAndStatusGroup;\n } else {\n showCallout = lastInSenderAndStatusGroup;\n }\n } else {\n showCallout = true;\n }\n\n renderingElements.push(\n <TranscriptActivity\n activity={activity}\n activityElementMapRef={activityElementMapRef}\n // \"hideTimestamp\" is a render-time parameter for renderActivityStatus().\n // If true, it will hide the timestamp, but it will continue to show the\n // retry prompt. And show the screen reader version of the timestamp.\n activityKey={key}\n hideTimestamp={\n hideAllTimestamps || indexWithinSenderAndStatusGroup !== entriesWithSameSenderAndStatus.length - 1\n }\n key={key}\n renderActivity={renderActivity}\n renderAvatar={renderAvatar}\n showCallout={showCallout}\n />\n );\n });\n });\n });\n\n return renderingElements;\n }, [\n activityElementMapRef,\n activityWithRendererTree,\n bubbleFromUserNubOffset,\n bubbleNubOffset,\n createAvatarRendererMemoized,\n getKeyByActivity,\n hideAllTimestamps,\n showAvatarInGroup\n ]);\n\n const scrollToBottomScrollTo: (scrollTop: number, options?: ScrollToOptions) => void = useScrollTo();\n const scrollToBottomScrollToEnd: (options?: ScrollToOptions) => void = useScrollToEnd();\n\n const scrollTo = useCallback(\n (position: ScrollToPosition, { behavior = 'auto' }: ScrollToOptions = {}) => {\n if (!position) {\n throw new Error(\n 'botframework-webchat: First argument passed to \"useScrollTo\" must be a ScrollPosition object.'\n );\n }\n\n const { activityID: activityId, scrollTop } = position;\n\n if (typeof scrollTop !== 'undefined') {\n scrollToBottomScrollTo(scrollTop, { behavior });\n } else if (typeof activityId !== 'undefined') {\n const activityBoundingBoxElement = activityElementMapRef.current\n .get(getKeyByActivityId(activityId))\n ?.querySelector('.webchat__basic-transcript__activity-active-descendant');\n\n const scrollableElement = rootElementRef.current.querySelector('.webchat__basic-transcript__scrollable');\n\n if (scrollableElement && activityBoundingBoxElement) {\n // ESLint conflict with TypeScript. The result of getClientRects() is not an Array but DOMRectList, and cannot be destructured.\n // eslint-disable-next-line prefer-destructuring\n const activityBoundingBoxElementClientRect = activityBoundingBoxElement.getClientRects()[0];\n\n // ESLint conflict with TypeScript. The result of getClientRects() is not an Array but DOMRectList, and cannot be destructured.\n // eslint-disable-next-line prefer-destructuring\n const scrollableElementClientRect = scrollableElement.getClientRects()[0];\n\n // If either the activity or the transcript scrollable is not on DOM, we will not scroll the view.\n if (activityBoundingBoxElementClientRect && scrollableElementClientRect) {\n const { height: activityHeight, y: activityY } = activityBoundingBoxElementClientRect;\n const { height: scrollableHeight } = scrollableElementClientRect;\n const activityOffsetTop = activityY + scrollableElement.scrollTop;\n\n const scrollTop = Math.min(activityOffsetTop, activityOffsetTop - scrollableHeight + activityHeight);\n\n scrollToBottomScrollTo(scrollTop, { behavior });\n }\n }\n }\n },\n [activityElementMapRef, getKeyByActivityId, rootElementRef, scrollToBottomScrollTo]\n );\n\n const scrollToEnd = useCallback(\n () => scrollToBottomScrollToEnd({ behavior: 'smooth' }),\n [scrollToBottomScrollToEnd]\n );\n\n const scrollRelative = useCallback(\n ({ direction, displacement }: TranscriptScrollRelativeOptions) => {\n const { current: rootElement } = rootElementRef;\n\n if (!rootElement) {\n return;\n }\n\n const scrollable: HTMLElement = rootElement.querySelector('.webchat__basic-transcript__scrollable');\n let nextScrollTop: number;\n\n if (typeof displacement === 'number') {\n // eslint-disable-next-line no-magic-numbers\n nextScrollTop = scrollable.scrollTop + (direction === 'down' ? 1 : -1) * displacement;\n } else {\n // eslint-disable-next-line no-magic-numbers\n nextScrollTop = scrollable.scrollTop + (direction === 'down' ? 1 : -1) * scrollable.offsetHeight;\n }\n\n scrollTo(\n {\n scrollTop: Math.max(0, Math.min(scrollable.scrollHeight - scrollable.offsetHeight, nextScrollTop))\n },\n { behavior: 'smooth' }\n );\n },\n [rootElementRef, scrollTo]\n );\n\n // Since there could be multiple instances of <BasicTranscript> inside the <Composer>, when the developer calls `scrollXXX`, we need to call it on all instances.\n // We call `useRegisterScrollXXX` to register a callback function, the `useScrollXXX` will multiplex the call into each instance of <BasicTranscript>.\n useRegisterScrollTo(scrollTo);\n useRegisterScrollToEnd(scrollToEnd);\n useRegisterScrollRelativeTranscript(scrollRelative);\n\n const markActivityKeyAsRead = useMarkActivityKeyAsRead();\n\n const dispatchScrollPositionWithActivityId: (scrollPosition: ScrollToPosition) => void =\n useDispatchScrollPosition();\n\n // TODO: [P2] We should use IntersectionObserver to track what activity is in the scrollable.\n // However, IntersectionObserver is not available on IE11, we need to make a limited polyfill in React style.\n const handleScrollPosition = useCallback(\n ({ scrollTop }: { scrollTop: number }) => {\n const { current: rootElement } = rootElementRef;\n\n if (!rootElement) {\n return;\n }\n\n const scrollableElement = rootElement.querySelector('.webchat__basic-transcript__scrollable');\n\n // \"getClientRects()\" is not returning an array, thus, it is not destructurable.\n // eslint-disable-next-line prefer-destructuring\n const scrollableElementClientRect = scrollableElement.getClientRects()[0];\n\n // If the scrollable is not mounted, we cannot measure which activity is in view. Thus, we will not fire any events.\n if (!scrollableElementClientRect) {\n return;\n }\n\n const { bottom: scrollableClientBottom } = scrollableElementClientRect;\n\n // Find the activity just above scroll view bottom.\n // If the scroll view is already on top, get the first activity.\n const activityElements = Array.from(activityElementMapRef.current.entries());\n const activityKeyJustAboveScrollBottom: string | undefined = (\n scrollableElement.scrollTop\n ? activityElements\n .reverse()\n // Add subpixel tolerance\n .find(([, element]) => {\n // \"getClientRects()\" is not returning an array, thus, it is not destructurable.\n // eslint-disable-next-line prefer-destructuring\n const elementClientRect = element.getClientRects()[0];\n\n // If the activity is not attached to DOM tree, we should not count it as \"bottommost visible activity\", as it is not visible.\n return elementClientRect && elementClientRect.bottom < scrollableClientBottom + 1;\n })\n : activityElements[0]\n )?.[0];\n\n // When the end-user slowly scrolling the view down, we will mark activity as read when the message fully appear on the screen.\n activityKeyJustAboveScrollBottom && markActivityKeyAsRead(activityKeyJustAboveScrollBottom);\n\n if (dispatchScrollPositionWithActivityId) {\n const activity = getActivityByKey(activityKeyJustAboveScrollBottom);\n\n dispatchScrollPositionWithActivityId({ ...(activity ? { activityID: activity.id } : {}), scrollTop });\n }\n },\n [\n activityElementMapRef,\n dispatchScrollPositionWithActivityId,\n getActivityByKey,\n markActivityKeyAsRead,\n rootElementRef\n ]\n );\n\n useObserveScrollPosition(handleScrollPosition);\n\n const handleTranscriptKeyDown = useCallback<KeyboardEventHandler<HTMLDivElement>>(\n event => {\n const { target } = event;\n\n const fromEndOfTranscriptIndicator = target === terminatorRef.current;\n const fromTranscript = target === event.currentTarget;\n\n if (!fromEndOfTranscriptIndicator && !fromTranscript) {\n return;\n }\n\n let handled = true;\n\n switch (event.key) {\n case 'ArrowDown':\n focusRelativeActivity(fromEndOfTranscriptIndicator ? 0 : 1);\n break;\n\n case 'ArrowUp':\n // eslint-disable-next-line no-magic-numbers\n focusRelativeActivity(fromEndOfTranscriptIndicator ? 0 : -1);\n break;\n\n case 'End':\n focusRelativeActivity(Infinity);\n break;\n\n case 'Enter':\n // This is capturing plain ENTER.\n // When screen reader is not running, or screen reader is running outside of scan mode, the ENTER key will be captured here.\n if (!fromEndOfTranscriptIndicator) {\n const body: HTMLElement = activityElementMapRef.current\n .get(focusedActivityKeyRef.current)\n ?.querySelector('.webchat__basic-transcript__activity-body');\n\n tabbableElements(body)[0]?.focus();\n }\n\n break;\n\n case 'Escape':\n focus('sendBoxWithoutKeyboard');\n break;\n\n case 'Home':\n focusRelativeActivity(-Infinity);\n break;\n\n default:\n handled = false;\n break;\n }\n\n if (handled) {\n event.preventDefault();\n\n // If a custom HTML control wants to handle up/down arrow, we will prevent them from listening to this event to prevent bugs due to handling arrow keys twice.\n event.stopPropagation();\n }\n },\n [activityElementMapRef, focus, focusedActivityKeyRef, focusRelativeActivity, terminatorRef]\n );\n\n const handleTranscriptKeyDownCapture = useCallback<KeyboardEventHandler<HTMLDivElement>>(\n event => {\n const { altKey, ctrlKey, key, metaKey, target } = event;\n\n if (altKey || (ctrlKey && key !== 'v') || metaKey || (!inputtableKey(key) && key !== 'Backspace')) {\n // Ignore if one of the utility key (except SHIFT) is pressed\n // E.g. CTRL-C on a link in one of the message should not jump to chat box\n // E.g. \"A\" or \"Backspace\" should jump to chat box\n return;\n }\n\n // Send keystrokes to send box if we are focusing on the transcript or terminator.\n if (target === event.currentTarget || target === terminatorRef.current) {\n event.stopPropagation();\n\n focus('sendBox');\n }\n },\n [focus]\n );\n\n useRegisterFocusTranscript(useCallback(() => focusByActivityKey(undefined), [focusByActivityKey]));\n\n // When the focusing activity has changed, dispatch an event to observers of \"useObserveTranscriptFocus\".\n const dispatchTranscriptFocusByActivityKey = useDispatchTranscriptFocusByActivityKey();\n\n // Dispatch a \"transcript focus\" event based on user selection.\n // We should not dispatch \"transcript focus\" when a new activity come. Although the selection change, it is not initiated from the user.\n useMemo(\n () => dispatchTranscriptFocusByActivityKey(focusedExplicitly ? focusedActivityKey : undefined),\n [dispatchTranscriptFocusByActivityKey, focusedActivityKey, focusedExplicitly]\n );\n\n // When the transcript is being focused on, we should dispatch a \"transcriptfocus\" event.\n const handleFocus = useCallback(\n // We call \"focusByActivityKey\" with activity key of \"true\".\n // It means, tries to focus on anything.\n ({ currentTarget, target }) => target === currentTarget && focusByActivityKey(true, false),\n [focusByActivityKey]\n );\n\n // This is required by IE11.\n // When the user clicks on and empty space (a.k.a. filler) in an empty transcript, IE11 says the focus is on the <div className=\"filler\">,\n // despite the fact there are no \"tabIndex\" attributes set on the filler.\n // We need to artificially send the focus back to the transcript.\n const handleFocusFiller = useCallback(() => focusByActivityKey(undefined), [focusByActivityKey]);\n\n // When focus into the transcript using TAB/SHIFT-TAB, scroll the focused activity into view.\n useObserveFocusVisible(\n rootElementRef,\n useCallback(() => focusByActivityKey(undefined), [focusByActivityKey])\n );\n\n return (\n <div\n // Although Android TalkBack 12.1 does not support `aria-activedescendant`, when used, it become buggy and will narrate content twice.\n // We are disabling `aria-activedescendant` for Android. See <ActivityRow> for details.\n aria-activedescendant={android ? undefined : activeDescendantId}\n aria-label={transcriptAriaLabel}\n className={classNames(\n 'webchat__basic-transcript',\n basicTranscriptStyleSet + '',\n rootClassName,\n (className || '') + ''\n )}\n dir={direction}\n onFocus={handleFocus}\n onKeyDown={handleTranscriptKeyDown}\n onKeyDownCapture={handleTranscriptKeyDownCapture}\n ref={callbackRef}\n // \"aria-activedescendant\" will only works with a number of roles and it must be explicitly set.\n // https://www.w3.org/TR/wai-aria/#aria-activedescendant\n role=\"group\"\n // For up/down arrow key navigation across activities, this component must be included in the tab sequence.\n // Otherwise, \"aria-activedescendant\" will not be narrated when the user press up/down arrow keys.\n // https://www.w3.org/TR/wai-aria-practices-1.1/#kbd_focus_activedescendant\n tabIndex={0}\n >\n <LiveRegionTranscript activityElementMapRef={activityElementMapRef} />\n {/* TODO: [P2] Fix ESLint error `no-use-before-define` */}\n {/* eslint-disable-next-line @typescript-eslint/no-use-before-define */}\n <InternalTranscriptScrollable onFocusFiller={handleFocusFiller} terminatorRef={terminatorRef}>\n {renderingElements}\n </InternalTranscriptScrollable>\n {!!renderingElements.length && (\n <Fragment>\n <FocusRedirector redirectRef={rootElementRef} />\n <div\n aria-labelledby={terminatorLabelId}\n className=\"webchat__basic-transcript__terminator\"\n ref={terminatorRef}\n role=\"note\"\n tabIndex={0}\n >\n <div className=\"webchat__basic-transcript__terminator-body\">\n {/* `id` is required for `aria-labelledby` */}\n {/* eslint-disable-next-line react/forbid-dom-props */}\n <div className=\"webchat__basic-transcript__terminator-text\" id={terminatorLabelId}>\n {terminatorText}\n </div>\n </div>\n </div>\n </Fragment>\n )}\n <div className=\"webchat__basic-transcript__focus-indicator\" />\n </div>\n );\n }\n);\n\nInternalTranscript.defaultProps = {\n className: ''\n};\n\nInternalTranscript.displayName = 'InternalTranscript';\n\nInternalTranscript.propTypes = {\n // PropTypes cannot validate precisely with its TypeScript counterpart.\n // @ts-ignore\n activityElementMapRef: PropTypes.shape({\n current: PropTypes.instanceOf(Map)\n }).isRequired,\n className: PropTypes.string\n};\n\ntype InternalTranscriptScrollableProps = {\n children?: ReactNode;\n onFocusFiller: () => void;\n terminatorRef: MutableRefObject<HTMLDivElement>;\n};\n\n// Separating high-frequency hooks to improve performance.\nconst InternalTranscriptScrollable: FC<InternalTranscriptScrollableProps> = ({\n children,\n onFocusFiller,\n terminatorRef\n}) => {\n const [{ activities: activitiesStyleSet }] = useStyleSet();\n const [animatingToEnd]: [boolean] = useAnimatingToEnd();\n const [atEnd]: [boolean] = useAtEnd();\n const [, unreadActivityKeys] = useActivityKeysByRead();\n const [sticky]: [boolean] = useSticky();\n const [styleOptions] = useStyleOptions();\n const focusByActivityKey = useFocusByActivityKey();\n const localize = useLocalizer();\n const markActivityKeyAsRead = useMarkActivityKeyAsRead();\n const markAllAsAcknowledged = useMarkAllAsAcknowledged();\n const scrollToEnd: (options?: ScrollToOptions) => void = useScrollToEnd();\n\n const prevSticky = usePrevious(sticky);\n const transcriptRoleDescription = localize('TRANSCRIPT_ARIA_ROLE_ALT');\n\n const stickyChangedToTrue = prevSticky !== sticky && sticky;\n\n // Acknowledged means either:\n // 1. The user sent a message\n // - We don't need a condition here. When Web Chat sends the user's message, it will scroll to bottom, and it will trigger condition 2 below.\n // 2. The user scroll to the bottom of the transcript, from a non-bottom scroll position\n // - If the transcript is already at the bottom, the user needs to scroll up and then go back down\n // - What happens if we are relaxing \"scrolled from a non-bottom scroll position\":\n // 1. The condition will become solely \"at the bottom of the transcript\"\n // 2. Auto-scroll will always scroll the transcript to the bottom\n // 3. Web Chat will always acknowledge all activities as it is at the bottom\n // 4. Acknowledge flag become useless\n // 5. Therefore, even the developer set \"pause after 3 activities\", if activities are coming in at a slow pace (not batched in a single render)\n // Web Chat will keep scrolling and not snapped/paused\n\n // Note: When Web Chat is loaded, there are no activities acknowledged. We need to assume all arriving activities are acknowledged until end-user sends their first activity.\n // Activities loaded initially could be from conversation history. Without assuming acknowledgement, Web Chat will not scroll initially (as everything is not acknowledged).\n // It would be better if the chat adapter should let Web Chat know if the activity is loaded from history or not.\n\n // TODO: [P2] #3670 Move the \"conversation history acknowledgement\" logic mentioned above to polyfill of chat adapters.\n // 1. Chat adapter should send \"acknowledged\" as part of \"channelData\"\n // 2. If \"acknowledged\" is \"undefined\", we set it to:\n // a. true, if there are no egress activities yet\n // b. Otherwise, false\n\n useMemo(\n () =>\n stickyChangedToTrue &&\n // TODO: [P2] Both `markActivityKeyAsRead` and `markAllAsAcknowledged` hook are setters of useState.\n // This means, in a render loop, we will be calling setter and will cause another re-render.\n // This is not trivial but we should think if there is a way to avoid this.\n markAllAsAcknowledged(),\n [markAllAsAcknowledged, stickyChangedToTrue]\n );\n\n const [flattenedActivityTreeWithRenderer] = useActivityTreeWithRenderer({ flat: true });\n const getKeyByActivity = useGetKeyByActivity();\n\n const renderingActivityKeys: string[] = useMemo<string[]>(\n () => flattenedActivityTreeWithRenderer.map(({ activity }) => getKeyByActivity(activity)),\n [flattenedActivityTreeWithRenderer, getKeyByActivity]\n );\n\n const renderingActivityKeysRef = useValueRef(renderingActivityKeys);\n\n // To prevent flashy button, we are not waiting for another render loop to update the `[readActivityKeys, unreadActivityKeys]` state.\n // Instead, we are building the next one in this `useMemo` call.\n const nextUnreadActivityKeys = useMemo(() => {\n // This code need to be careful reviewed as it will cause another render. The code should be converging.\n // After we call `markActivityKeyAsRead`, everything will be read and nothing will be unread.\n // That means, in next render, `unreadActivityKeys` will be emptied and the `markActivityKeyAsRead` will not get called again.\n if (sticky && unreadActivityKeys.length) {\n markActivityKeyAsRead(unreadActivityKeys[unreadActivityKeys.length - 1]);\n\n return [];\n }\n\n return unreadActivityKeys;\n }, [markActivityKeyAsRead, sticky, unreadActivityKeys]);\n\n const nextUnreadActivityKeysRef = useValueRef(nextUnreadActivityKeys);\n\n // If we are rendering anything that is unread, we should show the \"New messages\" button.\n // Not everything in the `unreadActivityKeys` are rendered, say, bot typing indicator.\n // We should not show the \"New messages\" button for bot typing indicator as it will confuse the user.\n const unread = useMemo(\n () => nextUnreadActivityKeys.some(key => renderingActivityKeys.includes(key)),\n [renderingActivityKeys, nextUnreadActivityKeys]\n );\n\n const handleScrollToEndButtonClick = useCallback(() => {\n scrollToEnd({ behavior: 'smooth' });\n\n const { current: renderingActivityKeys } = renderingActivityKeysRef;\n\n // After the \"New message\" button is clicked, focus on the first unread activity which will be rendered.\n const firstUnreadRenderingActivityKey = nextUnreadActivityKeysRef.current.find(key =>\n renderingActivityKeys.includes(key)\n );\n\n if (firstUnreadRenderingActivityKey) {\n focusByActivityKey(firstUnreadRenderingActivityKey);\n } else {\n // If no unread activity, send the focus to the terminator block.\n terminatorRef.current?.focus();\n }\n }, [focusByActivityKey, nextUnreadActivityKeysRef, renderingActivityKeysRef, scrollToEnd, terminatorRef]);\n\n const renderScrollToEndButton = useCreateScrollToEndButtonRenderer()({\n atEnd: animatingToEnd || atEnd || sticky,\n styleOptions,\n unread\n });\n\n const hasAnyChild = !!React.Children.count(children);\n\n return (\n <React.Fragment>\n {renderScrollToEndButton && renderScrollToEndButton({ onClick: handleScrollToEndButtonClick })}\n {hasAnyChild && <FocusRedirector redirectRef={terminatorRef} />}\n <ReactScrollToBottomPanel className=\"webchat__basic-transcript__scrollable\">\n <div aria-hidden={true} className=\"webchat__basic-transcript__filler\" onFocus={onFocusFiller} />\n {hasAnyChild && (\n <section\n aria-roledescription={transcriptRoleDescription}\n className={classNames(activitiesStyleSet + '', 'webchat__basic-transcript__transcript')}\n role=\"feed\"\n >\n {children}\n </section>\n )}\n <BasicTypingIndicator />\n </ReactScrollToBottomPanel>\n </React.Fragment>\n );\n};\n\nInternalTranscriptScrollable.propTypes = {\n children: PropTypes.any.isRequired,\n onFocusFiller: PropTypes.func.isRequired,\n terminatorRef: PropTypes.any.isRequired\n};\n\ntype Scroller = ({ offsetHeight, scrollTop }: { offsetHeight: number; scrollTop: number }) => number;\n\n// \"scroller\" is the auto-scroll limiter, a.k.a. auto scroll snap.\nconst useScroller = (activityElementMapRef: MutableRefObject<ActivityElementMap>): Scroller => {\n const [activityKeys] = useActivityKeys();\n const [lastAcknowledgedActivityKey] = useLastAcknowledgedActivityKey();\n const [styleOptions] = useStyleOptions();\n\n const activityKeysRef = useValueRef(activityKeys);\n const lastAcknowledgedActivityKeyRef = useValueRef(lastAcknowledgedActivityKey);\n const styleOptionsRef = useValueRef(styleOptions);\n\n return useCallback(\n ({ offsetHeight, scrollTop }) => {\n const {\n current: {\n autoScrollSnapOnActivity,\n autoScrollSnapOnActivityOffset,\n autoScrollSnapOnPage,\n autoScrollSnapOnPageOffset\n }\n } = styleOptionsRef;\n\n const patchedAutoScrollSnapOnActivity =\n typeof autoScrollSnapOnActivity === 'number'\n ? Math.max(0, autoScrollSnapOnActivity)\n : autoScrollSnapOnActivity\n ? 1\n : 0;\n const patchedAutoScrollSnapOnPage =\n typeof autoScrollSnapOnPage === 'number'\n ? Math.max(0, Math.min(1, autoScrollSnapOnPage))\n : autoScrollSnapOnPage\n ? 1\n : 0;\n const patchedAutoScrollSnapOnActivityOffset =\n typeof autoScrollSnapOnActivityOffset === 'number' ? autoScrollSnapOnActivityOffset : 0;\n const patchedAutoScrollSnapOnPageOffset =\n typeof autoScrollSnapOnPageOffset === 'number' ? autoScrollSnapOnPageOffset : 0;\n\n if (patchedAutoScrollSnapOnActivity || patchedAutoScrollSnapOnPage) {\n const { current: activityElementMap } = activityElementMapRef;\n const { current: activityKeys } = activityKeysRef;\n const { current: lastAcknowledgedActivityKey } = lastAcknowledgedActivityKeyRef;\n const values: number[] = [];\n\n const lastAcknowledgedActivityKeyIndex = activityKeys.indexOf(lastAcknowledgedActivityKey);\n\n if (~lastAcknowledgedActivityKeyIndex) {\n // The activity that we acknowledged could be not rendered, such as post back activity.\n // When calculating scroll snap, we can only base on the first unacknowledged-and-rendering activity.\n const renderingActivityKeys = Array.from(activityElementMap.keys());\n let firstUnacknowledgedActivityElementIndex = -1;\n\n for (const acknowledgedActivityKey of activityKeys.slice(0, lastAcknowledgedActivityKeyIndex + 1).reverse()) {\n const index = renderingActivityKeys.indexOf(acknowledgedActivityKey);\n\n if (~index) {\n if (index !== renderingActivityKeys.length - 1) {\n firstUnacknowledgedActivityElementIndex = index + 1;\n }\n\n break;\n }\n }\n\n if (~firstUnacknowledgedActivityElementIndex) {\n const activityElements = Array.from(activityElementMap.values());\n\n if (patchedAutoScrollSnapOnActivity) {\n // Gets the activity element which we should snap to.\n const nthUnacknowledgedActivityElement =\n activityElements[firstUnacknowledgedActivityElementIndex + patchedAutoScrollSnapOnActivity - 1];\n\n if (nthUnacknowledgedActivityElement) {\n const nthUnacknowledgedActivityBoundingBoxElement = nthUnacknowledgedActivityElement?.querySelector(\n '.webchat__basic-transcript__activity-active-descendant'\n ) as HTMLElement;\n const nthUnacknowledgedActivityOffsetTop =\n nthUnacknowledgedActivityElement.offsetTop + nthUnacknowledgedActivityBoundingBoxElement.offsetTop;\n\n values.push(\n nthUnacknowledgedActivityOffsetTop +\n nthUnacknowledgedActivityBoundingBoxElement.offsetHeight -\n offsetHeight -\n scrollTop +\n patchedAutoScrollSnapOnActivityOffset\n );\n }\n }\n\n if (patchedAutoScrollSnapOnPage) {\n const firstUnacknowledgedActivityElement = activityElements[+firstUnacknowledgedActivityElementIndex];\n const firstUnacknowledgedActivityBoundingBoxElement = firstUnacknowledgedActivityElement.querySelector(\n '.webchat__basic-transcript__activity-active-descendant'\n ) as HTMLElement;\n const firstUnacknowledgedActivityOffsetTop =\n firstUnacknowledgedActivityElement.offsetTop + firstUnacknowledgedActivityBoundingBoxElement.offsetTop;\n\n values.push(\n firstUnacknowledgedActivityOffsetTop -\n scrollTop -\n offsetHeight * (1 - patchedAutoScrollSnapOnPage) +\n patchedAutoScrollSnapOnPageOffset\n );\n }\n }\n }\n\n return Math.min(...values);\n }\n\n return Infinity;\n },\n [activityElementMapRef, activityKeysRef, lastAcknowledgedActivityKeyRef, styleOptionsRef]\n );\n};\n\ntype BasicTranscriptProps = {\n className?: string;\n};\n\nconst BasicTranscript: FC<BasicTranscriptProps> = ({ className }) => {\n const activityElementMapRef = useRef<ActivityElementMap>(new Map());\n const containerRef = useRef<HTMLDivElement>();\n\n const scroller = useScroller(activityElementMapRef);\n\n return (\n <TranscriptFocusComposer containerRef={containerRef}>\n <ReactScrollToBottomComposer scroller={scroller}>\n <KeyboardHelp />\n <InternalTranscript activityElementMapRef={activityElementMapRef} className={className} ref={containerRef} />\n </ReactScrollToBottomComposer>\n </TranscriptFocusComposer>\n );\n};\n\nBasicTranscript.defaultProps = {\n className: ''\n};\n\nBasicTranscript.propTypes = {\n className: PropTypes.string\n};\n\nexport default memo(BasicTranscript);\n","const { userAgent } = navigator;\n\n// not DRY so that list can be alphabetical\nconst android = /Linux; Android/u.test(userAgent);\nconst chromium = !/Edge\\//u.test(userAgent) && /Chrome\\//u.test(userAgent);\nconst edgeAnaheim = /Edg\\//u.test(userAgent);\nconst edgeUWP = /Edge\\//u.test(userAgent);\nconst firefox = /Firefox\\//u.test(userAgent);\nconst ie11 = /Trident\\/7.0/u.test(userAgent);\n\nconst chrome = chromium && !edgeAnaheim;\nconst safari = !(chrome || edgeUWP || ie11 || firefox);\n\nexport { android, chrome, chromium, edgeAnaheim, edgeUWP, firefox, ie11, safari };\n","import { hooks } from 'botframework-webchat-api';\nimport React, { Fragment, useMemo } from 'react';\n\nconst { useActiveTyping, useRenderTypingIndicator } = hooks;\n\nfunction useTypingIndicatorVisible(): readonly [boolean] {\n const [activeTyping] = useActiveTyping();\n\n return useMemo(\n () =>\n Object.freeze([\n !!Object.values(activeTyping).some(\n // Show typing indicator if anyone is typing and not livestreaming.\n ({ role, type }) => role !== 'user' && type !== 'livestream'\n )\n ]),\n [activeTyping]\n );\n}\n\nconst BasicTypingIndicator = () => {\n const [activeTyping] = useActiveTyping();\n const [visible] = useTypingIndicatorVisible();\n const [typing] = useActiveTyping(Infinity);\n const renderTypingIndicator = useRenderTypingIndicator();\n\n return <Fragment>{renderTypingIndicator({ activeTyping, typing, visible })}</Fragment>;\n};\n\nexport default BasicTypingIndicator;\n\nexport { useTypingIndicatorVisible };\n","import PropTypes from 'prop-types';\nimport React, { useCallback } from 'react';\n\nimport type { FC, MutableRefObject } from 'react';\n\n// This is an element, when focused, will send the focus to the ref specified in \"redirectRef\".\n// Although the focus is being redirected, browser will scroll this redirector element into view.\n\n// Browser's \"scrollIntoView()\" call cannot be prevented through event.preventDefault() in both\n// bubble and capture phase of \"focus\" event.\n\n// When this focus redirector is put inside a scrollable container, you may want to resize or reposition\n// it to prevent unintentional scroll done by the browser default behavior.\n\ntype FocusRedirectorProps = {\n className?: string;\n onFocus?: () => void;\n redirectRef?: MutableRefObject<HTMLElement>;\n};\n\nconst FocusRedirector: FC<FocusRedirectorProps> = ({ className, onFocus, redirectRef }) => {\n const handleFocus = useCallback(() => {\n redirectRef?.current?.focus();\n onFocus && onFocus();\n }, [onFocus, redirectRef]);\n\n // 2023-02-23: With NVDA 2022.1 and 2022.4, when in browse mode, up/down arrow keys no longer focus.\n // We no longer need to set aria-hidden=\"true\" to hide it from browse mode.\n // 2021-09-21: For NVDA, we should set aria-hidden=\"true\".\n // When using NVDA in browse mode, press up/down arrow keys will focus on this redirector.\n // This redirector is designed to capture TAB only and should not react on browse mode.\n // However, reacting with browse mode is currently okay. Just better to leave it alone.\n\n return <div className={className} onFocus={handleFocus} tabIndex={0} />;\n};\n\nFocusRedirector.defaultProps = {\n className: undefined,\n onFocus: undefined,\n redirectRef: undefined\n};\n\nFocusRedirector.propTypes = {\n className: PropTypes.string,\n onFocus: PropTypes.func,\n // PropTypes is not fully compatible with TypeScript.\n // @ts-ignore\n redirectRef: PropTypes.shape({\n current: PropTypes.instanceOf(HTMLElement)\n })\n};\n\nexport default FocusRedirector;\n","// For auto-focus in some browsers, we synthetically insert keys into the chatbox.\n// By default, we insert keys when:\n// 1. evt.key.length === 1 (e.g. \"1\", \"A\", \"=\" keys), or\n// 2. evt.key is one of the map keys below (e.g. \"Add\" will insert \"+\", \"Decimal\" will insert \".\")\nconst INPUTTABLE_KEY = {\n Add: '+', // Numpad add key\n Decimal: '.', // Numpad decimal key\n Divide: '/', // Numpad divide key\n Multiply: '*', // Numpad multiply key\n Subtract: '-' // Numpad subtract key\n};\n\nconst INPUTTABLE_KEY_KEYS = Object.keys(INPUTTABLE_KEY);\n\nexport default function inputtableKey(key) {\n // Mitigated through allowlisting.\n // eslint-disable-next-line security/detect-object-injection\n return key.length === 1 ? key : INPUTTABLE_KEY_KEYS.includes(key) ? INPUTTABLE_KEY[key] : undefined;\n}\n","/**\n * Returns `true`, if the number is zero or positive, otherwise, `false`, including minus zeroes.\n */\nexport default function isZeroOrPositive(value: number): boolean {\n // This will handle minus-zero.\n return 1 / value >= 0;\n}\n","import { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, { useCallback, useState } from 'react';\n\nimport type { FC } from 'react';\n\nimport useUniqueId from '../hooks/internal/useUniqueId';\nimport useFocus from '../hooks/useFocus';\nimport useStyleSet from '../hooks/useStyleSet';\n\nconst { useLocalizer } = hooks;\n\ntype NotesBodyProps = {\n header: string;\n text: string;\n};\n\nconst Notes: FC<NotesBodyProps> = ({ header, text }) => (\n <dl className=\"webchat__keyboard-help__notes\">\n <dt className=\"webchat__keyboard-help__notes-header\">{header}</dt>\n {text.split('\\n').map((line, index) => (\n // We are splitting lines into paragraphs, index as key is legitimate here.\n // eslint-disable-next-line react/no-array-index-key\n <dd className=\"webchat__keyboard-help__notes-text\" key={index}>\n {line}\n </dd>\n ))}\n </dl>\n);\n\nNotes.propTypes = {\n header: PropTypes.string.isRequired,\n text: PropTypes.string.isRequired\n};\n\nconst KeyboardHelp: FC<{}> = () => {\n const [{ keyboardHelp: keyboardHelpStyleSet }] = useStyleSet();\n const [shown, setShown] = useState(false);\n const focus = useFocus();\n const headerLabelId = useUniqueId('webchat__keyboard-help__header');\n const localize = useLocalizer();\n\n const chatHistoryAccessItemsInMessageBody = localize('KEYBOARD_HELP_CHAT_HISTORY_ACCESS_ITEMS_IN_MESSAGE_BODY');\n const chatHistoryAccessItemsInMessageHeader = localize('KEYBOARD_HELP_CHAT_HISTORY_ACCESS_ITEMS_IN_MESSAGE_HEADER');\n const chatHistoryHeader = localize('KEYBOARD_HELP_CHAT_HISTORY_HEADER');\n const chatHistoryLeaveMessageBody = localize('KEYBOARD_HELP_CHAT_HISTORY_LEAVE_MESSAGE_BODY');\n const chatHistoryLeaveMessageHeader = localize('KEYBOARD_HELP_CHAT_HISTORY_LEAVE_MESSAGE_HEADER');\n const chatHistoryMoveBetweenItemsBody = localize('KEYBOARD_HELP_CHAT_HISTORY_MOVE_BETWEEN_ITEMS_BODY');\n const chatHistoryMoveBetweenItemsHeader = localize('KEYBOARD_HELP_CHAT_HISTORY_MOVE_BETWEEN_ITEMS_HEADER');\n const chatHistoryMoveBetweenMessagesBody = localize('KEYBOARD_HELP_CHAT_HISTORY_MOVE_BETWEEN_MESSAGES_BODY');\n const chatHistoryMoveBetweenMessagesHeader = localize('KEYBOARD_HELP_CHAT_HISTORY_MOVE_BETWEEN_MESSAGES_HEADER');\n const chatWindowBodyDoActionBody = localize('KEYBOARD_HELP_CHAT_WINDOW_BODY_DO_ACTION_BODY');\n const chatWindowBodyDoActionHeader = localize('KEYBOARD_HELP_CHAT_WINDOW_BODY_DO_ACTION_HEADER');\n const chatWindowBodyMoveBetweenItemsBody = localize('KEYBOARD_HELP_CHAT_WINDOW_BODY_MOVE_BETWEEN_ITEMS_BODY');\n const chatWindowBodyMoveBetweenItemsHeader = localize('KEYBOARD_HELP_CHAT_WINDOW_BODY_MOVE_BETWEEN_ITEMS_HEADER');\n const chatWindowHeader = localize('KEYBOARD_HELP_CHAT_WINDOW_HEADER');\n const closeButtonAlt = localize('KEYBOARD_HELP_CLOSE_BUTTON_ALT');\n const header = localize('KEYBOARD_HELP_HEADER');\n\n const handleBlur = useCallback(\n // We will keep the help screen shown if the blur is caused by switch app.\n // When switch app, `document.activeElement` will remains.\n event => document.activeElement !== event.target && setShown(false),\n [setShown]\n );\n\n const handleCloseButtonClick = useCallback(() => focus('main'), [focus]);\n const handleCloseButtonFocus = useCallback(() => setShown(true), [setShown]);\n\n const handleCloseButtonKeyDown = useCallback(\n event => {\n const { key } = event;\n\n if (key === 'Enter' || key === 'Escape' || key === ' ') {\n event.preventDefault();\n event.stopPropagation();\n\n focus('main');\n }\n },\n [focus]\n );\n\n return (\n <div\n aria-labelledby={headerLabelId}\n className={classNames('webchat__keyboard-help', keyboardHelpStyleSet + '', {\n // Instead of using \"hidden\" attribute, we are using CSS to hide the dialog.\n // - When using \"hidden\", the close button will not be tabbable because it is pseudo removed from the DOM\n // - When using CSS, the close button will still be tabbable\n // We prefer CSS because the focus need to land on close button, but we don't want to move the focus using JavaScript.\n 'webchat__keyboard-help--shown': shown\n })}\n onBlur={handleBlur}\n role=\"dialog\"\n >\n {/* The __border layer is for showing the shadowy border.\n Without this layer, the border will be hidden by overflow: hidden. */}\n <div className=\"webchat__keyboard-help__border\">\n <div className=\"webchat__keyboard-help__box\">\n {/* The __scrollable layer is for hiding scrollbar at corners.\n Without this layer, the scrollbar will show and overflow the border-radius.\n This impact will be more visible if we temporarily set border-radius: 20px. */}\n <div className=\"webchat__keyboard-help__scrollable\">\n <button\n aria-label={closeButtonAlt}\n className=\"webchat__keyboard-help__close-button\"\n onClick={handleCloseButtonClick}\n onFocus={handleCloseButtonFocus}\n onKeyDown={handleCloseButtonKeyDown}\n type=\"button\"\n >\n <div className=\"webchat__keyboard-help__close-button-border\">\n <svg\n className=\"webchat__keyboard-help__close-button-image\"\n // \"focusable\" attribute is only available in IE11 and \"tabIndex={-1}\" does not work.\n focusable={false}\n role=\"presentation\"\n viewBox=\"0 0 2048 2048\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M2048 136l-888 888 888 888-136 136-888-888-888 888L0 1912l888-888L0 136 136 0l888 888L1912 0l136 136z\" />\n </svg>\n </div>\n </button>\n {/* \"id\" attribute is required when using \"aria-labelledby\". */}\n {/* eslint-disable-next-line react/forbid-dom-props */}\n <h2 className=\"webchat__keyboard-help__header\" id={headerLabelId}>\n {header}\n </h2>\n <article className=\"webchat__keyboard-help__section\">\n <header>\n <h3 className=\"webchat__keyboard-help__sub-header\">{chatWindowHeader}</h3>\n </header>\n <div className=\"webchat__keyboard-help__two-panes\">\n <svg\n className=\"webchat__keyboard-help__image webchat__keyboard-help__image--light\"\n fill=\"none\"\n // \"focusable\" attribute is only available in IE11 and \"tabIndex={-1}\" does not work.\n focusable={false}\n height=\"200\"\n role=\"presentation\"\n viewBox=\"0 0 121 200\"\n width=\"121\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect height=\"199\" stroke=\"#C8C6C4\" width=\"109\" x=\"0.5\" y=\"0.5\" />\n <rect height=\"156\" stroke=\"#323130\" width=\"102\" x=\"3.5\" y=\"4.5\" />\n <rect height=\"42\" stroke=\"#C8C6C4\" width=\"93\" x=\"7.5\" y=\"8.5\" />\n <rect height=\"99\" stroke=\"#C8C6C4\" width=\"93\" x=\"7.5\" y=\"55.5\" />\n <rect height=\"13\" stroke=\"#323130\" width=\"102\" x=\"3.5\" y=\"182.5\" />\n <rect height=\"13\" stroke=\"#323130\" width=\"32\" x=\"3.5\" y=\"165.5\" />\n <rect height=\"13\" stroke=\"#323130\" width=\"32\" x=\"38.5\" y=\"165.5\" />\n <rect height=\"13\" stroke=\"#323130\" width=\"32\" x=\"73.5\" y=\"165.5\" />\n <path\n clipRule=\"evenodd\"\n d=\"M116.328 5.64645C116.524 5.45118 116.84 5.45118 117.036 5.64645L120.218 8.82843C120.413 9.02369 120.413 9.34027 120.218 9.53553C120.022 9.7308 119.706 9.7308 119.51 9.53553L117.182 7.20711V192.793L119.51 190.464C119.706 190.269 120.022 190.269 120.218 190.464C120.413 190.66 120.413 190.976 120.218 191.172L117.036 194.354C116.84 194.549 116.524 194.549 116.328 194.354L113.146 191.172C112.951 190.976 112.951 190.66 113.146 190.464C113.342 190.269 113.658 190.269 113.854 190.464L116.182 192.793V7.20711L113.854 9.53553C113.658 9.7308 113.342 9.7308 113.146 9.53553C112.951 9.34027 112.951 9.02369 113.146 8.82843L116.328 5.64645Z\"\n fill=\"#323130\"\n fillRule=\"evenodd\"\n />\n </svg>\n <svg\n className=\"webchat__keyboard-help__image webchat__keyboard-help__image--dark\"\n fill=\"none\"\n // \"focusable\" attribute is only available in IE11 and \"tabIndex={-1}\" does not work.\n focusable={false}\n height=\"200\"\n role=\"presentation\"\n viewBox=\"0 0 121 200\"\n width=\"121\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect height=\"199\" stroke=\"#484644\" width=\"109\" x=\"0.5\" y=\"0.5\" />\n <rect height=\"156\" stroke=\"#F3F2F1\" width=\"102\" x=\"3.5\" y=\"4.5\" />\n <rect height=\"42\" stroke=\"#484644\" width=\"93\" x=\"7.5\" y=\"8.5\" />\n <rect height=\"99\" stroke=\"#484644\" width=\"93\" x=\"7.5\" y=\"55.5\" />\n <rect height=\"13\" stroke=\"#F3F2F1\" width=\"102\" x=\"3.5\" y=\"182.5\" />\n <rect height=\"13\" stroke=\"#F3F2F1\" width=\"32\" x=\"3.5\" y=\"165.5\" />\n <rect height=\"13\" stroke=\"#F3F2F1\" width=\"32\" x=\"38.5\" y=\"165.5\" />\n <rect height=\"13\" stroke=\"#F3F2F1\" width=\"32\" x=\"73.5\" y=\"165.5\" />\n <path\n clipRule=\"evenodd\"\n d=\"M116.328 5.64645C116.524 5.45118 116.84 5.45118 117.036 5.64645L120.218 8.82843C120.413 9.02369 120.413 9.34027 120.218 9.53553C120.022 9.7308 119.706 9.7308 119.51 9.53553L117.182 7.20711V192.793L119.51 190.464C119.706 190.269 120.022 190.269 120.218 190.464C120.413 190.66 120.413 190.976 120.218 191.172L117.036 194.354C116.84 194.549 116.524 194.549 116.328 194.354L113.146 191.172C112.951 190.976 112.951 190.66 113.146 190.464C113.342 190.269 113.658 190.269 113.854 190.464L116.182 192.793V7.20711L113.854 9.53553C113.658 9.7308 113.342 9.7308 113.146 9.53553C112.951 9.34027 112.951 9.02369 113.146 8.82843L116.328 5.64645Z\"\n fill=\"#F3F2F1\"\n fillRule=\"evenodd\"\n />\n </svg>\n <svg\n className=\"webchat__keyboard-help__image webchat__keyboard-help__image--high-contrast\"\n fill=\"none\"\n // \"focusable\" attribute is only available in IE11 and \"tabIndex={-1}\" does not work.\n focusable={false}\n height=\"200\"\n role=\"presentation\"\n viewBox=\"0 0 121 200\"\n width=\"121\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect height=\"199\" stroke=\"white\" width=\"109\" x=\"0.5\" y=\"0.5\" />\n <rect height=\"156\" stroke=\"white\" width=\"102\" x=\"3.5\" y=\"4.5\" />\n <rect height=\"42\" stroke=\"white\" width=\"93\" x=\"7.5\" y=\"8.5\" />\n <rect height=\"99\" stroke=\"white\" width=\"93\" x=\"7.5\" y=\"55.5\" />\n <rect height=\"13\" stroke=\"white\" width=\"102\" x=\"3.5\" y=\"182.5\" />\n <rect height=\"13\" stroke=\"white\" width=\"32\" x=\"3.5\" y=\"165.5\" />\n <rect height=\"13\" stroke=\"white\" width=\"32\" x=\"38.5\" y=\"165.5\" />\n <rect height=\"13\" stroke=\"white\" width=\"32\" x=\"73.5\" y=\"165.5\" />\n <path\n clipRule=\"evenodd\"\n d=\"M116.328 5.64645C116.524 5.45118 116.84 5.45118 117.036 5.64645L120.218 8.82843C120.413 9.02369 120.413 9.34027 120.218 9.53553C120.022 9.7308 119.706 9.7308 119.51 9.53553L117.182 7.20711V192.793L119.51 190.464C119.706 190.269 120.022 190.269 120.218 190.464C120.413 190.66 120.413 190.976 120.218 191.172L117.036 194.354C116.84 194.549 116.524 194.549 116.328 194.354L113.146 191.172C112.951 190.976 112.951 190.66 113.146 190.464C113.342 190.269 113.658 190.269 113.854 190.464L116.182 192.793V7.20711L113.854 9.53553C113.658 9.7308 113.342 9.7308 113.146 9.53553C112.951 9.34027 112.951 9.02369 113.146 8.82843L116.328 5.64645Z\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n </svg>\n <div className=\"webchat__keyboard-help__notes-pane\">\n <Notes header={chatWindowBodyMoveBetweenItemsHeader} text={chatWindowBodyMoveBetweenItemsBody} />\n <Notes header={chatWindowBodyDoActionHeader} text={chatWindowBodyDoActionBody} />\n </div>\n </div>\n </article>\n <article className=\"webchat__keyboard-help__section\">\n <header>\n <h3 className=\"webchat__keyboard-help__header\">{chatHistoryHeader}</h3>\n </header>\n <div className=\"webchat__keyboard-help__two-panes\">\n <svg\n className=\"webchat__keyboard-help__image webchat__keyboard-help__image--light\"\n fill=\"none\"\n // \"focusable\" attribute is only available in IE11 and \"tabIndex={-1}\" does not work.\n focusable={false}\n height=\"200\"\n role=\"presentation\"\n viewBox=\"0 0 121 200\"\n width=\"121\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect height=\"199\" stroke=\"#C8C6C4\" width=\"109\" x=\"0.5\" y=\"0.5\" />\n <rect height=\"156\" stroke=\"#323130\" width=\"102\" x=\"3.5\" y=\"4.5\" />\n <rect height=\"42\" stroke=\"#323130\" strokeDasharray=\"2 2\" width=\"93\" x=\"7.5\" y=\"8.5\" />\n <rect height=\"99\" stroke=\"#323130\" strokeDasharray=\"2 2\" width=\"93\" x=\"7.5\" y=\"55.5\" />\n <rect height=\"13\" stroke=\"#C8C6C4\" width=\"102\" x=\"3.5\" y=\"182.5\" />\n <rect height=\"13\" stroke=\"#C8C6C4\" width=\"32\" x=\"3.5\" y=\"165.5\" />\n <rect height=\"13\" stroke=\"#C8C6C4\" width=\"32\" x=\"38.5\" y=\"165.5\" />\n <rect height=\"13\" stroke=\"#C8C6C4\" width=\"32\" x=\"73.5\" y=\"165.5\" />\n <path\n clipRule=\"evenodd\"\n d=\"M116.328 7.64645C116.524 7.45118 116.84 7.45118 117.036 7.64645L120.218 10.8284C120.413 11.0237 120.413 11.3403 120.218 11.5355C120.022 11.7308 119.706 11.7308 119.51 11.5355L117.182 9.20711V156.793L119.51 154.464C119.706 154.269 120.022 154.269 120.218 154.464C120.413 154.66 120.413 154.976 120.218 155.172L117.036 158.354C116.84 158.549 116.524 158.549 116.328 158.354L113.146 155.172C112.951 154.976 112.951 154.66 113.146 154.464C113.342 154.269 113.658 154.269 113.854 154.464L116.182 156.793V9.20711L113.854 11.5355C113.658 11.7308 113.342 11.7308 113.146 11.5355C112.951 11.3403 112.951 11.0237 113.146 10.8284L116.328 7.64645Z\"\n fill=\"#323130\"\n fillRule=\"evenodd\"\n />\n </svg>\n <svg\n className=\"webchat__keyboard-help__image webchat__keyboard-help__image--dark\"\n fill=\"none\"\n // \"focusable\" attribute is only available in IE11 and \"tabIndex={-1}\" does not work.\n focusable={false}\n height=\"200\"\n role=\"presentation\"\n viewBox=\"0 0 121 200\"\n width=\"121\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect height=\"199\" stroke=\"#484644\" width=\"109\" x=\"0.5\" y=\"0.5\" />\n <rect height=\"156\" stroke=\"#F3F2F1\" width=\"102\" x=\"3.5\" y=\"4.5\" />\n <rect height=\"42\" stroke=\"#F3F2F1\" strokeDasharray=\"2 2\" width=\"93\" x=\"7.5\" y=\"8.5\" />\n <rect height=\"99\" stroke=\"#F3F2F1\" strokeDasharray=\"2 2\" width=\"93\" x=\"7.5\" y=\"55.5\" />\n <rect height=\"13\" stroke=\"#484644\" width=\"102\" x=\"3.5\" y=\"182.5\" />\n <rect height=\"13\" stroke=\"#484644\" width=\"32\" x=\"3.5\" y=\"165.5\" />\n <rect height=\"13\" stroke=\"#484644\" width=\"32\" x=\"38.5\" y=\"165.5\" />\n <rect height=\"13\" stroke=\"#484644\" width=\"32\" x=\"73.5\" y=\"165.5\" />\n <path\n clipRule=\"evenodd\"\n d=\"M116.328 7.64645C116.524 7.45118 116.84 7.45118 117.036 7.64645L120.218 10.8284C120.413 11.0237 120.413 11.3403 120.218 11.5355C120.022 11.7308 119.706 11.7308 119.51 11.5355L117.182 9.20711V156.793L119.51 154.464C119.706 154.269 120.022 154.269 120.218 154.464C120.413 154.66 120.413 154.976 120.218 155.172L117.036 158.354C116.84 158.549 116.524 158.549 116.328 158.354L113.146 155.172C112.951 154.976 112.951 154.66 113.146 154.464C113.342 154.269 113.658 154.269 113.854 154.464L116.182 156.793V9.20711L113.854 11.5355C113.658 11.7308 113.342 11.7308 113.146 11.5355C112.951 11.3403 112.951 11.0237 113.146 10.8284L116.328 7.64645Z\"\n fill=\"#F3F2F1\"\n fillRule=\"evenodd\"\n />\n </svg>\n <svg\n className=\"webchat__keyboard-help__image webchat__keyboard-help__image--high-contrast\"\n fill=\"none\"\n // \"focusable\" attribute is only available in IE11 and \"tabIndex={-1}\" does not work.\n focusable={false}\n height=\"200\"\n role=\"presentation\"\n viewBox=\"0 0 121 200\"\n width=\"121\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect height=\"199\" stroke=\"white\" width=\"109\" x=\"0.5\" y=\"0.5\" />\n <rect height=\"156\" stroke=\"white\" width=\"102\" x=\"3.5\" y=\"4.5\" />\n <rect height=\"42\" stroke=\"white\" strokeDasharray=\"2 2\" width=\"93\" x=\"7.5\" y=\"8.5\" />\n <rect height=\"99\" stroke=\"white\" strokeDasharray=\"2 2\" width=\"93\" x=\"7.5\" y=\"55.5\" />\n <rect height=\"13\" stroke=\"white\" width=\"102\" x=\"3.5\" y=\"182.5\" />\n <rect height=\"13\" stroke=\"white\" width=\"32\" x=\"3.5\" y=\"165.5\" />\n <rect height=\"13\" stroke=\"white\" width=\"32\" x=\"38.5\" y=\"165.5\" />\n <rect height=\"13\" stroke=\"white\" width=\"32\" x=\"73.5\" y=\"165.5\" />\n <path\n clipRule=\"evenodd\"\n d=\"M116.328 7.64645C116.524 7.45118 116.84 7.45118 117.036 7.64645L120.218 10.8284C120.413 11.0237 120.413 11.3403 120.218 11.5355C120.022 11.7308 119.706 11.7308 119.51 11.5355L117.182 9.20711V156.793L119.51 154.464C119.706 154.269 120.022 154.269 120.218 154.464C120.413 154.66 120.413 154.976 120.218 155.172L117.036 158.354C116.84 158.549 116.524 158.549 116.328 158.354L113.146 155.172C112.951 154.976 112.951 154.66 113.146 154.464C113.342 154.269 113.658 154.269 113.854 154.464L116.182 156.793V9.20711L113.854 11.5355C113.658 11.7308 113.342 11.7308 113.146 11.5355C112.951 11.3403 112.951 11.0237 113.146 10.8284L116.328 7.64645Z\"\n fill=\"white\"\n fillRule=\"evenodd\"\n />\n </svg>\n <div className=\"webchat__keyboard-help__notes-pane\">\n <Notes header={chatHistoryMoveBetweenMessagesHeader} text={chatHistoryMoveBetweenMessagesBody} />\n <Notes header={chatHistoryAccessItemsInMessageHeader} text={chatHistoryAccessItemsInMessageBody} />\n <Notes header={chatHistoryMoveBetweenItemsHeader} text={chatHistoryMoveBetweenItemsBody} />\n <Notes header={chatHistoryLeaveMessageHeader} text={chatHistoryLeaveMessageBody} />\n </div>\n </div>\n </article>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default KeyboardHelp;\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [2, 5, 36] }] */\n\nimport { useMemo } from 'react';\nimport random from 'math-random';\n\nexport default function useUniqueId(prefix?: string): string {\n const id = useMemo(() => random().toString(36).substr(2, 5), []);\n\n prefix = prefix ? `${prefix}--` : '';\n\n return `${prefix}${id}`;\n}\n","import { useCallback } from 'react';\n\nimport createWaitUntilable from './internal/createWaitUntilable';\nimport useWebChatUIContext from './internal/useWebChatUIContext';\nimport { useFocusSendBox } from './sendBoxFocus';\n\nexport default function useFocus(): (where?: 'main' | 'sendBox' | 'sendBoxWithoutKeyboard') => Promise<void> {\n const focusSendBox = useFocusSendBox();\n const { focusTranscriptCallbacksRef } = useWebChatUIContext();\n\n return useCallback(\n async where => {\n if (where === 'sendBox' || where === 'sendBoxWithoutKeyboard') {\n const [options, getPromise] = createWaitUntilable({ noKeyboard: where === 'sendBoxWithoutKeyboard' });\n\n focusSendBox(options);\n\n await getPromise();\n } else {\n const [, getPromise] = createWaitUntilable({});\n\n focusTranscriptCallbacksRef.current.forEach(callback => callback());\n\n await getPromise();\n }\n },\n [focusSendBox, focusTranscriptCallbacksRef]\n );\n}\n","export type WaitUntilable<T> = T & { waitUntil: (promise: Promise<void>) => void };\n\nexport default function createWaitUntilable<T extends object>(\n object: T\n): readonly [WaitUntilable<T>, () => Promise<void>] {\n const allPromises: Promise<void>[] = [];\n\n return Object.freeze([\n {\n ...object,\n waitUntil(promise: Promise<void>) {\n allPromises.push(promise);\n }\n },\n async () => {\n // Implements the logic of ExtendableEvent.waitUntil.\n // When calling waitUntil(), new promises can be added by calling waitUntil() again.\n // It should wait until no new promises are added.\n\n // From excerpt of https://developer.mozilla.org/en-US/docs/Web/API/ExtendableEvent/waitUntil:\n // \"The waitUntil() method must be initially called within the event callback, but after that it can be called multiple times, until all the promises passed to it settle.\"\n for (let numPromise = 0; ; numPromise = allPromises.length) {\n // eslint-disable-next-line no-await-in-loop\n await Promise.all(allPromises).then(() => {\n // Intentionally left blank.\n });\n\n // Wait until all promise changes are settled.\n if (numPromise === allPromises.length) {\n break;\n }\n }\n }\n ]);\n}\n","import { WaitUntilable } from './internal/createWaitUntilable';\nimport { createPropagation } from 'use-propagate';\n\nexport type SendBoxFocusOptions = WaitUntilable<{ noKeyboard: boolean }>;\n\nconst { useListen: useRegisterFocusSendBox, usePropagate: useFocusSendBox } = createPropagation<SendBoxFocusOptions>();\n\nexport { useRegisterFocusSendBox, useFocusSendBox };\n","import { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, { useEffect, useMemo, useRef } from 'react';\nimport type { FC, RefObject, VFC } from 'react';\nimport type { WebChatActivity } from 'botframework-webchat-core';\n\nimport isPresentational from './LiveRegion/isPresentational';\nimport LiveRegionActivity from '../LiveRegion/LiveRegionActivity';\nimport LiveRegionSendFailed from './LiveRegion/SendFailed';\nimport LiveRegionTwinComposer from '../providers/LiveRegionTwin/LiveRegionTwinComposer';\nimport tabbableElements from '../Utils/tabbableElements';\nimport useLocalizeAccessKey from '../hooks/internal/useLocalizeAccessKey';\nimport useQueueStaticElement from '../providers/LiveRegionTwin/useQueueStaticElement';\nimport useStyleToEmotionObject from '../hooks/internal/useStyleToEmotionObject';\nimport useSuggestedActionsAccessKey from '../hooks/internal/useSuggestedActionsAccessKey';\nimport useTypistNames from './useTypistNames';\n\nimport type { ActivityElementMap } from './types';\n\nconst { useActivities, useGetKeyByActivity, useLocalizer, useStyleOptions } = hooks;\n\nconst ROOT_STYLE = {\n '&.webchat__live-region-transcript': {\n '& .webchat__live-region-transcript__note, & .webchat__live-region-transcript__note, & .webchat__live-region-transcript__text-element':\n {\n color: 'transparent',\n height: 1,\n overflow: 'hidden',\n position: 'absolute',\n top: 0,\n whiteSpace: 'nowrap',\n width: 1\n }\n }\n};\n\ntype RenderingActivities = Map<string, WebChatActivity>;\n\ntype LiveRegionTranscriptCoreProps = Readonly<{\n activityElementMapRef: RefObject<ActivityElementMap>;\n}>;\n\nconst LiveRegionTranscriptCore: FC<LiveRegionTranscriptCoreProps> = ({ activityElementMapRef }) => {\n // We are looking for all activities instead of just those will be rendered.\n // This is because some activities that chosen not be rendered in the chat history,\n // we might still need to be read by screen reader. Such as, suggested actions without text content.\n const [accessKey] = useSuggestedActionsAccessKey();\n const [activities] = useActivities();\n const [typistNames] = useTypistNames();\n const getKeyByActivity = useGetKeyByActivity();\n const localize = useLocalizer();\n const localizeAccessKeyAsAccessibleName = useLocalizeAccessKey('accessible name');\n const queueStaticElement = useQueueStaticElement();\n\n const liveRegionInteractiveLabelAlt = localize('TRANSCRIPT_LIVE_REGION_INTERACTIVE_LABEL_ALT');\n const liveRegionInteractiveWithLinkLabelAlt = localize('TRANSCRIPT_LIVE_REGION_INTERACTIVE_WITH_LINKS_LABEL_ALT');\n const typingIndicator =\n !!typistNames.length &&\n localize(\n typistNames.length > 1 ? 'TYPING_INDICATOR_MULTIPLE_TEXT' : 'TYPING_INDICATOR_SINGLE_TEXT',\n typistNames[0]\n );\n\n const liveRegionSuggestedActionsLabelAlt = accessKey\n ? localize(\n 'TRANSCRIPT_LIVE_REGION_SUGGESTED_ACTIONS_WITH_ACCESS_KEY_LABEL_ALT',\n localizeAccessKeyAsAccessibleName(accessKey)\n )\n : localize('TRANSCRIPT_LIVE_REGION_SUGGESTED_ACTIONS_LABEL_ALT');\n\n const keyedActivities = useMemo<Readonly<RenderingActivities>>(\n () =>\n Object.freeze(\n activities.reduce<RenderingActivities>((intermediate, activity) => {\n // Only \"message\" activity will be read by screen reader.\n if (activity.type === 'message') {\n return intermediate.set(getKeyByActivity(activity), activity);\n }\n\n return intermediate;\n }, new Map<string, WebChatActivity>())\n ),\n [activities, getKeyByActivity]\n );\n\n const prevRenderingActivitiesRef = useRef<Readonly<RenderingActivities>>();\n\n useEffect(() => {\n const { current: prevRenderingActivities } = prevRenderingActivitiesRef;\n const appendedActivities: { activity: WebChatActivity; key: string }[] = [];\n\n // Bottom-up, find activities which are recently appended (i.e. new activity will have a new key).\n // We only consider new activities added to the bottom of the chat history.\n // Based on how `aria-relevant=\"additions\"` works, activities that are updated, deleted, or reordered, should be ignored.\n for (const [key, activity] of Array.from(keyedActivities.entries()).reverse()) {\n if (prevRenderingActivities?.has(key)) {\n break;\n }\n\n appendedActivities.unshift({ activity, key });\n\n isPresentational(activity) || queueStaticElement(<LiveRegionActivity activity={activity} />);\n }\n\n const hasNewLink = appendedActivities.some(({ key }) => activityElementMapRef.current.get(key)?.querySelector('a'));\n\n const hasNewWidget = appendedActivities.some(\n ({ key }) =>\n !!tabbableElements(\n activityElementMapRef.current.get(key)?.querySelector('.webchat__basic-transcript__activity-body')\n ).length\n );\n\n const hasSuggestedActions = appendedActivities.some(\n ({ activity }) => activity.type === 'message' && activity.suggestedActions?.actions?.length\n );\n\n // This is a footnote reading either:\n // - \"Message is interactive. Press shift tab key 2 to 3 times to switch to the chat history. Then click on the message to interact.\", or;\n // - \"One or more links in the message. Press shift tab key 2 to 3 times to switch to the chat history. Then click on the message to interact.\"\n if (hasNewLink || hasNewWidget) {\n queueStaticElement(\n <div className=\"webchat__live-region-transcript__note\" role=\"note\">\n {hasNewLink ? liveRegionInteractiveWithLinkLabelAlt : liveRegionInteractiveLabelAlt}\n </div>\n );\n }\n\n // This is a footnote reading \"Suggested actions container: has content. Press CTRL + SHIFT + A to select.\"\n if (hasSuggestedActions) {\n queueStaticElement(\n <div className=\"webchat__live-region-transcript__note\" role=\"note\">\n {liveRegionSuggestedActionsLabelAlt}\n </div>\n );\n }\n\n prevRenderingActivitiesRef.current = keyedActivities;\n }, [\n activityElementMapRef,\n liveRegionInteractiveLabelAlt,\n liveRegionInteractiveWithLinkLabelAlt,\n liveRegionSuggestedActionsLabelAlt,\n prevRenderingActivitiesRef,\n queueStaticElement,\n keyedActivities\n ]);\n\n useEffect(() => {\n typingIndicator && queueStaticElement(typingIndicator);\n }, [queueStaticElement, typingIndicator]);\n\n return <LiveRegionSendFailed />;\n};\n\ntype LiveRegionTranscriptProps = {\n activityElementMapRef: RefObject<ActivityElementMap>;\n};\n\nconst LiveRegionTranscript: VFC<LiveRegionTranscriptProps> = ({ activityElementMapRef }) => {\n const [{ internalLiveRegionFadeAfter }] = useStyleOptions();\n const localize = useLocalizer();\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n\n const transcriptRoleDescription = localize('TRANSCRIPT_ARIA_ROLE_ALT');\n\n return (\n <LiveRegionTwinComposer\n aria-roledescription={transcriptRoleDescription}\n className={classNames('webchat__live-region-transcript', rootClassName)}\n fadeAfter={internalLiveRegionFadeAfter}\n role=\"log\"\n textElementClassName=\"webchat__live-region-transcript__text-element\"\n >\n <LiveRegionTranscriptCore activityElementMapRef={activityElementMapRef} />\n </LiveRegionTwinComposer>\n );\n};\n\nLiveRegionTranscript.propTypes = {\n // PropTypes cannot be fully expressed in TypeScript.\n // @ts-ignore\n activityElementMapRef: PropTypes.shape({\n current: PropTypes.instanceOf(Map)\n }).isRequired\n};\n\nexport default LiveRegionTranscript;\n","import type { WebChatActivity } from 'botframework-webchat-core';\n\n/**\n * Determines if the rendering activity is presentational or not.\n * Returns `true` if the activity is presentational and should not be read by screen reader, otherwise, `false`.\n *\n * @returns {boolean} `true` if the activity is presentational and should not be read by screen reader, otherwise, `false`.\n */\nexport default function isPresentational(activity: WebChatActivity): boolean {\n if (activity.type !== 'message') {\n return true;\n }\n\n const { channelData } = activity;\n\n // \"Fallback text\" includes both message text and narratives for attachments.\n // Emptying out \"fallback text\" essentially mute for both message and attachments.\n const fallbackText = channelData?.['webchat:fallback-text'];\n\n if (typeof fallbackText === 'string') {\n return !fallbackText;\n }\n\n // If there are \"displayText\" (MessageBack), \"text\", any attachments, or suggested actions, there are something to narrate.\n return !(\n channelData?.messageBack?.displayText ||\n activity.text ||\n activity.attachments?.length ||\n activity.suggestedActions?.actions?.length\n );\n}\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [2] }] */\n\nimport { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, { Fragment, useMemo } from 'react';\n\nimport activityAltText from '../Utils/activityAltText';\nimport LiveRegionAttachments from './private/LiveRegionAttachments';\nimport LiveRegionSuggestedActions from './private/LiveRegionSuggestedActions';\nimport useRenderMarkdownAsHTML from '../hooks/useRenderMarkdownAsHTML';\nimport useStyleToEmotionObject from '../hooks/internal/useStyleToEmotionObject';\n\nimport type { VFC } from 'react';\nimport type { WebChatActivity } from 'botframework-webchat-core';\n\nconst { useAvatarForBot, useLocalizer } = hooks;\n\nconst ROOT_STYLE = {\n '&.webchat__live-region-activity': {\n color: 'transparent',\n height: 1,\n opacity: 0,\n overflow: 'hidden',\n position: 'absolute',\n top: 0,\n whiteSpace: 'nowrap',\n width: 1\n }\n};\n\ntype LiveRegionActivityProps = {\n activity: WebChatActivity;\n};\n\nconst LiveRegionActivity: VFC<LiveRegionActivityProps> = ({ activity }) => {\n const [{ initials: botInitials }] = useAvatarForBot();\n const {\n from: { role },\n type\n } = activity;\n const fallbackText: string | undefined =\n type === 'message' ? activity.channelData['webchat:fallback-text'] : undefined;\n const localize = useLocalizer();\n const renderMarkdownAsHTML = useRenderMarkdownAsHTML();\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n const textAlt = useMemo(() => activityAltText(activity, renderMarkdownAsHTML), [activity, renderMarkdownAsHTML]);\n\n const greetingAlt: string = (\n role === 'user' ? localize('ACTIVITY_YOU_SAID_ALT') : localize('ACTIVITY_BOT_SAID_ALT', botInitials || '')\n ).replace(/\\s{2,}/gu, ' ');\n const validFallbackText = fallbackText && typeof fallbackText === 'string';\n\n return (\n <article aria-atomic={true} className={classNames('webchat__live-region-activity', rootClassName)}>\n <div>{greetingAlt}</div>\n {validFallbackText ? (\n <div>{fallbackText}</div>\n ) : (\n <Fragment>\n <div>{textAlt}</div>\n {type === 'message' && (\n <Fragment>\n {!!activity.suggestedActions && (\n <LiveRegionSuggestedActions suggestedActions={activity.suggestedActions} />\n )}\n <LiveRegionAttachments activity={activity} />\n </Fragment>\n )}\n </Fragment>\n )}\n </article>\n );\n};\n\nLiveRegionActivity.propTypes = {\n activity: PropTypes.any.isRequired\n};\n\nexport default LiveRegionActivity;\n\nexport type { LiveRegionActivityProps };\n","export default function textFormatToContentType(textFormat) {\n switch (textFormat) {\n case 'plain':\n return 'text/plain';\n\n case 'xml':\n return 'text/xml';\n\n default:\n return 'text/markdown';\n }\n}\n","import textFormatToContentType from './textFormatToContentType';\n\nfunction walk<T extends Node>(document: Document, walker: (node: T) => string[]): string[] {\n const nodes: T[] = [].slice.call(document.childNodes);\n const results: string[] = [];\n\n while (nodes.length) {\n const node = nodes.shift();\n const { childNodes } = node;\n\n results.push(...(walker(node) || []));\n nodes.unshift(...[].slice.call(childNodes));\n }\n\n return results;\n}\n\n// From https://developer.mozilla.org/en-US/docs/Web/HTML/Inline_elements\nconst HTML_INLINE_TAGS = [\n 'A',\n 'ABBR',\n 'ACRONYM',\n 'AUDIO',\n 'B',\n 'BDI',\n 'BDO',\n 'BIG',\n 'BR',\n 'BUTTON',\n 'CANVAS',\n 'CITE',\n 'CODE',\n 'DATA',\n 'DATALIST',\n 'DEL',\n 'DFN',\n 'EM',\n 'EMBED',\n 'I',\n 'IFRAME',\n 'IMG',\n 'INPUT',\n 'INS',\n 'KBD',\n 'LABEL',\n 'MAP',\n 'MARK',\n 'METER',\n 'NOSCRIPT',\n 'OBJECT',\n 'OUTPUT',\n 'PICTURE',\n 'PROGRESS',\n 'Q',\n 'RUBY',\n 'S',\n 'SAMP',\n 'SCRIPT',\n 'SELECT',\n 'SLOT',\n 'SMALL',\n 'SPAN',\n 'STRONG',\n 'SUB',\n 'SUP',\n 'SVG',\n 'TEMPLATE',\n 'TEXTAREA',\n 'TIME',\n 'U',\n 'TT',\n 'VAR',\n 'VIDEO',\n 'WBR'\n];\n\n/**\n * Computes all text from a given HTML document as flattened array. This is best-effort.\n *\n * @param {Document} document - HTML document to computes texts from.\n */\nfunction htmlTextAlternatives(document: Document): string[] {\n // TODO: [P2] #3923 Revisit this logic with W3C standard, we could do a better text alternatives computation.\n // For example, <abbr title=\"...\"> is not computed.\n // https://www.w3.org/TR/accname-1.1/#mapping_additional_nd_name\n return walk<HTMLElement>(document, node => {\n const { nodeType, tagName, textContent } = node;\n\n if (nodeType === Node.TEXT_NODE) {\n return [textContent];\n } else if (tagName === 'IMG') {\n return [node.getAttribute('alt')];\n } else if (!HTML_INLINE_TAGS.includes(tagName)) {\n return ['\\n'];\n }\n });\n}\n\n/**\n * Returns the text alternatives for a message activity.\n *\n * @param {object} activity - Activity to compute the text alternatives.\n * @param {function} renderMarkdownAsHTML - Callback function to render Markdown as HTML string.\n */\nexport default function activityAltText(\n activity: any,\n renderMarkdownAsHTML?: (markdown: string) => string\n): false | string {\n if (activity.type !== 'message') {\n return false;\n }\n\n const fallbackText = activity?.channelData?.['webchat:fallback-text'];\n\n if (typeof fallbackText === 'string') {\n // If `fallbackText` is an empty string, we will treat the activity as presentational and skip narrating it (return false).\n return fallbackText || false;\n }\n\n const text = activity?.channelData?.messageBack?.displayText || activity.text;\n\n if (!text) {\n // We will continue to narrate the activity, as empty.\n return '';\n }\n\n if (renderMarkdownAsHTML && textFormatToContentType(activity.textFormat) === 'text/markdown') {\n return htmlTextAlternatives(new DOMParser().parseFromString(renderMarkdownAsHTML(text), 'text/html'))\n .join('')\n .replace(/\\n{2,}/gu, '\\n')\n .trim();\n }\n\n return text;\n}\n","import { hooks } from 'botframework-webchat-api';\nimport { type WebChatActivity } from 'botframework-webchat-core';\nimport React, { Fragment } from 'react';\n\nconst { useCreateAttachmentForScreenReaderRenderer, useLocalizer } = hooks;\n\nconst ACTIVITY_NUM_ATTACHMENTS_ALT_IDS = {\n few: 'ACTIVITY_NUM_ATTACHMENTS_FEW_ALT',\n many: 'ACTIVITY_NUM_ATTACHMENTS_MANY_ALT',\n one: 'ACTIVITY_NUM_ATTACHMENTS_ONE_ALT',\n other: 'ACTIVITY_NUM_ATTACHMENTS_OTHER_ALT',\n two: 'ACTIVITY_NUM_ATTACHMENTS_TWO_ALT'\n};\n\ntype LiveRegionAttachmentsProps = Readonly<{\n activity: Readonly<WebChatActivity & { type: 'message' }>;\n}>;\n\n// When \"renderAttachments\" is false, we will not render the content of attachments.\n// That means, it will only render \"2 attachments\", instead of \"image attachment\".\n// This is used in the visual transcript, where we render \"Press ENTER to interact.\"\nconst LiveRegionAttachments = ({ activity }: LiveRegionAttachmentsProps) => {\n const { attachments = [] } = activity;\n const createAttachmentForScreenReaderRenderer = useCreateAttachmentForScreenReaderRenderer();\n const localizeWithPlural = useLocalizer({ plural: true });\n\n const attachmentForScreenReaderRenderers = attachments\n .map(attachment => createAttachmentForScreenReaderRenderer({ activity, attachment }))\n .filter(Boolean);\n\n const numGenericAttachments = attachments.length - attachmentForScreenReaderRenderers.length;\n\n const numAttachmentsAlt =\n !!numGenericAttachments && localizeWithPlural(ACTIVITY_NUM_ATTACHMENTS_ALT_IDS, numGenericAttachments);\n\n return (\n <Fragment>\n {attachmentForScreenReaderRenderers.map((render, index) => (\n // Direct Line does not have key for attachment other than index.\n // eslint-disable-next-line react/no-array-index-key\n <div key={index}>{typeof render === 'function' && render()}</div>\n ))}\n {numAttachmentsAlt && <p>{numAttachmentsAlt}</p>}\n </Fragment>\n );\n};\n\nexport default LiveRegionAttachments;\n\nexport type { LiveRegionAttachmentsProps };\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport computeSuggestedActionText from '../../Utils/computeSuggestedActionText';\n\nimport type { DirectLineSuggestedAction } from 'botframework-webchat-core';\nimport type { VFC } from 'react';\n\ntype LiveRegionSuggestedActionsProps = {\n suggestedActions: DirectLineSuggestedAction;\n};\n\nconst LiveRegionSuggestedActions: VFC<LiveRegionSuggestedActionsProps> = ({ suggestedActions }) =>\n suggestedActions.actions?.length && (\n <p className=\"webchat__live-region-activity__suggested-actions\">\n {suggestedActions.actions.map((action, index) => (\n // Direct Line schema does not have key other than index.\n // eslint-disable-next-line react/no-array-index-key\n <button className=\"webchat__live-region-activity__suggested-action\" key={index} tabIndex={-1} type=\"button\">\n {computeSuggestedActionText(action)}\n </button>\n ))}\n </p>\n );\n\nLiveRegionSuggestedActions.propTypes = {\n suggestedActions: PropTypes.shape({\n actions: PropTypes.array\n }).isRequired\n};\n\nexport default LiveRegionSuggestedActions;\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","import { cx } from '@emotion/css';\nimport { hooks, StrictStyleOptions } from 'botframework-webchat-api';\nimport { useMemo } from 'react';\n\nimport parseDocumentFromString from '../Utils/parseDocumentFromString';\nimport serializeDocumentIntoString from '../Utils/serializeDocumentIntoString';\nimport useWebChatUIContext from './internal/useWebChatUIContext';\nimport useStyleSet from './useStyleSet';\n\nconst { useLocalizer, useStyleOptions } = hooks;\n\nexport default function useRenderMarkdownAsHTML(\n mode: 'accessible name' | 'adaptive cards' | 'citation modal' | 'message activity' = 'message activity'\n):\n | ((\n markdown: string,\n styleOptions?: Readonly<StrictStyleOptions>,\n options?: Readonly<{ externalLinkAlt: string }>\n ) => string)\n | undefined {\n const { renderMarkdown } = useWebChatUIContext();\n const [styleOptions] = useStyleOptions();\n const [{ renderMarkdown: renderMarkdownStyleSet }] = useStyleSet();\n const localize = useLocalizer();\n\n const externalLinkAlt = localize('MARKDOWN_EXTERNAL_LINK_ALT');\n\n const containerClassName = useMemo(\n () =>\n cx(\n 'webchat__render-markdown',\n {\n 'webchat__render-markdown--adaptive-cards': mode === 'adaptive cards',\n 'webchat__render-markdown--citation': mode === 'citation modal',\n 'webchat__render-markdown--message-activity':\n mode !== 'accessible name' && mode !== 'adaptive cards' && mode !== 'citation modal'\n },\n renderMarkdownStyleSet + ''\n ),\n [mode, renderMarkdownStyleSet]\n );\n\n return useMemo(\n () =>\n renderMarkdown &&\n (markdown => {\n const htmlAfterSanitization = renderMarkdown(markdown, styleOptions, { containerClassName, externalLinkAlt });\n\n const documentAfterSanitization = parseDocumentFromString(htmlAfterSanitization);\n\n const rootElement = documentAfterSanitization.createElement('div');\n\n containerClassName && rootElement.classList.add(...containerClassName.split(' ').filter(Boolean));\n\n rootElement.append(...documentAfterSanitization.body.children);\n documentAfterSanitization.body.append(rootElement);\n\n return serializeDocumentIntoString(documentAfterSanitization);\n }),\n [containerClassName, externalLinkAlt, renderMarkdown, styleOptions]\n );\n}\n","import { hooks } from 'botframework-webchat-api';\nimport { useEffect, useMemo } from 'react';\nimport type { VFC } from 'react';\n\nimport { SEND_FAILED } from '../../types/internal/SendStatus';\nimport isPresentational from './isPresentational';\nimport usePrevious from '../../hooks/internal/usePrevious';\nimport useQueueStaticElement from '../../providers/LiveRegionTwin/useQueueStaticElement';\n\nconst { useGetActivityByKey, useLocalizer, useSendStatusByActivityKey } = hooks;\n\n/**\n * React component to on-demand narrate \"Failed to send message\" at the end of the live region.\n *\n * We cannot narrate \"failed to send message\" next to the activity. At the time when the activity is being sent,\n * the activity is also queued to the screen reader. And at that moment, we not yet know if the activity can be sent or not.\n *\n * We only know when the activity was failed to send at a later time.\n *\n * Thus, we need to use a live region \"footnote\" to indicate the message was failed to send.\n */\nconst LiveRegionSendFailed: VFC<{}> = () => {\n const [sendStatusByActivityKey] = useSendStatusByActivityKey();\n const getActivityByKey = useGetActivityByKey();\n const localize = useLocalizer();\n const queueStaticElement = useQueueStaticElement();\n\n /**\n * List of keys of outgoing and non-presentational activities that are failed to send.\n *\n * Activities which are presentational, such as `event` or `typing`, are ignored to reduce confusions.\n * \"Failed to send message\" should not be narrated for presentational activities.\n */\n const activityKeysOfSendFailed = useMemo<Set<string>>(\n () =>\n Array.from(sendStatusByActivityKey).reduce(\n (activityKeysOfSendFailed, [key, sendStatus]) =>\n sendStatus === SEND_FAILED && !isPresentational(getActivityByKey(key))\n ? activityKeysOfSendFailed.add(key)\n : activityKeysOfSendFailed,\n new Set<string>()\n ),\n [getActivityByKey, sendStatusByActivityKey]\n );\n\n /** Returns localized \"Failed to send message.\" */\n const liveRegionSendFailedAlt = localize('TRANSCRIPT_LIVE_REGION_SEND_FAILED_ALT');\n\n const prevActivityKeysOfSendFailed = usePrevious(activityKeysOfSendFailed);\n\n /** True, if one or more non-presentational activities start appears as \"send failed\", otherwise, false. */\n const hasNewSendFailed = useMemo<boolean>(() => {\n if (activityKeysOfSendFailed === prevActivityKeysOfSendFailed) {\n return false;\n }\n\n for (const key of activityKeysOfSendFailed.keys()) {\n if (!prevActivityKeysOfSendFailed.has(key)) {\n return true;\n }\n }\n\n return false;\n }, [activityKeysOfSendFailed, prevActivityKeysOfSendFailed]);\n\n useEffect(() => {\n hasNewSendFailed && queueStaticElement(liveRegionSendFailedAlt);\n }, [hasNewSendFailed, liveRegionSendFailedAlt, queueStaticElement]);\n\n return null;\n};\n\nexport default LiveRegionSendFailed;\n","// This type is only for this package only and help reducing size of the bundle.\n// Externals should use the string literal directly instead.\n\n// TODO: [P3] #4040 When improve treeshaking with named exports, we could export internals from `core` package.\n// import { SENDING, SEND_FAILED, SENT } from 'botframework-webchat-core/internal/SendStatus';\n\nconst SENDING = 'sending';\nconst SEND_FAILED = 'send failed';\nconst SENT = 'sent';\n\ntype SendStatus = typeof SENDING | typeof SEND_FAILED | typeof SENT;\n\nexport { SENDING, SEND_FAILED, SENT };\nexport type { SendStatus };\n","// TODO: [P0] #4133 Don't copy.\nimport { useEffect, useRef } from 'react';\n\nexport default function usePrevious<T>(value: T): T {\n const ref = useRef<T>();\n\n useEffect(() => {\n ref.current = value;\n });\n\n return ref.current;\n}\n","import { useContext } from 'react';\n\nimport LiveRegionTwinContext from './Context';\n\nimport type { LiveRegionTwinContextType } from './Context';\n\nexport default function useLiveRegionTwinContext(thrownOnUndefined = true): LiveRegionTwinContextType {\n const contextValue = useContext(LiveRegionTwinContext);\n\n if (thrownOnUndefined && !contextValue) {\n throw new Error('botframework-webchat internal: This hook can only be used under <LiveRegionComposer>.');\n }\n\n return contextValue;\n}\n","import { createContext } from 'react';\n\nimport type { StaticElement, StaticElementEntry } from './types';\n\ntype LiveRegionTwinContextType = {\n markAllAsRendered: () => void;\n queueStaticElement: (element: StaticElement) => void;\n staticElementEntriesState: readonly [readonly StaticElementEntry[]];\n};\n\nconst LiveRegionTwinContext = createContext<LiveRegionTwinContextType>(undefined);\n\nexport default LiveRegionTwinContext;\n\nexport type { LiveRegionTwinContextType };\n","import useLiveRegionContext from './private/useContext';\n\nimport type { StaticElement } from './private/types';\n\n/**\n * Queues a static element to the live region.\n *\n * After the element is queued, screen reader will eventually narrate it and it cannot be changed.\n */\nexport default function useQueueStaticElement(): (element: StaticElement) => void {\n return useLiveRegionContext().queueStaticElement;\n}\n","import { hooks } from 'botframework-webchat-api';\nimport PropTypes from 'prop-types';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport type { FC, PropsWithChildren } from 'react';\n\nimport LiveRegionTwinContainer from './private/LiveRegionTwinContainer';\nimport LiveRegionTwinContext from './private/Context';\nimport useValueRef from '../../hooks/internal/useValueRef';\n\nimport type { StaticElement, StaticElementEntry } from './private/types';\n\nconst { usePonyfill } = hooks;\n\nconst DEFAULT_ARIA_LIVE = 'polite';\nconst DEFAULT_FADE_AFTER = 1000;\n\ntype LiveRegionTwinComposerProps = PropsWithChildren<{\n /** Optional \"aria-label\" attribute for the live region twin container. */\n 'aria-label'?: string;\n\n /** \"aria-live\" attribute for the live region twin container, defaults to `'polite'`. */\n 'aria-live'?: 'assertive' | 'polite';\n\n /** Optional \"aria-roledescription\" attribute for the live region twin container. */\n 'aria-roledescription'?: string;\n\n /** Optional \"className\" attribute for the live region twin container. */\n className?: string;\n\n /**\n * Static elements will fade out after this timeout value specified in milliseconds, defaults to `1000`.\n *\n * When lowering this value, make sure screen reader can continue to pick up new static elements before fading out.\n *\n * If this prop is updated, it will be reflected in next queueing elements.\n */\n fadeAfter?: number;\n\n /** Optional \"role\" attribute for the live region twin container. */\n role?: string;\n\n /** Optional \"className\" attribute for static text element. */\n textElementClassName?: string;\n}>;\n\n/**\n * Live region twin is an UI component for queueing texts or elements to the screen reader using\n * a container element with `aria-live` attribute set.\n *\n * After the text is rendered and queued, it will be removed to reduce burden on the DOM tree.\n * Currently, we assume the assistive technologies should pick up the text within 1 second of rendering.\n * This value is configurable.\n *\n * By default, the live region is visible. If is is not desirable, the caller can use `className` prop to\n * hide its visuals.\n */\nconst LiveRegionTwinComposer: FC<LiveRegionTwinComposerProps> = ({\n 'aria-label': ariaLabel,\n 'aria-live': ariaLive = DEFAULT_ARIA_LIVE,\n 'aria-roledescription': ariaRoleDescription,\n children,\n className,\n fadeAfter = DEFAULT_FADE_AFTER,\n role,\n textElementClassName\n}) => {\n const [{ clearTimeout, setTimeout }] = usePonyfill();\n const [staticElementEntries, setStaticElementEntries] = useState<StaticElementEntry[]>([]);\n const fadeAfterRef = useValueRef(fadeAfter);\n const markAllAsRenderedTimeoutIdRef = useRef<any>();\n const nextKeyRef = useRef<number>(1);\n\n const staticElementEntriesRef = useValueRef(staticElementEntries);\n\n // This function is called by an effect hook `useMarkAllAsRenderedEffect`, it must be designed with converging in mind.\n // To prevent infinite render loop, after multiple calls to this function, it should eventually no-op.\n const markAllAsRendered = useCallback<() => void>(() => {\n if (!staticElementEntriesRef.current.length) {\n // Nothing to remove.\n return;\n }\n\n // When removing each element one-by-one based on an individual timeout, Narrator would narrate them twice occasionally.\n // Possibly it think some elements that is not removed during the current cycle, are new elements and queued them twice.\n // Thus, we are removing all at once to prevent bugs in Narrator.\n markAllAsRenderedTimeoutIdRef.current && clearTimeout(markAllAsRenderedTimeoutIdRef.current);\n\n markAllAsRenderedTimeoutIdRef.current = setTimeout(() => {\n // We are playing safe by using value ref to check its length here.\n // If we are certain that `setStaticElements(emptyArray => emptyArray)` is a no-op,\n // we could replace it with just the setter function.\n staticElementEntriesRef.current.length && setStaticElementEntries([]);\n }, fadeAfterRef.current);\n }, [\n clearTimeout,\n fadeAfterRef,\n markAllAsRenderedTimeoutIdRef,\n setStaticElementEntries,\n setTimeout,\n staticElementEntriesRef\n ]);\n\n // When this component is unmounting, make sure all future `setTimeout` are cleared and should not be fired.\n useEffect(\n () => () => markAllAsRenderedTimeoutIdRef.current && clearTimeout(markAllAsRenderedTimeoutIdRef.current),\n [clearTimeout, markAllAsRenderedTimeoutIdRef]\n );\n\n const queueStaticElement = useCallback<(staticElement: StaticElement) => void>(\n (element: StaticElement): void => {\n const key = nextKeyRef.current;\n\n nextKeyRef.current = nextKeyRef.current + 1;\n\n setStaticElementEntries(entries => [...entries, { element, key }]);\n },\n [nextKeyRef, setStaticElementEntries]\n );\n\n const staticElementEntriesState = useMemo<readonly [readonly StaticElementEntry[]]>(\n () => Object.freeze([Object.freeze(staticElementEntries)]) as readonly [readonly StaticElementEntry[]],\n [staticElementEntries]\n );\n\n const context = useMemo(\n () => ({\n markAllAsRendered,\n queueStaticElement,\n staticElementEntriesState\n }),\n [markAllAsRendered, queueStaticElement, staticElementEntriesState]\n );\n\n return (\n <LiveRegionTwinContext.Provider value={context}>\n <LiveRegionTwinContainer\n aria-label={ariaLabel}\n aria-live={ariaLive}\n aria-roledescription={ariaRoleDescription}\n className={className}\n role={role}\n textElementClassName={textElementClassName}\n />\n {children}\n </LiveRegionTwinContext.Provider>\n );\n};\n\nLiveRegionTwinComposer.defaultProps = {\n 'aria-label': undefined,\n 'aria-live': DEFAULT_ARIA_LIVE,\n 'aria-roledescription': undefined,\n children: undefined,\n className: undefined,\n fadeAfter: DEFAULT_FADE_AFTER,\n role: undefined,\n textElementClassName: undefined\n};\n\nLiveRegionTwinComposer.propTypes = {\n 'aria-label': PropTypes.string,\n 'aria-live': PropTypes.oneOf(['assertive', 'polite']),\n 'aria-roledescription': PropTypes.string,\n children: PropTypes.any,\n className: PropTypes.string,\n fadeAfter: PropTypes.number,\n role: PropTypes.string,\n textElementClassName: PropTypes.string\n};\n\nexport default LiveRegionTwinComposer;\n","import PropTypes from 'prop-types';\nimport React, { Fragment } from 'react';\n\nimport type { VFC } from 'react';\n\nimport useMarkAllAsRenderedEffect from './useMarkAllAsRenderedEffect';\nimport useStaticElementEntries from './useStaticElementEntries';\n\ntype LiveRegionTwinContainerProps = {\n 'aria-label'?: string;\n 'aria-live': 'assertive' | 'polite';\n 'aria-roledescription'?: string;\n className?: string;\n role?: string;\n textElementClassName?: string;\n};\n\n// This container is marked as private because we assume there is only one instance under the <LiveRegionTwinContext>.\nconst LiveRegionTwinContainer: VFC<LiveRegionTwinContainerProps> = ({\n 'aria-label': ariaLabel,\n 'aria-live': ariaLive,\n 'aria-roledescription': ariaRoleDescription,\n className,\n role,\n textElementClassName\n}) => {\n const [staticElementEntries] = useStaticElementEntries();\n\n // We assume there is only one instance under the <LiveRegionTwinContext>.\n // The assumption made us safe to mark everything is rendered.\n // In contrary, if we have 0-to-many at different time, we may falsely mark something as rendered.\n useMarkAllAsRenderedEffect();\n\n return (\n <div\n aria-label={ariaLabel}\n aria-live={ariaLive}\n aria-roledescription={ariaRoleDescription}\n className={className}\n role={role}\n >\n {staticElementEntries.map(({ element, key }) => {\n if (typeof element === 'string') {\n return (\n <div aria-atomic={true} className={textElementClassName} key={key}>\n {element}\n </div>\n );\n }\n\n return <Fragment key={key}>{element}</Fragment>;\n })}\n </div>\n );\n};\n\nLiveRegionTwinContainer.defaultProps = {\n 'aria-label': undefined,\n 'aria-roledescription': undefined,\n className: undefined,\n role: undefined,\n textElementClassName: undefined\n};\n\nLiveRegionTwinContainer.propTypes = {\n 'aria-label': PropTypes.string,\n // PropTypes.oneOf() returns type of `string`, but not `'assertive' | 'polite'`.\n // @ts-ignore\n 'aria-live': PropTypes.oneOf(['assertive', 'polite']).isRequired,\n 'aria-roledescription': PropTypes.string,\n className: PropTypes.string,\n role: PropTypes.string,\n textElementClassName: PropTypes.string\n};\n\nexport default LiveRegionTwinContainer;\n","import { useEffect } from 'react';\n\nimport useLiveRegionTwinContext from './useContext';\n\n// After calling `markAllAsRendered`, it will cause a re-render.\n// Since `markAllAsRendered` is a converging function, it will eventually stop re-rendering.\n// We call this hook `useXXXEffect` for us to abstract the business logic here.\nexport default function useMarkAllAsRenderedEffect(): void {\n const { markAllAsRendered } = useLiveRegionTwinContext();\n\n // We did not set the `deps` argument as we want to run this function on every render.\n useEffect(markAllAsRendered);\n}\n","import useLiveRegionTwinContext from './useContext';\n\nimport type { StaticElementEntry } from './types';\n\nexport default function useStaticElementEntries(): readonly [readonly StaticElementEntry[]] {\n return useLiveRegionTwinContext().staticElementEntriesState;\n}\n","// TODO: [P0] #4133 Don't copy.\nimport { RefObject, useMemo, useRef } from 'react';\n\nexport default function useValueRef<T>(value: T): RefObject<T> {\n const ref = useRef<T>();\n const readOnlyRef = useMemo(\n () =>\n Object.create(\n {},\n {\n current: {\n get: () => ref.current\n }\n }\n ),\n []\n );\n\n ref.current = value;\n\n return readOnlyRef;\n}\n","export default function tabbableElements(element?: HTMLElement): HTMLElement[] {\n // This is an incomplete list, due to the complexity of testing for every scenario.\n // For full-list, please refer to https://allyjs.io/data-tables/focusable.html\n const candidates: ArrayLike<HTMLElement> =\n element?.querySelectorAll(\n 'a[href], area[href], audio[controls], button:not(:disabled), iframe, input:not(:disabled), keygen, select:not(:disabled), summary, textarea:not(:disabled), video[controls], [contenteditable], [tabindex]'\n ) || [];\n\n return ([] as HTMLElement[]).filter.call(candidates, (element: HTMLElement) => {\n const tabIndexAttribute = element.attributes.getNamedItem('tabindex');\n\n if (tabIndexAttribute && tabIndexAttribute.specified) {\n const value = parseInt(tabIndexAttribute.value, 10);\n\n return value >= 0 || (isNaN(value) && element.nodeName.toLowerCase() === 'input');\n }\n\n return true;\n });\n}\n","import { hooks } from 'botframework-webchat-api';\nimport { useCallback } from 'react';\n\nimport useNavigatorPlatform from './useNavigatorPlatform';\n\nconst { useLocalizer } = hooks;\n\nexport default function useLocalizeAccessKey(type: 'accessible name' | 'aria-keyshortcuts') {\n const [{ apple }] = useNavigatorPlatform();\n const localize = useLocalizer();\n\n return useCallback(\n accessKey => {\n if (!accessKey || typeof accessKey !== 'string' || !accessKey.length) {\n throw new Error('useLocalizeAccessKey: \"accessKey\" must be a non-empty string');\n }\n\n if (type === 'accessible name') {\n // This will localize as \"Alt + Shift + A\".\n return localize(apple ? 'ACCESS_KEY_FOR_MAC_ALT' : 'ACCESS_KEY_ALT', accessKey[0]);\n }\n\n // \"aria-keyshortcuts\" do not need to be localized, it should be \"alt+shift+a\".\n // On Mac, \"AltGraph\" is preferred over \"Option\" key.\n // https://w3c.github.io/aria/#aria-keyshortcuts\n return (apple ? 'Control+AltGraph+' : 'Alt+Shift+') + accessKey[0];\n },\n [apple, localize, type]\n );\n}\n","import { useMemo } from 'react';\n\nconst ANDROID_PATTERN = /^(android|linux armv7l)/giu;\nconst APPLE_PATTERN = /^(mac|ipad|iphone|ipod)/giu;\nconst LINUX_PATTERN = /^linux/giu;\nconst WINDOWS_PATTERN = /^win/giu;\n\nexport default function useNavigatorPlatform() {\n const {\n navigator: { platform }\n } = window;\n\n return useMemo(() => {\n // This list is very limited. Please use with care. Please refer to this link for details.\n // https://stackoverflow.com/questions/19877924/what-is-the-list-of-possible-values-for-navigator-platform-as-of-today\n\n const android = ANDROID_PATTERN.test(platform);\n const apple = APPLE_PATTERN.test(platform);\n const windows = WINDOWS_PATTERN.test(platform);\n\n const linux = !android && LINUX_PATTERN.test(platform);\n\n return [\n {\n android,\n apple,\n linux,\n windows\n }\n ];\n }, [platform]);\n}\n","import useWebChatUIContext from './useWebChatUIContext';\n\nexport default function useSuggestedActionsAccessKey() {\n const { suggestedActionsAccessKey } = useWebChatUIContext();\n\n return [suggestedActionsAccessKey];\n}\n","import { hooks } from 'botframework-webchat-api';\nimport { useEffect, useRef } from 'react';\n\nconst { useActiveTyping } = hooks;\n\nfunction arrayEquals<T>(x: readonly T[], y: readonly T[]): boolean {\n return x.length === y.length && x.every((value, index) => y[+index] === value);\n}\n\n/** Gets names of users who are actively typing, sorted by the time they started typing. */\nexport default function useTypistNames(): readonly [readonly string[]] {\n const [activeTyping] = useActiveTyping();\n const prevTypistNamesStateRef = useRef<readonly [readonly string[]]>(\n Object.freeze([Object.freeze([] as string[])]) as [readonly string[]]\n );\n\n const activeTypingFromOthersValues = Object.values(activeTyping).filter(({ role }) => role !== 'user');\n\n // Sort the list by the first typist.\n const sortedActiveTypingFromOthersValues = activeTypingFromOthersValues.sort(({ at: x }, { at: y }) => x - y);\n\n const typistNamesState: readonly [readonly string[]] = Object.freeze([\n Object.freeze(sortedActiveTypingFromOthersValues.map(({ name }) => name))\n ]) as readonly [readonly string[]];\n\n const { current: prevTypistNamesState } = prevTypistNamesStateRef;\n\n const nextTypistNamesState = arrayEquals(typistNamesState[0], prevTypistNamesState[0])\n ? prevTypistNamesState\n : typistNamesState;\n\n useEffect(() => {\n prevTypistNamesStateRef.current = nextTypistNamesState;\n }, [prevTypistNamesStateRef, nextTypistNamesState]);\n\n return nextTypistNamesState;\n}\n","import { hooks } from 'botframework-webchat-api';\nimport PropTypes from 'prop-types';\nimport random from 'math-random';\nimport React, { useCallback, useMemo } from 'react';\n\nimport scrollIntoViewWithBlockNearest from '../../Utils/scrollIntoViewWithBlockNearest';\nimport TranscriptFocusContext from './private/Context';\nimport useActivityTreeWithRenderer from '../ActivityTree/useActivityTreeWithRenderer';\nimport usePrevious from '../../hooks/internal/usePrevious';\nimport useStateRef from '../../hooks/internal/useStateRef';\nimport useValueRef from '../../hooks/internal/useValueRef';\n\nimport type { FC, MutableRefObject, PropsWithChildren } from 'react';\nimport type { TranscriptFocusContextType } from './private/Context';\n\nconst { useGetKeyByActivity } = hooks;\n\ntype TranscriptFocusComposerProps = PropsWithChildren<{\n containerRef: MutableRefObject<HTMLElement>;\n}>;\n\nfunction last<T>(array: ArrayLike<T>) {\n return array[array.length - 1];\n}\n\nfunction uniqueId(count = Infinity) {\n return (\n random()\n // eslint-disable-next-line no-magic-numbers\n .toString(36)\n // eslint-disable-next-line no-magic-numbers\n .substring(2, 2 + count)\n );\n}\n\nconst TranscriptFocusComposer: FC<TranscriptFocusComposerProps> = ({ children, containerRef }) => {\n const [flattenedActivityTree] = useActivityTreeWithRenderer({ flat: true });\n const [_, setRawFocusedActivityKey, rawFocusedActivityKeyRef] = useStateRef<string | undefined>();\n const getKeyByActivity = useGetKeyByActivity();\n\n // As we need to use IDREF for `aria-activedescendant`,\n // this prefix will differentiate multiple instances of transcript on the same page.\n // eslint-disable-next-line no-magic-numbers\n const prefix = useMemo<string>(() => uniqueId(3), []);\n\n const getDescendantIdByActivityKey: (activityKey?: string) => string | undefined = useCallback(\n (activityKey?: string) => activityKey && `webchat__transcript-focus-${prefix}__activity-${activityKey}`,\n [prefix]\n );\n\n const renderingActivityKeys = useMemo<readonly string[]>(\n () => Object.freeze(flattenedActivityTree.map(({ activity }) => getKeyByActivity(activity))),\n [flattenedActivityTree, getKeyByActivity]\n );\n\n const renderingActivityKeysRef = useValueRef<readonly string[]>(renderingActivityKeys);\n\n // While the transcript or any descendants are not focused, if the transcript is updated, reset the user-selected active descendant.\n // This will assume the last activity, if any, will be the active descendant.\n const prevRenderingActivityKeys = usePrevious(renderingActivityKeys);\n\n if (renderingActivityKeys !== prevRenderingActivityKeys && !containerRef.current?.contains(document.activeElement)) {\n rawFocusedActivityKeyRef.current = undefined;\n }\n\n const { current: rawFocusedActivityKey } = rawFocusedActivityKeyRef;\n\n const focusedActivityKey = useMemo<string>(\n () => (renderingActivityKeys.includes(rawFocusedActivityKey) ? rawFocusedActivityKey : last(renderingActivityKeys)),\n [renderingActivityKeys, rawFocusedActivityKey]\n );\n\n const focusedActivityKeyRef = useValueRef(focusedActivityKey);\n\n const activeDescendantId = useMemo<string>(\n () => getDescendantIdByActivityKey(focusedActivityKey),\n [getDescendantIdByActivityKey, focusedActivityKey]\n );\n\n const focusByActivityKey = useCallback<\n (activityKey: boolean | string | undefined, withFocus: boolean | undefined) => void\n >(\n (activityKey: boolean | string | undefined, withFocus: boolean | undefined = true) => {\n if (activityKey === false) {\n // `false` means set it to nothing.\n setRawFocusedActivityKey(undefined);\n } else if (activityKey === true) {\n // `true` means set to something if it is not set.\n setRawFocusedActivityKey(key => key || focusedActivityKeyRef.current);\n } else if (activityKey) {\n setRawFocusedActivityKey(activityKey);\n }\n\n if (withFocus) {\n containerRef.current?.focus();\n\n const activeDescendantId = getDescendantIdByActivityKey(\n activityKey === false\n ? // If \"activityKey\" is false, it means \"focus nothing and reset it to the last activity\".\n last(renderingActivityKeysRef.current)\n : activityKey && activityKey !== true\n ? // If \"activity\" is not \"undefined\" and not \"true\", it means \"focus on this activity\".\n activityKey\n : // If \"activityKey\" is \"undefined\", it means \"don't modify the focus\".\n // If \"activityKey\" is \"true\", it means \"try to focus on anything\".\n rawFocusedActivityKeyRef.current\n );\n\n const activeDescendantElement = activeDescendantId && document.getElementById(activeDescendantId);\n\n // Don't scroll active descendant into view if the focus is already inside it.\n // Otherwise, given the focus is on the send box, clicking on any <input> inside the Adaptive Cards may cause the view to move.\n // This UX is not desirable because click should not cause scroll.\n if (activeDescendantElement && !activeDescendantElement.contains(document.activeElement)) {\n scrollIntoViewWithBlockNearest(activeDescendantElement);\n }\n }\n },\n [\n getDescendantIdByActivityKey,\n containerRef,\n focusedActivityKeyRef,\n renderingActivityKeysRef,\n rawFocusedActivityKeyRef,\n setRawFocusedActivityKey\n ]\n );\n\n const focusRelativeActivity = useCallback(\n (delta: number) => {\n const { current: orderedActivityKeys } = renderingActivityKeysRef;\n\n if (isNaN(delta) || !orderedActivityKeys.length) {\n return focusByActivityKey(false, true);\n }\n\n const { current: focusedActivityKey } = focusedActivityKeyRef;\n\n const index = orderedActivityKeys.indexOf(focusedActivityKey);\n const nextIndex = ~index\n ? Math.max(0, Math.min(orderedActivityKeys.length - 1, index + delta))\n : orderedActivityKeys.length - 1;\n\n focusByActivityKey(orderedActivityKeys[+nextIndex], true);\n },\n [focusedActivityKeyRef, renderingActivityKeysRef, focusByActivityKey]\n );\n\n const contextValue = useMemo<TranscriptFocusContextType>(\n () => ({\n activeDescendantIdState: Object.freeze([activeDescendantId]) as readonly [string],\n getDescendantIdByActivityKey,\n focusByActivityKey,\n focusedActivityKeyState: Object.freeze([focusedActivityKey]) as readonly [string],\n focusedExplicitlyState: Object.freeze([!!rawFocusedActivityKey]) as readonly [boolean],\n focusRelativeActivity\n }),\n [\n activeDescendantId,\n getDescendantIdByActivityKey,\n focusByActivityKey,\n focusedActivityKey,\n focusRelativeActivity,\n rawFocusedActivityKey\n ]\n );\n\n return <TranscriptFocusContext.Provider value={contextValue}>{children}</TranscriptFocusContext.Provider>;\n};\n\nTranscriptFocusComposer.propTypes = {\n // PropTypes is not fully compatible with TypeScript.\n // @ts-ignore\n containerRef: PropTypes.shape({\n current: PropTypes.instanceOf(HTMLElement)\n }).isRequired\n};\n\nexport default TranscriptFocusComposer;\n","import computeScrollIntoView from 'compute-scroll-into-view';\n\n/**\n * Calls `targetElement.scrollIntoView({ block: 'nearest' })`.\n *\n * If browser do not support options for `scrollIntoView`, fallback to polyfill.\n */\nexport default function scrollIntoViewWithBlockNearest(targetElement: HTMLElement): void {\n // Checks if `scrollIntoView` support options or not.\n // - https://github.com/Modernizr/Modernizr/issues/1568#issuecomment-419457972\n // - https://stackoverflow.com/questions/46919627/is-it-possible-to-test-for-scrollintoview-browser-compatibility\n if ('scrollBehavior' in document.documentElement.style) {\n return targetElement.scrollIntoView({ block: 'nearest' });\n }\n\n // We should only move transcript scrollable, and not other scrollable, such as document.body which is from the hosting page.\n const [action] = computeScrollIntoView(targetElement, { block: 'nearest' });\n\n action.el.scrollTop = action.top;\n}\n","import { createContext } from 'react';\n\ntype TranscriptFocusContextType = {\n activeDescendantIdState: readonly [string];\n focusByActivityKey: (activityKey: boolean | string | undefined, withFocus: boolean | undefined) => void;\n focusedActivityKeyState: readonly [string];\n focusedExplicitlyState: readonly [boolean];\n focusRelativeActivity: (delta: number) => void;\n getDescendantIdByActivityKey: (activityKey?: string) => string | undefined;\n};\n\nconst TranscriptFocusContext = createContext<TranscriptFocusContextType>(undefined);\n\nexport default TranscriptFocusContext;\n\nexport type { TranscriptFocusContextType };\n","import { useContext } from 'react';\n\nimport ActivityTreeContext from './Context';\n\nimport type { ActivityTreeContextType } from './Context';\n\nexport default function useActivityTreeContext(thrownOnUndefined = true): ActivityTreeContextType {\n const contextValue = useContext(ActivityTreeContext);\n\n if (thrownOnUndefined && !contextValue) {\n throw new Error('botframework-webchat internal: This hook can only be used under <ActivityTreeComposer>.');\n }\n\n return contextValue;\n}\n","import { createContext } from 'react';\n\nimport type { ActivityWithRenderer, ReadonlyActivityTree } from './types';\n\ntype ActivityTreeContextType = {\n activityTreeWithRendererState: readonly [ReadonlyActivityTree];\n flattenedActivityTreeWithRendererState: readonly [readonly ActivityWithRenderer[]];\n};\n\nexport default createContext<ActivityTreeContextType>(undefined);\n\nexport type { ActivityTreeContextType };\n","import useActivityTreeContext from './private/useContext';\n\nimport type { ActivityWithRenderer, ReadonlyActivityTree } from './private/types';\n\nexport default function useActivityTreeWithRenderer(options?: { flat?: false }): readonly [ReadonlyActivityTree];\nexport default function useActivityTreeWithRenderer(options: {\n flat: true;\n}): readonly [readonly ActivityWithRenderer[]];\n\nexport default function useActivityTreeWithRenderer(options: { flat?: boolean } = {}) {\n const context = useActivityTreeContext();\n\n return options?.flat === true\n ? context.flattenedActivityTreeWithRendererState\n : context.activityTreeWithRendererState;\n}\n","import { useCallback, useRef, useState } from 'react';\n\nimport type { Dispatch, MutableRefObject, SetStateAction } from 'react';\n\nexport default function useStateRef<T>(\n initialValue?: T\n): readonly [T, Dispatch<SetStateAction<T>>, MutableRefObject<T>] {\n const [_, forceRender] = useState<{}>();\n const valueRef: MutableRefObject<T> = useRef<T>(initialValue);\n\n const setter: Dispatch<SetStateAction<T>> = useCallback(\n (value: SetStateAction<T>) => {\n const { current } = valueRef;\n\n value = value instanceof Function ? value(current) : value;\n\n if (current !== value) {\n valueRef.current = value;\n\n forceRender({});\n }\n },\n [forceRender, valueRef]\n );\n\n return Object.freeze([valueRef.current, setter, valueRef]) as readonly [\n T,\n Dispatch<SetStateAction<T>>,\n MutableRefObject<T>\n ];\n}\n","import { useContext } from 'react';\n\nimport TranscriptFocusContext from './Context';\n\nexport default function useTranscriptFocusContext(throwOnUndefined = true) {\n const contextValue = useContext(TranscriptFocusContext);\n\n if (throwOnUndefined && !contextValue) {\n throw new Error('botframework-webchat internal: This hook can only be used under <TranscriptFocusComposer>.');\n }\n\n return contextValue;\n}\n","import useTranscriptFocusContext from './private/useContext';\n\nexport default function useActiveDescendantId(): readonly [string] {\n return useTranscriptFocusContext().activeDescendantIdState;\n}\n","import useWebChatUIContext from './useWebChatUIContext';\n\nexport default function useDispatchScrollPosition() {\n return useWebChatUIContext().dispatchScrollPosition;\n}\n","import useWebChatUIContext from './useWebChatUIContext';\n\nexport default function useDispatchTranscriptFocusByActivityKey(): (activityKey: string | undefined) => void {\n return useWebChatUIContext().dispatchTranscriptFocusByActivityKey;\n}\n","import useTranscriptFocusContext from './private/useContext';\n\n/**\n * Put the focus on an activity based on its activity key.\n *\n * @param {boolean | string | undefined} activityKey - The activity key to focus on, `false` to reset focus to most recent activity, `true` to focus on anything, `undefined` for not changing the focus.\n * @param {boolean} withFocus - `true` if the user agent focus should be sent to the transcript, otherwise, `false`.\n */\nexport default function useFocusByActivityKey(): (\n activityKey: boolean | string | undefined,\n withFocus?: boolean\n) => void {\n return useTranscriptFocusContext().focusByActivityKey;\n}\n","import useTranscriptFocusContext from './private/useContext';\n\nexport default function useFocusedActivityKey(): readonly [string] {\n return useTranscriptFocusContext().focusedActivityKeyState;\n}\n","import useTranscriptFocusContext from './private/useContext';\n\nexport default function useFocusedExplicitly(): readonly [boolean] {\n return useTranscriptFocusContext().focusedExplicitlyState;\n}\n","import useTranscriptFocusContext from './private/useContext';\n\nexport default function useFocusByActivityKey(): (delta: number) => void {\n return useTranscriptFocusContext().focusRelativeActivity;\n}\n","import { hooks } from 'botframework-webchat-api';\nimport { MutableRefObject, RefObject, useCallback, useEffect, useMemo, useRef } from 'react';\n\nimport supportPseudoClass from '../../Utils/supportPseudoClass';\nimport useNonce from './useNonce';\nimport useValueRef from './useValueRef';\n\nconst { usePonyfill } = hooks;\n\nconst INPUT_TYPES_ALLOW_LIST = [\n 'date',\n 'datetime-local',\n 'datetime',\n 'email',\n 'month',\n 'number',\n 'password',\n 'search',\n 'tel',\n 'text',\n 'time',\n 'url',\n 'week'\n];\n\n/**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} el\n * @return {boolean}\n */\nfunction focusTriggersKeyboardModality(el: HTMLInputElement | HTMLTextAreaElement): boolean {\n const { isContentEditable, readOnly, tagName, type } = el;\n\n return (\n (tagName === 'INPUT' && INPUT_TYPES_ALLOW_LIST.includes(type) && !readOnly) ||\n (tagName === 'TEXTAREA' && !readOnly) ||\n isContentEditable\n );\n}\n\nfunction createEventSubscription(\n target: Element | Node,\n types: string[],\n handler: (event: Event) => void\n): {\n pause: () => void;\n resume: () => void;\n} {\n let subscribed: true;\n\n const subscribe = () => {\n if (!subscribed) {\n types.forEach(type => target.addEventListener(type, handler));\n subscribed = true;\n }\n };\n\n const unsubscribe = () => {\n if (subscribed) {\n types.forEach(type => target.removeEventListener(type, handler));\n subscribed = undefined;\n }\n };\n\n return {\n pause: unsubscribe,\n resume: subscribe\n };\n}\n\n// TODO: Add tests\n// 1. Focus via keyboard vs. mouse\n// 2. Focus via keyboard, switch app, switch back (expect to get another focusVisible after switch back)\n// 3. Focus via mouse, switch app, switch back (do NOT expect to get another focusVisible after switch back)\nfunction useObserveFocusVisibleForLegacyBrowsers(\n targetRef: RefObject<HTMLElement>,\n onFocusVisibleRef: MutableRefObject<() => void>\n) {\n const [{ Date }] = usePonyfill();\n // This polyfill algorithm is adopted from https://github.com/WICG/focus-visible.\n const blurSinceRef = useRef(0);\n const hadKeyboardEventRef = useRef(true);\n const hasFocusVisibleRef = useRef(false);\n\n const eventSubscription = useMemo(\n () =>\n createEventSubscription(\n document,\n [\n 'mousemove',\n 'mousedown',\n 'mouseup',\n 'pointermove',\n 'pointerdown',\n 'pointerup',\n 'touchmove',\n 'touchstart',\n 'touchend'\n ],\n event => {\n if ((event.target as HTMLElement).nodeName?.toLowerCase() !== 'html') {\n hadKeyboardEventRef.current = false;\n eventSubscription.pause();\n }\n }\n ),\n [hadKeyboardEventRef]\n );\n\n const setHasFocusVisible = useCallback(\n nextHasFocusVisible => {\n if (hasFocusVisibleRef.current !== nextHasFocusVisible) {\n hasFocusVisibleRef.current = nextHasFocusVisible;\n nextHasFocusVisible && onFocusVisibleRef?.current();\n }\n },\n [hasFocusVisibleRef, onFocusVisibleRef]\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (event.altKey || event.ctrlKey || event.metaKey) {\n return;\n }\n\n if (event.target === targetRef.current) {\n setHasFocusVisible(true);\n }\n\n hadKeyboardEventRef.current = true;\n },\n [hadKeyboardEventRef, setHasFocusVisible, targetRef]\n );\n\n const handlePointerDown = useCallback(() => {\n hadKeyboardEventRef.current = false;\n }, [hadKeyboardEventRef]);\n\n const handleFocus = useCallback(\n ({ target }: Event) => {\n target === targetRef.current &&\n (hadKeyboardEventRef.current || focusTriggersKeyboardModality(target as HTMLInputElement)) &&\n setHasFocusVisible(true);\n },\n [hadKeyboardEventRef, setHasFocusVisible, targetRef]\n );\n\n const handleBlur = useCallback(\n (event: Event) => {\n if (event.target === targetRef.current && hasFocusVisibleRef.current) {\n blurSinceRef.current = Date.now();\n\n setHasFocusVisible(false);\n }\n },\n [blurSinceRef, Date, hasFocusVisibleRef, setHasFocusVisible, targetRef]\n );\n\n const handleVisibilityChange = useCallback(() => {\n if (document.visibilityState === 'hidden') {\n // The element is blurred due to \"visibilityState\" set to \"hidden\".\n // 100ms is referenced from the WICG polyfill.\n // eslint-disable-next-line no-magic-numbers\n if (Date.now() - blurSinceRef.current < 100) {\n hadKeyboardEventRef.current = true;\n }\n\n eventSubscription.resume();\n }\n }, [blurSinceRef, Date, eventSubscription, hadKeyboardEventRef]);\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyDown, true);\n document.addEventListener('mousedown', handlePointerDown, true);\n document.addEventListener('pointerdown', handlePointerDown, true);\n document.addEventListener('touchstart', handlePointerDown, true);\n document.addEventListener('visibilitychange', handleVisibilityChange, true);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n document.removeEventListener('mousedown', handlePointerDown);\n document.removeEventListener('pointerdown', handlePointerDown);\n document.removeEventListener('touchstart', handlePointerDown);\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n };\n }, [handleKeyDown, handlePointerDown, handleVisibilityChange]);\n\n useEffect(() => {\n const { current: target } = targetRef;\n\n target.addEventListener('blur', handleBlur, true);\n target.addEventListener('focus', handleFocus, true);\n\n return () => {\n target.removeEventListener('blur', handleBlur);\n target.removeEventListener('focus', handleFocus);\n };\n\n // We specifically add \"targetRef.current\" here.\n // If the target element changed, we should reattach our event listeners.\n }, [handleBlur, handleFocus, targetRef]);\n\n useEffect(() => {\n eventSubscription.resume();\n\n return () => eventSubscription.pause();\n }, [eventSubscription]);\n}\n\nfunction useObserveFocusVisibleForModernBrowsers(\n targetRef: RefObject<HTMLElement>,\n onFocusVisibleRef: MutableRefObject<() => void>\n) {\n const handleFocus = useCallback(() => {\n const { current } = targetRef;\n\n if (\n // \"msMatchesSelector\" is vendor-prefixed version of \"matches\".\n // eslint-disable-next-line dot-notation\n (current.matches || (current['msMatchesSelector'] as (selector: string) => boolean)).call(\n current,\n ':focus-visible'\n )\n ) {\n onFocusVisibleRef?.current();\n }\n }, [onFocusVisibleRef, targetRef]);\n\n useEffect(() => {\n const { current: target } = targetRef;\n\n target.addEventListener('focus', handleFocus);\n\n return () => target.removeEventListener('focus', handleFocus);\n\n // We specifically add \"targetRef.current\" here.\n // If the target element changed, we should reattach our event listeners.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [handleFocus, targetRef, targetRef.current]);\n}\n\nexport default function useObserveFocusVisible(targetRef: RefObject<HTMLElement>, onFocusVisible: () => void) {\n const [nonce] = useNonce();\n const onFocusVisibleRef = useValueRef(onFocusVisible);\n\n // The nonce is use for browser capabilities. Just in case the \"nonce\" had changed unexpectedly, the capabilities of the browser should never change.\n // Thus, we are using an initial version of \"nonce\". In case web devs changed the \"nonce\" to an invalid value, we won't break rules of hooks (as stated below).\n const nonceRef = useRef(nonce);\n\n // \":focus-visible\" selector is supported from Chrome/Edge 86+ and not supported in IE11 or Safari.\n // Doing a capability check on pseudo classes requires injecting a stylesheet, thus nonce is needed.\n const supportFocusVisible = useMemo(() => supportPseudoClass(':focus-visible', nonceRef.current), [nonceRef]);\n\n // Since \"supportPseudoClass\" is a browser capability, the result should be constant during the page lifetime.\n // Thus, running hooks conditionally is okay here.\n if (supportFocusVisible) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useObserveFocusVisibleForModernBrowsers(targetRef, onFocusVisibleRef);\n } else {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useObserveFocusVisibleForLegacyBrowsers(targetRef, onFocusVisibleRef);\n }\n}\n","// This function is adopted from https://stackoverflow.com/questions/8531940/how-to-detect-if-browser-support-specified-css-pseudo-class\nexport default function supportPseudoClass(pseudoClass: string, nonce?: string): boolean {\n const styleElement = document.createElement('style');\n\n nonce && styleElement.setAttribute('nonce', nonce);\n document.head.appendChild(styleElement);\n\n try {\n styleElement.sheet.insertRule('html' + pseudoClass + '{}', 0);\n\n return true;\n } catch (error) {\n return false;\n } finally {\n document.head.removeChild(styleElement);\n }\n}\n","import useWebChatUIContext from './useWebChatUIContext';\n\nexport default function useNonce() {\n const { nonce } = useWebChatUIContext();\n\n return [nonce];\n}\n","import { useEffect } from 'react';\n\nimport removeInline from '../../Utils/removeInline';\nimport useWebChatUIContext from './useWebChatUIContext';\n\n// This hook is for registering and unregister a callback, used by <BasicTranscript>.\n// When called, the callback should focus on the transcript.\n\nexport default function useRegisterFocusTranscript(callback) {\n const { focusTranscriptCallbacksRef } = useWebChatUIContext();\n\n useEffect(() => {\n if (callback) {\n const { current: focusTranscriptCallbacks } = focusTranscriptCallbacksRef;\n\n focusTranscriptCallbacks.push(callback);\n\n return () => removeInline(focusTranscriptCallbacks, callback);\n }\n }, [callback, focusTranscriptCallbacksRef]);\n}\n","export default function removeInline(array, ...items) {\n items.forEach(item => {\n let index;\n\n while (~(index = array.indexOf(item))) {\n array.splice(index, 1);\n }\n });\n}\n","import { useEffect } from 'react';\n\nimport removeInline from '../../Utils/removeInline';\nimport useWebChatUIContext from './useWebChatUIContext';\n\n// This hook is for registering and unregister a callback, used by <BasicTranscript>.\n// When called, the callback should scroll the transcript to a specific position, for example, to an activity of specified ID.\n\nexport default function useRegisterScrollTo(callback) {\n const { scrollToCallbacksRef } = useWebChatUIContext();\n\n useEffect(() => {\n if (callback) {\n const { current: scrollToCallbacks } = scrollToCallbacksRef;\n\n scrollToCallbacks.push(callback);\n\n return () => removeInline(scrollToCallbacks, callback);\n }\n }, [callback, scrollToCallbacksRef]);\n}\n","import { useEffect } from 'react';\n\nimport removeInline from '../../Utils/removeInline';\nimport useWebChatUIContext from './useWebChatUIContext';\n\n// This hook is for registering and unregister a callback, used by <BasicTranscript>.\n// When called, the callback should scroll the transcript to the end.\n\nexport default function useRegisterScrollTo(callback) {\n const { scrollToEndCallbacksRef } = useWebChatUIContext();\n\n useEffect(() => {\n const { current: scrollToEndCallbacks } = scrollToEndCallbacksRef;\n\n scrollToEndCallbacks.push(callback);\n\n return () => removeInline(scrollToEndCallbacks, callback);\n }, [callback, scrollToEndCallbacksRef]);\n}\n","import React, { memo, useCallback, useMemo } from 'react';\nimport { hooks, type ActivityComponentFactory } from 'botframework-webchat-api';\nimport type { ActivityElementMap } from './Transcript/types';\nimport type { MutableRefObject, ReactNode } from 'react';\nimport type { WebChatActivity } from 'botframework-webchat-core';\nimport ActivityRow from './Transcript/ActivityRow';\n\nconst { useCreateActivityStatusRenderer } = hooks;\n\nfunction TranscriptActivity({\n activityElementMapRef,\n activityKey,\n activity,\n hideTimestamp,\n renderActivity,\n renderAvatar,\n showCallout\n}: Readonly<{\n activityElementMapRef: MutableRefObject<ActivityElementMap>;\n activityKey: string;\n activity: WebChatActivity;\n hideTimestamp: boolean;\n renderActivity: Exclude<ReturnType<ActivityComponentFactory>, false>;\n renderAvatar: false | (() => Exclude<ReactNode, boolean | null | undefined>);\n showCallout: boolean;\n}>) {\n const createActivityStatusRenderer = useCreateActivityStatusRenderer();\n const activityCallbackRef = useCallback(\n (activityElement: HTMLElement) => {\n activityElement\n ? activityElementMapRef.current.set(activityKey, activityElement)\n : activityElementMapRef.current.delete(activityKey);\n },\n [activityElementMapRef, activityKey]\n );\n\n const renderActivityStatus = useMemo(\n () =>\n createActivityStatusRenderer({\n activity,\n nextVisibleActivity: undefined\n }),\n [activity, createActivityStatusRenderer]\n );\n\n const children = useMemo(\n () =>\n renderActivity({\n hideTimestamp,\n renderActivityStatus,\n renderAvatar,\n showCallout\n }),\n [hideTimestamp, renderActivity, renderActivityStatus, renderAvatar, showCallout]\n );\n\n return (\n <ActivityRow activity={activity} ref={activityCallbackRef}>\n {children}\n </ActivityRow>\n );\n}\n\nexport default memo(TranscriptActivity);\n","import { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, { forwardRef, memo, useCallback, useMemo, useRef } from 'react';\n\nimport { android } from '../Utils/detectBrowser';\nimport FocusTrap from './FocusTrap';\nimport ScreenReaderText from '../ScreenReaderText';\nimport SpeakActivity from '../Activity/Speak';\nimport useActiveDescendantId from '../providers/TranscriptFocus/useActiveDescendantId';\nimport useActivityAccessibleName from './useActivityAccessibleName';\nimport useFocusByActivityKey from '../providers/TranscriptFocus/useFocusByActivityKey';\nimport useGetDescendantIdByActivityKey from '../providers/TranscriptFocus/useGetDescendantIdByActivityKey';\n\nimport type { MouseEventHandler, PropsWithChildren } from 'react';\nimport type { WebChatActivity } from 'botframework-webchat-core';\nimport { useRefFrom } from 'use-ref-from';\n\nconst { useActivityKeysByRead, useGetHasAcknowledgedByActivityKey, useGetKeyByActivity } = hooks;\n\ntype ActivityRowProps = PropsWithChildren<{ activity: WebChatActivity }>;\n\nconst ActivityRow = forwardRef<HTMLLIElement, ActivityRowProps>(({ activity, children }, ref) => {\n const [activeDescendantId] = useActiveDescendantId();\n const [readActivityKeys] = useActivityKeysByRead();\n const bodyRef = useRef<HTMLDivElement>();\n const focusByActivityKey = useFocusByActivityKey();\n const getKeyByActivity = useGetKeyByActivity();\n // TODO: [P2] #2858 We should use core/definitions/speakingActivity for this predicate instead\n const shouldSpeak = activity.channelData?.speak;\n\n const [accessibleName] = useActivityAccessibleName(activity, bodyRef);\n const activityKey = getKeyByActivity(activity);\n\n const acknowledged = useGetHasAcknowledgedByActivityKey()(activityKey);\n const activityKeyRef = useRefFrom<string>(activityKey);\n const descendantId = useGetDescendantIdByActivityKey()(activityKey);\n const descendantLabelId = `webchat__basic-transcript__active-descendant-label--${activityKey}`;\n\n const isActiveDescendant = descendantId === activeDescendantId;\n const read = readActivityKeys.includes(activityKey);\n\n const focusSelf = useCallback<(withFocus?: boolean) => void>(\n (withFocus?: boolean) => focusByActivityKey(activityKeyRef.current, withFocus),\n [activityKeyRef, focusByActivityKey]\n );\n\n // When a child of the activity receives focus, notify the transcript to set the `aria-activedescendant` to this activity.\n const handleDescendantFocus: () => void = useCallback(() => focusSelf(false), [focusSelf]);\n\n // When receive Escape key from descendant, focus back to the activity.\n const handleLeaveFocusTrap = useCallback(() => focusSelf(), [focusSelf]);\n\n // When the user press UP/DOWN arrow keys, we put a visual focus indicator around the focused activity.\n // We should do the same for mouse, when the user click on the activity, we should also put a visual focus indicator around the activity.\n // We are doing it in event capture phase to prevent descendants from stopping event propagation to us.\n const handleMouseDownCapture: MouseEventHandler = useCallback(() => focusSelf(false), [focusSelf]);\n\n const focusTrapChildren = useMemo(\n () => (\n <div className=\"webchat__basic-transcript__activity-body\" ref={bodyRef}>\n {children}\n </div>\n ),\n [bodyRef, children]\n );\n\n return (\n // TODO: [P2] Add `aria-roledescription=\"message\"` for better AX, need localization strings.\n <article\n className={classNames('webchat__basic-transcript__activity', {\n 'webchat__basic-transcript__activity--acknowledged': acknowledged,\n 'webchat__basic-transcript__activity--read': read\n })}\n // When NVDA is in browse mode, using up/down arrow key to \"browse\" will dispatch \"click\" and \"mousedown\" events for <article> element (inside <LiveRegionActivity>).\n onMouseDownCapture={handleMouseDownCapture}\n ref={ref}\n >\n {/* TODO: [P1] File a crbug for TalkBack. It should not able to read the content twice when scanning. */}\n\n {/* The following <div> is designed for active descendant only.\n We want to prevent screen reader from scanning the content that is authored only for active descendant.\n The specific content should only read when user press UP/DOWN arrow keys to change `aria-activedescendant`.\n However, Android TalkBack 12.1 is buggy when the there is an element with ID of one of the `aria-activedescendant` potential candidates,\n TalkBack will narrate the message content twice (i.e. content of `bodyRef`), regardless whether the ID is currently set as `aria-activedescendant` or not.\n As Android does not support active descendant, we are hiding the whole DOM element altogether. */}\n\n {!android && (\n <div\n aria-labelledby={descendantLabelId}\n className=\"webchat__basic-transcript__activity-active-descendant\"\n // \"id\" is required for \"aria-labelledby\"\n // eslint-disable-next-line react/forbid-dom-props\n id={descendantId}\n role=\"article\"\n >\n <ScreenReaderText aria-hidden={true} id={descendantLabelId} text={accessibleName} />\n </div>\n )}\n <FocusTrap onFocus={handleDescendantFocus} onLeave={handleLeaveFocusTrap}>\n {focusTrapChildren}\n </FocusTrap>\n {shouldSpeak && <SpeakActivity activity={activity} />}\n <div\n className={classNames('webchat__basic-transcript__activity-indicator', {\n 'webchat__basic-transcript__activity-indicator--focus': isActiveDescendant\n })}\n />\n </article>\n );\n});\n\nActivityRow.defaultProps = {\n children: undefined\n};\n\nActivityRow.displayName = 'ActivityRow';\n\nActivityRow.propTypes = {\n // PropTypes cannot fully capture TypeScript type.\n // @ts-ignore\n activity: PropTypes.shape({\n channelData: PropTypes.shape({\n speak: PropTypes.bool,\n 'webchat:fallback-text': PropTypes.string\n })\n }).isRequired,\n children: PropTypes.any\n};\n\nexport default memo(ActivityRow);\n","import PropTypes from 'prop-types';\nimport React, { Fragment, memo, useCallback, useRef } from 'react';\n\nimport type { FC, KeyboardEventHandler, PropsWithChildren } from 'react';\n\nimport FocusRedirector from '../Utils/FocusRedirector';\nimport tabbableElements from '../Utils/tabbableElements';\nimport { useRefFrom } from 'use-ref-from';\n\ntype FocusTrapProps = PropsWithChildren<{\n onFocus: () => void;\n onLeave: () => void;\n}>;\n\nconst FocusTrap: FC<FocusTrapProps> = ({ children, onFocus, onLeave }) => {\n const bodyRef = useRef<HTMLDivElement>();\n const onLeaveRef = useRefFrom<() => void>(onLeave);\n\n const getTabbableElementsInBody = useCallback(\n () => tabbableElements(bodyRef.current).filter(element => element.getAttribute('aria-disabled') !== 'true'),\n [bodyRef]\n );\n\n const handleBodyKeyDown: KeyboardEventHandler = useCallback(\n event => {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n\n onLeaveRef.current?.();\n }\n },\n [onLeaveRef]\n );\n\n const handleFirstSentinelFocus: () => void = useCallback(() => {\n const focusables = getTabbableElementsInBody();\n\n const lastTabbableElement = focusables[focusables.length - 1];\n\n lastTabbableElement ? lastTabbableElement.focus() : onLeaveRef.current?.();\n }, [getTabbableElementsInBody, onLeaveRef]);\n\n const handleLastSentinelFocus: () => void = useCallback(() => {\n const [firstTabbableElement] = getTabbableElementsInBody();\n\n firstTabbableElement ? firstTabbableElement.focus() : onLeaveRef.current?.();\n }, [getTabbableElementsInBody, onLeaveRef]);\n\n return (\n <Fragment>\n <FocusRedirector onFocus={handleFirstSentinelFocus} />\n <div onFocus={onFocus} onKeyDown={handleBodyKeyDown} ref={bodyRef}>\n {children}\n </div>\n <FocusRedirector onFocus={handleLastSentinelFocus} />\n </Fragment>\n );\n};\n\nFocusTrap.defaultProps = {\n children: undefined,\n onFocus: undefined\n};\n\nFocusTrap.propTypes = {\n children: PropTypes.any,\n onFocus: PropTypes.func,\n onLeave: PropTypes.func.isRequired\n};\n\nFocusTrap.displayName = 'FocusTrap';\n\nexport default memo(FocusTrap);\n","import { hooks } from 'botframework-webchat-api';\nimport type { WebChatActivity } from 'botframework-webchat-core';\nimport PropTypes from 'prop-types';\nimport React, { FC, memo, useCallback, useMemo } from 'react';\nimport ReactSay, { SayUtterance } from 'react-say';\n\nimport SayAlt from './SayAlt';\n\n// TODO: [P1] Interop between Babel and esbuild.\nconst Say = 'default' in ReactSay ? ReactSay.default : ReactSay;\nconst { useMarkActivityAsSpoken, useStyleOptions, useVoiceSelector } = hooks;\n\n// TODO: [P4] Consider moving this feature into BasicActivity\n// And it has better DOM position for showing visual spoken text\n\ntype SpeakProps = {\n activity: WebChatActivity;\n};\n\nconst Speak: FC<SpeakProps> = ({ activity }) => {\n const [{ showSpokenText }] = useStyleOptions();\n const markActivityAsSpoken = useMarkActivityAsSpoken();\n const selectVoice = useVoiceSelector(activity);\n\n const markAsSpoken = useCallback(() => {\n markActivityAsSpoken(activity);\n }, [activity, markActivityAsSpoken]);\n\n const singleLine: false | string = useMemo(() => {\n if (activity.type !== 'message') {\n return false;\n }\n\n const { attachments = [], speak, text } = activity;\n\n return [\n speak || text,\n ...attachments\n .filter(({ contentType }) => contentType === 'application/vnd.microsoft.card.adaptive')\n .map(attachment => attachment?.content?.speak)\n ]\n .filter(line => line)\n .join('\\r\\n');\n }, [activity]);\n\n const speechSynthesisUtterance: false | SpeechSynthesisUtterance | undefined =\n activity.type === 'message' && activity.channelData?.speechSynthesisUtterance;\n\n return (\n !!activity && (\n <React.Fragment>\n {speechSynthesisUtterance ? (\n <SayUtterance onEnd={markAsSpoken} onError={markAsSpoken} utterance={speechSynthesisUtterance} />\n ) : (\n <Say onEnd={markAsSpoken} onError={markAsSpoken} text={singleLine} voice={selectVoice} />\n )}\n {!!showSpokenText && <SayAlt speak={singleLine} />}\n </React.Fragment>\n )\n );\n};\n\nSpeak.propTypes = {\n // PropTypes cannot fully capture TypeScript types.\n // @ts-ignore\n activity: PropTypes.shape({\n attachments: PropTypes.arrayOf(\n PropTypes.shape({\n speak: PropTypes.string,\n subtitle: PropTypes.string,\n text: PropTypes.string,\n title: PropTypes.string\n })\n ),\n channelData: PropTypes.shape({\n speechSynthesisUtterance: PropTypes.any\n }),\n speak: PropTypes.string,\n text: PropTypes.string,\n type: PropTypes.string.isRequired\n }).isRequired\n};\n\nSpeak.displayName = 'SpeakActivity';\n\nexport default memo(Speak);\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport useStyleToEmotionObject from '../hooks/internal/useStyleToEmotionObject';\n\n// TODO: [P3] Although this is for development purpose, prettify it\nconst ROOT_STYLE = {\n color: 'Red',\n margin: 0\n};\n\nconst SayAlt = ({ speak }) => {\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n\n return !!speak && <pre className={rootClassName}>{speak}</pre>;\n};\n\nSayAlt.defaultProps = {\n speak: ''\n};\n\nSayAlt.propTypes = {\n speak: PropTypes.string\n};\n\nexport default SayAlt;\n","import { hooks } from 'botframework-webchat-api';\nimport { useEffect, useMemo, useState } from 'react';\nimport type { RefObject } from 'react';\nimport type { WebChatActivity } from 'botframework-webchat-core';\n\nimport { SEND_FAILED } from '../types/internal/SendStatus';\nimport activityAltText from '../Utils/activityAltText';\nimport tabbableElements from '../Utils/tabbableElements';\nimport useRenderMarkdownAsHTML from '../hooks/useRenderMarkdownAsHTML';\nimport useValueRef from '../hooks/internal/useValueRef';\n\nenum InteractiveType {\n LINK,\n WIDGET\n}\n\nconst { useAvatarForBot, useGetKeyByActivity, useLocalizer, useSendStatusByActivityKey } = hooks;\n\nconst ACTIVITY_NUM_ATTACHMENTS_ALT_IDS = {\n few: 'ACTIVITY_NUM_ATTACHMENTS_FEW_ALT',\n many: 'ACTIVITY_NUM_ATTACHMENTS_MANY_ALT',\n one: 'ACTIVITY_NUM_ATTACHMENTS_ONE_ALT',\n other: 'ACTIVITY_NUM_ATTACHMENTS_OTHER_ALT',\n two: 'ACTIVITY_NUM_ATTACHMENTS_TWO_ALT'\n};\n\n/**\n * Computes accessible name of an activity during transcript navigation.\n *\n * This text should be kept simple and short.\n *\n * Due to a bug in Safari, accessible name for active descendant must be a string but not a DOM element.\n */\nexport default function useActivityAccessibleName(activity: WebChatActivity, bodyRef: RefObject<HTMLElement>) {\n const [{ initials: botInitials }] = useAvatarForBot();\n const [interactiveType, setInteractiveType] = useState<InteractiveType | false>(false);\n const [sendStatusByActivityKey] = useSendStatusByActivityKey();\n const fromSelf = activity.from?.role === 'user';\n const getKeyByActivity = useGetKeyByActivity();\n const localize = useLocalizer();\n const localizeWithPlural = useLocalizer({ plural: true });\n const numAttachments = activity.type === 'message' ? activity.attachments?.length || 0 : 0;\n const renderMarkdownAsHTML = useRenderMarkdownAsHTML();\n\n /** \"Click to interact.\" */\n const activityInteractiveFootNoteAlt = localize('ACTIVITY_INTERACTIVE_FOOTNOTE_ALT');\n /** \"Message is interactive.\" */\n const activityInteractiveReasonInteractiveContentAlt = localize(\n 'ACTIVITY_INTERACTIVE_REASON_INTERACTIVE_CONTENT_ALT'\n );\n /** \"One or more links in the message.\" */\n const activityInteractiveReasonLinkAlt = localize('ACTIVITY_INTERACTIVE_REASON_LINK_ALT');\n /** \"Send failed.\" */\n const activityInteractiveReasonSendFailedAlt = localize('ACTIVITY_INTERACTIVE_REASON_SEND_FAILED_ALT');\n const activityKey = useMemo(() => getKeyByActivity(activity), [activity, getKeyByActivity]);\n const greetingAlt = useMemo(\n () =>\n (fromSelf ? localize('ACTIVITY_YOU_SAID_ALT') : localize('ACTIVITY_BOT_SAID_ALT', botInitials || '')).replace(\n /\\s{2,}/gu,\n ' '\n ),\n [botInitials, fromSelf, localize]\n );\n const interactiveTypeRef = useValueRef(interactiveType);\n const messageTextAlt = useMemo(\n () => activityAltText(activity, renderMarkdownAsHTML),\n [activity, renderMarkdownAsHTML]\n );\n const numAttachmentsAlt = useMemo(\n () => (numAttachments ? localizeWithPlural(ACTIVITY_NUM_ATTACHMENTS_ALT_IDS, numAttachments) : ''),\n [localizeWithPlural, numAttachments]\n );\n\n const isSendFailed = useMemo(\n () => sendStatusByActivityKey.get(activityKey) === SEND_FAILED,\n [activityKey, sendStatusByActivityKey]\n );\n\n const accessibleName = useMemo(\n // We are concatenating in a single string for Safari. If we split it up, Safari will only narrate the first section.\n () =>\n [\n greetingAlt,\n messageTextAlt,\n numAttachmentsAlt,\n isSendFailed ? activityInteractiveReasonSendFailedAlt : '',\n interactiveType === InteractiveType.LINK\n ? activityInteractiveReasonLinkAlt\n : interactiveType === InteractiveType.WIDGET\n ? activityInteractiveReasonInteractiveContentAlt\n : '',\n interactiveType || isSendFailed ? activityInteractiveFootNoteAlt : ''\n ]\n .filter(Boolean)\n .join(' '),\n [\n activityInteractiveFootNoteAlt,\n activityInteractiveReasonInteractiveContentAlt,\n activityInteractiveReasonLinkAlt,\n activityInteractiveReasonSendFailedAlt,\n greetingAlt,\n interactiveType,\n isSendFailed,\n messageTextAlt,\n numAttachmentsAlt\n ]\n );\n\n useEffect(() => {\n const hasLinks = !!bodyRef.current?.querySelector('a');\n const hasWidgets = !!tabbableElements(bodyRef.current).length;\n\n interactiveTypeRef.current !== hasWidgets &&\n setInteractiveType(hasLinks ? InteractiveType.LINK : hasWidgets ? InteractiveType.WIDGET : false);\n }, [bodyRef, interactiveTypeRef, setInteractiveType]);\n\n return [accessibleName];\n}\n","import useTranscriptFocusContext from './private/useContext';\n\nexport default function useGetDescendantIdByActivityKey(): (activityKey?: string) => string | undefined {\n return useTranscriptFocusContext().getDescendantIdByActivityKey;\n}\n","import { useEffect, useMemo, useRef, type DependencyList } from 'react';\nimport { useRefFrom } from 'use-ref-from';\n\ntype Cache<TArgs, TResult> = { args: TArgs[]; result: TResult };\ntype Fn<TArgs, TResult> = (...args: TArgs[]) => TResult;\n\n/**\n * `useMemoized` will memoize multiple calls to the same memoize function.\n *\n * @param {Fn<TArgs, TResult>} fn - The function to be memoized.\n * @param {DependencyList} deps - Dependencies to detect for chagnes.\n */\nexport default function useMemoized<TFinal, TArgs>(fn: Fn<TArgs, TFinal>, deps: DependencyList): Fn<TArgs, TFinal> {\n if (typeof fn !== 'function') {\n throw new Error('The first argument must be a function.');\n } else if (!Array.isArray(deps)) {\n throw new Error('The second argument must be an array.');\n }\n\n // Hook-style inline fn: changing it won't trigger updates unless deps change\n const fnRef = useRefFrom<Fn<TArgs, TFinal>>(fn);\n // Use both caches to read cached values, but store only\n // to the next cache, so we could distingish between values\n // added during render discarding value cached previously\n const cacheRef = useRef<Cache<TArgs, TFinal>[]>();\n const nextCacheRef = useRef<Cache<TArgs, TFinal>[]>();\n\n const memoizedFn = useMemo(\n () => {\n // Empty both caches on fresh run to avoid leakage of\n // previously cached values into new memoizedFn calls\n cacheRef.current = [];\n nextCacheRef.current = [];\n\n const memoizedFn = (...args) => {\n const fn = fnRef.current;\n const cache = cacheRef.current;\n const nextCache = nextCacheRef.current;\n\n const cached = cache.find(\n ({ args: cachedArgs }) =>\n // index is guarented to be a number here\n // eslint-disable-next-line security/detect-object-injection\n args.length === cachedArgs.length && args.every((arg, index) => Object.is(arg, cachedArgs[index]))\n );\n if (cached) {\n cached.args = args;\n nextCache.push(cached);\n return cached.result;\n }\n\n const nextCached = {\n args,\n result: fn(...args)\n };\n nextCache.push(nextCached);\n cache.push(nextCached);\n\n return nextCached.result;\n };\n\n return memoizedFn;\n },\n // Concat our deps with passed deps, so the memo callback runs when anything changes\n /* eslint-disable-next-line react-hooks/exhaustive-deps */\n [fnRef, cacheRef, nextCacheRef, ...deps]\n );\n\n useEffect(() => {\n // At the end of each render turn around caches so that\n // we keep only used in this render call cached values\n cacheRef.current = nextCacheRef.current;\n nextCacheRef.current = [];\n });\n\n return memoizedFn;\n}\n","import { createPropagation } from 'use-propagate';\n\nexport type TranscriptScrollRelativeOptions = { direction: 'down' | 'up'; displacement?: number };\n\nconst { useListen: useRegisterScrollRelativeTranscript, usePropagate: useScrollRelativeTranscript } =\n createPropagation<TranscriptScrollRelativeOptions>();\n\nexport { useRegisterScrollRelativeTranscript, useScrollRelativeTranscript };\n","import PropTypes from 'prop-types';\nimport React, { useCallback, useRef } from 'react';\n\nimport { orSelf as firstTabbableDescendantOrSelf } from '../firstTabbableDescendant';\nimport AccessKeySinkContext from './internal/Context';\nimport useNavigatorPlatform from '../../hooks/internal/useNavigatorPlatform';\n\nconst Surface = ({ children, ...otherProps }) => {\n const [{ apple }] = useNavigatorPlatform();\n const contextRef = useRef({ focii: [] });\n\n const handleKeyUp = useCallback(\n event => {\n const { altKey, ctrlKey, key, shiftKey } = event;\n\n // On Apple, most modern browsers use CTRL + OPTION as modifiers.\n // Otherwise, we use ALT + SHIFT as modifierse.\n if (altKey && (apple ? ctrlKey : shiftKey)) {\n const focii = contextRef.current.focii.filter(entry => entry.keys.includes(key));\n\n const currentFocus = focii.findIndex(\n ({ ref: { current } }) => current === document.activeElement || current.contains(document.activeElement)\n );\n const nextFocus = focii[(currentFocus + 1) % focii.length];\n\n if (nextFocus) {\n event.preventDefault();\n event.stopPropagation();\n\n const tabbable = firstTabbableDescendantOrSelf(nextFocus.ref.current);\n\n tabbable && tabbable.focus();\n }\n }\n },\n [apple]\n );\n\n return (\n <AccessKeySinkContext.Provider value={contextRef.current}>\n <div onKeyUp={handleKeyUp} {...otherProps}>\n {children}\n </div>\n </AccessKeySinkContext.Provider>\n );\n};\n\nSurface.defaultProps = {\n children: undefined\n};\n\nSurface.propTypes = {\n children: PropTypes.any\n};\n\nexport default Surface;\n","const {\n navigator: { userAgent }\n} = window;\n\nconst IE_FOCUSABLE_LIST = [\n 'a',\n 'body',\n 'button',\n 'frame',\n 'iframe',\n 'img',\n 'input',\n 'isindex',\n 'object',\n 'select',\n 'textarea'\n];\n\nconst IS_FIREFOX = /Firefox\\//iu.test(userAgent);\nconst IS_IE = /Trident\\//iu.test(userAgent);\n\nexport default function getTabIndex(element: HTMLElement): number | null {\n const { tabIndex } = element;\n\n if (IS_IE) {\n const tabIndexAttribute = element.attributes.getNamedItem('tabindex');\n\n if (!tabIndexAttribute || !tabIndexAttribute.specified) {\n return ~IE_FOCUSABLE_LIST.indexOf(element.nodeName.toLowerCase()) ? 0 : null;\n }\n } else if (!~tabIndex) {\n const attr = element.getAttribute('tabindex');\n\n if (attr === null || (attr === '' && !IS_FIREFOX)) {\n return null;\n }\n }\n\n return tabIndex;\n}\n","import getTabIndex from './TypeFocusSink/getTabIndex';\n\nconst ALWAYS_TRUE_FN = () => true;\n\nconst SELECTOR =\n 'a[href], audio, button, details, details summary, embed, iframe, input, object, rect, select, svg[focusable], textarea, video, [tabindex]';\n\nexport default function firstTabbableDescendant(element, filter = ALWAYS_TRUE_FN) {\n if (!element) {\n return;\n }\n\n // This is best-effort for finding a tabbable element.\n // For a comprehensive list, please refer to https://allyjs.io/data-tables/focusable.html and update this list accordingly.\n const focusables = [].filter.call(element.querySelectorAll(SELECTOR), filter);\n\n return [].find.call(focusables, focusable => {\n const tabIndex = getTabIndex(focusable);\n\n return typeof tabIndex === 'number' && tabIndex >= 0;\n });\n}\n\nfunction orSelf(element) {\n if (!element) {\n return;\n }\n\n // \"msMatchesSelector\" is vendor-prefixed version of \"matches\".\n // eslint-disable-next-line dot-notation\n if ((element.matches || element['msMatchesSelector']).call(element, SELECTOR)) {\n return element;\n }\n\n return firstTabbableDescendant(element);\n}\n\nexport { orSelf };\n","import { createContext } from 'react';\n\nconst AccessKeySinkContext = createContext();\n\nexport default AccessKeySinkContext;\n","import createEmotion from '@emotion/css/create-instance';\nimport type {\n ComposerProps as APIComposerProps,\n SendBoxMiddleware,\n SendBoxToolbarMiddleware\n} from 'botframework-webchat-api';\nimport {\n Composer as APIComposer,\n hooks,\n initSendBoxMiddleware,\n initSendBoxToolbarMiddleware,\n WebSpeechPonyfillFactory\n} from 'botframework-webchat-api';\nimport { DecoratorComposer } from 'botframework-webchat-api/decorator';\nimport { singleToArray } from 'botframework-webchat-core';\nimport classNames from 'classnames';\nimport MarkdownIt from 'markdown-it';\nimport PropTypes from 'prop-types';\nimport React, { memo, useCallback, useMemo, useRef, useState, type ReactNode } from 'react';\nimport { Composer as SayComposer } from 'react-say';\n\nimport createDefaultAttachmentMiddleware from './Attachment/createMiddleware';\nimport Dictation from './Dictation';\nimport ErrorBox from './ErrorBox';\nimport {\n speechSynthesis as bypassSpeechSynthesis,\n SpeechSynthesisUtterance as BypassSpeechSynthesisUtterance\n} from './hooks/internal/BypassSpeechSynthesisPonyfill';\nimport UITracker from './hooks/internal/UITracker';\nimport WebChatUIContext from './hooks/internal/WebChatUIContext';\nimport useStyleSet from './hooks/useStyleSet';\nimport createDefaultActivityMiddleware from './Middleware/Activity/createCoreMiddleware';\nimport createDefaultActivityStatusMiddleware from './Middleware/ActivityStatus/createCoreMiddleware';\nimport createDefaultAttachmentForScreenReaderMiddleware from './Middleware/AttachmentForScreenReader/createCoreMiddleware';\nimport createDefaultAvatarMiddleware from './Middleware/Avatar/createCoreMiddleware';\nimport createDefaultCardActionMiddleware from './Middleware/CardAction/createCoreMiddleware';\nimport createDefaultScrollToEndButtonMiddleware from './Middleware/ScrollToEndButton/createScrollToEndButtonMiddleware';\nimport createDefaultToastMiddleware from './Middleware/Toast/createCoreMiddleware';\nimport createDefaultTypingIndicatorMiddleware from './Middleware/TypingIndicator/createCoreMiddleware';\nimport ActivityTreeComposer from './providers/ActivityTree/ActivityTreeComposer';\nimport SendBoxComposer from './providers/internal/SendBox/SendBoxComposer';\nimport ModalDialogComposer from './providers/ModalDialog/ModalDialogComposer';\nimport useTheme from './providers/Theme/useTheme';\nimport createDefaultSendBoxMiddleware from './SendBox/createMiddleware';\nimport createDefaultSendBoxToolbarMiddleware from './SendBoxToolbar/createMiddleware';\nimport createStyleSet from './Styles/createStyleSet';\nimport { type ContextOf } from './types/ContextOf';\nimport { type FocusTranscriptInit } from './types/internal/FocusTranscriptInit';\nimport addTargetBlankToHyperlinksMarkdown from './Utils/addTargetBlankToHyperlinksMarkdown';\nimport createCSSKey from './Utils/createCSSKey';\nimport downscaleImageToDataURL from './Utils/downscaleImageToDataURL';\nimport mapMap from './Utils/mapMap';\n\nconst { useGetActivityByKey, useReferenceGrammarID, useStyleOptions } = hooks;\n\nconst node_env = process.env.node_env || process.env.NODE_ENV;\n\nconst emotionPool = {};\n\nfunction styleSetToEmotionObjects(styleToEmotionObject, styleSet) {\n return mapMap(styleSet, (style, key) => (key === 'options' ? style : styleToEmotionObject(style)));\n}\n\ntype ComposerCoreUIProps = Readonly<{ children?: ReactNode }>;\n\nconst ComposerCoreUI = memo(({ children }: ComposerCoreUIProps) => {\n const [{ cssCustomProperties }] = useStyleSet();\n\n const dictationOnError = useCallback(err => {\n console.error(err);\n }, []);\n\n return (\n <div className={classNames('webchat__css-custom-properties', cssCustomProperties)}>\n <DecoratorComposer>\n <ModalDialogComposer>\n {/* When <SendBoxComposer> is finalized, it will be using an independent instance that lives inside <BasicSendBox>. */}\n <SendBoxComposer>\n {children}\n <Dictation onError={dictationOnError} />\n </SendBoxComposer>\n </ModalDialogComposer>\n </DecoratorComposer>\n </div>\n );\n});\n\nComposerCoreUI.displayName = 'ComposerCoreUI';\n\ntype ComposerCoreProps = Readonly<{\n children?: ReactNode;\n extraStyleSet?: any;\n nonce?: string;\n renderMarkdown?: (\n markdown: string,\n newLineOptions: { markdownRespectCRLF: boolean },\n linkOptions: { externalLinkAlt: string }\n ) => string;\n styleSet?: any;\n suggestedActionsAccessKey?: boolean | string;\n webSpeechPonyfillFactory?: WebSpeechPonyfillFactory;\n}>;\n\nconst ComposerCore = ({\n children,\n extraStyleSet,\n nonce,\n renderMarkdown,\n styleSet,\n suggestedActionsAccessKey,\n webSpeechPonyfillFactory\n}: ComposerCoreProps) => {\n const [dictateAbortable, setDictateAbortable] = useState();\n const [referenceGrammarID] = useReferenceGrammarID();\n const [styleOptions] = useStyleOptions();\n const focusTranscriptCallbacksRef = useRef<((init: FocusTranscriptInit) => Promise<void>)[]>([]);\n const internalMarkdownIt = useMemo(() => new MarkdownIt(), []);\n const scrollToCallbacksRef = useRef([]);\n const scrollToEndCallbacksRef = useRef([]);\n\n const internalRenderMarkdownInline = useMemo(\n () => markdown => {\n const tree = internalMarkdownIt.parseInline(markdown);\n\n // TODO: Use \"betterLink\" plugin.\n // We should add rel=\"noopener noreferrer\" and target=\"_blank\"\n const patchedTree = addTargetBlankToHyperlinksMarkdown(tree);\n\n return internalMarkdownIt.renderer.render(patchedTree);\n },\n [internalMarkdownIt]\n );\n\n const styleToEmotionObject = useMemo(() => {\n // Emotion doesn't hash with nonce. We need to provide the pooling mechanism.\n // 1. If 2 instances use different nonce, they should result in different hash;\n // 2. If 2 instances are being mounted, pooling will make sure we render only 1 set of <style> tags, instead of 2.\n const emotion =\n // Prefix \"id-\" to prevent object injection attack.\n emotionPool[`id-${nonce}`] ||\n (emotionPool[`id-${nonce}`] = createEmotion({ key: `webchat--css-${createCSSKey()}`, nonce }));\n\n return style => emotion.css(style);\n }, [nonce]);\n\n const patchedStyleSet = useMemo(\n () =>\n styleSetToEmotionObjects(styleToEmotionObject, {\n ...(styleSet || createStyleSet(styleOptions)),\n ...extraStyleSet\n }),\n [extraStyleSet, styleOptions, styleSet, styleToEmotionObject]\n );\n\n const webSpeechPonyfill = useMemo(() => {\n const ponyfill = webSpeechPonyfillFactory && webSpeechPonyfillFactory({ referenceGrammarID });\n const { speechSynthesis, SpeechSynthesisUtterance } = ponyfill || {};\n\n return {\n ...ponyfill,\n speechSynthesis: speechSynthesis || bypassSpeechSynthesis,\n SpeechSynthesisUtterance: SpeechSynthesisUtterance || BypassSpeechSynthesisUtterance\n };\n }, [referenceGrammarID, webSpeechPonyfillFactory]);\n\n const scrollPositionObserversRef = useRef([]);\n\n const dispatchScrollPosition = useCallback(\n event => scrollPositionObserversRef.current.forEach(observer => observer(event)),\n [scrollPositionObserversRef]\n );\n\n const observeScrollPosition = useCallback(\n observer => {\n scrollPositionObserversRef.current = [...scrollPositionObserversRef.current, observer];\n\n return () => {\n scrollPositionObserversRef.current = scrollPositionObserversRef.current.filter(target => target !== observer);\n };\n },\n [scrollPositionObserversRef]\n );\n\n const transcriptFocusObserversRef = useRef([]);\n const [numTranscriptFocusObservers, setNumTranscriptFocusObservers] = useState(0);\n\n const getActivityByKey = useGetActivityByKey();\n\n const dispatchTranscriptFocusByActivityKey = useMemo(() => {\n let prevActivityKey: string | Symbol | undefined = Symbol();\n\n return activityKey => {\n if (activityKey !== prevActivityKey) {\n prevActivityKey = activityKey;\n\n const event = { activity: getActivityByKey(activityKey) };\n\n transcriptFocusObserversRef.current.forEach(observer => observer(event));\n }\n };\n }, [getActivityByKey, transcriptFocusObserversRef]);\n\n const observeTranscriptFocus = useCallback(\n observer => {\n transcriptFocusObserversRef.current = [...transcriptFocusObserversRef.current, observer];\n setNumTranscriptFocusObservers(transcriptFocusObserversRef.current.length);\n\n return () => {\n transcriptFocusObserversRef.current = transcriptFocusObserversRef.current.filter(target => target !== observer);\n setNumTranscriptFocusObservers(transcriptFocusObserversRef.current.length);\n };\n },\n [transcriptFocusObserversRef, setNumTranscriptFocusObservers]\n );\n\n const context = useMemo<ContextOf<typeof WebChatUIContext>>(\n () => ({\n dictateAbortable,\n dispatchScrollPosition,\n dispatchTranscriptFocusByActivityKey,\n focusTranscriptCallbacksRef,\n internalMarkdownItState: [internalMarkdownIt],\n internalRenderMarkdownInline,\n nonce,\n numTranscriptFocusObservers,\n observeScrollPosition,\n observeTranscriptFocus,\n renderMarkdown,\n scrollToCallbacksRef,\n scrollToEndCallbacksRef,\n setDictateAbortable,\n styleSet: patchedStyleSet,\n styleToEmotionObject,\n suggestedActionsAccessKey,\n webSpeechPonyfill\n }),\n [\n dictateAbortable,\n dispatchScrollPosition,\n dispatchTranscriptFocusByActivityKey,\n focusTranscriptCallbacksRef,\n internalMarkdownIt,\n internalRenderMarkdownInline,\n nonce,\n numTranscriptFocusObservers,\n observeScrollPosition,\n observeTranscriptFocus,\n patchedStyleSet,\n renderMarkdown,\n scrollToCallbacksRef,\n scrollToEndCallbacksRef,\n setDictateAbortable,\n styleToEmotionObject,\n suggestedActionsAccessKey,\n webSpeechPonyfill\n ]\n );\n\n return (\n <SayComposer ponyfill={webSpeechPonyfill}>\n <WebChatUIContext.Provider value={context}>\n <ComposerCoreUI>{children}</ComposerCoreUI>\n </WebChatUIContext.Provider>\n </SayComposer>\n );\n};\n\nComposerCore.defaultProps = {\n extraStyleSet: undefined,\n nonce: undefined,\n renderMarkdown: undefined,\n styleSet: undefined,\n suggestedActionsAccessKey: 'A a Å å',\n webSpeechPonyfillFactory: undefined\n};\n\nComposerCore.propTypes = {\n extraStyleSet: PropTypes.any,\n nonce: PropTypes.string,\n renderMarkdown: PropTypes.func,\n styleSet: PropTypes.any,\n suggestedActionsAccessKey: PropTypes.oneOfType([PropTypes.oneOf([false]), PropTypes.string]),\n webSpeechPonyfillFactory: PropTypes.func\n};\n\ntype ComposerProps = APIComposerProps & ComposerCoreProps;\n\nconst Composer = ({\n activityMiddleware,\n activityStatusMiddleware,\n attachmentForScreenReaderMiddleware,\n attachmentMiddleware,\n avatarMiddleware,\n cardActionMiddleware,\n children,\n extraStyleSet,\n renderMarkdown,\n scrollToEndButtonMiddleware,\n sendBoxMiddleware: sendBoxMiddlewareFromProps,\n sendBoxToolbarMiddleware: sendBoxToolbarMiddlewareFromProps,\n styleOptions,\n styleSet,\n suggestedActionsAccessKey,\n toastMiddleware,\n typingIndicatorMiddleware,\n webSpeechPonyfillFactory,\n ...composerProps\n}: ComposerProps) => {\n const { nonce, onTelemetry } = composerProps;\n const theme = useTheme();\n\n const patchedActivityMiddleware = useMemo(\n () => [...singleToArray(activityMiddleware), ...theme.activityMiddleware, ...createDefaultActivityMiddleware()],\n [activityMiddleware, theme.activityMiddleware]\n );\n\n const patchedActivityStatusMiddleware = useMemo(\n () => [\n ...singleToArray(activityStatusMiddleware),\n ...theme.activityStatusMiddleware,\n ...createDefaultActivityStatusMiddleware()\n ],\n [activityStatusMiddleware, theme.activityStatusMiddleware]\n );\n\n const patchedAttachmentForScreenReaderMiddleware = useMemo(\n () => [\n ...singleToArray(attachmentForScreenReaderMiddleware),\n ...theme.attachmentForScreenReaderMiddleware,\n ...createDefaultAttachmentForScreenReaderMiddleware()\n ],\n [attachmentForScreenReaderMiddleware, theme.attachmentForScreenReaderMiddleware]\n );\n\n const patchedAttachmentMiddleware = useMemo(\n () => [\n ...singleToArray(attachmentMiddleware),\n ...theme.attachmentMiddleware,\n ...createDefaultAttachmentMiddleware()\n ],\n [attachmentMiddleware, theme.attachmentMiddleware]\n );\n\n const patchedAvatarMiddleware = useMemo(\n () => [...singleToArray(avatarMiddleware), ...theme.avatarMiddleware, ...createDefaultAvatarMiddleware()],\n [avatarMiddleware, theme.avatarMiddleware]\n );\n\n const patchedCardActionMiddleware = useMemo(\n () => [\n ...singleToArray(cardActionMiddleware),\n ...theme.cardActionMiddleware,\n ...createDefaultCardActionMiddleware()\n ],\n [cardActionMiddleware, theme.cardActionMiddleware]\n );\n\n const patchedToastMiddleware = useMemo(\n () => [...singleToArray(toastMiddleware), ...theme.toastMiddleware, ...createDefaultToastMiddleware()],\n [toastMiddleware, theme.toastMiddleware]\n );\n\n const patchedTypingIndicatorMiddleware = useMemo(\n () => [\n ...singleToArray(typingIndicatorMiddleware),\n ...theme.typingIndicatorMiddleware,\n ...createDefaultTypingIndicatorMiddleware()\n ],\n [typingIndicatorMiddleware, theme.typingIndicatorMiddleware]\n );\n\n const defaultScrollToEndButtonMiddleware = useMemo(() => createDefaultScrollToEndButtonMiddleware(), []);\n\n const patchedScrollToEndButtonMiddleware = useMemo(\n () => [\n ...singleToArray(scrollToEndButtonMiddleware),\n ...theme.scrollToEndButtonMiddleware,\n ...defaultScrollToEndButtonMiddleware\n ],\n [defaultScrollToEndButtonMiddleware, scrollToEndButtonMiddleware, theme.scrollToEndButtonMiddleware]\n );\n\n const patchedStyleOptions = useMemo(\n () => ({ ...theme.styleOptions, ...styleOptions }),\n [styleOptions, theme.styleOptions]\n );\n\n const sendBoxMiddleware = useMemo<readonly SendBoxMiddleware[]>(\n () =>\n Object.freeze([\n ...initSendBoxMiddleware(sendBoxMiddlewareFromProps),\n ...initSendBoxMiddleware(theme.sendBoxMiddleware),\n ...createDefaultSendBoxMiddleware()\n ]),\n [sendBoxMiddlewareFromProps, theme.sendBoxMiddleware]\n );\n\n const sendBoxToolbarMiddleware = useMemo<readonly SendBoxToolbarMiddleware[]>(\n () =>\n Object.freeze([\n ...initSendBoxToolbarMiddleware(sendBoxToolbarMiddlewareFromProps),\n ...initSendBoxToolbarMiddleware(theme.sendBoxToolbarMiddleware),\n ...createDefaultSendBoxToolbarMiddleware()\n ]),\n [sendBoxToolbarMiddlewareFromProps, theme.sendBoxToolbarMiddleware]\n );\n\n return (\n <APIComposer\n activityMiddleware={patchedActivityMiddleware}\n activityStatusMiddleware={patchedActivityStatusMiddleware}\n attachmentForScreenReaderMiddleware={patchedAttachmentForScreenReaderMiddleware}\n attachmentMiddleware={patchedAttachmentMiddleware}\n avatarMiddleware={patchedAvatarMiddleware}\n cardActionMiddleware={patchedCardActionMiddleware}\n downscaleImageToDataURL={downscaleImageToDataURL}\n // Under dev server of create-react-app, \"NODE_ENV\" will be set to \"development\".\n internalErrorBoxClass={node_env === 'development' ? ErrorBox : undefined}\n nonce={nonce}\n scrollToEndButtonMiddleware={patchedScrollToEndButtonMiddleware}\n sendBoxMiddleware={sendBoxMiddleware}\n sendBoxToolbarMiddleware={sendBoxToolbarMiddleware}\n styleOptions={patchedStyleOptions}\n toastMiddleware={patchedToastMiddleware}\n typingIndicatorMiddleware={patchedTypingIndicatorMiddleware}\n {...composerProps}\n >\n <ActivityTreeComposer>\n <ComposerCore\n extraStyleSet={extraStyleSet}\n nonce={nonce}\n renderMarkdown={renderMarkdown}\n styleSet={styleSet}\n suggestedActionsAccessKey={suggestedActionsAccessKey}\n webSpeechPonyfillFactory={webSpeechPonyfillFactory}\n >\n {children}\n {onTelemetry && <UITracker />}\n </ComposerCore>\n </ActivityTreeComposer>\n </APIComposer>\n );\n};\n\nComposer.defaultProps = {\n ...APIComposer.defaultProps,\n ...ComposerCore.defaultProps,\n children: undefined\n};\n\nComposer.propTypes = {\n ...APIComposer.propTypes,\n ...ComposerCore.propTypes,\n children: PropTypes.any\n};\n\nexport default Composer;\n\nexport type { ComposerProps };\n","import React from 'react';\n\nimport AudioAttachment from './AudioAttachment';\nimport FileAttachment from './FileAttachment';\nimport ImageAttachment from './ImageAttachment';\nimport TextAttachment from './Text/TextAttachment';\nimport VideoAttachment from './VideoAttachment';\n\nimport { type AttachmentMiddleware } from 'botframework-webchat-api';\nimport { type WebChatAttachment } from './private/types/WebChatAttachment';\n\nfunction isTextAttachment(\n attachment: WebChatAttachment\n): attachment is WebChatAttachment & { contentType: `text/${string}` } {\n return attachment.contentType.startsWith('text/');\n}\n\n// TODO: [P4] Rename this file or the whole middleware, it looks either too simple or too comprehensive now\nexport default function createCoreMiddleware(): AttachmentMiddleware[] {\n return [\n () =>\n next =>\n (...args) => {\n const [\n {\n activity,\n activity: { from: { role = undefined } = {} } = {},\n attachment,\n attachment: { contentType = undefined, contentUrl = undefined, thumbnailUrl = undefined } = {}\n }\n ] = args;\n\n const isText = isTextAttachment(attachment);\n\n return (isText ? !attachment.content : role === 'user' && !thumbnailUrl) ? (\n <FileAttachment activity={activity} attachment={attachment} />\n ) : /^audio\\//u.test(contentType) ? (\n <AudioAttachment attachment={attachment} />\n ) : /^image\\//u.test(contentType) ? (\n <ImageAttachment attachment={attachment} />\n ) : /^video\\//u.test(contentType) ? (\n <VideoAttachment attachment={attachment} />\n ) : contentUrl || contentType === 'application/octet-stream' ? (\n <FileAttachment activity={activity} attachment={attachment} />\n ) : isText ? (\n <TextAttachment activity={activity} attachment={attachment} />\n ) : (\n next(...args)\n );\n }\n ];\n}\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport AudioContent from './AudioContent';\nimport useStyleSet from '../hooks/useStyleSet';\n\nconst AudioAttachment = ({ attachment }) => {\n const [{ audioAttachment: audioAttachmentStyleSet }] = useStyleSet();\n\n return (\n <div className={audioAttachmentStyleSet}>\n <AudioContent alt={attachment.name} src={attachment.contentUrl} />\n </div>\n );\n};\n\nAudioAttachment.propTypes = {\n attachment: PropTypes.shape({\n contentUrl: PropTypes.string.isRequired,\n name: PropTypes.string\n }).isRequired\n};\n\nexport default AudioAttachment;\n","import PropTypes from 'prop-types';\nimport React, { FC } from 'react';\n\nimport useStyleSet from '../hooks/useStyleSet';\n\ntype AudioContentProps = {\n alt?: string;\n autoPlay?: boolean;\n loop?: boolean;\n poster?: string;\n src: string;\n};\n\nconst AudioContent: FC<AudioContentProps> = ({ alt, autoPlay, loop, src }) => {\n const [{ audioContent: audioContentStyleSet }] = useStyleSet();\n\n return (\n <audio\n aria-label={alt}\n autoPlay={autoPlay}\n className={audioContentStyleSet}\n controls={true}\n loop={loop}\n src={src}\n />\n );\n};\n\nAudioContent.defaultProps = {\n alt: '',\n autoPlay: false,\n loop: false,\n poster: ''\n};\n\nAudioContent.propTypes = {\n alt: PropTypes.string,\n autoPlay: PropTypes.bool,\n loop: PropTypes.bool,\n // We will keep the \"poster\" prop for #3315.\n // eslint-disable-next-line react/no-unused-prop-types\n poster: PropTypes.string,\n src: PropTypes.string.isRequired\n};\n\nexport default AudioContent;\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport FileContent from './FileContent';\n\nconst FileAttachment = ({\n activity: { attachments = [], channelData: { attachmentSizes = [] } = {} } = {},\n attachment\n}) => {\n const attachmentIndex = attachments.indexOf(attachment);\n const size = attachmentSizes[+attachmentIndex];\n\n return <FileContent fileName={attachment.name} href={attachment.contentUrl} size={size} />;\n};\n\nFileAttachment.propTypes = {\n activity: PropTypes.shape({\n attachment: PropTypes.array,\n channelData: PropTypes.shape({\n attachmentSizes: PropTypes.arrayOf(PropTypes.number)\n })\n }).isRequired,\n attachment: PropTypes.shape({\n contentUrl: PropTypes.string,\n name: PropTypes.string.isRequired\n }).isRequired\n};\n\nexport default FileAttachment;\n","import { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, { FC } from 'react';\n\nimport DownloadIcon from './Assets/DownloadIcon';\nimport useStyleSet from '../hooks/useStyleSet';\nimport useStyleToEmotionObject from '../hooks/internal/useStyleToEmotionObject';\n\nconst { useByteFormatter, useDirection, useLocalizer } = hooks;\n\nconst ROOT_STYLE = {\n display: 'flex',\n\n '& .webchat__fileContent__buttonLink': {\n display: 'flex',\n flex: 1\n },\n\n '& .webchat__fileContent__badge': {\n display: 'flex',\n flex: 1,\n flexDirection: 'column'\n }\n};\n\nconst ALLOWED_PROTOCOLS = ['blob:', 'data:', 'http:', 'https:'];\n\nfunction isAllowedProtocol(url) {\n try {\n return ALLOWED_PROTOCOLS.includes(new URL(url).protocol);\n } catch (err) {\n return false;\n }\n}\n\nconst FileContentBadge = ({ downloadIcon, fileName, size }) => {\n const [direction] = useDirection();\n const formatByte = useByteFormatter();\n\n const localizedSize = typeof size === 'number' && formatByte(size);\n\n return (\n <React.Fragment>\n <div aria-hidden={true} className=\"webchat__fileContent__badge\">\n <div className=\"webchat__fileContent__fileName\">{fileName}</div>\n {!!localizedSize && <div className=\"webchat__fileContent__size\">{localizedSize}</div>}\n </div>\n {downloadIcon && (\n <DownloadIcon\n className={classNames(\n 'webchat__fileContent__downloadIcon',\n direction === 'rtl' && 'webchat__fileContent__downloadIcon--rtl'\n )}\n size={1.5}\n />\n )}\n </React.Fragment>\n );\n};\n\nFileContentBadge.defaultProps = {\n downloadIcon: false,\n size: undefined\n};\n\nFileContentBadge.propTypes = {\n downloadIcon: PropTypes.bool,\n fileName: PropTypes.string.isRequired,\n size: PropTypes.number\n};\n\ntype FileContentProps = {\n className?: string;\n fileName: string;\n href?: string;\n size?: number;\n};\n\nconst FileContent: FC<FileContentProps> = ({ className, href, fileName, size }) => {\n const [{ fileContent: fileContentStyleSet }] = useStyleSet();\n const localize = useLocalizer();\n const localizeBytes = useByteFormatter();\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n\n const localizedSize = typeof size === 'number' && localizeBytes(size);\n\n href = href && isAllowedProtocol(href) ? href : undefined;\n\n const alt = localize(\n href\n ? localizedSize\n ? 'FILE_CONTENT_DOWNLOADABLE_WITH_SIZE_ALT'\n : 'FILE_CONTENT_DOWNLOADABLE_ALT'\n : localizedSize\n ? 'FILE_CONTENT_WITH_SIZE_ALT'\n : 'FILE_CONTENT_ALT',\n fileName,\n localizedSize\n );\n\n return (\n <div\n className={classNames('webchat__fileContent', rootClassName, fileContentStyleSet + '', (className || '') + '')}\n >\n {href ? (\n <a\n aria-label={alt}\n className=\"webchat__fileContent__buttonLink\"\n download={fileName}\n href={href}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n <FileContentBadge downloadIcon={true} fileName={fileName} size={size} />\n </a>\n ) : (\n <FileContentBadge downloadIcon={false} fileName={fileName} size={size} />\n )}\n </div>\n );\n};\n\nFileContent.defaultProps = {\n className: '',\n href: undefined,\n size: undefined\n};\n\nFileContent.propTypes = {\n className: PropTypes.string,\n fileName: PropTypes.string.isRequired,\n href: PropTypes.string,\n size: PropTypes.number\n};\n\nexport default FileContent;\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nconst ICON_SIZE_FACTOR = 22;\n\nconst DownloadIcon = ({ className, size }) => (\n <svg\n className={className}\n focusable={false}\n height={ICON_SIZE_FACTOR * size}\n role=\"presentation\"\n viewBox=\"0 0 31.8 46\"\n width={ICON_SIZE_FACTOR * size}\n >\n <path d=\"M26.8,23.8l-10.9,11L5,23.8l1.6-1.6l8.2,8.3V5H17v25.5l8.2-8.3L26.8,23.8z M5.8,41v-2.2H26V41H5.8z\" />\n </svg>\n);\n\nDownloadIcon.defaultProps = {\n className: '',\n size: 1\n};\n\nDownloadIcon.propTypes = {\n className: PropTypes.string,\n size: PropTypes.number\n};\n\nexport default DownloadIcon;\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport ImageContent from './ImageContent';\nimport readDataURIToBlob from '../Utils/readDataURIToBlob';\n\nconst ImageAttachment = ({ attachment }) => {\n let imageURL = attachment.thumbnailUrl || attachment.contentUrl;\n\n // To support Content Security Policy, data URI cannot be used.\n // We need to parse the data URI into a blob: URL.\n const blob = readDataURIToBlob(imageURL);\n\n if (blob) {\n imageURL = URL.createObjectURL(blob);\n }\n\n return <ImageContent alt={attachment.name} src={imageURL} />;\n};\n\nImageAttachment.propTypes = {\n // Either attachment.contentUrl or attachment.thumbnailUrl must be specified.\n attachment: PropTypes.oneOfType([\n PropTypes.shape({\n contentUrl: PropTypes.string.isRequired,\n name: PropTypes.string,\n thumbnailUrl: PropTypes.string\n }),\n PropTypes.shape({\n contentUrl: PropTypes.string,\n name: PropTypes.string,\n thumbnailUrl: PropTypes.string.isRequired\n })\n ]).isRequired\n};\n\nexport default ImageAttachment;\n","import { hooks } from 'botframework-webchat-api';\nimport PropTypes from 'prop-types';\nimport React, { FC } from 'react';\n\nimport CroppedImage from '../Utils/CroppedImage';\n\nconst { useStyleOptions } = hooks;\n\ntype ImageContentProps = {\n alt?: string;\n src: string;\n};\n\nconst ImageContent: FC<ImageContentProps> = ({ alt, src }) => {\n const [{ bubbleImageHeight }] = useStyleOptions();\n\n return <CroppedImage alt={alt} height={bubbleImageHeight} src={src} width=\"100%\" />;\n};\n\nImageContent.defaultProps = {\n alt: ''\n};\n\nImageContent.propTypes = {\n alt: PropTypes.string,\n src: PropTypes.string.isRequired\n};\n\nexport default ImageContent;\n","import classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, { useMemo } from 'react';\n\nimport useStyleToEmotionObject from '../hooks/internal/useStyleToEmotionObject';\n\nconst ROOT_STYLE = {\n overflow: 'hidden',\n position: 'relative',\n\n '& > img': {\n height: 'auto',\n left: '50%',\n position: 'absolute',\n top: '50%',\n transform: 'translate(-50%, -50%)',\n width: '100%'\n }\n};\n\nconst CroppedImage = ({ alt, className, height, src, width }) => {\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n const sizeStyle = useMemo(() => ({ height, width }), [height, width]);\n\n return (\n <div className={classNames(rootClassName, (className || '') + '')} style={sizeStyle}>\n <img alt={alt} src={src} />\n </div>\n );\n};\n\nCroppedImage.defaultProps = {\n alt: '',\n className: ''\n};\n\nCroppedImage.propTypes = {\n alt: PropTypes.string,\n className: PropTypes.string,\n height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\n src: PropTypes.string.isRequired,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired\n};\n\nexport default CroppedImage;\n","import { toByteArray } from 'base64-js';\n\nconst PATTERN = /^data:([^,]*?)(;(base64)){0,1},([A-Za-z0-9+/=]+)/u;\n\nconst DEFAULT_CONTENT_TYPE = 'text/plain;charset=US-ASCII';\n\nexport function parse(dataURI) {\n const match = PATTERN.exec(dataURI);\n\n if (!match) {\n return;\n }\n\n const [, contentType, , encoding, base64] = match;\n\n if (encoding !== 'base64') {\n return;\n }\n\n return { base64, contentType: contentType || DEFAULT_CONTENT_TYPE, encoding };\n}\n\nexport default function readDataURIToBlob(dataURI) {\n const parsed = parse(dataURI);\n\n if (!parsed) {\n return;\n }\n\n return new Blob([toByteArray(parsed.base64)], { type: parsed.contentType });\n}\n","import { type WebChatActivity } from 'botframework-webchat-core';\nimport React, { memo, type FC } from 'react';\n\nimport { type WebChatAttachment } from '../private/types/WebChatAttachment';\nimport TextContent from './TextContent';\n\ntype Props = Readonly<{\n activity: WebChatActivity;\n attachment: WebChatAttachment & {\n contentType: `text/${string}`;\n };\n}>;\n\nconst TextAttachment: FC<Props> = memo(({ activity, attachment: { content, contentType } }: Props) => (\n <TextContent activity={activity} contentType={contentType} text={content} />\n));\n\nTextAttachment.displayName = 'TextAttachment';\n\nexport default TextAttachment;\n","import React, { type FC, memo } from 'react';\n\nimport MarkdownTextContent from './private/MarkdownTextContent';\nimport PlainTextContent from './private/PlainTextContent';\nimport useRenderMarkdownAsHTML from '../../hooks/useRenderMarkdownAsHTML';\n\nimport { type WebChatActivity } from 'botframework-webchat-core';\n\ntype Props = Readonly<{\n activity: WebChatActivity;\n contentType?: string;\n text: string;\n}>;\n\nconst TextContent: FC<Props> = memo(({ activity, contentType = 'text/plain', text }: Props) => {\n const supportMarkdown = !!useRenderMarkdownAsHTML('message activity');\n\n return text ? (\n contentType === 'text/markdown' && supportMarkdown ? (\n <MarkdownTextContent activity={activity} markdown={text} />\n ) : (\n <PlainTextContent text={text} />\n )\n ) : null;\n});\n\nTextContent.defaultProps = { contentType: 'text/plain' };\nTextContent.displayName = 'TextContent';\n\nexport default TextContent;\n","import { hooks } from 'botframework-webchat-api';\nimport {\n getOrgSchemaMessage,\n onErrorResumeNext,\n parseClaim,\n type OrgSchemaClaim,\n type WebChatActivity\n} from 'botframework-webchat-core';\nimport classNames from 'classnames';\nimport type { Definition } from 'mdast';\nimport { fromMarkdown } from 'mdast-util-from-markdown';\nimport React, { memo, useCallback, useMemo, type MouseEventHandler } from 'react';\nimport { useRefFrom } from 'use-ref-from';\n\nimport { LinkDefinitionItem, LinkDefinitions } from '../../../LinkDefinition/index';\nimport dereferenceBlankNodes from '../../../Utils/JSONLinkedData/dereferenceBlankNodes';\nimport useRenderMarkdownAsHTML from '../../../hooks/useRenderMarkdownAsHTML';\nimport useStyleSet from '../../../hooks/useStyleSet';\nimport useShowModal from '../../../providers/ModalDialog/useShowModal';\nimport { type PropsOf } from '../../../types/PropsOf';\nimport CitationModalContext from './CitationModalContent';\nimport MessageSensitivityLabel, { type MessageSensitivityLabelProps } from './MessageSensitivityLabel';\nimport isHTMLButtonElement from './isHTMLButtonElement';\n\nconst { useLocalizer } = hooks;\n\ntype Entry = {\n claim?: OrgSchemaClaim | undefined;\n handleClick?: (() => void) | undefined;\n key: string;\n markdownDefinition: Definition;\n url?: string | undefined;\n};\n\ntype Props = Readonly<{\n activity: WebChatActivity;\n markdown: string;\n}>;\n\nfunction isCitationURL(url: string): boolean {\n return onErrorResumeNext(() => new URL(url))?.protocol === 'cite:';\n}\n\nconst MarkdownTextContent = memo(({ activity, markdown }: Props) => {\n const [\n {\n citationModalDialog: citationModalDialogStyleSet,\n renderMarkdown: renderMarkdownStyleSet,\n textContent: textContentStyleSet\n }\n ] = useStyleSet();\n const localize = useLocalizer();\n const graph = useMemo(() => dereferenceBlankNodes(activity.entities || []), [activity.entities]);\n const renderMarkdownAsHTML = useRenderMarkdownAsHTML('message activity');\n const showModal = useShowModal();\n\n const messageThing = useMemo(() => getOrgSchemaMessage(graph), [graph]);\n\n const citationModalDialogLabel = localize('CITATION_MODEL_DIALOG_ALT');\n\n if (!renderMarkdownAsHTML) {\n throw new Error('botframework-webchat: assert failed for renderMarkdownAsHTML');\n }\n\n const dangerouslySetInnerHTML = useMemo(\n () => ({ __html: markdown ? renderMarkdownAsHTML(markdown) : '' }),\n [renderMarkdownAsHTML, markdown]\n );\n\n const markdownDefinitions = useMemo(\n () => fromMarkdown(markdown).children.filter((node): node is Definition => node.type === 'definition'),\n [markdown]\n );\n\n const showClaimModal = useCallback(\n (title, text, altText) => {\n showModal(() => <CitationModalContext headerText={title} markdown={text} />, {\n 'aria-label': altText || title || citationModalDialogLabel,\n className: classNames('webchat__citation-modal-dialog', citationModalDialogStyleSet)\n });\n },\n [citationModalDialogStyleSet, citationModalDialogLabel, showModal]\n );\n\n const entries = useMemo<readonly Entry[]>(\n () =>\n Object.freeze(\n markdownDefinitions.map<Entry>(markdownDefinition => {\n const messageCitation = messageThing?.citation\n ?.map(parseClaim)\n .find(({ position }) => '' + position === markdownDefinition.identifier);\n\n if (messageCitation) {\n return {\n claim: messageCitation,\n key: markdownDefinition.url,\n handleClick:\n messageCitation?.appearance && !messageCitation.appearance.url\n ? () =>\n showClaimModal(\n messageCitation.appearance.name ?? markdownDefinition.title,\n messageCitation.appearance.text,\n messageCitation.alternateName\n )\n : undefined,\n markdownDefinition,\n url: messageCitation?.appearance ? messageCitation.appearance.url : markdownDefinition.url\n };\n }\n\n const rootLevelClaim = graph\n .filter(({ type }) => type === 'https://schema.org/Claim')\n .map(parseClaim)\n .find(({ '@id': id }) => id === markdownDefinition.url);\n\n if (rootLevelClaim) {\n return {\n claim: rootLevelClaim,\n key: markdownDefinition.url,\n handleClick: isCitationURL(rootLevelClaim['@id'])\n ? () =>\n showClaimModal(\n rootLevelClaim.name ?? markdownDefinition.title,\n rootLevelClaim.text,\n rootLevelClaim.alternateName\n )\n : undefined,\n markdownDefinition\n };\n }\n\n return {\n key: markdownDefinition.url,\n markdownDefinition,\n url: markdownDefinition.url\n };\n })\n ),\n [graph, markdownDefinitions, messageThing, showClaimModal]\n );\n\n const entriesRef = useRefFrom(entries);\n\n const handleClick = useCallback<MouseEventHandler<HTMLDivElement>>(\n event => {\n // Find out what <button> is being clicked.\n const targetElement = event.target as HTMLElement;\n const buttonElement: HTMLButtonElement | undefined = isHTMLButtonElement(targetElement)\n ? targetElement\n : (targetElement.closest('button') as HTMLButtonElement | undefined);\n\n if (!buttonElement || !targetElement.contains(buttonElement)) {\n return;\n }\n\n const entry = entriesRef.current.find(({ key }) => key === buttonElement.value);\n\n if (entry?.handleClick) {\n event.preventDefault();\n event.stopPropagation();\n\n entry.handleClick();\n }\n },\n [entriesRef]\n );\n\n const messageSensitivityLabelProps = useMemo<PropsOf<typeof MessageSensitivityLabel> | undefined>(() => {\n const usageInfo = messageThing?.usageInfo;\n\n if (usageInfo) {\n const { pattern } = usageInfo;\n const encryptionStatus = !!usageInfo.keywords?.find(keyword => keyword === 'encrypted-content');\n\n return {\n color:\n pattern &&\n pattern.inDefinedTermSet === 'https://www.w3.org/TR/css-color-4/' &&\n pattern.name === 'color' &&\n pattern.termCode,\n isEncrypted: encryptionStatus,\n name: usageInfo.name,\n title: usageInfo.description\n };\n }\n }, [messageThing]);\n\n // The main text of the citation entry (e.g. the title of the document). Used as the content of the main link and, if it exists, the header of the popup window.\n const getEntryMainText = (entry: Entry) =>\n entry.claim?.name ?? entry.claim?.appearance?.name ?? entry.markdownDefinition.title;\n\n // Optional alternate name for the entry, used as a subtitle beneath the link\n const getEntryBadgeName = (entry: Entry) => entry.claim?.appearance?.usageInfo?.name;\n\n // Secondary text describing the citation, used in the a11y description (i.e. the div's title attribute)\n const getEntryDescription = (entry: Entry) => entry.claim?.appearance?.usageInfo?.description;\n\n return (\n <div\n className={classNames('webchat__text-content', 'webchat__text-content--is-markdown', textContentStyleSet + '')}\n >\n <div\n className={classNames('webchat__text-content__markdown', renderMarkdownStyleSet + '')}\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={dangerouslySetInnerHTML}\n onClick={handleClick}\n />\n {!!entries.length && (\n <LinkDefinitions<MessageSensitivityLabelProps>\n accessoryComponentType={messageSensitivityLabelProps && MessageSensitivityLabel}\n accessoryProps={messageSensitivityLabelProps}\n >\n {entries.map(entry => (\n <LinkDefinitionItem\n badgeName={getEntryBadgeName(entry)}\n badgeTitle={`${getEntryBadgeName(entry) ?? ''}\\n\\n${getEntryDescription(entry) ?? ''}`.trim()}\n identifier={entry.markdownDefinition.label}\n key={entry.key}\n onClick={entry.handleClick}\n text={getEntryMainText(entry)}\n url={entry.url}\n />\n ))}\n </LinkDefinitions>\n )}\n </div>\n );\n});\n\nMarkdownTextContent.displayName = 'MarkdownTextContent';\n\nexport default MarkdownTextContent;\n","import React, { memo, useCallback, type MouseEventHandler } from 'react';\nimport { useRefFrom } from 'use-ref-from';\n\nimport ItemBody from './private/ItemBody';\nimport extractHostnameWithSubdomain from './private/extractHostnameWithSubdomain';\n\ntype Props = Readonly<{\n // The text (usually a number) displayed to the left of the item (e.g. \"1\")\n identifier?: string;\n\n // The main text of the citation. This will be formatted as if it were a link. If this is nullish and a URL exists, its host will be displayed instead.\n text?: string;\n\n // Displayed beneath the main link of the citation if it exists\n badgeName?: string;\n\n // Used as a tooltip and ARIA label for the item's displayed badgeName\n badgeTitle?: string;\n\n // If the citation is an external link, this is its destination.\n url?: string;\n\n onClick?: (event: Pick<CustomEvent, 'defaultPrevented' | 'preventDefault' | 'type'>) => void;\n}>;\n\nconst LinkDefinitionItem = memo(({ badgeName, badgeTitle, identifier, onClick, text, url }: Props) => {\n const onClickRef = useRefFrom(onClick);\n\n const handleClick = useCallback<MouseEventHandler<HTMLAnchorElement | HTMLButtonElement>>(\n event => {\n const { current } = onClickRef;\n\n if (current) {\n const customEvent = new CustomEvent('click');\n\n current(customEvent);\n\n customEvent.defaultPrevented && event.preventDefault();\n }\n },\n [onClickRef]\n );\n\n return url ? (\n <a\n className=\"webchat__link-definitions__list-item-box webchat__link-definitions__list-item-box--as-link\"\n href={url}\n onClick={handleClick}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n <ItemBody\n badgeName={badgeName}\n badgeTitle={badgeTitle}\n identifier={identifier}\n isExternal={true}\n text={text || extractHostnameWithSubdomain(url)}\n />\n </a>\n ) : (\n <button\n className=\"webchat__link-definitions__list-item-box webchat__link-definitions__list-item-box--as-button\"\n onClick={handleClick}\n type=\"button\"\n >\n <ItemBody badgeName={badgeName} badgeTitle={badgeTitle} identifier={identifier} text={text} />\n </button>\n );\n});\n\nLinkDefinitionItem.displayName = 'LinkDefinitionItem';\n\nexport default LinkDefinitionItem;\n","import React, { memo } from 'react';\n\nimport Badge from './Badge';\nimport OpenInNewWindowIcon from './OpenInNewWindowIcon';\n\ntype Props = Readonly<{\n // The text (usually a number) displayed at the head of the citation\n identifier?: string;\n\n // The text displayed as the main link of the citation\n text: string;\n\n // If this is true, we show the \"external link\" icon after the link\n isExternal?: boolean;\n\n // The text displayed beneath the link as a description\n badgeName?: string;\n\n // The title of the badge, displayed as a tooltip on the item's description as well as the description's screen-reader content\n badgeTitle?: string;\n}>;\n\nconst ItemBody = memo(({ badgeName, badgeTitle, identifier, isExternal, text }: Props) => (\n <div className=\"webchat__link-definitions__list-item-body\">\n {identifier ? <Badge value={identifier} /> : null}\n <div className=\"webchat__link-definitions__list-item-body-main\">\n <div className=\"webchat__link-definitions__list-item-main-text\">\n <div className=\"webchat__link-definitions__list-item-text\" title={text}>\n {text}\n </div>\n {isExternal ? <OpenInNewWindowIcon className=\"webchat__link-definitions__open-in-new-window-icon\" /> : null}\n </div>\n {badgeName && (\n <div className=\"webchat__link-definitions__list-item-badge\" title={badgeTitle}>\n {badgeName}\n </div>\n )}\n </div>\n </div>\n));\n\nItemBody.displayName = 'ItemBody';\n\nexport default ItemBody;\n","import React, { memo } from 'react';\n\ntype Props = Readonly<{ value: string }>;\n\nconst Badge = memo(({ value }: Props) => <div className=\"webchat__link-definitions__badge\">{value}</div>);\n\nBadge.displayName = 'Badge';\n\nexport default Badge;\n","import classNames from 'classnames';\nimport React from 'react';\n\ntype Props = Readonly<{ className?: string }>;\n\nconst OpenInNewWindowIcon = ({ className }: Props) => (\n <svg\n className={classNames('webchat__text-content__open-in-new-window-icon', className)}\n viewBox=\"3 3 18 18\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.2501 4.50017H10.7495C11.1637 4.50017 11.4995 4.83596 11.4995 5.25017C11.4995 5.62986 11.2173 5.94366 10.8513 5.99332L10.7495 6.00017H7.24974C6.07079 5.99961 5.10349 6.90656 5.00786 8.06112L5.00028 8.22003L5.00312 16.7507C5.00343 17.9415 5.92885 18.9161 7.09966 18.9949L7.25371 19.0001L15.7518 18.9884C16.9415 18.9868 17.9145 18.062 17.9935 16.8923L17.9987 16.7384V13.2321C17.9987 12.8179 18.3345 12.4821 18.7487 12.4821C19.1284 12.4821 19.4422 12.7643 19.4918 13.1303L19.4987 13.2321V16.7384C19.4987 18.7407 17.9293 20.3769 15.9528 20.4829L15.7538 20.4884L7.25827 20.5001L7.05495 20.4949C5.14239 20.3954 3.60895 18.8627 3.50837 16.9502L3.50312 16.7511L3.50089 8.2527L3.50529 8.0502C3.60539 6.13749 5.13867 4.60449 7.05096 4.50527L7.2501 4.50017H10.7495H7.2501ZM13.7481 3.00146L20.3018 3.00197L20.4014 3.01575L20.5022 3.04393L20.559 3.06803C20.6122 3.09122 20.6634 3.12163 20.7111 3.15885L20.7804 3.22156L20.8641 3.32014L20.9183 3.41025L20.957 3.50057L20.9762 3.56476L20.9898 3.62862L20.9992 3.72282L20.9997 10.2554C20.9997 10.6696 20.6639 11.0054 20.2497 11.0054C19.87 11.0054 19.5562 10.7232 19.5065 10.3571L19.4997 10.2554L19.4989 5.56147L12.2797 12.7847C12.0134 13.051 11.5968 13.0753 11.3031 12.8575L11.219 12.7849C10.9527 12.5187 10.9284 12.1021 11.1462 11.8084L11.2188 11.7243L18.4369 4.50146H13.7481C13.3684 4.50146 13.0546 4.21931 13.005 3.85324L12.9981 3.75146C12.9981 3.37177 13.2803 3.05797 13.6464 3.00831L13.7481 3.00146Z\"\n fill=\"currentcolor\"\n />\n </svg>\n);\n\nexport default OpenInNewWindowIcon;\n","export default function extractHostnameWithSubdomain(urlString: string): string {\n try {\n const { host, port, protocol } = new URL(urlString);\n\n if (protocol === 'http:' || protocol === 'https:') {\n if (!port) {\n return host.replace(/^www\\./iu, '');\n }\n\n return host;\n }\n } catch (error) {\n // Intentionally left blank, will return `urlString`.\n }\n\n return urlString;\n}\n","import { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport React, { Children, type ComponentType, type ReactNode } from 'react';\n\nimport useStyleSet from '../hooks/useStyleSet';\nimport Chevron from './private/Chevron';\n\nconst { useLocalizer } = hooks;\nconst { count: childrenCount, map: childrenMap } = Children;\n\ntype Props<TAccessoryProps> = Readonly<{\n accessoryComponentType: ComponentType<TAccessoryProps>;\n accessoryProps: TAccessoryProps;\n children?: ReactNode | undefined;\n}>;\n\nconst REFERENCE_LIST_HEADER_IDS = {\n one: 'REFERENCE_LIST_HEADER_ONE',\n few: 'REFERENCE_LIST_HEADER_FEW',\n many: 'REFERENCE_LIST_HEADER_MANY',\n other: 'REFERENCE_LIST_HEADER_OTHER',\n two: 'REFERENCE_LIST_HEADER_TWO'\n};\n\nconst LinkDefinitions = <TAccessoryProps extends object>({\n accessoryComponentType,\n accessoryProps,\n children\n}: Props<TAccessoryProps>) => {\n const [{ linkDefinitions }] = useStyleSet();\n const localizeWithPlural = useLocalizer({ plural: true });\n\n const headerText = localizeWithPlural(REFERENCE_LIST_HEADER_IDS, childrenCount(children));\n\n return (\n <details className={classNames(linkDefinitions, 'webchat__link-definitions')} open={true}>\n <summary className=\"webchat__link-definitions__header\">\n <div className=\"webchat__link-definitions__header-text\">{headerText}</div>\n <Chevron />\n <div className=\"webchat__link-definitions__header-filler\" />\n {accessoryComponentType && (\n <div className=\"webchat__link-definitions__header-accessory\">\n {React.createElement(accessoryComponentType, accessoryProps)}\n </div>\n )}\n </summary>\n <div className=\"webchat__link-definitions__list\" role=\"list\">\n {childrenMap(children, child => (\n <div className=\"webchat__link-definitions__list-item\" role=\"listitem\">\n {child}\n </div>\n ))}\n </div>\n </details>\n );\n};\n\nLinkDefinitions.displayName = 'LinkDefinitions';\n\n// TODO: [P1] Add memo().\nexport default LinkDefinitions;\n","import React, { memo } from 'react';\n\nconst Chevron = memo(() => (\n <svg\n className=\"webchat__link-definitions__header-chevron\"\n fill=\"none\"\n height=\"10\"\n viewBox=\"1 3 10 7\"\n width=\"14\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2.14645 4.64645C2.34171 4.45118 2.65829 4.45118 2.85355 4.64645L6 7.79289L9.14645 4.64645C9.34171 4.45118 9.65829 4.45118 9.85355 4.64645C10.0488 4.84171 10.0488 5.15829 9.85355 5.35355L6.35355 8.85355C6.15829 9.04882 5.84171 9.04882 5.64645 8.85355L2.14645 5.35355C1.95118 5.15829 1.95118 4.84171 2.14645 4.64645Z\"\n fill=\"currentcolor\"\n />\n </svg>\n));\n\nChevron.displayName = 'Chevron';\n\nexport default Chevron;\n","import deepFreeze from 'deep-freeze-strict';\n\nimport { type BlankNode } from './BlankNode';\nimport getSafeOwnPropertyNames from './getSafeOwnPropertyNames';\nimport isBlankNode from './isBlankNode';\nimport isUnconnectedBlankNode from './isUnconnectedBlankNode';\nimport visitOnce from './visitOnce';\n\nfunction dereferenceBlankNodesInline(objects: object[]): void {\n const blankNodeIdMap = new Map<string, BlankNode>();\n\n const objectsToVisit1: any[] = [objects];\n const shouldVisit1 = visitOnce<object>();\n\n while (objectsToVisit1.length) {\n const object = objectsToVisit1.shift();\n\n if (!object) {\n continue;\n }\n\n const indices = getSafeOwnPropertyNames(object);\n\n for (const index of indices) {\n // eslint-disable-next-line security/detect-object-injection\n const value = object[index];\n\n if (isBlankNode(value) && !isUnconnectedBlankNode(value)) {\n blankNodeIdMap.set(value['@id'], value);\n }\n\n shouldVisit1(value) && objectsToVisit1.push(value);\n }\n }\n\n const objectsToVisit2: unknown[] = [objects];\n const shouldVisit2 = visitOnce<object>();\n\n while (objectsToVisit2.length) {\n const object = objectsToVisit2.shift();\n\n if (!object) {\n continue;\n }\n\n const indices = getSafeOwnPropertyNames(object);\n\n for (const index of indices) {\n // eslint-disable-next-line security/detect-object-injection\n const value = object[index];\n\n if (isBlankNode(value) && isUnconnectedBlankNode(value)) {\n const blankNode = blankNodeIdMap.get(value['@id']);\n\n if (blankNode) {\n // eslint-disable-next-line security/detect-object-injection\n object[index] = blankNode;\n }\n } else {\n shouldVisit2(value) && objectsToVisit2.push(value);\n }\n }\n }\n}\n\n/**\n * Dereferences all unconnected blank nodes to their corresponding blank node. This is done by replacing all unconnected blank nodes in a graph and purposefully introduce cyclic dependencies to help querying the graph.\n *\n * This function will always return a new instance of all objects in the graph.\n *\n * This function assumes the graph conforms to JSON-LD, notably:\n *\n * - For nodes that share the same blank node identifier, one of them should be connected and the other must be unconnected\n * - If none of them are connected node, these unconnected blank node will not be replaced\n *\n * @see https://json-ld.github.io/json-ld.org/spec/latest/json-ld/#data-model-overview\n * @param graph A list of nodes in the graph.\n * @returns A structured clone of graph with unconnected blank nodes replaced by their corresponding blank node.\n */\nexport default function dereferenceBlankNodes<T extends object>(graph: T[]): readonly T[] {\n const nextObjects = structuredClone(graph);\n\n dereferenceBlankNodesInline(nextObjects);\n\n return deepFreeze(nextObjects);\n}\n","const DANGEROUS_PROPERTY_NAMES = ['__proto__', 'constructor', 'prototype'];\n\n/**\n * Returns a whitelisted own-property names.\n *\n * If `null` or `undefined` is passed, an empty list will be returned.\n *\n * @param object An object (including primitives).\n * @returns A whitelisted own-property names.\n */\nexport default function getSafeOwnPropertyNames(object: unknown): string[] {\n return Object.getOwnPropertyNames(object).filter(name => !DANGEROUS_PROPERTY_NAMES.includes(name));\n}\n","import { type BlankNode } from './BlankNode';\n\n/**\n * A blank node is a node with `@id` starting with `\"_:\"`\n *\n * @see https://json-ld.github.io/json-ld.org/spec/latest/json-ld/#dfn-blank-nodes\n * @param node A node.\n * @returns `true`, if the node is a blank node, otherwise, `false`.\n */\nexport default function isBlankNode(node: unknown): node is BlankNode {\n // TODO: Do we restrict to plain object or just anything?\n if (node) {\n const id = node['@id'];\n\n return typeof id === 'string' && id.startsWith('_:');\n }\n\n return false;\n}\n","import { type BlankNode } from './BlankNode';\nimport isBlankNode from './isBlankNode';\n\n/**\n * An unconnected blank node is a blank node without any edge or properties.\n *\n * @see https://json-ld.github.io/json-ld.org/spec/latest/json-ld/#data-model\n * @param object A blank node.\n * @returns `true`, if the blank node is unconnected, otherwise, `false`.\n */\nexport default function isUnconnectedBlankNode<T extends BlankNode>(object: T): boolean {\n return isBlankNode(object) && Object.getOwnPropertyNames(object).every(name => name.startsWith('@'));\n}\n","export default function visitOnce<T>(): (value: T) => boolean {\n const visited = new Set<T>();\n\n return (value: T) => {\n if (visited.has(value)) {\n return false;\n }\n\n visited.add(value);\n\n return true;\n };\n}\n","import { useContext as useReactContext } from 'react';\n\nimport Context from './Context';\n\nimport { type ContextOf } from '../../../types/ContextOf';\n\nexport default function useContext(): ContextOf<typeof Context> {\n return useReactContext(Context);\n}\n","import { createContext, type ReactNode } from 'react';\n\ntype DialogInit = {\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n className?: string;\n};\n\ntype RenderFunction = () => ReactNode;\n\ntype ContextType = Readonly<{\n close(): void;\n showModal(render: RenderFunction, init?: DialogInit): void;\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 close: {\n get() {\n throw new Error('close cannot be used outside of <ModalDialogComposer>.');\n }\n },\n showModal: {\n get() {\n throw new Error('showModal cannot be used outside of <ModalDialogComposer>.');\n }\n }\n};\n\nconst Context = createContext<ContextType>(Object.create({}, defaultContextValue));\n\nContext.displayName = 'ModalDialogComposer';\n\nexport default Context;\n","import useContext from './private/useContext';\n\nexport default function useShowModal(): ReturnType<typeof useContext>['showModal'] {\n return useContext().showModal;\n}\n","import classNames from 'classnames';\nimport React, { Fragment, memo } from 'react';\n\nimport useRenderMarkdownAsHTML from '../../../hooks/useRenderMarkdownAsHTML';\nimport useStyleSet from '../../../hooks/useStyleSet';\n\ntype Props = Readonly<{\n headerText?: string;\n markdown: string;\n}>;\n\nconst CitationModalContent = memo(({ headerText, markdown }: Props) => {\n const [{ renderMarkdown: renderMarkdownStyleSet }] = useStyleSet();\n const renderMarkdownAsHTML = useRenderMarkdownAsHTML('citation modal');\n\n return (\n <Fragment>\n {headerText && <h2 className=\"webchat__citation-modal-dialog__header\">{headerText}</h2>}\n {renderMarkdownAsHTML ? (\n <div\n className={classNames(\n 'webchat__citation-modal-dialog__body',\n 'webchat__render-markdown',\n renderMarkdownStyleSet + ''\n )}\n // The content rendered by `renderMarkdownAsHTML` is sanitized.\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{ __html: renderMarkdownAsHTML(markdown) }}\n />\n ) : (\n <div className={classNames('webchat__render-markdown', renderMarkdownStyleSet + '')}>{markdown}</div>\n )}\n </Fragment>\n );\n});\n\nCitationModalContent.displayName = 'CitationModalContent';\n\nexport default CitationModalContent;\n","import classNames from 'classnames';\nimport React, { memo, useMemo } from 'react';\n\nimport ShieldIcon from './ShieldIcon';\n\ntype MessageSensitivityLabelProps = Readonly<{\n className?: string | undefined;\n color?: string | undefined;\n isEncrypted?: boolean | undefined;\n name?: string | undefined;\n title?: string | undefined;\n}>;\n\nconst MessageSensitivityLabel = memo(({ className, color, isEncrypted, name, title }: MessageSensitivityLabelProps) => (\n <div\n className={classNames(\n 'webchat__link-definitions__message-sensitivity-label',\n {\n 'webchat__link-definitions__message-sensitivity-label--is-encrypted': isEncrypted\n },\n className\n )}\n title={useMemo(() => [name, title].filter(Boolean).join('\\n\\n'), [name, title])}\n >\n <ShieldIcon\n className=\"webchat__link-definitions__message-sensitivity-label-icon\"\n fillColor={color}\n hasLock={isEncrypted}\n />\n <span className=\"webchat__link-definitions__message-sensitivity-label-text\">{name}</span>\n </div>\n));\n\nMessageSensitivityLabel.displayName = 'MessageSensitivityLabel';\n\nexport default MessageSensitivityLabel;\n\nexport type { MessageSensitivityLabelProps };\n","import classNames from 'classnames';\nimport React, { Fragment } from 'react';\n\ntype Props = Readonly<{\n className?: string;\n fillColor?: string;\n hasLock?: boolean;\n}>;\n\nconst ShieldIcon = ({ className, fillColor, hasLock }: Props) => (\n <svg className={classNames(className)} height=\"16\" viewBox=\"0 0 16 16\" width=\"16\" xmlns=\"http://www.w3.org/2000/svg\">\n {hasLock ? (\n <Fragment>\n {fillColor && (\n <path\n d=\"M8.35464 2.14678C8.15946 1.95123 7.84268 1.95105 7.64728 2.14638C6.40416 3.38902 5.02923 4 3.5 4C3.22386 4 3 4.22386 3 4.5V7.50126C3 10.4242 4.35378 12.4971 7 13.6523V10C7 9.06808 7.63739 8.28503 8.5 8.06301V8C8.5 6.34315 9.84315 5 11.5 5C12.0464 5 12.5587 5.14609 13 5.40135V4.5C13 4.22386 12.7761 4 12.5 4C10.9689 4 9.5947 3.38913 8.35464 2.14678ZM9.5 9V8C9.5 6.89543 10.3954 6 11.5 6C12.6046 6 13.5 6.89543 13.5 8V9H14C14.5523 9 15 9.44772 15 10V14C15 14.5523 14.5523 15 14 15H9C8.44771 15 8 14.5523 8 14V10C8 9.44772 8.44772 9 9 9H9.5ZM10.5 8V9H12.5V8C12.5 7.44772 12.0523 7 11.5 7C10.9477 7 10.5 7.44772 10.5 8ZM12.25 12C12.25 11.5858 11.9142 11.25 11.5 11.25C11.0858 11.25 10.75 11.5858 10.75 12C10.75 12.4142 11.0858 12.75 11.5 12.75C11.9142 12.75 12.25 12.4142 12.25 12Z\"\n fill={fillColor}\n />\n )}\n <path\n d=\"M7.64728 2.14638C7.84268 1.95105 8.15946 1.95123 8.35464 2.14678C9.5947 3.38913 10.9689 4 12.5 4C12.7761 4 13 4.22386 13 4.5V5.40135C12.6963 5.22567 12.359 5.1017 12 5.04148V4.98121C10.5195 4.86895 9.18521 4.25528 8.00042 3.18917C6.81393 4.25491 5.47941 4.86879 4 4.98118V7.50126C4 8.9349 4.36269 10.0655 5.02127 10.9453C5.49089 11.5727 6.14168 12.1134 7 12.5478V13.6523C4.35378 12.4971 3 10.4242 3 7.50126V4.5C3 4.22386 3.22386 4 3.5 4C5.02923 4 6.40416 3.38902 7.64728 2.14638ZM9.5 8V9H9C8.44772 9 8 9.44772 8 10V14C8 14.5523 8.44771 15 9 15H14C14.5523 15 15 14.5523 15 14V10C15 9.44772 14.5523 9 14 9H13.5V8C13.5 6.89543 12.6046 6 11.5 6C10.3954 6 9.5 6.89543 9.5 8ZM10.5 9V8C10.5 7.44772 10.9477 7 11.5 7C12.0523 7 12.5 7.44772 12.5 8V9H10.5ZM11.5 11.25C11.9142 11.25 12.25 11.5858 12.25 12C12.25 12.4142 11.9142 12.75 11.5 12.75C11.0858 12.75 10.75 12.4142 10.75 12C10.75 11.5858 11.0858 11.25 11.5 11.25Z\"\n fill=\"currentcolor\"\n />\n </Fragment>\n ) : (\n <Fragment>\n {fillColor && (\n <path\n d=\"M7.64728 2.14638C7.84268 1.95105 8.15946 1.95123 8.35464 2.14678C9.5947 3.38913 10.9689 4 12.5 4C12.7761 4 13 4.22386 13 4.5V7.50126C13 10.7196 11.3587 12.9075 8.15811 13.9743C8.05548 14.0086 7.94452 14.0086 7.84189 13.9743C4.64126 12.9075 3 10.7196 3 7.50126V4.5C3 4.22386 3.22386 4 3.5 4C5.02923 4 6.40416 3.38902 7.64728 2.14638Z\"\n fill={fillColor}\n />\n )}\n <path\n d=\"M7.64728 2.14638C7.84268 1.95105 8.15946 1.95123 8.35464 2.14678C9.5947 3.38913 10.9689 4 12.5 4C12.7761 4 13 4.22386 13 4.5V7.50126C13 10.7196 11.3587 12.9075 8.15811 13.9743C8.05548 14.0086 7.94452 14.0086 7.84189 13.9743C4.64126 12.9075 3 10.7196 3 7.50126V4.5C3 4.22386 3.22386 4 3.5 4C5.02923 4 6.40416 3.38902 7.64728 2.14638ZM8.00042 3.18917C6.81393 4.25491 5.47941 4.86879 4 4.98118V7.50126C4 8.9349 4.36269 10.0655 5.02127 10.9453C5.65858 11.7967 6.62953 12.4885 8 12.9715C9.37047 12.4885 10.3414 11.7967 10.9787 10.9453C11.6373 10.0655 12 8.9349 12 7.50126V4.98121C10.5195 4.86895 9.18521 4.25528 8.00042 3.18917Z\"\n fill=\"currentcolor\"\n />\n </Fragment>\n )}\n </svg>\n);\n\nexport default ShieldIcon;\n","export default function isHTMLButtonElement(button: HTMLElement): button is HTMLButtonElement {\n return button.matches('button');\n}\n","import classNames from 'classnames';\nimport React, { type FC, Fragment, memo } from 'react';\n\nimport useStyleSet from '../../../hooks/useStyleSet';\n\ntype Props = Readonly<{ text: string }>;\n\nconst PlainTextContent: FC<Props> = memo(({ text }: Props) => {\n const [{ textContent: textContentStyleSet }] = useStyleSet();\n\n return (\n <Fragment>\n {(text || '').split('\\n').map(line => (\n <p\n className={classNames('webchat__text-content', 'webchat__text-content--is-plain', textContentStyleSet + '')}\n key={line}\n >\n {line.trim()}\n </p>\n ))}\n </Fragment>\n );\n});\n\nPlainTextContent.displayName = 'PlainTextContent';\n\nexport default PlainTextContent;\n","import classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nimport useStyleSet from '../hooks/useStyleSet';\nimport useStyleToEmotionObject from '../hooks/internal/useStyleToEmotionObject';\nimport VideoContent from './VideoContent';\n\nconst ROOT_STYLE = {\n display: 'flex',\n flexDirection: 'column'\n};\n\nconst VideoAttachment = ({ attachment }) => {\n const [{ videoAttachment: videoAttachmentStyleSet }] = useStyleSet();\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n\n return (\n <div className={classNames(rootClassName, videoAttachmentStyleSet + '')}>\n <VideoContent alt={attachment.name} src={attachment.contentUrl} />\n </div>\n );\n};\n\nVideoAttachment.propTypes = {\n attachment: PropTypes.shape({\n contentUrl: PropTypes.string.isRequired,\n name: PropTypes.string\n }).isRequired\n};\n\nexport default VideoAttachment;\n","import PropTypes from 'prop-types';\nimport React, { FC } from 'react';\n\nimport HTMLVideoContent from './HTMLVideoContent';\nimport VimeoContent from './VimeoContent';\nimport YouTubeContent from './YouTubeContent';\n\nconst YOUTUBE_DOMAIN = 'youtube.com';\nconst YOUTUBE_WWW_DOMAIN = 'www.youtube.com';\nconst YOUTUBE_SHORT_DOMAIN = 'youtu.be';\nconst YOUTUBE_WWW_SHORT_DOMAIN = 'www.youtu.be';\nconst VIMEO_DOMAIN = 'vimeo.com';\nconst VIMEO_WWW_DOMAIN = 'www.vimeo.com';\n\n// This is a workaround\n// - Today, there is no good URL polyfill for older browser\n// - Instead of writing a URL parser, for older browser, we will use this <a href> trick to parse the URL\nfunction parseURL(url) {\n let urlLike;\n\n if (typeof URL === 'function') {\n urlLike = new URL(url);\n } else {\n urlLike = document.createElement('a');\n urlLike.setAttribute('href', url);\n }\n\n const { hostname, pathname, search } = urlLike;\n\n return { hostname, pathname, search };\n}\n\ntype VideoContentProps = {\n alt?: string;\n autoPlay?: boolean;\n loop?: boolean;\n poster?: string;\n src: string;\n};\n\nconst VideoContent: FC<VideoContentProps> = ({ alt, autoPlay, loop, poster, src }) => {\n const { hostname, pathname, search } = parseURL(src);\n const lastSegment = pathname.split('/').pop();\n const searchParams = new URLSearchParams(search);\n\n switch (hostname) {\n case VIMEO_DOMAIN:\n case VIMEO_WWW_DOMAIN:\n return <VimeoContent alt={alt} autoPlay={autoPlay} embedID={lastSegment} loop={loop} />;\n\n case YOUTUBE_DOMAIN:\n case YOUTUBE_WWW_DOMAIN:\n return <YouTubeContent alt={alt} autoPlay={autoPlay} embedID={searchParams.get('v')} loop={loop} />;\n\n case YOUTUBE_SHORT_DOMAIN:\n case YOUTUBE_WWW_SHORT_DOMAIN:\n return <YouTubeContent alt={alt} autoPlay={autoPlay} embedID={lastSegment} loop={loop} />;\n\n default:\n return <HTMLVideoContent alt={alt} autoPlay={autoPlay} loop={loop} poster={poster} src={src} />;\n }\n};\n\nVideoContent.defaultProps = {\n alt: '',\n autoPlay: false,\n loop: false,\n poster: ''\n};\n\nVideoContent.propTypes = {\n alt: PropTypes.string,\n autoPlay: PropTypes.bool,\n loop: PropTypes.bool,\n poster: PropTypes.string,\n src: PropTypes.string.isRequired\n};\n\nexport default VideoContent;\n","import PropTypes from 'prop-types';\nimport React, { FC } from 'react';\n\nimport useStyleSet from '../hooks/useStyleSet';\n\ntype HTMLVideoContentProps = {\n alt?: string;\n autoPlay?: boolean;\n loop?: boolean;\n poster?: string;\n src: string;\n};\n\nconst HTMLVideoContent: FC<HTMLVideoContentProps> = ({ alt, autoPlay, loop, poster, src }) => {\n const [{ videoContent: videoContentStyleSet }] = useStyleSet();\n\n return (\n <video\n aria-label={alt}\n autoPlay={autoPlay}\n className={videoContentStyleSet}\n controls={true}\n loop={loop}\n poster={poster}\n src={src}\n />\n );\n};\n\nHTMLVideoContent.defaultProps = {\n alt: '',\n autoPlay: false,\n loop: false,\n poster: ''\n};\n\nHTMLVideoContent.propTypes = {\n alt: PropTypes.string,\n autoPlay: PropTypes.bool,\n loop: PropTypes.bool,\n poster: PropTypes.string,\n src: PropTypes.string.isRequired\n};\n\nexport default HTMLVideoContent;\n","import { hooks } from 'botframework-webchat-api';\nimport PropTypes from 'prop-types';\nimport React, { FC } from 'react';\n\nimport useStyleSet from '../hooks/useStyleSet';\n\nconst { useLocalizer } = hooks;\n\ntype VimeoContentProps = {\n alt?: string;\n autoPlay?: boolean;\n embedID: string;\n loop?: boolean;\n};\n\nconst VimeoContent: FC<VimeoContentProps> = ({ alt, autoPlay, embedID, loop }) => {\n const [{ vimeoContent: vimeoContentStyleSet }] = useStyleSet();\n const localize = useLocalizer();\n\n const search = new URLSearchParams({\n autoplay: autoPlay ? '1' : '0',\n badge: '0',\n byline: '0',\n loop: loop ? '1' : '0',\n portrait: '0',\n title: '0'\n }).toString();\n const title = localize('ATTACHMENT_VIDEO');\n\n return (\n <iframe\n allowFullScreen={true}\n aria-label={alt}\n className={vimeoContentStyleSet}\n sandbox=\"allow-same-origin allow-scripts\"\n src={`https://player.vimeo.com/video/${encodeURI(embedID)}?${search}`}\n title={title}\n />\n );\n};\n\nVimeoContent.defaultProps = {\n alt: '',\n autoPlay: false,\n loop: false\n};\n\nVimeoContent.propTypes = {\n alt: PropTypes.string,\n autoPlay: PropTypes.bool,\n embedID: PropTypes.string.isRequired,\n loop: PropTypes.bool\n};\n\nexport default VimeoContent;\n","import { hooks } from 'botframework-webchat-api';\nimport PropTypes from 'prop-types';\nimport React, { FC } from 'react';\n\nimport useStyleSet from '../hooks/useStyleSet';\n\nconst { useLocalizer } = hooks;\n\ntype YouTubeContentProps = {\n alt?: string;\n autoPlay?: boolean;\n embedID: string;\n loop?: boolean;\n};\n\nconst YouTubeContent: FC<YouTubeContentProps> = ({ alt, autoPlay, embedID, loop }) => {\n const [{ youTubeContent: youTubeContentStyleSet }] = useStyleSet();\n const localize = useLocalizer();\n\n const search = new URLSearchParams({\n autoplay: autoPlay ? '1' : '0',\n loop: loop ? '1' : '0',\n modestbranding: '1'\n }).toString();\n const title = localize('ATTACHMENT_VIDEO');\n\n return (\n // TODO: We should encodeURI the URL\n <iframe\n allowFullScreen={true}\n aria-label={alt}\n className={youTubeContentStyleSet}\n sandbox=\"allow-same-origin allow-scripts\"\n src={`https://youtube.com/embed/${embedID}?${search}`}\n title={title}\n />\n );\n};\n\nYouTubeContent.defaultProps = {\n alt: '',\n autoPlay: false,\n loop: false\n};\n\nYouTubeContent.propTypes = {\n alt: PropTypes.string,\n autoPlay: PropTypes.bool,\n embedID: PropTypes.string.isRequired,\n loop: PropTypes.bool\n};\n\nexport default YouTubeContent;\n","import { hooks } from 'botframework-webchat-api';\n// TODO: [P1] #3350 No import from internal, we need to move setDictateState from bf-wc-core (Redux) to React Context.\nimport { useSetDictateState } from 'botframework-webchat-api/internal';\nimport { Constants } from 'botframework-webchat-core';\nimport PropTypes from 'prop-types';\nimport React, { useCallback, useEffect, useMemo } from 'react';\nimport { Composer as DictateComposer } from 'react-dictate-button';\n\nimport useResumeAudioContext from './hooks/internal/useResumeAudioContext';\nimport useSettableDictateAbortable from './hooks/internal/useSettableDictateAbortable';\nimport useWebSpeechPonyfill from './hooks/useWebSpeechPonyfill';\n\nconst {\n useActivities,\n useDictateInterims,\n useDictateState,\n useDisabled,\n useEmitTypingIndicator,\n useLanguage,\n useSendBoxValue,\n useSendTypingIndicator,\n useShouldSpeakIncomingActivity,\n useStopDictate,\n useSubmitSendBox\n} = hooks;\n\nconst {\n DictateState: { DICTATING, IDLE, STARTING }\n} = Constants;\n\nconst Dictation = ({ onError }) => {\n const [, setDictateAbortable] = useSettableDictateAbortable();\n const [, setDictateInterims] = useDictateInterims();\n const [, setSendBox] = useSendBoxValue();\n const [, setShouldSpeakIncomingActivity] = useShouldSpeakIncomingActivity();\n const [{ SpeechGrammarList, SpeechRecognition } = {}] = useWebSpeechPonyfill();\n const [activities] = useActivities();\n const [dictateState] = useDictateState();\n const [disabled] = useDisabled();\n const [sendTypingIndicator] = useSendTypingIndicator();\n const [speechLanguage] = useLanguage('speech');\n const emitTypingIndicator = useEmitTypingIndicator();\n const resumeAudioContext = useResumeAudioContext();\n const setDictateState = useSetDictateState();\n const stopDictate = useStopDictate();\n const submitSendBox = useSubmitSendBox();\n\n const numSpeakingActivities = useMemo(\n () => activities.filter(({ channelData: { speak } = {} }) => speak).length,\n [activities]\n );\n\n const handleDictate = useCallback(\n ({ result: { confidence, transcript } = {} }) => {\n if (dictateState === DICTATING || dictateState === STARTING) {\n setDictateInterims([]);\n setDictateState(IDLE);\n stopDictate();\n\n if (transcript) {\n setSendBox(transcript);\n submitSendBox('speech', { channelData: { speech: { alternatives: [{ confidence, transcript }] } } });\n setShouldSpeakIncomingActivity(true);\n }\n }\n },\n [\n dictateState,\n setDictateInterims,\n setDictateState,\n stopDictate,\n setSendBox,\n submitSendBox,\n setShouldSpeakIncomingActivity\n ]\n );\n\n const handleDictating = useCallback(\n ({ abortable, results = [] }) => {\n if (dictateState === DICTATING || dictateState === STARTING) {\n const interims = results.map(({ transcript }) => transcript);\n\n setDictateAbortable(abortable);\n setDictateInterims(interims);\n setDictateState(DICTATING);\n sendTypingIndicator && emitTypingIndicator();\n }\n },\n [dictateState, emitTypingIndicator, sendTypingIndicator, setDictateAbortable, setDictateInterims, setDictateState]\n );\n\n const handleError = useCallback(\n event => {\n dictateState !== IDLE && setDictateState(IDLE);\n (dictateState === DICTATING || dictateState === STARTING) && stopDictate();\n\n onError && onError(event);\n },\n [dictateState, onError, setDictateState, stopDictate]\n );\n\n useEffect(() => {\n window.addEventListener('pointerdown', resumeAudioContext);\n\n return () => window.removeEventListener('pointerdown', resumeAudioContext);\n }, [resumeAudioContext]);\n\n return (\n <DictateComposer\n lang={speechLanguage}\n onDictate={handleDictate}\n onError={handleError}\n onProgress={handleDictating}\n speechGrammarList={SpeechGrammarList}\n speechRecognition={SpeechRecognition}\n started={!disabled && (dictateState === STARTING || dictateState === DICTATING) && !numSpeakingActivities}\n />\n );\n};\n\nDictation.defaultProps = {\n onError: undefined\n};\n\nDictation.propTypes = {\n onError: PropTypes.func\n};\n\nexport default Dictation;\n","import { WebSpeechPonyfill } from 'botframework-webchat-api';\n\nimport useWebChatUIContext from './internal/useWebChatUIContext';\n\nexport default function useWebSpeechPonyfill(): [WebSpeechPonyfill] {\n return [useWebChatUIContext().webSpeechPonyfill];\n}\n","import useWebSpeechPonyfill from '../useWebSpeechPonyfill';\n\nexport default function useResumeAudioContext(): () => Promise<void> {\n const [{ resumeAudioContext }] = useWebSpeechPonyfill();\n\n return () => resumeAudioContext && resumeAudioContext();\n}\n","import useWebChatUIContext from './useWebChatUIContext';\n\nexport default function useSettableDictateAbortable() {\n const { dictateAbortable, setDictateAbortable } = useWebChatUIContext();\n\n return [dictateAbortable, setDictateAbortable];\n}\n","/* eslint no-console: \"off\" */\n\nimport { hooks } from 'botframework-webchat-api';\nimport PropTypes from 'prop-types';\nimport React, { FC } from 'react';\n\nimport ScreenReaderText from './ScreenReaderText';\nimport useStyleSet from './hooks/useStyleSet';\n\nconst { useLocalizer } = hooks;\n\ntype ErrorBoxProps = {\n error: Error;\n type?: string;\n};\n\nconst ErrorBox: FC<ErrorBoxProps> = ({ error, type }) => {\n const [{ errorBox: errorBoxStyleSet }] = useStyleSet();\n const localize = useLocalizer();\n\n return (\n <React.Fragment>\n <ScreenReaderText text={localize('ACTIVITY_ERROR_BOX_TITLE')} />\n <div className={errorBoxStyleSet}>\n <div>{type}</div>\n {/* The callstack between production and development are different, thus, we should hide it for visual regression test */}\n <details>\n <summary>{error.message}</summary>\n <pre>{error.stack}</pre>\n </details>\n </div>\n </React.Fragment>\n );\n};\n\nErrorBox.defaultProps = {\n type: ''\n};\n\nErrorBox.propTypes = {\n error: PropTypes.instanceOf(Error).isRequired,\n type: PropTypes.string\n};\n\nexport default ErrorBox;\n","export default function createOnEventShim<Name extends string = string, Target extends EventTarget = EventTarget>(\n target: Target\n) {\n const currentListeners: Map<Name, EventListener> = new Map();\n\n return {\n get(name: Name): EventListener | undefined {\n return currentListeners.get(name);\n },\n set(name: Name, listener: EventListener | undefined): void {\n const current = currentListeners.get(name);\n\n current && target.removeEventListener(name, current);\n\n if (listener) {\n target.addEventListener(name, listener);\n currentListeners.set(name, listener);\n } else {\n currentListeners.delete(name);\n }\n }\n };\n}\n","// Since this is a bypass, we will relax some ESLint rules.\n// All classes/properties defined here are in W3C Web Speech API.\n\n/* eslint class-methods-use-this: \"off\" */\n/* eslint getter-return: \"off\" */\n/* eslint max-classes-per-file: [\"error\", 4] */\n/* eslint no-empty-function: \"off\" */\n\nimport createOnEventShim from './private/createOnEventShim';\n\nclass SpeechSynthesisEvent extends Event {\n constructor(type, utterance) {\n super(type);\n\n this._utterance = utterance;\n }\n\n get charIndex() {\n return 0;\n }\n\n get elapsedTime() {\n return 0;\n }\n\n get name() {\n // It is expected to return `undefined`, keeping the function empty to reduce footprint.\n }\n\n get utterance() {\n return this._utterance;\n }\n}\n\nclass SpeechSynthesisUtterance extends EventTarget {\n constructor(text) {\n super();\n\n this._lang = 'en-US';\n this._pitch = 1;\n this._rate = 1;\n this._text = text;\n this._voice = null;\n this._volume = 1;\n\n this._shim = createOnEventShim(this);\n }\n\n get lang() {\n return this._lang;\n }\n\n set lang(value) {\n this._lang = value;\n }\n\n get pitch() {\n return this._pitch;\n }\n\n set pitch(value) {\n this._pitch = value;\n }\n\n get rate() {\n return this._rate;\n }\n\n set rate(value) {\n this._rate = value;\n }\n\n get text() {\n return this._text;\n }\n\n set text(value) {\n this._text = value;\n }\n\n get voice() {\n return this._voice;\n }\n\n set voice(value) {\n this._voice = value;\n }\n\n get volume() {\n return this._volume;\n }\n\n set volume(value) {\n this._volume = value;\n }\n\n get onboundary() {\n return this._shim.get('boundary');\n }\n\n set onboundary(value) {\n this._shim.set('boundary', value);\n }\n\n get onend() {\n return this._shim.get('end');\n }\n\n set onend(value) {\n this._shim.set('end', value);\n }\n\n get onerror() {\n return this._shim.get('error');\n }\n\n set onerror(value) {\n this._shim.set('error', value);\n }\n\n get onmark() {\n return this._shim.get('mark');\n }\n\n set onmark(value) {\n this._shim.set('mark', value);\n }\n\n get onpause() {\n return this._shim.get('pause');\n }\n\n set onpause(value) {\n this._shim.set('pause', value);\n }\n\n get onresume() {\n return this._shim.get('resume');\n }\n\n set onresume(value) {\n this._shim.set('resume', value);\n }\n\n get onstart() {\n return this._shim.get('start');\n }\n\n set onstart(value) {\n this._shim.set('start', value);\n }\n}\n\nclass SpeechSynthesisVoice {\n get default() {\n return true;\n }\n\n get lang() {\n return 'en-US';\n }\n\n get localService() {\n return true;\n }\n\n get name() {\n return 'English (US)';\n }\n\n get voiceURI() {\n return 'English (US)';\n }\n}\n\nclass SpeechSynthesis extends EventTarget {\n constructor() {\n super();\n\n this._shim = createOnEventShim(this);\n }\n\n get paused() {\n return false;\n }\n\n get pending() {\n return false;\n }\n\n get speaking() {\n return false;\n }\n\n cancel() {}\n\n getVoices() {\n return [new SpeechSynthesisVoice()];\n }\n\n pause() {\n throw new Error('pause is not implemented.');\n }\n\n resume() {\n throw new Error('resume is not implemented.');\n }\n\n speak(utterance) {\n utterance.dispatchEvent(new SpeechSynthesisEvent('start', utterance));\n utterance.dispatchEvent(new SpeechSynthesisEvent('end', utterance));\n }\n\n get onvoiceschanged() {\n return this._shim.get('voiceschanged');\n }\n\n set onvoiceschanged(value) {\n this._shim.set('voiceschanged', value);\n }\n}\n\nconst speechSynthesis = new SpeechSynthesis();\n\nexport { SpeechSynthesisEvent, SpeechSynthesisUtterance, SpeechSynthesisVoice, speechSynthesis };\n","import { hooks } from 'botframework-webchat-api';\nimport { useEffect } from 'react';\n\nimport { checkSupport as supportWorker } from '../../Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingWorker';\nimport { speechSynthesis } from './BypassSpeechSynthesisPonyfill';\nimport useWebSpeechPonyfill from '../useWebSpeechPonyfill';\n\nconst { useTrackDimension } = hooks;\n\nconst Tracker = () => {\n const [webSpeechPonyfill] = useWebSpeechPonyfill();\n const trackDimension = useTrackDimension();\n\n const speechRecognitionCapability = !!webSpeechPonyfill.SpeechRecognition;\n const speechSynthesisCapability =\n webSpeechPonyfill.speechSynthesis && webSpeechPonyfill.speechSynthesis !== speechSynthesis;\n\n useEffect(() => {\n trackDimension('capability:downscaleImage:workerType', supportWorker() ? 'web worker' : 'main');\n trackDimension('capability:renderer', 'html');\n\n // TODO: [P2] #2937 Differentiate between Cognitive Services and browser speech\n trackDimension('prop:speechRecognition', !!speechRecognitionCapability + '');\n trackDimension('prop:speechSynthesis', !!speechSynthesisCapability + '');\n }, [trackDimension, speechRecognitionCapability, speechSynthesisCapability]);\n\n return false;\n};\n\nexport default Tracker;\n","/* eslint object-shorthand: \"off\" */\n/* eslint prefer-destructuring: \"off\" */\n/* eslint prefer-arrow-callback: \"off\" */\n\n// This file is the entrypoint of Web Worker and is minimally transpiled through Babel.\n// Do not include any dependencies here because they will not be bundled.\n\n// This file will also get loaded by IE11, please make sure you hand-transpile it correctly.\n\nexport default function () {\n function blobToDataURL(blob) {\n return new Promise(function (resolve, reject) {\n const reader = new FileReader();\n\n reader.onerror = function (event) {\n reject(event.error || new Error(event.message));\n };\n\n reader.onloadend = function () {\n resolve(reader.result);\n };\n\n reader.readAsDataURL(blob);\n });\n }\n\n function keepAspectRatio(width, height, maxWidth, maxHeight) {\n if (width < maxWidth && height < maxHeight) {\n // Photo is smaller than both maximum dimensions, take it as-is\n return {\n height: height,\n width: width\n };\n }\n\n const aspectRatio = width / height;\n\n if (aspectRatio > maxWidth / maxHeight) {\n // Photo is wider than maximum dimension, downscale it based on maxWidth.\n return {\n height: maxWidth / aspectRatio,\n width: maxWidth\n };\n }\n\n // Photo is taller than maximum dimension, downscale it based on maxHeight.\n return {\n height: maxHeight,\n width: maxHeight * aspectRatio\n };\n }\n\n onmessage = function (event) {\n const data = event.data;\n const arrayBuffer = data.arrayBuffer;\n const maxHeight = data.maxHeight;\n const maxWidth = data.maxWidth;\n const type = data.type;\n const quality = data.quality;\n const port = event.ports[0];\n\n return Promise.resolve()\n .then(function () {\n return createImageBitmap(new Blob([arrayBuffer]), { resizeQuality: 'high' });\n })\n .then(function (imageBitmap) {\n const dimension = keepAspectRatio(imageBitmap.width, imageBitmap.height, maxWidth, maxHeight);\n const height = dimension.height;\n const width = dimension.width;\n const offscreenCanvas = new OffscreenCanvas(width, height);\n const context = offscreenCanvas.getContext('2d');\n\n context.drawImage(imageBitmap, 0, 0, width, height);\n\n // Firefox quirks: 68.0.1 call named OffscreenCanvas.convertToBlob as OffscreenCanvas.toBlob.\n const convertToBlob = (offscreenCanvas.convertToBlob || offscreenCanvas.toBlob).bind(offscreenCanvas);\n\n return convertToBlob({ type: type, quality: quality });\n })\n .then(function (blob) {\n return blobToDataURL(blob);\n })\n .then(function (dataURL) {\n return port.postMessage({ result: dataURL });\n })\n .catch(function (err) {\n console.error(err);\n\n port.postMessage({\n error: {\n message: err.message,\n stack: err.stack\n }\n });\n });\n };\n\n postMessage('ready');\n}\n","import workerFunction from './downscaleImageToDataURLUsingWorker.worker';\nimport { type WorkerJob, type WorkerReturnValue } from './WorkerJob';\n\nfunction createWorker(fn: Function | string): Promise<Worker> {\n const blob = new Blob([`(${fn})()`], { type: 'text/javascript' });\n const url = window.URL.createObjectURL(blob);\n\n return new Promise<Worker>((resolve, reject) => {\n const worker = new Worker(url);\n\n worker.onerror = ({ error, message }) => reject(error || new Error(message));\n worker.onmessage = ({ data }) => data === 'ready' && resolve(worker);\n }).finally(() => {\n window.URL.revokeObjectURL(url);\n });\n}\n\nlet workerPromise;\n\nasync function getWorker(): Promise<Worker> {\n let worker;\n\n if (workerPromise) {\n worker = await workerPromise;\n } else {\n workerPromise = createWorker(workerFunction);\n\n worker = await workerPromise;\n worker.addEventListener('error', () => {\n // Current worker errored out, will create a new worker next time.\n workerPromise = null;\n worker.terminate();\n });\n }\n\n return worker;\n}\n\n// We are using a lazy-check because:\n// 1. OffscreenCanvas.getContext has a toll\n// 2. Developers could bring polyfills\n\nconst checkSupportOffscreenCanvas = () => {\n const hasOffscreenCanvas =\n typeof window.OffscreenCanvas !== 'undefined' &&\n (typeof window.OffscreenCanvas.prototype.convertToBlob !== 'undefined' ||\n // Firefox quirks: 68.0.1 call named OffscreenCanvas.convertToBlob as OffscreenCanvas.toBlob.\n typeof (window.OffscreenCanvas.prototype as any).toBlob !== 'undefined');\n let isOffscreenCanvasSupportGetContext2D;\n\n if (hasOffscreenCanvas) {\n try {\n new OffscreenCanvas(1, 1).getContext('2d');\n isOffscreenCanvasSupportGetContext2D = true;\n } catch (err) {\n isOffscreenCanvasSupportGetContext2D = false;\n }\n }\n\n return typeof window.createImageBitmap !== 'undefined' && hasOffscreenCanvas && isOffscreenCanvasSupportGetContext2D;\n};\n\nlet checkSupportWebWorkerPromise;\n\nfunction checkSupportWebWorker(): Promise<boolean> {\n return (\n checkSupportWebWorkerPromise ||\n (checkSupportWebWorkerPromise = (async () => {\n if (typeof window.MessageChannel === 'undefined' || typeof window.Worker === 'undefined') {\n return false;\n }\n\n let worker;\n\n try {\n worker = await createWorker('function(){postMessage(\"ready\")}');\n } catch (err) {\n return false;\n }\n\n worker.terminate();\n\n return true;\n })())\n );\n}\n\nlet checkSupportPromise: Promise<boolean>;\n\nfunction checkSupport(): Promise<boolean> {\n return (\n checkSupportPromise ||\n (checkSupportPromise = (async () => {\n try {\n const results = await Promise.all([checkSupportOffscreenCanvas(), checkSupportWebWorker()]);\n\n return results.every(result => result);\n } catch (err) {\n return false;\n }\n })())\n );\n}\n\nexport default function downscaleImageToDataURLUsingWorker(\n blob: Blob | File,\n maxWidth: number,\n maxHeight: number,\n type: string,\n quality: number\n): Promise<URL> {\n return new Promise<URL>((resolve, reject) => {\n const { port1, port2 } = new MessageChannel();\n\n port1.onmessage = ({ data }: MessageEvent<WorkerReturnValue>) => {\n if ('error' in data) {\n const { message, stack } = data.error;\n\n const err = new Error(message);\n\n err.stack = stack;\n\n reject(err);\n } else {\n resolve(new URL(data.result));\n }\n\n port1.close();\n port2.close();\n };\n\n Promise.all([blob.arrayBuffer(), getWorker()]).then(([arrayBuffer, worker]) =>\n worker.postMessage({ arrayBuffer, maxHeight, maxWidth, quality, type } as WorkerJob, [arrayBuffer, port2])\n );\n });\n}\n\nexport { checkSupport };\n","import { ActivityMiddleware } from 'botframework-webchat-api';\nimport React from 'react';\n\nimport CarouselLayout from '../../Activity/CarouselLayout';\nimport StackedLayout from '../../Activity/StackedLayout';\n\nexport default function createCoreMiddleware(): ActivityMiddleware[] {\n return [\n () =>\n next =>\n (...args) => {\n const [{ activity }] = args;\n\n // TODO: [P4] Can we simplify these if-statement to something more readable?\n\n const { type } = activity;\n\n if (type === 'typing') {\n if (\n !(\n 'text' in activity &&\n typeof activity.text === 'string' &&\n activity.channelData.streamType !== 'informative'\n )\n ) {\n // If it is an informative message, hide it until we have a design for informative message.\n return false;\n }\n\n // Should show if this is useActiveTyping()[0][*].firstActivity, and render it with the content of lastActivity.\n return function renderStackedLayout(renderAttachment, props) {\n typeof props === 'undefined' &&\n console.warn(\n 'botframework-webchat: One or more arguments were missing after passing through the activity middleware. Please check your custom activity middleware to make sure it passes all arguments.'\n );\n\n return (\n <StackedLayout\n activity={{ ...activity, type: 'message' } as any}\n renderAttachment={renderAttachment}\n {...props}\n />\n );\n };\n }\n\n // Filter out activities that should not be visible\n if (type === 'conversationUpdate' || type === 'event' || type === 'invoke') {\n return false;\n } else if (type === 'message') {\n const { attachments, channelData, text } = activity;\n\n if (\n // Do not show postback\n channelData?.postBack ||\n // Do not show messageBack if displayText is undefined\n (channelData?.messageBack && !channelData.messageBack.displayText) ||\n // Do not show empty bubbles (no text and attachments, and not \"typing\")\n !(text || attachments?.length)\n ) {\n return false;\n }\n }\n\n if (type === 'message' || type === 'typing') {\n if (\n type === 'message' &&\n (activity.attachments?.length || 0) > 1 &&\n activity.attachmentLayout === 'carousel'\n ) {\n // The following line is not a React functional component, it's a render function called by useCreateActivityRenderer() hook.\n // The function signature need to be compatible with older version of activity middleware, which was:\n //\n // renderActivity(\n // renderAttachment: ({ activity, attachment }) => React.Element\n // ) => React.Element\n\n return function renderCarouselLayout(renderAttachment, props) {\n typeof props === 'undefined' &&\n console.warn(\n 'botframework-webchat: One or more arguments were missing after passing through the activity middleware. Please check your custom activity middleware to make sure it passes all arguments.'\n );\n\n return <CarouselLayout activity={activity} renderAttachment={renderAttachment} {...props} />;\n };\n }\n\n // The following line is not a React functional component, it's a render function called by useCreateActivityRenderer() hook.\n return function renderStackedLayout(renderAttachment, props) {\n typeof props === 'undefined' &&\n console.warn(\n 'botframework-webchat: One or more arguments were missing after passing through the activity middleware. Please check your custom activity middleware to make sure it passes all arguments.'\n );\n\n return <StackedLayout activity={activity} renderAttachment={renderAttachment} {...props} />;\n };\n }\n\n return next(...args);\n }\n ];\n}\n","import { hooks } from 'botframework-webchat-api';\nimport {\n Composer as FilmComposer,\n createBasicStyleSet as createBasicStyleSetForReactFilm,\n Flipper,\n useScrollBarWidth,\n useScrolling,\n useStyleSetClassNames as useReactFilmStyleSetClassNames\n} from 'react-film';\n\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, { memo, useMemo } from 'react';\n\nimport CarouselFilmStrip from './CarouselFilmStrip';\nimport useNonce from '../hooks/internal/useNonce';\nimport useStyleSet from '../hooks/useStyleSet';\nimport useStyleToEmotionObject from '../hooks/internal/useStyleToEmotionObject';\n\nconst { useDirection, useLocalizer } = hooks;\n\nconst ROOT_STYLE = {\n '&.webchat__carousel-layout': {\n overflow: 'hidden',\n position: 'relative'\n }\n};\n\nconst CarouselLayoutCore = ({\n activity,\n hideTimestamp,\n renderActivityStatus,\n renderAttachment,\n renderAvatar,\n showCallout\n}) => {\n const [{ carouselFlipper: carouselFlipperStyleSet }] = useStyleSet();\n const [{ root: filmRootClassName }] = useReactFilmStyleSetClassNames();\n const [direction] = useDirection();\n const [scrollBarWidth] = useScrollBarWidth();\n const [scrolling] = useScrolling();\n const leftSideFlipper = direction === 'rtl' ? '>' : '<';\n const localize = useLocalizer();\n const rightSideFlipper = direction === 'rtl' ? '<' : '>';\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n\n const nextAlt = localize('CAROUSEL_FLIPPER_NEXT_ALT');\n const previousAlt = localize('CAROUSEL_FLIPPER_PREVIOUS_ALT');\n\n const leftFlipperAriaLabel = direction === 'rtl' ? nextAlt : previousAlt;\n const rightFlipperAriaLabel = direction === 'rtl' ? previousAlt : nextAlt;\n\n return (\n <div\n className={classNames('webchat__carousel-layout', rootClassName, carouselFlipperStyleSet + '', filmRootClassName)}\n >\n <div className={classNames('react-film__main', { 'react-film__main--scrolling': scrolling })}>\n <CarouselFilmStrip\n activity={activity}\n hideTimestamp={hideTimestamp}\n renderActivityStatus={renderActivityStatus}\n renderAttachment={renderAttachment}\n renderAvatar={renderAvatar}\n showCallout={showCallout}\n />\n {scrollBarWidth !== '100%' && (\n <React.Fragment>\n <Flipper aria-label={leftFlipperAriaLabel} blurFocusOnClick={true} mode=\"left\">\n {leftSideFlipper}\n </Flipper>\n <Flipper aria-label={rightFlipperAriaLabel} blurFocusOnClick={true} mode=\"right\">\n {rightSideFlipper}\n </Flipper>\n </React.Fragment>\n )}\n </div>\n </div>\n );\n};\n\nCarouselLayoutCore.defaultProps = {\n hideTimestamp: false,\n renderActivityStatus: false,\n renderAvatar: false,\n showCallout: true\n};\n\nCarouselLayoutCore.propTypes = {\n activity: PropTypes.shape({\n attachments: PropTypes.array\n }).isRequired,\n hideTimestamp: PropTypes.bool,\n renderActivityStatus: PropTypes.oneOfType([PropTypes.oneOf([false]), PropTypes.func]),\n renderAttachment: PropTypes.func.isRequired,\n renderAvatar: PropTypes.oneOfType([PropTypes.oneOf([false]), PropTypes.func]),\n showCallout: PropTypes.bool\n};\n\nconst CarouselLayout = props => {\n const { activity: { attachments = [] } = {} } = props;\n const [direction] = useDirection();\n const [nonce] = useNonce();\n const filmStyleSet = useMemo(() => createBasicStyleSetForReactFilm({ cursor: null }), []);\n\n return (\n <FilmComposer dir={direction} nonce={nonce} numItems={attachments.length} styleSet={filmStyleSet}>\n <CarouselLayoutCore {...props} />\n </FilmComposer>\n );\n};\n\nCarouselLayout.defaultProps = {\n ...CarouselLayoutCore.defaultProps\n};\n\nCarouselLayout.propTypes = {\n ...CarouselLayoutCore.propTypes\n};\n\nexport default memo(CarouselLayout);\n","/* eslint complexity: [\"error\", 30] */\n\nimport { hooks } from 'botframework-webchat-api';\nimport { useItemContainerCallbackRef, useScrollableCallbackRef } from 'react-film';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nimport Bubble from './Bubble';\nimport CarouselFilmStripAttachment from './CarouselFilmStripAttachment';\nimport isZeroOrPositive from '../Utils/isZeroOrPositive';\nimport ScreenReaderText from '../ScreenReaderText';\nimport textFormatToContentType from '../Utils/textFormatToContentType';\nimport useStyleSet from '../hooks/useStyleSet';\nimport useStyleToEmotionObject from '../hooks/internal/useStyleToEmotionObject';\n\nconst { useAvatarForBot, useAvatarForUser, useDirection, useLocalizer, useStyleOptions } = hooks;\n\nconst ROOT_STYLE = {\n '&.webchat__carousel-filmstrip': {\n display: 'flex',\n flexDirection: 'column',\n MsOverflowStyle: 'none',\n overflowX: 'scroll',\n overflowY: 'hidden',\n position: 'relative', // This is to keep screen reader text in the destinated area.\n touchAction: 'manipulation',\n WebkitOverflowScrolling: 'touch',\n\n '&::-webkit-scrollbar': {\n display: 'none'\n },\n\n '& .webchat__carousel-filmstrip__alignment-pad': {\n flexShrink: 0\n },\n\n '& .webchat__carousel-filmstrip-attachment': {\n flex: 1\n },\n\n '& .webchat__carousel-filmstrip__attachments': {\n display: 'flex',\n listStyleType: 'none',\n margin: 0,\n padding: 0\n },\n\n '& .webchat__carousel-filmstrip__avatar': {\n flexShrink: 0\n },\n\n '& .webchat__carousel-filmstrip__avatar-gutter': {\n display: 'flex',\n flexDirection: 'column',\n flexShrink: 0\n },\n\n '& .webchat__carousel-filmstrip__complimentary': {\n display: 'flex'\n },\n\n '& .webchat__carousel-filmstrip__complimentary-content': {\n display: 'flex',\n flexGrow: 1,\n flexDirection: 'column'\n },\n\n '& .webchat__carousel-filmstrip__content': {\n display: 'flex',\n flexGrow: 1,\n flexDirection: 'column'\n },\n\n '& .webchat__carousel-filmstrip__filler': {\n flexGrow: 10000,\n flexShrink: 1\n },\n\n '& .webchat__carousel-filmstrip__main': {\n display: 'flex'\n },\n\n '& .webchat__carousel-filmstrip__message': {\n display: 'flex'\n },\n\n '& .webchat__carousel-filmstrip__nub-pad': {\n flexShrink: 0\n },\n\n '& .webchat__carousel-filmstrip__status': {\n display: 'flex'\n }\n }\n};\n\nconst CarouselFilmStrip = ({\n activity,\n className,\n hideTimestamp,\n renderActivityStatus,\n renderAttachment,\n renderAvatar,\n showCallout\n}) => {\n const [{ bubbleNubOffset, bubbleNubSize, bubbleFromUserNubOffset, bubbleFromUserNubSize }] = useStyleOptions();\n const [{ carouselFilmStrip: carouselFilmStripStyleSet }] = useStyleSet();\n const [{ initials: botInitials }] = useAvatarForBot();\n const [{ initials: userInitials }] = useAvatarForUser();\n const [direction] = useDirection();\n const localize = useLocalizer();\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n const showActivityStatus = typeof renderActivityStatus === 'function';\n\n const itemContainerCallbackRef = useItemContainerCallbackRef();\n const scrollableCallbackRef = useScrollableCallbackRef();\n\n const {\n attachments = [],\n channelData: { messageBack: { displayText: messageBackDisplayText } = {} } = {},\n from: { role } = {},\n text,\n textFormat\n } = activity;\n\n const activityDisplayText = messageBackDisplayText || text;\n const fromUser = role === 'user';\n\n const greetingAlt = (\n fromUser ? localize('ACTIVITY_YOU_SAID_ALT') : localize('ACTIVITY_BOT_SAID_ALT', botInitials || '')\n ).replace(/\\s{2,}/gu, ' ');\n\n const initials = fromUser ? userInitials : botInitials;\n const nubOffset = fromUser ? bubbleFromUserNubOffset : bubbleNubOffset;\n const nubSize = fromUser ? bubbleFromUserNubSize : bubbleNubSize;\n const otherInitials = fromUser ? botInitials : userInitials;\n const otherNubSize = fromUser ? bubbleNubSize : bubbleFromUserNubSize;\n\n const hasAvatar = initials || typeof initials === 'string';\n const hasOtherAvatar = otherInitials || typeof otherInitials === 'string';\n const hasNub = typeof nubSize === 'number';\n const hasOtherNub = typeof otherNubSize === 'number';\n const topAlignedCallout = isZeroOrPositive(nubOffset);\n\n const extraTrailing = !hasOtherAvatar && hasOtherNub; // This is for bot message with user nub and no user avatar. And vice versa.\n\n const showAvatar = showCallout && hasAvatar && !!renderAvatar;\n const showNub = showCallout && hasNub && (topAlignedCallout || !attachments.length);\n\n const hideNub = hasNub && !showNub;\n\n return (\n <div\n className={classNames(\n 'webchat__carousel-filmstrip',\n {\n 'webchat__carousel-filmstrip--extra-trailing': extraTrailing,\n 'webchat__carousel-filmstrip--hide-avatar': hasAvatar && !showAvatar,\n 'webchat__carousel-filmstrip--hide-nub': hideNub,\n 'webchat__carousel-filmstrip--no-message': !activityDisplayText,\n 'webchat__carousel-filmstrip--rtl': direction === 'rtl',\n 'webchat__carousel-filmstrip--show-avatar': showAvatar,\n 'webchat__carousel-filmstrip--show-nub': showNub,\n 'webchat__carousel-filmstrip--top-callout': topAlignedCallout\n },\n 'react-film__filmstrip',\n rootClassName,\n carouselFilmStripStyleSet + '',\n (className || '') + ''\n )}\n ref={scrollableCallbackRef}\n >\n <div className=\"webchat__carousel-filmstrip__main\">\n <div className=\"webchat__carousel-filmstrip__avatar-gutter\">{showAvatar && renderAvatar({ activity })}</div>\n <div className=\"webchat__carousel-filmstrip__content\">\n {!!activityDisplayText && (\n <div aria-roledescription=\"message\" className=\"webchat__carousel-filmstrip__message\" role=\"group\">\n <ScreenReaderText text={greetingAlt} />\n <Bubble\n className=\"webchat__carousel-filmstrip__bubble\"\n fromUser={fromUser}\n nub={showNub || ((hasAvatar || hasNub) && 'hidden')}\n >\n {renderAttachment({\n activity,\n attachment: {\n content: activityDisplayText,\n contentType: textFormatToContentType(textFormat)\n }\n })}\n </Bubble>\n <div className=\"webchat__carousel-filmstrip__filler\" />\n </div>\n )}\n <div className=\"webchat__carousel-filmstrip__complimentary\">\n <div className=\"webchat__carousel-filmstrip__nub-pad\" />\n <div className=\"webchat__carousel-filmstrip__complimentary-content c\">\n <ul\n className=\"webchat__carousel-filmstrip__attachments react-film__filmstrip__list\"\n ref={itemContainerCallbackRef}\n >\n {attachments.map((attachment, index) => (\n <CarouselFilmStripAttachment\n activity={activity}\n attachment={attachment}\n fromUser={fromUser}\n hasAvatar={hasAvatar}\n hideNub={hideNub}\n index={index}\n /* Attachments do not have an ID; it is always indexed by number */\n // eslint-disable-next-line react/no-array-index-key\n key={index}\n renderAttachment={renderAttachment}\n showAvatar={showAvatar}\n showNub={showNub}\n />\n ))}\n </ul>\n </div>\n </div>\n </div>\n <div className=\"webchat__carousel-filmstrip__alignment-pad\" />\n </div>\n {showActivityStatus && (\n <div className=\"webchat__carousel-filmstrip__status\">\n <div className=\"webchat__carousel-filmstrip__avatar-gutter\" />\n <div className=\"webchat__carousel-filmstrip__nub-pad\" />\n {renderActivityStatus({ hideTimestamp })}\n </div>\n )}\n </div>\n );\n};\n\nCarouselFilmStrip.defaultProps = {\n className: '',\n hideTimestamp: false,\n renderActivityStatus: false,\n renderAvatar: false,\n showCallout: false\n};\n\nCarouselFilmStrip.propTypes = {\n activity: PropTypes.shape({\n attachments: PropTypes.array,\n channelData: PropTypes.shape({\n messageBack: PropTypes.shape({\n displayText: PropTypes.string\n })\n }),\n from: PropTypes.shape({\n role: PropTypes.string.isRequired\n }).isRequired,\n text: PropTypes.string,\n textFormat: PropTypes.string,\n timestamp: PropTypes.string\n }).isRequired,\n className: PropTypes.string,\n hideTimestamp: PropTypes.bool,\n renderActivityStatus: PropTypes.oneOfType([PropTypes.oneOf([false]), PropTypes.func]),\n renderAttachment: PropTypes.func.isRequired,\n renderAvatar: PropTypes.oneOfType([PropTypes.oneOf([false]), PropTypes.func]),\n showCallout: PropTypes.bool\n};\n\nexport default CarouselFilmStrip;\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [-1, 0, 1, 2, 10] }] */\n\nimport { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, { FC, ReactNode, memo } from 'react';\n\nimport isZeroOrPositive from '../Utils/isZeroOrPositive';\nimport useStyleSet from '../hooks/useStyleSet';\nimport useStyleToEmotionObject from '../hooks/internal/useStyleToEmotionObject';\n\nconst { useDirection, useStyleOptions } = hooks;\n\nconst ROOT_STYLE = {\n '&.webchat__bubble': {\n display: 'flex',\n position: 'relative',\n\n '& .webchat__bubble__nub-pad': {\n flexShrink: 0\n },\n\n '& .webchat__bubble__content': {\n flexGrow: 1,\n\n // This is for hiding content outside of the bubble, for example, content outside of border radius\n overflow: 'hidden'\n }\n }\n};\n\nfunction acuteNubSVG(nubSize, strokeWidth, side, upSideDown = false) {\n if (typeof nubSize !== 'number') {\n return false;\n }\n\n const halfNubSize = nubSize / 2;\n const halfStrokeWidth = strokeWidth / 2;\n\n // Horizontally mirror the nub if it is from user\n const horizontalTransform =\n side === 'bot' ? '' : `translate(${halfNubSize} 0) scale(-1 1) translate(${-halfNubSize} 0)`;\n\n // Vertically mirror the nub if it is up-side-down\n const verticalTransform = upSideDown ? `translate(0 ${halfNubSize}) scale(1 -1) translate(0 ${-halfNubSize})` : '';\n\n const p1 = [nubSize, halfStrokeWidth].join(' ');\n const p2 = [strokeWidth, halfStrokeWidth].join(' ');\n const p3 = [nubSize + strokeWidth, nubSize + halfStrokeWidth].join(' ');\n\n return (\n <svg\n className=\"webchat__bubble__nub\"\n version=\"1.1\"\n viewBox={`0 0 ${nubSize} ${nubSize}`}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g transform={`${horizontalTransform} ${verticalTransform}`}>\n <path className=\"webchat__bubble__nub-outline\" d={`M${p1} L${p2} L${p3}`} />\n </g>\n </svg>\n );\n}\n\ntype BubbleProps = {\n 'aria-hidden'?: boolean;\n children?: ReactNode;\n className?: string;\n fromUser?: boolean;\n nub?: boolean | 'hidden';\n};\n\nconst Bubble: FC<BubbleProps> = ({ 'aria-hidden': ariaHidden, children, className, fromUser, nub }) => {\n const [{ bubble: bubbleStyleSet }] = useStyleSet();\n const [direction] = useDirection();\n const [\n {\n bubbleBorderWidth,\n bubbleFromUserBorderWidth,\n bubbleFromUserNubSize,\n bubbleNubSize,\n bubbleNubOffset,\n bubbleFromUserNubOffset\n }\n ] = useStyleOptions();\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n\n const { borderWidth, nubOffset, nubSize, side } = fromUser\n ? {\n borderWidth: bubbleFromUserBorderWidth,\n nubOffset: bubbleFromUserNubOffset,\n nubSize: bubbleFromUserNubSize,\n side: 'user'\n }\n : {\n borderWidth: bubbleBorderWidth,\n nubOffset: bubbleNubOffset,\n nubSize: bubbleNubSize,\n side: 'bot'\n };\n\n return (\n <div\n aria-hidden={ariaHidden}\n className={classNames(\n 'webchat__bubble',\n {\n 'webchat__bubble--from-user': fromUser,\n 'webchat__bubble--hide-nub': nub !== true && nub !== false,\n 'webchat__bubble--nub-on-top': isZeroOrPositive(nubOffset),\n 'webchat__bubble--rtl': direction === 'rtl',\n 'webchat__bubble--show-nub': nub === true\n },\n rootClassName,\n bubbleStyleSet + '',\n (className || '') + ''\n )}\n >\n <div className=\"webchat__bubble__nub-pad\" />\n <div className=\"webchat__bubble__content\">{children}</div>\n {nub === true && acuteNubSVG(nubSize, borderWidth, side, !isZeroOrPositive(nubOffset))}\n </div>\n );\n};\n\nBubble.defaultProps = {\n 'aria-hidden': undefined,\n children: undefined,\n className: '',\n fromUser: false,\n nub: false\n};\n\nBubble.propTypes = {\n 'aria-hidden': PropTypes.bool,\n children: PropTypes.any,\n className: PropTypes.string,\n fromUser: PropTypes.bool,\n nub: PropTypes.oneOf([true, false, 'hidden'])\n};\n\nBubble.displayName = 'Bubble';\n\nexport default memo(Bubble);\n","import { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nimport Bubble from './Bubble';\nimport ScreenReaderText from '../ScreenReaderText';\nimport useStyleSet from '../hooks/useStyleSet';\n\nconst { useDirection, useLocalizer } = hooks;\n\nconst CarouselFilmStripAttachment = ({\n activity,\n attachment,\n className,\n fromUser,\n hasAvatar,\n hideNub,\n index,\n renderAttachment,\n showAvatar,\n showNub\n}) => {\n const [direction] = useDirection();\n const localize = useLocalizer();\n const [{ carouselFilmStripAttachment: carouselFilmStripAttachmentStyleSet }] = useStyleSet();\n\n const attachedAlt = localize(fromUser ? 'ACTIVITY_YOU_ATTACHED_ALT' : 'ACTIVITY_BOT_ATTACHED_ALT');\n\n return (\n <li\n aria-roledescription=\"attachment\"\n className={classNames(\n 'webchat__carousel-filmstrip-attachment',\n {\n 'webchat__carousel-filmstrip-attachment--hide-avatar': hasAvatar && !showAvatar,\n 'webchat__carousel-filmstrip-attachment--hide-nub': hideNub,\n 'webchat__carousel-filmstrip-attachment--rtl': direction === 'rtl',\n 'webchat__carousel-filmstrip-attachment--show-avatar': showAvatar,\n 'webchat__carousel-filmstrip-attachment--show-nub': showNub\n },\n 'react-film__filmstrip__item',\n carouselFilmStripAttachmentStyleSet + '',\n (className || '') + ''\n )}\n role=\"listitem\"\n tabIndex={0}\n >\n <ScreenReaderText text={attachedAlt} />\n <Bubble fromUser={fromUser} key={index} nub={false}>\n {renderAttachment({ activity, attachment })}\n <div className=\"webchat__carousel-filmstrip-attachment--focus\" />\n </Bubble>\n </li>\n );\n};\n\nCarouselFilmStripAttachment.defaultProps = {\n className: ''\n};\n\nCarouselFilmStripAttachment.propTypes = {\n activity: PropTypes.shape({\n attachments: PropTypes.array,\n from: PropTypes.shape({\n role: PropTypes.string.isRequired\n }).isRequired,\n text: PropTypes.string,\n textFormat: PropTypes.string,\n timestamp: PropTypes.string\n }).isRequired,\n attachment: PropTypes.shape({\n content: PropTypes.any\n }).isRequired,\n className: PropTypes.string,\n fromUser: PropTypes.any.isRequired,\n hasAvatar: PropTypes.any.isRequired,\n hideNub: PropTypes.bool.isRequired,\n index: PropTypes.number.isRequired,\n renderAttachment: PropTypes.func.isRequired,\n showAvatar: PropTypes.bool.isRequired,\n showNub: PropTypes.bool.isRequired\n};\n\nexport default CarouselFilmStripAttachment;\n","/* eslint complexity: [\"error\", 50] */\n\nimport { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, { memo } from 'react';\nimport { ActivityDecorator } from 'botframework-webchat-api/decorator';\n\nimport Bubble from './Bubble';\nimport isZeroOrPositive from '../Utils/isZeroOrPositive';\nimport ScreenReaderText from '../ScreenReaderText';\nimport textFormatToContentType from '../Utils/textFormatToContentType';\nimport useStyleSet from '../hooks/useStyleSet';\nimport useStyleToEmotionObject from '../hooks/internal/useStyleToEmotionObject';\nimport useUniqueId from '../hooks/internal/useUniqueId';\n\nimport type { FC, ReactNode } from 'react';\nimport type { RenderAttachment } from 'botframework-webchat-api';\nimport type { WebChatActivity } from 'botframework-webchat-core';\n\nconst { useAvatarForBot, useAvatarForUser, useLocalizer, useStyleOptions } = hooks;\n\nconst ROOT_STYLE = {\n '&.webchat__stacked-layout': {\n position: 'relative', // This is to keep screen reader text in the destinated area.\n\n '& .webchat__stacked-layout__attachment-row, & .webchat__stacked-layout__main, & .webchat__stacked-layout__message-row, & .webchat__stacked-layout__status':\n {\n display: 'flex'\n },\n\n '& .webchat__stacked-layout__alignment-pad': {\n flexShrink: 0\n },\n\n '& .webchat__stacked-layout__attachment': {\n width: '100%'\n },\n\n '& .webchat__stacked-layout__avatar-gutter': {\n display: 'flex',\n flexDirection: 'column',\n flexShrink: 0\n },\n\n '&.webchat__stacked-layout--from-user': {\n '& .webchat__stacked-layout__attachment-row, & .webchat__stacked-layout__main, & .webchat__stacked-layout__message-row, & .webchat__stacked-layout__status':\n {\n flexDirection: 'row-reverse'\n }\n },\n\n '& .webchat__stacked-layout__content': {\n flex: 1,\n\n // This is for bottom aligning an avatar with a message bubble shorter than the avatar.\n // Related to the test at activityGrouping.avatarMiddleware.atBottom.js.\n display: 'flex',\n flexDirection: 'column',\n\n // This \"overflow: hidden\" is to make sure text overflow will get clipped correctly.\n // Related to the test at basic.js \"long URLs with keep-all\".\n overflow: 'hidden'\n },\n\n '& .webchat__stacked-layout__nub-pad': {\n flexShrink: 0\n }\n }\n};\n\ntype StackedLayoutProps = {\n activity: WebChatActivity;\n hideTimestamp?: boolean;\n renderActivityStatus?: (options: { hideTimestamp: boolean }) => ReactNode;\n renderAttachment?: RenderAttachment;\n renderAvatar?: false | (() => Exclude<ReactNode, boolean | null | undefined>);\n showCallout?: boolean;\n};\n\nconst StackedLayout: FC<StackedLayoutProps> = ({\n activity,\n hideTimestamp,\n renderActivityStatus,\n renderAttachment,\n renderAvatar,\n showCallout\n}) => {\n const [styleOptions] = useStyleOptions();\n const [{ initials: botInitials }] = useAvatarForBot();\n const [{ initials: userInitials }] = useAvatarForUser();\n const [{ stackedLayout: stackedLayoutStyleSet }] = useStyleSet();\n const ariaLabelId = useUniqueId('webchat__stacked-layout__id');\n const localize = useLocalizer();\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n\n const { bubbleNubOffset, bubbleNubSize, bubbleFromUserNubOffset, bubbleFromUserNubSize } = styleOptions;\n\n const isMessage = activity.type === 'message';\n\n const attachments = (isMessage && activity.attachments) || [];\n const fromUser = activity.from.role === 'user';\n const messageBackDisplayText: string = (isMessage && activity.channelData?.messageBack?.displayText) || '';\n\n const activityDisplayText = isMessage ? messageBackDisplayText || activity.text : '';\n const attachedAlt = localize(fromUser ? 'ACTIVITY_YOU_ATTACHED_ALT' : 'ACTIVITY_BOT_ATTACHED_ALT');\n const greetingAlt = (\n fromUser ? localize('ACTIVITY_YOU_SAID_ALT') : localize('ACTIVITY_BOT_SAID_ALT', botInitials || '')\n ).replace(/\\s{2,}/gu, ' ');\n\n const initials = fromUser ? userInitials : botInitials;\n const nubOffset = fromUser ? bubbleFromUserNubOffset : bubbleNubOffset;\n const nubSize = fromUser ? bubbleFromUserNubSize : bubbleNubSize;\n const otherInitials = fromUser ? botInitials : userInitials;\n const otherNubSize = fromUser ? bubbleNubSize : bubbleFromUserNubSize;\n\n const hasAvatar = initials || typeof initials === 'string';\n const hasOtherAvatar = otherInitials || typeof otherInitials === 'string';\n const hasNub = typeof nubSize === 'number';\n const hasOtherNub = typeof otherNubSize === 'number';\n const topAlignedCallout = isZeroOrPositive(nubOffset);\n\n const extraTrailing = !hasOtherAvatar && hasOtherNub; // This is for bot message with user nub and no user avatar. And vice versa.\n\n const showAvatar = showCallout && hasAvatar && !!renderAvatar;\n const showNub = showCallout && hasNub && (topAlignedCallout || !attachments?.length);\n\n return (\n <div\n aria-labelledby={activityDisplayText ? ariaLabelId : undefined}\n className={classNames('webchat__stacked-layout', rootClassName, stackedLayoutStyleSet + '', {\n 'webchat__stacked-layout--extra-trailing': extraTrailing,\n 'webchat__stacked-layout--from-user': fromUser,\n 'webchat__stacked-layout--hide-avatar': hasAvatar && !showAvatar,\n 'webchat__stacked-layout--hide-nub': hasNub && !showNub,\n 'webchat__stacked-layout--no-message': !activityDisplayText,\n 'webchat__stacked-layout--show-avatar': showAvatar,\n 'webchat__stacked-layout--show-nub': showNub,\n 'webchat__stacked-layout--top-callout': topAlignedCallout\n })}\n >\n <div className=\"webchat__stacked-layout__main\">\n <div className=\"webchat__stacked-layout__avatar-gutter\">{showAvatar && renderAvatar()}</div>\n <div className=\"webchat__stacked-layout__content\">\n {!!activityDisplayText && (\n <div\n aria-roledescription=\"message\"\n className=\"webchat__stacked-layout__message-row\"\n // Disable \"Prop `id` is forbidden on DOM Nodes\" rule because we are using the ID prop for accessibility.\n /* eslint-disable-next-line react/forbid-dom-props */\n id={ariaLabelId}\n role=\"group\"\n >\n <ScreenReaderText text={greetingAlt} />\n <Bubble\n className=\"webchat__stacked-layout__message\"\n fromUser={fromUser}\n nub={showNub || (hasAvatar || hasNub ? 'hidden' : false)}\n >\n <ActivityDecorator activity={activity}>\n {renderAttachment({\n activity,\n attachment: isMessage\n ? {\n content: activityDisplayText,\n contentType: textFormatToContentType(activity.textFormat)\n }\n : undefined\n })}\n </ActivityDecorator>\n </Bubble>\n </div>\n )}\n {attachments.map((attachment, index) => (\n <div\n aria-roledescription=\"attachment\"\n className={classNames('webchat__stacked-layout__attachment-row', {\n 'webchat__stacked-layout__attachment-row--first': !index\n })}\n /* attachments do not have an ID, it is always indexed by number */\n /* eslint-disable-next-line react/no-array-index-key */\n key={index}\n role=\"group\"\n >\n <ScreenReaderText text={attachedAlt} />\n <Bubble\n className=\"webchat__stacked-layout__attachment\"\n fromUser={fromUser}\n /* eslint-disable-next-line react/no-array-index-key */\n key={index}\n nub={hasAvatar || hasNub ? 'hidden' : false}\n >\n {renderAttachment({ activity, attachment })}\n </Bubble>\n </div>\n ))}\n </div>\n <div className=\"webchat__stacked-layout__alignment-pad\" />\n </div>\n {typeof renderActivityStatus === 'function' && (\n <div className=\"webchat__stacked-layout__status\">\n <div className=\"webchat__stacked-layout__avatar-gutter\" />\n <div className=\"webchat__stacked-layout__nub-pad\" />\n {renderActivityStatus({ hideTimestamp })}\n <div className=\"webchat__stacked-layout__alignment-pad\" />\n </div>\n )}\n </div>\n );\n};\n\nStackedLayout.defaultProps = {\n hideTimestamp: false,\n renderActivityStatus: () => false,\n renderAvatar: undefined,\n showCallout: true\n};\n\nStackedLayout.propTypes = {\n // PropTypes cannot fully capture TypeScript types.\n // @ts-ignore\n activity: PropTypes.shape({\n attachments: PropTypes.array,\n channelData: PropTypes.shape({\n messageBack: PropTypes.shape({\n displayText: PropTypes.string\n })\n }),\n from: PropTypes.shape({\n role: PropTypes.string.isRequired\n }).isRequired,\n text: PropTypes.string,\n textFormat: PropTypes.oneOf(['markdown', 'plain', 'xml']),\n timestamp: PropTypes.string,\n type: PropTypes.string.isRequired\n }).isRequired,\n hideTimestamp: PropTypes.bool,\n\n // PropTypes cannot validate precisely with its TypeScript counterpart.\n // @ts-ignore\n renderActivityStatus: PropTypes.oneOfType([PropTypes.oneOf([false]), PropTypes.func]),\n renderAttachment: PropTypes.func.isRequired,\n\n // PropTypes cannot validate precisely with its TypeScript counterpart.\n // @ts-ignore\n renderAvatar: PropTypes.oneOfType([PropTypes.oneOf([false]), PropTypes.func]),\n showCallout: PropTypes.bool\n};\n\nexport default memo(StackedLayout);\n","import { ActivityStatusMiddleware } from 'botframework-webchat-api';\nimport React from 'react';\n\nimport { SENDING, SEND_FAILED } from '../../types/internal/SendStatus';\nimport SendStatus from '../../ActivityStatus/SendStatus/SendStatus';\n\nexport default function createSendStatusMiddleware(): ActivityStatusMiddleware {\n return () =>\n next =>\n ({ activity, sendState, ...args }) => {\n switch (sendState) {\n case SENDING:\n case SEND_FAILED:\n return <SendStatus activity={activity} sendStatus={sendState} />;\n\n default:\n return next({ activity, sendState, ...args });\n }\n };\n}\n","import { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, { FC, useCallback } from 'react';\nimport type { WebChatActivity } from 'botframework-webchat-core';\n\nimport { SENDING, SEND_FAILED, SENT } from '../../types/internal/SendStatus';\nimport SendFailedRetry from './private/SendFailedRetry';\nimport useFocus from '../../hooks/useFocus';\nimport useStyleSet from '../../hooks/useStyleSet';\n\nimport type { SendStatus as SendStatusType } from '../../types/internal/SendStatus';\n\nconst { useLocalizer, usePostActivity } = hooks;\n\ntype SendStatusProps = {\n activity: WebChatActivity;\n sendStatus: SendStatusType;\n};\n\nconst SendStatus: FC<SendStatusProps> = ({ activity, sendStatus }) => {\n const [{ sendStatus: sendStatusStyleSet }] = useStyleSet();\n const focus = useFocus();\n const localize = useLocalizer();\n const postActivity = usePostActivity();\n\n const handleRetryClick = useCallback(() => {\n postActivity(activity);\n\n // After clicking on \"retry\", the button will be gone and focus will be lost (back to document.body)\n // We want to make sure the user stay inside Web Chat\n focus('sendBoxWithoutKeyboard');\n }, [activity, focus, postActivity]);\n const sendingText = localize('ACTIVITY_STATUS_SEND_STATUS_ALT_SENDING');\n\n return (\n <React.Fragment>\n <span className={classNames('webchat__activity-status', 'webchat__activity-status--sending', sendStatusStyleSet)}>\n {sendStatus === SENDING ? (\n sendingText\n ) : sendStatus === SEND_FAILED ? (\n <SendFailedRetry onRetryClick={handleRetryClick} />\n ) : (\n false\n )}\n </span>\n </React.Fragment>\n );\n};\n\nSendStatus.propTypes = {\n activity: PropTypes.any.isRequired,\n // PropTypes cannot fully capture TypeScript types.\n // @ts-ignore\n sendStatus: PropTypes.oneOf([SENDING, SEND_FAILED, SENT]).isRequired\n};\n\nexport default SendStatus;\n","import { hooks } from 'botframework-webchat-api';\nimport PropTypes from 'prop-types';\nimport React, { useCallback } from 'react';\n\nimport InlineMarkdown from '../../../Utils/InlineMarkdown';\n\nconst { useLocalizer } = hooks;\n\nconst MARKDOWN_REFERENCES = ['RETRY'];\n\nconst SendFailedRetry = ({ onRetryClick }) => {\n const handleReference = useCallback(({ data }) => data === 'RETRY' && onRetryClick(), [onRetryClick]);\n const localize = useLocalizer();\n\n const sendFailedText = localize('ACTIVITY_STATUS_SEND_FAILED_RETRY');\n\n return (\n <InlineMarkdown onReference={handleReference} references={MARKDOWN_REFERENCES}>\n {sendFailedText}\n </InlineMarkdown>\n );\n};\n\nSendFailedRetry.propTypes = {\n onRetryClick: PropTypes.func.isRequired\n};\n\nexport default SendFailedRetry;\n","/* eslint react/no-danger: \"off\" */\n\nimport { hooks } from 'botframework-webchat-api';\nimport { isForbiddenPropertyName } from 'botframework-webchat-core';\nimport PropTypes from 'prop-types';\nimport React, { useCallback, useMemo } from 'react';\nimport updateIn from 'simple-update-in';\n\nimport createCustomEvent from './createCustomEvent';\nimport randomId from './randomId';\nimport useInternalMarkdownIt from '../hooks/internal/useInternalMarkdownIt';\nimport useStyleToEmotionObject from '../hooks/internal/useStyleToEmotionObject';\nimport walkMarkdownTokens from './walkMarkdownTokens';\n\nconst { useStyleOptions } = hooks;\n\nfunction replaceAnchorWithButton(markdownTokens) {\n return walkMarkdownTokens(markdownTokens, markdownToken => {\n markdownToken = { ...markdownToken };\n\n switch (markdownToken.type) {\n case 'link_open':\n markdownToken.tag = 'button';\n markdownToken.attrs = [\n ...updateIn(\n markdownToken.attrs,\n [([name, value]) => name === 'href' && value.startsWith('#')],\n ([, value]) => ['data-markdown-href', value.substr(1)]\n ),\n ['type', 'button']\n ];\n break;\n\n case 'link_close':\n markdownToken.tag = 'button';\n break;\n\n default:\n break;\n }\n\n return markdownToken;\n });\n}\n\nconst InlineMarkdown = ({ children, onReference, references }) => {\n if (typeof children !== 'string') {\n console.warn('botframework-webchat: \"children\" prop passed to <InlineMarkdown> must be of type string.');\n children = '';\n }\n\n const [markdownIt] = useInternalMarkdownIt();\n const [{ accent }] = useStyleOptions();\n const styleToClassName = useStyleToEmotionObject();\n\n // We inlined the style here because this style is:\n // 1. Internal to Web Chat\n // 2. Not customizable from developers (other than setting `styleOptions.accent`)\n const className = useMemo(\n () =>\n styleToClassName({\n '& button[data-markdown-href]': {\n appearance: 'none',\n backgroundColor: 'transparent',\n border: 0,\n color: accent,\n cursor: 'pointer',\n fontFamily: 'inherit',\n fontSize: 'inherit',\n padding: 0\n },\n '@media screen and (forced-colors: active)': {\n '& button[data-markdown-href]': {\n color: 'LinkText',\n textDecoration: 'underline'\n }\n }\n }) + '',\n [accent, styleToClassName]\n );\n\n // Markdown-It only support references in uppercase.\n references = references.map(reference => reference.toUpperCase());\n\n const { hrefToRef, refToHref } = references.reduce(\n ({ hrefToRef, refToHref }, ref) => {\n const href = randomId();\n\n return {\n hrefToRef: { ...hrefToRef, [href]: ref },\n refToHref: { ...refToHref, [ref]: href }\n };\n },\n { hrefToRef: {}, refToHref: {} }\n );\n\n const html = useMemo(() => {\n const tree = markdownIt.parseInline(children, {\n references: references.reduce(\n (references, key) =>\n // Mitigated through denylisting.\n // eslint-disable-next-line security/detect-object-injection\n isForbiddenPropertyName(key) ? references : { ...references, [key]: { href: `#${refToHref[key]}` } },\n {}\n )\n });\n\n // Turn \"<a href=\"#retry\">Retry</a>\" into \"<button data-ref=\"retry\" type=\"button\">Retry</button>\"\n const updatedTree = replaceAnchorWithButton(tree);\n\n return { __html: markdownIt.renderer.render(updatedTree) };\n }, [children, refToHref, markdownIt, references]);\n\n const handleClick = useCallback(\n event => {\n event.stopPropagation();\n\n const href = event.target.getAttribute('data-markdown-href');\n\n href &&\n onReference &&\n onReference(\n createCustomEvent(\n 'reference',\n // Mitigated through denylisting.\n // eslint-disable-next-line security/detect-object-injection\n isForbiddenPropertyName(href) ? {} : { data: hrefToRef[href] }\n )\n );\n },\n [hrefToRef, onReference]\n );\n\n return <span className={className} dangerouslySetInnerHTML={html} onClick={handleClick} />;\n};\n\nInlineMarkdown.defaultProps = {\n children: '',\n onReference: undefined,\n references: []\n};\n\nInlineMarkdown.propTypes = {\n children: PropTypes.string,\n onReference: PropTypes.func,\n references: PropTypes.arrayOf(PropTypes.string)\n};\n\nexport default InlineMarkdown;\n","import { isForbiddenPropertyName } from 'botframework-webchat-core';\n\nexport default function createCustomEvent(name, eventInitDict) {\n let event;\n\n if (typeof CustomEvent === 'function') {\n event = new CustomEvent(name);\n } else {\n event = document.createEvent('Event');\n\n event.initEvent(name, true, true);\n }\n\n Object.entries(eventInitDict).forEach(([key, value]) => {\n if (!isForbiddenPropertyName(key)) {\n // Mitigated through denylisting.\n // eslint-disable-next-line security/detect-object-injection\n event[key] = value;\n }\n });\n\n return event;\n}\n","import useWebChatUIContext from './useWebChatUIContext';\n\nfunction useInternalMarkdownIt() {\n return useWebChatUIContext().internalMarkdownItState;\n}\n\nexport default useInternalMarkdownIt;\n","export default function walkMarkdownTokens(tokens, walker) {\n return tokens.map(token => {\n if (token) {\n const nextToken = walker(token);\n\n if (nextToken.children) {\n nextToken.children = walkMarkdownTokens(nextToken.children, walker);\n }\n\n return nextToken;\n }\n\n return token;\n });\n}\n","import { ActivityStatusMiddleware } from 'botframework-webchat-api';\nimport React, { Fragment } from 'react';\n\nimport AbsoluteTime from '../../ActivityStatus/AbsoluteTime';\nimport OthersActivityStatus from '../../ActivityStatus/OthersActivityStatus';\nimport SelfActivityStatus from '../../ActivityStatus/SelfActivityStatus';\n\nexport default function createTimestampMiddleware(): ActivityStatusMiddleware {\n return () =>\n () =>\n (...args) => {\n const [{ activity, hideTimestamp }] = args;\n\n if (typeof activity.timestamp === 'undefined') {\n // ActivityStatusMiddleware is using a legacy UI middleware pattern which does not supports returning `false`.\n // If the activity is sent and there is no timestamp, probably we will just not displaying the timestamp.\n // Or we somehow enforce all activities must have timestamp.\n return <Fragment />;\n } else if (hideTimestamp) {\n // If \"hideTimestamp\" is set, we will not render the visual timestamp. But continue to render the screen reader only version.\n return <AbsoluteTime hide={true} value={activity.timestamp} />;\n } else if (activity.from.role === 'bot') {\n return <OthersActivityStatus activity={activity} />;\n }\n\n return <SelfActivityStatus activity={activity} />;\n };\n}\n","import { hooks } from 'botframework-webchat-api';\nimport PropTypes from 'prop-types';\nimport React, { Fragment } from 'react';\n\nimport ScreenReaderText from '../ScreenReaderText';\n\nconst { useDateFormatter, useLocalizer } = hooks;\n\nconst AbsoluteTime = ({ hide, value }) => {\n const localize = useLocalizer();\n const formatDate = useDateFormatter();\n\n const absoluteTime = formatDate(value);\n\n return (\n <Fragment>\n <ScreenReaderText text={localize('ACTIVITY_STATUS_SEND_STATUS_ALT_SENT_AT', absoluteTime)} />\n {!hide && <span aria-hidden={true}>{absoluteTime}</span>}\n </Fragment>\n );\n};\n\nAbsoluteTime.defaultProps = {\n hide: false\n};\n\nAbsoluteTime.propTypes = {\n hide: PropTypes.bool,\n value: PropTypes.string.isRequired\n};\n\nexport default AbsoluteTime;\n","import {\n getOrgSchemaMessage,\n OrgSchemaAction,\n OrgSchemaProject,\n parseAction,\n parseClaim,\n warnOnce,\n type WebChatActivity\n} from 'botframework-webchat-core';\nimport classNames from 'classnames';\nimport React, { memo, useMemo, type ReactNode } from 'react';\n\nimport useStyleSet from '../hooks/useStyleSet';\nimport dereferenceBlankNodes from '../Utils/JSONLinkedData/dereferenceBlankNodes';\nimport Feedback from './private/Feedback/Feedback';\nimport Originator from './private/Originator';\nimport Slotted from './Slotted';\nimport Timestamp from './Timestamp';\n\ntype Props = Readonly<{ activity: WebChatActivity }>;\n\nconst warnRootLevelThings = warnOnce(\n 'Root-level things are being deprecated, please relate all things to `entities[@id=\"\"]` instead. This feature will be removed in 2025-03-06.'\n);\n\nconst OthersActivityStatus = memo(({ activity }: Props) => {\n const [{ sendStatus }] = useStyleSet();\n const { timestamp } = activity;\n const graph = useMemo(() => dereferenceBlankNodes(activity.entities || []), [activity.entities]);\n\n const messageThing = useMemo(() => getOrgSchemaMessage(graph), [graph]);\n\n const claimInterpreter = useMemo<OrgSchemaProject | undefined>(() => {\n try {\n if (messageThing) {\n return parseClaim((messageThing?.citation || [])[0])?.claimInterpreter;\n }\n\n const [firstClaim] = graph.filter(({ type }) => type === 'https://schema.org/Claim').map(parseClaim);\n\n if (firstClaim) {\n warnRootLevelThings();\n\n return firstClaim?.claimInterpreter;\n }\n\n const replyAction = parseAction(graph.find(({ type }) => type === 'https://schema.org/ReplyAction'));\n\n if (replyAction) {\n warnRootLevelThings();\n\n return replyAction?.provider;\n }\n } catch {\n // Intentionally left blank.\n }\n }, [graph, messageThing]);\n\n const feedbackActions = useMemo<ReadonlySet<OrgSchemaAction> | undefined>(() => {\n try {\n const reactActions = (messageThing?.potentialAction || []).filter(\n ({ '@type': type }) => type === 'LikeAction' || type === 'DislikeAction'\n );\n\n if (reactActions.length) {\n return Object.freeze(new Set(reactActions));\n }\n\n const voteActions = graph.filter(({ type }) => type === 'https://schema.org/VoteAction').map(parseAction);\n\n if (voteActions.length) {\n return Object.freeze(new Set(voteActions));\n }\n } catch {\n // Intentionally left blank.\n }\n }, [graph, messageThing]);\n\n return (\n <Slotted className={classNames('webchat__activity-status', sendStatus + '')}>\n {useMemo<ReactNode[]>(\n () =>\n [\n timestamp && <Timestamp key=\"timestamp\" timestamp={timestamp} />,\n claimInterpreter && <Originator key=\"originator\" project={claimInterpreter} />,\n feedbackActions?.size && <Feedback actions={feedbackActions} key=\"feedback\" />\n ].filter(Boolean),\n [claimInterpreter, timestamp, feedbackActions]\n )}\n </Slotted>\n );\n});\n\nOthersActivityStatus.displayName = 'OthersActivityStatus';\n\nexport default OthersActivityStatus;\n","import { hooks } from 'botframework-webchat-api';\nimport { type OrgSchemaAction } from 'botframework-webchat-core';\nimport React, { Fragment, memo, useEffect, useState, type PropsWithChildren } from 'react';\nimport { useRefFrom } from 'use-ref-from';\n\nimport FeedbackVoteButton from './private/VoteButton';\n\nconst { usePonyfill, usePostActivity } = hooks;\n\ntype Props = Readonly<\n PropsWithChildren<{\n actions: ReadonlySet<OrgSchemaAction>;\n }>\n>;\n\nconst DEBOUNCE_TIMEOUT = 500;\n\nconst Feedback = memo(({ actions }: Props) => {\n const [{ clearTimeout, setTimeout }] = usePonyfill();\n const [selectedAction, setSelectedAction] = useState<OrgSchemaAction | undefined>();\n const postActivity = usePostActivity();\n\n const postActivityRef = useRefFrom(postActivity);\n\n useEffect(() => {\n if (!selectedAction) {\n return;\n }\n\n const timeout = setTimeout(\n () =>\n // TODO: We should update this to use W3C Hydra.1\n postActivityRef.current({\n entities: [selectedAction],\n name: 'webchat:activity-status/feedback',\n type: 'event'\n } as any),\n DEBOUNCE_TIMEOUT\n );\n\n return () => clearTimeout(timeout);\n }, [clearTimeout, postActivityRef, selectedAction, setTimeout]);\n\n return (\n <Fragment>\n {Array.from(actions).map((action, index) => (\n <FeedbackVoteButton\n action={action}\n key={action['@id'] || index}\n onClick={setSelectedAction}\n pressed={selectedAction === action}\n />\n ))}\n </Fragment>\n );\n});\n\nFeedback.displayName = 'ActivityStatusFeedback';\n\nexport default Feedback;\n","import { onErrorResumeNext, parseVoteAction, type OrgSchemaAction } from 'botframework-webchat-core';\nimport React, { memo, useCallback, useMemo } from 'react';\nimport { useRefFrom } from 'use-ref-from';\n\nimport ThumbsButton from './ThumbButton';\n\ntype Props = Readonly<{\n action: OrgSchemaAction;\n onClick?: (action: OrgSchemaAction) => void;\n pressed: boolean;\n}>;\n\nconst FeedbackVoteButton = memo(({ action, onClick, pressed }: Props) => {\n const onClickRef = useRefFrom(onClick);\n const voteActionRef = useRefFrom(action);\n\n const direction = useMemo(() => {\n if (\n action['@type'] === 'DislikeAction' ||\n (action['@type'] === 'VoteAction' &&\n onErrorResumeNext(() => parseVoteAction(action))?.actionOption === 'downvote')\n ) {\n return 'down';\n }\n\n return 'up';\n }, [action]);\n\n const handleClick = useCallback(() => onClickRef.current?.(voteActionRef.current), [onClickRef, voteActionRef]);\n\n return <ThumbsButton direction={direction} onClick={handleClick} pressed={pressed} />;\n});\n\nFeedbackVoteButton.displayName = 'FeedbackVoteButton';\n\nexport default FeedbackVoteButton;\n","import { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport React, { memo } from 'react';\n\nimport ThumbButtonImage from './ThumbButton.Image';\nimport useStyleSet from '../../../../hooks/useStyleSet';\n\nconst { useLocalizer } = hooks;\n\ntype Props = Readonly<{\n direction: 'down' | 'up';\n onClick?: () => void;\n pressed?: boolean;\n}>;\n\nconst ThumbButton = memo(({ direction, onClick, pressed }: Props) => {\n const [{ thumbButton }] = useStyleSet();\n const localize = useLocalizer();\n\n const title = localize(direction === 'down' ? 'VOTE_DISLIKE_ALT' : 'VOTE_LIKE_ALT');\n\n return (\n <button\n aria-label={title}\n aria-pressed={pressed}\n className={classNames(\n 'webchat__thumb-button',\n { 'webchat__thumb-button--is-pressed': pressed },\n thumbButton + ''\n )}\n onClick={onClick}\n title={title}\n type=\"button\"\n >\n <ThumbButtonImage\n className={classNames('webchat__thumb-button__image', {\n 'webchat__thumb-button__image--is-down': direction === 'down'\n })}\n direction={direction}\n />\n <ThumbButtonImage\n className={classNames('webchat__thumb-button__image', 'webchat__thumb-button__image--is-filled', {\n 'webchat__thumb-button__image--is-down': direction === 'down'\n })}\n direction={direction}\n filled={true}\n />\n </button>\n );\n});\n\nThumbButton.displayName = 'ThumbButton';\n\nexport default ThumbButton;\n","import React, { memo } from 'react';\n\nimport ThumbDislike16Filled from './icons/ThumbDislike16Filled';\nimport ThumbDislike16Regular from './icons/ThumbDislike16Regular';\nimport ThumbLike16Filled from './icons/ThumbLike16Filled';\nimport ThumbLike16Regular from './icons/ThumbLike16Regular';\n\ntype Props = Readonly<{\n className?: string;\n direction: 'down' | 'up';\n filled?: boolean;\n}>;\n\nconst ThumbButtonImage = memo(({ className, direction, filled = false }: Props) =>\n direction === 'down' ? (\n filled ? (\n <ThumbDislike16Filled className={className} />\n ) : (\n <ThumbDislike16Regular className={className} />\n )\n ) : filled ? (\n <ThumbLike16Filled className={className} />\n ) : (\n <ThumbLike16Regular className={className} />\n )\n);\n\nThumbButtonImage.displayName = 'ThumbButtonImage';\n\nexport default ThumbButtonImage;\n","import React, { memo } from 'react';\n\ntype Props = Readonly<{ className?: string }>;\n\nconst ThumbDislike16Filled = memo(({ className }: Props) => (\n <svg className={className} fill=\"none\" height=\"16\" viewBox=\"0 0 16 16\" width=\"16\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M13.0939 4.61984C12.716 2.60391 10.6934 1.34358 8.71713 1.89254L3.76706 3.26756C3.03196 3.47175 2.47706 4.07638 2.33656 4.82627L2.11258 6.02165C1.94781 6.90105 2.5733 7.6693 3.26989 7.95815C3.5248 8.06386 3.81627 8.21111 4.1232 8.41574C5.80215 9.53503 6.60359 11.0523 7.13855 12.3413C7.23478 12.5731 7.32706 12.8106 7.41614 13.0399C7.56235 13.4162 7.69994 13.7703 7.83227 14.041C7.94336 14.2683 8.07685 14.4964 8.2515 14.6716C8.43773 14.8585 8.68676 14.9995 9.00016 14.9995C9.35735 14.9995 9.66579 14.8763 9.91159 14.6602C10.1473 14.453 10.3051 14.179 10.4137 13.8989C10.6282 13.3453 10.6952 12.648 10.7032 12.0058C10.7114 11.3524 10.6585 10.705 10.6045 10.2249C10.5955 10.1452 10.5865 10.0698 10.5776 9.99952H11.0903C12.6557 9.99952 13.836 8.57733 13.5475 7.03879L13.0939 4.61984Z\"\n fill=\"currentcolor\"\n />\n </svg>\n));\n\nThumbDislike16Filled.displayName = 'ThumbDislike16Filled';\n\nexport default ThumbDislike16Filled;\n","import React, { memo } from 'react';\n\ntype Props = Readonly<{ className?: string }>;\n\nconst ThumbDislike16Regular = memo(({ className }: Props) => (\n <svg className={className} fill=\"none\" height=\"16\" viewBox=\"0 0 16 16\" width=\"16\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M10.5776 9.99952C10.5944 10.133 10.6119 10.2848 10.6283 10.45C10.7019 11.1893 10.7593 12.2428 10.6146 13.1274C10.5427 13.5666 10.4137 14.0141 10.1727 14.3636C9.91609 14.7357 9.52604 14.9995 9.00016 14.9995C8.48357 14.9995 8.16907 14.6298 7.97616 14.3084C7.78384 13.9879 7.61527 13.553 7.44271 13.1078L7.42958 13.0739C6.88287 11.6637 6.13522 9.75708 4.1232 8.41574C3.81627 8.21111 3.5248 8.06386 3.26989 7.95815C2.5733 7.6693 1.94781 6.90105 2.11258 6.02165L2.33656 4.82627C2.47706 4.07638 3.03196 3.47175 3.76706 3.26756L8.71713 1.89254C10.6934 1.34358 12.716 2.60391 13.0939 4.61984L13.5475 7.03879C13.836 8.57733 12.6557 9.99952 11.0903 9.99952H10.5776ZM12.1111 4.80413C11.8411 3.36418 10.3964 2.46395 8.98478 2.85605L4.03471 4.23107C3.66715 4.33317 3.38971 4.63549 3.31945 5.01043L3.09548 6.20582C3.04235 6.48935 3.2566 6.87007 3.65293 7.03442C3.96222 7.16268 4.31198 7.33974 4.67791 7.58369C6.9648 9.10828 7.80648 11.2795 8.35387 12.6916L8.36197 12.7124C8.55151 13.2014 8.69067 13.5556 8.83359 13.7938C8.90275 13.909 8.95439 13.9644 8.98519 13.9886C8.99329 13.995 8.99862 13.9981 9.00124 13.9995C9.14311 13.9992 9.24643 13.9453 9.3495 13.7959C9.46849 13.6233 9.56579 13.3445 9.62769 12.966C9.75044 12.2154 9.70484 11.2689 9.63323 10.549C9.60484 10.2636 9.57314 10.0209 9.54862 9.85016C9.53637 9.76485 9.52595 9.69769 9.51867 9.65235L9.51029 9.60123L9.50819 9.58884L9.50772 9.58609C9.48227 9.44064 9.52236 9.29093 9.61735 9.17788C9.66884 9.11659 9.73358 9.06935 9.8056 9.03892C9.86646 9.01321 9.93252 8.99952 10.0002 8.99952H11.0903C12.0295 8.99952 12.7377 8.1462 12.5646 7.22308L12.1111 4.80413Z\"\n fill=\"currentcolor\"\n />\n </svg>\n));\n\nThumbDislike16Regular.displayName = 'ThumbDislike16Regular';\n\nexport default ThumbDislike16Regular;\n","import React, { memo } from 'react';\n\ntype Props = Readonly<{ className?: string }>;\n\nconst ThumbLike16Filled = memo(({ className }: Props) => (\n <svg className={className} fill=\"none\" height=\"16\" viewBox=\"0 0 16 16\" width=\"16\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M9.5806 1.0516C8.83006 0.843 8.24411 1.40248 8.03494 1.92332C7.79411 2.52303 7.58243 2.94395 7.32941 3.44707C7.17287 3.75833 7.00052 4.10106 6.79565 4.53704C6.32141 5.54625 5.84755 6.19347 5.5035 6.58154C5.33128 6.77579 5.19093 6.90585 5.09835 6.98435C5.05204 7.02362 5.01761 7.05005 4.99704 7.0652L4.9809 7.07684L3.109 8.18119C2.27244 8.67473 1.91142 9.69797 2.25304 10.6072L2.77304 11.9912C2.98944 12.5671 3.45891 13.0114 4.04591 13.1958L9.40179 14.8781C10.7365 15.2974 12.1555 14.5397 12.5497 13.1973L13.9139 8.55127C14.29 7.2705 13.3298 5.9878 11.9949 5.9878H10.6099C10.6759 5.76117 10.7434 5.50906 10.8047 5.24751C10.9361 4.68641 11.0478 4.04484 11.0375 3.51008C11.028 3.01293 10.9778 2.49126 10.7735 2.04807C10.5544 1.57258 10.1709 1.21566 9.5806 1.0516ZM4.9768 7.07969L4.97492 7.08097L4.9768 7.07969Z\"\n fill=\"currentcolor\"\n />\n </svg>\n));\n\nThumbLike16Filled.displayName = 'ThumbLike16Filled';\n\nexport default ThumbLike16Filled;\n","import React, { memo } from 'react';\n\ntype Props = Readonly<{ className?: string }>;\n\nconst ThumbLike16Regular = memo(({ className }: Props) => (\n <svg className={className} fill=\"none\" height=\"16\" viewBox=\"0 0 16 16\" width=\"16\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M8.03494 1.92332C8.24411 1.40248 8.83006 0.843 9.5806 1.0516C10.1709 1.21566 10.5544 1.57258 10.7735 2.04807C10.9778 2.49126 11.028 3.01293 11.0375 3.51008C11.0478 4.04484 10.9361 4.68641 10.8047 5.24751C10.7434 5.50906 10.6759 5.76117 10.6099 5.9878H11.9949C13.3298 5.9878 14.29 7.2705 13.9139 8.55127L12.5497 13.1973C12.1555 14.5397 10.7365 15.2974 9.40179 14.8781L4.04591 13.1958C3.45891 13.0114 2.98944 12.5671 2.77304 11.9912L2.25304 10.6072C1.91142 9.69797 2.27244 8.67473 3.109 8.18119L4.98089 7.07684C4.98462 7.07423 4.99002 7.07037 4.99704 7.0652C5.01761 7.05005 5.05204 7.02362 5.09835 6.98435C5.19093 6.90585 5.33128 6.77579 5.5035 6.58154C5.84755 6.19347 6.32141 5.54625 6.79565 4.53704C7.00052 4.10106 7.17287 3.75833 7.32941 3.44707C7.58243 2.94395 7.79411 2.52303 8.03494 1.92332ZM5.51946 7.91969C5.51378 7.92334 5.50805 7.9269 5.50224 7.93032L3.61713 9.04247C3.19885 9.28924 3.01834 9.80086 3.18915 10.2555L3.70914 11.6394C3.81735 11.9274 4.05208 12.1496 4.34558 12.2418L9.70146 13.9241C10.5023 14.1756 11.3537 13.721 11.5902 12.9156L12.9544 8.26953C13.1424 7.62915 12.6623 6.9878 11.9949 6.9878H9.92587C9.76349 6.9878 9.61122 6.90894 9.51751 6.77632C9.42381 6.64369 9.40035 6.47382 9.4546 6.32077C9.55458 6.03869 9.70672 5.54998 9.83103 5.01941C9.95711 4.48125 10.0456 3.93709 10.0377 3.52931C10.0287 3.061 9.97907 2.71335 9.86536 2.46667C9.76654 2.25227 9.61384 2.09874 9.31282 2.01508C9.26971 2.0031 9.21948 2.0066 9.15353 2.04989C9.08149 2.09718 9.00781 2.18417 8.96291 2.29598C8.70922 2.92772 8.46651 3.41157 8.19787 3.94711C8.04311 4.25564 7.87974 4.58133 7.7007 4.96233C7.18681 6.05594 6.66067 6.78372 6.25176 7.24494C6.04749 7.47534 5.87312 7.6385 5.74509 7.74707C5.68109 7.80133 5.62875 7.84188 5.59013 7.87034C5.57082 7.88456 5.55495 7.89575 5.54277 7.90411L5.5273 7.91456L5.52171 7.91823L5.51946 7.91969ZM4.97612 7.08018L4.97492 7.08097L4.97612 7.08018Z\"\n fill=\"currentcolor\"\n />\n </svg>\n));\n\nThumbLike16Regular.displayName = 'ThumbLike16Regular';\n\nexport default ThumbLike16Regular;\n","import { type OrgSchemaProject } from 'botframework-webchat-core';\nimport React, { memo } from 'react';\n\ntype Props = Readonly<{ project: OrgSchemaProject }>;\n\nconst Originator = memo(({ project }: Props) => {\n const { name, slogan, url } = project;\n\n const text = slogan || name;\n\n return url ? (\n <a\n className=\"webchat__activity-status__originator webchat__activity-status__originator--has-link\"\n href={url}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n {text}\n </a>\n ) : (\n <span className=\"webchat__activity-status__originator\">{text}</span>\n );\n});\n\nOriginator.displayName = 'Originator';\n\nexport default Originator;\n","import React, { Children, Fragment, memo, type PropsWithChildren } from 'react';\nimport classNames from 'classnames';\n\ntype Props = Readonly<PropsWithChildren<{ className?: string }>>;\n\nconst Slotted = memo(({ children, className }: Props) => (\n <span className={classNames('webchat__activity-status--slotted', className)}>\n {Children.map(children, (child, index) =>\n // TODO: We may be able to do this in pure CSS, say, :not(:first-child)::before { content: '|' }.\n index ? (\n <Fragment>\n <span className=\"webchat__activity-status__slot-pipe\" role=\"presentation\">\n {'|'}\n </span>\n {child}\n </Fragment>\n ) : (\n child\n )\n )}\n </span>\n));\n\nSlotted.displayName = 'SlottedActivityStatus';\n\nexport default Slotted;\n","import { hooks } from 'botframework-webchat-api';\nimport PropTypes from 'prop-types';\nimport React, { FC } from 'react';\n\nimport AbsoluteTime from './AbsoluteTime';\nimport RelativeTime from './private/RelativeTime';\n\nconst { useStyleOptions } = hooks;\n\ntype TimestampProps = {\n timestamp: string;\n};\n\nconst Timestamp: FC<TimestampProps> = ({ timestamp }) => {\n const [{ timestampFormat }] = useStyleOptions();\n\n return timestampFormat === 'relative' ? <RelativeTime value={timestamp} /> : <AbsoluteTime value={timestamp} />;\n};\n\nTimestamp.propTypes = {\n timestamp: PropTypes.string.isRequired\n};\n\nexport default Timestamp;\n","import { hooks } from 'botframework-webchat-api';\nimport PropTypes from 'prop-types';\nimport React, { Fragment } from 'react';\n\nimport ScreenReaderText from '../../ScreenReaderText';\nimport useForceRenderAtInterval from '../../hooks/internal/useForceRenderAtInterval';\n\nconst { useDateFormatter, useLocalizer, useRelativeTimeFormatter } = hooks;\n\nconst TIMER_INTERVAL = 60000;\n\nconst RelativeTime = ({ value }) => {\n const formatDate = useDateFormatter();\n const formatRelativeTime = useRelativeTimeFormatter();\n const localize = useLocalizer();\n\n useForceRenderAtInterval(value, TIMER_INTERVAL);\n\n return (\n <Fragment>\n <ScreenReaderText text={localize('ACTIVITY_STATUS_SEND_STATUS_ALT_SENT_AT', formatDate(value))} />\n <span aria-hidden={true}>{formatRelativeTime(value)}</span>\n </Fragment>\n );\n};\n\nRelativeTime.propTypes = {\n value: PropTypes.string.isRequired\n};\n\nexport default RelativeTime;\n","import { hooks } from 'botframework-webchat-api';\nimport { useCallback, useState } from 'react';\nimport random from 'math-random';\n\nimport useTimer from './useTimer';\n\nimport type { Dispatch, SetStateAction } from 'react';\nimport type { GlobalScopePonyfill } from 'botframework-webchat-core';\n\nconst { usePonyfill } = hooks;\n\n// The `nextTimer` function calculates the next absolute time that the timer should be fired based on the origin (original time received), interval, and current time.\n// If the origin is t=260, and we are currently at t=1000, nextTimer must return t=60260.\n// If the origin is t=260, and we are currently at t=60260 (exact landing), we must return t=120260, not t=60260.\n// This is for fixing bug #2103: https://github.com/microsoft/BotFramework-WebChat/issues/2103.\n\n// False positive: we are using `Date` as a type.\n// eslint-disable-next-line no-restricted-globals\nfunction nextTimer(origin: Date | number | string, interval: number, { Date }: GlobalScopePonyfill): number {\n const time = new Date(origin).getTime();\n const now = Date.now();\n\n return time > now ? time : now + interval - ((now - time) % interval);\n}\n\nexport default function useForceRenderAtInterval(\n // False positive: we are using `Date` as a type.\n // eslint-disable-next-line no-restricted-globals\n origin: Date | number | string,\n interval: number,\n fn: () => void\n): [number, Dispatch<SetStateAction<number>>] {\n const [ponyfill] = usePonyfill();\n const [timer, setTimer] = useState<number>(nextTimer(origin, interval, ponyfill));\n const handler = useCallback<() => void>(() => {\n fn && fn();\n\n // Chrome may fire the setTimeout callback 1 ms before its original schedule.\n // Thus, when we calculate the \"next\" value, it will have the same value as before.\n // Sending the same value to useTimer(), it will not do another schedule because the value did not change.\n // So, we are adding a bit randomness, so useTimer() should pick up the newer scheduled time.\n\n setTimer(nextTimer(origin, interval, ponyfill) + random());\n }, [fn, origin, interval, ponyfill]);\n\n useTimer(timer, handler);\n\n return [timer, setTimer];\n}\n","import { type WebChatActivity } from 'botframework-webchat-core';\nimport classNames from 'classnames';\nimport React, { memo } from 'react';\n\nimport Slotted from './Slotted';\nimport Timestamp from './Timestamp';\nimport useStyleSet from '../hooks/useStyleSet';\n\ntype Props = Readonly<{ activity: WebChatActivity }>;\n\nconst SelftActivityStatus = memo(({ activity }: Props) => {\n const [{ sendStatus }] = useStyleSet();\n const { timestamp } = activity;\n\n return timestamp ? (\n <Slotted className={classNames('webchat__activity-status', 'webchat__activity-status--self', sendStatus + '')}>\n <Timestamp timestamp={timestamp} />\n </Slotted>\n ) : null;\n});\n\nSelftActivityStatus.displayName = 'SelftActivityStatus';\n\nexport default SelftActivityStatus;\n","import createSendStatusMiddleware from './createSendStatusMiddleware';\nimport createTimestampMiddleware from './createTimestampMiddleware';\n\nimport type { ActivityStatusMiddleware } from 'botframework-webchat-api';\n\nexport default function createCoreMiddleware(): ActivityStatusMiddleware[] {\n return [createSendStatusMiddleware(), createTimestampMiddleware()];\n}\n","import { AttachmentForScreenReaderMiddleware } from 'botframework-webchat-api';\nimport React from 'react';\n\nimport AudioAttachment from './AudioAttachment';\nimport FileAttachment from './FileAttachment';\nimport ImageAttachment from './ImageAttachment';\nimport TextAttachment from './TextAttachment';\nimport VideoAttachment from './VideoAttachment';\n\nexport default function createCoreMiddleware(): AttachmentForScreenReaderMiddleware[] {\n return [\n () =>\n next =>\n (...args) => {\n const [\n {\n activity: { from: { role = undefined } = {} } = {},\n attachment,\n attachment: { contentType = undefined, contentUrl = undefined, thumbnailUrl = undefined } = {}\n }\n ] = args;\n\n const isText = /^text\\//u.test(contentType);\n\n return (isText ? !attachment.content : role === 'user' && !thumbnailUrl)\n ? () => <FileAttachment attachment={attachment} />\n : /^audio\\//u.test(contentType)\n ? () => <AudioAttachment />\n : /^image\\//u.test(contentType)\n ? () => <ImageAttachment />\n : /^video\\//u.test(contentType)\n ? () => <VideoAttachment />\n : contentUrl || contentType === 'application/octet-stream'\n ? () => <FileAttachment attachment={attachment} />\n : isText\n ? () => <TextAttachment attachment={attachment} />\n : next(...args);\n }\n ];\n}\n","import { hooks } from 'botframework-webchat-api';\nimport React from 'react';\n\nconst { useLocalizer } = hooks;\n\nconst AudioAttachment = () => {\n const localize = useLocalizer();\n\n const label = localize('ATTACHMENT_AUDIO');\n\n return <article>{label}</article>;\n};\n\nexport default AudioAttachment;\n","import { hooks } from 'botframework-webchat-api';\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nconst { useLocalizer } = hooks;\n\nconst FileAttachment = ({ attachment: { name = '' } = {} }) => {\n const localize = useLocalizer();\n\n const label = localize('ATTACHMENT_FILE', name);\n\n return <article>{label}</article>;\n};\n\nFileAttachment.propTypes = {\n attachment: PropTypes.shape({\n name: PropTypes.string.isRequired\n }).isRequired\n};\n\nexport default FileAttachment;\n","import { hooks } from 'botframework-webchat-api';\nimport React from 'react';\n\nconst { useLocalizer } = hooks;\n\nconst ImageAttachment = () => {\n const localize = useLocalizer();\n\n const label = localize('ATTACHMENT_IMAGE');\n\n return <article>{label}</article>;\n};\n\nexport default ImageAttachment;\n","import { hooks } from 'botframework-webchat-api';\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nconst { useLocalizer } = hooks;\n\nconst TextAttachment = ({ attachment: { content = '' } = {} }) => {\n const localize = useLocalizer();\n\n const label = localize('ATTACHMENT_TEXT', content);\n\n return <article>{label}</article>;\n};\n\nTextAttachment.propTypes = {\n attachment: PropTypes.shape({\n content: PropTypes.string.isRequired\n }).isRequired\n};\n\nexport default TextAttachment;\n","import { hooks } from 'botframework-webchat-api';\nimport React from 'react';\n\nconst { useLocalizer } = hooks;\n\nconst VideoAttachment = () => {\n const localize = useLocalizer();\n\n const label = localize('ATTACHMENT_VIDEO');\n\n return <article>{label}</article>;\n};\n\nexport default VideoAttachment;\n","import { AvatarMiddleware } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, { FC } from 'react';\n\nimport ImageAvatar from '../../Avatar/ImageAvatar';\nimport InitialsAvatar from '../../Avatar/InitialsAvatar';\nimport useStyleSet from '../../hooks/useStyleSet';\nimport useStyleToEmotionObject from '../../hooks/internal/useStyleToEmotionObject';\n\nconst ROOT_STYLE = {\n overflow: 'hidden',\n position: 'relative',\n\n '> *': {\n left: 0,\n position: 'absolute',\n top: 0\n }\n};\n\ntype DefaultAvatarProps = {\n 'aria-hidden'?: boolean;\n className?: string;\n fromUser: boolean;\n};\n\nconst DefaultAvatar: FC<DefaultAvatarProps> = ({ 'aria-hidden': ariaHidden, className, fromUser }) => {\n const [{ avatar: avatarStyleSet }] = useStyleSet();\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n\n return (\n <div\n aria-hidden={ariaHidden}\n className={classNames(\n 'webchat__defaultAvatar',\n { 'webchat__defaultAvatar--fromUser': fromUser },\n rootClassName,\n avatarStyleSet + '',\n (className || '') + ''\n )}\n >\n <InitialsAvatar fromUser={fromUser} />\n <ImageAvatar fromUser={fromUser} />\n </div>\n );\n};\n\nDefaultAvatar.defaultProps = {\n 'aria-hidden': true,\n className: ''\n};\n\nDefaultAvatar.propTypes = {\n 'aria-hidden': PropTypes.bool,\n className: PropTypes.string,\n fromUser: PropTypes.bool.isRequired\n};\n\nexport default function createCoreAvatarMiddleware(): AvatarMiddleware[] {\n return [\n () =>\n () =>\n ({ fromUser, styleOptions }) => {\n const { botAvatarImage, botAvatarInitials, userAvatarImage, userAvatarInitials } = styleOptions;\n\n if (fromUser ? userAvatarImage || userAvatarInitials : botAvatarImage || botAvatarInitials) {\n return () => <DefaultAvatar fromUser={fromUser} />;\n }\n\n return false;\n }\n ];\n}\n\nexport { DefaultAvatar };\n","import { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nimport CroppedImage from '../Utils/CroppedImage';\nimport useStyleSet from '../hooks/useStyleSet';\nimport useStyleToEmotionObject from '../hooks/internal/useStyleToEmotionObject';\n\nconst { useAvatarForBot, useAvatarForUser } = hooks;\n\nconst ROOT_STYLE = {\n '& .webchat__imageAvatar__image': {\n width: '100%'\n }\n};\n\nconst ImageAvatar = ({ fromUser }) => {\n const [{ image: avatarImageForBot }] = useAvatarForBot();\n const [{ image: avatarImageForUser }] = useAvatarForUser();\n const [{ imageAvatar: imageAvatarStyleSet }] = useStyleSet();\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n\n const avatarImage = fromUser ? avatarImageForUser : avatarImageForBot;\n\n return (\n !!avatarImage && (\n <div className={classNames('webchat__imageAvatar', rootClassName, imageAvatarStyleSet + '')}>\n <CroppedImage\n alt=\"\"\n className=\"webchat__imageAvatar__image\"\n height=\"100%\"\n src={fromUser ? avatarImageForUser : avatarImageForBot}\n width=\"100%\"\n />\n </div>\n )\n );\n};\n\nImageAvatar.defaultProps = {\n fromUser: false\n};\n\nImageAvatar.propTypes = {\n fromUser: PropTypes.bool\n};\n\nexport default ImageAvatar;\n","import { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nimport useStyleSet from '../hooks/useStyleSet';\nimport useStyleToEmotionObject from '../hooks/internal/useStyleToEmotionObject';\n\nconst { useAvatarForBot, useAvatarForUser } = hooks;\n\nconst ROOT_STYLE = {\n alignItems: 'center',\n display: 'flex',\n\n '& .webchat__initialsAvatar__initials': {\n justifyContent: 'center'\n }\n};\n\nconst InitialsAvatar = ({ fromUser }) => {\n const [{ initials: avatarInitialsForBot }] = useAvatarForBot();\n const [{ initials: avatarInitialsForUser }] = useAvatarForUser();\n const [{ initialsAvatar: initialsAvatarStyleSet }] = useStyleSet();\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n\n return (\n <div\n className={classNames(\n 'webchat__initialsAvatar',\n {\n 'webchat__initialsAvatar--fromUser': fromUser\n },\n rootClassName,\n initialsAvatarStyleSet + ''\n )}\n >\n <div className=\"webchat__initialsAvatar__initials\">{fromUser ? avatarInitialsForUser : avatarInitialsForBot}</div>\n </div>\n );\n};\n\nInitialsAvatar.defaultProps = {\n fromUser: false\n};\n\nInitialsAvatar.propTypes = {\n fromUser: PropTypes.bool\n};\n\nexport default InitialsAvatar;\n","import { ie11 } from '../../Utils/detectBrowser';\n\n// This code is adopted from sanitize-html/naughtyScheme.\n// sanitize-html is a dependency of Web Chat but the naughtScheme function is neither exposed nor reusable.\n// https://github.com/apostrophecms/sanitize-html/\nfunction getScheme(href) {\n // Browsers ignore character codes of 32 (space) and below in a surprising\n // number of situations. Start reading here:\n // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet#Embedded_tab\n\n /* eslint-disable-next-line no-control-regex */\n href = href.replace(/[\\x00-\\x20]+/gu, '');\n\n // Clobber any comments in URLs, which the browser might\n // interpret inside an XML data island, allowing\n // a javascript: URL to be snuck through\n href = href.replace(/<!--.*?-->/gu, '');\n\n // Case insensitive so we don't get faked out by JAVASCRIPT #1\n const matches = href.match(/^([a-zA-Z]+):/u);\n\n if (!matches) {\n // Protocol-relative URL or no scheme\n return;\n }\n\n return matches[1].toLowerCase();\n}\n\nconst ALLOWED_SCHEMES = ['data', 'http', 'https', 'ftp', 'mailto', 'sip', 'tel'];\n\nexport default function createDefaultCardActionMiddleware() {\n return [\n () =>\n next =>\n (...args) => {\n const [\n {\n cardAction: { type, value },\n getSignInUrl\n }\n ] = args;\n\n switch (type) {\n case 'call':\n case 'downloadFile':\n case 'openUrl':\n case 'playAudio':\n case 'playVideo':\n case 'showImage':\n if (ALLOWED_SCHEMES.includes(getScheme(value))) {\n if (ie11) {\n const newWindow = window.open();\n newWindow.opener = null;\n newWindow.location = value;\n } else {\n window.open(value, '_blank', 'noopener noreferrer');\n }\n } else {\n console.warn('botframework-webchat: Cannot open URL with disallowed schemes.', value);\n }\n\n break;\n\n case 'signin': {\n /**\n * @todo TODO: [P3] We should prime the URL into the OAuthCard directly, instead of calling getSessionId on-demand\n * This is to eliminate the delay between window.open() and location.href call\n */\n\n (async function () {\n const popup = window.open();\n const url = await getSignInUrl();\n\n if (['http', 'https'].includes(getScheme(url))) {\n popup.location.href = url;\n } else {\n console.warn('botframework-webchat: Cannot open URL with disallowed schemes.', url);\n\n popup.close();\n }\n })();\n\n break;\n }\n\n default:\n return next(...args);\n }\n }\n ];\n}\n","import { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nimport useStyleSet from '../../hooks/useStyleSet';\n\nconst { useDirection, useLocalizer, useStyleOptions } = hooks;\n\nconst ScrollToEndButton = ({ onClick }) => {\n const [{ scrollToEndButton: scrollToEndButtonStyleSet }] = useStyleSet();\n const [{ scrollToEndButtonBehavior }] = useStyleOptions();\n const [direction] = useDirection();\n const localize = useLocalizer();\n\n const text = localize(scrollToEndButtonBehavior === 'any' ? 'TRANSCRIPT_MORE_MESSAGES' : 'TRANSCRIPT_NEW_MESSAGES');\n\n return (\n <button\n aria-label={text}\n className={classNames(\n 'webchat__scroll-to-end-button',\n scrollToEndButtonStyleSet + '',\n direction === 'rtl' ? 'webchat__scroll-to-end-button--rtl' : ''\n )}\n onClick={onClick}\n tabIndex={0}\n type=\"button\"\n >\n {text}\n </button>\n );\n};\n\nScrollToEndButton.defaultProps = {\n onClick: undefined\n};\n\nScrollToEndButton.displayName = 'ScrollToEndButton';\n\nScrollToEndButton.propTypes = {\n onClick: PropTypes.func\n};\n\nexport default ScrollToEndButton;\n","import { ScrollToEndButtonMiddleware } from 'botframework-webchat-api';\n\nimport ScrollToEndButton from './ScrollToEndButton';\n\nexport default function createScrollToEndButtonMiddleware(): ScrollToEndButtonMiddleware[] {\n return [\n () =>\n () =>\n ({ atEnd, styleOptions: { scrollToEndButtonBehavior }, unread }) =>\n !scrollToEndButtonBehavior\n ? // Don't show the button when it is set to false.\n false\n : scrollToEndButtonBehavior === 'any'\n ? // Show when the scroll view is not at the end, regardless of number of unread activities.\n !atEnd && ScrollToEndButton\n : // Show when the scroll view is not at the end of the transcript, and there are new/unread activities.\n !atEnd && unread && ScrollToEndButton\n ];\n}\n","/* eslint react/prop-types: \"off\" */\n\nimport { ToastMiddleware } from 'botframework-webchat-api';\nimport React from 'react';\n\nimport BasicToast from '../BasicToast';\n\nfunction createToastMiddleware(): ToastMiddleware {\n return () =>\n () =>\n ({ notification }) => <BasicToast notification={notification} />;\n}\n\nexport default createToastMiddleware;\n","/* eslint react/forbid-dom-props: \"off\" */\n/* eslint react/no-danger: \"off\" */\n\nimport { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, { useCallback, useMemo } from 'react';\n\nimport DismissIcon from './Toast/DismissIcon';\nimport NotificationIcon from './Toast/NotificationIcon';\nimport randomId from './Utils/randomId';\nimport ScreenReaderText from './ScreenReaderText';\nimport useInternalRenderMarkdownInline from './hooks/internal/useInternalRenderMarkdownInline';\nimport useStyleSet from './hooks/useStyleSet';\nimport useStyleToEmotionObject from './hooks/internal/useStyleToEmotionObject';\n\nconst { useDismissNotification, useLocalizer } = hooks;\n\nconst ROOT_STYLE = {\n display: 'flex',\n\n '& .webchat__toast__text': {\n flex: 1\n }\n};\n\nconst BasicToast = ({ notification: { alt, id, level, message = '' } }) => {\n const [{ toast: toastStyleSet }] = useStyleSet();\n const contentId = useMemo(() => `webchat__toast__${randomId()}`, []);\n const localize = useLocalizer();\n const dismissNotification = useDismissNotification();\n const renderMarkdownInline = useInternalRenderMarkdownInline();\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n\n const handleDismiss = useCallback(() => dismissNotification(id), [dismissNotification, id]);\n const html = useMemo(() => ({ __html: renderMarkdownInline(message) }), [message, renderMarkdownInline]);\n\n return (\n <div\n aria-describedby={contentId}\n aria-label={localize('TOAST_TITLE_ALT')}\n className={classNames(\n 'webchat__toast',\n {\n 'webchat__toast--error': level === 'error',\n 'webchat__toast--info': level === 'info',\n 'webchat__toast--success': level === 'success',\n 'webchat__toast--warn': level === 'warn'\n },\n rootClassName,\n toastStyleSet + ''\n )}\n role=\"dialog\"\n >\n <div className=\"webchat__toast__iconBox\">\n <NotificationIcon className=\"webchat__toast__icon\" level={level} />\n </div>\n {!!alt && <ScreenReaderText text={alt} />}\n <div aria-hidden={!!alt} className=\"webchat__toast__text\" dangerouslySetInnerHTML={html} id={contentId} />\n <button\n aria-label={localize('TOAST_DISMISS_BUTTON')}\n className=\"webchat__toast__dismissButton\"\n onClick={handleDismiss}\n type=\"button\"\n >\n <div aria-hidden={true} className=\"webchat__toast__dismissButtonFocus\">\n <DismissIcon />\n </div>\n </button>\n </div>\n );\n};\n\nBasicToast.propTypes = {\n notification: PropTypes.shape({\n alt: PropTypes.string,\n id: PropTypes.string.isRequired,\n level: PropTypes.string.isRequired,\n message: PropTypes.string.isRequired\n }).isRequired\n};\n\nexport default BasicToast;\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nconst DismissIcon = ({ className }) => (\n <svg\n className={(className || '') + ''}\n focusable={false}\n height=\"14\"\n role=\"presentation\"\n viewBox=\"0 0 14 14\"\n width=\"14\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M7.71094 7L13.1016 12.3984L12.3984 13.1016L7 7.71094L1.60156 13.1016L0.898438 12.3984L6.28906 7L0.898438 1.60156L1.60156 0.898438L7 6.28906L12.3984 0.898438L13.1016 1.60156L7.71094 7Z\" />\n </svg>\n);\n\nDismissIcon.defaultProps = {\n className: undefined\n};\n\nDismissIcon.propTypes = {\n className: PropTypes.string\n};\n\nexport default DismissIcon;\n","import useWebChatUIContext from './useWebChatUIContext';\n\nfunction useInternalRenderMarkdownInline() {\n const { internalRenderMarkdownInline } = useWebChatUIContext();\n\n return internalRenderMarkdownInline;\n}\n\nexport default useInternalRenderMarkdownInline;\n","import { ToastMiddleware } from 'botframework-webchat-api';\n\nimport createToastMiddleware from '../../Toast/createToastMiddleware';\n\nfunction createCoreMiddleware(): ToastMiddleware[] {\n return [\n () =>\n next =>\n (...args) => {\n const [\n {\n notification: { id }\n }\n ] = args;\n\n // We are ignoring \"connectivitystatus\" notifications, we will render it using <BasicConnectivityStatus> instead.\n // If devs want to render it, they can add a middleware.\n return id !== 'connectivitystatus' && next(...args);\n },\n createToastMiddleware()\n ];\n}\n\nexport default createCoreMiddleware;\n","import { hooks, TypingIndicatorMiddleware } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport React from 'react';\n\nimport TypingAnimation from '../../Assets/TypingAnimation';\nimport useStyleSet from '../../hooks/useStyleSet';\n\nconst { useDirection, useLocalizer } = hooks;\n\nconst DotIndicator = () => {\n const [{ typingIndicator: typingIndicatorStyleSet }] = useStyleSet();\n const [direction] = useDirection();\n const localize = useLocalizer();\n\n return (\n <div className={classNames(typingIndicatorStyleSet + '', direction === 'rtl' && 'webchat__typing-indicator--rtl')}>\n <TypingAnimation aria-label={localize('TYPING_INDICATOR_ALT')} />\n </div>\n );\n};\n\n// TODO: [P4] Rename this file or the whole middleware, it looks either too simple or too comprehensive now\nexport default function createCoreMiddleware(): TypingIndicatorMiddleware[] {\n return [\n () =>\n () =>\n ({ visible }) =>\n visible && <DotIndicator />\n ];\n}\n","import { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport React from 'react';\n\nimport ScreenReaderText from '../ScreenReaderText';\nimport useStyleToEmotionObject from '../hooks/internal/useStyleToEmotionObject';\nimport useStyleSet from '../hooks/useStyleSet';\n\nconst { useDirection, useLocalizer } = hooks;\n\nconst ROOT_STYLE = {\n '&.webchat__typing-indicator.webchat__typing-indicator--rtl': { transform: 'scale(-1, 1)' }\n};\n\nconst TypingAnimation = () => {\n const [{ typingAnimation: typingAnimationStyleSet }] = useStyleSet();\n const [direction] = useDirection();\n const localize = useLocalizer();\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n\n return (\n <React.Fragment>\n <ScreenReaderText text={localize('TYPING_INDICATOR_ALT')} />\n <div\n aria-hidden={true}\n className={classNames(\n 'webchat__typing-indicator',\n {\n 'webchat__typing-indicator--rtl': direction === 'rtl'\n },\n rootClassName,\n typingAnimationStyleSet + ''\n )}\n />\n </React.Fragment>\n );\n};\n\nexport default TypingAnimation;\n","import { hooks, type ActivityComponentFactory } from 'botframework-webchat-api';\nimport type { WebChatActivity } from 'botframework-webchat-core';\nimport React, { useMemo, type ReactNode } from 'react';\n\nimport useMemoWithPrevious from '../../hooks/internal/useMemoWithPrevious';\nimport ActivityTreeContext from './private/Context';\nimport { ActivityWithRenderer, ReadonlyActivityTree } from './private/types';\nimport useActivitiesWithRenderer from './private/useActivitiesWithRenderer';\nimport useActivityTreeWithRenderer from './private/useActivityTreeWithRenderer';\nimport useActivityTreeContext from './private/useContext';\n\nimport type { ActivityTreeContextType } from './private/Context';\n\ntype ActivityTreeComposerProps = Readonly<{ children?: ReactNode | undefined }>;\n\nconst { useActivities, useCreateActivityRenderer, useGetActivitiesByKey, useGetKeyByActivity } = hooks;\n\nconst ActivityTreeComposer = ({ children }: ActivityTreeComposerProps) => {\n const existingContext = useActivityTreeContext(false);\n\n if (existingContext) {\n throw new Error('botframework-webchat internal: <ActivityTreeComposer> should not be nested.');\n }\n\n const [rawActivities] = useActivities();\n const getActivitiesByKey = useGetActivitiesByKey();\n const getKeyByActivity = useGetKeyByActivity();\n\n const activities = useMemo<readonly WebChatActivity[]>(() => {\n const activities: WebChatActivity[] = [];\n\n for (const activity of rawActivities) {\n // If an activity has multiple revisions, display the latest revision only at the position of the first revision.\n\n // \"Activities with same key\" means \"multiple revisions of same activity.\"\n const activitiesWithSameKey = getActivitiesByKey(getKeyByActivity(activity));\n\n // TODO: We may want to send all revisions of activity to the middleware so they can render UI to see previous revisions.\n activitiesWithSameKey[0] === activity && activities.push(activitiesWithSameKey[activitiesWithSameKey.length - 1]);\n }\n\n return Object.freeze(activities);\n }, [getActivitiesByKey, getKeyByActivity, rawActivities]);\n\n const createActivityRenderer: ActivityComponentFactory = useCreateActivityRenderer();\n\n const activitiesWithRenderer = useActivitiesWithRenderer(activities, createActivityRenderer);\n\n const activityTreeWithRenderer = useActivityTreeWithRenderer(activitiesWithRenderer);\n\n const flattenedActivityTreeWithRenderer = useMemoWithPrevious<Readonly<ActivityWithRenderer[]>>(\n prevFlattenedActivityTree => {\n const nextFlattenedActivityTree = Object.freeze(\n activityTreeWithRenderer.reduce<ActivityWithRenderer[]>(\n (intermediate, entriesWithSameSender) =>\n entriesWithSameSender.reduce<ActivityWithRenderer[]>(\n (intermediate, entriesWithSameSenderAndStatus) =>\n entriesWithSameSenderAndStatus.reduce<ActivityWithRenderer[]>((intermediate, entry) => {\n intermediate.push(entry);\n\n return intermediate;\n }, intermediate),\n intermediate\n ),\n []\n )\n );\n\n return nextFlattenedActivityTree.length === prevFlattenedActivityTree?.length &&\n nextFlattenedActivityTree.every((item, index) => item === prevFlattenedActivityTree[+index])\n ? prevFlattenedActivityTree\n : nextFlattenedActivityTree;\n },\n [activityTreeWithRenderer]\n );\n\n const contextValue: ActivityTreeContextType = useMemo(\n () => ({\n activityTreeWithRendererState: Object.freeze([activityTreeWithRenderer]) as readonly [ReadonlyActivityTree],\n flattenedActivityTreeWithRendererState: Object.freeze([flattenedActivityTreeWithRenderer]) as readonly [\n readonly ActivityWithRenderer[]\n ]\n }),\n [activityTreeWithRenderer, flattenedActivityTreeWithRenderer]\n );\n\n return <ActivityTreeContext.Provider value={contextValue}>{children}</ActivityTreeContext.Provider>;\n};\n\nexport default ActivityTreeComposer;\n","import { useEffect, useMemo, useRef } from 'react';\n\nimport type { DependencyList } from 'react';\n\nexport default function useMemoWithPrevious<T>(factory: (prevValue: T) => T, deps: DependencyList): T {\n const prevValueRef = useRef<T>();\n // We are building a `useMemo`-like hook, `deps` is passed as-is and `factory` is not one fo the dependencies.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = useMemo<T>(() => factory(prevValueRef.current), deps);\n\n useEffect(() => {\n prevValueRef.current = value;\n });\n\n return value;\n}\n","import { useMemo } from 'react';\nimport type { WebChatActivity } from 'botframework-webchat-core';\n\nimport type { ActivityWithRenderer } from './types';\nimport useMemoized from '../../../hooks/internal/useMemoized';\n\nexport default function useActivitiesWithRenderer(\n activities: readonly WebChatActivity[],\n createActivityRenderer\n): readonly ActivityWithRenderer[] {\n // Create a memoized context of the createActivityRenderer function.\n const createActivityRendererMemoized = useMemoized(\n (activity: WebChatActivity, nextVisibleActivity: WebChatActivity) =>\n createActivityRenderer({ activity, nextVisibleActivity }),\n [createActivityRenderer]\n );\n\n const entries = useMemo(() => {\n const activitiesWithRenderer: ActivityWithRenderer[] = [];\n let nextVisibleActivity: WebChatActivity;\n\n for (let index = activities.length - 1; index >= 0; index--) {\n const activity = activities[+index];\n const renderActivity = createActivityRendererMemoized(activity, nextVisibleActivity);\n\n if (renderActivity) {\n activitiesWithRenderer.splice(0, 0, {\n activity,\n renderActivity\n });\n\n nextVisibleActivity = activity;\n }\n }\n\n return Object.freeze(activitiesWithRenderer);\n }, [activities, createActivityRendererMemoized]);\n\n return entries;\n}\n","import { hooks } from 'botframework-webchat-api';\nimport { useMemo } from 'react';\n\nimport type { WebChatActivity } from 'botframework-webchat-core';\nimport intersectionOf from '../../../Utils/intersectionOf';\nimport removeInline from '../../../Utils/removeInline';\nimport type { ActivityWithRenderer, ReadonlyActivityTree } from './types';\n\nconst { useGroupActivities } = hooks;\n\nfunction validateAllEntriesTagged<T>(entries: readonly T[], bins: readonly (readonly T[])[]): boolean {\n return entries.every(entry => bins.some(bin => bin.includes(entry)));\n}\n\n// Activity tree is a multidimensional array, while activities is a 1D array.\n// - The first dimension of the array contains activities with same sender;\n// - The second dimension of the array contains activities with same status.\n\n// [\n// [\n// // Both messages are from bot and is sent as a batch, we will group them as an array.\n// 'Bot: Hello!'\n// 'Bot: What can I help today?'\n// ],\n// [\n// 'User: What is the weather?'\n// ],\n// [\n// 'Bot: Let me look it up... hold on.'\n// ],\n// [\n// // This message is in a different group because it is more than a few seconds apart from the previous message.\n// 'Bot: Here is the weather forecast.'\n// ]\n// ]\n\nfunction useActivityTreeWithRenderer(entries: readonly ActivityWithRenderer[]): ReadonlyActivityTree {\n const groupActivities = useGroupActivities();\n const entryMap: Map<WebChatActivity, ActivityWithRenderer> = useMemo(\n () => new Map(entries.map(entry => [entry.activity, entry])),\n [entries]\n );\n\n // We bin activities in 2 different ways:\n // - `activitiesBySender` is a 2D array containing activities with same sender\n // - `activitiesByStatus` is a 2D array containing activities with same status\n // Both arrays should contains all activities.\n\n const { entriesBySender, entriesByStatus } = useMemo<{\n entriesBySender: readonly (readonly ActivityWithRenderer[])[];\n entriesByStatus: readonly (readonly ActivityWithRenderer[])[];\n }>(() => {\n const visibleActivities = [...entryMap.keys()];\n\n const groupActivitiesResult = groupActivities({ activities: visibleActivities });\n\n const activitiesBySender = groupActivitiesResult?.sender || [];\n const activitiesByStatus = groupActivitiesResult?.status || [];\n\n const [entriesBySender, entriesByStatus] = [activitiesBySender, activitiesByStatus].map(bins =>\n bins.map(bin => bin.map(activity => entryMap.get(activity)))\n );\n\n if (!validateAllEntriesTagged(visibleActivities, activitiesBySender)) {\n console.warn(\n 'botframework-webchat: Not every activities are grouped in the \"sender\" property. Please fix \"groupActivitiesMiddleware\" and group every activities.'\n );\n }\n\n if (!validateAllEntriesTagged(visibleActivities, activitiesByStatus)) {\n console.warn(\n 'botframework-webchat: Not every activities are grouped in the \"status\" property. Please fix \"groupActivitiesMiddleware\" and group every activities.'\n );\n }\n\n return {\n entriesBySender,\n entriesByStatus\n };\n }, [entryMap, groupActivities]);\n\n // Create a tree of activities with 2 dimensions: sender, followed by status.\n\n const activityTree: ReadonlyActivityTree = useMemo(() => {\n const entriesPendingGrouping = [...entries];\n const activityTree: (readonly (readonly ActivityWithRenderer[])[])[] = [];\n\n while (entriesPendingGrouping.length) {\n let found: boolean;\n const entriesWithSameSender = entriesBySender.find(bin => bin.includes(entriesPendingGrouping[0]));\n const senderTree: (readonly ActivityWithRenderer[])[] = [];\n\n entriesWithSameSender?.forEach(entry => {\n const entriesWithSameStatus = entriesByStatus.find(bin => bin.includes(entry));\n\n const entriesWithSameSenderAndStatus = intersectionOf<ActivityWithRenderer>(\n entriesPendingGrouping,\n entriesWithSameSender,\n entriesWithSameStatus\n );\n\n if (entriesWithSameSenderAndStatus.length) {\n senderTree.push(Object.freeze(entriesWithSameSenderAndStatus));\n removeInline(entriesPendingGrouping, ...entriesWithSameSenderAndStatus);\n\n found = true;\n }\n });\n\n // If the entry is not grouped by the middleware, just put the entry in its own bin.\n found || senderTree.push(Object.freeze([entriesPendingGrouping.shift()]));\n\n activityTree.push(Object.freeze(senderTree));\n }\n\n // Assertion: All entries must be assigned to the activityTree.\n if (\n !entries.every(activity =>\n activityTree.some(activitiesWithSameSender =>\n activitiesWithSameSender.some(activitiesWithSameSenderAndStatus =>\n activitiesWithSameSenderAndStatus.includes(activity)\n )\n )\n )\n ) {\n console.warn('botframework-webchat internal: Not all visible activities are grouped in the activityTree.', {\n entries,\n activityTree\n });\n }\n\n return Object.freeze(activityTree);\n }, [entriesBySender, entriesByStatus, entries]);\n\n return activityTree;\n}\n\nexport type { ActivityWithRenderer };\n\nexport default useActivityTreeWithRenderer;\n","/**\n * Intersects 2 or more arrays and return an array of values which are common to all of them.\n */\nexport default function intersectionOf<T>(arg0: readonly T[], ...args: readonly (readonly T[])[]): T[] {\n return args.reduce<T[]>(\n (interim: T[], arg: readonly T[]) =>\n interim.reduce((intersection: T[], item: T) => {\n arg.includes(item) && intersection.push(item);\n\n return intersection;\n }, []),\n [...arg0]\n );\n}\n","import { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport React, { useCallback, useEffect, useMemo, useRef, useState, type PropsWithChildren } from 'react';\nimport { useRefFrom } from 'use-ref-from';\n\nimport useStyleToEmotionObject from '../../../hooks/internal/useStyleToEmotionObject';\nimport useUniqueId from '../../../hooks/internal/useUniqueId';\nimport useFocus from '../../../hooks/useFocus';\nimport useScrollToEnd from '../../../hooks/useScrollToEnd';\nimport SendBoxContext from './private/Context';\nimport { type ContextType, type SendError } from './private/types';\n\nconst { useConnectivityStatus, useLocalizer, usePonyfill, useSendBoxAttachments, useSendBoxValue, useSubmitSendBox } =\n hooks;\n\nconst SUBMIT_ERROR_MESSAGE_STYLE = {\n '&.webchat__submit-error-message': {\n // .sr-only - This component is intended to be invisible to the visual Web Chat user, but read by the AT when using a screen reader\n color: 'transparent',\n height: 1,\n overflow: 'hidden',\n position: 'absolute',\n // We need to set top: 0, otherwise, it will repro:\n // - Run NVDA\n // - Make the transcript long enough to show the scrollbar\n // - Press SHIFT-TAB, focus on upload button\n // - Press up arrow multiple times\n top: 0,\n whiteSpace: 'nowrap',\n width: 1\n }\n};\n\n// False positive: we are using `setTimeout` as a type.\n// eslint-disable-next-line no-restricted-globals\ntype Timeout = ReturnType<typeof setTimeout>;\n\nconst TIME_TO_QUEUE_ERROR_MESSAGE = 500;\nconst TIME_TO_RESET_ERROR_MESSAGE = 50;\n\n// This component is marked as internal because it is not fully implemented and is not ready to be consumed publicly.\n// When it is done, it should provide and replace all the functionalities we did in Redux, including but not limited to:\n\n// - Speech interims\n// - Maintain text box value\n// - Multiple <SendBoxComposer> in a single Web Chat instance\n// - Web devs should be able to put an individual send box instance into an activity\n// - The send box instance in the activity, should be separated from the bottommost send box\n// - The valued typed inside the activity, should be separated from the value typed into the bottommost send box\n\n// In the old days, we use Redux to keep the send box state.\n// However, when web devs put 2 send box on their page, it makes things complex because both send boxes will interact with each other.\n// We would rather have them separate. If web devs want them to interact with each other, they will do the wiring themselves.\n\ntype ErrorMessageStringMap = ReadonlyMap<SendError, string>;\n\n// TODO: [P2] Complete this component.\nconst SendBoxComposer = ({ children }: PropsWithChildren<{}>) => {\n const [{ clearTimeout, setTimeout }] = usePonyfill();\n const [attachments] = useSendBoxAttachments();\n const [connectivityStatus] = useConnectivityStatus();\n const [error, setError] = useState<SendError | false>(false);\n const [sendBoxValue] = useSendBoxValue();\n const apiSubmitSendBox = useSubmitSendBox();\n const focus = useFocus();\n const localize = useLocalizer();\n const scrollToEnd = useScrollToEnd();\n const styleToEmotionObject = useStyleToEmotionObject();\n const submitErrorMessageId = useUniqueId('webchat__send-box__error-message-id');\n const timeoutRef = useRef<readonly [Timeout, Timeout] | undefined>(undefined);\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 const focusRef = useRefFrom(focus);\n const scrollToEndRef = useRefFrom(scrollToEnd);\n const setErrorRef = useRef<typeof setError | undefined>(setError);\n const submitErrorMessageClassName = styleToEmotionObject(SUBMIT_ERROR_MESSAGE_STYLE) + '';\n const submitErrorMessageIdState = useMemo<readonly [string | undefined]>(\n () => Object.freeze([error ? submitErrorMessageId : undefined]) as readonly [string | undefined],\n [error, submitErrorMessageId]\n );\n\n setErrorRef.current = setError;\n\n const submitErrorRef = useRefFrom<'empty' | 'offline' | undefined>(\n connectivityStatus !== 'connected' && connectivityStatus !== 'reconnected'\n ? 'offline'\n : !sendBoxValue && !attachments.length\n ? 'empty'\n : undefined\n );\n\n const submit = useCallback<ContextType['submit']>(\n ({ setFocus } = {}) => {\n (setFocus === 'main' || setFocus === 'sendBox' || setFocus === 'sendBoxWithoutKeyboard') &&\n focusRef.current?.(setFocus === 'main' || setFocus === 'sendBox' ? setFocus : 'sendBoxWithoutKeyboard');\n\n const { current: submitError } = submitErrorRef;\n\n if (submitError) {\n timeoutRef.current && timeoutRef.current.forEach(clearTimeout);\n\n setErrorRef.current?.(false);\n\n timeoutRef.current = Object.freeze([\n setTimeout(() => setErrorRef.current?.(submitError), TIME_TO_RESET_ERROR_MESSAGE),\n setTimeout(() => setErrorRef.current?.(false), TIME_TO_QUEUE_ERROR_MESSAGE)\n ]) as readonly [Timeout, Timeout];\n } else {\n scrollToEndRef.current?.();\n apiSubmitSendBox();\n }\n },\n [apiSubmitSendBox, clearTimeout, focusRef, scrollToEndRef, setErrorRef, setTimeout, submitErrorRef, timeoutRef]\n );\n\n useEffect(\n // Prevent `setTimeout()` from firing after unmount.\n () => () => {\n setErrorRef.current = undefined;\n },\n [setErrorRef]\n );\n\n const context = useMemo(\n () => ({\n submit,\n submitErrorMessageIdState\n }),\n [submit, submitErrorMessageIdState]\n );\n\n return (\n <SendBoxContext.Provider value={context}>\n {children}\n <span\n className={classNames('webchat__submit-error-message', submitErrorMessageClassName)}\n // \"id\" is required for \"aria-errormessage\" as IDREF.\n // eslint-disable-next-line react/forbid-dom-props\n id={submitErrorMessageId}\n role=\"alert\"\n >\n {error ? errorMessageStringMap.get(error) : ''}\n </span>\n </SendBoxContext.Provider>\n );\n};\n\nexport default SendBoxComposer;\n","import { useCallback } from 'react';\n\nimport useWebChatUIContext from './internal/useWebChatUIContext';\n\nexport default function useScrollToEnd(): () => void {\n const { scrollToEndCallbacksRef } = useWebChatUIContext();\n\n return useCallback(\n () => scrollToEndCallbacksRef.current.forEach(callback => callback({ behavior: 'smooth' })),\n [scrollToEndCallbacksRef]\n );\n}\n","import { createContext } from 'react';\n\nimport type { ContextType } from './types';\n\nconst SendBoxContext = createContext<ContextType | undefined>(undefined);\n\nexport default SendBoxContext;\n","import React, { memo, type ReactNode, useCallback, useMemo, useState } from 'react';\n\nimport Context from './private/Context';\nimport ModalDialog from './private/Popover';\n\nimport { type ContextOf } from '../../types/ContextOf';\n\ntype ContextType = ContextOf<typeof Context>;\ntype RenderFunction = Parameters<ContextType['showModal']>[0];\ntype DialogInit = Exclude<Parameters<ContextType['showModal']>[1], undefined>;\n\ntype RenderFunctionAndDialogInit = Readonly<[RenderFunction, DialogInit | undefined]>;\n\ntype Props = Readonly<{ children?: ReactNode }>;\n\nconst ModalDialogComposer = memo(({ children }: Props) => {\n const [renderFunctionAndDialogInit, setRenderFunctionAndDialogInit] = useState<\n RenderFunctionAndDialogInit | undefined\n >();\n\n const close = useCallback(() => setRenderFunctionAndDialogInit(undefined), [setRenderFunctionAndDialogInit]);\n const showModal = useCallback<(render: RenderFunction, init?: DialogInit) => void>(\n (render: RenderFunction, init?: DialogInit) => setRenderFunctionAndDialogInit(Object.freeze([render, init])),\n [setRenderFunctionAndDialogInit]\n );\n\n const context = useMemo<ContextType>(() => Object.freeze({ close, showModal }), [close, showModal]);\n\n return (\n <Context.Provider value={context}>\n {children}\n {renderFunctionAndDialogInit && (\n <ModalDialog\n aria-label={renderFunctionAndDialogInit[1]?.['aria-label']}\n aria-labelledby={renderFunctionAndDialogInit[1]?.['aria-labelledby']}\n className={renderFunctionAndDialogInit[1]?.className}\n onDismiss={close}\n >\n {renderFunctionAndDialogInit[0]()}\n </ModalDialog>\n )}\n </Context.Provider>\n );\n});\n\nModalDialogComposer.displayName = 'ModalDialogComposer';\n\nexport default ModalDialogComposer;\n","import { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport React, { memo, type PropsWithChildren, useCallback, useEffect, useRef } from 'react';\n\nimport useStyleSet from '../../../hooks/useStyleSet';\n\nconst { useLocalizer } = hooks;\n\ntype Props = Readonly<\n PropsWithChildren<{\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n className?: string;\n onDismiss?: () => void;\n }>\n>;\n\nconst ModalDialog = memo(\n ({ 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, children, className, onDismiss }: Props) => {\n const [{ modalDialog: modalDialogStyleSet }] = useStyleSet();\n const dialogRef = useRef<HTMLDialogElement>(null);\n const localize = useLocalizer();\n\n const closeButtonAlt = localize('KEYBOARD_HELP_CLOSE_BUTTON_ALT');\n\n const handleCloseButtonClick = useCallback(() => dialogRef.current?.close(), [dialogRef]);\n\n useEffect(() => dialogRef.current?.showModal(), [dialogRef]);\n\n return (\n <dialog\n // When \"aria-labelledby\" is set, it must not set \"aria-label\".\n aria-label={!ariaLabelledBy ? ariaLabel : undefined}\n aria-labelledby={ariaLabelledBy}\n className={classNames('webchat__modal-dialog', className, modalDialogStyleSet + '')}\n onClose={onDismiss}\n open={false}\n ref={dialogRef}\n role=\"dialog\"\n >\n <div className=\"webchat__modal-dialog__box\">\n {/* The __scrollable layer is for hiding scrollbar at corners.\n Without this layer, the scrollbar will show and overflow the border-radius.\n This impact will be more visible if we temporarily set border-radius: 20px. */}\n <div className=\"webchat__modal-dialog__close-button-layout\">\n <button\n aria-label={closeButtonAlt}\n className=\"webchat__modal-dialog__close-button\"\n onClick={handleCloseButtonClick}\n type=\"button\"\n >\n <div className=\"webchat__modal-dialog__close-button-border\">\n <svg\n className=\"webchat__modal-dialog__close-button-image\"\n // \"focusable\" attribute is only available in IE11 and \"tabIndex={-1}\" does not work.\n focusable={false}\n role=\"presentation\"\n viewBox=\"0 0 2048 2048\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M2048 136l-888 888 888 888-136 136-888-888-888 888L0 1912l888-888L0 136 136 0l888 888L1912 0l136 136z\" />\n </svg>\n </div>\n </button>\n </div>\n <div className=\"webchat__modal-dialog__body\">{children}</div>\n </div>\n </dialog>\n );\n }\n);\n\nModalDialog.displayName = 'ModalDialog';\n\nexport default ModalDialog;\n","import { useContext } from 'react';\n\nimport Context from './private/Context';\n\nexport default function useTheme() {\n return useContext(Context);\n}\n","import type {\n ActivityMiddleware,\n ActivityStatusMiddleware,\n AttachmentForScreenReaderMiddleware,\n AttachmentMiddleware,\n AvatarMiddleware,\n CardActionMiddleware,\n GroupActivitiesMiddleware,\n ScrollToEndButtonMiddleware,\n SendBoxMiddleware,\n SendBoxToolbarMiddleware,\n StyleOptions,\n ToastMiddleware,\n TypingIndicatorMiddleware\n} from 'botframework-webchat-api';\nimport { createContext } from 'react';\n\nconst EMPTY_ARRAY = Object.freeze([] as const);\nconst EMPTY_OBJECT = Object.freeze({} as const);\n\nexport type ContextType = {\n activityMiddleware: readonly ActivityMiddleware[];\n activityStatusMiddleware: readonly ActivityStatusMiddleware[];\n attachmentForScreenReaderMiddleware: readonly AttachmentForScreenReaderMiddleware[];\n attachmentMiddleware: readonly AttachmentMiddleware[];\n avatarMiddleware: readonly AvatarMiddleware[];\n cardActionMiddleware: readonly CardActionMiddleware[];\n groupActivitiesMiddleware: readonly GroupActivitiesMiddleware[];\n scrollToEndButtonMiddleware: readonly ScrollToEndButtonMiddleware[];\n sendBoxMiddleware: readonly SendBoxMiddleware[];\n sendBoxToolbarMiddleware: readonly SendBoxToolbarMiddleware[];\n styleOptions: StyleOptions;\n toastMiddleware: readonly ToastMiddleware[];\n typingIndicatorMiddleware: readonly TypingIndicatorMiddleware[];\n};\n\nexport default createContext<ContextType>({\n activityMiddleware: EMPTY_ARRAY,\n activityStatusMiddleware: EMPTY_ARRAY,\n attachmentForScreenReaderMiddleware: EMPTY_ARRAY,\n attachmentMiddleware: EMPTY_ARRAY,\n avatarMiddleware: EMPTY_ARRAY,\n cardActionMiddleware: EMPTY_ARRAY,\n groupActivitiesMiddleware: EMPTY_ARRAY,\n scrollToEndButtonMiddleware: EMPTY_ARRAY,\n sendBoxMiddleware: EMPTY_ARRAY,\n sendBoxToolbarMiddleware: EMPTY_ARRAY,\n styleOptions: EMPTY_OBJECT,\n toastMiddleware: EMPTY_ARRAY,\n typingIndicatorMiddleware: EMPTY_ARRAY\n});\n","import { hooks, type SendBoxMiddleware, type SendBoxMiddlewareProps } from 'botframework-webchat-api';\nimport React from 'react';\n\nimport BasicSendBox from './BasicSendBox';\n\nconst { useStyleOptions } = hooks;\n\nconst HideableSendBox = ({ className }: SendBoxMiddlewareProps) => {\n const [{ hideSendBox }] = useStyleOptions();\n\n return hideSendBox ? null : <BasicSendBox className={className} />;\n};\n\nconst createMiddleware = (): readonly SendBoxMiddleware[] => Object.freeze([() => () => () => HideableSendBox]);\n\nexport default createMiddleware;\n","import { SendBoxToolbarMiddlewareProxy, hooks } from 'botframework-webchat-api';\nimport { Constants } from 'botframework-webchat-core';\nimport classNames from 'classnames';\nimport React, { FC } from 'react';\n\nimport useStyleToEmotionObject from '../hooks/internal/useStyleToEmotionObject';\nimport useStyleSet from '../hooks/useStyleSet';\nimport useWebSpeechPonyfill from '../hooks/useWebSpeechPonyfill';\nimport useErrorMessageId from '../providers/internal/SendBox/useErrorMessageId';\nimport DictationInterims from './DictationInterims';\nimport MicrophoneButton from './MicrophoneButton';\nimport SendButton from './SendButton';\nimport SuggestedActions from './SuggestedActions';\nimport TextBox from './TextBox';\n\nimport type { WebChatActivity } from 'botframework-webchat-core';\n\nconst {\n DictateState: { DICTATING, STARTING }\n} = Constants;\n\nconst { useActivities, useDirection, useDictateState, useStyleOptions } = hooks;\n\nconst ROOT_STYLE = {\n '&.webchat__send-box': {\n '& .webchat__send-box__button': { flexShrink: 0 },\n '& .webchat__send-box__dictation-interims': { flex: 10000 },\n '& .webchat__send-box__main': { display: 'flex' },\n '& .webchat__send-box__microphone-button': { flex: 1 },\n '& .webchat__send-box__text-box': { flex: 10000 }\n }\n};\n\n// TODO: [P3] We should consider exposing core/src/definitions and use it instead\nfunction activityIsSpeakingOrQueuedToSpeak(activity: WebChatActivity) {\n return activity.type === 'message' && activity.channelData?.speak;\n}\n\nfunction useSendBoxSpeechInterimsVisible(): [boolean] {\n const [activities] = useActivities();\n const [dictateState] = useDictateState();\n\n return [\n (dictateState === STARTING || dictateState === DICTATING) &&\n !activities.filter(activityIsSpeakingOrQueuedToSpeak).length\n ];\n}\n\ntype BasicSendBoxProps = Readonly<{\n className?: string;\n}>;\n\nconst BasicSendBox: FC<BasicSendBoxProps> = ({ className }) => {\n const [{ sendBoxButtonAlignment }] = useStyleOptions();\n const [{ sendBox: sendBoxStyleSet }] = useStyleSet();\n const [{ SpeechRecognition = undefined } = {}] = useWebSpeechPonyfill();\n const [direction] = useDirection();\n const [errorMessageId] = useErrorMessageId();\n const [speechInterimsVisible] = useSendBoxSpeechInterimsVisible();\n const styleToEmotionObject = useStyleToEmotionObject();\n\n const rootClassName = styleToEmotionObject(ROOT_STYLE) + '';\n\n const supportSpeechRecognition = !!SpeechRecognition;\n\n const buttonClassName = classNames('webchat__send-box__button', {\n 'webchat__send-box__button--align-bottom': sendBoxButtonAlignment === 'bottom',\n 'webchat__send-box__button--align-stretch': sendBoxButtonAlignment !== 'bottom' && sendBoxButtonAlignment !== 'top',\n 'webchat__send-box__button--align-top': sendBoxButtonAlignment === 'top'\n });\n\n return (\n <div\n aria-errormessage={errorMessageId}\n aria-invalid={!!errorMessageId}\n className={classNames('webchat__send-box', sendBoxStyleSet + '', rootClassName + '', (className || '') + '')}\n dir={direction}\n role=\"form\"\n >\n <SuggestedActions />\n <div className=\"webchat__send-box__main\">\n <SendBoxToolbarMiddlewareProxy className={buttonClassName} request={undefined} />\n {speechInterimsVisible ? (\n <DictationInterims className=\"webchat__send-box__dictation-interims\" />\n ) : (\n <TextBox className=\"webchat__send-box__text-box\" />\n )}\n {supportSpeechRecognition ? (\n <MicrophoneButton className={classNames(buttonClassName, 'webchat__send-box__microphone-button')} />\n ) : (\n <SendButton className={buttonClassName} />\n )}\n </div>\n </div>\n );\n};\n\nexport default BasicSendBox;\n\nexport { useSendBoxSpeechInterimsVisible };\n","import { useContext } from 'react';\n\nimport Context from './Context';\n\nimport type { ContextType } from './types';\n\nexport default function useSendBoxContext(): ContextType {\n const context = useContext(Context);\n\n if (!context) {\n throw new Error('botframework-webchat internal: This hook can only be used under <SendBoxComposer>.');\n }\n\n return context;\n}\n","import useSendBoxContext from './private/useContext';\n\n/**\n * Subscribes to the `IDREF` of the error message occurred when the user submit the send box.\n *\n * This `IDREF` is intended to be use as the value for `aria-errormessage` and `aria-invalid` attribute.\n *\n * For example, if the user is clicking on the send button without a message, we will read an alert saying \"cannot\n * send empty message.\" This `IDREF` will be the HTML element of the hidden alert element.\n *\n * If there are no errors when submitting the send box, the `IDREF` will be `undefined`.\n */\nexport default function useSubmitErrorMessageId(): readonly [string | undefined] {\n return useSendBoxContext().submitErrorMessageIdState;\n}\n","/* eslint react/no-array-index-key: \"off\" */\n\nimport { Constants } from 'botframework-webchat-core';\nimport { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, { FC } from 'react';\n\nimport useStyleSet from '../hooks/useStyleSet';\nimport useStyleToEmotionObject from '../hooks/internal/useStyleToEmotionObject';\n\nconst {\n DictateState: { DICTATING, STARTING, STOPPING }\n} = Constants;\n\nconst { useDictateInterims, useDictateState, useLocalizer } = hooks;\n\nconst ROOT_STYLE = {\n alignItems: 'center',\n display: 'flex'\n};\n\ntype DictationInterimsProps = {\n className?: string;\n};\n\nconst DictationInterims: FC<DictationInterimsProps> = ({ className }) => {\n const [dictateInterims] = useDictateInterims();\n const [dictateState] = useDictateState();\n const [{ dictationInterims: dictationInterimsStyleSet }] = useStyleSet();\n const localize = useLocalizer();\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n\n return dictateState === STARTING || dictateState === STOPPING ? (\n <p className={classNames(dictationInterimsStyleSet + '', rootClassName, (className || '') + '', 'status')}>\n {dictateState === STARTING && localize('SPEECH_INPUT_STARTING')}\n </p>\n ) : (\n dictateState === DICTATING &&\n (dictateInterims.length ? (\n <p className={classNames(dictationInterimsStyleSet + '', rootClassName, (className || '') + '', 'dictating')}>\n {dictateInterims.map((interim, index) => (\n <span key={index}>\n {interim}\n \n </span>\n ))}\n </p>\n ) : (\n <p className={classNames(dictationInterimsStyleSet + '', rootClassName, (className || '') + '', 'status')}>\n {localize('SPEECH_INPUT_LISTENING')}\n </p>\n ))\n );\n};\n\nDictationInterims.defaultProps = {\n className: ''\n};\n\nDictationInterims.propTypes = {\n className: PropTypes.string\n};\n\n// TODO: [P3] After speech started, when clicking on the transcript, it should\n// stop the dictation and allow the user to type-correct the transcript\n\nexport default DictationInterims;\n","// This is required for aria-controls.\n/* eslint react/forbid-dom-props: \"off\" */\n\nimport { hooks } from 'botframework-webchat-api';\nimport { Constants } from 'botframework-webchat-core';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport PropTypes from 'prop-types';\nimport React, { FC, useCallback, useState } from 'react';\n\nimport useStyleToEmotionObject from '../hooks/internal/useStyleToEmotionObject';\nimport useDictateAbortable from '../hooks/useDictateAbortable';\nimport useStyleSet from '../hooks/useStyleSet';\nimport useWebSpeechPonyfill from '../hooks/useWebSpeechPonyfill';\nimport MicrophoneIcon from './Assets/MicrophoneIcon';\nimport IconButton from './IconButton';\n\nconst { DictateState } = Constants;\n\nconst {\n useDictateInterims,\n useDictateState,\n useDisabled,\n useLocalizer,\n useSendBoxValue,\n useShouldSpeakIncomingActivity,\n useStartDictate,\n useStopDictate\n} = hooks;\n\nconst ROOT_STYLE = {\n display: 'flex',\n\n // .sr-only - This component is intended to be invisible to the visual Web Chat user, but read by the AT when using a screen reader\n\n '& > .sr-only': {\n color: 'transparent',\n height: 1,\n left: -10000,\n overflow: 'hidden',\n position: 'absolute',\n top: 0,\n whiteSpace: 'nowrap',\n width: 1\n }\n};\n\nfunction useMicrophoneButtonClick(): () => void {\n const [, setSendBox] = useSendBoxValue();\n const [, setShouldSpeakIncomingActivity] = useShouldSpeakIncomingActivity();\n const [dictateInterims] = useDictateInterims();\n const [dictateState] = useDictateState();\n const [webSpeechPonyfill] = useWebSpeechPonyfill();\n const startDictate = useStartDictate();\n const stopDictate = useStopDictate();\n\n const { speechSynthesis, SpeechSynthesisUtterance } = webSpeechPonyfill || {};\n\n const [primeSpeechSynthesis] = useState(() =>\n memoize((speechSynthesis, SpeechSynthesisUtterance) => {\n if (speechSynthesis && SpeechSynthesisUtterance) {\n const utterance = new SpeechSynthesisUtterance('');\n\n [utterance.voice] = speechSynthesis.getVoices();\n speechSynthesis.speak(utterance);\n }\n })\n );\n\n // TODO: [P2] We should revisit this function later\n // The click() logic seems local to the component, but may not be generalized across all implementations.\n return useCallback(() => {\n if (dictateState === DictateState.WILL_START) {\n setShouldSpeakIncomingActivity(false);\n } else if (dictateState === DictateState.DICTATING) {\n stopDictate();\n setSendBox(dictateInterims.join(' '));\n } else {\n setShouldSpeakIncomingActivity(false);\n startDictate();\n }\n\n primeSpeechSynthesis(speechSynthesis, SpeechSynthesisUtterance);\n }, [\n dictateInterims,\n dictateState,\n primeSpeechSynthesis,\n setSendBox,\n setShouldSpeakIncomingActivity,\n speechSynthesis,\n SpeechSynthesisUtterance,\n startDictate,\n stopDictate\n ]);\n}\n\nfunction useMicrophoneButtonDisabled(): [boolean] {\n const [abortable] = useDictateAbortable();\n const [dictateState] = useDictateState();\n const [disabled] = useDisabled();\n\n return [\n disabled ||\n dictateState === DictateState.STARTING ||\n dictateState === DictateState.STOPPING ||\n (dictateState === DictateState.DICTATING && !abortable)\n ];\n}\n\ntype MicrophoneButtonProps = {\n className?: string;\n};\n\nconst MicrophoneButton: FC<MicrophoneButtonProps> = ({ className }) => {\n const [{ microphoneButton: microphoneButtonStyleSet }] = useStyleSet();\n const [dictateState] = useDictateState();\n const [disabled] = useMicrophoneButtonDisabled();\n const click = useMicrophoneButtonClick();\n const localize = useLocalizer();\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n\n const dictating = dictateState === DictateState.DICTATING;\n\n return (\n <div\n aria-controls=\"webchatSendBoxMicrophoneButton\"\n className={classNames(\n 'webchat__microphone-button',\n { 'webchat__microphone-button--dictating': dictating },\n microphoneButtonStyleSet + '',\n rootClassName,\n (className || '') + ''\n )}\n >\n <IconButton\n alt={localize('TEXT_INPUT_SPEAK_BUTTON_ALT')}\n className=\"webchat__microphone-button__button\"\n disabled={disabled}\n onClick={click}\n >\n <MicrophoneIcon className=\"webchat__microphone-button__icon\" />\n </IconButton>\n <div aria-live=\"polite\" className=\"sr-only\" id=\"webchatSendBoxMicrophoneButton\" role=\"status\">\n {localize(dictating ? 'SPEECH_INPUT_MICROPHONE_BUTTON_OPEN_ALT' : 'SPEECH_INPUT_MICROPHONE_BUTTON_CLOSE_ALT')}\n </div>\n </div>\n );\n};\n\nMicrophoneButton.defaultProps = {\n className: ''\n};\n\nMicrophoneButton.propTypes = {\n className: PropTypes.string\n};\n\nexport default MicrophoneButton;\n\nexport { useMicrophoneButtonClick, useMicrophoneButtonDisabled };\n","import useSettableDictateAbortable from './internal/useSettableDictateAbortable';\n\nexport default function useDictateAbortable(): [boolean] {\n // We are only exporting a read-only version of dictateAbortable.\n const [dictateAbortable] = useSettableDictateAbortable();\n\n return [dictateAbortable];\n}\n","import React from 'react';\n\nconst MicrophoneIcon = ({ className }) => (\n <svg className={className} focusable={false} height={28} role=\"presentation\" viewBox=\"0 0 34.75 46\" width={28}>\n <path\n className=\"a\"\n d=\"M29.75,23v6.36a7,7,0,0,1-.56,2.78,7.16,7.16,0,0,1-3.8,3.8,7,7,0,0,1-2.78.56H18.5v2.25H23V41H11.75v-2.25h4.5V36.5h-4.11a7,7,0,0,1-2.78-.56,7.16,7.16,0,0,1-3.8-3.8,7,7,0,0,1-.56-2.78V23h2.25v6.36a4.72,4.72,0,0,0,.39,1.9,4.78,4.78,0,0,0,2.6,2.6,4.72,4.72,0,0,0,1.9.39h10.47a4.72,4.72,0,0,0,1.9-.39,4.78,4.78,0,0,0,2.6-2.6,4.72,4.72,0,0,0,.39-1.9V23Zm-18,5.62a1.13,1.13,0,0,0,1.13,1.13h9a1.13,1.13,0,0,0,1.12-1.13V8.38a1.13,1.13,0,0,0-1.12-1.13h-9a1.13,1.13,0,0,0-1.13,1.13Zm1.13,3.38a3.41,3.41,0,0,1-1.32-.26,3.31,3.31,0,0,1-1.8-1.8,3.41,3.41,0,0,1-.26-1.32V8.38a3.41,3.41,0,0,1,.26-1.32,3.31,3.31,0,0,1,1.8-1.8,3.41,3.41,0,0,1,1.32-.26h9a3.4,3.4,0,0,1,1.31.26,3.31,3.31,0,0,1,1.8,1.8,3.41,3.41,0,0,1,.26,1.32v20.24a3.41,3.41,0,0,1-.26,1.32,3.31,3.31,0,0,1-1.8,1.8,3.4,3.4,0,0,1-1.31.26Z\"\n />\n </svg>\n);\n\nexport default MicrophoneIcon;\n","import { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, { FC, MouseEventHandler, ReactNode, useRef } from 'react';\n\nimport AccessibleButton from '../Utils/AccessibleButton';\nimport useFocusVisible from '../hooks/internal/useFocusVisible';\nimport useStyleSet from '../hooks/useStyleSet';\n\nconst { useStyleOptions } = hooks;\n\ntype IconButtonProps = {\n alt?: string;\n children?: ReactNode;\n className?: string;\n disabled?: boolean;\n onClick?: MouseEventHandler<HTMLButtonElement>;\n};\n\nconst IconButton: FC<IconButtonProps> = ({ alt, children, className, disabled, onClick }) => {\n const [{ sendBoxButton: sendBoxButtonStyleSet }] = useStyleSet();\n const [{ sendBoxButtonAlignment }] = useStyleOptions();\n const buttonRef = useRef<HTMLButtonElement>();\n\n const [focusVisible] = useFocusVisible(buttonRef);\n\n return (\n <AccessibleButton\n className={classNames(\n sendBoxButtonStyleSet + '',\n 'webchat__icon-button',\n {\n 'webchat__icon-button--focus-visible': focusVisible,\n 'webchat__icon-button--stretch': sendBoxButtonAlignment !== 'bottom' && sendBoxButtonAlignment !== 'top'\n },\n className + ''\n )}\n disabled={disabled}\n onClick={disabled ? undefined : onClick}\n ref={buttonRef}\n title={alt}\n type=\"button\"\n >\n <div className=\"webchat__icon-button__shade\" />\n {children}\n <div className=\"webchat__icon-button__keyboard-focus-indicator\" />\n </AccessibleButton>\n );\n};\n\nIconButton.defaultProps = {\n alt: '',\n children: undefined,\n className: '',\n disabled: false,\n onClick: undefined\n};\n\nIconButton.propTypes = {\n alt: PropTypes.string,\n children: PropTypes.any,\n className: PropTypes.string,\n disabled: PropTypes.bool,\n onClick: PropTypes.func\n};\n\nexport default IconButton;\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [-1] }] */\n\nimport PropTypes from 'prop-types';\nimport React, { forwardRef, MouseEventHandler, ReactNode, useRef } from 'react';\n\nconst PREVENT_DEFAULT_HANDLER = event => event.preventDefault();\n\ntype AccessibleButtonProps = {\n 'aria-hidden'?: boolean;\n children?: ReactNode;\n disabled?: boolean;\n onClick?: MouseEventHandler<HTMLButtonElement>;\n tabIndex?: number;\n type: 'button';\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\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 ({ 'aria-hidden': ariaHidden, children, disabled, onClick, tabIndex, ...props }, forwardedRef) => {\n const targetRef = useRef();\n\n const ref = forwardedRef || targetRef;\n\n return (\n <button\n aria-disabled={disabled || undefined}\n aria-hidden={ariaHidden}\n onClick={disabled ? PREVENT_DEFAULT_HANDLER : onClick}\n ref={ref}\n tabIndex={disabled ? -1 : tabIndex}\n {...props}\n type=\"button\"\n >\n {children}\n </button>\n );\n }\n);\n\nAccessibleButton.defaultProps = {\n 'aria-hidden': undefined,\n children: undefined,\n disabled: undefined,\n onClick: undefined,\n tabIndex: undefined\n};\n\nAccessibleButton.displayName = 'AccessibleButton';\n\nAccessibleButton.propTypes = {\n 'aria-hidden': PropTypes.bool,\n children: PropTypes.any,\n disabled: PropTypes.bool,\n onClick: PropTypes.func,\n tabIndex: PropTypes.number,\n // TypeScript class is not mappable to PropTypes.oneOf(['button'])\n // @ts-ignore\n type: PropTypes.oneOf(['button']).isRequired\n};\n\nexport default AccessibleButton;\n","import { RefObject, useCallback, useEffect, useState } from 'react';\n\nimport useObserveFocusVisible from './useObserveFocusVisible';\n\nexport default function useFocusVisible(targetRef: RefObject<HTMLElement>): [boolean] {\n const [focusVisible, setFocusVisible] = useState(false);\n\n const handleBlur = useCallback(() => setFocusVisible(false), [setFocusVisible]);\n const handleFocusVisible = useCallback(() => setFocusVisible(true), [setFocusVisible]);\n\n useObserveFocusVisible(targetRef, handleFocusVisible);\n\n useEffect(() => {\n const { current } = targetRef;\n\n current.addEventListener('blur', handleBlur);\n\n return () => current.removeEventListener('blur', handleBlur);\n }, [handleBlur, targetRef]);\n\n return [focusVisible];\n}\n","import { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, { useCallback } from 'react';\n\nimport IconButton from './IconButton';\nimport SendIcon from './Assets/SendIcon';\nimport useSubmit from '../providers/internal/SendBox/useSubmit';\n\nimport type { FC } from 'react';\n\nconst { useDisabled, useLocalizer } = hooks;\n\ntype SendButtonProps = {\n className?: string;\n};\n\nconst SendButton: FC<SendButtonProps> = ({ className }) => {\n const [disabled] = useDisabled();\n const localize = useLocalizer();\n const submit = useSubmit();\n\n const handleClick = useCallback(() => submit({ setFocus: 'sendBoxWithoutKeyboard' }), [submit]);\n\n return (\n <IconButton\n alt={localize('TEXT_INPUT_SEND_BUTTON_ALT')}\n className={classNames('webchat__send-button', className)}\n disabled={disabled}\n onClick={handleClick}\n >\n <SendIcon />\n </IconButton>\n );\n};\n\nSendButton.defaultProps = {\n className: undefined\n};\n\nSendButton.propTypes = {\n className: PropTypes.string\n};\n\nexport default SendButton;\n","import { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport React from 'react';\n\nimport useStyleToEmotionObject from '../../hooks/internal/useStyleToEmotionObject';\n\nconst { useDirection } = hooks;\n\nconst ROOT_STYLE = {\n '&.webchat__send-icon': {\n '&.webchat__send-icon--rtl': {\n transform: 'scale(-1, 1)'\n }\n }\n};\n\nconst SendIcon = () => {\n const [direction] = useDirection();\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n\n return (\n <svg\n className={classNames('webchat__send-icon', { 'webchat__send-icon--rtl': direction === 'rtl' }, rootClassName)}\n height={28}\n viewBox=\"0 0 45.7 33.8\"\n width={28}\n >\n <path\n clipRule=\"evenodd\"\n d=\"M8.55 25.25l21.67-7.25H11zm2.41-9.47h19.26l-21.67-7.23zm-6 13l4-11.9L5 5l35.7 11.9z\"\n />\n </svg>\n );\n};\n\nexport default SendIcon;\n","import useSendBoxContext from './private/useContext';\n\ntype SubmitOptions = {\n setFocus?: 'main' | 'sendBox' | 'sendBoxWithoutKeyboard';\n};\n\n/**\n * Returns a callback function, when called, will send the value of the text box as a message.\n *\n * If the message cannot be send immediately, for example, the message is empty. An error message will be read\n * and the error message element can be referenced by `useErrorMessageId()` hook.\n *\n * If the message can be send, after the message is queued, regardless whether it send successfully or not, the text box will be cleared.\n */\nexport default function useSubmit(): (submitOptions?: SubmitOptions) => void {\n return useSendBoxContext().submit;\n}\n","/* eslint react/no-array-index-key: \"off\" */\n\nimport { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, { useCallback, useMemo, useRef } from 'react';\n// eslint-disable-next-line import/no-named-as-default\nimport BasicFilm, { createBasicStyleSet as createBasicStyleSetForReactFilm } from 'react-film';\n\nimport computeSuggestedActionText from '../Utils/computeSuggestedActionText';\nimport useFocusWithin from '../hooks/internal/useFocusWithin';\nimport useNonce from '../hooks/internal/useNonce';\nimport useStyleToEmotionObject from '../hooks/internal/useStyleToEmotionObject';\nimport useFocus from '../hooks/useFocus';\nimport useStyleSet from '../hooks/useStyleSet';\nimport RovingTabIndexComposer from '../providers/RovingTabIndex/RovingTabIndexComposer';\nimport SuggestedAction from './SuggestedAction';\n\nconst { useDirection, useLocalizer, useStyleOptions, useSuggestedActions } = hooks;\n\nconst ROOT_STYLE = {\n '&.webchat__suggested-actions': {\n '&.webchat__suggested-actions--flow-layout .webchat__suggested-actions__flow-box': {\n display: 'flex',\n flexWrap: 'wrap'\n },\n\n '&.webchat__suggested-actions--stack-layout .webchat__suggested-actions__stack': {\n display: 'flex',\n flexDirection: 'column'\n }\n }\n};\n\nconst SuggestedActionCarouselContainer = ({ children, className, label }) => {\n const [\n {\n suggestedActionsCarouselFlipperBoxWidth,\n suggestedActionsCarouselFlipperCursor,\n suggestedActionsCarouselFlipperSize\n }\n ] = useStyleOptions();\n const [{ suggestedActions: suggestedActionsStyleSet }] = useStyleSet();\n const [direction] = useDirection();\n const [nonce] = useNonce();\n const localize = useLocalizer();\n const ref = useRef();\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n\n const filmStyleSet = useMemo(\n () =>\n createBasicStyleSetForReactFilm({\n autoHide: false,\n cursor: suggestedActionsCarouselFlipperCursor,\n flipperBoxWidth: suggestedActionsCarouselFlipperBoxWidth,\n flipperSize: suggestedActionsCarouselFlipperSize\n }),\n [\n suggestedActionsCarouselFlipperBoxWidth,\n suggestedActionsCarouselFlipperCursor,\n suggestedActionsCarouselFlipperSize\n ]\n );\n const nextFlipperAriaLabel = localize('SUGGESTED_ACTIONS_FLIPPER_NEXT_ALT');\n const previousFlipperAriaLabel = localize('SUGGESTED_ACTIONS_FLIPPER_PREVIOUS_ALT');\n\n const [focusedWithin] = useFocusWithin(ref);\n const leftFlipperAriaLabel = direction === 'rtl' ? nextFlipperAriaLabel : previousFlipperAriaLabel;\n const rightFlipperAriaLabel = direction === 'rtl' ? previousFlipperAriaLabel : nextFlipperAriaLabel;\n\n return (\n // TODO: The content of suggested actions should be the labelled by the activity.\n // That means, when the user focus into the suggested actions, it should read similar to \"Bot said, what's your preference of today? Suggested actions has items: apple button, orange button, banana button.\"\n <div\n aria-label={label}\n aria-orientation=\"horizontal\"\n className={classNames(\n 'webchat__suggested-actions',\n 'webchat__suggested-actions--carousel-layout',\n {\n 'webchat__suggested-actions--focus-within': focusedWithin,\n 'webchat__suggested-actions--rtl': direction === 'rtl'\n },\n rootClassName,\n suggestedActionsStyleSet + '',\n (className || '') + ''\n )}\n ref={ref}\n role=\"toolbar\"\n >\n {!!children && !!React.Children.count(children) && (\n <BasicFilm\n autoCenter={false}\n className=\"webchat__suggested-actions__carousel\"\n dir={direction}\n flipperBlurFocusOnClick={true}\n leftFlipperAriaLabel={leftFlipperAriaLabel}\n nonce={nonce}\n rightFlipperAriaLabel={rightFlipperAriaLabel}\n showDots={false}\n showScrollBar={false}\n styleSet={filmStyleSet}\n >\n {children}\n </BasicFilm>\n )}\n <div className=\"webchat__suggested-actions__focus-indicator\" />\n </div>\n );\n};\n\nSuggestedActionCarouselContainer.defaultProps = {\n children: undefined,\n className: undefined\n};\n\nSuggestedActionCarouselContainer.propTypes = {\n children: PropTypes.any,\n className: PropTypes.string,\n label: PropTypes.string.isRequired\n};\n\nconst SuggestedActionFlowContainer = ({ children, className, label }) => {\n const [{ suggestedActions: suggestedActionsStyleSet }] = useStyleSet();\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n\n return (\n <div\n aria-label={label}\n aria-live=\"polite\"\n aria-orientation=\"horizontal\"\n className={classNames(\n 'webchat__suggested-actions',\n 'webchat__suggested-actions--flow-layout',\n rootClassName,\n suggestedActionsStyleSet + '',\n (className || '') + ''\n )}\n role=\"toolbar\"\n >\n {!!children && !!React.Children.count(children) && (\n <div className=\"webchat__suggested-actions__flow-box\">\n {React.Children.map(children, child => (\n <div className=\"webchat__suggested-actions__flow-item-box\">{child}</div>\n ))}\n </div>\n )}\n <div className=\"webchat__suggested-actions__focus-indicator\" />\n </div>\n );\n};\n\nSuggestedActionFlowContainer.defaultProps = {\n children: undefined,\n className: undefined\n};\n\nSuggestedActionFlowContainer.propTypes = {\n children: PropTypes.any,\n className: PropTypes.string,\n label: PropTypes.string.isRequired\n};\n\nconst SuggestedActionStackedContainer = ({ children, className, label }) => {\n const [{ suggestedActions: suggestedActionsStyleSet }] = useStyleSet();\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n\n return (\n <div\n aria-label={label}\n aria-live=\"polite\"\n aria-orientation=\"vertical\"\n className={classNames(\n 'webchat__suggested-actions',\n 'webchat__suggested-actions--stacked-layout',\n rootClassName,\n suggestedActionsStyleSet + '',\n (className || '') + ''\n )}\n role=\"toolbar\"\n >\n {!!children && !!React.Children.count(children) && (\n <div className=\"webchat__suggested-actions__stack\">{children}</div>\n )}\n <div className=\"webchat__suggested-actions__focus-indicator\" />\n </div>\n );\n};\n\nSuggestedActionStackedContainer.defaultProps = {\n children: undefined,\n className: undefined\n};\n\nSuggestedActionStackedContainer.propTypes = {\n children: PropTypes.any,\n className: PropTypes.string,\n label: PropTypes.string.isRequired\n};\n\ntype SuggestedActionsProps = Readonly<{\n className?: string;\n}>;\n\nconst SuggestedActions = ({ className }: SuggestedActionsProps) => {\n const [suggestedActions] = useSuggestedActions();\n const [{ suggestedActionLayout, suggestedActionsStackedLayoutButtonTextWrap }] = useStyleOptions();\n const localize = useLocalizer();\n const focus = useFocus();\n\n const handleEscapeKey = useCallback(() => {\n focus('sendBox');\n }, [focus]);\n\n const label = localize('SUGGESTED_ACTIONS_LABEL_ALT');\n\n const children = 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 return (\n <div className=\"webchat__suggested-actions__item-box\" key={index}>\n <SuggestedAction\n buttonText={computeSuggestedActionText(cardAction)}\n className=\"webchat__suggested-actions__button\"\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 text={text}\n textClassName={\n suggestedActionLayout === 'stacked' && suggestedActionsStackedLayoutButtonTextWrap\n ? 'webchat__suggested-actions__button-text-stacked-text-wrap'\n : 'webchat__suggested-actions__button-text'\n }\n type={type}\n value={value}\n />\n </div>\n );\n });\n\n // If there are no suggested actions, we will render nothing.\n if (!children.length) {\n return null;\n }\n\n if (suggestedActionLayout === 'flow') {\n return (\n <RovingTabIndexComposer onEscapeKey={handleEscapeKey}>\n <SuggestedActionFlowContainer className={className} label={label}>\n {children}\n </SuggestedActionFlowContainer>\n </RovingTabIndexComposer>\n );\n } else if (suggestedActionLayout === 'stacked') {\n return (\n <RovingTabIndexComposer onEscapeKey={handleEscapeKey} orientation=\"vertical\">\n <SuggestedActionStackedContainer className={className} label={label}>\n {children}\n </SuggestedActionStackedContainer>\n </RovingTabIndexComposer>\n );\n }\n\n return (\n <RovingTabIndexComposer onEscapeKey={handleEscapeKey}>\n <SuggestedActionCarouselContainer className={className} label={label}>\n {children}\n </SuggestedActionCarouselContainer>\n </RovingTabIndexComposer>\n );\n};\n\nexport default SuggestedActions;\n","import { useCallback, useEffect, useState } from 'react';\n\nimport type { RefObject } from 'react';\n\nexport default function useFocusWithin(targetRef: RefObject<HTMLElement>): readonly [boolean] {\n const [focusWithin, setFocusWithin] = useState(false);\n\n const handleBlur = useCallback(() => setFocusWithin(false), [setFocusWithin]);\n const handleFocus = useCallback(\n ({ target }: FocusEvent) => {\n const targetElement = target as HTMLElement;\n\n setFocusWithin(targetRef.current === targetElement || !!targetRef.current?.contains(targetElement));\n },\n [setFocusWithin, targetRef]\n );\n\n useEffect(() => {\n document.addEventListener('blur', handleBlur);\n document.addEventListener('focus', handleFocus);\n\n return () => {\n document.removeEventListener('blur', handleBlur);\n document.removeEventListener('focus', handleFocus);\n };\n }, [handleBlur, handleFocus]);\n\n return Object.freeze([focusWithin]) as readonly [boolean];\n}\n","/* eslint complexity: [\"error\", 50] */\n\nimport PropTypes from 'prop-types';\nimport React, { useCallback, useEffect, useMemo, useRef } from 'react';\n\nimport RovingTabIndexContext from './private/Context';\n\nimport type { FC, MutableRefObject, PropsWithChildren } from 'react';\nimport type { RovingTabIndexContextType } from './private/Context';\n\ntype ItemRef = MutableRefObject<HTMLElement | undefined>;\n\ntype RovingTabIndexContextProps = PropsWithChildren<{\n onEscapeKey?: () => void;\n orientation?: 'horizontal' | 'vertical';\n}>;\n\nconst RovingTabIndexComposer: FC<RovingTabIndexContextProps> = ({ children, onEscapeKey, orientation }) => {\n const activeItemIndexRef = useRef(0);\n const itemRefsRef = useRef<ItemRef[]>([]);\n\n const refreshTabIndices = useCallback(() => {\n const { current: activeItemIndex } = activeItemIndexRef;\n\n itemRefsRef.current.forEach(({ current }, index) => {\n current?.setAttribute('tabindex', activeItemIndex === index ? '0' : '-1');\n });\n }, [activeItemIndexRef]);\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 make sure at least one of the item in the container is selected.\n if (nextActiveItemIndex && !itemRefsRef.current[+nextActiveItemIndex]?.current) {\n nextActiveItemIndex = 0;\n }\n\n if (activeItemIndexRef.current !== nextActiveItemIndex) {\n activeItemIndexRef.current = nextActiveItemIndex;\n\n refreshTabIndices();\n itemRefsRef.current[+nextActiveItemIndex]?.current?.focus();\n }\n },\n [activeItemIndexRef, itemRefsRef, refreshTabIndices]\n );\n\n const handleFocus = useCallback(\n event => {\n const { target } = event;\n\n const index = itemRefsRef.current.findIndex(({ current }) => current === target);\n\n ~index && setActiveItemIndex(index);\n },\n [itemRefsRef, setActiveItemIndex]\n );\n\n const handleKeyDown = useCallback<(event: KeyboardEvent) => void>(\n event => {\n const { key } = event;\n const vertical = orientation === 'vertical';\n\n switch (key) {\n case 'ArrowDown':\n case 'ArrowRight':\n case 'Down': // IE11\n case 'Right': // IE11\n if ((vertical && key === 'ArrowRight') || (!vertical && key === 'ArrowDown')) {\n return;\n }\n\n setActiveItemIndex(value => {\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(value) + 1;\n\n if (nextIndex >= itemIndices.length) {\n return itemIndices[0];\n }\n\n return itemIndices[+nextIndex];\n });\n\n break;\n\n case 'ArrowLeft':\n case 'ArrowUp':\n case 'Left': // IE11\n case 'Up': // IE11\n if ((vertical && key === 'ArrowLeft') || (!vertical && key === 'ArrowUp')) {\n return;\n }\n\n setActiveItemIndex(value => {\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(value) - 1;\n\n if (nextIndex < 0) {\n return itemIndices[itemIndices.length - 1];\n }\n\n return itemIndices[+nextIndex];\n });\n\n break;\n\n case 'Home':\n setActiveItemIndex(0);\n break;\n\n case 'End':\n setActiveItemIndex(Infinity);\n break;\n\n case 'Escape':\n if (!onEscapeKey) {\n // If the \"onEscapeKey\" prop is not passed, don't call preventDefault() and stopPropagation().\n return;\n }\n\n onEscapeKey();\n break;\n\n default:\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n },\n [setActiveItemIndex, onEscapeKey, orientation]\n );\n\n const itemEffector = useCallback(\n (ref, index) => {\n const { current } = ref;\n\n itemRefsRef.current[+index] = ref;\n\n current.addEventListener('focus', handleFocus);\n current.addEventListener('keydown', handleKeyDown);\n\n current.setAttribute('tabindex', activeItemIndexRef.current === index ? '0' : '-1');\n\n return () => {\n current.removeEventListener('focus', handleFocus);\n current.removeEventListener('keydown', handleKeyDown);\n\n delete itemRefsRef.current[+index];\n };\n },\n [activeItemIndexRef, handleFocus, handleKeyDown]\n );\n\n const contextValue = useMemo<RovingTabIndexContextType>(\n () => ({\n itemEffector\n }),\n [itemEffector]\n );\n\n // This hook run on every render to rectify `activeItemIndexRef`.\n // So it will always point to an existing item or first item if available.\n useEffect(() => {\n setActiveItemIndex(value => value);\n });\n\n return <RovingTabIndexContext.Provider value={contextValue}>{children}</RovingTabIndexContext.Provider>;\n};\n\nRovingTabIndexComposer.defaultProps = {\n onEscapeKey: undefined,\n orientation: 'horizontal'\n};\n\nRovingTabIndexComposer.propTypes = {\n onEscapeKey: PropTypes.func,\n orientation: PropTypes.oneOf(['horizontal', 'vertical'])\n};\n\nexport default RovingTabIndexComposer;\n","import { createContext } from 'react';\n\nimport type { MutableRefObject } from 'react';\n\ntype RovingTabIndexContextType = {\n itemEffector: <T extends HTMLElement>(ref: MutableRefObject<T>, index: number) => () => void;\n};\n\nconst RovingTabIndexContext = createContext<RovingTabIndexContextType>({\n itemEffector: () => {\n // This will be implemented when using in <RovingTabIndexComposer>.\n // We have a check over there to make sure we did implement it.\n throw new Error('botframework-webchat internal: Not implemented.');\n }\n});\n\nexport default RovingTabIndexContext;\n\nexport type { RovingTabIndexContextType };\n","import { hooks } from 'botframework-webchat-api';\nimport type { DirectLineCardAction } from 'botframework-webchat-core';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, { MouseEventHandler, useCallback, VFC } from 'react';\n\nimport useFocusVisible from '../hooks/internal/useFocusVisible';\nimport useLocalizeAccessKey from '../hooks/internal/useLocalizeAccessKey';\nimport useStyleToEmotionObject from '../hooks/internal/useStyleToEmotionObject';\nimport useSuggestedActionsAccessKey from '../hooks/internal/useSuggestedActionsAccessKey';\nimport useFocus from '../hooks/useFocus';\nimport useScrollToEnd from '../hooks/useScrollToEnd';\nimport useStyleSet from '../hooks/useStyleSet';\nimport useItemRef from '../providers/RovingTabIndex/useItemRef';\nimport AccessibleButton from '../Utils/AccessibleButton';\nimport useFocusAccessKeyEffect from '../Utils/AccessKeySink/useFocusAccessKeyEffect';\n\nconst { useDirection, useDisabled, usePerformCardAction, useStyleOptions, useSuggestedActions } = hooks;\n\nconst ROOT_STYLE = {\n '&.webchat__suggested-action': {\n display: 'flex',\n overflow: 'hidden' // Prevent image from leaking; object-fit does not work with IE11\n }\n};\n\ntype SuggestedActionProps = {\n buttonText: string;\n className?: string;\n displayText?: string;\n image?: string;\n imageAlt?: string;\n itemIndex: number;\n text?: string;\n textClassName?: 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?: any;\n};\n\nconst SuggestedAction: VFC<SuggestedActionProps> = ({\n buttonText,\n className,\n displayText,\n image,\n imageAlt,\n itemIndex,\n text,\n textClassName,\n type,\n value\n}) => {\n const [_, setSuggestedActions] = useSuggestedActions();\n const [{ suggestedActionsStackedLayoutButtonTextWrap }] = useStyleOptions();\n const [{ suggestedAction: suggestedActionStyleSet }] = useStyleSet();\n const [accessKey] = useSuggestedActionsAccessKey();\n const [direction] = useDirection();\n const [disabled] = useDisabled();\n const focus = useFocus();\n const focusRef = useItemRef<HTMLButtonElement>(itemIndex);\n const localizeAccessKeyAsAriaKeyShortcuts = useLocalizeAccessKey('aria-keyshortcuts');\n const performCardAction = usePerformCardAction();\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n const scrollToEnd = useScrollToEnd();\n\n const [focusVisible] = useFocusVisible(focusRef);\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 useFocusAccessKeyEffect(accessKey, focusRef);\n\n return (\n <AccessibleButton\n {...(accessKey ? { 'aria-keyshortcuts': localizeAccessKeyAsAriaKeyShortcuts(accessKey) } : {})}\n className={classNames(\n 'webchat__suggested-action',\n {\n 'webchat__suggested-action--focus-visible': focusVisible,\n 'webchat__suggested-action--rtl': direction === 'rtl',\n 'webchat__suggested-action--wrapping': suggestedActionsStackedLayoutButtonTextWrap\n },\n rootClassName,\n suggestedActionStyleSet + '',\n (className || '') + ''\n )}\n disabled={disabled}\n onClick={handleClick}\n ref={focusRef}\n type=\"button\"\n >\n {image && (\n <img\n alt={imageAlt}\n className={classNames(\n 'webchat__suggested-action__image',\n direction === 'rtl' && 'webchat__suggested-action__image--rtl'\n )}\n src={image}\n />\n )}\n <span className={classNames('webchat__suggested-action__text', (textClassName || '') + '')}>{buttonText}</span>\n <div className=\"webchat__suggested-action__keyboard-focus-indicator\" />\n </AccessibleButton>\n );\n};\n\nSuggestedAction.defaultProps = {\n className: '',\n displayText: '',\n image: '',\n imageAlt: undefined,\n text: '',\n textClassName: '',\n type: undefined,\n value: undefined\n};\n\nSuggestedAction.propTypes = {\n buttonText: PropTypes.string.isRequired,\n className: PropTypes.string,\n displayText: PropTypes.string,\n image: PropTypes.string,\n imageAlt: PropTypes.string,\n itemIndex: PropTypes.number.isRequired,\n text: PropTypes.string,\n textClassName: PropTypes.string,\n // TypeScript class is not mappable to PropTypes.\n // @ts-ignore\n type: PropTypes.string,\n value: PropTypes.any\n};\n\nexport default SuggestedAction;\n","import { useEffect, useRef } from 'react';\nimport useContext from './private/useContext';\n\nimport type { MutableRefObject } from 'react';\n\nexport default function useItemRef<T extends HTMLElement>(itemIndex: number): MutableRefObject<T | undefined> {\n const ref = useRef<T>();\n\n const { itemEffector } = useContext();\n\n useEffect(() => itemEffector(ref, itemIndex));\n\n return ref;\n}\n","import { useContext } from 'react';\n\nimport RovingTabIndexContext from './Context';\n\nexport default function useRovingTabIndexContext(throwOnUndefined = true) {\n const contextValue = useContext(RovingTabIndexContext);\n\n if (throwOnUndefined && !contextValue) {\n throw new Error('botframework-webchat internal: This hook can only be used under <RovingTabIndexComposer>.');\n }\n\n return contextValue;\n}\n","import { useEffect } from 'react';\n\nimport useAccessKeySinkContext from './internal/useContext';\n\nfunction removeInline(array, item) {\n const index = array.indexOf(item);\n\n ~index && array.splice(index, 1);\n}\n\nexport default function useFocusAccessKeyEffect(key, ref) {\n if (key && typeof key !== 'string') {\n throw new Error('useFocusAccessKeyEffect: If defined, \"key\" must be of type \"string\".');\n } else if (!ref || !('current' in ref)) {\n throw new Error('useFocusAccessKeyEffect: \"ref\" must be defined and has \"current\" property.');\n }\n\n const context = useAccessKeySinkContext();\n\n useEffect(() => {\n if (key) {\n const entry = { keys: key.split(/\\s+/gu), ref };\n\n context.focii.push(entry);\n\n return () => removeInline(context.focii, entry);\n }\n }, [context, key, ref]);\n}\n","import { useContext } from 'react';\n\nimport AccessKeySinkContext from './Context';\n\nexport default function useAccessKeySinkContext() {\n return useContext(AccessKeySinkContext);\n}\n","import { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport React, { useCallback, useMemo, useRef } from 'react';\n\nimport AccessibleInputText from '../Utils/AccessibleInputText';\nimport navigableEvent from '../Utils/TypeFocusSink/navigableEvent';\nimport { ie11 } from '../Utils/detectBrowser';\nimport { useRegisterFocusSendBox, type SendBoxFocusOptions } from '../hooks/sendBoxFocus';\nimport useStyleToEmotionObject from '../hooks/internal/useStyleToEmotionObject';\nimport useScrollDown from '../hooks/useScrollDown';\nimport useScrollUp from '../hooks/useScrollUp';\nimport useStyleSet from '../hooks/useStyleSet';\nimport useSubmit from '../providers/internal/SendBox/useSubmit';\nimport withEmoji from '../withEmoji/withEmoji';\nimport AutoResizeTextArea from './AutoResizeTextArea';\n\nimport type { MutableRefObject } from 'react';\n\nconst { useDisabled, useLocalizer, usePonyfill, useSendBoxValue, useStopDictate, useStyleOptions } = hooks;\n\nconst ROOT_STYLE = {\n '&.webchat__send-box-text-box': {\n display: 'flex',\n\n '& .webchat__send-box-text-box__input, & .webchat__send-box-text-box__text-area': {\n flex: 1\n }\n }\n};\n\n/**\n * Submits the text box and optionally set the focus after send.\n */\ntype SubmitTextBoxFunction = {\n /**\n * Submits the text box, without setting the focus after send.\n *\n * @deprecated Instead of passing `false`, you should leave the `setFocus` argument `undefined`.\n */\n (setFocus: false): void;\n\n /**\n * Submits the text box and optionally set the focus after send.\n */\n (setFocus?: 'sendBox' | 'sendBoxWithoutKeyboard'): void;\n};\n\nfunction useTextBoxSubmit(): SubmitTextBoxFunction {\n const submit = useSubmit();\n\n return useCallback<SubmitTextBoxFunction>(\n (setFocus?: false | 'sendBox' | 'sendBoxWithoutKeyboard') => submit({ setFocus: setFocus || undefined }),\n [submit]\n );\n}\n\nfunction useTextBoxValue(): [string, (textBoxValue: string) => void] {\n const [value, setValue] = useSendBoxValue();\n const stopDictate = useStopDictate();\n\n const setter = useCallback<(nextValue: string) => void>(\n nextValue => {\n if (typeof nextValue !== 'string') {\n throw new Error('botframework-webchat: First argument passed to useTextBoxValue() must be a string.');\n }\n\n setValue(nextValue);\n stopDictate();\n },\n [setValue, stopDictate]\n );\n\n return [value, setter];\n}\n\nconst PREVENT_DEFAULT_HANDLER = event => event.preventDefault();\n\nconst SingleLineTextBox = withEmoji(AccessibleInputText);\nconst MultiLineTextBox = withEmoji(AutoResizeTextArea);\n\nconst TextBox = ({ className = '' }: Readonly<{ className?: string | undefined }>) => {\n const [value, setValue] = useSendBoxValue();\n const [{ sendBoxTextBox: sendBoxTextBoxStyleSet }] = useStyleSet();\n const [{ emojiSet, sendBoxTextWrap }] = useStyleOptions();\n const [{ setTimeout }] = usePonyfill();\n const [disabled] = useDisabled();\n const inputElementRef: MutableRefObject<HTMLInputElement & HTMLTextAreaElement> = useRef();\n const localize = useLocalizer();\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n const scrollDown = useScrollDown();\n const scrollUp = useScrollUp();\n const submitTextBox = useTextBoxSubmit();\n\n const sendBoxString = localize('TEXT_INPUT_ALT');\n const typeYourMessageString = localize('TEXT_INPUT_PLACEHOLDER');\n\n const handleKeyPress = useCallback(\n event => {\n const { key, shiftKey } = event;\n\n if (key === 'Enter' && !shiftKey) {\n event.preventDefault();\n\n // If text box is submitted, focus on the send box\n submitTextBox('sendBox');\n }\n },\n [submitTextBox]\n );\n\n const handleSubmit = useCallback(\n event => {\n event.preventDefault();\n\n // Consider clearing the send box only after we received POST_ACTIVITY_PENDING\n // E.g. if the connection is bad, sending the message essentially do nothing but just clearing the send box\n submitTextBox();\n },\n [submitTextBox]\n );\n\n const handleKeyDownCapture = useCallback(\n event => {\n const { ctrlKey, metaKey, shiftKey } = event;\n\n if (ctrlKey || metaKey || shiftKey) {\n return;\n }\n\n // Navigable event means the end-user is focusing on an inputtable element, but it is okay to capture the arrow keys.\n if (navigableEvent(event)) {\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 },\n [scrollDown, scrollUp]\n );\n\n const focusCallback = useCallback(\n (options: SendBoxFocusOptions) => {\n const { noKeyboard } = options;\n const { current } = inputElementRef;\n\n if (current) {\n // The \"disable soft keyboard on mobile devices\" logic will not work on IE11. It will cause the <input> to become read-only until next focus.\n // Thus, no mobile devices carry IE11 so we don't need to explicitly disable soft keyboard on IE11.\n // See #3757 for repro and details.\n if (noKeyboard && !ie11) {\n // To not activate the virtual keyboard while changing focus to an input, we will temporarily set it as read-only and flip it back.\n // https://stackoverflow.com/questions/7610758/prevent-iphone-default-keyboard-when-focusing-an-input/7610923\n const readOnly = current.getAttribute('readonly');\n\n current.setAttribute('readonly', 'readonly');\n\n options.waitUntil(\n (async function () {\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 await new Promise(resolve => setTimeout(resolve, 0));\n\n if (current) {\n current.focus();\n readOnly ? current.setAttribute('readonly', readOnly) : current.removeAttribute('readonly');\n }\n })()\n );\n } else {\n current.focus();\n }\n }\n },\n [inputElementRef, setTimeout]\n );\n\n useRegisterFocusSendBox(focusCallback);\n\n const emojiMap = useMemo(() => new Map<string, string>(Object.entries(emojiSet)), [emojiSet]);\n\n return (\n <form\n aria-disabled={disabled}\n className={classNames(\n 'webchat__send-box-text-box',\n rootClassName,\n sendBoxTextBoxStyleSet + '',\n (className || '') + ''\n )}\n onSubmit={disabled ? PREVENT_DEFAULT_HANDLER : handleSubmit}\n >\n {!sendBoxTextWrap ? (\n <SingleLineTextBox\n aria-label={sendBoxString}\n className=\"webchat__send-box-text-box__input\"\n data-id=\"webchat-sendbox-input\"\n disabled={disabled}\n emojiMap={emojiMap}\n enterKeyHint=\"send\"\n inputMode=\"text\"\n onChange={setValue}\n onKeyDownCapture={disabled ? undefined : handleKeyDownCapture}\n onKeyPress={disabled ? undefined : handleKeyPress}\n placeholder={typeYourMessageString}\n readOnly={disabled}\n ref={inputElementRef}\n type=\"text\"\n value={value}\n />\n ) : (\n <MultiLineTextBox\n aria-label={sendBoxString}\n className=\"webchat__send-box-text-box__text-area\"\n data-id=\"webchat-sendbox-input\"\n disabled={disabled}\n emojiMap={emojiMap}\n enterKeyHint=\"send\"\n inputMode=\"text\"\n onChange={setValue}\n onKeyDownCapture={disabled ? undefined : handleKeyDownCapture}\n onKeyPress={disabled ? undefined : handleKeyPress}\n placeholder={typeYourMessageString}\n readOnly={disabled}\n ref={inputElementRef}\n rows={1}\n textAreaClassName=\"webchat__send-box-text-box__html-text-area\"\n value={value}\n />\n )}\n {disabled && <div className=\"webchat__send-box-text-box__glass\" />}\n </form>\n );\n};\n\nexport default TextBox;\n\nexport { useTextBoxSubmit, useTextBoxValue };\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [-1] }] */\n\nimport PropTypes from 'prop-types';\nimport React, {\n ChangeEventHandler,\n FocusEventHandler,\n forwardRef,\n KeyboardEventHandler,\n ReactEventHandler,\n useRef\n} from 'react';\n\nimport useEnterKeyHint from '../hooks/internal/useEnterKeyHint';\n\n// Differences between <input type=\"text\"> and <AccessibleInputText>:\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 \"onChange\" 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 is 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 the code that checks disabled through the \"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\ntype AccessibleInputTextProps = {\n 'aria-errormessage'?: string;\n className?: string;\n disabled?: boolean;\n enterKeyHint?: string;\n inputMode?: 'text' | 'none' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search';\n onChange?: ChangeEventHandler<HTMLInputElement>;\n onFocus?: FocusEventHandler<HTMLInputElement>;\n onKeyDown?: KeyboardEventHandler<HTMLInputElement>;\n onKeyDownCapture?: KeyboardEventHandler<HTMLInputElement>;\n onKeyPress?: KeyboardEventHandler<HTMLInputElement>;\n onSelect?: ReactEventHandler<HTMLInputElement>;\n placeholder?: string;\n readOnly?: boolean;\n tabIndex?: number;\n type: 'text';\n value?: string;\n};\n\nconst AccessibleInputText = forwardRef<HTMLInputElement, AccessibleInputTextProps>(\n (\n {\n 'aria-errormessage': ariaErrorMessage,\n className,\n disabled,\n enterKeyHint,\n onChange,\n onFocus,\n onKeyDown,\n onKeyDownCapture,\n onKeyPress,\n onSelect,\n placeholder,\n readOnly,\n tabIndex,\n value,\n ...props\n },\n forwardedRef\n ) => {\n const targetRef = useRef();\n\n const ref = forwardedRef || targetRef;\n\n useEnterKeyHint(ref, enterKeyHint);\n\n return (\n <input\n aria-disabled={disabled || undefined}\n aria-errormessage={ariaErrorMessage}\n className={className}\n onChange={disabled ? undefined : onChange}\n onFocus={disabled ? undefined : onFocus}\n onKeyDown={disabled ? undefined : onKeyDown}\n onKeyDownCapture={disabled ? undefined : onKeyDownCapture}\n onKeyPress={disabled ? undefined : onKeyPress}\n onSelect={disabled ? undefined : onSelect}\n placeholder={placeholder}\n readOnly={readOnly || disabled}\n ref={ref}\n tabIndex={disabled ? -1 : tabIndex}\n value={value}\n {...props}\n type=\"text\"\n />\n );\n }\n);\n\nAccessibleInputText.defaultProps = {\n 'aria-errormessage': undefined,\n className: undefined,\n disabled: undefined,\n enterKeyHint: undefined,\n inputMode: undefined,\n onChange: undefined,\n onFocus: undefined,\n onKeyDown: undefined,\n onKeyDownCapture: undefined,\n onKeyPress: undefined,\n onSelect: undefined,\n placeholder: undefined,\n readOnly: undefined,\n tabIndex: undefined,\n value: undefined\n};\n\nAccessibleInputText.displayName = 'AccessibleInputText';\n\nAccessibleInputText.propTypes = {\n 'aria-errormessage': PropTypes.string,\n className: PropTypes.string,\n disabled: PropTypes.bool,\n enterKeyHint: PropTypes.string,\n inputMode: PropTypes.oneOf(['text', 'none', 'tel', 'url', 'email', 'numeric', 'decimal', 'search']),\n onChange: PropTypes.func,\n onFocus: PropTypes.func,\n onKeyDown: PropTypes.func,\n onKeyDownCapture: PropTypes.func,\n onKeyPress: PropTypes.func,\n onSelect: PropTypes.func,\n placeholder: PropTypes.string,\n readOnly: PropTypes.bool,\n tabIndex: PropTypes.number,\n // @ts-ignore PropTypes and TypeScript type do not well understood each other.\n type: PropTypes.oneOf(['text']).isRequired,\n value: PropTypes.string\n};\n\nexport default AccessibleInputText;\n","import { useEffect } from 'react';\n\nexport default function useEnterKeyHint(elementRef, enterKeyHint) {\n // The version of React we are using does not support the capitalized version of \"enterKeyHint\" yet.\n // To prevent warnings from React, we need to set it manually using attributes.\n useEffect(() => {\n const { current } = elementRef;\n\n if (current) {\n current.enterKeyHint = enterKeyHint;\n }\n }, [enterKeyHint, elementRef]);\n}\n","// Navigable event means the end-user is focusing on an inputtable element, but it is okay to capture the arrow keys.\n// For example, if the end-user is on <button>, we can capture the arrow keys.\n// We can also capture arrow keys when the user is on a <textarea> without contents.\n// eslint-disable-next-line complexity\nexport default function navigableEvent(event) {\n const {\n altKey,\n target,\n target: { tagName }\n } = event;\n\n const autocompleteAttribute = target.getAttribute('autocomplete');\n const autocomplete = autocompleteAttribute && autocompleteAttribute !== 'off';\n\n // Generally, we allow up/down arrow keys on all elements captured here, except those handled by the user agent.\n // For example, if it is on <select>, we will ignore up/down arrow keys. Also true for textbox with autocomplete.\n\n // For some elements, user agent doesn't handle arrow keys when ALT key is held, so we can still handle ALT + UP/DOWN keys.\n // For example, user agent ignores ALT + UP/DOWN on <input type=\"text\"> with content.\n // Counter-example: user agent continues to handle ALT + UP/DOWN on <input type=\"number\">.\n if (tagName === 'INPUT') {\n const { list, type, value } = target;\n\n // These are buttons, up/down arrow keys are not handled by the user agent.\n if (\n type === 'button' ||\n type === 'checkbox' ||\n type === 'file' ||\n type === 'image' ||\n type === 'radio' ||\n type === 'reset' ||\n type === 'submit'\n ) {\n return true;\n } else if (\n type === 'email' ||\n type === 'password' ||\n type === 'search' ||\n type === 'tel' ||\n type === 'text' ||\n type === 'url'\n ) {\n if (autocomplete || list) {\n // \"autocomplete\" and \"list\" are comboboxes. Up/down arrow keys may be handled by the user agent.\n return true;\n } else if (altKey || !value) {\n // If the input has content, user agent will handle up/down arrow and it work similar to HOME/END keys.\n // \"altKey\" can be used; user agent ignores ALT + UP/DOWN.\n return true;\n }\n }\n } else if (tagName === 'SELECT') {\n // User agent handles up/down arrow keys for dropdown list.\n return false;\n } else if (tagName === 'TEXTAREA') {\n if (!autocomplete && (altKey || !target.value)) {\n // User agent handles up/down arrow keys for multiline text box if it has content or is auto-complete.\n return true;\n }\n } else if (target.getAttribute('contenteditable') === 'true') {\n if (altKey || !target.innerHTML) {\n // \"contenteditable\" element works like <textarea> minus \"autocomplete\".\n return true;\n }\n } else {\n return true;\n }\n}\n","import { useCallback } from 'react';\nimport { useScrollRelativeTranscript } from './transcriptScrollRelative';\n\nexport default function useScrollDown(): (options?: { displacement: number }) => void {\n const scrollRelative = useScrollRelativeTranscript();\n\n return useCallback(options => scrollRelative({ direction: 'down', ...options }), [scrollRelative]);\n}\n","import { useCallback } from 'react';\nimport { useScrollRelativeTranscript } from './transcriptScrollRelative';\n\nexport default function useScrollUp(): (options?: { displacement: number }) => void {\n const scrollRelative = useScrollRelativeTranscript();\n\n return useCallback(options => scrollRelative({ direction: 'up', ...options }), [scrollRelative]);\n}\n","import { useRefFrom } from 'use-ref-from';\nimport mergeRefs from 'merge-refs';\nimport React, {\n type ChangeEvent,\n type ComponentType,\n type FocusEvent,\n forwardRef,\n type KeyboardEvent,\n type SyntheticEvent,\n useCallback,\n useMemo,\n useRef,\n type Ref\n} from 'react';\n\nimport useUndoStack from './private/useUndoStack';\n\nexport type InputTargetProps<H> = {\n onChange?: (event: ChangeEvent<H>) => void;\n onFocus?: (event: FocusEvent<H>) => void;\n onKeyDown?: (event: KeyboardEvent<H>) => void;\n onSelect?: (event: SyntheticEvent<H>) => void;\n value?: string;\n};\n\ntype PropsOf<T> = T extends ComponentType<infer P> ? P : never;\n\nfunction WithEmojiController<\n T extends ComponentType<P>,\n P extends InputTargetProps<H> = PropsOf<T>,\n H extends HTMLInputElement | HTMLTextAreaElement = P extends InputTargetProps<infer H> ? H : never\n>({\n componentProps,\n componentType,\n emojiMap = new Map<string, string>(),\n innerRef,\n onChange\n}: Readonly<{\n componentProps: P;\n componentType: ComponentType<P>;\n emojiMap?: Map<string, string>;\n innerRef?: Ref<H>;\n onChange?: (value: string | undefined) => void;\n}>) {\n const { value } = componentProps;\n const inputElementRef = useRef<H>(null);\n const onChangeRef = useRefFrom(onChange);\n\n const { push, undo } = useUndoStack(inputElementRef);\n const valueRef = useRefFrom(value);\n\n const handleChange = useCallback<(event: ChangeEvent<H>) => void>(\n ({ currentTarget }) => {\n const { selectionEnd, selectionStart, value } = currentTarget;\n\n if (\n typeof selectionEnd === 'number' &&\n typeof selectionStart === 'number' &&\n selectionStart === selectionEnd &&\n value &&\n value.length === (valueRef.current || '').length + 1\n ) {\n for (const [emoticon, emoji] of emojiMap.entries()) {\n const { length } = emoticon;\n\n if (value.slice(selectionEnd - length, selectionEnd) === emoticon) {\n push();\n\n const nextValue = `${value.slice(0, selectionEnd - length)}${emoji}${value.slice(selectionEnd)}`;\n const nextSelectionEnd = selectionEnd + emoji.length - length;\n\n currentTarget.value = nextValue;\n\n currentTarget.selectionStart = selectionStart;\n currentTarget.selectionEnd = nextSelectionEnd;\n\n break;\n }\n }\n }\n\n value || push();\n\n onChangeRef.current?.(currentTarget.value);\n },\n [push, emojiMap, onChangeRef, valueRef]\n );\n\n const handleFocus = useCallback<(event: FocusEvent<H>) => void>(() => push(), [push]);\n\n const handleKeyDown = useCallback<(event: KeyboardEvent<H>) => void>(\n // eslint-disable-next-line complexity\n event => {\n const { ctrlKey, key, metaKey } = event;\n\n const uppercaseKey = key.toUpperCase();\n\n if ((ctrlKey || metaKey) && uppercaseKey === 'Z') {\n event.preventDefault();\n\n undo();\n\n onChangeRef.current?.(event.currentTarget.value);\n } else if (key === 'Backspace') {\n push('backspace');\n } else if (key === 'Delete') {\n push('delete');\n } else if (\n key === 'ArrowLeft' ||\n key === 'ArrowRight' ||\n key === 'ArrowUp' ||\n key === 'ArrowDown' ||\n key === 'Home' ||\n key === 'End' ||\n key === 'PageUp' ||\n key === 'PageDown' ||\n ((ctrlKey || metaKey) && uppercaseKey === 'A') ||\n ((ctrlKey || metaKey) && (uppercaseKey === 'V' || uppercaseKey === 'X'))\n ) {\n push();\n } else {\n push('change');\n }\n },\n [push, onChangeRef, undo]\n );\n\n useMemo(\n () => (!inputElementRef.current || inputElementRef.current.value !== value) && push(),\n [push, inputElementRef, value]\n );\n\n return React.createElement(componentType, {\n ...componentProps,\n onChange: handleChange,\n onFocus: handleFocus,\n onKeyDown: handleKeyDown,\n ref: mergeRefs(inputElementRef, innerRef)\n } as P);\n}\n\nexport default function withEmoji<\n T extends ComponentType<P>,\n P extends InputTargetProps<H> = PropsOf<T>,\n H extends HTMLInputElement | HTMLTextAreaElement = P extends InputTargetProps<infer H> ? H : never\n>(componentType: T) {\n const WithEmoji = forwardRef<\n H,\n Readonly<\n Omit<P, 'emojiMap' | 'onChange'> & {\n emojiMap?: Map<string, string>;\n onChange?: (value: string | undefined) => void;\n }\n >\n >(({ emojiMap, onChange, ...props }, ref) => (\n <WithEmojiController<T, P, H>\n // TODO: Do we have a type bug here?\n componentProps={props as unknown as P}\n componentType={componentType}\n emojiMap={emojiMap}\n innerRef={ref}\n onChange={onChange}\n />\n ));\n\n WithEmoji.displayName = `WithEmoji<${componentType.displayName}>`;\n\n return WithEmoji;\n}\n","import { type RefObject, useCallback, useRef } from 'react';\n\nimport UndoEntry from './UndoEntry';\n\nexport default function useUndoStack(\n elementRef: RefObject<HTMLInputElement | HTMLTextAreaElement>\n): Readonly<{ push: (group?: string) => void; undo: () => void }> {\n const undoStackRef = useRef<UndoEntry[]>([]);\n\n const push = useCallback(\n (group?: string | undefined) => {\n const { current: element } = elementRef;\n\n if (!element) {\n return;\n }\n\n const { current: undoStack } = undoStackRef;\n\n const [firstEntry] = undoStack;\n const { selectionEnd, selectionStart, value } = element;\n\n if (!group || group !== firstEntry?.group) {\n value === firstEntry?.value && undoStack.shift();\n\n undoStack.unshift(new UndoEntry(value, selectionStart, selectionEnd, group));\n }\n },\n [elementRef, undoStackRef]\n );\n\n const undo = useCallback(() => {\n const { current: element } = elementRef;\n\n if (!element) {\n return;\n }\n\n const { current: undoStack } = undoStackRef;\n let lastEntry: UndoEntry | undefined;\n\n while (undoStack.length) {\n [lastEntry] = undoStack;\n\n if (lastEntry?.value === element.value) {\n undoStack.shift();\n } else {\n break;\n }\n }\n\n if (lastEntry) {\n element.value = lastEntry.value;\n\n element.selectionStart = lastEntry.selectionStart;\n element.selectionEnd = lastEntry.selectionEnd;\n } else {\n element.value = '';\n }\n }, [elementRef, undoStackRef]);\n\n return Object.freeze({ push, undo });\n}\n","export default class UndoEntry {\n constructor(value: string, selectionStart: number | null, selectionEnd: number | null, group: string | undefined) {\n this.#group = group;\n this.#selectionEnd = selectionEnd;\n this.#selectionStart = selectionStart;\n this.#value = value;\n }\n\n #group: string | undefined;\n #selectionEnd: number | null;\n #selectionStart: number | null;\n #value: string;\n\n get group(): string | undefined {\n return this.#group;\n }\n\n get selectionStart(): number | null {\n return this.#selectionStart;\n }\n\n get selectionEnd(): number | null {\n return this.#selectionEnd;\n }\n\n get value(): string {\n return this.#value;\n }\n}\n","import classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, {\n ChangeEventHandler,\n FocusEventHandler,\n forwardRef,\n KeyboardEventHandler,\n ReactEventHandler\n} from 'react';\n\nimport AccessibleTextArea from '../Utils/AccessibleTextArea';\nimport useEnterKeyHint from '../hooks/internal/useEnterKeyHint';\nimport useStyleSet from '../hooks/useStyleSet';\n\ntype AutoResizeTextAreaProps = {\n 'aria-errormessage'?: string;\n 'aria-label'?: string;\n className?: string;\n 'data-id'?: string;\n disabled?: boolean;\n enterKeyHint?: string;\n inputMode?: 'text' | 'none' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search';\n onChange?: ChangeEventHandler<HTMLTextAreaElement>;\n onFocus?: FocusEventHandler<HTMLTextAreaElement>;\n onKeyDown?: KeyboardEventHandler<HTMLTextAreaElement>;\n onKeyDownCapture?: KeyboardEventHandler<HTMLTextAreaElement>;\n onKeyPress?: KeyboardEventHandler<HTMLTextAreaElement>;\n onSelect?: ReactEventHandler<HTMLTextAreaElement>;\n placeholder?: string;\n readOnly?: boolean;\n rows?: number;\n textAreaClassName?: string;\n value?: string;\n};\n\nconst AutoResizeTextArea = forwardRef<HTMLTextAreaElement, AutoResizeTextAreaProps>(\n (\n {\n 'aria-errormessage': ariaErrorMessage,\n 'aria-label': ariaLabel,\n className,\n 'data-id': dataId,\n disabled,\n enterKeyHint,\n inputMode,\n onChange,\n onFocus,\n onKeyDown,\n onKeyDownCapture,\n onKeyPress,\n onSelect,\n placeholder,\n readOnly,\n rows,\n textAreaClassName,\n value\n },\n ref\n ) => {\n const [{ autoResizeTextArea: autoResizeTextAreaStyleSet }] = useStyleSet();\n\n useEnterKeyHint(ref, enterKeyHint);\n\n return (\n <div className={classNames('webchat__auto-resize-textarea', autoResizeTextAreaStyleSet + '', className)}>\n {/* We need to add a space here, so blank lines will be counted in the doppelganger. */}\n <div aria-hidden={true} className=\"webchat__auto-resize-textarea__doppelganger\">\n {value} \n </div>\n <AccessibleTextArea\n aria-errormessage={ariaErrorMessage}\n aria-label={ariaLabel}\n className={classNames('webchat__auto-resize-textarea__textarea', textAreaClassName)}\n data-id={dataId}\n disabled={disabled}\n inputMode={inputMode}\n onChange={onChange}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n onKeyDownCapture={onKeyDownCapture}\n onKeyPress={onKeyPress}\n onSelect={onSelect}\n placeholder={placeholder}\n readOnly={readOnly}\n ref={ref}\n rows={rows}\n value={value}\n />\n </div>\n );\n }\n);\n\nAutoResizeTextArea.defaultProps = {\n 'aria-errormessage': undefined,\n 'aria-label': undefined,\n 'data-id': undefined,\n className: undefined,\n disabled: undefined,\n enterKeyHint: undefined,\n inputMode: undefined,\n onChange: undefined,\n onFocus: undefined,\n onKeyDown: undefined,\n onKeyDownCapture: undefined,\n onKeyPress: undefined,\n onSelect: undefined,\n placeholder: undefined,\n readOnly: undefined,\n rows: undefined,\n textAreaClassName: undefined,\n value: ''\n};\n\nAutoResizeTextArea.propTypes = {\n 'aria-errormessage': PropTypes.string,\n 'aria-label': PropTypes.string,\n className: PropTypes.string,\n 'data-id': PropTypes.string,\n disabled: PropTypes.bool,\n enterKeyHint: PropTypes.string,\n inputMode: PropTypes.oneOf(['text', 'none', 'tel', 'url', 'email', 'numeric', 'decimal', 'search']),\n onChange: PropTypes.func,\n onFocus: PropTypes.func,\n onKeyDown: PropTypes.func,\n onKeyDownCapture: PropTypes.func,\n onKeyPress: PropTypes.func,\n onSelect: PropTypes.func,\n placeholder: PropTypes.string,\n readOnly: PropTypes.bool,\n rows: PropTypes.number,\n textAreaClassName: PropTypes.string,\n value: PropTypes.string\n};\n\nexport default AutoResizeTextArea;\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [-1] }] */\n\nimport PropTypes from 'prop-types';\nimport React, {\n ChangeEventHandler,\n FocusEventHandler,\n forwardRef,\n KeyboardEventHandler,\n ReactEventHandler,\n useRef\n} from 'react';\n\n// Differences between <textarea> and <AccessibleTextArea>:\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 \"onChange\" 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 is 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 move the focus 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 the code that checks disabled through the \"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\ntype AccessibleTextAreaProps = {\n className?: string;\n disabled?: boolean;\n inputMode?: 'text' | 'none' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search';\n onChange?: ChangeEventHandler<HTMLTextAreaElement>;\n onFocus?: FocusEventHandler<HTMLTextAreaElement>;\n onKeyDown?: KeyboardEventHandler<HTMLTextAreaElement>;\n onKeyDownCapture?: KeyboardEventHandler<HTMLTextAreaElement>;\n onKeyPress?: KeyboardEventHandler<HTMLTextAreaElement>;\n onSelect?: ReactEventHandler<HTMLTextAreaElement>;\n placeholder?: string;\n readOnly?: boolean;\n rows?: number;\n tabIndex?: number;\n value?: string;\n};\n\nconst AccessibleTextArea = forwardRef<HTMLTextAreaElement, AccessibleTextAreaProps>(\n (\n {\n className,\n disabled,\n inputMode,\n onChange,\n onFocus,\n onKeyDown,\n onKeyDownCapture,\n onKeyPress,\n onSelect,\n placeholder,\n readOnly,\n rows,\n tabIndex,\n ...props\n },\n forwardedRef\n ) => {\n const targetRef = useRef();\n\n const ref = forwardedRef || targetRef;\n\n return (\n <textarea\n aria-disabled={disabled || undefined}\n className={className}\n inputMode={inputMode}\n onChange={disabled ? undefined : onChange}\n onFocus={disabled ? undefined : onFocus}\n onKeyDown={disabled ? undefined : onKeyDown}\n onKeyDownCapture={disabled ? undefined : onKeyDownCapture}\n onKeyPress={disabled ? undefined : onKeyPress}\n onSelect={disabled ? undefined : onSelect}\n placeholder={placeholder}\n readOnly={readOnly || disabled}\n ref={ref}\n rows={rows}\n tabIndex={disabled ? -1 : tabIndex}\n {...props}\n />\n );\n }\n);\n\nAccessibleTextArea.defaultProps = {\n className: undefined,\n disabled: undefined,\n inputMode: undefined,\n onChange: undefined,\n onFocus: undefined,\n onKeyDown: undefined,\n onKeyDownCapture: undefined,\n onKeyPress: undefined,\n onSelect: undefined,\n placeholder: undefined,\n readOnly: undefined,\n rows: undefined,\n tabIndex: undefined,\n value: undefined\n};\n\nAccessibleTextArea.displayName = 'AccessibleTextArea';\n\nAccessibleTextArea.propTypes = {\n className: PropTypes.string,\n disabled: PropTypes.bool,\n inputMode: PropTypes.oneOf(['text', 'none', 'tel', 'url', 'email', 'numeric', 'decimal', 'search']),\n onChange: PropTypes.func,\n onFocus: PropTypes.func,\n onKeyDown: PropTypes.func,\n onKeyDownCapture: PropTypes.func,\n onKeyPress: PropTypes.func,\n onSelect: PropTypes.func,\n placeholder: PropTypes.string,\n readOnly: PropTypes.bool,\n rows: PropTypes.number,\n tabIndex: PropTypes.number,\n value: PropTypes.string\n};\n\nexport default AccessibleTextArea;\n","import { hooks, type SendBoxToolbarMiddlewareProps } from 'botframework-webchat-api';\nimport React, { memo } from 'react';\n\nimport UploadButton from './UploadButton';\n\nconst { useStyleOptions } = hooks;\n\nfunction BasicSendBoxToolbar({ className }: SendBoxToolbarMiddlewareProps) {\n const [{ hideUploadButton }] = useStyleOptions();\n\n return !hideUploadButton && <UploadButton className={className} />;\n}\n\nexport default memo(BasicSendBoxToolbar);\n","import { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, { useCallback, useRef, type FC, type FormEventHandler, type MouseEventHandler } from 'react';\nimport { useRefFrom } from 'use-ref-from';\n\nimport IconButton from '../SendBox/IconButton';\nimport useMakeThumbnail from '../hooks/useMakeThumbnail';\nimport useStyleToEmotionObject from '../hooks/internal/useStyleToEmotionObject';\nimport useFocus from '../hooks/useFocus';\nimport useStyleSet from '../hooks/useStyleSet';\nimport useSubmit from '../providers/internal/SendBox/useSubmit';\nimport AttachmentIcon from './Assets/AttachmentIcon';\n\nconst { useDisabled, useSendBoxAttachments, useLocalizer, useStyleOptions } = hooks;\n\nconst ROOT_STYLE = {\n '&.webchat__upload-button': {\n display: 'flex',\n overflow: 'hidden',\n position: 'relative',\n\n '& .webchat__upload-button--file-input': {\n height: 0,\n width: 0,\n opacity: 0,\n position: 'absolute',\n left: 0,\n top: 0\n }\n }\n};\n\nconst PREVENT_DEFAULT_HANDLER = event => event.preventDefault();\n\ntype UploadButtonProps = {\n className?: string;\n};\n\nconst UploadButton: FC<UploadButtonProps> = ({ className }) => {\n const [{ sendAttachmentOn, uploadAccept, uploadMultiple }] = useStyleOptions();\n const [{ uploadButton: uploadButtonStyleSet }] = useStyleSet();\n const [disabled] = useDisabled();\n const [sendBoxAttachments, setSendBoxAttachments] = useSendBoxAttachments();\n const focus = useFocus();\n const inputRef = useRef<HTMLInputElement>(null);\n const localize = useLocalizer();\n const makeThumbnail = useMakeThumbnail();\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n const submit = useSubmit();\n\n const sendAttachmentOnRef = useRefFrom(sendAttachmentOn);\n const uploadFileString = localize('TEXT_INPUT_UPLOAD_BUTTON_ALT');\n\n const handleClick = useCallback<MouseEventHandler<HTMLButtonElement>>(() => inputRef.current?.click(), [inputRef]);\n\n const handleFileChange = useCallback<FormEventHandler<HTMLInputElement>>(\n ({ currentTarget }) => {\n // We should change the focus synchronously for accessibility reason.\n focus('sendBox');\n\n // TODO: [P2] We should disable send button while we are creating thumbnails.\n // Otherwise, if the user click the send button too quickly, it will not attach any files.\n (async function () {\n setSendBoxAttachments(\n Object.freeze(\n await Promise.all(\n [...currentTarget.files].map(blob => makeThumbnail(blob).then(thumbnailURL => ({ blob, thumbnailURL })))\n )\n )\n );\n\n sendAttachmentOnRef.current === 'attach' && submit();\n })();\n },\n [focus, makeThumbnail, sendAttachmentOnRef, setSendBoxAttachments, submit]\n );\n\n return (\n <div className={classNames(rootClassName, 'webchat__upload-button', uploadButtonStyleSet + '', className)}>\n <input\n accept={uploadAccept}\n aria-disabled={disabled}\n aria-hidden=\"true\"\n className=\"webchat__upload-button--file-input\"\n multiple={uploadMultiple}\n onChange={disabled ? undefined : handleFileChange}\n onClick={disabled ? PREVENT_DEFAULT_HANDLER : undefined}\n readOnly={disabled}\n ref={inputRef}\n role=\"button\"\n tabIndex={-1}\n type=\"file\"\n />\n <IconButton alt={uploadFileString} aria-label={uploadFileString} disabled={disabled} onClick={handleClick}>\n <AttachmentIcon checked={!!sendBoxAttachments.length} />\n </IconButton>\n </div>\n );\n};\n\nUploadButton.defaultProps = {\n className: undefined\n};\n\nUploadButton.propTypes = {\n className: PropTypes.string\n};\n\nexport default UploadButton;\n","import { hooks } from 'botframework-webchat-api';\nimport { useCallback } from 'react';\nimport { useRefFrom } from 'use-ref-from';\n\nimport downscaleImageToDataURL from '../Utils/downscaleImageToDataURL/index';\n\nconst { useStyleOptions, useTrackTiming } = hooks;\n\nasync function makeThumbnail(\n file: File,\n width: number,\n height: number,\n contentType: string,\n quality: number\n): Promise<URL | undefined> {\n try {\n return await downscaleImageToDataURL(file, width, height, contentType, quality);\n } catch (error) {\n console.warn(`Web Chat: Failed to downscale image due to ${error}.`);\n }\n}\n\nexport default function useMakeThumbnail(): (file: File, contentType?: string | undefined) => Promise<undefined | URL> {\n const [styleOptions] = useStyleOptions();\n const trackTiming = useTrackTiming<undefined | URL>();\n\n const styleOptionsRef = useRefFrom(styleOptions);\n\n // TODO: [P3] We need to find revokeObjectURL on the UI side\n // Redux store should not know about the browser environment\n // One fix is to use ArrayBuffer instead of object URL, but that would requires change to DirectLineJS\n return useCallback(\n (file: File, contentType?: string | undefined): Promise<undefined | URL> => {\n const {\n current: {\n enableUploadThumbnail,\n uploadThumbnailContentType,\n uploadThumbnailHeight,\n uploadThumbnailQuality,\n uploadThumbnailWidth\n }\n } = styleOptionsRef;\n\n if (enableUploadThumbnail && (contentType || (file instanceof File ? file.type : '')).startsWith('image/')) {\n return trackTiming(\n 'sendFiles:makeThumbnail',\n makeThumbnail(\n file,\n uploadThumbnailWidth,\n uploadThumbnailHeight,\n uploadThumbnailContentType,\n uploadThumbnailQuality\n )\n );\n }\n\n return Promise.resolve<undefined>(undefined);\n },\n [styleOptionsRef, trackTiming]\n );\n}\n","function keepAspectRatio(\n width: number,\n height: number,\n maxWidth: number,\n maxHeight: number\n): { height: number; width: number } {\n if (width < maxWidth && height < maxHeight) {\n // Photo is smaller than both maximum dimensions, take it as-is\n return {\n height,\n width\n };\n }\n\n const aspectRatio = width / height;\n\n if (aspectRatio > maxWidth / maxHeight) {\n // Photo is wider than maximum dimension, downscale it based on maxWidth.\n return {\n height: maxWidth / aspectRatio,\n width: maxWidth\n };\n }\n\n // Photo is taller than maximum dimension, downscale it based on maxHeight.\n return {\n height: maxHeight,\n width: maxHeight * aspectRatio\n };\n}\n\nfunction createCanvas(width: number, height: number): HTMLCanvasElement {\n const canvas = document.createElement('canvas');\n\n canvas.height = height;\n canvas.width = width;\n\n return canvas;\n}\n\nfunction loadImageFromBlob(blob: Blob): Promise<HTMLImageElement> {\n const blobURL = URL.createObjectURL(blob);\n\n return new Promise<HTMLImageElement>((resolve, reject) => {\n const image = document.createElement('img');\n\n image.addEventListener('error', ({ error }) => reject(error));\n image.addEventListener('load', () => resolve(image));\n image.setAttribute('src', blobURL);\n }).finally(() => {\n URL.revokeObjectURL(blobURL);\n });\n}\n\nexport default async function downscaleImageToDataURLUsingBrowser(\n blob: Blob,\n maxWidth: number,\n maxHeight: number,\n type: string,\n quality: number\n): Promise<URL> {\n const image = await loadImageFromBlob(blob);\n const { height, width } = keepAspectRatio(image.width, image.height, maxWidth, maxHeight);\n const canvas = createCanvas(width, height);\n const context = canvas.getContext('2d');\n\n if (!context) {\n throw new Error('botframework-webchat: Failed to get 2D context.');\n }\n\n context.drawImage(image, 0, 0, width, height);\n\n return new URL(canvas.toDataURL(type, quality));\n}\n","import downscaleImageToDataURLUsingBrowser from './downscaleImageToDataURLUsingBrowser';\nimport downscaleImageToDataURLUsingWorker, {\n checkSupport as supportWorker\n} from './downscaleImageToDataURLUsingWorker';\n\nexport default async function downscaleImageToDataURL(\n blob: Blob | File,\n maxWidth: number,\n maxHeight: number,\n type: string,\n quality: number\n): Promise<URL> {\n if (await supportWorker()) {\n return downscaleImageToDataURLUsingWorker(blob, maxWidth, maxHeight, type, quality);\n }\n\n return downscaleImageToDataURLUsingBrowser(blob, maxWidth, maxHeight, type, quality);\n}\n","import classNames from 'classnames';\nimport React from 'react';\n\nimport useStyleToEmotionObject from '../../hooks/internal/useStyleToEmotionObject';\n\ntype Props = Readonly<{ checked: boolean }>;\n\nconst ROOT_STYLE = {\n '&.webchat__attachment-icon': {\n display: 'grid',\n gridTemplateArea: 'body',\n position: 'relative',\n\n '& .webchat__attachment-icon__icon': {\n gridArea: 'body'\n },\n\n '&:not(.webchat__attachment-icon--checked) .webchat__attachment-icon__checkmark-icon': {\n display: 'none'\n },\n\n // TODO: [P1] Replace the icon with a SVG that embed the checkmark directly.\n '& .webchat__attachment-icon__checkmark-icon': {\n // White border around the check icon\n border: '2px solid white',\n borderRadius: '50%',\n position: 'absolute',\n left: '45%',\n top: '50%'\n }\n }\n};\n\nconst AttachmentIcon = ({ checked }: Props) => {\n const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';\n\n return (\n <div\n className={classNames(\n 'webchat__attachment-icon',\n { 'webchat__attachment-icon--checked': checked },\n rootClassName\n )}\n >\n <svg\n className=\"webchat__attachment-icon__icon\"\n focusable={false}\n height={28}\n role=\"presentation\"\n viewBox=\"0 0 25.75 46\"\n width={28}\n >\n <path\n clipRule=\"evenodd\"\n d=\"M20.75 11.75v21.37a7.69 7.69 0 0 1-.62 3.07 7.95 7.95 0 0 1-4.19 4.19 7.89 7.89 0 0 1-6.13 0 7.95 7.95 0 0 1-4.19-4.19 7.69 7.69 0 0 1-.62-3.07v-22.5a5.27 5.27 0 0 1 .45-2.17 5.69 5.69 0 0 1 3-3 5.48 5.48 0 0 1 4.35 0 5.69 5.69 0 0 1 3 3 5.27 5.27 0 0 1 .45 2.17v22.5a3.41 3.41 0 0 1-.26 1.32 3.31 3.31 0 0 1-1.8 1.8 3.46 3.46 0 0 1-2.63 0 3.31 3.31 0 0 1-1.8-1.8 3.41 3.41 0 0 1-.26-1.32V14h2.25v19.12a1.13 1.13 0 1 0 2.25 0v-22.5a3.4 3.4 0 0 0-.26-1.31 3.31 3.31 0 0 0-1.8-1.8 3.46 3.46 0 0 0-2.63 0 3.31 3.31 0 0 0-1.8 1.8 3.4 3.4 0 0 0-.26 1.31v22.5a5.32 5.32 0 0 0 .45 2.18 5.69 5.69 0 0 0 3 3 5.48 5.48 0 0 0 4.35 0 5.69 5.69 0 0 0 3-3 5.32 5.32 0 0 0 .45-2.18v-21.37z\"\n />\n </svg>\n <svg\n className=\"webchat__attachment-icon__icon webchat__attachment-icon__checkmark-icon\"\n focusable={false}\n height={10}\n role=\"presentation\"\n viewBox=\"0 0 10 10\"\n width={10}\n >\n <path d=\"M5 10C7.76142 10 10 7.76142 10 5C10 2.23858 7.76142 0 5 0C2.23858 0 0 2.23858 0 5C0 7.76142 2.23858 10 5 10ZM7.10356 4.10355L4.85357 6.35356C4.65831 6.54883 4.34173 6.54883 4.14646 6.35357L3.14645 5.35357C2.95119 5.1583 2.95118 4.84172 3.14644 4.64646C3.34171 4.45119 3.65829 4.45119 3.85355 4.64645L4.50001 5.29291L6.39644 3.39645C6.59171 3.20119 6.90829 3.20118 7.10355 3.39644C7.29881 3.59171 7.29882 3.90829 7.10356 4.10355Z\" />\n </svg>\n </div>\n );\n};\n\nexport default AttachmentIcon;\n","import { type SendBoxMiddleware } from 'botframework-webchat-api';\n\nimport BasicSendBoxToolbar from './BasicSendBoxToolbar';\n\nconst createMiddleware = (): readonly SendBoxMiddleware[] => Object.freeze([() => () => () => BasicSendBoxToolbar]);\n\nexport default createMiddleware;\n","import { normalizeStyleOptions, StyleOptions } from 'botframework-webchat-api';\n\nimport createActivitiesStyle from './StyleSet/Activities';\nimport createAudioAttachmentStyle from './StyleSet/AudioAttachment';\nimport createAudioContentStyle from './StyleSet/AudioContent';\nimport createAutoResizeTextAreaStyle from './StyleSet/AutoResizeTextArea';\nimport createAvatarStyle from './StyleSet/Avatar';\nimport createBasicTranscriptStyle from './StyleSet/BasicTranscript';\nimport createBubbleStyle from './StyleSet/Bubble';\nimport createCarouselFilmStrip from './StyleSet/CarouselFilmStrip';\nimport createCarouselFilmStripAttachment from './StyleSet/CarouselFilmStripAttachment';\nimport createCarouselFlipper from './StyleSet/CarouselFlipper';\nimport createCitationModalDialogStyle from './StyleSet/CitationModalDialog';\nimport createConnectivityNotification from './StyleSet/ConnectivityNotification';\nimport createCSSCustomPropertiesStyle from './StyleSet/CSSCustomProperties';\nimport createDictationInterimsStyle from './StyleSet/DictationInterims';\nimport createErrorBoxStyle from './StyleSet/ErrorBox';\nimport createErrorNotificationStyle from './StyleSet/ErrorNotification';\nimport createFileContentStyle from './StyleSet/FileContent';\nimport createImageAvatarStyle from './StyleSet/ImageAvatar';\nimport createInitialsAvatarStyle from './StyleSet/InitialsAvatar';\nimport createKeyboardHelpStyle from './StyleSet/KeyboardHelp';\nimport createLinkDefinitionsStyle from './StyleSet/LinkDefinitions';\nimport createMicrophoneButtonStyle from './StyleSet/MicrophoneButton';\nimport createModalDialogStyle from './StyleSet/ModalDialog';\nimport createRenderMarkdownStyle from './StyleSet/RenderMarkdown';\nimport createRootStyle from './StyleSet/Root';\nimport createScrollToEndButtonStyle from './StyleSet/ScrollToEndButton';\nimport createSendBoxButtonStyle from './StyleSet/SendBoxButton';\nimport createSendBoxStyle from './StyleSet/SendBox';\nimport createSendBoxTextBoxStyle from './StyleSet/SendBoxTextBox';\nimport createSendStatusStyle from './StyleSet/SendStatus';\nimport createSingleAttachmentActivityStyle from './StyleSet/SingleAttachmentActivity';\nimport createSlottedActivityStatusStyle from './StyleSet/SlottedActivityStatus';\nimport createSpinnerAnimationStyle from './StyleSet/SpinnerAnimation';\nimport createStackedLayoutStyle from './StyleSet/StackedLayout';\nimport createSuggestedActionsStyle from './StyleSet/SuggestedActions';\nimport createSuggestedActionStyle from './StyleSet/SuggestedAction';\nimport createTextContentStyle from './StyleSet/TextContent';\nimport createThumbButtonStyle from './StyleSet/ThumbButton';\nimport createToasterStyle from './StyleSet/Toaster';\nimport createToastStyle from './StyleSet/Toast';\nimport createTypingAnimationStyle from './StyleSet/TypingAnimation';\nimport createTypingIndicatorStyle from './StyleSet/TypingIndicator';\nimport createUploadButtonStyle from './StyleSet/UploadButton';\nimport createVideoAttachmentStyle from './StyleSet/VideoAttachment';\nimport createVideoContentStyle from './StyleSet/VideoContent';\nimport createVimeoContentStyle from './StyleSet/VimeoContent';\nimport createWarningNotificationStyle from './StyleSet/WarningNotification';\nimport createYouTubeContentStyle from './StyleSet/YouTubeContent';\n\n// TODO: [P4] We should add a notice for people who want to use \"styleSet\" instead of \"styleOptions\".\n// \"styleSet\" is actually CSS stylesheet and it is based on the DOM tree.\n// DOM tree may change from time to time, thus, maintaining \"styleSet\" becomes a constant effort.\n\nexport default function createStyleSet(styleOptions: StyleOptions) {\n const strictStyleOptions = normalizeStyleOptions(styleOptions);\n\n return Object.freeze({\n activities: createActivitiesStyle(),\n audioAttachment: createAudioAttachmentStyle(strictStyleOptions),\n audioContent: createAudioContentStyle(),\n autoResizeTextArea: createAutoResizeTextAreaStyle(strictStyleOptions),\n avatar: createAvatarStyle(strictStyleOptions),\n basicTranscript: createBasicTranscriptStyle(strictStyleOptions),\n bubble: createBubbleStyle(strictStyleOptions),\n carouselFilmStrip: createCarouselFilmStrip(strictStyleOptions),\n carouselFilmStripAttachment: createCarouselFilmStripAttachment(strictStyleOptions),\n carouselFlipper: createCarouselFlipper(strictStyleOptions),\n connectivityNotification: createConnectivityNotification(strictStyleOptions),\n dictationInterims: createDictationInterimsStyle(strictStyleOptions),\n errorBox: createErrorBoxStyle(strictStyleOptions),\n errorNotification: createErrorNotificationStyle(strictStyleOptions),\n fileContent: createFileContentStyle(strictStyleOptions),\n imageAvatar: createImageAvatarStyle(strictStyleOptions),\n initialsAvatar: createInitialsAvatarStyle(strictStyleOptions),\n keyboardHelp: createKeyboardHelpStyle(strictStyleOptions),\n microphoneButton: createMicrophoneButtonStyle(strictStyleOptions),\n options: { ...strictStyleOptions }, // Cloned to make sure no additional modifications will propagate up.\n root: createRootStyle(strictStyleOptions),\n scrollToEndButton: createScrollToEndButtonStyle(strictStyleOptions),\n sendBox: createSendBoxStyle(strictStyleOptions),\n sendBoxButton: createSendBoxButtonStyle(strictStyleOptions),\n sendBoxTextBox: createSendBoxTextBoxStyle(strictStyleOptions),\n singleAttachmentActivity: createSingleAttachmentActivityStyle(strictStyleOptions),\n spinnerAnimation: createSpinnerAnimationStyle(strictStyleOptions),\n stackedLayout: createStackedLayoutStyle(strictStyleOptions),\n suggestedAction: createSuggestedActionStyle(strictStyleOptions),\n suggestedActions: createSuggestedActionsStyle(strictStyleOptions),\n toast: createToastStyle(strictStyleOptions),\n toaster: createToasterStyle(strictStyleOptions),\n typingAnimation: createTypingAnimationStyle(strictStyleOptions),\n typingIndicator: createTypingIndicatorStyle(strictStyleOptions),\n uploadButton: createUploadButtonStyle(strictStyleOptions),\n videoAttachment: createVideoAttachmentStyle(),\n videoContent: createVideoContentStyle(strictStyleOptions),\n vimeoContent: createVimeoContentStyle(strictStyleOptions),\n warningNotification: createWarningNotificationStyle(strictStyleOptions),\n youTubeContent: createYouTubeContentStyle(strictStyleOptions),\n\n // Following styles follows new house rules:\n // - Use CSS var instead of strictStyleOptions\n citationModalDialog: createCitationModalDialogStyle(),\n cssCustomProperties: createCSSCustomPropertiesStyle(strictStyleOptions),\n linkDefinitions: createLinkDefinitionsStyle(),\n modalDialog: createModalDialogStyle(),\n renderMarkdown: createRenderMarkdownStyle(),\n sendStatus: createSendStatusStyle(),\n slottedActivityStatus: createSlottedActivityStatusStyle(),\n textContent: createTextContentStyle(),\n thumbButton: createThumbButtonStyle()\n } as const);\n}\n","export default function createActivitiesStyle() {\n return {\n margin: 0,\n padding: 0\n };\n}\n","import { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function AudioAttachment({ avatarSize }: StrictStyleOptions) {\n return {\n // TODO: [P2] We should not set \"display\" in styleSet, this will allow the user to break the layout for no good reasons.\n display: 'flex',\n minHeight: avatarSize\n };\n}\n","export default function AudioContent() {\n return {\n width: '100%'\n };\n}\n","import { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function AutoResizeTextArea({ primaryFont }: StrictStyleOptions) {\n return {\n '&.webchat__auto-resize-textarea': {\n fontFamily: primaryFont,\n overflow: 'hidden',\n position: 'relative',\n\n '& .webchat__auto-resize-textarea__doppelganger': {\n color: 'transparent',\n height: '100%',\n overflowY: 'auto',\n userSelect: 'none',\n width: 'inherit',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word'\n },\n\n '& .webchat__auto-resize-textarea__textarea': {\n appearance: 'none' /* Prevent browser styling */,\n backgroundColor: 'transparent',\n border: 0,\n color: 'inherit',\n fontFamily: 'inherit',\n fontSize: 'inherit',\n height: '100%',\n left: 0,\n margin: 0,\n outline: 0,\n overflowY: 'auto',\n padding: 0,\n position: 'absolute',\n resize: 'none' /* Hides the textarea resizing handle (on lower-right hand corner) */,\n top: 0,\n width: '100%',\n wordBreak: 'break-word'\n }\n }\n };\n}\n","import { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function createAvatarStyle({ avatarBorderRadius, avatarSize }: StrictStyleOptions) {\n return {\n '&.webchat__defaultAvatar': {\n borderRadius: avatarBorderRadius,\n height: avatarSize,\n width: avatarSize\n }\n };\n}\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [2] }] */\n\nimport { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function createBasicTranscriptStyleSet({\n paddingRegular,\n primaryFont,\n transcriptActivityVisualKeyboardIndicatorColor,\n transcriptActivityVisualKeyboardIndicatorStyle,\n transcriptActivityVisualKeyboardIndicatorWidth,\n transcriptTerminatorBackgroundColor,\n transcriptTerminatorBorderRadius,\n transcriptTerminatorColor,\n transcriptTerminatorFontSize,\n transcriptVisualKeyboardIndicatorColor,\n transcriptVisualKeyboardIndicatorStyle,\n transcriptVisualKeyboardIndicatorWidth\n}: StrictStyleOptions) {\n return {\n '&.webchat__basic-transcript': {\n '&:focus': {\n outline: 0,\n\n '& .webchat__basic-transcript__activity-indicator.webchat__basic-transcript__activity-indicator--focus': {\n borderColor: transcriptActivityVisualKeyboardIndicatorColor,\n borderStyle: transcriptActivityVisualKeyboardIndicatorStyle,\n borderWidth: transcriptActivityVisualKeyboardIndicatorWidth,\n boxSizing: 'border-box',\n height: `calc(100% - ${paddingRegular / 2}px)`,\n left: 0,\n marginBottom: 0,\n marginLeft: paddingRegular / 2,\n marginRight: paddingRegular / 2,\n marginTop: 0,\n pointerEvents: 'none',\n position: 'absolute',\n top: 0,\n width: `calc(100% - ${paddingRegular}px)`\n }\n },\n\n '&:focus-visible .webchat__basic-transcript__focus-indicator, .webchat__basic-transcript__terminator:focus-visible + .webchat__basic-transcript__focus-indicator':\n {\n height: '100%',\n borderColor: transcriptVisualKeyboardIndicatorColor,\n borderStyle: transcriptVisualKeyboardIndicatorStyle,\n borderWidth: transcriptVisualKeyboardIndicatorWidth,\n boxSizing: 'border-box',\n pointerEvents: 'none',\n position: 'absolute',\n top: 0,\n width: '100%'\n },\n\n '& .webchat__basic-transcript__activity': {\n paddingTop: paddingRegular / 2,\n position: 'relative',\n\n '&:first-child': {\n marginTop: paddingRegular / 2\n },\n\n '&:not(:first-child)': {\n marginTop: -paddingRegular / 2\n }\n },\n\n // When the activity is focused as active descendant, `scrollIntoView()` will scroll this invisible <div> into view.\n '& .webchat__basic-transcript__activity-active-descendant': {\n height: '100%',\n left: 0,\n marginTop: -paddingRegular / 2,\n paddingBottom: paddingRegular / 2,\n // The bounding box is expanded to both top and bottom to scroll focus indicator into view.\n // We should ignore clicks to make sure this expansion don't register click as focus.\n // Otherwise, when clicking on the very bottom edge of the activity, it will focus on next activity instead.\n pointerEvents: 'none',\n position: 'absolute',\n top: 0,\n width: '100%'\n },\n\n '& .webchat__basic-transcript__activity-body:not(:empty)': {\n paddingBottom: paddingRegular\n },\n\n '& .webchat__basic-transcript__terminator': {\n bottom: 0,\n height: 0,\n outline: 0,\n position: 'relative',\n width: '100%'\n },\n\n '& .webchat__basic-transcript__terminator-body': {\n bottom: 0,\n display: 'flex',\n justifyContent: 'center',\n position: 'absolute',\n width: '100%'\n },\n\n '& .webchat__basic-transcript__terminator:not(:focus) .webchat__basic-transcript__terminator-body': {\n display: 'none'\n },\n\n '& .webchat__basic-transcript__terminator-text': {\n backgroundColor: transcriptTerminatorBackgroundColor,\n borderRadius: transcriptTerminatorBorderRadius,\n color: transcriptTerminatorColor,\n fontFamily: primaryFont,\n fontSize: transcriptTerminatorFontSize,\n margin: paddingRegular / 2,\n padding: paddingRegular / 2\n }\n }\n };\n}\n","import { isForbiddenPropertyName } from 'botframework-webchat-core';\n\nexport default function mirrorStyle(mirrorSelector, styles) {\n const mirrored = {};\n\n for (const [key, value] of Object.entries(styles)) {\n if (typeof value === 'number' || typeof value === 'string') {\n const patchedKey = key.replace(/(^left|^right|Left|Right)/u, match =>\n match === 'Left' ? 'Right' : match === 'left' ? 'right' : match === 'Right' ? 'Left' : 'left'\n );\n\n if (!isForbiddenPropertyName(patchedKey)) {\n // Mitigated through denylisting.\n // eslint-disable-next-line security/detect-object-injection\n mirrored[patchedKey] = value;\n }\n } else if (!isForbiddenPropertyName(key)) {\n // Mitigated through denylisting.\n // eslint-disable-next-line security/detect-object-injection\n mirrored[key] = mirrorStyle('', value);\n }\n }\n\n const relative = /^&\\s*/gu.exec(mirrorSelector) || '';\n\n return mirrorSelector\n ? {\n [`${relative}:not(${mirrorSelector.substr(relative.length)})`]: styles,\n [mirrorSelector]: mirrored\n }\n : mirrored;\n}\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [0, 1, 2] }] */\nimport { StrictStyleOptions } from 'botframework-webchat-api';\n\nimport mirrorStyle from '../mirrorStyle';\n\nexport default function createBubbleStyle({\n bubbleBackground,\n bubbleBorderColor,\n bubbleBorderRadius,\n bubbleBorderStyle,\n bubbleBorderWidth,\n bubbleFromUserBackground,\n bubbleFromUserBorderColor,\n bubbleFromUserBorderRadius,\n bubbleFromUserBorderStyle,\n bubbleFromUserBorderWidth,\n bubbleFromUserNubOffset,\n bubbleFromUserNubSize,\n bubbleFromUserTextColor,\n bubbleMinHeight,\n bubbleNubOffset,\n bubbleNubSize,\n bubbleTextColor,\n messageActivityWordBreak,\n paddingRegular,\n transitionDuration\n}: StrictStyleOptions) {\n const botNubCornerRadius =\n typeof bubbleNubOffset === 'number' ? Math.min(bubbleBorderRadius, Math.abs(bubbleNubOffset)) : bubbleBorderRadius;\n const userNubCornerRadius =\n typeof bubbleFromUserNubOffset === 'number'\n ? Math.min(bubbleFromUserBorderRadius, Math.abs(bubbleFromUserNubOffset))\n : bubbleFromUserBorderRadius;\n\n return {\n '&.webchat__bubble': {\n '& .webchat__bubble__content': {\n marginLeft: 0,\n marginRight: 0,\n transitionDuration,\n transitionProperty: 'margin-left, margin-right',\n wordBreak: messageActivityWordBreak\n },\n\n '& .webchat__bubble__nub': {\n overflow: 'hidden', // This style is for IE11 because it doesn't respect SVG viewport\n position: 'absolute'\n },\n\n '& .webchat__bubble__nub-pad': {\n transitionDuration,\n transitionProperty: 'width',\n width: 0\n },\n\n '&.webchat__bubble--hide-nub, &.webchat__bubble--show-nub': {\n '& .webchat__bubble__nub-pad': {\n width: paddingRegular\n }\n },\n\n '&.webchat__bubble--rtl .webchat__bubble__nub': {\n transform: 'scale(-1, 1)'\n },\n\n '&:not(.webchat__bubble--from-user)': {\n '& .webchat__bubble__content': {\n background: bubbleBackground,\n borderColor: bubbleBorderColor,\n borderRadius: bubbleBorderRadius,\n borderStyle: bubbleBorderStyle,\n borderWidth: bubbleBorderWidth,\n color: bubbleTextColor,\n minHeight: bubbleMinHeight - bubbleBorderWidth * 2\n },\n\n ...(typeof bubbleNubSize === 'number'\n ? {\n '& .webchat__bubble__nub': {\n height: bubbleNubSize,\n width: bubbleNubSize\n }\n }\n : {}),\n\n '&:not(.webchat__bubble--nub-on-top) .webchat__bubble__nub': {\n bottom: -bubbleNubOffset\n },\n\n '&.webchat__bubble--nub-on-top .webchat__bubble__nub': {\n top: bubbleNubOffset\n },\n\n '& .webchat__bubble__nub-outline': {\n fill: bubbleBackground,\n stroke: bubbleBorderColor,\n strokeWidth: bubbleBorderWidth\n }\n },\n\n '&.webchat__bubble--from-user': {\n flexDirection: 'row-reverse',\n\n '& .webchat__bubble__content': {\n background: bubbleFromUserBackground,\n borderColor: bubbleFromUserBorderColor,\n borderRadius: bubbleFromUserBorderRadius,\n borderStyle: bubbleFromUserBorderStyle,\n borderWidth: bubbleFromUserBorderWidth,\n color: bubbleFromUserTextColor,\n minHeight: bubbleMinHeight - bubbleFromUserBorderWidth * 2\n },\n\n ...(typeof bubbleFromUserNubSize === 'number'\n ? {\n '& .webchat__bubble__nub': {\n height: bubbleFromUserNubSize,\n width: bubbleFromUserNubSize\n }\n }\n : {}),\n\n '&:not(.webchat__bubble--nub-on-top) .webchat__bubble__nub': {\n bottom: -bubbleFromUserNubOffset\n },\n\n '&.webchat__bubble--nub-on-top .webchat__bubble__nub': {\n top: bubbleFromUserNubOffset\n },\n\n '& .webchat__bubble__nub-outline': {\n fill: bubbleFromUserBackground,\n stroke: bubbleFromUserBorderColor,\n strokeWidth: bubbleFromUserBorderWidth\n }\n },\n\n ...mirrorStyle('&.webchat__bubble--rtl', {\n '&:not(.webchat__bubble--from-user)': {\n '&.webchat__bubble--show-nub': {\n // Hide border radius if there is a nub on the top/bottom left corner\n '&:not(.webchat__bubble--nub-on-top) .webchat__bubble__content': {\n borderBottomLeftRadius: botNubCornerRadius\n },\n\n '&.webchat__bubble--nub-on-top .webchat__bubble__content': {\n borderTopLeftRadius: botNubCornerRadius\n }\n },\n\n ...(typeof bubbleNubSize === 'number'\n ? {\n '& .webchat__bubble__nub': { left: bubbleBorderWidth - bubbleNubSize + paddingRegular }\n }\n : {})\n },\n\n '&.webchat__bubble--from-user': {\n '&.webchat__bubble--show-nub': {\n // Hide border radius if there is a nub on the top/bottom right corner\n '&:not(.webchat__bubble--nub-on-top) .webchat__bubble__content': {\n borderBottomRightRadius: userNubCornerRadius\n },\n\n '&.webchat__bubble--nub-on-top .webchat__bubble__content': {\n borderTopRightRadius: userNubCornerRadius\n }\n },\n\n ...(typeof bubbleFromUserNubSize === 'number'\n ? {\n '& .webchat__bubble__nub': { right: bubbleFromUserBorderWidth - bubbleFromUserNubSize + paddingRegular }\n }\n : {})\n }\n })\n }\n };\n}\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [2] }] */\nimport { StrictStyleOptions } from 'botframework-webchat-api';\n\nimport mirrorStyle from '../mirrorStyle';\n\nexport default function CarouselFilmStrip({\n avatarSize,\n bubbleMaxWidth,\n paddingRegular,\n transitionDuration\n}: StrictStyleOptions) {\n return {\n '&.webchat__carousel-filmstrip': {\n // Browser quirks: Firefox has no way to hide scrollbar and while keeping it in function\n // https://developer.mozilla.org/en-US/docs/Web/CSS/overflow\n '@supports (-moz-appearance: none)': {\n marginBottom: -17\n },\n\n '& .webchat__carousel-filmstrip__message': {\n maxWidth: bubbleMaxWidth,\n transitionDuration,\n transitionProperty: 'max-width'\n },\n\n '&.webchat__carousel-filmstrip--hide-nub, &.webchat__carousel-filmstrip--show-nub, &.webchat__carousel-filmstrip--hide-avatar, &.webchat__carousel-filmstrip--show-avatar':\n {\n '& .webchat__carousel-filmstrip__message': {\n maxWidth: bubbleMaxWidth + paddingRegular\n }\n },\n\n '& .webchat__carousel-filmstrip__alignment-pad': {\n transitionDuration,\n transitionProperty: 'width',\n width: paddingRegular\n },\n\n '&.webchat__carousel-filmstrip--extra-trailing .webchat__carousel-filmstrip__alignment-pad': {\n width: paddingRegular * 2\n },\n\n '&:not(.webchat__carousel-filmstrip--no-message) .webchat__carousel-filmstrip__attachments': {\n marginTop: paddingRegular\n },\n\n '& .webchat__carousel-filmstrip__avatar-gutter': {\n alignItems: 'flex-end',\n transitionDuration,\n transitionProperty: 'width'\n },\n\n '& .webchat__carousel-filmstrip__nub-pad': {\n transitionDuration,\n transitionProperty: 'width',\n width: 0\n },\n\n '&.webchat__carousel-filmstrip--hide-avatar, &.webchat__carousel-filmstrip--show-avatar': {\n '& .webchat__carousel-filmstrip__avatar-gutter': {\n width: avatarSize\n }\n },\n\n '&.webchat__carousel-filmstrip--hide-avatar, &.webchat__carousel-filmstrip--show-avatar, &.webchat__carousel-filmstrip--hide-nub, &.webchat__carousel-filmstrip--show-nub':\n {\n '& .webchat__carousel-filmstrip__nub-pad': {\n width: paddingRegular\n }\n },\n\n '&:not(.webchat__carousel-filmstrip--top-callout) .webchat__carousel-filmstrip__avatar-gutter': {\n justifyContent: 'flex-end'\n },\n\n ...mirrorStyle('&.webchat__carousel-filmstrip--rtl', {\n '& .webchat__carousel-filmstrip__avatar-gutter': {\n marginLeft: paddingRegular\n },\n\n '& .webchat__carousel-filmstrip__attachments': {\n marginLeft: -paddingRegular\n },\n\n '&.webchat__carousel-filmstrip--hide-avatar, &.webchat__carousel-filmstrip--show-avatar': {\n '& .webchat__carousel-filmstrip__attachments': {\n marginLeft: -(avatarSize + paddingRegular * 2)\n }\n },\n\n '&.webchat__carousel-filmstrip--hide-nub, &.webchat__carousel-filmstrip--show-nub': {\n '&:not(.webchat__carousel-filmstrip--hide-avatar.webchat__carousel-filmstrip--show-avatar)': {\n '& .webchat__carousel-filmstrip__attachments': {\n marginLeft: -paddingRegular * 2\n }\n }\n }\n })\n }\n };\n}\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [2] }] */\nimport { StrictStyleOptions } from 'botframework-webchat-api';\n\nimport mirrorStyle from '../mirrorStyle';\n\nexport default function CarouselFilmStripAttachment({\n avatarSize,\n bubbleMaxWidth,\n bubbleMinWidth,\n paddingRegular,\n transcriptVisualKeyboardIndicatorColor,\n transcriptVisualKeyboardIndicatorStyle,\n transcriptVisualKeyboardIndicatorWidth,\n transitionDuration\n}: StrictStyleOptions) {\n return {\n '&.webchat__carousel-filmstrip-attachment': {\n minWidth: bubbleMinWidth,\n maxWidth: bubbleMaxWidth,\n transitionDuration,\n transitionProperty: 'max-width, min-width',\n\n '&:focus': {\n outline: 0\n },\n\n '&:focus .webchat__carousel-filmstrip-attachment--focus': {\n borderColor: transcriptVisualKeyboardIndicatorColor,\n borderStyle: transcriptVisualKeyboardIndicatorStyle,\n borderWidth: transcriptVisualKeyboardIndicatorWidth,\n boxSizing: 'border-box',\n height: `calc(100% - ${transcriptVisualKeyboardIndicatorWidth}px)`,\n left: 0,\n pointerEvents: 'none',\n position: 'absolute',\n top: 0,\n width: `calc(100% - ${transcriptVisualKeyboardIndicatorWidth}px)`\n }\n },\n ...mirrorStyle('&.webchat__carousel-filmstrip-attachment--rtl', {\n paddingLeft: paddingRegular,\n\n '&.webchat__carousel-filmstrip-attachment--hide-avatar, &.webchat__carousel-filmstrip-attachment--show-avatar': {\n '&:first-child': {\n paddingLeft: avatarSize + paddingRegular * 2\n }\n },\n\n '&.webchat__carousel-filmstrip-attachment--hide-nub, &.webchat__carousel-filmstrip-attachment--show-nub': {\n '&:not(.webchat__carousel-filmstrip-attachment--hide-avatar.webchat__carousel-filmstrip-attachment--show-avatar):first-child':\n {\n paddingLeft: paddingRegular * 2\n }\n }\n })\n };\n}\n","import { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function CarouselFlipper({\n transcriptOverlayButtonBackground,\n transcriptOverlayButtonBackgroundOnDisabled,\n transcriptOverlayButtonBackgroundOnFocus,\n transcriptOverlayButtonBackgroundOnHover,\n transcriptOverlayButtonColor,\n transcriptOverlayButtonColorOnDisabled,\n transcriptOverlayButtonColorOnFocus,\n transcriptOverlayButtonColorOnHover\n}: StrictStyleOptions) {\n return {\n '&.webchat__carousel-layout': {\n '& .react-film__flipper': {\n '& .react-film__flipper__body': {\n backgroundColor: transcriptOverlayButtonBackground,\n color: transcriptOverlayButtonColor,\n outline: 0\n },\n\n '&:disabled, &[aria-disabled=\"true\"]': {\n '& .react-film__flipper__body': {\n backgroundColor: transcriptOverlayButtonBackgroundOnDisabled,\n color: transcriptOverlayButtonColorOnDisabled\n }\n },\n\n '&:focus .react-film__flipper__body': {\n backgroundColor: transcriptOverlayButtonBackgroundOnFocus,\n color: transcriptOverlayButtonColorOnFocus || transcriptOverlayButtonColor\n },\n\n '&:hover .react-film__flipper__body': {\n backgroundColor: transcriptOverlayButtonBackgroundOnHover,\n color: transcriptOverlayButtonColorOnHover || transcriptOverlayButtonColor\n }\n }\n }\n };\n}\n","export default function createCitationModalDialogStyle() {\n return {\n '&.webchat__citation-modal-dialog': {\n '& .webchat__citation-modal-dialog__body': {\n lineHeight: '20px'\n }\n }\n };\n}\n","import { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function ConnectivityNotification({\n connectivityMarginLeftRight,\n connectivityMarginTopBottom,\n connectivityTextSize,\n notificationText,\n primaryFont\n}: StrictStyleOptions) {\n return {\n alignItems: 'center',\n color: notificationText,\n // TODO: [P2] We should not set \"display\" in styleSet, this will allow the user to break the layout for no good reasons.\n display: 'flex',\n fontFamily: primaryFont,\n fontSize: connectivityTextSize,\n marginBottom: connectivityMarginTopBottom,\n marginLeft: connectivityMarginLeftRight,\n marginRight: connectivityMarginLeftRight,\n marginTop: connectivityMarginTopBottom\n };\n}\n","const CustomPropertyNames = Object.freeze({\n // Make sure key names does not have JavaScript forbidden names.\n ColorAccent: '--webchat__color--accent',\n ColorSubtle: '--webchat__color--subtle',\n ColorTimestamp: '--webchat__color--timestamp',\n FontPrimary: '--webchat__font--primary',\n FontSizeSmall: '--webchat__font-size--small',\n IconURLExternalLink: '--webchat__icon-url--external-link',\n MaxWidthBubble: '--webchat__max-width--bubble',\n MinHeightBubble: '--webchat__min-height--bubble',\n PaddingRegular: '--webchat__padding--regular'\n});\n\n// This is for type-checking only to make sure the CSS custom property names is `--webchat__${string}`.\nconst _TypeChecking: Readonly<Record<string, `--webchat__${string}`>> = CustomPropertyNames;\n\nexport default CustomPropertyNames;\n","import { StrictStyleOptions } from 'botframework-webchat-api';\n\nimport CustomPropertyNames from '../CustomPropertyNames';\n\nexport default function createCSSCustomPropertiesStyle({\n accent,\n bubbleMaxWidth,\n bubbleMinHeight,\n fontSizeSmall,\n markdownExternalLinkIconImage,\n paddingRegular,\n primaryFont,\n subtle,\n timestampColor\n}: StrictStyleOptions) {\n return {\n '&.webchat__css-custom-properties': {\n display: 'contents',\n\n // TODO: Should we register the CSS property for inheritance, type checking, and initial value?\n // Registrations need to be done on global level, and duplicate registration will throw.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/@property\n\n // TODO: This is ongoing work. We are slowly adding CSS variables to ease calculations and stuff.\n //\n // We need to build a story to let web devs override these CSS variables.\n //\n // Candy points:\n // - They should be able to override CSS variables for certain things (say, padding of popover) without affecting much.\n //\n // House rules:\n // - We should put styling varibles here, e.g. paddingRegular\n // - We MUST NOT put runtime variables here, e.g. sendTimeout\n // - This is because we cannot programmatically know when the sendTimeout change\n [CustomPropertyNames.ColorAccent]: accent,\n [CustomPropertyNames.ColorSubtle]: subtle,\n [CustomPropertyNames.ColorTimestamp]: timestampColor || subtle, // Maybe we should not need this if we allow web devs to override CSS variables for certain components.\n [CustomPropertyNames.FontPrimary]: primaryFont,\n [CustomPropertyNames.FontSizeSmall]: fontSizeSmall,\n [CustomPropertyNames.IconURLExternalLink]: markdownExternalLinkIconImage,\n [CustomPropertyNames.MaxWidthBubble]: bubbleMaxWidth + 'px',\n [CustomPropertyNames.MinHeightBubble]: bubbleMinHeight + 'px',\n [CustomPropertyNames.PaddingRegular]: paddingRegular + 'px'\n }\n };\n}\n","import { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function createDictationInterimsStyle({ paddingRegular, primaryFont }: StrictStyleOptions) {\n return {\n fontFamily: primaryFont,\n margin: 0,\n paddingBottom: 0,\n paddingLeft: paddingRegular,\n paddingRight: paddingRegular,\n paddingTop: 0,\n\n '&.dictating > span:not(:first-child), &.status': {\n opacity: 0.5\n }\n };\n}\n","import { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function createErrorBoxStyle({ monospaceFont, primaryFont }: StrictStyleOptions) {\n return {\n // TODO: [P2] We should not set \"display\" in styleSet, this will allow the user to break the layout for no good reasons.\n display: 'flex',\n flexDirection: 'column',\n fontFamily: primaryFont,\n margin: 0,\n minHeight: 20,\n maxHeight: 200,\n overflowY: 'auto',\n WebkitOverflowScrolling: 'touch',\n\n '& > :first-child': {\n backgroundColor: '#EF0000',\n color: 'White',\n padding: '5px 10px'\n },\n\n '& > :last-child': {\n borderColor: '#EF0000',\n borderStyle: 'dashed',\n borderBottomWidth: 2,\n borderLeftWidth: 2,\n borderRightWidth: 2,\n borderTopWidth: 0,\n margin: 0,\n overflowY: 'auto',\n padding: 10,\n\n '& > pre': {\n fontFamily: monospaceFont,\n fontSize: '60%',\n margin: 0\n }\n }\n };\n}\n","import { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function createErrorNotificationStyle({\n connectivityIconPadding,\n connectivityMarginLeftRight,\n connectivityMarginTopBottom,\n connectivityTextSize,\n failedConnectivity,\n primaryFont\n}: StrictStyleOptions) {\n return {\n alignItems: 'center',\n color: failedConnectivity,\n display: 'flex',\n fontFamily: primaryFont,\n fontSize: connectivityTextSize,\n fontWeight: 'bold',\n marginBottom: connectivityMarginTopBottom,\n marginLeft: connectivityMarginLeftRight,\n marginRight: connectivityMarginLeftRight,\n marginTop: connectivityMarginTopBottom,\n\n '& > svg': {\n fill: failedConnectivity,\n\n '&:not(.webchat__error--rtl)': {\n paddingRight: connectivityIconPadding\n },\n\n '&.webchat__error--rtl': {\n paddingLeft: connectivityIconPadding\n }\n }\n };\n}\n","import { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function createFileContentStyle({\n accent,\n bubbleTextColor,\n paddingRegular,\n primaryFont\n}: StrictStyleOptions) {\n return {\n color: bubbleTextColor,\n display: 'flex',\n fontFamily: primaryFont,\n padding: paddingRegular,\n\n '& .webchat__fileContent__badge': {\n justifyContent: 'center'\n },\n\n '& .webchat__fileContent__buttonLink': {\n alignItems: 'center',\n color: bubbleTextColor,\n textDecoration: 'none',\n\n '&:focus': {\n backgroundColor: 'rgba(0, 0, 0, .1)'\n }\n },\n\n '& .webchat__fileContent__downloadIcon': {\n fill: accent,\n padding: paddingRegular,\n\n '&:not(.webchat__fileContent__downloadIcon--rtl)': {\n marginLeft: paddingRegular\n },\n\n '&.webchat__fileContent__downloadIcon--rtl': {\n marginRight: paddingRegular\n }\n },\n '& .webchat__fileContent__fileName': {\n color: accent\n }\n };\n}\n","import { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function createImageAvatarStyle({ avatarSize }: StrictStyleOptions) {\n return {\n height: avatarSize,\n overflow: 'hidden',\n width: avatarSize\n };\n}\n","import { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function createInitialsAvatarStyle({\n accent,\n avatarSize,\n botAvatarBackgroundColor,\n primaryFont,\n userAvatarBackgroundColor\n}: StrictStyleOptions) {\n return {\n '&.webchat__initialsAvatar': {\n alignItems: 'center',\n color: 'White',\n fontFamily: primaryFont,\n height: avatarSize,\n justifyContent: 'center',\n overflow: 'hidden',\n width: avatarSize,\n\n '&.webchat__initialsAvatar--fromUser': {\n backgroundColor: userAvatarBackgroundColor || accent\n },\n\n '&:not(.webchat__initialsAvatar--fromUser)': {\n backgroundColor: botAvatarBackgroundColor || accent\n }\n }\n };\n}\n","// Numbers are commonly used in CSS.\n/* eslint-disable no-magic-numbers */\n\nimport { StrictStyleOptions } from 'botframework-webchat-api';\n\nconst DARK_THEME_SELECTOR = '@media (forced-colors: none) and (prefers-color-scheme: dark)';\nconst LIGHT_THEME_SELECTOR = '@media (forced-colors: none) and (prefers-color-scheme: light)';\nconst FORCED_COLORS_SELECTOR = '@media (forced-colors: active)';\n\nexport default function createKeyboardHelpStyleSet({ paddingRegular, primaryFont }: StrictStyleOptions) {\n return {\n '&.webchat__keyboard-help': {\n fontFamily: primaryFont,\n fontSize: 14,\n height: '100%',\n outline: 0,\n overflow: 'hidden',\n\n '&:not(.webchat__keyboard-help--shown)': {\n height: 0,\n margin: 0,\n overflow: 'hidden',\n pointerEvents: 'none',\n width: 0\n },\n\n '& .webchat__keyboard-help__border': {\n boxSizing: 'border-box',\n height: '100%',\n padding: paddingRegular\n },\n\n '& .webchat__keyboard-help__box': {\n // From Power BI:\n // boxShadow: '0 6.4px 14.4px rgb(0 0 0 / 13%), 0 1.2px 3.6px rgb(0 0 0 / 11%)',\n // From Fluent (depth-16 for teaching callouts):\n borderRadius: 2,\n boxShadow: '0px 8px 16px rgba(0, 0, 0, 0.14), 0px 0px 2px rgba(0, 0, 0, 0.12)',\n height: '100%',\n overflow: 'hidden',\n\n [FORCED_COLORS_SELECTOR]: {\n backgroundColor: 'Canvas',\n boxShadow: 'none',\n outlineColor: 'ButtonBorder',\n outlineStyle: 'solid',\n outlineWidth: 4\n },\n\n [DARK_THEME_SELECTOR]: {\n backgroundColor: 'Black',\n boxShadow: '0px 8px 16px rgba(0, 0, 0, 0.28), 0px 0px 2px rgba(0, 0, 0, 0.24)'\n }\n },\n\n '& .webchat__keyboard-help__scrollable': {\n boxSizing: 'border-box',\n height: '100%',\n overflowY: 'auto',\n padding: paddingRegular * 2,\n position: 'relative'\n },\n\n '& .webchat__keyboard-help__close-button': {\n appearance: 'none',\n backgroundColor: 'transparent',\n border: 0,\n outline: 0,\n padding: paddingRegular,\n // We are enlarging the bounding box of close button for scroll into view properly/cosmetically.\n // When TAB key focus on the close button, it is scrolled into view.\n // If the close button is at (10, 10), the `scrollTop` will be 10.\n // We are enlarging the bounding box, so TAB to focus on close button, `scrollTop` will be 0.\n // However, the bounding box enlarged does not means the padding are clickable.\n // We are setting `pointerEvents` to `none` to ignore mouse click on the enlarged bounding box.\n pointerEvents: 'none',\n position: 'absolute',\n right: 0,\n top: 0\n },\n\n '& .webchat__keyboard-help__close-button-border': {\n alignItems: 'center',\n borderRadius: 4,\n borderStyle: 'solid',\n borderWidth: 2,\n color: '#999',\n display: 'flex',\n height: 30,\n justifyContent: 'center',\n // After enlarging the bounding box, we will resume pointer events (i.e. \"click\") inside this element.\n pointerEvents: 'initial',\n width: 30,\n\n [LIGHT_THEME_SELECTOR]: {\n borderColor: 'black',\n\n '&:active': {\n backgroundColor: '#EDEBE9' // neutralLight (gray30)\n },\n\n '&:not(:active):hover': {\n backgroundColor: '#F3F2F1' // neutralLighter (gray20)\n }\n },\n\n [DARK_THEME_SELECTOR]: {\n borderColor: 'white',\n\n '&:active': {\n backgroundColor: '#292827' // neutralLight (gray30)\n },\n\n '&:not(:active):hover': {\n backgroundColor: '#252423' // neutralLight (gray30)\n }\n },\n\n [FORCED_COLORS_SELECTOR]: {\n backgroundColor: 'ButtonFace',\n borderColor: 'ButtonBorder'\n }\n },\n\n '& .webchat__keyboard-help__close-button-image': {\n fill: '#323130', // neutralPrimary (gray160)\n height: 10,\n width: 10,\n\n [FORCED_COLORS_SELECTOR]: {\n fill: 'ButtonText'\n },\n\n [DARK_THEME_SELECTOR]: {\n fill: '#F3F2F1' // neutralPrimary (gray160)\n }\n },\n\n '& .webchat__keyboard-help__header, & .webchat__keyboard-help__sub-header': {\n marginBottom: paddingRegular / 2,\n marginTop: 0\n },\n\n '& .webchat__keyboard-help__section:not(:last-child)': {\n marginBottom: paddingRegular\n },\n\n '& .webchat__keyboard-help__two-panes': {\n alignItems: 'flex-start',\n display: 'flex'\n },\n\n '& .webchat__keyboard-help__image': {\n paddingRight: paddingRegular\n },\n\n '& .webchat__keyboard-help__image--dark, & .webchat__keyboard-help__image--high-contrast': {\n display: 'none'\n },\n\n [FORCED_COLORS_SELECTOR]: {\n '& .webchat__keyboard-help__image--dark, & .webchat__keyboard-help__image--light': {\n display: 'none'\n },\n\n '& .webchat__keyboard-help__image--high-contrast': {\n display: 'unset',\n // \"difference\" will make sure SVG image is properly color in both light and dark high contrast mode.\n mixBlendMode: 'difference'\n }\n },\n\n [DARK_THEME_SELECTOR]: {\n color: '#F3F2F1',\n\n '& .webchat__keyboard-help__image--light': {\n display: 'none'\n },\n\n '& .webchat__keyboard-help__image--dark': {\n display: 'unset'\n }\n },\n\n '& .webchat__keyboard-help__notes': {\n marginBottom: paddingRegular,\n marginTop: 0\n },\n\n '& .webchat__keyboard-help__notes-header': {\n fontWeight: 'bold',\n margin: 0\n },\n\n '& .webchat__keyboard-help__notes-pane': {\n flexShrink: 10000\n },\n\n '& .webchat__keyboard-help__notes-text': {\n margin: 0\n }\n }\n };\n}\n","const DARK_THEME_SELECTOR = '@media (forced-colors: none) and (prefers-color-scheme: dark)';\nconst FORCED_COLORS_SELECTOR = '@media (forced-colors: active)';\nconst LIGHT_THEME_SELECTOR = '@media (forced-colors: none) and (prefers-color-scheme: light)';\nconst NOT_FORCED_COLORS_SELECTOR = '@media (forced-colors: none)';\n\nexport { DARK_THEME_SELECTOR, FORCED_COLORS_SELECTOR, LIGHT_THEME_SELECTOR, NOT_FORCED_COLORS_SELECTOR };\n","import CustomPropertyNames from './CustomPropertyNames';\n\ntype CustomPropertyNamesType = typeof CustomPropertyNames;\n\ntype CSSTokensType<T extends Readonly<Record<string, string>>> = {\n [K in keyof T]: `var(${T[K]})`;\n};\n\n// To add/remove/update a token, go to `CustomPropertyName.ts`.\nconst CSSTokens = new Proxy(\n {},\n {\n get(_, key: keyof CustomPropertyNamesType) {\n // We already checked in the `CustomPropertyName`.\n // eslint-disable-next-line security/detect-object-injection\n return `var(${CustomPropertyNames[key]})`;\n }\n }\n) as CSSTokensType<CustomPropertyNamesType>;\n\nexport default CSSTokens;\n","import { FORCED_COLORS_SELECTOR, NOT_FORCED_COLORS_SELECTOR } from './Constants';\n\n// TODO: Temporarily disable dark theme until chat history support dark theme.\nconst DARK_THEME_SELECTOR = '@media (forced-colors: none) and not (forced-colors: none)'; // Always return false\nconst LIGHT_THEME_SELECTOR = '@media (forced-colors: none)';\n\nimport CSSTokens from '../CSSTokens';\n\nexport default function createLinkDefinitionsStyleSet() {\n return {\n '&.webchat__link-definitions': {\n // '&[open] .webchat__link-definitions__header::after': {\n // transform: 'rotate(0deg)'\n // },\n\n '.webchat__link-definitions__header': {\n alignItems: 'center',\n display: 'flex',\n fontFamily: CSSTokens.FontPrimary,\n fontSize: CSSTokens.FontSizeSmall,\n gap: 4,\n listStyle: 'none',\n\n [LIGHT_THEME_SELECTOR]: {\n color: '#616161' // TODO: Should we use subtle color instead?\n },\n\n [DARK_THEME_SELECTOR]: {\n // TODO: Add dark theme color.\n color: '#616161'\n }\n },\n\n '.webchat__link-definitions__header-text': {\n flexShrink: 0\n },\n\n '.webchat__link-definitions__header::-webkit-details-marker': {\n display: 'none'\n },\n\n '.webchat__link-definitions__header-chevron': {\n flexShrink: 0\n },\n\n '&:not([open]) .webchat__link-definitions__header-chevron': {\n transform: 'rotate(-180deg)'\n },\n\n '.webchat__link-definitions__header-filler': {\n flexGrow: 1\n },\n\n '.webchat__link-definitions__header-accessory': {\n overflow: 'hidden'\n },\n\n '.webchat__link-definitions__message-sensitivity-label': {\n display: 'flex',\n gap: 4\n },\n\n '.webchat__link-definitions__message-sensitivity-label-icon': {\n color: 'CanvasText',\n flexShrink: 0\n },\n\n '.webchat__link-definitions__message-sensitivity-label-text': {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap'\n },\n\n '.webchat__link-definitions__list': {\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n margin: '4px 0 0',\n padding: 0\n },\n\n '.webchat__link-definitions__list-item': {\n display: 'flex', // This prevents the <button> from overflowing. Unsure why \"overflow: hidden\" doesn't work.\n flexDirection: 'column'\n },\n\n '.webchat__link-definitions__badge': {\n alignItems: 'center',\n alignSelf: 'flex-start',\n borderRadius: '4px',\n borderStyle: 'solid',\n borderWidth: 1,\n display: 'flex',\n flexShrink: 0,\n fontSize: '75%',\n justifyContent: 'center',\n margin: 4,\n minWidth: '1em',\n overflow: 'hidden',\n padding: 2,\n whiteSpace: 'nowrap',\n\n [LIGHT_THEME_SELECTOR]: {\n backgroundColor: 'white',\n borderColor: '#e0e0e0',\n color: 'black'\n },\n\n [DARK_THEME_SELECTOR]: {\n backgroundColor: 'black',\n // TODO: Add dark theme color.\n borderColor: '#e0e0e0',\n color: 'white'\n },\n\n [FORCED_COLORS_SELECTOR]: {\n borderColor: 'buttonborder'\n }\n },\n\n '.webchat__link-definitions__list-item-box': {\n alignItems: 'center',\n borderRadius: 4,\n borderStyle: 'solid',\n borderWidth: 1,\n\n [LIGHT_THEME_SELECTOR]: {\n backgroundColor: 'white',\n borderColor: '#d1d1d1'\n },\n\n [DARK_THEME_SELECTOR]: {\n backgroundColor: 'black',\n // TODO: Add dark theme color.\n borderColor: '#d1d1d1'\n },\n\n [FORCED_COLORS_SELECTOR]: {\n backgroundColor: 'canvas',\n borderColor: 'buttonborder'\n }\n },\n\n '.webchat__link-definitions__list-item-box--as-link': {\n display: 'block',\n outlineOffset: 0, // This will make sure focus indicator is same as <button>.\n textDecoration: 'none'\n },\n\n '.webchat__link-definitions__list-item-box--as-button': {\n appearance: 'none',\n background: 'transparent',\n cursor: 'pointer',\n fontFamily: 'inherit',\n fontSize: 'inherit',\n overflow: 'hidden',\n padding: 0,\n textAlign: 'initial' // By default, texts inside button are centered.\n },\n\n '.webchat__link-definitions__list-item-body': {\n alignItems: 'center',\n display: 'flex',\n fontFamily: \"Calibri, 'Helvetica Neue', Arial, 'sans-serif'\",\n gap: 4,\n padding: 4\n },\n\n '.webchat__link-definitions__list-item-body-main': {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n overflow: 'hidden'\n },\n\n '.webchat__link-definitions__list-item-main-text': {\n alignItems: 'baseline',\n display: 'flex',\n gap: 4\n },\n\n '.webchat__link-definitions__list-item-badge, .webchat__link-definitions__list-item-text': {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap'\n },\n\n '.webchat__link-definitions__list-item-text': {\n textDecoration: 'underline',\n\n [NOT_FORCED_COLORS_SELECTOR]: {\n color: CSSTokens.ColorAccent\n }\n },\n\n '.webchat__link-definitions__list-item-badge': {\n fontSize: CSSTokens.FontSizeSmall,\n\n [NOT_FORCED_COLORS_SELECTOR]: {\n color: CSSTokens.ColorSubtle\n }\n },\n\n '.webchat__link-definitions__open-in-new-window-icon': {\n flexShrink: 0, // When text is too long, make sure the chevron is not squeezed.\n paddingRight: 4, // When text is too long and chevron is on far right, this will align the chevron so it's not too far.\n\n [NOT_FORCED_COLORS_SELECTOR]: {\n color: CSSTokens.ColorAccent\n }\n }\n }\n };\n}\n","import { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function createMicrophoneButtonStyle({ microphoneButtonColorOnDictate }: StrictStyleOptions) {\n return {\n '&.webchat__microphone-button': {\n '&.webchat__microphone-button--dictating .webchat__microphone-button__button': {\n '&, &:focus, &:hover': {\n '& .webchat__microphone-button__icon': {\n fill: microphoneButtonColorOnDictate\n }\n }\n }\n }\n };\n}\n","import { FORCED_COLORS_SELECTOR, NOT_FORCED_COLORS_SELECTOR } from './Constants';\n\n// TODO: Temporarily disable dark theme until we defined the link color and stuff for Markdown.\nconst DARK_THEME_SELECTOR = '@media (forced-colors: none) and not (forced-colors: none)'; // Always return false\nconst LIGHT_THEME_SELECTOR = '@media (forced-colors: none)';\n\nimport CSSTokens from '../CSSTokens';\n\nexport default function createModalDialogStyleSet() {\n return {\n '&.webchat__modal-dialog': {\n fontFamily: CSSTokens.FontPrimary,\n maxHeight: 'calc(100% - 32px)',\n maxWidth: 'calc(100% - 32px)',\n width: '100%',\n\n [NOT_FORCED_COLORS_SELECTOR]: {\n backgroundColor: 'transparent',\n border: 0\n },\n\n '& .webchat__modal-dialog__box': {\n borderRadius: 2,\n overflow: 'hidden',\n margin: 'auto',\n\n '@media screen and (max-width: 639px)': {\n maxWidth: 'unset'\n },\n\n '@media screen and (min-width: 640px)': {\n maxWidth: '60%',\n minWidth: 'calc(640px - 32px)',\n width: '60%'\n },\n\n [LIGHT_THEME_SELECTOR]: {\n // From Power BI:\n // boxShadow: '0 6.4px 14.4px rgb(0 0 0 / 13%), 0 1.2px 3.6px rgb(0 0 0 / 11%)',\n // From Fluent (depth-16 for teaching callouts):\n // boxShadow: '0px 8px 16px rgba(0, 0, 0, 0.14), 0px 0px 2px rgba(0, 0, 0, 0.12)',\n backgroundColor: 'White',\n boxShadow: '0px 8px 16px rgba(0, 0, 0, 0.14), 0px 0px 2px rgba(0, 0, 0, 0.12)'\n },\n\n [DARK_THEME_SELECTOR]: {\n backgroundColor: 'Black',\n boxShadow: '0px 8px 16px rgba(0, 0, 0, 0.28), 0px 0px 2px rgba(0, 0, 0, 0.24)',\n color: 'White'\n },\n\n [FORCED_COLORS_SELECTOR]: {\n // In high-contrast mode, we use \"outline\" instead of \"box-shadow\".\n outlineColor: 'ButtonBorder',\n outlineStyle: 'solid',\n outlineWidth: 4\n }\n },\n\n '& .webchat__modal-dialog__close-button-layout': {\n float: 'right',\n padding: CSSTokens.PaddingRegular\n },\n\n '& .webchat__modal-dialog__close-button': {\n height: 30,\n width: 30,\n\n [NOT_FORCED_COLORS_SELECTOR]: {\n appearance: 'none',\n backgroundColor: 'transparent',\n borderColor: 'transparent',\n borderRadius: 4,\n borderStyle: 'solid',\n borderWidth: 2,\n color: '#999',\n outline: 0\n }\n },\n\n '& .webchat__modal-dialog__close-button:focus': {\n [LIGHT_THEME_SELECTOR]: {\n borderColor: 'black',\n\n '&:active': {\n backgroundColor: '#EDEBE9' // neutralLight (gray30)\n },\n\n '&:not(:active):hover': {\n backgroundColor: '#F3F2F1' // neutralLighter (gray20)\n }\n },\n\n [DARK_THEME_SELECTOR]: {\n borderColor: 'white',\n\n '&:active': {\n backgroundColor: '#292827' // neutralLight (gray30)\n },\n\n '&:not(:active):hover': {\n backgroundColor: '#252423' // neutralLight (gray30)\n }\n }\n },\n\n '& .webchat__modal-dialog__close-button-image': {\n height: 10,\n width: 10,\n\n [LIGHT_THEME_SELECTOR]: {\n fill: '#323130' // neutralPrimary (gray160)\n },\n\n [DARK_THEME_SELECTOR]: {\n fill: '#F3F2F1' // neutralPrimary (gray160)\n },\n\n [FORCED_COLORS_SELECTOR]: {\n fill: 'currentcolor'\n }\n },\n\n '& .webchat__modal-dialog__body': {\n margin: `calc(${CSSTokens.PaddingRegular} * 2)`\n }\n }\n };\n}\n","import CSSTokens from '../CSSTokens';\nimport { FORCED_COLORS_SELECTOR, NOT_FORCED_COLORS_SELECTOR } from './Constants';\n\n// This style is for accompanying result of `renderMarkdown()`.\n// Mostly, it should only styles elements that are generated/modified during `renderMarkdown()`.\n// For example, \"open in new window\" icon, which is done by `betterLink`.\nexport default function createMarkdownStyle() {\n return {\n '&.webchat__render-markdown': {\n display: 'contents',\n\n // Copied from Adaptive Cards inline styling.\n '&.webchat__render-markdown--adaptive-cards > *:first-child': {\n marginTop: 0,\n width: '100%',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n },\n\n // Copied from Adaptive Cards inline styling.\n '&.webchat__render-markdown--adaptive-cards > *:last-child': {\n marginBottom: 0\n },\n\n '&.webchat__render-markdown--message-activity > *:first-child': {\n marginTop: 0\n },\n\n '&.webchat__render-markdown--message-activity > *:last-child': {\n marginBottom: 0\n },\n\n '& .webchat__render-markdown__external-link-icon': {\n backgroundImage: CSSTokens.IconURLExternalLink,\n height: '.75em',\n marginLeft: '.25em'\n },\n\n '& .webchat__render-markdown__citation': {\n background: 'transparent',\n border: 0,\n cursor: 'pointer',\n fontFamily: 'unset',\n fontSize: 'unset',\n padding: 0,\n textDecoration: 'underline',\n whiteSpace: 'nowrap',\n\n [FORCED_COLORS_SELECTOR]: {\n color: 'LinkText'\n },\n\n [NOT_FORCED_COLORS_SELECTOR]: {\n color: CSSTokens.ColorAccent\n }\n },\n\n '& .webchat__render-markdown__pure-identifier': {\n whiteSpace: 'nowrap'\n },\n\n '& .webchat__render-markdown__pure-identifier::after': {\n content: \"']'\"\n },\n\n '& .webchat__render-markdown__pure-identifier::before': {\n content: \"'['\"\n }\n }\n };\n}\n","import { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function ({\n backgroundColor,\n rootHeight: height,\n rootWidth: width,\n rootZIndex: zIndex\n}: StrictStyleOptions) {\n return {\n backgroundColor,\n height,\n width,\n zIndex\n };\n}\n","import { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function createScrollToEndButtonStyle({\n paddingRegular,\n primaryFont,\n scrollToEndButtonFontSize,\n transcriptOverlayButtonBackground,\n transcriptOverlayButtonBackgroundOnFocus,\n transcriptOverlayButtonBackgroundOnHover,\n transcriptOverlayButtonColor,\n transcriptOverlayButtonColorOnFocus,\n transcriptOverlayButtonColorOnHover\n}: StrictStyleOptions) {\n return {\n '&.webchat__scroll-to-end-button': {\n // TODO: [P3] Can we not to unset borderWidth and outline earlier?\n '@media screen and (forced-colors: active)': {\n borderWidth: 'initial',\n outline: 'initial'\n },\n\n appearance: 'none',\n backgroundColor: transcriptOverlayButtonBackground,\n borderRadius: paddingRegular,\n borderWidth: 0,\n bottom: 5,\n color: transcriptOverlayButtonColor,\n fontFamily: primaryFont,\n fontSize: scrollToEndButtonFontSize,\n outline: 0,\n padding: paddingRegular,\n position: 'absolute',\n zIndex: 1, // We formed a stacking context in the parent container, so we can use \"z-index\" here.\n\n '&:hover': {\n backgroundColor: transcriptOverlayButtonBackgroundOnHover,\n color: transcriptOverlayButtonColorOnHover || transcriptOverlayButtonColor\n },\n\n '&:focus': {\n backgroundColor: transcriptOverlayButtonBackgroundOnFocus,\n color: transcriptOverlayButtonColorOnFocus || transcriptOverlayButtonColor\n },\n\n '&:not(.webchat__scroll-to-end-button--rtl)': {\n right: 20\n },\n\n '&.webchat__scroll-to-end-button--rtl': {\n left: 20\n }\n }\n };\n}\n","import { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function createSendBoxButtonStyle({\n sendBoxButtonColor,\n sendBoxButtonColorOnActive,\n sendBoxButtonColorOnDisabled,\n sendBoxButtonColorOnFocus,\n sendBoxButtonColorOnHover,\n sendBoxButtonKeyboardFocusIndicatorBorderColor,\n sendBoxButtonKeyboardFocusIndicatorBorderRadius,\n sendBoxButtonKeyboardFocusIndicatorBorderStyle,\n sendBoxButtonKeyboardFocusIndicatorBorderWidth,\n sendBoxButtonKeyboardFocusIndicatorInset,\n sendBoxButtonShadeBorderRadius,\n sendBoxButtonShadeColor,\n sendBoxButtonShadeColorOnActive,\n sendBoxButtonShadeColorOnDisabled,\n sendBoxButtonShadeColorOnFocus,\n sendBoxButtonShadeColorOnHover,\n sendBoxButtonShadeInset,\n sendBoxHeight,\n subtle\n}: StrictStyleOptions) {\n return {\n '&.webchat__icon-button': {\n alignItems: 'center',\n appearance: 'none',\n backgroundColor: 'Transparent',\n border: 0,\n display: 'flex',\n fill: sendBoxButtonColor || subtle,\n justifyContent: 'center',\n outline: 0,\n padding: 0,\n position: 'relative',\n width: sendBoxHeight, // We use the sendBoxHeight, so the button looks square\n\n '&:not(.webchat__icon-button--stretch)': {\n height: sendBoxHeight\n },\n\n // Order of style preferences (based on effort of user gesture): disabled > active > hover > focus.\n // Keyboard focus indicator styles applied by :focus-visible do not conflict with :active/:hover/:focus, so it is not included here.\n '&:disabled, &[aria-disabled=\"true\"]': {\n fill: sendBoxButtonColorOnDisabled,\n\n '& .webchat__icon-button__shade': {\n backgroundColor: sendBoxButtonShadeColorOnDisabled\n }\n },\n\n '&:not(:disabled):not([aria-disabled=\"true\"])': {\n '&:active': {\n fill: sendBoxButtonColorOnActive,\n\n '& .webchat__icon-button__shade': {\n backgroundColor: sendBoxButtonShadeColorOnActive\n }\n },\n\n '&:not(:active)': {\n '&:hover': {\n fill: sendBoxButtonColorOnHover,\n\n '& .webchat__icon-button__shade': {\n backgroundColor: sendBoxButtonShadeColorOnHover\n }\n },\n\n '&:not(:hover)': {\n '&:focus': {\n fill: sendBoxButtonColorOnFocus,\n\n '& .webchat__icon-button__shade': {\n backgroundColor: sendBoxButtonShadeColorOnFocus\n }\n }\n }\n }\n },\n\n // On unsupported browser, :focus-visible and :not(:focus-visible) is always false.\n // And it will turn the whole CSS selector \":unsupported, .truthy\" to false.\n '&:not(:focus-visible) .webchat__icon-button__keyboard-focus-indicator': {\n display: 'none'\n },\n\n '&:not(.webchat__icon-button--focus-visible) .webchat__icon-button__keyboard-focus-indicator': {\n display: 'none'\n },\n\n // Make sure all contents are in the same stacking context.\n '& > *': {\n position: 'relative'\n },\n\n '& .webchat__icon-button__shade': {\n backgroundColor: sendBoxButtonShadeColor,\n borderRadius: sendBoxButtonShadeBorderRadius,\n bottom: sendBoxButtonShadeInset,\n left: sendBoxButtonShadeInset,\n position: 'absolute',\n right: sendBoxButtonShadeInset,\n top: sendBoxButtonShadeInset\n },\n\n '& .webchat__icon-button__keyboard-focus-indicator': {\n borderColor: sendBoxButtonKeyboardFocusIndicatorBorderColor,\n borderRadius: sendBoxButtonKeyboardFocusIndicatorBorderRadius,\n borderStyle: sendBoxButtonKeyboardFocusIndicatorBorderStyle,\n borderWidth: sendBoxButtonKeyboardFocusIndicatorBorderWidth,\n bottom: sendBoxButtonKeyboardFocusIndicatorInset,\n left: sendBoxButtonKeyboardFocusIndicatorInset,\n position: 'absolute',\n right: sendBoxButtonKeyboardFocusIndicatorInset,\n top: sendBoxButtonKeyboardFocusIndicatorInset\n }\n }\n };\n}\n","import { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function createSendBoxStyle({\n sendBoxBackground,\n sendBoxBorderBottom,\n sendBoxBorderLeft,\n sendBoxBorderRight,\n sendBoxBorderTop,\n sendBoxHeight\n}: StrictStyleOptions) {\n return {\n '&.webchat__send-box': {\n '& .webchat__send-box__button--align-bottom': { alignSelf: 'flex-end' },\n '& .webchat__send-box__button--align-stretch': { alignSelf: 'stretch' },\n '& .webchat__send-box__button--align-top': { alignSelf: 'flex-start' },\n\n '& .webchat__send-box__main': {\n alignItems: 'stretch',\n backgroundColor: sendBoxBackground,\n borderBottom: sendBoxBorderBottom,\n borderLeft: sendBoxBorderLeft,\n borderRight: sendBoxBorderRight,\n borderTop: sendBoxBorderTop,\n minHeight: sendBoxHeight\n }\n }\n };\n}\n","import { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function createSendBoxTextBoxStyle({\n paddingRegular,\n primaryFont,\n sendBoxDisabledTextColor,\n sendBoxMaxHeight,\n sendBoxPlaceholderColor,\n sendBoxTextColor,\n subtle\n}: StrictStyleOptions) {\n return {\n '&.webchat__send-box-text-box': {\n alignItems: 'center',\n fontFamily: primaryFont,\n padding: paddingRegular,\n position: 'relative',\n\n '& .webchat__send-box-text-box__input': {\n border: 0,\n fontFamily: 'inherit',\n fontSize: 'inherit',\n height: '100%',\n outline: 0,\n padding: 0\n },\n\n '& .webchat__send-box-text-box__input, & .webchat__send-box-text-box__html-text-area': {\n backgroundColor: 'transparent', // We set this to transparent because we already applied \"sendBoxBackground\" to a parent container.\n\n '&:not(:disabled):not([aria-disabled=\"true\"])': {\n color: sendBoxTextColor\n },\n\n '&:disabled, &[aria-disabled=\"true\"]': {\n color: sendBoxDisabledTextColor || subtle\n },\n\n '&::placeholder': {\n color: sendBoxPlaceholderColor || subtle\n }\n },\n\n '& .webchat__send-box-text-box__input, & .webchat__send-box-text-box__text-area': {\n maxHeight: sendBoxMaxHeight\n },\n\n '& .webchat__send-box-text-box__glass': {\n height: '100%',\n left: 0,\n position: 'absolute',\n top: 0,\n userSelect: 0,\n width: '100%'\n }\n }\n };\n}\n","import CSSTokens from '../CSSTokens';\n\nexport default function createSendStatusStyle() {\n return {\n '&.webchat__activity-status': {\n color: CSSTokens.ColorTimestamp,\n fontFamily: CSSTokens.FontPrimary,\n fontSize: CSSTokens.FontSizeSmall,\n marginTop: `calc(${CSSTokens.PaddingRegular} / 2)`\n },\n\n '&.webchat__activity-status--slotted': {\n display: 'inline-flex',\n gap: 4\n },\n\n '& .webchat__activity-status__originator': {\n alignItems: 'center',\n\n '&.webchat__activity-status__originator--has-link': {\n color: CSSTokens.ColorAccent\n }\n }\n };\n}\n","import { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function createSingleCardActivityStyle({\n bubbleMaxWidth,\n bubbleMinWidth,\n paddingRegular\n}: StrictStyleOptions) {\n return {\n '& > .bubble-box': {\n maxWidth: bubbleMaxWidth,\n minWidth: bubbleMinWidth\n },\n\n '& > .filler': {\n minWidth: paddingRegular\n }\n };\n}\n","import CSSTokens from '../CSSTokens';\n\nexport default function createSlottedActivityStatus() {\n return {\n '&.webchat__slotted-activity-status': {\n alignItems: 'center',\n display: 'inline-flex',\n gap: 4,\n marginTop: `calc(${CSSTokens.PaddingRegular} / 2)`,\n\n '& .webchat__slotted-activity-status__pipe': {\n fontSize: CSSTokens.FontSizeSmall\n }\n }\n };\n}\n","import { StrictStyleOptions } from 'botframework-webchat-api';\n\nimport { toByteArray } from 'base64-js';\n\nconst DEFAULT_IMAGE_BASE64 =\n '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RkZm+fIwYJqbPewc7RRoaQpHW5tketu+1ODasm4d73W+HJRl276NO7fu3bx7+/4NPLjw4cSLGz+OPLny5cybO38OPbr06dSrW7+OPbv27dy7e/8OPrz48eTLmz+PPr369ezbu38PP778+fTr27+PP7/+/fz7+///DyAKMQWIUWwE7vHXgS6spuCCiDQoIGoQroOBOaUFeIsNovlXl2QC9eeaAp/p95WIGd33oFIj2ifhYCvSh4mHnNV3IWTy1agMjRvaCN+Hi73XD4/uPfRje0TmON+RSMan5Iw3UrQkk1Bm1uOUTj6545VYHtTYi1JeiNiGOoIZJpdjtpiXmCya6SKaKLqZJpxvplgUQ/vRmUaJHMaVZ4L8hRhBh3vaBFOGELa5TAnsmHVoIxUy2mikkk5KaaWWXopppppuymmnnn4Kaqiijkpqqaaeimqqqq7KaquuvgprrLLOSmuttt6Ka6667sprr77+Cmywwg5LbLHGHotsssr/YjrZScg1Cykphg5HmCaC4nYtIGn5BighemL7rbYMgsunH3KaFqO354KW7iXtskYmJ/Gyy6a88172IR4UoatmKPmO9q+//WrmJUkBE7yvwANHVnA7DR/2sCkH45uwHBH3dfFHEzNcsRsdU7yxwwuDXK/HITN2ssjvAjyyySuz/LK9dsJbssJ40jyzu+PKlrPO5b62s7rb6hauXNkC7afR1f5GaGEDEjctSo82t+iyVl+NddZab811114rUhuuidnatKtJn/qzqTervXap64Ja86f3yj03pylr+nGneW+aMbN3X3oi3X9b2jfgg1daOOGHI74443HrXbfdj3s6OeU9EpN6OdtDs7p5q0enamCtiTpVAAA7';\nconst DEFAULT_IMAGE_TYPE = 'image/gif';\n\nlet defaultImageBlobURL;\n\nexport default function createSpinnerAnimationStyle({\n spinnerAnimationBackgroundImage,\n spinnerAnimationHeight,\n spinnerAnimationWidth,\n spinnerAnimationPadding\n}: StrictStyleOptions) {\n defaultImageBlobURL ||\n (defaultImageBlobURL = URL.createObjectURL(\n new Blob([toByteArray(DEFAULT_IMAGE_BASE64)], { type: DEFAULT_IMAGE_TYPE })\n ));\n\n const backgroundImage = spinnerAnimationBackgroundImage || `url('${defaultImageBlobURL}')`;\n\n return {\n backgroundImage,\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'contain',\n height: spinnerAnimationHeight,\n width: spinnerAnimationWidth,\n\n ':not(.webchat__spinner--rtl)': {\n marginRight: spinnerAnimationPadding\n },\n '.webchat__spinner--rtl': {\n marginLeft: spinnerAnimationPadding\n }\n };\n}\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [2] }] */\n\nimport { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function createStackedLayoutStyle({\n avatarSize,\n bubbleMaxWidth,\n bubbleMinWidth,\n paddingRegular,\n transitionDuration\n}: StrictStyleOptions) {\n return {\n '&.webchat__stacked-layout': {\n marginLeft: paddingRegular,\n marginRight: paddingRegular,\n\n '& .webchat__stacked-layout__alignment-pad': {\n transitionDuration,\n transitionProperty: 'width',\n width: 0\n },\n\n '&.webchat__stacked-layout--extra-trailing .webchat__stacked-layout__alignment-pad': {\n width: paddingRegular\n },\n\n '& .webchat__stacked-layout__avatar-gutter': {\n transitionDuration,\n transitionProperty: 'width',\n width: 0\n },\n\n '& .webchat__stacked-layout__attachment': {\n maxWidth: bubbleMaxWidth,\n minWidth: bubbleMinWidth,\n transitionDuration,\n transitionProperty: 'max-width, min-width'\n },\n\n '& .webchat__stacked-layout__attachment-row': {\n marginTop: paddingRegular,\n width: '100%'\n },\n\n '&.webchat__stacked-layout--no-message .webchat__stacked-layout__attachment-row.webchat__stacked-layout__attachment-row--first':\n {\n marginTop: 0\n },\n\n '& .webchat__stacked-layout__message': {\n maxWidth: bubbleMaxWidth,\n overflow: 'hidden',\n transitionDuration,\n transitionProperty: 'max-width'\n },\n\n '& .webchat__stacked-layout__nub-pad': {\n transitionDuration,\n transitionProperty: 'width',\n width: 0\n },\n\n '&.webchat__stacked-layout--hide-avatar, &.webchat__stacked-layout--show-avatar': {\n '& .webchat__stacked-layout__avatar-gutter': {\n width: avatarSize\n }\n },\n\n '&.webchat__stacked-layout--hide-avatar, &.webchat__stacked-layout--show-avatar, &.webchat__stacked-layout--hide-nub, &.webchat__stacked-layout--show-nub':\n {\n '& .webchat__stacked-layout__attachment, & .webchat__stacked-layout__message': {\n maxWidth: bubbleMaxWidth + paddingRegular\n },\n\n '& .webchat__stacked-layout__nub-pad': {\n width: paddingRegular\n }\n },\n\n '&:not(.webchat__stacked-layout--top-callout)': {\n '& .webchat__stacked-layout__avatar-gutter, & .webchat__stacked-layout__content': {\n justifyContent: 'flex-end'\n }\n }\n }\n };\n}\n","/* eslint no-empty-pattern: \"off\" */\n/* eslint no-magic-numbers: [\"error\", { \"ignore\": [1.5, 2] }] */\n\nimport { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function createSuggestedActionsStyle({\n paddingRegular,\n suggestedActionsCarouselFlipperSize,\n suggestedActionsFlowMaxHeight,\n suggestedActionsStackedHeight,\n suggestedActionsStackedOverflow,\n suggestedActionsVisualKeyboardIndicatorColor,\n suggestedActionsVisualKeyboardIndicatorStyle,\n suggestedActionsVisualKeyboardIndicatorWidth,\n transcriptOverlayButtonBackground,\n transcriptOverlayButtonBackgroundOnDisabled,\n transcriptOverlayButtonBackgroundOnFocus,\n transcriptOverlayButtonBackgroundOnHover,\n transcriptOverlayButtonColor,\n transcriptOverlayButtonColorOnDisabled,\n transcriptOverlayButtonColorOnFocus,\n transcriptOverlayButtonColorOnHover\n}: StrictStyleOptions) {\n return {\n '&.webchat__suggested-actions': {\n position: 'relative',\n\n '&.webchat__suggested-actions--carousel-layout': {\n '& .webchat__suggested-actions__carousel': {\n paddingBottom: paddingRegular / 2,\n paddingTop: paddingRegular / 2,\n\n '& .webchat__suggested-actions__item-box': {\n paddingBottom: paddingRegular / 2,\n paddingLeft: paddingRegular / 2,\n paddingRight: paddingRegular / 2,\n paddingTop: paddingRegular / 2\n },\n\n '& .react-film__filmstrip': {\n scrollbarWidth: 'none'\n },\n\n '& .react-film__flipper': {\n '&:disabled, &[aria-disabled=\"true\"]': {\n '& .react-film__flipper__body': {\n backgroundColor: transcriptOverlayButtonBackgroundOnDisabled,\n color: transcriptOverlayButtonColorOnDisabled\n }\n },\n\n '&:focus .react-film__flipper__body': {\n backgroundColor: transcriptOverlayButtonBackgroundOnFocus,\n color: transcriptOverlayButtonColorOnFocus || transcriptOverlayButtonColor\n },\n\n '&:hover .react-film__flipper__body': {\n backgroundColor: transcriptOverlayButtonBackgroundOnHover,\n color: transcriptOverlayButtonColorOnHover || transcriptOverlayButtonColor\n },\n\n '& .react-film__flipper__body': {\n background: transcriptOverlayButtonBackground,\n color: transcriptOverlayButtonColor,\n outline: 0\n }\n }\n },\n\n '&:not(.webchat__suggested-actions--rtl)': {\n '& .react-film__filmstrip__item:first-child': {\n paddingLeft: paddingRegular / 2\n },\n\n '& .react-film__filmstrip__item:last-child': {\n paddingRight: paddingRegular / 2\n },\n\n '& .react-film__flipper + .react-film__filmstrip': {\n '& .react-film__filmstrip__item:first-child': {\n paddingLeft: suggestedActionsCarouselFlipperSize + paddingRegular * 1.5\n },\n\n '& .react-film__filmstrip__item:last-child': {\n paddingRight: suggestedActionsCarouselFlipperSize + paddingRegular * 1.5\n }\n }\n },\n\n '&.webchat__suggested-actions--rtl': {\n '& .react-film__filmstrip__item:first-child': {\n paddingRight: paddingRegular / 2\n },\n\n '& .react-film__filmstrip__item:last-child': {\n paddingLeft: paddingRegular / 2\n },\n\n '& .react-film__flipper + .react-film__filmstrip': {\n '& .react-film__filmstrip__item:first-child': {\n paddingRight: suggestedActionsCarouselFlipperSize + paddingRegular * 1.5\n },\n\n '& .react-film__filmstrip__item:last-child': {\n paddingLeft: suggestedActionsCarouselFlipperSize + paddingRegular * 1.5\n }\n }\n }\n },\n\n '&.webchat__suggested-actions--flow-layout': {\n '& .webchat__suggested-actions__flow-box': {\n maxHeight: suggestedActionsFlowMaxHeight,\n overflowY: 'auto',\n paddingBottom: paddingRegular / 2,\n paddingLeft: paddingRegular / 2,\n paddingRight: paddingRegular / 2,\n paddingTop: paddingRegular / 2\n },\n\n '& .webchat__suggested-actions__flow-item-box': {\n maxWidth: '100%',\n overflow: 'hidden' // This is required in IE11\n },\n\n '& .webchat__suggested-actions__item-box': {\n paddingBottom: paddingRegular / 2,\n paddingLeft: paddingRegular / 2,\n paddingRight: paddingRegular / 2,\n paddingTop: paddingRegular / 2\n }\n },\n\n '&.webchat__suggested-actions--stacked-layout': {\n '& .webchat__suggested-actions__stack': {\n maxHeight: suggestedActionsStackedHeight || 'auto',\n overflowY: suggestedActionsStackedOverflow || 'auto',\n paddingBottom: paddingRegular / 2,\n paddingLeft: paddingRegular / 2,\n paddingRight: paddingRegular / 2,\n paddingTop: paddingRegular / 2\n },\n\n '& .webchat__suggested-actions__item-box': {\n paddingBottom: paddingRegular / 2,\n paddingLeft: paddingRegular / 2,\n paddingRight: paddingRegular / 2,\n paddingTop: paddingRegular / 2\n }\n },\n\n '&.webchat__suggested-actions--flow-layout, &.webchat__suggested-actions--stacked-layout': {\n '& .webchat__suggested-actions__button-text': {\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n },\n\n '& .webchat__suggested-actions__button-text-stacked-text-wrap': {\n alignItems: 'center',\n display: 'flex',\n whiteSpace: 'normal'\n }\n },\n\n '& .webchat__suggested-actions__item-box': {\n display: 'flex',\n maxWidth: '100%'\n },\n\n '&.webchat__suggested-actions--focus-within, &:focus-within': {\n '& .webchat__suggested-actions__focus-indicator': {\n borderColor: suggestedActionsVisualKeyboardIndicatorColor,\n borderStyle: suggestedActionsVisualKeyboardIndicatorStyle,\n borderWidth: suggestedActionsVisualKeyboardIndicatorWidth,\n boxSizing: 'border-box',\n height: '100%',\n pointerEvents: 'none',\n position: 'absolute',\n top: 0,\n width: '100%'\n }\n }\n }\n };\n}\n","/* eslint no-magic-numbers: \"off\" */\n\nimport { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function createSuggestedActionStyle({\n accent,\n paddingRegular,\n paddingWide,\n primaryFont,\n suggestedActionBorderRadius,\n\n suggestedActionBackgroundColor,\n suggestedActionBorderColor,\n suggestedActionBorderStyle,\n suggestedActionBorderWidth,\n suggestedActionTextColor,\n\n suggestedActionBackgroundColorOnActive,\n suggestedActionBorderColorOnActive,\n suggestedActionBorderStyleOnActive,\n suggestedActionBorderWidthOnActive,\n suggestedActionTextColorOnActive,\n\n suggestedActionBackgroundColorOnDisabled,\n suggestedActionBorderColorOnDisabled,\n suggestedActionBorderStyleOnDisabled,\n suggestedActionBorderWidthOnDisabled,\n suggestedActionTextColorOnDisabled,\n\n suggestedActionBackgroundColorOnFocus,\n suggestedActionBorderColorOnFocus,\n suggestedActionBorderStyleOnFocus,\n suggestedActionBorderWidthOnFocus,\n suggestedActionTextColorOnFocus,\n\n suggestedActionBackgroundColorOnHover,\n suggestedActionBorderColorOnHover,\n suggestedActionBorderStyleOnHover,\n suggestedActionBorderWidthOnHover,\n suggestedActionTextColorOnHover,\n\n suggestedActionKeyboardFocusIndicatorBorderColor,\n suggestedActionKeyboardFocusIndicatorBorderRadius,\n suggestedActionKeyboardFocusIndicatorBorderStyle,\n suggestedActionKeyboardFocusIndicatorBorderWidth,\n suggestedActionKeyboardFocusIndicatorInset,\n\n suggestedActionHeight,\n suggestedActionImageHeight,\n suggestedActionsStackedLayoutButtonMaxHeight,\n subtle,\n\n // Deprecated\n suggestedActionActiveBackground,\n suggestedActionBackground,\n suggestedActionDisabledBackground,\n suggestedActionFocusBackground,\n suggestedActionHoverBackground\n}: StrictStyleOptions) {\n return {\n '&.webchat__suggested-action': {\n alignItems: 'center',\n background: suggestedActionBackground, // Deprecated as of 4.15.0. Remove on or after 2021-09-16.\n backgroundColor: suggestedActionBackgroundColor,\n borderColor: suggestedActionBorderColor || accent,\n borderRadius: suggestedActionBorderRadius,\n borderStyle: suggestedActionBorderStyle,\n borderWidth: suggestedActionBorderWidth,\n color: suggestedActionTextColor || accent,\n fontFamily: primaryFont,\n fontSize: 'inherit',\n height: suggestedActionHeight,\n justifyContent: 'center',\n maxWidth: '100%',\n outline: 0,\n paddingLeft: paddingWide,\n paddingRight: paddingWide,\n position: 'relative',\n whiteSpace: 'nowrap',\n width: '100%',\n\n // Order of style preferences (based on effort of user gesture): disabled > active > hover > focus.\n // Keyboard focus indicator styles applied by :focus-visible do not conflict with :active/:hover/:focus, so it is not included here.\n '&:disabled, &[aria-disabled=\"true\"]': {\n background: suggestedActionDisabledBackground,\n backgroundColor: suggestedActionBackgroundColorOnDisabled,\n borderColor: suggestedActionBorderColorOnDisabled,\n borderStyle: suggestedActionBorderStyleOnDisabled,\n borderWidth: suggestedActionBorderWidthOnDisabled,\n color: suggestedActionTextColorOnDisabled || subtle\n },\n\n '&:not(:disabled):not([aria-disabled=\"true\"])': {\n '&:active': {\n background: suggestedActionActiveBackground,\n backgroundColor: suggestedActionBackgroundColorOnActive,\n borderColor: suggestedActionBorderColorOnActive,\n borderStyle: suggestedActionBorderStyleOnActive,\n borderWidth: suggestedActionBorderWidthOnActive,\n color: suggestedActionTextColorOnActive\n },\n\n '&:not(:active)': {\n '&:hover': {\n background: suggestedActionHoverBackground,\n backgroundColor: suggestedActionBackgroundColorOnHover,\n borderColor: suggestedActionBorderColorOnHover,\n borderStyle: suggestedActionBorderStyleOnHover,\n borderWidth: suggestedActionBorderWidthOnHover,\n color: suggestedActionTextColorOnHover\n },\n\n '&:not(:hover)': {\n '&:focus': {\n background: suggestedActionFocusBackground,\n backgroundColor: suggestedActionBackgroundColorOnFocus,\n borderColor: suggestedActionBorderColorOnFocus,\n borderStyle: suggestedActionBorderStyleOnFocus,\n borderWidth: suggestedActionBorderWidthOnFocus,\n color: suggestedActionTextColorOnFocus\n }\n }\n }\n },\n\n // On unsupported browser, :focus-visible and :not(:focus-visible) is always false.\n // And it will turn the whole CSS selector \":unsupported, .truthy\" to false.\n '&:not(:focus-visible) .webchat__suggested-action__keyboard-focus-indicator': {\n display: 'none'\n },\n\n '&:not(.webchat__suggested-action--focus-visible) .webchat__suggested-action__keyboard-focus-indicator': {\n display: 'none'\n },\n\n '&:not(.webchat__suggested-action--rtl) .webchat__suggested-action__image + .webchat__suggested-action__text': {\n paddingLeft: paddingRegular\n },\n\n '&.webchat__suggested-action--rtl .webchat__suggested-action__image + .webchat__suggested-action__text': {\n paddingRight: paddingRegular\n },\n\n '&.webchat__suggested-action--wrapping': {\n height: 'auto',\n maxHeight: suggestedActionsStackedLayoutButtonMaxHeight || '100%',\n minHeight:\n typeof suggestedActionsStackedLayoutButtonMaxHeight === 'number' && typeof suggestedActionHeight === 'number'\n ? Math.min(suggestedActionsStackedLayoutButtonMaxHeight, suggestedActionHeight)\n : suggestedActionHeight\n },\n\n '& .webchat__suggested-action__image': {\n height: suggestedActionImageHeight\n },\n\n '& .webchat__suggested-action__keyboard-focus-indicator': {\n borderColor: suggestedActionKeyboardFocusIndicatorBorderColor,\n borderRadius: suggestedActionKeyboardFocusIndicatorBorderRadius,\n borderStyle: suggestedActionKeyboardFocusIndicatorBorderStyle,\n borderWidth: suggestedActionKeyboardFocusIndicatorBorderWidth,\n bottom: suggestedActionKeyboardFocusIndicatorInset,\n left: suggestedActionKeyboardFocusIndicatorInset,\n position: 'absolute',\n right: suggestedActionKeyboardFocusIndicatorInset,\n top: suggestedActionKeyboardFocusIndicatorInset\n }\n }\n };\n}\n","import CSSTokens from '../CSSTokens';\n\nexport default function createTextContentStyle() {\n return {\n '&.webchat__text-content': {\n fontFamily: CSSTokens.FontPrimary,\n margin: 0,\n minHeight: `calc(${CSSTokens.MinHeightBubble} - ${CSSTokens.PaddingRegular} * 2)`,\n padding: CSSTokens.PaddingRegular,\n\n '&.webchat__text-content--is-markdown': {\n display: 'flex',\n flexDirection: 'column',\n gap: CSSTokens.PaddingRegular\n },\n\n '& .webchat__text-content__markdown img:not(.webchat__render-markdown__external-link-icon)': {\n maxWidth: CSSTokens.MaxWidthBubble,\n width: '100%'\n },\n\n '& .webchat__text-content__markdown pre': {\n overflow: 'hidden'\n },\n\n '& .webchat__text-content__open-in-new-window-icon': {\n height: '.75em'\n }\n }\n };\n}\n","import CSSTokens from '../CSSTokens';\n\nexport default function () {\n return {\n '&.webchat__thumb-button': {\n appearance: 'none',\n background: 'Transparent',\n border: 0,\n borderRadius: 2,\n height: 16,\n /* The Fluent icon is larger than the button. We need to clip it.\n Without clipping, hover effect will appear on the edge of the button but not possible to click. */\n overflow: 'hidden',\n padding: 0,\n width: 16,\n\n '&:active': {\n background: '#EDEBE9'\n },\n\n '&:focus': {\n outline: 'solid 1px #605E5C'\n },\n\n '& .webchat__thumb-button__image': {\n color: CSSTokens.ColorAccent,\n width: 14\n },\n\n '&:hover .webchat__thumb-button__image:not(.webchat__thumb-button__image--is-filled)': {\n display: 'none'\n },\n\n '&.webchat__thumb-button--is-pressed .webchat__thumb-button__image:not(.webchat__thumb-button__image--is-filled)':\n {\n display: 'none'\n },\n\n '&.webchat__thumb-button:not(:hover):not(.webchat__thumb-button--is-pressed) .webchat__thumb-button__image--is-filled':\n {\n display: 'none'\n }\n }\n };\n}\n","/* eslint no-magic-numbers: [\"off\"] */\n\nimport { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function createToasterStyle({\n primaryFont,\n toasterHeight,\n toasterMaxHeight,\n toastErrorBackgroundColor,\n toastErrorColor,\n toasterSingularMaxHeight,\n toastFontSize,\n toastIconWidth,\n toastInfoBackgroundColor,\n toastInfoColor,\n toastSeparatorColor,\n toastSuccessBackgroundColor,\n toastSuccessColor,\n toastWarnBackgroundColor,\n toastWarnColor\n}: StrictStyleOptions) {\n return {\n overflowY: 'hidden',\n\n '&:not(.webchat__toaster--expandable)': {\n maxHeight: toasterSingularMaxHeight\n },\n\n '&.webchat__toaster--expandable:not(.webchat__toaster--expanded) > ul': {\n height: 0\n },\n\n '&.webchat__toaster--expandable.webchat__toaster--expanded': {\n maxHeight: toasterMaxHeight\n },\n\n '& .webchat__toaster__header': {\n alignItems: 'center',\n alignSelf: 'stretch',\n appearance: 'none',\n backgroundColor: 'Transparent',\n border: 0,\n display: 'flex',\n fontFamily: primaryFont,\n fontSize: toastFontSize,\n minHeight: toasterHeight,\n outline: 0,\n padding: 0,\n textAlign: 'left',\n\n '&:focus .webchat__toaster__expandIconFocus': {\n borderColor: 'rgba(26, 10, 0, .7)'\n },\n\n '&:hover .webchat__toaster__expandIconFocus': {\n backgroundColor: 'rgba(0, 0, 0, .12)'\n }\n },\n\n '& .webchat__toaster__expandIconFocus': {\n alignItems: 'center',\n borderColor: 'Transparent',\n borderStyle: 'solid',\n borderWidth: 1,\n borderRadius: 3,\n display: 'flex',\n height: 22,\n justifyContent: 'center',\n width: 22\n },\n\n '&.webchat__toaster--error': {\n // TODO: Checks if pass A11y contrast ratio requirement\n\n '&:not(.webchat__toaster--expandable), & .webchat__toaster__header': {\n backgroundColor: toastErrorBackgroundColor\n },\n\n '& .webchat__toaster__header': {\n color: toastErrorColor,\n fill: toastErrorColor\n }\n },\n\n '&.webchat__toaster--info': {\n '&:not(.webchat__toaster--expandable), & .webchat__toaster__header': {\n backgroundColor: toastInfoBackgroundColor\n },\n\n '& .webchat__toaster__header': {\n color: toastInfoColor,\n fill: toastInfoColor\n }\n },\n\n '&.webchat__toaster--success': {\n '&:not(.webchat__toaster--expandable), & .webchat__toaster__header': {\n backgroundColor: toastSuccessBackgroundColor\n },\n\n '& .webchat__toaster__header': {\n color: toastSuccessColor,\n fill: toastSuccessColor\n }\n },\n\n '&.webchat__toaster--warn': {\n '&:not(.webchat__toaster--expandable), & .webchat__toaster__header': {\n backgroundColor: toastWarnBackgroundColor\n },\n\n '& .webchat__toaster__header': {\n color: toastWarnColor,\n fill: toastWarnColor\n }\n },\n\n '& .webchat__toaster__expandLevelIconBox': {\n height: toasterHeight,\n width: toastIconWidth\n },\n\n '& .webchat__toaster__expandIcon': {\n height: toasterHeight,\n width: toasterHeight\n },\n\n '& .webchat__toaster__expandText': {\n padding: '6px 0'\n },\n\n '& .webchat__toaster__expandLevelIconBox, & .webchat__toaster__expandIcon': {\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'center'\n },\n\n '& .webchat__toaster__list': {\n margin: 0,\n overflowY: 'auto',\n padding: 0\n },\n\n '& .webchat__toaster__listItem:first-child:last-child': {\n overflow: 'hidden'\n },\n\n '& .webchat__toaster__listItem:not(:first-child), & .webchat__toaster__listItem:not(:last-child)': {\n borderBottomColor: toastSeparatorColor,\n borderBottomStyle: 'solid',\n borderBottomWidth: 1,\n minHeight: 32\n }\n };\n}\n","/* eslint no-magic-numbers: [\"off\"] */\nimport { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function createToastStyle({\n primaryFont,\n toasterHeight,\n toastErrorColor,\n toastFontSize,\n toastIconWidth,\n toastInfoColor,\n toastSuccessColor,\n toastTextPadding,\n toastWarnColor\n}: StrictStyleOptions) {\n return {\n fontFamily: primaryFont,\n fontSize: toastFontSize,\n minHeight: toasterHeight,\n\n '&.webchat__toast--error': {\n color: toastErrorColor,\n fill: toastErrorColor\n },\n\n '&.webchat__toast--info': {\n color: toastInfoColor,\n fill: toastInfoColor\n },\n\n '&.webchat__toast--success': {\n color: toastSuccessColor,\n fill: toastSuccessColor\n },\n\n '&.webchat__toast--warn': {\n color: toastWarnColor,\n fill: toastWarnColor\n },\n\n '& .webchat__toast__iconBox': {\n alignItems: 'center',\n display: 'flex',\n flexShrink: 0,\n height: toasterHeight,\n justifyContent: 'center',\n width: toastIconWidth\n },\n\n '& .webchat__toast__dismissButton': {\n alignItems: 'center',\n appearance: 'none',\n backgroundColor: 'Transparent',\n border: 0,\n display: 'flex',\n height: toasterHeight,\n justifyContent: 'center',\n outline: 0,\n padding: 0,\n width: toasterHeight,\n\n '&:focus .webchat__toast__dismissButtonFocus': {\n borderColor: 'rgba(26, 10, 0, .7)'\n },\n\n '&:hover .webchat__toast__dismissButtonFocus': {\n backgroundColor: 'rgba(0, 0, 0, .12)'\n }\n },\n\n '& .webchat__toast__dismissButtonFocus': {\n alignItems: 'center',\n borderColor: 'Transparent',\n borderStyle: 'solid',\n borderWidth: 1,\n borderRadius: 3,\n display: 'flex',\n height: 22,\n justifyContent: 'center',\n width: 22\n },\n\n '& .webchat__toast__text': {\n alignSelf: 'center',\n paddingBottom: toastTextPadding,\n paddingTop: toastTextPadding\n }\n };\n}\n","import { StrictStyleOptions } from 'botframework-webchat-api';\nimport { toByteArray } from 'base64-js';\n\nconst DEFAULT_IMAGE_BASE64 =\n 'R0lGODlhQAAYAPYBAOzv8evu8Ort7+fq7Ons7ujr7eXo6uTn6ebp6+Xn6ebo6uzu8OPm6OTm6OPm5+Tn6N/i4+Ll59/i5N7h4+Hk5uDj5evu7+Hk5d/h49PV18PFx7/BwsfJysXHyMLExdja3Nfa28vNz72/wL7Awc/S08TGyMDCw9TW2NbY2t3g4trd39bZ2szO0M7Q0dnb3djb3Nvd39ve4Nnc3dze4Nrc3t7g4tzf4dXX2d3f4d7h4tnc3tve383P0MrMzs7Q0sjKzNLU1s/R08jKy9DT1NfZ293g4efp68bIyby+v9bZ27q8vdHT1c7R0uvt78nLzM/R0tjb3ens7bO0tbS2t7GztK+xsrW3uK6vsLe4utfa3L/Awtzf4MnLzamqq5WWl66wsbm7vNrd3uXo6a2ur6yurp2en6KjpKusrZ+goKeoqers7urt7peXmIGBgYSEhHx8fJmamqipqnZ2doqLi8XHyY2NjpGSkpOUlJiYmZOTlI+QkJqbm4eIiJucnIuMjP///yH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MEY0RUJCMDNENkM4MTFFNkI5RENGRDgzMjAyQjU3QzUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MEY0RUJCMDRENkM4MTFFNkI5RENGRDgzMjAyQjU3QzUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowRjRFQkIwMUQ2QzgxMUU2QjlEQ0ZEODMyMDJCNTdDNSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowRjRFQkIwMkQ2QzgxMUU2QjlEQ0ZEODMyMDJCNTdDNSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAUOAAEAIf4YT3B0aW1pemVkIHdpdGggZXpnaWYuY29tACwAAAAAQAAYAAACJoSPqcvtD6OctNqLs968+w+G4kiW5omm6sq27gvH8kzX9o3n+l0AACH5BAUHAAAALD4ACQACAAYAAAIERI5oBQAh+QQFBwAOACwsAAcAFAAJAAAEJRDISZetmJQ9uhcZyClGSY4hYjbHKqYs06ooLLuBPeM6b2u1SgQAIfkEBQcADQAsGAAHACUACQAABlFAgHAYKBqJyKRS+ahMchKnoSBYWq0Mp+rzimEiiUH1SjaCd64VioaTEo5lbA3GvaWjCmpcfnl27TZ4ent8Mmo6KW6EhXSIEGCDi4VZCG+SSUEAIfkEBQcABgAsEQAHABcACQAAB0aAAIKDAoSGh4RELD8sHwkBiJEoIUKVPSAHkJGJQZaWNQSbnJ6VMAOigzI8pDwxp6gCKUOMnhKFsAgvi59GuKkZPhkTBb6BACH5BAUHAAQALA8ABwANAAkAAAYsQICwYAgMj0LWZokSIAedpTSDREmvxaHyyjy2uN2hCqwZVLmqp2DF0bAkzyAAIfkEBRUABQAsDgAHAAoACQAABidAgDBgGAyHH5NoyUAunxuEcANdkqbVJTa7hZ6EkFFVcAx5ShmCMAgAIfkEBQcAAAAsLAAHABAACQAABC0QyClXpZWUwbsOU/AhSWmQGyiOB+Mq3rJ6zosKM22n+d2YqQzvBOOFcMOgJAIAIfkEBQcAAwAsIQAHABsACQAAB0yAAIKDAgGEh4iJKStLGTARBYmShDgoJEyYNBSRk4ouQJiZNQeFnYc5II2hJzMOBKanH6qiDK+wlBlBqxMGhreDE6m0Ub+xjBi9xYKBACH5BAUHAAYALB0ABwAQAAkAAAc+gACCAgoFg4eIGSNKSj0MiIckjJNHB5AAEiaTkzcBkC8im4w8BJ+hoj6lkBqiSC+XAUmnowOwsT8bJSiGl4EAIfkEBQcAAgAsHAAHAAsACQAABy2AAIIGDIOGRVhXijeHVYqPjIIej5QBglKUjweXmYoIkp0ClpyVhghCiRoUhoEAIfkEBRUAAgAsGwAHAAoACQAAByyAAIKCB4ODMlNkijKHY4qPMIJgj49ggpSUAQBXmIqSnRuEVJgMhiWJJQmCgQAh+QQFBwAAACwxAAcADQAJAAAEJRDICQKdgQyktrBS5h0G91WfSXYaWqjrK8rx6LL1cpf8GaY2SQQAIfkEBQcABgAsKwAHABMACQAABzyAAIKDBISGhzwbSB4ZCIeIIouLQI6PgjcmkpI4AZYDJCOak4WWQ1qiJi8Cnh8eqBiel6GbpLEgHIycsYEAIfkEBQcAAgAsKQAHAA0ACQAABzyAAIIBEhQBg4gBXHh1dWUZiQCLjZQriWWUlF2Hghh2mY14A4MVn6B7UYhmoHVSnJ13maiROFdse1YMiYEAIfkEBQcAAwAsDgAHACUACQAAB2OAA4KCBYOGh4iIETBRAI6PIIYNiZSHKWxymVUCkIcmlaAHbpmkcQCVQ6CUUqStKaeJR6qJcK2kdI6zugNltplOjh6IN7uGJr5vB44YngTFgwKYrRuPwR4dAwLPklNzbV4sj4EAIfkEBQcACgAsCwAHACcACQAAB2qAAIKDBAEACoiJiouMiQ4qBYSCLiw/LCsHho2bjF6KhpM9lpY3D4KcnAmMXaGjozECh6izihMFM5Wul5G0vQodBDY8uruyvqhcARVAxDgWxscbjQatrwOnx4mem8EZLUApkdDZClKJPIKBACH5BAUHAAoALAQABwASAAkAAAdCgACCCwEWhoOIiQMRKTQxFQYCioiMMi8fMJAEk5sQKpegjIWTEzqhNhcIo4qlpxSqnBWZroSxpi4zr5KcnTWei5yBACH5BAUHAAYALAAABwAQAAkAAAMRCLrc/rCIEIe9tOKpd/dfqCUAIfkEBRUAAQAsAAAIAAcACAAAAgaEj6nL7VAAIfkEBQcABQAsGwAHAAoACQAABzSAAIICDAODgyxSX1UeDYiLkEoIABJUkJBDADeXkZqci0eUU58ogkBVlxoEgzobVkpLqwCBACH5BAUHAAMALBMABwARAAkAAAdPgACCgwIEhoSIhTJBRx08RBSFiRQvTBoimI8VkoQ4GU4bmKFLMAqTS42iji8RAYgwqCOqQS4Mpz2hmUAxCJMqQ6mrrYmuOShPLSc2Bq6EgQAh+QQFBwAJACwHAAcAGgAJAAAHWIAAgoMBhYaEiImDFTNZRC44FAiHiomMK0A+mTaSlJWCEUVQJySaNzoYDAWfiJIfGUymkBEDrIuusLI1tJ6VDrs3pUMoKhANBLa3W4+lLym8ycqczwer0YEAIfkEBQcACwAsAAAHABYACQAABS4gIAbkaJ5oVF3HIJTpqWJ048bpVKsFjM+7xA03WgV7xOIRmUQ4jKxh0/V0+oghACH5BAUVAAEALAAABwAKAAkAAAIIhI+py+0PYQEAIfkEBQcABQAsJgAHAAwACQAAB0qAAIIEYhQGAYODN1R1bnpXN4iCGV98bZd+ZxmIFx54l6B4SodhYI2gbXZUOQAwSnqoqVMYrSV9sWUbA5NYp7IwiRgaZndmHhWDgQAh+QQFBwAHACwZAAcAGAAJAAAHboAAgoMEhYYBhImJMUMcGyNII0JANQWKimEkHUpVaWlUSkdLOFGXgxIoIY9dZWZnWCYsRBGmgikZPyJSnmhdU1pOJxKIpkW4kLy+kjfDtRWpHlhnvWOwPB8NxMXHVGevyxBqtacgQSFcTsFQtOOBACH5BAUHAAMALAkABwAgAAkAAAdtgACCgwKFhoSIiYoFFWEZPi1PJDczEQSLmIONQCElGyYckZUFmZg2KEwcHkqsPUsfEwYBpYkRMDc8R59gHkJBKzgNh7SCtriqvL2/KQzDxGIpK0FOq0jKsLLPiConLLrXNs3atS6UqDQS2eMAgQAh+QQFBwALACwAAAcAGQAJAAAHUIAAAYNNhIKHiImIDDk6ICoSCQSKlIg1MjcnmRAHk5WKFTErmqQURoafghA0KKStoQKplpCuMRUKsbKqW0S1EQOoshispQa5urtFMxO/x8iBACH5BAUHAAIALAAABwALAAkAAAIJhI+py+3xolwFACH5BAUHAAEALAAACQABAAUAAAIChF0AOw==';\nconst DEFAULT_IMAGE_TYPE = 'image/gif';\n\nlet defaultImageBlobURL;\n\nexport default function createTypingAnimationStyle({\n typingAnimationBackgroundImage,\n typingAnimationHeight,\n typingAnimationWidth\n}: StrictStyleOptions) {\n defaultImageBlobURL ||\n (defaultImageBlobURL = URL.createObjectURL(\n new Blob([toByteArray(DEFAULT_IMAGE_BASE64)], { type: DEFAULT_IMAGE_TYPE })\n ));\n\n const backgroundImage = typingAnimationBackgroundImage || `url('${defaultImageBlobURL}')`;\n\n return {\n backgroundImage,\n backgroundRepeat: 'no-repeat',\n height: typingAnimationHeight,\n width: typingAnimationWidth\n };\n}\n","import { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function createTypingIndicatorStyle({ paddingRegular }: StrictStyleOptions) {\n return {\n paddingBottom: paddingRegular,\n\n '&:not(.webchat__typing-indicator--rtl)': {\n paddingLeft: paddingRegular\n },\n\n '&.webchat__typing-indicator--rtl': {\n paddingRight: paddingRegular\n }\n };\n}\n","import { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function createUploadButtonStyle({\n sendBoxButtonColor,\n sendBoxButtonColorOnFocus,\n sendBoxButtonColorOnHover,\n sendBoxHeight,\n subtle\n}: StrictStyleOptions) {\n return {\n // We use the sendBoxHeight, so the button looks square\n width: sendBoxHeight,\n\n '& > .icon > svg': {\n fill: sendBoxButtonColor || subtle\n },\n\n '& > input:hover + .icon > svg': {\n fill: sendBoxButtonColorOnHover\n },\n\n '& > input:focus + .icon > svg': {\n fill: sendBoxButtonColorOnFocus\n }\n };\n}\n","export default function createVideoAttachmentStyle() {\n return {};\n}\n","import { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function createVideoContentStyle({ videoHeight }: StrictStyleOptions) {\n return {\n height: videoHeight,\n width: '100%'\n };\n}\n","import { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function createVimeoContentStyle({ videoHeight }: StrictStyleOptions) {\n return {\n border: 0,\n height: videoHeight,\n width: '100%'\n };\n}\n","import { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function createWarningNotificationStyle({\n connectivityIconPadding,\n connectivityMarginLeftRight,\n connectivityMarginTopBottom,\n connectivityTextSize,\n primaryFont,\n slowConnectivity,\n notificationText\n}: StrictStyleOptions) {\n return {\n alignItems: 'center',\n color: notificationText,\n // TODO: [P2] We should not set \"display\" in styleSet, this will allow the user to break the layout for no good reasons.\n display: 'flex',\n fontFamily: primaryFont,\n fontSize: connectivityTextSize,\n marginBottom: connectivityMarginTopBottom,\n marginLeft: connectivityMarginLeftRight,\n marginRight: connectivityMarginLeftRight,\n marginTop: connectivityMarginTopBottom,\n\n '& > svg': {\n fill: slowConnectivity,\n\n '&:not(webchat__warning--rtl)': {\n paddingRight: connectivityIconPadding\n },\n\n '&.webchat__warning--rtl': {\n paddingLeft: connectivityIconPadding\n }\n }\n };\n}\n","import { StrictStyleOptions } from 'botframework-webchat-api';\n\nexport default function createYouTubeContentStyle({ videoHeight }: StrictStyleOptions) {\n return {\n border: 0,\n height: videoHeight,\n width: '100%'\n };\n}\n","import updateIn from 'simple-update-in';\n\nexport default function updateMarkdownItAttrs(token, updater) {\n return updateIn(token, ['attrs'], attrs => {\n const map = Object.fromEntries(attrs);\n const nextMap = updater(map);\n\n return Object.entries(nextMap);\n });\n}\n","import updateMarkdownAttrs from './updateMarkdownAttrs';\nimport walkMarkdownTokens from './walkMarkdownTokens';\n\nexport default function addTargetBlankToHyperlinksMarkdown(tokens) {\n return walkMarkdownTokens(tokens, token => {\n switch (token.type) {\n case 'link_open':\n token = updateMarkdownAttrs(token, attrs =>\n // Adds only for external links, e.g. https://, data:\n // Don't add for internal links, e.g. #ref-1, ?q=doc\n /^\\w/u.test(attrs.href)\n ? {\n ...attrs,\n rel: 'noopener noreferrer',\n target: '_blank'\n }\n : attrs\n );\n\n break;\n\n default:\n break;\n }\n\n return token;\n });\n}\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [0, 2, 5, 26, 65] }] */\n\nimport random from 'math-random';\n\nexport default function useCSSKey() {\n return random()\n .toString(26)\n .substr(2, 5)\n .replace(/\\d/gu, value => String.fromCharCode(value.charCodeAt(0) + 65));\n}\n","import { isForbiddenPropertyName } from 'botframework-webchat-core';\n\nexport default function mapMap(map, mapper) {\n return Object.entries(map).reduce((result, [key, value]) => {\n if (!isForbiddenPropertyName(key)) {\n // Mitigated through denylisting.\n // eslint-disable-next-line security/detect-object-injection\n result[key] = mapper(value, key);\n }\n\n return result;\n }, {});\n}\n","import PropTypes from 'prop-types';\nimport React, { VFC } from 'react';\n\nimport { DefaultAvatar } from '../Middleware/Avatar/createCoreMiddleware';\n\ntype AvatarProps = {\n 'aria-hidden'?: boolean;\n className?: string;\n fromUser?: boolean;\n};\n\n/** @deprecated Please use `useRenderAvatar` hook instead. */\nconst Avatar: VFC<AvatarProps> = ({ 'aria-hidden': ariaHidden, className, fromUser }) => {\n console.warn(\n 'botframework-webchat: <Avatar> component is deprecated and will be removed on or after 2022-02-25. Please use `useRenderAvatar` hook instead.'\n );\n\n return <DefaultAvatar aria-hidden={ariaHidden} className={className} fromUser={fromUser} />;\n};\n\nAvatar.defaultProps = {\n 'aria-hidden': false,\n className: '',\n fromUser: false\n};\n\nAvatar.propTypes = {\n 'aria-hidden': PropTypes.bool,\n className: PropTypes.string,\n fromUser: PropTypes.bool\n};\n\nexport default Avatar;\n","/* eslint react/no-danger: \"off\" */\n\nimport { hooks } from 'botframework-webchat-api';\nimport { onErrorResumeNext } from 'botframework-webchat-core';\nimport MarkdownIt from 'markdown-it';\nimport React, { memo, useMemo } from 'react';\nimport betterLinks, { type BetterLinkEnv, type LinkOptions } from './betterLinks';\n\nconst allowedSchemes = ['data', 'http', 'https', 'ftp', 'mailto', 'sip', 'tel'];\n\nconst linkDefinitions = [];\n\nconst externalLinkAlt = '';\n\nconst defaultDecorateLink = (href: string, textContent: string, linkOptions?: LinkOptions): LinkOptions | undefined => {\n const decoration: LinkOptions = {\n rel: 'noopener noreferrer',\n target: '_blank',\n wrapZeroWidthSpace: true,\n ...linkOptions\n };\n\n const ariaLabelSegments: string[] = [textContent];\n const classes: Set<string> = new Set();\n const linkDefinition = linkDefinitions.find(({ url }) => url === href);\n const protocol = onErrorResumeNext(() => new URL(href).protocol);\n\n if (linkDefinition) {\n ariaLabelSegments.push(\n linkDefinition.title || onErrorResumeNext(() => new URL(linkDefinition.url).host) || linkDefinition.url\n );\n\n // linkDefinition.identifier is uppercase, while linkDefinition.label is as-is.\n linkDefinition.label === textContent && classes.add('webchat__render-markdown__pure-identifier');\n }\n\n // For links that would be sanitized out, let's turn them into a button so we could handle them later.\n if (!allowedSchemes.map(scheme => `${scheme}:`).includes(protocol)) {\n decoration.asButton ??= true;\n\n classes.add('webchat__render-markdown__citation');\n } else if (protocol === 'http:' || protocol === 'https:') {\n decoration.iconClassName = [decoration.iconClassName, 'webchat__render-markdown__external-link-icon']\n .filter((className: string | undefined) => className)\n .join(' ');\n\n ariaLabelSegments.push(externalLinkAlt);\n }\n\n // The first segment is textContent. Putting textContent is aria-label is useless.\n if (ariaLabelSegments.length > 1) {\n // If \"aria-label\" is already applied, do not overwrite it.\n decoration.ariaLabel ??= (value: string) => value || ariaLabelSegments.join(' ');\n }\n\n if (typeof linkOptions?.className === 'string') {\n classes.add(linkOptions.className);\n }\n\n // Resolve className\n const classNamesString = Array.from(classes).join(' ');\n if (linkOptions?.className && linkOptions?.className instanceof Function) {\n decoration.className = linkOptions.className(classNamesString);\n } else {\n decoration.className = classNamesString;\n }\n\n // By default, Markdown-It will set \"title\" to the link title in link definition.\n\n // However, \"title\" may be narrated by screen reader:\n // - Edge\n // - <a> will narrate \"aria-label\" but not \"title\"\n // - <button> will narrate both \"aria-label\" and \"title\"\n // - NVDA\n // - <a> will narrate both \"aria-label\" and \"title\"\n // - <button> will narrate both \"aria-label\" and \"title\"\n\n // Title makes it very difficult to control narrations by the screen reader. Thus, we are disabling it in favor of \"aria-label\".\n // This will not affect our accessibility compliance but UX. We could use a non-native tooltip or other forms of visual hint.\n\n decoration.title ??= false;\n\n return decoration;\n};\n\nconst { useLocalizer } = hooks;\n\ntype Plural = {\n zero?: string;\n one?: string;\n two?: string;\n few?: string;\n many?: string;\n other: string;\n};\n\nconst markdownIt = new MarkdownIt().use(betterLinks);\n\ntype PluralProps = Readonly<{\n stringIds: Plural;\n values: readonly [number, ...(number | string)[]] | undefined;\n}>;\n\ntype SingularProps = Readonly<{\n stringIds: string;\n values?: readonly (number | string)[] | undefined;\n}>;\n\ntype Props = Readonly<{\n className?: string | undefined;\n linkClassName?: string | undefined;\n onDecorateLink?: ((href: string, textContent: string) => LinkOptions | undefined) | undefined;\n}> &\n (SingularProps | PluralProps);\n\nfunction isPlural(props: Props): props is PluralProps {\n return typeof props.stringIds !== 'string';\n}\n\nconst LocalizedString = (props: Props) => {\n const { className, linkClassName, onDecorateLink = defaultDecorateLink, stringIds, values } = props;\n const localize = useLocalizer(isPlural(props) && { plural: true });\n const env = useMemo<BetterLinkEnv>(\n () => ({\n linkOptions: {\n className: linkClassName\n },\n decorateLink: onDecorateLink\n }),\n [linkClassName, onDecorateLink]\n );\n\n const html = useMemo(\n () => ({\n __html: markdownIt.renderer.render(markdownIt.parseInline(localize(stringIds, ...(values ?? [])), env), env)\n }),\n [env, localize, stringIds, values]\n );\n\n return <span className={className} dangerouslySetInnerHTML={html} />;\n};\n\nexport default memo(LocalizedString);\n","/* eslint-disable security/detect-object-injection */\nimport MarkdownIt from 'markdown-it';\n\nfunction iterator(md, ruleName, tokenType, iterator) {\n function scan(state) {\n const { env = {} } = state;\n for (let blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n if (state.tokens[blkIdx].type !== 'inline') {\n continue;\n }\n const inlineTokens = state.tokens[blkIdx].children;\n for (let i = inlineTokens.length - 1; i >= 0; i--) {\n if (inlineTokens[i].type !== tokenType) {\n continue;\n }\n iterator(inlineTokens, i, env);\n }\n }\n }\n md.core.ruler.push(ruleName, scan);\n}\n\n// Put a transparent pixel instead of the \"open in new window\" icon, so developers can easily modify the icon in CSS.\nconst TRANSPARENT_GIF = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n\ntype AttributeSetter = false | string | ((value?: string) => string);\n\nexport type LinkOptions = {\n /** Value of \"aria-label\" attribute of the link. If set to `false`, remove existing attribute. */\n ariaLabel?: AttributeSetter;\n\n /** Turns this link into a <button> with \"value\" attribute instead of \"href\". */\n asButton?: boolean;\n\n /** Value of \"class\" attribute of the link. If set to `false`, remove existing attribute. */\n className?: AttributeSetter;\n\n /** Alternate text of the image icon appended to the link. */\n iconAlt?: string;\n\n /** Class name of the image icon appended to the link. */\n iconClassName?: string;\n\n /** Value of \"rel\" attribute of the link. If set to `false`, remove existing attribute. */\n rel?: AttributeSetter;\n\n /** Value of \"target\" attribute of the link. If set to `false`, remove existing attribute. */\n target?: AttributeSetter;\n\n /** Value of \"title\" attribute of the link. If set to `false`, remove existing attribute. */\n title?: AttributeSetter;\n\n /** Wraps the link with zero-width space. */\n wrapZeroWidthSpace?: boolean;\n};\n\nexport type BetterLinkEnv = {\n decorateLink?: (href: string, textContent: string, linkOptions: LinkOptions) => LinkOptions | undefined;\n linkOptions?: LinkOptions;\n};\n\n// This is used for parsing Markdown for external links.\nconst internalMarkdownIt = new MarkdownIt();\n\nconst ZERO_WIDTH_SPACE_TOKEN = {\n content: '\\u200b',\n type: 'text'\n};\n\nfunction setTokenAttribute(attrs: Array<[string, string]>, name: string, value?: AttributeSetter) {\n const index = attrs.findIndex(entry => entry[0] === name);\n\n if (value === false) {\n ~index && attrs.splice(index, 1);\n } else if (typeof value === 'string') {\n if (~index) {\n attrs[+index][1] = value;\n } else {\n attrs.push([name, value]);\n }\n } else if (typeof value === 'function') {\n if (~index) {\n attrs[+index][1] = value(attrs[+index][1]);\n } else {\n attrs.push([name, value()]);\n }\n }\n}\n\nconst betterLinks = (markdown: typeof MarkdownIt): typeof MarkdownIt =>\n markdown.use(iterator, 'url_new_win', 'link_open', (tokens, index, env) => {\n const { decorateLink, linkOptions }: BetterLinkEnv = env;\n\n const indexOfLinkCloseToken = tokens.indexOf(tokens.slice(index + 1).find(({ type }) => type === 'link_close'));\n // eslint-disable-next-line no-magic-numbers\n const updatedTokens = tokens.splice(index, ~indexOfLinkCloseToken ? indexOfLinkCloseToken - index + 1 : 2);\n\n try {\n const [linkOpenToken] = updatedTokens;\n const linkCloseToken = updatedTokens[updatedTokens.length - 1];\n\n const [, href] = linkOpenToken.attrs.find(([name]) => name === 'href');\n const nodesInLink = updatedTokens.slice(1, updatedTokens.length - 1);\n\n const textContent = nodesInLink\n .filter(({ type }) => type === 'text')\n .map(({ content }) => content)\n .join(' ');\n\n const decoration = decorateLink?.(href, textContent, linkOptions);\n\n if (!decoration) {\n return;\n }\n\n const { ariaLabel, asButton, className, iconAlt, iconClassName, rel, target, title, wrapZeroWidthSpace } =\n decoration;\n\n setTokenAttribute(linkOpenToken.attrs, 'aria-label', ariaLabel);\n setTokenAttribute(linkOpenToken.attrs, 'class', className);\n setTokenAttribute(linkOpenToken.attrs, 'title', title);\n\n if (iconClassName) {\n const iconTokens = internalMarkdownIt.parseInline(``)[0].children;\n\n setTokenAttribute(iconTokens[0].attrs, 'class', iconClassName);\n setTokenAttribute(iconTokens[0].attrs, 'title', iconAlt);\n\n // Add an icon before </a>.\n // eslint-disable-next-line no-magic-numbers\n updatedTokens.splice(-1, 0, ...iconTokens);\n }\n\n if (asButton) {\n setTokenAttribute(linkOpenToken.attrs, 'href', false);\n\n linkOpenToken.tag = 'button';\n\n setTokenAttribute(linkOpenToken.attrs, 'type', 'button');\n setTokenAttribute(linkOpenToken.attrs, 'value', href);\n\n linkCloseToken.tag = 'button';\n } else {\n setTokenAttribute(linkOpenToken.attrs, 'rel', rel);\n setTokenAttribute(linkOpenToken.attrs, 'target', target);\n }\n\n if (wrapZeroWidthSpace) {\n updatedTokens.splice(0, 0, ZERO_WIDTH_SPACE_TOKEN);\n updatedTokens.splice(Infinity, 0, ZERO_WIDTH_SPACE_TOKEN);\n }\n } finally {\n tokens.splice(index, 0, ...updatedTokens);\n }\n });\n\nexport default betterLinks;\n","import React, { memo, useContext, useMemo, type ReactNode } from 'react';\n\nimport Context, { type ContextType } from './private/Context';\n\ntype Props = Readonly<{ children?: ReactNode | undefined } & Partial<ContextType>>;\n\nconst EMPTY_ARRAY = Object.freeze([] as const);\n\nconst ThemeProvider = ({\n children,\n activityMiddleware,\n activityStatusMiddleware,\n attachmentForScreenReaderMiddleware,\n attachmentMiddleware,\n avatarMiddleware,\n cardActionMiddleware,\n groupActivitiesMiddleware,\n scrollToEndButtonMiddleware,\n sendBoxMiddleware,\n sendBoxToolbarMiddleware,\n styleOptions,\n toastMiddleware,\n typingIndicatorMiddleware\n}: Props) => {\n const existingContext = useContext(Context);\n\n // TODO: [P1] We should reduce boilerplate code.\n const mergedActivityMiddleware = useMemo<ContextType['activityMiddleware']>(\n () => Object.freeze([...(activityMiddleware || []), ...existingContext.activityMiddleware]),\n [activityMiddleware, existingContext.activityMiddleware]\n );\n\n const mergedActivityStatusMiddleware = useMemo<ContextType['activityStatusMiddleware']>(\n () => Object.freeze([...(activityStatusMiddleware || EMPTY_ARRAY), ...existingContext.activityStatusMiddleware]),\n [activityStatusMiddleware, existingContext.activityStatusMiddleware]\n );\n\n const mergedAttachmentForScreenReaderMiddleware = useMemo<ContextType['attachmentForScreenReaderMiddleware']>(\n () =>\n Object.freeze([\n ...(attachmentForScreenReaderMiddleware || EMPTY_ARRAY),\n ...existingContext.attachmentForScreenReaderMiddleware\n ]),\n [attachmentForScreenReaderMiddleware, existingContext.attachmentForScreenReaderMiddleware]\n );\n\n const mergedAttachmentMiddleware = useMemo<ContextType['attachmentMiddleware']>(\n () => Object.freeze([...(attachmentMiddleware || EMPTY_ARRAY), ...existingContext.attachmentMiddleware]),\n [attachmentMiddleware, existingContext.attachmentMiddleware]\n );\n\n const mergedAvatarMiddleware = useMemo<ContextType['avatarMiddleware']>(\n () => Object.freeze([...(avatarMiddleware || EMPTY_ARRAY), ...existingContext.avatarMiddleware]),\n [avatarMiddleware, existingContext.avatarMiddleware]\n );\n\n const mergedCardActionMiddleware = useMemo<ContextType['cardActionMiddleware']>(\n () => Object.freeze([...(cardActionMiddleware || EMPTY_ARRAY), ...existingContext.cardActionMiddleware]),\n [cardActionMiddleware, existingContext.cardActionMiddleware]\n );\n\n const mergedGroupActivitiesMiddleware = useMemo<ContextType['groupActivitiesMiddleware']>(\n () => Object.freeze([...(groupActivitiesMiddleware || EMPTY_ARRAY), ...existingContext.groupActivitiesMiddleware]),\n [groupActivitiesMiddleware, existingContext.groupActivitiesMiddleware]\n );\n\n const mergedScrollToEndButtonMiddleware = useMemo<ContextType['scrollToEndButtonMiddleware']>(\n () =>\n Object.freeze([...(scrollToEndButtonMiddleware || EMPTY_ARRAY), ...existingContext.scrollToEndButtonMiddleware]),\n [scrollToEndButtonMiddleware, existingContext.scrollToEndButtonMiddleware]\n );\n\n const mergedSendBoxMiddleware = useMemo<ContextType['sendBoxMiddleware']>(\n () => Object.freeze([...(sendBoxMiddleware || EMPTY_ARRAY), ...existingContext.sendBoxMiddleware]),\n [sendBoxMiddleware, existingContext.sendBoxMiddleware]\n );\n\n const mergedSendBoxToolbarMiddleware = useMemo<ContextType['sendBoxToolbarMiddleware']>(\n () => Object.freeze([...(sendBoxToolbarMiddleware || EMPTY_ARRAY), ...existingContext.sendBoxToolbarMiddleware]),\n [sendBoxToolbarMiddleware, existingContext.sendBoxToolbarMiddleware]\n );\n\n const mergedStyleOptions = useMemo<ContextType['styleOptions']>(\n () => Object.freeze({ ...styleOptions, ...existingContext.styleOptions }),\n [styleOptions, existingContext.styleOptions]\n );\n\n const mergedToastMiddleware = useMemo<ContextType['toastMiddleware']>(\n () => Object.freeze([...(toastMiddleware || EMPTY_ARRAY), ...existingContext.toastMiddleware]),\n [toastMiddleware, existingContext.toastMiddleware]\n );\n\n const mergedTypingIndicatorMiddleware = useMemo<ContextType['typingIndicatorMiddleware']>(\n () => Object.freeze([...(typingIndicatorMiddleware || EMPTY_ARRAY), ...existingContext.typingIndicatorMiddleware]),\n [typingIndicatorMiddleware, existingContext.typingIndicatorMiddleware]\n );\n\n const context = useMemo(\n () => ({\n activityMiddleware: mergedActivityMiddleware,\n activityStatusMiddleware: mergedActivityStatusMiddleware,\n attachmentForScreenReaderMiddleware: mergedAttachmentForScreenReaderMiddleware,\n attachmentMiddleware: mergedAttachmentMiddleware,\n avatarMiddleware: mergedAvatarMiddleware,\n cardActionMiddleware: mergedCardActionMiddleware,\n groupActivitiesMiddleware: mergedGroupActivitiesMiddleware,\n scrollToEndButtonMiddleware: mergedScrollToEndButtonMiddleware,\n sendBoxMiddleware: mergedSendBoxMiddleware,\n sendBoxToolbarMiddleware: mergedSendBoxToolbarMiddleware,\n styleOptions: mergedStyleOptions,\n toastMiddleware: mergedToastMiddleware,\n typingIndicatorMiddleware: mergedTypingIndicatorMiddleware\n }),\n [\n mergedActivityMiddleware,\n mergedActivityStatusMiddleware,\n mergedAttachmentForScreenReaderMiddleware,\n mergedAttachmentMiddleware,\n mergedAvatarMiddleware,\n mergedCardActionMiddleware,\n mergedGroupActivitiesMiddleware,\n mergedScrollToEndButtonMiddleware,\n mergedSendBoxMiddleware,\n mergedSendBoxToolbarMiddleware,\n mergedStyleOptions,\n mergedToastMiddleware,\n mergedTypingIndicatorMiddleware\n ]\n );\n\n return <Context.Provider value={context}>{children}</Context.Provider>;\n};\n\nexport default memo(ThemeProvider);\n","import useDictateAbortable from './useDictateAbortable';\nimport useFocus from './useFocus';\nimport useMakeThumbnail from './useMakeThumbnail';\nimport useObserveScrollPosition from './useObserveScrollPosition';\nimport useObserveTranscriptFocus from './useObserveTranscriptFocus';\nimport useRenderMarkdownAsHTML from './useRenderMarkdownAsHTML';\nimport useScrollDown from './useScrollDown';\nimport useScrollTo from './useScrollTo';\nimport useScrollToEnd from './useScrollToEnd';\nimport useScrollUp from './useScrollUp';\nimport useSendFiles from './useSendFiles';\nimport useSendMessage from './useSendMessage';\nimport useStyleSet from './useStyleSet';\nimport useWebSpeechPonyfill from './useWebSpeechPonyfill';\n\nimport { useTypingIndicatorVisible } from '../BasicTypingIndicator';\nimport { useSendBoxSpeechInterimsVisible } from '../SendBox/BasicSendBox';\nimport { useMicrophoneButtonClick, useMicrophoneButtonDisabled } from '../SendBox/MicrophoneButton';\nimport { useTextBoxSubmit, useTextBoxValue } from '../SendBox/TextBox';\nimport { useRegisterFocusSendBox, type SendBoxFocusOptions } from './sendBoxFocus';\n\nexport { type SendBoxFocusOptions };\n\nexport {\n useDictateAbortable,\n useFocus,\n useMakeThumbnail,\n useMicrophoneButtonClick,\n useMicrophoneButtonDisabled,\n useObserveScrollPosition,\n useObserveTranscriptFocus,\n useRegisterFocusSendBox,\n useRenderMarkdownAsHTML,\n useScrollDown,\n useScrollTo,\n useScrollToEnd,\n useScrollUp,\n useSendBoxSpeechInterimsVisible,\n // We are overwriting the `useSendFiles` hook from bf-wc-api and adding thumbnailing support.\n useSendFiles,\n // We are overwriting the `useSendMessage` hook from bf-wc-api and adding thumbnailing support.\n useSendMessage,\n useStyleSet,\n useTextBoxSubmit,\n useTextBoxValue,\n useTypingIndicatorVisible,\n useWebSpeechPonyfill\n};\n","import { useEffect } from 'react';\n\nimport ScrollPosition from '../types/ScrollPosition';\nimport useWebChatUIContext from './internal/useWebChatUIContext';\n\nexport default function useObserveScrollPosition(\n observer: (scrollPosition: ScrollPosition) => void,\n deps: any[]\n): void {\n if (typeof observer !== 'function') {\n observer = undefined;\n console.warn('botframework-webchat: First argument passed to \"useObserveScrollPosition\" must be a function.');\n } else if (typeof deps !== 'undefined' && !Array.isArray(deps)) {\n console.warn(\n 'botframework-webchat: Second argument passed to \"useObserveScrollPosition\" must be an array if specified.'\n );\n }\n\n const { observeScrollPosition } = useWebChatUIContext();\n\n /* eslint-disable-next-line react-hooks/exhaustive-deps */\n useEffect(() => observer && observeScrollPosition(observer), [...(deps || []), observer, observeScrollPosition]);\n}\n","import { useEffect } from 'react';\nimport type { WebChatActivity } from 'botframework-webchat-core';\n\nimport useWebChatUIContext from './internal/useWebChatUIContext';\n\nexport default function useObserveTranscriptFocus(\n observer: (event: { activity: WebChatActivity }) => void,\n deps: any[]\n): void {\n if (typeof observer !== 'function') {\n observer = undefined;\n console.warn('botframework-webchat: First argument passed to \"useObserveTranscriptFocus\" must be a function.');\n } else if (typeof deps !== 'undefined' && !Array.isArray(deps)) {\n console.warn(\n 'botframework-webchat: Second argument passed to \"useObserveTranscriptFocus\" must be an array if specified.'\n );\n }\n\n const { observeTranscriptFocus } = useWebChatUIContext();\n\n /* eslint-disable-next-line react-hooks/exhaustive-deps */\n useEffect(() => observer && observeTranscriptFocus(observer), [...(deps || []), observer, observeTranscriptFocus]);\n}\n","import { useCallback } from 'react';\n\nimport ScrollPosition from '../types/ScrollPosition';\nimport useWebChatUIContext from './internal/useWebChatUIContext';\n\nexport default function useScrollTo(): (\n position: ScrollPosition,\n scrollToOptions: { behavior?: 'auto' | 'smooth' }\n) => void {\n const { scrollToCallbacksRef } = useWebChatUIContext();\n\n return useCallback(\n (...args) => scrollToCallbacksRef.current.forEach(callback => callback(...args)),\n [scrollToCallbacksRef]\n );\n}\n","import { hooks } from 'botframework-webchat-api';\nimport { useCallback } from 'react';\n\nimport useMakeThumbnail from './useMakeThumbnail';\n\nconst { useSendFiles: useAPISendFiles } = hooks;\n\ntype PostActivityFile = Parameters<ReturnType<typeof useAPISendFiles>>[0][0];\n\n/**\n * @deprecated This hook will be removed on or after 2026-04-03. Please use `useSendMessage` instead.\n */\nexport default function useSendFiles(): (files: readonly File[]) => void {\n const makeThumbnail = useMakeThumbnail();\n const sendFiles = useAPISendFiles();\n\n return useCallback(\n files => {\n // We intentionally not returning a Promise.\n // This is the because the Promise returned never tell if the message has successfully sent or not.\n // Until we have that signal, we should not return Promise.\n (async function () {\n files &&\n files.length &&\n sendFiles(\n await Promise.all(\n files.map<Promise<PostActivityFile>>(file =>\n // To maintain backward compatibility, this hook should look at file extension instead of MIME type.\n makeThumbnail(\n file,\n /\\.(gif|jpe?g|png)$/iu.test(file.name) ? 'image/*' : 'application/octet-stream'\n ).then(thumbnailURL => ({\n name: file.name,\n size: file.size,\n thumbnail: thumbnailURL?.toString(),\n url: URL.createObjectURL(file)\n }))\n )\n )\n );\n })();\n },\n [makeThumbnail, sendFiles]\n );\n}\n","import { hooks } from 'botframework-webchat-api';\nimport { type SendBoxAttachment } from 'botframework-webchat-core';\nimport { useCallback } from 'react';\n\nimport useMakeThumbnail from './useMakeThumbnail';\n\nconst { useSendMessage: useAPISendMessage } = hooks;\n\ntype SendMessage = (\n text?: string,\n method?: string,\n init?: {\n attachments?: Iterable<SendBoxAttachment> | undefined;\n channelData?: any;\n }\n) => void;\n\nexport default function useSendMessage(): SendMessage {\n const makeThumbnail = useMakeThumbnail();\n const sendMessage = useAPISendMessage();\n\n return useCallback<SendMessage>(\n async (text, method, { channelData, attachments } = {}) => {\n sendMessage(text, method, {\n attachments: attachments\n ? await Promise.all(\n [...attachments].map(async ({ blob, thumbnailURL }) => {\n if (!thumbnailURL && blob instanceof File) {\n thumbnailURL = await makeThumbnail(blob);\n }\n\n return { blob, thumbnailURL };\n })\n )\n : [],\n channelData\n });\n },\n [makeThumbnail, sendMessage]\n );\n}\n"],"mappings":"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","names":["apiHooks","concatMiddleware","localize","PropTypes","React","SendBoxMiddlewareProxy","hooks","classNames","PropTypes","React","hooks","React","hooks","React","PropTypes","React","forwardRef","memo","useContext","createContext","context","WebChatUIContext_default","useWebChatUIContext","context","useContext","WebChatUIContext_default","useStyleToEmotionObject","useWebChatUIContext","ROOT_STYLE","ScreenReaderText","forwardRef","ariaHidden","id","text","ref","rootClassName","useStyleToEmotionObject","React","PropTypes","ScreenReaderText_default","memo","useLocalizer","hooks","ConnectivityStatusConnected","localize","React","ScreenReaderText_default","Connected_default","hooks","classNames","PropTypes","React","useState","hooks","classNames","React","useStyleSet","useWebChatUIContext","useDirection","hooks","SpinnerAnimation","spinnerAnimationStyleSet","useStyleSet","direction","React","classNames","SpinnerAnimation_default","useCallback","useState","useForceRender","setForceRender","useForceRender_default","hooks","useEffect","usePonyfill","useTimer","at","fn","clearTimeout","Date","setTimeout","ms","timeout","hooks","classNames","PropTypes","React","useDirection","ICON_SIZE_FACTOR","WarningNotificationIcon","className","size","direction","WarningNotificationIcon_default","useDirection","useLocalizer","usePonyfill","useStyleOptions","hooks","ConnectivityStatusConnecting","reconnect","Date","slowConnectionAfter","connectivityNotificationStyleSet","warningNotificationStyleSet","useStyleSet","direction","initialRenderAt","useState","forceRender","useForceRender_default","localize","initialConnectionText","interruptedConnectionText","slowConnectionText","useTimer","React","ScreenReaderText_default","classNames","WarningNotificationIcon_default","SpinnerAnimation_default","PropTypes","Connecting_default","hooks","classNames","React","hooks","classNames","PropTypes","React","useDirection","ICON_SIZE_FACTOR","ErrorNotificationIcon","className","size","direction","ErrorNotificationIcon_default","useDirection","useLocalizer","hooks","ConnectivityStatusFailedToConnect","errorNotificationStyleSet","useStyleSet","direction","localize","failedConnectionText","React","ScreenReaderText_default","classNames","ErrorNotificationIcon_default","FailedToConnect_default","hooks","classNames","React","useDirection","useLocalizer","hooks","ConnectivityStatusJavaScriptError","errorNotificationStyleSet","useStyleSet","direction","localize","renderErrorNotificationText","React","ScreenReaderText_default","classNames","ErrorNotificationIcon_default","JavaScriptError_default","useDebouncedNotifications","hooks","BasicConnectivityStatus","connectivityStatus","React","Connecting_default","JavaScriptError_default","FailedToConnect_default","Connected_default","BasicConnectivityStatus_default","hooks","classNames","React","useCallback","useEffect","useMemo","useState","PropTypes","React","CollapseIcon","className","CollapseIcon_default","PropTypes","React","ExpandIcon","className","ExpandIcon_default","hooks","isForbiddenPropertyName","PropTypes","React","PropTypes","React","CheckMarkIcon","ariaLabel","className","CheckMarkIcon_default","PropTypes","React","ExclamationMarkIcon","ariaLabel","className","ExclamationMarkIcon_default","useLocalizer","hooks","NotificationIcon","className","level","localize","prefixes","prefix","isForbiddenPropertyName","React","CheckMarkIcon_default","ExclamationMarkIcon_default","PropTypes","NotificationIcon_default","random","randomId","maxLength","useDebouncedNotifications","useLocalizer","useRenderToast","hooks","ROOT_STYLE","LEVEL_AS_NUMBER","LEVEL_AS_NUMBER_KEYS","getLevelAsNumber","level","compareLevel","x","y","sortNotifications","map","PASSTHRU_FN","value","TOAST_ACCORDION_IDS","BasicToaster","instanceId","useMemo","randomId","toasterStyleSet","useStyleSet","debouncedNotifications","expanded","setExpanded","useState","localizeWithPlural","renderToast","rootClassName","useStyleToEmotionObject","handleToggleExpand","useCallback","sortedNotifications","sortedNotificationsWithChildren","notification","children","expandable","highestLevel","expandableElementId","headerElementId","useEffect","React","classNames","NotificationIcon_default","CollapseIcon_default","ExpandIcon_default","id","BasicToaster_default","hooks","ReactScrollToBottomComposer","ReactScrollToBottomPanel","useAnimatingToEnd","useAtEnd","useObserveScrollPosition","useScrollTo","useScrollToEnd","useSticky","classNames","PropTypes","React","forwardRef","Fragment","memo","useCallback","useMemo","useRef","userAgent","android","chromium","edgeAnaheim","edgeUWP","firefox","ie11","hooks","React","Fragment","useMemo","useActiveTyping","useRenderTypingIndicator","useTypingIndicatorVisible","activeTyping","role","type","BasicTypingIndicator","visible","typing","renderTypingIndicator","BasicTypingIndicator_default","PropTypes","React","useCallback","FocusRedirector","className","onFocus","redirectRef","handleFocus","FocusRedirector_default","INPUTTABLE_KEY","INPUTTABLE_KEY_KEYS","inputtableKey","key","isZeroOrPositive","value","hooks","classNames","PropTypes","React","useCallback","useState","useMemo","random","useUniqueId","prefix","id","useCallback","createWaitUntilable","object","allPromises","promise","numPromise","createPropagation","useRegisterFocusSendBox","useFocusSendBox","useFocus","focusSendBox","useFocusSendBox","focusTranscriptCallbacksRef","useWebChatUIContext","useCallback","where","options","getPromise","createWaitUntilable","callback","useLocalizer","hooks","Notes","header","text","React","line","index","PropTypes","KeyboardHelp","keyboardHelpStyleSet","useStyleSet","shown","setShown","useState","focus","useFocus","headerLabelId","useUniqueId","localize","chatHistoryAccessItemsInMessageBody","chatHistoryAccessItemsInMessageHeader","chatHistoryHeader","chatHistoryLeaveMessageBody","chatHistoryLeaveMessageHeader","chatHistoryMoveBetweenItemsBody","chatHistoryMoveBetweenItemsHeader","chatHistoryMoveBetweenMessagesBody","chatHistoryMoveBetweenMessagesHeader","chatWindowBodyDoActionBody","chatWindowBodyDoActionHeader","chatWindowBodyMoveBetweenItemsBody","chatWindowBodyMoveBetweenItemsHeader","chatWindowHeader","closeButtonAlt","handleBlur","useCallback","event","handleCloseButtonClick","handleCloseButtonFocus","handleCloseButtonKeyDown","key","classNames","KeyboardHelp_default","hooks","classNames","PropTypes","React","useEffect","useMemo","useRef","isPresentational","activity","channelData","fallbackText","hooks","classNames","PropTypes","React","Fragment","useMemo","textFormatToContentType","textFormat","walk","document","walker","nodes","results","node","childNodes","HTML_INLINE_TAGS","htmlTextAlternatives","nodeType","tagName","textContent","activityAltText","activity","renderMarkdownAsHTML","fallbackText","text","textFormatToContentType","hooks","React","Fragment","useCreateAttachmentForScreenReaderRenderer","useLocalizer","ACTIVITY_NUM_ATTACHMENTS_ALT_IDS","LiveRegionAttachments","activity","attachments","createAttachmentForScreenReaderRenderer","localizeWithPlural","attachmentForScreenReaderRenderers","attachment","numGenericAttachments","numAttachmentsAlt","render","index","LiveRegionAttachments_default","PropTypes","React","computeSuggestedActionText","cardAction","title","type","value","LiveRegionSuggestedActions","suggestedActions","React","action","index","computeSuggestedActionText","PropTypes","LiveRegionSuggestedActions_default","cx","hooks","useMemo","useLocalizer","useStyleOptions","hooks","useRenderMarkdownAsHTML","mode","renderMarkdown","useWebChatUIContext","styleOptions","renderMarkdownStyleSet","useStyleSet","externalLinkAlt","containerClassName","useMemo","cx","markdown","htmlAfterSanitization","documentAfterSanitization","parseDocumentFromString","rootElement","serializeDocumentIntoString","useAvatarForBot","useLocalizer","hooks","ROOT_STYLE","LiveRegionActivity","activity","botInitials","role","type","fallbackText","localize","renderMarkdownAsHTML","useRenderMarkdownAsHTML","rootClassName","useStyleToEmotionObject","textAlt","useMemo","activityAltText","greetingAlt","validFallbackText","React","classNames","Fragment","LiveRegionSuggestedActions_default","LiveRegionAttachments_default","PropTypes","LiveRegionActivity_default","hooks","useEffect","useMemo","SENDING","SEND_FAILED","SENT","useEffect","useRef","usePrevious","value","ref","useContext","createContext","LiveRegionTwinContext","Context_default","useLiveRegionTwinContext","thrownOnUndefined","contextValue","useContext","Context_default","useQueueStaticElement","useLiveRegionTwinContext","useGetActivityByKey","useLocalizer","useSendStatusByActivityKey","hooks","LiveRegionSendFailed","sendStatusByActivityKey","getActivityByKey","localize","queueStaticElement","useQueueStaticElement","activityKeysOfSendFailed","useMemo","key","sendStatus","SEND_FAILED","isPresentational","liveRegionSendFailedAlt","prevActivityKeysOfSendFailed","usePrevious","hasNewSendFailed","useEffect","SendFailed_default","hooks","PropTypes","React","useCallback","useEffect","useMemo","useRef","useState","PropTypes","React","Fragment","useEffect","useMarkAllAsRenderedEffect","markAllAsRendered","useLiveRegionTwinContext","useEffect","useStaticElementEntries","useLiveRegionTwinContext","LiveRegionTwinContainer","ariaLabel","ariaLive","ariaRoleDescription","className","role","textElementClassName","staticElementEntries","useStaticElementEntries","useMarkAllAsRenderedEffect","React","element","key","Fragment","PropTypes","LiveRegionTwinContainer_default","useMemo","useRef","useValueRef","value","ref","readOnlyRef","usePonyfill","hooks","DEFAULT_ARIA_LIVE","DEFAULT_FADE_AFTER","LiveRegionTwinComposer","ariaLabel","ariaLive","ariaRoleDescription","children","className","fadeAfter","role","textElementClassName","clearTimeout","setTimeout","staticElementEntries","setStaticElementEntries","useState","fadeAfterRef","useValueRef","markAllAsRenderedTimeoutIdRef","useRef","nextKeyRef","staticElementEntriesRef","markAllAsRendered","useCallback","useEffect","queueStaticElement","element","key","entries","staticElementEntriesState","useMemo","context","React","Context_default","LiveRegionTwinContainer_default","PropTypes","LiveRegionTwinComposer_default","tabbableElements","element","candidates","tabIndexAttribute","value","hooks","useCallback","useMemo","ANDROID_PATTERN","APPLE_PATTERN","LINUX_PATTERN","WINDOWS_PATTERN","useNavigatorPlatform","platform","android","apple","windows","linux","useLocalizer","hooks","useLocalizeAccessKey","type","apple","useNavigatorPlatform","localize","useCallback","accessKey","useSuggestedActionsAccessKey","suggestedActionsAccessKey","useWebChatUIContext","hooks","useEffect","useRef","useActiveTyping","arrayEquals","x","y","value","index","useTypistNames","activeTyping","prevTypistNamesStateRef","sortedActiveTypingFromOthersValues","role","typistNamesState","name","prevTypistNamesState","nextTypistNamesState","useActivities","useGetKeyByActivity","useLocalizer","useStyleOptions","hooks","ROOT_STYLE","LiveRegionTranscriptCore","activityElementMapRef","accessKey","useSuggestedActionsAccessKey","activities","typistNames","useTypistNames","getKeyByActivity","localize","localizeAccessKeyAsAccessibleName","useLocalizeAccessKey","queueStaticElement","useQueueStaticElement","liveRegionInteractiveLabelAlt","liveRegionInteractiveWithLinkLabelAlt","typingIndicator","liveRegionSuggestedActionsLabelAlt","keyedActivities","useMemo","intermediate","activity","prevRenderingActivitiesRef","useRef","useEffect","prevRenderingActivities","appendedActivities","key","isPresentational","React","LiveRegionActivity_default","hasNewLink","hasNewWidget","tabbableElements","hasSuggestedActions","SendFailed_default","LiveRegionTranscript","internalLiveRegionFadeAfter","rootClassName","useStyleToEmotionObject","transcriptRoleDescription","LiveRegionTwinComposer_default","classNames","PropTypes","LiveRegionTranscript_default","hooks","PropTypes","random","React","useCallback","useMemo","computeScrollIntoView","scrollIntoViewWithBlockNearest","targetElement","action","createContext","TranscriptFocusContext","Context_default","useContext","createContext","Context_default","useActivityTreeContext","thrownOnUndefined","contextValue","useContext","Context_default","useActivityTreeWithRenderer","options","context","useActivityTreeContext","useCallback","useRef","useState","useStateRef","initialValue","_","forceRender","valueRef","setter","value","current","useGetKeyByActivity","hooks","last","array","uniqueId","count","random","TranscriptFocusComposer","children","containerRef","flattenedActivityTree","useActivityTreeWithRenderer","_","setRawFocusedActivityKey","rawFocusedActivityKeyRef","useStateRef","getKeyByActivity","prefix","useMemo","getDescendantIdByActivityKey","useCallback","activityKey","renderingActivityKeys","activity","renderingActivityKeysRef","useValueRef","prevRenderingActivityKeys","usePrevious","rawFocusedActivityKey","focusedActivityKey","focusedActivityKeyRef","activeDescendantId","focusByActivityKey","withFocus","key","activeDescendantElement","scrollIntoViewWithBlockNearest","focusRelativeActivity","delta","orderedActivityKeys","index","nextIndex","contextValue","React","Context_default","PropTypes","TranscriptFocusComposer_default","useContext","useTranscriptFocusContext","throwOnUndefined","contextValue","useContext","Context_default","useActiveDescendantId","useTranscriptFocusContext","useDispatchScrollPosition","useWebChatUIContext","useDispatchTranscriptFocusByActivityKey","useWebChatUIContext","useFocusByActivityKey","useTranscriptFocusContext","useFocusedActivityKey","useTranscriptFocusContext","useFocusedExplicitly","useTranscriptFocusContext","useFocusByActivityKey","useTranscriptFocusContext","hooks","useCallback","useEffect","useMemo","useRef","supportPseudoClass","pseudoClass","nonce","styleElement","useNonce","nonce","useWebChatUIContext","usePonyfill","hooks","INPUT_TYPES_ALLOW_LIST","focusTriggersKeyboardModality","el","isContentEditable","readOnly","tagName","type","createEventSubscription","target","types","handler","subscribed","useObserveFocusVisibleForLegacyBrowsers","targetRef","onFocusVisibleRef","Date","blurSinceRef","useRef","hadKeyboardEventRef","hasFocusVisibleRef","eventSubscription","useMemo","event","setHasFocusVisible","useCallback","nextHasFocusVisible","handleKeyDown","handlePointerDown","handleFocus","handleBlur","handleVisibilityChange","useEffect","useObserveFocusVisibleForModernBrowsers","current","useObserveFocusVisible","onFocusVisible","nonce","useNonce","useValueRef","nonceRef","supportPseudoClass","useEffect","removeInline","array","items","item","index","useRegisterFocusTranscript","callback","focusTranscriptCallbacksRef","useWebChatUIContext","useEffect","focusTranscriptCallbacks","removeInline","useEffect","useRegisterScrollTo","callback","scrollToCallbacksRef","useWebChatUIContext","useEffect","scrollToCallbacks","removeInline","useEffect","useRegisterScrollTo","callback","scrollToEndCallbacksRef","useWebChatUIContext","useEffect","scrollToEndCallbacks","removeInline","React","memo","useCallback","useMemo","hooks","hooks","classNames","PropTypes","React","forwardRef","memo","useCallback","useMemo","useRef","PropTypes","React","Fragment","memo","useCallback","useRef","useRefFrom","FocusTrap","children","onFocus","onLeave","bodyRef","useRef","onLeaveRef","getTabbableElementsInBody","useCallback","tabbableElements","element","handleBodyKeyDown","event","handleFirstSentinelFocus","focusables","lastTabbableElement","handleLastSentinelFocus","firstTabbableElement","React","Fragment","FocusRedirector_default","PropTypes","FocusTrap_default","memo","hooks","PropTypes","React","memo","useCallback","useMemo","ReactSay","SayUtterance","PropTypes","React","ROOT_STYLE","SayAlt","speak","rootClassName","useStyleToEmotionObject","React","PropTypes","SayAlt_default","Say","ReactSay","useMarkActivityAsSpoken","useStyleOptions","useVoiceSelector","hooks","Speak","activity","showSpokenText","markActivityAsSpoken","selectVoice","markAsSpoken","useCallback","singleLine","useMemo","attachments","speak","text","contentType","attachment","line","speechSynthesisUtterance","React","SayUtterance","SayAlt_default","PropTypes","Speak_default","memo","hooks","useEffect","useMemo","useState","useAvatarForBot","useGetKeyByActivity","useLocalizer","useSendStatusByActivityKey","hooks","ACTIVITY_NUM_ATTACHMENTS_ALT_IDS","useActivityAccessibleName","activity","bodyRef","botInitials","interactiveType","setInteractiveType","useState","sendStatusByActivityKey","fromSelf","getKeyByActivity","localize","localizeWithPlural","numAttachments","renderMarkdownAsHTML","useRenderMarkdownAsHTML","activityInteractiveFootNoteAlt","activityInteractiveReasonInteractiveContentAlt","activityInteractiveReasonLinkAlt","activityInteractiveReasonSendFailedAlt","activityKey","useMemo","greetingAlt","interactiveTypeRef","useValueRef","messageTextAlt","activityAltText","numAttachmentsAlt","isSendFailed","SEND_FAILED","accessibleName","useEffect","hasLinks","hasWidgets","tabbableElements","useGetDescendantIdByActivityKey","useTranscriptFocusContext","useRefFrom","useActivityKeysByRead","useGetHasAcknowledgedByActivityKey","useGetKeyByActivity","hooks","ActivityRow","forwardRef","activity","children","ref","activeDescendantId","useActiveDescendantId","readActivityKeys","bodyRef","useRef","focusByActivityKey","useFocusByActivityKey","getKeyByActivity","shouldSpeak","accessibleName","useActivityAccessibleName","activityKey","acknowledged","activityKeyRef","descendantId","useGetDescendantIdByActivityKey","descendantLabelId","isActiveDescendant","read","focusSelf","useCallback","withFocus","handleDescendantFocus","handleLeaveFocusTrap","handleMouseDownCapture","focusTrapChildren","useMemo","React","classNames","android","ScreenReaderText_default","FocusTrap_default","Speak_default","PropTypes","ActivityRow_default","memo","useCreateActivityStatusRenderer","hooks","TranscriptActivity","activityElementMapRef","activityKey","activity","hideTimestamp","renderActivity","renderAvatar","showCallout","createActivityStatusRenderer","activityCallbackRef","useCallback","activityElement","renderActivityStatus","useMemo","children","React","ActivityRow_default","TranscriptActivity_default","memo","useEffect","useMemo","useRef","useRefFrom","useMemoized","fn","deps","fnRef","cacheRef","nextCacheRef","memoizedFn","args","cache","nextCache","cached","cachedArgs","arg","index","nextCached","createPropagation","useRegisterScrollRelativeTranscript","useScrollRelativeTranscript","useActivityKeys","useActivityKeysByRead","useCreateAvatarRenderer","useCreateScrollToEndButtonRenderer","useDirection","useGetActivityByKey","useGetKeyByActivity","useGetKeyByActivityId","useLastAcknowledgedActivityKey","useLocalizer","useMarkActivityKeyAsRead","useMarkAllAsAcknowledged","useStyleOptions","hooks","ROOT_STYLE","InternalTranscript","forwardRef","activityElementMapRef","className","ref","basicTranscriptStyleSet","useStyleSet","bubbleFromUserNubOffset","bubbleNubOffset","groupTimestamp","showAvatarInGroup","activeDescendantId","useActiveDescendantId","activityWithRendererTree","useActivityTreeWithRenderer","direction","focusedActivityKey","useFocusedActivityKey","focusedExplicitly","useFocusedExplicitly","createAvatarRenderer","focus","useFocus","focusByActivityKey","useFocusByActivityKey","focusRelativeActivity","getActivityByKey","getKeyByActivity","getKeyByActivityId","localize","rootClassName","useStyleToEmotionObject","rootElementRef","useRef","terminatorLabelId","useUniqueId","terminatorRef","focusedActivityKeyRef","useValueRef","hideAllTimestamps","terminatorText","transcriptAriaLabel","callbackRef","useCallback","element","createAvatarRendererMemoized","useMemoized","activity","renderingElements","useMemo","topSideBotNub","isZeroOrPositive","topSideUserNub","entriesWithSameSender","firstActivity","renderAvatar","entriesWithSameSenderAndStatus","indexWithinSenderGroup","firstInSenderGroup","lastInSenderGroup","renderActivity","indexWithinSenderAndStatusGroup","firstInSenderAndStatusGroup","key","lastInSenderAndStatusGroup","topSideNub","showCallout","React","TranscriptActivity_default","scrollToBottomScrollTo","useScrollTo","scrollToBottomScrollToEnd","useScrollToEnd","scrollTo","position","behavior","activityId","scrollTop","activityBoundingBoxElement","scrollableElement","activityBoundingBoxElementClientRect","scrollableElementClientRect","activityHeight","activityY","scrollableHeight","activityOffsetTop","scrollToEnd","scrollRelative","displacement","rootElement","scrollable","nextScrollTop","useRegisterScrollTo","useRegisterScrollRelativeTranscript","markActivityKeyAsRead","dispatchScrollPositionWithActivityId","useDispatchScrollPosition","handleScrollPosition","scrollableClientBottom","activityElements","activityKeyJustAboveScrollBottom","elementClientRect","useObserveScrollPosition","handleTranscriptKeyDown","event","target","fromEndOfTranscriptIndicator","fromTranscript","handled","body","tabbableElements","handleTranscriptKeyDownCapture","altKey","ctrlKey","metaKey","inputtableKey","useRegisterFocusTranscript","dispatchTranscriptFocusByActivityKey","useDispatchTranscriptFocusByActivityKey","handleFocus","currentTarget","handleFocusFiller","useObserveFocusVisible","android","classNames","LiveRegionTranscript_default","InternalTranscriptScrollable","Fragment","FocusRedirector_default","PropTypes","children","onFocusFiller","activitiesStyleSet","animatingToEnd","useAnimatingToEnd","atEnd","useAtEnd","unreadActivityKeys","sticky","useSticky","styleOptions","markAllAsAcknowledged","prevSticky","usePrevious","transcriptRoleDescription","stickyChangedToTrue","flattenedActivityTreeWithRenderer","renderingActivityKeys","renderingActivityKeysRef","nextUnreadActivityKeys","nextUnreadActivityKeysRef","unread","handleScrollToEndButtonClick","firstUnreadRenderingActivityKey","renderScrollToEndButton","hasAnyChild","ReactScrollToBottomPanel","BasicTypingIndicator_default","useScroller","activityKeys","lastAcknowledgedActivityKey","activityKeysRef","lastAcknowledgedActivityKeyRef","styleOptionsRef","offsetHeight","autoScrollSnapOnActivity","autoScrollSnapOnActivityOffset","autoScrollSnapOnPage","autoScrollSnapOnPageOffset","patchedAutoScrollSnapOnActivity","patchedAutoScrollSnapOnPage","patchedAutoScrollSnapOnActivityOffset","patchedAutoScrollSnapOnPageOffset","activityElementMap","values","lastAcknowledgedActivityKeyIndex","firstUnacknowledgedActivityElementIndex","acknowledgedActivityKey","index","nthUnacknowledgedActivityElement","nthUnacknowledgedActivityBoundingBoxElement","nthUnacknowledgedActivityOffsetTop","firstUnacknowledgedActivityElement","firstUnacknowledgedActivityBoundingBoxElement","firstUnacknowledgedActivityOffsetTop","BasicTranscript","containerRef","scroller","TranscriptFocusComposer_default","ReactScrollToBottomComposer","KeyboardHelp_default","BasicTranscript_default","memo","PropTypes","React","useCallback","useRef","userAgent","IE_FOCUSABLE_LIST","IS_FIREFOX","IS_IE","getTabIndex","element","tabIndex","tabIndexAttribute","attr","ALWAYS_TRUE_FN","SELECTOR","firstTabbableDescendant","element","filter","focusables","focusable","tabIndex","getTabIndex","orSelf","createContext","AccessKeySinkContext","Context_default","Surface","children","otherProps","apple","useNavigatorPlatform","contextRef","useRef","handleKeyUp","useCallback","event","altKey","ctrlKey","key","shiftKey","focii","entry","currentFocus","current","nextFocus","tabbable","orSelf","React","Context_default","PropTypes","Surface_default","useStyleOptions","hooks","ROOT_STYLE","CONNECTIVITY_STATUS_STYLE","SEND_BOX_CSS","TOASTER_STYLE","TRANSCRIPT_STYLE","ARIA_LANDMARK_ROLES","BasicWebChat","className","role","rootStyleSet","useStyleSet","options","styleToEmotionObject","useStyleToEmotionObject","connectivityStatusClassName","rootClassName","sendBoxClassName","toasterClassName","transcriptClassName","React","Surface_default","classNames","BasicToaster_default","BasicTranscript_default","BasicConnectivityStatus_default","SendBoxMiddlewareProxy","PropTypes","BasicWebChat_default","createEmotion","APIComposer","hooks","initSendBoxMiddleware","initSendBoxToolbarMiddleware","DecoratorComposer","singleToArray","classNames","MarkdownIt","PropTypes","React","memo","useCallback","useMemo","useRef","useState","SayComposer","React","PropTypes","React","PropTypes","React","AudioContent","alt","autoPlay","loop","src","audioContentStyleSet","useStyleSet","React","PropTypes","AudioContent_default","AudioAttachment","attachment","audioAttachmentStyleSet","useStyleSet","React","AudioContent_default","PropTypes","AudioAttachment_default","PropTypes","React","hooks","classNames","PropTypes","React","PropTypes","React","ICON_SIZE_FACTOR","DownloadIcon","className","size","DownloadIcon_default","useByteFormatter","useDirection","useLocalizer","hooks","ROOT_STYLE","ALLOWED_PROTOCOLS","isAllowedProtocol","url","FileContentBadge","downloadIcon","fileName","size","direction","formatByte","localizedSize","React","DownloadIcon_default","classNames","PropTypes","FileContent","className","href","fileContentStyleSet","useStyleSet","localize","localizeBytes","rootClassName","useStyleToEmotionObject","alt","FileContent_default","FileAttachment","attachments","attachmentSizes","attachment","attachmentIndex","size","React","FileContent_default","PropTypes","FileAttachment_default","PropTypes","React","hooks","PropTypes","React","classNames","PropTypes","React","useMemo","ROOT_STYLE","CroppedImage","alt","className","height","src","width","rootClassName","useStyleToEmotionObject","sizeStyle","useMemo","React","classNames","PropTypes","CroppedImage_default","useStyleOptions","hooks","ImageContent","alt","src","bubbleImageHeight","React","CroppedImage_default","PropTypes","ImageContent_default","toByteArray","PATTERN","DEFAULT_CONTENT_TYPE","parse","dataURI","match","contentType","encoding","base64","readDataURIToBlob","parsed","ImageAttachment","attachment","imageURL","blob","readDataURIToBlob","React","ImageContent_default","PropTypes","ImageAttachment_default","React","memo","React","memo","hooks","getOrgSchemaMessage","onErrorResumeNext","parseClaim","classNames","fromMarkdown","React","memo","useCallback","useMemo","useRefFrom","React","memo","useCallback","useRefFrom","React","memo","React","memo","Badge","value","Badge_default","classNames","React","OpenInNewWindowIcon","className","OpenInNewWindowIcon_default","ItemBody","memo","badgeName","badgeTitle","identifier","isExternal","text","React","Badge_default","OpenInNewWindowIcon_default","ItemBody_default","extractHostnameWithSubdomain","urlString","host","port","protocol","LinkDefinitionItem","memo","badgeName","badgeTitle","identifier","onClick","text","url","onClickRef","useRefFrom","handleClick","useCallback","event","current","customEvent","React","ItemBody_default","extractHostnameWithSubdomain","LinkDefinitionItem_default","hooks","classNames","React","Children","React","memo","Chevron","Chevron_default","useLocalizer","hooks","childrenCount","childrenMap","Children","REFERENCE_LIST_HEADER_IDS","LinkDefinitions","accessoryComponentType","accessoryProps","children","linkDefinitions","useStyleSet","headerText","React","classNames","Chevron_default","child","LinkDefinitions_default","deepFreeze","DANGEROUS_PROPERTY_NAMES","getSafeOwnPropertyNames","object","name","isBlankNode","node","id","isUnconnectedBlankNode","object","isBlankNode","name","visitOnce","visited","value","dereferenceBlankNodesInline","objects","blankNodeIdMap","objectsToVisit1","shouldVisit1","visitOnce","object","indices","getSafeOwnPropertyNames","index","value","isBlankNode","isUnconnectedBlankNode","objectsToVisit2","shouldVisit2","blankNode","dereferenceBlankNodes","graph","nextObjects","deepFreeze","useReactContext","createContext","defaultContextValue","Context","Context_default","useContext","useReactContext","Context_default","useShowModal","useContext","classNames","React","Fragment","memo","CitationModalContent","memo","headerText","markdown","renderMarkdownStyleSet","useStyleSet","renderMarkdownAsHTML","useRenderMarkdownAsHTML","React","Fragment","classNames","CitationModalContent_default","classNames","React","memo","useMemo","classNames","React","Fragment","ShieldIcon","className","fillColor","hasLock","ShieldIcon_default","MessageSensitivityLabel","memo","className","color","isEncrypted","name","title","React","classNames","useMemo","ShieldIcon_default","MessageSensitivityLabel_default","isHTMLButtonElement","button","useLocalizer","hooks","isCitationURL","url","onErrorResumeNext","MarkdownTextContent","memo","activity","markdown","citationModalDialogStyleSet","renderMarkdownStyleSet","textContentStyleSet","useStyleSet","localize","graph","useMemo","dereferenceBlankNodes","renderMarkdownAsHTML","useRenderMarkdownAsHTML","showModal","useShowModal","messageThing","getOrgSchemaMessage","citationModalDialogLabel","dangerouslySetInnerHTML","markdownDefinitions","fromMarkdown","node","showClaimModal","useCallback","title","text","altText","React","CitationModalContent_default","classNames","entries","markdownDefinition","messageCitation","parseClaim","position","rootLevelClaim","type","id","entriesRef","useRefFrom","handleClick","event","targetElement","buttonElement","isHTMLButtonElement","entry","key","messageSensitivityLabelProps","usageInfo","pattern","encryptionStatus","keyword","getEntryMainText","getEntryBadgeName","getEntryDescription","LinkDefinitions_default","MessageSensitivityLabel_default","LinkDefinitionItem_default","MarkdownTextContent_default","classNames","React","Fragment","memo","PlainTextContent","memo","text","textContentStyleSet","useStyleSet","React","Fragment","line","classNames","PlainTextContent_default","TextContent","memo","activity","contentType","text","supportMarkdown","useRenderMarkdownAsHTML","React","MarkdownTextContent_default","PlainTextContent_default","TextContent_default","TextAttachment","memo","activity","content","contentType","React","TextContent_default","TextAttachment_default","classNames","PropTypes","React","PropTypes","React","PropTypes","React","HTMLVideoContent","alt","autoPlay","loop","poster","src","videoContentStyleSet","useStyleSet","React","PropTypes","HTMLVideoContent_default","hooks","PropTypes","React","useLocalizer","hooks","VimeoContent","alt","autoPlay","embedID","loop","vimeoContentStyleSet","useStyleSet","localize","search","title","React","PropTypes","VimeoContent_default","hooks","PropTypes","React","useLocalizer","hooks","YouTubeContent","alt","autoPlay","embedID","loop","youTubeContentStyleSet","useStyleSet","localize","search","title","React","PropTypes","YouTubeContent_default","YOUTUBE_DOMAIN","YOUTUBE_WWW_DOMAIN","YOUTUBE_SHORT_DOMAIN","YOUTUBE_WWW_SHORT_DOMAIN","VIMEO_DOMAIN","VIMEO_WWW_DOMAIN","parseURL","url","urlLike","hostname","pathname","search","VideoContent","alt","autoPlay","loop","poster","src","lastSegment","searchParams","React","VimeoContent_default","YouTubeContent_default","HTMLVideoContent_default","PropTypes","VideoContent_default","ROOT_STYLE","VideoAttachment","attachment","videoAttachmentStyleSet","useStyleSet","rootClassName","useStyleToEmotionObject","React","classNames","VideoContent_default","PropTypes","VideoAttachment_default","isTextAttachment","attachment","createCoreMiddleware","next","args","activity","role","contentType","contentUrl","thumbnailUrl","isText","React","FileAttachment_default","AudioAttachment_default","ImageAttachment_default","VideoAttachment_default","TextAttachment_default","hooks","useSetDictateState","Constants","PropTypes","React","useCallback","useEffect","useMemo","DictateComposer","useWebSpeechPonyfill","useWebChatUIContext","useResumeAudioContext","resumeAudioContext","useWebSpeechPonyfill","useSettableDictateAbortable","dictateAbortable","setDictateAbortable","useWebChatUIContext","useActivities","useDictateInterims","useDictateState","useDisabled","useEmitTypingIndicator","useLanguage","useSendBoxValue","useSendTypingIndicator","useShouldSpeakIncomingActivity","useStopDictate","useSubmitSendBox","hooks","DICTATING","IDLE","STARTING","Constants","Dictation","onError","setDictateAbortable","useSettableDictateAbortable","setDictateInterims","setSendBox","setShouldSpeakIncomingActivity","SpeechGrammarList","SpeechRecognition","useWebSpeechPonyfill","activities","dictateState","disabled","sendTypingIndicator","speechLanguage","emitTypingIndicator","resumeAudioContext","useResumeAudioContext","setDictateState","useSetDictateState","stopDictate","submitSendBox","numSpeakingActivities","useMemo","speak","handleDictate","useCallback","confidence","transcript","handleDictating","abortable","results","interims","handleError","event","useEffect","React","DictateComposer","PropTypes","Dictation_default","hooks","PropTypes","React","useLocalizer","hooks","ErrorBox","error","type","errorBoxStyleSet","useStyleSet","localize","React","ScreenReaderText_default","PropTypes","ErrorBox_default","createOnEventShim","target","currentListeners","name","listener","current","SpeechSynthesisEvent","type","utterance","SpeechSynthesisUtterance","text","createOnEventShim","value","SpeechSynthesisVoice","SpeechSynthesis","speechSynthesis","hooks","useEffect","downscaleImageToDataURLUsingWorker_worker_default","blobToDataURL","blob","resolve","reject","reader","event","keepAspectRatio","width","height","maxWidth","maxHeight","aspectRatio","data","arrayBuffer","type","quality","port","imageBitmap","dimension","offscreenCanvas","dataURL","err","createWorker","fn","blob","url","resolve","reject","worker","error","message","data","workerPromise","getWorker","downscaleImageToDataURLUsingWorker_worker_default","checkSupportOffscreenCanvas","hasOffscreenCanvas","isOffscreenCanvasSupportGetContext2D","checkSupportWebWorkerPromise","checkSupportWebWorker","checkSupportPromise","checkSupport","result","downscaleImageToDataURLUsingWorker","maxWidth","maxHeight","type","quality","port1","port2","stack","err","arrayBuffer","useTrackDimension","hooks","Tracker","webSpeechPonyfill","useWebSpeechPonyfill","trackDimension","speechRecognitionCapability","speechSynthesisCapability","speechSynthesis","useEffect","checkSupport","UITracker_default","React","hooks","FilmComposer","createBasicStyleSetForReactFilm","Flipper","useScrollBarWidth","useScrolling","useReactFilmStyleSetClassNames","classNames","PropTypes","React","memo","useMemo","hooks","useItemContainerCallbackRef","useScrollableCallbackRef","classNames","PropTypes","React","hooks","classNames","PropTypes","React","memo","useDirection","useStyleOptions","hooks","ROOT_STYLE","acuteNubSVG","nubSize","strokeWidth","side","upSideDown","halfNubSize","halfStrokeWidth","horizontalTransform","verticalTransform","p1","p2","p3","React","Bubble","ariaHidden","children","className","fromUser","nub","bubbleStyleSet","useStyleSet","direction","bubbleBorderWidth","bubbleFromUserBorderWidth","bubbleFromUserNubSize","bubbleNubSize","bubbleNubOffset","bubbleFromUserNubOffset","rootClassName","useStyleToEmotionObject","borderWidth","nubOffset","classNames","isZeroOrPositive","PropTypes","Bubble_default","memo","hooks","classNames","PropTypes","React","useDirection","useLocalizer","hooks","CarouselFilmStripAttachment","activity","attachment","className","fromUser","hasAvatar","hideNub","index","renderAttachment","showAvatar","showNub","direction","localize","carouselFilmStripAttachmentStyleSet","useStyleSet","attachedAlt","React","classNames","ScreenReaderText_default","Bubble_default","PropTypes","CarouselFilmStripAttachment_default","useAvatarForBot","useAvatarForUser","useDirection","useLocalizer","useStyleOptions","hooks","ROOT_STYLE","CarouselFilmStrip","activity","className","hideTimestamp","renderActivityStatus","renderAttachment","renderAvatar","showCallout","bubbleNubOffset","bubbleNubSize","bubbleFromUserNubOffset","bubbleFromUserNubSize","carouselFilmStripStyleSet","useStyleSet","botInitials","userInitials","direction","localize","rootClassName","useStyleToEmotionObject","showActivityStatus","itemContainerCallbackRef","useItemContainerCallbackRef","scrollableCallbackRef","useScrollableCallbackRef","attachments","messageBackDisplayText","role","text","textFormat","activityDisplayText","fromUser","greetingAlt","initials","nubOffset","nubSize","otherInitials","otherNubSize","hasAvatar","hasOtherAvatar","hasNub","hasOtherNub","topAlignedCallout","isZeroOrPositive","extraTrailing","showAvatar","showNub","hideNub","React","classNames","ScreenReaderText_default","Bubble_default","textFormatToContentType","attachment","index","CarouselFilmStripAttachment_default","PropTypes","CarouselFilmStrip_default","useDirection","useLocalizer","hooks","ROOT_STYLE","CarouselLayoutCore","activity","hideTimestamp","renderActivityStatus","renderAttachment","renderAvatar","showCallout","carouselFlipperStyleSet","useStyleSet","filmRootClassName","useReactFilmStyleSetClassNames","direction","scrollBarWidth","useScrollBarWidth","scrolling","useScrolling","leftSideFlipper","localize","rightSideFlipper","rootClassName","useStyleToEmotionObject","nextAlt","previousAlt","leftFlipperAriaLabel","rightFlipperAriaLabel","React","classNames","CarouselFilmStrip_default","Flipper","PropTypes","CarouselLayout","props","attachments","nonce","useNonce","filmStyleSet","useMemo","createBasicStyleSetForReactFilm","FilmComposer","CarouselLayout_default","memo","hooks","classNames","PropTypes","React","memo","ActivityDecorator","useAvatarForBot","useAvatarForUser","useLocalizer","useStyleOptions","hooks","ROOT_STYLE","StackedLayout","activity","hideTimestamp","renderActivityStatus","renderAttachment","renderAvatar","showCallout","styleOptions","botInitials","userInitials","stackedLayoutStyleSet","useStyleSet","ariaLabelId","useUniqueId","localize","rootClassName","useStyleToEmotionObject","bubbleNubOffset","bubbleNubSize","bubbleFromUserNubOffset","bubbleFromUserNubSize","isMessage","attachments","fromUser","messageBackDisplayText","activityDisplayText","attachedAlt","greetingAlt","initials","nubOffset","nubSize","otherInitials","otherNubSize","hasAvatar","hasOtherAvatar","hasNub","hasOtherNub","topAlignedCallout","isZeroOrPositive","extraTrailing","showAvatar","showNub","React","classNames","ScreenReaderText_default","Bubble_default","ActivityDecorator","textFormatToContentType","attachment","index","PropTypes","StackedLayout_default","memo","createCoreMiddleware","next","args","activity","type","renderAttachment","props","React","StackedLayout_default","attachments","channelData","text","CarouselLayout_default","React","hooks","classNames","PropTypes","React","useCallback","hooks","PropTypes","React","useCallback","hooks","isForbiddenPropertyName","PropTypes","React","useCallback","useMemo","updateIn","isForbiddenPropertyName","createCustomEvent","name","eventInitDict","event","key","value","useInternalMarkdownIt","useWebChatUIContext","useInternalMarkdownIt_default","walkMarkdownTokens","tokens","walker","token","nextToken","useStyleOptions","hooks","replaceAnchorWithButton","markdownTokens","walkMarkdownTokens","markdownToken","updateIn","name","value","InlineMarkdown","children","onReference","references","markdownIt","useInternalMarkdownIt_default","accent","styleToClassName","useStyleToEmotionObject","className","useMemo","reference","hrefToRef","refToHref","ref","href","randomId","html","tree","key","isForbiddenPropertyName","updatedTree","handleClick","useCallback","event","createCustomEvent","React","PropTypes","InlineMarkdown_default","useLocalizer","hooks","MARKDOWN_REFERENCES","SendFailedRetry","onRetryClick","handleReference","useCallback","data","sendFailedText","React","InlineMarkdown_default","PropTypes","SendFailedRetry_default","useLocalizer","usePostActivity","hooks","SendStatus","activity","sendStatus","sendStatusStyleSet","useStyleSet","focus","useFocus","localize","postActivity","handleRetryClick","useCallback","sendingText","React","classNames","SENDING","SEND_FAILED","SendFailedRetry_default","PropTypes","SENT","SendStatus_default","createSendStatusMiddleware","next","activity","sendState","args","SENDING","SEND_FAILED","React","SendStatus_default","React","Fragment","hooks","PropTypes","React","Fragment","useDateFormatter","useLocalizer","hooks","AbsoluteTime","hide","value","localize","absoluteTime","React","Fragment","ScreenReaderText_default","PropTypes","AbsoluteTime_default","getOrgSchemaMessage","parseAction","parseClaim","warnOnce","classNames","React","memo","useMemo","hooks","React","Fragment","memo","useEffect","useState","useRefFrom","onErrorResumeNext","parseVoteAction","React","memo","useCallback","useMemo","useRefFrom","hooks","classNames","React","memo","React","memo","React","memo","ThumbDislike16Filled","className","ThumbDislike16Filled_default","React","memo","ThumbDislike16Regular","className","ThumbDislike16Regular_default","React","memo","ThumbLike16Filled","className","ThumbLike16Filled_default","React","memo","ThumbLike16Regular","className","ThumbLike16Regular_default","ThumbButtonImage","memo","className","direction","filled","React","ThumbDislike16Filled_default","ThumbDislike16Regular_default","ThumbLike16Filled_default","ThumbLike16Regular_default","ThumbButton_Image_default","useLocalizer","hooks","ThumbButton","memo","direction","onClick","pressed","thumbButton","useStyleSet","title","React","classNames","ThumbButton_Image_default","ThumbButton_default","FeedbackVoteButton","memo","action","onClick","pressed","onClickRef","useRefFrom","voteActionRef","direction","useMemo","onErrorResumeNext","parseVoteAction","handleClick","useCallback","React","ThumbButton_default","VoteButton_default","usePonyfill","usePostActivity","hooks","DEBOUNCE_TIMEOUT","Feedback","memo","actions","clearTimeout","setTimeout","selectedAction","setSelectedAction","useState","postActivity","postActivityRef","useRefFrom","useEffect","timeout","React","Fragment","action","index","VoteButton_default","Feedback_default","React","memo","Originator","project","name","slogan","url","text","Originator_default","React","Children","Fragment","memo","classNames","Slotted","children","className","child","index","Slotted_default","hooks","PropTypes","React","hooks","PropTypes","React","Fragment","hooks","useCallback","useState","random","usePonyfill","hooks","nextTimer","origin","interval","Date","time","now","useForceRenderAtInterval","fn","ponyfill","timer","setTimer","useState","handler","useCallback","random","useTimer","useDateFormatter","useLocalizer","useRelativeTimeFormatter","hooks","TIMER_INTERVAL","RelativeTime","value","formatDate","formatRelativeTime","localize","useForceRenderAtInterval","React","Fragment","ScreenReaderText_default","PropTypes","RelativeTime_default","useStyleOptions","hooks","Timestamp","timestamp","timestampFormat","React","RelativeTime_default","AbsoluteTime_default","PropTypes","Timestamp_default","warnRootLevelThings","warnOnce","OthersActivityStatus","memo","activity","sendStatus","useStyleSet","timestamp","graph","useMemo","dereferenceBlankNodes","messageThing","getOrgSchemaMessage","claimInterpreter","parseClaim","firstClaim","type","replyAction","parseAction","feedbackActions","reactActions","voteActions","React","Slotted_default","classNames","Timestamp_default","Originator_default","Feedback_default","OthersActivityStatus_default","classNames","React","memo","SelftActivityStatus","memo","activity","sendStatus","useStyleSet","timestamp","React","Slotted_default","classNames","Timestamp_default","SelfActivityStatus_default","createTimestampMiddleware","args","activity","hideTimestamp","React","Fragment","AbsoluteTime_default","OthersActivityStatus_default","SelfActivityStatus_default","createCoreMiddleware","createSendStatusMiddleware","createTimestampMiddleware","React","hooks","React","useLocalizer","AudioAttachment","label","AudioAttachment_default","hooks","PropTypes","React","useLocalizer","FileAttachment","name","label","FileAttachment_default","hooks","React","useLocalizer","ImageAttachment","label","ImageAttachment_default","hooks","PropTypes","React","useLocalizer","TextAttachment","content","label","TextAttachment_default","hooks","React","useLocalizer","VideoAttachment","label","VideoAttachment_default","createCoreMiddleware","next","args","role","attachment","contentType","contentUrl","thumbnailUrl","isText","React","FileAttachment_default","AudioAttachment_default","ImageAttachment_default","VideoAttachment_default","TextAttachment_default","classNames","PropTypes","React","hooks","classNames","PropTypes","React","useAvatarForBot","useAvatarForUser","hooks","ROOT_STYLE","ImageAvatar","fromUser","avatarImageForBot","avatarImageForUser","imageAvatarStyleSet","useStyleSet","rootClassName","useStyleToEmotionObject","React","classNames","CroppedImage_default","PropTypes","ImageAvatar_default","hooks","classNames","PropTypes","React","useAvatarForBot","useAvatarForUser","hooks","ROOT_STYLE","InitialsAvatar","fromUser","avatarInitialsForBot","avatarInitialsForUser","initialsAvatarStyleSet","useStyleSet","rootClassName","useStyleToEmotionObject","React","classNames","PropTypes","InitialsAvatar_default","ROOT_STYLE","DefaultAvatar","ariaHidden","className","fromUser","avatarStyleSet","useStyleSet","rootClassName","useStyleToEmotionObject","React","classNames","InitialsAvatar_default","ImageAvatar_default","PropTypes","createCoreAvatarMiddleware","styleOptions","botAvatarImage","botAvatarInitials","userAvatarImage","userAvatarInitials","getScheme","href","matches","ALLOWED_SCHEMES","createDefaultCardActionMiddleware","next","args","type","value","getSignInUrl","ie11","newWindow","popup","url","hooks","classNames","PropTypes","React","useDirection","useLocalizer","useStyleOptions","hooks","ScrollToEndButton","onClick","scrollToEndButtonStyleSet","useStyleSet","scrollToEndButtonBehavior","direction","text","React","classNames","PropTypes","ScrollToEndButton_default","createScrollToEndButtonMiddleware","atEnd","scrollToEndButtonBehavior","unread","ScrollToEndButton_default","React","hooks","classNames","PropTypes","React","useCallback","useMemo","PropTypes","React","DismissIcon","className","DismissIcon_default","useInternalRenderMarkdownInline","internalRenderMarkdownInline","useWebChatUIContext","useInternalRenderMarkdownInline_default","useDismissNotification","useLocalizer","hooks","ROOT_STYLE","BasicToast","alt","id","level","message","toastStyleSet","useStyleSet","contentId","useMemo","randomId","localize","dismissNotification","renderMarkdownInline","useInternalRenderMarkdownInline_default","rootClassName","useStyleToEmotionObject","handleDismiss","useCallback","html","React","classNames","NotificationIcon_default","ScreenReaderText_default","DismissIcon_default","PropTypes","BasicToast_default","createToastMiddleware","notification","React","BasicToast_default","createToastMiddleware_default","createCoreMiddleware","next","args","id","createToastMiddleware_default","createCoreMiddleware_default","hooks","classNames","React","hooks","classNames","React","useDirection","useLocalizer","hooks","ROOT_STYLE","TypingAnimation","typingAnimationStyleSet","useStyleSet","direction","localize","rootClassName","useStyleToEmotionObject","React","ScreenReaderText_default","classNames","TypingAnimation_default","useDirection","useLocalizer","hooks","DotIndicator","typingIndicatorStyleSet","useStyleSet","direction","localize","React","classNames","TypingAnimation_default","createCoreMiddleware","visible","hooks","React","useMemo","useEffect","useMemo","useRef","useMemoWithPrevious","factory","deps","prevValueRef","value","useMemo","useActivitiesWithRenderer","activities","createActivityRenderer","createActivityRendererMemoized","useMemoized","activity","nextVisibleActivity","useMemo","activitiesWithRenderer","index","renderActivity","hooks","useMemo","intersectionOf","arg0","args","interim","arg","intersection","item","useGroupActivities","hooks","validateAllEntriesTagged","entries","bins","entry","bin","useActivityTreeWithRenderer","groupActivities","entryMap","useMemo","entriesBySender","entriesByStatus","visibleActivities","groupActivitiesResult","activitiesBySender","activitiesByStatus","activity","entriesPendingGrouping","activityTree","found","entriesWithSameSender","senderTree","entriesWithSameStatus","entriesWithSameSenderAndStatus","intersectionOf","removeInline","activitiesWithSameSender","activitiesWithSameSenderAndStatus","useActivityTreeWithRenderer_default","useActivities","useCreateActivityRenderer","useGetActivitiesByKey","useGetKeyByActivity","hooks","ActivityTreeComposer","children","useActivityTreeContext","rawActivities","getActivitiesByKey","getKeyByActivity","activities","useMemo","activity","activitiesWithSameKey","createActivityRenderer","activitiesWithRenderer","useActivitiesWithRenderer","activityTreeWithRenderer","useActivityTreeWithRenderer_default","flattenedActivityTreeWithRenderer","useMemoWithPrevious","prevFlattenedActivityTree","nextFlattenedActivityTree","intermediate","entriesWithSameSender","entriesWithSameSenderAndStatus","entry","item","index","contextValue","React","Context_default","ActivityTreeComposer_default","hooks","classNames","React","useCallback","useEffect","useMemo","useRef","useState","useRefFrom","useCallback","useScrollToEnd","scrollToEndCallbacksRef","useWebChatUIContext","useCallback","callback","createContext","SendBoxContext","Context_default","useConnectivityStatus","useLocalizer","usePonyfill","useSendBoxAttachments","useSendBoxValue","useSubmitSendBox","hooks","SUBMIT_ERROR_MESSAGE_STYLE","TIME_TO_QUEUE_ERROR_MESSAGE","TIME_TO_RESET_ERROR_MESSAGE","SendBoxComposer","children","clearTimeout","setTimeout","attachments","connectivityStatus","error","setError","useState","sendBoxValue","apiSubmitSendBox","focus","useFocus","localize","scrollToEnd","useScrollToEnd","styleToEmotionObject","useStyleToEmotionObject","submitErrorMessageId","useUniqueId","timeoutRef","useRef","errorMessageStringMap","useMemo","focusRef","useRefFrom","scrollToEndRef","setErrorRef","submitErrorMessageClassName","submitErrorMessageIdState","submitErrorRef","submit","useCallback","setFocus","submitError","useEffect","context","React","Context_default","classNames","SendBoxComposer_default","React","memo","useCallback","useMemo","useState","hooks","classNames","React","memo","useCallback","useEffect","useRef","useLocalizer","hooks","ModalDialog","memo","ariaLabel","ariaLabelledBy","children","className","onDismiss","modalDialogStyleSet","useStyleSet","dialogRef","useRef","closeButtonAlt","handleCloseButtonClick","useCallback","useEffect","React","classNames","Popover_default","ModalDialogComposer","memo","children","renderFunctionAndDialogInit","setRenderFunctionAndDialogInit","useState","close","useCallback","showModal","render","init","context","useMemo","React","Context_default","Popover_default","ModalDialogComposer_default","useContext","createContext","EMPTY_ARRAY","EMPTY_OBJECT","Context_default","useTheme","useContext","Context_default","hooks","React","SendBoxToolbarMiddlewareProxy","hooks","Constants","classNames","React","useContext","useSendBoxContext","context","useContext","Context_default","useSubmitErrorMessageId","useSendBoxContext","Constants","hooks","classNames","PropTypes","React","DICTATING","STARTING","STOPPING","Constants","useDictateInterims","useDictateState","useLocalizer","hooks","ROOT_STYLE","DictationInterims","className","dictateInterims","dictateState","dictationInterimsStyleSet","useStyleSet","localize","rootClassName","useStyleToEmotionObject","React","classNames","interim","index","PropTypes","DictationInterims_default","hooks","Constants","classNames","memoize","PropTypes","React","useCallback","useState","useDictateAbortable","dictateAbortable","useSettableDictateAbortable","React","MicrophoneIcon","className","MicrophoneIcon_default","hooks","classNames","PropTypes","React","useRef","PropTypes","React","forwardRef","useRef","PREVENT_DEFAULT_HANDLER","event","AccessibleButton","ariaHidden","children","disabled","onClick","tabIndex","props","forwardedRef","targetRef","AccessibleButton_default","useCallback","useEffect","useState","useFocusVisible","targetRef","focusVisible","setFocusVisible","useState","handleBlur","useCallback","handleFocusVisible","useObserveFocusVisible","useEffect","current","useStyleOptions","hooks","IconButton","alt","children","className","disabled","onClick","sendBoxButtonStyleSet","useStyleSet","sendBoxButtonAlignment","buttonRef","useRef","focusVisible","useFocusVisible","React","AccessibleButton_default","classNames","PropTypes","IconButton_default","DictateState","Constants","useDictateInterims","useDictateState","useDisabled","useLocalizer","useSendBoxValue","useShouldSpeakIncomingActivity","useStartDictate","useStopDictate","hooks","ROOT_STYLE","useMicrophoneButtonClick","setSendBox","setShouldSpeakIncomingActivity","dictateInterims","dictateState","webSpeechPonyfill","useWebSpeechPonyfill","startDictate","stopDictate","speechSynthesis","SpeechSynthesisUtterance","primeSpeechSynthesis","useState","memoize","utterance","useCallback","useMicrophoneButtonDisabled","abortable","useDictateAbortable","disabled","MicrophoneButton","className","microphoneButtonStyleSet","useStyleSet","click","localize","rootClassName","useStyleToEmotionObject","dictating","React","classNames","IconButton_default","MicrophoneIcon_default","PropTypes","MicrophoneButton_default","hooks","classNames","PropTypes","React","useCallback","hooks","classNames","React","useDirection","hooks","ROOT_STYLE","SendIcon","direction","rootClassName","useStyleToEmotionObject","React","classNames","SendIcon_default","useSubmit","useSendBoxContext","useDisabled","useLocalizer","hooks","SendButton","className","disabled","localize","submit","useSubmit","handleClick","useCallback","React","IconButton_default","classNames","SendIcon_default","PropTypes","SendButton_default","hooks","classNames","PropTypes","React","useCallback","useMemo","useRef","BasicFilm","createBasicStyleSetForReactFilm","useCallback","useEffect","useState","useFocusWithin","targetRef","focusWithin","setFocusWithin","handleBlur","handleFocus","target","targetElement","PropTypes","React","useCallback","useEffect","useMemo","useRef","createContext","RovingTabIndexContext","Context_default","RovingTabIndexComposer","children","onEscapeKey","orientation","activeItemIndexRef","useRef","itemRefsRef","refreshTabIndices","useCallback","activeItemIndex","current","index","setActiveItemIndex","valueOrFunction","nextActiveItemIndex","handleFocus","event","target","handleKeyDown","key","vertical","value","itemIndices","_","nextIndex","itemEffector","ref","contextValue","useMemo","useEffect","React","Context_default","PropTypes","RovingTabIndexComposer_default","hooks","classNames","PropTypes","React","useCallback","useEffect","useRef","useContext","useRovingTabIndexContext","throwOnUndefined","contextValue","useContext","Context_default","useItemRef","itemIndex","ref","useRef","itemEffector","useRovingTabIndexContext","useEffect","useEffect","useContext","useAccessKeySinkContext","useContext","Context_default","removeInline","array","item","index","useFocusAccessKeyEffect","key","ref","context","useAccessKeySinkContext","useEffect","entry","useDirection","useDisabled","usePerformCardAction","useStyleOptions","useSuggestedActions","hooks","ROOT_STYLE","SuggestedAction","buttonText","className","displayText","image","imageAlt","itemIndex","text","textClassName","type","value","_","setSuggestedActions","suggestedActionsStackedLayoutButtonTextWrap","suggestedActionStyleSet","useStyleSet","accessKey","useSuggestedActionsAccessKey","direction","disabled","focus","useFocus","focusRef","useItemRef","localizeAccessKeyAsAriaKeyShortcuts","useLocalizeAccessKey","performCardAction","rootClassName","useStyleToEmotionObject","scrollToEnd","useScrollToEnd","focusVisible","useFocusVisible","handleClick","useCallback","target","useFocusAccessKeyEffect","React","AccessibleButton_default","classNames","PropTypes","SuggestedAction_default","useDirection","useLocalizer","useStyleOptions","useSuggestedActions","hooks","ROOT_STYLE","SuggestedActionCarouselContainer","children","className","label","suggestedActionsCarouselFlipperBoxWidth","suggestedActionsCarouselFlipperCursor","suggestedActionsCarouselFlipperSize","suggestedActionsStyleSet","useStyleSet","direction","nonce","useNonce","localize","ref","useRef","rootClassName","useStyleToEmotionObject","filmStyleSet","useMemo","createBasicStyleSetForReactFilm","nextFlipperAriaLabel","previousFlipperAriaLabel","focusedWithin","useFocusWithin","leftFlipperAriaLabel","rightFlipperAriaLabel","React","classNames","BasicFilm","PropTypes","SuggestedActionFlowContainer","child","SuggestedActionStackedContainer","SuggestedActions","suggestedActions","suggestedActionLayout","suggestedActionsStackedLayoutButtonTextWrap","focus","useFocus","handleEscapeKey","useCallback","cardAction","index","displayText","image","imageAltText","text","type","value","SuggestedAction_default","computeSuggestedActionText","RovingTabIndexComposer_default","SuggestedActions_default","hooks","classNames","React","useCallback","useMemo","useRef","PropTypes","React","forwardRef","useRef","useEffect","useEnterKeyHint","elementRef","enterKeyHint","current","AccessibleInputText","forwardRef","ariaErrorMessage","className","disabled","enterKeyHint","onChange","onFocus","onKeyDown","onKeyDownCapture","onKeyPress","onSelect","placeholder","readOnly","tabIndex","value","props","forwardedRef","targetRef","useRef","ref","useEnterKeyHint","React","PropTypes","AccessibleInputText_default","navigableEvent","event","altKey","target","tagName","autocompleteAttribute","autocomplete","list","type","value","useCallback","useScrollDown","scrollRelative","useScrollRelativeTranscript","useCallback","options","useCallback","useScrollUp","scrollRelative","useScrollRelativeTranscript","useCallback","options","useRefFrom","mergeRefs","React","forwardRef","useCallback","useMemo","useRef","useCallback","useRef","UndoEntry","value","selectionStart","selectionEnd","group","#group","#selectionEnd","#selectionStart","#value","useUndoStack","elementRef","undoStackRef","useRef","push","useCallback","group","element","undoStack","firstEntry","selectionEnd","selectionStart","value","UndoEntry","undo","lastEntry","WithEmojiController","componentProps","componentType","emojiMap","innerRef","onChange","value","inputElementRef","useRef","onChangeRef","useRefFrom","push","undo","useUndoStack","valueRef","handleChange","useCallback","currentTarget","selectionEnd","selectionStart","emoticon","emoji","length","nextValue","nextSelectionEnd","handleFocus","handleKeyDown","event","ctrlKey","key","metaKey","uppercaseKey","useMemo","React","mergeRefs","withEmoji","WithEmoji","forwardRef","props","ref","classNames","PropTypes","React","forwardRef","PropTypes","React","forwardRef","useRef","AccessibleTextArea","className","disabled","inputMode","onChange","onFocus","onKeyDown","onKeyDownCapture","onKeyPress","onSelect","placeholder","readOnly","rows","tabIndex","props","forwardedRef","targetRef","AccessibleTextArea_default","AutoResizeTextArea","forwardRef","ariaErrorMessage","ariaLabel","className","dataId","disabled","enterKeyHint","inputMode","onChange","onFocus","onKeyDown","onKeyDownCapture","onKeyPress","onSelect","placeholder","readOnly","rows","textAreaClassName","value","ref","autoResizeTextAreaStyleSet","useStyleSet","useEnterKeyHint","React","classNames","AccessibleTextArea_default","PropTypes","AutoResizeTextArea_default","useDisabled","useLocalizer","usePonyfill","useSendBoxValue","useStopDictate","useStyleOptions","hooks","ROOT_STYLE","useTextBoxSubmit","submit","useSubmit","useCallback","setFocus","useTextBoxValue","value","setValue","stopDictate","setter","nextValue","PREVENT_DEFAULT_HANDLER","event","SingleLineTextBox","withEmoji","AccessibleInputText_default","MultiLineTextBox","AutoResizeTextArea_default","TextBox","className","sendBoxTextBoxStyleSet","useStyleSet","emojiSet","sendBoxTextWrap","setTimeout","disabled","inputElementRef","useRef","localize","rootClassName","useStyleToEmotionObject","scrollDown","useScrollDown","scrollUp","useScrollUp","submitTextBox","sendBoxString","typeYourMessageString","handleKeyPress","key","shiftKey","handleSubmit","handleKeyDownCapture","ctrlKey","metaKey","navigableEvent","handled","focusCallback","options","noKeyboard","current","ie11","readOnly","resolve","useRegisterFocusSendBox","emojiMap","useMemo","React","classNames","TextBox_default","DICTATING","STARTING","Constants","useActivities","useDirection","useDictateState","useStyleOptions","hooks","ROOT_STYLE","activityIsSpeakingOrQueuedToSpeak","activity","useSendBoxSpeechInterimsVisible","activities","dictateState","BasicSendBox","className","sendBoxButtonAlignment","sendBoxStyleSet","useStyleSet","SpeechRecognition","useWebSpeechPonyfill","direction","errorMessageId","useSubmitErrorMessageId","speechInterimsVisible","rootClassName","useStyleToEmotionObject","supportSpeechRecognition","buttonClassName","classNames","React","SuggestedActions_default","SendBoxToolbarMiddlewareProxy","DictationInterims_default","TextBox_default","MicrophoneButton_default","SendButton_default","BasicSendBox_default","useStyleOptions","hooks","HideableSendBox","className","hideSendBox","React","BasicSendBox_default","createMiddleware","createMiddleware_default","hooks","React","memo","hooks","classNames","PropTypes","React","useCallback","useRef","useRefFrom","hooks","useCallback","useRefFrom","keepAspectRatio","width","height","maxWidth","maxHeight","aspectRatio","createCanvas","canvas","loadImageFromBlob","blob","blobURL","resolve","reject","image","error","downscaleImageToDataURLUsingBrowser","type","quality","context","downscaleImageToDataURL","blob","maxWidth","maxHeight","type","quality","checkSupport","downscaleImageToDataURLUsingWorker","downscaleImageToDataURLUsingBrowser","useStyleOptions","useTrackTiming","hooks","makeThumbnail","file","width","height","contentType","quality","downscaleImageToDataURL","error","useMakeThumbnail","styleOptions","trackTiming","styleOptionsRef","useRefFrom","useCallback","enableUploadThumbnail","uploadThumbnailContentType","uploadThumbnailHeight","uploadThumbnailQuality","uploadThumbnailWidth","classNames","React","ROOT_STYLE","AttachmentIcon","checked","rootClassName","useStyleToEmotionObject","React","classNames","AttachmentIcon_default","useDisabled","useSendBoxAttachments","useLocalizer","useStyleOptions","hooks","ROOT_STYLE","PREVENT_DEFAULT_HANDLER","event","UploadButton","className","sendAttachmentOn","uploadAccept","uploadMultiple","uploadButtonStyleSet","useStyleSet","disabled","sendBoxAttachments","setSendBoxAttachments","focus","useFocus","inputRef","useRef","localize","makeThumbnail","useMakeThumbnail","rootClassName","useStyleToEmotionObject","submit","useSubmit","sendAttachmentOnRef","useRefFrom","uploadFileString","handleClick","useCallback","handleFileChange","currentTarget","blob","thumbnailURL","React","classNames","IconButton_default","AttachmentIcon_default","PropTypes","UploadButton_default","useStyleOptions","hooks","BasicSendBoxToolbar","className","hideUploadButton","React","UploadButton_default","BasicSendBoxToolbar_default","memo","createMiddleware","BasicSendBoxToolbar_default","createMiddleware_default","normalizeStyleOptions","createActivitiesStyle","AudioAttachment","avatarSize","AudioContent","AutoResizeTextArea","primaryFont","createAvatarStyle","avatarBorderRadius","avatarSize","createBasicTranscriptStyleSet","paddingRegular","primaryFont","transcriptActivityVisualKeyboardIndicatorColor","transcriptActivityVisualKeyboardIndicatorStyle","transcriptActivityVisualKeyboardIndicatorWidth","transcriptTerminatorBackgroundColor","transcriptTerminatorBorderRadius","transcriptTerminatorColor","transcriptTerminatorFontSize","transcriptVisualKeyboardIndicatorColor","transcriptVisualKeyboardIndicatorStyle","transcriptVisualKeyboardIndicatorWidth","isForbiddenPropertyName","mirrorStyle","mirrorSelector","styles","mirrored","key","value","patchedKey","match","relative","createBubbleStyle","bubbleBackground","bubbleBorderColor","bubbleBorderRadius","bubbleBorderStyle","bubbleBorderWidth","bubbleFromUserBackground","bubbleFromUserBorderColor","bubbleFromUserBorderRadius","bubbleFromUserBorderStyle","bubbleFromUserBorderWidth","bubbleFromUserNubOffset","bubbleFromUserNubSize","bubbleFromUserTextColor","bubbleMinHeight","bubbleNubOffset","bubbleNubSize","bubbleTextColor","messageActivityWordBreak","paddingRegular","transitionDuration","botNubCornerRadius","userNubCornerRadius","mirrorStyle","CarouselFilmStrip","avatarSize","bubbleMaxWidth","paddingRegular","transitionDuration","mirrorStyle","CarouselFilmStripAttachment","avatarSize","bubbleMaxWidth","bubbleMinWidth","paddingRegular","transcriptVisualKeyboardIndicatorColor","transcriptVisualKeyboardIndicatorStyle","transcriptVisualKeyboardIndicatorWidth","transitionDuration","mirrorStyle","CarouselFlipper","transcriptOverlayButtonBackground","transcriptOverlayButtonBackgroundOnDisabled","transcriptOverlayButtonBackgroundOnFocus","transcriptOverlayButtonBackgroundOnHover","transcriptOverlayButtonColor","transcriptOverlayButtonColorOnDisabled","transcriptOverlayButtonColorOnFocus","transcriptOverlayButtonColorOnHover","createCitationModalDialogStyle","ConnectivityNotification","connectivityMarginLeftRight","connectivityMarginTopBottom","connectivityTextSize","notificationText","primaryFont","CustomPropertyNames","CustomPropertyNames_default","CustomPropertyNames","createCSSCustomPropertiesStyle","accent","bubbleMaxWidth","bubbleMinHeight","fontSizeSmall","markdownExternalLinkIconImage","paddingRegular","primaryFont","subtle","timestampColor","CustomPropertyNames_default","createDictationInterimsStyle","paddingRegular","primaryFont","createErrorBoxStyle","monospaceFont","primaryFont","createErrorNotificationStyle","connectivityIconPadding","connectivityMarginLeftRight","connectivityMarginTopBottom","connectivityTextSize","failedConnectivity","primaryFont","createFileContentStyle","accent","bubbleTextColor","paddingRegular","primaryFont","createImageAvatarStyle","avatarSize","createInitialsAvatarStyle","accent","avatarSize","botAvatarBackgroundColor","primaryFont","userAvatarBackgroundColor","DARK_THEME_SELECTOR","LIGHT_THEME_SELECTOR","FORCED_COLORS_SELECTOR","createKeyboardHelpStyleSet","paddingRegular","primaryFont","FORCED_COLORS_SELECTOR","NOT_FORCED_COLORS_SELECTOR","CSSTokens","_","key","CustomPropertyNames_default","CSSTokens_default","DARK_THEME_SELECTOR","LIGHT_THEME_SELECTOR","createLinkDefinitionsStyleSet","CSSTokens_default","FORCED_COLORS_SELECTOR","NOT_FORCED_COLORS_SELECTOR","createMicrophoneButtonStyle","microphoneButtonColorOnDictate","DARK_THEME_SELECTOR","LIGHT_THEME_SELECTOR","createModalDialogStyleSet","CSSTokens_default","NOT_FORCED_COLORS_SELECTOR","FORCED_COLORS_SELECTOR","createMarkdownStyle","CSSTokens_default","FORCED_COLORS_SELECTOR","NOT_FORCED_COLORS_SELECTOR","Root_default","backgroundColor","height","width","zIndex","createScrollToEndButtonStyle","paddingRegular","primaryFont","scrollToEndButtonFontSize","transcriptOverlayButtonBackground","transcriptOverlayButtonBackgroundOnFocus","transcriptOverlayButtonBackgroundOnHover","transcriptOverlayButtonColor","transcriptOverlayButtonColorOnFocus","transcriptOverlayButtonColorOnHover","createSendBoxButtonStyle","sendBoxButtonColor","sendBoxButtonColorOnActive","sendBoxButtonColorOnDisabled","sendBoxButtonColorOnFocus","sendBoxButtonColorOnHover","sendBoxButtonKeyboardFocusIndicatorBorderColor","sendBoxButtonKeyboardFocusIndicatorBorderRadius","sendBoxButtonKeyboardFocusIndicatorBorderStyle","sendBoxButtonKeyboardFocusIndicatorBorderWidth","sendBoxButtonKeyboardFocusIndicatorInset","sendBoxButtonShadeBorderRadius","sendBoxButtonShadeColor","sendBoxButtonShadeColorOnActive","sendBoxButtonShadeColorOnDisabled","sendBoxButtonShadeColorOnFocus","sendBoxButtonShadeColorOnHover","sendBoxButtonShadeInset","sendBoxHeight","subtle","createSendBoxStyle","sendBoxBackground","sendBoxBorderBottom","sendBoxBorderLeft","sendBoxBorderRight","sendBoxBorderTop","sendBoxHeight","createSendBoxTextBoxStyle","paddingRegular","primaryFont","sendBoxDisabledTextColor","sendBoxMaxHeight","sendBoxPlaceholderColor","sendBoxTextColor","subtle","createSendStatusStyle","CSSTokens_default","createSingleCardActivityStyle","bubbleMaxWidth","bubbleMinWidth","paddingRegular","createSlottedActivityStatus","CSSTokens_default","toByteArray","DEFAULT_IMAGE_BASE64","DEFAULT_IMAGE_TYPE","defaultImageBlobURL","createSpinnerAnimationStyle","spinnerAnimationBackgroundImage","spinnerAnimationHeight","spinnerAnimationWidth","spinnerAnimationPadding","createStackedLayoutStyle","avatarSize","bubbleMaxWidth","bubbleMinWidth","paddingRegular","transitionDuration","createSuggestedActionsStyle","paddingRegular","suggestedActionsCarouselFlipperSize","suggestedActionsFlowMaxHeight","suggestedActionsStackedHeight","suggestedActionsStackedOverflow","suggestedActionsVisualKeyboardIndicatorColor","suggestedActionsVisualKeyboardIndicatorStyle","suggestedActionsVisualKeyboardIndicatorWidth","transcriptOverlayButtonBackground","transcriptOverlayButtonBackgroundOnDisabled","transcriptOverlayButtonBackgroundOnFocus","transcriptOverlayButtonBackgroundOnHover","transcriptOverlayButtonColor","transcriptOverlayButtonColorOnDisabled","transcriptOverlayButtonColorOnFocus","transcriptOverlayButtonColorOnHover","createSuggestedActionStyle","accent","paddingRegular","paddingWide","primaryFont","suggestedActionBorderRadius","suggestedActionBackgroundColor","suggestedActionBorderColor","suggestedActionBorderStyle","suggestedActionBorderWidth","suggestedActionTextColor","suggestedActionBackgroundColorOnActive","suggestedActionBorderColorOnActive","suggestedActionBorderStyleOnActive","suggestedActionBorderWidthOnActive","suggestedActionTextColorOnActive","suggestedActionBackgroundColorOnDisabled","suggestedActionBorderColorOnDisabled","suggestedActionBorderStyleOnDisabled","suggestedActionBorderWidthOnDisabled","suggestedActionTextColorOnDisabled","suggestedActionBackgroundColorOnFocus","suggestedActionBorderColorOnFocus","suggestedActionBorderStyleOnFocus","suggestedActionBorderWidthOnFocus","suggestedActionTextColorOnFocus","suggestedActionBackgroundColorOnHover","suggestedActionBorderColorOnHover","suggestedActionBorderStyleOnHover","suggestedActionBorderWidthOnHover","suggestedActionTextColorOnHover","suggestedActionKeyboardFocusIndicatorBorderColor","suggestedActionKeyboardFocusIndicatorBorderRadius","suggestedActionKeyboardFocusIndicatorBorderStyle","suggestedActionKeyboardFocusIndicatorBorderWidth","suggestedActionKeyboardFocusIndicatorInset","suggestedActionHeight","suggestedActionImageHeight","suggestedActionsStackedLayoutButtonMaxHeight","subtle","suggestedActionActiveBackground","suggestedActionBackground","suggestedActionDisabledBackground","suggestedActionFocusBackground","suggestedActionHoverBackground","createTextContentStyle","CSSTokens_default","ThumbButton_default","CSSTokens_default","createToasterStyle","primaryFont","toasterHeight","toasterMaxHeight","toastErrorBackgroundColor","toastErrorColor","toasterSingularMaxHeight","toastFontSize","toastIconWidth","toastInfoBackgroundColor","toastInfoColor","toastSeparatorColor","toastSuccessBackgroundColor","toastSuccessColor","toastWarnBackgroundColor","toastWarnColor","createToastStyle","primaryFont","toasterHeight","toastErrorColor","toastFontSize","toastIconWidth","toastInfoColor","toastSuccessColor","toastTextPadding","toastWarnColor","toByteArray","DEFAULT_IMAGE_BASE64","DEFAULT_IMAGE_TYPE","defaultImageBlobURL","createTypingAnimationStyle","typingAnimationBackgroundImage","typingAnimationHeight","typingAnimationWidth","createTypingIndicatorStyle","paddingRegular","createUploadButtonStyle","sendBoxButtonColor","sendBoxButtonColorOnFocus","sendBoxButtonColorOnHover","sendBoxHeight","subtle","createVideoAttachmentStyle","createVideoContentStyle","videoHeight","createVimeoContentStyle","videoHeight","createWarningNotificationStyle","connectivityIconPadding","connectivityMarginLeftRight","connectivityMarginTopBottom","connectivityTextSize","primaryFont","slowConnectivity","notificationText","createYouTubeContentStyle","videoHeight","createStyleSet","styleOptions","strictStyleOptions","normalizeStyleOptions","createActivitiesStyle","AudioAttachment","AudioContent","AutoResizeTextArea","createAvatarStyle","createBasicTranscriptStyleSet","createBubbleStyle","CarouselFilmStrip","CarouselFilmStripAttachment","CarouselFlipper","ConnectivityNotification","createDictationInterimsStyle","createErrorBoxStyle","createErrorNotificationStyle","createFileContentStyle","createImageAvatarStyle","createInitialsAvatarStyle","createKeyboardHelpStyleSet","createMicrophoneButtonStyle","Root_default","createScrollToEndButtonStyle","createSendBoxStyle","createSendBoxButtonStyle","createSendBoxTextBoxStyle","createSingleCardActivityStyle","createSpinnerAnimationStyle","createStackedLayoutStyle","createSuggestedActionStyle","createSuggestedActionsStyle","createToastStyle","createToasterStyle","createTypingAnimationStyle","createTypingIndicatorStyle","createUploadButtonStyle","createVideoAttachmentStyle","createVideoContentStyle","createVimeoContentStyle","createWarningNotificationStyle","createYouTubeContentStyle","createCitationModalDialogStyle","createCSSCustomPropertiesStyle","createLinkDefinitionsStyleSet","createModalDialogStyleSet","createMarkdownStyle","createSendStatusStyle","createSlottedActivityStatus","createTextContentStyle","ThumbButton_default","updateIn","updateMarkdownItAttrs","token","updater","attrs","map","nextMap","addTargetBlankToHyperlinksMarkdown","tokens","walkMarkdownTokens","token","updateMarkdownItAttrs","attrs","random","useCSSKey","value","isForbiddenPropertyName","mapMap","map","mapper","result","key","value","useGetActivityByKey","useReferenceGrammarID","useStyleOptions","hooks","node_env","emotionPool","styleSetToEmotionObjects","styleToEmotionObject","styleSet","mapMap","style","key","ComposerCoreUI","memo","children","cssCustomProperties","useStyleSet","dictationOnError","useCallback","err","React","classNames","DecoratorComposer","ModalDialogComposer_default","SendBoxComposer_default","Dictation_default","ComposerCore","extraStyleSet","nonce","renderMarkdown","suggestedActionsAccessKey","webSpeechPonyfillFactory","dictateAbortable","setDictateAbortable","useState","referenceGrammarID","styleOptions","focusTranscriptCallbacksRef","useRef","internalMarkdownIt","useMemo","MarkdownIt","scrollToCallbacksRef","scrollToEndCallbacksRef","internalRenderMarkdownInline","markdown","tree","patchedTree","addTargetBlankToHyperlinksMarkdown","emotion","createEmotion","useCSSKey","patchedStyleSet","createStyleSet","webSpeechPonyfill","ponyfill","speechSynthesis","SpeechSynthesisUtterance","scrollPositionObserversRef","dispatchScrollPosition","event","observer","observeScrollPosition","target","transcriptFocusObserversRef","numTranscriptFocusObservers","setNumTranscriptFocusObservers","getActivityByKey","dispatchTranscriptFocusByActivityKey","prevActivityKey","activityKey","observeTranscriptFocus","context","SayComposer","WebChatUIContext_default","PropTypes","Composer","activityMiddleware","activityStatusMiddleware","attachmentForScreenReaderMiddleware","attachmentMiddleware","avatarMiddleware","cardActionMiddleware","scrollToEndButtonMiddleware","sendBoxMiddlewareFromProps","sendBoxToolbarMiddlewareFromProps","toastMiddleware","typingIndicatorMiddleware","composerProps","onTelemetry","theme","useTheme","patchedActivityMiddleware","singleToArray","createCoreMiddleware","patchedActivityStatusMiddleware","patchedAttachmentForScreenReaderMiddleware","patchedAttachmentMiddleware","patchedAvatarMiddleware","createCoreAvatarMiddleware","patchedCardActionMiddleware","createDefaultCardActionMiddleware","patchedToastMiddleware","createCoreMiddleware_default","patchedTypingIndicatorMiddleware","defaultScrollToEndButtonMiddleware","createScrollToEndButtonMiddleware","patchedScrollToEndButtonMiddleware","patchedStyleOptions","sendBoxMiddleware","initSendBoxMiddleware","createMiddleware_default","sendBoxToolbarMiddleware","initSendBoxToolbarMiddleware","APIComposer","downscaleImageToDataURL","ErrorBox_default","ActivityTreeComposer_default","UITracker_default","Composer_default","ARIA_LANDMARK_ROLES","ReactWebChat","className","role","composerProps","React","Composer_default","BasicWebChat_default","_","composerPropTypesWithoutChildren","PropTypes","ReactWebChat_default","PropTypes","React","Avatar","ariaHidden","className","fromUser","React","DefaultAvatar","PropTypes","Avatar_default","hooks","onErrorResumeNext","MarkdownIt","React","memo","useMemo","MarkdownIt","iterator","md","ruleName","tokenType","scan","state","env","blkIdx","inlineTokens","i","TRANSPARENT_GIF","internalMarkdownIt","ZERO_WIDTH_SPACE_TOKEN","setTokenAttribute","attrs","name","value","index","entry","betterLinks","markdown","tokens","decorateLink","linkOptions","indexOfLinkCloseToken","type","updatedTokens","linkOpenToken","linkCloseToken","href","textContent","content","decoration","ariaLabel","asButton","className","iconAlt","iconClassName","rel","target","title","wrapZeroWidthSpace","iconTokens","betterLinks_default","allowedSchemes","linkDefinitions","externalLinkAlt","defaultDecorateLink","href","textContent","linkOptions","decoration","ariaLabelSegments","classes","linkDefinition","url","protocol","onErrorResumeNext","scheme","className","value","classNamesString","useLocalizer","hooks","markdownIt","MarkdownIt","betterLinks_default","isPlural","props","LocalizedString","linkClassName","onDecorateLink","stringIds","values","localize","env","useMemo","html","React","LocalizedString_default","memo","React","memo","useContext","useMemo","EMPTY_ARRAY","ThemeProvider","children","activityMiddleware","activityStatusMiddleware","attachmentForScreenReaderMiddleware","attachmentMiddleware","avatarMiddleware","cardActionMiddleware","groupActivitiesMiddleware","scrollToEndButtonMiddleware","sendBoxMiddleware","sendBoxToolbarMiddleware","styleOptions","toastMiddleware","typingIndicatorMiddleware","existingContext","useContext","Context_default","mergedActivityMiddleware","useMemo","mergedActivityStatusMiddleware","mergedAttachmentForScreenReaderMiddleware","mergedAttachmentMiddleware","mergedAvatarMiddleware","mergedCardActionMiddleware","mergedGroupActivitiesMiddleware","mergedScrollToEndButtonMiddleware","mergedSendBoxMiddleware","mergedSendBoxToolbarMiddleware","mergedStyleOptions","mergedToastMiddleware","mergedTypingIndicatorMiddleware","context","React","ThemeProvider_default","memo","hooks_exports","__export","useDictateAbortable","useFocus","useMakeThumbnail","useMicrophoneButtonClick","useMicrophoneButtonDisabled","useObserveScrollPosition","useObserveTranscriptFocus","useRegisterFocusSendBox","useRenderMarkdownAsHTML","useScrollDown","useScrollTo","useScrollToEnd","useScrollUp","useSendBoxSpeechInterimsVisible","useSendFiles","useSendMessage","useStyleSet","useTextBoxSubmit","useTextBoxValue","useTypingIndicatorVisible","useWebSpeechPonyfill","useEffect","useObserveScrollPosition","observer","deps","observeScrollPosition","useWebChatUIContext","useEffect","useEffect","useObserveTranscriptFocus","observer","deps","observeTranscriptFocus","useWebChatUIContext","useEffect","useCallback","useScrollTo","scrollToCallbacksRef","useWebChatUIContext","useCallback","args","callback","hooks","useCallback","useAPISendFiles","hooks","useSendFiles","makeThumbnail","useMakeThumbnail","sendFiles","useCallback","files","file","thumbnailURL","hooks","useCallback","useAPISendMessage","hooks","useSendMessage","makeThumbnail","useMakeThumbnail","sendMessage","useCallback","text","method","channelData","attachments","blob","thumbnailURL","hooks","apiHooks","hooks_exports","buildTool","moduleFormat","version","buildInfo","Components","BasicWebChat_default","Composer_default","ThemeProvider_default","Surface_default","BasicConnectivityStatus_default","BasicSendBox_default","BasicSendBoxToolbar_default","BasicToaster_default","BasicTranscript_default","AudioContent_default","FileContent_default","HTMLVideoContent_default","ImageContent_default","TextContent_default","VideoContent_default","VimeoContent_default","YouTubeContent_default","Avatar_default","Bubble_default","ErrorBox_default","SendStatus_default","Speak_default","Timestamp_default","DictationInterims_default","MicrophoneButton_default","SendButton_default","TextBox_default","SuggestedActions_default","UploadButton_default","LocalizedString_default","src_default","ReactWebChat_default"]}
|