Changelog

May 11, 2026 ยท View on GitHub

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

Note:

  • Web developers are advised to use ~ (tilde range) to select minor versions, which contains new features and/or fixes. Use ^ (caret range) to select major versions, which may contains breaking changes

Legends:

  • ๐Ÿ’ฅ are breaking changes
  • ๐Ÿ› are known issues
  • ๐Ÿงช are experimental changes
  • ๐Ÿซ are samples
  • ๐Ÿ‘ท๐Ÿป are development environment changes

Unreleased

Breaking changes in this release:

  • ๐Ÿ’ฅ styleOptions.bubbleImageHeight is being deprecated in favor of styleOptions.bubbleImageMaxHeight and styleOptions.bubbleImageMinHeight. The option will be removed on or after 2026-07-05
  • ๐Ÿ’ฅ styleOptions.bubbleMaxWidth/bubbleMinWidth is being deprecated in favor of styleOptions.bubbleAttachmentMaxWidth/bubbleAttachmentMinWidth and styleOptions.bubbleMessageMaxWidth/bubbleMessageMinWidth. The option will be removed on or after 2026-10-08
  • ๐Ÿ’ฅ Moved to micromark for rendering Markdown, instead of markdown-it
    • Please refer to PR #5330 for details
  • ๐Ÿ’ฅ HTML sanitizer is moved from renderMarkdown to HTML content transformer middleware, please refer to PR #5338
    • If you customized renderMarkdown with a custom HTML sanitizer, please move the HTML sanitizer to the new HTML content transformer middleware
  • ๐Ÿ’ฅ useGroupActivities hook is being deprecated in favor of the useGroupActivitiesByName hook. The hook will be removed on or after 2027-05-04
  • ๐Ÿ’ฅ useSuggestedActions() hook is being deprecated in favor of the useSuggestedActionsHooks().useSuggestedActions() hook. The hook will be removed on or after 2027-05-30
  • ๐Ÿ’ฅ The following middleware should be created using their respective factory function:
    • activityBorderDecoratorMiddleware, related to PR #5504, #5510
    • activityGroupingDecoratorMiddleware, related to PR #5504
    • sendBoxMiddleware, related to PR #5504
    • sendBoxToolbarMiddleware, related to PR #5504
  • ๐Ÿ’ฅ styleOptions.hideUploadButton is being deprecated in favor of styleOptions.disableFileUpload. The option will be removed on or after 2027-07-14
  • ๐Ÿ’ฅ botframework-directlinespeech-sdk no longer ponyfill AbortController, it is supported by modern browsers, in PR #5530
  • ๐Ÿ’ฅ activityMiddleware is being deprecated in favor of polymiddleware. It will be removed on or after 2027-08-16, related to PR #5515
  • ๐Ÿ’ฅ Root-level (unconnected) Claim entity is being deprecated, in PR #5564, by @compulim. It will be removed on or after 2027-08-29
    • Use entities[@id=""][@type="Message"].citation[@type="Claim"] instead
  • ๐Ÿ’ฅ activityStatusMiddleware.nextVisibleActivity and activityStatusMiddleware.sameTimestampGroup is removed after deprecation, in PR #5565, by @compulim
  • ๐Ÿ’ฅ avatarMiddleware is being deprecated in favor of polymiddleware. It will be removed on or after 2028-03-16, related to PR #5779

Added

  • (Experimental) Added pre-chat message with starter prompts in Fluent UI, in PR #5255 and #5263, by @compulim
  • (Experimental) Added isPrimary props to Fluent UI send box. When set, will wire up with useSendBoxValue and works with starter prompts in pre-chat message, in PR #5257, by @compulim
  • (Experimental) Expand Fluent theme support to activities and transcript, in PR #5258, by @OEvgeny
  • Added new Fluent UI theme variant "copilot" with updated styling and components, in PR #5258, by @OEvgeny
  • Introduced ActivityDecorator component for enhanced message styling and layout, in PR #5258, by @OEvgeny
  • Added CopilotMessageHeader component for displaying bot information in the "copilot" variant, in PR #5258, by @OEvgeny
  • Updated Fluent theme styling to improve accessibility and visual consistency, in PR #5258, by @OEvgeny
  • Fixed header font in copilot variant, in PR #5261, by @OEvgeny
  • Added "Copy" button to bot messages in Fluent UI if it contains keyword AllowCopy, in PR #5259, #5262, and #5285, by @compulim
  • Resolves #4876 and #4939. Added support of informative message in livestreaming, by @compulim, in PR #5265
  • Introduced centralized announcements approach via the new usePushToLiveRegion hook, in PR #5251, by @OEvgeny
  • Added keyboard shortcut for the "New Messages" button, in PR #5251, by @OEvgeny
  • Added decorators for loading and completion states to the Fluent theme, in PR #5269, by @OEvgeny
  • Added blueprint of starter prompts in the Fluent theme, in PR #5270, #5276, #5279, and #5284, by @OEvgeny and @compulim
  • Added support for liner message activities in the Fluent theme, in PR #5272, by @OEvgeny
  • Added new uiState props and useUIState hook, in PR #5276, by @compulim
  • (Experimental) Added support for using Web Chat inside a shadow DOM, in PR #5196, by @OEvgeny
    • Added styleOptions.stylesRoot property allowing users to specify the root node where Web Chat styles should be placed, in PR #5196, by @OEvgeny
    • Added the ThemeProvider.styles property, allowing theme packages to place styles into the same root node as Web Chat, in PR #5196, by @OEvgeny
    • Added nonce for Fluent and react-scroll-to-bottom injected styles, in PR #5196, by @OEvgeny
    • Updated react-scroll-to-bottom to version 4.2.1-main.53844f5, in PR #5196, by @OEvgeny
    • Updated react-film to version 3.1.1-main.f623bf6, in PR #5196, by @OEvgeny
  • (Experimental) Added CSS decorator support into Web Chat white-label experience, in PR #5312, by @OEvgeny
    • Introduced WebChatDecorator component for adding animated borders to activities, in PR #5312
    • Added new style options borderAnimationColor1, borderAnimationColor2, and borderAnimationColor3 for customizing decorator colors, in PR #5312
  • Added styleOptions.bubbleAttachmentMaxWidth/bubbleAttachmentMinWidth and styleOptions.bubbleMessageMaxWidth/bubbleMessageMinWidth, in PR #5321, by @compulim
  • (Experimental) Added more CSS variables support, in PR #5321, by @compulim
  • Added MathML/TeX block support in Markdown via micromark-extension-math and katex, in PR #5332, by @compulim
  • Added code viewer dialog with syntax highlighting, in PR #5335, by @OEvgeny
  • Added copy button to code blocks, in PR #5334, by @compulim
  • Added copy button to view code dialog, in PR #5336, by @compulim
  • Added HTML content transformer middleware, in PR #5338 and #5347, by @compulim
    • HTML content transformer is used by useRenderMarkdown to transform the result from renderMarkdown
    • HTML sanitizer is moved from renderMarkdown into HTML content transformer for better coverage
    • Copy button is added to fenced code blocks (<pre><code>)
    • Configure HTML sanitizer via request.allowedTags
  • Added support for math blocks using $$ delimiter alongside existing \[...\] and \(...\) notations, in PR #5381, by @OEvgeny
  • Added support for speech recognition initial silence timeout when using Azure Speech, in PR #5400, by @compulim
  • Introduced syntax highlighting for markdown code blocks, in PR #5389, by @OEvgeny
  • (Experimental) Added feedbackActionsPlacement style option to control feedback button placement, in PR #5407, by @OEvgeny
    • New style option supports two values: 'activity-actions' and 'activity-status' (default)
    • When set to 'activity-actions', feedback buttons are displayed in the activity actions toolbar
    • When set to 'activity-status', feedback buttons appear in the activity status area (default behavior)
  • Added support for including activity ID and key into form data indicated by data-webchat-include-activity-id and data-webchat-include-activity-key attributes, in PR #5418, by @OEvgeny
  • Added dedicated loading animation for messages in preparing state for Fluent theme, in PR #5423, by @OEvgeny
  • Resolved #2661 and #5352. Added speech recognition continuous mode with barge-in support, in PR #5426, by @RushikeshGavali and @compulim
    • Set styleOptions.speechRecognitionContinuous to true with a Web Speech API provider with continuous mode support
  • Added support of contentless activity in livestream, in PR #5430, by @compulim
  • Added sliding dots typing indicator in Fluent theme, in PR #5447 and PR #5448, by @compulim
  • (Experimental) Add an ability to pass completion prop into Fluent send box and expose the component, in PR #5466, by @OEvgeny
  • Added feedback form for like/dislike button when feedbackActionsPlacement is "activity-actions", in PR #5460, PR #5469, PR 5470, PR #5501 by @lexi-taylor, and @OEvgeny
  • Added multi-dimensional grouping, styleOptions.groupActivitiesBy, and useGroupActivitiesByName hook, in PR #5471, by @compulim
    • Existing behavior will be kept and activities will be grouped by sender followed by status
    • useGroupActivitiesByName is favored over the existing useGroupActivities hook for performance reason
    • Middleware which support the new grouping name init argument should only compute the grouping if they match the grouping name, or the grouping name is not specified, otherwise, should do nothing and call the downstream middleware
  • Resolved #5463. Added attachment preview for sendAttachmentOn: "send", in PR #5464, by @compulim, in PR #5492, by @OEvgeny
    • Attaching files will no longer remove previously attached files
    • Updated Fluent theme to use the new attachment preview feature
  • Added collapsible activity and activity with abstract handling, in PR #5506, in PR #5513, in PR #5771, by @OEvgeny
    • Added styleOptions.partGroupDefaultOpen to configure whether part groups are open by default, defaults to true
    • Added styleOptions.referenceListDefaultOpen to configure whether references are open by default, defaults to true
    • In the Fluent theme "copilot" variant, part groups and references now default to closed
  • Added disableFileUpload flag to completelly disable file upload feature, in PR #5508, by @JamesNewbyAtMicrosoft
    • Deprecated hideUploadButton in favor of disableFileUpload.
    • Updated BasicSendBoxToolbar to rely solely on disableFileUpload.
  • Added support for livestreaming via entities[type="streaminfo"] in PR #5517 by @kylerohn and @compulim
  • Added polymiddleware, a new universal middleware for every UIs, by @compulim in PR #5515 and #5566
    • Legacy middleware is prioritized over polymiddleware
    • Added polymiddleware to <ThemeProvider>
    • Currently supports activity middleware and the new error box middleware
    • Supports avatar middleware, by @compulim in PR #5779
  • New internal packages, by @compulim in PR #5515
    • @msinternal/botframework-webchat-api-middleware for middleware branch of API package
    • @msinternal/botframework-webchat-debug-theme package for enabling debugging scenarios
    • @msinternal/botframework-webchat-react-hooks for helpers for React hooks
  • Added link sanitization and ESLint rules, in PR #5564, by @compulim
  • Added blob URL sanitization and ESLint rules, in PR #5568, by @compulim
  • Added visual message grouping following the isPartOf property of the Message entity, in PR #5553, in PR #5585, in PR #5590, in PR #5608, in PR #5773, by @OEvgeny
    • The mode is suitable for providing chain-of-thought reasoning
    • Added visual indication of creativeWorkStatus property in Message entity:
      • undefined - no indicator is shown
      • 'Incomplete' - show loader aside from the message
      • 'Published' - show checkmark aside from the message
    • Added a position property support for the Message entity
      • The position property takes precedence over existing sequence ID
    • Added support for explicit group status via isPartOf.creativeWorkStatus and isPartOf.abstract on the HowTo entity
      • When the HowTo entity carries an explicit creativeWorkStatus, it takes precedence over status derived from individual messages
      • When the HowTo entity carries an abstract, it is used as the group header title
  • Unified build info and injection of <meta> tag, in PR #5571, by @compulim
  • Added documentation for isPartOf property, in PR #5573, by @compulim
  • fluent-theme: Changed dependencies to import solely from the "bundle" package, in PR #5584, by @compulim
  • Improved bundling, in PR #5588, by @compulim
    • New named exports
      • api: botframework-webchat-api/hook
      • bundle: botframework-webchat/component, botframework-webchat/decorator (internal-use), botframework-webchat/hook
      • component: botframework-webchat-component/component, botframework-webchat-component/hook
  • (Experimental) Added support for importing via <script type="module">, by @compulim in PR #5592
    • Added support for botframework-webchat-fluent-theme package, by @compulim in PR #5593
    • Bundling vendor chunks, by @compulim in PR #5595
    • Added deprecation notes for legacy imports, by @compulim in PR #5600
      • import { hooks } from 'botframework-webchat' should be replaced by import * as hooks from 'botframework-webchat/hook.js'
    • Added target to Chrome 100 and re-enable Lightning CSS for ESM builds, by @compulim in PR #5602
  • Relaxed role prop to allow any string instead of ARIA landmark roles, in PR #5561, by @compulim
  • Cleaned up <ThemeProvider> and various CSS related code, in PR #5611, by @compulim
  • (Experimental) Reworked the copilot variant to align with the modern Copilot UX, in PR #5630, by @OEvgeny, in PR #5634, by @OEvgeny, in PR #5656, by @OEvgeny
    • Added loading animation for copilot, and fluent variants
  • New JSON-LD graph backend, by @compulim in PR #5622
  • New debug API, by @compulim in PR #5663 and PR #5664, see DEBUGGING.md for more
    • Debug into element: open F12, select the subject in Element pane, type $0.webChat.debugger
    • Breakpoint: open F12, select the subject in Element pane, type $0.webChat.breakpoint.incomingActivity
  • The botframework-webchat package now uses CSS modules for styling purposes, in PR #5666, in PR #5677 by @OEvgeny
  • ๐Ÿ‘ท๐Ÿป Added npm run build-browser script for building test harness package only, in PR #5667, by @compulim
  • Added pull-based capabilities system for dynamically discovering adapter capabilities at runtime, in PR #5679, by @pranavjoshi001
  • Added Speech-to-Speech (S2S) support for real-time voice conversations, in PR #5654, by @pranavjoshi
  • Added core mute/unmute functionality for speech-to-speech via useRecorder hook (silent chunks keep server connection alive), in PR #5688, by @pranavjoshi
  • ๐Ÿงช Added incremental streaming Markdown renderer for livestreaming, in PR #5799, by @OEvgeny
    • Fixed streaming Markdown renderer to preserve link reference definitions during incremental rendering and recover on error, in PR #5808, by @OEvgeny

