diff --git a/CHANGELOG.md b/CHANGELOG.md index 39aff2074a..62a9102e3a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,9 +18,25 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] +### Changed +- Added handling of reconnection, by [@compulim](https://github.com/compulim), in PR [#1880](https://github.com/Microsoft/BotFramework-WebChat/pull/1880) + ### Fixed - Fix [#1423](https://github.com/Microsoft/BotFramework-WebChat/issues/1423). Added sample for hosting WebChat in Angular, by [@omarsourour](https://github.com/omarsourour) in PR [#1813](https://github.com/Microsoft/BotFramework-WebChat/pull/1813) - Fix [#1767](https://github.com/Microsoft/BotFramework-WebChat/issues/1767). Remove `cursor: pointer` from buttons, by [@corinagum](https://github.com/corinagum) in PR [#1819](https://github.com/Microsoft/BotFramework-WebChat/pull/1819) +- Fix [#1774](https://github.com/Microsoft/BotFramework-WebChat/issues/1774). Add `styleSetOption` to allow word break. Default to `break-word`, by [@corinagum](https://github.com/corinagum) in PR [#1832](https://github.com/Microsoft/BotFramework-WebChat/pull/1832) +- Fix [#1847](https://github.com/Microsoft/BotFramework-WebChat/issues/1847). Bump react-say, which adds babel-runtime dependency, by [@corinagum](https://github.com/corinagum) in PR [#1849](https://github.com/Microsoft/BotFramework-WebChat/pull/1849) +- Add [#1524](https://github.com/Microsoft/BotFramework-WebChat/issues/1524) Offline UI connecting for the first time, by [@corinagum](https://github.com/corinagum), in PR [#1866](https://github.com/Microsoft/BotFramework-WebChat/pull/1866) +- Fix [#1768](https://github.com/Microsoft/BotFramework-WebChat/issues/1768). Add style option to modify all Send Box borders, by [@corinagum](https://github.com/corinagum) in PR [#1871](https://github.com/Microsoft/BotFramework-WebChat/pull/1871) +- Fix [#1827](https://github.com/Microsoft/BotFramework-WebChat/issues/1827). Remove renderer for unknown activities, by [@corinagum](https://github.com/corinagum) in PR [#1873](https://github.com/Microsoft/BotFramework-WebChat/pull/1873) +- Fix [#1586](https://github.com/Microsoft/BotFramework-WebChat/issues/1586). Fix theming of suggested actions buttons, by [@corinagum](https://github.com/corinagum) in PR [#1883](https://github.com/Microsoft/BotFramework-WebChat/pull/1883) +- Fix [#1837](https://github.com/Microsoft/BotFramework-WebChat/issues/1837), [#1643](https://github.com/Microsoft/BotFramework-WebChat/issues/1643). Fix style conflicts with bootstrap and bump `memoize-one`, by [@corinagum](https://github.com/corinagum) in PR [#1884](https://github.com/Microsoft/BotFramework-WebChat/pull/1884) + +### Changed +- `component`: Bumps to [`react-film@1.2.1-master.86ba8c1`](https://npmjs.com/package/react-film/), by [@corinagum](https://github.com/corinagum) and [@compulim](https://github.com/compulim), in PR [#1826](https://github.com/Microsoft/BotFramework-WebChat/pull/1826) + +### Changed +- `component`: Bumps to [`react-film@1.2.1-master.86ba8c1`](https://npmjs.com/package/react-film/), by [@corinagum](https://github.com/corinagum) and [@compulim](https://github.com/compulim), in PR [#1826](https://github.com/Microsoft/BotFramework-WebChat/pull/1826) ## [4.3.0] - 2019-03-04 @@ -39,6 +55,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - `component`: Allow root component height and width customization via `styleOptions.rootHeight` and `styleOptions.rootWidth`, by [@tonyanziano](https://github.com/tonyanziano), in PR [#1702](https://github.com/Microsoft/BotFramework-WebChat/pull/1702) - `component`: Added `cardActionMiddleware` to customize the behavior of card action, by [@compulim](https://github.com/compulim), in PR [#1704](https://github.com/Microsoft/BotFramework-WebChat/pull/1704) - `bundle`: Add `watermark` and `streamUrl` parameters to createDirectLine, by [@corinagum](https://github.com/corinagum), in PR [#1817](https://github.com/Microsoft/BotFramework-WebChat/pull/1817) +- `component`: Added `textarea` option to `SendBox` per issues [#17](https://github.com/Microsoft/BotFramework-WebChat/issues/17) and [#124](https://github.com/Microsoft/BotFramework-WebChat/issues/124), by [@tdurnford](https://github.com/tdurnford), in PR [#1889](https://github.com/Microsoft/BotFramework-WebChat/pull/1889) ### Changed diff --git a/README.md b/README.md index df038cd780..0d6168e600 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,26 @@ Coverage Status

