{"ast":null,"code":"import _extends from \"@babel/runtime/helpers/extends\";\nimport _regeneratorRuntime from \"@babel/runtime/regenerator\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nvar _jsxFileName = \"/Users/rohitsingh/Documents/projects/new-nativebase-setup/NativeBase/example/node_modules/react-native-keyboard-aware-scroll-view/lib/KeyboardAwareHOC.js\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Keyboard from \"react-native-web/dist/exports/Keyboard\";\nimport Platform from \"react-native-web/dist/exports/Platform\";\nimport UIManager from \"react-native-web/dist/exports/UIManager\";\nimport TextInput from \"react-native-web/dist/exports/TextInput\";\nimport findNodeHandle from \"react-native-web/dist/exports/findNodeHandle\";\nimport Animated from \"react-native-web/dist/exports/Animated\";\nimport { isIphoneX } from 'react-native-iphone-x-helper';\n\nvar _KAM_DEFAULT_TAB_BAR_HEIGHT = isIphoneX() ? 83 : 49;\n\nvar _KAM_KEYBOARD_OPENING_TIME = 250;\nvar _KAM_EXTRA_HEIGHT = 75;\nvar supportedKeyboardEvents = ['keyboardWillShow', 'keyboardDidShow', 'keyboardWillHide', 'keyboardDidHide', 'keyboardWillChangeFrame', 'keyboardDidChangeFrame'];\n\nvar keyboardEventToCallbackName = function keyboardEventToCallbackName(eventName) {\n  return 'on' + eventName[0].toUpperCase() + eventName.substring(1);\n};\n\nvar keyboardEventPropTypes = supportedKeyboardEvents.reduce(function (acc, eventName) {\n  return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, keyboardEventToCallbackName(eventName), PropTypes.func));\n}, {});\nvar keyboardAwareHOCTypeEvents = supportedKeyboardEvents.reduce(function (acc, eventName) {\n  return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, keyboardEventToCallbackName(eventName), Function));\n}, {});\n\nfunction getDisplayName(WrappedComponent) {\n  return WrappedComponent && (WrappedComponent.displayName || WrappedComponent.name) || 'Component';\n}\n\nvar ScrollIntoViewDefaultOptions = {\n  enableOnAndroid: false,\n  contentContainerStyle: undefined,\n  enableAutomaticScroll: true,\n  extraHeight: _KAM_EXTRA_HEIGHT,\n  extraScrollHeight: 0,\n  enableResetScrollToCoords: true,\n  keyboardOpeningTime: _KAM_KEYBOARD_OPENING_TIME,\n  viewIsInsideTabBar: false,\n  refPropName: 'ref',\n  extractNativeRef: function extractNativeRef(ref) {\n    var shouldCallGetNode = !Platform.constants || Platform.constants.reactNativeVersion.major === 0 && Platform.constants.reactNativeVersion.minor < 62;\n\n    if (ref.getNode && shouldCallGetNode) {\n      return ref.getNode();\n    } else {\n      return ref;\n    }\n  }\n};\n\nfunction KeyboardAwareHOC(ScrollableComponent) {\n  var _class, _temp;\n\n  var userOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  var hocOptions = _objectSpread(_objectSpread({}, ScrollIntoViewDefaultOptions), userOptions);\n\n  return _temp = _class = function (_React$Component) {\n    _inherits(_class, _React$Component);\n\n    var _super = _createSuper(_class);\n\n    function _class(props) {\n      var _this;\n\n      _classCallCheck(this, _class);\n\n      _this = _super.call(this, props);\n\n      _this.getScrollResponder = function () {\n        return _this._rnkasv_keyboardView && _this._rnkasv_keyboardView.getScrollResponder && _this._rnkasv_keyboardView.getScrollResponder();\n      };\n\n      _this.scrollToPosition = function (x, y) {\n        var animated = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n        var responder = _this.getScrollResponder();\n\n        responder && responder.scrollResponderScrollTo({\n          x: x,\n          y: y,\n          animated: animated\n        });\n      };\n\n      _this.scrollToEnd = function () {\n        var animated = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n        var responder = _this.getScrollResponder();\n\n        responder && responder.scrollResponderScrollToEnd({\n          animated: animated\n        });\n      };\n\n      _this.scrollForExtraHeightOnAndroid = function (extraHeight) {\n        _this.scrollToPosition(0, _this.position.y + extraHeight, true);\n      };\n\n      _this.scrollToFocusedInput = function (reactNode, extraHeight, keyboardOpeningTime) {\n        if (extraHeight === undefined) {\n          extraHeight = _this.props.extraHeight || 0;\n        }\n\n        if (keyboardOpeningTime === undefined) {\n          keyboardOpeningTime = _this.props.keyboardOpeningTime || 0;\n        }\n\n        setTimeout(function () {\n          if (!_this.mountedComponent) {\n            return;\n          }\n\n          var responder = _this.getScrollResponder();\n\n          responder && responder.scrollResponderScrollNativeHandleToKeyboard(reactNode, extraHeight, true);\n        }, keyboardOpeningTime);\n      };\n\n      _this.scrollIntoView = function _callee(element) {\n        var options,\n            _await$Promise$all,\n            _await$Promise$all2,\n            parentLayout,\n            childLayout,\n            getScrollPosition,\n            _getScrollPosition,\n            x,\n            y,\n            animated,\n            _args = arguments;\n\n        return _regeneratorRuntime.async(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                options = _args.length > 1 && _args[1] !== undefined ? _args[1] : {};\n\n                if (!(!_this._rnkasv_keyboardView || !element)) {\n                  _context.next = 3;\n                  break;\n                }\n\n                return _context.abrupt(\"return\");\n\n              case 3:\n                _context.next = 5;\n                return _regeneratorRuntime.awrap(Promise.all([_this._measureElement(_this._rnkasv_keyboardView), _this._measureElement(element)]));\n\n              case 5:\n                _await$Promise$all = _context.sent;\n                _await$Promise$all2 = _slicedToArray(_await$Promise$all, 2);\n                parentLayout = _await$Promise$all2[0];\n                childLayout = _await$Promise$all2[1];\n                getScrollPosition = options.getScrollPosition || _this._defaultGetScrollPosition;\n                _getScrollPosition = getScrollPosition(parentLayout, childLayout, _this.position), x = _getScrollPosition.x, y = _getScrollPosition.y, animated = _getScrollPosition.animated;\n\n                _this.scrollToPosition(x, y, animated);\n\n              case 12:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        }, null, null, null, Promise);\n      };\n\n      _this._defaultGetScrollPosition = function (parentLayout, childLayout, contentOffset) {\n        return {\n          x: 0,\n          y: Math.max(0, childLayout.y - parentLayout.y + contentOffset.y),\n          animated: true\n        };\n      };\n\n      _this._measureElement = function (element) {\n        var node = findNodeHandle(element);\n        return new Promise(function (resolve) {\n          UIManager.measureInWindow(node, function (x, y, width, height) {\n            resolve({\n              x: x,\n              y: y,\n              width: width,\n              height: height\n            });\n          });\n        });\n      };\n\n      _this._updateKeyboardSpace = function (frames) {\n        if (_this.props.enableAutomaticScroll) {\n          var keyboardSpace = frames.endCoordinates.height + _this.props.extraScrollHeight;\n\n          if (_this.props.viewIsInsideTabBar) {\n            keyboardSpace -= _KAM_DEFAULT_TAB_BAR_HEIGHT;\n          }\n\n          _this.setState({\n            keyboardSpace: keyboardSpace\n          });\n\n          var currentlyFocusedField = TextInput.State.currentlyFocusedInput ? findNodeHandle(TextInput.State.currentlyFocusedInput()) : TextInput.State.currentlyFocusedField();\n\n          var responder = _this.getScrollResponder();\n\n          if (!currentlyFocusedField || !responder) {\n            return;\n          }\n\n          UIManager.viewIsDescendantOf(currentlyFocusedField, responder.getInnerViewNode(), function (isAncestor) {\n            if (isAncestor) {\n              UIManager.measureInWindow(currentlyFocusedField, function (x, y, width, height) {\n                var textInputBottomPosition = y + height;\n                var keyboardPosition = frames.endCoordinates.screenY;\n                var totalExtraHeight = _this.props.extraScrollHeight + _this.props.extraHeight;\n\n                if (Platform.OS === 'ios') {\n                  if (textInputBottomPosition > keyboardPosition - totalExtraHeight) {\n                    _this._scrollToFocusedInputWithNodeHandle(currentlyFocusedField);\n                  }\n                } else {\n                  if (textInputBottomPosition > keyboardPosition) {\n                    keyboardSpace = keyboardSpace - (textInputBottomPosition - keyboardPosition);\n\n                    _this.setState({\n                      keyboardSpace: keyboardSpace\n                    });\n\n                    _this.scrollForExtraHeightOnAndroid(totalExtraHeight);\n                  } else if (textInputBottomPosition > keyboardPosition - totalExtraHeight) {\n                    _this.scrollForExtraHeightOnAndroid(totalExtraHeight - (keyboardPosition - textInputBottomPosition));\n                  }\n                }\n              });\n            }\n          });\n        }\n\n        if (!_this.props.resetScrollToCoords) {\n          if (!_this.defaultResetScrollToCoords) {\n            _this.defaultResetScrollToCoords = _this.position;\n          }\n        }\n      };\n\n      _this._resetKeyboardSpace = function () {\n        var keyboardSpace = _this.props.viewIsInsideTabBar ? _KAM_DEFAULT_TAB_BAR_HEIGHT : 0;\n\n        _this.setState({\n          keyboardSpace: keyboardSpace\n        });\n\n        if (_this.props.enableResetScrollToCoords === false) {\n          _this.defaultResetScrollToCoords = null;\n          return;\n        } else if (_this.props.resetScrollToCoords) {\n          _this.scrollToPosition(_this.props.resetScrollToCoords.x, _this.props.resetScrollToCoords.y, true);\n        } else {\n          if (_this.defaultResetScrollToCoords) {\n            _this.scrollToPosition(_this.defaultResetScrollToCoords.x, _this.defaultResetScrollToCoords.y, true);\n\n            _this.defaultResetScrollToCoords = null;\n          } else {\n            _this.scrollToPosition(0, 0, true);\n          }\n        }\n      };\n\n      _this._scrollToFocusedInputWithNodeHandle = function (nodeID, extraHeight, keyboardOpeningTime) {\n        if (extraHeight === undefined) {\n          extraHeight = _this.props.extraHeight;\n        }\n\n        var reactNode = findNodeHandle(nodeID);\n\n        _this.scrollToFocusedInput(reactNode, extraHeight + _this.props.extraScrollHeight, keyboardOpeningTime !== undefined ? keyboardOpeningTime : _this.props.keyboardOpeningTime || 0);\n      };\n\n      _this._handleOnScroll = function (e) {\n        _this.position = e.nativeEvent.contentOffset;\n      };\n\n      _this._handleRef = function (ref) {\n        _this._rnkasv_keyboardView = ref ? hocOptions.extractNativeRef(ref) : ref;\n\n        if (_this.props.innerRef) {\n          _this.props.innerRef(_this._rnkasv_keyboardView);\n        }\n      };\n\n      _this.update = function () {\n        var currentlyFocusedField = TextInput.State.currentlyFocusedInput ? findNodeHandle(TextInput.State.currentlyFocusedInput()) : TextInput.State.currentlyFocusedField();\n\n        var responder = _this.getScrollResponder();\n\n        if (!currentlyFocusedField || !responder) {\n          return;\n        }\n\n        _this._scrollToFocusedInputWithNodeHandle(currentlyFocusedField);\n      };\n\n      _this.keyboardWillShowEvent = undefined;\n      _this.keyboardWillHideEvent = undefined;\n      _this.callbacks = {};\n      _this.position = {\n        x: 0,\n        y: 0\n      };\n      _this.defaultResetScrollToCoords = null;\n\n      var _keyboardSpace = props.viewIsInsideTabBar ? _KAM_DEFAULT_TAB_BAR_HEIGHT : 0;\n\n      _this.state = {\n        keyboardSpace: _keyboardSpace\n      };\n      return _this;\n    }\n\n    _createClass(_class, [{\n      key: \"componentDidMount\",\n      value: function componentDidMount() {\n        var _this2 = this;\n\n        this.mountedComponent = true;\n\n        if (Platform.OS === 'ios') {\n          this.keyboardWillShowEvent = Keyboard.addListener('keyboardWillShow', this._updateKeyboardSpace);\n          this.keyboardWillHideEvent = Keyboard.addListener('keyboardWillHide', this._resetKeyboardSpace);\n        } else if (Platform.OS === 'android' && this.props.enableOnAndroid) {\n          this.keyboardWillShowEvent = Keyboard.addListener('keyboardDidShow', this._updateKeyboardSpace);\n          this.keyboardWillHideEvent = Keyboard.addListener('keyboardDidHide', this._resetKeyboardSpace);\n        }\n\n        supportedKeyboardEvents.forEach(function (eventName) {\n          var callbackName = keyboardEventToCallbackName(eventName);\n\n          if (_this2.props[callbackName]) {\n            _this2.callbacks[eventName] = Keyboard.addListener(eventName, _this2.props[callbackName]);\n          }\n        });\n      }\n    }, {\n      key: \"componentDidUpdate\",\n      value: function componentDidUpdate(prevProps) {\n        if (this.props.viewIsInsideTabBar !== prevProps.viewIsInsideTabBar) {\n          var keyboardSpace = this.props.viewIsInsideTabBar ? _KAM_DEFAULT_TAB_BAR_HEIGHT : 0;\n\n          if (this.state.keyboardSpace !== keyboardSpace) {\n            this.setState({\n              keyboardSpace: keyboardSpace\n            });\n          }\n        }\n      }\n    }, {\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        this.mountedComponent = false;\n        this.keyboardWillShowEvent && this.keyboardWillShowEvent.remove();\n        this.keyboardWillHideEvent && this.keyboardWillHideEvent.remove();\n        Object.values(this.callbacks).forEach(function (callback) {\n          return callback.remove();\n        });\n      }\n    }, {\n      key: \"render\",\n      value: function render() {\n        var _this$props = this.props,\n            enableOnAndroid = _this$props.enableOnAndroid,\n            contentContainerStyle = _this$props.contentContainerStyle,\n            onScroll = _this$props.onScroll;\n        var newContentContainerStyle;\n\n        if (Platform.OS === 'android' && enableOnAndroid) {\n          newContentContainerStyle = [].concat(contentContainerStyle).concat({\n            paddingBottom: ((contentContainerStyle || {}).paddingBottom || 0) + this.state.keyboardSpace\n          });\n        }\n\n        var refProps = _defineProperty({}, hocOptions.refPropName, this._handleRef);\n\n        return React.createElement(ScrollableComponent, _extends({}, refProps, {\n          keyboardDismissMode: \"interactive\",\n          contentInset: {\n            bottom: this.state.keyboardSpace\n          },\n          automaticallyAdjustContentInsets: false,\n          showsVerticalScrollIndicator: true,\n          scrollEventThrottle: 1\n        }, this.props, {\n          contentContainerStyle: newContentContainerStyle || contentContainerStyle,\n          keyboardSpace: this.state.keyboardSpace,\n          getScrollResponder: this.getScrollResponder,\n          scrollToPosition: this.scrollToPosition,\n          scrollToEnd: this.scrollToEnd,\n          scrollForExtraHeightOnAndroid: this.scrollForExtraHeightOnAndroid,\n          scrollToFocusedInput: this.scrollToFocusedInput,\n          scrollIntoView: this.scrollIntoView,\n          resetKeyboardSpace: this._resetKeyboardSpace,\n          handleOnScroll: this._handleOnScroll,\n          update: this.update,\n          onScroll: Animated.forkEvent(onScroll, this._handleOnScroll)\n        }));\n      }\n    }]);\n\n    return _class;\n  }(React.Component), _class.displayName = \"KeyboardAware\" + getDisplayName(ScrollableComponent), _class.propTypes = _objectSpread({\n    viewIsInsideTabBar: PropTypes.bool,\n    resetScrollToCoords: PropTypes.shape({\n      x: PropTypes.number.isRequired,\n      y: PropTypes.number.isRequired\n    }),\n    enableResetScrollToCoords: PropTypes.bool,\n    enableAutomaticScroll: PropTypes.bool,\n    extraHeight: PropTypes.number,\n    extraScrollHeight: PropTypes.number,\n    keyboardOpeningTime: PropTypes.number,\n    onScroll: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    update: PropTypes.func,\n    contentContainerStyle: PropTypes.any,\n    enableOnAndroid: PropTypes.bool,\n    innerRef: PropTypes.func\n  }, keyboardEventPropTypes), _class.defaultProps = {\n    enableAutomaticScroll: hocOptions.enableAutomaticScroll,\n    extraHeight: hocOptions.extraHeight,\n    extraScrollHeight: hocOptions.extraScrollHeight,\n    enableResetScrollToCoords: hocOptions.enableResetScrollToCoords,\n    keyboardOpeningTime: hocOptions.keyboardOpeningTime,\n    viewIsInsideTabBar: hocOptions.viewIsInsideTabBar,\n    enableOnAndroid: hocOptions.enableOnAndroid\n  }, _temp;\n}\n\nvar listenToKeyboardEvents = function listenToKeyboardEvents(configOrComp) {\n  if (typeof configOrComp === 'object' && !configOrComp.displayName) {\n    return function (Comp) {\n      return KeyboardAwareHOC(Comp, configOrComp);\n    };\n  } else {\n    return KeyboardAwareHOC(configOrComp);\n  }\n};\n\nexport default listenToKeyboardEvents;","map":{"version":3,"sources":["/Users/rohitsingh/Documents/projects/new-nativebase-setup/NativeBase/example/node_modules/react-native-keyboard-aware-scroll-view/lib/KeyboardAwareHOC.js"],"names":["React","PropTypes","isIphoneX","_KAM_DEFAULT_TAB_BAR_HEIGHT","_KAM_KEYBOARD_OPENING_TIME","_KAM_EXTRA_HEIGHT","supportedKeyboardEvents","keyboardEventToCallbackName","eventName","toUpperCase","substring","keyboardEventPropTypes","reduce","acc","func","keyboardAwareHOCTypeEvents","Function","getDisplayName","WrappedComponent","displayName","name","ScrollIntoViewDefaultOptions","enableOnAndroid","contentContainerStyle","undefined","enableAutomaticScroll","extraHeight","extraScrollHeight","enableResetScrollToCoords","keyboardOpeningTime","viewIsInsideTabBar","refPropName","extractNativeRef","ref","shouldCallGetNode","Platform","constants","reactNativeVersion","major","minor","getNode","KeyboardAwareHOC","ScrollableComponent","userOptions","hocOptions","props","getScrollResponder","_rnkasv_keyboardView","scrollToPosition","x","y","animated","responder","scrollResponderScrollTo","scrollToEnd","scrollResponderScrollToEnd","scrollForExtraHeightOnAndroid","position","scrollToFocusedInput","reactNode","setTimeout","mountedComponent","scrollResponderScrollNativeHandleToKeyboard","scrollIntoView","element","options","Promise","all","_measureElement","parentLayout","childLayout","getScrollPosition","_defaultGetScrollPosition","contentOffset","Math","max","node","findNodeHandle","resolve","UIManager","measureInWindow","width","height","_updateKeyboardSpace","frames","keyboardSpace","endCoordinates","setState","currentlyFocusedField","TextInput","State","currentlyFocusedInput","viewIsDescendantOf","getInnerViewNode","isAncestor","textInputBottomPosition","keyboardPosition","screenY","totalExtraHeight","OS","_scrollToFocusedInputWithNodeHandle","resetScrollToCoords","defaultResetScrollToCoords","_resetKeyboardSpace","nodeID","_handleOnScroll","e","nativeEvent","_handleRef","innerRef","update","keyboardWillShowEvent","keyboardWillHideEvent","callbacks","state","Keyboard","addListener","forEach","callbackName","prevProps","remove","Object","values","callback","onScroll","newContentContainerStyle","concat","paddingBottom","refProps","bottom","Animated","forkEvent","Component","propTypes","bool","shape","number","isRequired","oneOfType","object","any","defaultProps","listenToKeyboardEvents","configOrComp","Comp"],"mappings":"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","sourcesContent":["/* @flow */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport {\n  Keyboard,\n  Platform,\n  UIManager,\n  TextInput,\n  findNodeHandle,\n  Animated\n} from 'react-native'\nimport { isIphoneX } from 'react-native-iphone-x-helper'\nimport type { KeyboardAwareInterface } from './KeyboardAwareInterface'\n\nconst _KAM_DEFAULT_TAB_BAR_HEIGHT: number = isIphoneX() ? 83 : 49\nconst _KAM_KEYBOARD_OPENING_TIME: number = 250\nconst _KAM_EXTRA_HEIGHT: number = 75\n\nconst supportedKeyboardEvents = [\n  'keyboardWillShow',\n  'keyboardDidShow',\n  'keyboardWillHide',\n  'keyboardDidHide',\n  'keyboardWillChangeFrame',\n  'keyboardDidChangeFrame'\n]\nconst keyboardEventToCallbackName = (eventName: string) =>\n  'on' + eventName[0].toUpperCase() + eventName.substring(1)\nconst keyboardEventPropTypes = supportedKeyboardEvents.reduce(\n  (acc: Object, eventName: string) => ({\n    ...acc,\n    [keyboardEventToCallbackName(eventName)]: PropTypes.func\n  }),\n  {}\n)\nconst keyboardAwareHOCTypeEvents = supportedKeyboardEvents.reduce(\n  (acc: Object, eventName: string) => ({\n    ...acc,\n    [keyboardEventToCallbackName(eventName)]: Function\n  }),\n  {}\n)\n\nexport type KeyboardAwareHOCProps = {\n  viewIsInsideTabBar?: boolean,\n  resetScrollToCoords?: {\n    x: number,\n    y: number\n  },\n  enableResetScrollToCoords?: boolean,\n  enableAutomaticScroll?: boolean,\n  extraHeight?: number,\n  extraScrollHeight?: number,\n  keyboardOpeningTime?: number,\n  onScroll?: Function,\n  update?: Function,\n  contentContainerStyle?: any,\n  enableOnAndroid?: boolean,\n  innerRef?: Function,\n  ...keyboardAwareHOCTypeEvents\n}\nexport type KeyboardAwareHOCState = {\n  keyboardSpace: number\n}\n\nexport type ElementLayout = {\n  x: number,\n  y: number,\n  width: number,\n  height: number\n}\n\nexport type ContentOffset = {\n  x: number,\n  y: number\n}\n\nexport type ScrollPosition = {\n  x: number,\n  y: number,\n  animated: boolean\n}\n\nexport type ScrollIntoViewOptions = ?{\n  getScrollPosition?: (\n    parentLayout: ElementLayout,\n    childLayout: ElementLayout,\n    contentOffset: ContentOffset\n  ) => ScrollPosition\n}\n\nexport type KeyboardAwareHOCOptions = ?{\n  enableOnAndroid: boolean,\n  contentContainerStyle: ?Object,\n  enableAutomaticScroll: boolean,\n  extraHeight: number,\n  extraScrollHeight: number,\n  enableResetScrollToCoords: boolean,\n  keyboardOpeningTime: number,\n  viewIsInsideTabBar: boolean,\n  refPropName: string,\n  extractNativeRef: Function\n}\n\nfunction getDisplayName(WrappedComponent: React$Component) {\n  return (\n    (WrappedComponent &&\n      (WrappedComponent.displayName || WrappedComponent.name)) ||\n    'Component'\n  )\n}\n\nconst ScrollIntoViewDefaultOptions: KeyboardAwareHOCOptions = {\n  enableOnAndroid: false,\n  contentContainerStyle: undefined,\n  enableAutomaticScroll: true,\n  extraHeight: _KAM_EXTRA_HEIGHT,\n  extraScrollHeight: 0,\n  enableResetScrollToCoords: true,\n  keyboardOpeningTime: _KAM_KEYBOARD_OPENING_TIME,\n  viewIsInsideTabBar: false,\n\n  // The ref prop name that will be passed to the wrapped component to obtain a ref\n  // If your ScrollView is already wrapped, maybe the wrapper permit to get a ref\n  // For example, with glamorous-native ScrollView, you should use \"innerRef\"\n  refPropName: 'ref',\n  // Sometimes the ref you get is a ref to a wrapped view (ex: Animated.ScrollView)\n  // We need access to the imperative API of a real native ScrollView so we need extraction logic\n  extractNativeRef: (ref: Object) => {\n    // getNode() permit to support Animated.ScrollView automatically, but is deprecated since RN 0.62\n    // see https://github.com/facebook/react-native/issues/19650\n    // see https://stackoverflow.com/questions/42051368/scrollto-is-undefined-on-animated-scrollview/48786374\n    // see https://github.com/facebook/react-native/commit/66e72bb4e00aafbcb9f450ed5db261d98f99f82a\n    const shouldCallGetNode = !Platform.constants || (Platform.constants.reactNativeVersion.major === 0 && Platform.constants.reactNativeVersion.minor < 62)\n    if (ref.getNode && shouldCallGetNode) {\n      return ref.getNode()\n    } else {\n      return ref\n    }\n  }\n}\n\nfunction KeyboardAwareHOC(\n  ScrollableComponent: React$Component,\n  userOptions: KeyboardAwareHOCOptions = {}\n) {\n  const hocOptions: KeyboardAwareHOCOptions = {\n    ...ScrollIntoViewDefaultOptions,\n    ...userOptions\n  }\n\n  return class\n    extends React.Component<KeyboardAwareHOCProps, KeyboardAwareHOCState>\n    implements KeyboardAwareInterface {\n    _rnkasv_keyboardView: any\n    keyboardWillShowEvent: ?Function\n    keyboardWillHideEvent: ?Function\n    position: ContentOffset\n    defaultResetScrollToCoords: ?{ x: number, y: number }\n    mountedComponent: boolean\n    handleOnScroll: Function\n    state: KeyboardAwareHOCState\n    static displayName = `KeyboardAware${getDisplayName(ScrollableComponent)}`\n\n    static propTypes = {\n      viewIsInsideTabBar: PropTypes.bool,\n      resetScrollToCoords: PropTypes.shape({\n        x: PropTypes.number.isRequired,\n        y: PropTypes.number.isRequired\n      }),\n      enableResetScrollToCoords: PropTypes.bool,\n      enableAutomaticScroll: PropTypes.bool,\n      extraHeight: PropTypes.number,\n      extraScrollHeight: PropTypes.number,\n      keyboardOpeningTime: PropTypes.number,\n      onScroll: PropTypes.oneOfType([\n        PropTypes.func, // Normal listener\n        PropTypes.object // Animated.event listener\n      ]),\n      update: PropTypes.func,\n      contentContainerStyle: PropTypes.any,\n      enableOnAndroid: PropTypes.bool,\n      innerRef: PropTypes.func,\n      ...keyboardEventPropTypes\n    }\n\n    // HOC options are used to init default props, so that these options can be overriden with component props\n    static defaultProps = {\n      enableAutomaticScroll: hocOptions.enableAutomaticScroll,\n      extraHeight: hocOptions.extraHeight,\n      extraScrollHeight: hocOptions.extraScrollHeight,\n      enableResetScrollToCoords: hocOptions.enableResetScrollToCoords,\n      keyboardOpeningTime: hocOptions.keyboardOpeningTime,\n      viewIsInsideTabBar: hocOptions.viewIsInsideTabBar,\n      enableOnAndroid: hocOptions.enableOnAndroid\n    }\n\n    constructor(props: KeyboardAwareHOCProps) {\n      super(props)\n      this.keyboardWillShowEvent = undefined\n      this.keyboardWillHideEvent = undefined\n      this.callbacks = {}\n      this.position = { x: 0, y: 0 }\n      this.defaultResetScrollToCoords = null\n      const keyboardSpace: number = props.viewIsInsideTabBar\n        ? _KAM_DEFAULT_TAB_BAR_HEIGHT\n        : 0\n      this.state = { keyboardSpace }\n    }\n\n    componentDidMount() {\n      this.mountedComponent = true\n      // Keyboard events\n      if (Platform.OS === 'ios') {\n        this.keyboardWillShowEvent = Keyboard.addListener(\n          'keyboardWillShow',\n          this._updateKeyboardSpace\n        )\n        this.keyboardWillHideEvent = Keyboard.addListener(\n          'keyboardWillHide',\n          this._resetKeyboardSpace\n        )\n      } else if (Platform.OS === 'android' && this.props.enableOnAndroid) {\n        this.keyboardWillShowEvent = Keyboard.addListener(\n          'keyboardDidShow',\n          this._updateKeyboardSpace\n        )\n        this.keyboardWillHideEvent = Keyboard.addListener(\n          'keyboardDidHide',\n          this._resetKeyboardSpace\n        )\n      }\n\n      supportedKeyboardEvents.forEach((eventName: string) => {\n        const callbackName = keyboardEventToCallbackName(eventName)\n        if (this.props[callbackName]) {\n          this.callbacks[eventName] = Keyboard.addListener(\n            eventName,\n            this.props[callbackName]\n          )\n        }\n      })\n    }\n\n    componentDidUpdate(prevProps: KeyboardAwareHOCProps) {\n      if (this.props.viewIsInsideTabBar !== prevProps.viewIsInsideTabBar) {\n        const keyboardSpace: number = this.props.viewIsInsideTabBar\n          ? _KAM_DEFAULT_TAB_BAR_HEIGHT\n          : 0\n        if (this.state.keyboardSpace !== keyboardSpace) {\n          this.setState({ keyboardSpace })\n        }\n      }\n    }\n\n    componentWillUnmount() {\n      this.mountedComponent = false\n      this.keyboardWillShowEvent && this.keyboardWillShowEvent.remove()\n      this.keyboardWillHideEvent && this.keyboardWillHideEvent.remove()\n      Object.values(this.callbacks).forEach((callback: Object) =>\n        callback.remove()\n      )\n    }\n\n    getScrollResponder = () => {\n      return (\n        this._rnkasv_keyboardView &&\n        this._rnkasv_keyboardView.getScrollResponder &&\n        this._rnkasv_keyboardView.getScrollResponder()\n      )\n    }\n\n    scrollToPosition = (x: number, y: number, animated: boolean = true) => {\n      const responder = this.getScrollResponder()\n      responder && responder.scrollResponderScrollTo({ x, y, animated })\n    }\n\n    scrollToEnd = (animated?: boolean = true) => {\n      const responder = this.getScrollResponder()\n      responder && responder.scrollResponderScrollToEnd({ animated })\n    }\n\n    scrollForExtraHeightOnAndroid = (extraHeight: number) => {\n      this.scrollToPosition(0, this.position.y + extraHeight, true)\n    }\n\n    /**\n     * @param keyboardOpeningTime: takes a different keyboardOpeningTime in consideration.\n     * @param extraHeight: takes an extra height in consideration.\n     */\n    scrollToFocusedInput = (\n      reactNode: any,\n      extraHeight?: number,\n      keyboardOpeningTime?: number\n    ) => {\n      if (extraHeight === undefined) {\n        extraHeight = this.props.extraHeight || 0\n      }\n      if (keyboardOpeningTime === undefined) {\n        keyboardOpeningTime = this.props.keyboardOpeningTime || 0\n      }\n      setTimeout(() => {\n        if (!this.mountedComponent) {\n          return\n        }\n        const responder = this.getScrollResponder()\n        responder &&\n          responder.scrollResponderScrollNativeHandleToKeyboard(\n            reactNode,\n            extraHeight,\n            true\n          )\n      }, keyboardOpeningTime)\n    }\n\n    scrollIntoView = async (\n      element: React.Element<*>,\n      options: ScrollIntoViewOptions = {}\n    ) => {\n      if (!this._rnkasv_keyboardView || !element) {\n        return\n      }\n\n      const [parentLayout, childLayout] = await Promise.all([\n        this._measureElement(this._rnkasv_keyboardView),\n        this._measureElement(element)\n      ])\n\n      const getScrollPosition =\n        options.getScrollPosition || this._defaultGetScrollPosition\n      const { x, y, animated } = getScrollPosition(\n        parentLayout,\n        childLayout,\n        this.position\n      )\n      this.scrollToPosition(x, y, animated)\n    }\n\n    _defaultGetScrollPosition = (\n      parentLayout: ElementLayout,\n      childLayout: ElementLayout,\n      contentOffset: ContentOffset\n    ): ScrollPosition => {\n      return {\n        x: 0,\n        y: Math.max(0, childLayout.y - parentLayout.y + contentOffset.y),\n        animated: true\n      }\n    }\n\n    _measureElement = (element: React.Element<*>): Promise<ElementLayout> => {\n      const node = findNodeHandle(element)\n      return new Promise((resolve: ElementLayout => void) => {\n        UIManager.measureInWindow(\n          node,\n          (x: number, y: number, width: number, height: number) => {\n            resolve({ x, y, width, height })\n          }\n        )\n      })\n    }\n\n    // Keyboard actions\n    _updateKeyboardSpace = (frames: Object) => {\n      // Automatically scroll to focused TextInput\n      if (this.props.enableAutomaticScroll) {\n        let keyboardSpace: number =\n          frames.endCoordinates.height + this.props.extraScrollHeight\n        if (this.props.viewIsInsideTabBar) {\n          keyboardSpace -= _KAM_DEFAULT_TAB_BAR_HEIGHT\n        }\n        this.setState({ keyboardSpace })\n        const currentlyFocusedField =  TextInput.State.currentlyFocusedInput ? findNodeHandle(TextInput.State.currentlyFocusedInput()) : TextInput.State.currentlyFocusedField()\n        const responder = this.getScrollResponder()\n        if (!currentlyFocusedField || !responder) {\n          return\n        }\n        UIManager.viewIsDescendantOf(\n          currentlyFocusedField,\n          responder.getInnerViewNode(),\n          (isAncestor: boolean) => {\n            if (isAncestor) {\n              // Check if the TextInput will be hidden by the keyboard\n              UIManager.measureInWindow(\n                currentlyFocusedField,\n                (x: number, y: number, width: number, height: number) => {\n                  const textInputBottomPosition = y + height\n                  const keyboardPosition = frames.endCoordinates.screenY\n                  const totalExtraHeight =\n                    this.props.extraScrollHeight + this.props.extraHeight\n                  if (Platform.OS === 'ios') {\n                    if (\n                      textInputBottomPosition >\n                      keyboardPosition - totalExtraHeight\n                    ) {\n                      this._scrollToFocusedInputWithNodeHandle(\n                        currentlyFocusedField\n                      )\n                    }\n                  } else {\n                    // On android, the system would scroll the text input just\n                    // above the keyboard so we just neet to scroll the extra\n                    // height part\n                    if (textInputBottomPosition > keyboardPosition) {\n                      // Since the system already scrolled the whole view up\n                      // we should reduce that amount\n                      keyboardSpace =\n                        keyboardSpace -\n                        (textInputBottomPosition - keyboardPosition)\n                      this.setState({ keyboardSpace })\n                      this.scrollForExtraHeightOnAndroid(totalExtraHeight)\n                    } else if (\n                      textInputBottomPosition >\n                      keyboardPosition - totalExtraHeight\n                    ) {\n                      this.scrollForExtraHeightOnAndroid(\n                        totalExtraHeight -\n                          (keyboardPosition - textInputBottomPosition)\n                      )\n                    }\n                  }\n                }\n              )\n            }\n          }\n        )\n      }\n      if (!this.props.resetScrollToCoords) {\n        if (!this.defaultResetScrollToCoords) {\n          this.defaultResetScrollToCoords = this.position\n        }\n      }\n    }\n\n    _resetKeyboardSpace = () => {\n      const keyboardSpace: number = this.props.viewIsInsideTabBar\n        ? _KAM_DEFAULT_TAB_BAR_HEIGHT\n        : 0\n      this.setState({ keyboardSpace })\n      // Reset scroll position after keyboard dismissal\n      if (this.props.enableResetScrollToCoords === false) {\n        this.defaultResetScrollToCoords = null\n        return\n      } else if (this.props.resetScrollToCoords) {\n        this.scrollToPosition(\n          this.props.resetScrollToCoords.x,\n          this.props.resetScrollToCoords.y,\n          true\n        )\n      } else {\n        if (this.defaultResetScrollToCoords) {\n          this.scrollToPosition(\n            this.defaultResetScrollToCoords.x,\n            this.defaultResetScrollToCoords.y,\n            true\n          )\n          this.defaultResetScrollToCoords = null\n        } else {\n          this.scrollToPosition(0, 0, true)\n        }\n      }\n    }\n\n    _scrollToFocusedInputWithNodeHandle = (\n      nodeID: number,\n      extraHeight?: number,\n      keyboardOpeningTime?: number\n    ) => {\n      if (extraHeight === undefined) {\n        extraHeight = this.props.extraHeight\n      }\n      const reactNode = findNodeHandle(nodeID)\n      this.scrollToFocusedInput(\n        reactNode,\n        extraHeight + this.props.extraScrollHeight,\n        keyboardOpeningTime !== undefined\n          ? keyboardOpeningTime\n          : this.props.keyboardOpeningTime || 0\n      )\n    }\n\n    _handleOnScroll = (\n      e: SyntheticEvent<*> & { nativeEvent: { contentOffset: number } }\n    ) => {\n      this.position = e.nativeEvent.contentOffset\n    }\n\n    _handleRef = (ref: React.Component<*>) => {\n      this._rnkasv_keyboardView = ref ? hocOptions.extractNativeRef(ref) : ref\n      if (this.props.innerRef) {\n        this.props.innerRef(this._rnkasv_keyboardView)\n      }\n    }\n\n    update = () => {\n      const currentlyFocusedField =  TextInput.State.currentlyFocusedInput ? findNodeHandle(TextInput.State.currentlyFocusedInput()) : TextInput.State.currentlyFocusedField()\n      const responder = this.getScrollResponder()\n\n      if (!currentlyFocusedField || !responder) {\n        return\n      }\n\n      this._scrollToFocusedInputWithNodeHandle(currentlyFocusedField)\n    }\n\n    render() {\n      const { enableOnAndroid, contentContainerStyle, onScroll } = this.props\n      let newContentContainerStyle\n      if (Platform.OS === 'android' && enableOnAndroid) {\n        newContentContainerStyle = [].concat(contentContainerStyle).concat({\n          paddingBottom:\n            ((contentContainerStyle || {}).paddingBottom || 0) +\n            this.state.keyboardSpace\n        })\n      }\n      const refProps = { [hocOptions.refPropName]: this._handleRef }\n      return (\n        <ScrollableComponent\n          {...refProps}\n          keyboardDismissMode='interactive'\n          contentInset={{ bottom: this.state.keyboardSpace }}\n          automaticallyAdjustContentInsets={false}\n          showsVerticalScrollIndicator={true}\n          scrollEventThrottle={1}\n          {...this.props}\n          contentContainerStyle={\n            newContentContainerStyle || contentContainerStyle\n          }\n          keyboardSpace={this.state.keyboardSpace}\n          getScrollResponder={this.getScrollResponder}\n          scrollToPosition={this.scrollToPosition}\n          scrollToEnd={this.scrollToEnd}\n          scrollForExtraHeightOnAndroid={this.scrollForExtraHeightOnAndroid}\n          scrollToFocusedInput={this.scrollToFocusedInput}\n          scrollIntoView={this.scrollIntoView}\n          resetKeyboardSpace={this._resetKeyboardSpace}\n          handleOnScroll={this._handleOnScroll}\n          update={this.update}\n          onScroll={Animated.forkEvent(onScroll, this._handleOnScroll)}\n        />\n      )\n    }\n  }\n}\n\n// Allow to pass options, without breaking change, and curried for composition\n// listenToKeyboardEvents(ScrollView);\n// listenToKeyboardEvents(options)(Comp);\nconst listenToKeyboardEvents = (configOrComp: any) => {\n  if (typeof configOrComp === 'object' && !configOrComp.displayName) {\n    return (Comp: Function) => KeyboardAwareHOC(Comp, configOrComp)\n  } else {\n    return KeyboardAwareHOC(configOrComp)\n  }\n}\n\nexport default listenToKeyboardEvents\n"]},"metadata":{},"sourceType":"module"}