Changed

Deprecated

  • ๐Ÿซ Sample 01.getting-started/l.sharepoint-web-part, 01.getting-started/k.direct-line-token, and samples under 07.advanced-web-chat-apps is being archived and will no longer receive updates, in PR #5533, #5536, and #5537, by @compulim

Removed

  • Removed copilot-deprecated variant from Fluent theme, in PR #5644, by @OEvgeny
  • Deprecating disabled props and useDisabled hook in favor of new uiState props and useUIState hook, in PR #5276, by @compulim
  • useSuggestedActions() hook is being deprecated in favor of the useSuggestedActionsHooks().useSuggestedActions() hook, in PR #5489, by @compulim
  • activityMiddleware is being deprecated in favor of polymiddleware. It will be removed on or after 2027-08-16, related to PR #5515
  • Root-level (unconnected) Claim entity is being deprecated, in PR #5564, by @compulim. It will be removed on or after 2027-08-29
    • Use entities[@id=""][@type="Message"].citation[@type="Claim"] instead
  • activityStatusMiddleware.nextVisibleActivity and activityStatusMiddleware.sameTimestampGroup is being deprecated and will be removed on or after 2022-07-22, in PR #4362, by @compulim
  • Removed legacy test harness, in PR #5655, by @compulim
    • All tests are now either using html2 test harness or simple unit tests
    • Legacy and html (html1) test harness are all migrated to html2
  • avatarMiddleware is being deprecated in favor of polymiddleware. It will be removed on or after 2028-03-16, related to PR #5779

Fixed

  • Fixed #5256. styleOptions.maxMessageLength should support any JavaScript number value including Infinity, by @compulim, in PR #5255
  • Fixes #4965. Removed keyboard helper screen in #5234, by @amirmursal and @OEvgeny
  • Fixes #5268. Concluded livestream is sealed and activities received afterwards are ignored, and streamSequence is not required in final activity, in PR #5273, by @compulim
  • Fixes #5288. Fixed citation and sensitivity label bleeding when using Fluent skin pack, in PR #5287, by @compulim
  • Fixes #5294. Fixed copy button animation reset to "Copied" after hiding and showing Web Chat, in PR #5295, by @compulim
  • Fixes #5147. Added punycode to our dependencies as markdown-it requires it but did not have it in their package.json, in PR #5301, by @compulim
  • Fixes #5306. Title and subtitle in pre-chat message activity should wrap, in PR #5307, by @compulim
  • Fixes #5319. Some Markdown text are not rendered after HTML tags, in PR #5320, by @compulim
  • Fixes #5323. Removed unused CSS class from carousel component, eliminating unintended styling, in PR #5325, by @OEvgeny
  • Resolved CSS class name conflicts between component and fluent packages to prevent styling issues, in PR #5326, in PR #5327, by @OEvgeny
  • Fixed #5350. Bundled shiki in component package, in PR #5349, by @compulim
  • Fixed modal dialog rendering to prevent visual flicker and improve UX when opening code views, in PR #5374, by @OEvgeny
  • Fixed math parsing that could cause Web Chat to hang when processing certain LaTeX expressions, in PR #5377, by @OEvgeny
  • Fixed long math formula should be scrollable, in PR #5380, by @compulim
  • Fixed #4948. Microphone should stop after initial silence, in PR #5385
  • Fixed #5390. Fixed drop zone remaining visible when file is dropped outside of the zone, in PR #5394, in PR #5415, by @OEvgeny
  • Improved accessibility across multiple components, in PR #5428, by @OEvgeny
    • Fixed copy button screen reader announcement
    • Added proper ARIA attributes to link definitions component
    • Improved focus management for scroll to end button
  • Fixed #5439. Fixed batched livestream activities are not recognized in the same session, in PR #5440, by @compulim
  • Fixed #5452. With Fluent/Copilot theme, the typing indicator padding should not be squashed and bottom margin should not grow, in PR #5453, by @compulim and in PR #5495, by @OEvgeny
  • Fixed #5461. On macOS and Fluent skinpack applied, using Japanese IME to input some Japanese text should not send them immediately, in PR #5462, by @compulim
  • Fixed #5472, ensure proper inheritance from the outside of Web Chat for visibility CSS property when hidden, in PR #5473, by @OEvgeny
  • Fixed #5474. Disable AMD glue code in bundle, in PR #5478, by @compulim
    • Downstreamers who use our CommonJS and ES Modules output with esbuild will need to disable AMD themselves to prevent conflict with RequireJS
  • Fixed #5479. Fixed feedback form buttons should not squash other buttons, in PR #5480, by @compulim
    • Migrated to radio button for like/dislike where form submission is required
  • Fixed long citation identifiers break activity layout, in PR #5507, by @OEvgeny
  • Fixed botframework-webchat-core/internal import in legacy CommonJS environments, in #5509, by @OEvgeny
  • Updated file-based import with .js extension and removed the file extension from build config, by @compulim, in PR #5516
  • Fixed #5518. Minimal bundled build should work properly, in PR #5507, by @compulim
  • Fixed #5520. Version information should be injected when installed via npm, in PR #5521, by @compulim
  • Fixed aria-label only announcing placeholder in feedback form, in PR #5567
  • Fixed placing focus on the code block content, so it is possible to scroll code via keyboard, in PR #5575, by @OEvgeny
  • Fixed #5581. Activities should be displayed after upgrading via npm install, in PR #5582, by @compulim
  • Fixed Composer props types not resolving correctly in React 16 in PR #5580, by @lexi-taylor
  • Fixed npm start may fail subsequently as builds are not fully flushed to /dist/, in PR #5599, by @compulim
  • Fixed published package types containing internal package references, in PR #5610, by @OEvgeny
  • Fixed citation links are not properly matched against markdown links, in PR #5614, by @OEvgeny
  • Fixed botframework-webchat/decorator import in legacy CommonJS environments, in #5616, by @OEvgeny
  • Fixed npm start for efficiency and reliability, in PR #5621 and #5629, by @compulim
  • Fixed activity sorting introduced in PR #5622, part grouping, and livestreaming, by @compulim in PR #5635
  • Fixed Content Security Policy documentation and sample in PR, by @compulim in PR #5648
    • Added img-src data:, required for icons
  • Downgraded graph upsert conflict checks, by @compulim in PR #5674
  • Fixed virtual keyboard should show up on tap after being suppressed, in iOS 26.2, by @compulim in PR #5678
  • Fixed compatibility with create-react-app by adding file extension to core-js imports, by @compulim in PR #5680
  • Fixed virtual keyboard should be collapsed after being suppressed, in iOS 26.3, by @compulim in PR #5757
  • Fixed Fluent/Copilot typing indicator animation background color, in PR #5770, by @OEvgeny
  • Fixed <AddFullBundle> should not re-render when attachment[ForScreenReader]Middleware is updated without noticeable different (iterateEquals), by @compulim, in PR #5779
  • Fixed send box should narrate aria-label prop, by @compulim, in PR #5805

