{"dependencies":[{"name":"babel-runtime/core-js/object/get-prototype-of","loc":{"line":7,"column":30}},{"name":"babel-runtime/helpers/classCallCheck","loc":{"line":11,"column":31}},{"name":"babel-runtime/helpers/createClass","loc":{"line":15,"column":28}},{"name":"babel-runtime/helpers/possibleConstructorReturn","loc":{"line":19,"column":42}},{"name":"babel-runtime/helpers/inherits","loc":{"line":23,"column":25}},{"name":"babel-runtime/helpers/typeof","loc":{"line":27,"column":23}},{"name":"babel-runtime/core-js/object/keys","loc":{"line":31,"column":20}},{"name":"babel-runtime/helpers/objectWithoutProperties","loc":{"line":35,"column":40}},{"name":"babel-runtime/core-js/object/assign","loc":{"line":39,"column":22}},{"name":"react","loc":{"line":45,"column":21}},{"name":"prop-types","loc":{"line":49,"column":25}},{"name":"fbjs/lib/shallowEqual","loc":{"line":53,"column":28}},{"name":"warning","loc":{"line":57,"column":23}},{"name":"./supports","loc":{"line":61,"column":24}}],"generated":{"js":"'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);\n\nvar _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = require('babel-runtime/helpers/createClass');\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\nvar _inherits2 = require('babel-runtime/helpers/inherits');\n\nvar _inherits3 = _interopRequireDefault(_inherits2);\n\nvar _typeof2 = require('babel-runtime/helpers/typeof');\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nvar _keys = require('babel-runtime/core-js/object/keys');\n\nvar _keys2 = _interopRequireDefault(_keys);\n\nvar _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');\n\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\n\nvar _assign = require('babel-runtime/core-js/object/assign');\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nexports.withOptions = withOptions;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _shallowEqual = require('fbjs/lib/shallowEqual');\n\nvar _shallowEqual2 = _interopRequireDefault(_shallowEqual);\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _supports = require('./supports');\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj };\n}\n\nvar defaultEventOptions = {\n  capture: false,\n  passive: false\n};\n\nfunction mergeDefaultEventOptions(options) {\n  return (0, _assign2.default)({}, defaultEventOptions, options);\n}\n\nfunction getEventListenerArgs(eventName, callback, options) {\n  var args = [eventName, callback];\n  args.push(_supports.passiveOption ? options : options.capture);\n  return args;\n}\n\nfunction on(target, eventName, callback, options) {\n  // eslint-disable-next-line prefer-spread\n  target.addEventListener.apply(target, getEventListenerArgs(eventName, callback, options));\n}\n\nfunction off(target, eventName, callback, options) {\n  // eslint-disable-next-line prefer-spread\n  target.removeEventListener.apply(target, getEventListenerArgs(eventName, callback, options));\n}\n\nfunction forEachListener(props, iteratee) {\n  var children = props.children,\n      target = props.target,\n      eventProps = (0, _objectWithoutProperties3.default)(props, ['children', 'target']);\n\n  (0, _keys2.default)(eventProps).forEach(function (name) {\n    if (name.substring(0, 2) !== 'on') {\n      return;\n    }\n\n    var prop = eventProps[name];\n    var type = typeof prop === 'undefined' ? 'undefined' : (0, _typeof3.default)(prop);\n    var isObject = type === 'object';\n    var isFunction = type === 'function';\n\n    if (!isObject && !isFunction) {\n      return;\n    }\n\n    var capture = name.substr(-7).toLowerCase() === 'capture';\n    var eventName = name.substring(2).toLowerCase();\n    eventName = capture ? eventName.substring(0, eventName.length - 7) : eventName;\n\n    if (isObject) {\n      iteratee(eventName, prop.handler, prop.options);\n    } else {\n      iteratee(eventName, prop, mergeDefaultEventOptions({ capture: capture }));\n    }\n  });\n}\n\nfunction withOptions(handler, options) {\n  \"development\" !== \"production\" ? (0, _warning2.default)(options, 'react-event-listener: should be specified options in withOptions.') : void 0;\n\n  return {\n    handler: handler,\n    options: mergeDefaultEventOptions(options)\n  };\n}\n\nvar EventListener = function (_React$Component) {\n  (0, _inherits3.default)(EventListener, _React$Component);\n\n  function EventListener() {\n    (0, _classCallCheck3.default)(this, EventListener);\n    return (0, _possibleConstructorReturn3.default)(this, (EventListener.__proto__ || (0, _getPrototypeOf2.default)(EventListener)).apply(this, arguments));\n  }\n\n  (0, _createClass3.default)(EventListener, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      this.addListeners();\n    }\n  }, {\n    key: 'shouldComponentUpdate',\n    value: function shouldComponentUpdate(nextProps) {\n      return !(0, _shallowEqual2.default)(this.props, nextProps);\n    }\n  }, {\n    key: 'componentWillUpdate',\n    value: function componentWillUpdate() {\n      this.removeListeners();\n    }\n  }, {\n    key: 'componentDidUpdate',\n    value: function componentDidUpdate() {\n      this.addListeners();\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      this.removeListeners();\n    }\n  }, {\n    key: 'addListeners',\n    value: function addListeners() {\n      this.applyListeners(on);\n    }\n  }, {\n    key: 'removeListeners',\n    value: function removeListeners() {\n      this.applyListeners(off);\n    }\n  }, {\n    key: 'applyListeners',\n    value: function applyListeners(onOrOff) {\n      var target = this.props.target;\n\n      if (target) {\n        var element = target;\n\n        if (typeof target === 'string') {\n          element = window[target];\n        }\n\n        forEachListener(this.props, onOrOff.bind(null, element));\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      return this.props.children || null;\n    }\n  }]);\n  return EventListener;\n}(_react2.default.Component);\n\nEventListener.propTypes = \"development\" !== \"production\" ? {\n  /**\n   * You can provide a single child too.\n   */\n  children: _propTypes2.default.node,\n  /**\n   * The DOM target to listen to.\n   */\n  target: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.string]).isRequired\n} : {};\n\nexports.default = EventListener;"},"hash":"b0cc758d89a273e3d2f3ff02a6c376c4"}