{"ast":null,"code":"import { canUseDOM } from 'fbjs/lib/ExecutionEnvironment';\nimport createResponderEvent from \"./createResponderEvent\";\nimport { isCancelish, isEndish, isMoveish, isScroll, isSelectionChange, isStartish } from \"./ResponderEventTypes\";\nimport { getLowestCommonAncestor, getResponderPaths, hasTargetTouches, hasValidSelection, isPrimaryPointerDown, setResponderId } from \"./utils\";\nimport ResponderTouchHistoryStore from \"./ResponderTouchHistoryStore\";\nvar emptyObject = {};\nvar startRegistration = ['onStartShouldSetResponderCapture', 'onStartShouldSetResponder', {\n  bubbles: true\n}];\nvar moveRegistration = ['onMoveShouldSetResponderCapture', 'onMoveShouldSetResponder', {\n  bubbles: true\n}];\nvar scrollRegistration = ['onScrollShouldSetResponderCapture', 'onScrollShouldSetResponder', {\n  bubbles: false\n}];\nvar shouldSetResponderEvents = {\n  touchstart: startRegistration,\n  mousedown: startRegistration,\n  touchmove: moveRegistration,\n  mousemove: moveRegistration,\n  scroll: scrollRegistration\n};\nvar emptyResponder = {\n  id: null,\n  idPath: null,\n  node: null\n};\nvar responderListenersMap = new Map();\nvar isEmulatingMouseEvents = false;\nvar trackedTouchCount = 0;\nvar currentResponder = {\n  id: null,\n  node: null,\n  idPath: null\n};\n\nfunction changeCurrentResponder(responder) {\n  currentResponder = responder;\n}\n\nfunction getResponderConfig(id) {\n  var config = responderListenersMap.get(id);\n  return config != null ? config : emptyObject;\n}\n\nfunction eventListener(domEvent) {\n  var eventType = domEvent.type;\n  var eventTarget = domEvent.target;\n\n  if (eventType === 'touchstart') {\n    isEmulatingMouseEvents = true;\n  }\n\n  if (eventType === 'touchmove' || trackedTouchCount > 1) {\n    isEmulatingMouseEvents = false;\n  }\n\n  if (eventType === 'mousedown' && isEmulatingMouseEvents || eventType === 'mousemove' && isEmulatingMouseEvents || eventType === 'mousemove' && trackedTouchCount < 1) {\n    return;\n  }\n\n  if (isEmulatingMouseEvents && eventType === 'mouseup') {\n    if (trackedTouchCount === 0) {\n      isEmulatingMouseEvents = false;\n    }\n\n    return;\n  }\n\n  var isStartEvent = isStartish(eventType) && isPrimaryPointerDown(domEvent);\n  var isMoveEvent = isMoveish(eventType);\n  var isEndEvent = isEndish(eventType);\n  var isScrollEvent = isScroll(eventType);\n  var isSelectionChangeEvent = isSelectionChange(eventType);\n  var responderEvent = createResponderEvent(domEvent);\n\n  if (isStartEvent || isMoveEvent || isEndEvent) {\n    if (domEvent.touches) {\n      trackedTouchCount = domEvent.touches.length;\n    } else {\n      if (isStartEvent) {\n        trackedTouchCount = 1;\n      } else if (isEndEvent) {\n        trackedTouchCount = 0;\n      }\n    }\n\n    ResponderTouchHistoryStore.recordTouchTrack(eventType, responderEvent.nativeEvent);\n  }\n\n  var eventPaths = getResponderPaths(domEvent);\n  var wasNegotiated = false;\n  var wantsResponder;\n\n  if (isStartEvent || isMoveEvent || isScrollEvent && trackedTouchCount > 0) {\n    var currentResponderIdPath = currentResponder.idPath;\n    var eventIdPath = eventPaths.idPath;\n\n    if (currentResponderIdPath != null && eventIdPath != null) {\n      var lowestCommonAncestor = getLowestCommonAncestor(currentResponderIdPath, eventIdPath);\n\n      if (lowestCommonAncestor != null) {\n        var indexOfLowestCommonAncestor = eventIdPath.indexOf(lowestCommonAncestor);\n        var index = indexOfLowestCommonAncestor + (lowestCommonAncestor === currentResponder.id ? 1 : 0);\n        eventPaths = {\n          idPath: eventIdPath.slice(index),\n          nodePath: eventPaths.nodePath.slice(index)\n        };\n      } else {\n        eventPaths = null;\n      }\n    }\n\n    if (eventPaths != null) {\n      wantsResponder = findWantsResponder(eventPaths, domEvent, responderEvent);\n\n      if (wantsResponder != null) {\n        attemptTransfer(responderEvent, wantsResponder);\n        wasNegotiated = true;\n      }\n    }\n  }\n\n  if (currentResponder.id != null && currentResponder.node != null) {\n    var _currentResponder = currentResponder,\n        id = _currentResponder.id,\n        node = _currentResponder.node;\n\n    var _getResponderConfig = getResponderConfig(id),\n        onResponderStart = _getResponderConfig.onResponderStart,\n        onResponderMove = _getResponderConfig.onResponderMove,\n        onResponderEnd = _getResponderConfig.onResponderEnd,\n        onResponderRelease = _getResponderConfig.onResponderRelease,\n        onResponderTerminate = _getResponderConfig.onResponderTerminate,\n        onResponderTerminationRequest = _getResponderConfig.onResponderTerminationRequest;\n\n    responderEvent.bubbles = false;\n    responderEvent.cancelable = false;\n    responderEvent.currentTarget = node;\n\n    if (isStartEvent) {\n      if (onResponderStart != null) {\n        responderEvent.dispatchConfig.registrationName = 'onResponderStart';\n        onResponderStart(responderEvent);\n      }\n    } else if (isMoveEvent) {\n      if (onResponderMove != null) {\n        responderEvent.dispatchConfig.registrationName = 'onResponderMove';\n        onResponderMove(responderEvent);\n      }\n    } else {\n      var isTerminateEvent = isCancelish(eventType) || eventType === 'contextmenu' || eventType === 'blur' && eventTarget === window || eventType === 'blur' && eventTarget.contains(node) && domEvent.relatedTarget !== node || isScrollEvent && trackedTouchCount === 0 || isScrollEvent && eventTarget.contains(node) && eventTarget !== node || isSelectionChangeEvent && hasValidSelection(domEvent);\n      var isReleaseEvent = isEndEvent && !isTerminateEvent && !hasTargetTouches(node, domEvent.touches);\n\n      if (isEndEvent) {\n        if (onResponderEnd != null) {\n          responderEvent.dispatchConfig.registrationName = 'onResponderEnd';\n          onResponderEnd(responderEvent);\n        }\n      }\n\n      if (isReleaseEvent) {\n        if (onResponderRelease != null) {\n          responderEvent.dispatchConfig.registrationName = 'onResponderRelease';\n          onResponderRelease(responderEvent);\n        }\n\n        changeCurrentResponder(emptyResponder);\n      }\n\n      if (isTerminateEvent) {\n        var shouldTerminate = true;\n\n        if (eventType === 'contextmenu' || eventType === 'scroll' || eventType === 'selectionchange') {\n          if (wasNegotiated) {\n            shouldTerminate = false;\n          } else if (onResponderTerminationRequest != null) {\n            responderEvent.dispatchConfig.registrationName = 'onResponderTerminationRequest';\n\n            if (onResponderTerminationRequest(responderEvent) === false) {\n              shouldTerminate = false;\n            }\n          }\n        }\n\n        if (shouldTerminate) {\n          if (onResponderTerminate != null) {\n            responderEvent.dispatchConfig.registrationName = 'onResponderTerminate';\n            onResponderTerminate(responderEvent);\n          }\n\n          changeCurrentResponder(emptyResponder);\n          isEmulatingMouseEvents = false;\n          trackedTouchCount = 0;\n        }\n      }\n    }\n  }\n}\n\nfunction findWantsResponder(eventPaths, domEvent, responderEvent) {\n  var shouldSetCallbacks = shouldSetResponderEvents[domEvent.type];\n\n  if (shouldSetCallbacks != null) {\n    var idPath = eventPaths.idPath,\n        nodePath = eventPaths.nodePath;\n    var shouldSetCallbackCaptureName = shouldSetCallbacks[0];\n    var shouldSetCallbackBubbleName = shouldSetCallbacks[1];\n    var bubbles = shouldSetCallbacks[2].bubbles;\n\n    var check = function check(id, node, callbackName) {\n      var config = getResponderConfig(id);\n      var shouldSetCallback = config[callbackName];\n\n      if (shouldSetCallback != null) {\n        responderEvent.currentTarget = node;\n\n        if (shouldSetCallback(responderEvent) === true) {\n          var prunedIdPath = idPath.slice(idPath.indexOf(id));\n          return {\n            id: id,\n            node: node,\n            idPath: prunedIdPath\n          };\n        }\n      }\n    };\n\n    for (var i = idPath.length - 1; i >= 0; i--) {\n      var id = idPath[i];\n      var node = nodePath[i];\n      var result = check(id, node, shouldSetCallbackCaptureName);\n\n      if (result != null) {\n        return result;\n      }\n\n      if (responderEvent.isPropagationStopped() === true) {\n        return;\n      }\n    }\n\n    if (bubbles) {\n      for (var _i = 0; _i < idPath.length; _i++) {\n        var _id = idPath[_i];\n        var _node = nodePath[_i];\n\n        var _result = check(_id, _node, shouldSetCallbackBubbleName);\n\n        if (_result != null) {\n          return _result;\n        }\n\n        if (responderEvent.isPropagationStopped() === true) {\n          return;\n        }\n      }\n    } else {\n      var _id2 = idPath[0];\n      var _node2 = nodePath[0];\n      var target = domEvent.target;\n\n      if (target === _node2) {\n        return check(_id2, _node2, shouldSetCallbackBubbleName);\n      }\n    }\n  }\n}\n\nfunction attemptTransfer(responderEvent, wantsResponder) {\n  var _currentResponder2 = currentResponder,\n      currentId = _currentResponder2.id,\n      currentNode = _currentResponder2.node;\n  var id = wantsResponder.id,\n      node = wantsResponder.node;\n\n  var _getResponderConfig2 = getResponderConfig(id),\n      onResponderGrant = _getResponderConfig2.onResponderGrant,\n      onResponderReject = _getResponderConfig2.onResponderReject;\n\n  responderEvent.bubbles = false;\n  responderEvent.cancelable = false;\n  responderEvent.currentTarget = node;\n\n  if (currentId == null) {\n    if (onResponderGrant != null) {\n      responderEvent.currentTarget = node;\n      responderEvent.dispatchConfig.registrationName = 'onResponderGrant';\n      onResponderGrant(responderEvent);\n    }\n\n    changeCurrentResponder(wantsResponder);\n  } else {\n    var _getResponderConfig3 = getResponderConfig(currentId),\n        onResponderTerminate = _getResponderConfig3.onResponderTerminate,\n        onResponderTerminationRequest = _getResponderConfig3.onResponderTerminationRequest;\n\n    var allowTransfer = true;\n\n    if (onResponderTerminationRequest != null) {\n      responderEvent.currentTarget = currentNode;\n      responderEvent.dispatchConfig.registrationName = 'onResponderTerminationRequest';\n\n      if (onResponderTerminationRequest(responderEvent) === false) {\n        allowTransfer = false;\n      }\n    }\n\n    if (allowTransfer) {\n      if (onResponderTerminate != null) {\n        responderEvent.currentTarget = currentNode;\n        responderEvent.dispatchConfig.registrationName = 'onResponderTerminate';\n        onResponderTerminate(responderEvent);\n      }\n\n      if (onResponderGrant != null) {\n        responderEvent.currentTarget = node;\n        responderEvent.dispatchConfig.registrationName = 'onResponderGrant';\n        onResponderGrant(responderEvent);\n      }\n\n      changeCurrentResponder(wantsResponder);\n    } else {\n      if (onResponderReject != null) {\n        responderEvent.currentTarget = node;\n        responderEvent.dispatchConfig.registrationName = 'onResponderReject';\n        onResponderReject(responderEvent);\n      }\n    }\n  }\n}\n\nvar documentEventsCapturePhase = ['blur', 'scroll'];\nvar documentEventsBubblePhase = ['mousedown', 'mousemove', 'mouseup', 'dragstart', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'contextmenu', 'select', 'selectionchange'];\nexport function attachListeners() {\n  if (canUseDOM && window.__reactResponderSystemActive == null) {\n    window.addEventListener('blur', eventListener);\n    documentEventsBubblePhase.forEach(function (eventType) {\n      document.addEventListener(eventType, eventListener);\n    });\n    documentEventsCapturePhase.forEach(function (eventType) {\n      document.addEventListener(eventType, eventListener, true);\n    });\n    window.__reactResponderSystemActive = true;\n  }\n}\nexport function addNode(id, node, config) {\n  setResponderId(node, id);\n  responderListenersMap.set(id, config);\n}\nexport function removeNode(id) {\n  if (currentResponder.id === id) {\n    terminateResponder();\n  }\n\n  if (responderListenersMap.has(id)) {\n    responderListenersMap.delete(id);\n  }\n}\nexport function terminateResponder() {\n  var _currentResponder3 = currentResponder,\n      id = _currentResponder3.id,\n      node = _currentResponder3.node;\n\n  if (id != null && node != null) {\n    var _getResponderConfig4 = getResponderConfig(id),\n        onResponderTerminate = _getResponderConfig4.onResponderTerminate;\n\n    if (onResponderTerminate != null) {\n      var event = createResponderEvent({});\n      event.currentTarget = node;\n      onResponderTerminate(event);\n    }\n\n    changeCurrentResponder(emptyResponder);\n  }\n\n  isEmulatingMouseEvents = false;\n  trackedTouchCount = 0;\n}\nexport function getResponderNode() {\n  return currentResponder.node;\n}","map":{"version":3,"sources":["/Users/nishan/Desktop/oss/responsive-breakpoints/example/node_modules/react-native-web/dist/modules/useResponderEvents/ResponderSystem.js"],"names":["canUseDOM","createResponderEvent","isCancelish","isEndish","isMoveish","isScroll","isSelectionChange","isStartish","getLowestCommonAncestor","getResponderPaths","hasTargetTouches","hasValidSelection","isPrimaryPointerDown","setResponderId","ResponderTouchHistoryStore","emptyObject","startRegistration","bubbles","moveRegistration","scrollRegistration","shouldSetResponderEvents","touchstart","mousedown","touchmove","mousemove","scroll","emptyResponder","id","idPath","node","responderListenersMap","Map","isEmulatingMouseEvents","trackedTouchCount","currentResponder","changeCurrentResponder","responder","getResponderConfig","config","get","eventListener","domEvent","eventType","type","eventTarget","target","isStartEvent","isMoveEvent","isEndEvent","isScrollEvent","isSelectionChangeEvent","responderEvent","touches","length","recordTouchTrack","nativeEvent","eventPaths","wasNegotiated","wantsResponder","currentResponderIdPath","eventIdPath","lowestCommonAncestor","indexOfLowestCommonAncestor","indexOf","index","slice","nodePath","findWantsResponder","attemptTransfer","_currentResponder","_getResponderConfig","onResponderStart","onResponderMove","onResponderEnd","onResponderRelease","onResponderTerminate","onResponderTerminationRequest","cancelable","currentTarget","dispatchConfig","registrationName","isTerminateEvent","window","contains","relatedTarget","isReleaseEvent","shouldTerminate","shouldSetCallbacks","shouldSetCallbackCaptureName","shouldSetCallbackBubbleName","check","callbackName","shouldSetCallback","prunedIdPath","i","result","isPropagationStopped","_i","_id","_node","_result","_id2","_node2","_currentResponder2","currentId","currentNode","_getResponderConfig2","onResponderGrant","onResponderReject","_getResponderConfig3","allowTransfer","documentEventsCapturePhase","documentEventsBubblePhase","attachListeners","__reactResponderSystemActive","addEventListener","forEach","document","addNode","set","removeNode","terminateResponder","has","delete","_currentResponder3","_getResponderConfig4","event","getResponderNode"],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Nicolas Gallagher\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n/**\n * RESPONDER EVENT SYSTEM\n *\n * A single, global \"interaction lock\" on views. For a view to be the \"responder\" means\n * that pointer interactions are exclusive to that view and none other. The \"interaction\n * lock\" can be transferred (only) to ancestors of the current \"responder\" as long as\n * pointers continue to be active.\n *\n * Responder being granted:\n *\n * A view can become the \"responder\" after the following events:\n *  * \"pointerdown\" (implemented using \"touchstart\", \"mousedown\")\n *  * \"pointermove\" (implemented using \"touchmove\", \"mousemove\")\n *  * \"scroll\" (while a pointer is down)\n *  * \"selectionchange\" (while a pointer is down)\n *\n * If nothing is already the \"responder\", the event propagates to (capture) and from\n * (bubble) the event target until a view returns `true` for\n * `on*ShouldSetResponder(Capture)`.\n *\n * If something is already the responder, the event propagates to (capture) and from\n * (bubble) the lowest common ancestor of the event target and the current \"responder\".\n * Then negotiation happens between the current \"responder\" and a view that wants to\n * become the \"responder\": see the timing diagram below.\n *\n * (NOTE: Scrolled views either automatically become the \"responder\" or release the\n * \"interaction lock\". A native scroll view that isn't built on top of the responder\n * system must result in the current \"responder\" being notified that it no longer has\n * the \"interaction lock\" - the native system has taken over.\n *\n * Responder being released:\n *\n * As soon as there are no more active pointers that *started* inside descendants\n * of the *current* \"responder\", an `onResponderRelease` event is dispatched to the\n * current \"responder\", and the responder lock is released.\n *\n * Typical sequence of events:\n *  * startShouldSetResponder\n *  * responderGrant/Reject\n *  * responderStart\n *  * responderMove\n *  * responderEnd\n *  * responderRelease\n */\n\n/*                                             Negotiation Performed\n                                             +-----------------------+\n                                            /                         \\\nProcess low level events to    +     Current Responder      +   wantsResponderID\ndetermine who to perform negot-|   (if any exists at all)   |\niation/transition              | Otherwise just pass through|\n-------------------------------+----------------------------+------------------+\nBubble to find first ID        |                            |\nto return true:wantsResponderID|                            |\n                               |                            |\n     +--------------+          |                            |\n     | onTouchStart |          |                            |\n     +------+-------+    none  |                            |\n            |            return|                            |\n+-----------v-------------+true| +------------------------+ |\n|onStartShouldSetResponder|----->| onResponderStart (cur) |<-----------+\n+-----------+-------------+    | +------------------------+ |          |\n            |                  |                            | +--------+-------+\n            | returned true for|       false:REJECT +-------->|onResponderReject\n            | wantsResponderID |                    |       | +----------------+\n            | (now attempt     | +------------------+-----+ |\n            |  handoff)        | | onResponder            | |\n            +------------------->|    TerminationRequest  | |\n                               | +------------------+-----+ |\n                               |                    |       | +----------------+\n                               |         true:GRANT +-------->|onResponderGrant|\n                               |                            | +--------+-------+\n                               | +------------------------+ |          |\n                               | | onResponderTerminate   |<-----------+\n                               | +------------------+-----+ |\n                               |                    |       | +----------------+\n                               |                    +-------->|onResponderStart|\n                               |                            | +----------------+\nBubble to find first ID        |                            |\nto return true:wantsResponderID|                            |\n                               |                            |\n     +-------------+           |                            |\n     | onTouchMove |           |                            |\n     +------+------+     none  |                            |\n            |            return|                            |\n+-----------v-------------+true| +------------------------+ |\n|onMoveShouldSetResponder |----->| onResponderMove (cur)  |<-----------+\n+-----------+-------------+    | +------------------------+ |          |\n            |                  |                            | +--------+-------+\n            | returned true for|       false:REJECT +-------->|onResponderReject\n            | wantsResponderID |                    |       | +----------------+\n            | (now attempt     | +------------------+-----+ |\n            |  handoff)        | |   onResponder          | |\n            +------------------->|      TerminationRequest| |\n                               | +------------------+-----+ |\n                               |                    |       | +----------------+\n                               |         true:GRANT +-------->|onResponderGrant|\n                               |                            | +--------+-------+\n                               | +------------------------+ |          |\n                               | |   onResponderTerminate |<-----------+\n                               | +------------------+-----+ |\n                               |                    |       | +----------------+\n                               |                    +-------->|onResponderMove |\n                               |                            | +----------------+\n                               |                            |\n                               |                            |\n      Some active touch started|                            |\n      inside current responder | +------------------------+ |\n      +------------------------->|      onResponderEnd    | |\n      |                        | +------------------------+ |\n  +---+---------+              |                            |\n  | onTouchEnd  |              |                            |\n  +---+---------+              |                            |\n      |                        | +------------------------+ |\n      +------------------------->|     onResponderEnd     | |\n      No active touches started| +-----------+------------+ |\n      inside current responder |             |              |\n                               |             v              |\n                               | +------------------------+ |\n                               | |    onResponderRelease  | |\n                               | +------------------------+ |\n                               |                            |\n                               +                            + */\nimport { canUseDOM } from 'fbjs/lib/ExecutionEnvironment';\nimport createResponderEvent from './createResponderEvent';\nimport { isCancelish, isEndish, isMoveish, isScroll, isSelectionChange, isStartish } from './ResponderEventTypes';\nimport { getLowestCommonAncestor, getResponderPaths, hasTargetTouches, hasValidSelection, isPrimaryPointerDown, setResponderId } from './utils';\nimport ResponderTouchHistoryStore from './ResponderTouchHistoryStore';\n/* ------------ TYPES ------------ */\n\nvar emptyObject = {};\n/* ------------ IMPLEMENTATION ------------ */\n\nvar startRegistration = ['onStartShouldSetResponderCapture', 'onStartShouldSetResponder', {\n  bubbles: true\n}];\nvar moveRegistration = ['onMoveShouldSetResponderCapture', 'onMoveShouldSetResponder', {\n  bubbles: true\n}];\nvar scrollRegistration = ['onScrollShouldSetResponderCapture', 'onScrollShouldSetResponder', {\n  bubbles: false\n}];\nvar shouldSetResponderEvents = {\n  touchstart: startRegistration,\n  mousedown: startRegistration,\n  touchmove: moveRegistration,\n  mousemove: moveRegistration,\n  scroll: scrollRegistration\n};\nvar emptyResponder = {\n  id: null,\n  idPath: null,\n  node: null\n};\nvar responderListenersMap = new Map();\nvar isEmulatingMouseEvents = false;\nvar trackedTouchCount = 0;\nvar currentResponder = {\n  id: null,\n  node: null,\n  idPath: null\n};\n\nfunction changeCurrentResponder(responder) {\n  currentResponder = responder;\n}\n\nfunction getResponderConfig(id) {\n  var config = responderListenersMap.get(id);\n  return config != null ? config : emptyObject;\n}\n/**\n * Process native events\n *\n * A single event listener is used to manage the responder system.\n * All pointers are tracked in the ResponderTouchHistoryStore. Native events\n * are interpreted in terms of the Responder System and checked to see if\n * the responder should be transferred. Each host node that is attached to\n * the Responder System has an ID, which is used to look up its associated\n * callbacks.\n */\n\n\nfunction eventListener(domEvent) {\n  var eventType = domEvent.type;\n  var eventTarget = domEvent.target;\n  /**\n   * Manage emulated events and early bailout.\n   * Since PointerEvent is not used yet (lack of support in older Safari), it's\n   * necessary to manually manage the mess of browser touch/mouse events.\n   * And bailout early for termination events when there is no active responder.\n   */\n  // Flag when browser may produce emulated events\n\n  if (eventType === 'touchstart') {\n    isEmulatingMouseEvents = true;\n  } // Remove flag when browser will not produce emulated events\n\n\n  if (eventType === 'touchmove' || trackedTouchCount > 1) {\n    isEmulatingMouseEvents = false;\n  } // Ignore various events in particular circumstances\n\n\n  if ( // Ignore browser emulated mouse events\n  eventType === 'mousedown' && isEmulatingMouseEvents || eventType === 'mousemove' && isEmulatingMouseEvents || // Ignore mousemove if a mousedown didn't occur first\n  eventType === 'mousemove' && trackedTouchCount < 1) {\n    return;\n  } // Remove flag after emulated events are finished\n\n\n  if (isEmulatingMouseEvents && eventType === 'mouseup') {\n    if (trackedTouchCount === 0) {\n      isEmulatingMouseEvents = false;\n    }\n\n    return;\n  }\n\n  var isStartEvent = isStartish(eventType) && isPrimaryPointerDown(domEvent);\n  var isMoveEvent = isMoveish(eventType);\n  var isEndEvent = isEndish(eventType);\n  var isScrollEvent = isScroll(eventType);\n  var isSelectionChangeEvent = isSelectionChange(eventType);\n  var responderEvent = createResponderEvent(domEvent);\n  /**\n   * Record the state of active pointers\n   */\n\n  if (isStartEvent || isMoveEvent || isEndEvent) {\n    if (domEvent.touches) {\n      trackedTouchCount = domEvent.touches.length;\n    } else {\n      if (isStartEvent) {\n        trackedTouchCount = 1;\n      } else if (isEndEvent) {\n        trackedTouchCount = 0;\n      }\n    }\n\n    ResponderTouchHistoryStore.recordTouchTrack(eventType, responderEvent.nativeEvent);\n  }\n  /**\n   * Responder System logic\n   */\n\n\n  var eventPaths = getResponderPaths(domEvent);\n  var wasNegotiated = false;\n  var wantsResponder; // If an event occured that might change the current responder...\n\n  if (isStartEvent || isMoveEvent || isScrollEvent && trackedTouchCount > 0) {\n    // If there is already a responder, prune the event paths to the lowest common ancestor\n    // of the existing responder and deepest target of the event.\n    var currentResponderIdPath = currentResponder.idPath;\n    var eventIdPath = eventPaths.idPath;\n\n    if (currentResponderIdPath != null && eventIdPath != null) {\n      var lowestCommonAncestor = getLowestCommonAncestor(currentResponderIdPath, eventIdPath);\n\n      if (lowestCommonAncestor != null) {\n        var indexOfLowestCommonAncestor = eventIdPath.indexOf(lowestCommonAncestor); // Skip the current responder so it doesn't receive unexpected \"shouldSet\" events.\n\n        var index = indexOfLowestCommonAncestor + (lowestCommonAncestor === currentResponder.id ? 1 : 0);\n        eventPaths = {\n          idPath: eventIdPath.slice(index),\n          nodePath: eventPaths.nodePath.slice(index)\n        };\n      } else {\n        eventPaths = null;\n      }\n    }\n\n    if (eventPaths != null) {\n      // If a node wants to become the responder, attempt to transfer.\n      wantsResponder = findWantsResponder(eventPaths, domEvent, responderEvent);\n\n      if (wantsResponder != null) {\n        // Sets responder if none exists, or negotates with existing responder.\n        attemptTransfer(responderEvent, wantsResponder);\n        wasNegotiated = true;\n      }\n    }\n  } // If there is now a responder, invoke its callbacks for the lifecycle of the gesture.\n\n\n  if (currentResponder.id != null && currentResponder.node != null) {\n    var _currentResponder = currentResponder,\n        id = _currentResponder.id,\n        node = _currentResponder.node;\n\n    var _getResponderConfig = getResponderConfig(id),\n        onResponderStart = _getResponderConfig.onResponderStart,\n        onResponderMove = _getResponderConfig.onResponderMove,\n        onResponderEnd = _getResponderConfig.onResponderEnd,\n        onResponderRelease = _getResponderConfig.onResponderRelease,\n        onResponderTerminate = _getResponderConfig.onResponderTerminate,\n        onResponderTerminationRequest = _getResponderConfig.onResponderTerminationRequest;\n\n    responderEvent.bubbles = false;\n    responderEvent.cancelable = false;\n    responderEvent.currentTarget = node; // Start\n\n    if (isStartEvent) {\n      if (onResponderStart != null) {\n        responderEvent.dispatchConfig.registrationName = 'onResponderStart';\n        onResponderStart(responderEvent);\n      }\n    } // Move\n    else if (isMoveEvent) {\n        if (onResponderMove != null) {\n          responderEvent.dispatchConfig.registrationName = 'onResponderMove';\n          onResponderMove(responderEvent);\n        }\n      } else {\n        var isTerminateEvent = isCancelish(eventType) || // native context menu\n        eventType === 'contextmenu' || // window blur\n        eventType === 'blur' && eventTarget === window || // responder (or ancestors) blur\n        eventType === 'blur' && eventTarget.contains(node) && domEvent.relatedTarget !== node || // native scroll without using a pointer\n        isScrollEvent && trackedTouchCount === 0 || // native scroll on node that is parent of the responder (allow siblings to scroll)\n        isScrollEvent && eventTarget.contains(node) && eventTarget !== node || // native select/selectionchange on node\n        isSelectionChangeEvent && hasValidSelection(domEvent);\n        var isReleaseEvent = isEndEvent && !isTerminateEvent && !hasTargetTouches(node, domEvent.touches); // End\n\n        if (isEndEvent) {\n          if (onResponderEnd != null) {\n            responderEvent.dispatchConfig.registrationName = 'onResponderEnd';\n            onResponderEnd(responderEvent);\n          }\n        } // Release\n\n\n        if (isReleaseEvent) {\n          if (onResponderRelease != null) {\n            responderEvent.dispatchConfig.registrationName = 'onResponderRelease';\n            onResponderRelease(responderEvent);\n          }\n\n          changeCurrentResponder(emptyResponder);\n        } // Terminate\n\n\n        if (isTerminateEvent) {\n          var shouldTerminate = true; // Responders can still avoid termination but only for these events.\n\n          if (eventType === 'contextmenu' || eventType === 'scroll' || eventType === 'selectionchange') {\n            // Only call this function is it wasn't already called during negotiation.\n            if (wasNegotiated) {\n              shouldTerminate = false;\n            } else if (onResponderTerminationRequest != null) {\n              responderEvent.dispatchConfig.registrationName = 'onResponderTerminationRequest';\n\n              if (onResponderTerminationRequest(responderEvent) === false) {\n                shouldTerminate = false;\n              }\n            }\n          }\n\n          if (shouldTerminate) {\n            if (onResponderTerminate != null) {\n              responderEvent.dispatchConfig.registrationName = 'onResponderTerminate';\n              onResponderTerminate(responderEvent);\n            }\n\n            changeCurrentResponder(emptyResponder);\n            isEmulatingMouseEvents = false;\n            trackedTouchCount = 0;\n          }\n        }\n      }\n  }\n}\n/**\n * Walk the event path to/from the target node. At each node, stop and call the\n * relevant \"shouldSet\" functions for the given event type. If any of those functions\n * call \"stopPropagation\" on the event, stop searching for a responder.\n */\n\n\nfunction findWantsResponder(eventPaths, domEvent, responderEvent) {\n  var shouldSetCallbacks = shouldSetResponderEvents[domEvent.type]; // for Flow\n\n  if (shouldSetCallbacks != null) {\n    var idPath = eventPaths.idPath,\n        nodePath = eventPaths.nodePath;\n    var shouldSetCallbackCaptureName = shouldSetCallbacks[0];\n    var shouldSetCallbackBubbleName = shouldSetCallbacks[1];\n    var bubbles = shouldSetCallbacks[2].bubbles;\n\n    var check = function check(id, node, callbackName) {\n      var config = getResponderConfig(id);\n      var shouldSetCallback = config[callbackName];\n\n      if (shouldSetCallback != null) {\n        responderEvent.currentTarget = node;\n\n        if (shouldSetCallback(responderEvent) === true) {\n          // Start the path from the potential responder\n          var prunedIdPath = idPath.slice(idPath.indexOf(id));\n          return {\n            id: id,\n            node: node,\n            idPath: prunedIdPath\n          };\n        }\n      }\n    }; // capture\n\n\n    for (var i = idPath.length - 1; i >= 0; i--) {\n      var id = idPath[i];\n      var node = nodePath[i];\n      var result = check(id, node, shouldSetCallbackCaptureName);\n\n      if (result != null) {\n        return result;\n      }\n\n      if (responderEvent.isPropagationStopped() === true) {\n        return;\n      }\n    } // bubble\n\n\n    if (bubbles) {\n      for (var _i = 0; _i < idPath.length; _i++) {\n        var _id = idPath[_i];\n        var _node = nodePath[_i];\n\n        var _result = check(_id, _node, shouldSetCallbackBubbleName);\n\n        if (_result != null) {\n          return _result;\n        }\n\n        if (responderEvent.isPropagationStopped() === true) {\n          return;\n        }\n      }\n    } else {\n      var _id2 = idPath[0];\n      var _node2 = nodePath[0];\n      var target = domEvent.target;\n\n      if (target === _node2) {\n        return check(_id2, _node2, shouldSetCallbackBubbleName);\n      }\n    }\n  }\n}\n/**\n * Attempt to transfer the responder.\n */\n\n\nfunction attemptTransfer(responderEvent, wantsResponder) {\n  var _currentResponder2 = currentResponder,\n      currentId = _currentResponder2.id,\n      currentNode = _currentResponder2.node;\n  var id = wantsResponder.id,\n      node = wantsResponder.node;\n\n  var _getResponderConfig2 = getResponderConfig(id),\n      onResponderGrant = _getResponderConfig2.onResponderGrant,\n      onResponderReject = _getResponderConfig2.onResponderReject;\n\n  responderEvent.bubbles = false;\n  responderEvent.cancelable = false;\n  responderEvent.currentTarget = node; // Set responder\n\n  if (currentId == null) {\n    if (onResponderGrant != null) {\n      responderEvent.currentTarget = node;\n      responderEvent.dispatchConfig.registrationName = 'onResponderGrant';\n      onResponderGrant(responderEvent);\n    }\n\n    changeCurrentResponder(wantsResponder);\n  } // Negotiate with current responder\n  else {\n      var _getResponderConfig3 = getResponderConfig(currentId),\n          onResponderTerminate = _getResponderConfig3.onResponderTerminate,\n          onResponderTerminationRequest = _getResponderConfig3.onResponderTerminationRequest;\n\n      var allowTransfer = true;\n\n      if (onResponderTerminationRequest != null) {\n        responderEvent.currentTarget = currentNode;\n        responderEvent.dispatchConfig.registrationName = 'onResponderTerminationRequest';\n\n        if (onResponderTerminationRequest(responderEvent) === false) {\n          allowTransfer = false;\n        }\n      }\n\n      if (allowTransfer) {\n        // Terminate existing responder\n        if (onResponderTerminate != null) {\n          responderEvent.currentTarget = currentNode;\n          responderEvent.dispatchConfig.registrationName = 'onResponderTerminate';\n          onResponderTerminate(responderEvent);\n        } // Grant next responder\n\n\n        if (onResponderGrant != null) {\n          responderEvent.currentTarget = node;\n          responderEvent.dispatchConfig.registrationName = 'onResponderGrant';\n          onResponderGrant(responderEvent);\n        }\n\n        changeCurrentResponder(wantsResponder);\n      } else {\n        // Reject responder request\n        if (onResponderReject != null) {\n          responderEvent.currentTarget = node;\n          responderEvent.dispatchConfig.registrationName = 'onResponderReject';\n          onResponderReject(responderEvent);\n        }\n      }\n    }\n}\n/* ------------ PUBLIC API ------------ */\n\n/**\n * Attach Listeners\n *\n * Use native events as ReactDOM doesn't have a non-plugin API to implement\n * this system.\n */\n\n\nvar documentEventsCapturePhase = ['blur', 'scroll'];\nvar documentEventsBubblePhase = [// mouse\n'mousedown', 'mousemove', 'mouseup', 'dragstart', // touch\n'touchstart', 'touchmove', 'touchend', 'touchcancel', // other\n'contextmenu', 'select', 'selectionchange'];\nexport function attachListeners() {\n  if (canUseDOM && window.__reactResponderSystemActive == null) {\n    window.addEventListener('blur', eventListener);\n    documentEventsBubblePhase.forEach(function (eventType) {\n      document.addEventListener(eventType, eventListener);\n    });\n    documentEventsCapturePhase.forEach(function (eventType) {\n      document.addEventListener(eventType, eventListener, true);\n    });\n    window.__reactResponderSystemActive = true;\n  }\n}\n/**\n * Register a node with the ResponderSystem.\n */\n\nexport function addNode(id, node, config) {\n  setResponderId(node, id);\n  responderListenersMap.set(id, config);\n}\n/**\n * Unregister a node with the ResponderSystem.\n */\n\nexport function removeNode(id) {\n  if (currentResponder.id === id) {\n    terminateResponder();\n  }\n\n  if (responderListenersMap.has(id)) {\n    responderListenersMap.delete(id);\n  }\n}\n/**\n * Allow the current responder to be terminated from within components to support\n * more complex requirements, such as use with other React libraries for working\n * with scroll views, input views, etc.\n */\n\nexport function terminateResponder() {\n  var _currentResponder3 = currentResponder,\n      id = _currentResponder3.id,\n      node = _currentResponder3.node;\n\n  if (id != null && node != null) {\n    var _getResponderConfig4 = getResponderConfig(id),\n        onResponderTerminate = _getResponderConfig4.onResponderTerminate;\n\n    if (onResponderTerminate != null) {\n      var event = createResponderEvent({});\n      event.currentTarget = node;\n      onResponderTerminate(event);\n    }\n\n    changeCurrentResponder(emptyResponder);\n  }\n\n  isEmulatingMouseEvents = false;\n  trackedTouchCount = 0;\n}\n/**\n * Allow unit tests to inspect the current responder in the system.\n * FOR TESTING ONLY.\n */\n\nexport function getResponderNode() {\n  return currentResponder.node;\n}"]},"metadata":{},"sourceType":"module"}