4.18.0 - 2024-07-10

Added

  • (Experimental) Added initial decorators support, in PR #5205, by @OEvgeny
    • Introduced internal botframework-webchat-api/decorator import, in PR #5205, by @OEvgeny
    • Added DecoratorComposer and ActivityDecorator to be used for decorating activity border, in PR #5205, by @OEvgeny
  • Added styleOptions.bubbleImageMaxHeight and styleOptions.bubbleImageMinHeight for variable image height, in PR #5236, by @compulim

Changed

Fixed

  • Read deeper into citation objects in order to provide names, in PR #5215, by @beyackle2
  • Improved performance for useActivityWithRenderer, in PR #5172, by @OEvgeny
  • Fixes #5162. Improved performance for useActivityTreeWithRenderer, in PR #5163, by @compulim
  • Fixes #5175. PrecompiledGlobalize.js is emitted instead of .cjs, by @compulim in PR #5181
  • Improved performance for BasicTranscript, in PR #5183, by @OEvgeny
  • Fixed potential memory usage issues caused by useActivitiesWithRenderer, in PR #5183, by @OEvgeny
  • Improved performance for useMemoized, in PR #5190, by @OEvgeny
  • Fixed send box zoomed in when clicked on mobile Safari, in PR #5192, by @OEvgeny
  • Added missing support for chat history scroll with keyboard when Fluent send box is focused, in PR #5191, by @OEvgeny
  • Fixed DTMF command usage sent by telephone keypad, in PR #5198, by @OEvgeny
  • Fixed decorator import in legacy CommonJS environments, in #5231, by @OEvgeny
  • Scoped use-propagate to individual WebChat instances to prevent interference between multiple instances, in PR #5248, by @OEvgeny

4.17.0 - 2024-05-06

Known issues in this release:

  • ๐Ÿ› Web Chat is not loading with error Uncaught TypeError: Super constructor null of anonymous class is not a constructor

Breaking changes in this release:

  • ๐Ÿ’ฅ useSendMessage hook is updated to support sending attachments with a message. To reduce complexity, the useSendFiles hook is being deprecated. The hook will be removed on or after 2026-04-03
  • ๐Ÿ’ฅ styleOptions.uploadThumbnailHeight and styleOptions.uploadThumbnailWidth must be a number of pixels
  • ๐Ÿ’ฅ useSuggestedActions type is updated to align with its actual implementation, by @OEvgeny, in PR #5122
  • ๐Ÿ’ฅ Removed deprecated code: connect*, useRenderActivity, useRenderActivityStatus, useRenderAvatar, in PR #5148, by @compulim
  • ๐Ÿ’ฅ Added named exports in both CommonJS and ES Modules module format, in PR #5148, by @compulim
  • ๐Ÿ’ฅ Removed deprecated useFocusSendBox() hook, please use useFocus('sendBox') instead, in PR #5150, by @OEvgeny
  • ๐Ÿ’ฅ HTML-in-Markdown is now supported. To disable this feature, set styleOptions.markdownRenderHTML to false

Added

  • Resolves #5083. Added sendAttachmentOn style option to send attachments and text in a single activity, by @ms-jb and @compulim, in PR #5123
    • useSendMessage hook is updated to support sending attachments with a message
    • useSendBoxAttachments hook is added to get/set attachments in the send box
  • Resolves #5081. Added uploadAccept and uploadMultiple style options, by @ms-jb, in PR #5048
  • Added sendBoxMiddleware and sendBoxToolbarMiddleware, by @compulim, in PR #5120 and #5504
    • Instead of passing barebone middleware, use the createSendBoxMiddleware() and createSendBoxToolbarMiddleware() factory function correspondingly, related to PR #5504
  • (Experimental) Added botframework-webchat-fluent-theme package for applying Fluent UI theme to Web Chat, by @compulim and @OEvgeny
    • Initial commit, in PR #5120
    • Inherits Fluent CSS palette if available, in PR #5122
    • New send box with Fluent look-and-feel, in PR #5122
      • styleOptions.maxMessageLength to specify maximum length of the outgoing message
    • Drag-and-drop file support, in PR #5122
    • Added telephone keypad (DTMF keypad), in PR #5122
    • Fixed botframework-webchat-fluent-theme/package.json to export *.d.[m]ts and default exports, in PR #5131
    • Added support of styleOptions.hideUploadButton, in PR #5132
    • Added styleOptions.hideTelephoneKeypadButton and default to true, in PR #5132
    • Fit-and-finish on suggested actions and telephone keypad, in PR #5132
    • Fixed to keep telephone keypad on-screen on click, in PR #5132
    • Disabled send button and hid message length when telephone keypad is shown, in PR #5136
    • Added dark theme support, in PR #5138
    • Added an information message to the telephone keypad, in PR #5140
    • Added animation to focus indicator and pixel-perfected, in PR #5143
    • Integrated focus management for send box, in PR #5150, by @OEvgeny
    • Added keyboard navigation support into suggested actions, in PR #5154, by @OEvgeny
    • Fixes #5166. Fixed "attach file" button in iOS Safari should looks the same as on other platforms, in PR #5167, by @compulim
  • (Experimental) Added <LocalizeString /> component which can be used to localize strings, by @OEvgeny in PR #5140
  • Added <ThemeProvider> component to apply theme pack to Web Chat, by @compulim, in PR #5120
  • Added useMakeThumbnail hook option to create a thumbnail from the file given, by @compulim, in PR #5123 and #5122
  • Added moduleFormat and transpiler build info to <meta> tag, in PR #5148, by @compulim
  • Added support of rendering HTML-in-Markdown, in PR #5161 and PR #5164, by @compulim, @beyackle2, and @OEvgeny
  • Resolves #5184. Added channelData.webChat.styleOptions.typingIndicatorDuration to override the default typing indicator duration on a per-activity basis, by @compulim, in PR #5141
  • Resolves #4876 and #4939. Added support of livestreaming, by @compulim, in PR #5141

Changed

Fixed

  • Fixes #5050. Fixed focus should not blur briefly after tapping on a suggested action, by @compulim, in PR #5097
  • Fixes #5111. Fixed keyboard help screen to use HTML description list, by @compulim, in PR #5116
  • Fixes #5080. Fixed dateToLocaleISOString for handling sub-hour, by @marclundgren, in PR #5114
  • Fixes #5146. Fixed chat history focus indicator should not show up on tap, by @OEvgeny, in PR #5145
  • Fixes type portability issues by exporting types from all exported code, in PR #5148, by @compulim
  • Fixes missing exports of useNotifications, in PR #5148, by @compulim
  • Fixes suggested actions keyboard navigation skips actions after suggested actions got updated, in PR #5150, by @OEvgeny
  • Fixes #5155. Fixed "Super constructor null of anonymous class is not a constructor" error in CDN bundle by bumping to webpack@5.91.0, in PR #5156, by @compulim

4.16.0 - 2023-11-16

Breaking changes in this release:

  • ๐Ÿ’ฅ Starting from 4.16.0, Internet Explorer is no longer supported
    • After more than a year of the Internet Explorer 11 officially retirement, we decided to stop supporting Internet Explorer. This will help us to bring new features to Web Chat
    • 4.15.9 is the last version which supports Internet Explorer in limited fashion
  • ๐Ÿ’ฅ useTextBoxValue setter will no longer replace emoticon with emoji, in PR #4861

Added

Changed

Fixed

  • Fixes #4865. Fixed CTRL + Z should undo correctly, by @compulim, in PR #4861
  • Fixes #4863. Disable dark theme for link references until chat history has dark theme support, by @compulim, in PR #4864
  • Fixes #4866. Citation modal show fill screen width on mobile device and various fit-and-finish, by @compulim, in PR #4867
  • Fixes #4878. createStore should return type of Redux.Store, by @compulim, in PR #4877
  • Fixes #4957. Native chevron of the accordion in citation should be hidden, by @compulim, in PR #4958
  • Fixes #4870. Originator should use claimInterpreter instead of ReplyAction/provider, by @compulim, in PR #4910

4.15.9 - 2023-08-25

Changed

Fixed

  • Fixes #4718. In high contrast mode, Adaptive Card buttons, when pushed, should highlighted properly, by @compulim, in PR #4746
  • Fixes #4721 and #4726. Adaptive Cards TextBlock heading elements should start at level 2, by @compulim, in PR #4747
  • Fixes #3699. Correcting timestamp roundoff, by @compulim, in PR #4821
  • Fixes #4849. Rendering an erroneous Adaptive Cards should bail out and not throw MutationObserver error, by @compulim, in PR #4852

4.15.8 - 2023-06-06

Breaking changes in this release:

  • ๐Ÿ’ฅ When activity.channelData['webchat:fallback-text'] is present but empty, it will no longer applies aria-hidden to the activity
    • The activity will not be narrated through live region. However, when navigating the transcript, it will be narrated as empty
    • To make an activity presentational or hide from screen reader, please use activityMiddleware to customize the rendering

Added

  • Resolved #4643. Decoupling botframework-directlinejs from business logic of Web Chat for better tree-shaking, by @compulim, in PR #4645 and PR #4648
  • Resolved #4650. Added automated accessibility check using axe-core
    • Add axe-core in end-to-end tests, by @compulim, in PR #4704
    • HTML test: using <main> for the root container, by @compulim, in PR #4684 and PR #4704
    • HTML test: changed contrast ratio in tests that use different background colors, by @compulim, in PR #4686 and PR #4704
    • Added ponyfill prop to <ReactWebChat>/<Composer> and createStoreWithOptions, by @compulim, in PR #4662
      • This is for development scenarios where fake timer is needed and will only applies to Web Chat only
    • HTML test: fix accessibility issues on HTML file, by @compulim, in PR #4685
    • HTML test: ensure all images has alternate text, by @compulim, in PR #4704
    • Adaptive Cards: always set role attribute, by @compulim, in PR #4704
    • Adaptive Cards: update host config to use lighter color for disabled inputs, by @compulim, in PR #4704
    • Keyboard help screen: remove <header> container, by @compulim, in PR #4704
    • Live region: added <label> for input fields in Adaptive Cards, by @compulim, in PR #4704

Changed

