Skip to content

Latest commit

 

History

History
2520 lines (2194 loc) · 277 KB

CHANGELOG.md

File metadata and controls

2520 lines (2194 loc) · 277 KB

Changelog

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.

Notes: 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.

[Unreleased]

Breaking changes

  • 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

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

Changed

  • Updated useSuggestedActions to return the activity the suggested actions originated from, in PR #5255, by @compulim
  • Improved focus trap implementation by preserving focus state and removing sentinels, in PR #5243, by @OEvgeny
  • Reworked pre-chat activity layout to use author entity for improved consistency and flexibility, in PR #5274, by @OEvgeny
  • Updated styles for suggested actions and attachments in Fluent theme to improve readability and consistency, in PR #5275, by @OEvgeny
  • Moved from redux-devtools-extension@2.13.9 to @redux/devtools-extension@3.3.0, in PR #5292, by @compulim
  • Enhanced the visual presentation of the Fluent theme copilot variant, in PR #5293, by @OEvgeny
  • Refactored spacing and layout for copilot variant in Fluent theme, improving visual consistency, in PR #5296, by @OEvgeny
  • Added a content generated badge to AI-generated messages, in PR #5298, by @OEvgeny
  • Resolved #4847. Migrated to npm workspaces from lerna, in PR #5301, by @compulim
  • Resolved #5302. Migrated to core-js-pure/Promise.withResolveers from p-defer, in PR #5301, by @compulim
  • Improved message bubble layout in Fluent theme to allow growth beyond 450px up to 75% of container width, in PR #5324, by @OEvgeny

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

Removed

  • Deprecating disabled props and useDisabled hook in favor of new uiState props and useUIState hook, in PR #5276, by @compulim

