react-scroll-to-bottom
Advanced tools
Comparing version
@@ -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 |
@@ -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== |
@@ -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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TY3JvbGxUb0JvdHRvbS9Db21wb3Nlci5qcyJdLCJuYW1lcyI6WyJNSU5fQ0hFQ0tfSU5URVJWQUwiLCJORUFSX0VORF9USFJFU0hPTEQiLCJTQ1JPTExfREVDSVNJT05fRFVSQVRJT04iLCJzZXRJbW1lZGlhdGVJbnRlcnZhbCIsImZuIiwibXMiLCJzZXRJbnRlcnZhbCIsImNvbXB1dGVWaWV3U3RhdGUiLCJtb2RlIiwic3RhdGVDb250ZXh0IiwidGFyZ2V0Iiwib2Zmc2V0SGVpZ2h0Iiwic2Nyb2xsSGVpZ2h0Iiwic2Nyb2xsVG9wIiwiYXRCb3R0b20iLCJhdFRvcCIsImF0RW5kIiwiYXRTdGFydCIsIkNvbXBvc2VyIiwicHJvcHMiLCJoYW5kbGVTY3JvbGwiLCJiaW5kIiwiaGFuZGxlU2Nyb2xsRW5kIiwiX2lnbm9yZVNjcm9sbEV2ZW50QmVmb3JlIiwic3RhdGUiLCJmdW5jdGlvbkNvbnRleHQiLCJzY3JvbGxUbyIsInNldFN0YXRlIiwic2Nyb2xsVG9Cb3R0b20iLCJzY3JvbGxUb0VuZCIsInNjcm9sbFRvVG9wIiwic2Nyb2xsVG9TdGFydCIsImludGVybmFsQ29udGV4dCIsInNldFRhcmdldCIsImFuaW1hdGluZyIsInN0aWNreSIsImVuYWJsZVdvcmtlciIsImNsZWFySW50ZXJ2YWwiLCJfc3RpY2t5Q2hlY2tUaW1lb3V0Iiwic3RpY2t5QnV0Tm90QXRFbmRTaW5jZSIsIkRhdGUiLCJub3ciLCJNYXRoIiwibWF4IiwiY2hlY2tJbnRlcnZhbCIsImRpc2FibGVXb3JrZXIiLCJuZXh0UHJvcHMiLCJ0aW1lU3RhbXBMb3ciLCJuZXh0SW50ZXJuYWxDb250ZXh0IiwibmV4dFN0YXRlQ29udGV4dCIsInJlc2l6ZWQiLCJlbGVtZW50Q2hhbmdlZCIsImNoaWxkcmVuIiwiZGVib3VuY2UiLCJSZWFjdCIsIkNvbXBvbmVudCIsImRlZmF1bHRQcm9wcyIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsIm51bWJlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsSUFBTUEsa0JBQWtCLEdBQUcsRUFBM0IsQyxDQUFxQzs7QUFDckMsSUFBTUMsa0JBQWtCLEdBQUcsQ0FBM0I7QUFDQSxJQUFNQyx3QkFBd0IsR0FBRyxFQUFqQyxDLENBQXFDOztBQUVyQyxTQUFTQyxvQkFBVCxDQUE4QkMsRUFBOUIsRUFBa0NDLEVBQWxDLEVBQXNDO0FBQ3BDRCxFQUFBQSxFQUFFO0FBRUYsU0FBT0UsV0FBVyxDQUFDRixFQUFELEVBQUtDLEVBQUwsQ0FBbEI7QUFDRDs7QUFFRCxTQUFTRSxnQkFBVCxPQUF5RztBQUFBLE1BQTdEQyxJQUE2RCxRQUE3RUMsWUFBNkUsQ0FBN0RELElBQTZEO0FBQUEseUJBQXJERSxNQUFxRDtBQUFBLE1BQTNDQyxZQUEyQyxlQUEzQ0EsWUFBMkM7QUFBQSxNQUE3QkMsWUFBNkIsZUFBN0JBLFlBQTZCO0FBQUEsTUFBZkMsU0FBZSxlQUFmQSxTQUFlO0FBQ3ZHLE1BQU1DLFFBQVEsR0FBR0YsWUFBWSxHQUFHQyxTQUFmLEdBQTJCRixZQUEzQixHQUEwQ1Ysa0JBQTNEO0FBQ0EsTUFBTWMsS0FBSyxHQUFHRixTQUFTLEdBQUdaLGtCQUExQjtBQUNBLE1BQU1lLEtBQUssR0FBR1IsSUFBSSxLQUFLLEtBQVQsR0FBaUJPLEtBQWpCLEdBQXlCRCxRQUF2QztBQUVBLFNBQU87QUFDTEEsSUFBQUEsUUFBUSxFQUFSQSxRQURLO0FBRUxFLElBQUFBLEtBQUssRUFBTEEsS0FGSztBQUdMQyxJQUFBQSxPQUFPLEVBQUUsQ0FBQ0QsS0FITDtBQUlMRCxJQUFBQSxLQUFLLEVBQUxBO0FBSkssR0FBUDtBQU1EOztJQUVvQkcsUTs7Ozs7QUFDbkIsb0JBQVlDLEtBQVosRUFBbUI7QUFBQTs7QUFBQTs7QUFDakIsa0ZBQU1BLEtBQU47QUFFQSxVQUFLQyxZQUFMLEdBQW9CLE1BQUtBLFlBQUwsQ0FBa0JDLElBQWxCLCtCQUFwQjtBQUNBLFVBQUtDLGVBQUwsR0FBdUIsTUFBS0EsZUFBTCxDQUFxQkQsSUFBckIsK0JBQXZCO0FBRUEsVUFBS0Usd0JBQUwsR0FBZ0MsQ0FBaEM7QUFFQSxVQUFLQyxLQUFMLEdBQWE7QUFDWEMsTUFBQUEsZUFBZSxFQUFFO0FBQ2ZDLFFBQUFBLFFBQVEsRUFBRSxrQkFBQWIsU0FBUztBQUFBLGlCQUFJLE1BQUtjLFFBQUwsQ0FBYztBQUFBLGdCQUFHbEIsWUFBSCxTQUFHQSxZQUFIO0FBQUEsbUJBQXVCO0FBQzFESSxjQUFBQSxTQUFTLEVBQVRBLFNBRDBEO0FBRTFESixjQUFBQSxZQUFZLEVBQUUsNkJBQVNBLFlBQVQsRUFBdUIsQ0FBQyxXQUFELENBQXZCLEVBQXNDO0FBQUEsdUJBQU0sSUFBTjtBQUFBLGVBQXRDO0FBRjRDLGFBQXZCO0FBQUEsV0FBZCxDQUFKO0FBQUEsU0FESjtBQUtmbUIsUUFBQUEsY0FBYyxFQUFFO0FBQUEsaUJBQU0sTUFBS0osS0FBTCxDQUFXQyxlQUFYLENBQTJCQyxRQUEzQixDQUFvQyxNQUFwQyxDQUFOO0FBQUEsU0FMRDtBQU1mRyxRQUFBQSxXQUFXLEVBQUUsdUJBQU07QUFBQTtBQUFBLDZEQUNUTCxLQURTO0FBQUEsY0FDQUMsZUFEQSwwQkFDQUEsZUFEQTtBQUFBLGNBQ2lCaEIsWUFEakIsMEJBQ2lCQSxZQURqQjs7QUFHakJBLFVBQUFBLFlBQVksQ0FBQ0QsSUFBYixLQUFzQixLQUF0QixHQUE4QmlCLGVBQWUsQ0FBQ0ssV0FBaEIsRUFBOUIsR0FBOERMLGVBQWUsQ0FBQ0csY0FBaEIsRUFBOUQ7QUFDRCxTQVZjO0FBV2ZHLFFBQUFBLGFBQWEsRUFBRSx5QkFBTTtBQUFBO0FBQUEsOERBQ1hQLEtBRFc7QUFBQSxjQUNGQyxlQURFLDBCQUNGQSxlQURFO0FBQUEsY0FDZWhCLFlBRGYsMEJBQ2VBLFlBRGY7O0FBR25CQSxVQUFBQSxZQUFZLENBQUNELElBQWIsS0FBc0IsS0FBdEIsR0FBOEJpQixlQUFlLENBQUNHLGNBQWhCLEVBQTlCLEdBQWlFSCxlQUFlLENBQUNLLFdBQWhCLEVBQWpFO0FBQ0QsU0FmYztBQWdCZkEsUUFBQUEsV0FBVyxFQUFFO0FBQUEsaUJBQU0sTUFBS04sS0FBTCxDQUFXQyxlQUFYLENBQTJCQyxRQUEzQixDQUFvQyxDQUFwQyxDQUFOO0FBQUE7QUFoQkUsT0FETjtBQW1CWE0sTUFBQUEsZUFBZSxFQUFFO0FBQ2ZyQixRQUFBQSxZQUFZLEVBQUUsQ0FEQztBQUVmQyxRQUFBQSxZQUFZLEVBQUUsQ0FGQztBQUdmcUIsUUFBQUEsU0FBUyxFQUFFLG1CQUFBdkIsTUFBTTtBQUFBLGlCQUFJLE1BQUtpQixRQUFMLENBQWM7QUFBQSxtQkFBTztBQUFFakIsY0FBQUEsTUFBTSxFQUFOQTtBQUFGLGFBQVA7QUFBQSxXQUFkLENBQUo7QUFBQTtBQUhGLE9BbkJOO0FBd0JYRyxNQUFBQSxTQUFTLEVBQUVNLEtBQUssQ0FBQ1gsSUFBTixLQUFlLEtBQWYsR0FBdUIsQ0FBdkIsR0FBMkIsTUF4QjNCO0FBeUJYQyxNQUFBQSxZQUFZLEVBQUU7QUFDWnlCLFFBQUFBLFNBQVMsRUFBRSxLQURDO0FBRVpwQixRQUFBQSxRQUFRLEVBQUUsSUFGRTtBQUdaRSxRQUFBQSxLQUFLLEVBQUUsSUFISztBQUlaRCxRQUFBQSxLQUFLLEVBQUUsSUFKSztBQUtaUCxRQUFBQSxJQUFJLEVBQUVXLEtBQUssQ0FBQ1gsSUFMQTtBQU1aMkIsUUFBQUEsTUFBTSxFQUFFO0FBTkksT0F6Qkg7QUFpQ1h6QixNQUFBQSxNQUFNLEVBQUU7QUFqQ0csS0FBYjtBQVJpQjtBQTJDbEI7Ozs7d0NBRW1CO0FBQ2xCLFdBQUswQixZQUFMO0FBQ0Q7OztvQ0FFZTtBQUNkQyxNQUFBQSxhQUFhLENBQUMsS0FBS0MsbUJBQU4sQ0FBYjtBQUNEOzs7bUNBRWM7QUFBQTs7QUFDYkQsTUFBQUEsYUFBYSxDQUFDLEtBQUtDLG1CQUFOLENBQWI7QUFFQSxVQUFJQyxzQkFBc0IsR0FBRyxLQUE3QjtBQUVBLFdBQUtELG1CQUFMLEdBQTJCbkMsb0JBQW9CLENBQzdDLFlBQU07QUFBQSxZQUNJcUIsS0FESixHQUNjLE1BRGQsQ0FDSUEsS0FESjtBQUFBLFlBRW9CVyxNQUZwQixHQUV5Q1gsS0FGekMsQ0FFSWYsWUFGSixDQUVvQjBCLE1BRnBCO0FBQUEsWUFFOEJ6QixNQUY5QixHQUV5Q2MsS0FGekMsQ0FFOEJkLE1BRjlCOztBQUlKLFlBQ0V5QixNQUFNLElBQ0h6QixNQURILElBRUcsQ0FBQ0gsZ0JBQWdCLENBQUNpQixLQUFELENBQWhCLENBQXdCUixLQUg5QixFQUlFO0FBQ0EsY0FBSSxDQUFDdUIsc0JBQUwsRUFBNkI7QUFDM0JBLFlBQUFBLHNCQUFzQixHQUFHQyxJQUFJLENBQUNDLEdBQUwsRUFBekI7QUFDRCxXQUZELE1BRU8sSUFBSUQsSUFBSSxDQUFDQyxHQUFMLEtBQWFGLHNCQUFiLEdBQXNDckMsd0JBQTFDLEVBQW9FO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBc0IsWUFBQUEsS0FBSyxDQUFDQyxlQUFOLENBQXNCSSxXQUF0QjtBQUNBVSxZQUFBQSxzQkFBc0IsR0FBRyxLQUF6QjtBQUNEO0FBQ0YsU0FsQkQsTUFrQk87QUFDTEEsVUFBQUEsc0JBQXNCLEdBQUcsS0FBekI7QUFDRDtBQUNGLE9BMUI0QyxFQTJCN0NHLElBQUksQ0FBQ0MsR0FBTCxDQUFTM0Msa0JBQVQsRUFBNkIsS0FBS21CLEtBQUwsQ0FBV3lCLGFBQXhDLEtBQTBENUMsa0JBM0JiLENBQS9DO0FBNkJEOzs7MkNBRXNCO0FBQ3JCLFdBQUs2QyxhQUFMO0FBQ0Q7Ozs4Q0FFeUJDLFMsRUFBVztBQUNuQyxXQUFLbkIsUUFBTCxDQUFjO0FBQUEsWUFBR2xCLFlBQUgsU0FBR0EsWUFBSDtBQUFBLGVBQXVCO0FBQ25DQSxVQUFBQSxZQUFZLG9CQUNQQSxZQURPO0FBRVZELFlBQUFBLElBQUksRUFBRXNDLFNBQVMsQ0FBQ3RDLElBQVYsS0FBbUIsS0FBbkIsR0FBMkIsS0FBM0IsR0FBbUM7QUFGL0I7QUFEdUIsU0FBdkI7QUFBQSxPQUFkO0FBTUQ7Ozt3Q0FFOEI7QUFBQTs7QUFBQSxVQUFoQnVDLFlBQWdCLFNBQWhCQSxZQUFnQjs7QUFDN0I7QUFDQTtBQUNBO0FBRUEsVUFBSUEsWUFBWSxJQUFJLEtBQUt4Qix3QkFBekIsRUFBbUQ7QUFDakQ7QUFDQTtBQUNBO0FBRUE7QUFDRDs7QUFFRCxXQUFLc0IsYUFBTDtBQUVBLFdBQUtsQixRQUFMLENBQWMsVUFBQUgsS0FBSyxFQUFJO0FBQUEsWUFDYmQsTUFEYSxHQUNGYyxLQURFLENBQ2JkLE1BRGE7O0FBR3JCLFlBQUlBLE1BQUosRUFBWTtBQUFBLGNBQ0ZzQixlQURFLEdBQzJDUixLQUQzQyxDQUNGUSxlQURFO0FBQUEsY0FDZW5CLFNBRGYsR0FDMkNXLEtBRDNDLENBQ2VYLFNBRGY7QUFBQSxjQUMwQkosWUFEMUIsR0FDMkNlLEtBRDNDLENBQzBCZixZQUQxQjs7QUFBQSxrQ0FFa0NGLGdCQUFnQixDQUFDaUIsS0FBRCxDQUZsRDtBQUFBLGNBRUZWLFFBRkUscUJBRUZBLFFBRkU7QUFBQSxjQUVRRSxLQUZSLHFCQUVRQSxLQUZSO0FBQUEsY0FFZUMsT0FGZixxQkFFZUEsT0FGZjtBQUFBLGNBRXdCRixLQUZ4QixxQkFFd0JBLEtBRnhCOztBQUdWLGNBQUlpQyxtQkFBbUIsR0FBR2hCLGVBQTFCO0FBQ0EsY0FBSWlCLGdCQUFnQixHQUFHeEMsWUFBdkI7QUFFQXdDLFVBQUFBLGdCQUFnQixHQUFHLDZCQUFTQSxnQkFBVCxFQUEyQixDQUFDLFVBQUQsQ0FBM0IsRUFBeUM7QUFBQSxtQkFBTW5DLFFBQU47QUFBQSxXQUF6QyxDQUFuQjtBQUNBbUMsVUFBQUEsZ0JBQWdCLEdBQUcsNkJBQVNBLGdCQUFULEVBQTJCLENBQUMsT0FBRCxDQUEzQixFQUFzQztBQUFBLG1CQUFNakMsS0FBTjtBQUFBLFdBQXRDLENBQW5CO0FBQ0FpQyxVQUFBQSxnQkFBZ0IsR0FBRyw2QkFBU0EsZ0JBQVQsRUFBMkIsQ0FBQyxTQUFELENBQTNCLEVBQXdDO0FBQUEsbUJBQU1oQyxPQUFOO0FBQUEsV0FBeEMsQ0FBbkI7QUFDQWdDLFVBQUFBLGdCQUFnQixHQUFHLDZCQUFTQSxnQkFBVCxFQUEyQixDQUFDLE9BQUQsQ0FBM0IsRUFBc0M7QUFBQSxtQkFBTWxDLEtBQU47QUFBQSxXQUF0QyxDQUFuQixDQVRVLENBV1Y7QUFDQTtBQUNBO0FBQ0E7O0FBZFUsY0FlRkosWUFmRSxHQWU2QkQsTUFmN0IsQ0FlRkMsWUFmRTtBQUFBLGNBZVlDLFlBZlosR0FlNkJGLE1BZjdCLENBZVlFLFlBZlo7QUFnQlYsY0FBTXNDLE9BQU8sR0FBR3ZDLFlBQVksS0FBS3FCLGVBQWUsQ0FBQ3JCLFlBQWpEO0FBQ0EsY0FBTXdDLGNBQWMsR0FBR3ZDLFlBQVksS0FBS29CLGVBQWUsQ0FBQ3BCLFlBQXhEOztBQUVBLGNBQUlzQyxPQUFKLEVBQWE7QUFDWEYsWUFBQUEsbUJBQW1CLEdBQUcsNkJBQVNBLG1CQUFULEVBQThCLENBQUMsY0FBRCxDQUE5QixFQUFnRDtBQUFBLHFCQUFNckMsWUFBTjtBQUFBLGFBQWhELENBQXRCO0FBQ0Q7O0FBRUQsY0FBSXdDLGNBQUosRUFBb0I7QUFDbEJILFlBQUFBLG1CQUFtQixHQUFHLDZCQUFTQSxtQkFBVCxFQUE4QixDQUFDLGNBQUQsQ0FBOUIsRUFBZ0Q7QUFBQSxxQkFBTXBDLFlBQU47QUFBQSxhQUFoRCxDQUF0QjtBQUNELFdBekJTLENBMkJWO0FBQ0E7QUFDQTtBQUVBOzs7QUFDQSxjQUFJLENBQUNzQyxPQUFELElBQVksQ0FBQ0MsY0FBakIsRUFBaUM7QUFDL0JGLFlBQUFBLGdCQUFnQixHQUFHLDZCQUFTQSxnQkFBVCxFQUEyQixDQUFDLFFBQUQsQ0FBM0IsRUFBdUM7QUFBQSxxQkFBTXhDLFlBQVksQ0FBQ3lCLFNBQWIsR0FBeUIsSUFBekIsR0FBZ0NsQixLQUF0QztBQUFBLGFBQXZDLENBQW5CO0FBQ0QsV0FsQ1MsQ0FvQ1Y7QUFDQTs7O0FBQ0EsY0FBSUgsU0FBUyxLQUFLLElBQWxCLEVBQXdCO0FBQ3RCb0MsWUFBQUEsZ0JBQWdCLEdBQUcsNkJBQVNBLGdCQUFULEVBQTJCLENBQUMsV0FBRCxDQUEzQixFQUEwQztBQUFBLHFCQUFNLEtBQU47QUFBQSxhQUExQyxDQUFuQjtBQUNEOztBQUVELG1DQUNLakIsZUFBZSxLQUFLZ0IsbUJBQXBCLEdBQTBDLEVBQTFDLEdBQStDO0FBQUVoQixZQUFBQSxlQUFlLEVBQUVnQjtBQUFuQixXQURwRCxNQUVLdkMsWUFBWSxLQUFLd0MsZ0JBQWpCLEdBQW9DLEVBQXBDLEdBQXlDO0FBQUV4QyxZQUFBQSxZQUFZLEVBQUV3QztBQUFoQixXQUY5QztBQUlEO0FBQ0YsT0FsREQsRUFrREcsWUFBTTtBQUNQLFFBQUEsTUFBSSxDQUFDekIsS0FBTCxDQUFXZixZQUFYLENBQXdCMEIsTUFBeEIsSUFBa0MsTUFBSSxDQUFDQyxZQUFMLEVBQWxDO0FBQ0QsT0FwREQ7QUFxREQ7OztzQ0FFaUI7QUFDaEI7QUFDQSxXQUFLYix3QkFBTCxHQUFnQ2lCLElBQUksQ0FBQ0MsR0FBTCxFQUFoQztBQUVBLFdBQUtkLFFBQUwsQ0FBYztBQUFBLGVBQU87QUFBRWQsVUFBQUEsU0FBUyxFQUFFO0FBQWIsU0FBUDtBQUFBLE9BQWQ7QUFDRDs7OzZCQUVRO0FBQUEsVUFFTE8sWUFGSyxHQU1ILElBTkcsQ0FFTEEsWUFGSztBQUFBLFVBR0xFLGVBSEssR0FNSCxJQU5HLENBR0xBLGVBSEs7QUFBQSx3QkFNSCxJQU5HLENBSUxILEtBSks7QUFBQSxVQUlJaUMsUUFKSixlQUlJQSxRQUpKO0FBQUEsVUFJY0MsUUFKZCxlQUljQSxRQUpkO0FBQUEsd0JBTUgsSUFORyxDQUtMN0IsS0FMSztBQUFBLFVBS0lDLGVBTEosZUFLSUEsZUFMSjtBQUFBLFVBS3FCTyxlQUxyQixlQUtxQkEsZUFMckI7QUFBQSxVQUtzQ25CLFNBTHRDLGVBS3NDQSxTQUx0QztBQUFBLFVBS2lESixZQUxqRCxlQUtpREEsWUFMakQ7QUFBQSxVQUsrREMsTUFML0QsZUFLK0RBLE1BTC9EO0FBUVAsYUFDRSw2QkFBQyx3QkFBRCxDQUFpQixRQUFqQjtBQUEwQixRQUFBLEtBQUssRUFBR3NCO0FBQWxDLFNBQ0UsNkJBQUMsd0JBQUQsQ0FBaUIsUUFBakI7QUFBMEIsUUFBQSxLQUFLLEVBQUdQO0FBQWxDLFNBQ0UsNkJBQUMscUJBQUQsQ0FBYyxRQUFkO0FBQXVCLFFBQUEsS0FBSyxFQUFHaEI7QUFBL0IsU0FDSTJDLFFBREosRUFHSTFDLE1BQU0sSUFDSiw2QkFBQyxpQkFBRDtBQUNFLFFBQUEsUUFBUSxFQUFHMkMsUUFEYjtBQUVFLFFBQUEsSUFBSSxFQUFDLFFBRlA7QUFHRSxRQUFBLE9BQU8sRUFBR2pDLFlBSFo7QUFJRSxRQUFBLE1BQU0sRUFBR1Y7QUFKWCxRQUpOLEVBWUlBLE1BQU0sSUFBSUcsU0FBUyxLQUFLLElBQXhCLElBQ0UsNkJBQUMsZ0JBQUQ7QUFDRSxRQUFBLElBQUksRUFBQyxXQURQO0FBRUUsUUFBQSxLQUFLLEVBQUdTLGVBRlY7QUFHRSxRQUFBLE1BQU0sRUFBR1osTUFIWDtBQUlFLFFBQUEsS0FBSyxFQUFHRztBQUpWLFFBYk4sQ0FERixDQURGLENBREY7QUEyQkQ7Ozs7RUF2Tm1DeUMsZUFBTUMsUzs7O0FBME41Q3JDLFFBQVEsQ0FBQ3NDLFlBQVQsR0FBd0I7QUFDdEJaLEVBQUFBLGFBQWEsRUFBRSxHQURPO0FBRXRCUyxFQUFBQSxRQUFRLEVBQUU7QUFGWSxDQUF4QjtBQUtBbkMsUUFBUSxDQUFDdUMsU0FBVCxHQUFxQjtBQUNuQmIsRUFBQUEsYUFBYSxFQUFFYyxtQkFBVUMsTUFETjtBQUVuQk4sRUFBQUEsUUFBUSxFQUFFSyxtQkFBVUM7QUFGRCxDQUFyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVwZGF0ZUluIGZyb20gJ3NpbXBsZS11cGRhdGUtaW4nO1xuXG5pbXBvcnQgRXZlbnRTcHkgZnJvbSAnLi4vRXZlbnRTcHknO1xuaW1wb3J0IEZ1bmN0aW9uQ29udGV4dCBmcm9tICcuL0Z1bmN0aW9uQ29udGV4dCc7XG5pbXBvcnQgSW50ZXJuYWxDb250ZXh0IGZyb20gJy4vSW50ZXJuYWxDb250ZXh0JztcbmltcG9ydCBTcGluZVRvIGZyb20gJy4uL1NwaW5lVG8nO1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICcuL1N0YXRlQ29udGV4dCc7XG5cbmNvbnN0IE1JTl9DSEVDS19JTlRFUlZBTCA9IDE3OyAgICAgICAvLyAxIGZyYW1lXG5jb25zdCBORUFSX0VORF9USFJFU0hPTEQgPSAxO1xuY29uc3QgU0NST0xMX0RFQ0lTSU9OX0RVUkFUSU9OID0gMzQ7IC8vIDIgZnJhbWVzXG5cbmZ1bmN0aW9uIHNldEltbWVkaWF0ZUludGVydmFsKGZuLCBtcykge1xuICBmbigpO1xuXG4gIHJldHVybiBzZXRJbnRlcnZhbChmbiwgbXMpO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlVmlld1N0YXRlKHsgc3RhdGVDb250ZXh0OiB7IG1vZGUgfSwgdGFyZ2V0OiB7IG9mZnNldEhlaWdodCwgc2Nyb2xsSGVpZ2h0LCBzY3JvbGxUb3AgfSB9KSB7XG4gIGNvbnN0IGF0Qm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gb2Zmc2V0SGVpZ2h0IDwgTkVBUl9FTkRfVEhSRVNIT0xEO1xuICBjb25zdCBhdFRvcCA9IHNjcm9sbFRvcCA8IE5FQVJfRU5EX1RIUkVTSE9MRDtcbiAgY29uc3QgYXRFbmQgPSBtb2RlID09PSAndG9wJyA/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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TcGluZVRvLmpzIl0sIm5hbWVzIjpbInN0ZXAiLCJmcm9tIiwidG8iLCJzdGVwcGVyIiwiaW5kZXgiLCJuZXh0IiwiaSIsInNxdWFyZVN0ZXBwZXIiLCJjdXJyZW50Iiwic2lnbiIsIk1hdGgiLCJzcXJ0IiwiYWJzIiwibWluIiwibWF4IiwiU2Nyb2xsVG8iLCJwcm9wcyIsImNvbnRleHQiLCJoYW5kbGVDYW5jZWxBbmltYXRpb24iLCJiaW5kIiwibmFtZSIsInRhcmdldCIsInZhbHVlIiwiYWRkRXZlbnRMaXN0ZW5lcnMiLCJhbmltYXRlIiwicHJldlByb3BzIiwicHJldlRhcmdldCIsInNjcm9sbENoYW5nZWQiLCJ0YXJnZXRDaGFuZ2VkIiwicmVtb3ZlRXZlbnRMaXN0ZW5lcnMiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImFuaW1hdG9yIiwiYWRkRXZlbnRMaXN0ZW5lciIsInBhc3NpdmUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwic3RhcnQiLCJEYXRlIiwibm93IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwidG9OdW1iZXIiLCJzY3JvbGxIZWlnaHQiLCJvZmZzZXRIZWlnaHQiLCJuZXh0VmFsdWUiLCJvbkVuZCIsIlJlYWN0IiwiQ29tcG9uZW50IiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwic3RyaW5nIiwiaXNSZXF1aXJlZCIsImZ1bmMiLCJhbnkiLCJvbmVPZlR5cGUiLCJudW1iZXIiLCJvbmVPZiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsU0FBU0EsSUFBVCxDQUFjQyxJQUFkLEVBQW9CQyxFQUFwQixFQUF3QkMsT0FBeEIsRUFBaUNDLEtBQWpDLEVBQXdDO0FBQ3RDLE1BQUlDLElBQUksR0FBR0osSUFBWDs7QUFFQSxPQUFLLElBQUlLLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdGLEtBQXBCLEVBQTJCRSxDQUFDLEVBQTVCLEVBQWdDO0FBQzlCRCxJ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RDtBQUNGO0FBQ0YsU0FuQm9DLENBQXJDO0FBb0JEO0FBQ0Y7Ozs0Q0FFdUI7QUFDdEJMLE1BQUFBLG9CQUFvQixDQUFDLEtBQUtDLFFBQU4sQ0FBcEI7QUFDQSxXQUFLZixLQUFMLENBQVcyQixLQUFYLElBQW9CLEtBQUszQixLQUFMLENBQVcyQixLQUFYLENBQWlCLEtBQWpCLENBQXBCO0FBQ0Q7Ozs2QkFFUTtBQUNQLGFBQU8sS0FBUDtBQUNEOzs7O0VBL0VtQ0MsZUFBTUMsUzs7O0FBa0Y1QzlCLFFBQVEsQ0FBQytCLFNBQVQsR0FBcUI7QUFDbkIxQixFQUFBQSxJQUFJLEVBQUUyQixtQkFBVUMsTUFBVixDQUFpQkMsVUFESjtBQUVuQk4sRUFBQUEsS0FBSyxFQUFFSSxtQkFBVUcsSUFGRTtBQUduQjdCLEVBQUFBLE1BQU0sRUFBRTBCLG1CQUFVSSxHQUFWLENBQWNGLFVBSEg7QUFJbkIzQixFQUFBQSxLQUFLLEVBQUV5QixtQkFBVUssU0FBVixDQUFvQixDQUN6QkwsbUJBQVVNLE1BRGUsRUFFekJOLG1CQUFVTyxLQUFWLENBQWdCLENBQUMsTUFBRCxDQUFoQixDQUZ5QixDQUFwQixFQUdKTDtBQVBnQixDQUFyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5mdW5jdGlvbiBzdGVwKGZyb20sIHRvLCBzdGVwcGVyLCBpbmRleCkge1xuICBsZXQgbmV4dCA9IGZyb207XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRleDsgaSsrKSB7XG4gICAgbmV4dCA9IHN0ZXBwZXIobmV4dCwgdG8pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQ7XG59XG5cbmZ1bmN0aW9uIHNxdWFyZVN0ZXBwZXIoY3VycmVudCwgdG8pIHtcbiAgY29uc3Qgc2lnbiA9IE1hdGguc2lnbih0byAtIGN1cnJlbnQpO1xuICBjb25zdCBzdGVwID0gTWF0aC5zcXJ0KE1hdGguYWJzKHRvIC0gY3VycmVudCkpO1xuICBjb25zdCBuZXh0ID0gY3VycmVudCArIHN0ZXAgKiBzaWduO1xuXG4gIGlmIChzaWduID4gMCkge1xuICAgIHJldHVybiBNYXRoLm1pbih0bywgbmV4dCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KHRvLCBuZXh0KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTY3JvbGxUbyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzLCBjb250ZXh0KSB7XG4gICAgc3VwZXIocHJvcHMsIGNvbnRleHQpO1xuXG4gICAgdGhpcy5oYW5kbGVDYW5jZWxBbmltYXRpb24gPSB0aGlzLmhhbmRsZUNhbmNlbEFuaW1hdGlvbi5iaW5kKHRoaXMpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBuYW1lLCB0YXJnZXQsIHZhbHVlIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVycyh0YXJnZXQpO1xuICAgICAgdGhpcy5hbmltYXRlKG5hbWUsIHRhcmdldFtuYW1lXSwgdmFsdWUsIDEpO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICBjb25zdCB7IHByb3BzOiB7IG5hbWUsIHRhcmdldCwgdmFsdWUgfSB9ID0gdGhpcztcbiAgICBjb25zdCB7IHRhcmdldDogcHJldlRhcmdldCB9ID0gcHJldlByb3BzO1xuICAgIGNvbnN0IHNjcm9sbENoYW5nZWQgPSBwcmV2UHJvcHMudmFsdWUgIT09IHZhbHVlO1xuICAgIGNvbnN0IHRhcmdldENoYW5nZWQgPSBwcmV2VGFyZ2V0ICE9PSB0YXJnZXQ7XG5cbiAgICBpZiAodGFyZ2V0Q2hhbmdlZCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVycyhwcmV2VGFyZ2V0KTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcnModGFyZ2V0KTtcbiAgICB9XG5cbiAgICBpZiAoKHNjcm9sbENoYW5nZWQgfHwgdGFyZ2V0Q2hhbmdlZCkgJiYgdGFyZ2V0KSB7XG4gICAgICB0aGlzLmFuaW1hdGUobmFtZSwgdGFyZ2V0W25hbWVdLCB2YWx1ZSwgMSk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVycyh0aGlzLnByb3BzLnRhcmdldCk7XG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5hbmltYXRvcik7XG4gIH1cblxuICBhZGRFdmVudExpc3RlbmVycyh0YXJnZXQpIHtcbiAgICB0YXJnZXQgJiYgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5oYW5kbGVDYW5jZWxBbmltYXRpb24sIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXJzKHRhcmdldCkge1xuICAgIHRhcmdldCAmJiB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCB0aGlzLmhhbmRsZUNhbmNlbEFuaW1hdGlvbik7XG4gIH1cblxuICBhbmltYXRlKG5hbWUsIGZyb20sIHRvLCBpbmRleCwgc3RhcnQgPSBEYXRlLm5vdygpKSB7XG4gICAgaWYgKHRvID09PSAnMTAwJScgfHwgdHlwZW9mIHRvID09PSAnbnVtYmVyJykge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5hbmltYXRvcik7XG5cbiAgICAgIHRoaXMuYW5pbWF0b3IgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHRhcmdldCB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgY29uc3QgdG9OdW1iZXIgPSB0byA9PT0gJzEwMCUnID8gdGFyZ2V0LnNjcm9sbEhlaWdodCAtIHRhcmdldC5vZmZzZXRIZWlnaHQgOiB0bztcbiAgICAgICAgICBsZXQgbmV4dFZhbHVlID0gc3RlcChmcm9tLCB0b051bWJlciwgc3F1YXJlU3RlcHBlciwgKERhdGUubm93KCkgLSBzdGFydCkgLyA1KTtcblxuICAgICAgICAgIGlmIChNYXRoLmFicyh0b051bWJlciAtIG5leHRWYWx1ZSkgPCAxLjUpIHtcbiAgICAgICAgICAgIG5leHRWYWx1ZSA9IHRvTnVtYmVyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRhcmdldFtuYW1lXSA9IG5leHRWYWx1ZTtcblxuICAgICAgICAgIGlmICh0b051bWJlciA9PT0gbmV4dFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uRW5kICYmIHRoaXMucHJvcHMub25FbmQodHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0ZShuYW1lLCBmcm9tLCB0bywgaW5kZXggKyAxLCBzdGFydCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDYW5jZWxBbmltYXRpb24oKSB7XG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5hbmltYXRvcik7XG4gICAgdGhpcy5wcm9wcy5vbkVuZCAmJiB0aGlzLnByb3BzLm9uRW5kKGZhbHNlKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuU2Nyb2xsVG8ucHJvcFR5cGVzID0ge1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIG9uRW5kOiBQcm9wVHlwZXMuZnVuYyxcbiAgdGFyZ2V0OiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIHZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbiAgICBQcm9wVHlwZXMubnVtYmVyLFxuICAgIFByb3BUeXBlcy5vbmVPZihbJzEwMCUnXSlcbiAgXSkuaXNSZXF1aXJlZFxufTtcbiJdfQ== | ||
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" | ||
} | ||
} |
225
README.md
@@ -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. |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
110770
12.71%3
-40%7
-30%26
85.71%873
7.51%278
212.36%1
Infinity%- Removed
- Removed
- Removed
- Removed