Fixed

  • Fixes #4557. Flipper buttons in carousels and suggested actions is now renamed to "next/previous" from "left/right", by @compulim, in PR #4646
  • Fixes #4652. Keyboard help screen, activity focus traps, and chat history terminator should not be hidden behind aria-hidden because they are focusable, by @compulim, in PR #4659
  • Fixes #4665. Updated development server with latest ESBuild API, by @compulim, in PR #4662.
  • Fixes #4706. Send button and ENTER key should function after reconnected, by @compulim, in PR #4707.
  • Fixes #4708. Should function properly in browsers without setImmediate or without passing store prop, by @compulim, in PR #4709.

4.15.7 - 2023-02-15

Added

  • Added function to emit status change telemetry event for activities, by @Erli-ms, in PR #4631
  • Added ability for developers to customize Web Chat by extending the default UI without having to re-implement existing components, by @dawolff-ms, in PR #4539

Changed

Fixed

  • Fixes #4558. In high contrast mode, "Retry" link button should use link color as defined by CSS System Colors, by @beyackle2 in PR #4537
  • Fixes #4566. For YouTube and Vimeo <iframe>, add sandbox="allow-same-origin allow-scripts", by @compulim in PR #4567
  • Fixes #4561. Header title of keyboard help dialog should be the aria-labelledby of the dialog and close button should be the first element of the header, by @compulim in PR #4609
  • Fixes #4559. Keyboard help screen should be scrollable and its close button should appear correctly in light-themed high contrast mode, by @compulim in PR #4619
  • Fixes #4623. Screen reader should read error when failed to send an empty message or offline, by @compulim in PR #4637

4.15.6 - 2022-12-01

Changed

Fixed

  • Fixes #4501. Outgoing activities restored from chat service should be marked as sent, by @compulim in PR #4532

4.15.5 - 2022-11-16

Changed

Fixed

  • Card action image alt text should use imageAltText field and fallback to text field, by @compulim in PR #4333
  • Fixes #4472. Removed role attributes for notification bar and use <div> instead of <ul>/<li>, by @compulim in PR #4475
  • Fixes #4393. Renders <section role="feed"> only if there are one or more activities contained within, by @beyackle2 and @compulim, in PR #4420
  • Fixes #4473. Bumped strip-ansi@6.0.1 for test-harness as @^7 does not support CommonJS project, by @compulim in PR #4474
  • Fixes #4476. When focus on the keyboard help screen, it should focus on the close button, by @compulim in PR #4479
  • Fixes #4442. Change the keyboard help screen string "Leave message" to "Exit message", by @compulim in PR #4479

4.15.4 - 2022-09-15

Changed

Fixed

  • Fixes #4403. Patched Unicode CLDR database which caused file upload in Polish to appear blank, by @compulim, in PR #4404
  • Fixes #4412. Fixed inconsistent in packages/support/cldr-data/package.json, by @compulim, in PR #4411

4.15.3 - 2022-08-10

Breaking changes in this release:

  • ๐Ÿ’ฅ Suggested actions is now a role="toolbar" and adopted roving tab index
    • TAB key will now land on the container, instead of individual button
    • While the focus is on the container, LEFT/RIGHT arrow keys are used to select different buttons (UP/DOWN for stacked layout)
    • Visual focus indicator is now two tiered. The default styling is same as the one we use in chat history
      • New style options added suggestedActionsVisualKeyboardIndicatorColor, suggestedActionsVisualKeyboardIndicatorStyle, suggestedActionsVisualKeyboardIndicatorWidth
    • Suggested actions container will be unmounted when there are no suggested action button to display
    • Suggested actions container is not longer a live region. The suggested action buttons will now be narrated by the chat history live region
  • ๐Ÿ’ฅ Published NPM packages will now include /dist, /lib, and /src folders
    • The /dist folder was previously missing from our NPM packages
  • ๐Ÿ’ฅ The activity.channelData.state property is being deprecated in favor of the updated activity.channelData['webchat:send-status'] property. Main differences include:
    • Previously, we would set the state property to "send failed" when the chat adapter failed to send the activity, or after passing a timeout as defined in styleOptions.sendTimeout
    • The new 'webchat:send-status' property will be set to "send failed" when the chat adapter fails to send the activity or after passing a hardcoded timeout of 5 minutes
    • See PR #4362 for details

Added

Changed

  • Resolves #4301. Updated Dockerfile to support secure container supply chain, by @compulim in PR #4303
  • Resolves #4317. Updated package.json to allowlist /dist, /lib, /src, by @compulim in PR #4318
  • Resolves #4322. Improved error messages for sending activities, by @compulim in PR #4362
  • Resolves #4211. Added new useSendStatusByActivityKey hook to check the UI send status of an outgoing activity, by @compulim in PR #4362
    • The send status returned by this hook is designed to display different UIs that reflect the "sending", "send failed" or "sent" status of the activity
    • When modifying styleOptions.sendTimeout prop, the send status returned by this hook may transition from "send failed" to "sending", and vice versa
    • This is different from the send status provided by the chat adapter, namely activity.channelData['webchat:send-status']
  • Resolves #4316. Using ESBuild as development server, by @compulim, in PR #4330

Fixed

  • Fixes #4293 and #4296. Fixed accessibility issues for suggested actions, by @compulim, in PR #4314
    • Centralized live region of suggested actions into chat history live region for better live region control
    • Suggested actions container is now a role="toolbar" and uses roving tab index for multiple suggested action
  • Fixes #4319. Fixed navigation keys not working in suggested actions under IE Mode, by @compulim, in PR #4320
  • Fixes #4315. Cleaned up localization strings for suggested actions, by @compulim, in PR #4323
  • Fixes #4294. Screen reader should not read message twice when navigating in the chat history, by @compulim, in PR #4323
  • Fixes #4295. Screen reader should not read suggested actions twice when message arrive in live region, by @compulim, in PR #4323
  • Fixes #4325. aria-keyshortcuts should use modifier keys according to KeyboardEvent key values spec, by @compulim, in PR #4323
  • Fixes #4327. In Adaptive Cards, TextBlock with style="heading" should have aria-level set, by @compulim, in PR #4329
  • Fixes #3949. For accessibility reasons, buttons in Adaptive Cards should be role="button" instead of role="menubar"/role="menuitem", by @compulim, in PR #4263
  • Fixes #4211. Screen reader should read when an activity was failed to send, by @compulim, in PR #4362, also fixed:
    • The "send failed" status on the activity should show up as soon as the chat adapter failed to send the activity
  • Fixes #4312. groupActivityMiddleware returning invalid value should not throw exceptions, by @compulim, in PR #4378.
  • Fixes #4386. Clicking on Adaptive Cards should not throw exception under IE11, by @compulim, in PR #4387, also fixed:
    • Prop type warning should not be shown for <ActivityRow>

4.15.2 - 2022-05-09

Breaking changes in this release:

  • ๐Ÿ’ฅ A new type WebChatActivity is introduced in the botframework-webchat-core package
    • If you are previously using the type DirectLineActivity, you may need to move to this new type
    • All Web Chat APIs will use the newer type WebChatActivity
    • The new type WebChatActivity is a well-defined type for handling activities inside Web Chat
    • The existing type DirectLineActivity will be used solely for communicating with type DirectLineJSBotConnection, a.k.a. botframework-directlinejs package

Added

  • Resolves #4099, added typing indicator to live region for screen reader, by @compulim, in PR #4210

Changed

Fixed

  • Fixes #4102. Fixed cldr-data-downloader package not working properly on Windows, by @compulim in PR #4223
  • Fixes #4232. Added blob: to allowed protocol list for file attachment UI (<FileContent>), by @compulim in PR #4233
  • Fixes #4204. Sort using activity.channelData['webchat:sequence-id'] and fallback to epoch time of activity.timestamp, by @compulim, in PR #4203
  • Fixes #4264. Fixed focus trap should leave when the activity no longer contains any tabbable elements (including elements with aria-disabled="true"), by @compulim in PR #4265

4.15.1 - 2022-03-04

Breaking changes in this release:

  • ๐Ÿ’ฅ New Map object polyfill is required for IE11 when using NPM version of Web Chat:
    • Map object polyfill is not required when using ES5 bundle of Web Chat from our CDN (webchat-es5.js)
    • If you are seeing new errors while loading NPM version of Web Chat under IE11, please add a polyfill
    • We recommend core-js package, it can be loaded by import 'core-js/features/map'
    • Our current list of required polyfills can be found in packages/bundle/src/polyfill.ts
  • ๐Ÿ’ฅ Style options are introduced to send button for improved accessibility:
    • suggestedActionBackground and suggestedActionXXXBackground are being deprecated in favor of suggestedActionBackgroundColor and suggestedActionBackgroundColorOnXXX respectively, for consistencies when porting to other platforms
    • suggestedActionDisabledXXX is being renamed to suggestedActionXXXOnDisabled, for consistencies with other style options
    • suggestedActionXXXOnActive, suggestedActionXXXOnFocus, suggestedActionXXXOnHover are introduced for styling per user gestures
    • suggestedActionKeyboardFocusIndicatorXXX are introduced for styling the "focus ring" when focused using a keyboard

Added

  • Adds eslint-plugin-security, consolidate .eslintrc.yml at project root, and treat warnings as errors, by @compulim, in PR #4079
  • Adds allowed protocol list to file attachment and OAuth card, by @compulim, in PR #4143

Changed

