diff --git a/node_modules/react-scroll-to-bottom/lib/BasicScrollToBottom.js b/node_modules/react-scroll-to-bottom/lib/BasicScrollToBottom.js index a2ce383..ea86013 100644 --- a/node_modules/react-scroll-to-bottom/lib/BasicScrollToBottom.js +++ b/node_modules/react-scroll-to-bottom/lib/BasicScrollToBottom.js @@ -1,114 +1,118 @@ -"use strict"; +'use strict'; -var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property"); +var _Object$defineProperty = require('@babel/runtime-corejs3/core-js-stable/object/define-property'); +var _interopRequireDefault = require('@babel/runtime-corejs3/helpers/interopRequireDefault'); -var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault"); - -_Object$defineProperty(exports, "__esModule", { - value: true +_Object$defineProperty(exports, '__esModule', { + value: true, }); -exports["default"] = void 0; +exports['default'] = void 0; -var _classnames = _interopRequireDefault(require("classnames")); +var _classnames = _interopRequireDefault(require('classnames')); -var _propTypes = _interopRequireDefault(require("prop-types")); +var _propTypes = _interopRequireDefault(require('prop-types')); -var _react = _interopRequireDefault(require("react")); +var _react = _interopRequireDefault(require('react')); -var _AutoHideFollowButton = _interopRequireDefault(require("./ScrollToBottom/AutoHideFollowButton")); +var _AutoHideFollowButton = _interopRequireDefault( + require('./ScrollToBottom/AutoHideFollowButton') +); -var _Composer = _interopRequireDefault(require("./ScrollToBottom/Composer")); +var _Composer = _interopRequireDefault(require('./ScrollToBottom/Composer')); -var _Panel = _interopRequireDefault(require("./ScrollToBottom/Panel")); +var _Panel = _interopRequireDefault(require('./ScrollToBottom/Panel')); -var _useStyleToClassName = _interopRequireDefault(require("./hooks/internal/useStyleToClassName")); +var _useStyleToClassName = _interopRequireDefault( + require('./hooks/internal/useStyleToClassName') +); var ROOT_STYLE = { - position: 'relative' + position: 'relative', }; var BasicScrollToBottomCore = function BasicScrollToBottomCore(_ref) { var children = _ref.children, - className = _ref.className, - followButtonClassName = _ref.followButtonClassName, - scrollViewClassName = _ref.scrollViewClassName; - var rootCSS = (0, _useStyleToClassName["default"])()(ROOT_STYLE); - return /*#__PURE__*/_react["default"].createElement("div", { - className: (0, _classnames["default"])(rootCSS, (className || '') + '') - }, /*#__PURE__*/_react["default"].createElement(_Panel["default"], { - className: (scrollViewClassName || '') + '' - }, children), /*#__PURE__*/_react["default"].createElement(_AutoHideFollowButton["default"], { - className: (followButtonClassName || '') + '' - })); + className = _ref.className, + followButtonClassName = _ref.followButtonClassName, + scrollViewClassName = _ref.scrollViewClassName; + var rootCSS = (0, _useStyleToClassName['default'])()(ROOT_STYLE); + return /*#__PURE__*/ _react['default'].createElement( + 'div', + { + className: (0, _classnames['default'])(rootCSS, (className || '') + ''), + }, + /*#__PURE__*/ _react['default'].createElement( + _Panel['default'], + { + className: (scrollViewClassName || '') + '', + }, + children + ), + /*#__PURE__*/ _react['default'].createElement( + _AutoHideFollowButton['default'], + { + className: (followButtonClassName || '') + '', + } + ) + ); }; -BasicScrollToBottomCore.defaultProps = { - children: undefined, - className: undefined, - followButtonClassName: undefined, - scrollViewClassName: undefined -}; BasicScrollToBottomCore.propTypes = { - children: _propTypes["default"].any, - className: _propTypes["default"].string, - followButtonClassName: _propTypes["default"].string, - scrollViewClassName: _propTypes["default"].string + children: _propTypes['default'].any, + className: _propTypes['default'].string, + followButtonClassName: _propTypes['default'].string, + scrollViewClassName: _propTypes['default'].string, }; var BasicScrollToBottom = function BasicScrollToBottom(_ref2) { var checkInterval = _ref2.checkInterval, - children = _ref2.children, - className = _ref2.className, - debounce = _ref2.debounce, - debug = _ref2.debug, - followButtonClassName = _ref2.followButtonClassName, - initialScrollBehavior = _ref2.initialScrollBehavior, - mode = _ref2.mode, - nonce = _ref2.nonce, - scroller = _ref2.scroller, - scrollViewClassName = _ref2.scrollViewClassName; - return /*#__PURE__*/_react["default"].createElement(_Composer["default"], { - checkInterval: checkInterval, - debounce: debounce, - debug: debug, - initialScrollBehavior: initialScrollBehavior, - mode: mode, - nonce: nonce, - scroller: scroller - }, /*#__PURE__*/_react["default"].createElement(BasicScrollToBottomCore, { - className: className, - followButtonClassName: followButtonClassName, - scrollViewClassName: scrollViewClassName - }, children)); + children = _ref2.children, + className = _ref2.className, + debounce = _ref2.debounce, + debug = _ref2.debug, + followButtonClassName = _ref2.followButtonClassName, + initialScrollBehavior = _ref2.initialScrollBehavior || 'smooth', + mode = _ref2.mode, + nonce = _ref2.nonce, + scroller = _ref2.scroller, + scrollViewClassName = _ref2.scrollViewClassName; + return /*#__PURE__*/ _react['default'].createElement( + _Composer['default'], + { + checkInterval: checkInterval, + debounce: debounce, + debug: debug, + initialScrollBehavior: initialScrollBehavior, + mode: mode, + nonce: nonce, + scroller: scroller, + }, + /*#__PURE__*/ _react['default'].createElement( + BasicScrollToBottomCore, + { + className: className, + followButtonClassName: followButtonClassName, + scrollViewClassName: scrollViewClassName, + }, + children + ) + ); }; -BasicScrollToBottom.defaultProps = { - checkInterval: undefined, - children: undefined, - className: undefined, - debounce: undefined, - debug: undefined, - followButtonClassName: undefined, - initialScrollBehavior: 'smooth', - mode: undefined, - nonce: undefined, - scroller: undefined, - scrollViewClassName: undefined -}; BasicScrollToBottom.propTypes = { - checkInterval: _propTypes["default"].number, - children: _propTypes["default"].any, - className: _propTypes["default"].string, - debounce: _propTypes["default"].number, - debug: _propTypes["default"].bool, - followButtonClassName: _propTypes["default"].string, - initialScrollBehavior: _propTypes["default"].oneOf(['auto', 'smooth']), - mode: _propTypes["default"].oneOf(['bottom', 'top']), - nonce: _propTypes["default"].string, - scroller: _propTypes["default"].func, - scrollViewClassName: _propTypes["default"].string + checkInterval: _propTypes['default'].number, + children: _propTypes['default'].any, + className: _propTypes['default'].string, + debounce: _propTypes['default'].number, + debug: _propTypes['default'].bool, + followButtonClassName: _propTypes['default'].string, + initialScrollBehavior: _propTypes['default'].oneOf(['auto', 'smooth']), + mode: _propTypes['default'].oneOf(['bottom', 'top']), + nonce: _propTypes['default'].string, + scroller: _propTypes['default'].func, + scrollViewClassName: _propTypes['default'].string, }; var _default = BasicScrollToBottom; -exports["default"] = _default; +exports['default'] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNpY1Njcm9sbFRvQm90dG9tLmpzIl0sIm5hbWVzIjpbIlJPT1RfU1RZTEUiLCJwb3NpdGlvbiIsIkJhc2ljU2Nyb2xsVG9Cb3R0b21Db3JlIiwiY2hpbGRyZW4iLCJjbGFzc05hbWUiLCJmb2xsb3dCdXR0b25DbGFzc05hbWUiLCJzY3JvbGxWaWV3Q2xhc3NOYW1lIiwicm9vdENTUyIsImRlZmF1bHRQcm9wcyIsInVuZGVmaW5lZCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsImFueSIsInN0cmluZyIsIkJhc2ljU2Nyb2xsVG9Cb3R0b20iLCJjaGVja0ludGVydmFsIiwiZGVib3VuY2UiLCJkZWJ1ZyIsImluaXRpYWxTY3JvbGxCZWhhdmlvciIsIm1vZGUiLCJub25jZSIsInNjcm9sbGVyIiwibnVtYmVyIiwiYm9vbCIsIm9uZU9mIiwiZnVuYyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsSUFBTUEsVUFBVSxHQUFHO0FBQ2pCQyxFQUFBQSxRQUFRLEVBQUU7QUFETyxDQUFuQjs7QUFJQSxJQUFNQyx1QkFBdUIsR0FBRyxTQUExQkEsdUJBQTBCLE9BQXlFO0FBQUEsTUFBdEVDLFFBQXNFLFFBQXRFQSxRQUFzRTtBQUFBLE1BQTVEQyxTQUE0RCxRQUE1REEsU0FBNEQ7QUFBQSxNQUFqREMscUJBQWlELFFBQWpEQSxxQkFBaUQ7QUFBQSxNQUExQkMsbUJBQTBCLFFBQTFCQSxtQkFBMEI7QUFDdkcsTUFBTUMsT0FBTyxHQUFHLHVDQUFzQlAsVUFBdEIsQ0FBaEI7QUFFQSxzQkFDRTtBQUFLLElBQUEsU0FBUyxFQUFFLDRCQUFXTyxPQUFYLEVBQW9CLENBQUNILFNBQVMsSUFBSSxFQUFkLElBQW9CLEVBQXhDO0FBQWhCLGtCQUNFLGdDQUFDLGlCQUFEO0FBQU8sSUFBQSxTQUFTLEVBQUUsQ0FBQ0UsbUJBQW1CLElBQUksRUFBeEIsSUFBOEI7QUFBaEQsS0FB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QUFVRSxNQU5IO0FBTzlCSyxFQUFBQSxxQkFBcUIsRUFBRVAsc0JBQVVhLEtBQVYsQ0FBZ0IsQ0FBQyxNQUFELEVBQVMsUUFBVCxDQUFoQixDQVBPO0FBUTlCTCxFQUFBQSxJQUFJLEVBQUVSLHNCQUFVYSxLQUFWLENBQWdCLENBQUMsUUFBRCxFQUFXLEtBQVgsQ0FBaEIsQ0FSd0I7QUFTOUJKLEVBQUFBLEtBQUssRUFBRVQsc0JBQVVFLE1BVGE7QUFVOUJRLEVBQUFBLFFBQVEsRUFBRVYsc0JBQVVjLElBVlU7QUFXOUJuQixFQUFBQSxtQkFBbUIsRUFBRUssc0JBQVVFO0FBWEQsQ0FBaEM7ZUFjZUMsbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgQXV0b0hpZGVGb2xsb3dCdXR0b24gZnJvbSAnLi9TY3JvbGxUb0JvdHRvbS9BdXRvSGlkZUZvbGxvd0J1dHRvbic7XG5pbXBvcnQgQ29tcG9zZXIgZnJvbSAnLi9TY3JvbGxUb0JvdHRvbS9Db21wb3Nlcic7XG5pbXBvcnQgUGFuZWwgZnJvbSAnLi9TY3JvbGxUb0JvdHRvbS9QYW5lbCc7XG5pbXBvcnQgdXNlU3R5bGVUb0NsYXNzTmFtZSBmcm9tICcuL2hvb2tzL2ludGVybmFsL3VzZVN0eWxlVG9DbGFzc05hbWUnO1xuXG5jb25zdCBST09UX1NUWUxFID0ge1xuICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xufTtcblxuY29uc3QgQmFzaWNTY3JvbGxUb0JvdHRvbUNvcmUgPSAoeyBjaGlsZHJlbiwgY2xhc3NOYW1lLCBmb2xsb3dCdXR0b25DbGFzc05hbWUsIHNjcm9sbFZpZXdDbGFzc05hbWUgfSkgPT4ge1xuICBjb25zdCByb290Q1NTID0gdXNlU3R5bGVUb0NsYXNzTmFtZSgpKFJPT1RfU1RZTEUpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZXMocm9vdENTUywgKGNsYXNzTmFtZSB8fCAnJykgKyAnJyl9PlxuICAgICAgPFBhbmVsIGNsYXNzTmFtZT17KHNjcm9sbFZpZXdDbGFzc05hbWUgfHwgJycpICsgJyd9PntjaGlsZHJlbn08L1BhbmVsPlxuICAgICAgPEF1dG9IaWRlRm9sbG93QnV0dG9uIGNsYXNzTmFtZT17KGZvbGxvd0J1dHRvbkNsYXNzTmFtZSB8fCAnJykgKyAnJ30gLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbkJhc2ljU2Nyb2xsVG9Cb3R0b21Db3JlLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2hpbGRyZW46IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lOiB1bmRlZmluZWQsXG4gIGZvbGxvd0J1dHRvbkNsYXNzTmFtZTogdW5kZWZpbmVkLFxuICBzY3JvbGxWaWV3Q2xhc3NOYW1lOiB1bmRlZmluZWRcbn07XG5cbkJhc2ljU2Nyb2xsVG9Cb3R0b21Db3JlLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5hbnksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgZm9sbG93QnV0dG9uQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzY3JvbGxWaWV3Q2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5jb25zdCBCYXNpY1Njcm9sbFRvQm90dG9tID0gKHtcbiAgY2hlY2tJbnRlcnZhbCxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgZGVib3VuY2UsXG4gIGRlYnVnLFxuICBmb2xsb3dCdXR0b25DbGFzc05hbWUsXG4gIGluaXRpYWxTY3JvbGxCZWhhdmlvcixcbiAgbW9kZSxcbiAgbm9uY2UsXG4gIHNjcm9sbGVyLFxuICBzY3JvbGxWaWV3Q2xhc3NOYW1lXG59KSA9PiAoXG4gIDxDb21wb3NlclxuICAgIGNoZWNrSW50ZXJ2YWw9e2NoZWNrSW50ZXJ2YWx9XG4gICAgZGVib3VuY2U9e2RlYm91bmNlfVxuICAgIGRlYnVnPXtkZWJ1Z31cbiAgICBpbml0aWFsU2Nyb2xsQmVoYXZpb3I9e2luaXRpYWxTY3JvbGxCZWhhdmlvcn1cbiAgICBtb2RlPXttb2RlfVxuICAgIG5vbmNlPXtub25jZX1cbiAgICBzY3JvbGxlcj17c2Nyb2xsZXJ9XG4gID5cbiAgICA8QmFzaWNTY3JvbGxUb0JvdHRvbUNvcmVcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgZm9sbG93QnV0dG9uQ2xhc3NOYW1lPXtmb2xsb3dCdXR0b25DbGFzc05hbWV9XG4gICAgICBzY3JvbGxWaWV3Q2xhc3NOYW1lPXtzY3JvbGxWaWV3Q2xhc3NOYW1lfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0Jhc2ljU2Nyb2xsVG9Cb3R0b21Db3JlPlxuICA8L0NvbXBvc2VyPlxuKTtcblxuQmFzaWNTY3JvbGxUb0JvdHRvbS5kZWZhdWx0UHJvcHMgPSB7XG4gIGNoZWNrSW50ZXJ2YWw6IHVuZGVmaW5lZCxcbiAgY2hpbGRyZW46IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lOiB1bmRlZmluZWQsXG4gIGRlYm91bmNlOiB1bmRlZmluZWQsXG4gIGRlYnVnOiB1bmRlZmluZWQsXG4gIGZvbGxvd0J1dHRvbkNsYXNzTmFtZTogdW5kZWZpbmVkLFxuICBpbml0aWFsU2Nyb2xsQmVoYXZpb3I6ICdzbW9vdGgnLFxuICBtb2RlOiB1bmRlZmluZWQsXG4gIG5vbmNlOiB1bmRlZmluZWQsXG4gIHNjcm9sbGVyOiB1bmRlZmluZWQsXG4gIHNjcm9sbFZpZXdDbGFzc05hbWU6IHVuZGVmaW5lZFxufTtcblxuQmFzaWNTY3JvbGxUb0JvdHRvbS5wcm9wVHlwZXMgPSB7XG4gIGNoZWNrSW50ZXJ2YWw6IFByb3BUeXBlcy5udW1iZXIsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuYW55LFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGRlYm91bmNlOiBQcm9wVHlwZXMubnVtYmVyLFxuICBkZWJ1ZzogUHJvcFR5cGVzLmJvb2wsXG4gIGZvbGxvd0J1dHRvbkNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgaW5pdGlhbFNjcm9sbEJlaGF2aW9yOiBQcm9wVHlwZXMub25lT2YoWydhdXRvJywgJ3Ntb290aCddKSxcbiAgbW9kZTogUHJvcFR5cGVzLm9uZU9mKFsnYm90dG9tJywgJ3RvcCddKSxcbiAgbm9uY2U6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNjcm9sbGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgc2Nyb2xsVmlld0NsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQmFzaWNTY3JvbGxUb0JvdHRvbTtcbiJdfQ== diff --git a/node_modules/react-scroll-to-bottom/lib/EventSpy.js b/node_modules/react-scroll-to-bottom/lib/EventSpy.js index 61ad8cb..50f9c7c 100644 --- a/node_modules/react-scroll-to-bottom/lib/EventSpy.js +++ b/node_modules/react-scroll-to-bottom/lib/EventSpy.js @@ -1,60 +1,67 @@ -"use strict"; +'use strict'; -var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property"); +var _Object$defineProperty = require('@babel/runtime-corejs3/core-js-stable/object/define-property'); +var _interopRequireDefault = require('@babel/runtime-corejs3/helpers/interopRequireDefault'); -var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault"); - -_Object$defineProperty(exports, "__esModule", { - value: true +_Object$defineProperty(exports, '__esModule', { + value: true, }); -exports["default"] = void 0; +exports['default'] = void 0; -var _now = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/date/now")); +var _now = _interopRequireDefault( + require('@babel/runtime-corejs3/core-js-stable/date/now') +); -require("core-js/modules/es.function.name.js"); +require('core-js/modules/es.function.name.js'); -var _react = require("react"); +var _react = require('react'); -var _debounce = _interopRequireDefault(require("./debounce")); +var _debounce = _interopRequireDefault(require('./debounce')); var EventSpy = function EventSpy(_ref) { - var debounce = _ref.debounce, - name = _ref.name, - onEvent = _ref.onEvent, - target = _ref.target; + var debounce = _ref.debounce || 200, + 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.useMemo)(function () { - return (0, _debounce["default"])(function (event) { - var current = onEventRef.current; - current && current(event); - }, debounce); - }, [debounce, onEventRef]); - var handleEvent = (0, _react.useCallback)(function (event) { - event.timeStampLow = (0, _now["default"])(); - 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]); + var debouncer = (0, _react.useMemo)( + function () { + return (0, _debounce['default'])(function (event) { + var current = onEventRef.current; + current && current(event); + }, debounce); + }, + [debounce, onEventRef] + ); + var handleEvent = (0, _react.useCallback)( + function (event) { + event.timeStampLow = (0, _now['default'])(); + 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; }; -EventSpy.defaultProps = { - debounce: 200 -}; var _default = EventSpy; -exports["default"] = _default; +exports['default'] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9FdmVudFNweS5qcyJdLCJuYW1lcyI6WyJFdmVudFNweSIsImRlYm91bmNlIiwibmFtZSIsIm9uRXZlbnQiLCJ0YXJnZXQiLCJvbkV2ZW50UmVmIiwiY3VycmVudCIsImRlYm91bmNlciIsImV2ZW50IiwiaGFuZGxlRXZlbnQiLCJ0aW1lU3RhbXBMb3ciLCJhZGRFdmVudExpc3RlbmVyIiwicGFzc2l2ZSIsInR5cGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZGVmYXVsdFByb3BzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBRUE7O0FBRUEsSUFBTUEsUUFBUSxHQUFHLFNBQVhBLFFBQVcsT0FBeUM7QUFBQSxNQUF0Q0MsUUFBc0MsUUFBdENBLFFBQXNDO0FBQUEsTUFBNUJDLElBQTRCLFFBQTVCQSxJQUE0QjtBQUFBLE1BQXRCQyxPQUFzQixRQUF0QkEsT0FBc0I7QUFBQSxNQUFiQyxNQUFhLFFBQWJBLE1BQWE7QUFDeEQ7QUFDQTtBQUNBLE1BQU1DLFVBQVUsR0FBRyxvQkFBbkI7QUFFQUEsRUFBQUEsVUFBVSxDQUFDQyxPQUFYLEdBQXFCSCxPQUFyQjtBQUVBLE1BQU1JLFNBQVMsR0FBRyxvQkFDaEI7QUFBQSxXQUNFLDBCQUFXLFVBQUFDLEtBQUssRUFBSTtBQUNsQixVQUFRRixPQUFSLEdBQW9CRCxVQUFwQixDQUFRQyxPQUFSO0FBRUFBLE1BQUFBLE9BQU8sSUFBSUEsT0FBTyxDQUFDRSxLQUFELENBQWxCO0FBQ0QsS0FKRCxFQUlHUCxRQUpILENBREY7QUFBQSxHQURnQixFQU9oQixDQUFDQSxRQUFELEVBQVdJLFVBQVgsQ0FQZ0IsQ0FBbEI7QUFVQSxNQUFNSSxXQUFXLEdBQUcsd0JBQ2xCLFVBQUFELEtBQUssRUFBSTtBQUNQQSxJQUFBQSxLQUFLLENBQUNFLFlBQU4sR0FBcUIsc0JBQXJCO0FBRUFILElBQUFBLFNBQVMsQ0FBQ0MsS0FBRCxDQUFUO0FBQ0QsR0FMaUIsRUFNbEIsQ0FBQ0QsU0FBRCxDQU5rQixDQUFwQjtBQVNBLDhCQUFnQixZQUFNO0FBQ3BCSCxJQUFBQSxNQUFNLENBQUNPLGdCQUFQLENBQXdCVCxJQUF4QixFQUE4Qk8sV0FBOUIsRUFBMkM7QUFBRUcsTUFBQUEsT0FBTyxFQUFFO0FBQVgsS0FBM0M7QUFDQUgsSUFBQUEsV0FBVyxDQUFDO0FBQUVMLE1BQUFBLE1BQU0sRUFBTkEsTUFBRjtBQUFVUyxNQUFBQSxJQUFJLEVBQUVYO0FBQWhCLEtBQUQsQ0FBWDtBQUVBLFdBQU87QUFBQSxhQUFNRSxNQUFNLENBQUNVLG1CQUFQLENBQTJCWixJQUEzQixFQUFpQ08sV0FBakMsQ0FBTjtBQUFBLEtBQVA7QUFDRCxHQUxELEVBS0csQ0FBQ1AsSUFBRCxFQUFPTyxXQUFQLEVBQW9CTCxNQUFwQixDQUxIO0FBT0EsU0FBTyxLQUFQO0FBQ0QsQ0FsQ0Q7O0FBb0NBSixRQUFRLENBQUNlLFlBQVQsR0FBd0I7QUFDdEJkLEVBQUFBLFFBQVEsRUFBRTtBQURZLENBQXhCO2VBSWVELFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlTGF5b3V0RWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBkZWJvdW5jZUZuIGZyb20gJy4vZGVib3VuY2UnO1xuXG5jb25zdCBFdmVudFNweSA9ICh7IGRlYm91bmNlLCBuYW1lLCBvbkV2ZW50LCB0YXJnZXQgfSkgPT4ge1xuICAvLyBXZSBuZWVkIHRvIHNhdmUgdGhlIFwib25FdmVudFwiIHRvIHJlZi5cbiAgLy8gVGhpcyBpcyBiZWNhdXNlIFwib25FdmVudFwiIG1heSBjaGFuZ2UgZnJvbSB0aW1lIHRvIHRpbWUsIGJ1dCBkZWJvdW5jZSBtYXkgc3RpbGwgZmlyZSB0byB0aGUgb2xkZXIgY2FsbGJhY2suXG4gIGNvbnN0IG9uRXZlbnRSZWYgPSB1c2VSZWYoKTtcblxuICBvbkV2ZW50UmVmLmN1cnJlbnQgPSBvbkV2ZW50O1xuXG4gIGNvbnN0IGRlYm91bmNlciA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGRlYm91bmNlRm4oZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQgfSA9IG9uRXZlbnRSZWY7XG5cbiAgICAgICAgY3VycmVudCAmJiBjdXJyZW50KGV2ZW50KTtcbiAgICAgIH0sIGRlYm91bmNlKSxcbiAgICBbZGVib3VuY2UsIG9uRXZlbnRSZWZdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlRXZlbnQgPSB1c2VDYWxsYmFjayhcbiAgICBldmVudCA9PiB7XG4gICAgICBldmVudC50aW1lU3RhbXBMb3cgPSBEYXRlLm5vdygpO1xuXG4gICAgICBkZWJvdW5jZXIoZXZlbnQpO1xuICAgIH0sXG4gICAgW2RlYm91bmNlcl1cbiAgKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGhhbmRsZUV2ZW50LCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgaGFuZGxlRXZlbnQoeyB0YXJnZXQsIHR5cGU6IG5hbWUgfSk7XG5cbiAgICByZXR1cm4gKCkgPT4gdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgaGFuZGxlRXZlbnQpO1xuICB9LCBbbmFtZSwgaGFuZGxlRXZlbnQsIHRhcmdldF0pO1xuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbkV2ZW50U3B5LmRlZmF1bHRQcm9wcyA9IHtcbiAgZGVib3VuY2U6IDIwMFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRXZlbnRTcHk7XG4iXX0= diff --git a/node_modules/react-scroll-to-bottom/lib/ScrollToBottom/AutoHideFollowButton.js b/node_modules/react-scroll-to-bottom/lib/ScrollToBottom/AutoHideFollowButton.js index 79c5ade..b407054 100644 --- a/node_modules/react-scroll-to-bottom/lib/ScrollToBottom/AutoHideFollowButton.js +++ b/node_modules/react-scroll-to-bottom/lib/ScrollToBottom/AutoHideFollowButton.js @@ -1,28 +1,33 @@ -"use strict"; +'use strict'; -var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property"); +var _Object$defineProperty = require('@babel/runtime-corejs3/core-js-stable/object/define-property'); +var _interopRequireDefault = require('@babel/runtime-corejs3/helpers/interopRequireDefault'); -var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault"); - -_Object$defineProperty(exports, "__esModule", { - value: true +_Object$defineProperty(exports, '__esModule', { + value: true, }); -exports["default"] = void 0; +exports['default'] = void 0; -var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray")); +var _slicedToArray2 = _interopRequireDefault( + require('@babel/runtime-corejs3/helpers/slicedToArray') +); -var _classnames = _interopRequireDefault(require("classnames")); +var _classnames = _interopRequireDefault(require('classnames')); -var _propTypes = _interopRequireDefault(require("prop-types")); +var _propTypes = _interopRequireDefault(require('prop-types')); -var _react = _interopRequireDefault(require("react")); +var _react = _interopRequireDefault(require('react')); -var _useScrollToEnd = _interopRequireDefault(require("../hooks/useScrollToEnd")); +var _useScrollToEnd = _interopRequireDefault( + require('../hooks/useScrollToEnd') +); -var _useSticky3 = _interopRequireDefault(require("../hooks/useSticky")); +var _useSticky3 = _interopRequireDefault(require('../hooks/useSticky')); -var _useStyleToClassName = _interopRequireDefault(require("../hooks/internal/useStyleToClassName")); +var _useStyleToClassName = _interopRequireDefault( + require('../hooks/internal/useStyleToClassName') +); var ROOT_STYLE = { backgroundColor: 'rgba(0, 0, 0, .2)', @@ -36,38 +41,41 @@ var ROOT_STYLE = { right: 20, width: 20, '&:hover': { - backgroundColor: 'rgba(0, 0, 0, .4)' + backgroundColor: 'rgba(0, 0, 0, .4)', }, '&:active': { - backgroundColor: 'rgba(0, 0, 0, .6)' - } + backgroundColor: 'rgba(0, 0, 0, .6)', + }, }; var AutoHideFollowButton = function AutoHideFollowButton(_ref) { var children = _ref.children, - className = _ref.className; - - var _useSticky = (0, _useSticky3["default"])(), - _useSticky2 = (0, _slicedToArray2["default"])(_useSticky, 1), - sticky = _useSticky2[0]; - - var rootCSS = (0, _useStyleToClassName["default"])()(ROOT_STYLE); - var scrollToEnd = (0, _useScrollToEnd["default"])(); - return !sticky && /*#__PURE__*/_react["default"].createElement("button", { - className: (0, _classnames["default"])(rootCSS, (className || '') + ''), - onClick: scrollToEnd, - type: "button" - }, children); + className = _ref.className || ''; + + var _useSticky = (0, _useSticky3['default'])(), + _useSticky2 = (0, _slicedToArray2['default'])(_useSticky, 1), + sticky = _useSticky2[0]; + + var rootCSS = (0, _useStyleToClassName['default'])()(ROOT_STYLE); + var scrollToEnd = (0, _useScrollToEnd['default'])(); + return ( + !sticky && + /*#__PURE__*/ _react['default'].createElement( + 'button', + { + className: (0, _classnames['default'])(rootCSS, (className || '') + ''), + onClick: scrollToEnd, + type: 'button', + }, + children + ) + ); }; -AutoHideFollowButton.defaultProps = { - children: undefined, - className: '' -}; AutoHideFollowButton.propTypes = { - children: _propTypes["default"].any, - className: _propTypes["default"].string + children: _propTypes['default'].any, + className: _propTypes['default'].string, }; var _default = AutoHideFollowButton; -exports["default"] = _default; +exports['default'] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TY3JvbGxUb0JvdHRvbS9BdXRvSGlkZUZvbGxvd0J1dHRvbi5qcyJdLCJuYW1lcyI6WyJST09UX1NUWUxFIiwiYmFja2dyb3VuZENvbG9yIiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyV2lkdGgiLCJib3R0b20iLCJjdXJzb3IiLCJoZWlnaHQiLCJvdXRsaW5lIiwicG9zaXRpb24iLCJyaWdodCIsIndpZHRoIiwiQXV0b0hpZGVGb2xsb3dCdXR0b24iLCJjaGlsZHJlbiIsImNsYXNzTmFtZSIsInN0aWNreSIsInJvb3RDU1MiLCJzY3JvbGxUb0VuZCIsImRlZmF1bHRQcm9wcyIsInVuZGVmaW5lZCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsImFueSIsInN0cmluZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFFQSxJQUFNQSxVQUFVLEdBQUc7QUFDakJDLEVBQUFBLGVBQWUsRUFBRSxtQkFEQTtBQUVqQkMsRUFBQUEsWUFBWSxFQUFFLEVBRkc7QUFHakJDLEVBQUFBLFdBQVcsRUFBRSxDQUhJO0FBSWpCQyxFQUFBQSxNQUFNLEVBQUUsQ0FKUztBQUtqQkMsRUFBQUEsTUFBTSxFQUFFLFNBTFM7QUFNakJDLEVBQUFBLE1BQU0sRUFBRSxFQU5TO0FBT2pCQyxFQUFBQSxPQUFPLEVBQUUsQ0FQUTtBQVFqQkMsRUFBQUEsUUFBUSxFQUFFLFVBUk87QUFTakJDLEVBQUFBLEtBQUssRUFBRSxFQVRVO0FBVWpCQyxFQUFBQSxLQUFLLEVBQUUsRUFWVTtBQVlqQixhQUFXO0FBQ1RULElBQUFBLGVBQWUsRUFBRTtBQURSLEdBWk07QUFnQmpCLGNBQVk7QUFDVkEsSUFBQUEsZUFBZSxFQUFFO0FBRFA7QUFoQkssQ0FBbkI7O0FBcUJBLElBQU1VLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBdUIsT0FBNkI7QUFBQSxNQUExQkMsUUFBMEIsUUFBMUJBLFFBQTBCO0FBQUEsTUFBaEJDLFNBQWdCLFFBQWhCQSxTQUFnQjs7QUFDeEQsbUJBQWlCLDZCQUFqQjtBQUFBO0FBQUEsTUFBT0MsTUFBUDs7QUFDQSxNQUFNQyxPQUFPLEdBQUcsdUNBQXNCZixVQUF0QixDQUFoQjtBQUNBLE1BQU1nQixXQUFXLEdBQUcsaUNBQXBCO0FBRUEsU0FDRSxDQUFDRixNQUFELGlCQUNFO0FBQVEsSUFBQSxTQUFTLEVBQUUsNEJBQVdDLE9BQVgsRUFBb0IsQ0FBQ0YsU0FBUyxJQUFJLEVBQWQsSUFBb0IsRUFBeEMsQ0FBbkI7QUFBZ0UsSUFBQSxPQUFPLEVBQUVHLFdBQXpFO0FBQXNGLElBQUEsSUFBSSxFQUFDO0FBQTNGLEtBQ0dKLFFBREgsQ0FGSjtBQU9ELENBWkQ7O0FBY0FELG9CQUFvQixDQUFDTSxZQUFyQixHQUFvQztBQUNsQ0wsRUFBQUEsUUFBUSxFQUFFTSxTQUR3QjtBQUVsQ0wsRUFBQUEsU0FBUyxFQUFFO0FBRnVCLENBQXBDO0FBS0FGLG9CQUFvQixDQUFDUSxTQUFyQixHQUFpQztBQUMvQlAsRUFBQUEsUUFBUSxFQUFFUSxzQkFBVUMsR0FEVztBQUUvQlIsRUFBQUEsU0FBUyxFQUFFTyxzQkFBVUU7QUFGVSxDQUFqQztlQUtlWCxvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB1c2VTY3JvbGxUb0VuZCBmcm9tICcuLi9ob29rcy91c2VTY3JvbGxUb0VuZCc7XG5pbXBvcnQgdXNlU3RpY2t5IGZyb20gJy4uL2hvb2tzL3VzZVN0aWNreSc7XG5pbXBvcnQgdXNlU3R5bGVUb0NsYXNzTmFtZSBmcm9tICcuLi9ob29rcy9pbnRlcm5hbC91c2VTdHlsZVRvQ2xhc3NOYW1lJztcblxuY29uc3QgUk9PVF9TVFlMRSA9IHtcbiAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLCAwLCAwLCAuMiknLFxuICBib3JkZXJSYWRpdXM6IDEwLFxuICBib3JkZXJXaWR0aDogMCxcbiAgYm90dG9tOiA1LFxuICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgaGVpZ2h0OiAyMCxcbiAgb3V0bGluZTogMCxcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIHJpZ2h0OiAyMCxcbiAgd2lkdGg6IDIwLFxuXG4gICcmOmhvdmVyJzoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgLjQpJ1xuICB9LFxuXG4gICcmOmFjdGl2ZSc6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsIDAsIDAsIC42KSdcbiAgfVxufTtcblxuY29uc3QgQXV0b0hpZGVGb2xsb3dCdXR0b24gPSAoeyBjaGlsZHJlbiwgY2xhc3NOYW1lIH0pID0+IHtcbiAgY29uc3QgW3N0aWNreV0gPSB1c2VTdGlja3koKTtcbiAgY29uc3Qgcm9vdENTUyA9IHVzZVN0eWxlVG9DbGFzc05hbWUoKShST09UX1NUWUxFKTtcbiAgY29uc3Qgc2Nyb2xsVG9FbmQgPSB1c2VTY3JvbGxUb0VuZCgpO1xuXG4gIHJldHVybiAoXG4gICAgIXN0aWNreSAmJiAoXG4gICAgICA8YnV0dG9uIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhyb290Q1NTLCAoY2xhc3NOYW1lIHx8ICcnKSArICcnKX0gb25DbGljaz17c2Nyb2xsVG9FbmR9IHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9idXR0b24+XG4gICAgKVxuICApO1xufTtcblxuQXV0b0hpZGVGb2xsb3dCdXR0b24uZGVmYXVsdFByb3BzID0ge1xuICBjaGlsZHJlbjogdW5kZWZpbmVkLFxuICBjbGFzc05hbWU6ICcnXG59O1xuXG5BdXRvSGlkZUZvbGxvd0J1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuYW55LFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF1dG9IaWRlRm9sbG93QnV0dG9uO1xuIl19 diff --git a/node_modules/react-scroll-to-bottom/lib/ScrollToBottom/Composer.js b/node_modules/react-scroll-to-bottom/lib/ScrollToBottom/Composer.js index 1d5f8b1..1bb7707 100644 --- a/node_modules/react-scroll-to-bottom/lib/ScrollToBottom/Composer.js +++ b/node_modules/react-scroll-to-bottom/lib/ScrollToBottom/Composer.js @@ -1,90 +1,187 @@ -"use strict"; - -var _typeof = require("@babel/runtime-corejs3/helpers/typeof"); - -var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys"); - -var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols"); - -var _filterInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/filter"); - -var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor"); - -var _forEachInstanceProperty2 = require("@babel/runtime-corejs3/core-js-stable/instance/for-each"); - -var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors"); - -var _Object$defineProperties = require("@babel/runtime-corejs3/core-js-stable/object/define-properties"); - -var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property"); - -var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map"); - -var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault"); - -_Object$defineProperty(exports, "__esModule", { - value: true +'use strict'; + +var _filterInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/filter'); +var _forEachInstanceProperty2 = require('@babel/runtime-corejs3/core-js-stable/instance/for-each'); +var _Object$defineProperties = require('@babel/runtime-corejs3/core-js-stable/object/define-properties'); +var _Object$defineProperty = require('@babel/runtime-corejs3/core-js-stable/object/define-property'); +var _Object$getOwnPropertyDescriptor = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor'); +var _Object$getOwnPropertyDescriptors = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors'); +var _Object$getOwnPropertySymbols = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols'); +var _Object$keys = require('@babel/runtime-corejs3/core-js-stable/object/keys'); +var _WeakMap = require('@babel/runtime-corejs3/core-js-stable/weak-map'); +var _interopRequireDefault = require('@babel/runtime-corejs3/helpers/interopRequireDefault'); +var _typeof = require('@babel/runtime-corejs3/helpers/typeof'); + +_Object$defineProperty(exports, '__esModule', { + value: true, }); -exports["default"] = void 0; +exports['default'] = void 0; -require("core-js/modules/es.regexp.exec.js"); +require('core-js/modules/es.regexp.exec.js'); -require("core-js/modules/es.string.replace.js"); +require('core-js/modules/es.string.replace.js'); -var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty")); +var _defineProperty2 = _interopRequireDefault( + require('@babel/runtime-corejs3/helpers/defineProperty') +); -var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/toConsumableArray")); +var _toConsumableArray2 = _interopRequireDefault( + require('@babel/runtime-corejs3/helpers/toConsumableArray') +); -var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray")); +var _slicedToArray2 = _interopRequireDefault( + require('@babel/runtime-corejs3/helpers/slicedToArray') +); -var _setInterval2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/set-interval")); +var _setInterval2 = _interopRequireDefault( + require('@babel/runtime-corejs3/core-js-stable/set-interval') +); -var _indexOf = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/index-of")); +var _indexOf = _interopRequireDefault( + require('@babel/runtime-corejs3/core-js-stable/instance/index-of') +); -var _splice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/splice")); +var _splice = _interopRequireDefault( + require('@babel/runtime-corejs3/core-js-stable/instance/splice') +); -var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat")); +var _concat = _interopRequireDefault( + require('@babel/runtime-corejs3/core-js-stable/instance/concat') +); -var _now = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/date/now")); +var _now = _interopRequireDefault( + require('@babel/runtime-corejs3/core-js-stable/date/now') +); -var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each")); +var _forEach = _interopRequireDefault( + require('@babel/runtime-corejs3/core-js-stable/instance/for-each') +); -var _createInstance = _interopRequireDefault(require("@emotion/css/create-instance")); +var _createInstance = _interopRequireDefault( + require('@emotion/css/create-instance') +); -var _propTypes = _interopRequireDefault(require("prop-types")); +var _propTypes = _interopRequireDefault(require('prop-types')); -var _react = _interopRequireWildcard(require("react")); +var _react = _interopRequireWildcard(require('react')); -var _createCSSKey = _interopRequireDefault(require("../createCSSKey")); +var _createCSSKey = _interopRequireDefault(require('../createCSSKey')); -var _debug = _interopRequireDefault(require("../utils/debug")); +var _debug = _interopRequireDefault(require('../utils/debug')); -var _EventSpy = _interopRequireDefault(require("../EventSpy")); +var _EventSpy = _interopRequireDefault(require('../EventSpy')); -var _FunctionContext = _interopRequireDefault(require("./FunctionContext")); +var _FunctionContext = _interopRequireDefault(require('./FunctionContext')); -var _InternalContext = _interopRequireDefault(require("./InternalContext")); +var _InternalContext = _interopRequireDefault(require('./InternalContext')); -var _SpineTo = _interopRequireDefault(require("../SpineTo")); +var _SpineTo = _interopRequireDefault(require('../SpineTo')); -var _State1Context = _interopRequireDefault(require("./State1Context")); +var _State1Context = _interopRequireDefault(require('./State1Context')); -var _State2Context = _interopRequireDefault(require("./State2Context")); +var _State2Context = _interopRequireDefault(require('./State2Context')); -var _StateContext = _interopRequireDefault(require("./StateContext")); +var _StateContext = _interopRequireDefault(require('./StateContext')); -var _styleConsole = _interopRequireDefault(require("../utils/styleConsole")); +var _styleConsole = _interopRequireDefault(require('../utils/styleConsole')); -var _useStateRef7 = _interopRequireDefault(require("../hooks/internal/useStateRef")); +var _useStateRef7 = _interopRequireDefault( + require('../hooks/internal/useStateRef') +); -function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } +function _getRequireWildcardCache(nodeInterop) { + if (typeof _WeakMap !== 'function') return null; + var cacheBabelInterop = new _WeakMap(); + var cacheNodeInterop = new _WeakMap(); + return (_getRequireWildcardCache = function _getRequireWildcardCache( + nodeInterop + ) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} -function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && 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 _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if ( + obj === null || + (_typeof(obj) !== 'object' && typeof obj !== 'function') + ) { + return { default: obj }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + _Object$defineProperty && _Object$getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && 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 = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } +function ownKeys(object, enumerableOnly) { + var keys = _Object$keys(object); + if (_Object$getOwnPropertySymbols) { + var symbols = _Object$getOwnPropertySymbols(object); + if (enumerableOnly) { + symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { + return _Object$getOwnPropertyDescriptor(object, sym).enumerable; + }); + } + keys.push.apply(keys, symbols); + } + return keys; +} -function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context21; _forEachInstanceProperty2(_context21 = ownKeys(Object(source), true)).call(_context21, function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors) { _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)); } else { var _context22; _forEachInstanceProperty2(_context22 = ownKeys(Object(source))).call(_context22, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } } return target; } +function _objectSpread(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] != null ? arguments[i] : {}; + if (i % 2) { + var _context21; + _forEachInstanceProperty2( + (_context21 = ownKeys(Object(source), true)) + ).call(_context21, function (key) { + (0, _defineProperty2['default'])(target, key, source[key]); + }); + } else if (_Object$getOwnPropertyDescriptors) { + _Object$defineProperties( + target, + _Object$getOwnPropertyDescriptors(source) + ); + } else { + var _context22; + _forEachInstanceProperty2((_context22 = ownKeys(Object(source)))).call( + _context22, + function (key) { + _Object$defineProperty( + target, + key, + _Object$getOwnPropertyDescriptor(source, key) + ); + } + ); + } + } + return target; +} var DEFAULT_SCROLLER = function DEFAULT_SCROLLER() { return Infinity; @@ -103,15 +200,15 @@ var emotionPool = {}; function setImmediateInterval(fn, ms) { fn(); - return (0, _setInterval2["default"])(fn, ms); + return (0, _setInterval2['default'])(fn, ms); } function computeViewState(_ref) { var mode = _ref.mode, - _ref$target = _ref.target, - offsetHeight = _ref$target.offsetHeight, - scrollHeight = _ref$target.scrollHeight, - scrollTop = _ref$target.scrollTop; + _ref$target = _ref.target, + offsetHeight = _ref$target.offsetHeight, + scrollHeight = _ref$target.scrollHeight, + scrollTop = _ref$target.scrollTop; var atBottom = scrollHeight - scrollTop - offsetHeight < NEAR_END_THRESHOLD; var atTop = scrollTop < NEAR_END_THRESHOLD; var atEnd = mode === MODE_TOP ? atTop : atBottom; @@ -120,7 +217,7 @@ function computeViewState(_ref) { atBottom: atBottom, atEnd: atEnd, atStart: atStart, - atTop: atTop + atTop: atTop, }; } @@ -129,557 +226,951 @@ function isEnd(animateTo, mode) { } var Composer = function Composer(_ref2) { - var checkInterval = _ref2.checkInterval, - children = _ref2.children, - debounce = _ref2.debounce, - debugFromProp = _ref2.debug, - initialScrollBehavior = _ref2.initialScrollBehavior, - mode = _ref2.mode, - nonce = _ref2.nonce, - scroller = _ref2.scroller; - var debug = (0, _react.useMemo)(function () { - return (0, _debug["default"])("", { - force: debugFromProp - }); - }, [debugFromProp]); + var checkInterval = _ref2.checkInterval || 100, + children = _ref2.children, + debounce = _ref2.debounce || 17, + debugFromProp = _ref2.debug, + initialScrollBehavior = _ref2.initialScrollBehavior || 'smooth', + mode = _ref2.mode, + nonce = _ref2.nonce, + scroller = _ref2.scroller || DEFAULT_SCROLLER; + var debug = (0, _react.useMemo)( + function () { + return (0, _debug['default'])('', { + force: debugFromProp, + }); + }, + [debugFromProp] + ); mode = mode === MODE_TOP ? MODE_TOP : MODE_BOTTOM; var ignoreScrollEventBeforeRef = (0, _react.useRef)(0); var initialScrollBehaviorRef = (0, _react.useRef)(initialScrollBehavior); - var _useStateRef = (0, _useStateRef7["default"])(mode === MODE_TOP ? 0 : '100%'), - _useStateRef2 = (0, _slicedToArray2["default"])(_useStateRef, 3), - animateTo = _useStateRef2[0], - setAnimateTo = _useStateRef2[1], - animateToRef = _useStateRef2[2]; - - var _useStateRef3 = (0, _useStateRef7["default"])(null), - _useStateRef4 = (0, _slicedToArray2["default"])(_useStateRef3, 3), - target = _useStateRef4[0], - setTarget = _useStateRef4[1], - targetRef = _useStateRef4[2]; // Internal context + var _useStateRef = (0, _useStateRef7['default'])( + mode === MODE_TOP ? 0 : '100%' + ), + _useStateRef2 = (0, _slicedToArray2['default'])(_useStateRef, 3), + animateTo = _useStateRef2[0], + setAnimateTo = _useStateRef2[1], + animateToRef = _useStateRef2[2]; + var _useStateRef3 = (0, _useStateRef7['default'])(null), + _useStateRef4 = (0, _slicedToArray2['default'])(_useStateRef3, 3), + target = _useStateRef4[0], + setTarget = _useStateRef4[1], + targetRef = _useStateRef4[2]; // Internal context var animateFromRef = (0, _react.useRef)(0); var offsetHeightRef = (0, _react.useRef)(0); var scrollHeightRef = (0, _react.useRef)(0); // State context var _useState = (0, _react.useState)(true), - _useState2 = (0, _slicedToArray2["default"])(_useState, 2), - atBottom = _useState2[0], - setAtBottom = _useState2[1]; + _useState2 = (0, _slicedToArray2['default'])(_useState, 2), + atBottom = _useState2[0], + setAtBottom = _useState2[1]; var _useState3 = (0, _react.useState)(true), - _useState4 = (0, _slicedToArray2["default"])(_useState3, 2), - atEnd = _useState4[0], - setAtEnd = _useState4[1]; + _useState4 = (0, _slicedToArray2['default'])(_useState3, 2), + atEnd = _useState4[0], + setAtEnd = _useState4[1]; var _useState5 = (0, _react.useState)(true), - _useState6 = (0, _slicedToArray2["default"])(_useState5, 2), - atTop = _useState6[0], - setAtTop = _useState6[1]; + _useState6 = (0, _slicedToArray2['default'])(_useState5, 2), + atTop = _useState6[0], + setAtTop = _useState6[1]; var _useState7 = (0, _react.useState)(false), - _useState8 = (0, _slicedToArray2["default"])(_useState7, 2), - atStart = _useState8[0], - setAtStart = _useState8[1]; - - var _useStateRef5 = (0, _useStateRef7["default"])(true), - _useStateRef6 = (0, _slicedToArray2["default"])(_useStateRef5, 3), - sticky = _useStateRef6[0], - setSticky = _useStateRef6[1], - stickyRef = _useStateRef6[2]; // High-rate state context + _useState8 = (0, _slicedToArray2['default'])(_useState7, 2), + atStart = _useState8[0], + setAtStart = _useState8[1]; + var _useStateRef5 = (0, _useStateRef7['default'])(true), + _useStateRef6 = (0, _slicedToArray2['default'])(_useStateRef5, 3), + sticky = _useStateRef6[0], + setSticky = _useStateRef6[1], + stickyRef = _useStateRef6[2]; // High-rate state context var scrollPositionObserversRef = (0, _react.useRef)([]); - var observeScrollPosition = (0, _react.useCallback)(function (fn) { - var target = targetRef.current; - scrollPositionObserversRef.current.push(fn); - target && fn({ - scrollTop: target.scrollTop - }); - return function () { - var scrollPositionObservers = scrollPositionObserversRef.current; - var index = (0, _indexOf["default"])(scrollPositionObservers).call(scrollPositionObservers, fn); - ~index && (0, _splice["default"])(scrollPositionObservers).call(scrollPositionObservers, index, 1); - }; - }, [scrollPositionObserversRef, targetRef]); - var handleSpineToEnd = (0, _react.useCallback)(function () { - var animateTo = animateToRef.current; - debug(function () { - var _context; - - return (0, _concat["default"])(_context = ['%cSpineTo%c: %conEnd%c is fired.']).call(_context, (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('magenta')), (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('orange')), [{ - animateTo: animateTo - }]); - }); - ignoreScrollEventBeforeRef.current = (0, _now["default"])(); // handleScrollEnd may end at a position which should lose stickiness. - // In that case, we will need to set sticky to false to stop the interval check. - // Test case: - // 1. Add a scroller that always return 0 - // 2. Show a panel with mode === MODE_BOTTOM - // 3. Programmatically scroll to 0 (set element.scrollTop = 0) - // Expected: it should not repetitively call scrollTo(0) - // it should set stickiness to false - - isEnd(animateTo, mode) || setSticky(false); - setAnimateTo(null); - }, [animateToRef, debug, ignoreScrollEventBeforeRef, mode, setAnimateTo, setSticky]); // Function context - - var scrollTo = (0, _react.useCallback)(function (nextAnimateTo) { - var _ref3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + var observeScrollPosition = (0, _react.useCallback)( + function (fn) { + var target = targetRef.current; + scrollPositionObserversRef.current.push(fn); + target && + fn({ + scrollTop: target.scrollTop, + }); + return function () { + var scrollPositionObservers = scrollPositionObserversRef.current; + var index = (0, _indexOf['default'])(scrollPositionObservers).call( + scrollPositionObservers, + fn + ); + ~index && + (0, _splice['default'])(scrollPositionObservers).call( + scrollPositionObservers, + index, + 1 + ); + }; + }, + [scrollPositionObserversRef, targetRef] + ); + var handleSpineToEnd = (0, _react.useCallback)( + function () { + var animateTo = animateToRef.current; + debug(function () { + var _context; + + return (0, _concat['default'])( + (_context = ['%cSpineTo%c: %conEnd%c is fired.']) + ).call( + _context, + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('magenta') + ), + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('orange') + ), + [ + { + animateTo: animateTo, + }, + ] + ); + }); + ignoreScrollEventBeforeRef.current = (0, _now['default'])(); // handleScrollEnd may end at a position which should lose stickiness. + // In that case, we will need to set sticky to false to stop the interval check. + // Test case: + // 1. Add a scroller that always return 0 + // 2. Show a panel with mode === MODE_BOTTOM + // 3. Programmatically scroll to 0 (set element.scrollTop = 0) + // Expected: it should not repetitively call scrollTo(0) + // it should set stickiness to false + + isEnd(animateTo, mode) || setSticky(false); + setAnimateTo(null); + }, + [ + animateToRef, + debug, + ignoreScrollEventBeforeRef, + mode, + setAnimateTo, + setSticky, + ] + ); // Function context + + var scrollTo = (0, _react.useCallback)( + function (nextAnimateTo) { + var _ref3 = + arguments.length > 1 && arguments[1] !== undefined + ? arguments[1] + : {}, behavior = _ref3.behavior; - var target = targetRef.current; - - if (typeof nextAnimateTo !== 'number' && nextAnimateTo !== '100%') { - return console.warn('react-scroll-to-bottom: Arguments passed to scrollTo() must be either number or "100%".'); - } // If it is trying to scroll to a position which is not "atEnd", it should set sticky to false after scroll ended. + var target = targetRef.current; + if (typeof nextAnimateTo !== 'number' && nextAnimateTo !== '100%') { + return console.warn( + 'react-scroll-to-bottom: Arguments passed to scrollTo() must be either number or "100%".' + ); + } // If it is trying to scroll to a position which is not "atEnd", it should set sticky to false after scroll ended. - debug(function () { - var _context2; - - return [(0, _concat["default"])(_context2 = ["%cscrollTo%c: Will scroll to %c".concat(typeof nextAnimateTo === 'number' ? nextAnimateTo + 'px' : nextAnimateTo.replace(/%/g, '%%'), "%c")]).call(_context2, (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('lime', '')), (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('purple'))), { - behavior: behavior, - nextAnimateTo: nextAnimateTo, - target: target - }]; - }); + debug(function () { + var _context2; + + return [ + (0, _concat['default'])( + (_context2 = [ + '%cscrollTo%c: Will scroll to %c'.concat( + typeof nextAnimateTo === 'number' + ? nextAnimateTo + 'px' + : nextAnimateTo.replace(/%/g, '%%'), + '%c' + ), + ]) + ).call( + _context2, + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('lime', '') + ), + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('purple') + ) + ), + { + behavior: behavior, + nextAnimateTo: nextAnimateTo, + target: target, + }, + ]; + }); - if (behavior === 'auto') { - // Stop any existing animation - handleSpineToEnd(); + if (behavior === 'auto') { + // Stop any existing animation + handleSpineToEnd(); - if (target) { - // Jump to the scroll position - target.scrollTop = nextAnimateTo === '100%' ? target.scrollHeight - target.offsetHeight : nextAnimateTo; + if (target) { + // Jump to the scroll position + target.scrollTop = + nextAnimateTo === '100%' + ? target.scrollHeight - target.offsetHeight + : nextAnimateTo; + } + } else { + behavior !== 'smooth' && + console.warn( + 'react-scroll-to-bottom: Please set "behavior" when calling "scrollTo". In future versions, the default behavior will be changed from smooth scrolling to discrete scrolling to align with HTML Standard.' + ); + setAnimateTo(nextAnimateTo); + } // This is for handling a case. When calling scrollTo('100%', { behavior: 'auto' }) multiple times, it would lose stickiness. + + if (isEnd(nextAnimateTo, mode)) { + debug(function () { + var _context3; + + return [ + (0, _concat['default'])( + (_context3 = [ + '%cscrollTo%c: Scrolling to end, will set sticky to %ctrue%c.', + ]) + ).call( + _context3, + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('lime', '') + ), + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('purple') + ) + ), + [ + { + mode: mode, + nextAnimateTo: nextAnimateTo, + }, + ], + ]; + }); + setSticky(true); } - } else { - behavior !== 'smooth' && console.warn('react-scroll-to-bottom: Please set "behavior" when calling "scrollTo". In future versions, the default behavior will be changed from smooth scrolling to discrete scrolling to align with HTML Standard.'); - setAnimateTo(nextAnimateTo); - } // This is for handling a case. When calling scrollTo('100%', { behavior: 'auto' }) multiple times, it would lose stickiness. - + }, + [debug, handleSpineToEnd, mode, setAnimateTo, setSticky, targetRef] + ); + var scrollToBottom = (0, _react.useCallback)( + function () { + var _ref4 = + arguments.length > 0 && arguments[0] !== undefined + ? arguments[0] + : {}, + behavior = _ref4.behavior; - if (isEnd(nextAnimateTo, mode)) { debug(function () { - var _context3; - - return [(0, _concat["default"])(_context3 = ["%cscrollTo%c: Scrolling to end, will set sticky to %ctrue%c."]).call(_context3, (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('lime', '')), (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('purple'))), [{ - mode: mode, - nextAnimateTo: nextAnimateTo - }]]; + var _context4; + + return (0, _concat['default'])( + (_context4 = ['%cscrollToBottom%c: Called']) + ).call( + _context4, + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('yellow', '') + ) + ); }); - setSticky(true); - } - }, [debug, handleSpineToEnd, mode, setAnimateTo, setSticky, targetRef]); - var scrollToBottom = (0, _react.useCallback)(function () { - var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - behavior = _ref4.behavior; - - debug(function () { - var _context4; - - return (0, _concat["default"])(_context4 = ['%cscrollToBottom%c: Called']).call(_context4, (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('yellow', ''))); - }); - behavior !== 'smooth' && console.warn('react-scroll-to-bottom: Please set "behavior" when calling "scrollToBottom". In future versions, the default behavior will be changed from smooth scrolling to discrete scrolling to align with HTML Standard.'); - scrollTo('100%', { - behavior: behavior || 'smooth' - }); - }, [debug, scrollTo]); - var scrollToTop = (0, _react.useCallback)(function () { - var _ref5 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + behavior !== 'smooth' && + console.warn( + 'react-scroll-to-bottom: Please set "behavior" when calling "scrollToBottom". In future versions, the default behavior will be changed from smooth scrolling to discrete scrolling to align with HTML Standard.' + ); + scrollTo('100%', { + behavior: behavior || 'smooth', + }); + }, + [debug, scrollTo] + ); + var scrollToTop = (0, _react.useCallback)( + function () { + var _ref5 = + arguments.length > 0 && arguments[0] !== undefined + ? arguments[0] + : {}, behavior = _ref5.behavior; - debug(function () { - var _context5; - - return (0, _concat["default"])(_context5 = ['%cscrollToTop%c: Called']).call(_context5, (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('yellow', ''))); - }); - behavior !== 'smooth' && console.warn('react-scroll-to-bottom: Please set "behavior" when calling "scrollToTop". In future versions, the default behavior will be changed from smooth scrolling to discrete scrolling to align with HTML Standard.'); - scrollTo(0, { - behavior: behavior || 'smooth' - }); - }, [debug, scrollTo]); - var scrollToEnd = (0, _react.useCallback)(function () { - var _ref6 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + debug(function () { + var _context5; + + return (0, _concat['default'])( + (_context5 = ['%cscrollToTop%c: Called']) + ).call( + _context5, + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('yellow', '') + ) + ); + }); + behavior !== 'smooth' && + console.warn( + 'react-scroll-to-bottom: Please set "behavior" when calling "scrollToTop". In future versions, the default behavior will be changed from smooth scrolling to discrete scrolling to align with HTML Standard.' + ); + scrollTo(0, { + behavior: behavior || 'smooth', + }); + }, + [debug, scrollTo] + ); + var scrollToEnd = (0, _react.useCallback)( + function () { + var _ref6 = + arguments.length > 0 && arguments[0] !== undefined + ? arguments[0] + : {}, behavior = _ref6.behavior; - debug(function () { - var _context6; - - return (0, _concat["default"])(_context6 = ['%cscrollToEnd%c: Called']).call(_context6, (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('yellow', ''))); - }); - behavior !== 'smooth' && console.warn('react-scroll-to-bottom: Please set "behavior" when calling "scrollToEnd". In future versions, the default behavior will be changed from smooth scrolling to discrete scrolling to align with HTML Standard.'); - var options = { - behavior: behavior || 'smooth' - }; - mode === MODE_TOP ? scrollToTop(options) : scrollToBottom(options); - }, [debug, mode, scrollToBottom, scrollToTop]); - var scrollToStart = (0, _react.useCallback)(function () { - var _ref7 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + debug(function () { + var _context6; + + return (0, _concat['default'])( + (_context6 = ['%cscrollToEnd%c: Called']) + ).call( + _context6, + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('yellow', '') + ) + ); + }); + behavior !== 'smooth' && + console.warn( + 'react-scroll-to-bottom: Please set "behavior" when calling "scrollToEnd". In future versions, the default behavior will be changed from smooth scrolling to discrete scrolling to align with HTML Standard.' + ); + var options = { + behavior: behavior || 'smooth', + }; + mode === MODE_TOP ? scrollToTop(options) : scrollToBottom(options); + }, + [debug, mode, scrollToBottom, scrollToTop] + ); + var scrollToStart = (0, _react.useCallback)( + function () { + var _ref7 = + arguments.length > 0 && arguments[0] !== undefined + ? arguments[0] + : {}, behavior = _ref7.behavior; - debug(function () { - var _context7; - - return (0, _concat["default"])(_context7 = ['%cscrollToStart%c: Called']).call(_context7, (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('yellow', ''))); - }); - behavior !== 'smooth' && console.warn('react-scroll-to-bottom: Please set "behavior" when calling "scrollToStart". In future versions, the default behavior will be changed from smooth scrolling to discrete scrolling to align with HTML Standard.'); - var options = { - behavior: behavior || 'smooth' - }; - mode === MODE_TOP ? scrollToBottom(options) : scrollToTop(options); - }, [debug, mode, scrollToBottom, scrollToTop]); - var scrollToSticky = (0, _react.useCallback)(function () { - var target = targetRef.current; - - if (target) { - if (initialScrollBehaviorRef.current === 'auto') { - debug(function () { - var _context8; - - return (0, _concat["default"])(_context8 = ["%ctarget changed%c: Initial scroll"]).call(_context8, (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('blue'))); - }); - target.scrollTop = mode === MODE_TOP ? 0 : target.scrollHeight - target.offsetHeight; - initialScrollBehaviorRef.current = false; - return; - } // This is very similar to scrollToEnd(). - // Instead of scrolling to end, it will call props.scroller() to determines how far it should scroll. - // This function could be called while it is auto-scrolling. - + debug(function () { + var _context7; + + return (0, _concat['default'])( + (_context7 = ['%cscrollToStart%c: Called']) + ).call( + _context7, + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('yellow', '') + ) + ); + }); + behavior !== 'smooth' && + console.warn( + 'react-scroll-to-bottom: Please set "behavior" when calling "scrollToStart". In future versions, the default behavior will be changed from smooth scrolling to discrete scrolling to align with HTML Standard.' + ); + var options = { + behavior: behavior || 'smooth', + }; + mode === MODE_TOP ? scrollToBottom(options) : scrollToTop(options); + }, + [debug, mode, scrollToBottom, scrollToTop] + ); + var scrollToSticky = (0, _react.useCallback)( + function () { + var target = targetRef.current; - var animateFrom = animateFromRef.current; - var offsetHeight = target.offsetHeight, + if (target) { + if (initialScrollBehaviorRef.current === 'auto') { + debug(function () { + var _context8; + + return (0, _concat['default'])( + (_context8 = ['%ctarget changed%c: Initial scroll']) + ).call( + _context8, + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('blue') + ) + ); + }); + target.scrollTop = + mode === MODE_TOP ? 0 : target.scrollHeight - target.offsetHeight; + initialScrollBehaviorRef.current = false; + return; + } // This is very similar to scrollToEnd(). + // Instead of scrolling to end, it will call props.scroller() to determines how far it should scroll. + // This function could be called while it is auto-scrolling. + + var animateFrom = animateFromRef.current; + var offsetHeight = target.offsetHeight, scrollHeight = target.scrollHeight, scrollTop = target.scrollTop; - var maxValue = mode === MODE_TOP ? 0 : Math.max(0, scrollHeight - offsetHeight - scrollTop); - var minValue = Math.max(0, animateFrom - scrollTop); - var rawNextValue = scroller({ - maxValue: maxValue, - minValue: minValue, - offsetHeight: offsetHeight, - scrollHeight: scrollHeight, - scrollTop: scrollTop - }); - var nextValue = Math.max(0, Math.min(maxValue, rawNextValue)); - var nextAnimateTo; - - if (mode === MODE_TOP || nextValue !== maxValue) { - nextAnimateTo = scrollTop + nextValue; - } else { - // When scrolling to bottom, we should scroll to "100%". - // Otherwise, if we scroll to any number, it will lose stickiness when elements are adding too fast. - // "100%" is a special argument intended to make sure stickiness is not lost while new elements are being added. - nextAnimateTo = '100%'; - } - - debug(function () { - var _context9, _context10, _context11; - - return [(0, _concat["default"])(_context9 = [(0, _concat["default"])(_context10 = (0, _concat["default"])(_context11 = "%cscrollToSticky%c: Will animate from %c".concat(animateFrom, "px%c to %c")).call(_context11, typeof nextAnimateTo === 'number' ? nextAnimateTo + 'px' : nextAnimateTo.replace(/%/g, '%%'), "%c (%c")).call(_context10, (nextAnimateTo === '100%' ? maxValue : nextAnimateTo) + animateFrom, "px%c)")]).call(_context9, (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('orange')), (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('purple')), (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('purple')), (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('purple'))), { - animateFrom: animateFrom, + var maxValue = + mode === MODE_TOP + ? 0 + : Math.max(0, scrollHeight - offsetHeight - scrollTop); + var minValue = Math.max(0, animateFrom - scrollTop); + var rawNextValue = scroller({ maxValue: maxValue, minValue: minValue, - nextAnimateTo: nextAnimateTo, - nextValue: nextValue, offsetHeight: offsetHeight, - rawNextValue: rawNextValue, scrollHeight: scrollHeight, - scrollTop: scrollTop - }]; - }); - scrollTo(nextAnimateTo, { - behavior: 'smooth' - }); - } - }, [animateFromRef, debug, mode, scroller, scrollTo, targetRef]); - var handleScroll = (0, _react.useCallback)(function (_ref8) { - var _context17; - - var timeStampLow = _ref8.timeStampLow; - var animateTo = animateToRef.current; - var target = targetRef.current; - var animating = animateTo !== null; // 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 || !target) { - // 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; - } + scrollTop: scrollTop, + }); + var nextValue = Math.max(0, Math.min(maxValue, rawNextValue)); + var nextAnimateTo; + + if (mode === MODE_TOP || nextValue !== maxValue) { + nextAnimateTo = scrollTop + nextValue; + } else { + // When scrolling to bottom, we should scroll to "100%". + // Otherwise, if we scroll to any number, it will lose stickiness when elements are adding too fast. + // "100%" is a special argument intended to make sure stickiness is not lost while new elements are being added. + nextAnimateTo = '100%'; + } - var _computeViewState = computeViewState({ - mode: mode, - target: target - }), + debug(function () { + var _context9, _context10, _context11; + + return [ + (0, _concat['default'])( + (_context9 = [ + (0, _concat['default'])( + (_context10 = (0, _concat['default'])( + (_context11 = + '%cscrollToSticky%c: Will animate from %c'.concat( + animateFrom, + 'px%c to %c' + )) + ).call( + _context11, + typeof nextAnimateTo === 'number' + ? nextAnimateTo + 'px' + : nextAnimateTo.replace(/%/g, '%%'), + '%c (%c' + )) + ).call( + _context10, + (nextAnimateTo === '100%' ? maxValue : nextAnimateTo) + + animateFrom, + 'px%c)' + ), + ]) + ).call( + _context9, + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('orange') + ), + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('purple') + ), + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('purple') + ), + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('purple') + ) + ), + { + animateFrom: animateFrom, + maxValue: maxValue, + minValue: minValue, + nextAnimateTo: nextAnimateTo, + nextValue: nextValue, + offsetHeight: offsetHeight, + rawNextValue: rawNextValue, + scrollHeight: scrollHeight, + scrollTop: scrollTop, + }, + ]; + }); + scrollTo(nextAnimateTo, { + behavior: 'smooth', + }); + } + }, + [animateFromRef, debug, mode, scroller, scrollTo, targetRef] + ); + var handleScroll = (0, _react.useCallback)( + function (_ref8) { + var _context17; + + var timeStampLow = _ref8.timeStampLow; + var animateTo = animateToRef.current; + var target = targetRef.current; + var animating = animateTo !== null; // 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 || !target) { + // 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; + } + + var _computeViewState = computeViewState({ + mode: mode, + target: target, + }), atBottom = _computeViewState.atBottom, atEnd = _computeViewState.atEnd, atStart = _computeViewState.atStart, atTop = _computeViewState.atTop; - 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 pressed, it should still stick to the bottom + 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 pressed, it should still stick to the bottom - var nextOffsetHeight = target.offsetHeight, + var nextOffsetHeight = target.offsetHeight, nextScrollHeight = target.scrollHeight; - var offsetHeight = offsetHeightRef.current; - var scrollHeight = scrollHeightRef.current; - var offsetHeightChanged = nextOffsetHeight !== offsetHeight; - var scrollHeightChanged = nextScrollHeight !== scrollHeight; + var offsetHeight = offsetHeightRef.current; + var scrollHeight = scrollHeightRef.current; + var offsetHeightChanged = nextOffsetHeight !== offsetHeight; + var scrollHeightChanged = nextScrollHeight !== scrollHeight; - if (offsetHeightChanged) { - offsetHeightRef.current = nextOffsetHeight; - } - - if (scrollHeightChanged) { - scrollHeightRef.current = 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 (offsetHeightChanged) { + offsetHeightRef.current = nextOffsetHeight; + } + if (scrollHeightChanged) { + scrollHeightRef.current = 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 (!offsetHeightChanged && !scrollHeightChanged) { - // We are sticky if we are animating to the end, or we are already at the end. - // We can be "animating but not sticky" by calling "scrollTo(100)" where the container scrollHeight is 200px. - var nextSticky = animating && isEnd(animateTo, mode) || atEnd; + if (!offsetHeightChanged && !scrollHeightChanged) { + // We are sticky if we are animating to the end, or we are already at the end. + // We can be "animating but not sticky" by calling "scrollTo(100)" where the container scrollHeight is 200px. + var nextSticky = (animating && isEnd(animateTo, mode)) || atEnd; - if (stickyRef.current !== nextSticky) { + if (stickyRef.current !== nextSticky) { + debug(function () { + var _context12, _context13, _context14, _context15; + + return [ + (0, _concat['default'])( + (_context12 = [ + '%conScroll%c: %csetSticky%c(%c'.concat(nextSticky, '%c)'), + ]) + ).call( + _context12, + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('red') + ), + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('red') + ), + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('purple') + ) + ), + (0, _concat['default'])( + (_context13 = [ + (0, _concat['default'])( + (_context14 = (0, _concat['default'])( + (_context15 = '(animating = %c'.concat( + animating, + '%c && isEnd = %c' + )) + ).call( + _context15, + isEnd(animateTo, mode), + '%c) || atEnd = %c' + )) + ).call(_context14, atEnd, '%c'), + ]) + ).call( + _context13, + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('purple') + ), + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('purple') + ), + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('purple') + ), + [ + { + animating: animating, + animateTo: animateTo, + atEnd: atEnd, + mode: mode, + offsetHeight: target.offsetHeight, + scrollHeight: target.scrollHeight, + sticky: stickyRef.current, + nextSticky: nextSticky, + }, + ] + ), + ]; + }); + setSticky(nextSticky); + } + } else if (stickyRef.current) { debug(function () { - var _context12, _context13, _context14, _context15; - - return [(0, _concat["default"])(_context12 = ["%conScroll%c: %csetSticky%c(%c".concat(nextSticky, "%c)")]).call(_context12, (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('red')), (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('red')), (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('purple'))), (0, _concat["default"])(_context13 = [(0, _concat["default"])(_context14 = (0, _concat["default"])(_context15 = "(animating = %c".concat(animating, "%c && isEnd = %c")).call(_context15, isEnd(animateTo, mode), "%c) || atEnd = %c")).call(_context14, atEnd, "%c")]).call(_context13, (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('purple')), (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('purple')), (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('purple')), [{ - animating: animating, - animateTo: animateTo, - atEnd: atEnd, - mode: mode, - offsetHeight: target.offsetHeight, - scrollHeight: target.scrollHeight, - sticky: stickyRef.current, - nextSticky: nextSticky - }])]; + var _context16; + + return [ + (0, _concat['default'])( + (_context16 = [ + '%conScroll%c: Size changed while sticky, calling %cscrollToSticky()%c', + ]) + ).call( + _context16, + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('red') + ), + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('orange') + ), + [ + { + offsetHeightChanged: offsetHeightChanged, + scrollHeightChanged: scrollHeightChanged, + }, + ] + ), + { + nextOffsetHeight: nextOffsetHeight, + prevOffsetHeight: offsetHeight, + nextScrollHeight: nextScrollHeight, + prevScrollHeight: scrollHeight, + }, + ]; }); - setSticky(nextSticky); + scrollToSticky(); } - } else if (stickyRef.current) { - debug(function () { - var _context16; - - return [(0, _concat["default"])(_context16 = ["%conScroll%c: Size changed while sticky, calling %cscrollToSticky()%c"]).call(_context16, (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('red')), (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('orange')), [{ - offsetHeightChanged: offsetHeightChanged, - scrollHeightChanged: scrollHeightChanged - }]), { - nextOffsetHeight: nextOffsetHeight, - prevOffsetHeight: offsetHeight, - nextScrollHeight: nextScrollHeight, - prevScrollHeight: scrollHeight - }]; - }); - scrollToSticky(); - } - var actualScrollTop = target.scrollTop; - (0, _forEach["default"])(_context17 = scrollPositionObserversRef.current).call(_context17, function (observer) { - return observer({ - scrollTop: actualScrollTop + var actualScrollTop = target.scrollTop; + (0, _forEach['default'])( + (_context17 = scrollPositionObserversRef.current) + ).call(_context17, function (observer) { + return observer({ + scrollTop: actualScrollTop, + }); }); - }); - }, [animateToRef, debug, ignoreScrollEventBeforeRef, mode, offsetHeightRef, scrollHeightRef, scrollPositionObserversRef, scrollToSticky, setAtBottom, setAtEnd, setAtStart, setAtTop, setSticky, stickyRef, targetRef]); - (0, _react.useEffect)(function () { - if (target) { - var stickyButNotAtEndSince = false; - var timeout = setImmediateInterval(function () { - var target = targetRef.current; - var animating = animateToRef.current !== null; - - if (stickyRef.current) { - if (!computeViewState({ - mode: mode, - target: target - }).atEnd) { - if (!stickyButNotAtEndSince) { - stickyButNotAtEndSince = (0, _now["default"])(); - } else if ((0, _now["default"])() - stickyButNotAtEndSince > SCROLL_DECISION_DURATION) { - // Quirks: In Firefox, after user scroll down, Firefox do two things: - // 1. Set to a new "scrollTop" - // 2. Fire "scroll" event - // For what we observed, #1 is fired about 20ms before #2. There is a chance that this stickyCheckTimeout is being scheduled between 1 and 2. - // That means, if we just look at #1 to decide if we should scroll, we will always scroll, in oppose to the user's intention. - // Repro: Open Firefox, set checkInterval to a lower number, and try to scroll by dragging the scroll handler. It will jump back. - // The "animating" check will make sure stickiness is not lost when elements are adding at a very fast pace. - if (!animating) { - animateFromRef.current = target.scrollTop; - debug(function () { - var _context18; - - return (0, _concat["default"])(_context18 = ["%cInterval check%c: Should sticky but not at end, calling %cscrollToSticky()%c to scroll"]).call(_context18, (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('navy')), (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('orange'))); - }); - scrollToSticky(); + }, + [ + animateToRef, + debug, + ignoreScrollEventBeforeRef, + mode, + offsetHeightRef, + scrollHeightRef, + scrollPositionObserversRef, + scrollToSticky, + setAtBottom, + setAtEnd, + setAtStart, + setAtTop, + setSticky, + stickyRef, + targetRef, + ] + ); + (0, _react.useEffect)( + function () { + if (target) { + var stickyButNotAtEndSince = false; + var timeout = setImmediateInterval( + function () { + var target = targetRef.current; + var animating = animateToRef.current !== null; + + if (stickyRef.current) { + if ( + !computeViewState({ + mode: mode, + target: target, + }).atEnd + ) { + if (!stickyButNotAtEndSince) { + stickyButNotAtEndSince = (0, _now['default'])(); + } else if ( + (0, _now['default'])() - stickyButNotAtEndSince > + SCROLL_DECISION_DURATION + ) { + // Quirks: In Firefox, after user scroll down, Firefox do two things: + // 1. Set to a new "scrollTop" + // 2. Fire "scroll" event + // For what we observed, #1 is fired about 20ms before #2. There is a chance that this stickyCheckTimeout is being scheduled between 1 and 2. + // That means, if we just look at #1 to decide if we should scroll, we will always scroll, in oppose to the user's intention. + // Repro: Open Firefox, set checkInterval to a lower number, and try to scroll by dragging the scroll handler. It will jump back. + // The "animating" check will make sure stickiness is not lost when elements are adding at a very fast pace. + if (!animating) { + animateFromRef.current = target.scrollTop; + debug(function () { + var _context18; + + return (0, _concat['default'])( + (_context18 = [ + '%cInterval check%c: Should sticky but not at end, calling %cscrollToSticky()%c to scroll', + ]) + ).call( + _context18, + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('navy') + ), + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('orange') + ) + ); + }); + scrollToSticky(); + } + + stickyButNotAtEndSince = false; + } + } else { + stickyButNotAtEndSince = false; } - - stickyButNotAtEndSince = false; + } else if ( + target.scrollHeight <= target.offsetHeight && + !stickyRef.current + ) { + // When the container is emptied, we will set sticky back to true. + debug(function () { + var _context19; + + return [ + (0, _concat['default'])( + (_context19 = [ + '%cInterval check%c: Container is emptied, setting sticky back to %ctrue%c', + ]) + ).call( + _context19, + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('navy') + ), + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('purple') + ) + ), + [ + { + offsetHeight: target.offsetHeight, + scrollHeight: target.scrollHeight, + sticky: stickyRef.current, + }, + ], + ]; + }); + setSticky(true); } - } else { - stickyButNotAtEndSince = false; - } - } else if (target.scrollHeight <= target.offsetHeight && !stickyRef.current) { - // When the container is emptied, we will set sticky back to true. - debug(function () { - var _context19; - - return [(0, _concat["default"])(_context19 = ["%cInterval check%c: Container is emptied, setting sticky back to %ctrue%c"]).call(_context19, (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('navy')), (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('purple'))), [{ - offsetHeight: target.offsetHeight, - scrollHeight: target.scrollHeight, - sticky: stickyRef.current - }]]; - }); - setSticky(true); - } - }, Math.max(MIN_CHECK_INTERVAL, checkInterval) || MIN_CHECK_INTERVAL); - return function () { - return clearInterval(timeout); + }, + Math.max(MIN_CHECK_INTERVAL, checkInterval) || MIN_CHECK_INTERVAL + ); + return function () { + return clearInterval(timeout); + }; + } + }, + [ + animateToRef, + checkInterval, + debug, + mode, + scrollToSticky, + setSticky, + stickyRef, + target, + targetRef, + ] + ); + var styleToClassName = (0, _react.useMemo)( + function () { + var emotion = + emotionPool[nonce] || + (emotionPool[nonce] = (0, _createInstance['default'])({ + key: 'react-scroll-to-bottom--css-' + (0, _createCSSKey['default'])(), + nonce: nonce, + })); + return function (style) { + return emotion.css(style) + ''; }; - } - }, [animateToRef, checkInterval, debug, mode, scrollToSticky, setSticky, stickyRef, target, targetRef]); - var styleToClassName = (0, _react.useMemo)(function () { - var emotion = emotionPool[nonce] || (emotionPool[nonce] = (0, _createInstance["default"])({ - key: 'react-scroll-to-bottom--css-' + (0, _createCSSKey["default"])(), - nonce: nonce - })); - return function (style) { - return emotion.css(style) + ''; - }; - }, [nonce]); - var internalContext = (0, _react.useMemo)(function () { - return { - observeScrollPosition: observeScrollPosition, - setTarget: setTarget, - styleToClassName: styleToClassName - }; - }, [observeScrollPosition, setTarget, styleToClassName]); - var state1Context = (0, _react.useMemo)(function () { - return { - atBottom: atBottom, - atEnd: atEnd, - atStart: atStart, - atTop: atTop, - mode: mode - }; - }, [atBottom, atEnd, atStart, atTop, mode]); - var state2Context = (0, _react.useMemo)(function () { - var animating = animateTo !== null; - return { - animating: animating, - animatingToEnd: animating && isEnd(animateTo, mode), - sticky: sticky - }; - }, [animateTo, mode, sticky]); - var combinedStateContext = (0, _react.useMemo)(function () { - return _objectSpread(_objectSpread({}, state1Context), state2Context); - }, [state1Context, state2Context]); - var functionContext = (0, _react.useMemo)(function () { - return { - scrollTo: scrollTo, - scrollToBottom: scrollToBottom, - scrollToEnd: scrollToEnd, - scrollToStart: scrollToStart, - scrollToTop: scrollToTop - }; - }, [scrollTo, scrollToBottom, scrollToEnd, scrollToStart, scrollToTop]); - (0, _react.useEffect)(function () { - // We need to update the "scrollHeight" value to latest when the user do a focus inside the box. - // - // This is because: - // - In our code that mitigate Chrome synthetic scrolling, that code will look at whether "scrollHeight" value is latest or not. - // - That code only run on "scroll" event. - // - That means, on every "scroll" event, if the "scrollHeight" value is not latest, we will skip modifying the stickiness. - // - That means, if the user "focus" to an element that cause the scroll view to scroll to the bottom, the user agent will fire "scroll" event. - // Since the "scrollHeight" is not latest value, this "scroll" event will be ignored and stickiness will not be modified. - // - That means, if the user "focus" to a newly added element that is at the end of the scroll view, the "scroll to bottom" button will continue to show. - // - // Repro in Chrome: - // 1. Fill up a scroll view - // 2. Scroll up, the "scroll to bottom" button should show up - // 3. Click "Add a button" - // 4. Click on the scroll view (to pseudo-focus on it) - // 5. Press TAB, the scroll view will be at the bottom - // - // Expect: - // - The "scroll to bottom" button should be gone. - if (target) { - var handleFocus = function handleFocus() { - scrollHeightRef.current = target.scrollHeight; + }, + [nonce] + ); + var internalContext = (0, _react.useMemo)( + function () { + return { + observeScrollPosition: observeScrollPosition, + setTarget: setTarget, + styleToClassName: styleToClassName, }; - - target.addEventListener('focus', handleFocus, { - capture: true, - passive: true - }); - return function () { - return target.removeEventListener('focus', handleFocus); + }, + [observeScrollPosition, setTarget, styleToClassName] + ); + var state1Context = (0, _react.useMemo)( + function () { + return { + atBottom: atBottom, + atEnd: atEnd, + atStart: atStart, + atTop: atTop, + mode: mode, }; - } - }, [target]); + }, + [atBottom, atEnd, atStart, atTop, mode] + ); + var state2Context = (0, _react.useMemo)( + function () { + var animating = animateTo !== null; + return { + animating: animating, + animatingToEnd: animating && isEnd(animateTo, mode), + sticky: sticky, + }; + }, + [animateTo, mode, sticky] + ); + var combinedStateContext = (0, _react.useMemo)( + function () { + return _objectSpread(_objectSpread({}, state1Context), state2Context); + }, + [state1Context, state2Context] + ); + var functionContext = (0, _react.useMemo)( + function () { + return { + scrollTo: scrollTo, + scrollToBottom: scrollToBottom, + scrollToEnd: scrollToEnd, + scrollToStart: scrollToStart, + scrollToTop: scrollToTop, + }; + }, + [scrollTo, scrollToBottom, scrollToEnd, scrollToStart, scrollToTop] + ); + (0, _react.useEffect)( + function () { + // We need to update the "scrollHeight" value to latest when the user do a focus inside the box. + // + // This is because: + // - In our code that mitigate Chrome synthetic scrolling, that code will look at whether "scrollHeight" value is latest or not. + // - That code only run on "scroll" event. + // - That means, on every "scroll" event, if the "scrollHeight" value is not latest, we will skip modifying the stickiness. + // - That means, if the user "focus" to an element that cause the scroll view to scroll to the bottom, the user agent will fire "scroll" event. + // Since the "scrollHeight" is not latest value, this "scroll" event will be ignored and stickiness will not be modified. + // - That means, if the user "focus" to a newly added element that is at the end of the scroll view, the "scroll to bottom" button will continue to show. + // + // Repro in Chrome: + // 1. Fill up a scroll view + // 2. Scroll up, the "scroll to bottom" button should show up + // 3. Click "Add a button" + // 4. Click on the scroll view (to pseudo-focus on it) + // 5. Press TAB, the scroll view will be at the bottom + // + // Expect: + // - The "scroll to bottom" button should be gone. + if (target) { + var handleFocus = function handleFocus() { + scrollHeightRef.current = target.scrollHeight; + }; + + target.addEventListener('focus', handleFocus, { + capture: true, + passive: true, + }); + return function () { + return target.removeEventListener('focus', handleFocus); + }; + } + }, + [target] + ); debug(function () { var _context20; - return [(0, _concat["default"])(_context20 = ["%cRender%c: Render"]).call(_context20, (0, _toConsumableArray2["default"])((0, _styleConsole["default"])('cyan', ''))), { - animateTo: animateTo, - animating: animateTo !== null, - sticky: sticky, - target: target - }]; + return [ + (0, _concat['default'])((_context20 = ['%cRender%c: Render'])).call( + _context20, + (0, _toConsumableArray2['default'])( + (0, _styleConsole['default'])('cyan', '') + ) + ), + { + animateTo: animateTo, + animating: animateTo !== null, + sticky: sticky, + target: target, + }, + ]; }); - return /*#__PURE__*/_react["default"].createElement(_InternalContext["default"].Provider, { - value: internalContext - }, /*#__PURE__*/_react["default"].createElement(_FunctionContext["default"].Provider, { - value: functionContext - }, /*#__PURE__*/_react["default"].createElement(_StateContext["default"].Provider, { - value: combinedStateContext - }, /*#__PURE__*/_react["default"].createElement(_State1Context["default"].Provider, { - value: state1Context - }, /*#__PURE__*/_react["default"].createElement(_State2Context["default"].Provider, { - value: state2Context - }, children, target && /*#__PURE__*/_react["default"].createElement(_EventSpy["default"], { - debounce: debounce, - name: "scroll", - onEvent: handleScroll, - target: target - }), target && animateTo !== null && /*#__PURE__*/_react["default"].createElement(_SpineTo["default"], { - name: "scrollTop", - onEnd: handleSpineToEnd, - target: target, - value: animateTo - })))))); + return /*#__PURE__*/ _react['default'].createElement( + _InternalContext['default'].Provider, + { + value: internalContext, + }, + /*#__PURE__*/ _react['default'].createElement( + _FunctionContext['default'].Provider, + { + value: functionContext, + }, + /*#__PURE__*/ _react['default'].createElement( + _StateContext['default'].Provider, + { + value: combinedStateContext, + }, + /*#__PURE__*/ _react['default'].createElement( + _State1Context['default'].Provider, + { + value: state1Context, + }, + /*#__PURE__*/ _react['default'].createElement( + _State2Context['default'].Provider, + { + value: state2Context, + }, + children, + target && + /*#__PURE__*/ _react['default'].createElement( + _EventSpy['default'], + { + debounce: debounce, + name: 'scroll', + onEvent: handleScroll, + target: target, + } + ), + target && + animateTo !== null && + /*#__PURE__*/ _react['default'].createElement( + _SpineTo['default'], + { + name: 'scrollTop', + onEnd: handleSpineToEnd, + target: target, + value: animateTo, + } + ) + ) + ) + ) + ) + ); }; -Composer.defaultProps = { - checkInterval: 100, - children: undefined, - debounce: 17, - debug: undefined, - initialScrollBehavior: 'smooth', - mode: undefined, - nonce: undefined, - scroller: DEFAULT_SCROLLER -}; Composer.propTypes = { - checkInterval: _propTypes["default"].number, - children: _propTypes["default"].any, - debounce: _propTypes["default"].number, - debug: _propTypes["default"].bool, - initialScrollBehavior: _propTypes["default"].oneOf(['auto', 'smooth']), - mode: _propTypes["default"].oneOf(['bottom', 'top']), - nonce: _propTypes["default"].string, - scroller: _propTypes["default"].func + checkInterval: _propTypes['default'].number, + children: _propTypes['default'].any, + debounce: _propTypes['default'].number, + debug: _propTypes['default'].bool, + initialScrollBehavior: _propTypes['default'].oneOf(['auto', 'smooth']), + mode: _propTypes['default'].oneOf(['bottom', 'top']), + nonce: _propTypes['default'].string, + scroller: _propTypes['default'].func, }; var _default = Composer; -exports["default"] = _default; +exports['default'] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TY3JvbGxUb0JvdHRvbS9Db21wb3Nlci5qcyJdLCJuYW1lcyI6WyJERUZBVUxUX1NDUk9MTEVSIiwiSW5maW5pdHkiLCJNSU5fQ0hFQ0tfSU5URVJWQUwiLCJNT0RFX0JPVFRPTSIsIk1PREVfVE9QIiwiTkVBUl9FTkRfVEhSRVNIT0xEIiwiU0NST0xMX0RFQ0lTSU9OX0RVUkFUSU9OIiwiZW1vdGlvblBvb2wiLCJzZXRJbW1lZGlhdGVJbnRlcnZhbCIsImZuIiwibXMiLCJjb21wdXRlVmlld1N0YXRlIiwibW9kZSIsInRhcmdldCIsIm9mZnNldEhlaWdodCIsInNjcm9sbEhlaWdodCIsInNjcm9sbFRvcCIsImF0Qm90dG9tIiwiYXRUb3AiLCJhdEVuZCIsImF0U3RhcnQiLCJpc0VuZCIsImFuaW1hdGVUbyIsIkNvbXBvc2VyIiwiY2hlY2tJbnRlcnZhbCIsImNoaWxkcmVuIiwiZGVib3VuY2UiLCJkZWJ1Z0Zyb21Qcm9wIiwiZGVidWciLCJpbml0aWFsU2Nyb2xsQmVoYXZpb3IiLCJub25jZSIsInNjcm9sbGVyIiwiZm9yY2UiLCJpZ25vcmVTY3JvbGxFdmVudEJlZm9yZVJlZiIsImluaXRpYWxTY3JvbGxCZWhhdmlvclJlZiIsInNldEFuaW1hdGVUbyIsImFuaW1hdGVUb1JlZiIsInNldFRhcmdldCIsInRhcmdldFJlZiIsImFuaW1hdGVGcm9tUmVmIiwib2Zmc2V0SGVpZ2h0UmVmIiwic2Nyb2xsSGVpZ2h0UmVmIiwic2V0QXRCb3R0b20iLCJzZXRBdEVuZCIsInNldEF0VG9wIiwic2V0QXRTdGFydCIsInN0aWNreSIsInNldFN0aWNreSIsInN0aWNreVJlZiIsInNjcm9sbFBvc2l0aW9uT2JzZXJ2ZXJzUmVmIiwib2JzZXJ2ZVNjcm9sbFBvc2l0aW9uIiwiY3VycmVudCIsInB1c2giLCJzY3JvbGxQb3NpdGlvbk9ic2VydmVycyIsImluZGV4IiwiaGFuZGxlU3BpbmVUb0VuZCIsInNjcm9sbFRvIiwibmV4dEFuaW1hdGVUbyIsImJlaGF2aW9yIiwiY29uc29sZSIsIndhcm4iLCJyZXBsYWNlIiwic2Nyb2xsVG9Cb3R0b20iLCJzY3JvbGxUb1RvcCIsInNjcm9sbFRvRW5kIiwib3B0aW9ucyIsInNjcm9sbFRvU3RhcnQiLCJzY3JvbGxUb1N0aWNreSIsImFuaW1hdGVGcm9tIiwibWF4VmFsdWUiLCJNYXRoIiwibWF4IiwibWluVmFsdWUiLCJyYXdOZXh0VmFsdWUiLCJuZXh0VmFsdWUiLCJtaW4iLCJoYW5kbGVTY3JvbGwiLCJ0aW1lU3RhbXBMb3ciLCJhbmltYXRpbmciLCJuZXh0T2Zmc2V0SGVpZ2h0IiwibmV4dFNjcm9sbEhlaWdodCIsIm9mZnNldEhlaWdodENoYW5nZWQiLCJzY3JvbGxIZWlnaHRDaGFuZ2VkIiwibmV4dFN0aWNreSIsInByZXZPZmZzZXRIZWlnaHQiLCJwcmV2U2Nyb2xsSGVpZ2h0IiwiYWN0dWFsU2Nyb2xsVG9wIiwib2JzZXJ2ZXIiLCJzdGlja3lCdXROb3RBdEVuZFNpbmNlIiwidGltZW91dCIsImNsZWFySW50ZXJ2YWwiLCJzdHlsZVRvQ2xhc3NOYW1lIiwiZW1vdGlvbiIsImtleSIsInN0eWxlIiwiY3NzIiwiaW50ZXJuYWxDb250ZXh0Iiwic3RhdGUxQ29udGV4dCIsInN0YXRlMkNvbnRleHQiLCJhbmltYXRpbmdUb0VuZCIsImNvbWJpbmVkU3RhdGVDb250ZXh0IiwiZnVuY3Rpb25Db250ZXh0IiwiaGFuZGxlRm9jdXMiLCJhZGRFdmVudExpc3RlbmVyIiwiY2FwdHVyZSIsInBhc3NpdmUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZGVmYXVsdFByb3BzIiwidW5kZWZpbmVkIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwibnVtYmVyIiwiYW55IiwiYm9vbCIsIm9uZU9mIiwic3RyaW5nIiwiZnVuYyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNB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cEYsRUFBQUEsUUFBUSxFQUFFK0Usc0JBQVVNO0FBUkQsQ0FBckI7ZUFXZTdGLFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3JlYXRlRW1vdGlvbiBmcm9tICdAZW1vdGlvbi9jc3MvY3JlYXRlLWluc3RhbmNlJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IGNyZWF0ZUNTU0tleSBmcm9tICcuLi9jcmVhdGVDU1NLZXknO1xuaW1wb3J0IGNyZWF0ZURlYnVnIGZyb20gJy4uL3V0aWxzL2RlYnVnJztcbmltcG9ydCBFdmVudFNweSBmcm9tICcuLi9FdmVudFNweSc7XG5pbXBvcnQgRnVuY3Rpb25Db250ZXh0IGZyb20gJy4vRnVuY3Rpb25Db250ZXh0JztcbmltcG9ydCBJbnRlcm5hbENvbnRleHQgZnJvbSAnLi9JbnRlcm5hbENvbnRleHQnO1xuaW1wb3J0IFNwaW5lVG8gZnJvbSAnLi4vU3BpbmVUbyc7XG5pbXBvcnQgU3RhdGUxQ29udGV4dCBmcm9tICcuL1N0YXRlMUNvbnRleHQnO1xuaW1wb3J0IFN0YXRlMkNvbnRleHQgZnJvbSAnLi9TdGF0ZTJDb250ZXh0JztcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi9TdGF0ZUNvbnRleHQnO1xuaW1wb3J0IHN0eWxlQ29uc29sZSBmcm9tICcuLi91dGlscy9zdHlsZUNvbnNvbGUnO1xuaW1wb3J0IHVzZVN0YXRlUmVmIGZyb20gJy4uL2hvb2tzL2ludGVybmFsL3VzZVN0YXRlUmVmJztcblxuY29uc3QgREVGQVVMVF9TQ1JPTExFUiA9ICgpID0+IEluZmluaXR5O1xuY29uc3QgTUlOX0NIRUNLX0lOVEVSVkFMID0gMTc7IC8vIDEgZnJhbWVcbmNvbnN0IE1PREVfQk9UVE9NID0gJ2JvdHRvbSc7XG5jb25zdCBNT0RFX1RPUCA9ICd0b3AnO1xuY29uc3QgTkVBUl9FTkRfVEhSRVNIT0xEID0gMTtcbmNvbnN0IFNDUk9MTF9ERUNJU0lPTl9EVVJBVElPTiA9IDM0OyAvLyAyIGZyYW1lc1xuXG4vLyBXZSBwb29sIHRoZSBlbW90aW9uIG9iamVjdCBieSBub25jZS5cbi8vIFRoaXMgaXMgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGdlbmVyYXRlIHRvbyBtYW55IHVubmVlZGVkIDxzdHlsZT4gdGFncy5cbmNvbnN0IGVtb3Rpb25Qb29sID0ge307XG5cbmZ1bmN0aW9uIHNldEltbWVkaWF0ZUludGVydmFsKGZuLCBtcykge1xuICBmbigpO1xuXG4gIHJldHVybiBzZXRJbnRlcnZhbChmbiwgbXMpO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlVmlld1N0YXRlKHsgbW9kZSwgdGFyZ2V0OiB7IG9mZnNldEhlaWdodCwgc2Nyb2xsSGVpZ2h0LCBzY3JvbGxUb3AgfSB9KSB7XG4gIGNvbnN0IGF0Qm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gb2Zmc2V0SGVpZ2h0IDwgTkVBUl9FTkRfVEhSRVNIT0xEO1xuICBjb25zdCBhdFRvcCA9IHNjcm9sbFRvcCA8IE5FQVJfRU5EX1RIUkVTSE9MRDtcblxuICBjb25zdCBhdEVuZCA9IG1vZGUgPT09IE1PREVfVE9QID8gYXRUb3AgOiBhdEJvdHRvbTtcbiAgY29uc3QgYXRTdGFydCA9IG1vZGUgIT09IE1PREVfVE9QID8gYXRUb3AgOiBhdEJvdHRvbTtcblxuICByZXR1cm4ge1xuICAgIGF0Qm90dG9tLFxuICAgIGF0RW5kLFxuICAgIGF0U3RhcnQsXG4gICAgYXRUb3BcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNFbmQoYW5pbWF0ZVRvLCBtb2RlKSB7XG4gIHJldHVybiBhbmltYXRlVG8gPT09IChtb2RlID09PSBNT0RFX1RPUCA/IDAgOiAnMTAwJScpO1xufVxuXG5jb25zdCBDb21wb3NlciA9ICh7XG4gIGNoZWNrSW50ZXJ2YWwsXG4gIGNoaWxkcmVuLFxuICBkZWJvdW5jZSxcbiAgZGVidWc6IGRlYnVnRnJvbVByb3AsXG4gIGluaXRpYWxTY3JvbGxCZWhhdmlvcixcbiAgbW9kZSxcbiAgbm9uY2UsXG4gIHNjcm9sbGVyXG59KSA9PiB7XG4gIGNvbnN0IGRlYnVnID0gdXNlTWVtbygoKSA9PiBjcmVhdGVEZWJ1ZyhgPFNjcm9sbFRvQm90dG9tPmAsIHsgZm9yY2U6IGRlYnVnRnJvbVByb3AgfSksIFtkZWJ1Z0Zyb21Qcm9wXSk7XG5cbiAgbW9kZSA9IG1vZGUgPT09IE1PREVfVE9QID8gTU9ERV9UT1AgOiBNT0RFX0JPVFRPTTtcblxuICBjb25zdCBpZ25vcmVTY3JvbGxFdmVudEJlZm9yZVJlZiA9IHVzZVJlZigwKTtcbiAgY29uc3QgaW5pdGlhbFNjcm9sbEJlaGF2aW9yUmVmID0gdXNlUmVmKGluaXRpYWxTY3JvbGxCZWhhdmlvcik7XG4gIGNvbnN0IFthbmltYXRlVG8sIHNldEFuaW1hdGVUbywgYW5pbWF0ZVRvUmVmXSA9IHVzZVN0YXRlUmVmKG1vZGUgPT09IE1PREVfVE9QID8gMCA6ICcxMDAlJyk7XG4gIGNvbnN0IFt0YXJnZXQsIHNldFRhcmdldCwgdGFyZ2V0UmVmXSA9IHVzZVN0YXRlUmVmKG51bGwpO1xuXG4gIC8vIEludGVybmFsIGNvbnRleHRcbiAgY29uc3QgYW5pbWF0ZUZyb21SZWYgPSB1c2VSZWYoMCk7XG4gIGNvbnN0IG9mZnNldEhlaWdodFJlZiA9IHVzZVJlZigwKTtcbiAgY29uc3Qgc2Nyb2xsSGVpZ2h0UmVmID0gdXNlUmVmKDApO1xuXG4gIC8vIFN0YXRlIGNvbnRleHRcbiAgY29uc3QgW2F0Qm90dG9tLCBzZXRBdEJvdHRvbV0gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2F0RW5kLCBzZXRBdEVuZF0gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2F0VG9wLCBzZXRBdFRvcF0gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2F0U3RhcnQsIHNldEF0U3RhcnRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc3RpY2t5LCBzZXRTdGlja3ksIHN0aWNreVJlZl0gPSB1c2VTdGF0ZVJlZih0cnVlKTtcblxuICAvLyBIaWdoLXJhdGUgc3RhdGUgY29udGV4dFxuICBjb25zdCBzY3JvbGxQb3NpdGlvbk9ic2VydmVyc1JlZiA9IHVzZVJlZihbXSk7XG4gIGNvbnN0IG9ic2VydmVTY3JvbGxQb3NpdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIGZuID0+IHtcbiAgICAgIGNvbnN0IHsgY3VycmVudDogdGFyZ2V0IH0gPSB0YXJnZXRSZWY7XG5cbiAgICAgIHNjcm9sbFBvc2l0aW9uT2JzZXJ2ZXJzUmVmLmN1cnJlbnQucHVzaChmbik7XG4gICAgICB0YXJnZXQgJiYgZm4oeyBzY3JvbGxUb3A6IHRhcmdldC5zY3JvbGxUb3AgfSk7XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudDogc2Nyb2xsUG9zaXRpb25PYnNlcnZlcnMgfSA9IHNjcm9sbFBvc2l0aW9uT2JzZXJ2ZXJzUmVmO1xuICAgICAgICBjb25zdCBpbmRleCA9IHNjcm9sbFBvc2l0aW9uT2JzZXJ2ZXJzLmluZGV4T2YoZm4pO1xuXG4gICAgICAgIH5pbmRleCAmJiBzY3JvbGxQb3NpdGlvbk9ic2VydmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfTtcbiAgICB9LFxuICAgIFtzY3JvbGxQb3NpdGlvbk9ic2VydmVyc1JlZiwgdGFyZ2V0UmVmXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVNwaW5lVG9FbmQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgeyBjdXJyZW50OiBhbmltYXRlVG8gfSA9IGFuaW1hdGVUb1JlZjtcblxuICAgIGRlYnVnKCgpID0+IFtcbiAgICAgICclY1NwaW5lVG8lYzogJWNvbkVuZCVjIGlzIGZpcmVkLicsXG4gICAgICAuLi5zdHlsZUNvbnNvbGUoJ21hZ2VudGEnKSxcbiAgICAgIC4uLnN0eWxlQ29uc29sZSgnb3JhbmdlJyksXG4gICAgICB7IGFuaW1hdGVUbyB9XG4gICAgXSk7XG5cbiAgICBpZ25vcmVTY3JvbGxFdmVudEJlZm9yZVJlZi5jdXJyZW50ID0gRGF0ZS5ub3coKTtcblxuICAgIC8vIGhhbmRsZVNjcm9sbEVuZCBtYXkgZW5kIGF0IGEgcG9zaXRpb24gd2hpY2ggc2hvdWxkIGxvc2Ugc3RpY2tpbmVzcy5cbiAgICAvLyBJbiB0aGF0IGNhc2UsIHdlIHdpbGwgbmVlZCB0byBzZXQgc3RpY2t5IHRvIGZhbHNlIHRvIHN0b3AgdGhlIGludGVydmFsIGNoZWNrLlxuICAgIC8vIFRlc3QgY2FzZTpcbiAgICAvLyAxLiBBZGQgYSBzY3JvbGxlciB0aGF0IGFsd2F5cyByZXR1cm4gMFxuICAgIC8vIDIuIFNob3cgYSBwYW5lbCB3aXRoIG1vZGUgPT09IE1PREVfQk9UVE9NXG4gICAgLy8gMy4gUHJvZ3JhbW1hdGljYWxseSBzY3JvbGwgdG8gMCAoc2V0IGVsZW1lbnQuc2Nyb2xsVG9wID0gMClcbiAgICAvLyBFeHBlY3RlZDogaXQgc2hvdWxkIG5vdCByZXBldGl0aXZlbHkgY2FsbCBzY3JvbGxUbygwKVxuICAgIC8vICAgICAgICAgICBpdCBzaG91bGQgc2V0IHN0aWNraW5lc3MgdG8gZmFsc2VcblxuICAgIGlzRW5kKGFuaW1hdGVUbywgbW9kZSkgfHwgc2V0U3RpY2t5KGZhbHNlKTtcbiAgICBzZXRBbmltYXRlVG8obnVsbCk7XG4gIH0sIFthbmltYXRlVG9SZWYsIGRlYnVnLCBpZ25vcmVTY3JvbGxFdmVudEJlZm9yZVJlZiwgbW9kZSwgc2V0QW5pbWF0ZVRvLCBzZXRTdGlja3ldKTtcblxuICAvLyBGdW5jdGlvbiBjb250ZXh0XG4gIGNvbnN0IHNjcm9sbFRvID0gdXNlQ2FsbGJhY2soXG4gICAgKG5leHRBbmltYXRlVG8sIHsgYmVoYXZpb3IgfSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB7IGN1cnJlbnQ6IHRhcmdldCB9ID0gdGFyZ2V0UmVmO1xuXG4gICAgICBpZiAodHlwZW9mIG5leHRBbmltYXRlVG8gIT09ICdudW1iZXInICYmIG5leHRBbmltYXRlVG8gIT09ICcxMDAlJykge1xuICAgICAgICByZXR1cm4gY29uc29sZS53YXJuKCdyZWFjdC1zY3JvbGwtdG8tYm90dG9tOiBBcmd1bWVudHMgcGFzc2VkIHRvIHNjcm9sbFRvKCkgbXVzdCBiZSBlaXRoZXIgbnVtYmVyIG9yIFwiMTAwJVwiLicpO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBpdCBpcyB0cnlpbmcgdG8gc2Nyb2xsIHRvIGEgcG9zaXRpb24gd2hpY2ggaXMgbm90IFwiYXRFbmRcIiwgaXQgc2hvdWxkIHNldCBzdGlja3kgdG8gZmFsc2UgYWZ0ZXIgc2Nyb2xsIGVuZGVkLlxuXG4gICAgICBkZWJ1ZygoKSA9PiBbXG4gICAgICAgIFtcbiAgICAgICAgICBgJWNzY3JvbGxUbyVjOiBXaWxsIHNjcm9sbCB0byAlYyR7XG4gICAgICAgICAgICB0eXBlb2YgbmV4dEFuaW1hdGVUbyA9PT0gJ251bWJlcicgPyBuZXh0QW5pbWF0ZVRvICsgJ3B4JyA6IG5leHRBbmltYXRlVG8ucmVwbGFjZSgvJS9ndSwgJyUlJylcbiAgICAgICAgICB9JWNgLFxuICAgICAgICAgIC4uLnN0eWxlQ29uc29sZSgnbGltZScsICcnKSxcbiAgICAgICAgICAuLi5zdHlsZUNvbnNvbGUoJ3B1cnBsZScpXG4gICAgICAgIF0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWhhdmlvcixcbiAgICAgICAgICBuZXh0QW5pbWF0ZVRvLFxuICAgICAgICAgIHRhcmdldFxuICAgICAgICB9XG4gICAgICBdKTtcblxuICAgICAgaWYgKGJlaGF2aW9yID09PSAnYXV0bycpIHtcbiAgICAgICAgLy8gU3RvcCBhbnkgZXhpc3RpbmcgYW5pbWF0aW9uXG4gICAgICAgIGhhbmRsZVNwaW5lVG9FbmQoKTtcblxuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgLy8gSnVtcCB0byB0aGUgc2Nyb2xsIHBvc2l0aW9uXG4gICAgICAgICAgdGFyZ2V0LnNjcm9sbFRvcCA9IG5leHRBbmltYXRlVG8gPT09ICcxMDAlJyA/IHRhcmdldC5zY3JvbGxIZWlnaHQgLSB0YXJnZXQub2Zmc2V0SGVpZ2h0IDogbmV4dEFuaW1hdGVUbztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmVoYXZpb3IgIT09ICdzbW9vdGgnICYmXG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgJ3JlYWN0LXNjcm9sbC10by1ib3R0b206IFBsZWFzZSBzZXQgXCJiZWhhdmlvclwiIHdoZW4gY2FsbGluZyBcInNjcm9sbFRvXCIuIEluIGZ1dHVyZSB2ZXJzaW9ucywgdGhlIGRlZmF1bHQgYmVoYXZpb3Igd2lsbCBiZSBjaGFuZ2VkIGZyb20gc21vb3RoIHNjcm9sbGluZyB0byBkaXNjcmV0ZSBzY3JvbGxpbmcgdG8gYWxpZ24gd2l0aCBIVE1MIFN0YW5kYXJkLidcbiAgICAgICAgICApO1xuXG4gICAgICAgIHNldEFuaW1hdGVUbyhuZXh0QW5pbWF0ZVRvKTtcbiAgICAgIH1cblxuICAgICAgLy8gVGhpcyBpcyBmb3IgaGFuZGxpbmcgYSBjYXNlLiBXaGVuIGNhbGxpbmcgc2Nyb2xsVG8oJzEwMCUnLCB7IGJlaGF2aW9yOiAnYXV0bycgfSkgbXVsdGlwbGUgdGltZXMsIGl0IHdvdWxkIGxvc2Ugc3RpY2tpbmVzcy5cbiAgICAgIGlmIChpc0VuZChuZXh0QW5pbWF0ZVRvLCBtb2RlKSkge1xuICAgICAgICBkZWJ1ZygoKSA9PiBbXG4gICAgICAgICAgW1xuICAgICAgICAgICAgYCVjc2Nyb2xsVG8lYzogU2Nyb2xsaW5nIHRvIGVuZCwgd2lsbCBzZXQgc3RpY2t5IHRvICVjdHJ1ZSVjLmAsXG4gICAgICAgICAgICAuLi5zdHlsZUNvbnNvbGUoJ2xpbWUnLCAnJyksXG4gICAgICAgICAgICAuLi5zdHlsZUNvbnNvbGUoJ3B1cnBsZScpXG4gICAgICAgICAgXSxcbiAgICAgICAgICBbeyBtb2RlLCBuZXh0QW5pbWF0ZVRvIH1dXG4gICAgICAgIF0pO1xuXG4gICAgICAgIHNldFN0aWNreSh0cnVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtkZWJ1ZywgaGFuZGxlU3BpbmVUb0VuZCwgbW9kZSwgc2V0QW5pbWF0ZVRvLCBzZXRTdGlja3ksIHRhcmdldFJlZl1cbiAgKTtcblxuICBjb25zdCBzY3JvbGxUb0JvdHRvbSA9IHVzZUNhbGxiYWNrKFxuICAgICh7IGJlaGF2aW9yIH0gPSB7fSkgPT4ge1xuICAgICAgZGVidWcoKCkgPT4gWyclY3Njcm9sbFRvQm90dG9tJWM6IENhbGxlZCcsIC4uLnN0eWxlQ29uc29sZSgneWVsbG93JywgJycpXSk7XG5cbiAgICAgIGJlaGF2aW9yICE9PSAnc21vb3RoJyAmJlxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ3JlYWN0LXNjcm9sbC10by1ib3R0b206IFBsZWFzZSBzZXQgXCJiZWhhdmlvclwiIHdoZW4gY2FsbGluZyBcInNjcm9sbFRvQm90dG9tXCIuIEluIGZ1dHVyZSB2ZXJzaW9ucywgdGhlIGRlZmF1bHQgYmVoYXZpb3Igd2lsbCBiZSBjaGFuZ2VkIGZyb20gc21vb3RoIHNjcm9sbGluZyB0byBkaXNjcmV0ZSBzY3JvbGxpbmcgdG8gYWxpZ24gd2l0aCBIVE1MIFN0YW5kYXJkLidcbiAgICAgICAgKTtcblxuICAgICAgc2Nyb2xsVG8oJzEwMCUnLCB7IGJlaGF2aW9yOiBiZWhhdmlvciB8fCAnc21vb3RoJyB9KTtcbiAgICB9LFxuICAgIFtkZWJ1Zywgc2Nyb2xsVG9dXG4gICk7XG5cbiAgY29uc3Qgc2Nyb2xsVG9Ub3AgPSB1c2VDYWxsYmFjayhcbiAgICAoeyBiZWhhdmlvciB9ID0ge30pID0+IHtcbiAgICAgIGRlYnVnKCgpID0+IFsnJWNzY3JvbGxUb1RvcCVjOiBDYWxsZWQnLCAuLi5zdHlsZUNvbnNvbGUoJ3llbGxvdycsICcnKV0pO1xuXG4gICAgICBiZWhhdmlvciAhPT0gJ3Ntb290aCcgJiZcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdyZWFjdC1zY3JvbGwtdG8tYm90dG9tOiBQbGVhc2Ugc2V0IFwiYmVoYXZpb3JcIiB3aGVuIGNhbGxpbmcgXCJzY3JvbGxUb1RvcFwiLiBJbiBmdXR1cmUgdmVyc2lvbnMsIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHdpbGwgYmUgY2hhbmdlZCBmcm9tIHNtb290aCBzY3JvbGxpbmcgdG8gZGlzY3JldGUgc2Nyb2xsaW5nIHRvIGFsaWduIHdpdGggSFRNTCBTdGFuZGFyZC4nXG4gICAgICAgICk7XG5cbiAgICAgIHNjcm9sbFRvKDAsIHsgYmVoYXZpb3I6IGJlaGF2aW9yIHx8ICdzbW9vdGgnIH0pO1xuICAgIH0sXG4gICAgW2RlYnVnLCBzY3JvbGxUb11cbiAgKTtcblxuICBjb25zdCBzY3JvbGxUb0VuZCA9IHVzZUNhbGxiYWNrKFxuICAgICh7IGJlaGF2aW9yIH0gPSB7fSkgPT4ge1xuICAgICAgZGVidWcoKCkgPT4gWyclY3Njcm9sbFRvRW5kJWM6IENhbGxlZCcsIC4uLnN0eWxlQ29uc29sZSgneWVsbG93JywgJycpXSk7XG5cbiAgICAgIGJlaGF2aW9yICE9PSAnc21vb3RoJyAmJlxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ3JlYWN0LXNjcm9sbC10by1ib3R0b206IFBsZWFzZSBzZXQgXCJiZWhhdmlvclwiIHdoZW4gY2FsbGluZyBcInNjcm9sbFRvRW5kXCIuIEluIGZ1dHVyZSB2ZXJzaW9ucywgdGhlIGRlZmF1bHQgYmVoYXZpb3Igd2lsbCBiZSBjaGFuZ2VkIGZyb20gc21vb3RoIHNjcm9sbGluZyB0byBkaXNjcmV0ZSBzY3JvbGxpbmcgdG8gYWxpZ24gd2l0aCBIVE1MIFN0YW5kYXJkLidcbiAgICAgICAgKTtcblxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHsgYmVoYXZpb3I6IGJlaGF2aW9yIHx8ICdzbW9vdGgnIH07XG5cbiAgICAgIG1vZGUgPT09IE1PREVfVE9QID8gc2Nyb2xsVG9Ub3Aob3B0aW9ucykgOiBzY3JvbGxUb0JvdHRvbShvcHRpb25zKTtcbiAgICB9LFxuICAgIFtkZWJ1ZywgbW9kZSwgc2Nyb2xsVG9Cb3R0b20sIHNjcm9sbFRvVG9wXVxuICApO1xuXG4gIGNvbnN0IHNjcm9sbFRvU3RhcnQgPSB1c2VDYWxsYmFjayhcbiAgICAoeyBiZWhhdmlvciB9ID0ge30pID0+IHtcbiAgICAgIGRlYnVnKCgpID0+IFsnJWNzY3JvbGxUb1N0YXJ0JWM6IENhbGxlZCcsIC4uLnN0eWxlQ29uc29sZSgneWVsbG93JywgJycpXSk7XG5cbiAgICAgIGJlaGF2aW9yICE9PSAnc21vb3RoJyAmJlxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ3JlYWN0LXNjcm9sbC10by1ib3R0b206IFBsZWFzZSBzZXQgXCJiZWhhdmlvclwiIHdoZW4gY2FsbGluZyBcInNjcm9sbFRvU3RhcnRcIi4gSW4gZnV0dXJlIHZlcnNpb25zLCB0aGUgZGVmYXVsdCBiZWhhdmlvciB3aWxsIGJlIGNoYW5nZWQgZnJvbSBzbW9vdGggc2Nyb2xsaW5nIHRvIGRpc2NyZXRlIHNjcm9sbGluZyB0byBhbGlnbiB3aXRoIEhUTUwgU3RhbmRhcmQuJ1xuICAgICAgICApO1xuXG4gICAgICBjb25zdCBvcHRpb25zID0geyBiZWhhdmlvcjogYmVoYXZpb3IgfHwgJ3Ntb290aCcgfTtcblxuICAgICAgbW9kZSA9PT0gTU9ERV9UT1AgPyBzY3JvbGxUb0JvdHRvbShvcHRpb25zKSA6IHNjcm9sbFRvVG9wKG9wdGlvbnMpO1xuICAgIH0sXG4gICAgW2RlYnVnLCBtb2RlLCBzY3JvbGxUb0JvdHRvbSwgc2Nyb2xsVG9Ub3BdXG4gICk7XG5cbiAgY29uc3Qgc2Nyb2xsVG9TdGlja3kgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgeyBjdXJyZW50OiB0YXJnZXQgfSA9IHRhcmdldFJlZjtcblxuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIGlmIChpbml0aWFsU2Nyb2xsQmVoYXZpb3JSZWYuY3VycmVudCA9PT0gJ2F1dG8nKSB7XG4gICAgICAgIGRlYnVnKCgpID0+IFtgJWN0YXJnZXQgY2hhbmdlZCVjOiBJbml0aWFsIHNjcm9sbGAsIC4uLnN0eWxlQ29uc29sZSgnYmx1ZScpXSk7XG5cbiAgICAgICAgdGFyZ2V0LnNjcm9sbFRvcCA9IG1vZGUgPT09IE1PREVfVE9QID8gMCA6IHRhcmdldC5zY3JvbGxIZWlnaHQgLSB0YXJnZXQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICBpbml0aWFsU2Nyb2xsQmVoYXZpb3JSZWYuY3VycmVudCA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gc2Nyb2xsVG9FbmQoKS5cbiAgICAgIC8vIEluc3RlYWQgb2Ygc2Nyb2xsaW5nIHRvIGVuZCwgaXQgd2lsbCBjYWxsIHByb3BzLnNjcm9sbGVyKCkgdG8gZGV0ZXJtaW5lcyBob3cgZmFyIGl0IHNob3VsZCBzY3JvbGwuXG4gICAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvdWxkIGJlIGNhbGxlZCB3aGlsZSBpdCBpcyBhdXRvLXNjcm9sbGluZy5cblxuICAgICAgY29uc3QgeyBjdXJyZW50OiBhbmltYXRlRnJvbSB9ID0gYW5pbWF0ZUZyb21SZWY7XG4gICAgICBjb25zdCB7IG9mZnNldEhlaWdodCwgc2Nyb2xsSGVpZ2h0LCBzY3JvbGxUb3AgfSA9IHRhcmdldDtcblxuICAgICAgY29uc3QgbWF4VmFsdWUgPSBtb2RlID09PSBNT0RFX1RPUCA/IDAgOiBNYXRoLm1heCgwLCBzY3JvbGxIZWlnaHQgLSBvZmZzZXRIZWlnaHQgLSBzY3JvbGxUb3ApO1xuICAgICAgY29uc3QgbWluVmFsdWUgPSBNYXRoLm1heCgwLCBhbmltYXRlRnJvbSAtIHNjcm9sbFRvcCk7XG5cbiAgICAgIGNvbnN0IHJhd05leHRWYWx1ZSA9IHNjcm9sbGVyKHsgbWF4VmFsdWUsIG1pblZhbHVlLCBvZmZzZXRIZWlnaHQsIHNjcm9sbEhlaWdodCwgc2Nyb2xsVG9wIH0pO1xuXG4gICAgICBjb25zdCBuZXh0VmFsdWUgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihtYXhWYWx1ZSwgcmF3TmV4dFZhbHVlKSk7XG5cbiAgICAgIGxldCBuZXh0QW5pbWF0ZVRvO1xuXG4gICAgICBpZiAobW9kZSA9PT0gTU9ERV9UT1AgfHwgbmV4dFZhbHVlICE9PSBtYXhWYWx1ZSkge1xuICAgICAgICBuZXh0QW5pbWF0ZVRvID0gc2Nyb2xsVG9wICsgbmV4dFZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2hlbiBzY3JvbGxpbmcgdG8gYm90dG9tLCB3ZSBzaG91bGQgc2Nyb2xsIHRvIFwiMTAwJVwiLlxuICAgICAgICAvLyBPdGhlcndpc2UsIGlmIHdlIHNjcm9sbCB0byBhbnkgbnVtYmVyLCBpdCB3aWxsIGxvc2Ugc3RpY2tpbmVzcyB3aGVuIGVsZW1lbnRzIGFyZSBhZGRpbmcgdG9vIGZhc3QuXG4gICAgICAgIC8vIFwiMTAwJVwiIGlzIGEgc3BlY2lhbCBhcmd1bWVudCBpbnRlbmRlZCB0byBtYWtlIHN1cmUgc3RpY2tpbmVzcyBpcyBub3QgbG9zdCB3aGlsZSBuZXcgZWxlbWVudHMgYXJlIGJlaW5nIGFkZGVkLlxuICAgICAgICBuZXh0QW5pbWF0ZVRvID0gJzEwMCUnO1xuICAgICAgfVxuXG4gICAgICBkZWJ1ZygoKSA9PiBbXG4gICAgICAgIFtcbiAgICAgICAgICBgJWNzY3JvbGxUb1N0aWNreSVjOiBXaWxsIGFuaW1hdGUgZnJvbSAlYyR7YW5pbWF0ZUZyb219cHglYyB0byAlYyR7XG4gICAgICAgICAgICB0eXBlb2YgbmV4dEFuaW1hdGVUbyA9PT0gJ251bWJlcicgPyBuZXh0QW5pbWF0ZVRvICsgJ3B4JyA6IG5leHRBbmltYXRlVG8ucmVwbGFjZSgvJS9ndSwgJyUlJylcbiAgICAgICAgICB9JWMgKCVjJHsobmV4dEFuaW1hdGVUbyA9PT0gJzEwMCUnID8gbWF4VmFsdWUgOiBuZXh0QW5pbWF0ZVRvKSArIGFuaW1hdGVGcm9tfXB4JWMpYCxcbiAgICAgICAgICAuLi5zdHlsZUNvbnNvbGUoJ29yYW5nZScpLFxuICAgICAgICAgIC4uLnN0eWxlQ29uc29sZSgncHVycGxlJyksXG4gICAgICAgICAgLi4uc3R5bGVDb25zb2xlKCdwdXJwbGUnKSxcbiAgICAgICAgICAuLi5zdHlsZUNvbnNvbGUoJ3B1cnBsZScpXG4gICAgICAgIF0sXG4gICAgICAgIHtcbiAgICAgICAgICBhbmltYXRlRnJvbSxcbiAgICAgICAgICBtYXhWYWx1ZSxcbiAgICAgICAgICBtaW5WYWx1ZSxcbiAgICAgICAgICBuZXh0QW5pbWF0ZVRvLFxuICAgICAgICAgIG5leHRWYWx1ZSxcbiAgICAgICAgICBvZmZzZXRIZWlnaHQsXG4gICAgICAgICAgcmF3TmV4dFZhbHVlLFxuICAgICAgICAgIHNjcm9sbEhlaWdodCxcbiAgICAgICAgICBzY3JvbGxUb3BcbiAgICAgICAgfVxuICAgICAgXSk7XG5cbiAgICAgIHNjcm9sbFRvKG5leHRBbmltYXRlVG8sIHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgIH1cbiAgfSwgW2FuaW1hdGVGcm9tUmVmLCBkZWJ1ZywgbW9kZSwgc2Nyb2xsZXIsIHNjcm9sbFRvLCB0YXJnZXRSZWZdKTtcblxuICBjb25zdCBoYW5kbGVTY3JvbGwgPSB1c2VDYWxsYmFjayhcbiAgICAoeyB0aW1lU3RhbXBMb3cgfSkgPT4ge1xuICAgICAgY29uc3QgeyBjdXJyZW50OiBhbmltYXRlVG8gfSA9IGFuaW1hdGVUb1JlZjtcbiAgICAgIGNvbnN0IHsgY3VycmVudDogdGFyZ2V0IH0gPSB0YXJnZXRSZWY7XG5cbiAgICAgIGNvbnN0IGFuaW1hdGluZyA9IGFuaW1hdGVUbyAhPT0gbnVsbDtcblxuICAgICAgLy8gQ3VycmVudGx5LCB0aGVyZSBhcmUgbm8gcmVsaWFibGUgd2F5IHRvIGNoZWNrIGlmIHRoZSBcInNjcm9sbFwiIGV2ZW50IGlzIHRyaWdnZXIgZHVlIHRvXG4gICAgICAvLyB1c2VyIGdlc3R1cmUsIHByb2dyYW1tYXRpYyBzY3JvbGxpbmcsIG9yIENocm9tZS1zeW50aGVzaXplZCBcInNjcm9sbFwiIGV2ZW50IHRvIGNvbXBlbnNhdGUgc2l6ZSBjaGFuZ2UuXG4gICAgICAvLyBUaHVzLCB3ZSB1c2Ugb3VyIGJlc3QtZWZmb3J0IHRvIGd1ZXNzIGlmIGl0IGlzIHRyaWdnZXJlZCBieSB1c2VyIGdlc3R1cmUsIGFuZCBkaXNhYmxlIHN0aWNreSBpZiBpdCBpcyBoZWFkaW5nIHRvd2FyZHMgdGhlIHN0YXJ0IGRpcmVjdGlvbi5cblxuICAgICAgaWYgKHRpbWVTdGFtcExvdyA8PSBpZ25vcmVTY3JvbGxFdmVudEJlZm9yZVJlZi5jdXJyZW50IHx8ICF0YXJnZXQpIHtcbiAgICAgICAgLy8gU2luY2Ugd2UgZGVib3VuY2UgXCJzY3JvbGxcIiBldmVudCwgdGhpcyBoYW5kbGVyIG1pZ2h0IGJlIGNhbGxlZCBhZnRlciBzcGluZVRvLm9uRW5kIChhLmsuYS4gYXJ0aWZpY2lhbCBzY3JvbGxpbmcpLlxuICAgICAgICAvLyBXZSBzaG91bGQgaWdub3JlIGRlYm91bmNlZCBldmVudCBmaXJlZCBhZnRlciBzY3JvbGxFbmQsIGJlY2F1c2Ugd2l0aG91dCBza2lwcGluZyB0aGVtLCB0aGUgdXNlckluaXRpYXRlZFNjcm9sbCBjYWxjdWxhdGVkIGJlbG93IHdpbGwgbm90IGJlIGFjY3VyYXRlLlxuICAgICAgICAvLyBUaHVzLCBvbiBhIGZhc3QgbWFjaGluZSwgYWRkaW5nIGVsZW1lbnRzIHN1cGVyIGZhc3Qgd2lsbCBsb3NlIHRoZSBcInN0aWNraW5lc3NcIi5cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXRCb3R0b20sIGF0RW5kLCBhdFN0YXJ0LCBhdFRvcCB9ID0gY29tcHV0ZVZpZXdTdGF0ZSh7IG1vZGUsIHRhcmdldCB9KTtcblxuICAgICAgc2V0QXRCb3R0b20oYXRCb3R0b20pO1xuICAgICAgc2V0QXRFbmQoYXRFbmQpO1xuICAgICAgc2V0QXRTdGFydChhdFN0YXJ0KTtcbiAgICAgIHNldEF0VG9wKGF0VG9wKTtcblxuICAgICAgLy8gQ2hyb21lIHdpbGwgZW1pdCBcInN5bnRoZXRpY1wiIHNjcm9sbCBldmVudCBpZiB0aGUgY29udGFpbmVyIGlzIHJlc2l6ZWQgb3IgYW4gZWxlbWVudCBpcyBhZGRlZFxuICAgICAgLy8gV2UgbmVlZCB0byBpZ25vcmUgdGhlc2UgXCJzeW50aGV0aWNcIiBldmVudHNcbiAgICAgIC8vIFJlcHJvOiBJbiBwbGF5Z3JvdW5kLCBwcmVzcyA0LTEtNS0xLTEgKHNtYWxsLCBhZGQgb25lLCBub3JtYWwsIGFkZCBvbmUsIGFkZCBvbmUpXG4gICAgICAvLyAgICAgICAgTm9tYXR0ZXIgaG93IGZhc3Qgb3Igc2xvdyB0aGUgc2VxdWVuY2UgaXMgYmVpbmcgcHJlc3NlZCwgaXQgc2hvdWxkIHN0aWxsIHN0aWNrIHRvIHRoZSBib3R0b21cbiAgICAgIGNvbnN0IHsgb2Zmc2V0SGVpZ2h0OiBuZXh0T2Zmc2V0SGVpZ2h0LCBzY3JvbGxIZWlnaHQ6IG5leHRTY3JvbGxIZWlnaHQgfSA9IHRhcmdldDtcbiAgICAgIGNvbnN0IHsgY3VycmVudDogb2Zmc2V0SGVpZ2h0IH0gPSBvZmZzZXRIZWlnaHRSZWY7XG4gICAgICBjb25zdCB7IGN1cnJlbnQ6IHNjcm9sbEhlaWdodCB9ID0gc2Nyb2xsSGVpZ2h0UmVmO1xuICAgICAgY29uc3Qgb2Zmc2V0SGVpZ2h0Q2hhbmdlZCA9IG5leHRPZmZzZXRIZWlnaHQgIT09IG9mZnNldEhlaWdodDtcbiAgICAgIGNvbnN0IHNjcm9sbEhlaWdodENoYW5nZWQgPSBuZXh0U2Nyb2xsSGVpZ2h0ICE9PSBzY3JvbGxIZWlnaHQ7XG5cbiAgICAgIGlmIChvZmZzZXRIZWlnaHRDaGFuZ2VkKSB7XG4gICAgICAgIG9mZnNldEhlaWdodFJlZi5jdXJyZW50ID0gbmV4dE9mZnNldEhlaWdodDtcbiAgICAgIH1cblxuICAgICAgaWYgKHNjcm9sbEhlaWdodENoYW5nZWQpIHtcbiAgICAgICAgc2Nyb2xsSGVpZ2h0UmVmLmN1cnJlbnQgPSBuZXh0U2Nyb2xsSGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICAvLyBTdGlja3kgbWVhbnM6XG4gICAgICAvLyAtIElmIGl0IGlzIHNjcm9sbGVkIHByb2dyYW1hdGljYWxseSwgd2UgYXJlIHN0aWxsIGluIHN0aWNreSBtb2RlXG4gICAgICAvLyAtIElmIGl0IGlzIHNjcm9sbGVkIGJ5IHRoZSB1c2VyLCB0aGVuIHN0aWNreSBtZWFucyBpZiB3ZSBhcmUgYXQgdGhlIGVuZFxuXG4gICAgICAvLyBPbmx5IHVwZGF0ZSBzdGlja2luZXNzIGlmIHRoZSBzY3JvbGwgZXZlbnQgaXMgbm90IGR1ZSB0byBzeW50aGV0aWMgc2Nyb2xsIGRvbmUgYnkgQ2hyb21lXG4gICAgICBpZiAoIW9mZnNldEhlaWdodENoYW5nZWQgJiYgIXNjcm9sbEhlaWdodENoYW5nZWQpIHtcbiAgICAgICAgLy8gV2UgYXJlIHN0aWNreSBpZiB3ZSBhcmUgYW5pbWF0aW5nIHRvIHRoZSBlbmQsIG9yIHdlIGFyZSBhbHJlYWR5IGF0IHRoZSBlbmQuXG4gICAgICAgIC8vIFdlIGNhbiBiZSBcImFuaW1hdGluZyBidXQgbm90IHN0aWNreVwiIGJ5IGNhbGxpbmcgXCJzY3JvbGxUbygxMDApXCIgd2hlcmUgdGhlIGNvbnRhaW5lciBzY3JvbGxIZWlnaHQgaXMgMjAwcHguXG4gICAgICAgIGNvbnN0IG5leHRTdGlja3kgPSAoYW5pbWF0aW5nICYmIGlzRW5kKGFuaW1hdGVUbywgbW9kZSkpIHx8IGF0RW5kO1xuXG4gICAgICAgIGlmIChzdGlja3lSZWYuY3VycmVudCAhPT0gbmV4dFN0aWNreSkge1xuICAgICAgICAgIGRlYnVnKCgpID0+IFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgYCVjb25TY3JvbGwlYzogJWNzZXRTdGlja3klYyglYyR7bmV4dFN0aWNreX0lYylgLFxuICAgICAgICAgICAgICAuLi5zdHlsZUNvbnNvbGUoJ3JlZCcpLFxuICAgICAgICAgICAgICAuLi5zdHlsZUNvbnNvbGUoJ3JlZCcpLFxuICAgICAgICAgICAgICAuLi5zdHlsZUNvbnNvbGUoJ3B1cnBsZScpXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBgKGFuaW1hdGluZyA9ICVjJHthbmltYXRpbmd9JWMgJiYgaXNFbmQgPSAlYyR7aXNFbmQoYW5pbWF0ZVRvLCBtb2RlKX0lYykgfHwgYXRFbmQgPSAlYyR7YXRFbmR9JWNgLFxuICAgICAgICAgICAgICAuLi5zdHlsZUNvbnNvbGUoJ3B1cnBsZScpLFxuICAgICAgICAgICAgICAuLi5zdHlsZUNvbnNvbGUoJ3B1cnBsZScpLFxuICAgICAgICAgICAgICAuLi5zdHlsZUNvbnNvbGUoJ3B1cnBsZScpLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW5nLFxuICAgICAgICAgICAgICAgIGFuaW1hdGVUbyxcbiAgICAgICAgICAgICAgICBhdEVuZCxcbiAgICAgICAgICAgICAgICBtb2RlLFxuICAgICAgICAgICAgICAgIG9mZnNldEhlaWdodDogdGFyZ2V0Lm9mZnNldEhlaWdodCxcbiAgICAgICAgICAgICAgICBzY3JvbGxIZWlnaHQ6IHRhcmdldC5zY3JvbGxIZWlnaHQsXG4gICAgICAgICAgICAgICAgc3RpY2t5OiBzdGlja3lSZWYuY3VycmVudCxcbiAgICAgICAgICAgICAgICBuZXh0U3RpY2t5XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICBdKTtcblxuICAgICAgICAgIHNldFN0aWNreShuZXh0U3RpY2t5KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzdGlja3lSZWYuY3VycmVudCkge1xuICAgICAgICBkZWJ1ZygoKSA9PiBbXG4gICAgICAgICAgW1xuICAgICAgICAgICAgYCVjb25TY3JvbGwlYzogU2l6ZSBjaGFuZ2VkIHdoaWxlIHN0aWNreSwgY2FsbGluZyAlY3Njcm9sbFRvU3RpY2t5KCklY2AsXG4gICAgICAgICAgICAuLi5zdHlsZUNvbnNvbGUoJ3JlZCcpLFxuICAgICAgICAgICAgLi4uc3R5bGVDb25zb2xlKCdvcmFuZ2UnKSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgb2Zmc2V0SGVpZ2h0Q2hhbmdlZCxcbiAgICAgICAgICAgICAgc2Nyb2xsSGVpZ2h0Q2hhbmdlZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmV4dE9mZnNldEhlaWdodCxcbiAgICAgICAgICAgIHByZXZPZmZzZXRIZWlnaHQ6IG9mZnNldEhlaWdodCxcbiAgICAgICAgICAgIG5leHRTY3JvbGxIZWlnaHQsXG4gICAgICAgICAgICBwcmV2U2Nyb2xsSGVpZ2h0OiBzY3JvbGxIZWlnaHRcbiAgICAgICAgICB9XG4gICAgICAgIF0pO1xuXG4gICAgICAgIHNjcm9sbFRvU3RpY2t5KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wOiBhY3R1YWxTY3JvbGxUb3AgfSA9IHRhcmdldDtcblxuICAgICAgc2Nyb2xsUG9zaXRpb25PYnNlcnZlcnNSZWYuY3VycmVudC5mb3JFYWNoKG9ic2VydmVyID0+IG9ic2VydmVyKHsgc2Nyb2xsVG9wOiBhY3R1YWxTY3JvbGxUb3AgfSkpO1xuICAgIH0sXG4gICAgW1xuICAgICAgYW5pbWF0ZVRvUmVmLFxuICAgICAgZGVidWcsXG4gICAgICBpZ25vcmVTY3JvbGxFdmVudEJlZm9yZVJlZixcbiAgICAgIG1vZGUsXG4gICAgICBvZmZzZXRIZWlnaHRSZWYsXG4gICAgICBzY3JvbGxIZWlnaHRSZWYsXG4gICAgICBzY3JvbGxQb3NpdGlvbk9ic2VydmVyc1JlZixcbiAgICAgIHNjcm9sbFRvU3RpY2t5LFxuICAgICAgc2V0QXRCb3R0b20sXG4gICAgICBzZXRBdEVuZCxcbiAgICAgIHNldEF0U3RhcnQsXG4gICAgICBzZXRBdFRvcCxcbiAgICAgIHNldFN0aWNreSxcbiAgICAgIHN0aWNreVJlZixcbiAgICAgIHRhcmdldFJlZlxuICAgIF1cbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIGxldCBzdGlja3lCdXROb3RBdEVuZFNpbmNlID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRJbW1lZGlhdGVJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudDogdGFyZ2V0IH0gPSB0YXJnZXRSZWY7XG4gICAgICAgIGNvbnN0IGFuaW1hdGluZyA9IGFuaW1hdGVUb1JlZi5jdXJyZW50ICE9PSBudWxsO1xuXG4gICAgICAgIGlmIChzdGlja3lSZWYuY3VycmVudCkge1xuICAgICAgICAgIGlmICghY29tcHV0ZVZpZXdTdGF0ZSh7IG1vZGUsIHRhcmdldCB9KS5hdEVuZCkge1xuICAgICAgICAgICAgaWYgKCFzdGlja3lCdXROb3RBdEVuZFNpbmNlKSB7XG4gICAgICAgICAgICAgIHN0aWNreUJ1dE5vdEF0RW5kU2luY2UgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChEYXRlLm5vdygpIC0gc3RpY2t5QnV0Tm90QXRFbmRTaW5jZSA+IFNDUk9MTF9ERUNJU0lPTl9EVVJBVElPTikge1xuICAgICAgICAgICAgICAvLyBRdWlya3M6IEluIEZpcmVmb3gsIGFmdGVyIHVzZXIgc2Nyb2xsIGRvd24sIEZpcmVmb3ggZG8gdHdvIHRoaW5nczpcbiAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBTZXQgdG8gYSBuZXcgXCJzY3JvbGxUb3BcIlxuICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIEZpcmUgXCJzY3JvbGxcIiBldmVudFxuICAgICAgICAgICAgICAvLyAgICAgICAgIEZvciB3aGF0IHdlIG9ic2VydmVkLCAjMSBpcyBmaXJlZCBhYm91dCAyMG1zIGJlZm9yZSAjMi4gVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB0aGlzIHN0aWNreUNoZWNrVGltZW91dCBpcyBiZWluZyBzY2hlZHVsZWQgYmV0d2VlbiAxIGFuZCAyLlxuICAgICAgICAgICAgICAvLyAgICAgICAgIFRoYXQgbWVhbnMsIGlmIHdlIGp1c3QgbG9vayBhdCAjMSB0byBkZWNpZGUgaWYgd2Ugc2hvdWxkIHNjcm9sbCwgd2Ugd2lsbCBhbHdheXMgc2Nyb2xsLCBpbiBvcHBvc2UgdG8gdGhlIHVzZXIncyBpbnRlbnRpb24uXG4gICAgICAgICAgICAgIC8vIFJlcHJvOiBPcGVuIEZpcmVmb3gsIHNldCBjaGVja0ludGVydmFsIHRvIGEgbG93ZXIgbnVtYmVyLCBhbmQgdHJ5IHRvIHNjcm9sbCBieSBkcmFnZ2luZyB0aGUgc2Nyb2xsIGhhbmRsZXIuIEl0IHdpbGwganVtcCBiYWNrLlxuXG4gICAgICAgICAgICAgIC8vIFRoZSBcImFuaW1hdGluZ1wiIGNoZWNrIHdpbGwgbWFrZSBzdXJlIHN0aWNraW5lc3MgaXMgbm90IGxvc3Qgd2hlbiBlbGVtZW50cyBhcmUgYWRkaW5nIGF0IGEgdmVyeSBmYXN0IHBhY2UuXG4gICAgICAgICAgICAgIGlmICghYW5pbWF0aW5nKSB7XG4gICAgICAgICAgICAgICAgYW5pbWF0ZUZyb21SZWYuY3VycmVudCA9IHRhcmdldC5zY3JvbGxUb3A7XG5cbiAgICAgICAgICAgICAgICBkZWJ1ZygoKSA9PiBbXG4gICAgICAgICAgICAgICAgICBgJWNJbnRlcnZhbCBjaGVjayVjOiBTaG91bGQgc3RpY2t5IGJ1dCBub3QgYXQgZW5kLCBjYWxsaW5nICVjc2Nyb2xsVG9TdGlja3koKSVjIHRvIHNjcm9sbGAsXG4gICAgICAgICAgICAgICAgICAuLi5zdHlsZUNvbnNvbGUoJ25hdnknKSxcbiAgICAgICAgICAgICAgICAgIC4uLnN0eWxlQ29uc29sZSgnb3JhbmdlJylcbiAgICAgICAgICAgICAgICBdKTtcblxuICAgICAgICAgICAgICAgIHNjcm9sbFRvU3RpY2t5KCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBzdGlja3lCdXROb3RBdEVuZFNpbmNlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0aWNreUJ1dE5vdEF0RW5kU2luY2UgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LnNjcm9sbEhlaWdodCA8PSB0YXJnZXQub2Zmc2V0SGVpZ2h0ICYmICFzdGlja3lSZWYuY3VycmVudCkge1xuICAgICAgICAgIC8vIFdoZW4gdGhlIGNvbnRhaW5lciBpcyBlbXB0aWVkLCB3ZSB3aWxsIHNldCBzdGlja3kgYmFjayB0byB0cnVlLlxuXG4gICAgICAgICAgZGVidWcoKCkgPT4gW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBgJWNJbnRlcnZhbCBjaGVjayVjOiBDb250YWluZXIgaXMgZW1wdGllZCwgc2V0dGluZyBzdGlja3kgYmFjayB0byAlY3RydWUlY2AsXG4gICAgICAgICAgICAgIC4uLnN0eWxlQ29uc29sZSgnbmF2eScpLFxuICAgICAgICAgICAgICAuLi5zdHlsZUNvbnNvbGUoJ3B1cnBsZScpXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0SGVpZ2h0OiB0YXJnZXQub2Zmc2V0SGVpZ2h0LFxuICAgICAgICAgICAgICAgIHNjcm9sbEhlaWdodDogdGFyZ2V0LnNjcm9sbEhlaWdodCxcbiAgICAgICAgICAgICAgICBzdGlja3k6IHN0aWNreVJlZi5jdXJyZW50XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICBdKTtcblxuICAgICAgICAgIHNldFN0aWNreSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSwgTWF0aC5tYXgoTUlOX0NIRUNLX0lOVEVSVkFMLCBjaGVja0ludGVydmFsKSB8fCBNSU5fQ0hFQ0tfSU5URVJWQUwpO1xuXG4gICAgICByZXR1cm4gKCkgPT4gY2xlYXJJbnRlcnZhbCh0aW1lb3V0KTtcbiAgICB9XG4gIH0sIFthbmltYXRlVG9SZWYsIGNoZWNrSW50ZXJ2YWwsIGRlYnVnLCBtb2RlLCBzY3JvbGxUb1N0aWNreSwgc2V0U3RpY2t5LCBzdGlja3lSZWYsIHRhcmdldCwgdGFyZ2V0UmVmXSk7XG5cbiAgY29uc3Qgc3R5bGVUb0NsYXNzTmFtZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGVtb3Rpb24gPVxuICAgICAgZW1vdGlvblBvb2xbbm9uY2VdIHx8XG4gICAgICAoZW1vdGlvblBvb2xbbm9uY2VdID0gY3JlYXRlRW1vdGlvbih7IGtleTogJ3JlYWN0LXNjcm9sbC10by1ib3R0b20tLWNzcy0nICsgY3JlYXRlQ1NTS2V5KCksIG5vbmNlIH0pKTtcblxuICAgIHJldHVybiBzdHlsZSA9PiBlbW90aW9uLmNzcyhzdHlsZSkgKyAnJztcbiAgfSwgW25vbmNlXSk7XG5cbiAgY29uc3QgaW50ZXJuYWxDb250ZXh0ID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgb2JzZXJ2ZVNjcm9sbFBvc2l0aW9uLFxuICAgICAgc2V0VGFyZ2V0LFxuICAgICAgc3R5bGVUb0NsYXNzTmFtZVxuICAgIH0pLFxuICAgIFtvYnNlcnZlU2Nyb2xsUG9zaXRpb24sIHNldFRhcmdldCwgc3R5bGVUb0NsYXNzTmFtZV1cbiAgKTtcblxuICBjb25zdCBzdGF0ZTFDb250ZXh0ID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgYXRCb3R0b20sXG4gICAgICBhdEVuZCxcbiAgICAgIGF0U3RhcnQsXG4gICAgICBhdFRvcCxcbiAgICAgIG1vZGVcbiAgICB9KSxcbiAgICBbYXRCb3R0b20sIGF0RW5kLCBhdFN0YXJ0LCBhdFRvcCwgbW9kZV1cbiAgKTtcblxuICBjb25zdCBzdGF0ZTJDb250ZXh0ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgYW5pbWF0aW5nID0gYW5pbWF0ZVRvICE9PSBudWxsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFuaW1hdGluZyxcbiAgICAgIGFuaW1hdGluZ1RvRW5kOiBhbmltYXRpbmcgJiYgaXNFbmQoYW5pbWF0ZVRvLCBtb2RlKSxcbiAgICAgIHN0aWNreVxuICAgIH07XG4gIH0sIFthbmltYXRlVG8sIG1vZGUsIHN0aWNreV0pO1xuXG4gIGNvbnN0IGNvbWJpbmVkU3RhdGVDb250ZXh0ID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgLi4uc3RhdGUxQ29udGV4dCxcbiAgICAgIC4uLnN0YXRlMkNvbnRleHRcbiAgICB9KSxcbiAgICBbc3RhdGUxQ29udGV4dCwgc3RhdGUyQ29udGV4dF1cbiAgKTtcblxuICBjb25zdCBmdW5jdGlvbkNvbnRleHQgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICBzY3JvbGxUbyxcbiAgICAgIHNjcm9sbFRvQm90dG9tLFxuICAgICAgc2Nyb2xsVG9FbmQsXG4gICAgICBzY3JvbGxUb1N0YXJ0LFxuICAgICAgc2Nyb2xsVG9Ub3BcbiAgICB9KSxcbiAgICBbc2Nyb2xsVG8sIHNjcm9sbFRvQm90dG9tLCBzY3JvbGxUb0VuZCwgc2Nyb2xsVG9TdGFydCwgc2Nyb2xsVG9Ub3BdXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgXCJzY3JvbGxIZWlnaHRcIiB2YWx1ZSB0byBsYXRlc3Qgd2hlbiB0aGUgdXNlciBkbyBhIGZvY3VzIGluc2lkZSB0aGUgYm94LlxuICAgIC8vXG4gICAgLy8gVGhpcyBpcyBiZWNhdXNlOlxuICAgIC8vIC0gSW4gb3VyIGNvZGUgdGhhdCBtaXRpZ2F0ZSBDaHJvbWUgc3ludGhldGljIHNjcm9sbGluZywgdGhhdCBjb2RlIHdpbGwgbG9vayBhdCB3aGV0aGVyIFwic2Nyb2xsSGVpZ2h0XCIgdmFsdWUgaXMgbGF0ZXN0IG9yIG5vdC5cbiAgICAvLyAtIFRoYXQgY29kZSBvbmx5IHJ1biBvbiBcInNjcm9sbFwiIGV2ZW50LlxuICAgIC8vIC0gVGhhdCBtZWFucywgb24gZXZlcnkgXCJzY3JvbGxcIiBldmVudCwgaWYgdGhlIFwic2Nyb2xsSGVpZ2h0XCIgdmFsdWUgaXMgbm90IGxhdGVzdCwgd2Ugd2lsbCBza2lwIG1vZGlmeWluZyB0aGUgc3RpY2tpbmVzcy5cbiAgICAvLyAtIFRoYXQgbWVhbnMsIGlmIHRoZSB1c2VyIFwiZm9jdXNcIiB0byBhbiBlbGVtZW50IHRoYXQgY2F1c2UgdGhlIHNjcm9sbCB2aWV3IHRvIHNjcm9sbCB0byB0aGUgYm90dG9tLCB0aGUgdXNlciBhZ2VudCB3aWxsIGZpcmUgXCJzY3JvbGxcIiBldmVudC5cbiAgICAvLyAgIFNpbmNlIHRoZSBcInNjcm9sbEhlaWdodFwiIGlzIG5vdCBsYXRlc3QgdmFsdWUsIHRoaXMgXCJzY3JvbGxcIiBldmVudCB3aWxsIGJlIGlnbm9yZWQgYW5kIHN0aWNraW5lc3Mgd2lsbCBub3QgYmUgbW9kaWZpZWQuXG4gICAgLy8gLSBUaGF0IG1lYW5zLCBpZiB0aGUgdXNlciBcImZvY3VzXCIgdG8gYSBuZXdseSBhZGRlZCBlbGVtZW50IHRoYXQgaXMgYXQgdGhlIGVuZCBvZiB0aGUgc2Nyb2xsIHZpZXcsIHRoZSBcInNjcm9sbCB0byBib3R0b21cIiBidXR0b24gd2lsbCBjb250aW51ZSB0byBzaG93LlxuICAgIC8vXG4gICAgLy8gUmVwcm8gaW4gQ2hyb21lOlxuICAgIC8vIDEuIEZpbGwgdXAgYSBzY3JvbGwgdmlld1xuICAgIC8vIDIuIFNjcm9sbCB1cCwgdGhlIFwic2Nyb2xsIHRvIGJvdHRvbVwiIGJ1dHRvbiBzaG91bGQgc2hvdyB1cFxuICAgIC8vIDMuIENsaWNrIFwiQWRkIGEgYnV0dG9uXCJcbiAgICAvLyA0LiBDbGljayBvbiB0aGUgc2Nyb2xsIHZpZXcgKHRvIHBzZXVkby1mb2N1cyBvbiBpdClcbiAgICAvLyA1LiBQcmVzcyBUQUIsIHRoZSBzY3JvbGwgdmlldyB3aWxsIGJlIGF0IHRoZSBib3R0b21cbiAgICAvL1xuICAgIC8vIEV4cGVjdDpcbiAgICAvLyAtIFRoZSBcInNjcm9sbCB0byBib3R0b21cIiBidXR0b24gc2hvdWxkIGJlIGdvbmUuXG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgY29uc3QgaGFuZGxlRm9jdXMgPSAoKSA9PiB7XG4gICAgICAgIHNjcm9sbEhlaWdodFJlZi5jdXJyZW50ID0gdGFyZ2V0LnNjcm9sbEhlaWdodDtcbiAgICAgIH07XG5cbiAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIGhhbmRsZUZvY3VzLCB7IGNhcHR1cmU6IHRydWUsIHBhc3NpdmU6IHRydWUgfSk7XG5cbiAgICAgIHJldHVybiAoKSA9PiB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBoYW5kbGVGb2N1cyk7XG4gICAgfVxuICB9LCBbdGFyZ2V0XSk7XG5cbiAgZGVidWcoKCkgPT4gW1xuICAgIFtgJWNSZW5kZXIlYzogUmVuZGVyYCwgLi4uc3R5bGVDb25zb2xlKCdjeWFuJywgJycpXSxcbiAgICB7XG4gICAgICBhbmltYXRlVG8sXG4gICAgICBhbmltYXRpbmc6IGFuaW1hdGVUbyAhPT0gbnVsbCxcbiAgICAgIHN0aWNreSxcbiAgICAgIHRhcmdldFxuICAgIH1cbiAgXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8SW50ZXJuYWxDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtpbnRlcm5hbENvbnRleHR9PlxuICAgICAgPEZ1bmN0aW9uQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17ZnVuY3Rpb25Db250ZXh0fT5cbiAgICAgICAgPFN0YXRlQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29tYmluZWRTdGF0ZUNvbnRleHR9PlxuICAgICAgICAgIDxTdGF0ZTFDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtzdGF0ZTFDb250ZXh0fT5cbiAgICAgICAgICAgIDxTdGF0ZTJDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtzdGF0ZTJDb250ZXh0fT5cbiAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICB7dGFyZ2V0ICYmIDxFdmVudFNweSBkZWJvdW5jZT17ZGVib3VuY2V9IG5hbWU9XCJzY3JvbGxcIiBvbkV2ZW50PXtoYW5kbGVTY3JvbGx9IHRhcmdldD17dGFyZ2V0fSAvPn1cbiAgICAgICAgICAgICAge3RhcmdldCAmJiBhbmltYXRlVG8gIT09IG51bGwgJiYgKFxuICAgICAgICAgICAgICAgIDxTcGluZVRvIG5hbWU9XCJzY3JvbGxUb3BcIiBvbkVuZD17aGFuZGxlU3BpbmVUb0VuZH0gdGFyZ2V0PXt0YXJnZXR9IHZhbHVlPXthbmltYXRlVG99IC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L1N0YXRlMkNvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgICAgPC9TdGF0ZTFDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICA8L1N0YXRlQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgIDwvRnVuY3Rpb25Db250ZXh0LlByb3ZpZGVyPlxuICAgIDwvSW50ZXJuYWxDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufTtcblxuQ29tcG9zZXIuZGVmYXVsdFByb3BzID0ge1xuICBjaGVja0ludGVydmFsOiAxMDAsXG4gIGNoaWxkcmVuOiB1bmRlZmluZWQsXG4gIGRlYm91bmNlOiAxNyxcbiAgZGVidWc6IHVuZGVmaW5lZCxcbiAgaW5pdGlhbFNjcm9sbEJlaGF2aW9yOiAnc21vb3RoJyxcbiAgbW9kZTogdW5kZWZpbmVkLFxuICBub25jZTogdW5kZWZpbmVkLFxuICBzY3JvbGxlcjogREVGQVVMVF9TQ1JPTExFUlxufTtcblxuQ29tcG9zZXIucHJvcFR5cGVzID0ge1xuICBjaGVja0ludGVydmFsOiBQcm9wVHlwZXMubnVtYmVyLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLmFueSxcbiAgZGVib3VuY2U6IFByb3BUeXBlcy5udW1iZXIsXG4gIGRlYnVnOiBQcm9wVHlwZXMuYm9vbCxcbiAgaW5pdGlhbFNjcm9sbEJlaGF2aW9yOiBQcm9wVHlwZXMub25lT2YoWydhdXRvJywgJ3Ntb290aCddKSxcbiAgbW9kZTogUHJvcFR5cGVzLm9uZU9mKFsnYm90dG9tJywgJ3RvcCddKSxcbiAgbm9uY2U6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNjcm9sbGVyOiBQcm9wVHlwZXMuZnVuY1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9zZXI7XG4iXX0= diff --git a/node_modules/react-scroll-to-bottom/lib/ScrollToBottom/Panel.js b/node_modules/react-scroll-to-bottom/lib/ScrollToBottom/Panel.js index 24f9403..e548e84 100644 --- a/node_modules/react-scroll-to-bottom/lib/ScrollToBottom/Panel.js +++ b/node_modules/react-scroll-to-bottom/lib/ScrollToBottom/Panel.js @@ -1,63 +1,104 @@ -"use strict"; +'use strict'; -var _typeof = require("@babel/runtime-corejs3/helpers/typeof"); +var _Object$defineProperty = require('@babel/runtime-corejs3/core-js-stable/object/define-property'); +var _Object$getOwnPropertyDescriptor = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor'); +var _WeakMap = require('@babel/runtime-corejs3/core-js-stable/weak-map'); +var _interopRequireDefault = require('@babel/runtime-corejs3/helpers/interopRequireDefault'); +var _typeof = require('@babel/runtime-corejs3/helpers/typeof'); -var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map"); - -var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property"); - -var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor"); - -var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault"); - -_Object$defineProperty(exports, "__esModule", { - value: true +_Object$defineProperty(exports, '__esModule', { + value: true, }); -exports["default"] = void 0; - -var _classnames = _interopRequireDefault(require("classnames")); - -var _propTypes = _interopRequireDefault(require("prop-types")); - -var _react = _interopRequireWildcard(require("react")); - -var _InternalContext = _interopRequireDefault(require("./InternalContext")); - -var _useStyleToClassName = _interopRequireDefault(require("../hooks/internal/useStyleToClassName")); - -function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } - -function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && 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; } +exports['default'] = void 0; + +var _classnames = _interopRequireDefault(require('classnames')); + +var _propTypes = _interopRequireDefault(require('prop-types')); + +var _react = _interopRequireWildcard(require('react')); + +var _InternalContext = _interopRequireDefault(require('./InternalContext')); + +var _useStyleToClassName = _interopRequireDefault( + require('../hooks/internal/useStyleToClassName') +); + +function _getRequireWildcardCache(nodeInterop) { + if (typeof _WeakMap !== 'function') return null; + var cacheBabelInterop = new _WeakMap(); + var cacheNodeInterop = new _WeakMap(); + return (_getRequireWildcardCache = function _getRequireWildcardCache( + nodeInterop + ) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} + +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if ( + obj === null || + (_typeof(obj) !== 'object' && typeof obj !== 'function') + ) { + return { default: obj }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + _Object$defineProperty && _Object$getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && 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; +} var ROOT_STYLE = { height: '100%', overflowY: 'auto', - width: '100%' + width: '100%', }; var Panel = function Panel(_ref) { var children = _ref.children, - className = _ref.className; - - var _useContext = (0, _react.useContext)(_InternalContext["default"]), - setTarget = _useContext.setTarget; - - var rootCSS = (0, _useStyleToClassName["default"])()(ROOT_STYLE); - return /*#__PURE__*/_react["default"].createElement("div", { - className: (0, _classnames["default"])(rootCSS, (className || '') + ''), - ref: setTarget - }, children); + className = _ref.className; + + var _useContext = (0, _react.useContext)(_InternalContext['default']), + setTarget = _useContext.setTarget; + + var rootCSS = (0, _useStyleToClassName['default'])()(ROOT_STYLE); + return /*#__PURE__*/ _react['default'].createElement( + 'div', + { + className: (0, _classnames['default'])(rootCSS, (className || '') + ''), + ref: setTarget, + }, + children + ); }; -Panel.defaultProps = { - children: undefined, - className: undefined -}; Panel.propTypes = { - children: _propTypes["default"].any, - className: _propTypes["default"].string + children: _propTypes['default'].any, + className: _propTypes['default'].string, }; var _default = Panel; -exports["default"] = _default; +exports['default'] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TY3JvbGxUb0JvdHRvbS9QYW5lbC5qcyJdLCJuYW1lcyI6WyJST09UX1NUWUxFIiwiaGVpZ2h0Iiwib3ZlcmZsb3dZIiwid2lkdGgiLCJQYW5lbCIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwiSW50ZXJuYWxDb250ZXh0Iiwic2V0VGFyZ2V0Iiwicm9vdENTUyIsImRlZmF1bHRQcm9wcyIsInVuZGVmaW5lZCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsImFueSIsInN0cmluZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7Ozs7OztBQUVBLElBQU1BLFVBQVUsR0FBRztBQUNqQkMsRUFBQUEsTUFBTSxFQUFFLE1BRFM7QUFFakJDLEVBQUFBLFNBQVMsRUFBRSxNQUZNO0FBR2pCQyxFQUFBQSxLQUFLLEVBQUU7QUFIVSxDQUFuQjs7QUFNQSxJQUFNQyxLQUFLLEdBQUcsU0FBUkEsS0FBUSxPQUE2QjtBQUFBLE1BQTFCQyxRQUEwQixRQUExQkEsUUFBMEI7QUFBQSxNQUFoQkMsU0FBZ0IsUUFBaEJBLFNBQWdCOztBQUN6QyxvQkFBc0IsdUJBQVdDLDJCQUFYLENBQXRCO0FBQUEsTUFBUUMsU0FBUixlQUFRQSxTQUFSOztBQUNBLE1BQU1DLE9BQU8sR0FBRyx1Q0FBc0JULFVBQXRCLENBQWhCO0FBRUEsc0JBQ0U7QUFBSyxJQUFBLFNBQVMsRUFBRSw0QkFBV1MsT0FBWCxFQUFvQixDQUFDSCxTQUFTLElBQUksRUFBZCxJQUFvQixFQUF4QyxDQUFoQjtBQUE2RCxJQUFBLEdBQUcsRUFBRUU7QUFBbEUsS0FDR0gsUUFESCxDQURGO0FBS0QsQ0FURDs7QUFXQUQsS0FBSyxDQUFDTSxZQUFOLEdBQXFCO0FBQ25CTCxFQUFBQSxRQUFRLEVBQUVNLFNBRFM7QUFFbkJMLEVBQUFBLFNBQVMsRUFBRUs7QUFGUSxDQUFyQjtBQUtBUCxLQUFLLENBQUNRLFNBQU4sR0FBa0I7QUFDaEJQLEVBQUFBLFFBQVEsRUFBRVEsc0JBQVVDLEdBREo7QUFFaEJSLEVBQUFBLFNBQVMsRUFBRU8sc0JBQVVFO0FBRkwsQ0FBbEI7ZUFLZVgsSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgSW50ZXJuYWxDb250ZXh0IGZyb20gJy4vSW50ZXJuYWxDb250ZXh0JztcbmltcG9ydCB1c2VTdHlsZVRvQ2xhc3NOYW1lIGZyb20gJy4uL2hvb2tzL2ludGVybmFsL3VzZVN0eWxlVG9DbGFzc05hbWUnO1xuXG5jb25zdCBST09UX1NUWUxFID0ge1xuICBoZWlnaHQ6ICcxMDAlJyxcbiAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gIHdpZHRoOiAnMTAwJSdcbn07XG5cbmNvbnN0IFBhbmVsID0gKHsgY2hpbGRyZW4sIGNsYXNzTmFtZSB9KSA9PiB7XG4gIGNvbnN0IHsgc2V0VGFyZ2V0IH0gPSB1c2VDb250ZXh0KEludGVybmFsQ29udGV4dCk7XG4gIGNvbnN0IHJvb3RDU1MgPSB1c2VTdHlsZVRvQ2xhc3NOYW1lKCkoUk9PVF9TVFlMRSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhyb290Q1NTLCAoY2xhc3NOYW1lIHx8ICcnKSArICcnKX0gcmVmPXtzZXRUYXJnZXR9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuUGFuZWwuZGVmYXVsdFByb3BzID0ge1xuICBjaGlsZHJlbjogdW5kZWZpbmVkLFxuICBjbGFzc05hbWU6IHVuZGVmaW5lZFxufTtcblxuUGFuZWwucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLmFueSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5leHBvcnQgZGVmYXVsdCBQYW5lbDtcbiJdfQ== diff --git a/node_modules/react-scroll-to-bottom/lib/esm/BasicScrollToBottom.js b/node_modules/react-scroll-to-bottom/lib/esm/BasicScrollToBottom.js index 5b18efa..ddb2c76 100644 --- a/node_modules/react-scroll-to-bottom/lib/esm/BasicScrollToBottom.js +++ b/node_modules/react-scroll-to-bottom/lib/esm/BasicScrollToBottom.js @@ -1,82 +1,81 @@ import classNames from 'classnames'; import PropTypes from 'prop-types'; import React from 'react'; + +import useStyleToClassName from './hooks/internal/useStyleToClassName'; import AutoHideFollowButton from './ScrollToBottom/AutoHideFollowButton'; import Composer from './ScrollToBottom/Composer'; import Panel from './ScrollToBottom/Panel'; -import useStyleToClassName from './hooks/internal/useStyleToClassName'; var ROOT_STYLE = { - position: 'relative' + position: 'relative', }; var BasicScrollToBottomCore = function BasicScrollToBottomCore(_ref) { var children = _ref.children, - className = _ref.className, - followButtonClassName = _ref.followButtonClassName, - scrollViewClassName = _ref.scrollViewClassName; + className = _ref.className, + followButtonClassName = _ref.followButtonClassName, + scrollViewClassName = _ref.scrollViewClassName; var rootCSS = useStyleToClassName()(ROOT_STYLE); - return /*#__PURE__*/React.createElement("div", { - className: classNames(rootCSS, (className || '') + '') - }, /*#__PURE__*/React.createElement(Panel, { - className: (scrollViewClassName || '') + '' - }, children), /*#__PURE__*/React.createElement(AutoHideFollowButton, { - className: (followButtonClassName || '') + '' - })); + return /*#__PURE__*/ React.createElement( + 'div', + { + className: classNames(rootCSS, (className || '') + ''), + }, + /*#__PURE__*/ React.createElement( + Panel, + { + className: (scrollViewClassName || '') + '', + }, + children + ), + /*#__PURE__*/ React.createElement(AutoHideFollowButton, { + className: (followButtonClassName || '') + '', + }) + ); }; -BasicScrollToBottomCore.defaultProps = { - children: undefined, - className: undefined, - followButtonClassName: undefined, - scrollViewClassName: undefined -}; BasicScrollToBottomCore.propTypes = { children: PropTypes.any, className: PropTypes.string, followButtonClassName: PropTypes.string, - scrollViewClassName: PropTypes.string + scrollViewClassName: PropTypes.string, }; var BasicScrollToBottom = function BasicScrollToBottom(_ref2) { var checkInterval = _ref2.checkInterval, - children = _ref2.children, - className = _ref2.className, - debounce = _ref2.debounce, - debug = _ref2.debug, - followButtonClassName = _ref2.followButtonClassName, - initialScrollBehavior = _ref2.initialScrollBehavior, - mode = _ref2.mode, - nonce = _ref2.nonce, - scroller = _ref2.scroller, - scrollViewClassName = _ref2.scrollViewClassName; - return /*#__PURE__*/React.createElement(Composer, { - checkInterval: checkInterval, - debounce: debounce, - debug: debug, - initialScrollBehavior: initialScrollBehavior, - mode: mode, - nonce: nonce, - scroller: scroller - }, /*#__PURE__*/React.createElement(BasicScrollToBottomCore, { - className: className, - followButtonClassName: followButtonClassName, - scrollViewClassName: scrollViewClassName - }, children)); + children = _ref2.children, + className = _ref2.className, + debounce = _ref2.debounce, + debug = _ref2.debug, + followButtonClassName = _ref2.followButtonClassName, + initialScrollBehavior = _ref2.initialScrollBehavior || 'smooth', + mode = _ref2.mode, + nonce = _ref2.nonce, + scroller = _ref2.scroller, + scrollViewClassName = _ref2.scrollViewClassName; + return /*#__PURE__*/ React.createElement( + Composer, + { + checkInterval: checkInterval, + debounce: debounce, + debug: debug, + initialScrollBehavior: initialScrollBehavior, + mode: mode, + nonce: nonce, + scroller: scroller, + }, + /*#__PURE__*/ React.createElement( + BasicScrollToBottomCore, + { + className: className, + followButtonClassName: followButtonClassName, + scrollViewClassName: scrollViewClassName, + }, + children + ) + ); }; -BasicScrollToBottom.defaultProps = { - checkInterval: undefined, - children: undefined, - className: undefined, - debounce: undefined, - debug: undefined, - followButtonClassName: undefined, - initialScrollBehavior: 'smooth', - mode: undefined, - nonce: undefined, - scroller: undefined, - scrollViewClassName: undefined -}; BasicScrollToBottom.propTypes = { checkInterval: PropTypes.number, children: PropTypes.any, @@ -88,7 +87,7 @@ BasicScrollToBottom.propTypes = { mode: PropTypes.oneOf(['bottom', 'top']), nonce: PropTypes.string, scroller: PropTypes.func, - scrollViewClassName: PropTypes.string + scrollViewClassName: PropTypes.string, }; export default BasicScrollToBottom; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9CYXNpY1Njcm9sbFRvQm90dG9tLmpzIl0sIm5hbWVzIjpbImNsYXNzTmFtZXMiLCJQcm9wVHlwZXMiLCJSZWFjdCIsIkF1dG9IaWRlRm9sbG93QnV0dG9uIiwiQ29tcG9zZXIiLCJQYW5lbCIsInVzZVN0eWxlVG9DbGFzc05hbWUiLCJST09UX1NUWUxFIiwicG9zaXRpb24iLCJCYXNpY1Njcm9sbFRvQm90dG9tQ29yZSIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwiZm9sbG93QnV0dG9uQ2xhc3NOYW1lIiwic2Nyb2xsVmlld0NsYXNzTmFtZSIsInJvb3RDU1MiLCJkZWZhdWx0UHJvcHMiLCJ1bmRlZmluZWQiLCJwcm9wVHlwZXMiLCJhbnkiLCJzdHJpbmciLCJCYXNpY1Njcm9sbFRvQm90dG9tIiwiY2hlY2tJbnRlcnZhbCIsImRlYm91bmNlIiwiZGVidWciLCJpbml0aWFsU2Nyb2xsQmVoYXZpb3IiLCJtb2RlIiwibm9uY2UiLCJzY3JvbGxlciIsIm51bWJlciIsImJvb2wiLCJvbmVPZiIsImZ1bmMiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFVBQVAsTUFBdUIsWUFBdkI7QUFDQSxPQUFPQyxTQUFQLE1BQXNCLFlBQXRCO0FBQ0EsT0FBT0MsS0FBUCxNQUFrQixPQUFsQjtBQUVBLE9BQU9DLG9CQUFQLE1BQWlDLHVDQUFqQztBQUNBLE9BQU9DLFFBQVAsTUFBcUIsMkJBQXJCO0FBQ0EsT0FBT0MsS0FBUCxNQUFrQix3QkFBbEI7QUFDQSxPQUFPQyxtQkFBUCxNQUFnQyxzQ0FBaEM7QUFFQSxJQUFNQyxVQUFVLEdBQUc7QUFDakJDLEVBQUFBLFFBQVEsRUFBRTtBQURPLENBQW5COztBQUlBLElBQU1DLHVCQUF1QixHQUFHLFNBQTFCQSx1QkFBMEIsT0FBeUU7QUFBQSxNQUF0RUMsUUFBc0UsUUFBdEVBLFFBQXNFO0FBQUEsTUFBNURDLFNBQTRELFFBQTVEQSxTQUE0RDtBQUFBLE1BQWpEQyxxQkFBaUQsUUFBakRBLHFCQUFpRDtBQUFB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QUFtQixFQUFFRztBQVhZLENBQW5DO0FBY0FJLG1CQUFtQixDQUFDSCxTQUFwQixHQUFnQztBQUM5QkksRUFBQUEsYUFBYSxFQUFFcEIsU0FBUyxDQUFDMkIsTUFESztBQUU5QmxCLEVBQUFBLFFBQVEsRUFBRVQsU0FBUyxDQUFDaUIsR0FGVTtBQUc5QlAsRUFBQUEsU0FBUyxFQUFFVixTQUFTLENBQUNrQixNQUhTO0FBSTlCRyxFQUFBQSxRQUFRLEVBQUVyQixTQUFTLENBQUMyQixNQUpVO0FBSzlCTCxFQUFBQSxLQUFLLEVBQUV0QixTQUFTLENBQUM0QixJQUxhO0FBTTlCakIsRUFBQUEscUJBQXFCLEVBQUVYLFNBQVMsQ0FBQ2tCLE1BTkg7QUFPOUJLLEVBQUFBLHFCQUFxQixFQUFFdkIsU0FBUyxDQUFDNkIsS0FBVixDQUFnQixDQUFDLE1BQUQsRUFBUyxRQUFULENBQWhCLENBUE87QUFROUJMLEVBQUFBLElBQUksRUFBRXhCLFNBQVMsQ0FBQzZCLEtBQVYsQ0FBZ0IsQ0FBQyxRQUFELEVBQVcsS0FBWCxDQUFoQixDQVJ3QjtBQVM5QkosRUFBQUEsS0FBSyxFQUFFekIsU0FBUyxDQUFDa0IsTUFUYTtBQVU5QlEsRUFBQUEsUUFBUSxFQUFFMUIsU0FBUyxDQUFDOEIsSUFWVTtBQVc5QmxCLEVBQUFBLG1CQUFtQixFQUFFWixTQUFTLENBQUNrQjtBQVhELENBQWhDO0FBY0EsZUFBZUMsbUJBQWYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgQXV0b0hpZGVGb2xsb3dCdXR0b24gZnJvbSAnLi9TY3JvbGxUb0JvdHRvbS9BdXRvSGlkZUZvbGxvd0J1dHRvbic7XG5pbXBvcnQgQ29tcG9zZXIgZnJvbSAnLi9TY3JvbGxUb0JvdHRvbS9Db21wb3Nlcic7XG5pbXBvcnQgUGFuZWwgZnJvbSAnLi9TY3JvbGxUb0JvdHRvbS9QYW5lbCc7XG5pbXBvcnQgdXNlU3R5bGVUb0NsYXNzTmFtZSBmcm9tICcuL2hvb2tzL2ludGVybmFsL3VzZVN0eWxlVG9DbGFzc05hbWUnO1xuXG5jb25zdCBST09UX1NUWUxFID0ge1xuICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xufTtcblxuY29uc3QgQmFzaWNTY3JvbGxUb0JvdHRvbUNvcmUgPSAoeyBjaGlsZHJlbiwgY2xhc3NOYW1lLCBmb2xsb3dCdXR0b25DbGFzc05hbWUsIHNjcm9sbFZpZXdDbGFzc05hbWUgfSkgPT4ge1xuICBjb25zdCByb290Q1NTID0gdXNlU3R5bGVUb0NsYXNzTmFtZSgpKFJPT1RfU1RZTEUpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZXMocm9vdENTUywgKGNsYXNzTmFtZSB8fCAnJykgKyAnJyl9PlxuICAgICAgPFBhbmVsIGNsYXNzTmFtZT17KHNjcm9sbFZpZXdDbGFzc05hbWUgfHwgJycpICsgJyd9PntjaGlsZHJlbn08L1BhbmVsPlxuICAgICAgPEF1dG9IaWRlRm9sbG93QnV0dG9uIGNsYXNzTmFtZT17KGZvbGxvd0J1dHRvbkNsYXNzTmFtZSB8fCAnJykgKyAnJ30gLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbkJhc2ljU2Nyb2xsVG9Cb3R0b21Db3JlLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2hpbGRyZW46IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lOiB1bmRlZmluZWQsXG4gIGZvbGxvd0J1dHRvbkNsYXNzTmFtZTogdW5kZWZpbmVkLFxuICBzY3JvbGxWaWV3Q2xhc3NOYW1lOiB1bmRlZmluZWRcbn07XG5cbkJhc2ljU2Nyb2xsVG9Cb3R0b21Db3JlLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5hbnksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgZm9sbG93QnV0dG9uQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzY3JvbGxWaWV3Q2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5jb25zdCBCYXNpY1Njcm9sbFRvQm90dG9tID0gKHtcbiAgY2hlY2tJbnRlcnZhbCxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgZGVib3VuY2UsXG4gIGRlYnVnLFxuICBmb2xsb3dCdXR0b25DbGFzc05hbWUsXG4gIGluaXRpYWxTY3JvbGxCZWhhdmlvcixcbiAgbW9kZSxcbiAgbm9uY2UsXG4gIHNjcm9sbGVyLFxuICBzY3JvbGxWaWV3Q2xhc3NOYW1lXG59KSA9PiAoXG4gIDxDb21wb3NlclxuICAgIGNoZWNrSW50ZXJ2YWw9e2NoZWNrSW50ZXJ2YWx9XG4gICAgZGVib3VuY2U9e2RlYm91bmNlfVxuICAgIGRlYnVnPXtkZWJ1Z31cbiAgICBpbml0aWFsU2Nyb2xsQmVoYXZpb3I9e2luaXRpYWxTY3JvbGxCZWhhdmlvcn1cbiAgICBtb2RlPXttb2RlfVxuICAgIG5vbmNlPXtub25jZX1cbiAgICBzY3JvbGxlcj17c2Nyb2xsZXJ9XG4gID5cbiAgICA8QmFzaWNTY3JvbGxUb0JvdHRvbUNvcmVcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgZm9sbG93QnV0dG9uQ2xhc3NOYW1lPXtmb2xsb3dCdXR0b25DbGFzc05hbWV9XG4gICAgICBzY3JvbGxWaWV3Q2xhc3NOYW1lPXtzY3JvbGxWaWV3Q2xhc3NOYW1lfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0Jhc2ljU2Nyb2xsVG9Cb3R0b21Db3JlPlxuICA8L0NvbXBvc2VyPlxuKTtcblxuQmFzaWNTY3JvbGxUb0JvdHRvbS5kZWZhdWx0UHJvcHMgPSB7XG4gIGNoZWNrSW50ZXJ2YWw6IHVuZGVmaW5lZCxcbiAgY2hpbGRyZW46IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lOiB1bmRlZmluZWQsXG4gIGRlYm91bmNlOiB1bmRlZmluZWQsXG4gIGRlYnVnOiB1bmRlZmluZWQsXG4gIGZvbGxvd0J1dHRvbkNsYXNzTmFtZTogdW5kZWZpbmVkLFxuICBpbml0aWFsU2Nyb2xsQmVoYXZpb3I6ICdzbW9vdGgnLFxuICBtb2RlOiB1bmRlZmluZWQsXG4gIG5vbmNlOiB1bmRlZmluZWQsXG4gIHNjcm9sbGVyOiB1bmRlZmluZWQsXG4gIHNjcm9sbFZpZXdDbGFzc05hbWU6IHVuZGVmaW5lZFxufTtcblxuQmFzaWNTY3JvbGxUb0JvdHRvbS5wcm9wVHlwZXMgPSB7XG4gIGNoZWNrSW50ZXJ2YWw6IFByb3BUeXBlcy5udW1iZXIsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuYW55LFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGRlYm91bmNlOiBQcm9wVHlwZXMubnVtYmVyLFxuICBkZWJ1ZzogUHJvcFR5cGVzLmJvb2wsXG4gIGZvbGxvd0J1dHRvbkNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgaW5pdGlhbFNjcm9sbEJlaGF2aW9yOiBQcm9wVHlwZXMub25lT2YoWydhdXRvJywgJ3Ntb290aCddKSxcbiAgbW9kZTogUHJvcFR5cGVzLm9uZU9mKFsnYm90dG9tJywgJ3RvcCddKSxcbiAgbm9uY2U6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNjcm9sbGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgc2Nyb2xsVmlld0NsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQmFzaWNTY3JvbGxUb0JvdHRvbTtcbiJdfQ== diff --git a/node_modules/react-scroll-to-bottom/lib/esm/EventSpy.js b/node_modules/react-scroll-to-bottom/lib/esm/EventSpy.js index d0fd800..76081b9 100644 --- a/node_modules/react-scroll-to-bottom/lib/esm/EventSpy.js +++ b/node_modules/react-scroll-to-bottom/lib/esm/EventSpy.js @@ -1,44 +1,51 @@ -import _Date$now from "@babel/runtime-corejs3/core-js-stable/date/now"; -import "core-js/modules/es.function.name.js"; +import _Date$now from '@babel/runtime-corejs3/core-js-stable/date/now'; +import 'core-js/modules/es.function.name.js'; import { useCallback, useLayoutEffect, useMemo, useRef } from 'react'; + import debounceFn from './debounce'; var EventSpy = function EventSpy(_ref) { - var debounce = _ref.debounce, - name = _ref.name, - onEvent = _ref.onEvent, - target = _ref.target; + var debounce = _ref.debounce || 200, + 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 = useRef(); onEventRef.current = onEvent; - var debouncer = useMemo(function () { - return debounceFn(function (event) { - var current = onEventRef.current; - current && current(event); - }, debounce); - }, [debounce, onEventRef]); - var handleEvent = useCallback(function (event) { - event.timeStampLow = _Date$now(); - debouncer(event); - }, [debouncer]); - useLayoutEffect(function () { - target.addEventListener(name, handleEvent, { - passive: true - }); - handleEvent({ - target: target, - type: name - }); - return function () { - return target.removeEventListener(name, handleEvent); - }; - }, [name, handleEvent, target]); + var debouncer = useMemo( + function () { + return debounceFn(function (event) { + var current = onEventRef.current; + current && current(event); + }, debounce); + }, + [debounce, onEventRef] + ); + var handleEvent = useCallback( + function (event) { + event.timeStampLow = _Date$now(); + debouncer(event); + }, + [debouncer] + ); + 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; }; -EventSpy.defaultProps = { - debounce: 200 -}; export default EventSpy; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9FdmVudFNweS5qcyJdLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUxheW91dEVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJkZWJvdW5jZUZuIiwiRXZlbnRTcHkiLCJkZWJvdW5jZSIsIm5hbWUiLCJvbkV2ZW50IiwidGFyZ2V0Iiwib25FdmVudFJlZiIsImN1cnJlbnQiLCJkZWJvdW5jZXIiLCJldmVudCIsImhhbmRsZUV2ZW50IiwidGltZVN0YW1wTG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsInBhc3NpdmUiLCJ0eXBlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImRlZmF1bHRQcm9wcyJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxTQUFTQSxXQUFULEVBQXNCQyxlQUF0QixFQUF1Q0MsT0FBdkMsRUFBZ0RDLE1BQWhELFFBQThELE9BQTlEO0FBRUEsT0FBT0MsVUFBUCxNQUF1QixZQUF2Qjs7QUFFQSxJQUFNQyxRQUFRLEdBQUcsU0FBWEEsUUFBVyxPQUF5QztBQUFBLE1BQXRDQyxRQUFzQyxRQUF0Q0EsUUFBc0M7QUFBQSxNQUE1QkMsSUFBNEIsUUFBNUJBLElBQTRCO0FBQUEsTUFBdEJDLE9BQXNCLFFBQXRCQSxPQUFzQjtBQUFBLE1BQWJDLE1BQWEsUUFBYkEsTUFBYTtBQUN4RDtBQUNBO0FBQ0EsTUFBTUMsVUFBVSxHQUFHUCxNQUFNLEVBQXpCO0FBRUFPLEVBQUFBLFVBQVUsQ0FBQ0MsT0FBWCxHQUFxQkgsT0FBckI7QUFFQSxNQUFNSSxTQUFTLEdBQUdWLE9BQU8sQ0FDdkI7QUFBQSxXQUNFRSxVQUFVLENBQUMsVUFBQVMsS0FBSyxFQUFJO0FBQ2xCLFVBQVFGLE9BQVIsR0FBb0JELFVBQXBCLENBQVFDLE9BQVI7QUFFQUEsTUFBQUEsT0FBTyxJQUFJQSxPQUFPLENBQUNFLEtBQUQsQ0FBbEI7QUFDRCxLQUpTLEVBSVBQLFFBSk8sQ0FEWjtBQUFBLEdBRHVCLEVBT3ZCLENBQUNBLFFBQUQsRUFBV0ksVUFBWCxDQVB1QixDQUF6QjtBQVVBLE1BQU1JLFdBQVcsR0FBR2QsV0FBVyxDQUM3QixVQUFBYSxLQUFLLEVBQUk7QUFDUEEsSUFBQUEsS0FBSyxDQUFDRSxZQUFOLEdBQXFCLFdBQXJCO0FBRUFILElBQUFBLFNBQVMsQ0FBQ0MsS0FBRCxDQUFUO0FBQ0QsR0FMNEIsRUFNN0IsQ0FBQ0QsU0FBRCxDQU42QixDQUEvQjtBQVNBWCxFQUFBQSxlQUFlLENBQUMsWUFBTTtBQUNwQlEsSUFBQUEsTUFBTSxDQUFDTyxnQkFBUCxDQUF3QlQsSUFBeEIsRUFBOEJPLFdBQTlCLEVBQTJDO0FBQUVHLE1BQUFBLE9BQU8sRUFBRTtBQUFYLEtBQTNDO0FBQ0FILElBQUFBLFdBQVcsQ0FBQztBQUFFTCxNQUFBQSxNQUFNLEVBQU5BLE1BQUY7QUFBVVMsTUFBQUEsSUFBSSxFQUFFWDtBQUFoQixLQUFELENBQVg7QUFFQSxXQUFPO0FBQUEsYUFBTUUsTUFBTSxDQUFDVSxtQkFBUCxDQUEyQlosSUFBM0IsRUFBaUNPLFdBQWpDLENBQU47QUFBQSxLQUFQO0FBQ0QsR0FMYyxFQUtaLENBQUNQLElBQUQsRUFBT08sV0FBUCxFQUFvQkwsTUFBcEIsQ0FMWSxDQUFmO0FBT0EsU0FBTyxLQUFQO0FBQ0QsQ0FsQ0Q7O0FBb0NBSixRQUFRLENBQUNlLFlBQVQsR0FBd0I7QUFDdEJkLEVBQUFBLFFBQVEsRUFBRTtBQURZLENBQXhCO0FBSUEsZUFBZUQsUUFBZiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VMYXlvdXRFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IGRlYm91bmNlRm4gZnJvbSAnLi9kZWJvdW5jZSc7XG5cbmNvbnN0IEV2ZW50U3B5ID0gKHsgZGVib3VuY2UsIG5hbWUsIG9uRXZlbnQsIHRhcmdldCB9KSA9PiB7XG4gIC8vIFdlIG5lZWQgdG8gc2F2ZSB0aGUgXCJvbkV2ZW50XCIgdG8gcmVmLlxuICAvLyBUaGlzIGlzIGJlY2F1c2UgXCJvbkV2ZW50XCIgbWF5IGNoYW5nZSBmcm9tIHRpbWUgdG8gdGltZSwgYnV0IGRlYm91bmNlIG1heSBzdGlsbCBmaXJlIHRvIHRoZSBvbGRlciBjYWxsYmFjay5cbiAgY29uc3Qgb25FdmVudFJlZiA9IHVzZVJlZigpO1xuXG4gIG9uRXZlbnRSZWYuY3VycmVudCA9IG9uRXZlbnQ7XG5cbiAgY29uc3QgZGVib3VuY2VyID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgZGVib3VuY2VGbihldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudCB9ID0gb25FdmVudFJlZjtcblxuICAgICAgICBjdXJyZW50ICYmIGN1cnJlbnQoZXZlbnQpO1xuICAgICAgfSwgZGVib3VuY2UpLFxuICAgIFtkZWJvdW5jZSwgb25FdmVudFJlZl1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVFdmVudCA9IHVzZUNhbGxiYWNrKFxuICAgIGV2ZW50ID0+IHtcbiAgICAgIGV2ZW50LnRpbWVTdGFtcExvdyA9IERhdGUubm93KCk7XG5cbiAgICAgIGRlYm91bmNlcihldmVudCk7XG4gICAgfSxcbiAgICBbZGVib3VuY2VyXVxuICApO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIobmFtZSwgaGFuZGxlRXZlbnQsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICBoYW5kbGVFdmVudCh7IHRhcmdldCwgdHlwZTogbmFtZSB9KTtcblxuICAgIHJldHVybiAoKSA9PiB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCBoYW5kbGVFdmVudCk7XG4gIH0sIFtuYW1lLCBoYW5kbGVFdmVudCwgdGFyZ2V0XSk7XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuRXZlbnRTcHkuZGVmYXVsdFByb3BzID0ge1xuICBkZWJvdW5jZTogMjAwXG59O1xuXG5leHBvcnQgZGVmYXVsdCBFdmVudFNweTtcbiJdfQ== diff --git a/node_modules/react-scroll-to-bottom/lib/esm/ScrollToBottom/AutoHideFollowButton.js b/node_modules/react-scroll-to-bottom/lib/esm/ScrollToBottom/AutoHideFollowButton.js index eca67c2..841e11a 100644 --- a/node_modules/react-scroll-to-bottom/lib/esm/ScrollToBottom/AutoHideFollowButton.js +++ b/node_modules/react-scroll-to-bottom/lib/esm/ScrollToBottom/AutoHideFollowButton.js @@ -1,10 +1,11 @@ -import _slicedToArray from "@babel/runtime-corejs3/helpers/slicedToArray"; +import _slicedToArray from '@babel/runtime-corejs3/helpers/slicedToArray'; import classNames from 'classnames'; import PropTypes from 'prop-types'; import React from 'react'; + +import useStyleToClassName from '../hooks/internal/useStyleToClassName'; import useScrollToEnd from '../hooks/useScrollToEnd'; import useSticky from '../hooks/useSticky'; -import useStyleToClassName from '../hooks/internal/useStyleToClassName'; var ROOT_STYLE = { backgroundColor: 'rgba(0, 0, 0, .2)', borderRadius: 10, @@ -17,37 +18,40 @@ var ROOT_STYLE = { right: 20, width: 20, '&:hover': { - backgroundColor: 'rgba(0, 0, 0, .4)' + backgroundColor: 'rgba(0, 0, 0, .4)', }, '&:active': { - backgroundColor: 'rgba(0, 0, 0, .6)' - } + backgroundColor: 'rgba(0, 0, 0, .6)', + }, }; var AutoHideFollowButton = function AutoHideFollowButton(_ref) { var children = _ref.children, - className = _ref.className; + className = _ref.className || ''; var _useSticky = useSticky(), - _useSticky2 = _slicedToArray(_useSticky, 1), - sticky = _useSticky2[0]; + _useSticky2 = _slicedToArray(_useSticky, 1), + sticky = _useSticky2[0]; var rootCSS = useStyleToClassName()(ROOT_STYLE); var scrollToEnd = useScrollToEnd(); - return !sticky && /*#__PURE__*/React.createElement("button", { - className: classNames(rootCSS, (className || '') + ''), - onClick: scrollToEnd, - type: "button" - }, children); + return ( + !sticky && + /*#__PURE__*/ React.createElement( + 'button', + { + className: classNames(rootCSS, (className || '') + ''), + onClick: scrollToEnd, + type: 'button', + }, + children + ) + ); }; -AutoHideFollowButton.defaultProps = { - children: undefined, - className: '' -}; AutoHideFollowButton.propTypes = { children: PropTypes.any, - className: PropTypes.string + className: PropTypes.string, }; export default AutoHideFollowButton; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9TY3JvbGxUb0JvdHRvbS9BdXRvSGlkZUZvbGxvd0J1dHRvbi5qcyJdLCJuYW1lcyI6WyJjbGFzc05hbWVzIiwiUHJvcFR5cGVzIiwiUmVhY3QiLCJ1c2VTY3JvbGxUb0VuZCIsInVzZVN0aWNreSIsInVzZVN0eWxlVG9DbGFzc05hbWUiLCJST09UX1NUWUxFIiwiYmFja2dyb3VuZENvbG9yIiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyV2lkdGgiLCJib3R0b20iLCJjdXJzb3IiLCJoZWlnaHQiLCJvdXRsaW5lIiwicG9zaXRpb24iLCJyaWdodCIsIndpZHRoIiwiQXV0b0hpZGVGb2xsb3dCdXR0b24iLCJjaGlsZHJlbiIsImNsYXNzTmFtZSIsInN0aWNreSIsInJvb3RDU1MiLCJzY3JvbGxUb0VuZCIsImRlZmF1bHRQcm9wcyIsInVuZGVmaW5lZCIsInByb3BUeXBlcyIsImFueSIsInN0cmluZyJdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU9BLFVBQVAsTUFBdUIsWUFBdkI7QUFDQSxPQUFPQyxTQUFQLE1BQXNCLFlBQXRCO0FBQ0EsT0FBT0MsS0FBUCxNQUFrQixPQUFsQjtBQUVBLE9BQU9DLGNBQVAsTUFBMkIseUJBQTNCO0FBQ0EsT0FBT0MsU0FBUCxNQUFzQixvQkFBdEI7QUFDQSxPQUFPQyxtQkFBUCxNQUFnQyx1Q0FBaEM7QUFFQSxJQUFNQyxVQUFVLEdBQUc7QUFDakJDLEVBQUFBLGVBQWUsRUFBRSxtQkFEQTtBQUVqQkMsRUFBQUEsWUFBWSxFQUFFLEVBRkc7QUFHakJDLEVBQUFBLFdBQVcsRUFBRSxDQUhJO0FBSWpCQyxFQUFBQSxNQUFNLEVBQUUsQ0FKUztBQUtqQkMsRUFBQUEsTUFBTSxFQUFFLFNBTFM7QUFNakJDLEVBQUFBLE1BQU0sRUFBRSxFQU5TO0FBT2pCQyxFQUFBQSxPQUFPLEVBQUUsQ0FQUTtBQVFqQkMsRUFBQUEsUUFBUSxFQUFFLFVBUk87QUFTakJDLEVBQUFBLEtBQUssRUFBRSxFQVRVO0FBVWpCQyxFQUFBQSxLQUFLLEVBQUUsRUFWVTtBQVlqQixhQUFXO0FBQ1RULElBQUFBLGVBQWUsRUFBRTtBQURSLEdBWk07QUFnQmpCLGNBQVk7QUFDVkEsSUFBQUEsZUFBZSxFQUFFO0FBRFA7QUFoQkssQ0FBbkI7O0FBcUJBLElBQU1VLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBdUIsT0FBNkI7QUFBQSxNQUExQkMsUUFBMEIsUUFBMUJBLFFBQTBCO0FBQUEsTUFBaEJDLFNBQWdCLFFBQWhCQSxTQUFnQjs7QUFDeEQsbUJBQWlCZixTQUFTLEVBQTFCO0FBQUE7QUFBQSxNQUFPZ0IsTUFBUDs7QUFDQSxNQUFNQyxPQUFPLEdBQUdoQixtQkFBbUIsR0FBR0MsVUFBSCxDQUFuQztBQUNBLE1BQU1nQixXQUFXLEdBQUduQixjQUFjLEVBQWxDO0FBRUEsU0FDRSxDQUFDaUIsTUFBRCxpQkFDRTtBQUFRLElBQUEsU0FBUyxFQUFFcEIsVUFBVSxDQUFDcUIsT0FBRCxFQUFVLENBQUNGLFNBQVMsSUFBSSxFQUFkLElBQW9CLEVBQTlCLENBQTdCO0FBQWdFLElBQUEsT0FBTyxFQUFFRyxXQUF6RTtBQUFzRixJQUFBLElBQUksRUFBQztBQUEzRixLQUNHSixRQURILENBRko7QUFPRCxDQVpEOztBQWNBRCxvQkFBb0IsQ0FBQ00sWUFBckIsR0FBb0M7QUFDbENMLEVBQUFBLFFBQVEsRUFBRU0sU0FEd0I7QUFFbENMLEVBQUFBLFNBQVMsRUFBRTtBQUZ1QixDQUFwQztBQUtBRixvQkFBb0IsQ0FBQ1EsU0FBckIsR0FBaUM7QUFDL0JQLEVBQUFBLFFBQVEsRUFBRWpCLFNBQVMsQ0FBQ3lCLEdBRFc7QUFFL0JQLEVBQUFBLFNBQVMsRUFBRWxCLFNBQVMsQ0FBQzBCO0FBRlUsQ0FBakM7QUFLQSxlQUFlVixvQkFBZiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB1c2VTY3JvbGxUb0VuZCBmcm9tICcuLi9ob29rcy91c2VTY3JvbGxUb0VuZCc7XG5pbXBvcnQgdXNlU3RpY2t5IGZyb20gJy4uL2hvb2tzL3VzZVN0aWNreSc7XG5pbXBvcnQgdXNlU3R5bGVUb0NsYXNzTmFtZSBmcm9tICcuLi9ob29rcy9pbnRlcm5hbC91c2VTdHlsZVRvQ2xhc3NOYW1lJztcblxuY29uc3QgUk9PVF9TVFlMRSA9IHtcbiAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLCAwLCAwLCAuMiknLFxuICBib3JkZXJSYWRpdXM6IDEwLFxuICBib3JkZXJXaWR0aDogMCxcbiAgYm90dG9tOiA1LFxuICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgaGVpZ2h0OiAyMCxcbiAgb3V0bGluZTogMCxcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIHJpZ2h0OiAyMCxcbiAgd2lkdGg6IDIwLFxuXG4gICcmOmhvdmVyJzoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgLjQpJ1xuICB9LFxuXG4gICcmOmFjdGl2ZSc6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsIDAsIDAsIC42KSdcbiAgfVxufTtcblxuY29uc3QgQXV0b0hpZGVGb2xsb3dCdXR0b24gPSAoeyBjaGlsZHJlbiwgY2xhc3NOYW1lIH0pID0+IHtcbiAgY29uc3QgW3N0aWNreV0gPSB1c2VTdGlja3koKTtcbiAgY29uc3Qgcm9vdENTUyA9IHVzZVN0eWxlVG9DbGFzc05hbWUoKShST09UX1NUWUxFKTtcbiAgY29uc3Qgc2Nyb2xsVG9FbmQgPSB1c2VTY3JvbGxUb0VuZCgpO1xuXG4gIHJldHVybiAoXG4gICAgIXN0aWNreSAmJiAoXG4gICAgICA8YnV0dG9uIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhyb290Q1NTLCAoY2xhc3NOYW1lIHx8ICcnKSArICcnKX0gb25DbGljaz17c2Nyb2xsVG9FbmR9IHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9idXR0b24+XG4gICAgKVxuICApO1xufTtcblxuQXV0b0hpZGVGb2xsb3dCdXR0b24uZGVmYXVsdFByb3BzID0ge1xuICBjaGlsZHJlbjogdW5kZWZpbmVkLFxuICBjbGFzc05hbWU6ICcnXG59O1xuXG5BdXRvSGlkZUZvbGxvd0J1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuYW55LFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF1dG9IaWRlRm9sbG93QnV0dG9uO1xuIl19 diff --git a/node_modules/react-scroll-to-bottom/lib/esm/ScrollToBottom/Composer.js b/node_modules/react-scroll-to-bottom/lib/esm/ScrollToBottom/Composer.js index f5cec94..1afb4cd 100644 --- a/node_modules/react-scroll-to-bottom/lib/esm/ScrollToBottom/Composer.js +++ b/node_modules/react-scroll-to-bottom/lib/esm/ScrollToBottom/Composer.js @@ -1,40 +1,90 @@ -import _defineProperty from "@babel/runtime-corejs3/helpers/defineProperty"; -import _toConsumableArray from "@babel/runtime-corejs3/helpers/toConsumableArray"; -import _slicedToArray from "@babel/runtime-corejs3/helpers/slicedToArray"; - -function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); if (enumerableOnly) { symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } - -function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context21; _forEachInstanceProperty(_context21 = ownKeys(Object(source), true)).call(_context21, function (key) { _defineProperty(target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors) { _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)); } else { var _context22; _forEachInstanceProperty(_context22 = ownKeys(Object(source))).call(_context22, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } } return target; } - -import "core-js/modules/es.regexp.exec.js"; -import "core-js/modules/es.string.replace.js"; -import _setInterval from "@babel/runtime-corejs3/core-js-stable/set-interval"; -import _indexOfInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/index-of"; -import _spliceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/splice"; -import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat"; -import _Date$now from "@babel/runtime-corejs3/core-js-stable/date/now"; -import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each"; -import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys"; -import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols"; -import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter"; -import _Object$getOwnPropertyDescriptor from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor"; -import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors"; -import _Object$defineProperties from "@babel/runtime-corejs3/core-js-stable/object/define-properties"; -import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property"; +import _defineProperty from '@babel/runtime-corejs3/helpers/defineProperty'; +import _slicedToArray from '@babel/runtime-corejs3/helpers/slicedToArray'; + +function ownKeys(object, enumerableOnly) { + var keys = _Object$keys(object); + if (_Object$getOwnPropertySymbols) { + var symbols = _Object$getOwnPropertySymbols(object); + if (enumerableOnly) { + symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { + return _Object$getOwnPropertyDescriptor(object, sym).enumerable; + }); + } + keys.push.apply(keys, symbols); + } + return keys; +} + +function _objectSpread(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] != null ? arguments[i] : {}; + if (i % 2) { + var _context21; + _forEachInstanceProperty( + (_context21 = ownKeys(Object(source), true)) + ).call(_context21, function (key) { + _defineProperty(target, key, source[key]); + }); + } else if (_Object$getOwnPropertyDescriptors) { + _Object$defineProperties( + target, + _Object$getOwnPropertyDescriptors(source) + ); + } else { + var _context22; + _forEachInstanceProperty((_context22 = ownKeys(Object(source)))).call( + _context22, + function (key) { + _Object$defineProperty( + target, + key, + _Object$getOwnPropertyDescriptor(source, key) + ); + } + ); + } + } + return target; +} + +import 'core-js/modules/es.regexp.exec.js'; +import 'core-js/modules/es.string.replace.js'; +import _Date$now from '@babel/runtime-corejs3/core-js-stable/date/now'; +import _concatInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/concat'; +import _Object$getOwnPropertySymbols from '@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols'; +import _filterInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/filter'; +import _forEachInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/for-each'; +import _indexOfInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/index-of'; +import _spliceInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/splice'; +import _Object$defineProperties from '@babel/runtime-corejs3/core-js-stable/object/define-properties'; +import _Object$defineProperty from '@babel/runtime-corejs3/core-js-stable/object/define-property'; +import _Object$getOwnPropertyDescriptor from '@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor'; +import _Object$getOwnPropertyDescriptors from '@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors'; +import _Object$keys from '@babel/runtime-corejs3/core-js-stable/object/keys'; +import _setInterval from '@babel/runtime-corejs3/core-js-stable/set-interval'; +import _toConsumableArray from '@babel/runtime-corejs3/helpers/toConsumableArray'; import createEmotion from '@emotion/css/create-instance'; import PropTypes from 'prop-types'; -import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import React, { + useCallback, + useEffect, + useMemo, + useRef, + useState, +} from 'react'; + import createCSSKey from '../createCSSKey'; -import createDebug from '../utils/debug'; import EventSpy from '../EventSpy'; +import useStateRef from '../hooks/internal/useStateRef'; +import SpineTo from '../SpineTo'; +import createDebug from '../utils/debug'; +import styleConsole from '../utils/styleConsole'; + import FunctionContext from './FunctionContext'; import InternalContext from './InternalContext'; -import SpineTo from '../SpineTo'; import State1Context from './State1Context'; import State2Context from './State2Context'; import StateContext from './StateContext'; -import styleConsole from '../utils/styleConsole'; -import useStateRef from '../hooks/internal/useStateRef'; var DEFAULT_SCROLLER = function DEFAULT_SCROLLER() { return Infinity; @@ -58,10 +108,10 @@ function setImmediateInterval(fn, ms) { function computeViewState(_ref) { var mode = _ref.mode, - _ref$target = _ref.target, - offsetHeight = _ref$target.offsetHeight, - scrollHeight = _ref$target.scrollHeight, - scrollTop = _ref$target.scrollTop; + _ref$target = _ref.target, + offsetHeight = _ref$target.offsetHeight, + scrollHeight = _ref$target.scrollHeight, + scrollTop = _ref$target.scrollTop; var atBottom = scrollHeight - scrollTop - offsetHeight < NEAR_END_THRESHOLD; var atTop = scrollTop < NEAR_END_THRESHOLD; var atEnd = mode === MODE_TOP ? atTop : atBottom; @@ -70,7 +120,7 @@ function computeViewState(_ref) { atBottom: atBottom, atEnd: atEnd, atStart: atStart, - atTop: atTop + atTop: atTop, }; } @@ -79,550 +129,865 @@ function isEnd(animateTo, mode) { } var Composer = function Composer(_ref2) { - var checkInterval = _ref2.checkInterval, - children = _ref2.children, - debounce = _ref2.debounce, - debugFromProp = _ref2.debug, - initialScrollBehavior = _ref2.initialScrollBehavior, - mode = _ref2.mode, - nonce = _ref2.nonce, - scroller = _ref2.scroller; - var debug = useMemo(function () { - return createDebug("", { - force: debugFromProp - }); - }, [debugFromProp]); + var checkInterval = _ref2.checkInterval || 100, + children = _ref2.children, + debounce = _ref2.debounce || 17, + debugFromProp = _ref2.debug, + initialScrollBehavior = _ref2.initialScrollBehavior || 'smooth', + mode = _ref2.mode, + nonce = _ref2.nonce, + scroller = _ref2.scroller || DEFAULT_SCROLLER; + var debug = useMemo( + function () { + return createDebug('', { + force: debugFromProp, + }); + }, + [debugFromProp] + ); mode = mode === MODE_TOP ? MODE_TOP : MODE_BOTTOM; var ignoreScrollEventBeforeRef = useRef(0); var initialScrollBehaviorRef = useRef(initialScrollBehavior); var _useStateRef = useStateRef(mode === MODE_TOP ? 0 : '100%'), - _useStateRef2 = _slicedToArray(_useStateRef, 3), - animateTo = _useStateRef2[0], - setAnimateTo = _useStateRef2[1], - animateToRef = _useStateRef2[2]; + _useStateRef2 = _slicedToArray(_useStateRef, 3), + animateTo = _useStateRef2[0], + setAnimateTo = _useStateRef2[1], + animateToRef = _useStateRef2[2]; var _useStateRef3 = useStateRef(null), - _useStateRef4 = _slicedToArray(_useStateRef3, 3), - target = _useStateRef4[0], - setTarget = _useStateRef4[1], - targetRef = _useStateRef4[2]; // Internal context - + _useStateRef4 = _slicedToArray(_useStateRef3, 3), + target = _useStateRef4[0], + setTarget = _useStateRef4[1], + targetRef = _useStateRef4[2]; // Internal context var animateFromRef = useRef(0); var offsetHeightRef = useRef(0); var scrollHeightRef = useRef(0); // State context var _useState = useState(true), - _useState2 = _slicedToArray(_useState, 2), - atBottom = _useState2[0], - setAtBottom = _useState2[1]; + _useState2 = _slicedToArray(_useState, 2), + atBottom = _useState2[0], + setAtBottom = _useState2[1]; var _useState3 = useState(true), - _useState4 = _slicedToArray(_useState3, 2), - atEnd = _useState4[0], - setAtEnd = _useState4[1]; + _useState4 = _slicedToArray(_useState3, 2), + atEnd = _useState4[0], + setAtEnd = _useState4[1]; var _useState5 = useState(true), - _useState6 = _slicedToArray(_useState5, 2), - atTop = _useState6[0], - setAtTop = _useState6[1]; + _useState6 = _slicedToArray(_useState5, 2), + atTop = _useState6[0], + setAtTop = _useState6[1]; var _useState7 = useState(false), - _useState8 = _slicedToArray(_useState7, 2), - atStart = _useState8[0], - setAtStart = _useState8[1]; + _useState8 = _slicedToArray(_useState7, 2), + atStart = _useState8[0], + setAtStart = _useState8[1]; var _useStateRef5 = useStateRef(true), - _useStateRef6 = _slicedToArray(_useStateRef5, 3), - sticky = _useStateRef6[0], - setSticky = _useStateRef6[1], - stickyRef = _useStateRef6[2]; // High-rate state context - + _useStateRef6 = _slicedToArray(_useStateRef5, 3), + sticky = _useStateRef6[0], + setSticky = _useStateRef6[1], + stickyRef = _useStateRef6[2]; // High-rate state context var scrollPositionObserversRef = useRef([]); - var observeScrollPosition = useCallback(function (fn) { - var target = targetRef.current; - scrollPositionObserversRef.current.push(fn); - target && fn({ - scrollTop: target.scrollTop - }); - return function () { - var scrollPositionObservers = scrollPositionObserversRef.current; - - var index = _indexOfInstanceProperty(scrollPositionObservers).call(scrollPositionObservers, fn); - - ~index && _spliceInstanceProperty(scrollPositionObservers).call(scrollPositionObservers, index, 1); - }; - }, [scrollPositionObserversRef, targetRef]); - var handleSpineToEnd = useCallback(function () { - var animateTo = animateToRef.current; - debug(function () { - var _context; - - return _concatInstanceProperty(_context = ['%cSpineTo%c: %conEnd%c is fired.']).call(_context, _toConsumableArray(styleConsole('magenta')), _toConsumableArray(styleConsole('orange')), [{ - animateTo: animateTo - }]); - }); - ignoreScrollEventBeforeRef.current = _Date$now(); // handleScrollEnd may end at a position which should lose stickiness. - // In that case, we will need to set sticky to false to stop the interval check. - // Test case: - // 1. Add a scroller that always return 0 - // 2. Show a panel with mode === MODE_BOTTOM - // 3. Programmatically scroll to 0 (set element.scrollTop = 0) - // Expected: it should not repetitively call scrollTo(0) - // it should set stickiness to false - - isEnd(animateTo, mode) || setSticky(false); - setAnimateTo(null); - }, [animateToRef, debug, ignoreScrollEventBeforeRef, mode, setAnimateTo, setSticky]); // Function context - - var scrollTo = useCallback(function (nextAnimateTo) { - var _ref3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + var observeScrollPosition = useCallback( + function (fn) { + var target = targetRef.current; + scrollPositionObserversRef.current.push(fn); + target && + fn({ + scrollTop: target.scrollTop, + }); + return function () { + var scrollPositionObservers = scrollPositionObserversRef.current; + + var index = _indexOfInstanceProperty(scrollPositionObservers).call( + scrollPositionObservers, + fn + ); + + ~index && + _spliceInstanceProperty(scrollPositionObservers).call( + scrollPositionObservers, + index, + 1 + ); + }; + }, + [scrollPositionObserversRef, targetRef] + ); + var handleSpineToEnd = useCallback( + function () { + var animateTo = animateToRef.current; + debug(function () { + var _context; + + return _concatInstanceProperty( + (_context = ['%cSpineTo%c: %conEnd%c is fired.']) + ).call( + _context, + _toConsumableArray(styleConsole('magenta')), + _toConsumableArray(styleConsole('orange')), + [ + { + animateTo: animateTo, + }, + ] + ); + }); + ignoreScrollEventBeforeRef.current = _Date$now(); // handleScrollEnd may end at a position which should lose stickiness. + // In that case, we will need to set sticky to false to stop the interval check. + // Test case: + // 1. Add a scroller that always return 0 + // 2. Show a panel with mode === MODE_BOTTOM + // 3. Programmatically scroll to 0 (set element.scrollTop = 0) + // Expected: it should not repetitively call scrollTo(0) + // it should set stickiness to false + + isEnd(animateTo, mode) || setSticky(false); + setAnimateTo(null); + }, + [ + animateToRef, + debug, + ignoreScrollEventBeforeRef, + mode, + setAnimateTo, + setSticky, + ] + ); // Function context + + var scrollTo = useCallback( + function (nextAnimateTo) { + var _ref3 = + arguments.length > 1 && arguments[1] !== undefined + ? arguments[1] + : {}, behavior = _ref3.behavior; - var target = targetRef.current; - - if (typeof nextAnimateTo !== 'number' && nextAnimateTo !== '100%') { - return console.warn('react-scroll-to-bottom: Arguments passed to scrollTo() must be either number or "100%".'); - } // If it is trying to scroll to a position which is not "atEnd", it should set sticky to false after scroll ended. + var target = targetRef.current; + if (typeof nextAnimateTo !== 'number' && nextAnimateTo !== '100%') { + return console.warn( + 'react-scroll-to-bottom: Arguments passed to scrollTo() must be either number or "100%".' + ); + } // If it is trying to scroll to a position which is not "atEnd", it should set sticky to false after scroll ended. - debug(function () { - var _context2; - - return [_concatInstanceProperty(_context2 = ["%cscrollTo%c: Will scroll to %c".concat(typeof nextAnimateTo === 'number' ? nextAnimateTo + 'px' : nextAnimateTo.replace(/%/g, '%%'), "%c")]).call(_context2, _toConsumableArray(styleConsole('lime', '')), _toConsumableArray(styleConsole('purple'))), { - behavior: behavior, - nextAnimateTo: nextAnimateTo, - target: target - }]; - }); + debug(function () { + var _context2; + + return [ + _concatInstanceProperty( + (_context2 = [ + '%cscrollTo%c: Will scroll to %c'.concat( + typeof nextAnimateTo === 'number' + ? nextAnimateTo + 'px' + : nextAnimateTo.replace(/%/g, '%%'), + '%c' + ), + ]) + ).call( + _context2, + _toConsumableArray(styleConsole('lime', '')), + _toConsumableArray(styleConsole('purple')) + ), + { + behavior: behavior, + nextAnimateTo: nextAnimateTo, + target: target, + }, + ]; + }); - if (behavior === 'auto') { - // Stop any existing animation - handleSpineToEnd(); + if (behavior === 'auto') { + // Stop any existing animation + handleSpineToEnd(); - if (target) { - // Jump to the scroll position - target.scrollTop = nextAnimateTo === '100%' ? target.scrollHeight - target.offsetHeight : nextAnimateTo; + if (target) { + // Jump to the scroll position + target.scrollTop = + nextAnimateTo === '100%' + ? target.scrollHeight - target.offsetHeight + : nextAnimateTo; + } + } else { + behavior !== 'smooth' && + console.warn( + 'react-scroll-to-bottom: Please set "behavior" when calling "scrollTo". In future versions, the default behavior will be changed from smooth scrolling to discrete scrolling to align with HTML Standard.' + ); + setAnimateTo(nextAnimateTo); + } // This is for handling a case. When calling scrollTo('100%', { behavior: 'auto' }) multiple times, it would lose stickiness. + + if (isEnd(nextAnimateTo, mode)) { + debug(function () { + var _context3; + + return [ + _concatInstanceProperty( + (_context3 = [ + '%cscrollTo%c: Scrolling to end, will set sticky to %ctrue%c.', + ]) + ).call( + _context3, + _toConsumableArray(styleConsole('lime', '')), + _toConsumableArray(styleConsole('purple')) + ), + [ + { + mode: mode, + nextAnimateTo: nextAnimateTo, + }, + ], + ]; + }); + setSticky(true); } - } else { - behavior !== 'smooth' && console.warn('react-scroll-to-bottom: Please set "behavior" when calling "scrollTo". In future versions, the default behavior will be changed from smooth scrolling to discrete scrolling to align with HTML Standard.'); - setAnimateTo(nextAnimateTo); - } // This is for handling a case. When calling scrollTo('100%', { behavior: 'auto' }) multiple times, it would lose stickiness. - + }, + [debug, handleSpineToEnd, mode, setAnimateTo, setSticky, targetRef] + ); + var scrollToBottom = useCallback( + function () { + var _ref4 = + arguments.length > 0 && arguments[0] !== undefined + ? arguments[0] + : {}, + behavior = _ref4.behavior; - if (isEnd(nextAnimateTo, mode)) { debug(function () { - var _context3; + var _context4; - return [_concatInstanceProperty(_context3 = ["%cscrollTo%c: Scrolling to end, will set sticky to %ctrue%c."]).call(_context3, _toConsumableArray(styleConsole('lime', '')), _toConsumableArray(styleConsole('purple'))), [{ - mode: mode, - nextAnimateTo: nextAnimateTo - }]]; + return _concatInstanceProperty( + (_context4 = ['%cscrollToBottom%c: Called']) + ).call(_context4, _toConsumableArray(styleConsole('yellow', ''))); }); - setSticky(true); - } - }, [debug, handleSpineToEnd, mode, setAnimateTo, setSticky, targetRef]); - var scrollToBottom = useCallback(function () { - var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - behavior = _ref4.behavior; - - debug(function () { - var _context4; - - return _concatInstanceProperty(_context4 = ['%cscrollToBottom%c: Called']).call(_context4, _toConsumableArray(styleConsole('yellow', ''))); - }); - behavior !== 'smooth' && console.warn('react-scroll-to-bottom: Please set "behavior" when calling "scrollToBottom". In future versions, the default behavior will be changed from smooth scrolling to discrete scrolling to align with HTML Standard.'); - scrollTo('100%', { - behavior: behavior || 'smooth' - }); - }, [debug, scrollTo]); - var scrollToTop = useCallback(function () { - var _ref5 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + behavior !== 'smooth' && + console.warn( + 'react-scroll-to-bottom: Please set "behavior" when calling "scrollToBottom". In future versions, the default behavior will be changed from smooth scrolling to discrete scrolling to align with HTML Standard.' + ); + scrollTo('100%', { + behavior: behavior || 'smooth', + }); + }, + [debug, scrollTo] + ); + var scrollToTop = useCallback( + function () { + var _ref5 = + arguments.length > 0 && arguments[0] !== undefined + ? arguments[0] + : {}, behavior = _ref5.behavior; - debug(function () { - var _context5; - - return _concatInstanceProperty(_context5 = ['%cscrollToTop%c: Called']).call(_context5, _toConsumableArray(styleConsole('yellow', ''))); - }); - behavior !== 'smooth' && console.warn('react-scroll-to-bottom: Please set "behavior" when calling "scrollToTop". In future versions, the default behavior will be changed from smooth scrolling to discrete scrolling to align with HTML Standard.'); - scrollTo(0, { - behavior: behavior || 'smooth' - }); - }, [debug, scrollTo]); - var scrollToEnd = useCallback(function () { - var _ref6 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + debug(function () { + var _context5; + + return _concatInstanceProperty( + (_context5 = ['%cscrollToTop%c: Called']) + ).call(_context5, _toConsumableArray(styleConsole('yellow', ''))); + }); + behavior !== 'smooth' && + console.warn( + 'react-scroll-to-bottom: Please set "behavior" when calling "scrollToTop". In future versions, the default behavior will be changed from smooth scrolling to discrete scrolling to align with HTML Standard.' + ); + scrollTo(0, { + behavior: behavior || 'smooth', + }); + }, + [debug, scrollTo] + ); + var scrollToEnd = useCallback( + function () { + var _ref6 = + arguments.length > 0 && arguments[0] !== undefined + ? arguments[0] + : {}, behavior = _ref6.behavior; - debug(function () { - var _context6; - - return _concatInstanceProperty(_context6 = ['%cscrollToEnd%c: Called']).call(_context6, _toConsumableArray(styleConsole('yellow', ''))); - }); - behavior !== 'smooth' && console.warn('react-scroll-to-bottom: Please set "behavior" when calling "scrollToEnd". In future versions, the default behavior will be changed from smooth scrolling to discrete scrolling to align with HTML Standard.'); - var options = { - behavior: behavior || 'smooth' - }; - mode === MODE_TOP ? scrollToTop(options) : scrollToBottom(options); - }, [debug, mode, scrollToBottom, scrollToTop]); - var scrollToStart = useCallback(function () { - var _ref7 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + debug(function () { + var _context6; + + return _concatInstanceProperty( + (_context6 = ['%cscrollToEnd%c: Called']) + ).call(_context6, _toConsumableArray(styleConsole('yellow', ''))); + }); + behavior !== 'smooth' && + console.warn( + 'react-scroll-to-bottom: Please set "behavior" when calling "scrollToEnd". In future versions, the default behavior will be changed from smooth scrolling to discrete scrolling to align with HTML Standard.' + ); + var options = { + behavior: behavior || 'smooth', + }; + mode === MODE_TOP ? scrollToTop(options) : scrollToBottom(options); + }, + [debug, mode, scrollToBottom, scrollToTop] + ); + var scrollToStart = useCallback( + function () { + var _ref7 = + arguments.length > 0 && arguments[0] !== undefined + ? arguments[0] + : {}, behavior = _ref7.behavior; - debug(function () { - var _context7; - - return _concatInstanceProperty(_context7 = ['%cscrollToStart%c: Called']).call(_context7, _toConsumableArray(styleConsole('yellow', ''))); - }); - behavior !== 'smooth' && console.warn('react-scroll-to-bottom: Please set "behavior" when calling "scrollToStart". In future versions, the default behavior will be changed from smooth scrolling to discrete scrolling to align with HTML Standard.'); - var options = { - behavior: behavior || 'smooth' - }; - mode === MODE_TOP ? scrollToBottom(options) : scrollToTop(options); - }, [debug, mode, scrollToBottom, scrollToTop]); - var scrollToSticky = useCallback(function () { - var target = targetRef.current; - - if (target) { - if (initialScrollBehaviorRef.current === 'auto') { - debug(function () { - var _context8; + debug(function () { + var _context7; - return _concatInstanceProperty(_context8 = ["%ctarget changed%c: Initial scroll"]).call(_context8, _toConsumableArray(styleConsole('blue'))); - }); - target.scrollTop = mode === MODE_TOP ? 0 : target.scrollHeight - target.offsetHeight; - initialScrollBehaviorRef.current = false; - return; - } // This is very similar to scrollToEnd(). - // Instead of scrolling to end, it will call props.scroller() to determines how far it should scroll. - // This function could be called while it is auto-scrolling. + return _concatInstanceProperty( + (_context7 = ['%cscrollToStart%c: Called']) + ).call(_context7, _toConsumableArray(styleConsole('yellow', ''))); + }); + behavior !== 'smooth' && + console.warn( + 'react-scroll-to-bottom: Please set "behavior" when calling "scrollToStart". In future versions, the default behavior will be changed from smooth scrolling to discrete scrolling to align with HTML Standard.' + ); + var options = { + behavior: behavior || 'smooth', + }; + mode === MODE_TOP ? scrollToBottom(options) : scrollToTop(options); + }, + [debug, mode, scrollToBottom, scrollToTop] + ); + var scrollToSticky = useCallback( + function () { + var target = targetRef.current; + if (target) { + if (initialScrollBehaviorRef.current === 'auto') { + debug(function () { + var _context8; - var animateFrom = animateFromRef.current; - var offsetHeight = target.offsetHeight, + return _concatInstanceProperty( + (_context8 = ['%ctarget changed%c: Initial scroll']) + ).call(_context8, _toConsumableArray(styleConsole('blue'))); + }); + target.scrollTop = + mode === MODE_TOP ? 0 : target.scrollHeight - target.offsetHeight; + initialScrollBehaviorRef.current = false; + return; + } // This is very similar to scrollToEnd(). + // Instead of scrolling to end, it will call props.scroller() to determines how far it should scroll. + // This function could be called while it is auto-scrolling. + + var animateFrom = animateFromRef.current; + var offsetHeight = target.offsetHeight, scrollHeight = target.scrollHeight, scrollTop = target.scrollTop; - var maxValue = mode === MODE_TOP ? 0 : Math.max(0, scrollHeight - offsetHeight - scrollTop); - var minValue = Math.max(0, animateFrom - scrollTop); - var rawNextValue = scroller({ - maxValue: maxValue, - minValue: minValue, - offsetHeight: offsetHeight, - scrollHeight: scrollHeight, - scrollTop: scrollTop - }); - var nextValue = Math.max(0, Math.min(maxValue, rawNextValue)); - var nextAnimateTo; - - if (mode === MODE_TOP || nextValue !== maxValue) { - nextAnimateTo = scrollTop + nextValue; - } else { - // When scrolling to bottom, we should scroll to "100%". - // Otherwise, if we scroll to any number, it will lose stickiness when elements are adding too fast. - // "100%" is a special argument intended to make sure stickiness is not lost while new elements are being added. - nextAnimateTo = '100%'; - } - - debug(function () { - var _context9, _context10, _context11; - - return [_concatInstanceProperty(_context9 = [_concatInstanceProperty(_context10 = _concatInstanceProperty(_context11 = "%cscrollToSticky%c: Will animate from %c".concat(animateFrom, "px%c to %c")).call(_context11, typeof nextAnimateTo === 'number' ? nextAnimateTo + 'px' : nextAnimateTo.replace(/%/g, '%%'), "%c (%c")).call(_context10, (nextAnimateTo === '100%' ? maxValue : nextAnimateTo) + animateFrom, "px%c)")]).call(_context9, _toConsumableArray(styleConsole('orange')), _toConsumableArray(styleConsole('purple')), _toConsumableArray(styleConsole('purple')), _toConsumableArray(styleConsole('purple'))), { - animateFrom: animateFrom, + var maxValue = + mode === MODE_TOP + ? 0 + : Math.max(0, scrollHeight - offsetHeight - scrollTop); + var minValue = Math.max(0, animateFrom - scrollTop); + var rawNextValue = scroller({ maxValue: maxValue, minValue: minValue, - nextAnimateTo: nextAnimateTo, - nextValue: nextValue, offsetHeight: offsetHeight, - rawNextValue: rawNextValue, scrollHeight: scrollHeight, - scrollTop: scrollTop - }]; - }); - scrollTo(nextAnimateTo, { - behavior: 'smooth' - }); - } - }, [animateFromRef, debug, mode, scroller, scrollTo, targetRef]); - var handleScroll = useCallback(function (_ref8) { - var _context17; - - var timeStampLow = _ref8.timeStampLow; - var animateTo = animateToRef.current; - var target = targetRef.current; - var animating = animateTo !== null; // 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 || !target) { - // 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; - } + scrollTop: scrollTop, + }); + var nextValue = Math.max(0, Math.min(maxValue, rawNextValue)); + var nextAnimateTo; + + if (mode === MODE_TOP || nextValue !== maxValue) { + nextAnimateTo = scrollTop + nextValue; + } else { + // When scrolling to bottom, we should scroll to "100%". + // Otherwise, if we scroll to any number, it will lose stickiness when elements are adding too fast. + // "100%" is a special argument intended to make sure stickiness is not lost while new elements are being added. + nextAnimateTo = '100%'; + } + + debug(function () { + var _context9, _context10, _context11; + + return [ + _concatInstanceProperty( + (_context9 = [ + _concatInstanceProperty( + (_context10 = _concatInstanceProperty( + (_context11 = + '%cscrollToSticky%c: Will animate from %c'.concat( + animateFrom, + 'px%c to %c' + )) + ).call( + _context11, + typeof nextAnimateTo === 'number' + ? nextAnimateTo + 'px' + : nextAnimateTo.replace(/%/g, '%%'), + '%c (%c' + )) + ).call( + _context10, + (nextAnimateTo === '100%' ? maxValue : nextAnimateTo) + + animateFrom, + 'px%c)' + ), + ]) + ).call( + _context9, + _toConsumableArray(styleConsole('orange')), + _toConsumableArray(styleConsole('purple')), + _toConsumableArray(styleConsole('purple')), + _toConsumableArray(styleConsole('purple')) + ), + { + animateFrom: animateFrom, + maxValue: maxValue, + minValue: minValue, + nextAnimateTo: nextAnimateTo, + nextValue: nextValue, + offsetHeight: offsetHeight, + rawNextValue: rawNextValue, + scrollHeight: scrollHeight, + scrollTop: scrollTop, + }, + ]; + }); + scrollTo(nextAnimateTo, { + behavior: 'smooth', + }); + } + }, + [animateFromRef, debug, mode, scroller, scrollTo, targetRef] + ); + var handleScroll = useCallback( + function (_ref8) { + var _context17; + + var timeStampLow = _ref8.timeStampLow; + var animateTo = animateToRef.current; + var target = targetRef.current; + var animating = animateTo !== null; // 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 || !target) { + // 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; + } - var _computeViewState = computeViewState({ - mode: mode, - target: target - }), + var _computeViewState = computeViewState({ + mode: mode, + target: target, + }), atBottom = _computeViewState.atBottom, atEnd = _computeViewState.atEnd, atStart = _computeViewState.atStart, atTop = _computeViewState.atTop; - 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 pressed, it should still stick to the bottom + 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 pressed, it should still stick to the bottom - var nextOffsetHeight = target.offsetHeight, + var nextOffsetHeight = target.offsetHeight, nextScrollHeight = target.scrollHeight; - var offsetHeight = offsetHeightRef.current; - var scrollHeight = scrollHeightRef.current; - var offsetHeightChanged = nextOffsetHeight !== offsetHeight; - var scrollHeightChanged = nextScrollHeight !== scrollHeight; - - if (offsetHeightChanged) { - offsetHeightRef.current = nextOffsetHeight; - } + var offsetHeight = offsetHeightRef.current; + var scrollHeight = scrollHeightRef.current; + var offsetHeightChanged = nextOffsetHeight !== offsetHeight; + var scrollHeightChanged = nextScrollHeight !== scrollHeight; - if (scrollHeightChanged) { - scrollHeightRef.current = 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 (offsetHeightChanged) { + offsetHeightRef.current = nextOffsetHeight; + } + if (scrollHeightChanged) { + scrollHeightRef.current = 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 (!offsetHeightChanged && !scrollHeightChanged) { - // We are sticky if we are animating to the end, or we are already at the end. - // We can be "animating but not sticky" by calling "scrollTo(100)" where the container scrollHeight is 200px. - var nextSticky = animating && isEnd(animateTo, mode) || atEnd; + if (!offsetHeightChanged && !scrollHeightChanged) { + // We are sticky if we are animating to the end, or we are already at the end. + // We can be "animating but not sticky" by calling "scrollTo(100)" where the container scrollHeight is 200px. + var nextSticky = (animating && isEnd(animateTo, mode)) || atEnd; - if (stickyRef.current !== nextSticky) { + if (stickyRef.current !== nextSticky) { + debug(function () { + var _context12, _context13, _context14, _context15; + + return [ + _concatInstanceProperty( + (_context12 = [ + '%conScroll%c: %csetSticky%c(%c'.concat(nextSticky, '%c)'), + ]) + ).call( + _context12, + _toConsumableArray(styleConsole('red')), + _toConsumableArray(styleConsole('red')), + _toConsumableArray(styleConsole('purple')) + ), + _concatInstanceProperty( + (_context13 = [ + _concatInstanceProperty( + (_context14 = _concatInstanceProperty( + (_context15 = '(animating = %c'.concat( + animating, + '%c && isEnd = %c' + )) + ).call( + _context15, + isEnd(animateTo, mode), + '%c) || atEnd = %c' + )) + ).call(_context14, atEnd, '%c'), + ]) + ).call( + _context13, + _toConsumableArray(styleConsole('purple')), + _toConsumableArray(styleConsole('purple')), + _toConsumableArray(styleConsole('purple')), + [ + { + animating: animating, + animateTo: animateTo, + atEnd: atEnd, + mode: mode, + offsetHeight: target.offsetHeight, + scrollHeight: target.scrollHeight, + sticky: stickyRef.current, + nextSticky: nextSticky, + }, + ] + ), + ]; + }); + setSticky(nextSticky); + } + } else if (stickyRef.current) { debug(function () { - var _context12, _context13, _context14, _context15; - - return [_concatInstanceProperty(_context12 = ["%conScroll%c: %csetSticky%c(%c".concat(nextSticky, "%c)")]).call(_context12, _toConsumableArray(styleConsole('red')), _toConsumableArray(styleConsole('red')), _toConsumableArray(styleConsole('purple'))), _concatInstanceProperty(_context13 = [_concatInstanceProperty(_context14 = _concatInstanceProperty(_context15 = "(animating = %c".concat(animating, "%c && isEnd = %c")).call(_context15, isEnd(animateTo, mode), "%c) || atEnd = %c")).call(_context14, atEnd, "%c")]).call(_context13, _toConsumableArray(styleConsole('purple')), _toConsumableArray(styleConsole('purple')), _toConsumableArray(styleConsole('purple')), [{ - animating: animating, - animateTo: animateTo, - atEnd: atEnd, - mode: mode, - offsetHeight: target.offsetHeight, - scrollHeight: target.scrollHeight, - sticky: stickyRef.current, - nextSticky: nextSticky - }])]; + var _context16; + + return [ + _concatInstanceProperty( + (_context16 = [ + '%conScroll%c: Size changed while sticky, calling %cscrollToSticky()%c', + ]) + ).call( + _context16, + _toConsumableArray(styleConsole('red')), + _toConsumableArray(styleConsole('orange')), + [ + { + offsetHeightChanged: offsetHeightChanged, + scrollHeightChanged: scrollHeightChanged, + }, + ] + ), + { + nextOffsetHeight: nextOffsetHeight, + prevOffsetHeight: offsetHeight, + nextScrollHeight: nextScrollHeight, + prevScrollHeight: scrollHeight, + }, + ]; }); - setSticky(nextSticky); + scrollToSticky(); } - } else if (stickyRef.current) { - debug(function () { - var _context16; - - return [_concatInstanceProperty(_context16 = ["%conScroll%c: Size changed while sticky, calling %cscrollToSticky()%c"]).call(_context16, _toConsumableArray(styleConsole('red')), _toConsumableArray(styleConsole('orange')), [{ - offsetHeightChanged: offsetHeightChanged, - scrollHeightChanged: scrollHeightChanged - }]), { - nextOffsetHeight: nextOffsetHeight, - prevOffsetHeight: offsetHeight, - nextScrollHeight: nextScrollHeight, - prevScrollHeight: scrollHeight - }]; - }); - scrollToSticky(); - } - var actualScrollTop = target.scrollTop; + var actualScrollTop = target.scrollTop; - _forEachInstanceProperty(_context17 = scrollPositionObserversRef.current).call(_context17, function (observer) { - return observer({ - scrollTop: actualScrollTop + _forEachInstanceProperty( + (_context17 = scrollPositionObserversRef.current) + ).call(_context17, function (observer) { + return observer({ + scrollTop: actualScrollTop, + }); }); - }); - }, [animateToRef, debug, ignoreScrollEventBeforeRef, mode, offsetHeightRef, scrollHeightRef, scrollPositionObserversRef, scrollToSticky, setAtBottom, setAtEnd, setAtStart, setAtTop, setSticky, stickyRef, targetRef]); - useEffect(function () { - if (target) { - var stickyButNotAtEndSince = false; - var timeout = setImmediateInterval(function () { - var target = targetRef.current; - var animating = animateToRef.current !== null; - - if (stickyRef.current) { - if (!computeViewState({ - mode: mode, - target: target - }).atEnd) { - if (!stickyButNotAtEndSince) { - stickyButNotAtEndSince = _Date$now(); - } else if (_Date$now() - stickyButNotAtEndSince > SCROLL_DECISION_DURATION) { - // Quirks: In Firefox, after user scroll down, Firefox do two things: - // 1. Set to a new "scrollTop" - // 2. Fire "scroll" event - // For what we observed, #1 is fired about 20ms before #2. There is a chance that this stickyCheckTimeout is being scheduled between 1 and 2. - // That means, if we just look at #1 to decide if we should scroll, we will always scroll, in oppose to the user's intention. - // Repro: Open Firefox, set checkInterval to a lower number, and try to scroll by dragging the scroll handler. It will jump back. - // The "animating" check will make sure stickiness is not lost when elements are adding at a very fast pace. - if (!animating) { - animateFromRef.current = target.scrollTop; - debug(function () { - var _context18; - - return _concatInstanceProperty(_context18 = ["%cInterval check%c: Should sticky but not at end, calling %cscrollToSticky()%c to scroll"]).call(_context18, _toConsumableArray(styleConsole('navy')), _toConsumableArray(styleConsole('orange'))); - }); - scrollToSticky(); + }, + [ + animateToRef, + debug, + ignoreScrollEventBeforeRef, + mode, + offsetHeightRef, + scrollHeightRef, + scrollPositionObserversRef, + scrollToSticky, + setAtBottom, + setAtEnd, + setAtStart, + setAtTop, + setSticky, + stickyRef, + targetRef, + ] + ); + useEffect( + function () { + if (target) { + var stickyButNotAtEndSince = false; + var timeout = setImmediateInterval( + function () { + var target = targetRef.current; + var animating = animateToRef.current !== null; + + if (stickyRef.current) { + if ( + !computeViewState({ + mode: mode, + target: target, + }).atEnd + ) { + if (!stickyButNotAtEndSince) { + stickyButNotAtEndSince = _Date$now(); + } else if ( + _Date$now() - stickyButNotAtEndSince > + SCROLL_DECISION_DURATION + ) { + // Quirks: In Firefox, after user scroll down, Firefox do two things: + // 1. Set to a new "scrollTop" + // 2. Fire "scroll" event + // For what we observed, #1 is fired about 20ms before #2. There is a chance that this stickyCheckTimeout is being scheduled between 1 and 2. + // That means, if we just look at #1 to decide if we should scroll, we will always scroll, in oppose to the user's intention. + // Repro: Open Firefox, set checkInterval to a lower number, and try to scroll by dragging the scroll handler. It will jump back. + // The "animating" check will make sure stickiness is not lost when elements are adding at a very fast pace. + if (!animating) { + animateFromRef.current = target.scrollTop; + debug(function () { + var _context18; + + return _concatInstanceProperty( + (_context18 = [ + '%cInterval check%c: Should sticky but not at end, calling %cscrollToSticky()%c to scroll', + ]) + ).call( + _context18, + _toConsumableArray(styleConsole('navy')), + _toConsumableArray(styleConsole('orange')) + ); + }); + scrollToSticky(); + } + + stickyButNotAtEndSince = false; + } + } else { + stickyButNotAtEndSince = false; } - - stickyButNotAtEndSince = false; + } else if ( + target.scrollHeight <= target.offsetHeight && + !stickyRef.current + ) { + // When the container is emptied, we will set sticky back to true. + debug(function () { + var _context19; + + return [ + _concatInstanceProperty( + (_context19 = [ + '%cInterval check%c: Container is emptied, setting sticky back to %ctrue%c', + ]) + ).call( + _context19, + _toConsumableArray(styleConsole('navy')), + _toConsumableArray(styleConsole('purple')) + ), + [ + { + offsetHeight: target.offsetHeight, + scrollHeight: target.scrollHeight, + sticky: stickyRef.current, + }, + ], + ]; + }); + setSticky(true); } - } else { - stickyButNotAtEndSince = false; - } - } else if (target.scrollHeight <= target.offsetHeight && !stickyRef.current) { - // When the container is emptied, we will set sticky back to true. - debug(function () { - var _context19; - - return [_concatInstanceProperty(_context19 = ["%cInterval check%c: Container is emptied, setting sticky back to %ctrue%c"]).call(_context19, _toConsumableArray(styleConsole('navy')), _toConsumableArray(styleConsole('purple'))), [{ - offsetHeight: target.offsetHeight, - scrollHeight: target.scrollHeight, - sticky: stickyRef.current - }]]; - }); - setSticky(true); - } - }, Math.max(MIN_CHECK_INTERVAL, checkInterval) || MIN_CHECK_INTERVAL); - return function () { - return clearInterval(timeout); + }, + Math.max(MIN_CHECK_INTERVAL, checkInterval) || MIN_CHECK_INTERVAL + ); + return function () { + return clearInterval(timeout); + }; + } + }, + [ + animateToRef, + checkInterval, + debug, + mode, + scrollToSticky, + setSticky, + stickyRef, + target, + targetRef, + ] + ); + var styleToClassName = useMemo( + function () { + var emotion = + emotionPool[nonce] || + (emotionPool[nonce] = createEmotion({ + key: 'react-scroll-to-bottom--css-' + createCSSKey(), + nonce: nonce, + })); + return function (style) { + return emotion.css(style) + ''; }; - } - }, [animateToRef, checkInterval, debug, mode, scrollToSticky, setSticky, stickyRef, target, targetRef]); - var styleToClassName = useMemo(function () { - var emotion = emotionPool[nonce] || (emotionPool[nonce] = createEmotion({ - key: 'react-scroll-to-bottom--css-' + createCSSKey(), - nonce: nonce - })); - return function (style) { - return emotion.css(style) + ''; - }; - }, [nonce]); - var internalContext = useMemo(function () { - return { - observeScrollPosition: observeScrollPosition, - setTarget: setTarget, - styleToClassName: styleToClassName - }; - }, [observeScrollPosition, setTarget, styleToClassName]); - var state1Context = useMemo(function () { - return { - atBottom: atBottom, - atEnd: atEnd, - atStart: atStart, - atTop: atTop, - mode: mode - }; - }, [atBottom, atEnd, atStart, atTop, mode]); - var state2Context = useMemo(function () { - var animating = animateTo !== null; - return { - animating: animating, - animatingToEnd: animating && isEnd(animateTo, mode), - sticky: sticky - }; - }, [animateTo, mode, sticky]); - var combinedStateContext = useMemo(function () { - return _objectSpread(_objectSpread({}, state1Context), state2Context); - }, [state1Context, state2Context]); - var functionContext = useMemo(function () { - return { - scrollTo: scrollTo, - scrollToBottom: scrollToBottom, - scrollToEnd: scrollToEnd, - scrollToStart: scrollToStart, - scrollToTop: scrollToTop - }; - }, [scrollTo, scrollToBottom, scrollToEnd, scrollToStart, scrollToTop]); - useEffect(function () { - // We need to update the "scrollHeight" value to latest when the user do a focus inside the box. - // - // This is because: - // - In our code that mitigate Chrome synthetic scrolling, that code will look at whether "scrollHeight" value is latest or not. - // - That code only run on "scroll" event. - // - That means, on every "scroll" event, if the "scrollHeight" value is not latest, we will skip modifying the stickiness. - // - That means, if the user "focus" to an element that cause the scroll view to scroll to the bottom, the user agent will fire "scroll" event. - // Since the "scrollHeight" is not latest value, this "scroll" event will be ignored and stickiness will not be modified. - // - That means, if the user "focus" to a newly added element that is at the end of the scroll view, the "scroll to bottom" button will continue to show. - // - // Repro in Chrome: - // 1. Fill up a scroll view - // 2. Scroll up, the "scroll to bottom" button should show up - // 3. Click "Add a button" - // 4. Click on the scroll view (to pseudo-focus on it) - // 5. Press TAB, the scroll view will be at the bottom - // - // Expect: - // - The "scroll to bottom" button should be gone. - if (target) { - var handleFocus = function handleFocus() { - scrollHeightRef.current = target.scrollHeight; + }, + [nonce] + ); + var internalContext = useMemo( + function () { + return { + observeScrollPosition: observeScrollPosition, + setTarget: setTarget, + styleToClassName: styleToClassName, }; - - target.addEventListener('focus', handleFocus, { - capture: true, - passive: true - }); - return function () { - return target.removeEventListener('focus', handleFocus); + }, + [observeScrollPosition, setTarget, styleToClassName] + ); + var state1Context = useMemo( + function () { + return { + atBottom: atBottom, + atEnd: atEnd, + atStart: atStart, + atTop: atTop, + mode: mode, }; - } - }, [target]); + }, + [atBottom, atEnd, atStart, atTop, mode] + ); + var state2Context = useMemo( + function () { + var animating = animateTo !== null; + return { + animating: animating, + animatingToEnd: animating && isEnd(animateTo, mode), + sticky: sticky, + }; + }, + [animateTo, mode, sticky] + ); + var combinedStateContext = useMemo( + function () { + return _objectSpread(_objectSpread({}, state1Context), state2Context); + }, + [state1Context, state2Context] + ); + var functionContext = useMemo( + function () { + return { + scrollTo: scrollTo, + scrollToBottom: scrollToBottom, + scrollToEnd: scrollToEnd, + scrollToStart: scrollToStart, + scrollToTop: scrollToTop, + }; + }, + [scrollTo, scrollToBottom, scrollToEnd, scrollToStart, scrollToTop] + ); + useEffect( + function () { + // We need to update the "scrollHeight" value to latest when the user do a focus inside the box. + // + // This is because: + // - In our code that mitigate Chrome synthetic scrolling, that code will look at whether "scrollHeight" value is latest or not. + // - That code only run on "scroll" event. + // - That means, on every "scroll" event, if the "scrollHeight" value is not latest, we will skip modifying the stickiness. + // - That means, if the user "focus" to an element that cause the scroll view to scroll to the bottom, the user agent will fire "scroll" event. + // Since the "scrollHeight" is not latest value, this "scroll" event will be ignored and stickiness will not be modified. + // - That means, if the user "focus" to a newly added element that is at the end of the scroll view, the "scroll to bottom" button will continue to show. + // + // Repro in Chrome: + // 1. Fill up a scroll view + // 2. Scroll up, the "scroll to bottom" button should show up + // 3. Click "Add a button" + // 4. Click on the scroll view (to pseudo-focus on it) + // 5. Press TAB, the scroll view will be at the bottom + // + // Expect: + // - The "scroll to bottom" button should be gone. + if (target) { + var handleFocus = function handleFocus() { + scrollHeightRef.current = target.scrollHeight; + }; + + target.addEventListener('focus', handleFocus, { + capture: true, + passive: true, + }); + return function () { + return target.removeEventListener('focus', handleFocus); + }; + } + }, + [target] + ); debug(function () { var _context20; - return [_concatInstanceProperty(_context20 = ["%cRender%c: Render"]).call(_context20, _toConsumableArray(styleConsole('cyan', ''))), { - animateTo: animateTo, - animating: animateTo !== null, - sticky: sticky, - target: target - }]; + return [ + _concatInstanceProperty((_context20 = ['%cRender%c: Render'])).call( + _context20, + _toConsumableArray(styleConsole('cyan', '')) + ), + { + animateTo: animateTo, + animating: animateTo !== null, + sticky: sticky, + target: target, + }, + ]; }); - return /*#__PURE__*/React.createElement(InternalContext.Provider, { - value: internalContext - }, /*#__PURE__*/React.createElement(FunctionContext.Provider, { - value: functionContext - }, /*#__PURE__*/React.createElement(StateContext.Provider, { - value: combinedStateContext - }, /*#__PURE__*/React.createElement(State1Context.Provider, { - value: state1Context - }, /*#__PURE__*/React.createElement(State2Context.Provider, { - value: state2Context - }, children, target && /*#__PURE__*/React.createElement(EventSpy, { - debounce: debounce, - name: "scroll", - onEvent: handleScroll, - target: target - }), target && animateTo !== null && /*#__PURE__*/React.createElement(SpineTo, { - name: "scrollTop", - onEnd: handleSpineToEnd, - target: target, - value: animateTo - })))))); + return /*#__PURE__*/ React.createElement( + InternalContext.Provider, + { + value: internalContext, + }, + /*#__PURE__*/ React.createElement( + FunctionContext.Provider, + { + value: functionContext, + }, + /*#__PURE__*/ React.createElement( + StateContext.Provider, + { + value: combinedStateContext, + }, + /*#__PURE__*/ React.createElement( + State1Context.Provider, + { + value: state1Context, + }, + /*#__PURE__*/ React.createElement( + State2Context.Provider, + { + value: state2Context, + }, + children, + target && + /*#__PURE__*/ React.createElement(EventSpy, { + debounce: debounce, + name: 'scroll', + onEvent: handleScroll, + target: target, + }), + target && + animateTo !== null && + /*#__PURE__*/ React.createElement(SpineTo, { + name: 'scrollTop', + onEnd: handleSpineToEnd, + target: target, + value: animateTo, + }) + ) + ) + ) + ) + ); }; -Composer.defaultProps = { - checkInterval: 100, - children: undefined, - debounce: 17, - debug: undefined, - initialScrollBehavior: 'smooth', - mode: undefined, - nonce: undefined, - scroller: DEFAULT_SCROLLER -}; Composer.propTypes = { checkInterval: PropTypes.number, children: PropTypes.any, @@ -631,7 +996,7 @@ Composer.propTypes = { initialScrollBehavior: PropTypes.oneOf(['auto', 'smooth']), mode: PropTypes.oneOf(['bottom', 'top']), nonce: PropTypes.string, - scroller: PropTypes.func + scroller: PropTypes.func, }; export default Composer; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9TY3JvbGxUb0JvdHRvbS9Db21wb3Nlci5qcyJdLCJuYW1lcyI6WyJjcmVhdGVFbW90aW9uIiwiUHJvcFR5cGVzIiwiUmVhY3QiLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImNyZWF0ZUNTU0tleSIsImNyZWF0ZURlYnVnIiwiRXZlbnRTcHkiLCJGdW5jdGlvbkNvbnRleHQiLCJJbnRlcm5hbENvbnRleHQiLCJTcGluZVRvIiwiU3RhdGUxQ29udGV4dCIsIlN0YXRlMkNvbnRleHQiLCJTdGF0ZUNvbnRleHQiLCJzdHlsZUNvbnNvbGUiLCJ1c2VTdGF0ZVJlZiIsIkRFRkFVTFRfU0NST0xMRVIiLCJJbmZpbml0eSIsIk1JTl9DSEVDS19JTlRFUlZBTCIsIk1PREVfQk9UVE9NIiwiTU9ERV9UT1AiLCJORUFSX0VORF9USFJFU0hPTEQiLCJTQ1JPTExfREVDSVNJT05fRFVSQVRJT04iLCJlbW90aW9uUG9vbCIsInNldEltbWVkaWF0ZUludGVydmFsIiwiZm4iLCJtcyIsImNvbXB1dGVWaWV3U3RhdGUiLCJtb2RlIiwidGFyZ2V0Iiwib2Zmc2V0SGVpZ2h0Iiwic2Nyb2xsSGVpZ2h0Iiwic2Nyb2xsVG9wIiwiYXRCb3R0b20iLCJhdFRvcCIsImF0RW5kIiwiYXRTdGFydCIsImlzRW5kIiwiYW5pbWF0ZVRvIiwiQ29tcG9zZXIiLCJjaGVja0ludGVydmFsIiwiY2hpbGRyZW4iLCJkZWJvdW5jZSIsImRlYnVnRnJvbVByb3AiLCJkZWJ1ZyIsImluaXRpYWxTY3JvbGxCZWhhdmlvciIsIm5vbmNlIiwic2Nyb2xsZXIiLCJmb3JjZSIsImlnbm9yZVNjcm9sbEV2ZW50QmVmb3JlUmVmIiwiaW5pdGlhbFNjcm9sbEJlaGF2aW9yUmVmIiwic2V0QW5pbWF0ZVRvIiwiYW5pbWF0ZVRvUmVmIiwic2V0VGFyZ2V0IiwidGFyZ2V0UmVmIiwiYW5pbWF0ZUZyb21SZWYiLCJvZmZzZXRIZWlnaHRSZWYiLCJzY3JvbGxIZWlnaHRSZWYiLCJzZXRBdEJvdHRvbSIsInNldEF0RW5kIiwic2V0QXRUb3AiLCJzZXRBdFN0YXJ0Iiwic3RpY2t5Iiwic2V0U3RpY2t5Iiwic3RpY2t5UmVmIiwic2Nyb2xsUG9zaXRpb25PYnNlcnZlcnNSZWYiLCJvYnNlcnZlU2Nyb2xsUG9zaXRpb24iLCJjdXJyZW50IiwicHVzaCIsInNjcm9sbFBvc2l0aW9uT2JzZXJ2ZXJzIiwiaW5kZXgiLCJoYW5kbGVTcGluZVRvRW5kIiwic2Nyb2xsVG8iLCJuZXh0QW5pbWF0ZVRvIiwiYmVoYXZpb3IiLCJjb25zb2xlIiwid2FybiIsInJlcGxhY2UiLCJzY3JvbGxUb0JvdHRvbSIsInNjcm9sbFRvVG9wIiwic2Nyb2xsVG9FbmQiLCJvcHRpb25zIiwic2Nyb2xsVG9TdGFydCIsInNjcm9sbFRvU3RpY2t5IiwiYW5pbWF0ZUZyb20iLCJtYXhWYWx1ZSIsIk1hdGgiLCJtYXgiLCJtaW5WYWx1ZSIsInJhd05leHRWYWx1ZSIsIm5leHRWYWx1ZSIsIm1pbiIsImhhbmRsZVNjcm9sbCIsInRpbWVTdGFtcExvdyIsImFuaW1hdGluZyIsIm5leHRPZmZzZXRIZWlnaHQiLCJuZXh0U2Nyb2xsSGVpZ2h0Iiwib2Zmc2V0SGVpZ2h0Q2hhbmdlZCIsInNjcm9sbEhlaWdodENoYW5nZWQiLCJuZXh0U3RpY2t5IiwicHJldk9mZnNldEhlaWdodCIsInByZXZTY3JvbGxIZWlnaHQiLCJhY3R1YWxTY3JvbGxUb3AiLCJvYnNlcnZlciIsInN0aWNreUJ1dE5vdEF0RW5kU2luY2UiLCJ0aW1lb3V0IiwiY2xlYXJJbnRlcnZhbCIsInN0eWxlVG9DbGFzc05hbWUiLCJlbW90aW9uIiwia2V5Iiwic3R5bGUiLCJjc3MiLCJpbnRlcm5hbENvbnRleHQiLCJzdGF0ZTFDb250ZXh0Iiwic3RhdGUyQ29udGV4dCIsImFuaW1hdGluZ1RvRW5kIiwiY29tYmluZWRTdGF0ZUNvbnRleHQiLCJmdW5jdGlvbkNvbnRleHQiLCJoYW5kbGVGb2N1cyIsImFkZEV2ZW50TGlzdGVuZXIiLCJjYXB0dXJlIiwicGFzc2l2ZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJkZWZhdWx0UHJvcHMiLCJ1bmRlZmluZWQiLCJwcm9wVHlwZXMiLCJudW1iZXIiLCJhbnkiLCJib29sIiwib25lT2YiLCJzdHJpbmciLCJmdW5jIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU9BLGFBQVAsTUFBMEIsOEJBQTFCO0FBQ0EsT0FBT0MsU0FBUCxNQUFzQixZQUF0QjtBQUNBLE9BQU9DLEtBQVAsSUFBZ0JDLFdBQWhCLEVBQTZCQyxTQUE3QixFQUF3Q0MsT0FBeEMsRUFBaURDLE1BQWpELEVBQXlEQyxRQUF6RCxRQUF5RSxPQUF6RTtBQUVBLE9BQU9DLFlBQVAsTUFBeUIsaUJBQXpCO0FBQ0EsT0FBT0MsV0FBUCxNQUF3QixnQkFBeEI7QUFDQSxPQUFPQyxRQUFQLE1BQXFCLGFBQXJCO0FBQ0EsT0FBT0MsZUFBUCxNQUE0QixtQkFBNUI7QUFDQSxPQUFPQyxlQUFQLE1BQTRCLG1CQUE1QjtBQUNBLE9BQU9DLE9BQVAsTUFBb0IsWUFBcEI7QUFDQSxPQUFPQyxhQUFQLE1BQTBCLGlCQUExQjtBQUNBLE9BQU9DLGFBQVAsTUFBMEIsaUJBQTFCO0FBQ0EsT0FBT0MsWUFBUCxNQUF5QixnQkFBekI7QUFDQSxPQUFPQyxZQUFQLE1BQXlCLHVCQUF6QjtBQUNBLE9BQU9DLFdBQVAsTUFBd0IsK0JBQXhCOztBQUVBLElBQU1DLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBbUI7QUFBQSxTQUFNQyxRQUFOO0FBQUEsQ0FBekI7O0FBQ0EsSUFBTUMsa0JBQWtCLEdBQUcsRUFBM0IsQyxDQUErQjs7QUFDL0IsSUFBTUMsV0FBVyxHQUFHLFFBQXBCO0FBQ0EsSUFBTUMsUUFBUSxHQUFHLEtBQWpCO0FBQ0EsSUFBTUMsa0JBQWtCLEdBQUcsQ0FBM0I7QUFDQSxJQUFNQyx3QkFBd0IsR0FBRyxFQUFqQyxDLENBQXFDO0FBRXJDO0FBQ0E7O0FBQ0EsSUFBTUMsV0FBVyxHQUFHLEVBQXBC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RUFBRTlCLFNBQVMsQ0FBQ21JLEtBQVYsQ0FBZ0IsQ0FBQyxRQUFELEVBQVcsS0FBWCxDQUFoQixDQU5hO0FBT25CbkYsRUFBQUEsS0FBSyxFQUFFaEQsU0FBUyxDQUFDb0ksTUFQRTtBQVFuQm5GLEVBQUFBLFFBQVEsRUFBRWpELFNBQVMsQ0FBQ3FJO0FBUkQsQ0FBckI7QUFXQSxlQUFlNUYsUUFBZiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVFbW90aW9uIGZyb20gJ0BlbW90aW9uL2Nzcy9jcmVhdGUtaW5zdGFuY2UnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgY3JlYXRlQ1NTS2V5IGZyb20gJy4uL2NyZWF0ZUNTU0tleSc7XG5pbXBvcnQgY3JlYXRlRGVidWcgZnJvbSAnLi4vdXRpbHMvZGVidWcnO1xuaW1wb3J0IEV2ZW50U3B5IGZyb20gJy4uL0V2ZW50U3B5JztcbmltcG9ydCBGdW5jdGlvbkNvbnRleHQgZnJvbSAnLi9GdW5jdGlvbkNvbnRleHQnO1xuaW1wb3J0IEludGVybmFsQ29udGV4dCBmcm9tICcuL0ludGVybmFsQ29udGV4dCc7XG5pbXBvcnQgU3BpbmVUbyBmcm9tICcuLi9TcGluZVRvJztcbmltcG9ydCBTdGF0ZTFDb250ZXh0IGZyb20gJy4vU3RhdGUxQ29udGV4dCc7XG5pbXBvcnQgU3RhdGUyQ29udGV4dCBmcm9tICcuL1N0YXRlMkNvbnRleHQnO1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICcuL1N0YXRlQ29udGV4dCc7XG5pbXBvcnQgc3R5bGVDb25zb2xlIGZyb20gJy4uL3V0aWxzL3N0eWxlQ29uc29sZSc7XG5pbXBvcnQgdXNlU3RhdGVSZWYgZnJvbSAnLi4vaG9va3MvaW50ZXJuYWwvdXNlU3RhdGVSZWYnO1xuXG5jb25zdCBERUZBVUxUX1NDUk9MTEVSID0gKCkgPT4gSW5maW5pdHk7XG5jb25zdCBNSU5fQ0hFQ0tfSU5URVJWQUwgPSAxNzsgLy8gMSBmcmFtZVxuY29uc3QgTU9ERV9CT1RUT00gPSAnYm90dG9tJztcbmNvbnN0IE1PREVfVE9QID0gJ3RvcCc7XG5jb25zdCBORUFSX0VORF9USFJFU0hPTEQgPSAxO1xuY29uc3QgU0NST0xMX0RFQ0lTSU9OX0RVUkFUSU9OID0gMzQ7IC8vIDIgZnJhbWVzXG5cbi8vIFdlIHBvb2wgdGhlIGVtb3Rpb24gb2JqZWN0IGJ5IG5vbmNlLlxuLy8gVGhpcyBpcyB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgZ2VuZXJhdGUgdG9vIG1hbnkgdW5uZWVkZWQgPHN0eWxlPiB0YWdzLlxuY29uc3QgZW1vdGlvblBvb2wgPSB7fTtcblxuZnVuY3Rpb24gc2V0SW1tZWRpYXRlSW50ZXJ2YWwoZm4sIG1zKSB7XG4gIGZuKCk7XG5cbiAgcmV0dXJuIHNldEludGVydmFsKGZuLCBtcyk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVWaWV3U3RhdGUoeyBtb2RlLCB0YXJnZXQ6IHsgb2Zmc2V0SGVpZ2h0LCBzY3JvbGxIZWlnaHQsIHNjcm9sbFRvcCB9IH0pIHtcbiAgY29uc3QgYXRCb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBvZmZzZXRIZWlnaHQgPCBORUFSX0VORF9USFJFU0hPTEQ7XG4gIGNvbnN0IGF0VG9wID0gc2Nyb2xsVG9wIDwgTkVBUl9FTkRfVEhSRVNIT0xEO1xuXG4gIGNvbnN0IGF0RW5kID0gbW9kZSA9PT0gTU9ERV9UT1AgPyBhdFRvcCA6IGF0Qm90dG9tO1xuICBjb25zdCBhdFN0YXJ0ID0gbW9kZSAhPT0gTU9ERV9UT1AgPyBhdFRvcCA6IGF0Qm90dG9tO1xuXG4gIHJldHVybiB7XG4gICAgYXRCb3R0b20sXG4gICAgYXRFbmQsXG4gICAgYXRTdGFydCxcbiAgICBhdFRvcFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc0VuZChhbmltYXRlVG8sIG1vZGUpIHtcbiAgcmV0dXJuIGFuaW1hdGVUbyA9PT0gKG1vZGUgPT09IE1PREVfVE9QID8gMCA6ICcxMDAlJyk7XG59XG5cbmNvbnN0IENvbXBvc2VyID0gKHtcbiAgY2hlY2tJbnRlcnZhbCxcbiAgY2hpbGRyZW4sXG4gIGRlYm91bmNlLFxuICBkZWJ1ZzogZGVidWdGcm9tUHJvcCxcbiAgaW5pdGlhbFNjcm9sbEJlaGF2aW9yLFxuICBtb2RlLFxuICBub25jZSxcbiAgc2Nyb2xsZXJcbn0pID0+IHtcbiAgY29uc3QgZGVidWcgPSB1c2VNZW1vKCgpID0+IGNyZWF0ZURlYnVnKGA8U2Nyb2xsVG9Cb3R0b20+YCwgeyBmb3JjZTogZGVidWdGcm9tUHJvcCB9KSwgW2RlYnVnRnJvbVByb3BdKTtcblxuICBtb2RlID0gbW9kZSA9PT0gTU9ERV9UT1AgPyBNT0RFX1RPUCA6IE1PREVfQk9UVE9NO1xuXG4gIGNvbnN0IGlnbm9yZVNjcm9sbEV2ZW50QmVmb3JlUmVmID0gdXNlUmVmKDApO1xuICBjb25zdCBpbml0aWFsU2Nyb2xsQmVoYXZpb3JSZWYgPSB1c2VSZWYoaW5pdGlhbFNjcm9sbEJlaGF2aW9yKTtcbiAgY29uc3QgW2FuaW1hdGVUbywgc2V0QW5pbWF0ZVRvLCBhbmltYXRlVG9SZWZdID0gdXNlU3RhdGVSZWYobW9kZSA9PT0gTU9ERV9UT1AgPyAwIDogJzEwMCUnKTtcbiAgY29uc3QgW3RhcmdldCwgc2V0VGFyZ2V0LCB0YXJnZXRSZWZdID0gdXNlU3RhdGVSZWYobnVsbCk7XG5cbiAgLy8gSW50ZXJuYWwgY29udGV4dFxuICBjb25zdCBhbmltYXRlRnJvbVJlZiA9IHVzZVJlZigwKTtcbiAgY29uc3Qgb2Zmc2V0SGVpZ2h0UmVmID0gdXNlUmVmKDApO1xuICBjb25zdCBzY3JvbGxIZWlnaHRSZWYgPSB1c2VSZWYoMCk7XG5cbiAgLy8gU3RhdGUgY29udGV4dFxuICBjb25zdCBbYXRCb3R0b20sIHNldEF0Qm90dG9tXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbYXRFbmQsIHNldEF0RW5kXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbYXRUb3AsIHNldEF0VG9wXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbYXRTdGFydCwgc2V0QXRTdGFydF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzdGlja3ksIHNldFN0aWNreSwgc3RpY2t5UmVmXSA9IHVzZVN0YXRlUmVmKHRydWUpO1xuXG4gIC8vIEhpZ2gtcmF0ZSBzdGF0ZSBjb250ZXh0XG4gIGNvbnN0IHNjcm9sbFBvc2l0aW9uT2JzZXJ2ZXJzUmVmID0gdXNlUmVmKFtdKTtcbiAgY29uc3Qgb2JzZXJ2ZVNjcm9sbFBvc2l0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgZm4gPT4ge1xuICAgICAgY29uc3QgeyBjdXJyZW50OiB0YXJnZXQgfSA9IHRhcmdldFJlZjtcblxuICAgICAgc2Nyb2xsUG9zaXRpb25PYnNlcnZlcnNSZWYuY3VycmVudC5wdXNoKGZuKTtcbiAgICAgIHRhcmdldCAmJiBmbih7IHNjcm9sbFRvcDogdGFyZ2V0LnNjcm9sbFRvcCB9KTtcblxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgY29uc3QgeyBjdXJyZW50OiBzY3JvbGxQb3NpdGlvbk9ic2VydmVycyB9ID0gc2Nyb2xsUG9zaXRpb25PYnNlcnZlcnNSZWY7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gc2Nyb2xsUG9zaXRpb25PYnNlcnZlcnMuaW5kZXhPZihmbik7XG5cbiAgICAgICAgfmluZGV4ICYmIHNjcm9sbFBvc2l0aW9uT2JzZXJ2ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9O1xuICAgIH0sXG4gICAgW3Njcm9sbFBvc2l0aW9uT2JzZXJ2ZXJzUmVmLCB0YXJnZXRSZWZdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU3BpbmVUb0VuZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCB7IGN1cnJlbnQ6IGFuaW1hdGVUbyB9ID0gYW5pbWF0ZVRvUmVmO1xuXG4gICAgZGVidWcoKCkgPT4gW1xuICAgICAgJyVjU3BpbmVUbyVjOiAlY29uRW5kJWMgaXMgZmlyZWQuJyxcbiAgICAgIC4uLnN0eWxlQ29uc29sZSgnbWFnZW50YScpLFxuICAgICAgLi4uc3R5bGVDb25zb2xlKCdvcmFuZ2UnKSxcbiAgICAgIHsgYW5pbWF0ZVRvIH1cbiAgICBdKTtcblxuICAgIGlnbm9yZVNjcm9sbEV2ZW50QmVmb3JlUmVmLmN1cnJlbnQgPSBEYXRlLm5vdygpO1xuXG4gICAgLy8gaGFuZGxlU2Nyb2xsRW5kIG1heSBlbmQgYXQgYSBwb3NpdGlvbiB3aGljaCBzaG91bGQgbG9zZSBzdGlja2luZXNzLlxuICAgIC8vIEluIHRoYXQgY2FzZSwgd2Ugd2lsbCBuZWVkIHRvIHNldCBzdGlja3kgdG8gZmFsc2UgdG8gc3RvcCB0aGUgaW50ZXJ2YWwgY2hlY2suXG4gICAgLy8gVGVzdCBjYXNlOlxuICAgIC8vIDEuIEFkZCBhIHNjcm9sbGVyIHRoYXQgYWx3YXlzIHJldHVybiAwXG4gICAgLy8gMi4gU2hvdyBhIHBhbmVsIHdpdGggbW9kZSA9PT0gTU9ERV9CT1RUT01cbiAgICAvLyAzLiBQcm9ncmFtbWF0aWNhbGx5IHNjcm9sbCB0byAwIChzZXQgZWxlbWVudC5zY3JvbGxUb3AgPSAwKVxuICAgIC8vIEV4cGVjdGVkOiBpdCBzaG91bGQgbm90IHJlcGV0aXRpdmVseSBjYWxsIHNjcm9sbFRvKDApXG4gICAgLy8gICAgICAgICAgIGl0IHNob3VsZCBzZXQgc3RpY2tpbmVzcyB0byBmYWxzZVxuXG4gICAgaXNFbmQoYW5pbWF0ZVRvLCBtb2RlKSB8fCBzZXRTdGlja3koZmFsc2UpO1xuICAgIHNldEFuaW1hdGVUbyhudWxsKTtcbiAgfSwgW2FuaW1hdGVUb1JlZiwgZGVidWcsIGlnbm9yZVNjcm9sbEV2ZW50QmVmb3JlUmVmLCBtb2RlLCBzZXRBbmltYXRlVG8sIHNldFN0aWNreV0pO1xuXG4gIC8vIEZ1bmN0aW9uIGNvbnRleHRcbiAgY29uc3Qgc2Nyb2xsVG8gPSB1c2VDYWxsYmFjayhcbiAgICAobmV4dEFuaW1hdGVUbywgeyBiZWhhdmlvciB9ID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHsgY3VycmVudDogdGFyZ2V0IH0gPSB0YXJnZXRSZWY7XG5cbiAgICAgIGlmICh0eXBlb2YgbmV4dEFuaW1hdGVUbyAhPT0gJ251bWJlcicgJiYgbmV4dEFuaW1hdGVUbyAhPT0gJzEwMCUnKSB7XG4gICAgICAgIHJldHVybiBjb25zb2xlLndhcm4oJ3JlYWN0LXNjcm9sbC10by1ib3R0b206IEFyZ3VtZW50cyBwYXNzZWQgdG8gc2Nyb2xsVG8oKSBtdXN0IGJlIGVpdGhlciBudW1iZXIgb3IgXCIxMDAlXCIuJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIGl0IGlzIHRyeWluZyB0byBzY3JvbGwgdG8gYSBwb3NpdGlvbiB3aGljaCBpcyBub3QgXCJhdEVuZFwiLCBpdCBzaG91bGQgc2V0IHN0aWNreSB0byBmYWxzZSBhZnRlciBzY3JvbGwgZW5kZWQuXG5cbiAgICAgIGRlYnVnKCgpID0+IFtcbiAgICAgICAgW1xuICAgICAgICAgIGAlY3Njcm9sbFRvJWM6IFdpbGwgc2Nyb2xsIHRvICVjJHtcbiAgICAgICAgICAgIHR5cGVvZiBuZXh0QW5pbWF0ZVRvID09PSAnbnVtYmVyJyA/IG5leHRBbmltYXRlVG8gKyAncHgnIDogbmV4dEFuaW1hdGVUby5yZXBsYWNlKC8lL2d1LCAnJSUnKVxuICAgICAgICAgIH0lY2AsXG4gICAgICAgICAgLi4uc3R5bGVDb25zb2xlKCdsaW1lJywgJycpLFxuICAgICAgICAgIC4uLnN0eWxlQ29uc29sZSgncHVycGxlJylcbiAgICAgICAgXSxcbiAgICAgICAge1xuICAgICAgICAgIGJlaGF2aW9yLFxuICAgICAgICAgIG5leHRBbmltYXRlVG8sXG4gICAgICAgICAgdGFyZ2V0XG4gICAgICAgIH1cbiAgICAgIF0pO1xuXG4gICAgICBpZiAoYmVoYXZpb3IgPT09ICdhdXRvJykge1xuICAgICAgICAvLyBTdG9wIGFueSBleGlzdGluZyBhbmltYXRpb25cbiAgICAgICAgaGFuZGxlU3BpbmVUb0VuZCgpO1xuXG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAvLyBKdW1wIHRvIHRoZSBzY3JvbGwgcG9zaXRpb25cbiAgICAgICAgICB0YXJnZXQuc2Nyb2xsVG9wID0gbmV4dEFuaW1hdGVUbyA9PT0gJzEwMCUnID8gdGFyZ2V0LnNjcm9sbEhlaWdodCAtIHRhcmdldC5vZmZzZXRIZWlnaHQgOiBuZXh0QW5pbWF0ZVRvO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiZWhhdmlvciAhPT0gJ3Ntb290aCcgJiZcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAncmVhY3Qtc2Nyb2xsLXRvLWJvdHRvbTogUGxlYXNlIHNldCBcImJlaGF2aW9yXCIgd2hlbiBjYWxsaW5nIFwic2Nyb2xsVG9cIi4gSW4gZnV0dXJlIHZlcnNpb25zLCB0aGUgZGVmYXVsdCBiZWhhdmlvciB3aWxsIGJlIGNoYW5nZWQgZnJvbSBzbW9vdGggc2Nyb2xsaW5nIHRvIGRpc2NyZXRlIHNjcm9sbGluZyB0byBhbGlnbiB3aXRoIEhUTUwgU3RhbmRhcmQuJ1xuICAgICAgICAgICk7XG5cbiAgICAgICAgc2V0QW5pbWF0ZVRvKG5leHRBbmltYXRlVG8pO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGlzIGlzIGZvciBoYW5kbGluZyBhIGNhc2UuIFdoZW4gY2FsbGluZyBzY3JvbGxUbygnMTAwJScsIHsgYmVoYXZpb3I6ICdhdXRvJyB9KSBtdWx0aXBsZSB0aW1lcywgaXQgd291bGQgbG9zZSBzdGlja2luZXNzLlxuICAgICAgaWYgKGlzRW5kKG5leHRBbmltYXRlVG8sIG1vZGUpKSB7XG4gICAgICAgIGRlYnVnKCgpID0+IFtcbiAgICAgICAgICBbXG4gICAgICAgICAgICBgJWNzY3JvbGxUbyVjOiBTY3JvbGxpbmcgdG8gZW5kLCB3aWxsIHNldCBzdGlja3kgdG8gJWN0cnVlJWMuYCxcbiAgICAgICAgICAgIC4uLnN0eWxlQ29uc29sZSgnbGltZScsICcnKSxcbiAgICAgICAgICAgIC4uLnN0eWxlQ29uc29sZSgncHVycGxlJylcbiAgICAgICAgICBdLFxuICAgICAgICAgIFt7IG1vZGUsIG5leHRBbmltYXRlVG8gfV1cbiAgICAgICAgXSk7XG5cbiAgICAgICAgc2V0U3RpY2t5KHRydWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2RlYnVnLCBoYW5kbGVTcGluZVRvRW5kLCBtb2RlLCBzZXRBbmltYXRlVG8sIHNldFN0aWNreSwgdGFyZ2V0UmVmXVxuICApO1xuXG4gIGNvbnN0IHNjcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soXG4gICAgKHsgYmVoYXZpb3IgfSA9IHt9KSA9PiB7XG4gICAgICBkZWJ1ZygoKSA9PiBbJyVjc2Nyb2xsVG9Cb3R0b20lYzogQ2FsbGVkJywgLi4uc3R5bGVDb25zb2xlKCd5ZWxsb3cnLCAnJyldKTtcblxuICAgICAgYmVoYXZpb3IgIT09ICdzbW9vdGgnICYmXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAncmVhY3Qtc2Nyb2xsLXRvLWJvdHRvbTogUGxlYXNlIHNldCBcImJlaGF2aW9yXCIgd2hlbiBjYWxsaW5nIFwic2Nyb2xsVG9Cb3R0b21cIi4gSW4gZnV0dXJlIHZlcnNpb25zLCB0aGUgZGVmYXVsdCBiZWhhdmlvciB3aWxsIGJlIGNoYW5nZWQgZnJvbSBzbW9vdGggc2Nyb2xsaW5nIHRvIGRpc2NyZXRlIHNjcm9sbGluZyB0byBhbGlnbiB3aXRoIEhUTUwgU3RhbmRhcmQuJ1xuICAgICAgICApO1xuXG4gICAgICBzY3JvbGxUbygnMTAwJScsIHsgYmVoYXZpb3I6IGJlaGF2aW9yIHx8ICdzbW9vdGgnIH0pO1xuICAgIH0sXG4gICAgW2RlYnVnLCBzY3JvbGxUb11cbiAgKTtcblxuICBjb25zdCBzY3JvbGxUb1RvcCA9IHVzZUNhbGxiYWNrKFxuICAgICh7IGJlaGF2aW9yIH0gPSB7fSkgPT4ge1xuICAgICAgZGVidWcoKCkgPT4gWyclY3Njcm9sbFRvVG9wJWM6IENhbGxlZCcsIC4uLnN0eWxlQ29uc29sZSgneWVsbG93JywgJycpXSk7XG5cbiAgICAgIGJlaGF2aW9yICE9PSAnc21vb3RoJyAmJlxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ3JlYWN0LXNjcm9sbC10by1ib3R0b206IFBsZWFzZSBzZXQgXCJiZWhhdmlvclwiIHdoZW4gY2FsbGluZyBcInNjcm9sbFRvVG9wXCIuIEluIGZ1dHVyZSB2ZXJzaW9ucywgdGhlIGRlZmF1bHQgYmVoYXZpb3Igd2lsbCBiZSBjaGFuZ2VkIGZyb20gc21vb3RoIHNjcm9sbGluZyB0byBkaXNjcmV0ZSBzY3JvbGxpbmcgdG8gYWxpZ24gd2l0aCBIVE1MIFN0YW5kYXJkLidcbiAgICAgICAgKTtcblxuICAgICAgc2Nyb2xsVG8oMCwgeyBiZWhhdmlvcjogYmVoYXZpb3IgfHwgJ3Ntb290aCcgfSk7XG4gICAgfSxcbiAgICBbZGVidWcsIHNjcm9sbFRvXVxuICApO1xuXG4gIGNvbnN0IHNjcm9sbFRvRW5kID0gdXNlQ2FsbGJhY2soXG4gICAgKHsgYmVoYXZpb3IgfSA9IHt9KSA9PiB7XG4gICAgICBkZWJ1ZygoKSA9PiBbJyVjc2Nyb2xsVG9FbmQlYzogQ2FsbGVkJywgLi4uc3R5bGVDb25zb2xlKCd5ZWxsb3cnLCAnJyldKTtcblxuICAgICAgYmVoYXZpb3IgIT09ICdzbW9vdGgnICYmXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAncmVhY3Qtc2Nyb2xsLXRvLWJvdHRvbTogUGxlYXNlIHNldCBcImJlaGF2aW9yXCIgd2hlbiBjYWxsaW5nIFwic2Nyb2xsVG9FbmRcIi4gSW4gZnV0dXJlIHZlcnNpb25zLCB0aGUgZGVmYXVsdCBiZWhhdmlvciB3aWxsIGJlIGNoYW5nZWQgZnJvbSBzbW9vdGggc2Nyb2xsaW5nIHRvIGRpc2NyZXRlIHNjcm9sbGluZyB0byBhbGlnbiB3aXRoIEhUTUwgU3RhbmRhcmQuJ1xuICAgICAgICApO1xuXG4gICAgICBjb25zdCBvcHRpb25zID0geyBiZWhhdmlvcjogYmVoYXZpb3IgfHwgJ3Ntb290aCcgfTtcblxuICAgICAgbW9kZSA9PT0gTU9ERV9UT1AgPyBzY3JvbGxUb1RvcChvcHRpb25zKSA6IHNjcm9sbFRvQm90dG9tKG9wdGlvbnMpO1xuICAgIH0sXG4gICAgW2RlYnVnLCBtb2RlLCBzY3JvbGxUb0JvdHRvbSwgc2Nyb2xsVG9Ub3BdXG4gICk7XG5cbiAgY29uc3Qgc2Nyb2xsVG9TdGFydCA9IHVzZUNhbGxiYWNrKFxuICAgICh7IGJlaGF2aW9yIH0gPSB7fSkgPT4ge1xuICAgICAgZGVidWcoKCkgPT4gWyclY3Njcm9sbFRvU3RhcnQlYzogQ2FsbGVkJywgLi4uc3R5bGVDb25zb2xlKCd5ZWxsb3cnLCAnJyldKTtcblxuICAgICAgYmVoYXZpb3IgIT09ICdzbW9vdGgnICYmXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAncmVhY3Qtc2Nyb2xsLXRvLWJvdHRvbTogUGxlYXNlIHNldCBcImJlaGF2aW9yXCIgd2hlbiBjYWxsaW5nIFwic2Nyb2xsVG9TdGFydFwiLiBJbiBmdXR1cmUgdmVyc2lvbnMsIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHdpbGwgYmUgY2hhbmdlZCBmcm9tIHNtb290aCBzY3JvbGxpbmcgdG8gZGlzY3JldGUgc2Nyb2xsaW5nIHRvIGFsaWduIHdpdGggSFRNTCBTdGFuZGFyZC4nXG4gICAgICAgICk7XG5cbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7IGJlaGF2aW9yOiBiZWhhdmlvciB8fCAnc21vb3RoJyB9O1xuXG4gICAgICBtb2RlID09PSBNT0RFX1RPUCA/IHNjcm9sbFRvQm90dG9tKG9wdGlvbnMpIDogc2Nyb2xsVG9Ub3Aob3B0aW9ucyk7XG4gICAgfSxcbiAgICBbZGVidWcsIG1vZGUsIHNjcm9sbFRvQm90dG9tLCBzY3JvbGxUb1RvcF1cbiAgKTtcblxuICBjb25zdCBzY3JvbGxUb1N0aWNreSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCB7IGN1cnJlbnQ6IHRhcmdldCB9ID0gdGFyZ2V0UmVmO1xuXG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgaWYgKGluaXRpYWxTY3JvbGxCZWhhdmlvclJlZi5jdXJyZW50ID09PSAnYXV0bycpIHtcbiAgICAgICAgZGVidWcoKCkgPT4gW2AlY3RhcmdldCBjaGFuZ2VkJWM6IEluaXRpYWwgc2Nyb2xsYCwgLi4uc3R5bGVDb25zb2xlKCdibHVlJyldKTtcblxuICAgICAgICB0YXJnZXQuc2Nyb2xsVG9wID0gbW9kZSA9PT0gTU9ERV9UT1AgPyAwIDogdGFyZ2V0LnNjcm9sbEhlaWdodCAtIHRhcmdldC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGluaXRpYWxTY3JvbGxCZWhhdmlvclJlZi5jdXJyZW50ID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGlzIGlzIHZlcnkgc2ltaWxhciB0byBzY3JvbGxUb0VuZCgpLlxuICAgICAgLy8gSW5zdGVhZCBvZiBzY3JvbGxpbmcgdG8gZW5kLCBpdCB3aWxsIGNhbGwgcHJvcHMuc2Nyb2xsZXIoKSB0byBkZXRlcm1pbmVzIGhvdyBmYXIgaXQgc2hvdWxkIHNjcm9sbC5cbiAgICAgIC8vIFRoaXMgZnVuY3Rpb24gY291bGQgYmUgY2FsbGVkIHdoaWxlIGl0IGlzIGF1dG8tc2Nyb2xsaW5nLlxuXG4gICAgICBjb25zdCB7IGN1cnJlbnQ6IGFuaW1hdGVGcm9tIH0gPSBhbmltYXRlRnJvbVJlZjtcbiAgICAgIGNvbnN0IHsgb2Zmc2V0SGVpZ2h0LCBzY3JvbGxIZWlnaHQsIHNjcm9sbFRvcCB9ID0gdGFyZ2V0O1xuXG4gICAgICBjb25zdCBtYXhWYWx1ZSA9IG1vZGUgPT09IE1PREVfVE9QID8gMCA6IE1hdGgubWF4KDAsIHNjcm9sbEhlaWdodCAtIG9mZnNldEhlaWdodCAtIHNjcm9sbFRvcCk7XG4gICAgICBjb25zdCBtaW5WYWx1ZSA9IE1hdGgubWF4KDAsIGFuaW1hdGVGcm9tIC0gc2Nyb2xsVG9wKTtcblxuICAgICAgY29uc3QgcmF3TmV4dFZhbHVlID0gc2Nyb2xsZXIoeyBtYXhWYWx1ZSwgbWluVmFsdWUsIG9mZnNldEhlaWdodCwgc2Nyb2xsSGVpZ2h0LCBzY3JvbGxUb3AgfSk7XG5cbiAgICAgIGNvbnN0IG5leHRWYWx1ZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKG1heFZhbHVlLCByYXdOZXh0VmFsdWUpKTtcblxuICAgICAgbGV0IG5leHRBbmltYXRlVG87XG5cbiAgICAgIGlmIChtb2RlID09PSBNT0RFX1RPUCB8fCBuZXh0VmFsdWUgIT09IG1heFZhbHVlKSB7XG4gICAgICAgIG5leHRBbmltYXRlVG8gPSBzY3JvbGxUb3AgKyBuZXh0VmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXaGVuIHNjcm9sbGluZyB0byBib3R0b20sIHdlIHNob3VsZCBzY3JvbGwgdG8gXCIxMDAlXCIuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgaWYgd2Ugc2Nyb2xsIHRvIGFueSBudW1iZXIsIGl0IHdpbGwgbG9zZSBzdGlja2luZXNzIHdoZW4gZWxlbWVudHMgYXJlIGFkZGluZyB0b28gZmFzdC5cbiAgICAgICAgLy8gXCIxMDAlXCIgaXMgYSBzcGVjaWFsIGFyZ3VtZW50IGludGVuZGVkIHRvIG1ha2Ugc3VyZSBzdGlja2luZXNzIGlzIG5vdCBsb3N0IHdoaWxlIG5ldyBlbGVtZW50cyBhcmUgYmVpbmcgYWRkZWQuXG4gICAgICAgIG5leHRBbmltYXRlVG8gPSAnMTAwJSc7XG4gICAgICB9XG5cbiAgICAgIGRlYnVnKCgpID0+IFtcbiAgICAgICAgW1xuICAgICAgICAgIGAlY3Njcm9sbFRvU3RpY2t5JWM6IFdpbGwgYW5pbWF0ZSBmcm9tICVjJHthbmltYXRlRnJvbX1weCVjIHRvICVjJHtcbiAgICAgICAgICAgIHR5cGVvZiBuZXh0QW5pbWF0ZVRvID09PSAnbnVtYmVyJyA/IG5leHRBbmltYXRlVG8gKyAncHgnIDogbmV4dEFuaW1hdGVUby5yZXBsYWNlKC8lL2d1LCAnJSUnKVxuICAgICAgICAgIH0lYyAoJWMkeyhuZXh0QW5pbWF0ZVRvID09PSAnMTAwJScgPyBtYXhWYWx1ZSA6IG5leHRBbmltYXRlVG8pICsgYW5pbWF0ZUZyb219cHglYylgLFxuICAgICAgICAgIC4uLnN0eWxlQ29uc29sZSgnb3JhbmdlJyksXG4gICAgICAgICAgLi4uc3R5bGVDb25zb2xlKCdwdXJwbGUnKSxcbiAgICAgICAgICAuLi5zdHlsZUNvbnNvbGUoJ3B1cnBsZScpLFxuICAgICAgICAgIC4uLnN0eWxlQ29uc29sZSgncHVycGxlJylcbiAgICAgICAgXSxcbiAgICAgICAge1xuICAgICAgICAgIGFuaW1hdGVGcm9tLFxuICAgICAgICAgIG1heFZhbHVlLFxuICAgICAgICAgIG1pblZhbHVlLFxuICAgICAgICAgIG5leHRBbmltYXRlVG8sXG4gICAgICAgICAgbmV4dFZhbHVlLFxuICAgICAgICAgIG9mZnNldEhlaWdodCxcbiAgICAgICAgICByYXdOZXh0VmFsdWUsXG4gICAgICAgICAgc2Nyb2xsSGVpZ2h0LFxuICAgICAgICAgIHNjcm9sbFRvcFxuICAgICAgICB9XG4gICAgICBdKTtcblxuICAgICAgc2Nyb2xsVG8obmV4dEFuaW1hdGVUbywgeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgfVxuICB9LCBbYW5pbWF0ZUZyb21SZWYsIGRlYnVnLCBtb2RlLCBzY3JvbGxlciwgc2Nyb2xsVG8sIHRhcmdldFJlZl0pO1xuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbCA9IHVzZUNhbGxiYWNrKFxuICAgICh7IHRpbWVTdGFtcExvdyB9KSA9PiB7XG4gICAgICBjb25zdCB7IGN1cnJlbnQ6IGFuaW1hdGVUbyB9ID0gYW5pbWF0ZVRvUmVmO1xuICAgICAgY29uc3QgeyBjdXJyZW50OiB0YXJnZXQgfSA9IHRhcmdldFJlZjtcblxuICAgICAgY29uc3QgYW5pbWF0aW5nID0gYW5pbWF0ZVRvICE9PSBudWxsO1xuXG4gICAgICAvLyBDdXJyZW50bHksIHRoZXJlIGFyZSBubyByZWxpYWJsZSB3YXkgdG8gY2hlY2sgaWYgdGhlIFwic2Nyb2xsXCIgZXZlbnQgaXMgdHJpZ2dlciBkdWUgdG9cbiAgICAgIC8vIHVzZXIgZ2VzdHVyZSwgcHJvZ3JhbW1hdGljIHNjcm9sbGluZywgb3IgQ2hyb21lLXN5bnRoZXNpemVkIFwic2Nyb2xsXCIgZXZlbnQgdG8gY29tcGVuc2F0ZSBzaXplIGNoYW5nZS5cbiAgICAgIC8vIFRodXMsIHdlIHVzZSBvdXIgYmVzdC1lZmZvcnQgdG8gZ3Vlc3MgaWYgaXQgaXMgdHJpZ2dlcmVkIGJ5IHVzZXIgZ2VzdHVyZSwgYW5kIGRpc2FibGUgc3RpY2t5IGlmIGl0IGlzIGhlYWRpbmcgdG93YXJkcyB0aGUgc3RhcnQgZGlyZWN0aW9uLlxuXG4gICAgICBpZiAodGltZVN0YW1wTG93IDw9IGlnbm9yZVNjcm9sbEV2ZW50QmVmb3JlUmVmLmN1cnJlbnQgfHwgIXRhcmdldCkge1xuICAgICAgICAvLyBTaW5jZSB3ZSBkZWJvdW5jZSBcInNjcm9sbFwiIGV2ZW50LCB0aGlzIGhhbmRsZXIgbWlnaHQgYmUgY2FsbGVkIGFmdGVyIHNwaW5lVG8ub25FbmQgKGEuay5hLiBhcnRpZmljaWFsIHNjcm9sbGluZykuXG4gICAgICAgIC8vIFdlIHNob3VsZCBpZ25vcmUgZGVib3VuY2VkIGV2ZW50IGZpcmVkIGFmdGVyIHNjcm9sbEVuZCwgYmVjYXVzZSB3aXRob3V0IHNraXBwaW5nIHRoZW0sIHRoZSB1c2VySW5pdGlhdGVkU2Nyb2xsIGNhbGN1bGF0ZWQgYmVsb3cgd2lsbCBub3QgYmUgYWNjdXJhdGUuXG4gICAgICAgIC8vIFRodXMsIG9uIGEgZmFzdCBtYWNoaW5lLCBhZGRpbmcgZWxlbWVudHMgc3VwZXIgZmFzdCB3aWxsIGxvc2UgdGhlIFwic3RpY2tpbmVzc1wiLlxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBhdEJvdHRvbSwgYXRFbmQsIGF0U3RhcnQsIGF0VG9wIH0gPSBjb21wdXRlVmlld1N0YXRlKHsgbW9kZSwgdGFyZ2V0IH0pO1xuXG4gICAgICBzZXRBdEJvdHRvbShhdEJvdHRvbSk7XG4gICAgICBzZXRBdEVuZChhdEVuZCk7XG4gICAgICBzZXRBdFN0YXJ0KGF0U3RhcnQpO1xuICAgICAgc2V0QXRUb3AoYXRUb3ApO1xuXG4gICAgICAvLyBDaHJvbWUgd2lsbCBlbWl0IFwic3ludGhldGljXCIgc2Nyb2xsIGV2ZW50IGlmIHRoZSBjb250YWluZXIgaXMgcmVzaXplZCBvciBhbiBlbGVtZW50IGlzIGFkZGVkXG4gICAgICAvLyBXZSBuZWVkIHRvIGlnbm9yZSB0aGVzZSBcInN5bnRoZXRpY1wiIGV2ZW50c1xuICAgICAgLy8gUmVwcm86IEluIHBsYXlncm91bmQsIHByZXNzIDQtMS01LTEtMSAoc21hbGwsIGFkZCBvbmUsIG5vcm1hbCwgYWRkIG9uZSwgYWRkIG9uZSlcbiAgICAgIC8vICAgICAgICBOb21hdHRlciBob3cgZmFzdCBvciBzbG93IHRoZSBzZXF1ZW5jZSBpcyBiZWluZyBwcmVzc2VkLCBpdCBzaG91bGQgc3RpbGwgc3RpY2sgdG8gdGhlIGJvdHRvbVxuICAgICAgY29uc3QgeyBvZmZzZXRIZWlnaHQ6IG5leHRPZmZzZXRIZWlnaHQsIHNjcm9sbEhlaWdodDogbmV4dFNjcm9sbEhlaWdodCB9ID0gdGFyZ2V0O1xuICAgICAgY29uc3QgeyBjdXJyZW50OiBvZmZzZXRIZWlnaHQgfSA9IG9mZnNldEhlaWdodFJlZjtcbiAgICAgIGNvbnN0IHsgY3VycmVudDogc2Nyb2xsSGVpZ2h0IH0gPSBzY3JvbGxIZWlnaHRSZWY7XG4gICAgICBjb25zdCBvZmZzZXRIZWlnaHRDaGFuZ2VkID0gbmV4dE9mZnNldEhlaWdodCAhPT0gb2Zmc2V0SGVpZ2h0O1xuICAgICAgY29uc3Qgc2Nyb2xsSGVpZ2h0Q2hhbmdlZCA9IG5leHRTY3JvbGxIZWlnaHQgIT09IHNjcm9sbEhlaWdodDtcblxuICAgICAgaWYgKG9mZnNldEhlaWdodENoYW5nZWQpIHtcbiAgICAgICAgb2Zmc2V0SGVpZ2h0UmVmLmN1cnJlbnQgPSBuZXh0T2Zmc2V0SGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICBpZiAoc2Nyb2xsSGVpZ2h0Q2hhbmdlZCkge1xuICAgICAgICBzY3JvbGxIZWlnaHRSZWYuY3VycmVudCA9IG5leHRTY3JvbGxIZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgIC8vIFN0aWNreSBtZWFuczpcbiAgICAgIC8vIC0gSWYgaXQgaXMgc2Nyb2xsZWQgcHJvZ3JhbWF0aWNhbGx5LCB3ZSBhcmUgc3RpbGwgaW4gc3RpY2t5IG1vZGVcbiAgICAgIC8vIC0gSWYgaXQgaXMgc2Nyb2xsZWQgYnkgdGhlIHVzZXIsIHRoZW4gc3RpY2t5IG1lYW5zIGlmIHdlIGFyZSBhdCB0aGUgZW5kXG5cbiAgICAgIC8vIE9ubHkgdXBkYXRlIHN0aWNraW5lc3MgaWYgdGhlIHNjcm9sbCBldmVudCBpcyBub3QgZHVlIHRvIHN5bnRoZXRpYyBzY3JvbGwgZG9uZSBieSBDaHJvbWVcbiAgICAgIGlmICghb2Zmc2V0SGVpZ2h0Q2hhbmdlZCAmJiAhc2Nyb2xsSGVpZ2h0Q2hhbmdlZCkge1xuICAgICAgICAvLyBXZSBhcmUgc3RpY2t5IGlmIHdlIGFyZSBhbmltYXRpbmcgdG8gdGhlIGVuZCwgb3Igd2UgYXJlIGFscmVhZHkgYXQgdGhlIGVuZC5cbiAgICAgICAgLy8gV2UgY2FuIGJlIFwiYW5pbWF0aW5nIGJ1dCBub3Qgc3RpY2t5XCIgYnkgY2FsbGluZyBcInNjcm9sbFRvKDEwMClcIiB3aGVyZSB0aGUgY29udGFpbmVyIHNjcm9sbEhlaWdodCBpcyAyMDBweC5cbiAgICAgICAgY29uc3QgbmV4dFN0aWNreSA9IChhbmltYXRpbmcgJiYgaXNFbmQoYW5pbWF0ZVRvLCBtb2RlKSkgfHwgYXRFbmQ7XG5cbiAgICAgICAgaWYgKHN0aWNreVJlZi5jdXJyZW50ICE9PSBuZXh0U3RpY2t5KSB7XG4gICAgICAgICAgZGVidWcoKCkgPT4gW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBgJWNvblNjcm9sbCVjOiAlY3NldFN0aWNreSVjKCVjJHtuZXh0U3RpY2t5fSVjKWAsXG4gICAgICAgICAgICAgIC4uLnN0eWxlQ29uc29sZSgncmVkJyksXG4gICAgICAgICAgICAgIC4uLnN0eWxlQ29uc29sZSgncmVkJyksXG4gICAgICAgICAgICAgIC4uLnN0eWxlQ29uc29sZSgncHVycGxlJylcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIGAoYW5pbWF0aW5nID0gJWMke2FuaW1hdGluZ30lYyAmJiBpc0VuZCA9ICVjJHtpc0VuZChhbmltYXRlVG8sIG1vZGUpfSVjKSB8fCBhdEVuZCA9ICVjJHthdEVuZH0lY2AsXG4gICAgICAgICAgICAgIC4uLnN0eWxlQ29uc29sZSgncHVycGxlJyksXG4gICAgICAgICAgICAgIC4uLnN0eWxlQ29uc29sZSgncHVycGxlJyksXG4gICAgICAgICAgICAgIC4uLnN0eWxlQ29uc29sZSgncHVycGxlJyksXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhbmltYXRpbmcsXG4gICAgICAgICAgICAgICAgYW5pbWF0ZVRvLFxuICAgICAgICAgICAgICAgIGF0RW5kLFxuICAgICAgICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgICAgICAgb2Zmc2V0SGVpZ2h0OiB0YXJnZXQub2Zmc2V0SGVpZ2h0LFxuICAgICAgICAgICAgICAgIHNjcm9sbEhlaWdodDogdGFyZ2V0LnNjcm9sbEhlaWdodCxcbiAgICAgICAgICAgICAgICBzdGlja3k6IHN0aWNreVJlZi5jdXJyZW50LFxuICAgICAgICAgICAgICAgIG5leHRTdGlja3lcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgc2V0U3RpY2t5KG5leHRTdGlja3kpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN0aWNreVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGRlYnVnKCgpID0+IFtcbiAgICAgICAgICBbXG4gICAgICAgICAgICBgJWNvblNjcm9sbCVjOiBTaXplIGNoYW5nZWQgd2hpbGUgc3RpY2t5LCBjYWxsaW5nICVjc2Nyb2xsVG9TdGlja3koKSVjYCxcbiAgICAgICAgICAgIC4uLnN0eWxlQ29uc29sZSgncmVkJyksXG4gICAgICAgICAgICAuLi5zdHlsZUNvbnNvbGUoJ29yYW5nZScpLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBvZmZzZXRIZWlnaHRDaGFuZ2VkLFxuICAgICAgICAgICAgICBzY3JvbGxIZWlnaHRDaGFuZ2VkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuZXh0T2Zmc2V0SGVpZ2h0LFxuICAgICAgICAgICAgcHJldk9mZnNldEhlaWdodDogb2Zmc2V0SGVpZ2h0LFxuICAgICAgICAgICAgbmV4dFNjcm9sbEhlaWdodCxcbiAgICAgICAgICAgIHByZXZTY3JvbGxIZWlnaHQ6IHNjcm9sbEhlaWdodFxuICAgICAgICAgIH1cbiAgICAgICAgXSk7XG5cbiAgICAgICAgc2Nyb2xsVG9TdGlja3koKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBzY3JvbGxUb3A6IGFjdHVhbFNjcm9sbFRvcCB9ID0gdGFyZ2V0O1xuXG4gICAgICBzY3JvbGxQb3NpdGlvbk9ic2VydmVyc1JlZi5jdXJyZW50LmZvckVhY2gob2JzZXJ2ZXIgPT4gb2JzZXJ2ZXIoeyBzY3JvbGxUb3A6IGFjdHVhbFNjcm9sbFRvcCB9KSk7XG4gICAgfSxcbiAgICBbXG4gICAgICBhbmltYXRlVG9SZWYsXG4gICAgICBkZWJ1ZyxcbiAgICAgIGlnbm9yZVNjcm9sbEV2ZW50QmVmb3JlUmVmLFxuICAgICAgbW9kZSxcbiAgICAgIG9mZnNldEhlaWdodFJlZixcbiAgICAgIHNjcm9sbEhlaWdodFJlZixcbiAgICAgIHNjcm9sbFBvc2l0aW9uT2JzZXJ2ZXJzUmVmLFxuICAgICAgc2Nyb2xsVG9TdGlja3ksXG4gICAgICBzZXRBdEJvdHRvbSxcbiAgICAgIHNldEF0RW5kLFxuICAgICAgc2V0QXRTdGFydCxcbiAgICAgIHNldEF0VG9wLFxuICAgICAgc2V0U3RpY2t5LFxuICAgICAgc3RpY2t5UmVmLFxuICAgICAgdGFyZ2V0UmVmXG4gICAgXVxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgbGV0IHN0aWNreUJ1dE5vdEF0RW5kU2luY2UgPSBmYWxzZTtcblxuICAgICAgY29uc3QgdGltZW91dCA9IHNldEltbWVkaWF0ZUludGVydmFsKCgpID0+IHtcbiAgICAgICAgY29uc3QgeyBjdXJyZW50OiB0YXJnZXQgfSA9IHRhcmdldFJlZjtcbiAgICAgICAgY29uc3QgYW5pbWF0aW5nID0gYW5pbWF0ZVRvUmVmLmN1cnJlbnQgIT09IG51bGw7XG5cbiAgICAgICAgaWYgKHN0aWNreVJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgaWYgKCFjb21wdXRlVmlld1N0YXRlKHsgbW9kZSwgdGFyZ2V0IH0pLmF0RW5kKSB7XG4gICAgICAgICAgICBpZiAoIXN0aWNreUJ1dE5vdEF0RW5kU2luY2UpIHtcbiAgICAgICAgICAgICAgc3RpY2t5QnV0Tm90QXRFbmRTaW5jZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKERhdGUubm93KCkgLSBzdGlja3lCdXROb3RBdEVuZFNpbmNlID4gU0NST0xMX0RFQ0lTSU9OX0RVUkFUSU9OKSB7XG4gICAgICAgICAgICAgIC8vIFF1aXJrczogSW4gRmlyZWZveCwgYWZ0ZXIgdXNlciBzY3JvbGwgZG93biwgRmlyZWZveCBkbyB0d28gdGhpbmdzOlxuICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIFNldCB0byBhIG5ldyBcInNjcm9sbFRvcFwiXG4gICAgICAgICAgICAgIC8vICAgICAgICAgMi4gRmlyZSBcInNjcm9sbFwiIGV2ZW50XG4gICAgICAgICAgICAgIC8vICAgICAgICAgRm9yIHdoYXQgd2Ugb2JzZXJ2ZWQsICMxIGlzIGZpcmVkIGFib3V0IDIwbXMgYmVmb3JlICMyLiBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHRoaXMgc3RpY2t5Q2hlY2tUaW1lb3V0IGlzIGJlaW5nIHNjaGVkdWxlZCBiZXR3ZWVuIDEgYW5kIDIuXG4gICAgICAgICAgICAgIC8vICAgICAgICAgVGhhdCBtZWFucywgaWYgd2UganVzdCBsb29rIGF0ICMxIHRvIGRlY2lkZSBpZiB3ZSBzaG91bGQgc2Nyb2xsLCB3ZSB3aWxsIGFsd2F5cyBzY3JvbGwsIGluIG9wcG9zZSB0byB0aGUgdXNlcidzIGludGVudGlvbi5cbiAgICAgICAgICAgICAgLy8gUmVwcm86IE9wZW4gRmlyZWZveCwgc2V0IGNoZWNrSW50ZXJ2YWwgdG8gYSBsb3dlciBudW1iZXIsIGFuZCB0cnkgdG8gc2Nyb2xsIGJ5IGRyYWdnaW5nIHRoZSBzY3JvbGwgaGFuZGxlci4gSXQgd2lsbCBqdW1wIGJhY2suXG5cbiAgICAgICAgICAgICAgLy8gVGhlIFwiYW5pbWF0aW5nXCIgY2hlY2sgd2lsbCBtYWtlIHN1cmUgc3RpY2tpbmVzcyBpcyBub3QgbG9zdCB3aGVuIGVsZW1lbnRzIGFyZSBhZGRpbmcgYXQgYSB2ZXJ5IGZhc3QgcGFjZS5cbiAgICAgICAgICAgICAgaWYgKCFhbmltYXRpbmcpIHtcbiAgICAgICAgICAgICAgICBhbmltYXRlRnJvbVJlZi5jdXJyZW50ID0gdGFyZ2V0LnNjcm9sbFRvcDtcblxuICAgICAgICAgICAgICAgIGRlYnVnKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgIGAlY0ludGVydmFsIGNoZWNrJWM6IFNob3VsZCBzdGlja3kgYnV0IG5vdCBhdCBlbmQsIGNhbGxpbmcgJWNzY3JvbGxUb1N0aWNreSgpJWMgdG8gc2Nyb2xsYCxcbiAgICAgICAgICAgICAgICAgIC4uLnN0eWxlQ29uc29sZSgnbmF2eScpLFxuICAgICAgICAgICAgICAgICAgLi4uc3R5bGVDb25zb2xlKCdvcmFuZ2UnKVxuICAgICAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICAgICAgc2Nyb2xsVG9TdGlja3koKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHN0aWNreUJ1dE5vdEF0RW5kU2luY2UgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RpY2t5QnV0Tm90QXRFbmRTaW5jZSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQuc2Nyb2xsSGVpZ2h0IDw9IHRhcmdldC5vZmZzZXRIZWlnaHQgJiYgIXN0aWNreVJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgLy8gV2hlbiB0aGUgY29udGFpbmVyIGlzIGVtcHRpZWQsIHdlIHdpbGwgc2V0IHN0aWNreSBiYWNrIHRvIHRydWUuXG5cbiAgICAgICAgICBkZWJ1ZygoKSA9PiBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIGAlY0ludGVydmFsIGNoZWNrJWM6IENvbnRhaW5lciBpcyBlbXB0aWVkLCBzZXR0aW5nIHN0aWNreSBiYWNrIHRvICVjdHJ1ZSVjYCxcbiAgICAgICAgICAgICAgLi4uc3R5bGVDb25zb2xlKCduYXZ5JyksXG4gICAgICAgICAgICAgIC4uLnN0eWxlQ29uc29sZSgncHVycGxlJylcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvZmZzZXRIZWlnaHQ6IHRhcmdldC5vZmZzZXRIZWlnaHQsXG4gICAgICAgICAgICAgICAgc2Nyb2xsSGVpZ2h0OiB0YXJnZXQuc2Nyb2xsSGVpZ2h0LFxuICAgICAgICAgICAgICAgIHN0aWNreTogc3RpY2t5UmVmLmN1cnJlbnRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgc2V0U3RpY2t5KHRydWUpO1xuICAgICAgICB9XG4gICAgICB9LCBNYXRoLm1heChNSU5fQ0hFQ0tfSU5URVJWQUwsIGNoZWNrSW50ZXJ2YWwpIHx8IE1JTl9DSEVDS19JTlRFUlZBTCk7XG5cbiAgICAgIHJldHVybiAoKSA9PiBjbGVhckludGVydmFsKHRpbWVvdXQpO1xuICAgIH1cbiAgfSwgW2FuaW1hdGVUb1JlZiwgY2hlY2tJbnRlcnZhbCwgZGVidWcsIG1vZGUsIHNjcm9sbFRvU3RpY2t5LCBzZXRTdGlja3ksIHN0aWNreVJlZiwgdGFyZ2V0LCB0YXJnZXRSZWZdKTtcblxuICBjb25zdCBzdHlsZVRvQ2xhc3NOYW1lID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgZW1vdGlvbiA9XG4gICAgICBlbW90aW9uUG9vbFtub25jZV0gfHxcbiAgICAgIChlbW90aW9uUG9vbFtub25jZV0gPSBjcmVhdGVFbW90aW9uKHsga2V5OiAncmVhY3Qtc2Nyb2xsLXRvLWJvdHRvbS0tY3NzLScgKyBjcmVhdGVDU1NLZXkoKSwgbm9uY2UgfSkpO1xuXG4gICAgcmV0dXJuIHN0eWxlID0+IGVtb3Rpb24uY3NzKHN0eWxlKSArICcnO1xuICB9LCBbbm9uY2VdKTtcblxuICBjb25zdCBpbnRlcm5hbENvbnRleHQgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICBvYnNlcnZlU2Nyb2xsUG9zaXRpb24sXG4gICAgICBzZXRUYXJnZXQsXG4gICAgICBzdHlsZVRvQ2xhc3NOYW1lXG4gICAgfSksXG4gICAgW29ic2VydmVTY3JvbGxQb3NpdGlvbiwgc2V0VGFyZ2V0LCBzdHlsZVRvQ2xhc3NOYW1lXVxuICApO1xuXG4gIGNvbnN0IHN0YXRlMUNvbnRleHQgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICBhdEJvdHRvbSxcbiAgICAgIGF0RW5kLFxuICAgICAgYXRTdGFydCxcbiAgICAgIGF0VG9wLFxuICAgICAgbW9kZVxuICAgIH0pLFxuICAgIFthdEJvdHRvbSwgYXRFbmQsIGF0U3RhcnQsIGF0VG9wLCBtb2RlXVxuICApO1xuXG4gIGNvbnN0IHN0YXRlMkNvbnRleHQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBhbmltYXRpbmcgPSBhbmltYXRlVG8gIT09IG51bGw7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYW5pbWF0aW5nLFxuICAgICAgYW5pbWF0aW5nVG9FbmQ6IGFuaW1hdGluZyAmJiBpc0VuZChhbmltYXRlVG8sIG1vZGUpLFxuICAgICAgc3RpY2t5XG4gICAgfTtcbiAgfSwgW2FuaW1hdGVUbywgbW9kZSwgc3RpY2t5XSk7XG5cbiAgY29uc3QgY29tYmluZWRTdGF0ZUNvbnRleHQgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICAuLi5zdGF0ZTFDb250ZXh0LFxuICAgICAgLi4uc3RhdGUyQ29udGV4dFxuICAgIH0pLFxuICAgIFtzdGF0ZTFDb250ZXh0LCBzdGF0ZTJDb250ZXh0XVxuICApO1xuXG4gIGNvbnN0IGZ1bmN0aW9uQ29udGV4dCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIHNjcm9sbFRvLFxuICAgICAgc2Nyb2xsVG9Cb3R0b20sXG4gICAgICBzY3JvbGxUb0VuZCxcbiAgICAgIHNjcm9sbFRvU3RhcnQsXG4gICAgICBzY3JvbGxUb1RvcFxuICAgIH0pLFxuICAgIFtzY3JvbGxUbywgc2Nyb2xsVG9Cb3R0b20sIHNjcm9sbFRvRW5kLCBzY3JvbGxUb1N0YXJ0LCBzY3JvbGxUb1RvcF1cbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBcInNjcm9sbEhlaWdodFwiIHZhbHVlIHRvIGxhdGVzdCB3aGVuIHRoZSB1c2VyIGRvIGEgZm9jdXMgaW5zaWRlIHRoZSBib3guXG4gICAgLy9cbiAgICAvLyBUaGlzIGlzIGJlY2F1c2U6XG4gICAgLy8gLSBJbiBvdXIgY29kZSB0aGF0IG1pdGlnYXRlIENocm9tZSBzeW50aGV0aWMgc2Nyb2xsaW5nLCB0aGF0IGNvZGUgd2lsbCBsb29rIGF0IHdoZXRoZXIgXCJzY3JvbGxIZWlnaHRcIiB2YWx1ZSBpcyBsYXRlc3Qgb3Igbm90LlxuICAgIC8vIC0gVGhhdCBjb2RlIG9ubHkgcnVuIG9uIFwic2Nyb2xsXCIgZXZlbnQuXG4gICAgLy8gLSBUaGF0IG1lYW5zLCBvbiBldmVyeSBcInNjcm9sbFwiIGV2ZW50LCBpZiB0aGUgXCJzY3JvbGxIZWlnaHRcIiB2YWx1ZSBpcyBub3QgbGF0ZXN0LCB3ZSB3aWxsIHNraXAgbW9kaWZ5aW5nIHRoZSBzdGlja2luZXNzLlxuICAgIC8vIC0gVGhhdCBtZWFucywgaWYgdGhlIHVzZXIgXCJmb2N1c1wiIHRvIGFuIGVsZW1lbnQgdGhhdCBjYXVzZSB0aGUgc2Nyb2xsIHZpZXcgdG8gc2Nyb2xsIHRvIHRoZSBib3R0b20sIHRoZSB1c2VyIGFnZW50IHdpbGwgZmlyZSBcInNjcm9sbFwiIGV2ZW50LlxuICAgIC8vICAgU2luY2UgdGhlIFwic2Nyb2xsSGVpZ2h0XCIgaXMgbm90IGxhdGVzdCB2YWx1ZSwgdGhpcyBcInNjcm9sbFwiIGV2ZW50IHdpbGwgYmUgaWdub3JlZCBhbmQgc3RpY2tpbmVzcyB3aWxsIG5vdCBiZSBtb2RpZmllZC5cbiAgICAvLyAtIFRoYXQgbWVhbnMsIGlmIHRoZSB1c2VyIFwiZm9jdXNcIiB0byBhIG5ld2x5IGFkZGVkIGVsZW1lbnQgdGhhdCBpcyBhdCB0aGUgZW5kIG9mIHRoZSBzY3JvbGwgdmlldywgdGhlIFwic2Nyb2xsIHRvIGJvdHRvbVwiIGJ1dHRvbiB3aWxsIGNvbnRpbnVlIHRvIHNob3cuXG4gICAgLy9cbiAgICAvLyBSZXBybyBpbiBDaHJvbWU6XG4gICAgLy8gMS4gRmlsbCB1cCBhIHNjcm9sbCB2aWV3XG4gICAgLy8gMi4gU2Nyb2xsIHVwLCB0aGUgXCJzY3JvbGwgdG8gYm90dG9tXCIgYnV0dG9uIHNob3VsZCBzaG93IHVwXG4gICAgLy8gMy4gQ2xpY2sgXCJBZGQgYSBidXR0b25cIlxuICAgIC8vIDQuIENsaWNrIG9uIHRoZSBzY3JvbGwgdmlldyAodG8gcHNldWRvLWZvY3VzIG9uIGl0KVxuICAgIC8vIDUuIFByZXNzIFRBQiwgdGhlIHNjcm9sbCB2aWV3IHdpbGwgYmUgYXQgdGhlIGJvdHRvbVxuICAgIC8vXG4gICAgLy8gRXhwZWN0OlxuICAgIC8vIC0gVGhlIFwic2Nyb2xsIHRvIGJvdHRvbVwiIGJ1dHRvbiBzaG91bGQgYmUgZ29uZS5cbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICBjb25zdCBoYW5kbGVGb2N1cyA9ICgpID0+IHtcbiAgICAgICAgc2Nyb2xsSGVpZ2h0UmVmLmN1cnJlbnQgPSB0YXJnZXQuc2Nyb2xsSGVpZ2h0O1xuICAgICAgfTtcblxuICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgaGFuZGxlRm9jdXMsIHsgY2FwdHVyZTogdHJ1ZSwgcGFzc2l2ZTogdHJ1ZSB9KTtcblxuICAgICAgcmV0dXJuICgpID0+IHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIGhhbmRsZUZvY3VzKTtcbiAgICB9XG4gIH0sIFt0YXJnZXRdKTtcblxuICBkZWJ1ZygoKSA9PiBbXG4gICAgW2AlY1JlbmRlciVjOiBSZW5kZXJgLCAuLi5zdHlsZUNvbnNvbGUoJ2N5YW4nLCAnJyldLFxuICAgIHtcbiAgICAgIGFuaW1hdGVUbyxcbiAgICAgIGFuaW1hdGluZzogYW5pbWF0ZVRvICE9PSBudWxsLFxuICAgICAgc3RpY2t5LFxuICAgICAgdGFyZ2V0XG4gICAgfVxuICBdKTtcblxuICByZXR1cm4gKFxuICAgIDxJbnRlcm5hbENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2ludGVybmFsQ29udGV4dH0+XG4gICAgICA8RnVuY3Rpb25Db250ZXh0LlByb3ZpZGVyIHZhbHVlPXtmdW5jdGlvbkNvbnRleHR9PlxuICAgICAgICA8U3RhdGVDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb21iaW5lZFN0YXRlQ29udGV4dH0+XG4gICAgICAgICAgPFN0YXRlMUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3N0YXRlMUNvbnRleHR9PlxuICAgICAgICAgICAgPFN0YXRlMkNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3N0YXRlMkNvbnRleHR9PlxuICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgIHt0YXJnZXQgJiYgPEV2ZW50U3B5IGRlYm91bmNlPXtkZWJvdW5jZX0gbmFtZT1cInNjcm9sbFwiIG9uRXZlbnQ9e2hhbmRsZVNjcm9sbH0gdGFyZ2V0PXt0YXJnZXR9IC8+fVxuICAgICAgICAgICAgICB7dGFyZ2V0ICYmIGFuaW1hdGVUbyAhPT0gbnVsbCAmJiAoXG4gICAgICAgICAgICAgICAgPFNwaW5lVG8gbmFtZT1cInNjcm9sbFRvcFwiIG9uRW5kPXtoYW5kbGVTcGluZVRvRW5kfSB0YXJnZXQ9e3RhcmdldH0gdmFsdWU9e2FuaW1hdGVUb30gLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvU3RhdGUyQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgICA8L1N0YXRlMUNvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgIDwvU3RhdGVDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgPC9GdW5jdGlvbkNvbnRleHQuUHJvdmlkZXI+XG4gICAgPC9JbnRlcm5hbENvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuXG5Db21wb3Nlci5kZWZhdWx0UHJvcHMgPSB7XG4gIGNoZWNrSW50ZXJ2YWw6IDEwMCxcbiAgY2hpbGRyZW46IHVuZGVmaW5lZCxcbiAgZGVib3VuY2U6IDE3LFxuICBkZWJ1ZzogdW5kZWZpbmVkLFxuICBpbml0aWFsU2Nyb2xsQmVoYXZpb3I6ICdzbW9vdGgnLFxuICBtb2RlOiB1bmRlZmluZWQsXG4gIG5vbmNlOiB1bmRlZmluZWQsXG4gIHNjcm9sbGVyOiBERUZBVUxUX1NDUk9MTEVSXG59O1xuXG5Db21wb3Nlci5wcm9wVHlwZXMgPSB7XG4gIGNoZWNrSW50ZXJ2YWw6IFByb3BUeXBlcy5udW1iZXIsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuYW55LFxuICBkZWJvdW5jZTogUHJvcFR5cGVzLm51bWJlcixcbiAgZGVidWc6IFByb3BUeXBlcy5ib29sLFxuICBpbml0aWFsU2Nyb2xsQmVoYXZpb3I6IFByb3BUeXBlcy5vbmVPZihbJ2F1dG8nLCAnc21vb3RoJ10pLFxuICBtb2RlOiBQcm9wVHlwZXMub25lT2YoWydib3R0b20nLCAndG9wJ10pLFxuICBub25jZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2Nyb2xsZXI6IFByb3BUeXBlcy5mdW5jXG59O1xuXG5leHBvcnQgZGVmYXVsdCBDb21wb3NlcjtcbiJdfQ== diff --git a/node_modules/react-scroll-to-bottom/lib/esm/ScrollToBottom/Panel.js b/node_modules/react-scroll-to-bottom/lib/esm/ScrollToBottom/Panel.js index 02008df..3b7155d 100644 --- a/node_modules/react-scroll-to-bottom/lib/esm/ScrollToBottom/Panel.js +++ b/node_modules/react-scroll-to-bottom/lib/esm/ScrollToBottom/Panel.js @@ -1,35 +1,37 @@ import classNames from 'classnames'; import PropTypes from 'prop-types'; import React, { useContext } from 'react'; -import InternalContext from './InternalContext'; + import useStyleToClassName from '../hooks/internal/useStyleToClassName'; + +import InternalContext from './InternalContext'; var ROOT_STYLE = { height: '100%', overflowY: 'auto', - width: '100%' + width: '100%', }; var Panel = function Panel(_ref) { var children = _ref.children, - className = _ref.className; + className = _ref.className; var _useContext = useContext(InternalContext), - setTarget = _useContext.setTarget; + setTarget = _useContext.setTarget; var rootCSS = useStyleToClassName()(ROOT_STYLE); - return /*#__PURE__*/React.createElement("div", { - className: classNames(rootCSS, (className || '') + ''), - ref: setTarget - }, children); + return /*#__PURE__*/ React.createElement( + 'div', + { + className: classNames(rootCSS, (className || '') + ''), + ref: setTarget, + }, + children + ); }; -Panel.defaultProps = { - children: undefined, - className: undefined -}; Panel.propTypes = { children: PropTypes.any, - className: PropTypes.string + className: PropTypes.string, }; export default Panel; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9TY3JvbGxUb0JvdHRvbS9QYW5lbC5qcyJdLCJuYW1lcyI6WyJjbGFzc05hbWVzIiwiUHJvcFR5cGVzIiwiUmVhY3QiLCJ1c2VDb250ZXh0IiwiSW50ZXJuYWxDb250ZXh0IiwidXNlU3R5bGVUb0NsYXNzTmFtZSIsIlJPT1RfU1RZTEUiLCJoZWlnaHQiLCJvdmVyZmxvd1kiLCJ3aWR0aCIsIlBhbmVsIiwiY2hpbGRyZW4iLCJjbGFzc05hbWUiLCJzZXRUYXJnZXQiLCJyb290Q1NTIiwiZGVmYXVsdFByb3BzIiwidW5kZWZpbmVkIiwicHJvcFR5cGVzIiwiYW55Iiwic3RyaW5nIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxVQUFQLE1BQXVCLFlBQXZCO0FBQ0EsT0FBT0MsU0FBUCxNQUFzQixZQUF0QjtBQUNBLE9BQU9DLEtBQVAsSUFBZ0JDLFVBQWhCLFFBQWtDLE9BQWxDO0FBRUEsT0FBT0MsZUFBUCxNQUE0QixtQkFBNUI7QUFDQSxPQUFPQyxtQkFBUCxNQUFnQyx1Q0FBaEM7QUFFQSxJQUFNQyxVQUFVLEdBQUc7QUFDakJDLEVBQUFBLE1BQU0sRUFBRSxNQURTO0FBRWpCQyxFQUFBQSxTQUFTLEVBQUUsTUFGTTtBQUdqQkMsRUFBQUEsS0FBSyxFQUFFO0FBSFUsQ0FBbkI7O0FBTUEsSUFBTUMsS0FBSyxHQUFHLFNBQVJBLEtBQVEsT0FBNkI7QUFBQSxNQUExQkMsUUFBMEIsUUFBMUJBLFFBQTBCO0FBQUEsTUFBaEJDLFNBQWdCLFFBQWhCQSxTQUFnQjs7QUFDekMsb0JBQXNCVCxVQUFVLENBQUNDLGVBQUQsQ0FBaEM7QUFBQSxNQUFRUyxTQUFSLGVBQVFBLFNBQVI7O0FBQ0EsTUFBTUMsT0FBTyxHQUFHVCxtQkFBbUIsR0FBR0MsVUFBSCxDQUFuQztBQUVBLHNCQUNFO0FBQUssSUFBQSxTQUFTLEVBQUVOLFVBQVUsQ0FBQ2MsT0FBRCxFQUFVLENBQUNGLFNBQVMsSUFBSSxFQUFkLElBQW9CLEVBQTlCLENBQTFCO0FBQTZELElBQUEsR0FBRyxFQUFFQztBQUFsRSxLQUNHRixRQURILENBREY7QUFLRCxDQVREOztBQVdBRCxLQUFLLENBQUNLLFlBQU4sR0FBcUI7QUFDbkJKLEVBQUFBLFFBQVEsRUFBRUssU0FEUztBQUVuQkosRUFBQUEsU0FBUyxFQUFFSTtBQUZRLENBQXJCO0FBS0FOLEtBQUssQ0FBQ08sU0FBTixHQUFrQjtBQUNoQk4sRUFBQUEsUUFBUSxFQUFFVixTQUFTLENBQUNpQixHQURKO0FBRWhCTixFQUFBQSxTQUFTLEVBQUVYLFNBQVMsQ0FBQ2tCO0FBRkwsQ0FBbEI7QUFLQSxlQUFlVCxLQUFmIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBJbnRlcm5hbENvbnRleHQgZnJvbSAnLi9JbnRlcm5hbENvbnRleHQnO1xuaW1wb3J0IHVzZVN0eWxlVG9DbGFzc05hbWUgZnJvbSAnLi4vaG9va3MvaW50ZXJuYWwvdXNlU3R5bGVUb0NsYXNzTmFtZSc7XG5cbmNvbnN0IFJPT1RfU1RZTEUgPSB7XG4gIGhlaWdodDogJzEwMCUnLFxuICBvdmVyZmxvd1k6ICdhdXRvJyxcbiAgd2lkdGg6ICcxMDAlJ1xufTtcblxuY29uc3QgUGFuZWwgPSAoeyBjaGlsZHJlbiwgY2xhc3NOYW1lIH0pID0+IHtcbiAgY29uc3QgeyBzZXRUYXJnZXQgfSA9IHVzZUNvbnRleHQoSW50ZXJuYWxDb250ZXh0KTtcbiAgY29uc3Qgcm9vdENTUyA9IHVzZVN0eWxlVG9DbGFzc05hbWUoKShST09UX1NUWUxFKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHJvb3RDU1MsIChjbGFzc05hbWUgfHwgJycpICsgJycpfSByZWY9e3NldFRhcmdldH0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5QYW5lbC5kZWZhdWx0UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiB1bmRlZmluZWQsXG4gIGNsYXNzTmFtZTogdW5kZWZpbmVkXG59O1xuXG5QYW5lbC5wcm9wVHlwZXMgPSB7XG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuYW55LFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFBhbmVsO1xuIl19