+# Migrating from v3 to v4 of Web Chat + +There are three possible paths that migration might take when migrating from v3 to v4. First please compare your beginning scenario: + +### My current site uses an `iframe` obtained from Azure Bot Services (which uses v3 of Web Chat). I want to upgrade to v4. +- At this time, it is not possible to upgrade to v4 of Web Chat by pasting an `iframe` into your site. Please follow the implementation of sample [`01.a.getting-started-full-bundle`](https://github.com/Microsoft/BotFramework-WebChat/tree/master/samples/01.a.getting-started-full-bundle) to upgrade to Web Chat v4. + +### My Bot's webpage is rendering Web Chat v3 and uses customization options provided by Web Chat, no customization at all, or very little of my own customization that was not available with Web Chat. +- Please follow the implementation of sample [`01.c.getting-started-migration`](https://github.com/Microsoft/BotFramework-WebChat/tree/master/samples/01.c.getting-started-migration) to convert your webpage from v3 to v4 of Web Chat. + +### My bot's version of Web Chat is from a fork of v3. I have implemented a lot of customization in my version of Web Chat, and I am concerned v4 is not compatible with my needs. +- One of our team's favorite things about v4 of Web Chat is the ability to add customization **without the need to fork Web Chat**. Although this creates additional overhead for v3 users who forked Web Chat previously, we will do our best to support customers making the bump. Please use the following suggestions: + - Take a look at the implementation of sample [`01.c.getting-started-migration`](https://github.com/Microsoft/BotFramework-WebChat/tree/master/samples/01.c.getting-started-migration). This is a great starting place to get Web Chat up and running. + - Next, please go through the [samples list](https://github.com/Microsoft/BotFramework-WebChat/tree/master/samples) to compare your customization requirements to what Web Chat has already provided support for. These samples are made up of commonly asked-for features for Web Chat. + - If one or more of your features is not available in the samples, please look through our [open and closed issues](https://github.com/Microsoft/BotFramework-WebChat/issues?utf8=%E2%9C%93&q=is%3Aissue+), [Samples label](https://github.com/Microsoft/BotFramework-WebChat/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+label%3ASample), and the [Migration Support label](https://github.com/Microsoft/BotFramework-WebChat/issues?q=is%3Aissue+migrate+label%3A%22Migration+Support%22) to search for sample requests and/or customization support for a feature you are looking for. Adding your comment to open issues will help the team prioritize requests that are in high demand, and we encourage participation in our community. + - If you did not find your feature in the list of open requests, please feel free to [file your own request](https://github.com/Microsoft/BotFramework-WebChat/issues/new). Just like the item above, other customers adding comments to your open issue will help us prioritize which features are most commonly needed across Web Chat users. + - Finally, if you need your feature as soon as possible, we welcome [pull requests](https://github.com/Microsoft/BotFramework-WebChat/compare) to Web Chat. If you have the coding experience to implement the feature yourself, we would very much appreciate the additional support! Creating the feature yourself will mean that it is available for your use on Web Chat more quickly, and that other customers looking for the same or similar feature may utilize your contribution. + - Make sure to check out the rest of this `README` to learn more about v4. + + # How to use > For previous versions of Web Chat (v3), visit the [Web Chat v3 branch](https://github.com/Microsoft/BotFramework-WebChat/tree/v3). @@ -40,9 +60,7 @@ Here is how how you can add Web Chat control to your website: ``` -> `userID`, `username`, `locale`, `botAvatarInitials`, and `userAvatarInitials` are all optional parameters to pass into the `renderWebChat` method. - -> If `userID` is not specified, it will default to a random user ID. Multiple users sharing the same user ID is not recommended; their user state will be shared. +> `userID`, `username`, `locale`, `botAvatarInitials`, and `userAvatarInitials` are all optional parameters to pass into the `renderWebChat` method. To learn more about Web Chat props, look at the [Web Chat API Reference](#web-chat-api-reference) section of this `README`. ![Screenshot of Web Chat](https://raw.githubusercontent.com/Microsoft/BotFramework-WebChat/master/doc/weatherquery.png.jpg) @@ -249,6 +267,33 @@ npm run prepublishOnly | [`17.chat-send-history`](https://github.com/Microsoft/BotFramework-WebChat/tree/master/samples/17.chat-send-history) | Advanced tutorial: Demonstrates the ability to save user input and allow the user to step back through previous sent messages. | [Chat Send History Demo](https://microsoft.github.io/BotFramework-WebChat/17.chat-send-history) | | [`18.customization-open-url`](https://github.com/Microsoft/BotFramework-WebChat/tree/master/samples/18.customization-open-url) | Advanced tutorial: Demonstrates how to customize the open URL behavior. | [Customize Open URL Demo](https://microsoft.github.io/BotFramework-WebChat/18.customization-open-url) | + +# Web Chat API Reference + +There are several properties that you might pass into your Web Chat React Component (``) or the `renderWebChat()` method. Feel free to examine the source code starting with [`packages/component/src/Composer.js`](https://github.com/Microsoft/BotFramework-WebChat/blob/master/packages/component/src/Composer.js#L378). Below is a short description of the available props. + +| Property | Description | +|----------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `activityMiddleware` | A chain of middleware, modeled after [Redux middleware](https://medium.com/@jacobp100/you-arent-using-redux-middleware-enough-94ffe991e6), that allows the developer to add new DOM components on the currently existing DOM of Activities. The middleware signature is the following: `options => next => card => children => next(card)(children)`. | +| `activityRenderer` | The "flattened" version of `activityMiddleware`, similar to the [store enhancer](https://github.com/reduxjs/redux/blob/master/docs/Glossary.md#store-enhancer) concept in Redux. | +| `adaptiveCardHostConfig` | Pass in a custom Adaptive Cards host config. | +| `attachmentMiddleware` | A chain of middleware that allows the developer to add their own custom HTML Elements on attachments. The signature is the following: `options => next => card => next(card)`. | +| `attachmentRenderer` | The "flattened" version of `attachmentMiddleware`. | +| `cardActionMiddleware` | A chain of middleware that allows the developer to modify card actions, like Adaptive Cards or suggested actions. The middleware signature is the following: `cardActionMiddleware: () => next => ({ cardAction, getSignInUrl }) => next(cardAction)` | +| `directLine` | Specify the DirectLine object with DirectLine token. | +| `disabled` | Disable the UI (i.e. for presentation mode) of Web Chat. | +| `grammars` | Specify a grammar list for Speech (Bing Speech or Cognitive Services Speech Services). | +| `groupTimeStamp` | Change default settings for timestamp groupings. | +| `locale` | Indicate the default language of Web Chat. Four letter codes (such as `en-US`) are strongly recommended. | +| `renderMarkdown` | Change the default Markdown renderer object. | +| `sendTypingIndicator` | Display a typing signal from the user to the bot to indicate that the user is not idling. | +| `store` | Specify a custom store, e.g. for adding programmatic activity to the bot. | +| `styleOptions` | Object that stores customization values for your styling of Web Chat. For the complete list of (frequently updated) default style options, please see the [defaultStyleSetOptions.js](https://github.com/Microsoft/BotFramework-WebChat/blob/master/packages/component/src/Styles/defaultStyleSetOptions.js) file. | +| `styleSet` | The non-recommended way of overriding styles. | +| `userID` | Specify a userID. There are two ways to specify the `userID`: in props, or in the token when generating the token call (`createDirectLine()`). If both methods are used to specify the userID, the token userID property will be used, and a `console.warn` will appear during runtime. If the `userID` is provided via props but is prefixed with `'dl'`, e.g. `'dl_1234'`, the value will be thrown and a new `ID` generated. If `userID` is not specified, it will default to a random user ID. Multiple users sharing the same user ID is not recommended; their user state will be shared. | +| `username` | Specify a username. | +| `webSpeechPonyFillFactory` | Specify the Web Speech object for text-to-speech and speech-to-text. | + # Contributions Like us? [Star us](https://github.com/Microsoft/BotFramework-WebChat/stargazers). diff --git a/__tests__/.github/HowToQuestions.md b/__tests__/.github/HowToQuestions.md new file mode 100644 index 0000000000..c6b69ff47c --- /dev/null +++ b/__tests__/.github/HowToQuestions.md @@ -0,0 +1,5 @@ +Please feel free to peruse our [samples](https://github.com/Microsoft/BotFramework-WebChat/tree/master/samples), which provide a lot of ideas and foundation for customizing your version of Web Chat. + +'How to' questions such as this one are better suited for [Stack Overflow](https://stackoverflow.com/tags/botframework). Please feel free to post other questions you have about developing your own features over there so the community at large may help out. Thank you! + +Please share the link to your Stack Overflow question on this issue. The Web Chat team will close this issue after a week of inactivity or when the Stack Overflow link has been added. diff --git a/__tests__/__image_snapshots__/chrome-docker/basic-js-long-ur-ls-with-break-all-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/basic-js-long-ur-ls-with-break-all-1-snap.png new file mode 100644 index 0000000000..b1bff1ac7c Binary files /dev/null and b/__tests__/__image_snapshots__/chrome-docker/basic-js-long-ur-ls-with-break-all-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/basic-js-long-ur-ls-with-break-word-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/basic-js-long-ur-ls-with-break-word-1-snap.png new file mode 100644 index 0000000000..ad5165cd0d Binary files /dev/null and b/__tests__/__image_snapshots__/chrome-docker/basic-js-long-ur-ls-with-break-word-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/basic-js-long-ur-ls-with-keep-all-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/basic-js-long-ur-ls-with-keep-all-1-snap.png new file mode 100644 index 0000000000..fef81ab8f5 Binary files /dev/null and b/__tests__/__image_snapshots__/chrome-docker/basic-js-long-ur-ls-with-keep-all-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/basic-js-setup-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/basic-js-setup-1-snap.png index 2e2c4ce57d..0264c7ad7e 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/basic-js-setup-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/basic-js-setup-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/basic-js-unknown-activities-do-not-render-anything-in-the-transcript-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/basic-js-unknown-activities-do-not-render-anything-in-the-transcript-1-snap.png new file mode 100644 index 0000000000..4e037412da Binary files /dev/null and b/__tests__/__image_snapshots__/chrome-docker/basic-js-unknown-activities-do-not-render-anything-in-the-transcript-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/card-action-middleware-js-card-action-open-url-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/card-action-middleware-js-card-action-open-url-1-snap.png index 9af469d374..bef048fa25 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/card-action-middleware-js-card-action-open-url-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/card-action-middleware-js-card-action-open-url-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/card-action-middleware-js-card-action-signin-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/card-action-middleware-js-card-action-signin-1-snap.png index 7dd4dd1d07..7d4763c975 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/card-action-middleware-js-card-action-signin-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/card-action-middleware-js-card-action-signin-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-1-attachment-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-1-attachment-1-snap.png index e81c199c62..026e29534a 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-1-attachment-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-1-attachment-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-1-attachment-with-wide-screen-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-1-attachment-with-wide-screen-1-snap.png index 967be3b05b..6a0deb8445 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-1-attachment-with-wide-screen-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-1-attachment-with-wide-screen-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-2-attachments-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-2-attachments-1-snap.png index 415f0abbe0..0a05c39568 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-2-attachments-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-2-attachments-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-2-attachments-with-wide-screen-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-2-attachments-with-wide-screen-1-snap.png index 5dc679ef7d..461a57ad27 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-2-attachments-with-wide-screen-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-2-attachments-with-wide-screen-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-4-attachments-and-message-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-4-attachments-and-message-1-snap.png index 91302f54fa..4664885e6e 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-4-attachments-and-message-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-4-attachments-and-message-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-4-attachments-and-message-2-snap.png b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-4-attachments-and-message-2-snap.png index f8bc8ce587..63679c505f 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-4-attachments-and-message-2-snap.png and b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-4-attachments-and-message-2-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-4-attachments-and-no-message-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-4-attachments-and-no-message-1-snap.png index d206be292f..7045b3058a 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-4-attachments-and-no-message-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-4-attachments-and-no-message-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-4-attachments-and-no-message-2-snap.png b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-4-attachments-and-no-message-2-snap.png index 690d6b7b21..c6e7a563fc 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-4-attachments-and-no-message-2-snap.png and b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-with-avatar-initials-4-attachments-and-no-message-2-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-1-attachment-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-1-attachment-1-snap.png index b1c8953ec7..35c9140147 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-1-attachment-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-1-attachment-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-1-attachment-with-wide-screen-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-1-attachment-with-wide-screen-1-snap.png index 08bd383227..006d98d569 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-1-attachment-with-wide-screen-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-1-attachment-with-wide-screen-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-2-attachments-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-2-attachments-1-snap.png index f7957e22fc..c13038ebcb 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-2-attachments-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-2-attachments-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-2-attachments-with-wide-screen-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-2-attachments-with-wide-screen-1-snap.png index b5af6dd6e7..489b2a23e0 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-2-attachments-with-wide-screen-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-2-attachments-with-wide-screen-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-4-attachments-and-message-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-4-attachments-and-message-1-snap.png index 2e2c4ce57d..0264c7ad7e 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-4-attachments-and-message-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-4-attachments-and-message-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-4-attachments-and-message-2-snap.png b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-4-attachments-and-message-2-snap.png index 6604410c35..a72518ed50 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-4-attachments-and-message-2-snap.png and b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-4-attachments-and-message-2-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-4-attachments-and-no-message-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-4-attachments-and-no-message-1-snap.png index b21f72bb4e..321beaecfd 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-4-attachments-and-no-message-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-4-attachments-and-no-message-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-4-attachments-and-no-message-2-snap.png b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-4-attachments-and-no-message-2-snap.png index e6b2a12593..f76adfe583 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-4-attachments-and-no-message-2-snap.png and b/__tests__/__image_snapshots__/chrome-docker/carousel-js-carousel-without-avatar-initials-4-attachments-and-no-message-2-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/input-js-textarea-input-multiple-lines-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/input-js-textarea-input-multiple-lines-1-snap.png new file mode 100644 index 0000000000..27f17f7cb7 Binary files /dev/null and b/__tests__/__image_snapshots__/chrome-docker/input-js-textarea-input-multiple-lines-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/input-js-textarea-input-resize-after-delete-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/input-js-textarea-input-resize-after-delete-1-snap.png new file mode 100644 index 0000000000..ba748b153e Binary files /dev/null and b/__tests__/__image_snapshots__/chrome-docker/input-js-textarea-input-resize-after-delete-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/input-js-textarea-input-scroll-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/input-js-textarea-input-scroll-1-snap.png new file mode 100644 index 0000000000..e9060c634b Binary files /dev/null and b/__tests__/__image_snapshots__/chrome-docker/input-js-textarea-input-scroll-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/input-js-textarea-input-shift-enter-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/input-js-textarea-input-shift-enter-1-snap.png new file mode 100644 index 0000000000..f3ff444766 Binary files /dev/null and b/__tests__/__image_snapshots__/chrome-docker/input-js-textarea-input-shift-enter-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/input-js-textarea-input-with-whitespace-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/input-js-textarea-input-with-whitespace-1-snap.png new file mode 100644 index 0000000000..cc17035020 Binary files /dev/null and b/__tests__/__image_snapshots__/chrome-docker/input-js-textarea-input-with-whitespace-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/input-js-textarea-send-on-enter-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/input-js-textarea-send-on-enter-1-snap.png new file mode 100644 index 0000000000..a27971e754 Binary files /dev/null and b/__tests__/__image_snapshots__/chrome-docker/input-js-textarea-send-on-enter-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/offline-ui-js-offline-ui-should-display-send-failed-retry-when-activity-is-not-able-to-send-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/offline-ui-js-offline-ui-should-display-send-failed-retry-when-activity-is-not-able-to-send-1-snap.png index fff88b7ba7..81060a3039 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/offline-ui-js-offline-ui-should-display-send-failed-retry-when-activity-is-not-able-to-send-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/offline-ui-js-offline-ui-should-display-send-failed-retry-when-activity-is-not-able-to-send-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/offline-ui-js-offline-ui-should-display-send-failed-retry-when-activity-is-sent-but-not-acknowledged-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/offline-ui-js-offline-ui-should-display-send-failed-retry-when-activity-is-sent-but-not-acknowledged-1-snap.png index dec19b7184..f8495514c2 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/offline-ui-js-offline-ui-should-display-send-failed-retry-when-activity-is-sent-but-not-acknowledged-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/offline-ui-js-offline-ui-should-display-send-failed-retry-when-activity-is-sent-but-not-acknowledged-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/offline-ui-js-offline-ui-should-display-the-connecting-connectivity-status-when-connecting-for-the-first-time-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/offline-ui-js-offline-ui-should-display-the-connecting-connectivity-status-when-connecting-for-the-first-time-1-snap.png new file mode 100644 index 0000000000..7bb5bf430f Binary files /dev/null and b/__tests__/__image_snapshots__/chrome-docker/offline-ui-js-offline-ui-should-display-the-connecting-connectivity-status-when-connecting-for-the-first-time-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/stacked-js-stacked-with-avatar-initials-1-attachment-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/stacked-js-stacked-with-avatar-initials-1-attachment-1-snap.png index 8f845d0124..8606080348 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/stacked-js-stacked-with-avatar-initials-1-attachment-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/stacked-js-stacked-with-avatar-initials-1-attachment-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/stacked-js-stacked-with-avatar-initials-1-attachment-with-wide-screen-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/stacked-js-stacked-with-avatar-initials-1-attachment-with-wide-screen-1-snap.png index 9c28c6395e..3414e6d15b 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/stacked-js-stacked-with-avatar-initials-1-attachment-with-wide-screen-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/stacked-js-stacked-with-avatar-initials-1-attachment-with-wide-screen-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/stacked-js-stacked-with-avatar-initials-4-attachments-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/stacked-js-stacked-with-avatar-initials-4-attachments-1-snap.png index b5a85292f1..5eb53e1cd2 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/stacked-js-stacked-with-avatar-initials-4-attachments-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/stacked-js-stacked-with-avatar-initials-4-attachments-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/stacked-js-stacked-without-avatar-initials-1-attachment-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/stacked-js-stacked-without-avatar-initials-1-attachment-1-snap.png index 6cc0840a9c..4a81aac469 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/stacked-js-stacked-without-avatar-initials-1-attachment-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/stacked-js-stacked-without-avatar-initials-1-attachment-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/stacked-js-stacked-without-avatar-initials-1-attachment-with-wide-screen-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/stacked-js-stacked-without-avatar-initials-1-attachment-with-wide-screen-1-snap.png index a684f7af2e..b1e62064f9 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/stacked-js-stacked-without-avatar-initials-1-attachment-with-wide-screen-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/stacked-js-stacked-without-avatar-initials-1-attachment-with-wide-screen-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/stacked-js-stacked-without-avatar-initials-4-attachments-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/stacked-js-stacked-without-avatar-initials-4-attachments-1-snap.png index 86f7675086..c21a6bbd2c 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/stacked-js-stacked-without-avatar-initials-4-attachments-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/stacked-js-stacked-without-avatar-initials-4-attachments-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-not-show-suggested-actions-not-destined-for-the-user-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-not-show-suggested-actions-not-destined-for-the-user-1-snap.png index 8591d1a2f9..68d44e981b 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-not-show-suggested-actions-not-destined-for-the-user-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-not-show-suggested-actions-not-destined-for-the-user-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-show-correctly-formatted-buttons-when-suggested-actions-are-displayed-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-show-correctly-formatted-buttons-when-suggested-actions-are-displayed-1-snap.png index 44364b2daa..cafaf22f6d 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-show-correctly-formatted-buttons-when-suggested-actions-are-displayed-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-show-correctly-formatted-buttons-when-suggested-actions-are-displayed-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-show-response-from-bot-and-no-text-from-user-on-imback-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-show-response-from-bot-and-no-text-from-user-on-imback-1-snap.png index 21d170ee2e..241b8295da 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-show-response-from-bot-and-no-text-from-user-on-imback-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-show-response-from-bot-and-no-text-from-user-on-imback-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-show-response-from-bot-and-no-text-from-user-on-messageback-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-show-response-from-bot-and-no-text-from-user-on-messageback-1-snap.png index 9bbf8db483..d8f05a7ea1 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-show-response-from-bot-and-no-text-from-user-on-messageback-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-show-response-from-bot-and-no-text-from-user-on-messageback-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-show-response-from-bot-and-no-text-from-user-on-postback-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-show-response-from-bot-and-no-text-from-user-on-postback-1-snap.png index d2caa144f6..43a540802b 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-show-response-from-bot-and-no-text-from-user-on-postback-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-show-response-from-bot-and-no-text-from-user-on-postback-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-show-response-from-bot-and-text-from-user-on-messageback-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-show-response-from-bot-and-text-from-user-on-messageback-1-snap.png index 9bbf8db483..d8f05a7ea1 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-show-response-from-bot-and-text-from-user-on-messageback-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-show-response-from-bot-and-text-from-user-on-messageback-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-show-response-from-bot-and-text-from-user-on-postback-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-show-response-from-bot-and-text-from-user-on-postback-1-snap.png index c1405861c0..7cfac02f91 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-show-response-from-bot-and-text-from-user-on-postback-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/suggested-actions-js-suggested-actions-command-should-show-response-from-bot-and-text-from-user-on-postback-1-snap.png differ diff --git a/__tests__/__image_snapshots__/chrome-docker/username-js-send-username-in-activity-1-snap.png b/__tests__/__image_snapshots__/chrome-docker/username-js-send-username-in-activity-1-snap.png index 9414fc5a40..a4bf162d71 100644 Binary files a/__tests__/__image_snapshots__/chrome-docker/username-js-send-username-in-activity-1-snap.png and b/__tests__/__image_snapshots__/chrome-docker/username-js-send-username-in-activity-1-snap.png differ diff --git a/__tests__/basic.js b/__tests__/basic.js index 96a1019f6e..b9914c2ffc 100644 --- a/__tests__/basic.js +++ b/__tests__/basic.js @@ -2,21 +2,81 @@ import { imageSnapshotOptions, timeouts } from './constants.json'; import allImagesLoaded from './setup/conditions/allImagesLoaded'; import minNumActivitiesShown from './setup/conditions/minNumActivitiesShown'; +import uiConnected from './setup/conditions/uiConnected'; // selenium-webdriver API doc: // https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/index_exports_WebDriver.html -jest.setTimeout(timeouts.test); +jest.setTimeout( timeouts.test ); -test('setup', async () => { +test( 'setup', async () => { const { driver, pageObjects } = await setupWebDriver(); - await pageObjects.sendMessageViaSendBox('layout carousel'); + await driver.wait( uiConnected(), timeouts.directLine ); + await pageObjects.sendMessageViaSendBox( 'layout carousel' ); - await driver.wait(minNumActivitiesShown(2), 2000); - await driver.wait(allImagesLoaded(), 2000); + await driver.wait( minNumActivitiesShown( 2 ), 2000 ); + await driver.wait( allImagesLoaded(), 2000 ); const base64PNG = await driver.takeScreenshot(); - expect(base64PNG).toMatchImageSnapshot(imageSnapshotOptions); -}); + expect( base64PNG ).toMatchImageSnapshot( imageSnapshotOptions ); +} ); + +test( 'long URLs with break-word', async () => { + const { driver, pageObjects } = await setupWebDriver(); + + await driver.wait( uiConnected(), timeouts.directLine ); + await pageObjects.sendMessageViaSendBox( 'https://subdomain.domain.com/pathname0/pathname1/pathname2/pathname3/pathname4/' ) + + await driver.wait( minNumActivitiesShown( 2 ), 2000 ); + await driver.wait( allImagesLoaded(), 2000 ); + + const base64PNG = await driver.takeScreenshot(); + + expect( base64PNG ).toMatchImageSnapshot( imageSnapshotOptions ); +} ); + +test( 'long URLs with break-all', async () => { + const WEB_CHAT_PROPS = { styleOptions: { messageActivityWordBreak: 'break-all' } }; + + const { driver, pageObjects } = await setupWebDriver( { props: WEB_CHAT_PROPS } ); + + await driver.wait( uiConnected(), timeouts.directLine ); + await pageObjects.sendMessageViaSendBox( 'https://subdomain.domain.com/pathname0/pathname1/pathname2/pathname3/pathname4/' ) + + await driver.wait( minNumActivitiesShown( 2 ), 2000 ); + await driver.wait( allImagesLoaded(), 2000 ); + + const base64PNG = await driver.takeScreenshot(); + + expect( base64PNG ).toMatchImageSnapshot( imageSnapshotOptions ); +} ); + +test( 'long URLs with keep-all', async () => { + const WEB_CHAT_PROPS = { styleOptions: { messageActivityWordBreak: 'keep-all' } }; + + const { driver, pageObjects } = await setupWebDriver( { props: WEB_CHAT_PROPS } ); + + await pageObjects.sendMessageViaSendBox( '箸より重いものを持ったことがない箸より重いものを持ったことがない' ); + + await driver.wait( minNumActivitiesShown( 2 ), 2000 ); + await driver.wait( allImagesLoaded(), 2000 ); + + const base64PNG = await driver.takeScreenshot(); + + expect( base64PNG ).toMatchImageSnapshot( imageSnapshotOptions ); +} ); + +test( 'unknown activities do not render anything in the transcript', async () => { + const { driver, pageObjects } = await setupWebDriver(); + + await driver.wait( uiConnected(), timeouts.directLine ); + await pageObjects.sendMessageViaSendBox( 'unknown activity' ); + + await driver.wait( minNumActivitiesShown( 1 ), 2000 ); + + const base64PNG = await driver.takeScreenshot(); + + expect( base64PNG ).toMatchImageSnapshot( imageSnapshotOptions ); +} ); diff --git a/__tests__/cardActionMiddleware.js b/__tests__/cardActionMiddleware.js index 8a9007b6c2..83582ecf8e 100644 --- a/__tests__/cardActionMiddleware.js +++ b/__tests__/cardActionMiddleware.js @@ -3,8 +3,9 @@ import { By, Key } from 'selenium-webdriver'; import { imageSnapshotOptions, timeouts } from './constants.json'; import allOutgoingActivitiesSent from './setup/conditions/allOutgoingActivitiesSent'; -import suggestedActionsShowed from './setup/conditions/suggestedActionsShowed'; import minNumActivitiesShown from './setup/conditions/minNumActivitiesShown.js'; +import suggestedActionsShowed from './setup/conditions/suggestedActionsShowed'; +import uiConnected from './setup/conditions/uiConnected'; // selenium-webdriver API doc: // https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/index_exports_WebDriver.html @@ -27,6 +28,7 @@ test('card action "openUrl"', async () => { } }); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('card-actions'); await driver.wait(suggestedActionsShowed(), timeouts.directLine); @@ -62,6 +64,7 @@ test('card action "signin"', async () => { } }); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('oauth'); const openUrlButton = await driver.findElement(By.css('[role="log"] ul > li button')); diff --git a/__tests__/carousel.js b/__tests__/carousel.js index 5885be0450..10ce67f954 100644 --- a/__tests__/carousel.js +++ b/__tests__/carousel.js @@ -4,6 +4,7 @@ import { imageSnapshotOptions, timeouts } from './constants.json'; import allImagesLoaded from './setup/conditions/allImagesLoaded'; import minNumActivitiesShown from './setup/conditions/minNumActivitiesShown'; +import uiConnected from './setup/conditions/uiConnected'; // selenium-webdriver API doc: // https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/index_exports_WebDriver.html @@ -14,6 +15,7 @@ describe('carousel without avatar initials', () => { test('4 attachments and no message', async () => { const { driver, pageObjects } = await setupWebDriver(); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('carousel'); await driver.wait(minNumActivitiesShown(2), timeouts.directLine); @@ -37,6 +39,7 @@ describe('carousel without avatar initials', () => { test('4 attachments and message', async () => { const { driver, pageObjects } = await setupWebDriver(); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('layout carousel'); await driver.wait(minNumActivitiesShown(2), timeouts.directLine); @@ -60,6 +63,7 @@ describe('carousel without avatar initials', () => { test('2 attachments', async () => { const { driver, pageObjects } = await setupWebDriver(); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('layout double'); await driver.wait(minNumActivitiesShown(2), timeouts.directLine); @@ -71,6 +75,7 @@ describe('carousel without avatar initials', () => { test('2 attachments with wide screen', async () => { const { driver, pageObjects } = await setupWebDriver({ width: 640 }); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('layout double'); await driver.wait(minNumActivitiesShown(2), timeouts.directLine); @@ -82,6 +87,7 @@ describe('carousel without avatar initials', () => { test('1 attachment', async () => { const { driver, pageObjects } = await setupWebDriver(); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('layout single carousel'); await driver.wait(minNumActivitiesShown(2), timeouts.directLine); @@ -93,6 +99,7 @@ describe('carousel without avatar initials', () => { test('1 attachment with wide screen', async () => { const { driver, pageObjects } = await setupWebDriver({ width: 640 }); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('layout single carousel'); await driver.wait(minNumActivitiesShown(2), timeouts.directLine); @@ -108,6 +115,7 @@ describe('carousel with avatar initials', () => { test('4 attachments and no message', async () => { const { driver, pageObjects } = await setupWebDriver({ props: WEB_CHAT_PROPS }); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('carousel'); await driver.wait(minNumActivitiesShown(2), timeouts.directLine); @@ -131,6 +139,7 @@ describe('carousel with avatar initials', () => { test('4 attachments and message', async () => { const { driver, pageObjects } = await setupWebDriver({ props: WEB_CHAT_PROPS }); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('layout carousel'); await driver.wait(minNumActivitiesShown(2), timeouts.directLine); @@ -154,6 +163,7 @@ describe('carousel with avatar initials', () => { test('2 attachments', async () => { const { driver, pageObjects } = await setupWebDriver({ props: WEB_CHAT_PROPS }); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('layout double'); await driver.wait(minNumActivitiesShown(2), timeouts.directLine); @@ -165,6 +175,7 @@ describe('carousel with avatar initials', () => { test('2 attachments with wide screen', async () => { const { driver, pageObjects } = await setupWebDriver({ props: WEB_CHAT_PROPS, width: 640 }); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('layout double'); await driver.wait(minNumActivitiesShown(2), timeouts.directLine); @@ -176,6 +187,7 @@ describe('carousel with avatar initials', () => { test('1 attachment', async () => { const { driver, pageObjects } = await setupWebDriver({ props: WEB_CHAT_PROPS }); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('layout single carousel'); await driver.wait(minNumActivitiesShown(2), timeouts.directLine); @@ -187,6 +199,7 @@ describe('carousel with avatar initials', () => { test('1 attachment with wide screen', async () => { const { driver, pageObjects } = await setupWebDriver({ props: WEB_CHAT_PROPS, width: 640 }); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('layout single carousel'); await driver.wait(minNumActivitiesShown(2), timeouts.directLine); diff --git a/__tests__/input.js b/__tests__/input.js new file mode 100644 index 0000000000..984af60d41 --- /dev/null +++ b/__tests__/input.js @@ -0,0 +1,90 @@ +import { By, Key } from 'selenium-webdriver'; + +import { imageSnapshotOptions, timeouts } from './constants.json'; + +import allOutgoingActivitiesSent from './setup/conditions/allOutgoingActivitiesSent'; +import minNumActivitiesShown from './setup/conditions/minNumActivitiesShown.js'; + +// selenium-webdriver API doc: +// https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/index_exports_WebDriver.html + +jest.setTimeout(timeouts.test); + +const styleOptions = { sendBoxTextWrap: true }; + +test('textarea input scroll', async () => { + const { driver } = await setupWebDriver({ props: { styleOptions }}); + + const textarea = await driver.findElement(By.tagName('textarea')); + + await textarea.sendKeys('Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.'); + + const base64PNG = await driver.takeScreenshot(); + + expect(base64PNG).toMatchImageSnapshot(imageSnapshotOptions); +}); + +test('textarea input resize after delete', async () => { + const { driver } = await setupWebDriver({ props: { styleOptions }}); + + const textarea = await driver.findElement(By.tagName('textarea')); + + await textarea.sendKeys('Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'); + await textarea.sendKeys(Key.chord([Key.CONTROL, 'a']), Key.BACK_SPACE); + + const base64PNG = await driver.takeScreenshot(); + + expect(base64PNG).toMatchImageSnapshot(imageSnapshotOptions); +}); + +test('textarea input with whitespace', async () => { + const { driver } = await setupWebDriver({ props: { styleOptions }}); + + const textarea = await driver.findElement(By.tagName('textarea')); + + await textarea.sendKeys('Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.'); + + const base64PNG = await driver.takeScreenshot(); + + expect(base64PNG).toMatchImageSnapshot(imageSnapshotOptions); +}); + +test('textarea input shift enter', async () => { + const { driver } = await setupWebDriver({ props: { styleOptions }}); + + const textarea = await driver.findElement(By.tagName('textarea')); + + await textarea.sendKeys('Lorem ipsum dolor sit amet, consectetur adipiscing elit,'); + await textarea.sendKeys(Key.chord([Key.SHIFT, Key.ENTER])); + await textarea.sendKeys('sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.'); + + const base64PNG = await driver.takeScreenshot(); + + expect(base64PNG).toMatchImageSnapshot(imageSnapshotOptions); +}); + +test('textarea input multiple lines', async () => { + const { driver } = await setupWebDriver({ props: { styleOptions }}); + + const textarea = await driver.findElement(By.tagName('textarea')); + + await textarea.sendKeys('Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.'); + + const base64PNG = await driver.takeScreenshot(); + + expect(base64PNG).toMatchImageSnapshot(imageSnapshotOptions); +}); + +test('textarea send on enter', async () => { + const { driver } = await setupWebDriver({ props: { styleOptions }}); + + const textarea = await driver.findElement(By.tagName('textarea')); + + await textarea.sendKeys('Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.', Key.ENTER); + await driver.wait(minNumActivitiesShown(2), timeouts.directLine); + await driver.wait(allOutgoingActivitiesSent(), timeouts.directLine); + + const base64PNG = await driver.takeScreenshot(); + + expect(base64PNG).toMatchImageSnapshot(imageSnapshotOptions); +}); diff --git a/__tests__/offlineUI.js b/__tests__/offlineUI.js index 7258e6883c..a344021295 100644 --- a/__tests__/offlineUI.js +++ b/__tests__/offlineUI.js @@ -1,6 +1,7 @@ import { By, Condition, Key } from 'selenium-webdriver'; import { imageSnapshotOptions, timeouts } from './constants.json'; +import uiConnected from './setup/conditions/uiConnected'; // selenium-webdriver API doc: // https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/index_exports_WebDriver.html @@ -110,7 +111,7 @@ describe('offline UI', async () => { document.head.appendChild(scriptElement); }) }); - + await driver.wait(uiConnected(), 10000); const input = await driver.findElement(By.css('input[type="text"]')); await input.sendKeys('42', Key.RETURN); @@ -164,6 +165,7 @@ describe('offline UI', async () => { }) }); + await driver.wait(uiConnected(), timeouts.directLine); const input = await driver.findElement(By.css('input[type="text"]')); await input.sendKeys('42', Key.RETURN); @@ -173,4 +175,43 @@ describe('offline UI', async () => { expect(base64PNG).toMatchImageSnapshot(imageSnapshotOptions); }); + + test('should display the "Connecting..." connectivity status when connecting for the first time', async() => { + const { driver } = await setupWebDriver({ + createDirectline: options => { + const workingDirectLine = window.WebChat.createDirectLine(options); + + return { + activity$: workingDirectLine.activity$, + postActivity: workingDirectLine.postActivity.bind(workingDirectLine), + + connectionStatus$: new Observable(observer => { + const subscription = workingDirectLine.connectionStatus$.subscribe( { + complete: () => observer.complete(), + error: err => observer.error(err), + next: connectionStatus => { + connectionStatus == 1 && observer.next(connectionStatus); + } + }); + + return subscription.unsubscribe(); + }) + }; + }, + pingBotOnLoad: false, + setup: () => new Promise(resolve => { + const scriptElement = document.createElement('script'); + + scriptElement.onload = resolve; + scriptElement.setAttribute('src', 'https://unpkg.com/core-js@2.6.3/client/core.min.js'); + + document.head.appendChild(scriptElement); + + }) + }); + + const base64PNG = await driver.takeScreenshot(); + + // Snapshots are intentionally not compared because the spinner will cause the snapshot to fail regularly + }); }); diff --git a/__tests__/setup/conditions/uiConnected.js b/__tests__/setup/conditions/uiConnected.js new file mode 100644 index 0000000000..22e6113144 --- /dev/null +++ b/__tests__/setup/conditions/uiConnected.js @@ -0,0 +1,14 @@ +import { Condition } from 'selenium-webdriver'; +import directLineConnected from './directLineConnected'; + +export default function () { + return new Condition( 'for UI to connect', async driver => { + const connected = await driver.wait( directLineConnected(), 5000 ); + + if ( connected ) { + await driver.sleep( 500 ); + } + + return connected; + } ); +} diff --git a/__tests__/stacked.js b/__tests__/stacked.js index d40a007c14..9947c2556e 100644 --- a/__tests__/stacked.js +++ b/__tests__/stacked.js @@ -2,6 +2,7 @@ import { imageSnapshotOptions, timeouts } from './constants.json'; import allImagesLoaded from './setup/conditions/allImagesLoaded'; import minNumActivitiesShown from './setup/conditions/minNumActivitiesShown'; +import uiConnected from './setup/conditions/uiConnected'; // selenium-webdriver API doc: // https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/index_exports_WebDriver.html @@ -12,6 +13,7 @@ describe('stacked without avatar initials', () => { test('4 attachments', async () => { const { driver, pageObjects } = await setupWebDriver(); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('layout stacked'); await driver.wait(minNumActivitiesShown(2), timeouts.directLine); @@ -23,6 +25,7 @@ describe('stacked without avatar initials', () => { test('1 attachment', async () => { const { driver, pageObjects } = await setupWebDriver(); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('layout single'); await driver.wait(minNumActivitiesShown(2), timeouts.directLine); @@ -34,6 +37,7 @@ describe('stacked without avatar initials', () => { test('1 attachment with wide screen', async () => { const { driver, pageObjects } = await setupWebDriver({ width: 640 }); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('layout single'); await driver.wait(minNumActivitiesShown(2), timeouts.directLine); @@ -49,6 +53,7 @@ describe('stacked with avatar initials', () => { test('4 attachments', async () => { const { driver, pageObjects } = await setupWebDriver({ props: WEB_CHAT_PROPS }); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('layout stacked'); await driver.wait(minNumActivitiesShown(2), timeouts.directLine); @@ -60,6 +65,7 @@ describe('stacked with avatar initials', () => { test('1 attachment', async () => { const { driver, pageObjects } = await setupWebDriver({ props: WEB_CHAT_PROPS }); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('layout single'); await driver.wait(minNumActivitiesShown(2), timeouts.directLine); @@ -71,6 +77,7 @@ describe('stacked with avatar initials', () => { test('1 attachment with wide screen', async () => { const { driver, pageObjects } = await setupWebDriver({ props: WEB_CHAT_PROPS, width: 640 }); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('layout single'); await driver.wait(minNumActivitiesShown(2), timeouts.directLine); diff --git a/__tests__/suggestedActions.js b/__tests__/suggestedActions.js index 84b3a2b50e..7bab1e6a84 100644 --- a/__tests__/suggestedActions.js +++ b/__tests__/suggestedActions.js @@ -5,6 +5,7 @@ import { imageSnapshotOptions, timeouts } from './constants.json'; import allOutgoingActivitiesSent from './setup/conditions/allOutgoingActivitiesSent'; import minNumActivitiesShown from './setup/conditions/minNumActivitiesShown'; import suggestedActionsShowed from './setup/conditions/suggestedActionsShowed'; +import uiConnected from './setup/conditions/uiConnected'; // selenium-webdriver API doc: // https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/index_exports_WebDriver.html @@ -15,6 +16,7 @@ describe('suggested-actions command', async () => { test('should show correctly formatted buttons when suggested actions are displayed', async() => { const { driver, pageObjects } = await setupWebDriver(); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('suggested-actions'); await driver.wait(suggestedActionsShowed(), timeouts.directLine); @@ -27,6 +29,7 @@ describe('suggested-actions command', async () => { test('should show response from bot and no text from user on imback', async () => { const { driver, pageObjects } = await setupWebDriver(); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('suggested-actions'); await driver.wait(suggestedActionsShowed(), timeouts.directLine); @@ -47,6 +50,7 @@ describe('suggested-actions command', async () => { test('should show response from bot and no text from user on postback', async () => { const { driver, pageObjects } = await setupWebDriver(); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('suggested-actions'); await driver.wait(suggestedActionsShowed(), timeouts.directLine); @@ -67,6 +71,7 @@ describe('suggested-actions command', async () => { test('should show response from bot and text from user on postback', async () => { const { driver, pageObjects } = await setupWebDriver(); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('suggested-actions'); await driver.wait(suggestedActionsShowed(), timeouts.directLine); @@ -87,6 +92,7 @@ describe('suggested-actions command', async () => { test('should show response from bot and no text from user on messageback', async () => { const { driver, pageObjects } = await setupWebDriver(); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('suggested-actions'); await driver.wait(suggestedActionsShowed(), timeouts.directLine); @@ -107,6 +113,7 @@ describe('suggested-actions command', async () => { test('should show response from bot and text from user on messageback', async () => { const { driver, pageObjects } = await setupWebDriver(); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('suggested-actions'); await driver.wait(suggestedActionsShowed(), timeouts.directLine); @@ -127,6 +134,7 @@ describe('suggested-actions command', async () => { test('should not show suggested actions not destined for the user', async () => { const { driver, pageObjects } = await setupWebDriver(); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('suggested-actions others'); await driver.wait(minNumActivitiesShown(2), timeouts.directLine); diff --git a/__tests__/username.js b/__tests__/username.js index 3789dc61a8..0daa840efa 100644 --- a/__tests__/username.js +++ b/__tests__/username.js @@ -1,6 +1,7 @@ import { imageSnapshotOptions, timeouts } from './constants.json'; import minNumActivitiesShown from './setup/conditions/minNumActivitiesShown'; +import uiConnected from './setup/conditions/uiConnected'; // selenium-webdriver API doc: // https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/index_exports_WebDriver.html @@ -10,6 +11,7 @@ jest.setTimeout(timeouts.test); test('send username in activity', async () => { const { driver, pageObjects } = await setupWebDriver(); + await driver.wait(uiConnected(), timeouts.directLine); await pageObjects.sendMessageViaSendBox('user name'); await driver.wait(minNumActivitiesShown(2), timeouts.directLine); diff --git a/package-lock.json b/package-lock.json index ec6b32169d..91b36d56cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -988,16 +988,16 @@ } }, "@lerna/changed": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-3.13.1.tgz", - "integrity": "sha512-BRXitEJGOkoudbxEewW7WhjkLxFD+tTk4PrYpHLyCBk63pNTWtQLRE6dc1hqwh4emwyGncoyW6RgXfLgMZgryw==", + "version": "3.13.2", + "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-3.13.2.tgz", + "integrity": "sha512-mcmkxUMR0J4ZyRyVUrdDJl4ZsdHDgdA1xQcbdB4LZvAE/E2lNlPcEfAfbfs08VnRiqvFOqcczbzBq10hvSFg4w==", "dev": true, "requires": { "@lerna/collect-updates": "3.13.0", "@lerna/command": "3.13.1", "@lerna/listable": "3.13.0", "@lerna/output": "3.13.0", - "@lerna/version": "3.13.1" + "@lerna/version": "3.13.2" } }, "@lerna/check-working-tree": { @@ -1125,9 +1125,9 @@ }, "dependencies": { "camelcase": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.2.0.tgz", - "integrity": "sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true } } @@ -1382,15 +1382,16 @@ } }, "@lerna/npm-publish": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-3.13.0.tgz", - "integrity": "sha512-y4WO0XTaf9gNRkI7as6P2ItVDOxmYHwYto357fjybcnfXgMqEA94c3GJ++jU41j0A9vnmYC6/XxpTd9sVmH9tA==", + "version": "3.13.2", + "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-3.13.2.tgz", + "integrity": "sha512-HMucPyEYZfom5tRJL4GsKBRi47yvSS2ynMXYxL3kO0ie+j9J7cb0Ir8NmaAMEd3uJWJVFCPuQarehyfTDZsSxg==", "dev": true, "requires": { "@lerna/run-lifecycle": "3.13.0", "figgy-pudding": "^3.5.1", "fs-extra": "^7.0.0", "libnpmpublish": "^1.1.1", + "npm-package-arg": "^6.1.0", "npmlog": "^4.1.2", "pify": "^3.0.0", "read-package-json": "^2.0.13" @@ -1502,9 +1503,9 @@ } }, "@lerna/publish": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-3.13.1.tgz", - "integrity": "sha512-KhCJ9UDx76HWCF03i5TD7z5lX+2yklHh5SyO8eDaLptgdLDQ0Z78lfGj3JhewHU2l46FztmqxL/ss0IkWHDL+g==", + "version": "3.13.2", + "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-3.13.2.tgz", + "integrity": "sha512-L8iceC3Z2YJnlV3cGbfk47NSh1+iOo1tD65z+BU3IYLRpPnnSf8i6BORdKV8rECDj6kjLYvL7//2yxbHy7shhA==", "dev": true, "requires": { "@lerna/batch-packages": "3.13.0", @@ -1516,7 +1517,7 @@ "@lerna/log-packed": "3.13.0", "@lerna/npm-conf": "3.13.0", "@lerna/npm-dist-tag": "3.13.0", - "@lerna/npm-publish": "3.13.0", + "@lerna/npm-publish": "3.13.2", "@lerna/output": "3.13.0", "@lerna/pack-directory": "3.13.1", "@lerna/prompt": "3.13.0", @@ -1524,7 +1525,7 @@ "@lerna/run-lifecycle": "3.13.0", "@lerna/run-parallel-batches": "3.13.0", "@lerna/validation-error": "3.13.0", - "@lerna/version": "3.13.1", + "@lerna/version": "3.13.2", "figgy-pudding": "^3.5.1", "fs-extra": "^7.0.0", "libnpmaccess": "^3.0.1", @@ -1653,9 +1654,9 @@ } }, "@lerna/version": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/@lerna/version/-/version-3.13.1.tgz", - "integrity": "sha512-WpfKc5jZBBOJ6bFS4atPJEbHSiywQ/Gcd+vrwaEGyQHWHQZnPTvhqLuq3q9fIb9sbuhH5pSY6eehhuBrKqTnjg==", + "version": "3.13.2", + "resolved": "https://registry.npmjs.org/@lerna/version/-/version-3.13.2.tgz", + "integrity": "sha512-85AEn6Cx5p1VOejEd5fpTyeDCx6yejSJCgbILkx+gXhLhFg2XpFzLswMd+u71X7RAttWHvhzeKJAw4tWTXDvpQ==", "dev": true, "requires": { "@lerna/batch-packages": "3.13.0", @@ -1709,9 +1710,9 @@ "dev": true }, "@octokit/endpoint": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-3.1.3.tgz", - "integrity": "sha512-vAWzeoj9Lzpl3V3YkWKhGzmDUoMfKpyxJhpq74/ohMvmLXDoEuAGnApy/7TRi3OmnjyX2Lr+e9UGGAD0919ohA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-4.0.0.tgz", + "integrity": "sha512-b8sptNUekjREtCTJFpOfSIL4SKh65WaakcyxWzRcSPOk5RxkZJ/S8884NGZFxZ+jCB2rDURU66pSHn14cVgWVg==", "dev": true, "requires": { "deepmerge": "3.2.0", @@ -1721,36 +1722,41 @@ } }, "@octokit/plugin-enterprise-rest": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-2.1.2.tgz", - "integrity": "sha512-EWKrEqhSgzqWXI9DuEsEI691PNJppm/a4zW62//te27I8pYI5zSNVR3wtNUk0NWPlvs7054YzGZochwbUbhI8A==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-2.2.2.tgz", + "integrity": "sha512-CTZr64jZYhGWNTDGlSJ2mvIlFsm9OEO3LqWn9I/gmoHI4jRBp4kpHoFYNemG4oA75zUAcmbuWblb7jjP877YZw==", "dev": true }, "@octokit/request": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-2.4.0.tgz", - "integrity": "sha512-Bm2P0duVRUeKhyepNyFg5GX+yhCK71fqdtpsw5Rz+PQPjSha8HYwPMF5QfpzpD8b6/Xl3xhTgu3V90W362gZ1A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-3.0.0.tgz", + "integrity": "sha512-DZqmbm66tq+a9FtcKrn0sjrUpi0UaZ9QPUCxxyk/4CJ2rseTMpAWRf6gCwOSUCzZcx/4XVIsDk+kz5BVdaeenA==", "dev": true, "requires": { - "@octokit/endpoint": "^3.1.1", + "@octokit/endpoint": "^4.0.0", + "deprecation": "^1.0.1", "is-plain-object": "^2.0.4", "node-fetch": "^2.3.0", + "once": "^1.4.0", "universal-user-agent": "^2.0.1" } }, "@octokit/rest": { - "version": "16.16.4", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.16.4.tgz", - "integrity": "sha512-9Itw0hQgEf26hg4IOsI7HYKbJBRYaTAAD0pA9ZxXyXjzTUU36Wx+EWkl8w4PNSdX2/79Ggdl6ekD5z1h3jyc7A==", + "version": "16.23.4", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.23.4.tgz", + "integrity": "sha512-fQuYQ0vgNLkzeN0KEsqN0aS6EPzcuaePT5M5cE5qnKayaxFwRIQOMhNR/rTmEqo/zDK/20ZAcHsgLKodSsJtww==", "dev": true, "requires": { - "@octokit/request": "2.4.0", + "@octokit/request": "3.0.0", + "atob-lite": "^2.0.0", "before-after-hook": "^1.4.0", "btoa-lite": "^1.0.0", + "deprecation": "^1.0.1", "lodash.get": "^4.4.2", "lodash.set": "^4.3.2", "lodash.uniq": "^4.5.0", "octokit-pagination-methods": "^1.1.0", + "once": "^1.4.0", "universal-user-agent": "^2.0.0", "url-template": "^2.0.8" } @@ -2058,6 +2064,12 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, + "atob-lite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz", + "integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=", + "dev": true + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -2270,9 +2282,9 @@ } }, "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", + "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==", "dev": true }, "brace-expansion": { @@ -2849,9 +2861,9 @@ } }, "conventional-changelog-preset-loader": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.0.2.tgz", - "integrity": "sha512-pBY+qnUoJPXAXXqVGwQaVmcye05xi6z231QM98wHWamGAmu/ghkBprQAwmF5bdmyobdVxiLhPY3PrCfSeUNzRQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.1.1.tgz", + "integrity": "sha512-K4avzGMLm5Xw0Ek/6eE3vdOXkqnpf9ydb68XYmCc16cJ99XMMbc2oaNMuPwAsxVK6CC1yA4/I90EhmWNj0Q6HA==", "dev": true }, "conventional-changelog-writer": { @@ -2898,19 +2910,78 @@ } }, "conventional-recommended-bump": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-4.0.4.tgz", - "integrity": "sha512-9mY5Yoblq+ZMqJpBzgS+RpSq+SUfP2miOR3H/NR9drGf08WCrY9B6HAGJZEm6+ThsVP917VHAahSOjM6k1vhPg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-4.1.1.tgz", + "integrity": "sha512-JT2vKfSP9kR18RXXf55BRY1O3AHG8FPg5btP3l7LYfcWJsiXI6MCf30DepQ98E8Qhowvgv7a8iev0J1bEDkTFA==", "dev": true, "requires": { - "concat-stream": "^1.6.0", - "conventional-changelog-preset-loader": "^2.0.2", - "conventional-commits-filter": "^2.0.1", - "conventional-commits-parser": "^3.0.1", + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.1.1", + "conventional-commits-filter": "^2.0.2", + "conventional-commits-parser": "^3.0.2", "git-raw-commits": "2.0.0", "git-semver-tags": "^2.0.2", "meow": "^4.0.0", "q": "^1.5.1" + }, + "dependencies": { + "concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "conventional-commits-filter": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.2.tgz", + "integrity": "sha512-WpGKsMeXfs21m1zIw4s9H5sys2+9JccTzpN6toXtxhpw2VNF2JUXwIakthKBy+LN4DvJm+TzWhxOMWOs1OFCFQ==", + "dev": true, + "requires": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + } + }, + "conventional-commits-parser": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.2.tgz", + "integrity": "sha512-y5eqgaKR0F6xsBNVSQ/5cI5qIF3MojddSUi1vKIggRkqUTbkqFKH9P5YX/AT1BVZp9DtSzBTIkvjyVLotLsVog==", + "dev": true, + "requires": { + "JSONStream": "^1.0.4", + "is-text-path": "^1.0.0", + "lodash": "^4.2.1", + "meow": "^4.0.0", + "split2": "^2.0.0", + "through2": "^3.0.0", + "trim-off-newlines": "^1.0.0" + } + }, + "readable-stream": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", + "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "through2": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", + "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", + "dev": true, + "requires": { + "readable-stream": "2 || 3" + } + } } }, "convert-source-map": { @@ -2949,15 +3020,14 @@ "dev": true }, "cosmiconfig": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.1.0.tgz", - "integrity": "sha512-kCNPvthka8gvLtzAxQXvWo4FxqRB+ftRZyPZNuab5ngvM9Y7yw7hbEysglptLgpkGX9nAOKTBVkHUAe8xtYR6Q==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.0.tgz", + "integrity": "sha512-nxt+Nfc3JAqf4WIWd0jXLjTJZmsPLrA9DDc4nRw2KFJQJK7DNooqSXrNI7tzLG50CF8axczly5UV929tBmh/7g==", "dev": true, "requires": { "import-fresh": "^2.0.0", "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", - "lodash.get": "^4.4.2", + "js-yaml": "^3.13.0", "parse-json": "^4.0.0" } }, @@ -3196,6 +3266,12 @@ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true }, + "deprecation": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-1.0.1.tgz", + "integrity": "sha512-ccVHpE72+tcIKaGMql33x5MAjKQIZrk+3x2GbJ7TeraUCZWHoT+KSZpoC+JQFsUBlSTXUrBaGiF0j6zVTepPLg==", + "dev": true + }, "detect-indent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", @@ -3620,9 +3696,9 @@ }, "dependencies": { "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -4759,12 +4835,12 @@ "dev": true }, "handlebars": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.0.tgz", - "integrity": "sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.1.tgz", + "integrity": "sha512-3Zhi6C0euYZL5sM0Zcy7lInLXKQ+YLcF/olbN010mzGQ4XVm50JeyBnMqofHh696GrciGruC7kCcApPDJvVgwA==", "dev": true, "requires": { - "async": "^2.5.0", + "neo-async": "^2.6.0", "optimist": "^0.6.1", "source-map": "^0.6.1", "uglify-js": "^3.1.4" @@ -5137,18 +5213,18 @@ } }, "strip-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", - "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "^4.0.0" + "ansi-regex": "^4.1.0" }, "dependencies": { "ansi-regex": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", - "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true } } @@ -6467,9 +6543,9 @@ "dev": true }, "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -6680,14 +6756,14 @@ "dev": true }, "lerna": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-3.13.1.tgz", - "integrity": "sha512-7kSz8LLozVsoUNTJzJzy+b8TnV9YdviR2Ee2PwGZSlVw3T1Rn7kOAPZjEi+3IWnOPC96zMPHVmjCmzQ4uubalw==", + "version": "3.13.2", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-3.13.2.tgz", + "integrity": "sha512-2iliiFVAMNqaKsVSJ90p49dur93d5RlktotAJNp+uuHsCuIIAvwceqmSgDQCmWu4GkgAom+5uy//KV6F9t8fLA==", "dev": true, "requires": { "@lerna/add": "3.13.1", "@lerna/bootstrap": "3.13.1", - "@lerna/changed": "3.13.1", + "@lerna/changed": "3.13.2", "@lerna/clean": "3.13.1", "@lerna/cli": "3.13.0", "@lerna/create": "3.13.1", @@ -6697,9 +6773,9 @@ "@lerna/init": "3.13.1", "@lerna/link": "3.13.1", "@lerna/list": "3.13.1", - "@lerna/publish": "3.13.1", + "@lerna/publish": "3.13.2", "@lerna/run": "3.13.1", - "@lerna/version": "3.13.1", + "@lerna/version": "3.13.2", "import-local": "^1.0.0", "npmlog": "^4.1.2" } @@ -6820,6 +6896,12 @@ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", "dev": true }, + "lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", + "dev": true + }, "lodash.set": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", @@ -6892,9 +6974,9 @@ } }, "macos-release": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.0.0.tgz", - "integrity": "sha512-iCM3ZGeqIzlrH7KxYK+fphlJpCCczyHXc+HhRVbEu9uNTCrzYJjvvtefzeKTCVHd5AP/aD/fzC80JZ4ZP+dQ/A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.2.0.tgz", + "integrity": "sha512-iV2IDxZaX8dIcM7fG6cI46uNmHUxHE4yN+Z8tKHAW1TBPMZDIKHf/3L+YnOuj/FK9il14UaVdHmiQ1tsi90ltA==", "dev": true }, "make-dir": { @@ -7249,6 +7331,12 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "neo-async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", + "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", + "dev": true + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -7670,12 +7758,12 @@ } }, "os-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.0.0.tgz", - "integrity": "sha512-7c74tib2FsdFbQ3W+qj8Tyd1R3Z6tuVRNNxXjJcZ4NgjIEQU9N/prVMqcW29XZPXGACqaXN3jq58/6hoaoXH6g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz", + "integrity": "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==", "dev": true, "requires": { - "macos-release": "^2.0.0", + "macos-release": "^2.2.0", "windows-release": "^3.1.0" } }, @@ -7838,9 +7926,9 @@ } }, "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", "dev": true }, "tar": { @@ -8901,9 +8989,9 @@ } }, "socks": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.2.3.tgz", - "integrity": "sha512-+2r83WaRT3PXYoO/1z+RDEBE7Z2f9YcdQnJ0K/ncXXbV5gJ6wYfNAebYFYiiUjM6E4JyXnPY8cimwyvFYHVUUA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.2.tgz", + "integrity": "sha512-pCpjxQgOByDHLlNqlnh/mNSAxIUkyBBuwwhTcV+enZGbDaClPvHdvm6uvOwZfFJkam7cGhBNbb4JxiP8UZkRvQ==", "dev": true, "requires": { "ip": "^1.1.5", @@ -8911,13 +8999,13 @@ } }, "socks-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.1.tgz", - "integrity": "sha512-Kezx6/VBguXOsEe5oU3lXYyKMi4+gva72TwJ7pQY5JfqUx2nMk7NXA6z/mpNqIlfQjWYVfeuNvQjexiTaTn6Nw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", + "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", "dev": true, "requires": { - "agent-base": "~4.2.0", - "socks": "~2.2.0" + "agent-base": "~4.2.1", + "socks": "~2.3.2" } }, "sort-keys": { @@ -9822,35 +9910,12 @@ } }, "windows-release": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.1.0.tgz", - "integrity": "sha512-hBb7m7acFgQPQc222uEQTmdcGLeBmQLNLFIh0rDk3CwFOBrfjefLzEfEfmpMq8Af/n/GnFf3eYf203FY1PmudA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.2.0.tgz", + "integrity": "sha512-QTlz2hKLrdqukrsapKsINzqMgOUpQW268eJ0OaOpJN32h272waxR9fkB9VoWRtK7uKHG5EHJcTXQBD8XZVJkFA==", "dev": true, "requires": { - "execa": "^0.10.0" - }, - "dependencies": { - "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - } + "execa": "^1.0.0" } }, "wordwrap": { diff --git a/package.json b/package.json index f45493ff67..bda9ec3d47 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "get-port": "^4.0.0", "jest": "^24.1.0", "jest-image-snapshot": "^2.8.1", - "lerna": "^3.13.1", + "lerna": "^3.13.2", "selenium-webdriver": "^4.0.0-alpha.1", "serve-handler": "^5.0.5" } diff --git a/packages/bundle/package-lock.json b/packages/bundle/package-lock.json index 0eb000826e..1c0e3eed75 100644 --- a/packages/bundle/package-lock.json +++ b/packages/bundle/package-lock.json @@ -5334,9 +5334,9 @@ } }, "memoize-one": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-4.0.3.tgz", - "integrity": "sha512-QmpUu4KqDmX0plH4u+tf0riMc1KHE1+lw95cMrLlXQAFOx/xnBtwhZ52XJxd9X2O6kwKBqX32kmhbhlobD0cuw==" + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.0.4.tgz", + "integrity": "sha512-P0z5IeAH6qHHGkJIXWw0xC2HNEgkx/9uWWBQw64FJj3/ol14VYdfVGWWr0fXfjhhv3TKVIqUq65os6O4GUNksA==" }, "memory-fs": { "version": "0.4.1", @@ -7596,6 +7596,13 @@ "events": "^3.0.0", "memoize-one": "^4.0.0", "simple-update-in": "^1.2.0" + }, + "dependencies": { + "memoize-one": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-4.0.3.tgz", + "integrity": "sha512-QmpUu4KqDmX0plH4u+tf0riMc1KHE1+lw95cMrLlXQAFOx/xnBtwhZ52XJxd9X2O6kwKBqX32kmhbhlobD0cuw==" + } } }, "webpack": { diff --git a/packages/bundle/package.json b/packages/bundle/package.json index a37c5a7f6d..f85e21d512 100644 --- a/packages/bundle/package.json +++ b/packages/bundle/package.json @@ -39,7 +39,7 @@ "core-js": "^2.5.7", "markdown-it": "^8.4.2", "markdown-it-for-inline": "^0.1.1", - "memoize-one": "^4.0.2", + "memoize-one": "^5.0.2", "microsoft-speech-browser-sdk": "^0.0.12", "react": "^16.5.0", "react-dom": "^16.5.0", diff --git a/packages/component/package-lock.json b/packages/component/package-lock.json index 61aa291365..7c71e5cb82 100644 --- a/packages/component/package-lock.json +++ b/packages/component/package-lock.json @@ -2050,7 +2050,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, "requires": { "core-js": "^2.4.0", "regenerator-runtime": "^0.11.0" @@ -2059,8 +2058,7 @@ "core-js": { "version": "2.5.7", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", - "dev": true + "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==" } } }, @@ -4310,9 +4308,9 @@ "optional": true }, "memoize-one": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-3.1.1.tgz", - "integrity": "sha512-YqVh744GsMlZu6xkhGslPSqSurOv6P+kLN2J3ysBZfagLcL5FdRK/0UpgLoL8hwjjEvvAVkjJZyFP+1T6p1vgA==" + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.0.4.tgz", + "integrity": "sha512-P0z5IeAH6qHHGkJIXWw0xC2HNEgkx/9uWWBQw64FJj3/ol14VYdfVGWWr0fXfjhhv3TKVIqUq65os6O4GUNksA==" }, "micromatch": { "version": "3.1.10", @@ -4784,12 +4782,20 @@ } }, "react-film": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/react-film/-/react-film-1.1.2.tgz", - "integrity": "sha512-E6wkN9Ar/uD1VquM93Gw9om4PlVVH3UsljI9H8zYMCh9sQJwRTh1kJPFC5pJl/XkYDAw7RHurHMLc7MHz8T82A==", + "version": "1.2.1-master.86ba8c1", + "resolved": "https://registry.npmjs.org/react-film/-/react-film-1.2.1-master.86ba8c1.tgz", + "integrity": "sha512-HRex9RVOuv1pfBNGEmci6iXr/wSklkHP1ZTmAHtAu37px/IecSyuqvuTolfLZ7ppBhgk0XyrEcn4e0ImRLuwIQ==", "requires": { "classnames": "^2.2.6", - "glamor": "^2.20.40" + "glamor": "^2.20.40", + "memoize-one": "^5.0.4" + }, + "dependencies": { + "memoize-one": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.0.4.tgz", + "integrity": "sha512-P0z5IeAH6qHHGkJIXWw0xC2HNEgkx/9uWWBQw64FJj3/ol14VYdfVGWWr0fXfjhhv3TKVIqUq65os6O4GUNksA==" + } } }, "react-redux": { @@ -4806,10 +4812,11 @@ } }, "react-say": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/react-say/-/react-say-1.1.1.tgz", - "integrity": "sha512-R+XfFQjpwlD48miC0AAb6DZDq4h5DkKFnqQFi/83wpO73isfYx+wuPU6PodzRGP4rF+/6nibnKc2V328ifiALA==", + "version": "1.1.2-master.fd0600e", + "resolved": "https://registry.npmjs.org/react-say/-/react-say-1.1.2-master.fd0600e.tgz", + "integrity": "sha512-kxRjltdZMD9RKmAKDGQ9zvvXuLvOyFIv5IUfAxaYT0Kp4aU51RAuOKH5h9qZwisjrW1lgb3gSzrxtvu9GOqbsw==", "requires": { + "babel-runtime": "^6.26.0", "classnames": "^2.2.6", "event-as-promise": "^1.0.3", "glamor": "^2.20.40", @@ -4817,9 +4824,9 @@ }, "dependencies": { "memoize-one": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-4.0.2.tgz", - "integrity": "sha512-ucx2DmXTeZTsS4GPPUZCbULAN7kdPT1G+H49Y34JjbQ5ESc6OGhVxKvb1iKhr9v19ZB9OtnHwNnhUnNR/7Wteg==" + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-4.0.3.tgz", + "integrity": "sha512-QmpUu4KqDmX0plH4u+tf0riMc1KHE1+lw95cMrLlXQAFOx/xnBtwhZ52XJxd9X2O6kwKBqX32kmhbhlobD0cuw==" } } }, @@ -4900,8 +4907,7 @@ "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" }, "regenerator-transform": { "version": "0.13.3", diff --git a/packages/component/package.json b/packages/component/package.json index ec73ce99ce..be878dd9cc 100644 --- a/packages/component/package.json +++ b/packages/component/package.json @@ -48,11 +48,11 @@ "bytes": "^3.0.0", "classnames": "^2.2.6", "glamor": "^2.20.40", - "memoize-one": "^3.1.1", + "memoize-one": "^5.0.2", "react-dictate-button": "^1.1.3", - "react-film": "~1.1.2", + "react-film": "1.2.1-master.86ba8c1", "react-redux": "^5.0.7", - "react-say": "^1.1.1", + "react-say": "^1.1.2-master.453bced", "react-scroll-to-bottom": "~1.3.1", "redux": "^4.0.0", "sanitize-html": "^1.18.2", diff --git a/packages/component/src/Activity/CarouselFilmStrip.js b/packages/component/src/Activity/CarouselFilmStrip.js index d504b580ed..0d8bad2f77 100644 --- a/packages/component/src/Activity/CarouselFilmStrip.js +++ b/packages/component/src/Activity/CarouselFilmStrip.js @@ -94,7 +94,8 @@ const ConnectedCarouselFilmStrip = connectCarouselFilmStrip( children, language, className, - filmContext, + itemContainerRef, + scrollableRef, styleSet, timestampClassName }) => { @@ -114,7 +115,7 @@ const ConnectedCarouselFilmStrip = connectCarouselFilmStrip( styleSet.carouselFilmStrip + '', (className || '') + '' ) } - ref={ filmContext._setFilmStripRef } + ref={ scrollableRef } > } -