Fixed

  • Fixes #4018. When using TAB or SHIFT + TAB key to focus on the transcript, it should select the last activity, by @compulim, in PR #4035
  • Fixes #4020. With or without scan mode turned on, screen reader users should be able to press ENTER to focus on interactive activity, by @compulim, in PR #4041
  • Fixes #4021. For screen reader usability, suggested actions container should not render "Is empty" alt text initially, by @compulim, in PR #4041
  • Fixes #4029. Added new keyboard focus indicator for suggested actions, by @compulim, in PR #4035
    • New style options are introduced: suggestedActionXXXOnActive, suggestedActionXXXOnFocus, suggestedActionXXXOnHover, suggestedActionKeyboardFocusIndicatorXXX
    • Style options are renamed: suggestedActionDisabledXXX become suggestedActionXXXOnDisabled
  • Fixes #4028. Added new keyboard focus indicator for send box buttons, by @compulim, in PR #4035
    • New style options are introduced: sendBoxButtonXXXOnActive, sendBoxButtonXXXOnFocus, sendBoxButtonXXXOnHover, sendBoxButtonKeyboardFocusIndicatorXXX
  • Fixes #4015. Added role="heading" to titles of rich card, by @compulim, in PR #4074
  • Fixes #4081. Updated typing for StyleOptions.suggestedActionsStackedOverflow, by @compulim, in PR #4083
  • Fixes #4075. Added box-sizing: border-box to all descendants under Adaptive Cards, by @compulim, in PR #4084
  • Fixes #4104 and #4105. Fixed invalid entry in core/package-lock.json, removed playground/host, and added script to rebase URLs in package-lock.json, by @compulim, in PR #4106
  • Fixes #3933, #3934, #3994 and #4019, for various accessibility improvements, by @compulim, in PR #4108
    • Added a new keyboard help screen
    • Reduce repetitions when reading message content and briefier readings
    • Separated hints for links and interactive widgets
    • Focus trap when focus is on interactive attachments or Adaptive Cards
    • Using role="feed"/role="article" for chat history and its messages
    • Always assign a message to aria-activedescendant for chat history
    • Updated verbiage from "transcript" to "chat history"
    • Fixed overlapping hit zone causing clicking on bottom edge of message bubble may focus on the next activity instead
    • Fixed typings of useFocus and useLocalizer
  • Fixes #3165 and #4094. Allowlist aria-label for links in Markdown and skip unrecognized attributes or invalid curly brackets, by @compulim, in PR #4095
  • Fixes #4190. Recent Markdown curly bracket fix should not break IE11 due to unsupported "u" flag in RegExp, by @compulim, in PR #4191
  • Improved importability in vanilla Webpack 4 without babel-loader, by @compulim, in PR #5322
  • Fixes #4196. Should render/mount to a detached DOM node without errors, by @compulim, in PR #4197
  • ๐Ÿซ Fixes #4031. Updated 05.custom-components/b.send-typing-indicator to reply with message activity, instead of typing activity, in PR #4063, by @compulim

4.14.2 - 2022-09-06

Fixed

  • QFE: Fixes #4403. Patched Unicode CLDR database which caused file upload in Polish to appear blank, by @compulim, in PR #4406

4.14.1 - 2021-09-07

Changed

Fixed

4.14.0 - 2021-07-09

Breaking changes in this release:

  • ๐Ÿ’ฅ A new style option scrollToEndButtonBehavior is introduced to control when the scroll to end button should show (formerly "new messages" button):
    • styleOptions.hideScrollToEndButton has been deprecated. To hide the scroll to end button, set styleOptions.scrollToEndButtonBehavior to false;
    • styleOptions.newMessageButtonFontSize has been renamed to styleOptions.scrollToEndButtonFontSize to better reflect its purpose.

Added

  • Cleanup repo URLs to point to main branch, by @corinagum, in PR #3870
  • Resolves #3557 and #3736. Improved test harness and added browser pooling, by @compulim, in PR #3871
  • Resolves #3788. Added localTimestamp and localTimezone (if available) to all outgoing activities, by @compulim, in PR #3896
  • Resolves #3925. Added scrollToEndButtonBehavior to control when the scroll to end button should show, removed hideScrollToEndButton, and renamed newMessagesButtonFontSize to scrollToEndButtonFontSize, by @compulim, in PR #3926.
    • Values for scrollToEndButtonBehavior:
      • If unset, will maintain same behavior as previous versions, same as "unread";
      • "unread" will show when there are any unread and offscreen messages (default);
      • "any" will show when there are any offscreen messages;
      • false will always hide the button.
    • Added new scrollToEndButtonMiddleware to customize the appearance of the scroll to end button.
  • Resolves #3752. Added typings (*.d.ts) for all public interfaces, by @compulim, in PR #3931 and #3946
  • Resolves #2316. Added blessing/priming of AudioContext when clicking on microphone button, by @compulim, in PR #3974

Changed

Fixed

4.13.0 - 2021-04-05

Added

  • Resolves #3087. External links in Markdown will now be appended with an "open in new window" icon and accessibility label, by @compulim in PR #3817
  • Resolves #2100. Add types declarations for Style Options in api bundle, by @corinagum, in PR #3818

Changed

Fixed

4.12.1 - 2021-03-16

Added

  • Resolves #3777. Added a new adaptiveCardsParserMaxVersion style options for selecting the maximum supported version when parsing an Adaptive Cards, by @compulim in PR #3778

Fixed

  • Fixes #3773. Remove replyToId when using Direct Line Speech adapter, by @compulim in PR #3776
  • ๐Ÿซ Fixes #3632. Update reaction button sample : Add replyToId to the postActivity object, by @amal-khalaf in PR #3769
  • ๐Ÿซ Fixes #2343. Add sample for Direct Line tokens, by @navzam, in PR #3779

4.12.0 - 2021-03-01

Added

  • Resolves #2745. Added new flow layout to suggested actions, by @compulim in PR #3641 and PR #3748
  • Added new style options to customize auto-scroll, by @compulim in PR #3653
    • Set autoScrollSnapOnActivity to true to pause auto-scroll after more than one activity is shown, or a number to pause after X number of activities
    • Set autoScrollSnapOnPage to true to pause auto-scroll when a page is filled, or a number between 0 and 1 to pause after % of page is filled
    • Set autoScrollSnapOnActivityOffset and autoScrollSnapOnPageOffset to a number (in pixels) to overscroll/underscroll after the pause
  • Supports multiple transcripts in a single composition, by @compulim in PR #3653
  • Resolves #3368. Added new sendBoxButtonAlignment for button alignment in multi-line text mode, by @compulim in PR #3668
  • Resolves #3666. Added support of sovereign clouds when using Direct Line Speech, by @compulim in PR #3694
  • Resolves #2996. Added transcript navigation by keyboard navigation keys, by @compulim in PR #3703
  • Resolves #3703. Fixed enterKeyHint props warning, by @compulim in PR #3703
  • Resolves #3544. Send user ID from props to chat adapter, by @timenick in PR [#3544)(https://github.com/microsoft/BotFramework-WebChat/issues/3544).
  • Resolves #3562. Add button word wrap to suggested actions stacked layout, by @corinagum, in PR #3728 and #3745
  • Resolves #3658. Added new containerRole to default style options, by @nfreear in PR #3669
  • Resolves #3754. Added new useObserveTranscriptFocus hook, by @compulim in PR #3755
  • Translation for Yue, by @compulim in PR #3749

Changed

Fixed

  • Fixes #3278. Update HOOKS.md verbiage, by @corinagum in PR #3564
  • Fixes #3534. Remove 2020 deprecations, by @corinagum in PR #3564 and #3728
  • Fixes #3561. Remove MyGet mentions from samples, by @corinagum in PR #3564
  • Fixes #3537. Fix some carousels improperly using aria-roledescription, by @corinagum in PR #3599
  • Fixes #3483. IE11 anchors fixed to open securely without 'noreferrer' or 'noopener', by @corinagum in PR #3607
  • Fixes #3565. Allow strikethrough <s> on sanitize markdown, by @corinagum in PR #3646
  • Fixes #3672. Center the icon of send box buttons vertically and horizontally, by @compulim in PR #3673
  • Fixes #3683. Activities should be acknowledged when user scrolls to bottom, by @compulim in PR #3684
  • Fixes #3431. Race condition between the first bot activity and first user activity should not cause the first bot activity to be delayed, by @compulim in PR #3705
  • Fixes #3676. Activities without text should not generate bogus aria-labelledby, by @compulim in PR #3697
  • Fixes #3625. Update 'no screen reader for custom activity middleware' warning and add screen reader renderer documentation to ACCESSIBILITY.md, by @corinagum in PR #3689
  • Fixes #3453. Fixes plain text file attachments to show download link when uploaded, by @corinagum in PR #3711
  • Fixes #3612. Carousel flippers in suggested actions are given extra padding, by @compulim and @Quirinevwm in PR #3704
  • Fixes #3411. With Direct Line Speech, clicking on microphone button during speech recognition should no longer stop working, by @compulim in PR #3694
    • Although it no locker lock up microphone, clicking on the microphone button has no effect because Direct Line Speech does not support aborting speech recognition
  • Fixes #3421. With Direct Line Speech, after not able to recognize any speech, it should no longer stop working, by @compulim in PR #3694
  • Fixes #3616. [Accessibility documentation] Update activity timestamp grouping to match visual UI, by @amal-khalaf in PR #3708
  • Fixes #3718. Fixed webpack.config.js to use default settings of ['browser', 'module', 'main'] and resolved issues with uuid package in IE11, by @compulim in PR #3726
  • Fixes #3622. Apply pushed button style options and aria-pressed on Adaptive Cards selected buttons, by @amal-khalaf in PR #3710
  • Fixes #3618. Fix Adaptive Cards anchors being disabled when Adaptive Cards is obsolete, by @corinagum in PR #3687
  • Fixes #3747. aria-pressed and aria-role is not properly set on Adaptive Cards submit buttons, by @amal-khalaf in PR #3744
  • Fixes #3750. Debump Node.js engines requirements for some packages to 12.0.0, by @compulim in PR #3753
  • Fixes #3760. Use <ErrorBoundary> to wrap around attachment renderer, by @compulim in PR #3761
  • Fixes #3764. Added role="group" to the focusable transcript to enable aria-activedescendant, by @compulim in PR #3765
  • Fixed re-rendering Adaptive Card should not cause momentarily layout shift, by @OEvgeny, in PR #5494
  • ๐Ÿซ Fixes #3473. Fix samples using activityMiddleware (from 4.10.0 breaking changes), by @corinagum in PR #3601
  • ๐Ÿซ Fixes #3582. Fix Disable Adaptive Cards sample, by @corinagum in PR #3687
  • ๐Ÿซ Fixes #3434. Dispatched event, postBack, or messageBack + activityMiddleware causes fatal error, by @amal-khalaf in PR #3671
  • ๐Ÿซ Fixes #3215. Fix SSO samples window.opener.postMessage, by @corinagum in PR #3696

4.11.0 - 2020-11-04

Added

  • Resolves #3281. Added documentation on speech permissions for Cordova apps on Android, by @corinagum, in PR #3508
  • Resolves #3316. Refactored platform-neutral APIs into the new api package, to be reused on React Native component, in PR #3543 by @compulim
    • The new layering is core -> api -> component (HTML-only) -> bundle
    • Includes composition mode, platform-neutral React hooks, and localization resources
    • Most hooks are available in the new api package. Some hooks are only available on the existing component package, due to their platform dependency or coupling with visual components. For example, Web Worker, 2D canvas, useMicrophoneButton* are not available on the api package
    • Most implementations of middleware are only available in component package due to their coupling with visual components or platform features. Some implementations, (e.g. card action middleware and activity grouping middleware) are available on api package. For example:
      • Carousel layout and stacked layout is only available on component package due to their coupling with their respective visual components
      • For card action middleware, imBack, messageBack and postBack actions are available on api package, but call, openUrl and other platform-dependent actions are only available on component package
    • activityMiddleware, attachmentMiddleware, etc, now support arrays for multiple middleware
  • Resolves #3535. Add Technical Support Guide for guidance on troubleshooting information and navigating the Web Chat repository, by @corinagum, in PR #3645

