{"version":3,"sources":["__debugid__","/src/app/_layout.tsx","/src/AppEntry.tsx","/node_modules/react-native-popup-menu/build/rnpm.js","/src/components/ModalProvider.tsx","/src/components/AlertProvider/AlertProvider.tsx","/src/components/Splash.tsx","/src/initialize.tsx","/node_modules/dayjs/plugin/advancedFormat.js","/node_modules/dayjs/plugin/customParseFormat.js","/node_modules/dayjs/plugin/isBetween.js","/node_modules/dayjs/plugin/isToday.js","/node_modules/dayjs/plugin/localizedFormat.js","/node_modules/dayjs/plugin/relativeTime.js","/node_modules/dayjs/plugin/updateLocale.js","/node_modules/dayjs/plugin/utc.js","/initializeSentry.ts","/src/utils/routingInstrumentation.ts","/src/services/createQueryClient.tsx","/src/utils/ignoreLogs.ts","/src/components/Header.tsx","/node_modules/react-native-gesture-handler/lib/module/index.js","/node_modules/react-native-gesture-handler/lib/module/init.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/eventReceiver.js","/node_modules/react-native-gesture-handler/lib/module/State.js","/node_modules/react-native-gesture-handler/lib/module/TouchEventType.js","/node_modules/react-native-gesture-handler/lib/module/handlers/handlersRegistry.js","/node_modules/react-native-gesture-handler/lib/module/utils.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/gestureStateManager.web.js","/node_modules/react-native-gesture-handler/lib/module/web/tools/NodeManager.js","/node_modules/react-native-gesture-handler/lib/module/RNGestureHandlerModule.web.js","/node_modules/react-native-gesture-handler/lib/module/EnableNewWebImplementation.js","/node_modules/react-native-gesture-handler/lib/module/web/Gestures.js","/node_modules/react-native-gesture-handler/lib/module/web/handlers/PanGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/web/constants.js","/node_modules/react-native-gesture-handler/lib/module/web/handlers/GestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/web/interfaces.js","/node_modules/react-native-gesture-handler/lib/module/web/tools/GestureHandlerOrchestrator.js","/node_modules/react-native-gesture-handler/lib/module/PointerType.js","/node_modules/react-native-gesture-handler/lib/module/web/tools/PointerTracker.js","/node_modules/react-native-gesture-handler/lib/module/web/tools/VelocityTracker.js","/node_modules/react-native-gesture-handler/lib/module/web/tools/CircularBuffer.js","/node_modules/react-native-gesture-handler/lib/module/web/tools/LeastSquareSolver.js","/node_modules/react-native-gesture-handler/lib/module/web/tools/InteractionManager.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestureHandlerCommon.js","/node_modules/react-native-gesture-handler/lib/module/web/handlers/TapGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/web/handlers/LongPressGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/web/handlers/PinchGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/web/detectors/ScaleGestureDetector.js","/node_modules/react-native-gesture-handler/lib/module/web/handlers/RotationGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/web/detectors/RotationGestureDetector.js","/node_modules/react-native-gesture-handler/lib/module/web/handlers/FlingGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/Directions.js","/node_modules/react-native-gesture-handler/lib/module/web/tools/Vector.js","/node_modules/react-native-gesture-handler/lib/module/web/utils.js","/node_modules/react-native-gesture-handler/lib/module/web/handlers/NativeViewGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/web/handlers/ManualGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/web/handlers/HoverGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/web_hammer/NativeViewGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/web_hammer/DiscreteGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/web_hammer/GestureHandler.js","/node_modules/@egjs/hammerjs/dist/hammer.esm.js","/node_modules/react-native-gesture-handler/lib/module/web_hammer/constants.js","/node_modules/react-native-gesture-handler/lib/module/web_hammer/NodeManager.js","/node_modules/react-native-gesture-handler/lib/module/ghQueueMicrotask.js","/node_modules/react-native-gesture-handler/lib/module/web_hammer/utils.js","/node_modules/react-native-gesture-handler/lib/module/web_hammer/PressGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/web_hammer/PanGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/web_hammer/DraggingGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/web_hammer/TapGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/web_hammer/LongPressGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/web_hammer/PinchGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/web_hammer/IndiscreteGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/web_hammer/RotationGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/web_hammer/FlingGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/web_hammer/Errors.js","/node_modules/react-native-gesture-handler/lib/module/web/tools/GestureHandlerWebDelegate.js","/node_modules/react-native-gesture-handler/lib/module/web/tools/PointerEventManager.js","/node_modules/react-native-gesture-handler/lib/module/web/tools/EventManager.js","/node_modules/react-native-gesture-handler/lib/module/web/tools/KeyboardEventManager.js","/node_modules/react-native-gesture-handler/lib/module/components/gestureHandlerRootHOC.js","/node_modules/react-native-gesture-handler/lib/module/components/GestureHandlerRootView.web.js","/node_modules/react-native-gesture-handler/lib/module/GestureHandlerRootViewContext.js","/node_modules/react-native-gesture-handler/lib/module/handlers/TapGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/handlers/createHandler.js","/node_modules/react-native-gesture-handler/lib/module/handlers/customDirectEventTypes.web.js","/node_modules/react-native-gesture-handler/lib/module/handlers/getNextHandlerTag.js","/node_modules/react-native-gesture-handler/lib/module/handlers/utils.js","/node_modules/react-native-gesture-handler/lib/module/ActionType.js","/node_modules/react-native-gesture-handler/lib/module/handlers/PressabilityDebugView.web.js","/node_modules/react-native-gesture-handler/lib/module/handlers/ForceTouchGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/PlatformConstants.web.js","/node_modules/react-native-gesture-handler/lib/module/handlers/LongPressGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/handlers/PanGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/handlers/PinchGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/handlers/RotationGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/handlers/FlingGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/handlers/createNativeWrapper.js","/node_modules/react-native-gesture-handler/lib/module/handlers/NativeViewGestureHandler.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/GestureDetector/index.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/GestureDetector/useAnimatedGesture.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/gesture.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/reanimatedWrapper.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/GestureDetector/attachHandlers.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/GestureDetector/utils.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/hoverGesture.js","/node_modules/react-native-gesture-handler/lib/module/getReactNativeVersion.web.js","/node_modules/react-native-gesture-handler/lib/module/RNRenderer.web.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/GestureDetector/needsToReattach.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/GestureDetector/dropHandlers.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/GestureDetector/Wrap.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/GestureDetector/useDetectorUpdater.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/GestureDetector/updateHandlers.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/GestureDetector/useViewRefHandler.js","/node_modules/react-native-gesture-handler/lib/module/getShadowNodeFromRef.web.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/gestureObjects.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/flingGesture.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/forceTouchGesture.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/gestureComposition.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/longPressGesture.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/panGesture.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/pinchGesture.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/rotationGesture.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/tapGesture.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/nativeGesture.js","/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/manualGesture.js","/node_modules/react-native-gesture-handler/lib/module/components/GestureButtons.js","/node_modules/react-native-gesture-handler/lib/module/components/GestureHandlerButton.web.js","/node_modules/react-native-gesture-handler/lib/module/components/touchables/index.js","/node_modules/react-native-gesture-handler/lib/module/components/touchables/TouchableNativeFeedback.js","/node_modules/react-native-gesture-handler/lib/module/components/touchables/TouchableWithoutFeedback.js","/node_modules/react-native-gesture-handler/lib/module/components/touchables/GenericTouchable.js","/node_modules/react-native-gesture-handler/lib/module/components/touchables/TouchableOpacity.js","/node_modules/react-native-gesture-handler/lib/module/components/touchables/TouchableHighlight.js","/node_modules/react-native-gesture-handler/lib/module/components/GestureComponents.web.js","/node_modules/react-native-gesture-handler/lib/module/components/Swipeable.js","/node_modules/react-native-gesture-handler/lib/module/components/Pressable/index.js","/node_modules/react-native-gesture-handler/lib/module/components/Pressable/Pressable.js","/node_modules/react-native-gesture-handler/lib/module/components/Pressable/utils.js","/node_modules/react-native-gesture-handler/lib/module/components/DrawerLayout.js"],"sourcesContent":["var _sentryDebugIds,_sentryDebugIdIdentifier;void 0===_sentryDebugIds&&(_sentryDebugIds={});try{var stack=(new Error).stack;stack&&(_sentryDebugIds[stack]=\"0b7be92b-f196-4b80-b368-772b1ea34000\",_sentryDebugIdIdentifier=\"sentry-dbid-0b7be92b-f196-4b80-b368-772b1ea34000\")}catch(e){}","import { Stack } from \"expo-router\";\nimport { Platform } from \"react-native\";\nimport \"react-native-reanimated\";\nimport { AppEntry } from \"~/AppEntry\";\nimport { Header } from \"~/components/Header\";\n\nexport default function RootLayout() {\n return (\n \n ,\n gestureEnabled: false,\n headerShown: Platform.OS === \"web\" ? false : true,\n }}\n >\n \n \n \n \n \n\n {/* Croatian */}\n \n \n \n \n \n );\n}\n","import { QueryClientProvider } from \"@tanstack/react-query\";\nimport { useNavigationContainerRef } from \"expo-router\";\nimport React, { useEffect, useState } from \"react\";\nimport { RawIntlProvider } from \"react-intl\";\nimport { StatusBar } from \"react-native\";\nimport { gestureHandlerRootHOC } from \"react-native-gesture-handler\";\nimport { MenuProvider } from \"react-native-popup-menu\";\nimport { SafeAreaProvider } from \"react-native-safe-area-context\";\nimport { ModalProvider } from \"~/components/ModalProvider\";\nimport { AlertProvider } from \"./components/AlertProvider/AlertProvider\";\nimport { WithSplashScreen } from \"./components/Splash\";\nimport { ErrorAlertProvider } from \"./features/error-alert\";\nimport { ToastProvider } from \"./features/toast\";\nimport { initialize } from \"./initialize\";\nimport { routingInstrumentation } from \"./utils/routingInstrumentation\";\n\nexport const AppEntry = gestureHandlerRootHOC(function AppEntry({\n children,\n}: {\n children: React.ReactNode;\n}) {\n const [isReady, setIsReady] = useState<\n | { isReady: false }\n | { isReady: true; context: Awaited> }\n >({ isReady: false });\n\n useEffect(() => {\n initialize().then((ctx) => {\n setIsReady({ isReady: true, context: ctx });\n });\n }, []);\n\n // Capture the NavigationContainer ref and register it with the instrumentation.\n const ref = useNavigationContainerRef();\n\n useEffect(() => {\n if (ref) {\n routingInstrumentation.registerNavigationContainer(ref);\n }\n }, [ref]);\n\n return (\n \n \n {isReady.isReady && (\n \n \n \n \n \n \n \n {children}\n \n \n \n \n \n \n \n )}\n \n );\n});\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react-native'), require('react')) :\n typeof define === 'function' && define.amd ? define(['exports', 'react-native', 'react'], factory) :\n (global = global || self, factory(global.ReactNativePopupMenu = {}, global.reactNative, global.React));\n}(this, function (exports, reactNative, React) { 'use strict';\n\n var React__default = 'default' in React ? React['default'] : React;\n\n // platform select polyfil for older RN versions\n\n if (!reactNative.Platform.select) {\n reactNative.Platform.select = function (obj) {\n return obj[reactNative.Platform.OS];\n };\n }\n\n function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n }\n\n function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n }\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n }\n\n function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n }\n\n function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n }\n\n function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n }\n\n function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n }\n\n function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n }\n\n function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n }\n\n function _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return _assertThisInitialized(self);\n }\n\n function _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n }\n\n /**\n * Promisifies measure's callback function and returns layout object.\n */\n\n var measure = function measure(ref) {\n return new Promise(function (resolve) {\n ref.measure(function (x, y, width, height, pageX, pageY) {\n resolve({\n x: pageX,\n y: pageY,\n width: width,\n height: height\n });\n });\n });\n };\n /**\n * Create unique menu name across all menu instances.\n */\n\n var makeName = function () {\n var nextID = 1;\n return function () {\n return \"menu-\".concat(nextID++);\n };\n }();\n /**\n * Create touchable component based on passed parameter and platform.\n * It also returns default props for specific touchable types.\n */\n\n function makeTouchable(TouchableComponent) {\n var Touchable = TouchableComponent || reactNative.Platform.select({\n android: reactNative.TouchableNativeFeedback,\n ios: reactNative.TouchableHighlight,\n default: reactNative.TouchableHighlight\n });\n var defaultTouchableProps = {};\n\n if (Touchable === reactNative.TouchableHighlight) {\n defaultTouchableProps = {\n underlayColor: 'rgba(0, 0, 0, 0.1)'\n };\n }\n\n return {\n Touchable: Touchable,\n defaultTouchableProps: defaultTouchableProps\n };\n }\n /**\n Converts iterator to array\n */\n\n function iterator2array(it) {\n // workaround around https://github.com/instea/react-native-popup-menu/issues/41#issuecomment-340290127\n var arr = [];\n\n for (var next = it.next(); !next.done; next = it.next()) {\n arr.push(next.value);\n }\n\n return arr;\n }\n /** checks if component is class component */\n\n function isClassComponent(component) {\n return component.prototype && !!component.prototype.render;\n }\n /**\n * Higher order component to deprecate usage of component.\n * message - deprecate warning message\n * methods - array of method names to be delegated to deprecated component\n */\n\n function deprecatedComponent(message) {\n var methods = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n return function deprecatedComponentHOC(Component) {\n return /*#__PURE__*/function (_React$Component) {\n _inherits(DeprecatedComponent, _React$Component);\n\n var _super = _createSuper(DeprecatedComponent);\n\n function DeprecatedComponent() {\n var _this;\n\n _classCallCheck(this, DeprecatedComponent);\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"onRef\", function (ref) {\n return _this.ref = ref;\n });\n\n methods.forEach(function (name) {\n // delegate methods to the component\n _this[name] = function () {\n var _this$ref;\n\n return _this.ref && (_this$ref = _this.ref)[name].apply(_this$ref, arguments);\n };\n });\n return _this;\n }\n\n _createClass(DeprecatedComponent, [{\n key: \"render\",\n value: function render() {\n return /*#__PURE__*/React__default.createElement(Component, _extends({}, this.props, {\n ref: this.onRef\n }));\n }\n }, {\n key: \"componentDidMount\",\n value: function componentDidMount() {\n console.warn(message);\n }\n }]);\n\n return DeprecatedComponent;\n }(React__default.Component);\n };\n }\n\n function createCommonjsModule(fn, module) {\n \treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n }\n\n var reactIs_development = createCommonjsModule(function (module, exports) {\n\n\n\n {\n (function() {\n\n // The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n // nor polyfill, then a plain number is used for performance.\n var hasSymbol = typeof Symbol === 'function' && Symbol.for;\n var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\n var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\n var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\n var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\n var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\n var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\n var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n // (unstable) APIs that have been removed. Can we remove the symbols?\n\n var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\n var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\n var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\n var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\n var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\n var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\n var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\n var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\n var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\n var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\n var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\n function isValidElementType(type) {\n return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n }\n\n function typeOf(object) {\n if (typeof object === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_ASYNC_MODE_TYPE:\n case REACT_CONCURRENT_MODE_TYPE:\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n } // AsyncMode is deprecated along with isAsyncMode\n\n var AsyncMode = REACT_ASYNC_MODE_TYPE;\n var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\n var ContextConsumer = REACT_CONTEXT_TYPE;\n var ContextProvider = REACT_PROVIDER_TYPE;\n var Element = REACT_ELEMENT_TYPE;\n var ForwardRef = REACT_FORWARD_REF_TYPE;\n var Fragment = REACT_FRAGMENT_TYPE;\n var Lazy = REACT_LAZY_TYPE;\n var Memo = REACT_MEMO_TYPE;\n var Portal = REACT_PORTAL_TYPE;\n var Profiler = REACT_PROFILER_TYPE;\n var StrictMode = REACT_STRICT_MODE_TYPE;\n var Suspense = REACT_SUSPENSE_TYPE;\n var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\n function isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n }\n }\n\n return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n }\n function isConcurrentMode(object) {\n return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n }\n function isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n }\n function isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n }\n function isElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }\n function isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n }\n function isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n }\n function isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n }\n function isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n }\n function isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n }\n function isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n }\n function isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n }\n function isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n }\n\n exports.AsyncMode = AsyncMode;\n exports.ConcurrentMode = ConcurrentMode;\n exports.ContextConsumer = ContextConsumer;\n exports.ContextProvider = ContextProvider;\n exports.Element = Element;\n exports.ForwardRef = ForwardRef;\n exports.Fragment = Fragment;\n exports.Lazy = Lazy;\n exports.Memo = Memo;\n exports.Portal = Portal;\n exports.Profiler = Profiler;\n exports.StrictMode = StrictMode;\n exports.Suspense = Suspense;\n exports.isAsyncMode = isAsyncMode;\n exports.isConcurrentMode = isConcurrentMode;\n exports.isContextConsumer = isContextConsumer;\n exports.isContextProvider = isContextProvider;\n exports.isElement = isElement;\n exports.isForwardRef = isForwardRef;\n exports.isFragment = isFragment;\n exports.isLazy = isLazy;\n exports.isMemo = isMemo;\n exports.isPortal = isPortal;\n exports.isProfiler = isProfiler;\n exports.isStrictMode = isStrictMode;\n exports.isSuspense = isSuspense;\n exports.isValidElementType = isValidElementType;\n exports.typeOf = typeOf;\n })();\n }\n });\n var reactIs_development_1 = reactIs_development.AsyncMode;\n var reactIs_development_2 = reactIs_development.ConcurrentMode;\n var reactIs_development_3 = reactIs_development.ContextConsumer;\n var reactIs_development_4 = reactIs_development.ContextProvider;\n var reactIs_development_5 = reactIs_development.Element;\n var reactIs_development_6 = reactIs_development.ForwardRef;\n var reactIs_development_7 = reactIs_development.Fragment;\n var reactIs_development_8 = reactIs_development.Lazy;\n var reactIs_development_9 = reactIs_development.Memo;\n var reactIs_development_10 = reactIs_development.Portal;\n var reactIs_development_11 = reactIs_development.Profiler;\n var reactIs_development_12 = reactIs_development.StrictMode;\n var reactIs_development_13 = reactIs_development.Suspense;\n var reactIs_development_14 = reactIs_development.isAsyncMode;\n var reactIs_development_15 = reactIs_development.isConcurrentMode;\n var reactIs_development_16 = reactIs_development.isContextConsumer;\n var reactIs_development_17 = reactIs_development.isContextProvider;\n var reactIs_development_18 = reactIs_development.isElement;\n var reactIs_development_19 = reactIs_development.isForwardRef;\n var reactIs_development_20 = reactIs_development.isFragment;\n var reactIs_development_21 = reactIs_development.isLazy;\n var reactIs_development_22 = reactIs_development.isMemo;\n var reactIs_development_23 = reactIs_development.isPortal;\n var reactIs_development_24 = reactIs_development.isProfiler;\n var reactIs_development_25 = reactIs_development.isStrictMode;\n var reactIs_development_26 = reactIs_development.isSuspense;\n var reactIs_development_27 = reactIs_development.isValidElementType;\n var reactIs_development_28 = reactIs_development.typeOf;\n\n var reactIs = createCommonjsModule(function (module) {\n\n {\n module.exports = reactIs_development;\n }\n });\n\n /*\n object-assign\n (c) Sindre Sorhus\n @license MIT\n */\n /* eslint-disable no-unused-vars */\n var getOwnPropertySymbols = Object.getOwnPropertySymbols;\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n var propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\n function toObject(val) {\n \tif (val === null || val === undefined) {\n \t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n \t}\n\n \treturn Object(val);\n }\n\n function shouldUseNative() {\n \ttry {\n \t\tif (!Object.assign) {\n \t\t\treturn false;\n \t\t}\n\n \t\t// Detect buggy property enumeration order in older V8 versions.\n\n \t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n \t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n \t\ttest1[5] = 'de';\n \t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n \t\t\treturn false;\n \t\t}\n\n \t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n \t\tvar test2 = {};\n \t\tfor (var i = 0; i < 10; i++) {\n \t\t\ttest2['_' + String.fromCharCode(i)] = i;\n \t\t}\n \t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n \t\t\treturn test2[n];\n \t\t});\n \t\tif (order2.join('') !== '0123456789') {\n \t\t\treturn false;\n \t\t}\n\n \t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n \t\tvar test3 = {};\n \t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n \t\t\ttest3[letter] = letter;\n \t\t});\n \t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n \t\t\t\t'abcdefghijklmnopqrst') {\n \t\t\treturn false;\n \t\t}\n\n \t\treturn true;\n \t} catch (err) {\n \t\t// We don't expect any of the above to throw, but better to be safe.\n \t\treturn false;\n \t}\n }\n\n var objectAssign = shouldUseNative() ? Object.assign : function (target, source) {\n \tvar from;\n \tvar to = toObject(target);\n \tvar symbols;\n\n \tfor (var s = 1; s < arguments.length; s++) {\n \t\tfrom = Object(arguments[s]);\n\n \t\tfor (var key in from) {\n \t\t\tif (hasOwnProperty.call(from, key)) {\n \t\t\t\tto[key] = from[key];\n \t\t\t}\n \t\t}\n\n \t\tif (getOwnPropertySymbols) {\n \t\t\tsymbols = getOwnPropertySymbols(from);\n \t\t\tfor (var i = 0; i < symbols.length; i++) {\n \t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n \t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n \t\t\t\t}\n \t\t\t}\n \t\t}\n \t}\n\n \treturn to;\n };\n\n /**\n * Copyright (c) 2013-present, Facebook, Inc.\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 var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\n var ReactPropTypesSecret_1 = ReactPropTypesSecret;\n\n var has = Function.call.bind(Object.prototype.hasOwnProperty);\n\n var printWarning = function() {};\n\n {\n var ReactPropTypesSecret$1 = ReactPropTypesSecret_1;\n var loggedTypeFailures = {};\n var has$1 = has;\n\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) { /**/ }\n };\n }\n\n /**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\n function checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n {\n for (var typeSpecName in typeSpecs) {\n if (has$1(typeSpecs, typeSpecName)) {\n var error;\n // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n var err = Error(\n (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +\n 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'\n );\n err.name = 'Invariant Violation';\n throw err;\n }\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret$1);\n } catch (ex) {\n error = ex;\n }\n if (error && !(error instanceof Error)) {\n printWarning(\n (componentName || 'React class') + ': type specification of ' +\n location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n 'You may have forgotten to pass an argument to the type checker ' +\n 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n 'shape all require an argument).'\n );\n }\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var stack = getStack ? getStack() : '';\n\n printWarning(\n 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n );\n }\n }\n }\n }\n }\n\n /**\n * Resets warning cache when testing.\n *\n * @private\n */\n checkPropTypes.resetWarningCache = function() {\n {\n loggedTypeFailures = {};\n }\n };\n\n var checkPropTypes_1 = checkPropTypes;\n\n var printWarning$1 = function() {};\n\n {\n printWarning$1 = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n }\n\n function emptyFunctionThatReturnsNull() {\n return null;\n }\n\n var factoryWithTypeCheckers = function(isValidElement, throwOnDirectAccess) {\n /* global Symbol */\n var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n /**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n * var iteratorFn = getIteratorFn(myIterable);\n * if (iteratorFn) {\n * var iterator = iteratorFn.call(myIterable);\n * ...\n * }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\n function getIteratorFn(maybeIterable) {\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n }\n\n /**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n * var Props = require('ReactPropTypes');\n * var MyArticle = React.createClass({\n * propTypes: {\n * // An optional string prop named \"description\".\n * description: Props.string,\n *\n * // A required enum prop named \"category\".\n * category: Props.oneOf(['News','Photos']).isRequired,\n *\n * // A prop named \"dialog\" that requires an instance of Dialog.\n * dialog: Props.instanceOf(Dialog).isRequired\n * },\n * render: function() { ... }\n * });\n *\n * A more formal specification of how these methods are used:\n *\n * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n * decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n * var MyLink = React.createClass({\n * propTypes: {\n * // An optional string or URI prop named \"href\".\n * href: function(props, propName, componentName) {\n * var propValue = props[propName];\n * if (propValue != null && typeof propValue !== 'string' &&\n * !(propValue instanceof URI)) {\n * return new Error(\n * 'Expected a string or an URI for ' + propName + ' in ' +\n * componentName\n * );\n * }\n * }\n * },\n * render: function() {...}\n * });\n *\n * @internal\n */\n\n var ANONYMOUS = '<>';\n\n // Important!\n // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n var ReactPropTypes = {\n array: createPrimitiveTypeChecker('array'),\n bigint: createPrimitiveTypeChecker('bigint'),\n bool: createPrimitiveTypeChecker('boolean'),\n func: createPrimitiveTypeChecker('function'),\n number: createPrimitiveTypeChecker('number'),\n object: createPrimitiveTypeChecker('object'),\n string: createPrimitiveTypeChecker('string'),\n symbol: createPrimitiveTypeChecker('symbol'),\n\n any: createAnyTypeChecker(),\n arrayOf: createArrayOfTypeChecker,\n element: createElementTypeChecker(),\n elementType: createElementTypeTypeChecker(),\n instanceOf: createInstanceTypeChecker,\n node: createNodeChecker(),\n objectOf: createObjectOfTypeChecker,\n oneOf: createEnumTypeChecker,\n oneOfType: createUnionTypeChecker,\n shape: createShapeTypeChecker,\n exact: createStrictShapeTypeChecker,\n };\n\n /**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\n /*eslint-disable no-self-compare*/\n function is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n }\n /*eslint-enable no-self-compare*/\n\n /**\n * We use an Error-like object for backward compatibility as people may call\n * PropTypes directly and inspect their output. However, we don't use real\n * Errors anymore. We don't inspect their stack anyway, and creating them\n * is prohibitively expensive if they are created too often, such as what\n * happens in oneOfType() for any type before the one that matched.\n */\n function PropTypeError(message, data) {\n this.message = message;\n this.data = data && typeof data === 'object' ? data: {};\n this.stack = '';\n }\n // Make `instanceof Error` still work for returned errors.\n PropTypeError.prototype = Error.prototype;\n\n function createChainableTypeChecker(validate) {\n {\n var manualPropTypeCallCache = {};\n var manualPropTypeWarningCount = 0;\n }\n function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n componentName = componentName || ANONYMOUS;\n propFullName = propFullName || propName;\n\n if (secret !== ReactPropTypesSecret_1) {\n if (throwOnDirectAccess) {\n // New behavior only for users of `prop-types` package\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use `PropTypes.checkPropTypes()` to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n } else if (typeof console !== 'undefined') {\n // Old behavior for people using React.PropTypes\n var cacheKey = componentName + ':' + propName;\n if (\n !manualPropTypeCallCache[cacheKey] &&\n // Avoid spamming the console because they are often not actionable except for lib authors\n manualPropTypeWarningCount < 3\n ) {\n printWarning$1(\n 'You are manually calling a React.PropTypes validation ' +\n 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +\n 'and will throw in the standalone `prop-types` package. ' +\n 'You may be seeing this warning due to a third-party PropTypes ' +\n 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'\n );\n manualPropTypeCallCache[cacheKey] = true;\n manualPropTypeWarningCount++;\n }\n }\n }\n if (props[propName] == null) {\n if (isRequired) {\n if (props[propName] === null) {\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n }\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n }\n return null;\n } else {\n return validate(props, propName, componentName, location, propFullName);\n }\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n\n return chainedCheckType;\n }\n\n function createPrimitiveTypeChecker(expectedType) {\n function validate(props, propName, componentName, location, propFullName, secret) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== expectedType) {\n // `propValue` being instance of, say, date/regexp, pass the 'object'\n // check, but we can offer a more precise error message here rather than\n // 'of type `object`'.\n var preciseType = getPreciseType(propValue);\n\n return new PropTypeError(\n 'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'),\n {expectedType: expectedType}\n );\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createAnyTypeChecker() {\n return createChainableTypeChecker(emptyFunctionThatReturnsNull);\n }\n\n function createArrayOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n }\n var propValue = props[propName];\n if (!Array.isArray(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n }\n for (var i = 0; i < propValue.length; i++) {\n var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret_1);\n if (error instanceof Error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!isValidElement(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!reactIs.isValidElementType(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createInstanceTypeChecker(expectedClass) {\n function validate(props, propName, componentName, location, propFullName) {\n if (!(props[propName] instanceof expectedClass)) {\n var expectedClassName = expectedClass.name || ANONYMOUS;\n var actualClassName = getClassName(props[propName]);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createEnumTypeChecker(expectedValues) {\n if (!Array.isArray(expectedValues)) {\n {\n if (arguments.length > 1) {\n printWarning$1(\n 'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +\n 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'\n );\n } else {\n printWarning$1('Invalid argument supplied to oneOf, expected an array.');\n }\n }\n return emptyFunctionThatReturnsNull;\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n for (var i = 0; i < expectedValues.length; i++) {\n if (is(propValue, expectedValues[i])) {\n return null;\n }\n }\n\n var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {\n var type = getPreciseType(value);\n if (type === 'symbol') {\n return String(value);\n }\n return value;\n });\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createObjectOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n }\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n }\n for (var key in propValue) {\n if (has(propValue, key)) {\n var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1);\n if (error instanceof Error) {\n return error;\n }\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createUnionTypeChecker(arrayOfTypeCheckers) {\n if (!Array.isArray(arrayOfTypeCheckers)) {\n printWarning$1('Invalid argument supplied to oneOfType, expected an instance of array.');\n return emptyFunctionThatReturnsNull;\n }\n\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n if (typeof checker !== 'function') {\n printWarning$1(\n 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\n 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'\n );\n return emptyFunctionThatReturnsNull;\n }\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var expectedTypes = [];\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret_1);\n if (checkerResult == null) {\n return null;\n }\n if (checkerResult.data && has(checkerResult.data, 'expectedType')) {\n expectedTypes.push(checkerResult.data.expectedType);\n }\n }\n var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': '';\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createNodeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n if (!isNode(props[propName])) {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function invalidValidatorError(componentName, location, propFullName, key, type) {\n return new PropTypeError(\n (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + type + '`.'\n );\n }\n\n function createShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n for (var key in shapeTypes) {\n var checker = shapeTypes[key];\n if (typeof checker !== 'function') {\n return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1);\n if (error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createStrictShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n // We need to check all keys in case some are required but missing from props.\n var allKeys = objectAssign({}, props[propName], shapeTypes);\n for (var key in allKeys) {\n var checker = shapeTypes[key];\n if (has(shapeTypes, key) && typeof checker !== 'function') {\n return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n }\n if (!checker) {\n return new PropTypeError(\n 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\n '\\nBad object: ' + JSON.stringify(props[propName], null, ' ') +\n '\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')\n );\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1);\n if (error) {\n return error;\n }\n }\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function isNode(propValue) {\n switch (typeof propValue) {\n case 'number':\n case 'string':\n case 'undefined':\n return true;\n case 'boolean':\n return !propValue;\n case 'object':\n if (Array.isArray(propValue)) {\n return propValue.every(isNode);\n }\n if (propValue === null || isValidElement(propValue)) {\n return true;\n }\n\n var iteratorFn = getIteratorFn(propValue);\n if (iteratorFn) {\n var iterator = iteratorFn.call(propValue);\n var step;\n if (iteratorFn !== propValue.entries) {\n while (!(step = iterator.next()).done) {\n if (!isNode(step.value)) {\n return false;\n }\n }\n } else {\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n if (!isNode(entry[1])) {\n return false;\n }\n }\n }\n }\n } else {\n return false;\n }\n\n return true;\n default:\n return false;\n }\n }\n\n function isSymbol(propType, propValue) {\n // Native Symbol.\n if (propType === 'symbol') {\n return true;\n }\n\n // falsy value can't be a Symbol\n if (!propValue) {\n return false;\n }\n\n // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n if (propValue['@@toStringTag'] === 'Symbol') {\n return true;\n }\n\n // Fallback for non-spec compliant Symbols which are polyfilled.\n if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n return true;\n }\n\n return false;\n }\n\n // Equivalent of `typeof` but with special handling for array and regexp.\n function getPropType(propValue) {\n var propType = typeof propValue;\n if (Array.isArray(propValue)) {\n return 'array';\n }\n if (propValue instanceof RegExp) {\n // Old webkits (at least until Android 4.0) return 'function' rather than\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n // passes PropTypes.object.\n return 'object';\n }\n if (isSymbol(propType, propValue)) {\n return 'symbol';\n }\n return propType;\n }\n\n // This handles more types than `getPropType`. Only used for error messages.\n // See `createPrimitiveTypeChecker`.\n function getPreciseType(propValue) {\n if (typeof propValue === 'undefined' || propValue === null) {\n return '' + propValue;\n }\n var propType = getPropType(propValue);\n if (propType === 'object') {\n if (propValue instanceof Date) {\n return 'date';\n } else if (propValue instanceof RegExp) {\n return 'regexp';\n }\n }\n return propType;\n }\n\n // Returns a string that is postfixed to a warning about an invalid type.\n // For example, \"undefined\" or \"of type array\"\n function getPostfixForTypeWarning(value) {\n var type = getPreciseType(value);\n switch (type) {\n case 'array':\n case 'object':\n return 'an ' + type;\n case 'boolean':\n case 'date':\n case 'regexp':\n return 'a ' + type;\n default:\n return type;\n }\n }\n\n // Returns class name of the object, if any.\n function getClassName(propValue) {\n if (!propValue.constructor || !propValue.constructor.name) {\n return ANONYMOUS;\n }\n return propValue.constructor.name;\n }\n\n ReactPropTypes.checkPropTypes = checkPropTypes_1;\n ReactPropTypes.resetWarningCache = checkPropTypes_1.resetWarningCache;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n };\n\n var propTypes = createCommonjsModule(function (module) {\n /**\n * Copyright (c) 2013-present, Facebook, Inc.\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 var ReactIs = reactIs;\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = factoryWithTypeCheckers(ReactIs.isElement, throwOnDirectAccess);\n }\n });\n\n var _excluded = [\"forwardedRef\"];\n function withContext(Context) {\n var propName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"context\";\n return function wrap(Component) {\n var EnhanceContext = /*#__PURE__*/function (_React$Component) {\n _inherits(EnhanceContext, _React$Component);\n\n var _super = _createSuper(EnhanceContext);\n\n function EnhanceContext() {\n _classCallCheck(this, EnhanceContext);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(EnhanceContext, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n forwardedRef = _this$props.forwardedRef,\n rest = _objectWithoutProperties(_this$props, _excluded);\n\n return /*#__PURE__*/React__default.createElement(Context.Consumer, null, function (value) {\n var _custom;\n\n var custom = (_custom = {}, _defineProperty(_custom, propName, value), _defineProperty(_custom, \"ref\", forwardedRef), _custom);\n return /*#__PURE__*/React__default.createElement(Component, _extends({}, custom, rest));\n });\n }\n }]);\n\n return EnhanceContext;\n }(React__default.Component);\n\n var name = Component.displayName || Component.name || \"Component\";\n var consumerName = Context.Consumer.displayName || Context.Consumer.name || \"Context.Consumer\";\n\n function enhanceForwardRef(props, ref) {\n return /*#__PURE__*/React__default.createElement(EnhanceContext, _extends({}, props, {\n forwardedRef: ref\n }));\n }\n\n enhanceForwardRef.displayName = \"enhanceContext-\".concat(consumerName, \"(\").concat(name, \")\");\n var FC = React__default.forwardRef(enhanceForwardRef);\n FC.defaultProps = Component.defaultProps;\n FC.propTypes = Component.propTypes;\n return FC;\n };\n }\n\n /**\n * Registry to subscribe, unsubscribe and update data of menus.\n *\n * menu data: {\n * instance: react instance\n * triggerLayout: Object - layout of menu trigger if known\n * optionsLayout: Object - layout of menu options if known\n * optionsCustomStyles: Object - custom styles of options\n * }\n */\n\n function makeMenuRegistry() {\n var menus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Map();\n\n /**\n * Subscribes menu instance.\n */\n function subscribe(instance) {\n var name = instance.getName();\n\n if (menus.get(name)) {\n console.warn(\"incorrect usage of popup menu - menu with name \".concat(name, \" already exists\"));\n }\n\n menus.set(name, {\n name: name,\n instance: instance\n });\n }\n /**\n * Unsubscribes menu instance.\n */\n\n\n function unsubscribe(instance) {\n menus.delete(instance.getName());\n }\n /**\n * Updates layout infomration.\n */\n\n\n function updateLayoutInfo(name) {\n var layouts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!menus.has(name)) {\n return;\n }\n\n var menu = Object.assign({}, menus.get(name));\n\n if (layouts.hasOwnProperty('triggerLayout')) {\n menu.triggerLayout = layouts.triggerLayout;\n }\n\n if (layouts.hasOwnProperty('optionsLayout')) {\n menu.optionsLayout = layouts.optionsLayout;\n }\n\n menus.set(name, menu);\n }\n\n function setOptionsCustomStyles(name, optionsCustomStyles) {\n if (!menus.has(name)) {\n return;\n }\n\n var menu = _objectSpread2(_objectSpread2({}, menus.get(name)), {}, {\n optionsCustomStyles: optionsCustomStyles\n });\n\n menus.set(name, menu);\n }\n /**\n * Get `menu data` by name.\n */\n\n\n function getMenu(name) {\n return menus.get(name);\n }\n /**\n * Returns all subscribed menus as array of `menu data`\n */\n\n\n function getAll() {\n return iterator2array(menus.values());\n }\n\n return {\n subscribe: subscribe,\n unsubscribe: unsubscribe,\n updateLayoutInfo: updateLayoutInfo,\n getMenu: getMenu,\n getAll: getAll,\n setOptionsCustomStyles: setOptionsCustomStyles\n };\n }\n\n var OPEN_ANIM_DURATION = 225;\n var CLOSE_ANIM_DURATION = 195;\n var USE_NATIVE_DRIVER = reactNative.Platform.OS !== \"web\";\n\n var Backdrop = /*#__PURE__*/function (_Component) {\n _inherits(Backdrop, _Component);\n\n var _super = _createSuper(Backdrop);\n\n function Backdrop() {\n var _this;\n\n _classCallCheck(this, Backdrop);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n _this.fadeAnim = new reactNative.Animated.Value(0.001);\n return _this;\n }\n\n _createClass(Backdrop, [{\n key: \"open\",\n value: function open() {\n var _this2 = this;\n\n return new Promise(function (resolve) {\n reactNative.Animated.timing(_this2.fadeAnim, {\n duration: OPEN_ANIM_DURATION,\n toValue: 1,\n useNativeDriver: USE_NATIVE_DRIVER\n }).start(resolve);\n });\n }\n }, {\n key: \"close\",\n value: function close() {\n var _this3 = this;\n\n return new Promise(function (resolve) {\n reactNative.Animated.timing(_this3.fadeAnim, {\n duration: CLOSE_ANIM_DURATION,\n toValue: 0,\n useNativeDriver: USE_NATIVE_DRIVER\n }).start(resolve);\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n onPress = _this$props.onPress,\n style = _this$props.style;\n return /*#__PURE__*/React__default.createElement(reactNative.TouchableWithoutFeedback, {\n onPress: onPress\n }, /*#__PURE__*/React__default.createElement(reactNative.Animated.View, {\n style: [styles.fullscreen, {\n opacity: this.fadeAnim\n }]\n }, /*#__PURE__*/React__default.createElement(reactNative.View, {\n style: [styles.fullscreen, style]\n })));\n }\n }]);\n\n return Backdrop;\n }(React.Component);\n\n Backdrop.propTypes = {\n onPress: propTypes.func.isRequired\n };\n var styles = reactNative.StyleSheet.create({\n fullscreen: {\n opacity: 0,\n position: 'absolute',\n top: 0,\n left: 0,\n bottom: 0,\n right: 0\n }\n });\n\n var CFG = {\n debug: false\n };\n /**\n * Debug logger depending on `Menu.debug` static porperty.\n */\n\n var debug = function debug() {\n var _console;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n CFG.debug && (_console = console).log.apply(_console, ['react-native-popup-menu'].concat(args));\n };\n\n var MenuPlaceholder = /*#__PURE__*/function (_Component) {\n _inherits(MenuPlaceholder, _Component);\n\n var _super = _createSuper(MenuPlaceholder);\n\n function MenuPlaceholder(props) {\n var _this;\n\n _classCallCheck(this, MenuPlaceholder);\n\n _this = _super.call(this, props);\n _this.state = {};\n return _this;\n }\n\n _createClass(MenuPlaceholder, [{\n key: \"shouldComponentUpdate\",\n value: function shouldComponentUpdate() {\n // don't terminate closing animation\n return !this.props.ctx._isMenuClosing;\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n ctx = _this$props.ctx,\n backdropStyles = _this$props.backdropStyles;\n\n var shouldRenderMenu = ctx.isMenuOpen() && ctx._isInitialized();\n\n debug('MenuPlaceholder should render', shouldRenderMenu);\n\n if (!shouldRenderMenu) {\n return null;\n }\n\n return /*#__PURE__*/React__default.createElement(reactNative.View, {\n style: styles$1.placeholder\n }, /*#__PURE__*/React__default.createElement(Backdrop, {\n onPress: ctx._onBackdropPress,\n style: backdropStyles,\n ref: ctx.onBackdropRef\n }), ctx._makeOptions());\n }\n }]);\n\n return MenuPlaceholder;\n }(React.Component);\n var styles$1 = reactNative.StyleSheet.create({\n placeholder: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n overflow: 'hidden'\n }\n });\n\n var _excluded$1 = [\"style\", \"children\", \"layouts\"];\n var computePosition = function computePosition(_ref) {\n var windowLayout = _ref.windowLayout;\n return {\n top: windowLayout.height,\n left: windowLayout.width\n };\n };\n\n var MenuOutside = function MenuOutside(props) {\n var style = props.style,\n children = props.children,\n layouts = props.layouts,\n other = _objectWithoutProperties(props, _excluded$1);\n\n var position = computePosition(layouts);\n return /*#__PURE__*/React__default.createElement(reactNative.View, _extends({}, other, {\n style: [styles$2.options, style, position],\n collapsable: false\n }), children);\n };\n\n var styles$2 = reactNative.StyleSheet.create({\n options: {\n position: 'absolute'\n }\n });\n\n var defaultOptionsContainerRenderer = function defaultOptionsContainerRenderer(options) {\n return options;\n };\n\n var layoutsEqual = function layoutsEqual(a, b) {\n return a === b || a && b && a.width === b.width && a.height === b.height;\n };\n\n if (!React__default.forwardRef) {\n throw new Error('This version of popup-menu requires RN 0.55+. Check our compatibility table.');\n }\n\n var PopupMenuContext = React.createContext({});\n var withCtx = withContext(PopupMenuContext, \"ctx\"); // count of MenuProvider instances\n\n var instanceCount = 0;\n\n var MenuProvider = /*#__PURE__*/function (_Component) {\n _inherits(MenuProvider, _Component);\n\n var _super = _createSuper(MenuProvider);\n\n function MenuProvider(props) {\n var _this;\n\n _classCallCheck(this, MenuProvider);\n\n _this = _super.call(this, props);\n\n _defineProperty(_assertThisInitialized(_this), \"_handleBackButton\", function () {\n var backHandler = _this.props.backHandler;\n debug('_handleBackButton called', backHandler); // Default handler if true is passed\n\n if (backHandler === true) {\n if (_this.isMenuOpen()) {\n _this.closeMenu();\n\n return true;\n }\n } // Custom handler called with MenuProvider instance id function is passed\n\n\n if (typeof backHandler === 'function') {\n return backHandler(_assertThisInitialized(_this));\n }\n\n return false;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onBackdropRef\", function (r) {\n _this.backdropRef = r;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onOptionsRef\", function (r) {\n _this.optionsRef = r;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_onPlaceholderRef\", function (r) {\n return _this._placeholderRef = r;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_onBackdropPress\", function () {\n debug('on backdrop press');\n\n var menu = _this._getOpenedMenu();\n\n if (menu) {\n menu.instance.props.onBackdropPress();\n }\n\n _this.closeMenu();\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_onLayout\", function (_ref) {\n var layout = _ref.nativeEvent.layout;\n\n if (layoutsEqual(_this._ownLayout, layout)) {\n return;\n }\n\n _this._ownLayout = layout;\n debug('context layout has changed', _this._ownLayout);\n\n if (!_this.isMenuOpen()) {\n return;\n }\n\n var _this$_getOpenedMenu = _this._getOpenedMenu(),\n instance = _this$_getOpenedMenu.instance;\n\n var trigger = instance._getTrigger();\n\n measure(trigger).then(function (triggerLayout) {\n debug('got trigger measurements after context layout change', triggerLayout);\n\n _this._menuRegistry.updateLayoutInfo(instance.getName(), {\n triggerLayout: triggerLayout\n }); // force update as own layout has changed\n\n\n _this._notify(true);\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_onSafeAreaLayout\", function (_ref2) {\n var layout = _ref2.nativeEvent.layout;\n\n if (layoutsEqual(_this._safeAreaLayout, layout)) {\n return;\n }\n\n _this._safeAreaLayout = layout;\n debug('safeArea layout has changed', _this._safeAreaLayout);\n\n if (!_this.isMenuOpen()) {\n return;\n }\n\n _this._notify(true);\n });\n\n _this._menuRegistry = makeMenuRegistry();\n _this._isMenuClosing = false;\n _this._isBackHandlerRegistered = false;\n var menuActions = {\n openMenu: function openMenu(name) {\n return _this.openMenu(name);\n },\n closeMenu: function closeMenu() {\n return _this.closeMenu();\n },\n toggleMenu: function toggleMenu(name) {\n return _this.toggleMenu(name);\n },\n isMenuOpen: function isMenuOpen() {\n return _this.isMenuOpen();\n },\n _getOpenedMenu: function _getOpenedMenu() {\n return _this._getOpenedMenu();\n },\n _notify: function _notify(force) {\n return _this._notify(force);\n }\n };\n _this.menuCtx = {\n menuRegistry: _this._menuRegistry,\n menuActions: menuActions\n };\n return _this;\n }\n\n _createClass(MenuProvider, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this$props = this.props,\n customStyles = _this$props.customStyles,\n skipInstanceCheck = _this$props.skipInstanceCheck;\n\n if (customStyles.menuContextWrapper) {\n console.warn('menuContextWrapper custom style is deprecated and it might be removed in future releases, use menuProviderWrapper instead.');\n }\n\n if (!skipInstanceCheck) {\n instanceCount++;\n }\n\n if (instanceCount > 1) {\n console.warn('In most cases you should not have more MenuProviders in your app (see API documentation). In other cases use skipInstanceCheck prop.');\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n debug('unmounting menu provider');\n\n if (this._isBackHandlerRegistered) {\n reactNative.BackHandler.removeEventListener('hardwareBackPress', this._handleBackButton);\n }\n\n var skipInstanceCheck = this.props.skipInstanceCheck;\n\n if (!skipInstanceCheck) {\n instanceCount--;\n }\n }\n }, {\n key: \"isMenuOpen\",\n value: function isMenuOpen() {\n return !!this._getOpenedMenu();\n }\n }, {\n key: \"openMenu\",\n value: function openMenu(name) {\n var menu = this._menuRegistry.getMenu(name);\n\n if (!menu) {\n console.warn(\"menu with name \".concat(name, \" does not exist\"));\n return Promise.resolve();\n }\n\n debug('open menu', name);\n\n if (!this._isBackHandlerRegistered) {\n // delay menu registration until the menu is really opened (and thus this back handler will be called \"sooner\")\n // too soon registration can cause another back handlers (e.g. react navigation) to be called instead of our back handler\n reactNative.BackHandler.addEventListener('hardwareBackPress', this._handleBackButton);\n this._isBackHandlerRegistered = true;\n }\n\n menu.instance._setOpened(true);\n\n return this._notify();\n }\n }, {\n key: \"closeMenu\",\n value: function closeMenu() {\n // has no effect on controlled menus\n debug('close menu');\n\n this._menuRegistry.getAll().filter(function (menu) {\n return menu.instance._getOpened();\n }).forEach(function (menu) {\n return menu.instance._setOpened(false);\n });\n\n return this._notify();\n }\n }, {\n key: \"_invalidateTriggerLayouts\",\n value: function _invalidateTriggerLayouts() {\n var _this2 = this;\n\n // invalidate layouts for closed menus,\n // both controlled and uncontrolled menus\n this._menuRegistry.getAll().filter(function (menu) {\n return !menu.instance.isOpen();\n }).forEach(function (menu) {\n _this2._menuRegistry.updateLayoutInfo(menu.name, {\n triggerLayout: undefined\n });\n });\n }\n }, {\n key: \"_beforeClose\",\n value: function _beforeClose(menu) {\n var _this3 = this;\n\n debug('before close', menu.name);\n var hideMenu = this.optionsRef && this.optionsRef.close && this.optionsRef.close() || Promise.resolve();\n var hideBackdrop = this.backdropRef && this.backdropRef.close();\n\n this._invalidateTriggerLayouts();\n\n this._isMenuClosing = true;\n return Promise.all([hideMenu, hideBackdrop]).then(function () {\n _this3._isMenuClosing = false;\n }).catch(function (err) {\n _this3._isMenuClosing = false;\n throw err;\n });\n }\n }, {\n key: \"toggleMenu\",\n value: function toggleMenu(name) {\n var menu = this._menuRegistry.getMenu(name);\n\n if (!menu) {\n console.warn(\"menu with name \".concat(name, \" does not exist\"));\n return Promise.resolve();\n }\n\n debug('toggle menu', name);\n\n if (menu.instance._getOpened()) {\n return this.closeMenu();\n } else {\n return this.openMenu(name);\n }\n }\n }, {\n key: \"_notify\",\n value: function _notify(forceUpdate) {\n var _this4 = this;\n\n var NULL = {};\n var prev = this.openedMenu || NULL;\n var next = this._menuRegistry.getAll().find(function (menu) {\n return menu.instance.isOpen();\n }) || NULL; // set newly opened menu before any callbacks are called\n\n this.openedMenu = next === NULL ? undefined : next;\n\n if (!forceUpdate && !this._isRenderNeeded(prev, next)) {\n return Promise.resolve();\n }\n\n debug('notify: next menu:', next.name, ' prev menu:', prev.name);\n var afterSetState = undefined;\n\n var beforeSetState = function beforeSetState() {\n return Promise.resolve();\n };\n\n if (prev.name !== next.name) {\n if (prev !== NULL && !prev.instance.isOpen()) {\n beforeSetState = function beforeSetState() {\n return _this4._beforeClose(prev).then(function () {\n return prev.instance.props.onClose();\n });\n };\n }\n\n if (next !== NULL) {\n next.instance.props.onOpen();\n\n afterSetState = function afterSetState() {\n return _this4._initOpen(next);\n };\n }\n }\n\n return beforeSetState().then(function () {\n if (!_this4._placeholderRef) {\n debug('setState ignored - maybe the context was unmounted');\n return;\n }\n\n _this4._placeholderRef.setState({\n openedMenuName: _this4.openedMenu && _this4.openedMenu.name\n }, afterSetState);\n\n debug('notify ended');\n });\n }\n /**\n Compares states of opened menu to determine if rerender is needed.\n */\n\n }, {\n key: \"_isRenderNeeded\",\n value: function _isRenderNeeded(prev, next) {\n if (prev === next) {\n debug('_isRenderNeeded: skipping - no change');\n return false;\n }\n\n if (prev.name !== next.name) {\n return true;\n }\n\n var triggerLayout = next.triggerLayout,\n optionsLayout = next.optionsLayout;\n\n if (!triggerLayout || !optionsLayout) {\n debug('_isRenderNeeded: skipping - no trigger or options layout');\n return false;\n }\n\n return true;\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n style = _this$props2.style,\n customStyles = _this$props2.customStyles;\n debug('render menu', this.isMenuOpen(), this._ownLayout);\n return /*#__PURE__*/React__default.createElement(PopupMenuContext.Provider, {\n value: this.menuCtx\n }, /*#__PURE__*/React__default.createElement(reactNative.View, {\n style: styles$3.flex1,\n onLayout: this._onLayout\n }, /*#__PURE__*/React__default.createElement(reactNative.View, {\n style: [styles$3.flex1, customStyles.menuContextWrapper, customStyles.menuProviderWrapper, style]\n }, this.props.children), /*#__PURE__*/React__default.createElement(reactNative.SafeAreaView, {\n style: styles$3.safeArea,\n pointerEvents: \"box-none\"\n }, /*#__PURE__*/React__default.createElement(reactNative.View, {\n style: styles$3.flex1,\n collapsable: false,\n pointerEvents: \"box-none\",\n onLayout: this._onSafeAreaLayout\n }), /*#__PURE__*/React__default.createElement(MenuPlaceholder, {\n ctx: this,\n backdropStyles: customStyles.backdrop,\n ref: this._onPlaceholderRef\n }))));\n }\n }, {\n key: \"_getOpenedMenu\",\n value: function _getOpenedMenu() {\n var name = this._placeholderRef && this._placeholderRef.state.openedMenuName;\n var menu = name ? this._menuRegistry.getMenu(name) : undefined;\n debug('_getOpenedMenu', name, !!menu);\n return menu;\n }\n }, {\n key: \"_isInitialized\",\n value: function _isInitialized() {\n return !!this._ownLayout;\n }\n }, {\n key: \"_initOpen\",\n value: function _initOpen(menu) {\n var _this5 = this;\n\n debug('opening', menu.name);\n\n var trigger = menu.instance._getTrigger();\n\n measure(trigger).then(function (triggerLayout) {\n debug('got trigger measurements', triggerLayout);\n\n _this5._menuRegistry.updateLayoutInfo(menu.name, {\n triggerLayout: triggerLayout\n });\n\n _this5.backdropRef && _this5.backdropRef.open();\n\n _this5._notify();\n });\n }\n }, {\n key: \"_onOptionsLayout\",\n value: function _onOptionsLayout(e, name, isOutside) {\n var optionsLayout = e.nativeEvent.layout;\n optionsLayout.isOutside = isOutside;\n debug('got options layout', optionsLayout);\n\n this._menuRegistry.updateLayoutInfo(name, {\n optionsLayout: optionsLayout\n });\n\n this._notify();\n }\n }, {\n key: \"_makeOptions\",\n value: function _makeOptions() {\n var _this6 = this;\n\n var _this$_getOpenedMenu2 = this._getOpenedMenu(),\n instance = _this$_getOpenedMenu2.instance,\n triggerLayout = _this$_getOpenedMenu2.triggerLayout,\n optionsLayout = _this$_getOpenedMenu2.optionsLayout;\n\n var options = instance._getOptions();\n\n var _instance$props = instance.props,\n renderer = _instance$props.renderer,\n rendererProps = _instance$props.rendererProps;\n var windowLayout = this._ownLayout;\n var safeAreaLayout = this._safeAreaLayout;\n var _options$props = options.props,\n optionsContainerStyle = _options$props.optionsContainerStyle,\n renderOptionsContainer = _options$props.renderOptionsContainer,\n customStyles = _options$props.customStyles;\n var optionsRenderer = renderOptionsContainer || defaultOptionsContainerRenderer;\n var isOutside = !triggerLayout || !optionsLayout;\n\n var onLayout = function onLayout(e) {\n return _this6._onOptionsLayout(e, instance.getName(), isOutside);\n };\n\n var style = [optionsContainerStyle, customStyles.optionsContainer];\n var layouts = {\n windowLayout: windowLayout,\n triggerLayout: triggerLayout,\n optionsLayout: optionsLayout,\n safeAreaLayout: safeAreaLayout\n };\n\n var props = _objectSpread2(_objectSpread2({}, rendererProps), {}, {\n style: style,\n onLayout: onLayout,\n layouts: layouts\n });\n\n var optionsType = isOutside ? MenuOutside : renderer;\n\n if (isClassComponent(optionsType)) {\n props.ref = this.onOptionsRef;\n }\n\n return React__default.createElement(optionsType, props, optionsRenderer(options));\n }\n }]);\n\n return MenuProvider;\n }(React.Component);\n MenuProvider.propTypes = {\n customStyles: propTypes.object,\n backHandler: propTypes.oneOfType([propTypes.bool, propTypes.func]),\n skipInstanceCheck: propTypes.bool\n };\n MenuProvider.defaultProps = {\n customStyles: {},\n backHandler: false,\n skipInstanceCheck: false\n };\n var styles$3 = reactNative.StyleSheet.create({\n flex1: {\n flex: 1\n },\n safeArea: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0\n }\n });\n\n var MenuOptions = /*#__PURE__*/function (_React$Component) {\n _inherits(MenuOptions, _React$Component);\n\n var _super = _createSuper(MenuOptions);\n\n function MenuOptions() {\n _classCallCheck(this, MenuOptions);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(MenuOptions, [{\n key: \"updateCustomStyles\",\n value: function updateCustomStyles(_props) {\n var customStyles = _props.customStyles;\n\n var menu = this.props.ctx.menuActions._getOpenedMenu(); // FIXME react 16.3 workaround for ControlledExample!\n\n\n if (!menu) return;\n var menuName = menu.instance.getName();\n this.props.ctx.menuRegistry.setOptionsCustomStyles(menuName, customStyles);\n }\n }, {\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.updateCustomStyles(this.props);\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n this.updateCustomStyles(this.props);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n customStyles = _this$props.customStyles,\n style = _this$props.style,\n children = _this$props.children;\n return /*#__PURE__*/React__default.createElement(reactNative.View, {\n style: [customStyles.optionsWrapper, style]\n }, children);\n }\n }]);\n\n return MenuOptions;\n }(React__default.Component);\n MenuOptions.propTypes = {\n customStyles: propTypes.object,\n renderOptionsContainer: propTypes.func,\n optionsContainerStyle: propTypes.oneOfType([propTypes.object, propTypes.number, propTypes.array])\n };\n MenuOptions.defaultProps = {\n customStyles: {}\n };\n var MenuOptions$1 = withCtx(MenuOptions);\n\n var _excluded$2 = [\"disabled\", \"onRef\", \"text\", \"children\", \"style\", \"customStyles\", \"menuName\", \"triggerOnLongPress\", \"onAlternativeAction\", \"testID\"];\n var MenuTrigger = /*#__PURE__*/function (_Component) {\n _inherits(MenuTrigger, _Component);\n\n var _super = _createSuper(MenuTrigger);\n\n function MenuTrigger() {\n _classCallCheck(this, MenuTrigger);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(MenuTrigger, [{\n key: \"_onPress\",\n value: function _onPress() {\n debug('trigger onPress');\n this.props.onPress && this.props.onPress();\n this.props.ctx.menuActions.openMenu(this.props.menuName);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this = this;\n\n var _this$props = this.props,\n disabled = _this$props.disabled,\n onRef = _this$props.onRef,\n text = _this$props.text,\n children = _this$props.children,\n style = _this$props.style,\n customStyles = _this$props.customStyles,\n menuName = _this$props.menuName,\n triggerOnLongPress = _this$props.triggerOnLongPress,\n onAlternativeAction = _this$props.onAlternativeAction,\n testID = _this$props.testID,\n other = _objectWithoutProperties(_this$props, _excluded$2);\n\n var onPress = function onPress() {\n return !disabled && _this._onPress();\n };\n\n var _makeTouchable = makeTouchable(customStyles.TriggerTouchableComponent),\n Touchable = _makeTouchable.Touchable,\n defaultTouchableProps = _makeTouchable.defaultTouchableProps;\n\n return /*#__PURE__*/React__default.createElement(reactNative.View, {\n ref: onRef,\n collapsable: false,\n style: customStyles.triggerOuterWrapper\n }, /*#__PURE__*/React__default.createElement(Touchable, _extends({\n testID: testID,\n onPress: triggerOnLongPress ? onAlternativeAction : onPress,\n onLongPress: triggerOnLongPress ? onPress : onAlternativeAction\n }, defaultTouchableProps, customStyles.triggerTouchable), /*#__PURE__*/React__default.createElement(reactNative.View, _extends({}, other, {\n style: [customStyles.triggerWrapper, style]\n }), text ? /*#__PURE__*/React__default.createElement(reactNative.Text, {\n style: customStyles.triggerText\n }, text) : children)));\n }\n }]);\n\n return MenuTrigger;\n }(React.Component);\n MenuTrigger.propTypes = {\n disabled: propTypes.bool,\n text: propTypes.string,\n onPress: propTypes.func,\n onAlternativeAction: propTypes.func,\n customStyles: propTypes.object,\n triggerOnLongPress: propTypes.bool,\n testID: propTypes.string\n };\n MenuTrigger.defaultProps = {\n disabled: false,\n customStyles: {},\n testID: undefined\n };\n var MenuTrigger$1 = withCtx(MenuTrigger);\n\n var _excluded$3 = [\"style\", \"children\", \"layouts\"];\n\n var axisPosition = function axisPosition(oDim, wDim, tPos, tDim) {\n // if options are bigger than window dimension, then render at 0\n if (oDim > wDim) {\n return 0;\n } // render at trigger position if possible\n\n\n if (tPos + oDim <= wDim) {\n return tPos;\n } // aligned to the trigger from the bottom (right)\n\n\n if (tPos + tDim - oDim >= 0) {\n return tPos + tDim - oDim;\n } // compute center position\n\n\n var pos = Math.round(tPos + tDim / 2 - oDim / 2); // check top boundary\n\n if (pos < 0) {\n return 0;\n } // check bottom boundary\n\n\n if (pos + oDim > wDim) {\n return wDim - oDim;\n } // if everything ok, render in center position\n\n\n return pos;\n };\n\n function fit(pos, len, minPos, maxPos) {\n if (pos === undefined) {\n return undefined;\n }\n\n if (pos + len > maxPos) {\n pos = maxPos - len;\n }\n\n if (pos < minPos) {\n pos = minPos;\n }\n\n return pos;\n } // fits options (position) into safeArea\n\n\n var fitPositionIntoSafeArea = function fitPositionIntoSafeArea(position, layouts) {\n var windowLayout = layouts.windowLayout,\n safeAreaLayout = layouts.safeAreaLayout,\n optionsLayout = layouts.optionsLayout;\n\n if (!safeAreaLayout) {\n return position;\n }\n\n var saX = safeAreaLayout.x,\n saY = safeAreaLayout.y,\n saHeight = safeAreaLayout.height,\n saWidth = safeAreaLayout.width;\n var oHeight = optionsLayout.height,\n oWidth = optionsLayout.width;\n var wWidth = windowLayout.width;\n var top = position.top,\n left = position.left,\n right = position.right;\n top = fit(top, oHeight, saY, saY + saHeight);\n left = fit(left, oWidth, saX, saX + saWidth);\n right = fit(right, oWidth, wWidth - saX - saWidth, saX);\n return {\n top: top,\n left: left,\n right: right\n };\n };\n var computePosition$1 = function computePosition(layouts, isRTL) {\n var windowLayout = layouts.windowLayout,\n triggerLayout = layouts.triggerLayout,\n optionsLayout = layouts.optionsLayout;\n var wX = windowLayout.x,\n wY = windowLayout.y,\n wWidth = windowLayout.width,\n wHeight = windowLayout.height;\n var tX = triggerLayout.x,\n tY = triggerLayout.y,\n tHeight = triggerLayout.height,\n tWidth = triggerLayout.width;\n var oHeight = optionsLayout.height,\n oWidth = optionsLayout.width;\n var top = axisPosition(oHeight, wHeight, tY - wY, tHeight);\n var left = axisPosition(oWidth, wWidth, tX - wX, tWidth);\n var start = isRTL ? 'right' : 'left';\n\n var position = _defineProperty({\n top: top\n }, start, left);\n\n return fitPositionIntoSafeArea(position, layouts);\n };\n\n var ContextMenu = /*#__PURE__*/function (_React$Component) {\n _inherits(ContextMenu, _React$Component);\n\n var _super = _createSuper(ContextMenu);\n\n function ContextMenu(props) {\n var _this;\n\n _classCallCheck(this, ContextMenu);\n\n _this = _super.call(this, props);\n _this.state = {\n scaleAnim: new reactNative.Animated.Value(0.1)\n };\n return _this;\n }\n\n _createClass(ContextMenu, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n reactNative.Animated.timing(this.state.scaleAnim, {\n duration: OPEN_ANIM_DURATION,\n toValue: 1,\n easing: reactNative.Easing.out(reactNative.Easing.cubic),\n useNativeDriver: USE_NATIVE_DRIVER\n }).start();\n }\n }, {\n key: \"close\",\n value: function close() {\n var _this2 = this;\n\n return new Promise(function (resolve) {\n reactNative.Animated.timing(_this2.state.scaleAnim, {\n duration: CLOSE_ANIM_DURATION,\n toValue: 0,\n easing: reactNative.Easing.in(reactNative.Easing.cubic),\n useNativeDriver: USE_NATIVE_DRIVER\n }).start(resolve);\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n style = _this$props.style,\n children = _this$props.children,\n layouts = _this$props.layouts,\n other = _objectWithoutProperties(_this$props, _excluded$3);\n\n var animation = {\n transform: [{\n scale: this.state.scaleAnim\n }],\n opacity: this.state.scaleAnim\n };\n var position = computePosition$1(layouts, reactNative.I18nManager.isRTL);\n return /*#__PURE__*/React__default.createElement(reactNative.Animated.View, _extends({}, other, {\n style: [styles$4.options, style, animation, position]\n }), children);\n }\n }]);\n\n return ContextMenu;\n }(React__default.Component); // public exports\n ContextMenu.computePosition = computePosition$1;\n ContextMenu.fitPositionIntoSafeArea = fitPositionIntoSafeArea;\n var styles$4 = reactNative.StyleSheet.create({\n options: {\n position: 'absolute',\n borderRadius: 2,\n backgroundColor: 'white',\n width: reactNative.PixelRatio.roundToNearestPixel(200),\n // Shadow only works on iOS.\n shadowColor: 'black',\n shadowOpacity: 0.3,\n shadowOffset: {\n width: 3,\n height: 3\n },\n shadowRadius: 4,\n // This will elevate the view on Android, causing shadow to be drawn.\n elevation: 5\n }\n });\n\n var isRegularComponent = function isRegularComponent(c) {\n return c.type !== MenuOptions$1 && c.type !== MenuTrigger$1;\n };\n\n var isTrigger = function isTrigger(c) {\n return c.type === MenuTrigger$1;\n };\n\n var isMenuOptions = function isMenuOptions(c) {\n return c.type === MenuOptions$1;\n };\n\n var Menu = /*#__PURE__*/function (_Component) {\n _inherits(Menu, _Component);\n\n var _super = _createSuper(Menu);\n\n function Menu(props) {\n var _this;\n\n _classCallCheck(this, Menu);\n\n _this = _super.call(this, props);\n _this._name = _this.props.name || makeName();\n _this._forceClose = false;\n var ctx = props.ctx;\n\n if (!(ctx && ctx.menuActions)) {\n throw new Error(\"Menu component must be ancestor of MenuProvider\");\n }\n\n return _this;\n }\n\n _createClass(Menu, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (!this._validateChildren()) {\n return;\n }\n\n debug('subscribing menu', this._name);\n this.props.ctx.menuRegistry.subscribe(this);\n\n this.props.ctx.menuActions._notify();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n if (this.props.name !== prevProps.name) {\n console.warn('Menu name cannot be changed');\n } // force update if menu is opened as its content might have changed\n\n\n var force = this.isOpen();\n debug('component did update', this._name, force);\n\n this.props.ctx.menuActions._notify(force);\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n debug('unsubscribing menu', this._name);\n\n if (this.isOpen()) {\n this._forceClose = true;\n\n this.props.ctx.menuActions._notify();\n }\n\n this.props.ctx.menuRegistry.unsubscribe(this);\n }\n }, {\n key: \"open\",\n value: function open() {\n return this.props.ctx.menuActions.openMenu(this._name);\n }\n }, {\n key: \"close\",\n value: function close() {\n return this.props.ctx.menuActions.closeMenu();\n }\n }, {\n key: \"isOpen\",\n value: function isOpen() {\n if (this._forceClose) {\n return false;\n }\n\n return this.props.hasOwnProperty('opened') ? this.props.opened : this._opened;\n }\n }, {\n key: \"getName\",\n value: function getName() {\n return this._name;\n }\n }, {\n key: \"render\",\n value: function render() {\n var style = this.props.style;\n\n var children = this._reduceChildren();\n\n return /*#__PURE__*/React__default.createElement(reactNative.View, {\n style: style\n }, children);\n }\n }, {\n key: \"_reduceChildren\",\n value: function _reduceChildren() {\n var _this2 = this;\n\n return React__default.Children.toArray(this.props.children).reduce(function (r, child) {\n if (isTrigger(child)) {\n r.push(React__default.cloneElement(child, {\n key: null,\n menuName: _this2._name,\n onRef: function onRef(t) {\n return _this2._trigger = t;\n }\n }));\n }\n\n if (isRegularComponent(child)) {\n r.push(child);\n }\n\n return r;\n }, []);\n }\n }, {\n key: \"_getTrigger\",\n value: function _getTrigger() {\n return this._trigger;\n }\n }, {\n key: \"_getOptions\",\n value: function _getOptions() {\n return React__default.Children.toArray(this.props.children).find(isMenuOptions);\n }\n }, {\n key: \"_getOpened\",\n value: function _getOpened() {\n return this._opened;\n }\n }, {\n key: \"_setOpened\",\n value: function _setOpened(opened) {\n this._opened = opened;\n }\n }, {\n key: \"_validateChildren\",\n value: function _validateChildren() {\n var children = React__default.Children.toArray(this.props.children);\n var options = children.find(isMenuOptions);\n\n if (!options) {\n console.warn('Menu has to contain MenuOptions component');\n }\n\n var trigger = children.find(isTrigger);\n\n if (!trigger) {\n console.warn('Menu has to contain MenuTrigger component');\n }\n\n return options && trigger;\n }\n }]);\n\n return Menu;\n }(React.Component);\n Menu.propTypes = {\n name: propTypes.string,\n renderer: propTypes.func,\n rendererProps: propTypes.object,\n onSelect: propTypes.func,\n onOpen: propTypes.func,\n onClose: propTypes.func,\n opened: propTypes.bool,\n onBackdropPress: propTypes.func\n };\n Menu.defaultProps = {\n renderer: ContextMenu,\n rendererProps: {},\n onSelect: function onSelect() {},\n onOpen: function onOpen() {},\n onClose: function onClose() {},\n onBackdropPress: function onBackdropPress() {}\n };\n var MenuExternal = withCtx(Menu);\n Object.defineProperty(MenuExternal, 'debug', {\n get: function get() {\n return CFG.debug;\n },\n set: function set(val) {\n CFG.debug = val;\n }\n });\n\n MenuExternal.setDefaultRenderer = function (renderer) {\n Menu.defaultProps.renderer = renderer;\n };\n\n MenuExternal.setDefaultRendererProps = function (rendererProps) {\n Menu.defaultProps.rendererProps = rendererProps;\n };\n\n var MenuOption = /*#__PURE__*/function (_Component) {\n _inherits(MenuOption, _Component);\n\n var _super = _createSuper(MenuOption);\n\n function MenuOption() {\n _classCallCheck(this, MenuOption);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(MenuOption, [{\n key: \"_onSelect\",\n value: function _onSelect() {\n var value = this.props.value;\n\n var onSelect = this.props.onSelect || this._getMenusOnSelect();\n\n var shouldClose = onSelect(value) !== false;\n debug('select option', value, shouldClose);\n\n if (shouldClose) {\n this.props.ctx.menuActions.closeMenu();\n }\n }\n }, {\n key: \"_getMenusOnSelect\",\n value: function _getMenusOnSelect() {\n var menu = this.props.ctx.menuActions._getOpenedMenu();\n\n return menu.instance.props.onSelect;\n }\n }, {\n key: \"_getCustomStyles\",\n value: function _getCustomStyles() {\n // FIXME react 16.3 workaround for ControlledExample!\n var menu = this.props.ctx.menuActions._getOpenedMenu() || {};\n var optionsCustomStyles = menu.optionsCustomStyles;\n return _objectSpread2(_objectSpread2({}, optionsCustomStyles), this.props.customStyles);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this = this;\n\n var _this$props = this.props,\n text = _this$props.text,\n disabled = _this$props.disabled,\n disableTouchable = _this$props.disableTouchable,\n children = _this$props.children,\n style = _this$props.style,\n testID = _this$props.testID;\n\n var customStyles = this._getCustomStyles();\n\n if (text && React__default.Children.count(children) > 0) {\n console.warn(\"MenuOption: Please don't use text property together with explicit children. Children are ignored.\");\n }\n\n if (disabled) {\n var disabledStyles = [defaultStyles.optionTextDisabled, customStyles.optionText];\n return /*#__PURE__*/React__default.createElement(reactNative.View, {\n style: [defaultStyles.option, customStyles.optionWrapper, style]\n }, text ? /*#__PURE__*/React__default.createElement(reactNative.Text, {\n style: disabledStyles\n }, text) : children);\n }\n\n var rendered = /*#__PURE__*/React__default.createElement(reactNative.View, {\n style: [defaultStyles.option, customStyles.optionWrapper, style]\n }, text ? /*#__PURE__*/React__default.createElement(reactNative.Text, {\n style: customStyles.optionText\n }, text) : children);\n\n if (disableTouchable) {\n return rendered;\n } else {\n var _makeTouchable = makeTouchable(customStyles.OptionTouchableComponent),\n Touchable = _makeTouchable.Touchable,\n defaultTouchableProps = _makeTouchable.defaultTouchableProps;\n\n return /*#__PURE__*/React__default.createElement(Touchable, _extends({\n testID: testID,\n onPress: function onPress() {\n return _this._onSelect();\n }\n }, defaultTouchableProps, customStyles.optionTouchable), rendered);\n }\n }\n }]);\n\n return MenuOption;\n }(React.Component);\n MenuOption.propTypes = {\n disabled: propTypes.bool,\n disableTouchable: propTypes.bool,\n onSelect: propTypes.func,\n text: propTypes.string,\n value: propTypes.any,\n customStyles: propTypes.object,\n testID: propTypes.string\n };\n MenuOption.defaultProps = {\n disabled: false,\n disableTouchable: false,\n customStyles: {},\n testID: undefined\n };\n var defaultStyles = reactNative.StyleSheet.create({\n option: {\n padding: 5,\n backgroundColor: 'transparent'\n },\n optionTextDisabled: {\n color: '#ccc'\n }\n });\n var MenuOption$1 = withCtx(MenuOption);\n\n var _excluded$4 = [\"style\", \"children\", \"layouts\"];\n /**\n Simplified version of ContextMenu without animation.\n */\n\n var NotAnimatedContextMenu = /*#__PURE__*/function (_React$Component) {\n _inherits(NotAnimatedContextMenu, _React$Component);\n\n var _super = _createSuper(NotAnimatedContextMenu);\n\n function NotAnimatedContextMenu() {\n _classCallCheck(this, NotAnimatedContextMenu);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(NotAnimatedContextMenu, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n style = _this$props.style,\n children = _this$props.children,\n layouts = _this$props.layouts,\n other = _objectWithoutProperties(_this$props, _excluded$4);\n\n var position = computePosition$1(layouts, reactNative.I18nManager.isRTL);\n return /*#__PURE__*/React__default.createElement(reactNative.View, _extends({}, other, {\n style: [styles$4.options, style, position]\n }), children);\n }\n }]);\n\n return NotAnimatedContextMenu;\n }(React__default.Component);\n\n var _excluded$5 = [\"style\", \"children\", \"layouts\"];\n var computePosition$2 = function computePosition(layouts) {\n var windowLayout = layouts.windowLayout,\n optionsLayout = layouts.optionsLayout;\n var wHeight = windowLayout.height;\n var oHeight = optionsLayout.height;\n var top = wHeight - oHeight;\n var left = 0,\n right = 0;\n var position = {\n top: top,\n left: left,\n right: right\n }; // TODO what is the best way to handle safeArea?\n // most likely some extra paddings inside SlideInMenu \n\n return position;\n };\n\n var SlideInMenu = /*#__PURE__*/function (_React$Component) {\n _inherits(SlideInMenu, _React$Component);\n\n var _super = _createSuper(SlideInMenu);\n\n function SlideInMenu(props) {\n var _this;\n\n _classCallCheck(this, SlideInMenu);\n\n _this = _super.call(this, props);\n _this.state = {\n slide: new reactNative.Animated.Value(0)\n };\n return _this;\n }\n\n _createClass(SlideInMenu, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n reactNative.Animated.timing(this.state.slide, {\n duration: OPEN_ANIM_DURATION,\n toValue: 1,\n easing: reactNative.Easing.out(reactNative.Easing.cubic),\n useNativeDriver: USE_NATIVE_DRIVER\n }).start();\n }\n }, {\n key: \"close\",\n value: function close() {\n var _this2 = this;\n\n return new Promise(function (resolve) {\n reactNative.Animated.timing(_this2.state.slide, {\n duration: CLOSE_ANIM_DURATION,\n toValue: 0,\n easing: reactNative.Easing.in(reactNative.Easing.cubic),\n useNativeDriver: USE_NATIVE_DRIVER\n }).start(resolve);\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n style = _this$props.style,\n children = _this$props.children,\n layouts = _this$props.layouts,\n other = _objectWithoutProperties(_this$props, _excluded$5);\n\n var oHeight = layouts.optionsLayout.height;\n var animation = {\n transform: [{\n translateY: this.state.slide.interpolate({\n inputRange: [0, 1],\n outputRange: [oHeight, 0]\n })\n }]\n };\n var position = computePosition$2(layouts);\n return /*#__PURE__*/React__default.createElement(reactNative.Animated.View, _extends({\n style: [styles$5.options, style, animation, position]\n }, other), children);\n }\n }]);\n\n return SlideInMenu;\n }(React__default.Component);\n var styles$5 = reactNative.StyleSheet.create({\n options: {\n position: 'absolute',\n backgroundColor: 'white',\n // Shadow only works on iOS.\n shadowColor: 'black',\n shadowOpacity: 0.3,\n shadowOffset: {\n width: 3,\n height: 3\n },\n shadowRadius: 4,\n // This will elevate the view on Android, causing shadow to be drawn.\n elevation: 5\n }\n });\n\n var _excluded$6 = [\"style\", \"children\", \"layouts\", \"anchorStyle\", \"preferredPlacement\", \"openAnimationDuration\", \"closeAnimationDuration\", \"placement\"];\n var popoverPadding = 7;\n var anchorSize = 15;\n var anchorHyp = Math.sqrt(anchorSize * anchorSize + anchorSize * anchorSize);\n var anchorOffset = (anchorHyp + anchorSize) / 2 - popoverPadding; // left/top placement\n\n function axisNegativeSideProperties(_ref) {\n var oDim = _ref.oDim,\n tPos = _ref.tPos;\n return {\n position: tPos - oDim\n };\n } // right/bottom placement\n\n\n function axisPositiveSideProperties(_ref2) {\n var tPos = _ref2.tPos,\n tDim = _ref2.tDim;\n // substract also anchor placeholder from the beginning\n return {\n position: tPos + tDim - anchorSize\n };\n } // computes offsets (off screen overlap) of popover when trying to align it to the center\n\n\n function centeringProperties(_ref3) {\n var oDim = _ref3.oDim,\n wDim = _ref3.wDim,\n tPos = _ref3.tPos,\n tDim = _ref3.tDim;\n var center = Math.round(tPos + tDim / 2);\n var leftOffset = oDim / 2 - center;\n var rightOffset = center + oDim / 2 - wDim;\n return {\n center: center,\n leftOffset: leftOffset,\n rightOffset: rightOffset\n };\n }\n /**\n * Computes position and offset of popover when trying to align it to the triger center.\n * It consideres window boundaries.\n * Returns object with keys:\n * - position: Absolute position - top/left,\n * - offset: window overlapping size if window boundaries were not considered\n */\n\n\n function axisCenteredPositionProperties(options) {\n var oDim = options.oDim,\n wDim = options.wDim;\n\n var _centeringProperties = centeringProperties(options),\n center = _centeringProperties.center,\n leftOffset = _centeringProperties.leftOffset,\n rightOffset = _centeringProperties.rightOffset;\n\n if (leftOffset > 0 || rightOffset > 0) {\n // right/bottom position is better\n if (leftOffset < rightOffset) {\n return {\n offset: rightOffset,\n position: wDim - oDim\n };\n } // left/top position is better\n\n\n if (rightOffset < leftOffset) {\n return {\n offset: -leftOffset,\n position: 0\n };\n }\n } // centered position\n\n\n return {\n offset: 0,\n position: center - oDim / 2\n };\n }\n /* Evaluate centering placement */\n\n\n function getCenteringPrice(options) {\n var _centeringProperties2 = centeringProperties(options),\n leftOffset = _centeringProperties2.leftOffset,\n rightOffset = _centeringProperties2.rightOffset; // TODO: currently shifted popovers have higher price,\n // popover shift could be taken into account with the same price\n\n\n return Math.max(0, leftOffset) + Math.max(0, rightOffset);\n }\n /* Evaluate top placement */\n\n\n function getTopPrice(hOptions, vOptions) {\n var centerOffset = getCenteringPrice(vOptions);\n var sideOffset = Math.max(0, hOptions.oDim - hOptions.tPos);\n return centerOffset + sideOffset;\n }\n /* Evaluate bottom placement */\n\n\n function getBottomPrice(hOptions, vOptions) {\n var centerOffset = getCenteringPrice(vOptions);\n var sideOffset = Math.max(0, hOptions.tPos + hOptions.tDim + hOptions.oDim - hOptions.wDim);\n return centerOffset + sideOffset;\n }\n /* Evaluate left placement */\n\n\n function getLeftPrice(hOptions, vOptions) {\n var centerOffset = getCenteringPrice(hOptions);\n var sideOffset = Math.max(0, vOptions.oDim - vOptions.tPos);\n return centerOffset + sideOffset;\n }\n /* Evaluate right placement */\n\n\n function getRightPrice(hOptions, vOptions) {\n var centerOffset = getCenteringPrice(hOptions);\n var sideOffset = Math.max(0, vOptions.tPos + vOptions.tDim + vOptions.oDim - vOptions.wDim);\n return centerOffset + sideOffset;\n }\n\n function getStartPosKey(isRTL) {\n return isRTL ? 'right' : 'left';\n }\n\n function topProperties(hOptions, vOptions, isRTL) {\n var centered = axisCenteredPositionProperties(vOptions);\n var side = axisNegativeSideProperties(hOptions);\n return {\n position: _defineProperty({\n top: side.position\n }, getStartPosKey(isRTL), centered.position),\n offset: centered.offset,\n placement: 'top'\n };\n }\n\n function bottomProperties(hOptions, vOptions, isRTL) {\n var centered = axisCenteredPositionProperties(vOptions);\n var side = axisPositiveSideProperties(hOptions);\n return {\n position: _defineProperty({\n top: side.position\n }, getStartPosKey(isRTL), centered.position),\n offset: centered.offset,\n placement: 'bottom'\n };\n }\n\n function rightProperties(hOptions, vOptions, isRTL) {\n var centered = axisCenteredPositionProperties(hOptions);\n var side = axisPositiveSideProperties(vOptions);\n return {\n position: _defineProperty({\n top: centered.position\n }, getStartPosKey(isRTL), side.position),\n offset: centered.offset,\n placement: 'right'\n };\n }\n\n function leftProperties(hOptions, vOptions, isRTL) {\n var centered = axisCenteredPositionProperties(hOptions);\n var side = axisNegativeSideProperties(vOptions);\n return {\n position: _defineProperty({\n top: centered.position\n }, getStartPosKey(isRTL), side.position),\n offset: centered.offset,\n placement: 'left'\n };\n } // maps placement to function which computes correct properties\n\n\n var propertiesByPlacement = {\n top: topProperties,\n bottom: bottomProperties,\n left: leftProperties,\n right: rightProperties\n };\n /**\n * Computes properties needed for drawing popover.\n * Returns object with keys:\n * - position: