You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 4-6.RSVP
Socket
Book a DemoInstallSign in
Socket

react-scroll-to-bottom

Package Overview
Dependencies
Maintainers
1
Versions
83
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

react-scroll-to-bottom - npm Package Compare versions

Comparing version

to
2.0.0-master.3eb21bc

lib/hooks/useAnimating.js

@@ -8,3 +8,19 @@ # Changelog

## [Unreleased]
### Breaking changes
- We moved to React Hooks and it requires React 16.8.6 or up
- Hooks will allow us to write simpler and more maintainable code
- Developers can use our React Hooks to perform various operations
### Changed
- Moved all code to React functional components, in PR [#31](https://github.com/compulim/react-scroll-to-bottom/pull/31)
- `*`: bump dependencies, in PR [#31](https://github.com/compulim/react-scroll-to-bottom/pull/31)
- [@babel/cli@^7.6.2](https://www.npmjs.com/package/@babel/cli)
- [@babel/core@^7.6.2](https://www.npmjs.com/package/@babel/core)
- [@babel/plugin-proposal-object-rest-spread@^7.6.2](https://www.npmjs.com/package/@babel/plugin-proposal-object-rest-spread)
- [@babel/preset-env@^7.6.2](https://www.npmjs.com/package/@babel/preset-env)
- [babel-jest@^24.9.0](https://www.npmjs.com/package/babel-jest)
- [jest@^24.9.0](https://www.npmjs.com/package/jest)
- [react-dom@16.8.6](https://www.npmjs.com/package/react-dom)
- [react@16.8.6](https://www.npmjs.com/package/react)
- `*`: bump dependencies, in PR [#27](https://github.com/compulim/react-scroll-to-bottom/pull/27)

@@ -17,2 +33,9 @@ - [@babel/cli@^7.5.5](https://www.npmjs.com/package/@babel/cli)

### Added
- Added React Hooks, in PR [#31](https://github.com/compulim/react-scroll-to-bottom/pull/31)
- Added [ESLint](https://www.npmjs.com/package/eslint) and [Prettier](https://www.npmjs.com/package/prettier), in PR [#31](https://github.com/compulim/react-scroll-to-bottom/pull/31)
### Fixed
- Fix `atStart` was not reporting correctly, in PR [#31](https://github.com/compulim/react-scroll-to-bottom/pull/31)
## [1.3.2] - 2019-06-20

@@ -19,0 +42,0 @@ ### Changed

27

lib/BasicScrollToBottom.js

@@ -10,2 +10,4 @@ "use strict";

var _propTypes = _interopRequireDefault(require("prop-types"));
var _classnames = _interopRequireDefault(require("classnames"));

@@ -27,3 +29,3 @@

var _default = function _default(_ref) {
var BasicScrollToBottom = function BasicScrollToBottom(_ref) {
var checkInterval = _ref.checkInterval,

@@ -39,3 +41,3 @@ children = _ref.children,

debounce: debounce,
mode: mode === 'top' ? 'top' : 'bottom'
mode: mode
}, _react.default.createElement("div", {

@@ -50,3 +52,22 @@ className: (0, _classnames.default)(ROOT_CSS + '', (className || '') + '')

BasicScrollToBottom.defaultProps = {
checkInterval: undefined,
children: undefined,
className: undefined,
debounce: undefined,
followButtonClassName: undefined,
mode: undefined,
scrollViewClassName: undefined
};
BasicScrollToBottom.propTypes = {
checkInterval: _propTypes.default.number,
children: _propTypes.default.any,
className: _propTypes.default.string,
debounce: _propTypes.default.number,
followButtonClassName: _propTypes.default.string,
mode: _propTypes.default.oneOf(['bottom', 'top']),
scrollViewClassName: _propTypes.default.string
};
var _default = BasicScrollToBottom;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNpY1Njcm9sbFRvQm90dG9tLmpzIl0sIm5hbWVzIjpbIlJPT1RfQ1NTIiwicG9zaXRpb24iLCJjaGVja0ludGVydmFsIiwiY2hpbGRyZW4iLCJjbGFzc05hbWUiLCJkZWJvdW5jZSIsImZvbGxvd0J1dHRvbkNsYXNzTmFtZSIsIm1vZGUiLCJzY3JvbGxWaWV3Q2xhc3NOYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxJQUFNQSxRQUFRLEdBQUcsaUJBQUk7QUFDbkJDLEVBQUFBLFFBQVEsRUFBRTtBQURTLENBQUosQ0FBakI7O2VBSWU7QUFBQSxNQUNiQyxhQURhLFFBQ2JBLGFBRGE7QUFBQSxNQUViQyxRQUZhLFFBRWJBLFFBRmE7QUFBQSxNQUdiQyxTQUhhLFFBR2JBLFNBSGE7QUFBQSxNQUliQyxRQUphLFFBSWJBLFFBSmE7QUFBQSxNQUtiQyxxQkFMYSxRQUtiQSxxQkFMYTtBQUFBLE1BTWJDLElBTmEsUUFNYkEsSUFOYTtBQUFBLE1BT2JDLG1CQVBhLFFBT2JBLG1CQVBhO0FBQUEsU0FTYiw2QkFBQyxpQkFBRDtBQUNFLElBQUEsYUFBYSxFQUFHTixhQURsQjtBQUVFLElBQUEsUUFBUSxFQUFHRyxRQUZiO0FBR0UsSUFBQSxJQUFJLEVBQUdFLElBQUksS0FBSyxLQUFULEdBQWlCLEtBQWpCLEdBQXlCO0FBSGxDLEtBS0U7QUFBSyxJQUFBLFNBQVMsRUFBRyx5QkFBV1AsUUFBUSxHQUFHLEVBQXRCLEVBQTBCLENBQUNJLFNBQVMsSUFBSSxFQUFkLElBQW9CLEVBQTlDO0FBQWpCLEtBQ0UsNkJBQUMsY0FBRDtBQUFPLElBQUEsU0FBUyxFQUFHSTtBQUFuQixLQUNJTCxRQURKLENBREYsRUFJRSw2QkFBQyw2QkFBRDtBQUFzQixJQUFBLFNBQVMsRUFBR0c7QUFBbEMsSUFKRixDQUxGLENBVGE7QUFBQSxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3NzIH0gZnJvbSAnZ2xhbW9yJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IEF1dG9IaWRlRm9sbG93QnV0dG9uIGZyb20gJy4vU2Nyb2xsVG9Cb3R0b20vQXV0b0hpZGVGb2xsb3dCdXR0b24nO1xuaW1wb3J0IENvbXBvc2VyIGZyb20gJy4vU2Nyb2xsVG9Cb3R0b20vQ29tcG9zZXInO1xuaW1wb3J0IFBhbmVsIGZyb20gJy4vU2Nyb2xsVG9Cb3R0b20vUGFuZWwnO1xuXG5jb25zdCBST09UX0NTUyA9IGNzcyh7XG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgKHtcbiAgY2hlY2tJbnRlcnZhbCxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgZGVib3VuY2UsXG4gIGZvbGxvd0J1dHRvbkNsYXNzTmFtZSxcbiAgbW9kZSxcbiAgc2Nyb2xsVmlld0NsYXNzTmFtZVxufSkgPT5cbiAgPENvbXBvc2VyXG4gICAgY2hlY2tJbnRlcnZhbD17IGNoZWNrSW50ZXJ2YWwgfVxuICAgIGRlYm91bmNlPXsgZGVib3VuY2UgfVxuICAgIG1vZGU9eyBtb2RlID09PSAndG9wJyA/ICd0b3AnIDogJ2JvdHRvbSd9XG4gID5cbiAgICA8ZGl2IGNsYXNzTmFtZT17IGNsYXNzTmFtZXMoUk9PVF9DU1MgKyAnJywgKGNsYXNzTmFtZSB8fCAnJykgKyAnJykgfT5cbiAgICAgIDxQYW5lbCBjbGFzc05hbWU9eyBzY3JvbGxWaWV3Q2xhc3NOYW1lIH0+XG4gICAgICAgIHsgY2hpbGRyZW4gfVxuICAgICAgPC9QYW5lbD5cbiAgICAgIDxBdXRvSGlkZUZvbGxvd0J1dHRvbiBjbGFzc05hbWU9eyBmb2xsb3dCdXR0b25DbGFzc05hbWUgfSAvPlxuICAgIDwvZGl2PlxuICA8L0NvbXBvc2VyPlxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNpY1Njcm9sbFRvQm90dG9tLmpzIl0sIm5hbWVzIjpbIlJPT1RfQ1NTIiwicG9zaXRpb24iLCJCYXNpY1Njcm9sbFRvQm90dG9tIiwiY2hlY2tJbnRlcnZhbCIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwiZGVib3VuY2UiLCJmb2xsb3dCdXR0b25DbGFzc05hbWUiLCJtb2RlIiwic2Nyb2xsVmlld0NsYXNzTmFtZSIsImRlZmF1bHRQcm9wcyIsInVuZGVmaW5lZCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsIm51bWJlciIsImFueSIsInN0cmluZyIsIm9uZU9mIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxJQUFNQSxRQUFRLEdBQUcsaUJBQUk7QUFDbkJDLEVBQUFBLFFBQVEsRUFBRTtBQURTLENBQUosQ0FBakI7O0FBSUEsSUFBTUMsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFzQjtBQUFBLE1BQzFCQyxhQUQwQixRQUMxQkEsYUFEMEI7QUFBQSxNQUUxQkMsUUFGMEIsUUFFMUJBLFFBRjBCO0FBQUEsTUFHMUJDLFNBSDBCLFFBRzFCQSxTQUgwQjtBQUFBLE1BSTFCQyxRQUowQixRQUkxQkEsUUFKMEI7QUFBQSxNQUsxQkMscUJBTDBCLFFBSzFCQSxxQkFMMEI7QUFBQSxNQU0xQkMsSUFOMEIsUUFNMUJBLElBTjBCO0FBQUEsTUFPMUJDLG1CQVAwQixRQU8xQkEsbUJBUDBCO0FBQUEsU0FTMUIsNkJBQUMsaUJBQUQ7QUFBVSxJQUFBLGFBQWEsRUFBRU4sYUFBekI7QUFBd0MsSUFBQSxRQUFRLEVBQUVHLFFBQWxEO0FBQTRELElBQUEsSUFBSSxFQUFFRTtBQUFsRSxLQUNFO0FBQUssSUFBQSxTQUFTLEVBQUUseUJBQVdSLFFBQVEsR0FBRyxFQUF0QixFQUEwQixDQUFDSyxTQUFTLElBQUksRUFBZCxJQUFvQixFQUE5QztBQUFoQixLQUNFLDZCQUFDLGNBQUQ7QUFBTyxJQUFBLFNBQVMsRUFBRUk7QUFBbEIsS0FBd0NMLFFBQXhDLENBREYsRUFFRSw2QkFBQyw2QkFBRDtBQUFzQixJQUFBLFNBQVMsRUFBRUc7QUFBakMsSUFGRixDQURGLENBVDBCO0FBQUEsQ0FBNUI7O0FBaUJBTCxtQkFBbUIsQ0FBQ1EsWUFBcEIsR0FBbUM7QUFDakNQLEVBQUFBLGFBQWEsRUFBRVEsU0FEa0I7QUFFakNQLEVBQUFBLFFBQVEsRUFBRU8sU0FGdUI7QUFHakNOLEVBQUFBLFNBQVMsRUFBRU0sU0FIc0I7QUFJakNMLEVBQUFBLFFBQVEsRUFBRUssU0FKdUI7QUFLakNKLEVBQUFBLHFCQUFxQixFQUFFSSxTQUxVO0FBTWpDSCxFQUFBQSxJQUFJLEVBQUVHLFNBTjJCO0FBT2pDRixFQUFBQSxtQkFBbUIsRUFBRUU7QUFQWSxDQUFuQztBQVVBVCxtQkFBbUIsQ0FBQ1UsU0FBcEIsR0FBZ0M7QUFDOUJULEVBQUFBLGFBQWEsRUFBRVUsbUJBQVVDLE1BREs7QUFFOUJWLEVBQUFBLFFBQVEsRUFBRVMsbUJBQVVFLEdBRlU7QUFHOUJWLEVBQUFBLFNBQVMsRUFBRVEsbUJBQVVHLE1BSFM7QUFJOUJWLEVBQUFBLFFBQVEsRUFBRU8sbUJBQVVDLE1BSlU7QUFLOUJQLEVBQUFBLHFCQUFxQixFQUFFTSxtQkFBVUcsTUFMSDtBQU05QlIsRUFBQUEsSUFBSSxFQUFFSyxtQkFBVUksS0FBVixDQUFnQixDQUFDLFFBQUQsRUFBVyxLQUFYLENBQWhCLENBTndCO0FBTzlCUixFQUFBQSxtQkFBbUIsRUFBRUksbUJBQVVHO0FBUEQsQ0FBaEM7ZUFVZWQsbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjc3MgfSBmcm9tICdnbGFtb3InO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IEF1dG9IaWRlRm9sbG93QnV0dG9uIGZyb20gJy4vU2Nyb2xsVG9Cb3R0b20vQXV0b0hpZGVGb2xsb3dCdXR0b24nO1xuaW1wb3J0IENvbXBvc2VyIGZyb20gJy4vU2Nyb2xsVG9Cb3R0b20vQ29tcG9zZXInO1xuaW1wb3J0IFBhbmVsIGZyb20gJy4vU2Nyb2xsVG9Cb3R0b20vUGFuZWwnO1xuXG5jb25zdCBST09UX0NTUyA9IGNzcyh7XG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnXG59KTtcblxuY29uc3QgQmFzaWNTY3JvbGxUb0JvdHRvbSA9ICh7XG4gIGNoZWNrSW50ZXJ2YWwsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIGRlYm91bmNlLFxuICBmb2xsb3dCdXR0b25DbGFzc05hbWUsXG4gIG1vZGUsXG4gIHNjcm9sbFZpZXdDbGFzc05hbWVcbn0pID0+IChcbiAgPENvbXBvc2VyIGNoZWNrSW50ZXJ2YWw9e2NoZWNrSW50ZXJ2YWx9IGRlYm91bmNlPXtkZWJvdW5jZX0gbW9kZT17bW9kZX0+XG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZXMoUk9PVF9DU1MgKyAnJywgKGNsYXNzTmFtZSB8fCAnJykgKyAnJyl9PlxuICAgICAgPFBhbmVsIGNsYXNzTmFtZT17c2Nyb2xsVmlld0NsYXNzTmFtZX0+e2NoaWxkcmVufTwvUGFuZWw+XG4gICAgICA8QXV0b0hpZGVGb2xsb3dCdXR0b24gY2xhc3NOYW1lPXtmb2xsb3dCdXR0b25DbGFzc05hbWV9IC8+XG4gICAgPC9kaXY+XG4gIDwvQ29tcG9zZXI+XG4pO1xuXG5CYXNpY1Njcm9sbFRvQm90dG9tLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2hlY2tJbnRlcnZhbDogdW5kZWZpbmVkLFxuICBjaGlsZHJlbjogdW5kZWZpbmVkLFxuICBjbGFzc05hbWU6IHVuZGVmaW5lZCxcbiAgZGVib3VuY2U6IHVuZGVmaW5lZCxcbiAgZm9sbG93QnV0dG9uQ2xhc3NOYW1lOiB1bmRlZmluZWQsXG4gIG1vZGU6IHVuZGVmaW5lZCxcbiAgc2Nyb2xsVmlld0NsYXNzTmFtZTogdW5kZWZpbmVkXG59O1xuXG5CYXNpY1Njcm9sbFRvQm90dG9tLnByb3BUeXBlcyA9IHtcbiAgY2hlY2tJbnRlcnZhbDogUHJvcFR5cGVzLm51bWJlcixcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5hbnksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGVib3VuY2U6IFByb3BUeXBlcy5udW1iZXIsXG4gIGZvbGxvd0J1dHRvbkNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgbW9kZTogUHJvcFR5cGVzLm9uZU9mKFsnYm90dG9tJywgJ3RvcCddKSxcbiAgc2Nyb2xsVmlld0NsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQmFzaWNTY3JvbGxUb0JvdHRvbTtcbiJdfQ==

11

lib/debounce.js

@@ -16,7 +16,10 @@ "use strict";

return function () {
var _arguments = arguments;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var now = Date.now();
if (now - last > ms) {
fn.apply(null, arguments);
fn.apply(void 0, args);
last = now;

@@ -26,3 +29,3 @@ } else {

timeout = setTimeout(function () {
fn.apply(null, _arguments);
fn.apply(void 0, args);
last = Date.now();

@@ -33,2 +36,2 @@ }, Math.max(0, ms - now + last));

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kZWJvdW5jZS5qcyJdLCJuYW1lcyI6WyJmbiIsIm1zIiwibGFzdCIsInRpbWVvdXQiLCJub3ciLCJEYXRlIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiTWF0aCIsIm1heCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFlLGtCQUFVQSxFQUFWLEVBQWNDLEVBQWQsRUFBa0I7QUFDL0IsTUFBSSxDQUFDQSxFQUFMLEVBQVM7QUFDUCxXQUFPRCxFQUFQO0FBQ0Q7O0FBRUQsTUFBSUUsSUFBSSxHQUFHLENBQVg7QUFDQSxNQUFJQyxPQUFPLEdBQUcsSUFBZDtBQUVBLFNBQU8sWUFBWTtBQUFBO0FBQ2pCLFFBQU1DLEdBQUcsR0FBR0MsSUFBSSxDQUFDRCxHQUFMLEVBQVo7O0FBRUEsUUFBSUEsR0FBRyxHQUFHRixJQUFOLEdBQWFELEVBQWpCLEVBQXFCO0FBQ25CRCxNQUFBQSxFQUFFLENBQUNNLEtBQUgsQ0FBUyxJQUFULEVBQWVDLFNBQWY7QUFDQUwsTUFBQUEsSUFBSSxHQUFHRSxHQUFQO0FBQ0QsS0FIRCxNQUdPO0FBQ0xJLE1BQUFBLFlBQVksQ0FBQ0wsT0FBRCxDQUFaO0FBRUFBLE1BQUFBLE9BQU8sR0FBR00sVUFBVSxDQUFDLFlBQU07QUFDekJULFFBQUFBLEVBQUUsQ0FBQ00sS0FBSCxDQUFTLElBQVQsRUFBZUMsVUFBZjtBQUNBTCxRQUFBQSxJQUFJLEdBQUdHLElBQUksQ0FBQ0QsR0FBTCxFQUFQO0FBQ0QsT0FIbUIsRUFHakJNLElBQUksQ0FBQ0MsR0FBTCxDQUFTLENBQVQsRUFBWVYsRUFBRSxHQUFHRyxHQUFMLEdBQVdGLElBQXZCLENBSGlCLENBQXBCO0FBSUQ7QUFDRixHQWREO0FBZUQiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoZm4sIG1zKSB7XG4gIGlmICghbXMpIHtcbiAgICByZXR1cm4gZm47XG4gIH1cblxuICBsZXQgbGFzdCA9IDA7XG4gIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICBpZiAobm93IC0gbGFzdCA+IG1zKSB7XG4gICAgICBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgbGFzdCA9IG5vdztcbiAgICB9IGVsc2Uge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXG4gICAgICB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIGxhc3QgPSBEYXRlLm5vdygpO1xuICAgICAgfSwgTWF0aC5tYXgoMCwgbXMgLSBub3cgKyBsYXN0KSk7XG4gICAgfVxuICB9O1xufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kZWJvdW5jZS5qcyJdLCJuYW1lcyI6WyJmbiIsIm1zIiwibGFzdCIsInRpbWVvdXQiLCJhcmdzIiwibm93IiwiRGF0ZSIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJNYXRoIiwibWF4Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQWUsa0JBQVNBLEVBQVQsRUFBYUMsRUFBYixFQUFpQjtBQUM5QixNQUFJLENBQUNBLEVBQUwsRUFBUztBQUNQLFdBQU9ELEVBQVA7QUFDRDs7QUFFRCxNQUFJRSxJQUFJLEdBQUcsQ0FBWDtBQUNBLE1BQUlDLE9BQU8sR0FBRyxJQUFkO0FBRUEsU0FBTyxZQUFhO0FBQUEsc0NBQVRDLElBQVM7QUFBVEEsTUFBQUEsSUFBUztBQUFBOztBQUNsQixRQUFNQyxHQUFHLEdBQUdDLElBQUksQ0FBQ0QsR0FBTCxFQUFaOztBQUVBLFFBQUlBLEdBQUcsR0FBR0gsSUFBTixHQUFhRCxFQUFqQixFQUFxQjtBQUNuQkQsTUFBQUEsRUFBRSxNQUFGLFNBQU1JLElBQU47QUFDQUYsTUFBQUEsSUFBSSxHQUFHRyxHQUFQO0FBQ0QsS0FIRCxNQUdPO0FBQ0xFLE1BQUFBLFlBQVksQ0FBQ0osT0FBRCxDQUFaO0FBRUFBLE1BQUFBLE9BQU8sR0FBR0ssVUFBVSxDQUFDLFlBQU07QUFDekJSLFFBQUFBLEVBQUUsTUFBRixTQUFNSSxJQUFOO0FBQ0FGLFFBQUFBLElBQUksR0FBR0ksSUFBSSxDQUFDRCxHQUFMLEVBQVA7QUFDRCxPQUhtQixFQUdqQkksSUFBSSxDQUFDQyxHQUFMLENBQVMsQ0FBVCxFQUFZVCxFQUFFLEdBQUdJLEdBQUwsR0FBV0gsSUFBdkIsQ0FIaUIsQ0FBcEI7QUFJRDtBQUNGLEdBZEQ7QUFlRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGZuLCBtcykge1xuICBpZiAoIW1zKSB7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgbGV0IGxhc3QgPSAwO1xuICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGlmIChub3cgLSBsYXN0ID4gbXMpIHtcbiAgICAgIGZuKC4uLmFyZ3MpO1xuICAgICAgbGFzdCA9IG5vdztcbiAgICB9IGVsc2Uge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXG4gICAgICB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGZuKC4uLmFyZ3MpO1xuICAgICAgICBsYXN0ID0gRGF0ZS5ub3coKTtcbiAgICAgIH0sIE1hdGgubWF4KDAsIG1zIC0gbm93ICsgbGFzdCkpO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==

@@ -8,3 +8,3 @@ "use strict";

var _react = _interopRequireDefault(require("react"));
var _react = require("react");

@@ -15,122 +15,39 @@ var _debounce = _interopRequireDefault(require("./debounce"));

function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
var EventSpy = function EventSpy(_ref) {
var debounce = _ref.debounce,
name = _ref.name,
onEvent = _ref.onEvent,
target = _ref.target;
// We need to save the "onEvent" to ref.
// This is because "onEvent" may change from time to time, but debounce may still fire to the older callback.
var onEventRef = (0, _react.useRef)();
onEventRef.current = onEvent;
var debouncer = (0, _react.useCallback)((0, _debounce.default)(function (event) {
var current = onEventRef.current;
current && current(event);
}, debounce), [debounce, onEventRef]);
var handleEvent = (0, _react.useCallback)(function (event) {
event.timeStampLow = Date.now();
debouncer(event);
}, [debouncer]);
(0, _react.useLayoutEffect)(function () {
target.addEventListener(name, handleEvent, {
passive: true
});
handleEvent({
target: target,
type: name
});
return function () {
return target.removeEventListener(name, handleEvent);
};
}, [name, handleEvent, target]);
return false;
};
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
var EventSpy =
/*#__PURE__*/
function (_React$Component) {
_inherits(EventSpy, _React$Component);
function EventSpy(props, context) {
var _this;
_classCallCheck(this, EventSpy);
_this = _possibleConstructorReturn(this, _getPrototypeOf(EventSpy).call(this, props, context));
_this.createDebouncer();
_this.handleEvent = _this.handleEvent.bind(_assertThisInitialized(_this));
return _this;
}
_createClass(EventSpy, [{
key: "createDebouncer",
value: function createDebouncer() {
var _this2 = this;
this.debouncer = (0, _debounce.default)(function (event) {
_this2.props.onEvent && _this2.props.onEvent(event);
}, this.props.debounce);
}
}, {
key: "componentDidMount",
value: function componentDidMount() {
var target = this.props.target;
if (target) {
target.addEventListener(this.props.name, this.handleEvent, {
passive: true
});
this.handleEvent({
target: target,
type: this.props.name
});
}
}
}, {
key: "componentDidUpdate",
value: function componentDidUpdate(prevProps) {
var prevName = prevProps.name,
prevTarget = prevProps.target;
var _this$props = this.props,
name = _this$props.name,
target = _this$props.target;
if (target !== prevTarget || name !== prevName) {
if (prevTarget) {
prevTarget.removeEventListener(prevName, this.handleEvent);
}
if (target) {
target.addEventListener(name, this.handleEvent, {
passive: true
});
this.handleEvent({
target: target,
type: this.props.name
});
}
}
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
var target = this.props.target;
target && target.removeEventListener(this.props.name, this.handleEvent);
}
}, {
key: "componentWillReceiveProps",
value: function componentWillReceiveProps(_ref) {
var nextDebounce = _ref.debounce;
if (this.props.debounce !== nextDebounce) {
this.createDebouncer();
}
}
}, {
key: "handleEvent",
value: function handleEvent(event) {
event.timeStampLow = Date.now();
this.debouncer(event);
}
}, {
key: "render",
value: function render() {
return false;
}
}]);
return EventSpy;
}(_react.default.Component);
exports.default = EventSpy;
EventSpy.defaultProps = {
debounce: 200
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9FdmVudFNweS5qcyJdLCJuYW1lcyI6WyJFdmVudFNweSIsInByb3BzIiwiY29udGV4dCIsImNyZWF0ZURlYm91bmNlciIsImhhbmRsZUV2ZW50IiwiYmluZCIsImRlYm91bmNlciIsImV2ZW50Iiwib25FdmVudCIsImRlYm91bmNlIiwidGFyZ2V0IiwiYWRkRXZlbnRMaXN0ZW5lciIsIm5hbWUiLCJwYXNzaXZlIiwidHlwZSIsInByZXZQcm9wcyIsInByZXZOYW1lIiwicHJldlRhcmdldCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJuZXh0RGVib3VuY2UiLCJ0aW1lU3RhbXBMb3ciLCJEYXRlIiwibm93IiwiUmVhY3QiLCJDb21wb25lbnQiLCJkZWZhdWx0UHJvcHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUVxQkEsUTs7Ozs7QUFDbkIsb0JBQVlDLEtBQVosRUFBbUJDLE9BQW5CLEVBQTRCO0FBQUE7O0FBQUE7O0FBQzFCLGtGQUFNRCxLQUFOLEVBQWFDLE9BQWI7O0FBRUEsVUFBS0MsZUFBTDs7QUFFQSxVQUFLQyxXQUFMLEdBQW1CLE1BQUtBLFdBQUwsQ0FBaUJDLElBQWpCLCtCQUFuQjtBQUwwQjtBQU0zQjs7OztzQ0FFaUI7QUFBQTs7QUFDaEIsV0FBS0MsU0FBTCxHQUFpQix1QkFBUyxVQUFBQyxLQUFLLEVBQUk7QUFDakMsUUFBQSxNQUFJLENBQUNOLEtBQUwsQ0FBV08sT0FBWCxJQUFzQixNQUFJLENBQUNQLEtBQUwsQ0FBV08sT0FBWCxDQUFtQkQsS0FBbkIsQ0FBdEI7QUFDRCxPQUZnQixFQUVkLEtBQUtOLEtBQUwsQ0FBV1EsUUFGRyxDQUFqQjtBQUdEOzs7d0NBRW1CO0FBQUEsVUFDVkMsTUFEVSxHQUNDLEtBQUtULEtBRE4sQ0FDVlMsTUFEVTs7QUFHbEIsVUFBSUEsTUFBSixFQUFZO0FBQ1ZBLFFBQUFBLE1BQU0sQ0FBQ0MsZ0JBQVAsQ0FBd0IsS0FBS1YsS0FBTCxDQUFXVyxJQUFuQyxFQUF5QyxLQUFLUixXQUE5QyxFQUEyRDtBQUFFUyxVQUFBQSxPQUFPLEVBQUU7QUFBWCxTQUEzRDtBQUNBLGFBQUtULFdBQUwsQ0FBaUI7QUFBRU0sVUFBQUEsTUFBTSxFQUFOQSxNQUFGO0FBQVVJLFVBQUFBLElBQUksRUFBRSxLQUFLYixLQUFMLENBQVdXO0FBQTNCLFNBQWpCO0FBQ0Q7QUFDRjs7O3VDQUVrQkcsUyxFQUFXO0FBQUEsVUFDZEMsUUFEYyxHQUNtQkQsU0FEbkIsQ0FDcEJILElBRG9CO0FBQUEsVUFDSUssVUFESixHQUNtQkYsU0FEbkIsQ0FDSkwsTUFESTtBQUFBLHdCQUVILEtBQUtULEtBRkY7QUFBQSxVQUVwQlcsSUFGb0IsZUFFcEJBLElBRm9CO0FBQUEsVUFFZEYsTUFGYyxlQUVkQSxNQUZjOztBQUk1QixVQUNFQSxNQUFNLEtBQUtPLFVBQVgsSUFDR0wsSUFBSSxLQUFLSSxRQUZkLEVBR0U7QUFDQSxZQUFJQyxVQUFKLEVBQWdCO0FBQ2RBLFVBQUFBLFVBQVUsQ0FBQ0MsbUJBQVgsQ0FBK0JGLFFBQS9CLEVBQXlDLEtBQUtaLFdBQTlDO0FBQ0Q7O0FBRUQsWUFBSU0sTUFBSixFQUFZO0FBQ1ZBLFVBQUFBLE1BQU0sQ0FBQ0MsZ0JBQVAsQ0FBd0JDLElBQXhCLEVBQThCLEtBQUtSLFdBQW5DLEVBQWdEO0FBQUVTLFlBQUFBLE9BQU8sRUFBRTtBQUFYLFdBQWhEO0FBQ0EsZUFBS1QsV0FBTCxDQUFpQjtBQUFFTSxZQUFBQSxNQUFNLEVBQU5BLE1BQUY7QUFBVUksWUFBQUEsSUFBSSxFQUFFLEtBQUtiLEtBQUwsQ0FBV1c7QUFBM0IsV0FBakI7QUFDRDtBQUNGO0FBQ0Y7OzsyQ0FFc0I7QUFBQSxVQUNiRixNQURhLEdBQ0YsS0FBS1QsS0FESCxDQUNiUyxNQURhO0FBR3JCQSxNQUFBQSxNQUFNLElBQUlBLE1BQU0sQ0FBQ1EsbUJBQVAsQ0FBMkIsS0FBS2pCLEtBQUwsQ0FBV1csSUFBdEMsRUFBNEMsS0FBS1IsV0FBakQsQ0FBVjtBQUNEOzs7b0RBRXFEO0FBQUEsVUFBaEJlLFlBQWdCLFFBQTFCVixRQUEwQjs7QUFDcEQsVUFBSSxLQUFLUixLQUFMLENBQVdRLFFBQVgsS0FBd0JVLFlBQTVCLEVBQTBDO0FBQ3hDLGFBQUtoQixlQUFMO0FBQ0Q7QUFDRjs7O2dDQUVXSSxLLEVBQU87QUFDakJBLE1BQUFBLEtBQUssQ0FBQ2EsWUFBTixHQUFxQkMsSUFBSSxDQUFDQyxHQUFMLEVBQXJCO0FBRUEsV0FBS2hCLFNBQUwsQ0FBZUMsS0FBZjtBQUNEOzs7NkJBRVE7QUFDUCxhQUFPLEtBQVA7QUFDRDs7OztFQS9EbUNnQixlQUFNQyxTOzs7QUFrRTVDeEIsUUFBUSxDQUFDeUIsWUFBVCxHQUF3QjtBQUN0QmhCLEVBQUFBLFFBQVEsRUFBRTtBQURZLENBQXhCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IGRlYm91bmNlIGZyb20gJy4vZGVib3VuY2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFdmVudFNweSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzLCBjb250ZXh0KSB7XG4gICAgc3VwZXIocHJvcHMsIGNvbnRleHQpO1xuXG4gICAgdGhpcy5jcmVhdGVEZWJvdW5jZXIoKTtcblxuICAgIHRoaXMuaGFuZGxlRXZlbnQgPSB0aGlzLmhhbmRsZUV2ZW50LmJpbmQodGhpcyk7XG4gIH1cblxuICBjcmVhdGVEZWJvdW5jZXIoKSB7XG4gICAgdGhpcy5kZWJvdW5jZXIgPSBkZWJvdW5jZShldmVudCA9PiB7XG4gICAgICB0aGlzLnByb3BzLm9uRXZlbnQgJiYgdGhpcy5wcm9wcy5vbkV2ZW50KGV2ZW50KTtcbiAgICB9LCB0aGlzLnByb3BzLmRlYm91bmNlKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5wcm9wcy5uYW1lLCB0aGlzLmhhbmRsZUV2ZW50LCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgICB0aGlzLmhhbmRsZUV2ZW50KHsgdGFyZ2V0LCB0eXBlOiB0aGlzLnByb3BzLm5hbWUgfSk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgIGNvbnN0IHsgbmFtZTogcHJldk5hbWUsIHRhcmdldDogcHJldlRhcmdldCB9ID0gcHJldlByb3BzO1xuICAgIGNvbnN0IHsgbmFtZSwgdGFyZ2V0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKFxuICAgICAgdGFyZ2V0ICE9PSBwcmV2VGFyZ2V0XG4gICAgICB8fCBuYW1lICE9PSBwcmV2TmFtZVxuICAgICkge1xuICAgICAgaWYgKHByZXZUYXJnZXQpIHtcbiAgICAgICAgcHJldlRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHByZXZOYW1lLCB0aGlzLmhhbmRsZUV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCB0aGlzLmhhbmRsZUV2ZW50LCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgICAgIHRoaXMuaGFuZGxlRXZlbnQoeyB0YXJnZXQsIHR5cGU6IHRoaXMucHJvcHMubmFtZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBjb25zdCB7IHRhcmdldCB9ID0gdGhpcy5wcm9wcztcblxuICAgIHRhcmdldCAmJiB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLnByb3BzLm5hbWUsIHRoaXMuaGFuZGxlRXZlbnQpO1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh7IGRlYm91bmNlOiBuZXh0RGVib3VuY2UgfSkge1xuICAgIGlmICh0aGlzLnByb3BzLmRlYm91bmNlICE9PSBuZXh0RGVib3VuY2UpIHtcbiAgICAgIHRoaXMuY3JlYXRlRGVib3VuY2VyKCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBldmVudC50aW1lU3RhbXBMb3cgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5kZWJvdW5jZXIoZXZlbnQpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5FdmVudFNweS5kZWZhdWx0UHJvcHMgPSB7XG4gIGRlYm91bmNlOiAyMDBcbn07XG4iXX0=
var _default = EventSpy;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9FdmVudFNweS5qcyJdLCJuYW1lcyI6WyJFdmVudFNweSIsImRlYm91bmNlIiwibmFtZSIsIm9uRXZlbnQiLCJ0YXJnZXQiLCJvbkV2ZW50UmVmIiwiY3VycmVudCIsImRlYm91bmNlciIsImV2ZW50IiwiaGFuZGxlRXZlbnQiLCJ0aW1lU3RhbXBMb3ciLCJEYXRlIiwibm93IiwiYWRkRXZlbnRMaXN0ZW5lciIsInBhc3NpdmUiLCJ0eXBlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImRlZmF1bHRQcm9wcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUVBOzs7O0FBRUEsSUFBTUEsUUFBUSxHQUFHLFNBQVhBLFFBQVcsT0FBeUM7QUFBQSxNQUF0Q0MsUUFBc0MsUUFBdENBLFFBQXNDO0FBQUEsTUFBNUJDLElBQTRCLFFBQTVCQSxJQUE0QjtBQUFBLE1BQXRCQyxPQUFzQixRQUF0QkEsT0FBc0I7QUFBQSxNQUFiQyxNQUFhLFFBQWJBLE1BQWE7QUFDeEQ7QUFDQTtBQUNBLE1BQU1DLFVBQVUsR0FBRyxvQkFBbkI7QUFFQUEsRUFBQUEsVUFBVSxDQUFDQyxPQUFYLEdBQXFCSCxPQUFyQjtBQUVBLE1BQU1JLFNBQVMsR0FBRyx3QkFDaEIsdUJBQVcsVUFBQUMsS0FBSyxFQUFJO0FBQUEsUUFDVkYsT0FEVSxHQUNFRCxVQURGLENBQ1ZDLE9BRFU7QUFHbEJBLElBQUFBLE9BQU8sSUFBSUEsT0FBTyxDQUFDRSxLQUFELENBQWxCO0FBQ0QsR0FKRCxFQUlHUCxRQUpILENBRGdCLEVBTWhCLENBQUNBLFFBQUQsRUFBV0ksVUFBWCxDQU5nQixDQUFsQjtBQVNBLE1BQU1JLFdBQVcsR0FBRyx3QkFDbEIsVUFBQUQsS0FBSyxFQUFJO0FBQ1BBLElBQUFBLEtBQUssQ0FBQ0UsWUFBTixHQUFxQkMsSUFBSSxDQUFDQyxHQUFMLEVBQXJCO0FBRUFMLElBQUFBLFNBQVMsQ0FBQ0MsS0FBRCxDQUFUO0FBQ0QsR0FMaUIsRUFNbEIsQ0FBQ0QsU0FBRCxDQU5rQixDQUFwQjtBQVNBLDhCQUFnQixZQUFNO0FBQ3BCSCxJQUFBQSxNQUFNLENBQUNTLGdCQUFQLENBQXdCWCxJQUF4QixFQUE4Qk8sV0FBOUIsRUFBMkM7QUFBRUssTUFBQUEsT0FBTyxFQUFFO0FBQVgsS0FBM0M7QUFDQUwsSUFBQUEsV0FBVyxDQUFDO0FBQUVMLE1BQUFBLE1BQU0sRUFBTkEsTUFBRjtBQUFVVyxNQUFBQSxJQUFJLEVBQUViO0FBQWhCLEtBQUQsQ0FBWDtBQUVBLFdBQU87QUFBQSxhQUFNRSxNQUFNLENBQUNZLG1CQUFQLENBQTJCZCxJQUEzQixFQUFpQ08sV0FBakMsQ0FBTjtBQUFBLEtBQVA7QUFDRCxHQUxELEVBS0csQ0FBQ1AsSUFBRCxFQUFPTyxXQUFQLEVBQW9CTCxNQUFwQixDQUxIO0FBT0EsU0FBTyxLQUFQO0FBQ0QsQ0FqQ0Q7O0FBbUNBSixRQUFRLENBQUNpQixZQUFULEdBQXdCO0FBQ3RCaEIsRUFBQUEsUUFBUSxFQUFFO0FBRFksQ0FBeEI7ZUFJZUQsUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VMYXlvdXRFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IGRlYm91bmNlRm4gZnJvbSAnLi9kZWJvdW5jZSc7XG5cbmNvbnN0IEV2ZW50U3B5ID0gKHsgZGVib3VuY2UsIG5hbWUsIG9uRXZlbnQsIHRhcmdldCB9KSA9PiB7XG4gIC8vIFdlIG5lZWQgdG8gc2F2ZSB0aGUgXCJvbkV2ZW50XCIgdG8gcmVmLlxuICAvLyBUaGlzIGlzIGJlY2F1c2UgXCJvbkV2ZW50XCIgbWF5IGNoYW5nZSBmcm9tIHRpbWUgdG8gdGltZSwgYnV0IGRlYm91bmNlIG1heSBzdGlsbCBmaXJlIHRvIHRoZSBvbGRlciBjYWxsYmFjay5cbiAgY29uc3Qgb25FdmVudFJlZiA9IHVzZVJlZigpO1xuXG4gIG9uRXZlbnRSZWYuY3VycmVudCA9IG9uRXZlbnQ7XG5cbiAgY29uc3QgZGVib3VuY2VyID0gdXNlQ2FsbGJhY2soXG4gICAgZGVib3VuY2VGbihldmVudCA9PiB7XG4gICAgICBjb25zdCB7IGN1cnJlbnQgfSA9IG9uRXZlbnRSZWY7XG5cbiAgICAgIGN1cnJlbnQgJiYgY3VycmVudChldmVudCk7XG4gICAgfSwgZGVib3VuY2UpLFxuICAgIFtkZWJvdW5jZSwgb25FdmVudFJlZl1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVFdmVudCA9IHVzZUNhbGxiYWNrKFxuICAgIGV2ZW50ID0+IHtcbiAgICAgIGV2ZW50LnRpbWVTdGFtcExvdyA9IERhdGUubm93KCk7XG5cbiAgICAgIGRlYm91bmNlcihldmVudCk7XG4gICAgfSxcbiAgICBbZGVib3VuY2VyXVxuICApO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIobmFtZSwgaGFuZGxlRXZlbnQsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICBoYW5kbGVFdmVudCh7IHRhcmdldCwgdHlwZTogbmFtZSB9KTtcblxuICAgIHJldHVybiAoKSA9PiB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCBoYW5kbGVFdmVudCk7XG4gIH0sIFtuYW1lLCBoYW5kbGVFdmVudCwgdGFyZ2V0XSk7XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuRXZlbnRTcHkuZGVmYXVsdFByb3BzID0ge1xuICBkZWJvdW5jZTogMjAwXG59O1xuXG5leHBvcnQgZGVmYXVsdCBFdmVudFNweTtcbiJdfQ==

@@ -36,2 +36,74 @@ "use strict";

});
Object.defineProperty(exports, "useAnimating", {
enumerable: true,
get: function get() {
return _useAnimating.default;
}
});
Object.defineProperty(exports, "useAtBottom", {
enumerable: true,
get: function get() {
return _useAtBottom.default;
}
});
Object.defineProperty(exports, "useAtEnd", {
enumerable: true,
get: function get() {
return _useAtEnd.default;
}
});
Object.defineProperty(exports, "useAtStart", {
enumerable: true,
get: function get() {
return _useAtStart.default;
}
});
Object.defineProperty(exports, "useAtTop", {
enumerable: true,
get: function get() {
return _useAtTop.default;
}
});
Object.defineProperty(exports, "useMode", {
enumerable: true,
get: function get() {
return _useMode.default;
}
});
Object.defineProperty(exports, "useScrollTo", {
enumerable: true,
get: function get() {
return _useScrollTo.default;
}
});
Object.defineProperty(exports, "useScrollToBottom", {
enumerable: true,
get: function get() {
return _useScrollToBottom.default;
}
});
Object.defineProperty(exports, "useScrollToEnd", {
enumerable: true,
get: function get() {
return _useScrollToEnd.default;
}
});
Object.defineProperty(exports, "useScrollToStart", {
enumerable: true,
get: function get() {
return _useScrollToStart.default;
}
});
Object.defineProperty(exports, "useScrollToTop", {
enumerable: true,
get: function get() {
return _useScrollToTop.default;
}
});
Object.defineProperty(exports, "useSticky", {
enumerable: true,
get: function get() {
return _useSticky.default;
}
});
exports.default = void 0;

@@ -51,2 +123,26 @@

var _useAnimating = _interopRequireDefault(require("./hooks/useAnimating"));
var _useAtBottom = _interopRequireDefault(require("./hooks/useAtBottom"));
var _useAtEnd = _interopRequireDefault(require("./hooks/useAtEnd"));
var _useAtStart = _interopRequireDefault(require("./hooks/useAtStart"));
var _useAtTop = _interopRequireDefault(require("./hooks/useAtTop"));
var _useMode = _interopRequireDefault(require("./hooks/useMode"));
var _useScrollTo = _interopRequireDefault(require("./hooks/useScrollTo"));
var _useScrollToBottom = _interopRequireDefault(require("./hooks/useScrollToBottom"));
var _useScrollToEnd = _interopRequireDefault(require("./hooks/useScrollToEnd"));
var _useScrollToStart = _interopRequireDefault(require("./hooks/useScrollToStart"));
var _useScrollToTop = _interopRequireDefault(require("./hooks/useScrollToTop"));
var _useSticky = _interopRequireDefault(require("./hooks/useSticky"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

@@ -56,2 +152,2 @@

exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJCYXNpY1Njcm9sbFRvQm90dG9tIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7ZUFFZUEsNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQXV0b0hpZGVGb2xsb3dCdXR0b24gZnJvbSAnLi9TY3JvbGxUb0JvdHRvbS9BdXRvSGlkZUZvbGxvd0J1dHRvbic7XG5pbXBvcnQgQmFzaWNTY3JvbGxUb0JvdHRvbSBmcm9tICcuL0Jhc2ljU2Nyb2xsVG9Cb3R0b20nO1xuaW1wb3J0IENvbXBvc2VyIGZyb20gJy4vU2Nyb2xsVG9Cb3R0b20vQ29tcG9zZXInO1xuaW1wb3J0IEZ1bmN0aW9uQ29udGV4dCBmcm9tICcuL1Njcm9sbFRvQm90dG9tL0Z1bmN0aW9uQ29udGV4dCc7XG5pbXBvcnQgUGFuZWwgZnJvbSAnLi9TY3JvbGxUb0JvdHRvbS9QYW5lbCc7XG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJy4vU2Nyb2xsVG9Cb3R0b20vU3RhdGVDb250ZXh0JztcblxuZXhwb3J0IGRlZmF1bHQgQmFzaWNTY3JvbGxUb0JvdHRvbVxuXG5leHBvcnQge1xuICBBdXRvSGlkZUZvbGxvd0J1dHRvbixcbiAgQ29tcG9zZXIsXG4gIEZ1bmN0aW9uQ29udGV4dCxcbiAgUGFuZWwsXG4gIFN0YXRlQ29udGV4dFxufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJCYXNpY1Njcm9sbFRvQm90dG9tIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7ZUFFZUEsNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQXV0b0hpZGVGb2xsb3dCdXR0b24gZnJvbSAnLi9TY3JvbGxUb0JvdHRvbS9BdXRvSGlkZUZvbGxvd0J1dHRvbic7XG5pbXBvcnQgQmFzaWNTY3JvbGxUb0JvdHRvbSBmcm9tICcuL0Jhc2ljU2Nyb2xsVG9Cb3R0b20nO1xuaW1wb3J0IENvbXBvc2VyIGZyb20gJy4vU2Nyb2xsVG9Cb3R0b20vQ29tcG9zZXInO1xuaW1wb3J0IEZ1bmN0aW9uQ29udGV4dCBmcm9tICcuL1Njcm9sbFRvQm90dG9tL0Z1bmN0aW9uQ29udGV4dCc7XG5pbXBvcnQgUGFuZWwgZnJvbSAnLi9TY3JvbGxUb0JvdHRvbS9QYW5lbCc7XG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJy4vU2Nyb2xsVG9Cb3R0b20vU3RhdGVDb250ZXh0JztcblxuaW1wb3J0IHVzZUFuaW1hdGluZyBmcm9tICcuL2hvb2tzL3VzZUFuaW1hdGluZyc7XG5pbXBvcnQgdXNlQXRCb3R0b20gZnJvbSAnLi9ob29rcy91c2VBdEJvdHRvbSc7XG5pbXBvcnQgdXNlQXRFbmQgZnJvbSAnLi9ob29rcy91c2VBdEVuZCc7XG5pbXBvcnQgdXNlQXRTdGFydCBmcm9tICcuL2hvb2tzL3VzZUF0U3RhcnQnO1xuaW1wb3J0IHVzZUF0VG9wIGZyb20gJy4vaG9va3MvdXNlQXRUb3AnO1xuaW1wb3J0IHVzZU1vZGUgZnJvbSAnLi9ob29rcy91c2VNb2RlJztcbmltcG9ydCB1c2VTY3JvbGxUbyBmcm9tICcuL2hvb2tzL3VzZVNjcm9sbFRvJztcbmltcG9ydCB1c2VTY3JvbGxUb0JvdHRvbSBmcm9tICcuL2hvb2tzL3VzZVNjcm9sbFRvQm90dG9tJztcbmltcG9ydCB1c2VTY3JvbGxUb0VuZCBmcm9tICcuL2hvb2tzL3VzZVNjcm9sbFRvRW5kJztcbmltcG9ydCB1c2VTY3JvbGxUb1N0YXJ0IGZyb20gJy4vaG9va3MvdXNlU2Nyb2xsVG9TdGFydCc7XG5pbXBvcnQgdXNlU2Nyb2xsVG9Ub3AgZnJvbSAnLi9ob29rcy91c2VTY3JvbGxUb1RvcCc7XG5pbXBvcnQgdXNlU3RpY2t5IGZyb20gJy4vaG9va3MvdXNlU3RpY2t5JztcblxuZXhwb3J0IGRlZmF1bHQgQmFzaWNTY3JvbGxUb0JvdHRvbTtcblxuZXhwb3J0IHtcbiAgQXV0b0hpZGVGb2xsb3dCdXR0b24sXG4gIENvbXBvc2VyLFxuICBGdW5jdGlvbkNvbnRleHQsXG4gIFBhbmVsLFxuICBTdGF0ZUNvbnRleHQsXG4gIHVzZUFuaW1hdGluZyxcbiAgdXNlQXRCb3R0b20sXG4gIHVzZUF0RW5kLFxuICB1c2VBdFN0YXJ0LFxuICB1c2VBdFRvcCxcbiAgdXNlTW9kZSxcbiAgdXNlU2Nyb2xsVG8sXG4gIHVzZVNjcm9sbFRvQm90dG9tLFxuICB1c2VTY3JvbGxUb0VuZCxcbiAgdXNlU2Nyb2xsVG9TdGFydCxcbiAgdXNlU2Nyb2xsVG9Ub3AsXG4gIHVzZVN0aWNreVxufTtcbiJdfQ==

@@ -14,8 +14,16 @@ "use strict";

var _FunctionContext = _interopRequireDefault(require("./FunctionContext"));
var _useScrollToEnd = _interopRequireDefault(require("../hooks/useScrollToEnd"));
var _StateContext = _interopRequireDefault(require("./StateContext"));
var _useSticky3 = _interopRequireDefault(require("../hooks/useSticky"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
var ROOT_CSS = (0, _glamor.css)({

@@ -40,18 +48,20 @@ backgroundColor: 'rgba(0, 0, 0, .2)',

var _default = function _default(_ref) {
var AutoHideFollowButton = function AutoHideFollowButton(_ref) {
var children = _ref.children,
className = _ref.className;
return _react.default.createElement(_StateContext.default.Consumer, null, function (_ref2) {
var sticky = _ref2.sticky;
return !sticky && _react.default.createElement(_FunctionContext.default.Consumer, null, function (_ref3) {
var scrollToEnd = _ref3.scrollToEnd;
return _react.default.createElement("button", {
className: (0, _classnames.default)(ROOT_CSS + '', (className || '') + ''),
onClick: scrollToEnd
}, children);
});
});
var _useSticky = (0, _useSticky3.default)(),
_useSticky2 = _slicedToArray(_useSticky, 1),
sticky = _useSticky2[0];
var scrollToEnd = (0, _useScrollToEnd.default)();
return !sticky && _react.default.createElement("button", {
className: (0, _classnames.default)(ROOT_CSS + '', (className || '') + ''),
onClick: scrollToEnd,
type: "button"
}, children);
};
var _default = AutoHideFollowButton;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TY3JvbGxUb0JvdHRvbS9BdXRvSGlkZUZvbGxvd0J1dHRvbi5qcyJdLCJuYW1lcyI6WyJST09UX0NTUyIsImJhY2tncm91bmRDb2xvciIsImJvcmRlclJhZGl1cyIsImJvcmRlcldpZHRoIiwiYm90dG9tIiwiY3Vyc29yIiwiaGVpZ2h0Iiwib3V0bGluZSIsInBvc2l0aW9uIiwicmlnaHQiLCJ3aWR0aCIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwic3RpY2t5Iiwic2Nyb2xsVG9FbmQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7OztBQUVBLElBQU1BLFFBQVEsR0FBRyxpQkFBSTtBQUNuQkMsRUFBQUEsZUFBZSxFQUFFLG1CQURFO0FBRW5CQyxFQUFBQSxZQUFZLEVBQUUsRUFGSztBQUduQkMsRUFBQUEsV0FBVyxFQUFFLENBSE07QUFJbkJDLEVBQUFBLE1BQU0sRUFBRSxDQUpXO0FBS25CQyxFQUFBQSxNQUFNLEVBQUUsU0FMVztBQU1uQkMsRUFBQUEsTUFBTSxFQUFFLEVBTlc7QUFPbkJDLEVBQUFBLE9BQU8sRUFBRSxDQVBVO0FBUW5CQyxFQUFBQSxRQUFRLEVBQUUsVUFSUztBQVNuQkMsRUFBQUEsS0FBSyxFQUFFLEVBVFk7QUFVbkJDLEVBQUFBLEtBQUssRUFBRSxFQVZZO0FBWW5CLGFBQVc7QUFDVFQsSUFBQUEsZUFBZSxFQUFFO0FBRFIsR0FaUTtBQWdCbkIsY0FBWTtBQUNWQSxJQUFBQSxlQUFlLEVBQUU7QUFEUDtBQWhCTyxDQUFKLENBQWpCOztlQXFCZTtBQUFBLE1BQUdVLFFBQUgsUUFBR0EsUUFBSDtBQUFBLE1BQWFDLFNBQWIsUUFBYUEsU0FBYjtBQUFBLFNBQ2IsNkJBQUMscUJBQUQsQ0FBYyxRQUFkLFFBQ0k7QUFBQSxRQUFHQyxNQUFILFNBQUdBLE1BQUg7QUFBQSxXQUFnQixDQUFDQSxNQUFELElBQ2hCLDZCQUFDLHdCQUFELENBQWlCLFFBQWpCLFFBQ0k7QUFBQSxVQUFHQyxXQUFILFNBQUdBLFdBQUg7QUFBQSxhQUNBO0FBQ0UsUUFBQSxTQUFTLEVBQUcseUJBQVdkLFFBQVEsR0FBRyxFQUF0QixFQUEwQixDQUFDWSxTQUFTLElBQUksRUFBZCxJQUFvQixFQUE5QyxDQURkO0FBRUUsUUFBQSxPQUFPLEVBQUdFO0FBRlosU0FJSUgsUUFKSixDQURBO0FBQUEsS0FESixDQURBO0FBQUEsR0FESixDQURhO0FBQUEsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNzcyB9IGZyb20gJ2dsYW1vcic7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBGdW5jdGlvbkNvbnRleHQgZnJvbSAnLi9GdW5jdGlvbkNvbnRleHQnO1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICcuL1N0YXRlQ29udGV4dCc7XG5cbmNvbnN0IFJPT1RfQ1NTID0gY3NzKHtcbiAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLCAwLCAwLCAuMiknLFxuICBib3JkZXJSYWRpdXM6IDEwLFxuICBib3JkZXJXaWR0aDogMCxcbiAgYm90dG9tOiA1LFxuICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgaGVpZ2h0OiAyMCxcbiAgb3V0bGluZTogMCxcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIHJpZ2h0OiAyMCxcbiAgd2lkdGg6IDIwLFxuXG4gICcmOmhvdmVyJzoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgLjQpJ1xuICB9LFxuXG4gICcmOmFjdGl2ZSc6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsIDAsIDAsIC42KSdcbiAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0ICh7IGNoaWxkcmVuLCBjbGFzc05hbWUgfSkgPT5cbiAgPFN0YXRlQ29udGV4dC5Db25zdW1lcj5cbiAgICB7ICh7IHN0aWNreSB9KSA9PiAhc3RpY2t5ICYmXG4gICAgICA8RnVuY3Rpb25Db250ZXh0LkNvbnN1bWVyPlxuICAgICAgICB7ICh7IHNjcm9sbFRvRW5kIH0pID0+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3NOYW1lPXsgY2xhc3NOYW1lcyhST09UX0NTUyArICcnLCAoY2xhc3NOYW1lIHx8ICcnKSArICcnKSB9XG4gICAgICAgICAgICBvbkNsaWNrPXsgc2Nyb2xsVG9FbmQgfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHsgY2hpbGRyZW4gfVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICA8L0Z1bmN0aW9uQ29udGV4dC5Db25zdW1lcj5cbiAgICB9XG4gIDwvU3RhdGVDb250ZXh0LkNvbnN1bWVyPlxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TY3JvbGxUb0JvdHRvbS9BdXRvSGlkZUZvbGxvd0J1dHRvbi5qcyJdLCJuYW1lcyI6WyJST09UX0NTUyIsImJhY2tncm91bmRDb2xvciIsImJvcmRlclJhZGl1cyIsImJvcmRlcldpZHRoIiwiYm90dG9tIiwiY3Vyc29yIiwiaGVpZ2h0Iiwib3V0bGluZSIsInBvc2l0aW9uIiwicmlnaHQiLCJ3aWR0aCIsIkF1dG9IaWRlRm9sbG93QnV0dG9uIiwiY2hpbGRyZW4iLCJjbGFzc05hbWUiLCJzdGlja3kiLCJzY3JvbGxUb0VuZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOzs7Ozs7Ozs7Ozs7QUFFQSxJQUFNQSxRQUFRLEdBQUcsaUJBQUk7QUFDbkJDLEVBQUFBLGVBQWUsRUFBRSxtQkFERTtBQUVuQkMsRUFBQUEsWUFBWSxFQUFFLEVBRks7QUFHbkJDLEVBQUFBLFdBQVcsRUFBRSxDQUhNO0FBSW5CQyxFQUFBQSxNQUFNLEVBQUUsQ0FKVztBQUtuQkMsRUFBQUEsTUFBTSxFQUFFLFNBTFc7QUFNbkJDLEVBQUFBLE1BQU0sRUFBRSxFQU5XO0FBT25CQyxFQUFBQSxPQUFPLEVBQUUsQ0FQVTtBQVFuQkMsRUFBQUEsUUFBUSxFQUFFLFVBUlM7QUFTbkJDLEVBQUFBLEtBQUssRUFBRSxFQVRZO0FBVW5CQyxFQUFBQSxLQUFLLEVBQUUsRUFWWTtBQVluQixhQUFXO0FBQ1RULElBQUFBLGVBQWUsRUFBRTtBQURSLEdBWlE7QUFnQm5CLGNBQVk7QUFDVkEsSUFBQUEsZUFBZSxFQUFFO0FBRFA7QUFoQk8sQ0FBSixDQUFqQjs7QUFxQkEsSUFBTVUsb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUF1QixPQUE2QjtBQUFBLE1BQTFCQyxRQUEwQixRQUExQkEsUUFBMEI7QUFBQSxNQUFoQkMsU0FBZ0IsUUFBaEJBLFNBQWdCOztBQUFBLG1CQUN2QywwQkFEdUM7QUFBQTtBQUFBLE1BQ2pEQyxNQURpRDs7QUFFeEQsTUFBTUMsV0FBVyxHQUFHLDhCQUFwQjtBQUVBLFNBQ0UsQ0FBQ0QsTUFBRCxJQUNFO0FBQVEsSUFBQSxTQUFTLEVBQUUseUJBQVdkLFFBQVEsR0FBRyxFQUF0QixFQUEwQixDQUFDYSxTQUFTLElBQUksRUFBZCxJQUFvQixFQUE5QyxDQUFuQjtBQUFzRSxJQUFBLE9BQU8sRUFBRUUsV0FBL0U7QUFBNEYsSUFBQSxJQUFJLEVBQUM7QUFBakcsS0FDR0gsUUFESCxDQUZKO0FBT0QsQ0FYRDs7ZUFhZUQsb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjc3MgfSBmcm9tICdnbGFtb3InO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgdXNlU2Nyb2xsVG9FbmQgZnJvbSAnLi4vaG9va3MvdXNlU2Nyb2xsVG9FbmQnO1xuaW1wb3J0IHVzZVN0aWNreSBmcm9tICcuLi9ob29rcy91c2VTdGlja3knO1xuXG5jb25zdCBST09UX0NTUyA9IGNzcyh7XG4gIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgLjIpJyxcbiAgYm9yZGVyUmFkaXVzOiAxMCxcbiAgYm9yZGVyV2lkdGg6IDAsXG4gIGJvdHRvbTogNSxcbiAgY3Vyc29yOiAncG9pbnRlcicsXG4gIGhlaWdodDogMjAsXG4gIG91dGxpbmU6IDAsXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICByaWdodDogMjAsXG4gIHdpZHRoOiAyMCxcblxuICAnJjpob3Zlcic6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsIDAsIDAsIC40KSdcbiAgfSxcblxuICAnJjphY3RpdmUnOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLCAwLCAwLCAuNiknXG4gIH1cbn0pO1xuXG5jb25zdCBBdXRvSGlkZUZvbGxvd0J1dHRvbiA9ICh7IGNoaWxkcmVuLCBjbGFzc05hbWUgfSkgPT4ge1xuICBjb25zdCBbc3RpY2t5XSA9IHVzZVN0aWNreSgpO1xuICBjb25zdCBzY3JvbGxUb0VuZCA9IHVzZVNjcm9sbFRvRW5kKCk7XG5cbiAgcmV0dXJuIChcbiAgICAhc3RpY2t5ICYmIChcbiAgICAgIDxidXR0b24gY2xhc3NOYW1lPXtjbGFzc05hbWVzKFJPT1RfQ1NTICsgJycsIChjbGFzc05hbWUgfHwgJycpICsgJycpfSBvbkNsaWNrPXtzY3JvbGxUb0VuZH0gdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L2J1dHRvbj5cbiAgICApXG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBdXRvSGlkZUZvbGxvd0J1dHRvbjtcbiJdfQ==

@@ -10,6 +10,4 @@ "use strict";

var _react = _interopRequireDefault(require("react"));
var _react = _interopRequireWildcard(require("react"));
var _simpleUpdateIn = _interopRequireDefault(require("simple-update-in"));
var _EventSpy = _interopRequireDefault(require("../EventSpy"));

@@ -25,30 +23,20 @@

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
var MIN_CHECK_INTERVAL = 17; // 1 frame
var MODE_BOTTOM = 'bottom';
var MODE_TOP = 'top';
var NEAR_END_THRESHOLD = 1;

@@ -63,3 +51,3 @@ var SCROLL_DECISION_DURATION = 34; // 2 frames

function computeViewState(_ref) {
var mode = _ref.stateContext.mode,
var mode = _ref.mode,
_ref$target = _ref.target,

@@ -71,7 +59,8 @@ offsetHeight = _ref$target.offsetHeight,

var atTop = scrollTop < NEAR_END_THRESHOLD;
var atEnd = mode === 'top' ? atTop : atBottom;
var atEnd = mode === MODE_TOP ? atTop : atBottom;
var atStart = mode !== MODE_TOP ? atTop : atBottom;
return {
atBottom: atBottom,
atEnd: atEnd,
atStart: !atEnd,
atStart: atStart,
atTop: atTop

@@ -81,100 +70,88 @@ };

var Composer =
/*#__PURE__*/
function (_React$Component) {
_inherits(Composer, _React$Component);
var Composer = function Composer(_ref2) {
var checkInterval = _ref2.checkInterval,
children = _ref2.children,
debounce = _ref2.debounce,
mode = _ref2.mode;
mode = mode === MODE_TOP ? MODE_TOP : MODE_BOTTOM;
var ignoreScrollEventBeforeRef = (0, _react.useRef)(0);
function Composer(props) {
var _this;
var _useState = (0, _react.useState)(mode === MODE_TOP ? 0 : '100%'),
_useState2 = _slicedToArray(_useState, 2),
scrollTop = _useState2[0],
setScrollTop = _useState2[1]; // Internal context
_classCallCheck(this, Composer);
_this = _possibleConstructorReturn(this, _getPrototypeOf(Composer).call(this, props));
_this.handleScroll = _this.handleScroll.bind(_assertThisInitialized(_this));
_this.handleScrollEnd = _this.handleScrollEnd.bind(_assertThisInitialized(_this));
_this._ignoreScrollEventBefore = 0;
_this.state = {
functionContext: {
scrollTo: function scrollTo(scrollTop) {
return _this.setState(function (_ref2) {
var stateContext = _ref2.stateContext;
return {
scrollTop: scrollTop,
stateContext: (0, _simpleUpdateIn.default)(stateContext, ['animating'], function () {
return true;
})
};
});
},
scrollToBottom: function scrollToBottom() {
return _this.state.functionContext.scrollTo('100%');
},
scrollToEnd: function scrollToEnd() {
var _assertThisInitialize = _assertThisInitialized(_this),
_assertThisInitialize2 = _assertThisInitialize.state,
functionContext = _assertThisInitialize2.functionContext,
stateContext = _assertThisInitialize2.stateContext;
var _useState3 = (0, _react.useState)(0),
_useState4 = _slicedToArray(_useState3, 2),
offsetHeight = _useState4[0],
setOffsetHeight = _useState4[1];
stateContext.mode === 'top' ? functionContext.scrollToTop() : functionContext.scrollToBottom();
},
scrollToStart: function scrollToStart() {
var _assertThisInitialize3 = _assertThisInitialized(_this),
_assertThisInitialize4 = _assertThisInitialize3.state,
functionContext = _assertThisInitialize4.functionContext,
stateContext = _assertThisInitialize4.stateContext;
var _useState5 = (0, _react.useState)(0),
_useState6 = _slicedToArray(_useState5, 2),
scrollHeight = _useState6[0],
setScrollHeight = _useState6[1]; // State context
stateContext.mode === 'top' ? functionContext.scrollToBottom() : functionContext.scrollToTop();
},
scrollToTop: function scrollToTop() {
return _this.state.functionContext.scrollTo(0);
}
},
internalContext: {
offsetHeight: 0,
scrollHeight: 0,
setTarget: function setTarget(target) {
return _this.setState(function () {
return {
target: target
};
});
}
},
scrollTop: props.mode === 'top' ? 0 : '100%',
stateContext: {
animating: false,
atBottom: true,
atEnd: true,
atTop: true,
mode: props.mode,
sticky: true
},
target: null
};
return _this;
}
_createClass(Composer, [{
key: "componentDidMount",
value: function componentDidMount() {
this.enableWorker();
}
}, {
key: "disableWorker",
value: function disableWorker() {
clearInterval(this._stickyCheckTimeout);
}
}, {
key: "enableWorker",
value: function enableWorker() {
var _this2 = this;
var _useState7 = (0, _react.useState)(false),
_useState8 = _slicedToArray(_useState7, 2),
animating = _useState8[0],
setAnimating = _useState8[1];
clearInterval(this._stickyCheckTimeout);
var _useState9 = (0, _react.useState)(true),
_useState10 = _slicedToArray(_useState9, 2),
atBottom = _useState10[0],
setAtBottom = _useState10[1];
var _useState11 = (0, _react.useState)(true),
_useState12 = _slicedToArray(_useState11, 2),
atEnd = _useState12[0],
setAtEnd = _useState12[1];
var _useState13 = (0, _react.useState)(true),
_useState14 = _slicedToArray(_useState13, 2),
atTop = _useState14[0],
setAtTop = _useState14[1];
var _useState15 = (0, _react.useState)(false),
_useState16 = _slicedToArray(_useState15, 2),
atStart = _useState16[0],
setAtStart = _useState16[1];
var _useState17 = (0, _react.useState)(true),
_useState18 = _slicedToArray(_useState17, 2),
sticky = _useState18[0],
setSticky = _useState18[1]; // Function context
var scrollTo = (0, _react.useCallback)(function (scrollTop) {
setAnimating(true);
setScrollTop(scrollTop);
}, [setAnimating, setScrollTop]);
var scrollToBottom = (0, _react.useCallback)(function () {
return scrollTo('100%');
}, [scrollTo]);
var scrollToTop = (0, _react.useCallback)(function () {
return scrollTo(0);
}, [scrollTo]);
var scrollToEnd = (0, _react.useCallback)(function () {
return mode === MODE_TOP ? scrollToTop() : scrollToBottom();
}, [mode, scrollToBottom, scrollToTop]);
var scrollToStart = (0, _react.useCallback)(function () {
return mode === MODE_TOP ? scrollToBottom() : scrollToTop();
}, [mode, scrollToBottom, scrollToTop]);
var _useState19 = (0, _react.useState)(null),
_useState20 = _slicedToArray(_useState19, 2),
target = _useState20[0],
setTarget = _useState20[1];
(0, _react.useEffect)(function () {
if (sticky) {
var stickyButNotAtEndSince = false;
this._stickyCheckTimeout = setImmediateInterval(function () {
var state = _this2.state;
var sticky = state.stateContext.sticky,
target = state.target;
if (sticky && target && !computeViewState(state).atEnd) {
var timeout = setImmediateInterval(function () {
if (sticky && target && !computeViewState({
mode: mode,
target: target
}).atEnd) {
if (!stickyButNotAtEndSince) {

@@ -189,3 +166,3 @@ stickyButNotAtEndSince = Date.now();

// Repro: Open Firefox, set checkInterval to a lower number, and try to scroll by dragging the scroll handler. It will jump back.
state.functionContext.scrollToEnd();
!animating && scrollToEnd();
stickyButNotAtEndSince = false;

@@ -196,173 +173,120 @@ }

}
}, Math.max(MIN_CHECK_INTERVAL, this.props.checkInterval) || MIN_CHECK_INTERVAL);
}, Math.max(MIN_CHECK_INTERVAL, checkInterval) || MIN_CHECK_INTERVAL);
return function () {
return clearInterval(timeout);
};
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
this.disableWorker();
}, [animating, checkInterval, mode, scrollToEnd, sticky, target]);
var handleScroll = (0, _react.useCallback)(function (_ref3) {
var timeStampLow = _ref3.timeStampLow;
// Currently, there are no reliable way to check if the "scroll" event is trigger due to
// user gesture, programmatic scrolling, or Chrome-synthesized "scroll" event to compensate size change.
// Thus, we use our best-effort to guess if it is triggered by user gesture, and disable sticky if it is heading towards the start direction.
if (timeStampLow <= ignoreScrollEventBeforeRef.current) {
// Since we debounce "scroll" event, this handler might be called after spineTo.onEnd (a.k.a. artificial scrolling).
// We should ignore debounced event fired after scrollEnd, because without skipping them, the userInitiatedScroll calculated below will not be accurate.
// Thus, on a fast machine, adding elements super fast will lose the "stickiness".
return;
}
}, {
key: "componentWillReceiveProps",
value: function componentWillReceiveProps(nextProps) {
this.setState(function (_ref3) {
var stateContext = _ref3.stateContext;
return {
stateContext: _objectSpread({}, stateContext, {
mode: nextProps.mode === 'top' ? 'top' : 'bottom'
})
};
});
}
}, {
key: "handleScroll",
value: function handleScroll(_ref4) {
var _this3 = this;
var timeStampLow = _ref4.timeStampLow;
if (target) {
var _computeViewState = computeViewState({
mode: mode,
target: target
}),
_atBottom = _computeViewState.atBottom,
_atEnd = _computeViewState.atEnd,
_atStart = _computeViewState.atStart,
_atTop = _computeViewState.atTop;
// Currently, there are no reliable way to check if the "scroll" event is trigger due to
// user gesture, programmatic scrolling, or Chrome-synthesized "scroll" event to compensate size change.
// Thus, we use our best-effort to guess if it is triggered by user gesture, and disable sticky if it is heading towards the start direction.
if (timeStampLow <= this._ignoreScrollEventBefore) {
// Since we debounce "scroll" event, this handler might be called after spineTo.onEnd (a.k.a. artificial scrolling).
// We should ignore debounced event fired after scrollEnd, because without skipping them, the userInitiatedScroll calculated below will not be accurate.
// Thus, on a fast machine, adding elements super fast will lose the "stickiness".
return;
}
setAtBottom(_atBottom);
setAtEnd(_atEnd);
setAtStart(_atStart);
setAtTop(_atTop); // Chrome will emit "synthetic" scroll event if the container is resized or an element is added
// We need to ignore these "synthetic" events
// Repro: In playground, press 4-1-5-1-1 (small, add one, normal, add one, add one)
// Nomatter how fast or slow the sequence is being presssed, it should still stick to the bottom
this.disableWorker();
this.setState(function (state) {
var target = state.target;
var nextOffsetHeight = target.offsetHeight,
nextScrollHeight = target.scrollHeight;
var offsetHeightChanged = nextOffsetHeight !== offsetHeight;
var scrollHeightChanged = nextScrollHeight !== scrollHeight;
offsetHeightChanged && setOffsetHeight(nextOffsetHeight);
scrollHeightChanged && setScrollHeight(nextScrollHeight); // Sticky means:
// - If it is scrolled programatically, we are still in sticky mode
// - If it is scrolled by the user, then sticky means if we are at the end
// Only update stickiness if the scroll event is not due to synthetic scroll done by Chrome
if (target) {
var internalContext = state.internalContext,
scrollTop = state.scrollTop,
stateContext = state.stateContext;
!offsetHeightChanged && !scrollHeightChanged && setSticky(animating || _atEnd); // If no scrollTop is set (not in programmatic scrolling mode), we should set "animating" to false
// "animating" is used to calculate the "sticky" property
var _computeViewState = computeViewState(state),
atBottom = _computeViewState.atBottom,
atEnd = _computeViewState.atEnd,
atStart = _computeViewState.atStart,
atTop = _computeViewState.atTop;
var nextInternalContext = internalContext;
var nextStateContext = stateContext;
nextStateContext = (0, _simpleUpdateIn.default)(nextStateContext, ['atBottom'], function () {
return atBottom;
});
nextStateContext = (0, _simpleUpdateIn.default)(nextStateContext, ['atEnd'], function () {
return atEnd;
});
nextStateContext = (0, _simpleUpdateIn.default)(nextStateContext, ['atStart'], function () {
return atStart;
});
nextStateContext = (0, _simpleUpdateIn.default)(nextStateContext, ['atTop'], function () {
return atTop;
}); // Chrome will emit "synthetic" scroll event if the container is resized or an element is added
// We need to ignore these "synthetic" events
// Repro: In playground, press 4-1-5-1-1 (small, add one, normal, add one, add one)
// Nomatter how fast or slow the sequence is being presssed, it should still stick to the bottom
var offsetHeight = target.offsetHeight,
scrollHeight = target.scrollHeight;
var resized = offsetHeight !== internalContext.offsetHeight;
var elementChanged = scrollHeight !== internalContext.scrollHeight;
if (resized) {
nextInternalContext = (0, _simpleUpdateIn.default)(nextInternalContext, ['offsetHeight'], function () {
return offsetHeight;
});
}
if (elementChanged) {
nextInternalContext = (0, _simpleUpdateIn.default)(nextInternalContext, ['scrollHeight'], function () {
return scrollHeight;
});
} // Sticky means:
// - If it is scrolled programatically, we are still in sticky mode
// - If it is scrolled by the user, then sticky means if we are at the end
// Only update stickiness if the scroll event is not due to synthetic scroll done by Chrome
if (!resized && !elementChanged) {
nextStateContext = (0, _simpleUpdateIn.default)(nextStateContext, ['sticky'], function () {
return stateContext.animating ? true : atEnd;
});
} // If no scrollTop is set (not in programmatic scrolling mode), we should set "animating" to false
// "animating" is used to calculate the "sticky" property
if (scrollTop === null) {
nextStateContext = (0, _simpleUpdateIn.default)(nextStateContext, ['animating'], function () {
return false;
});
}
return _objectSpread({}, internalContext === nextInternalContext ? {} : {
internalContext: nextInternalContext
}, {}, stateContext === nextStateContext ? {} : {
stateContext: nextStateContext
});
}
}, function () {
_this3.state.stateContext.sticky && _this3.enableWorker();
});
scrollTop === null && setAnimating(false);
}
}, {
key: "handleScrollEnd",
value: function handleScrollEnd() {
// We should ignore debouncing handleScroll that emit before this time
this._ignoreScrollEventBefore = Date.now();
this.setState(function () {
return {
scrollTop: null
};
});
}
}, {
key: "render",
value: function render() {
var handleScroll = this.handleScroll,
handleScrollEnd = this.handleScrollEnd,
_this$props = this.props,
children = _this$props.children,
debounce = _this$props.debounce,
_this$state = this.state,
functionContext = _this$state.functionContext,
internalContext = _this$state.internalContext,
scrollTop = _this$state.scrollTop,
stateContext = _this$state.stateContext,
target = _this$state.target;
return _react.default.createElement(_InternalContext.default.Provider, {
value: internalContext
}, _react.default.createElement(_FunctionContext.default.Provider, {
value: functionContext
}, _react.default.createElement(_StateContext.default.Provider, {
value: stateContext
}, children, target && _react.default.createElement(_EventSpy.default, {
debounce: debounce,
name: "scroll",
onEvent: handleScroll,
target: target
}), target && scrollTop !== null && _react.default.createElement(_SpineTo.default, {
name: "scrollTop",
onEnd: handleScrollEnd,
target: target,
value: scrollTop
}))));
}
}]);
}, [animating, ignoreScrollEventBeforeRef, mode, offsetHeight, scrollHeight, scrollTop, setAnimating, setAtBottom, setAtEnd, setAtStart, setAtTop, setOffsetHeight, setScrollHeight, setSticky, target]);
var handleScrollEnd = (0, _react.useCallback)(function () {
ignoreScrollEventBeforeRef.current = Date.now();
setAnimating(false);
setScrollTop(null);
}, [ignoreScrollEventBeforeRef, setScrollTop]);
var internalContext = (0, _react.useMemo)(function () {
return {
offsetHeight: offsetHeight,
scrollHeight: scrollHeight,
setTarget: setTarget
};
}, [offsetHeight, scrollHeight, setTarget]);
var stateContext = (0, _react.useMemo)(function () {
return {
animating: animating,
atBottom: atBottom,
atEnd: atEnd,
atStart: atStart,
atTop: atTop,
mode: mode,
sticky: sticky
};
}, [animating, atBottom, atEnd, atStart, atTop, mode, sticky]);
var functionContext = (0, _react.useMemo)(function () {
return {
scrollTo: scrollTo,
scrollToBottom: scrollToBottom,
scrollToEnd: scrollToEnd,
scrollToStart: scrollToStart,
scrollToTop: scrollToTop
};
}, [scrollTo, scrollToBottom, scrollToEnd, scrollToStart, scrollToTop]);
return _react.default.createElement(_InternalContext.default.Provider, {
value: internalContext
}, _react.default.createElement(_FunctionContext.default.Provider, {
value: functionContext
}, _react.default.createElement(_StateContext.default.Provider, {
value: stateContext
}, children, target && _react.default.createElement(_EventSpy.default, {
debounce: debounce,
name: "scroll",
onEvent: handleScroll,
target: target
}), target && scrollTop !== null && _react.default.createElement(_SpineTo.default, {
name: "scrollTop",
onEnd: handleScrollEnd,
target: target,
value: scrollTop
}))));
};
return Composer;
}(_react.default.Component);
exports.default = Composer;
Composer.defaultProps = {
checkInterval: 100,
debounce: 17
children: undefined,
debounce: 17,
mode: undefined
};
Composer.propTypes = {
checkInterval: _propTypes.default.number,
debounce: _propTypes.default.number
children: _propTypes.default.any,
debounce: _propTypes.default.number,
mode: _propTypes.default.oneOf(['bottom', 'top'])
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TY3JvbGxUb0JvdHRvbS9Db21wb3Nlci5qcyJdLCJuYW1lcyI6WyJNSU5fQ0hFQ0tfSU5URVJWQUwiLCJORUFSX0VORF9USFJFU0hPTEQiLCJTQ1JPTExfREVDSVNJT05fRFVSQVRJT04iLCJzZXRJbW1lZGlhdGVJbnRlcnZhbCIsImZuIiwibXMiLCJzZXRJbnRlcnZhbCIsImNvbXB1dGVWaWV3U3RhdGUiLCJtb2RlIiwic3RhdGVDb250ZXh0IiwidGFyZ2V0Iiwib2Zmc2V0SGVpZ2h0Iiwic2Nyb2xsSGVpZ2h0Iiwic2Nyb2xsVG9wIiwiYXRCb3R0b20iLCJhdFRvcCIsImF0RW5kIiwiYXRTdGFydCIsIkNvbXBvc2VyIiwicHJvcHMiLCJoYW5kbGVTY3JvbGwiLCJiaW5kIiwiaGFuZGxlU2Nyb2xsRW5kIiwiX2lnbm9yZVNjcm9sbEV2ZW50QmVmb3JlIiwic3RhdGUiLCJmdW5jdGlvbkNvbnRleHQiLCJzY3JvbGxUbyIsInNldFN0YXRlIiwic2Nyb2xsVG9Cb3R0b20iLCJzY3JvbGxUb0VuZCIsInNjcm9sbFRvVG9wIiwic2Nyb2xsVG9TdGFydCIsImludGVybmFsQ29udGV4dCIsInNldFRhcmdldCIsImFuaW1hdGluZyIsInN0aWNreSIsImVuYWJsZVdvcmtlciIsImNsZWFySW50ZXJ2YWwiLCJfc3RpY2t5Q2hlY2tUaW1lb3V0Iiwic3RpY2t5QnV0Tm90QXRFbmRTaW5jZSIsIkRhdGUiLCJub3ciLCJNYXRoIiwibWF4IiwiY2hlY2tJbnRlcnZhbCIsImRpc2FibGVXb3JrZXIiLCJuZXh0UHJvcHMiLCJ0aW1lU3RhbXBMb3ciLCJuZXh0SW50ZXJuYWxDb250ZXh0IiwibmV4dFN0YXRlQ29udGV4dCIsInJlc2l6ZWQiLCJlbGVtZW50Q2hhbmdlZCIsImNoaWxkcmVuIiwiZGVib3VuY2UiLCJSZWFjdCIsIkNvbXBvbmVudCIsImRlZmF1bHRQcm9wcyIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsIm51bWJlciJdLCJtYXBwaW5ncyI6Ijs7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LEVBQUdQO0FBQWxDLFNBQ0UsNkJBQUMscUJBQUQsQ0FBYyxRQUFkO0FBQXVCLFFBQUEsS0FBSyxFQUFHaEI7QUFBL0IsU0FDSTJDLFFBREosRUFHSTFDLE1BQU0sSUFDSiw2QkFBQyxpQkFBRDtBQUNFLFFBQUEsUUFBUSxFQUFHMkMsUUFEYjtBQUVFLFFBQUEsSUFBSSxFQUFDLFFBRlA7QUFHRSxRQUFBLE9BQU8sRUFBR2pDLFlBSFo7QUFJRSxRQUFBLE1BQU0sRUFBR1Y7QUFKWCxRQUpOLEVBWUlBLE1BQU0sSUFBSUcsU0FBUyxLQUFLLElBQXhCLElBQ0UsNkJBQUMsZ0JBQUQ7QUFDRSxRQUFBLElBQUksRUFBQyxXQURQO0FBRUUsUUFBQSxLQUFLLEVBQUdTLGVBRlY7QUFHRSxRQUFBLE1BQU0sRUFBR1osTUFIWDtBQUlFLFFBQUEsS0FBSyxFQUFHRztBQUpWLFFBYk4sQ0FERixDQURGLENBREY7QUEyQkQ7Ozs7RUF2Tm1DeUMsZUFBTUMsUzs7O0FBME41Q3JDLFFBQVEsQ0FBQ3NDLFlBQVQsR0FBd0I7QUFDdEJaLEVBQUFBLGFBQWEsRUFBRSxHQURPO0FBRXRCUyxFQUFBQSxRQUFRLEVBQUU7QUFGWSxDQUF4QjtBQUtBbkMsUUFBUSxDQUFDdUMsU0FBVCxHQUFxQjtBQUNuQmIsRUFBQUEsYUFBYSxFQUFFYyxtQkFBVUMsTUFETjtBQUVuQk4sRUFBQUEsUUFBUSxFQUFFSyxtQkFBVUM7QUFGRCxDQUFyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVwZGF0ZUluIGZyb20gJ3NpbXBsZS11cGRhdGUtaW4nO1xuXG5pbXBvcnQgRXZlbnRTcHkgZnJvbSAnLi4vRXZlbnRTcHknO1xuaW1wb3J0IEZ1bmN0aW9uQ29udGV4dCBmcm9tICcuL0Z1bmN0aW9uQ29udGV4dCc7XG5pbXBvcnQgSW50ZXJuYWxDb250ZXh0IGZyb20gJy4vSW50ZXJuYWxDb250ZXh0JztcbmltcG9ydCBTcGluZVRvIGZyb20gJy4uL1NwaW5lVG8nO1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICcuL1N0YXRlQ29udGV4dCc7XG5cbmNvbnN0IE1JTl9DSEVDS19JTlRFUlZBTCA9IDE3OyAgICAgICAvLyAxIGZyYW1lXG5jb25zdCBORUFSX0VORF9USFJFU0hPTEQgPSAxO1xuY29uc3QgU0NST0xMX0RFQ0lTSU9OX0RVUkFUSU9OID0gMzQ7IC8vIDIgZnJhbWVzXG5cbmZ1bmN0aW9uIHNldEltbWVkaWF0ZUludGVydmFsKGZuLCBtcykge1xuICBmbigpO1xuXG4gIHJldHVybiBzZXRJbnRlcnZhbChmbiwgbXMpO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlVmlld1N0YXRlKHsgc3RhdGVDb250ZXh0OiB7IG1vZGUgfSwgdGFyZ2V0OiB7IG9mZnNldEhlaWdodCwgc2Nyb2xsSGVpZ2h0LCBzY3JvbGxUb3AgfSB9KSB7XG4gIGNvbnN0IGF0Qm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gb2Zmc2V0SGVpZ2h0IDwgTkVBUl9FTkRfVEhSRVNIT0xEO1xuICBjb25zdCBhdFRvcCA9IHNjcm9sbFRvcCA8IE5FQVJfRU5EX1RIUkVTSE9MRDtcbiAgY29uc3QgYXRFbmQgPSBtb2RlID09PSAndG9wJyA/IGF0VG9wIDogYXRCb3R0b207XG5cbiAgcmV0dXJuIHtcbiAgICBhdEJvdHRvbSxcbiAgICBhdEVuZCxcbiAgICBhdFN0YXJ0OiAhYXRFbmQsXG4gICAgYXRUb3BcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tcG9zZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuaGFuZGxlU2Nyb2xsID0gdGhpcy5oYW5kbGVTY3JvbGwuYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZVNjcm9sbEVuZCA9IHRoaXMuaGFuZGxlU2Nyb2xsRW5kLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLl9pZ25vcmVTY3JvbGxFdmVudEJlZm9yZSA9IDA7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZnVuY3Rpb25Db250ZXh0OiB7XG4gICAgICAgIHNjcm9sbFRvOiBzY3JvbGxUb3AgPT4gdGhpcy5zZXRTdGF0ZSgoeyBzdGF0ZUNvbnRleHQgfSkgPT4gKHtcbiAgICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgICAgc3RhdGVDb250ZXh0OiB1cGRhdGVJbihzdGF0ZUNvbnRleHQsIFsnYW5pbWF0aW5nJ10sICgpID0+IHRydWUpXG4gICAgICAgIH0pKSxcbiAgICAgICAgc2Nyb2xsVG9Cb3R0b206ICgpID0+IHRoaXMuc3RhdGUuZnVuY3Rpb25Db250ZXh0LnNjcm9sbFRvKCcxMDAlJyksXG4gICAgICAgIHNjcm9sbFRvRW5kOiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBzdGF0ZTogeyBmdW5jdGlvbkNvbnRleHQsIHN0YXRlQ29udGV4dCB9IH0gPSB0aGlzO1xuXG4gICAgICAgICAgc3RhdGVDb250ZXh0Lm1vZGUgPT09ICd0b3AnID8gZnVuY3Rpb25Db250ZXh0LnNjcm9sbFRvVG9wKCkgOiBmdW5jdGlvbkNvbnRleHQuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2Nyb2xsVG9TdGFydDogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgc3RhdGU6IHsgZnVuY3Rpb25Db250ZXh0LCBzdGF0ZUNvbnRleHQgfSB9ID0gdGhpcztcblxuICAgICAgICAgIHN0YXRlQ29udGV4dC5tb2RlID09PSAndG9wJyA/IGZ1bmN0aW9uQ29udGV4dC5zY3JvbGxUb0JvdHRvbSgpIDogZnVuY3Rpb25Db250ZXh0LnNjcm9sbFRvVG9wKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNjcm9sbFRvVG9wOiAoKSA9PiB0aGlzLnN0YXRlLmZ1bmN0aW9uQ29udGV4dC5zY3JvbGxUbygwKVxuICAgICAgfSxcbiAgICAgIGludGVybmFsQ29udGV4dDoge1xuICAgICAgICBvZmZzZXRIZWlnaHQ6IDAsXG4gICAgICAgIHNjcm9sbEhlaWdodDogMCxcbiAgICAgICAgc2V0VGFyZ2V0OiB0YXJnZXQgPT4gdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyB0YXJnZXQgfSkpXG4gICAgICB9LFxuICAgICAgc2Nyb2xsVG9wOiBwcm9wcy5tb2RlID09PSAndG9wJyA/IDAgOiAnMTAwJScsXG4gICAgICBzdGF0ZUNvbnRleHQ6IHtcbiAgICAgICAgYW5pbWF0aW5nOiBmYWxzZSxcbiAgICAgICAgYXRCb3R0b206IHRydWUsXG4gICAgICAgIGF0RW5kOiB0cnVlLFxuICAgICAgICBhdFRvcDogdHJ1ZSxcbiAgICAgICAgbW9kZTogcHJvcHMubW9kZSxcbiAgICAgICAgc3RpY2t5OiB0cnVlXG4gICAgICB9LFxuICAgICAgdGFyZ2V0OiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMuZW5hYmxlV29ya2VyKCk7XG4gIH1cblxuICBkaXNhYmxlV29ya2VyKCkge1xuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fc3RpY2t5Q2hlY2tUaW1lb3V0KTtcbiAgfVxuXG4gIGVuYWJsZVdvcmtlcigpIHtcbiAgICBjbGVhckludGVydmFsKHRoaXMuX3N0aWNreUNoZWNrVGltZW91dCk7XG5cbiAgICBsZXQgc3RpY2t5QnV0Tm90QXRFbmRTaW5jZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5fc3RpY2t5Q2hlY2tUaW1lb3V0ID0gc2V0SW1tZWRpYXRlSW50ZXJ2YWwoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RhdGUgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHsgc3RhdGVDb250ZXh0OiB7IHN0aWNreSB9LCB0YXJnZXQgfSA9IHN0YXRlO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBzdGlja3lcbiAgICAgICAgICAmJiB0YXJnZXRcbiAgICAgICAgICAmJiAhY29tcHV0ZVZpZXdTdGF0ZShzdGF0ZSkuYXRFbmRcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKCFzdGlja3lCdXROb3RBdEVuZFNpbmNlKSB7XG4gICAgICAgICAgICBzdGlja3lCdXROb3RBdEVuZFNpbmNlID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKERhdGUubm93KCkgLSBzdGlja3lCdXROb3RBdEVuZFNpbmNlID4gU0NST0xMX0RFQ0lTSU9OX0RVUkFUSU9OKSB7XG4gICAgICAgICAgICAvLyBRdWlya3M6IEluIEZpcmVmb3gsIGFmdGVyIHVzZXIgc2Nyb2xsIGRvd24sIEZpcmVmb3ggZG8gdHdvIHRoaW5nczpcbiAgICAgICAgICAgIC8vICAgICAgICAgMS4gU2V0IHRvIGEgbmV3IFwic2Nyb2xsVG9wXCJcbiAgICAgICAgICAgIC8vICAgICAgICAgMi4gRmlyZSBcInNjcm9sbFwiIGV2ZW50XG4gICAgICAgICAgICAvLyAgICAgICAgIEZvciB3aGF0IHdlIG9ic2VydmVkLCAjMSBpcyBmaXJlZCBhYm91dCAyMG1zIGJlZm9yZSAjMi4gVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB0aGlzIHN0aWNreUNoZWNrVGltZW91dCBpcyBiZWluZyBzY2hlZHVsZWQgYmV0d2VlbiAxIGFuZCAyLlxuICAgICAgICAgICAgLy8gICAgICAgICBUaGF0IG1lYW5zLCBpZiB3ZSBqdXN0IGxvb2sgYXQgIzEgdG8gZGVjaWRlIGlmIHdlIHNob3VsZCBzY3JvbGwsIHdlIHdpbGwgYWx3YXlzIHNjcm9sbCwgaW4gb3Bwb3NlIHRvIHRoZSB1c2VyJ3MgaW50ZW50aW9uLlxuICAgICAgICAgICAgLy8gUmVwcm86IE9wZW4gRmlyZWZveCwgc2V0IGNoZWNrSW50ZXJ2YWwgdG8gYSBsb3dlciBudW1iZXIsIGFuZCB0cnkgdG8gc2Nyb2xsIGJ5IGRyYWdnaW5nIHRoZSBzY3JvbGwgaGFuZGxlci4gSXQgd2lsbCBqdW1wIGJhY2suXG5cbiAgICAgICAgICAgIHN0YXRlLmZ1bmN0aW9uQ29udGV4dC5zY3JvbGxUb0VuZCgpO1xuICAgICAgICAgICAgc3RpY2t5QnV0Tm90QXRFbmRTaW5jZSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGlja3lCdXROb3RBdEVuZFNpbmNlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBNYXRoLm1heChNSU5fQ0hFQ0tfSU5URVJWQUwsIHRoaXMucHJvcHMuY2hlY2tJbnRlcnZhbCkgfHwgTUlOX0NIRUNLX0lOVEVSVkFMXG4gICAgKTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMuZGlzYWJsZVdvcmtlcigpO1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICB0aGlzLnNldFN0YXRlKCh7IHN0YXRlQ29udGV4dCB9KSA9PiAoe1xuICAgICAgc3RhdGVDb250ZXh0OiB7XG4gICAgICAgIC4uLnN0YXRlQ29udGV4dCxcbiAgICAgICAgbW9kZTogbmV4dFByb3BzLm1vZGUgPT09ICd0b3AnID8gJ3RvcCcgOiAnYm90dG9tJ1xuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuXG4gIGhhbmRsZVNjcm9sbCh7IHRpbWVTdGFtcExvdyB9KSB7XG4gICAgLy8gQ3VycmVudGx5LCB0aGVyZSBhcmUgbm8gcmVsaWFibGUgd2F5IHRvIGNoZWNrIGlmIHRoZSBcInNjcm9sbFwiIGV2ZW50IGlzIHRyaWdnZXIgZHVlIHRvXG4gICAgLy8gdXNlciBnZXN0dXJlLCBwcm9ncmFtbWF0aWMgc2Nyb2xsaW5nLCBvciBDaHJvbWUtc3ludGhlc2l6ZWQgXCJzY3JvbGxcIiBldmVudCB0byBjb21wZW5zYXRlIHNpemUgY2hhbmdlLlxuICAgIC8vIFRodXMsIHdlIHVzZSBvdXIgYmVzdC1lZmZvcnQgdG8gZ3Vlc3MgaWYgaXQgaXMgdHJpZ2dlcmVkIGJ5IHVzZXIgZ2VzdHVyZSwgYW5kIGRpc2FibGUgc3RpY2t5IGlmIGl0IGlzIGhlYWRpbmcgdG93YXJkcyB0aGUgc3RhcnQgZGlyZWN0aW9uLlxuXG4gICAgaWYgKHRpbWVTdGFtcExvdyA8PSB0aGlzLl9pZ25vcmVTY3JvbGxFdmVudEJlZm9yZSkge1xuICAgICAgLy8gU2luY2Ugd2UgZGVib3VuY2UgXCJzY3JvbGxcIiBldmVudCwgdGhpcyBoYW5kbGVyIG1pZ2h0IGJlIGNhbGxlZCBhZnRlciBzcGluZVRvLm9uRW5kIChhLmsuYS4gYXJ0aWZpY2lhbCBzY3JvbGxpbmcpLlxuICAgICAgLy8gV2Ugc2hvdWxkIGlnbm9yZSBkZWJvdW5jZWQgZXZlbnQgZmlyZWQgYWZ0ZXIgc2Nyb2xsRW5kLCBiZWNhdXNlIHdpdGhvdXQgc2tpcHBpbmcgdGhlbSwgdGhlIHVzZXJJbml0aWF0ZWRTY3JvbGwgY2FsY3VsYXRlZCBiZWxvdyB3aWxsIG5vdCBiZSBhY2N1cmF0ZS5cbiAgICAgIC8vIFRodXMsIG9uIGEgZmFzdCBtYWNoaW5lLCBhZGRpbmcgZWxlbWVudHMgc3VwZXIgZmFzdCB3aWxsIGxvc2UgdGhlIFwic3RpY2tpbmVzc1wiLlxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kaXNhYmxlV29ya2VyKCk7XG5cbiAgICB0aGlzLnNldFN0YXRlKHN0YXRlID0+IHtcbiAgICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBzdGF0ZTtcblxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBjb25zdCB7IGludGVybmFsQ29udGV4dCwgc2Nyb2xsVG9wLCBzdGF0ZUNvbnRleHQgfSA9IHN0YXRlO1xuICAgICAgICBjb25zdCB7IGF0Qm90dG9tLCBhdEVuZCwgYXRTdGFydCwgYXRUb3AgfSA9IGNvbXB1dGVWaWV3U3RhdGUoc3RhdGUpO1xuICAgICAgICBsZXQgbmV4dEludGVybmFsQ29udGV4dCA9IGludGVybmFsQ29udGV4dDtcbiAgICAgICAgbGV0IG5leHRTdGF0ZUNvbnRleHQgPSBzdGF0ZUNvbnRleHQ7XG5cbiAgICAgICAgbmV4dFN0YXRlQ29udGV4dCA9IHVwZGF0ZUluKG5leHRTdGF0ZUNvbnRleHQsIFsnYXRCb3R0b20nXSwgKCkgPT4gYXRCb3R0b20pO1xuICAgICAgICBuZXh0U3RhdGVDb250ZXh0ID0gdXBkYXRlSW4obmV4dFN0YXRlQ29udGV4dCwgWydhdEVuZCddLCAoKSA9PiBhdEVuZCk7XG4gICAgICAgIG5leHRTdGF0ZUNvbnRleHQgPSB1cGRhdGVJbihuZXh0U3RhdGVDb250ZXh0LCBbJ2F0U3RhcnQnXSwgKCkgPT4gYXRTdGFydCk7XG4gICAgICAgIG5leHRTdGF0ZUNvbnRleHQgPSB1cGRhdGVJbihuZXh0U3RhdGVDb250ZXh0LCBbJ2F0VG9wJ10sICgpID0+IGF0VG9wKTtcblxuICAgICAgICAvLyBDaHJvbWUgd2lsbCBlbWl0IFwic3ludGhldGljXCIgc2Nyb2xsIGV2ZW50IGlmIHRoZSBjb250YWluZXIgaXMgcmVzaXplZCBvciBhbiBlbGVtZW50IGlzIGFkZGVkXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gaWdub3JlIHRoZXNlIFwic3ludGhldGljXCIgZXZlbnRzXG4gICAgICAgIC8vIFJlcHJvOiBJbiBwbGF5Z3JvdW5kLCBwcmVzcyA0LTEtNS0xLTEgKHNtYWxsLCBhZGQgb25lLCBub3JtYWwsIGFkZCBvbmUsIGFkZCBvbmUpXG4gICAgICAgIC8vICAgICAgICBOb21hdHRlciBob3cgZmFzdCBvciBzbG93IHRoZSBzZXF1ZW5jZSBpcyBiZWluZyBwcmVzc3NlZCwgaXQgc2hvdWxkIHN0aWxsIHN0aWNrIHRvIHRoZSBib3R0b21cbiAgICAgICAgY29uc3QgeyBvZmZzZXRIZWlnaHQsIHNjcm9sbEhlaWdodCB9ID0gdGFyZ2V0O1xuICAgICAgICBjb25zdCByZXNpemVkID0gb2Zmc2V0SGVpZ2h0ICE9PSBpbnRlcm5hbENvbnRleHQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICBjb25zdCBlbGVtZW50Q2hhbmdlZCA9IHNjcm9sbEhlaWdodCAhPT0gaW50ZXJuYWxDb250ZXh0LnNjcm9sbEhlaWdodDtcblxuICAgICAgICBpZiAocmVzaXplZCkge1xuICAgICAgICAgIG5leHRJbnRlcm5hbENvbnRleHQgPSB1cGRhdGVJbihuZXh0SW50ZXJuYWxDb250ZXh0LCBbJ29mZnNldEhlaWdodCddLCAoKSA9PiBvZmZzZXRIZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVsZW1lbnRDaGFuZ2VkKSB7XG4gICAgICAgICAgbmV4dEludGVybmFsQ29udGV4dCA9IHVwZGF0ZUluKG5leHRJbnRlcm5hbENvbnRleHQsIFsnc2Nyb2xsSGVpZ2h0J10sICgpID0+IHNjcm9sbEhlaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGlja3kgbWVhbnM6XG4gICAgICAgIC8vIC0gSWYgaXQgaXMgc2Nyb2xsZWQgcHJvZ3JhbWF0aWNhbGx5LCB3ZSBhcmUgc3RpbGwgaW4gc3RpY2t5IG1vZGVcbiAgICAgICAgLy8gLSBJZiBpdCBpcyBzY3JvbGxlZCBieSB0aGUgdXNlciwgdGhlbiBzdGlja3kgbWVhbnMgaWYgd2UgYXJlIGF0IHRoZSBlbmRcblxuICAgICAgICAvLyBPbmx5IHVwZGF0ZSBzdGlja2luZXNzIGlmIHRoZSBzY3JvbGwgZXZlbnQgaXMgbm90IGR1ZSB0byBzeW50aGV0aWMgc2Nyb2xsIGRvbmUgYnkgQ2hyb21lXG4gICAgICAgIGlmICghcmVzaXplZCAmJiAhZWxlbWVudENoYW5nZWQpIHtcbiAgICAgICAgICBuZXh0U3RhdGVDb250ZXh0ID0gdXBkYXRlSW4obmV4dFN0YXRlQ29udGV4dCwgWydzdGlja3knXSwgKCkgPT4gc3RhdGVDb250ZXh0LmFuaW1hdGluZyA/IHRydWUgOiBhdEVuZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBubyBzY3JvbGxUb3AgaXMgc2V0IChub3QgaW4gcHJvZ3JhbW1hdGljIHNjcm9sbGluZyBtb2RlKSwgd2Ugc2hvdWxkIHNldCBcImFuaW1hdGluZ1wiIHRvIGZhbHNlXG4gICAgICAgIC8vIFwiYW5pbWF0aW5nXCIgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIFwic3RpY2t5XCIgcHJvcGVydHlcbiAgICAgICAgaWYgKHNjcm9sbFRvcCA9PT0gbnVsbCkge1xuICAgICAgICAgIG5leHRTdGF0ZUNvbnRleHQgPSB1cGRhdGVJbihuZXh0U3RhdGVDb250ZXh0LCBbJ2FuaW1hdGluZyddLCAoKSA9PiBmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmludGVybmFsQ29udGV4dCA9PT0gbmV4dEludGVybmFsQ29udGV4dCA/IHt9IDogeyBpbnRlcm5hbENvbnRleHQ6IG5leHRJbnRlcm5hbENvbnRleHQgfSxcbiAgICAgICAgICAuLi5zdGF0ZUNvbnRleHQgPT09IG5leHRTdGF0ZUNvbnRleHQgPyB7fSA6IHsgc3RhdGVDb250ZXh0OiBuZXh0U3RhdGVDb250ZXh0IH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LCAoKSA9PiB7XG4gICAgICB0aGlzLnN0YXRlLnN0YXRlQ29udGV4dC5zdGlja3kgJiYgdGhpcy5lbmFibGVXb3JrZXIoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVNjcm9sbEVuZCgpIHtcbiAgICAvLyBXZSBzaG91bGQgaWdub3JlIGRlYm91bmNpbmcgaGFuZGxlU2Nyb2xsIHRoYXQgZW1pdCBiZWZvcmUgdGhpcyB0aW1lXG4gICAgdGhpcy5faWdub3JlU2Nyb2xsRXZlbnRCZWZvcmUgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBzY3JvbGxUb3A6IG51bGwgfSkpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGhhbmRsZVNjcm9sbCxcbiAgICAgIGhhbmRsZVNjcm9sbEVuZCxcbiAgICAgIHByb3BzOiB7IGNoaWxkcmVuLCBkZWJvdW5jZSB9LFxuICAgICAgc3RhdGU6IHsgZnVuY3Rpb25Db250ZXh0LCBpbnRlcm5hbENvbnRleHQsIHNjcm9sbFRvcCwgc3RhdGVDb250ZXh0LCB0YXJnZXQgfVxuICAgIH0gPSB0aGlzO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxJbnRlcm5hbENvbnRleHQuUHJvdmlkZXIgdmFsdWU9eyBpbnRlcm5hbENvbnRleHQgfT5cbiAgICAgICAgPEZ1bmN0aW9uQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17IGZ1bmN0aW9uQ29udGV4dCB9PlxuICAgICAgICAgIDxTdGF0ZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9eyBzdGF0ZUNvbnRleHQgfT5cbiAgICAgICAgICAgIHsgY2hpbGRyZW4gfVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0YXJnZXQgJiZcbiAgICAgICAgICAgICAgICA8RXZlbnRTcHlcbiAgICAgICAgICAgICAgICAgIGRlYm91bmNlPXsgZGVib3VuY2UgfVxuICAgICAgICAgICAgICAgICAgbmFtZT1cInNjcm9sbFwiXG4gICAgICAgICAgICAgICAgICBvbkV2ZW50PXsgaGFuZGxlU2Nyb2xsIH1cbiAgICAgICAgICAgICAgICAgIHRhcmdldD17IHRhcmdldCB9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGFyZ2V0ICYmIHNjcm9sbFRvcCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIDxTcGluZVRvXG4gICAgICAgICAgICAgICAgICBuYW1lPVwic2Nyb2xsVG9wXCJcbiAgICAgICAgICAgICAgICAgIG9uRW5kPXsgaGFuZGxlU2Nyb2xsRW5kIH1cbiAgICAgICAgICAgICAgICAgIHRhcmdldD17IHRhcmdldCB9XG4gICAgICAgICAgICAgICAgICB2YWx1ZT17IHNjcm9sbFRvcCB9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L1N0YXRlQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgPC9GdW5jdGlvbkNvbnRleHQuUHJvdmlkZXI+XG4gICAgICA8L0ludGVybmFsQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuICB9XG59XG5cbkNvbXBvc2VyLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2hlY2tJbnRlcnZhbDogMTAwLFxuICBkZWJvdW5jZTogMTdcbn07XG5cbkNvbXBvc2VyLnByb3BUeXBlcyA9IHtcbiAgY2hlY2tJbnRlcnZhbDogUHJvcFR5cGVzLm51bWJlcixcbiAgZGVib3VuY2U6IFByb3BUeXBlcy5udW1iZXJcbn07XG4iXX0=
var _default = Composer;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TY3JvbGxUb0JvdHRvbS9Db21wb3Nlci5qcyJdLCJuYW1lcyI6WyJNSU5fQ0hFQ0tfSU5URVJWQUwiLCJNT0RFX0JPVFRPTSIsIk1PREVfVE9QIiwiTkVBUl9FTkRfVEhSRVNIT0xEIiwiU0NST0xMX0RFQ0lTSU9OX0RVUkFUSU9OIiwic2V0SW1tZWRpYXRlSW50ZXJ2YWwiLCJmbiIsIm1zIiwic2V0SW50ZXJ2YWwiLCJjb21wdXRlVmlld1N0YXRlIiwibW9kZSIsInRhcmdldCIsIm9mZnNldEhlaWdodCIsInNjcm9sbEhlaWdodCIsInNjcm9sbFRvcCIsImF0Qm90dG9tIiwiYXRUb3AiLCJhdEVuZCIsImF0U3RhcnQiLCJDb21wb3NlciIsImNoZWNrSW50ZXJ2YWwiLCJjaGlsZHJlbiIsImRlYm91bmNlIiwiaWdub3JlU2Nyb2xsRXZlbnRCZWZvcmVSZWYiLCJzZXRTY3JvbGxUb3AiLCJzZXRPZmZzZXRIZWlnaHQiLCJzZXRTY3JvbGxIZWlnaHQiLCJhbmltYXRpbmciLCJzZXRBbmltYXRpbmciLCJzZXRBdEJvdHRvbSIsInNldEF0RW5kIiwic2V0QXRUb3AiLCJzZXRBdFN0YXJ0Iiwic3RpY2t5Iiwic2V0U3RpY2t5Iiwic2Nyb2xsVG8iLCJzY3JvbGxUb0JvdHRvbSIsInNjcm9sbFRvVG9wIiwic2Nyb2xsVG9FbmQiLCJzY3JvbGxUb1N0YXJ0Iiwic2V0VGFyZ2V0Iiwic3RpY2t5QnV0Tm90QXRFbmRTaW5jZSIsInRpbWVvdXQiLCJEYXRlIiwibm93IiwiTWF0aCIsIm1heCIsImNsZWFySW50ZXJ2YWwiLCJoYW5kbGVTY3JvbGwiLCJ0aW1lU3RhbXBMb3ciLCJjdXJyZW50IiwibmV4dE9mZnNldEhlaWdodCIsIm5leHRTY3JvbGxIZWlnaHQiLCJvZmZzZXRIZWlnaHRDaGFuZ2VkIiwic2Nyb2xsSGVpZ2h0Q2hhbmdlZCIsImhhbmRsZVNjcm9sbEVuZCIsImludGVybmFsQ29udGV4dCIsInN0YXRlQ29udGV4dCIsImZ1bmN0aW9uQ29udGV4dCIsImRlZmF1bHRQcm9wcyIsInVuZGVmaW5lZCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsIm51bWJlciIsImFueSIsIm9uZU9mIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFNQSxrQkFBa0IsR0FBRyxFQUEzQixDLENBQStCOztBQUMvQixJQUFNQyxXQUFXLEdBQUcsUUFBcEI7QUFDQSxJQUFNQyxRQUFRLEdBQUcsS0FBakI7QUFDQSxJQUFNQyxrQkFBa0IsR0FBRyxDQUEzQjtBQUNBLElBQU1DLHdCQUF3QixHQUFHLEVBQWpDLEMsQ0FBcUM7O0FBRXJDLFNBQVNDLG9CQUFULENBQThCQyxFQUE5QixFQUFrQ0MsRUFBbEMsRUFBc0M7QUFDcENELEVBQUFBLEVBQUU7QUFFRixTQUFPRSxXQUFXLENBQUNGLEVBQUQsRUFBS0MsRUFBTCxDQUFsQjtBQUNEOztBQUVELFNBQVNFLGdCQUFULE9BQXVGO0FBQUEsTUFBM0RDLElBQTJELFFBQTNEQSxJQUEyRDtBQUFBLHlCQUFyREMsTUFBcUQ7QUFBQSxNQUEzQ0MsWUFBMkMsZUFBM0NBLFlBQTJDO0FBQUEsTUFBN0JDLFlBQTZCLGVBQTdCQSxZQUE2QjtBQUFBLE1BQWZDLFNBQWUsZUFBZkEsU0FBZTtBQUNyRixNQUFNQyxRQUFRLEdBQUdGLFlBQVksR0FBR0MsU0FBZixHQUEyQkYsWUFBM0IsR0FBMENULGtCQUEzRDtBQUNBLE1BQU1hLEtBQUssR0FBR0YsU0FBUyxHQUFHWCxrQkFBMUI7QUFDQSxNQUFNYyxLQUFLLEdBQUdQLElBQUksS0FBS1IsUUFBVCxHQUFvQmMsS0FBcEIsR0FBNEJELFFBQTFDO0FBQ0EsTUFBTUcsT0FBTyxHQUFHUixJQUFJLEtBQUtSLFFBQVQsR0FBb0JjLEtBQXBCLEdBQTRCRCxRQUE1QztBQUVBLFNBQU87QUFDTEEsSUFBQUEsUUFBUSxFQUFSQSxRQURLO0FBRUxFLElBQUFBLEtBQUssRUFBTEEsS0FGSztBQUdM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QnZDLEVBQUFBLGFBQWEsRUFBRSxHQURPO0FBRXRCQyxFQUFBQSxRQUFRLEVBQUV1QyxTQUZZO0FBR3RCdEMsRUFBQUEsUUFBUSxFQUFFLEVBSFk7QUFJdEJaLEVBQUFBLElBQUksRUFBRWtEO0FBSmdCLENBQXhCO0FBT0F6QyxRQUFRLENBQUMwQyxTQUFULEdBQXFCO0FBQ25CekMsRUFBQUEsYUFBYSxFQUFFMEMsbUJBQVVDLE1BRE47QUFFbkIxQyxFQUFBQSxRQUFRLEVBQUV5QyxtQkFBVUUsR0FGRDtBQUduQjFDLEVBQUFBLFFBQVEsRUFBRXdDLG1CQUFVQyxNQUhEO0FBSW5CckQsRUFBQUEsSUFBSSxFQUFFb0QsbUJBQVVHLEtBQVYsQ0FBZ0IsQ0FBQyxRQUFELEVBQVcsS0FBWCxDQUFoQjtBQUphLENBQXJCO2VBT2U5QyxRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgRXZlbnRTcHkgZnJvbSAnLi4vRXZlbnRTcHknO1xuaW1wb3J0IEZ1bmN0aW9uQ29udGV4dCBmcm9tICcuL0Z1bmN0aW9uQ29udGV4dCc7XG5pbXBvcnQgSW50ZXJuYWxDb250ZXh0IGZyb20gJy4vSW50ZXJuYWxDb250ZXh0JztcbmltcG9ydCBTcGluZVRvIGZyb20gJy4uL1NwaW5lVG8nO1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICcuL1N0YXRlQ29udGV4dCc7XG5cbmNvbnN0IE1JTl9DSEVDS19JTlRFUlZBTCA9IDE3OyAvLyAxIGZyYW1lXG5jb25zdCBNT0RFX0JPVFRPTSA9ICdib3R0b20nO1xuY29uc3QgTU9ERV9UT1AgPSAndG9wJztcbmNvbnN0IE5FQVJfRU5EX1RIUkVTSE9MRCA9IDE7XG5jb25zdCBTQ1JPTExfREVDSVNJT05fRFVSQVRJT04gPSAzNDsgLy8gMiBmcmFtZXNcblxuZnVuY3Rpb24gc2V0SW1tZWRpYXRlSW50ZXJ2YWwoZm4sIG1zKSB7XG4gIGZuKCk7XG5cbiAgcmV0dXJuIHNldEludGVydmFsKGZuLCBtcyk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVWaWV3U3RhdGUoeyBtb2RlLCB0YXJnZXQ6IHsgb2Zmc2V0SGVpZ2h0LCBzY3JvbGxIZWlnaHQsIHNjcm9sbFRvcCB9IH0pIHtcbiAgY29uc3QgYXRCb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBvZmZzZXRIZWlnaHQgPCBORUFSX0VORF9USFJFU0hPTEQ7XG4gIGNvbnN0IGF0VG9wID0gc2Nyb2xsVG9wIDwgTkVBUl9FTkRfVEhSRVNIT0xEO1xuICBjb25zdCBhdEVuZCA9IG1vZGUgPT09IE1PREVfVE9QID8gYXRUb3AgOiBhdEJvdHRvbTtcbiAgY29uc3QgYXRTdGFydCA9IG1vZGUgIT09IE1PREVfVE9QID8gYXRUb3AgOiBhdEJvdHRvbTtcblxuICByZXR1cm4ge1xuICAgIGF0Qm90dG9tLFxuICAgIGF0RW5kLFxuICAgIGF0U3RhcnQsXG4gICAgYXRUb3BcbiAgfTtcbn1cblxuY29uc3QgQ29tcG9zZXIgPSAoeyBjaGVja0ludGVydmFsLCBjaGlsZHJlbiwgZGVib3VuY2UsIG1vZGUgfSkgPT4ge1xuICBtb2RlID0gbW9kZSA9PT0gTU9ERV9UT1AgPyBNT0RFX1RPUCA6IE1PREVfQk9UVE9NO1xuXG4gIGNvbnN0IGlnbm9yZVNjcm9sbEV2ZW50QmVmb3JlUmVmID0gdXNlUmVmKDApO1xuICBjb25zdCBbc2Nyb2xsVG9wLCBzZXRTY3JvbGxUb3BdID0gdXNlU3RhdGUobW9kZSA9PT0gTU9ERV9UT1AgPyAwIDogJzEwMCUnKTtcblxuICAvLyBJbnRlcm5hbCBjb250ZXh0XG4gIGNvbnN0IFtvZmZzZXRIZWlnaHQsIHNldE9mZnNldEhlaWdodF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW3Njcm9sbEhlaWdodCwgc2V0U2Nyb2xsSGVpZ2h0XSA9IHVzZVN0YXRlKDApO1xuXG4gIC8vIFN0YXRlIGNvbnRleHRcbiAgY29uc3QgW2FuaW1hdGluZywgc2V0QW5pbWF0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2F0Qm90dG9tLCBzZXRBdEJvdHRvbV0gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2F0RW5kLCBzZXRBdEVuZF0gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2F0VG9wLCBzZXRBdFRvcF0gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2F0U3RhcnQsIHNldEF0U3RhcnRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc3RpY2t5LCBzZXRTdGlja3ldID0gdXNlU3RhdGUodHJ1ZSk7XG5cbiAgLy8gRnVuY3Rpb24gY29udGV4dFxuICBjb25zdCBzY3JvbGxUbyA9IHVzZUNhbGxiYWNrKFxuICAgIHNjcm9sbFRvcCA9PiB7XG4gICAgICBzZXRBbmltYXRpbmcodHJ1ZSk7XG4gICAgICBzZXRTY3JvbGxUb3Aoc2Nyb2xsVG9wKTtcbiAgICB9LFxuICAgIFtzZXRBbmltYXRpbmcsIHNldFNjcm9sbFRvcF1cbiAgKTtcblxuICBjb25zdCBzY3JvbGxUb0JvdHRvbSA9IHVzZUNhbGxiYWNrKCgpID0+IHNjcm9sbFRvKCcxMDAlJyksIFtzY3JvbGxUb10pO1xuICBjb25zdCBzY3JvbGxUb1RvcCA9IHVzZUNhbGxiYWNrKCgpID0+IHNjcm9sbFRvKDApLCBbc2Nyb2xsVG9dKTtcblxuICBjb25zdCBzY3JvbGxUb0VuZCA9IHVzZUNhbGxiYWNrKCgpID0+IChtb2RlID09PSBNT0RFX1RPUCA/IHNjcm9sbFRvVG9wKCkgOiBzY3JvbGxUb0JvdHRvbSgpKSwgW1xuICAgIG1vZGUsXG4gICAgc2Nyb2xsVG9Cb3R0b20sXG4gICAgc2Nyb2xsVG9Ub3BcbiAgXSk7XG4gIGNvbnN0IHNjcm9sbFRvU3RhcnQgPSB1c2VDYWxsYmFjaygoKSA9PiAobW9kZSA9PT0gTU9ERV9UT1AgPyBzY3JvbGxUb0JvdHRvbSgpIDogc2Nyb2xsVG9Ub3AoKSksIFtcbiAgICBtb2RlLFxuICAgIHNjcm9sbFRvQm90dG9tLFxuICAgIHNjcm9sbFRvVG9wXG4gIF0pO1xuXG4gIGNvbnN0IFt0YXJnZXQsIHNldFRhcmdldF0gPSB1c2VTdGF0ZShudWxsKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGxldCBzdGlja3lCdXROb3RBdEVuZFNpbmNlID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRJbW1lZGlhdGVJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIGlmIChzdGlja3kgJiYgdGFyZ2V0ICYmICFjb21wdXRlVmlld1N0YXRlKHsgbW9kZSwgdGFyZ2V0IH0pLmF0RW5kKSB7XG4gICAgICAgICAgaWYgKCFzdGlja3lCdXROb3RBdEVuZFNpbmNlKSB7XG4gICAgICAgICAgICBzdGlja3lCdXROb3RBdEVuZFNpbmNlID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKERhdGUubm93KCkgLSBzdGlja3lCdXROb3RBdEVuZFNpbmNlID4gU0NST0xMX0RFQ0lTSU9OX0RVUkFUSU9OKSB7XG4gICAgICAgICAgICAvLyBRdWlya3M6IEluIEZpcmVmb3gsIGFmdGVyIHVzZXIgc2Nyb2xsIGRvd24sIEZpcmVmb3ggZG8gdHdvIHRoaW5nczpcbiAgICAgICAgICAgIC8vICAgICAgICAgMS4gU2V0IHRvIGEgbmV3IFwic2Nyb2xsVG9wXCJcbiAgICAgICAgICAgIC8vICAgICAgICAgMi4gRmlyZSBcInNjcm9sbFwiIGV2ZW50XG4gICAgICAgICAgICAvLyAgICAgICAgIEZvciB3aGF0IHdlIG9ic2VydmVkLCAjMSBpcyBmaXJlZCBhYm91dCAyMG1zIGJlZm9yZSAjMi4gVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB0aGlzIHN0aWNreUNoZWNrVGltZW91dCBpcyBiZWluZyBzY2hlZHVsZWQgYmV0d2VlbiAxIGFuZCAyLlxuICAgICAgICAgICAgLy8gICAgICAgICBUaGF0IG1lYW5zLCBpZiB3ZSBqdXN0IGxvb2sgYXQgIzEgdG8gZGVjaWRlIGlmIHdlIHNob3VsZCBzY3JvbGwsIHdlIHdpbGwgYWx3YXlzIHNjcm9sbCwgaW4gb3Bwb3NlIHRvIHRoZSB1c2VyJ3MgaW50ZW50aW9uLlxuICAgICAgICAgICAgLy8gUmVwcm86IE9wZW4gRmlyZWZveCwgc2V0IGNoZWNrSW50ZXJ2YWwgdG8gYSBsb3dlciBudW1iZXIsIGFuZCB0cnkgdG8gc2Nyb2xsIGJ5IGRyYWdnaW5nIHRoZSBzY3JvbGwgaGFuZGxlci4gSXQgd2lsbCBqdW1wIGJhY2suXG5cbiAgICAgICAgICAgICFhbmltYXRpbmcgJiYgc2Nyb2xsVG9FbmQoKTtcbiAgICAgICAgICAgIHN0aWNreUJ1dE5vdEF0RW5kU2luY2UgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RpY2t5QnV0Tm90QXRFbmRTaW5jZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9LCBNYXRoLm1heChNSU5fQ0hFQ0tfSU5URVJWQUwsIGNoZWNrSW50ZXJ2YWwpIHx8IE1JTl9DSEVDS19JTlRFUlZBTCk7XG5cbiAgICAgIHJldHVybiAoKSA9PiBjbGVhckludGVydmFsKHRpbWVvdXQpO1xuICAgIH1cbiAgfSwgW2FuaW1hdGluZywgY2hlY2tJbnRlcnZhbCwgbW9kZSwgc2Nyb2xsVG9FbmQsIHN0aWNreSwgdGFyZ2V0XSk7XG5cbiAgY29uc3QgaGFuZGxlU2Nyb2xsID0gdXNlQ2FsbGJhY2soXG4gICAgKHsgdGltZVN0YW1wTG93IH0pID0+IHtcbiAgICAgIC8vIEN1cnJlbnRseSwgdGhlcmUgYXJlIG5vIHJlbGlhYmxlIHdheSB0byBjaGVjayBpZiB0aGUgXCJzY3JvbGxcIiBldmVudCBpcyB0cmlnZ2VyIGR1ZSB0b1xuICAgICAgLy8gdXNlciBnZXN0dXJlLCBwcm9ncmFtbWF0aWMgc2Nyb2xsaW5nLCBvciBDaHJvbWUtc3ludGhlc2l6ZWQgXCJzY3JvbGxcIiBldmVudCB0byBjb21wZW5zYXRlIHNpemUgY2hhbmdlLlxuICAgICAgLy8gVGh1cywgd2UgdXNlIG91ciBiZXN0LWVmZm9ydCB0byBndWVzcyBpZiBpdCBpcyB0cmlnZ2VyZWQgYnkgdXNlciBnZXN0dXJlLCBhbmQgZGlzYWJsZSBzdGlja3kgaWYgaXQgaXMgaGVhZGluZyB0b3dhcmRzIHRoZSBzdGFydCBkaXJlY3Rpb24uXG5cbiAgICAgIGlmICh0aW1lU3RhbXBMb3cgPD0gaWdub3JlU2Nyb2xsRXZlbnRCZWZvcmVSZWYuY3VycmVudCkge1xuICAgICAgICAvLyBTaW5jZSB3ZSBkZWJvdW5jZSBcInNjcm9sbFwiIGV2ZW50LCB0aGlzIGhhbmRsZXIgbWlnaHQgYmUgY2FsbGVkIGFmdGVyIHNwaW5lVG8ub25FbmQgKGEuay5hLiBhcnRpZmljaWFsIHNjcm9sbGluZykuXG4gICAgICAgIC8vIFdlIHNob3VsZCBpZ25vcmUgZGVib3VuY2VkIGV2ZW50IGZpcmVkIGFmdGVyIHNjcm9sbEVuZCwgYmVjYXVzZSB3aXRob3V0IHNraXBwaW5nIHRoZW0sIHRoZSB1c2VySW5pdGlhdGVkU2Nyb2xsIGNhbGN1bGF0ZWQgYmVsb3cgd2lsbCBub3QgYmUgYWNjdXJhdGUuXG4gICAgICAgIC8vIFRodXMsIG9uIGEgZmFzdCBtYWNoaW5lLCBhZGRpbmcgZWxlbWVudHMgc3VwZXIgZmFzdCB3aWxsIGxvc2UgdGhlIFwic3RpY2tpbmVzc1wiLlxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBjb25zdCB7IGF0Qm90dG9tLCBhdEVuZCwgYXRTdGFydCwgYXRUb3AgfSA9IGNvbXB1dGVWaWV3U3RhdGUoeyBtb2RlLCB0YXJnZXQgfSk7XG5cbiAgICAgICAgc2V0QXRCb3R0b20oYXRCb3R0b20pO1xuICAgICAgICBzZXRBdEVuZChhdEVuZCk7XG4gICAgICAgIHNldEF0U3RhcnQoYXRTdGFydCk7XG4gICAgICAgIHNldEF0VG9wKGF0VG9wKTtcblxuICAgICAgICAvLyBDaHJvbWUgd2lsbCBlbWl0IFwic3ludGhldGljXCIgc2Nyb2xsIGV2ZW50IGlmIHRoZSBjb250YWluZXIgaXMgcmVzaXplZCBvciBhbiBlbGVtZW50IGlzIGFkZGVkXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gaWdub3JlIHRoZXNlIFwic3ludGhldGljXCIgZXZlbnRzXG4gICAgICAgIC8vIFJlcHJvOiBJbiBwbGF5Z3JvdW5kLCBwcmVzcyA0LTEtNS0xLTEgKHNtYWxsLCBhZGQgb25lLCBub3JtYWwsIGFkZCBvbmUsIGFkZCBvbmUpXG4gICAgICAgIC8vICAgICAgICBOb21hdHRlciBob3cgZmFzdCBvciBzbG93IHRoZSBzZXF1ZW5jZSBpcyBiZWluZyBwcmVzc3NlZCwgaXQgc2hvdWxkIHN0aWxsIHN0aWNrIHRvIHRoZSBib3R0b21cbiAgICAgICAgY29uc3QgeyBvZmZzZXRIZWlnaHQ6IG5leHRPZmZzZXRIZWlnaHQsIHNjcm9sbEhlaWdodDogbmV4dFNjcm9sbEhlaWdodCB9ID0gdGFyZ2V0O1xuICAgICAgICBjb25zdCBvZmZzZXRIZWlnaHRDaGFuZ2VkID0gbmV4dE9mZnNldEhlaWdodCAhPT0gb2Zmc2V0SGVpZ2h0O1xuICAgICAgICBjb25zdCBzY3JvbGxIZWlnaHRDaGFuZ2VkID0gbmV4dFNjcm9sbEhlaWdodCAhPT0gc2Nyb2xsSGVpZ2h0O1xuXG4gICAgICAgIG9mZnNldEhlaWdodENoYW5nZWQgJiYgc2V0T2Zmc2V0SGVpZ2h0KG5leHRPZmZzZXRIZWlnaHQpO1xuICAgICAgICBzY3JvbGxIZWlnaHRDaGFuZ2VkICYmIHNldFNjcm9sbEhlaWdodChuZXh0U2Nyb2xsSGVpZ2h0KTtcblxuICAgICAgICAvLyBTdGlja3kgbWVhbnM6XG4gICAgICAgIC8vIC0gSWYgaXQgaXMgc2Nyb2xsZWQgcHJvZ3JhbWF0aWNhbGx5LCB3ZSBhcmUgc3RpbGwgaW4gc3RpY2t5IG1vZGVcbiAgICAgICAgLy8gLSBJZiBpdCBpcyBzY3JvbGxlZCBieSB0aGUgdXNlciwgdGhlbiBzdGlja3kgbWVhbnMgaWYgd2UgYXJlIGF0IHRoZSBlbmRcblxuICAgICAgICAvLyBPbmx5IHVwZGF0ZSBzdGlja2luZXNzIGlmIHRoZSBzY3JvbGwgZXZlbnQgaXMgbm90IGR1ZSB0byBzeW50aGV0aWMgc2Nyb2xsIGRvbmUgYnkgQ2hyb21lXG4gICAgICAgICFvZmZzZXRIZWlnaHRDaGFuZ2VkICYmICFzY3JvbGxIZWlnaHRDaGFuZ2VkICYmIHNldFN0aWNreShhbmltYXRpbmcgfHwgYXRFbmQpO1xuXG4gICAgICAgIC8vIElmIG5vIHNjcm9sbFRvcCBpcyBzZXQgKG5vdCBpbiBwcm9ncmFtbWF0aWMgc2Nyb2xsaW5nIG1vZGUpLCB3ZSBzaG91bGQgc2V0IFwiYW5pbWF0aW5nXCIgdG8gZmFsc2VcbiAgICAgICAgLy8gXCJhbmltYXRpbmdcIiBpcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgXCJzdGlja3lcIiBwcm9wZXJ0eVxuICAgICAgICBzY3JvbGxUb3AgPT09IG51bGwgJiYgc2V0QW5pbWF0aW5nKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGFuaW1hdGluZyxcbiAgICAgIGlnbm9yZVNjcm9sbEV2ZW50QmVmb3JlUmVmLFxuICAgICAgbW9kZSxcbiAgICAgIG9mZnNldEhlaWdodCxcbiAgICAgIHNjcm9sbEhlaWdodCxcbiAgICAgIHNjcm9sbFRvcCxcbiAgICAgIHNldEFuaW1hdGluZyxcbiAgICAgIHNldEF0Qm90dG9tLFxuICAgICAgc2V0QXRFbmQsXG4gICAgICBzZXRBdFN0YXJ0LFxuICAgICAgc2V0QXRUb3AsXG4gICAgICBzZXRPZmZzZXRIZWlnaHQsXG4gICAgICBzZXRTY3JvbGxIZWlnaHQsXG4gICAgICBzZXRTdGlja3ksXG4gICAgICB0YXJnZXRcbiAgICBdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU2Nyb2xsRW5kID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlnbm9yZVNjcm9sbEV2ZW50QmVmb3JlUmVmLmN1cnJlbnQgPSBEYXRlLm5vdygpO1xuICAgIHNldEFuaW1hdGluZyhmYWxzZSk7XG4gICAgc2V0U2Nyb2xsVG9wKG51bGwpO1xuICB9LCBbaWdub3JlU2Nyb2xsRXZlbnRCZWZvcmVSZWYsIHNldFNjcm9sbFRvcF0pO1xuXG4gIGNvbnN0IGludGVybmFsQ29udGV4dCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIG9mZnNldEhlaWdodCxcbiAgICAgIHNjcm9sbEhlaWdodCxcbiAgICAgIHNldFRhcmdldFxuICAgIH0pLFxuICAgIFtvZmZzZXRIZWlnaHQsIHNjcm9sbEhlaWdodCwgc2V0VGFyZ2V0XVxuICApO1xuXG4gIGNvbnN0IHN0YXRlQ29udGV4dCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIGFuaW1hdGluZyxcbiAgICAgIGF0Qm90dG9tLFxuICAgICAgYXRFbmQsXG4gICAgICBhdFN0YXJ0LFxuICAgICAgYXRUb3AsXG4gICAgICBtb2RlLFxuICAgICAgc3RpY2t5XG4gICAgfSksXG4gICAgW2FuaW1hdGluZywgYXRCb3R0b20sIGF0RW5kLCBhdFN0YXJ0LCBhdFRvcCwgbW9kZSwgc3RpY2t5XVxuICApO1xuXG4gIGNvbnN0IGZ1bmN0aW9uQ29udGV4dCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIHNjcm9sbFRvLFxuICAgICAgc2Nyb2xsVG9Cb3R0b20sXG4gICAgICBzY3JvbGxUb0VuZCxcbiAgICAgIHNjcm9sbFRvU3RhcnQsXG4gICAgICBzY3JvbGxUb1RvcFxuICAgIH0pLFxuICAgIFtzY3JvbGxUbywgc2Nyb2xsVG9Cb3R0b20sIHNjcm9sbFRvRW5kLCBzY3JvbGxUb1N0YXJ0LCBzY3JvbGxUb1RvcF1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxJbnRlcm5hbENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2ludGVybmFsQ29udGV4dH0+XG4gICAgICA8RnVuY3Rpb25Db250ZXh0LlByb3ZpZGVyIHZhbHVlPXtmdW5jdGlvbkNvbnRleHR9PlxuICAgICAgICA8U3RhdGVDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtzdGF0ZUNvbnRleHR9PlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICB7dGFyZ2V0ICYmIDxFdmVudFNweSBkZWJvdW5jZT17ZGVib3VuY2V9IG5hbWU9XCJzY3JvbGxcIiBvbkV2ZW50PXtoYW5kbGVTY3JvbGx9IHRhcmdldD17dGFyZ2V0fSAvPn1cbiAgICAgICAgICB7dGFyZ2V0ICYmIHNjcm9sbFRvcCAhPT0gbnVsbCAmJiAoXG4gICAgICAgICAgICA8U3BpbmVUbyBuYW1lPVwic2Nyb2xsVG9wXCIgb25FbmQ9e2hhbmRsZVNjcm9sbEVuZH0gdGFyZ2V0PXt0YXJnZXR9IHZhbHVlPXtzY3JvbGxUb3B9IC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TdGF0ZUNvbnRleHQuUHJvdmlkZXI+XG4gICAgICA8L0Z1bmN0aW9uQ29udGV4dC5Qcm92aWRlcj5cbiAgICA8L0ludGVybmFsQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG5cbkNvbXBvc2VyLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2hlY2tJbnRlcnZhbDogMTAwLFxuICBjaGlsZHJlbjogdW5kZWZpbmVkLFxuICBkZWJvdW5jZTogMTcsXG4gIG1vZGU6IHVuZGVmaW5lZFxufTtcblxuQ29tcG9zZXIucHJvcFR5cGVzID0ge1xuICBjaGVja0ludGVydmFsOiBQcm9wVHlwZXMubnVtYmVyLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLmFueSxcbiAgZGVib3VuY2U6IFByb3BUeXBlcy5udW1iZXIsXG4gIG1vZGU6IFByb3BUeXBlcy5vbmVPZihbJ2JvdHRvbScsICd0b3AnXSlcbn07XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvc2VyO1xuIl19

@@ -12,10 +12,14 @@ "use strict";

var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _react = _interopRequireWildcard(require("react"));
var _InternalContext = _interopRequireDefault(require("./InternalContext"));
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
var ROOT_CSS = (0, _glamor.css)({

@@ -29,4 +33,7 @@ height: '100%',

var children = _ref.children,
className = _ref.className,
setTarget = _ref.setTarget;
className = _ref.className;
var _useContext = (0, _react.useContext)(_InternalContext.default),
setTarget = _useContext.setTarget;
return _react.default.createElement("div", {

@@ -38,12 +45,12 @@ className: (0, _classnames.default)(ROOT_CSS + '', (className || '') + ''),

var _default = function _default(props) {
return _react.default.createElement(_InternalContext.default.Consumer, null, function (_ref2) {
var setTarget = _ref2.setTarget;
return _react.default.createElement(Panel, _extends({
setTarget: setTarget
}, props));
});
Panel.defaultProps = {
children: undefined,
className: undefined
};
Panel.propTypes = {
children: _propTypes.default.any,
className: _propTypes.default.string
};
var _default = Panel;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TY3JvbGxUb0JvdHRvbS9QYW5lbC5qcyJdLCJuYW1lcyI6WyJST09UX0NTUyIsImhlaWdodCIsIm92ZXJmbG93WSIsIndpZHRoIiwiUGFuZWwiLCJjaGlsZHJlbiIsImNsYXNzTmFtZSIsInNldFRhcmdldCIsInByb3BzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUE7Ozs7OztBQUVBLElBQU1BLFFBQVEsR0FBRyxpQkFBSTtBQUNuQkMsRUFBQUEsTUFBTSxFQUFFLE1BRFc7QUFFbkJDLEVBQUFBLFNBQVMsRUFBRSxNQUZRO0FBR25CQyxFQUFBQSxLQUFLLEVBQUU7QUFIWSxDQUFKLENBQWpCOztBQU1BLElBQU1DLEtBQUssR0FBRyxTQUFSQSxLQUFRO0FBQUEsTUFBR0MsUUFBSCxRQUFHQSxRQUFIO0FBQUEsTUFBYUMsU0FBYixRQUFhQSxTQUFiO0FBQUEsTUFBd0JDLFNBQXhCLFFBQXdCQSxTQUF4QjtBQUFBLFNBQ1o7QUFDRSxJQUFBLFNBQVMsRUFBRyx5QkFBV1AsUUFBUSxHQUFHLEVBQXRCLEVBQTBCLENBQUNNLFNBQVMsSUFBSSxFQUFkLElBQW9CLEVBQTlDLENBRGQ7QUFFRSxJQUFBLEdBQUcsRUFBR0M7QUFGUixLQUlJRixRQUpKLENBRFk7QUFBQSxDQUFkOztlQVFlLGtCQUFBRyxLQUFLO0FBQUEsU0FDbEIsNkJBQUMsd0JBQUQsQ0FBaUIsUUFBakIsUUFDSTtBQUFBLFFBQUdELFNBQUgsU0FBR0EsU0FBSDtBQUFBLFdBQ0EsNkJBQUMsS0FBRDtBQUNFLE1BQUEsU0FBUyxFQUFHQTtBQURkLE9BRU9DLEtBRlAsRUFEQTtBQUFBLEdBREosQ0FEa0I7QUFBQSxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3NzIH0gZnJvbSAnZ2xhbW9yJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IEludGVybmFsQ29udGV4dCBmcm9tICcuL0ludGVybmFsQ29udGV4dCc7XG5cbmNvbnN0IFJPT1RfQ1NTID0gY3NzKHtcbiAgaGVpZ2h0OiAnMTAwJScsXG4gIG92ZXJmbG93WTogJ2F1dG8nLFxuICB3aWR0aDogJzEwMCUnXG59KTtcblxuY29uc3QgUGFuZWwgPSAoeyBjaGlsZHJlbiwgY2xhc3NOYW1lLCBzZXRUYXJnZXQgfSkgPT5cbiAgPGRpdlxuICAgIGNsYXNzTmFtZT17IGNsYXNzTmFtZXMoUk9PVF9DU1MgKyAnJywgKGNsYXNzTmFtZSB8fCAnJykgKyAnJykgfVxuICAgIHJlZj17IHNldFRhcmdldCB9XG4gID5cbiAgICB7IGNoaWxkcmVuIH1cbiAgPC9kaXY+XG5cbmV4cG9ydCBkZWZhdWx0IHByb3BzID0+XG4gIDxJbnRlcm5hbENvbnRleHQuQ29uc3VtZXI+XG4gICAgeyAoeyBzZXRUYXJnZXQgfSkgPT5cbiAgICAgIDxQYW5lbFxuICAgICAgICBzZXRUYXJnZXQ9eyBzZXRUYXJnZXQgfVxuICAgICAgICB7IC4uLnByb3BzIH1cbiAgICAgIC8+XG4gICAgfVxuICA8L0ludGVybmFsQ29udGV4dC5Db25zdW1lcj5cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TY3JvbGxUb0JvdHRvbS9QYW5lbC5qcyJdLCJuYW1lcyI6WyJST09UX0NTUyIsImhlaWdodCIsIm92ZXJmbG93WSIsIndpZHRoIiwiUGFuZWwiLCJjaGlsZHJlbiIsImNsYXNzTmFtZSIsIkludGVybmFsQ29udGV4dCIsInNldFRhcmdldCIsImRlZmF1bHRQcm9wcyIsInVuZGVmaW5lZCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsImFueSIsInN0cmluZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOzs7Ozs7OztBQUVBLElBQU1BLFFBQVEsR0FBRyxpQkFBSTtBQUNuQkMsRUFBQUEsTUFBTSxFQUFFLE1BRFc7QUFFbkJDLEVBQUFBLFNBQVMsRUFBRSxNQUZRO0FBR25CQyxFQUFBQSxLQUFLLEVBQUU7QUFIWSxDQUFKLENBQWpCOztBQU1BLElBQU1DLEtBQUssR0FBRyxTQUFSQSxLQUFRLE9BQTZCO0FBQUEsTUFBMUJDLFFBQTBCLFFBQTFCQSxRQUEwQjtBQUFBLE1BQWhCQyxTQUFnQixRQUFoQkEsU0FBZ0I7O0FBQUEsb0JBQ25CLHVCQUFXQyx3QkFBWCxDQURtQjtBQUFBLE1BQ2pDQyxTQURpQyxlQUNqQ0EsU0FEaUM7O0FBR3pDLFNBQ0U7QUFBSyxJQUFBLFNBQVMsRUFBRSx5QkFBV1IsUUFBUSxHQUFHLEVBQXRCLEVBQTBCLENBQUNNLFNBQVMsSUFBSSxFQUFkLElBQW9CLEVBQTlDLENBQWhCO0FBQW1FLElBQUEsR0FBRyxFQUFFRTtBQUF4RSxLQUNHSCxRQURILENBREY7QUFLRCxDQVJEOztBQVVBRCxLQUFLLENBQUNLLFlBQU4sR0FBcUI7QUFDbkJKLEVBQUFBLFFBQVEsRUFBRUssU0FEUztBQUVuQkosRUFBQUEsU0FBUyxFQUFFSTtBQUZRLENBQXJCO0FBS0FOLEtBQUssQ0FBQ08sU0FBTixHQUFrQjtBQUNoQk4sRUFBQUEsUUFBUSxFQUFFTyxtQkFBVUMsR0FESjtBQUVoQlAsRUFBQUEsU0FBUyxFQUFFTSxtQkFBVUU7QUFGTCxDQUFsQjtlQUtlVixLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3NzIH0gZnJvbSAnZ2xhbW9yJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgSW50ZXJuYWxDb250ZXh0IGZyb20gJy4vSW50ZXJuYWxDb250ZXh0JztcblxuY29uc3QgUk9PVF9DU1MgPSBjc3Moe1xuICBoZWlnaHQ6ICcxMDAlJyxcbiAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gIHdpZHRoOiAnMTAwJSdcbn0pO1xuXG5jb25zdCBQYW5lbCA9ICh7IGNoaWxkcmVuLCBjbGFzc05hbWUgfSkgPT4ge1xuICBjb25zdCB7IHNldFRhcmdldCB9ID0gdXNlQ29udGV4dChJbnRlcm5hbENvbnRleHQpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZXMoUk9PVF9DU1MgKyAnJywgKGNsYXNzTmFtZSB8fCAnJykgKyAnJyl9IHJlZj17c2V0VGFyZ2V0fT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cblBhbmVsLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2hpbGRyZW46IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lOiB1bmRlZmluZWRcbn07XG5cblBhbmVsLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5hbnksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUGFuZWw7XG4iXX0=

@@ -24,2 +24,2 @@ "use strict";

exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TY3JvbGxUb0JvdHRvbS9TdGF0ZUNvbnRleHQuanMiXSwibmFtZXMiOlsiY29udGV4dCIsIlJlYWN0IiwiY3JlYXRlQ29udGV4dCIsImFuaW1hdGluZyIsImF0Qm90dG9tIiwiYXRFbmQiLCJhdFRvcCIsIm1vZGUiLCJzdGlja3kiLCJkaXNwbGF5TmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOzs7O0FBRUEsSUFBTUEsT0FBTyxHQUFHQyxlQUFNQyxhQUFOLENBQW9CO0FBQ2xDQyxFQUFBQSxTQUFTLEVBQUUsS0FEdUI7QUFFbENDLEVBQUFBLFFBQVEsRUFBRSxJQUZ3QjtBQUdsQ0MsRUFBQUEsS0FBSyxFQUFFLElBSDJCO0FBSWxDQyxFQUFBQSxLQUFLLEVBQUUsSUFKMkI7QUFLbENDLEVBQUFBLElBQUksRUFBRSxRQUw0QjtBQU1sQ0MsRUFBQUEsTUFBTSxFQUFFO0FBTjBCLENBQXBCLENBQWhCOztBQVNBUixPQUFPLENBQUNTLFdBQVIsR0FBc0IsNEJBQXRCO2VBRWVULE8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBjb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dCh7XG4gIGFuaW1hdGluZzogZmFsc2UsXG4gIGF0Qm90dG9tOiB0cnVlLFxuICBhdEVuZDogdHJ1ZSxcbiAgYXRUb3A6IHRydWUsXG4gIG1vZGU6ICdib3R0b20nLFxuICBzdGlja3k6IHRydWVcbn0pO1xuXG5jb250ZXh0LmRpc3BsYXlOYW1lID0gJ1Njcm9sbFRvQm90dG9tU3RhdGVDb250ZXh0JztcblxuZXhwb3J0IGRlZmF1bHQgY29udGV4dFxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TY3JvbGxUb0JvdHRvbS9TdGF0ZUNvbnRleHQuanMiXSwibmFtZXMiOlsiY29udGV4dCIsIlJlYWN0IiwiY3JlYXRlQ29udGV4dCIsImFuaW1hdGluZyIsImF0Qm90dG9tIiwiYXRFbmQiLCJhdFRvcCIsIm1vZGUiLCJzdGlja3kiLCJkaXNwbGF5TmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOzs7O0FBRUEsSUFBTUEsT0FBTyxHQUFHQyxlQUFNQyxhQUFOLENBQW9CO0FBQ2xDQyxFQUFBQSxTQUFTLEVBQUUsS0FEdUI7QUFFbENDLEVBQUFBLFFBQVEsRUFBRSxJQUZ3QjtBQUdsQ0MsRUFBQUEsS0FBSyxFQUFFLElBSDJCO0FBSWxDQyxFQUFBQSxLQUFLLEVBQUUsSUFKMkI7QUFLbENDLEVBQUFBLElBQUksRUFBRSxRQUw0QjtBQU1sQ0MsRUFBQUEsTUFBTSxFQUFFO0FBTjBCLENBQXBCLENBQWhCOztBQVNBUixPQUFPLENBQUNTLFdBQVIsR0FBc0IsNEJBQXRCO2VBRWVULE8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBjb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dCh7XG4gIGFuaW1hdGluZzogZmFsc2UsXG4gIGF0Qm90dG9tOiB0cnVlLFxuICBhdEVuZDogdHJ1ZSxcbiAgYXRUb3A6IHRydWUsXG4gIG1vZGU6ICdib3R0b20nLFxuICBzdGlja3k6IHRydWVcbn0pO1xuXG5jb250ZXh0LmRpc3BsYXlOYW1lID0gJ1Njcm9sbFRvQm90dG9tU3RhdGVDb250ZXh0JztcblxuZXhwb3J0IGRlZmF1bHQgY29udGV4dDtcbiJdfQ==

@@ -8,26 +8,21 @@ "use strict";

var _react = require("react");
var _propTypes = _interopRequireDefault(require("prop-types"));
var _react = _interopRequireDefault(require("react"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
/* eslint no-magic-numbers: ["error", { "ignore": [0, 1, 1.5, 5] }] */
function squareStepper(current, to) {
var sign = Math.sign(to - current);
var step = Math.sqrt(Math.abs(to - current));
var next = current + step * sign;
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
if (sign > 0) {
return Math.min(to, next);
}
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
return Math.max(to, next);
}
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function step(from, to, stepper, index) {

@@ -43,129 +38,53 @@ var next = from;

function squareStepper(current, to) {
var sign = Math.sign(to - current);
var step = Math.sqrt(Math.abs(to - current));
var next = current + step * sign;
var SpineTo = function SpineTo(_ref) {
var name = _ref.name,
onEnd = _ref.onEnd,
target = _ref.target,
value = _ref.value;
var animator = (0, _react.useRef)();
var animate = (0, _react.useCallback)(function (name, from, to, index) {
var start = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : Date.now();
if (sign > 0) {
return Math.min(to, next);
} else {
return Math.max(to, next);
}
}
if (to === '100%' || typeof to === 'number') {
cancelAnimationFrame(animator.current);
animator.current = requestAnimationFrame(function () {
if (target) {
var toNumber = to === '100%' ? target.scrollHeight - target.offsetHeight : to;
var nextValue = step(from, toNumber, squareStepper, (Date.now() - start) / 5);
var ScrollTo =
/*#__PURE__*/
function (_React$Component) {
_inherits(ScrollTo, _React$Component);
if (Math.abs(toNumber - nextValue) < 1.5) {
nextValue = toNumber;
}
function ScrollTo(props, context) {
var _this;
target[name] = nextValue;
_classCallCheck(this, ScrollTo);
_this = _possibleConstructorReturn(this, _getPrototypeOf(ScrollTo).call(this, props, context));
_this.handleCancelAnimation = _this.handleCancelAnimation.bind(_assertThisInitialized(_this));
return _this;
}
_createClass(ScrollTo, [{
key: "componentDidMount",
value: function componentDidMount() {
var _this$props = this.props,
name = _this$props.name,
target = _this$props.target,
value = _this$props.value;
if (target) {
this.addEventListeners(target);
this.animate(name, target[name], value, 1);
}
if (toNumber === nextValue) {
onEnd && onEnd(true);
} else {
animate(name, from, to, index + 1, start);
}
}
});
}
}, {
key: "componentDidUpdate",
value: function componentDidUpdate(prevProps) {
var _this$props2 = this.props,
name = _this$props2.name,
target = _this$props2.target,
value = _this$props2.value;
var prevTarget = prevProps.target;
var scrollChanged = prevProps.value !== value;
var targetChanged = prevTarget !== target;
}, [animator, onEnd, target]);
var handleCancelAnimation = (0, _react.useCallback)(function () {
cancelAnimationFrame(animator);
onEnd && onEnd(false);
}, [onEnd]);
(0, _react.useLayoutEffect)(function () {
animate(name, target[name], value, 1);
if (targetChanged) {
this.removeEventListeners(prevTarget);
this.addEventListeners(target);
}
if ((scrollChanged || targetChanged) && target) {
this.animate(name, target[name], value, 1);
}
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
this.removeEventListeners(this.props.target);
cancelAnimationFrame(this.animator);
}
}, {
key: "addEventListeners",
value: function addEventListeners(target) {
target && target.addEventListener('pointerdown', this.handleCancelAnimation, {
if (target) {
target.addEventListener('pointerdown', handleCancelAnimation, {
passive: true
});
return function () {
return target.removeEventListener('pointerdown', handleCancelAnimation);
};
}
}, {
key: "removeEventListeners",
value: function removeEventListeners(target) {
target && target.removeEventListener('pointerdown', this.handleCancelAnimation);
}
}, {
key: "animate",
value: function animate(name, from, to, index) {
var _this2 = this;
}, [animate, handleCancelAnimation, name, target, value]);
return false;
};
var start = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : Date.now();
if (to === '100%' || typeof to === 'number') {
cancelAnimationFrame(this.animator);
this.animator = requestAnimationFrame(function () {
var target = _this2.props.target;
if (target) {
var toNumber = to === '100%' ? target.scrollHeight - target.offsetHeight : to;
var nextValue = step(from, toNumber, squareStepper, (Date.now() - start) / 5);
if (Math.abs(toNumber - nextValue) < 1.5) {
nextValue = toNumber;
}
target[name] = nextValue;
if (toNumber === nextValue) {
_this2.props.onEnd && _this2.props.onEnd(true);
} else {
_this2.animate(name, from, to, index + 1, start);
}
}
});
}
}
}, {
key: "handleCancelAnimation",
value: function handleCancelAnimation() {
cancelAnimationFrame(this.animator);
this.props.onEnd && this.props.onEnd(false);
}
}, {
key: "render",
value: function render() {
return false;
}
}]);
return ScrollTo;
}(_react.default.Component);
exports.default = ScrollTo;
ScrollTo.propTypes = {
SpineTo.propTypes = {
name: _propTypes.default.string.isRequired,

@@ -176,2 +95,4 @@ onEnd: _propTypes.default.func,

};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TcGluZVRvLmpzIl0sIm5hbWVzIjpbInN0ZXAiLCJmcm9tIiwidG8iLCJzdGVwcGVyIiwiaW5kZXgiLCJuZXh0IiwiaSIsInNxdWFyZVN0ZXBwZXIiLCJjdXJyZW50Iiwic2lnbiIsIk1hdGgiLCJzcXJ0IiwiYWJzIiwibWluIiwibWF4IiwiU2Nyb2xsVG8iLCJwcm9wcyIsImNvbnRleHQiLCJoYW5kbGVDYW5jZWxBbmltYXRpb24iLCJiaW5kIiwibmFtZSIsInRhcmdldCIsInZhbHVlIiwiYWRkRXZlbnRMaXN0ZW5lcnMiLCJhbmltYXRlIiwicHJldlByb3BzIiwicHJldlRhcmdldCIsInNjcm9sbENoYW5nZWQiLCJ0YXJnZXRDaGFuZ2VkIiwicmVtb3ZlRXZlbnRMaXN0ZW5lcnMiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImFuaW1hdG9yIiwiYWRkRXZlbnRMaXN0ZW5lciIsInBhc3NpdmUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwic3RhcnQiLCJEYXRlIiwibm93IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwidG9OdW1iZXIiLCJzY3JvbGxIZWlnaHQiLCJvZmZzZXRIZWlnaHQiLCJuZXh0VmFsdWUiLCJvbkVuZCIsIlJlYWN0IiwiQ29tcG9uZW50IiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwic3RyaW5nIiwiaXNSZXF1aXJlZCIsImZ1bmMiLCJhbnkiLCJvbmVPZlR5cGUiLCJudW1iZXIiLCJvbmVPZiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsU0FBU0EsSUFBVCxDQUFjQyxJQUFkLEVBQW9CQyxFQUFwQixFQUF3QkMsT0FBeEIsRUFBaUNDLEtBQWpDLEVBQXdDO0FBQ3RDLE1BQUlDLElBQUksR0FBR0osSUFBWDs7QUFFQSxPQUFLLElBQUlLLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdGLEtBQXBCLEVBQTJCRSxDQUFDLEVBQTVCLEVBQWdDO0FBQzlCRCxJQUFBQSxJQUFJLEdBQUdGLE9BQU8sQ0FBQ0UsSUFBRCxFQUFPSCxFQUFQLENBQWQ7QUFDRDs7QUFFRCxTQUFPRyxJQUFQO0FBQ0Q7O0FBRUQsU0FBU0UsYUFBVCxDQUF1QkMsT0FBdkIsRUFBZ0NOLEVBQWhDLEVBQW9DO0FBQ2xDLE1BQU1PLElBQUksR0FBR0MsSUFBSSxDQUFDRCxJQUFMLENBQVVQLEVBQUUsR0FBR00sT0FBZixDQUFiO0FBQ0EsTUFBTVIsSUFBSSxHQUFHVSxJQUFJLENBQUNDLElBQUwsQ0FBVUQsSUFBSSxDQUFDRSxHQUFMLENBQVNWLEVBQUUsR0FBR00sT0FBZCxDQUFWLENBQWI7QUFDQSxNQUFNSCxJQUFJLEdBQUdHLE9BQU8sR0FBR1IsSUFBSSxHQUFHUyxJQUE5Qjs7QUFFQSxNQUFJQSxJQUFJLEdBQUcsQ0FBWCxFQUFjO0FBQ1osV0FBT0MsSUFBSSxDQUFDRyxHQUFMLENBQVNYLEVBQVQsRUFBYUcsSUFBYixDQUFQO0FBQ0QsR0FGRCxNQUVPO0FBQ0wsV0FBT0ssSUFBSSxDQUFDSSxHQUFMLENBQVNaLEVBQVQsRUFBYUcsSUFBYixDQUFQO0FBQ0Q7QUFDRjs7SUFFb0JVLFE7Ozs7O0FBQ25CLG9CQUFZQyxLQUFaLEVBQW1CQyxPQUFuQixFQUE0QjtBQUFBOztBQUFBOztBQUMxQixrRkFBTUQsS0FBTixFQUFhQyxPQUFiO0FBRUEsVUFBS0MscUJBQUwsR0FBNkIsTUFBS0EscUJBQUwsQ0FBMkJDLElBQTNCLCtCQUE3QjtBQUgwQjtBQUkzQjs7Ozt3Q0FFbUI7QUFBQSx3QkFDYyxLQUFLSCxLQURuQjtBQUFBLFVBQ1ZJLElBRFUsZUFDVkEsSUFEVTtBQUFBLFVBQ0pDLE1BREksZUFDSkEsTUFESTtBQUFBLFVBQ0lDLEtBREosZUFDSUEsS0FESjs7QUFHbEIsVUFBSUQsTUFBSixFQUFZO0FBQ1YsYUFBS0UsaUJBQUwsQ0FBdUJGLE1BQXZCO0FBQ0EsYUFBS0csT0FBTCxDQUFhSixJQUFiLEVBQW1CQyxNQUFNLENBQUNELElBQUQsQ0FBekIsRUFBaUNFLEtBQWpDLEVBQXdDLENBQXhDO0FBQ0Q7QUFDRjs7O3VDQUVrQkcsUyxFQUFXO0FBQUEseUJBQ2UsSUFEZixDQUNwQlQsS0FEb0I7QUFBQSxVQUNYSSxJQURXLGdCQUNYQSxJQURXO0FBQUEsVUFDTEMsTUFESyxnQkFDTEEsTUFESztBQUFBLFVBQ0dDLEtBREgsZ0JBQ0dBLEtBREg7QUFBQSxVQUVaSSxVQUZZLEdBRUdELFNBRkgsQ0FFcEJKLE1BRm9CO0FBRzVCLFVBQU1NLGFBQWEsR0FBR0YsU0FBUyxDQUFDSCxLQUFWLEtBQW9CQSxLQUExQztBQUNBLFVBQU1NLGFBQWEsR0FBR0YsVUFBVSxLQUFLTCxNQUFyQzs7QUFFQSxVQUFJTyxhQUFKLEVBQW1CO0FBQ2pCLGFBQUtDLG9CQUFMLENBQTBCSCxVQUExQjtBQUNBLGFBQUtILGlCQUFMLENBQXVCRixNQUF2QjtBQUNEOztBQUVELFVBQUksQ0FBQ00sYUFBYSxJQUFJQyxhQUFsQixLQUFvQ1AsTUFBeEMsRUFBZ0Q7QUFDOUMsYUFBS0csT0FBTCxDQUFhSixJQUFiLEVBQW1CQyxNQUFNLENBQUNELElBQUQsQ0FBekIsRUFBaUNFLEtBQWpDLEVBQXdDLENBQXhDO0FBQ0Q7QUFDRjs7OzJDQUVzQjtBQUNyQixXQUFLTyxvQkFBTCxDQUEwQixLQUFLYixLQUFMLENBQVdLLE1BQXJDO0FBQ0FTLE1BQUFBLG9CQUFvQixDQUFDLEtBQUtDLFFBQU4sQ0FBcEI7QUFDRDs7O3NDQUVpQlYsTSxFQUFRO0FBQ3hCQSxNQUFBQSxNQUFNLElBQUlBLE1BQU0sQ0FBQ1csZ0JBQVAsQ0FBd0IsYUFBeEIsRUFBdUMsS0FBS2QscUJBQTVDLEVBQW1FO0FBQUVlLFFBQUFBLE9BQU8sRUFBRTtBQUFYLE9BQW5FLENBQVY7QUFDRDs7O3lDQUVvQlosTSxFQUFRO0FBQzNCQSxNQUFBQSxNQUFNLElBQUlBLE1BQU0sQ0FBQ2EsbUJBQVAsQ0FBMkIsYUFBM0IsRUFBMEMsS0FBS2hCLHFCQUEvQyxDQUFWO0FBQ0Q7Ozs0QkFFT0UsSSxFQUFNbkIsSSxFQUFNQyxFLEVBQUlFLEssRUFBMkI7QUFBQTs7QUFBQSxVQUFwQitCLEtBQW9CLHVFQUFaQyxJQUFJLENBQUNDLEdBQUwsRUFBWTs7QUFDakQsVUFBSW5DLEVBQUUsS0FBSyxNQUFQLElBQWlCLE9BQU9BLEVBQVAsS0FBYyxRQUFuQyxFQUE2QztBQUMzQzRCLFFBQUFBLG9CQUFvQixDQUFDLEtBQUtDLFFBQU4sQ0FBcEI7QUFFQSxhQUFLQSxRQUFMLEdBQWdCTyxxQkFBcUIsQ0FBQyxZQUFNO0FBQUEsY0FDbENqQixNQURrQyxHQUN2QixNQUFJLENBQUNMLEtBRGtCLENBQ2xDSyxNQURrQzs7QUFHMUMsY0FBSUEsTUFBSixFQUFZO0FBQ1YsZ0JBQU1rQixRQUFRLEdBQUdyQyxFQUFFLEtBQUssTUFBUCxHQUFnQm1CLE1BQU0sQ0FBQ21CLFlBQVAsR0FBc0JuQixNQUFNLENBQUNvQixZQUE3QyxHQUE0RHZDLEVBQTdFO0FBQ0EsZ0JBQUl3QyxTQUFTLEdBQUcxQyxJQUFJLENBQUNDLElBQUQsRUFBT3NDLFFBQVAsRUFBaUJoQyxhQUFqQixFQUFnQyxDQUFDNkIsSUFBSSxDQUFDQyxHQUFMLEtBQWFGLEtBQWQsSUFBdUIsQ0FBdkQsQ0FBcEI7O0FBRUEsZ0JBQUl6QixJQUFJLENBQUNFLEdBQUwsQ0FBUzJCLFFBQVEsR0FBR0csU0FBcEIsSUFBaUMsR0FBckMsRUFBMEM7QUFDeENBLGNBQUFBLFNBQVMsR0FBR0gsUUFBWjtBQUNEOztBQUVEbEIsWUFBQUEsTUFBTSxDQUFDRCxJQUFELENBQU4sR0FBZXNCLFNBQWY7O0FBRUEsZ0JBQUlILFFBQVEsS0FBS0csU0FBakIsRUFBNEI7QUFDMUIsY0FBQSxNQUFJLENBQUMxQixLQUFMLENBQVcyQixLQUFYLElBQW9CLE1BQUksQ0FBQzNCLEtBQUwsQ0FBVzJCLEtBQVgsQ0FBaUIsSUFBakIsQ0FBcEI7QUFDRCxhQUZELE1BRU87QUFDTCxjQUFBLE1BQUksQ0FBQ25CLE9BQUwsQ0FBYUosSUFBYixFQUFtQm5CLElBQW5CLEVBQXlCQyxFQUF6QixFQUE2QkUsS0FBSyxHQUFHLENBQXJDLEVBQXdDK0IsS0FBeEM7QUFDRDtBQUNGO0FBQ0YsU0FuQm9DLENBQXJDO0FBb0JEO0FBQ0Y7Ozs0Q0FFdUI7QUFDdEJMLE1BQUFBLG9CQUFvQixDQUFDLEtBQUtDLFFBQU4sQ0FBcEI7QUFDQSxXQUFLZixLQUFMLENBQVcyQixLQUFYLElBQW9CLEtBQUszQixLQUFMLENBQVcyQixLQUFYLENBQWlCLEtBQWpCLENBQXBCO0FBQ0Q7Ozs2QkFFUTtBQUNQLGFBQU8sS0FBUDtBQUNEOzs7O0VBL0VtQ0MsZUFBTUMsUzs7O0FBa0Y1QzlCLFFBQVEsQ0FBQytCLFNBQVQsR0FBcUI7QUFDbkIxQixFQUFBQSxJQUFJLEVBQUUyQixtQkFBVUMsTUFBVixDQUFpQkMsVUFESjtBQUVuQk4sRUFBQUEsS0FBSyxFQUFFSSxtQkFBVUcsSUFGRTtBQUduQjdCLEVBQUFBLE1BQU0sRUFBRTBCLG1CQUFVSSxHQUFWLENBQWNGLFVBSEg7QUFJbkIzQixFQUFBQSxLQUFLLEVBQUV5QixtQkFBVUssU0FBVixDQUFvQixDQUN6QkwsbUJBQVVNLE1BRGUsRUFFekJOLG1CQUFVTyxLQUFWLENBQWdCLENBQUMsTUFBRCxDQUFoQixDQUZ5QixDQUFwQixFQUdKTDtBQVBnQixDQUFyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5mdW5jdGlvbiBzdGVwKGZyb20sIHRvLCBzdGVwcGVyLCBpbmRleCkge1xuICBsZXQgbmV4dCA9IGZyb207XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRleDsgaSsrKSB7XG4gICAgbmV4dCA9IHN0ZXBwZXIobmV4dCwgdG8pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQ7XG59XG5cbmZ1bmN0aW9uIHNxdWFyZVN0ZXBwZXIoY3VycmVudCwgdG8pIHtcbiAgY29uc3Qgc2lnbiA9IE1hdGguc2lnbih0byAtIGN1cnJlbnQpO1xuICBjb25zdCBzdGVwID0gTWF0aC5zcXJ0KE1hdGguYWJzKHRvIC0gY3VycmVudCkpO1xuICBjb25zdCBuZXh0ID0gY3VycmVudCArIHN0ZXAgKiBzaWduO1xuXG4gIGlmIChzaWduID4gMCkge1xuICAgIHJldHVybiBNYXRoLm1pbih0bywgbmV4dCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KHRvLCBuZXh0KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTY3JvbGxUbyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzLCBjb250ZXh0KSB7XG4gICAgc3VwZXIocHJvcHMsIGNvbnRleHQpO1xuXG4gICAgdGhpcy5oYW5kbGVDYW5jZWxBbmltYXRpb24gPSB0aGlzLmhhbmRsZUNhbmNlbEFuaW1hdGlvbi5iaW5kKHRoaXMpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBuYW1lLCB0YXJnZXQsIHZhbHVlIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVycyh0YXJnZXQpO1xuICAgICAgdGhpcy5hbmltYXRlKG5hbWUsIHRhcmdldFtuYW1lXSwgdmFsdWUsIDEpO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICBjb25zdCB7IHByb3BzOiB7IG5hbWUsIHRhcmdldCwgdmFsdWUgfSB9ID0gdGhpcztcbiAgICBjb25zdCB7IHRhcmdldDogcHJldlRhcmdldCB9ID0gcHJldlByb3BzO1xuICAgIGNvbnN0IHNjcm9sbENoYW5nZWQgPSBwcmV2UHJvcHMudmFsdWUgIT09IHZhbHVlO1xuICAgIGNvbnN0IHRhcmdldENoYW5nZWQgPSBwcmV2VGFyZ2V0ICE9PSB0YXJnZXQ7XG5cbiAgICBpZiAodGFyZ2V0Q2hhbmdlZCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVycyhwcmV2VGFyZ2V0KTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcnModGFyZ2V0KTtcbiAgICB9XG5cbiAgICBpZiAoKHNjcm9sbENoYW5nZWQgfHwgdGFyZ2V0Q2hhbmdlZCkgJiYgdGFyZ2V0KSB7XG4gICAgICB0aGlzLmFuaW1hdGUobmFtZSwgdGFyZ2V0W25hbWVdLCB2YWx1ZSwgMSk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVycyh0aGlzLnByb3BzLnRhcmdldCk7XG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5hbmltYXRvcik7XG4gIH1cblxuICBhZGRFdmVudExpc3RlbmVycyh0YXJnZXQpIHtcbiAgICB0YXJnZXQgJiYgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5oYW5kbGVDYW5jZWxBbmltYXRpb24sIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXJzKHRhcmdldCkge1xuICAgIHRhcmdldCAmJiB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCB0aGlzLmhhbmRsZUNhbmNlbEFuaW1hdGlvbik7XG4gIH1cblxuICBhbmltYXRlKG5hbWUsIGZyb20sIHRvLCBpbmRleCwgc3RhcnQgPSBEYXRlLm5vdygpKSB7XG4gICAgaWYgKHRvID09PSAnMTAwJScgfHwgdHlwZW9mIHRvID09PSAnbnVtYmVyJykge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5hbmltYXRvcik7XG5cbiAgICAgIHRoaXMuYW5pbWF0b3IgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHRhcmdldCB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgY29uc3QgdG9OdW1iZXIgPSB0byA9PT0gJzEwMCUnID8gdGFyZ2V0LnNjcm9sbEhlaWdodCAtIHRhcmdldC5vZmZzZXRIZWlnaHQgOiB0bztcbiAgICAgICAgICBsZXQgbmV4dFZhbHVlID0gc3RlcChmcm9tLCB0b051bWJlciwgc3F1YXJlU3RlcHBlciwgKERhdGUubm93KCkgLSBzdGFydCkgLyA1KTtcblxuICAgICAgICAgIGlmIChNYXRoLmFicyh0b051bWJlciAtIG5leHRWYWx1ZSkgPCAxLjUpIHtcbiAgICAgICAgICAgIG5leHRWYWx1ZSA9IHRvTnVtYmVyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRhcmdldFtuYW1lXSA9IG5leHRWYWx1ZTtcblxuICAgICAgICAgIGlmICh0b051bWJlciA9PT0gbmV4dFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uRW5kICYmIHRoaXMucHJvcHMub25FbmQodHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0ZShuYW1lLCBmcm9tLCB0bywgaW5kZXggKyAxLCBzdGFydCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDYW5jZWxBbmltYXRpb24oKSB7XG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5hbmltYXRvcik7XG4gICAgdGhpcy5wcm9wcy5vbkVuZCAmJiB0aGlzLnByb3BzLm9uRW5kKGZhbHNlKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuU2Nyb2xsVG8ucHJvcFR5cGVzID0ge1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIG9uRW5kOiBQcm9wVHlwZXMuZnVuYyxcbiAgdGFyZ2V0OiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIHZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbiAgICBQcm9wVHlwZXMubnVtYmVyLFxuICAgIFByb3BUeXBlcy5vbmVPZihbJzEwMCUnXSlcbiAgXSkuaXNSZXF1aXJlZFxufTtcbiJdfQ==
var _default = SpineTo;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TcGluZVRvLmpzIl0sIm5hbWVzIjpbInNxdWFyZVN0ZXBwZXIiLCJjdXJyZW50IiwidG8iLCJzaWduIiwiTWF0aCIsInN0ZXAiLCJzcXJ0IiwiYWJzIiwibmV4dCIsIm1pbiIsIm1heCIsImZyb20iLCJzdGVwcGVyIiwiaW5kZXgiLCJpIiwiU3BpbmVUbyIsIm5hbWUiLCJvbkVuZCIsInRhcmdldCIsInZhbHVlIiwiYW5pbWF0b3IiLCJhbmltYXRlIiwic3RhcnQiLCJEYXRlIiwibm93IiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ0b051bWJlciIsInNjcm9sbEhlaWdodCIsIm9mZnNldEhlaWdodCIsIm5leHRWYWx1ZSIsImhhbmRsZUNhbmNlbEFuaW1hdGlvbiIsImFkZEV2ZW50TGlzdGVuZXIiLCJwYXNzaXZlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInN0cmluZyIsImlzUmVxdWlyZWQiLCJmdW5jIiwiYW55Iiwib25lT2ZUeXBlIiwibnVtYmVyIiwib25lT2YiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFFQTs7QUFDQTs7OztBQUhBO0FBS0EsU0FBU0EsYUFBVCxDQUF1QkMsT0FBdkIsRUFBZ0NDLEVBQWhDLEVBQW9DO0FBQ2xDLE1BQU1DLElBQUksR0FBR0MsSUFBSSxDQUFDRCxJQUFMLENBQVVELEVBQUUsR0FBR0QsT0FBZixDQUFiO0FBQ0EsTUFBTUksSUFBSSxHQUFHRCxJQUFJLENBQUNFLElBQUwsQ0FBVUYsSUFBSSxDQUFDRyxHQUFMLENBQVNMLEVBQUUsR0FBR0QsT0FBZCxDQUFWLENBQWI7QUFDQSxNQUFNTyxJQUFJLEdBQUdQLE9BQU8sR0FBR0ksSUFBSSxHQUFHRixJQUE5Qjs7QUFFQSxNQUFJQSxJQUFJLEdBQUcsQ0FBWCxFQUFjO0FBQ1osV0FBT0MsSUFBSSxDQUFDSyxHQUFMLENBQVNQLEVBQVQsRUFBYU0sSUFBYixDQUFQO0FBQ0Q7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QUF4QixFQUF1Q0QscUJBQXZDLEVBQThEO0FBQUVFLFFBQUFBLE9BQU8sRUFBRTtBQUFYLE9BQTlEO0FBRUEsYUFBTztBQUFBLGVBQU1mLE1BQU0sQ0FBQ2dCLG1CQUFQLENBQTJCLGFBQTNCLEVBQTBDSCxxQkFBMUMsQ0FBTjtBQUFBLE9BQVA7QUFDRDtBQUNGLEdBUkQsRUFRRyxDQUFDVixPQUFELEVBQVVVLHFCQUFWLEVBQWlDZixJQUFqQyxFQUF1Q0UsTUFBdkMsRUFBK0NDLEtBQS9DLENBUkg7QUFVQSxTQUFPLEtBQVA7QUFDRCxDQS9DRDs7QUFpREFKLE9BQU8sQ0FBQ29CLFNBQVIsR0FBb0I7QUFDbEJuQixFQUFBQSxJQUFJLEVBQUVvQixtQkFBVUMsTUFBVixDQUFpQkMsVUFETDtBQUVsQnJCLEVBQUFBLEtBQUssRUFBRW1CLG1CQUFVRyxJQUZDO0FBR2xCckIsRUFBQUEsTUFBTSxFQUFFa0IsbUJBQVVJLEdBQVYsQ0FBY0YsVUFISjtBQUlsQm5CLEVBQUFBLEtBQUssRUFBRWlCLG1CQUFVSyxTQUFWLENBQW9CLENBQUNMLG1CQUFVTSxNQUFYLEVBQW1CTixtQkFBVU8sS0FBVixDQUFnQixDQUFDLE1BQUQsQ0FBaEIsQ0FBbkIsQ0FBcEIsRUFBbUVMO0FBSnhELENBQXBCO2VBT2V2QixPIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IG5vLW1hZ2ljLW51bWJlcnM6IFtcImVycm9yXCIsIHsgXCJpZ25vcmVcIjogWzAsIDEsIDEuNSwgNV0gfV0gKi9cblxuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUxheW91dEVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuZnVuY3Rpb24gc3F1YXJlU3RlcHBlcihjdXJyZW50LCB0bykge1xuICBjb25zdCBzaWduID0gTWF0aC5zaWduKHRvIC0gY3VycmVudCk7XG4gIGNvbnN0IHN0ZXAgPSBNYXRoLnNxcnQoTWF0aC5hYnModG8gLSBjdXJyZW50KSk7XG4gIGNvbnN0IG5leHQgPSBjdXJyZW50ICsgc3RlcCAqIHNpZ247XG5cbiAgaWYgKHNpZ24gPiAwKSB7XG4gICAgcmV0dXJuIE1hdGgubWluKHRvLCBuZXh0KTtcbiAgfVxuXG4gIHJldHVybiBNYXRoLm1heCh0bywgbmV4dCk7XG59XG5cbmZ1bmN0aW9uIHN0ZXAoZnJvbSwgdG8sIHN0ZXBwZXIsIGluZGV4KSB7XG4gIGxldCBuZXh0ID0gZnJvbTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGV4OyBpKyspIHtcbiAgICBuZXh0ID0gc3RlcHBlcihuZXh0LCB0byk7XG4gIH1cblxuICByZXR1cm4gbmV4dDtcbn1cblxuY29uc3QgU3BpbmVUbyA9ICh7IG5hbWUsIG9uRW5kLCB0YXJnZXQsIHZhbHVlIH0pID0+IHtcbiAgY29uc3QgYW5pbWF0b3IgPSB1c2VSZWYoKTtcblxuICBjb25zdCBhbmltYXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKG5hbWUsIGZyb20sIHRvLCBpbmRleCwgc3RhcnQgPSBEYXRlLm5vdygpKSA9PiB7XG4gICAgICBpZiAodG8gPT09ICcxMDAlJyB8fCB0eXBlb2YgdG8gPT09ICdudW1iZXInKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGFuaW1hdG9yLmN1cnJlbnQpO1xuXG4gICAgICAgIGFuaW1hdG9yLmN1cnJlbnQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvTnVtYmVyID0gdG8gPT09ICcxMDAlJyA/IHRhcmdldC5zY3JvbGxIZWlnaHQgLSB0YXJnZXQub2Zmc2V0SGVpZ2h0IDogdG87XG4gICAgICAgICAgICBsZXQgbmV4dFZhbHVlID0gc3RlcChmcm9tLCB0b051bWJlciwgc3F1YXJlU3RlcHBlciwgKERhdGUubm93KCkgLSBzdGFydCkgLyA1KTtcblxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKHRvTnVtYmVyIC0gbmV4dFZhbHVlKSA8IDEuNSkge1xuICAgICAgICAgICAgICBuZXh0VmFsdWUgPSB0b051bWJlcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGFyZ2V0W25hbWVdID0gbmV4dFZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodG9OdW1iZXIgPT09IG5leHRWYWx1ZSkge1xuICAgICAgICAgICAgICBvbkVuZCAmJiBvbkVuZCh0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGFuaW1hdGUobmFtZSwgZnJvbSwgdG8sIGluZGV4ICsgMSwgc3RhcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbYW5pbWF0b3IsIG9uRW5kLCB0YXJnZXRdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQ2FuY2VsQW5pbWF0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGFuaW1hdG9yKTtcbiAgICBvbkVuZCAmJiBvbkVuZChmYWxzZSk7XG4gIH0sIFtvbkVuZF0pO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgYW5pbWF0ZShuYW1lLCB0YXJnZXRbbmFtZV0sIHZhbHVlLCAxKTtcblxuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIGhhbmRsZUNhbmNlbEFuaW1hdGlvbiwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuXG4gICAgICByZXR1cm4gKCkgPT4gdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgaGFuZGxlQ2FuY2VsQW5pbWF0aW9uKTtcbiAgICB9XG4gIH0sIFthbmltYXRlLCBoYW5kbGVDYW5jZWxBbmltYXRpb24sIG5hbWUsIHRhcmdldCwgdmFsdWVdKTtcblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5TcGluZVRvLnByb3BUeXBlcyA9IHtcbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBvbkVuZDogUHJvcFR5cGVzLmZ1bmMsXG4gIHRhcmdldDogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICB2YWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9uZU9mKFsnMTAwJSddKV0pLmlzUmVxdWlyZWRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNwaW5lVG87XG4iXX0=
{
"name": "react-scroll-to-bottom",
"version": "1.3.3-master.29d7b03",
"version": "2.0.0-master.3eb21bc",
"description": "React container that will auto scroll to bottom",

@@ -14,2 +14,5 @@ "keywords": [

"scroll to top",
"sticky",
"stick to bottom",
"stick to top",
"tail"

@@ -23,5 +26,5 @@ ],

"build": "babel --out-dir lib --ignore **/*.spec.js,**/*.test.js --source-maps inline --verbose src/",
"clean": "rimraf lib",
"test": "echo no test specified",
"watch": "npm run build -- --watch"
"eslint": "eslint src/**/*.js --ignore-pattern *.spec.js --ignore-pattern *.test.js",
"start": "npm run build -- --watch",
"test": "echo no test specified"
},

@@ -39,22 +42,17 @@ "author": "William Wong <compulim@hotmail.com> (http://compulim.info/)",

"devDependencies": {
"@babel/cli": "^7.5.5",
"@babel/core": "^7.5.5",
"@babel/plugin-proposal-object-rest-spread": "^7.5.5",
"@babel/preset-env": "^7.5.5",
"@babel/cli": "^7.6.2",
"@babel/core": "^7.6.2",
"@babel/plugin-proposal-object-rest-spread": "^7.6.2",
"@babel/preset-env": "^7.6.2",
"@babel/preset-react": "^7.0.0",
"babel-core": "7.0.0-bridge.0",
"babel-jest": "^24.8.0",
"jest": "^24.8.0",
"react": "16.4.1",
"rimraf": "^2.6.3"
"babel-jest": "^24.9.0",
"jest": "^24.9.0"
},
"dependencies": {
"classnames": "^2.2.6",
"glamor": "^2.20.40",
"memoize-one": "^4.0.2",
"simple-update-in": "^1.4.0"
"glamor": "^2.20.40"
},
"peerDependencies": {
"react": "^16.4.1"
"react": "^16.8.6"
}
}

@@ -7,4 +7,2 @@ # react-scroll-to-bottom

This project scaffolding is from [react-component-template](https://github.com/compulim/react-component-template).
# Demo

@@ -14,2 +12,6 @@

# Breaking changes
Starting from `react-scroll-to-bottom@2`, we requires React 16.8.6 or above. This enable developers to use React Hooks to add features to the scroll view.
# Sample code

@@ -47,4 +49,125 @@

## Hooks
You can use React Hooks to perform various operations and signal state changes. The component which use the hook must stay under `<ScrollToBottom>` or `<Composer>`.
<table>
<thead>
<tr>
<th>Category</th>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Function</td>
<td><code>useScrollTo</code></td>
<td><code>() => (scrollTop: number | '100%') => void</code></td>
<td>Scroll panel to specified position</td>
</tr>
<tr>
<td>Function</td>
<td><code>useScrollToBottom</code></td>
<td><code>() => () => void</code></td>
<td>Scroll panel to bottom</td>
</tr>
<tr>
<td>Function</td>
<td><code>useScrollToEnd</code></td>
<td><code>() => () => void</code></td>
<td>Scroll panel to end (depends on <code>mode</code>)</td>
</tr>
<tr>
<td>Function</td>
<td><code>useScrollToStart</code></td>
<td><code>() => () => void</code></td>
<td>Scroll panel to start (depends on <code>mode</code>)</td>
</tr>
<tr>
<td>Function</td>
<td><code>useScrollToTop</code></td>
<td><code>() => () => void</code></td>
<td>Scroll panel to top</td>
</tr>
<tr>
<td>State</td>
<td><code>useAnimating</code></td>
<td><code>() => [boolean]</code></td>
<td><code>true</code> if the panel is animating scroll effect</td>
</tr>
<tr>
<td>State</td>
<td><code>useAtBottom</code></td>
<td><code>() => [boolean]</code></td>
<td><code>true</code> if the panel is currently near bottom</td>
</tr>
<tr>
<td>State</td>
<td><code>useAtEnd</code></td>
<td><code>() => [boolean]</code></td>
<td><code>true</code> if the panel is currently near the end (depends on <code>mode</code>)</td>
</tr>
<tr>
<td>State</td>
<td><code>useAtStart</code></td>
<td><code>() => [boolean]</code></td>
<td><code>true</code> if the panel is currently near the start (depends on <code>mode</code>)</td>
</tr>
<tr>
<td>State</td>
<td><code>useAtTop</code></td>
<td><code>() => [boolean]</code></td>
<td><code>true</code> if the panel is currently near top</td>
</tr>
<tr>
<td>State</td>
<td><code>useMode</code></td>
<td><code>() => [string]</code></td>
<td><code>"bottom"</code> for scroll-to-bottom, <code>"top"</code> for scroll-to-top</td>
</tr>
<tr>
<td>State</td>
<td><code>useSticky</code></td>
<td><code>() => [boolean]</code></td>
<td><code>true</code> if the panel is sticking to the end</td>
</tr>
</tbody>
</table>
### Sample code
The following sample code will put a button inside the content view only if the view is not at the bottom. When the button is clicked, it will scroll the view to the bottom.
> Note: `useScrollToBottom` can only be called inside components hosted under `<ScrollToBottom>`.
```jsx
import ScrollToBottom, { useScrollToBottom, useSticky } from 'react-scroll-to-bottom';
const Content = () => {
const scrollToBottom = useScrollToBottom();
const [sticky] = useSticky();
return (
<React.Fragment>
<p>Labore commodo consectetur commodo et Lorem mollit voluptate velit adipisicing proident sit. Dolor consequat nostrud aliquip ea anim enim. Culpa quis tempor et quis esse proident cupidatat reprehenderit laborum ullamco.</p>
<p>Incididunt labore nulla cupidatat occaecat elit esse occaecat culpa irure et nisi excepteur. Duis Lorem labore consectetur nostrud et voluptate culpa consequat enim reprehenderit. Id voluptate occaecat anim consequat id ea eiusmod laborum proident irure veniam esse. Aliquip nostrud culpa nostrud laborum cillum adipisicing dolore. Est tempor labore Lorem ad cupidatat reprehenderit exercitation pariatur officia ex adipisicing cupidatat exercitation.</p>
<p>Est labore cupidatat exercitation est laboris et tempor Lorem irure velit ea commodo sint officia. Ullamco exercitation cillum est fugiat do. Enim qui eu veniam nostrud tempor elit. Duis elit mollit ut reprehenderit sit adipisicing proident culpa veniam sint veniam consectetur fugiat Lorem. Sint dolor proident commodo proident non cupidatat labore.</p>
{ !sticky && <button onClick={ scrollToBottom }>Click me to scroll to bottom</button> }
</React.Fragment>
);
}
export default () => (
<ScrollToBottom>
<Content />
</ScrollToBottom>
)
```
## Context
> Starting with React Hooks, we are deprecating the React Context.
We use 2 different contexts with different performance characteristics to provide better overall performance. [Function context](#function-context) contains immutable functions. [State context](#state-context) may change when the user scroll the panel.

@@ -56,9 +179,38 @@

| Name | Type | Description |
|------------------|----------------------------------------|-------------------------------------------|
| `scrollTo` | `(scrollTop: number | '100%') => void` | Scroll panel to specified position |
| `scrollToBottom` | `() => void` | Scroll panel to bottom |
| `scrollToEnd` | `() => void` | Scroll panel to end (depends on `mode`) |
| `scrollToStart` | `() => void` | Scroll panel to start (depends on `mode`) |
| `scrollToTop` | `() => void` | Scroll panel to top |
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>useScrollTo</code></td>
<td><code>(scrollTop: number | '100%') => void</code></td>
<td>Scroll panel to specified position</td>
</tr>
<tr>
<td><code>useScrollToBottom</code></td>
<td><code>() => void</code></td>
<td>Scroll panel to bottom</td>
</tr>
<tr>
<td><code>useScrollToEnd</code></td>
<td><code>() => void</code></td>
<td>Scroll panel to end (depends on <code>mode</code>)</td>
</tr>
<tr>
<td><code>useScrollToStart</code></td>
<td><code>() => void</code></td>
<td>Scroll panel to start (depends on <code>mode</code>)</td>
</tr>
<tr>
<td><code>useScrollToTop</code></td>
<td><code>() => void</code></td>
<td>Scroll panel to top</td>
</tr>
</tbody>
</table>

@@ -69,11 +221,48 @@ ### State context

| Name | Type | Description |
|-------------|-----------|---------------------------------------------------------------------|
| `animating` | `boolean` | `true` if the panel is animating scroll effect |
| `atBottom` | `boolean` | `true` if the panel is currently near bottom |
| `atEnd` | `boolean` | `true` if the panel is currently near the end (depends on `mode`) |
| `atStart` | `boolean` | `true` if the panel is currently near the start (depends on `mode`) |
| `atTop` | `boolean` | `true` if the panel is currently near top |
| `mode` | `string` | `"bottom"` for scroll-to-bottom, `"top"` for scroll-to-top |
| `sticky` | `boolean` | `true` if the panel is sticking to the end |
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>useAnimating</code></td>
<td><code>boolean</code></td>
<td><code>true</code> if the panel is animating scroll effect</td>
</tr>
<tr>
<td><code>useAtBottom</code></td>
<td><code>boolean</code></td>
<td><code>true</code> if the panel is currently near bottom</td>
</tr>
<tr>
<td><code>useAtEnd</code></td>
<td><code>boolean</code></td>
<td><code>true</code> if the panel is currently near the end (depends on <code>mode</code>)</td>
</tr>
<tr>
<td><code>useAtStart</code></td>
<td><code>boolean</code></td>
<td><code>true</code> if the panel is currently near the start (depends on <code>mode</code>)</td>
</tr>
<tr>
<td><code>useAtTop</code></td>
<td><code>boolean</code></td>
<td><code>true</code> if the panel is currently near top</td>
</tr>
<tr>
<td><code>useMode</code></td>
<td><code>string</code></td>
<td><code>"bottom"</code> for scroll-to-bottom, <code>"top"</code> for scroll-to-top</td>
</tr>
<tr>
<td><code>useSticky</code></td>
<td><code>boolean</code></td>
<td><code>true</code> if the panel is sticking to the end</td>
</tr>
</tbody>
</table>

@@ -80,0 +269,0 @@ > `atEnd` and `sticky` are slightly different. During scroll animation, the panel is not at the end yet, but it is still sticky.