Changed

Fixed

4.10.1 - 2020-09-09

Breaking changes in this release:

  • ๐Ÿ’ฅ To support Content Security Policy, glamor is being replaced by create-emotion. The CSS hash and rule name is being prefixed with webchat--css with a random value.

Added

  • ๐Ÿซ Added Content Security Policy sample, by @compulim, in PR #3443

Changed

Fixed

  • Fixes #3431. Removed delay of first activity with replyToId pointing to a missing activity, by @compulim in PR #3450
  • Fixes #3439. Use consistent return type in default CardActionContext.getSignInUrl(), by @stevengum in PR #3459
  • Fixes #3444. Make suggested actions container height styleOption flexible, by @corinagum in PR #3456

4.10.0 - 2020-08-18

Breaking changes in this release:

  • ๐Ÿ’ฅ Due to the complexity, we are no longer exposing <CarouselLayout> and <StackedLayout>. Please use <BasicTranscript> to render the transcript instead.
  • ๐Ÿ’ฅ With the new activity grouping feature:
    • Customized avatar cannot be wider than styleOptions.avatarSize. If you want to show a wider avatar, please increase styleOptions.avatarSize.
    • If customized avatar is rendering false, bubble will still be padded to leave a gutter for the empty customized avatar. To hide gutter, please set styleOptions.botAvatarInitials and styleOptions.userAvatarInitials to falsy.
  • ๐Ÿ’ฅ Default bubble nub offset is set to 0, previously "bottom" (or -0)
    • Previously, we put the bubble nub at the bottom while keeping the avatar on top. This is not consistent in the new layout.
  • ๐Ÿ’ฅ By default, we will group avatar per status group.
    • If you want to switch back to previous behaviors, please set styleOptions.showAvatarInGroup to true.
  • ๐Ÿ’ฅ Default botAvatarInitials and userAvatarInitials is changed to undefined, from "" (empty string)
    • When the initials is undefined, no gutter space will be reserved for the avatar.
    • When the initials is "" (empty string), gutter space will be reserved, but not avatar will be shown.
  • ๐Ÿ’ฅ useRenderActivity hook is being deprecated, in favor of the new useCreateActivityRenderer hook.
  • ๐Ÿ’ฅ useRenderActivityStatus hook is being deprecated, in favor of the new useCreateActivityStatusRenderer hook.
  • ๐Ÿ’ฅ useRenderAvatar hook is being deprecated, in favor of the new useCreateAvatarRenderer hook.

Changes in general middleware design

This change will impact middleware which use downstream result.

Previously, when a middleware is called, they are passed with a single argument.

Starting from 4.10.0, multiple arguments could be passed to the middleware. All middleware should pass all arguments to the downstream middleware. This change enables future extension to the middleware pattern.

For example, a passthrough middleware was:

() => next => card => next(card);

It should become:

() =>
   next =>
   (...args) =>
      next(...args);

This also applies to the render function returned by activity middleware. The previous signature was:

() => next => card => children => next(card)(children);

It should become:

() =>
   next =>
   (...setupArgs) =>
   (...renderArgs) =>
      next(...setupArgs)(...renderArgs);

Note: Please read the following section for another change in the activity middleware signature for decorators.

Changes in activity middleware

This change will impact activity middleware used for decoration.

Previously, when an activity middleware hid a specific activity from view, it returned a function, () => false.

Starting in 4.10.0, if an activity needs to be hidden from the view, the middleware should return false instead of () => false. This change allows transcript to correctly group activities and ignore activities that are not in view.

To avoid the TypeError: x is not a function error, all middleware should be aware that downstream middleware may return false instead of a function.

For example, when an event activity is hidden from the view, the terminator middleware will now return false. All decoration middleware should check if the downstream result is false (or falsy value), and return the value as-is to upstream middleware.

Previously, a simple decorator was:

() =>
   next =>
   (...setupArgs) =>
   (...renderArgs) => {
      const render = next(...setupArgs);
      const element = render(...renderArgs);

      return element && <div>{element}</div>;
   };

It should check the result from downstream middleware. If it is falsy, it should return as-is to the upstream middleware:

() => next => (...setupArgs) => {
   const render = next(...setupArgs);

   return render && (...renderArgs) => {
     const element = render(...renderArgs);

     return element && <div>{element}</div>;
   };
}

Added

Changed

Fixed

4.9.2 - 2020-07-14

Added

Fixed

  • Fixes #3265. Fix styling specificity regression on microphone button, by @corinagum in PR #3276
  • Fixes #3279. Fix relative timestamp errored out when showing a time before yesterday, by @compulim in PR #3282
  • Fixes #3236, by @compulim in PR #3287
    • Isolated screen reader only live region for incoming activities and added a new <ScreenReaderActivity> component
    • Removed screen reader text for activities outside of live region, including <CarouselFilmstrip>, <StackedLayout>, <TextContent>, and <Timestamp>
    • Updated some accessibility texts
    • Rectified activities render order by delaying activities with replyToId that reference an activity which is not ACK-ed, for up to 5 seconds
    • Disabled widgets will have tabindex="-1" set, instead of disabled attribute
    • Remove tabindex="-1" from Adaptive Cards container
    • Hide activities of type invoke
  • Fixes #3294. Fix blank screen on missing middlewares, by @compulim in PR #3295
  • Fixes #3297. Fix className prop is not honored in <ReactWebChat>, by @compulim in PR #3300

4.9.1 - 2020-06-09

Breaking changes in this release:

  • ๐Ÿ’ฅ Affecting Adaptive Cards, legacy cards and suggested actions
    • For openUrl card action, we are now allow-listing the URL scheme using the same allow list from the default Markdown + sanitize engine, which includes data, http, https, ftp, mailto, sip, and tel
    • To allow-list a different set of URL schemes, please implement the card action middleware to override this behavior

Added

Changed

Fixed

  • Fixes #1340. Card container should not be focusable if they do not have tapAction, by @compulim in PR #3193
  • Fixed #3196. Cards with tapAction should be executable by ENTER or SPACEBAR key, by @compulim in PR #3197
  • Fixed #3203. "New messages" button should be narrated by assistive technology, by @compulim in PR #3204
  • Fixed #3217. Make sure rel="noopener noreferrer is not sanitized, by @compulim in PR #3220
  • Fixed #3223. Tap an openUrl card action should open URL in a new tab with noopener noreferrer set, by @compulim in PR #3224

4.9.0 - 2020-05-11

Added

Changed

Fixed

  • Fixes #2989. Fix observeOnce to use ES Observable call pattern, by @compulim in PR #2993
  • Fixes #3024. Using bridge package markdown-it-attrs-es5 for consuming markdown-it-attrs for IE11, by @compulim in PR #3025
  • Fixes #2818. Fix user ID is not set when passing to embed as query parameter, by @p-nagpal in PR #3031
  • Fixes #3026. Fix link rel attribute in the renderMarkdown function, by @tdurnford in PR #3033
  • Fixes #2933. Fix text should not be ignored in messageBack action in hero card, by @geea-develop and @compulim in PR #3003
  • Fixes #2562. Fix timestamps should not stop updating, by @compulim in PR #3066
  • Fixes #2953. Direct Line Speech should not synthesize when the speak property is falsy, by @compulim in PR #3059
  • Fixes #2876. messageBack and postBack should send even if both text and value is falsy or undefined, by @compulim in PR #3120
  • Fixes #2668. Disable Web Audio on insecure connections, by @compulim in PR #3079
  • Fixes #2850. After click suggested action, should focus to send box without keyboard, by @compulim in PR #3123
  • Fixes #3133. Associate ARIA labels with buttons in hero card and Adaptive Cards, by @compulim in PR #3146.
    • Remove browser-based detection from <ScreenReaderText> because it is no longer needed.
    • After stripping Markdown syntax for accessibility labels, cache the result to improve rendering performance.
    • Skip stripping Markdown for non-Markdown text content.
  • Fixes #3155. Patch incoming activities with null fields, by @compulim in PR #3154
  • Fixes #2669 and #3136. The "New messages" button will be accessible through TAB key, inbetween the last read and first unread activity, by @compulim in PR #3150.
    • After the "New message" button is clicked, focus will be moved to the first interactive UI of unread activity or the send box.
  • Fixes #3135. If the current widget is disabled, it will keep focus until the next TAB key is pressed, by @compulim in PR #3150

4.8.1 - 2020-04-15

Fixed

  • Fixes #3075. Fix usability issues around accessibility, by @compulim in PR #3076
    • Fix timestamp should not be narrated more than once.
    • Associate the activity text with its attachments, by adding a role="region" to the activity DOM element.
  • Fixes #3074. Keep props.locale when sending to the bot, by @compulim in PR #3095
  • Fixes #3096. Use <ScreenReaderText> instead of aria-label for message bubbles, by @compulim in PR #3097

4.8.0 - 2020-03-05

Breaking changes in this release:

  • Localization
    • ๐Ÿ’ฅ locale prop: zh-YUE has been renamed to yue to conform with Unicode standard. zh-YUE will continue to work with warnings
    • ๐Ÿ’ฅ Most strings have been validated and retranslated by the Microsoft localization team, with the exception of English (US), Egyptian Arabic, Jordan Arabic, and Chinese Yue
      • If the new strings are undesirable, please use the overideLocalizedStrings prop for customization
      • String IDs have been refreshed and now use a standard format
    • ๐Ÿ’ฅ useLocalize and useLocalizeDate is deprecated. Please use useLocalizer and useDateFormatter instead
  • Customizable typing indicator: data and hook related to typing indicator are being revamped in PR #2912
    • ๐Ÿ’ฅ lastTypingAt reducer is deprecated, use typing instead. The newer reducer contains typing indicator from the user
    • ๐Ÿ’ฅ useLastTypingAt() hook is deprecated, use useActiveTyping(duration?: number) instead. For all typing information, pass Infinity to duration argument
  • Customizable activity status: new nextVisibleActivity to control activity status visibility
    • ๐Ÿ’ฅ Previously, we use timestampClassName to control if the activity should show or hide timestamp. The timestampClassName was added as a class attribute the DOM element which contains the timestamp
    • ๐Ÿ’ฅ Today, activity and nextVisibleActivity are passed to the middleware, so the activityRendererMiddleware can decide whether the timestamp should be shown or not. For example, developers can group timestamp based on activity type