[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

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

Changed

[4.17.0] - 2024-05-06

Known issues

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

Breaking changes

  • 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
  • (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

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

Changed

[4.16.0] - 2023-11-16

Breaking changes

  • 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

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

Added

Changed

[4.15.9] - 2023-08-25

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

Changed

[4.15.8] - 2023-06-06

Breaking changes

  • 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

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.

Changed

[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

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

Changed

[4.15.6] - 2022-12-01

Fixed

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

Changed

[4.15.5] - 2022-11-16

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

Changed

[4.15.4] - 2022-09-15

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

Changed

[4.15.3] - 2022-08-10

Breaking changes

  • 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

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']

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>

Changes

Samples

[4.15.2] - 2022-05-09

Breaking changes

  • 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

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

Added

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

Changed

[4.15.1] - 2022-03-04

Fixed

  • Fixes #4196. Should render/mount to a detached DOM node without errors, by @compulim, in PR #4197

Breaking changes

  • 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

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

Changed

Samples

[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

Fixed

Changed

[4.14.0] - 2021-07-09

Breaking changes

  • 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

Fixed

Changed

[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

Samples

[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

Samples

[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)(microsoft#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

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

Changed

Samples

[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

Fixed

Changed

Samples

[4.10.1] - 2020-09-09

Breaking changes

  • 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.

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

Changed

Samples

[4.10.0] - 2020-08-18

Breaking changes

  • 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.

Change 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.

Change 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>;
  };
}

Changed

Added

Fixed

  • Fixes #2675. Added alt text to images in suggested actions, by @compulim in PR #3375
  • Fixes #3383. Fixed notification toast should not break when most fields are undefined, by @compulim in PR #3384

Samples

[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

Samples

[4.9.1] - 2020-06-09

Breaking changes

  • 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

  • Resolves #3205. Added Direct Line App Service Extension protocol, by @compulim in PR #3206
  • Resolves #3225. Support allowed scheme with openUrl card action, by @compulim in PR #3226
  • Resolves #3252. Added useObserveScrollPosition and useScrollTo hooks, by @compulim in PR #3268
  • Resolves #3271. Added composition mode, which splits up <ReactWebChat> into <Composer> and <BasicWebChat>, by @compulim in PR #3268

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

Changed

Samples

[4.9.0] - 2020-05-11

Added

  • Resolves #2897. Moved from JUnit to VSTest reporter with file attachments, by @compulim in PR #2990
  • Added aria-label attribute support for default Markdown engine, by @patniko in PR #3022
  • Resolves #2969. Support sovereign cloud for Cognitive Services Speech Services, by @compulim in PR #3040
  • Resolves #2481. Support selecting different audio input devices for Cognitive Services Speech Services, by @compulim in PR #3079
  • Resolves #2850. Added new useFocus hook and deprecating useFocusSendBox hook, by @compulim in PR #3123
    • Modify setFocus argument of useTextBoxSubmit to support main and sendBoxWithoutKeyboard
  • Fixes #1427. Support disabled prop and added actionPerformedClassName in Adaptive Card and other legacy cards, by @compulim in PR #3150

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

Changed

Samples

[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

  • 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

Fixed

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

Samples

[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

  • 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

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

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

Samples

[4.6.0] - 2019-10-31

Breaking changes

  • 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

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

Added

  • Resolves #2157, added emitTypingIndicator action and dispatcher, by @compulim, in PR #2413
  • Resolves #2307. Added options to hide ScrollToEnd button, by @nt-7 in PR #2332
  • Added bubble nub and style options, by @compulim, in PR #2137 and PR #2487
  • Resolves #1808. Added documentation on activity types, by @corinagum in PR #2228
  • Added timestampFormat option to the default style options and created AbsoluteTime component, by @tdurnford, in PR #2295
  • embed: Added ES5 polyfills and dev server, by @compulim, in PR #2315
  • Resolves #2380. Added botAvatarBackgroundColor and userAvatarBackgroundColor to the default style options, by @tdurnford in PR #2384
  • Added full screen capability to IFRAME in the YouTubeContent and VimeoContent components by @tdurnford in PR #2399
  • Resolves #2461, added isomorphic-react and isomorphic-react-dom packages, by @compulim and @corinagum, in PR #2478 and PR #2486
  • Added missing Norwegian (nb-NO) translations, by @taarskog
  • Added missing Italian (it-IT) translations, by @AntoT84
  • Resolve #2481. Support alternative audio input source by adding audioConfig prop to createCognitiveServicesSpeechServicesPonyfillFactory, by @corinagum, in PR #2491
  • Added missing Finnish (fi-FI) translations, by @sk91swd, in PR #2501

Samples

[4.5.3] - 2019-10-10

Changed

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

Fixed

Added

[4.5.2] - 2019-08-07

[4.5.1] - 2019-08-01

Fixed

[4.5.0] - 2019-07-10

Added

Changed

Fixed

Samples

[4.4.1] - 2019-05-02

Added

Changed

Fixed

[4.3.0] - 2019-03-04

Added

  • Resolves #1383. Added options to hide upload button, by @compulim in PR #1491
  • Adds support of avatar image, thru styleOptions.botAvatarImage and styleOptions.userAvatarImage, in PR #1486
  • Adds ability to style sendbox background and text color, thru styleOptions.sendBoxBackground and styleOptions.sendBoxTextColor, in PR #1575
  • core: Adds sendEvent, in PR #1286
  • core: Adds CONNECT_FULFILLING action to workaround redux-saga design decision, in PR #1286
  • component: Added missing Spanish (es-ES) by @schgressive in PR #1615
  • Adds missing Spanish (es-ES) by @schgressive in PR #1615
  • Resolves #1602. Fix suggested actions regression of buttons, by @corinagum in PR #1616
  • component: Allow font family and adaptive cards text color to be set via styleOptions, by @a-b-r-o-w-n, in PR #1670
  • component: Add fallback logic to browser which do not support window.Intl, by @compulim, in PR #1696
  • *: Adds username back to activity, fixed #1321, by @compulim, in PR #1682
  • component: Allow root component height and width customization via styleOptions.rootHeight and styleOptions.rootWidth, by @tonyanziano, in PR #1702
  • component: Added cardActionMiddleware to customize the behavior of card action, by @compulim, in PR #1704
  • bundle: Add watermark and streamUrl parameters to createDirectLine, by @corinagum, in PR #1817
  • component: Added textarea option to SendBox per issues #17 and #124, by @tdurnford, in PR #1889
  • component: Added suggestedAction images per issue #1739, by @tdurnford, in PR #1909

Changed

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

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

Samples

[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

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

Samples

[4.1.0] - 2018-10-31

Added

  • Initial release of Web Chat v4