You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1 line
38 KiB

{"ast":null,"code":"import Dimensions from \"../../exports/Dimensions\";\nimport findNodeHandle from \"../../exports/findNodeHandle\";\nimport invariant from 'fbjs/lib/invariant';\nimport Platform from \"../../exports/Platform\";\nimport TextInputState from \"../TextInputState\";\nimport UIManager from \"../../exports/UIManager\";\nimport warning from 'fbjs/lib/warning';\nvar emptyObject = {};\nvar IS_ANIMATING_TOUCH_START_THRESHOLD_MS = 16;\nvar ScrollResponderMixin = {\n scrollResponderMixinGetInitialState: function scrollResponderMixinGetInitialState() {\n return {\n isTouching: false,\n lastMomentumScrollBeginTime: 0,\n lastMomentumScrollEndTime: 0,\n observedScrollSinceBecomingResponder: false,\n becameResponderWhileAnimating: false\n };\n },\n scrollResponderHandleScrollShouldSetResponder: function scrollResponderHandleScrollShouldSetResponder() {\n return this.state.isTouching;\n },\n scrollResponderHandleStartShouldSetResponder: function scrollResponderHandleStartShouldSetResponder() {\n return false;\n },\n scrollResponderHandleStartShouldSetResponderCapture: function scrollResponderHandleStartShouldSetResponderCapture(e) {\n return this.scrollResponderIsAnimating();\n },\n scrollResponderHandleResponderReject: function scrollResponderHandleResponderReject() {\n warning(false, \"ScrollView doesn't take rejection well - scrolls anyway\");\n },\n scrollResponderHandleTerminationRequest: function scrollResponderHandleTerminationRequest() {\n return !this.state.observedScrollSinceBecomingResponder;\n },\n scrollResponderHandleTouchEnd: function scrollResponderHandleTouchEnd(e) {\n var nativeEvent = e.nativeEvent;\n this.state.isTouching = nativeEvent.touches.length !== 0;\n this.props.onTouchEnd && this.props.onTouchEnd(e);\n },\n scrollResponderHandleResponderRelease: function scrollResponderHandleResponderRelease(e) {\n this.props.onResponderRelease && this.props.onResponderRelease(e);\n var currentlyFocusedTextInput = TextInputState.currentlyFocusedField();\n if (!this.props.keyboardShouldPersistTaps && currentlyFocusedTextInput != null && e.target !== currentlyFocusedTextInput && !this.state.observedScrollSinceBecomingResponder && !this.state.becameResponderWhileAnimating) {\n this.props.onScrollResponderKeyboardDismissed && this.props.onScrollResponderKeyboardDismissed(e);\n TextInputState.blurTextInput(currentlyFocusedTextInput);\n }\n },\n scrollResponderHandleScroll: function scrollResponderHandleScroll(e) {\n this.state.observedScrollSinceBecomingResponder = true;\n this.props.onScroll && this.props.onScroll(e);\n },\n scrollResponderHandleResponderGrant: function scrollResponderHandleResponderGrant(e) {\n this.state.observedScrollSinceBecomingResponder = false;\n this.props.onResponderGrant && this.props.onResponderGrant(e);\n this.state.becameResponderWhileAnimating = this.scrollResponderIsAnimating();\n },\n scrollResponderHandleScrollBeginDrag: function scrollResponderHandleScrollBeginDrag(e) {\n this.props.onScrollBeginDrag && this.props.onScrollBeginDrag(e);\n },\n scrollResponderHandleScrollEndDrag: function scrollResponderHandleScrollEndDrag(e) {\n this.props.onScrollEndDrag && this.props.onScrollEndDrag(e);\n },\n scrollResponderHandleMomentumScrollBegin: function scrollResponderHandleMomentumScrollBegin(e) {\n this.state.lastMomentumScrollBeginTime = Date.now();\n this.props.onMomentumScrollBegin && this.props.onMomentumScrollBegin(e);\n },\n scrollResponderHandleMomentumScrollEnd: function scrollResponderHandleMomentumScrollEnd(e) {\n this.state.lastMomentumScrollEndTime = Date.now();\n this.props.onMomentumScrollEnd && this.props.onMomentumScrollEnd(e);\n },\n scrollResponderHandleTouchStart: function scrollResponderHandleTouchStart(e) {\n this.state.isTouching = true;\n this.props.onTouchStart && this.props.onTouchStart(e);\n },\n scrollResponderHandleTouchMove: function scrollResponderHandleTouchMove(e) {\n this.props.onTouchMove && this.props.onTouchMove(e);\n },\n scrollResponderIsAnimating: function scrollResponderIsAnimating() {\n var now = Date.now();\n var timeSinceLastMomentumScrollEnd = now - this.state.lastMomentumScrollEndTime;\n var isAnimating = timeSinceLastMomentumScrollEnd < IS_ANIMATING_TOUCH_START_THRESHOLD_MS || this.state.lastMomentumScrollEndTime < this.state.lastMomentumScrollBeginTime;\n return isAnimating;\n },\n scrollResponderGetScrollableNode: function scrollResponderGetScrollableNode() {\n return this.getScrollableNode ? this.getScrollableNode() : findNodeHandle(this);\n },\n scrollResponderScrollTo: function scrollResponderScrollTo(x, y, animated) {\n if (typeof x === 'number') {\n console.warn('`scrollResponderScrollTo(x, y, animated)` is deprecated. Use `scrollResponderScrollTo({x: 5, y: 5, animated: true})` instead.');\n } else {\n var _ref = x || emptyObject;\n x = _ref.x;\n y = _ref.y;\n animated = _ref.animated;\n }\n var node = this.scrollResponderGetScrollableNode();\n var left = x || 0;\n var top = y || 0;\n if (typeof node.scroll === 'function') {\n node.scroll({\n top: top,\n left: left,\n behavior: !animated ? 'auto' : 'smooth'\n });\n } else {\n node.scrollLeft = left;\n node.scrollTop = top;\n }\n },\n scrollResponderZoomTo: function scrollResponderZoomTo(rect, animated) {\n if (Platform.OS !== 'ios') {\n invariant('zoomToRect is not implemented');\n }\n },\n scrollResponderFlashScrollIndicators: function scrollResponderFlashScrollIndicators() {},\n scrollResponderScrollNativeHandleToKeyboard: function scrollResponderScrollNativeHandleToKeyboard(nodeHandle, additionalOffset, preventNegativeScrollOffset) {\n this.additionalScrollOffset = additionalOffset || 0;\n this.preventNegativeScrollOffset = !!preventNegativeScrollOffset;\n UIManager.measureLayout(nodeHandle, findNodeHandle(this.getInnerViewNode()), this.scrollResponderTextInputFocusError, this.scrollResponderInputMeasureAndScrollToKeyboard);\n },\n scrollResponderInputMeasureAndScrollToKeyboard: function scrollResponderInputMeasureAndScrollToKeyboard(left, top, width, height) {\n var keyboardScreenY = Dimensions.get('window').height;\n if (this.keyboardWillOpenTo) {\n keyboardScreenY = this.keyboardWillOpenTo.endCoordinates.screenY;\n }\n var scrollOffsetY = top - keyboardScreenY + height + this.additionalScrollOffset;\n if (this.preventNegativeScrollOffset) {\n scrollOffsetY = Math.max(0, scrollOffsetY);\n }\n this.scrollResponderScrollTo({\n x: 0,\n y: scrollOffsetY,\n animated: true\n });\n this.additionalOffset = 0;\n this.preventNegativeScrollOffset = false;\n },\n scrollResponderTextInputFocusError: function scrollResponderTextInputFocusError(e) {\n console.error('Error measuring text field: ', e);\n },\n UNSAFE_componentWillMount: function UNSAFE_componentWillMount() {\n this.keyboardWillOpenTo = null;\n this.additionalScrollOffset = 0;\n },\n scrollResponderKeyboardWillShow: function scrollResponderKeyboardWillShow(e) {\n this.keyboardWillOpenTo = e;\n this.props.onKeyboardWillShow && this.props.onKeyboardWillShow(e);\n },\n scrollResponderKeyboardWillHide: function scrollResponderKeyboardWillHide(e) {\n this.keyboardWillOpenTo = null;\n this.props.onKeyboardWillHide && this.props.onKeyboardWillHide(e);\n },\n scrollResponderKeyboardDidShow: function scrollResponderKeyboardDidShow(e) {\n if (e) {\n this.keyboardWillOpenTo = e;\n }\n this.props.onKeyboardDidShow && this.props.onKeyboardDidShow(e);\n },\n scrollResponderKeyboardDidHide: function scrollResponderKeyboardDidHide(e) {\n this.keyboardWillOpenTo = null;\n this.props.onKeyboardDidHide && this.props.onKeyboardDidHide(e);\n }\n};\nvar ScrollResponder = {\n Mixin: ScrollResponderMixin\n};\nexport default ScrollResponder;","map":{"version":3,"names":["Dimensions","findNodeHandle","invariant","Platform","TextInputState","UIManager","warning","emptyObject","IS_ANIMATING_TOUCH_START_THRESHOLD_MS","ScrollResponderMixin","scrollResponderMixinGetInitialState","isTouching","lastMomentumScrollBeginTime","lastMomentumScrollEndTime","observedScrollSinceBecomingResponder","becameResponderWhileAnimating","scrollResponderHandleScrollShouldSetResponder","state","scrollResponderHandleStartShouldSetResponder","scrollResponderHandleStartShouldSetResponderCapture","e","scrollResponderIsAnimating","scrollResponderHandleResponderReject","scrollResponderHandleTerminationRequest","scrollResponderHandleTouchEnd","nativeEvent","touches","length","props","onTouchEnd","scrollResponderHandleResponderRelease","onResponderRelease","currentlyFocusedTextInput","currentlyFocusedField","keyboardShouldPersistTaps","target","onScrollResponderKeyboardDismissed","blurTextInput","scrollResponderHandleScroll","onScroll","scrollResponderHandleResponderGrant","onResponderGrant","scrollResponderHandleScrollBeginDrag","onScrollBeginDrag","scrollResponderHandleScrollEndDrag","onScrollEndDrag","scrollResponderHandleMomentumScrollBegin","Date","now","onMomentumScrollBegin","scrollResponderHandleMomentumScrollEnd","onMomentumScrollEnd","scrollResponderHandleTouchStart","onTouchStart","scrollResponderHandleTouchMove","onTouchMove","timeSinceLastMomentumScrollEnd","isAnimating","scrollResponderGetScrollableNode","getScrollableNode","scrollResponderScrollTo","x","y","animated","console","warn","_ref","node","left","top","scroll","behavior","scrollLeft","scrollTop","scrollResponderZoomTo","rect","OS","scrollResponderFlashScrollIndicators","scrollResponderScrollNativeHandleToKeyboard","nodeHandle","additionalOffset","preventNegativeScrollOffset","additionalScrollOffset","measureLayout","getInnerViewNode","scrollResponderTextInputFocusError","scrollResponderInputMeasureAndScrollToKeyboard","width","height","keyboardScreenY","get","keyboardWillOpenTo","endCoordinates","screenY","scrollOffsetY","Math","max","error","UNSAFE_componentWillMount","scrollResponderKeyboardWillShow","onKeyboardWillShow","scrollResponderKeyboardWillHide","onKeyboardWillHide","scrollResponderKeyboardDidShow","onKeyboardDidShow","scrollResponderKeyboardDidHide","onKeyboardDidHide","ScrollResponder","Mixin"],"sources":["/Users/thomaschazot/Documents/But2A/LaSuperMeteo/iut-expo-starter/node_modules/react-native-web/dist/modules/ScrollResponder/index.js"],"sourcesContent":["/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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 */\nimport Dimensions from '../../exports/Dimensions';\nimport findNodeHandle from '../../exports/findNodeHandle';\nimport invariant from 'fbjs/lib/invariant';\nimport Platform from '../../exports/Platform';\nimport TextInputState from '../TextInputState';\nimport UIManager from '../../exports/UIManager';\nimport warning from 'fbjs/lib/warning';\n/**\n * Mixin that can be integrated in order to handle scrolling that plays well\n * with `ResponderEventPlugin`. Integrate with your platform specific scroll\n * views, or even your custom built (every-frame animating) scroll views so that\n * all of these systems play well with the `ResponderEventPlugin`.\n *\n * iOS scroll event timing nuances:\n * ===============================\n *\n *\n * Scrolling without bouncing, if you touch down:\n * -------------------------------\n *\n * 1. `onMomentumScrollBegin` (when animation begins after letting up)\n * ... physical touch starts ...\n * 2. `onTouchStartCapture` (when you press down to stop the scroll)\n * 3. `onTouchStart` (same, but bubble phase)\n * 4. `onResponderRelease` (when lifting up - you could pause forever before * lifting)\n * 5. `onMomentumScrollEnd`\n *\n *\n * Scrolling with bouncing, if you touch down:\n * -------------------------------\n *\n * 1. `onMomentumScrollBegin` (when animation begins after letting up)\n * ... bounce begins ...\n * ... some time elapses ...\n * ... physical touch during bounce ...\n * 2. `onMomentumScrollEnd` (Makes no sense why this occurs first during bounce)\n * 3. `onTouchStartCapture` (immediately after `onMomentumScrollEnd`)\n * 4. `onTouchStart` (same, but bubble phase)\n * 5. `onTouchEnd` (You could hold the touch start for a long time)\n * 6. `onMomentumScrollBegin` (When releasing the view starts bouncing back)\n *\n * So when we receive an `onTouchStart`, how can we tell if we are touching\n * *during* an animation (which then causes the animation to stop)? The only way\n * to tell is if the `touchStart` occurred immediately after the\n * `onMomentumScrollEnd`.\n *\n * This is abstracted out for you, so you can just call this.scrollResponderIsAnimating() if\n * necessary\n *\n * `ScrollResponder` also includes logic for blurring a currently focused input\n * if one is focused while scrolling. The `ScrollResponder` is a natural place\n * to put this logic since it can support not dismissing the keyboard while\n * scrolling, unless a recognized \"tap\"-like gesture has occurred.\n *\n * The public lifecycle API includes events for keyboard interaction, responder\n * interaction, and scrolling (among others). The keyboard callbacks\n * `onKeyboardWill/Did/*` are *global* events, but are invoked on scroll\n * responder's props so that you can guarantee that the scroll responder's\n * internal state has been updated accordingly (and deterministically) by\n * the time the props callbacks are invoke. Otherwise, you would always wonder\n * if the scroll responder is currently in a state where it recognizes new\n * keyboard positions etc. If coordinating scrolling with keyboard movement,\n * *always* use these hooks instead of listening to your own global keyboard\n * events.\n *\n * Public keyboard lifecycle API: (props callbacks)\n *\n * Standard Keyboard Appearance Sequence:\n *\n * this.props.onKeyboardWillShow\n * this.props.onKeyboardDidShow\n *\n * `onScrollResponderKeyboardDismissed` will be invoked if an appropriate\n * tap inside the scroll responder's scrollable region was responsible\n * for the dismissal of the keyboard. There are other reasons why the\n * keyboard could be dismissed.\n *\n * this.props.onScrollResponderKeyboardDismissed\n *\n * Standard Keyboard Hide Sequence:\n *\n * this.props.onKeyboardWillHide\n * this.props.onKeyboardDidHide\n */\n\nvar emptyObject = {};\nvar IS_ANIMATING_TOUCH_START_THRESHOLD_MS = 16;\nvar ScrollResponderMixin = {\n // mixins: [Subscribable.Mixin],\n scrollResponderMixinGetInitialState: function scrollResponderMixinGetInitialState() {\n return {\n isTouching: false,\n lastMomentumScrollBeginTime: 0,\n lastMomentumScrollEndTime: 0,\n // Reset to false every time becomes responder. This is used to:\n // - Determine if the scroll view has been scrolled and therefore should\n // refuse to give up its responder lock.\n // - Determine if releasing should dismiss the keyboard when we are in\n // tap-to-dismiss mode (!this.props.keyboardShouldPersistTaps).\n observedScrollSinceBecomingResponder: false,\n becameResponderWhileAnimating: false\n };\n },\n\n /**\n * Invoke this from an `onScroll` event.\n */\n scrollResponderHandleScrollShouldSetResponder: function scrollResponderHandleScrollShouldSetResponder() {\n return this.state.isTouching;\n },\n\n /**\n * Merely touch starting is not sufficient for a scroll view to become the\n * responder. Being the \"responder\" means that the very next touch move/end\n * event will result in an action/movement.\n *\n * Invoke this from an `onStartShouldSetResponder` event.\n *\n * `onStartShouldSetResponder` is used when the next move/end will trigger\n * some UI movement/action, but when you want to yield priority to views\n * nested inside of the view.\n *\n * There may be some cases where scroll views actually should return `true`\n * from `onStartShouldSetResponder`: Any time we are detecting a standard tap\n * that gives priority to nested views.\n *\n * - If a single tap on the scroll view triggers an action such as\n * recentering a map style view yet wants to give priority to interaction\n * views inside (such as dropped pins or labels), then we would return true\n * from this method when there is a single touch.\n *\n * - Similar to the previous case, if a two finger \"tap\" should trigger a\n * zoom, we would check the `touches` count, and if `>= 2`, we would return\n * true.\n *\n */\n scrollResponderHandleStartShouldSetResponder: function scrollResponderHandleStartShouldSetResponder() {\n return false;\n },\n\n /**\n * There are times when the scroll view wants to become the responder\n * (meaning respond to the next immediate `touchStart/touchEnd`), in a way\n * that *doesn't* give priority to nested views (hence the capture phase):\n *\n * - Currently animating.\n * - Tapping anywhere that is not the focused input, while the keyboard is\n * up (which should dismiss the keyboard).\n *\n * Invoke this from an `onStartShouldSetResponderCapture` event.\n */\n scrollResponderHandleStartShouldSetResponderCapture: function scrollResponderHandleStartShouldSetResponderCapture(e) {\n // First see if we want to eat taps while the keyboard is up\n // var currentlyFocusedTextInput = TextInputState.currentlyFocusedField();\n // if (!this.props.keyboardShouldPersistTaps &&\n // currentlyFocusedTextInput != null &&\n // e.target !== currentlyFocusedTextInput) {\n // return true;\n // }\n return this.scrollResponderIsAnimating();\n },\n\n /**\n * Invoke this from an `onResponderReject` event.\n *\n * Some other element is not yielding its role as responder. Normally, we'd\n * just disable the `UIScrollView`, but a touch has already began on it, the\n * `UIScrollView` will not accept being disabled after that. The easiest\n * solution for now is to accept the limitation of disallowing this\n * altogether. To improve this, find a way to disable the `UIScrollView` after\n * a touch has already started.\n */\n scrollResponderHandleResponderReject: function scrollResponderHandleResponderReject() {\n warning(false, \"ScrollView doesn't take rejection well - scrolls anyway\");\n },\n\n /**\n * We will allow the scroll view to give up its lock iff it acquired the lock\n * during an animation. This is a very useful default that happens to satisfy\n * many common user experiences.\n *\n * - Stop a scroll on the left edge, then turn that into an outer view's\n * backswipe.\n * - Stop a scroll mid-bounce at the top, continue pulling to have the outer\n * view dismiss.\n * - However, without catching the scroll view mid-bounce (while it is\n * motionless), if you drag far enough for the scroll view to become\n * responder (and therefore drag the scroll view a bit), any backswipe\n * navigation of a swipe gesture higher in the view hierarchy, should be\n * rejected.\n */\n scrollResponderHandleTerminationRequest: function scrollResponderHandleTerminationRequest() {\n return !this.state.observedScrollSinceBecomingResponder;\n },\n\n /**\n * Invoke this from an `onTouchEnd` event.\n *\n * @param {SyntheticEvent} e Event.\n */\n scrollResponderHandleTouchEnd: function scrollResponderHandleTouchEnd(e) {\n var nativeEvent = e.nativeEvent;\n this.state.isTouching = nativeEvent.touches.length !== 0;\n this.props.onTouchEnd && this.props.onTouchEnd(e);\n },\n\n /**\n * Invoke this from an `onResponderRelease` event.\n */\n scrollResponderHandleResponderRelease: function scrollResponderHandleResponderRelease(e) {\n this.props.onResponderRelease && this.props.onResponderRelease(e); // By default scroll views will unfocus a textField\n // if another touch occurs outside of it\n\n var currentlyFocusedTextInput = TextInputState.currentlyFocusedField();\n\n if (!this.props.keyboardShouldPersistTaps && currentlyFocusedTextInput != null && e.target !== currentlyFocusedTextInput && !this.state.observedScrollSinceBecomingResponder && !this.state.becameResponderWhileAnimating) {\n this.props.onScrollResponderKeyboardDismissed && this.props.onScrollResponderKeyboardDismissed(e);\n TextInputState.blurTextInput(currentlyFocusedTextInput);\n }\n },\n scrollResponderHandleScroll: function scrollResponderHandleScroll(e) {\n this.state.observedScrollSinceBecomingResponder = true;\n this.props.onScroll && this.props.onScroll(e);\n },\n\n /**\n * Invoke this from an `onResponderGrant` event.\n */\n scrollResponderHandleResponderGrant: function scrollResponderHandleResponderGrant(e) {\n this.state.observedScrollSinceBecomingResponder = false;\n this.props.onResponderGrant && this.props.onResponderGrant(e);\n this.state.becameResponderWhileAnimating = this.scrollResponderIsAnimating();\n },\n\n /**\n * Unfortunately, `onScrollBeginDrag` also fires when *stopping* the scroll\n * animation, and there's not an easy way to distinguish a drag vs. stopping\n * momentum.\n *\n * Invoke this from an `onScrollBeginDrag` event.\n */\n scrollResponderHandleScrollBeginDrag: function scrollResponderHandleScrollBeginDrag(e) {\n this.props.onScrollBeginDrag && this.props.onScrollBeginDrag(e);\n },\n\n /**\n * Invoke this from an `onScrollEndDrag` event.\n */\n scrollResponderHandleScrollEndDrag: function scrollResponderHandleScrollEndDrag(e) {\n this.props.onScrollEndDrag && this.props.onScrollEndDrag(e);\n },\n\n /**\n * Invoke this from an `onMomentumScrollBegin` event.\n */\n scrollResponderHandleMomentumScrollBegin: function scrollResponderHandleMomentumScrollBegin(e) {\n this.state.lastMomentumScrollBeginTime = Date.now();\n this.props.onMomentumScrollBegin && this.props.onMomentumScrollBegin(e);\n },\n\n /**\n * Invoke this from an `onMomentumScrollEnd` event.\n */\n scrollResponderHandleMomentumScrollEnd: function scrollResponderHandleMomentumScrollEnd(e) {\n this.state.lastMomentumScrollEndTime = Date.now();\n this.props.onMomentumScrollEnd && this.props.onMomentumScrollEnd(e);\n },\n\n /**\n * Invoke this from an `onTouchStart` event.\n *\n * Since we know that the `SimpleEventPlugin` occurs later in the plugin\n * order, after `ResponderEventPlugin`, we can detect that we were *not*\n * permitted to be the responder (presumably because a contained view became\n * responder). The `onResponderReject` won't fire in that case - it only\n * fires when a *current* responder rejects our request.\n *\n * @param {SyntheticEvent} e Touch Start event.\n */\n scrollResponderHandleTouchStart: function scrollResponderHandleTouchStart(e) {\n this.state.isTouching = true;\n this.props.onTouchStart && this.props.onTouchStart(e);\n },\n\n /**\n * Invoke this from an `onTouchMove` event.\n *\n * Since we know that the `SimpleEventPlugin` occurs later in the plugin\n * order, after `ResponderEventPlugin`, we can detect that we were *not*\n * permitted to be the responder (presumably because a contained view became\n * responder). The `onResponderReject` won't fire in that case - it only\n * fires when a *current* responder rejects our request.\n *\n * @param {SyntheticEvent} e Touch Start event.\n */\n scrollResponderHandleTouchMove: function scrollResponderHandleTouchMove(e) {\n this.props.onTouchMove && this.props.onTouchMove(e);\n },\n\n /**\n * A helper function for this class that lets us quickly determine if the\n * view is currently animating. This is particularly useful to know when\n * a touch has just started or ended.\n */\n scrollResponderIsAnimating: function scrollResponderIsAnimating() {\n var now = Date.now();\n var timeSinceLastMomentumScrollEnd = now - this.state.lastMomentumScrollEndTime;\n var isAnimating = timeSinceLastMomentumScrollEnd < IS_ANIMATING_TOUCH_START_THRESHOLD_MS || this.state.lastMomentumScrollEndTime < this.state.lastMomentumScrollBeginTime;\n return isAnimating;\n },\n\n /**\n * Returns the node that represents native view that can be scrolled.\n * Components can pass what node to use by defining a `getScrollableNode`\n * function otherwise `this` is used.\n */\n scrollResponderGetScrollableNode: function scrollResponderGetScrollableNode() {\n return this.getScrollableNode ? this.getScrollableNode() : findNodeHandle(this);\n },\n\n /**\n * A helper function to scroll to a specific point in the scrollview.\n * This is currently used to help focus on child textviews, but can also\n * be used to quickly scroll to any element we want to focus. Syntax:\n *\n * scrollResponderScrollTo(options: {x: number = 0; y: number = 0; animated: boolean = true})\n *\n * Note: The weird argument signature is due to the fact that, for historical reasons,\n * the function also accepts separate arguments as as alternative to the options object.\n * This is deprecated due to ambiguity (y before x), and SHOULD NOT BE USED.\n */\n scrollResponderScrollTo: function scrollResponderScrollTo(x, y, animated) {\n if (typeof x === 'number') {\n console.warn('`scrollResponderScrollTo(x, y, animated)` is deprecated. Use `scrollResponderScrollTo({x: 5, y: 5, animated: true})` instead.');\n } else {\n var _ref = x || emptyObject;\n\n x = _ref.x;\n y = _ref.y;\n animated = _ref.animated;\n }\n\n var node = this.scrollResponderGetScrollableNode();\n var left = x || 0;\n var top = y || 0;\n\n if (typeof node.scroll === 'function') {\n node.scroll({\n top,\n left,\n behavior: !animated ? 'auto' : 'smooth'\n });\n } else {\n node.scrollLeft = left;\n node.scrollTop = top;\n }\n },\n\n /**\n * A helper function to zoom to a specific rect in the scrollview. The argument has the shape\n * {x: number; y: number; width: number; height: number; animated: boolean = true}\n *\n * @platform ios\n */\n scrollResponderZoomTo: function scrollResponderZoomTo(rect, animated) {\n if (Platform.OS !== 'ios') {\n invariant('zoomToRect is not implemented');\n }\n },\n\n /**\n * Displays the scroll indicators momentarily.\n */\n scrollResponderFlashScrollIndicators: function scrollResponderFlashScrollIndicators() {},\n\n /**\n * This method should be used as the callback to onFocus in a TextInputs'\n * parent view. Note that any module using this mixin needs to return\n * the parent view's ref in getScrollViewRef() in order to use this method.\n * @param {any} nodeHandle The TextInput node handle\n * @param {number} additionalOffset The scroll view's top \"contentInset\".\n * Default is 0.\n * @param {bool} preventNegativeScrolling Whether to allow pulling the content\n * down to make it meet the keyboard's top. Default is false.\n */\n scrollResponderScrollNativeHandleToKeyboard: function scrollResponderScrollNativeHandleToKeyboard(nodeHandle, additionalOffset, preventNegativeScrollOffset) {\n this.additionalScrollOffset = additionalOffset || 0;\n this.preventNegativeScrollOffset = !!preventNegativeScrollOffset;\n UIManager.measureLayout(nodeHandle, findNodeHandle(this.getInnerViewNode()), this.scrollResponderTextInputFocusError, this.scrollResponderInputMeasureAndScrollToKeyboard);\n },\n\n /**\n * The calculations performed here assume the scroll view takes up the entire\n * screen - even if has some content inset. We then measure the offsets of the\n * keyboard, and compensate both for the scroll view's \"contentInset\".\n *\n * @param {number} left Position of input w.r.t. table view.\n * @param {number} top Position of input w.r.t. table view.\n * @param {number} width Width of the text input.\n * @param {number} height Height of the text input.\n */\n scrollResponderInputMeasureAndScrollToKeyboard: function scrollResponderInputMeasureAndScrollToKeyboard(left, top, width, height) {\n var keyboardScreenY = Dimensions.get('window').height;\n\n if (this.keyboardWillOpenTo) {\n keyboardScreenY = this.keyboardWillOpenTo.endCoordinates.screenY;\n }\n\n var scrollOffsetY = top - keyboardScreenY + height + this.additionalScrollOffset; // By default, this can scroll with negative offset, pulling the content\n // down so that the target component's bottom meets the keyboard's top.\n // If requested otherwise, cap the offset at 0 minimum to avoid content\n // shifting down.\n\n if (this.preventNegativeScrollOffset) {\n scrollOffsetY = Math.max(0, scrollOffsetY);\n }\n\n this.scrollResponderScrollTo({\n x: 0,\n y: scrollOffsetY,\n animated: true\n });\n this.additionalOffset = 0;\n this.preventNegativeScrollOffset = false;\n },\n scrollResponderTextInputFocusError: function scrollResponderTextInputFocusError(e) {\n console.error('Error measuring text field: ', e);\n },\n\n /**\n * `componentWillMount` is the closest thing to a standard \"constructor\" for\n * React components.\n *\n * The `keyboardWillShow` is called before input focus.\n */\n UNSAFE_componentWillMount: function UNSAFE_componentWillMount() {\n this.keyboardWillOpenTo = null;\n this.additionalScrollOffset = 0; // this.addListenerOn(RCTDeviceEventEmitter, 'keyboardWillShow', this.scrollResponderKeyboardWillShow);\n // this.addListenerOn(RCTDeviceEventEmitter, 'keyboardWillHide', this.scrollResponderKeyboardWillHide);\n // this.addListenerOn(RCTDeviceEventEmitter, 'keyboardDidShow', this.scrollResponderKeyboardDidShow);\n // this.addListenerOn(RCTDeviceEventEmitter, 'keyboardDidHide', this.scrollResponderKeyboardDidHide);\n },\n\n /**\n * Warning, this may be called several times for a single keyboard opening.\n * It's best to store the information in this method and then take any action\n * at a later point (either in `keyboardDidShow` or other).\n *\n * Here's the order that events occur in:\n * - focus\n * - willShow {startCoordinates, endCoordinates} several times\n * - didShow several times\n * - blur\n * - willHide {startCoordinates, endCoordinates} several times\n * - didHide several times\n *\n * The `ScrollResponder` providesModule callbacks for each of these events.\n * Even though any user could have easily listened to keyboard events\n * themselves, using these `props` callbacks ensures that ordering of events\n * is consistent - and not dependent on the order that the keyboard events are\n * subscribed to. This matters when telling the scroll view to scroll to where\n * the keyboard is headed - the scroll responder better have been notified of\n * the keyboard destination before being instructed to scroll to where the\n * keyboard will be. Stick to the `ScrollResponder` callbacks, and everything\n * will work.\n *\n * WARNING: These callbacks will fire even if a keyboard is displayed in a\n * different navigation pane. Filter out the events to determine if they are\n * relevant to you. (For example, only if you receive these callbacks after\n * you had explicitly focused a node etc).\n */\n scrollResponderKeyboardWillShow: function scrollResponderKeyboardWillShow(e) {\n this.keyboardWillOpenTo = e;\n this.props.onKeyboardWillShow && this.props.onKeyboardWillShow(e);\n },\n scrollResponderKeyboardWillHide: function scrollResponderKeyboardWillHide(e) {\n this.keyboardWillOpenTo = null;\n this.props.onKeyboardWillHide && this.props.onKeyboardWillHide(e);\n },\n scrollResponderKeyboardDidShow: function scrollResponderKeyboardDidShow(e) {\n // TODO(7693961): The event for DidShow is not available on iOS yet.\n // Use the one from WillShow and do not assign.\n if (e) {\n this.keyboardWillOpenTo = e;\n }\n\n this.props.onKeyboardDidShow && this.props.onKeyboardDidShow(e);\n },\n scrollResponderKeyboardDidHide: function scrollResponderKeyboardDidHide(e) {\n this.keyboardWillOpenTo = null;\n this.props.onKeyboardDidHide && this.props.onKeyboardDidHide(e);\n }\n};\nvar ScrollResponder = {\n Mixin: ScrollResponderMixin\n};\nexport default ScrollResponder;"],"mappings":"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"},"metadata":{},"sourceType":"module"}