Added

Changed

  • Bumped all dependencies to latest versions, by @corinagum in PR #2740
    • Development dependencies
      • Root package
        • @babel/plugin-proposal-class-properties@7.8.3
        • @babel/plugin-proposal-object-rest-spread@7.8.3
        • @babel/plugin-transform-runtime@7.8.3
        • @babel/preset-env@7.8.4
        • @babel/preset-react@7.8.3
        • @babel/preset-typescript@7.8.3
        • @babel/runtime@7.8.4
        • core-js@3.5.0
        • coveralls@3.0.9
        • husky@3.1.0
        • jest-image-snapshot@2.11.1
        • lerna@3.19.0
        • lint-staged@9.5.0
      • Other packages
        • @babel/cli@7.8.4
        • @babel/core@7.8.4
        • @babel/plugin-proposal-class-properties@7.8.3
        • @babel/plugin-proposal-object-rest-spread@7.8.3
        • @babel/plugin-transform-runtime@7.8.3
        • @babel/preset-env@7.8.4
        • @babel/preset-react@7.8.3
        • @babel/preset-typescript@7.8.3
        • @types/node@12.12.18
        • @types/react@16.8.25
        • @typescript-eslint/eslint-plugin@2.12.0
        • @typescript-eslint/parser@2.12.0
        • copy-webpack-plugin@5.1.1
        • eslint-plugin-react-hooks@2.3.0
        • eslint-plugin-react@7.17.0
        • eslint@6.7.2
        • http-proxy-middleware@0.20.0
        • terser-webpack-plugin@2.3.0
        • typescript@3.7.3
        • webpack@4.41.3
    • Production dependencies
      • core
        • math-random@1.0.4
      • bundle
        • @babel/runtime@7.8.4
        • core-js@3.5.0
        • sanitize-html@1.20.0
      • component
        • sanitize-html@1.20.1
      • embed
        • @babel/runtime@7.8.4
        • core-js@3.5.0
  • Resolves #2748, updated build scripts and CI pipeline, by @compulim, in PR #2767
  • component: Bumps react-film@2.0.2, by @tdurnford in PR #2801
  • Removes sendTyping and deprecation notes in PR #2845, by @corinagum, in PR #2918
  • component: Bumps react-dictate-button@1.2.2, by @compulim in PR #2960
  • ๐Ÿซ Bump samples to Web Chat 4.7.0, by @compulim in PR #2726
  • ๐Ÿซ Resolves #2641. Reorganize Web Chat samples, by @corinagum, in PR #2762

Fixed

4.7.1 - 2019-12-13

Changed

  • Moved core-js from dev dependencies to dependencies in botframework-directlinespeech-sdk package, by @tonyanziano, in PR #2727

4.7.0 - 2019-12-12

Breaking changes in this release:

  • ๐Ÿ’ฅ adaptiveCardHostConfig is being renamed to adaptiveCardsHostConfig
    • If you are using the deprecated adaptiveCardHostConfig, we will rename it automatically

Added

  • Resolves #2539, added React hooks for customization, by @compulim, in the following PRs:
    • PR #2540: useActivities, useReferenceGrammarID, useSendBoxShowInterims
    • PR #2541: useStyleOptions, useStyleSet
    • PR #2542: useLanguage, useLocalize, useLocalizeDate
    • PR #2543: useAdaptiveCardsHostConfig, useAdaptiveCardsPackage, useRenderMarkdownAsHTML
    • PR #2544: useAvatarForBot, useAvatarForUser
    • PR #2547: useEmitTypingIndicator, usePeformCardAction, usePostActivity, useSendEvent, useSendFiles, useSendMessage, useSendMessageBack, useSendPostBack
    • PR #2548: useDisabled
    • PR #2549: useSuggestedActions
    • PR #2550: useConnectivityStatus, useGroupTimestamp, useTimeoutForSend, useUserID, useUsername
    • PR #2551: useLastTypingAt, useSendTypingIndicator, useTypingIndicator
    • PR #2552: useFocusSendBox, useScrollToEnd, useSendBoxValue, useSubmitSendBox, useTextBoxSubmit, useTextBoxValue
    • PR #2553: useDictateInterims, useDictateState, useGrammars, useMarkActivityAsSpoken, useMicrophoneButton, useShouldSpeakIncomingActivity, useStartDictate, useStopDictate, useVoiceSelector, useWebSpeechPonyfill
    • PR #2554: useRenderActivity, useRenderAttachment
    • PR #2644: Added internal/useWebChatUIContext for cleaner code
    • PR #2652: Update samples to use hooks
  • Bring your own Adaptive Cards package by specifying adaptiveCardsPackage prop, by @compulim in PR #2543
  • Fixes #2597. Modify watch script to start and add tableflip script for throwing node_modules, by @corinagum in PR #2598
  • Adds Arabic Language Support, by @midineo, in PR #2593
  • Adds AdaptiveCardsComposer and AdaptiveCardsContext for composability for Adaptive Cards, by @compulim, in PR #2648
  • Adds Direct Line Speech support, by @compulim in PR #2621
  • Fixes #2692. Rename sample 17 to 17.a, by @corinagum in PR #2695
  • ๐Ÿซ Clear Conversation After Idle, by @tdurnford, in PR #2375
  • ๐Ÿซ Smart Display, by @compulim, in PR #2649

Changed

  • Bumped all dependencies to latest version, by @compulim, in PR #2533 and PR #2621
    • Development dependencies
      • Root package
        • @azure/storage-blob@12.0.0
        • @babel/plugin-proposal-class-properties@7.5.5
        • @babel/plugin-proposal-object-rest-spread@7.6.2
        • @babel/plugin-transform-runtime@7.6.2
        • @babel/preset-env@7.6.3
        • @babel/preset-react@7.6.3
        • @babel/preset-typescript@7.6.0
        • @babel/runtime@7.6.3
        • babel-jest@24.9.0
        • core-js@3.3.6
        • coveralls@3.0.7
        • husky@3.0.9
        • jest-image-snapshot@2.11.0
        • jest@24.9.0
        • lerna@3.18.3
        • lint-staged@9.4.2
        • selenium-webdriver@4.0.0-alpha.5
        • serve-handler@6.1.2
      • Other packages
        • @babel/cli@7.6.4
        • @babel/core@7.6.4
        • @babel/plugin-proposal-class-properties@7.5.5
        • @babel/plugin-proposal-object-rest-spread@7.6.2
        • @babel/plugin-transform-runtime@7.6.2
        • @babel/preset-env@7.6.3
        • @babel/preset-react@7.6.3
        • @babel/preset-typescript@7.6.0
        • @types/node@12.12.3
        • @types/react@16.9.11
        • @typescript-eslint/eslint-plugin@2.6.0
        • @typescript-eslint/parser@2.6.0
        • babel-plugin-istanbul@5.2.0
        • concurrently@5.0.0
        • copy-webpack-plugin@5.0.4
        • eslint-plugin-prettier@3.1.1
        • eslint-plugin-react-hooks@2.2.0
        • eslint-plugin-react@7.16.0
        • eslint@6.6.0
        • http-proxy-middleware@0.20.0
        • jest@24.9.0
        • terser-webpack-plugin@2.2.1
        • typescript@3.6.4
        • webpack-cli@3.3.10
        • webpack@4.41.2
    • Production dependencies
      • core
        • @babel/runtime@7.6.3
        • jsonwebtoken@8.5.1
        • math-random
        • redux-saga@1.1.1
        • simple-update-in@2.1.1
      • bundle
        • @babel/runtime@7.6.3
        • core-js@3.3.6
        • markdown-it@10.0.0
        • memoize-one@5.1.1
        • sanitize-html@1.19.0
        • url-search-params-polyfill@7.0.0
      • component
        • bytes@3.1.0
        • memoize-one@5.1.1
        • react-dictate-button@1.2.1
        • react-redux@7.1.1
        • remark@11.0.1
        • sanitize-html@1.20.1
        • simple-update-in@2.1.1
        • strip-markdown@3.1.1
      • embed
        • @babel/runtime@7.6.3
        • core-js@3.3.6
  • component: Bumps adaptivecards@1.2.3, by @corinagum in PR #2523
  • Bumps Chrome in Docker to 78.0.3904.70, by @spyip in PR #2545
  • bundle: Webpack will now use webpack-stats-plugin instead of webpack-visualizer-plugin, by @compulim in PR #2584
  • Resolves #2674. Update embed docs, by @corinagum, in PR #2696

Fixed

  • Fixes #2565. Fixed Adaptive Card host config should generate from style options with default options merged, by @compulim in PR #2566
  • Resolves #2337. Remove Cognitive Services Preview warning, by @corinagum in PR #2578
  • Fixes #2559. De-bump remark and strip-markdown, by @corinagum in PR #2576
  • Fixes #2512. Adds check to ensure Adaptive Card's content is an Object, by @tdurnford in PR #2590
  • Fixes #1780, #2277, and #2285. Make Suggested Actions accessible, Fix Markdown card in carousel being read multiple times, and label widgets of Connectivity Status and Suggested Actions containers, by @corinagum in PR #2613
  • Fixes #2608. Focus will return to sendbox after clicking New Messages or a Suggested Actions button, by @corinagum in PR #2628
  • Resolves #2597. Modify watch script to start and add tableflip script for throwing node_modules, by @corinagum in PR #2598
  • Resolves #1835. Adds suggestedActionLayout to defaultStyleOptions, by @spyip, in PR #2596
  • Resolves #2331. Updated timer to use React Hooks, by @spyip in PR #2546
  • Resolves #2620. Adds Chinese localization files, by @spyip in PR #2631
  • Fixes #2639. Fix passed in prop time from string to boolean, by @corinagum in PR #2640
  • component: Updated timer to use functional component, by @spyip in PR #2546
  • Fixes #2651. Add ends-with string module to ES5 bundle, by @corinagum in PR #2654
  • Fixes #2658. Fix rendering of markdown images in IE11, by @corinagum in PR #2659
  • Fixes #2662 and #2666. Fix various issues related to Direct Line Speech, by @compulim in PR #2671
    • Added triple-buffering to reduce pops/cracks.
    • Enable Safari by upsampling to 48000 Hz.
    • Support detailed output format on Web Chat side.
  • Fixes #2700. Enable <SayComposer> and Adaptive Cards in recompose story, in PR #2649
    • Moved <SayComposer> from <BasicTranscript> to <Composer>
    • Moved WebSpeechPonyfill patching code from <BasicTranscript> to <Composer>
  • Fixes #2699. Disable speech recognition and synthesis when using Direct Line Speech under IE11, by @compulim, in PR #2649
  • Fixes #2709. Reduce wasted render of activities by memoizing partial result of <BasicTranscript>, by @compulim in PR #2710
  • Fixes #2710. Suggested actions container should persist for AT, by @corinagum in PR #2710
  • Fixes #2718. Add Object.is polyfill for IE11, by @compulim in PR #2719
  • Fixes #2723. Fix renderMarkdown should not be called if it is undefined in minimal bundle, by @compulim in PR #2724
  • Fixes #2655. "Taking longer than usual to connect" should not show up after reconnect succeeded, by @curiousite and @compulim in PR #2656
  • Fixes #2942. Fix typing indicator should not show up for the user, by @compulim in PR #2950

4.6.0 - 2019-10-31

Breaking changes in this release:

  • ๐Ÿ’ฅ We will no longer include react and react-dom in our NPM package, instead, we will requires peer dependencies of react@^16.8.6 and react-dom@^16.8.6

Added

Changed

Fixed

  • Fixes #2328. Updating submitSendBoxSaga.js to send sendBoxValue.trim(), by @jimmyjames177414 in PR #2331
  • Fixes #2160. Clear suggested actions after clicking on a suggested actions of type openUrl, by @tdurnford in PR #2190
  • Fixes #1954. Estimate clock skew and adjust timestamp for outgoing activity, by @compulim in PR #2208
  • Fixes #2240. Fix microphone button should be re-enabled after error, by @compulim in PR #2241
  • Fixes #2250. Fix React warnings related prop types, by @compulim in PR #2253
  • Fixes #2245. Fix speech synthesis not working on Safari by priming the engine on the first microphone button click, by @compulim in PR #2246
  • Fixes #1514. Added reference grammar ID when using Cognitive Services Speech Services, by @compulim in PR #2246
  • Fixes #1515. Added dynamic phrases when using Cognitive Services Speech Services, by @compulim in PR #2246
  • Fixes #2273. Add ScreenReaderText component, by @corinagum in PR #2278
  • Fixes #2231. Fallback to English (US) if date time formatting failed, by @compulim in PR #2286
  • Fixes #2298. Speech synthesize errors to be ignored, by @compulim in PR #2300
  • Fixes #2243. Fixed sagas to correctly mark activities with speaking attachments, by @tdurnford in PR #2320
  • Fixes #2365. Fix Adaptive Card pushButton appearance on Chrome, by @corinagum in PR #2382
  • Fixes #2379. Speech synthesis can be configured off by passing null, by @compulim in PR #2408
  • Fixes #2418. Connectivity status should not waste-render every 400 ms, by @compulim in PR #2419
  • Fixes #2415 and #2416. Fix receipt card rendering, by @compulim in PR #2417
  • Fixes #2415 and #2416. Fix Adaptive Cards cannot be disabled on-the-fly, by @compulim in PR #2417
  • Fixes #2360. Timestamp should update on language change, by @compulim in PR #2414
  • Fixes #2428. Should interrupt speech synthesis after microphone button is clicked, by @compulim in PR #2429
  • Fixes #2435. Fix microphone button getting stuck on voice-triggered expecting input hint without a speech synthesis engine, by @compulim in PR #2445
  • Fixes #2472. Update samples to use repo's version of React, by @corinagum in PR #2478
  • Fixes #2473. Fix samples 13 using wrong region for Speech Services credentials, by @compulim in PR #2482
  • Fixes #2420. Fix saga error should not result in an unhandled exception, by @compulim in PR #2421
  • Fixes #2513. Fix core-js not loading properly, by @compulim in PR #2514
  • Fixes #2516. Disable microphone input for expecting input hint on Safari, by @compulim in PR #2517 and PR #2520
  • Fixes #2518. Synthesis of bot activities with input hint expecting, should be interruptible, by @compulim in PR #2520
  • Fixes #2519. On Safari, microphone should turn on after synthesis of bot activities with input hint expecting, by @compulim in PR #2520
  • Fixes #2521. webchat-es5.js should not contains non-ES5 code and must be loadable by IE11, by @compulim in PR #2522
  • Fixes #2524. Version was not burnt into source code correctly, by @compulim in PR #2525

4.5.3 - 2019-10-10

Added

Changed

  • bundle: Bumped DirectLineJS to support metadata when uploading attachments, in PR #2433

Fixed

4.5.2 - 2019-08-07

Fixed

4.5.1 - 2019-08-01

Fixed

4.5.0 - 2019-07-10

Added

Changed

Fixed

4.4.1 - 2019-05-02

Added

Changed

Fixed

4.3.0 - 2019-03-04

Added

Changed

Removed

  • botAvatarImage and userAvatarImage props, as they are moved inside styleOptions, in PR #1486
  • sendTyping props is now renamed to sendTypingIndicator, by @compulim, in PR #1584

Fixed

  • Fixes #1360. Added roles to components of Web Chat, by @corinagum in PR #1462
  • Fixes #1409. Added microphone status as screen reader only text, by @corinagum in PR #1490
  • Fixes #1605, #1316, #1341, #1411. Fix color contrast ratios & downloadIcon narrator accessibility by @corinagum in PR #1494
  • Fixes #1264, #1308, #1318, #1334,#1425. Update icons with accessibilty, Sent message accessibility, and fix sample README.md, @corinagum in PR #1506 and #1542
  • Fixes #1512. Fix #1512: fix sanitization of anchors (allow title attributes), by @corinagum in PR #1530
  • Fixes #1499.
    • Fix screen reader handling of name, activity, and timestamp,
    • connectCarouselFilmStrip: Fixed botAvatarInitials and userAvatarInitials functionality from recent name change,
    • BasicTranscript: Fixed user activity should not be recreated after receive ACK from Direct Line,
    • by @corinagum in PR #1528
  • component: Fix #1560, #1625 and #1635. Fixed carousel layout not showing date and alignment issues, by @compulim in PR #1561 and #1641
  • playground: Fixes #1562. Fixed timestamp grouping "Don't group" and added "Don't show timestamp", by @compulim in PR #1563
  • component: Fixes #1576. Rich card without tap should be rendered properly, by @compulim in PR #1577
  • core: Some sagas missed handling successive actions, in PR #1286
  • core: incomingActivitySaga may throw null-ref exception if the first activity is from user, in PR #1286
  • component: Fixes #1328. Should not start microphone if input hint is set to ignoringInput, in PR #1286
  • component: Fixes outgoing typing indicators are not sent and acknowledged properly, in PR #1286
  • Fixes #1402. Add messageBack support, by @corinagum in PR #1581
  • Fixes #1539. Fix outgoing typing indicators are not sent and acknowledged properly, in PR #1541
  • component: Fix #1547. Fixed unhandled activity type should be forwarded to custom middleware, by @compulim in PR #1569
  • playground: Fix #1610. Fixed bot and user avatar initials not working, by @compulim in PR #1611
  • bundle: Fix #1613. Pass conversationId to DirectLineJS constructor, by @neetu-das in PR #1614
  • component: Fix #1626. Fixed Number.isNaN is not available in IE11, by @compulim in PR #1628
  • bundle: Fix #1652. Pass pollingInterval to DirectLineJS constructor, by @neetu-das in PR #1655
  • core: Reworked logic on connect/disconnect for reliability on handling corner cases, by @compulim in PR #1649
  • core: Fix #1521. Add connectivity status component and update localization, by @corinagum in PR #1679
  • core: Fix #1057. Fixed suggested actions destined for other recipients should not show up, by @compulim in PR #1706
  • component: Fixed pt-br locale not being selected, added X minutes ago and missing translations, by @pedropacheco92 in PR #1745
  • component: Fix #1741 where scrollToEndButton does not have type="button"by @corinagum in PR #1743
  • component: Fix #1625 to update README.md by @corinagum in PR #1752

4.2.0 - 2018-12-11

Added

  • Build: Development build now include instrumentation code, updated build scripts
    • npm run build will build for development with instrumentation code
    • npm run prepublishOnly will build for production
    • npm run watch will also run Webpack in watch loop
  • Build: Automated testing using visual regression testing technique in #1323
  • Added French localization, by @tao1 in PR #1327
  • Resolve #1344, by updating README.md and adding validation logic for userID props, in #1447
    • If userID props present and also embedded in Direct Line token, will use the one from Direct Line token
    • If userID props present, they must be string and not prefixed with dl_, to avoid confusion between userID props and Direct Line embedded user ID (which is forgery-proof)
    • If userID props does not pass the validation test or not specified, Web Chat will use default-user instead
  • Added support for Cognitive Services Speech to Text and Text to Speech in PR #1442
  • ๐Ÿซ Backchannel: Inject custom data into every POST_ACTIVITY, in #1331
  • ๐Ÿซ UI: Minimizable Web Chat, in #1290
  • ๐Ÿซ Others: Using Web Chat v3, in #1287
  • ๐Ÿซ Speech: Cognitive Services Speech to Text and Text to Speech (both subscription key and authorization token flow)
  • ๐Ÿซ Speech: Cognitive Services Speech to Text using lexical result (text normalization)

Changed

  • Core: Saga will run after custom middleware, in #1331
    • Custom middleware run before saga to allow user to modify default behavior
  • Build: Bump dependencies, in #1303
    • @babel
      • @babel/cli@7.1.2
      • @babel/core@7.1.2
      • @babel/plugin-proposal-class-properties@7.1.0
      • @babel/plugin-proposal-object-rest-spread@7.0.0
      • @babel/plugin-transform-runtime@7.1.0
      • @babel/preset-env@7.1.0
      • @babel/preset-react@7.0.0
      • @babel/preset-typescript@7.1.0
      • @babel/runtime@7.1.2
    • concurrently@4.0.1
    • jest
      • babel-jest@23.6.0
      • jest@23.6.0
      • ts-jest@23.10.4
    • typescript@3.1.6
    • webpack
      • webpack@4.24.0
      • webpack-command@0.4.2
  • Fixes Russian localization by @odysseus1973 in PR #1377

Fixed

  • Fixes #1397. Patched activities without from field, in PR #1405
  • Fixes #1237. Added new sample called migration, by @corinagum in PR #1398
  • Fixes #1332. Updated sample names and add table to README, by @corinagum in PR #1435
  • Fixes #1125. Added error handling for Adaptive Card JSON render, by @corinagum in PR #1395
  • Build: Webpack watch mode now emits non-minified code for shorter dev RTT, in #1331

4.1.0 - 2018-10-31

Added

  • Initial release of Web Chat v4