{"version":3,"sources":["__prelude__","/node_modules/metro-runtime/src/polyfills/require.js","/.expo/metro/polyfill.js","/node_modules/expo/AppEntry.js","/node_modules/@babel/runtime/helpers/interopRequireDefault.js","/node_modules/expo/build/launch/registerRootComponent.js","/node_modules/expo/build/Expo.fx.web.js","/node_modules/react-native-web/dist/exports/AppRegistry/index.js","/node_modules/@babel/runtime/helpers/classCallCheck.js","/node_modules/@babel/runtime/helpers/createClass.js","/node_modules/@babel/runtime/helpers/objectSpread2.js","/node_modules/@babel/runtime/helpers/defineProperty.js","/node_modules/fbjs/lib/invariant.js","/node_modules/react-native-web/dist/exports/unmountComponentAtNode/index.js","/node_modules/react-dom/index.js","/node_modules/react-dom/cjs/react-dom.production.min.js","/node_modules/react/index.js","/node_modules/react/cjs/react.production.min.js","/node_modules/scheduler/index.js","/node_modules/scheduler/cjs/scheduler.production.min.js","/node_modules/react-native-web/dist/exports/AppRegistry/renderApplication.js","/node_modules/@babel/runtime/helpers/extends.js","/.expo/metro/shims/react-native-web/dist/exports/AppRegistry/AppContainer.js","/node_modules/react-native-web/dist/exports/render/index.js","/node_modules/react-dom/client.js","/node_modules/react-native-web/dist/exports/StyleSheet/dom/index.js","/node_modules/react-native-web/dist/modules/canUseDom/index.js","/node_modules/react-native-web/dist/exports/StyleSheet/dom/createCSSStyleSheet.js","/node_modules/react-native-web/dist/exports/StyleSheet/dom/createOrderedCSSStyleSheet.js","/node_modules/react-native-web/dist/exports/StyleSheet/index.js","/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","/node_modules/react-native-web/dist/exports/StyleSheet/compiler/index.js","/node_modules/@babel/runtime/helpers/toConsumableArray.js","/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","/node_modules/@babel/runtime/helpers/arrayLikeToArray.js","/node_modules/@babel/runtime/helpers/iterableToArray.js","/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","/node_modules/@babel/runtime/helpers/nonIterableSpread.js","/node_modules/react-native-web/dist/exports/StyleSheet/compiler/createReactDOMStyle.js","/node_modules/react-native-web/dist/exports/StyleSheet/compiler/normalizeValueWithProperty.js","/node_modules/react-native-web/dist/exports/StyleSheet/compiler/unitlessNumbers.js","/node_modules/react-native-web/dist/exports/StyleSheet/compiler/normalizeColor.js","/node_modules/react-native-web/dist/modules/isWebColor/index.js","/node_modules/react-native-web/dist/exports/processColor/index.js","/node_modules/@react-native/normalize-color/index.js","/node_modules/react-native-web/dist/exports/StyleSheet/compiler/hash.js","/node_modules/react-native-web/dist/exports/StyleSheet/compiler/hyphenateStyleName.js","/node_modules/react-native-web/dist/modules/prefixStyles/index.js","/node_modules/inline-style-prefixer/lib/createPrefixer.js","/node_modules/inline-style-prefixer/lib/utils/prefixProperty.js","/node_modules/inline-style-prefixer/lib/utils/capitalizeString.js","/node_modules/inline-style-prefixer/lib/utils/prefixValue.js","/node_modules/inline-style-prefixer/lib/utils/addNewValuesOnly.js","/node_modules/inline-style-prefixer/lib/utils/isObject.js","/node_modules/react-native-web/dist/modules/prefixStyles/static.js","/node_modules/inline-style-prefixer/lib/plugins/backgroundClip.js","/node_modules/inline-style-prefixer/lib/plugins/crossFade.js","/node_modules/css-in-js-utils/es/index.js","/node_modules/css-in-js-utils/es/assignStyle.js","/node_modules/css-in-js-utils/es/camelCaseProperty.js","/node_modules/css-in-js-utils/es/cssifyDeclaration.js","/node_modules/css-in-js-utils/es/hyphenateProperty.js","/node_modules/hyphenate-style-name/index.js","/node_modules/css-in-js-utils/es/cssifyObject.js","/node_modules/css-in-js-utils/es/isPrefixedProperty.js","/node_modules/css-in-js-utils/es/isPrefixedValue.js","/node_modules/css-in-js-utils/es/isUnitlessProperty.js","/node_modules/css-in-js-utils/es/normalizeProperty.js","/node_modules/css-in-js-utils/es/unprefixProperty.js","/node_modules/css-in-js-utils/es/resolveArrayValue.js","/node_modules/css-in-js-utils/es/unprefixValue.js","/node_modules/inline-style-prefixer/lib/plugins/cursor.js","/node_modules/inline-style-prefixer/lib/plugins/filter.js","/node_modules/inline-style-prefixer/lib/plugins/imageSet.js","/node_modules/css-in-js-utils/lib/isPrefixedValue.js","/node_modules/inline-style-prefixer/lib/plugins/logical.js","/node_modules/inline-style-prefixer/lib/plugins/position.js","/node_modules/inline-style-prefixer/lib/plugins/sizing.js","/node_modules/inline-style-prefixer/lib/plugins/transition.js","/node_modules/css-in-js-utils/lib/hyphenateProperty.js","/node_modules/styleq/transform-localize-style.js","/node_modules/styleq/dist/transform-localize-style.js","/node_modules/react-native-web/dist/exports/StyleSheet/preprocess.js","/node_modules/react-native-web/dist/modules/warnOnce/index.js","/node_modules/styleq/dist/styleq.js","/node_modules/react-native-web/dist/exports/StyleSheet/validate.js","/node_modules/postcss-value-parser/lib/index.js","/node_modules/postcss-value-parser/lib/parse.js","/node_modules/postcss-value-parser/lib/walk.js","/node_modules/postcss-value-parser/lib/stringify.js","/node_modules/postcss-value-parser/lib/unit.js","/node_modules/react-native-web/dist/exports/Platform/index.js","/App.js","/node_modules/@babel/runtime/helpers/asyncToGenerator.js","/node_modules/@babel/runtime/helpers/slicedToArray.js","/node_modules/@babel/runtime/helpers/arrayWithHoles.js","/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","/node_modules/@babel/runtime/helpers/nonIterableRest.js","/node_modules/react-native-get-random-values/index.web.js","/node_modules/react-native-web/dist/exports/View/index.js","/node_modules/react-native-web/dist/exports/createElement/index.js","/node_modules/react-native-web/dist/modules/AccessibilityUtil/index.js","/node_modules/react-native-web/dist/modules/AccessibilityUtil/isDisabled.js","/node_modules/react-native-web/dist/modules/AccessibilityUtil/propsToAccessibilityComponent.js","/node_modules/react-native-web/dist/modules/AccessibilityUtil/propsToAriaRole.js","/node_modules/react-native-web/dist/modules/createDOMProps/index.js","/node_modules/react-native-web/dist/modules/useLocale/index.js","/node_modules/react-native-web/dist/modules/useLocale/isLocaleRTL.js","/node_modules/react-native-web/dist/modules/forwardedProps/index.js","/node_modules/react-native-web/dist/modules/pick/index.js","/node_modules/react-native-web/dist/modules/useElementLayout/index.js","/node_modules/react-native-web/dist/modules/useLayoutEffect/index.js","/node_modules/react-native-web/dist/exports/UIManager/index.js","/node_modules/react-native-web/dist/modules/setValueForStyles/index.js","/node_modules/react-native-web/dist/modules/setValueForStyles/dangerousStyleValue.js","/node_modules/react-native-web/dist/modules/unitlessNumbers/index.js","/node_modules/react-native-web/dist/modules/useMergeRefs/index.js","/node_modules/react-native-web/dist/modules/mergeRefs/index.js","/node_modules/react-native-web/dist/modules/usePlatformMethods/index.js","/node_modules/react-native-web/dist/modules/useStable/index.js","/node_modules/react-native-web/dist/modules/useResponderEvents/index.js","/node_modules/react-native-web/dist/modules/useResponderEvents/ResponderSystem.js","/node_modules/react-native-web/dist/modules/useResponderEvents/createResponderEvent.js","/node_modules/react-native-web/dist/modules/getBoundingClientRect/index.js","/node_modules/react-native-web/dist/modules/useResponderEvents/ResponderEventTypes.js","/node_modules/react-native-web/dist/modules/useResponderEvents/utils.js","/node_modules/react-native-web/dist/modules/isSelectionValid/index.js","/node_modules/react-native-web/dist/modules/useResponderEvents/ResponderTouchHistoryStore.js","/node_modules/react-native-web/dist/exports/Text/TextAncestorContext.js","/js/screens/AppWrapper.js","/node_modules/react-native-web/dist/exports/useWindowDimensions/index.js","/node_modules/react-native-web/dist/exports/Dimensions/index.js","/node_modules/@react-navigation/native/lib/module/index.js","/node_modules/@react-navigation/native/lib/module/Link.js","/node_modules/@babel/runtime/helpers/objectWithoutProperties.js","/node_modules/react-native-web/dist/exports/Text/index.js","/node_modules/@react-navigation/native/lib/module/useLinkProps.js","/node_modules/@react-navigation/core/lib/module/index.js","/node_modules/@react-navigation/core/lib/module/BaseNavigationContainer.js","/node_modules/@react-navigation/routers/lib/module/index.js","/node_modules/@react-navigation/routers/lib/module/CommonActions.js","/node_modules/@react-navigation/routers/lib/module/BaseRouter.js","/node_modules/nanoid/non-secure/index.js","/node_modules/@react-navigation/routers/lib/module/DrawerRouter.js","/node_modules/@react-navigation/routers/lib/module/TabRouter.js","/node_modules/@react-navigation/routers/lib/module/StackRouter.js","/node_modules/@react-navigation/routers/lib/module/types.js","/node_modules/@react-navigation/core/lib/module/checkDuplicateRouteNames.js","/node_modules/@react-navigation/core/lib/module/checkSerializable.js","/node_modules/@react-navigation/core/lib/module/createNavigationContainerRef.js","/node_modules/@react-navigation/core/lib/module/EnsureSingleNavigator.js","/node_modules/@react-navigation/core/lib/module/findFocusedRoute.js","/node_modules/@react-navigation/core/lib/module/NavigationBuilderContext.js","/node_modules/@react-navigation/core/lib/module/NavigationContainerRefContext.js","/node_modules/@react-navigation/core/lib/module/NavigationContext.js","/node_modules/@react-navigation/core/lib/module/NavigationRouteContext.js","/node_modules/@react-navigation/core/lib/module/NavigationStateContext.js","/node_modules/@react-navigation/core/lib/module/UnhandledActionContext.js","/node_modules/@react-navigation/core/lib/module/useChildListeners.js","/node_modules/@react-navigation/core/lib/module/useEventEmitter.js","/node_modules/@react-navigation/core/lib/module/useKeyedChildListeners.js","/node_modules/@react-navigation/core/lib/module/useOptionsGetters.js","/node_modules/@react-navigation/core/lib/module/useScheduleUpdate.js","/node_modules/@react-navigation/core/lib/module/useSyncState.js","/node_modules/@react-navigation/core/lib/module/createNavigatorFactory.js","/node_modules/@react-navigation/core/lib/module/Group.js","/node_modules/@react-navigation/core/lib/module/Screen.js","/node_modules/@react-navigation/core/lib/module/CurrentRenderContext.js","/node_modules/@react-navigation/core/lib/module/getActionFromState.js","/node_modules/@react-navigation/core/lib/module/getFocusedRouteNameFromRoute.js","/node_modules/@react-navigation/core/lib/module/useRouteCache.js","/node_modules/@react-navigation/core/lib/module/getPathFromState.js","/node_modules/query-string/index.js","/node_modules/strict-uri-encode/index.js","/node_modules/decode-uri-component/index.js","/node_modules/split-on-first/index.js","/node_modules/filter-obj/index.js","/node_modules/@react-navigation/core/lib/module/fromEntries.js","/node_modules/@react-navigation/core/lib/module/validatePathConfig.js","/node_modules/@react-navigation/core/lib/module/getStateFromPath.js","/node_modules/escape-string-regexp/index.js","/node_modules/@react-navigation/core/lib/module/NavigationHelpersContext.js","/node_modules/@react-navigation/core/lib/module/PreventRemoveContext.js","/node_modules/@react-navigation/core/lib/module/PreventRemoveProvider.js","/node_modules/use-latest-callback/lib/src/index.js","/node_modules/use-latest-callback/lib/src/useIsomorphicLayoutEffect.js","/node_modules/@react-navigation/core/lib/module/types.js","/node_modules/@react-navigation/core/lib/module/useFocusEffect.js","/node_modules/@react-navigation/core/lib/module/useNavigation.js","/node_modules/@react-navigation/core/lib/module/useIsFocused.js","/node_modules/@react-navigation/core/lib/module/useNavigationBuilder.js","/node_modules/react-is/index.js","/node_modules/react-is/cjs/react-is.production.min.js","/node_modules/@react-navigation/core/lib/module/isArrayEqual.js","/node_modules/@react-navigation/core/lib/module/isRecordEqual.js","/node_modules/@react-navigation/core/lib/module/useComponent.js","/node_modules/@react-navigation/core/lib/module/useCurrentRender.js","/node_modules/@react-navigation/core/lib/module/useDescriptors.js","/node_modules/@react-navigation/core/lib/module/SceneView.js","/node_modules/@react-navigation/core/lib/module/StaticContainer.js","/node_modules/@react-navigation/core/lib/module/useNavigationCache.js","/node_modules/@react-navigation/core/lib/module/useFocusedListenersChildrenAdapter.js","/node_modules/@react-navigation/core/lib/module/useFocusEvents.js","/node_modules/@react-navigation/core/lib/module/useNavigationHelpers.js","/node_modules/@react-navigation/core/lib/module/useOnAction.js","/node_modules/@react-navigation/core/lib/module/useOnPreventRemove.js","/node_modules/@react-navigation/core/lib/module/useOnGetState.js","/node_modules/@react-navigation/core/lib/module/useOnRouteFocus.js","/node_modules/@react-navigation/core/lib/module/useRegisterNavigator.js","/node_modules/@react-navigation/core/lib/module/useNavigationContainerRef.js","/node_modules/@react-navigation/core/lib/module/useNavigationState.js","/node_modules/@react-navigation/core/lib/module/usePreventRemove.js","/node_modules/@react-navigation/core/lib/module/usePreventRemoveContext.js","/node_modules/@react-navigation/core/lib/module/useRoute.js","/node_modules/@react-navigation/native/lib/module/LinkingContext.js","/node_modules/@react-navigation/native/lib/module/useLinkTo.js","/node_modules/@react-navigation/native/lib/module/NavigationContainer.js","/node_modules/@react-navigation/native/lib/module/theming/DefaultTheme.js","/node_modules/@react-navigation/native/lib/module/theming/ThemeProvider.js","/node_modules/@react-navigation/native/lib/module/theming/ThemeContext.js","/node_modules/@react-navigation/native/lib/module/useBackButton.js","/node_modules/@react-navigation/native/lib/module/useDocumentTitle.js","/node_modules/@react-navigation/native/lib/module/useLinking.js","/node_modules/fast-deep-equal/index.js","/node_modules/@react-navigation/native/lib/module/createMemoryHistory.js","/node_modules/@react-navigation/native/lib/module/ServerContext.js","/node_modules/@react-navigation/native/lib/module/useThenable.js","/node_modules/@react-navigation/native/lib/module/ServerContainer.js","/node_modules/@react-navigation/native/lib/module/theming/DarkTheme.js","/node_modules/@react-navigation/native/lib/module/theming/useTheme.js","/node_modules/@react-navigation/native/lib/module/types.js","/node_modules/@react-navigation/native/lib/module/useLinkBuilder.js","/node_modules/@react-navigation/native/lib/module/useScrollToTop.js","/js/screens/MainStack.js","/node_modules/@react-navigation/native-stack/lib/module/index.js","/node_modules/@react-navigation/native-stack/lib/module/navigators/createNativeStackNavigator.js","/node_modules/@react-navigation/native-stack/lib/module/views/NativeStackView.js","/node_modules/@react-navigation/elements/lib/module/index.js","/node_modules/@react-navigation/elements/lib/module/Background.js","/node_modules/@react-navigation/elements/lib/module/Header/getDefaultHeaderHeight.js","/node_modules/@react-navigation/elements/lib/module/Header/getHeaderTitle.js","/node_modules/@react-navigation/elements/lib/module/Header/Header.js","/node_modules/react-native-web/dist/exports/Animated/index.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/Animated.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/components/AnimatedFlatList.js","/node_modules/react-native-web/dist/exports/FlatList/index.js","/node_modules/react-native-web/dist/vendor/react-native/FlatList/index.js","/node_modules/@babel/runtime/helpers/inherits.js","/node_modules/@babel/runtime/helpers/setPrototypeOf.js","/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","/node_modules/@babel/runtime/helpers/typeof.js","/node_modules/@babel/runtime/helpers/assertThisInitialized.js","/node_modules/@babel/runtime/helpers/getPrototypeOf.js","/node_modules/react-native-web/dist/vendor/react-native/deepDiffer/index.js","/node_modules/react-native-web/dist/vendor/react-native/VirtualizedList/index.js","/node_modules/@babel/runtime/helpers/createForOfIteratorHelperLoose.js","/node_modules/react-native-web/dist/exports/RefreshControl/index.js","/node_modules/react-native-web/dist/exports/ScrollView/index.js","/node_modules/react-native-web/dist/modules/dismissKeyboard/index.js","/node_modules/react-native-web/dist/modules/TextInputState/index.js","/node_modules/react-native-web/dist/exports/ScrollView/ScrollViewBase.js","/node_modules/fbjs/lib/warning.js","/node_modules/fbjs/lib/emptyFunction.js","/node_modules/react-native-web/dist/exports/findNodeHandle/index.js","/node_modules/react-native-web/dist/vendor/react-native/Batchinator/index.js","/node_modules/react-native-web/dist/exports/InteractionManager/index.js","/node_modules/react-native-web/dist/exports/InteractionManager/TaskQueue.js","/node_modules/react-native-web/dist/vendor/react-native/vendor/emitter/EventEmitter.js","/node_modules/react-native-web/dist/modules/requestIdleCallback/index.js","/node_modules/react-native-web/dist/vendor/react-native/Utilities/clamp.js","/node_modules/react-native-web/dist/vendor/react-native/infoLog/index.js","/node_modules/react-native-web/dist/vendor/react-native/VirtualizedList/CellRenderMask.js","/node_modules/react-native-web/dist/vendor/react-native/VirtualizedList/ChildListCollection.js","/node_modules/react-native-web/dist/vendor/react-native/FillRateHelper/index.js","/node_modules/react-native-web/dist/vendor/react-native/VirtualizedList/StateSafePureComponent.js","/node_modules/@babel/runtime/helpers/get.js","/node_modules/@babel/runtime/helpers/superPropBase.js","/node_modules/react-native-web/dist/vendor/react-native/ViewabilityHelper/index.js","/node_modules/react-native-web/dist/vendor/react-native/VirtualizedList/VirtualizedListCellRenderer.js","/node_modules/react-native-web/dist/vendor/react-native/VirtualizedList/VirtualizedListContext.js","/node_modules/react-native-web/dist/vendor/react-native/VirtualizeUtils/index.js","/node_modules/nullthrows/nullthrows.js","/node_modules/react-native-web/node_modules/memoize-one/dist/memoize-one.esm.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/createAnimatedComponent.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/useAnimatedProps.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedProps.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/AnimatedEvent.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedValue.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedInterpolation.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedWithChildren.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedNode.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/NativeAnimatedHelper.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/NativeAnimatedModule.js","/node_modules/react-native-web/dist/vendor/react-native/TurboModule/TurboModuleRegistry.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/NativeAnimatedTurboModule.js","/node_modules/react-native-web/dist/vendor/react-native/EventEmitter/NativeEventEmitter.js","/node_modules/react-native-web/dist/vendor/react-native/EventEmitter/RCTDeviceEventEmitter.js","/node_modules/react-native-web/dist/vendor/react-native/Utilities/Platform.js","/node_modules/react-native-web/dist/vendor/react-native/ReactNative/ReactNativeFeatureFlags.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedStyle.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedTransform.js","/node_modules/react-native-web/dist/vendor/react-native/Utilities/useRefEffect.js","/node_modules/react-native-web/dist/vendor/react-native/Utilities/useMergeRefs.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/components/AnimatedImage.js","/node_modules/react-native-web/dist/exports/Image/index.js","/node_modules/@react-native/assets-registry/registry.js","/node_modules/react-native-web/dist/modules/ImageLoader/index.js","/node_modules/react-native-web/dist/exports/PixelRatio/index.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/components/AnimatedScrollView.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/components/AnimatedSectionList.js","/node_modules/react-native-web/dist/exports/SectionList/index.js","/node_modules/react-native-web/dist/vendor/react-native/SectionList/index.js","/node_modules/react-native-web/dist/vendor/react-native/VirtualizedSectionList/index.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/components/AnimatedText.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/components/AnimatedView.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/AnimatedMock.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/AnimatedImplementation.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedAddition.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedDiffClamp.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedDivision.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedModulo.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedMultiplication.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedSubtraction.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedTracking.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedValueXY.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/animations/DecayAnimation.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/animations/Animation.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/animations/SpringAnimation.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/SpringConfig.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedColor.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/animations/TimingAnimation.js","/node_modules/react-native-web/dist/exports/Easing/index.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/Easing.js","/node_modules/react-native-web/dist/vendor/react-native/Animated/bezier.js","/node_modules/react-native-safe-area-context/lib/module/index.js","/node_modules/react-native-safe-area-context/lib/module/SafeAreaContext.js","/node_modules/react-native-safe-area-context/lib/module/NativeSafeAreaProvider.web.js","/node_modules/react-native-safe-area-context/lib/module/SafeAreaView.web.js","/node_modules/react-native-safe-area-context/lib/module/InitialWindow.js","/node_modules/react-native-safe-area-context/lib/module/SafeArea.types.js","/node_modules/@react-navigation/elements/lib/module/Header/HeaderBackground.js","/node_modules/@react-navigation/elements/lib/module/Header/HeaderShownContext.js","/node_modules/@react-navigation/elements/lib/module/getNamedContext.js","/node_modules/@react-navigation/elements/lib/module/Header/HeaderTitle.js","/node_modules/@react-navigation/elements/lib/module/Header/HeaderBackButton.js","/node_modules/react-native-web/dist/exports/I18nManager/index.js","/node_modules/@react-navigation/elements/lib/module/MaskedView.js","/node_modules/@react-navigation/elements/lib/module/PlatformPressable.js","/node_modules/react-native-web/dist/exports/Pressable/index.js","/node_modules/react-native-web/dist/modules/useHover/index.js","/node_modules/react-native-web/dist/modules/modality/index.js","/node_modules/react-native-web/dist/modules/addEventListener/index.js","/node_modules/react-native-web/dist/modules/useEvent/index.js","/node_modules/react-native-web/dist/modules/usePressEvents/index.js","/node_modules/react-native-web/dist/modules/usePressEvents/PressResponder.js","/node_modules/@react-navigation/elements/lib/module/assets/back-icon.png","/node_modules/@react-navigation/elements/lib/module/assets/back-icon-mask.png","/node_modules/@react-navigation/elements/lib/module/Header/HeaderBackContext.js","/node_modules/@react-navigation/elements/lib/module/Header/HeaderHeightContext.js","/node_modules/@react-navigation/elements/lib/module/Header/useHeaderHeight.js","/node_modules/@react-navigation/elements/lib/module/MissingIcon.js","/node_modules/@react-navigation/elements/lib/module/ResourceSavingView.js","/node_modules/@react-navigation/elements/lib/module/SafeAreaProviderCompat.js","/node_modules/@react-navigation/elements/lib/module/Screen.js","/node_modules/@react-navigation/elements/lib/module/types.js","/js/screens/HomepageAuthenticated.js","/js/context/AppUtilities.js","/node_modules/react-native-web/dist/exports/TouchableOpacity/index.js","/node_modules/expo-secure-store/build/SecureStore.js","/node_modules/expo-secure-store/build/ExpoSecureStore.web.js","/node_modules/@react-native-async-storage/async-storage/lib/module/index.js","/node_modules/@react-native-async-storage/async-storage/lib/module/AsyncStorage.js","/node_modules/merge-options/index.js","/node_modules/is-plain-obj/index.js","/node_modules/@react-native-async-storage/async-storage/lib/module/hooks.js","/js/context/AppConstants.js","/node_modules/expo-constants/build/Constants.js","/node_modules/expo-modules-core/build/index.js","/node_modules/react-native-web/dist/exports/DeviceEventEmitter/index.js","/node_modules/expo-modules-core/build/EventEmitter.js","/node_modules/invariant/browser.js","/node_modules/react-native-web/dist/exports/NativeEventEmitter/index.js","/node_modules/react-native-web/dist/exports/NativeModules/index.js","/node_modules/expo-modules-core/build/NativeModulesProxy.js","/node_modules/expo-modules-core/build/NativeViewManagerAdapter.js","/node_modules/expo-modules-core/build/errors/UnavailabilityError.js","/node_modules/expo-modules-core/build/errors/CodedError.js","/node_modules/@babel/runtime/helpers/wrapNativeSuper.js","/node_modules/@babel/runtime/helpers/isNativeFunction.js","/node_modules/@babel/runtime/helpers/construct.js","/node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js","/node_modules/expo-modules-core/build/Platform.js","/node_modules/expo-modules-core/build/environment/browser.web.js","/node_modules/expo-modules-core/build/sweet/setUpErrorManager.fx.web.js","/node_modules/expo-modules-core/build/uuid/index.js","/node_modules/expo-modules-core/build/uuid/uuid.web.js","/node_modules/expo-modules-core/build/uuid/lib/sha1.js","/node_modules/expo-modules-core/build/uuid/lib/v35.js","/node_modules/expo-modules-core/build/uuid/lib/bytesToUuid.js","/node_modules/expo-modules-core/build/uuid/uuid.types.js","/node_modules/metro-runtime/src/modules/empty-module.js","/node_modules/expo-modules-core/build/requireNativeModule.web.js","/node_modules/expo-modules-core/build/TypedArrays.types.js","/node_modules/expo-modules-core/build/PermissionsInterface.js","/node_modules/expo-modules-core/build/PermissionsHook.js","/node_modules/expo-constants/build/Constants.types.js","/node_modules/expo-constants/build/ExponentConstants.web.js","/node_modules/react-native-paper/lib/module/index.js","/node_modules/react-native-paper/lib/module/styles/themes/v3/tokens.js","/node_modules/react-native-paper/lib/module/core/theming.js","/node_modules/@callstack/react-theme-provider/lib/index.js","/node_modules/@callstack/react-theme-provider/lib/createTheming.js","/node_modules/deepmerge/dist/umd.js","/node_modules/@callstack/react-theme-provider/lib/createThemeProvider.js","/node_modules/@callstack/react-theme-provider/lib/createWithTheme.js","/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","/node_modules/react-native-paper/node_modules/color/index.js","/node_modules/color-string/index.js","/node_modules/color-name/index.js","/node_modules/simple-swizzle/index.js","/node_modules/simple-swizzle/node_modules/is-arrayish/index.js","/node_modules/color-convert/index.js","/node_modules/color-convert/conversions.js","/node_modules/color-convert/route.js","/node_modules/react-native-paper/lib/module/styles/themes/index.js","/node_modules/react-native-paper/lib/module/styles/themes/v3/LightTheme.js","/node_modules/react-native-paper/lib/module/styles/fonts.js","/node_modules/react-native-paper/lib/module/styles/themes/v3/DarkTheme.js","/node_modules/react-native-paper/lib/module/styles/themes/v2/LightTheme.js","/node_modules/react-native-paper/lib/module/styles/themes/v2/colors.js","/node_modules/react-native-paper/lib/module/styles/themes/v2/DarkTheme.js","/node_modules/react-native-paper/lib/module/core/PaperProvider.js","/node_modules/react-native-web/dist/exports/AccessibilityInfo/index.js","/node_modules/react-native-web/dist/exports/Appearance/index.js","/node_modules/react-native-paper/lib/module/core/SafeAreaProviderCompat.js","/node_modules/react-native-paper/lib/module/core/settings.js","/node_modules/react-native-paper/lib/module/components/MaterialCommunityIcon.js","/node_modules/@expo/vector-icons/MaterialCommunityIcons.js","/node_modules/@expo/vector-icons/build/MaterialCommunityIcons.js","/node_modules/@expo/vector-icons/build/createIconSet.js","/node_modules/expo-font/build/index.js","/node_modules/expo-font/build/Font.js","/node_modules/expo-font/build/ExpoFontLoader.web.js","/node_modules/fontfaceobserver/fontfaceobserver.standalone.js","/node_modules/expo-font/build/Font.types.js","/node_modules/expo-font/build/FontLoader.web.js","/node_modules/expo-asset/build/index.js","/node_modules/expo-asset/build/Asset.fx.js","/node_modules/expo-asset/build/Asset.js","/node_modules/expo-asset/build/AssetSources.js","/node_modules/expo-asset/build/AssetSourceResolver.js","/node_modules/expo-asset/build/PlatformUtils.web.js","/node_modules/expo-asset/build/AssetUris.js","/node_modules/expo-asset/build/ImageAssets.js","/node_modules/expo-asset/build/LocalAssets.web.js","/node_modules/expo-asset/build/resolveAssetSource.js","/node_modules/expo-asset/build/AssetHooks.js","/node_modules/expo-font/build/memory.js","/node_modules/expo-font/build/server.js","/node_modules/expo-font/build/FontHooks.js","/node_modules/@expo/vector-icons/build/vendor/react-native-vector-icons/lib/create-icon-set.js","/node_modules/@expo/vector-icons/build/vendor/react-native-vector-icons/lib/ensure-native-module-available.js","/node_modules/@expo/vector-icons/build/vendor/react-native-vector-icons/lib/create-icon-source-cache.js","/node_modules/@expo/vector-icons/build/vendor/react-native-vector-icons/lib/icon-button.js","/node_modules/prop-types/index.js","/node_modules/prop-types/factoryWithThrowingShims.js","/node_modules/prop-types/lib/ReactPropTypesSecret.js","/node_modules/react-native-web/dist/exports/TouchableHighlight/index.js","/node_modules/@expo/vector-icons/build/vendor/react-native-vector-icons/lib/object-utils.js","/node_modules/react/jsx-runtime.js","/node_modules/react/cjs/react-jsx-runtime.production.min.js","/node_modules/@expo/vector-icons/build/vendor/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf","/node_modules/@expo/vector-icons/build/vendor/react-native-vector-icons/glyphmaps/MaterialCommunityIcons.json","/node_modules/react-native-paper/lib/module/components/Portal/PortalHost.js","/node_modules/react-native-paper/lib/module/components/Portal/PortalManager.js","/node_modules/react-native-paper/lib/module/utils/addEventListener.js","/node_modules/react-native-paper/lib/module/styles/shadow.js","/node_modules/react-native-paper/lib/module/styles/overlay.js","/node_modules/react-native-paper/lib/module/components/Avatar/Avatar.js","/node_modules/react-native-paper/lib/module/components/Avatar/AvatarIcon.js","/node_modules/react-native-paper/lib/module/utils/getContrastingColor.js","/node_modules/react-native-paper/lib/module/components/Icon.js","/node_modules/react-native-paper/lib/module/components/Avatar/AvatarImage.js","/node_modules/react-native-paper/lib/module/components/Avatar/AvatarText.js","/node_modules/react-native-paper/lib/module/components/Typography/Text.js","/node_modules/react-native-paper/lib/module/components/Typography/AnimatedText.js","/node_modules/react-native-paper/lib/module/components/Typography/v2/StyledText.js","/node_modules/react-native-paper/lib/module/components/Typography/v2/Text.js","/node_modules/react-native-paper/lib/module/utils/forwardRef.js","/node_modules/react-native-paper/lib/module/components/Drawer/Drawer.js","/node_modules/react-native-paper/lib/module/components/Drawer/DrawerItem.js","/node_modules/react-native-paper/lib/module/components/TouchableRipple/TouchableRipple.js","/node_modules/react-native-paper/lib/module/components/TouchableRipple/Pressable.js","/node_modules/react-native-paper/lib/module/components/TouchableRipple/utils.js","/node_modules/react-native-paper/lib/module/utils/hasTouchHandler.js","/node_modules/react-native-paper/lib/module/components/Drawer/DrawerCollapsedItem.js","/node_modules/react-native-paper/lib/module/components/Badge.js","/node_modules/react-native-paper/lib/module/components/Drawer/DrawerSection.js","/node_modules/react-native-paper/lib/module/components/Divider.js","/node_modules/react-native-paper/lib/module/components/List/List.js","/node_modules/react-native-paper/lib/module/components/List/ListAccordion.js","/node_modules/react-native-paper/lib/module/components/List/ListAccordionGroup.js","/node_modules/react-native-paper/lib/module/components/List/utils.js","/node_modules/react-native-paper/lib/module/components/List/ListIcon.js","/node_modules/react-native-paper/lib/module/components/List/ListItem.js","/node_modules/react-native-paper/lib/module/components/List/ListSection.js","/node_modules/react-native-paper/lib/module/components/List/ListSubheader.js","/node_modules/react-native-paper/lib/module/components/List/ListImage.js","/node_modules/react-native-paper/lib/module/components/FAB/AnimatedFAB.js","/node_modules/react-native-paper/lib/module/components/FAB/utils.js","/node_modules/react-native-paper/lib/module/components/Surface.js","/node_modules/react-native-paper/lib/module/utils/splitStyles.js","/node_modules/react-native-paper/lib/module/components/ActivityIndicator.js","/node_modules/react-native-paper/lib/module/components/Banner.js","/node_modules/react-native-paper/lib/module/components/Button/Button.js","/node_modules/react-native-paper/lib/module/components/Button/utils.js","/node_modules/react-native-paper/lib/module/components/BottomNavigation/BottomNavigation.js","/node_modules/react-native-paper/lib/module/components/BottomNavigation/BottomNavigationBar.js","/node_modules/react-native-paper/lib/module/components/BottomNavigation/utils.js","/node_modules/react-native-paper/lib/module/utils/useAnimatedValue.js","/node_modules/react-native-paper/lib/module/utils/useLazyRef.js","/node_modules/react-native-paper/lib/module/utils/useAnimatedValueArray.js","/node_modules/react-native-paper/lib/module/utils/useIsKeyboardShown.js","/node_modules/react-native-web/dist/exports/Keyboard/index.js","/node_modules/react-native-paper/lib/module/utils/useLayout.js","/node_modules/react-native-paper/lib/module/components/BottomNavigation/BottomNavigationRouteScreen.js","/node_modules/react-native-paper/lib/module/components/Card/Card.js","/node_modules/react-native-paper/lib/module/components/Card/CardActions.js","/node_modules/react-native-paper/lib/module/components/Card/CardContent.js","/node_modules/react-native-paper/lib/module/components/Card/CardCover.js","/node_modules/react-native-paper/lib/module/components/Card/utils.js","/node_modules/react-native-paper/lib/module/components/Card/CardTitle.js","/node_modules/react-native-paper/lib/module/components/Typography/v2/Caption.js","/node_modules/react-native-paper/lib/module/components/Typography/v2/Title.js","/node_modules/react-native-paper/lib/module/components/Checkbox/index.js","/node_modules/react-native-paper/lib/module/components/Checkbox/Checkbox.js","/node_modules/react-native-paper/lib/module/components/Checkbox/CheckboxAndroid.js","/node_modules/react-native-paper/lib/module/components/Checkbox/utils.js","/node_modules/react-native-paper/lib/module/components/Checkbox/CheckboxIOS.js","/node_modules/react-native-paper/lib/module/components/Checkbox/CheckboxItem.js","/node_modules/react-native-paper/lib/module/components/Chip/Chip.js","/node_modules/react-native-paper/lib/module/components/Chip/helpers.js","/node_modules/react-native-paper/lib/module/components/DataTable/DataTable.js","/node_modules/react-native-paper/lib/module/components/DataTable/DataTableCell.js","/node_modules/react-native-paper/lib/module/components/DataTable/DataTableHeader.js","/node_modules/react-native-paper/lib/module/components/DataTable/DataTablePagination.js","/node_modules/react-native-paper/lib/module/components/IconButton/IconButton.js","/node_modules/react-native-paper/lib/module/components/IconButton/utils.js","/node_modules/react-native-paper/lib/module/components/CrossFadeIcon.js","/node_modules/react-native-paper/lib/module/components/Menu/Menu.js","/node_modules/react-native-paper/lib/module/components/Menu/MenuItem.js","/node_modules/react-native-paper/lib/module/components/Menu/utils.js","/node_modules/react-native-paper/lib/module/constants.js","/node_modules/react-native-paper/lib/module/types.js","/node_modules/react-native-paper/lib/module/utils/BackHandler/BackHandler.js","/node_modules/react-native-paper/lib/module/components/Portal/Portal.js","/node_modules/react-native-paper/lib/module/components/Portal/PortalConsumer.js","/node_modules/react-native-paper/lib/module/components/DataTable/DataTableRow.js","/node_modules/react-native-paper/lib/module/components/DataTable/DataTableTitle.js","/node_modules/react-native-paper/lib/module/components/Dialog/Dialog.js","/node_modules/react-native-paper/lib/module/components/Dialog/DialogActions.js","/node_modules/react-native-paper/lib/module/components/Dialog/DialogContent.js","/node_modules/react-native-paper/lib/module/components/Dialog/DialogIcon.js","/node_modules/react-native-paper/lib/module/components/Dialog/DialogScrollArea.js","/node_modules/react-native-paper/lib/module/components/Dialog/DialogTitle.js","/node_modules/react-native-paper/lib/module/components/Modal.js","/node_modules/react-native-paper/lib/module/components/FAB/index.js","/node_modules/react-native-paper/lib/module/components/FAB/FAB.js","/node_modules/react-native-paper/lib/module/components/FAB/FABGroup.js","/node_modules/react-native-paper/lib/module/components/HelperText/HelperText.js","/node_modules/react-native-paper/lib/module/components/HelperText/utils.js","/node_modules/react-native-paper/lib/module/components/ProgressBar.js","/node_modules/react-native-paper/lib/module/components/RadioButton/index.js","/node_modules/react-native-paper/lib/module/components/RadioButton/RadioButton.js","/node_modules/react-native-paper/lib/module/components/RadioButton/RadioButtonAndroid.js","/node_modules/react-native-paper/lib/module/components/RadioButton/RadioButtonGroup.js","/node_modules/react-native-paper/lib/module/components/RadioButton/utils.js","/node_modules/react-native-paper/lib/module/components/RadioButton/RadioButtonIOS.js","/node_modules/react-native-paper/lib/module/components/RadioButton/RadioButtonItem.js","/node_modules/react-native-paper/lib/module/components/Searchbar.js","/node_modules/react-native-web/dist/exports/TextInput/index.js","/node_modules/react-native-paper/lib/module/components/Snackbar.js","/node_modules/react-native-paper/lib/module/components/Switch/Switch.js","/node_modules/react-native-web/dist/exports/Switch/index.js","/node_modules/react-native-web/dist/modules/multiplyStyleLengthValue/index.js","/node_modules/react-native-paper/lib/module/components/Switch/utils.js","/node_modules/react-native-paper/lib/module/components/Appbar/index.js","/node_modules/react-native-paper/lib/module/components/Appbar/Appbar.js","/node_modules/react-native-paper/lib/module/components/Appbar/AppbarContent.js","/node_modules/react-native-paper/lib/module/components/Appbar/utils.js","/node_modules/react-native-paper/lib/module/components/Appbar/AppbarAction.js","/node_modules/react-native-paper/lib/module/components/Appbar/AppbarBackAction.js","/node_modules/react-native-paper/lib/module/components/Appbar/AppbarBackIcon.js","/node_modules/react-native-paper/lib/module/components/Appbar/AppbarHeader.js","/node_modules/react-native-paper/lib/module/components/TextInput/TextInput.js","/node_modules/react-native-paper/lib/module/components/TextInput/Adornment/TextInputAffix.js","/node_modules/react-native-paper/lib/module/components/TextInput/Adornment/enums.js","/node_modules/react-native-paper/lib/module/components/TextInput/Adornment/utils.js","/node_modules/react-native-paper/lib/module/components/TextInput/helpers.js","/node_modules/react-native-paper/lib/module/components/TextInput/constants.js","/node_modules/react-native-paper/lib/module/components/TextInput/Adornment/TextInputIcon.js","/node_modules/react-native-paper/lib/module/components/TextInput/TextInputFlat.js","/node_modules/react-native-paper/lib/module/components/TextInput/Addons/Underline.js","/node_modules/react-native-paper/lib/module/components/TextInput/Adornment/TextInputAdornment.js","/node_modules/react-native-paper/lib/module/components/TextInput/Label/InputLabel.js","/node_modules/react-native-paper/lib/module/components/TextInput/TextInputOutlined.js","/node_modules/react-native-paper/lib/module/components/TextInput/Addons/Outline.js","/node_modules/react-native-paper/lib/module/components/TextInput/Label/LabelBackground.js","/node_modules/react-native-paper/lib/module/utils/roundLayoutSize.js","/node_modules/react-native-paper/lib/module/components/ToggleButton/index.js","/node_modules/react-native-paper/lib/module/components/ToggleButton/ToggleButton.js","/node_modules/react-native-paper/lib/module/components/ToggleButton/ToggleButtonGroup.js","/node_modules/react-native-paper/lib/module/components/ToggleButton/utils.js","/node_modules/react-native-paper/lib/module/components/ToggleButton/ToggleButtonRow.js","/node_modules/react-native-paper/lib/module/components/SegmentedButtons/SegmentedButtons.js","/node_modules/react-native-paper/lib/module/components/SegmentedButtons/SegmentedButtonItem.js","/node_modules/react-native-paper/lib/module/components/SegmentedButtons/utils.js","/node_modules/react-native-paper/lib/module/components/Tooltip/Tooltip.js","/node_modules/react-native-paper/lib/module/components/Tooltip/utils.js","/node_modules/react-native-paper/lib/module/components/Typography/v2/index.js","/node_modules/react-native-paper/lib/module/components/Typography/v2/Headline.js","/node_modules/react-native-paper/lib/module/components/Typography/v2/Paragraph.js","/node_modules/react-native-paper/lib/module/components/Typography/v2/Subheading.js","/node_modules/uuid/dist/esm-browser/index.js","/node_modules/uuid/dist/esm-browser/v1.js","/node_modules/uuid/dist/esm-browser/rng.js","/node_modules/uuid/dist/esm-browser/stringify.js","/node_modules/uuid/dist/esm-browser/validate.js","/node_modules/uuid/dist/esm-browser/regex.js","/node_modules/uuid/dist/esm-browser/v3.js","/node_modules/uuid/dist/esm-browser/v35.js","/node_modules/uuid/dist/esm-browser/parse.js","/node_modules/uuid/dist/esm-browser/md5.js","/node_modules/uuid/dist/esm-browser/v4.js","/node_modules/uuid/dist/esm-browser/v5.js","/node_modules/uuid/dist/esm-browser/sha1.js","/node_modules/uuid/dist/esm-browser/nil.js","/node_modules/uuid/dist/esm-browser/version.js","/node_modules/expo-linking/build/Linking.js","/node_modules/expo-linking/build/ExpoLinking.web.js","/node_modules/expo-linking/build/createURL.web.js","/node_modules/expo-linking/build/validateURL.js","/node_modules/expo-linking/build/Linking.types.js","/node_modules/expo-linking/build/Schemes.web.js","/node_modules/ua-parser-js/src/ua-parser.js","/node_modules/react-native-device-info/lib/module/index.js","/node_modules/react-native-device-info/lib/module/internal/asyncHookWrappers.js","/node_modules/react-native-device-info/lib/module/internal/devicesWithDynamicIsland.js","/node_modules/react-native-device-info/lib/module/internal/devicesWithNotch.js","/node_modules/react-native-device-info/lib/module/internal/nativeInterface.js","/node_modules/react-native-device-info/lib/module/web/index.js","/node_modules/react-native-device-info/lib/module/internal/supported-platform-info.js","/node_modules/expo-network/build/Network.js","/node_modules/expo-network/build/ExpoNetwork.web.js","/node_modules/expo-network/build/Network.types.js","/assets/certifications/width85/agw_certified_grassfed.png","/assets/certifications/width85/agw_certified_non_gmo.png","/assets/certifications/width85/agw_certified_organic.png","/assets/certifications/width85/agw_certified_regenerative.png","/assets/certifications/width85/agw_salmon_welfare_certified.png","/assets/certifications/width85/american_grassfed_association.png","/assets/certifications/width85/american_humane_certified.png","/assets/certifications/width85/animal_welfare_approved.png","/assets/certifications/width85/animal_welfare_certified_1.png","/assets/certifications/width85/animal_welfare_certified_2.png","/assets/certifications/width85/animal_welfare_certified_3.png","/assets/certifications/width85/animal_welfare_certified_4.png","/assets/certifications/width85/animal_welfare_certified_5.png","/assets/certifications/width85/animal_welfare_certified_6.png","/assets/certifications/width85/animal_welfare_certified_fish_1.jpg","/assets/certifications/width85/animal_welfare_certified_fish_3.jpg","/assets/certifications/width85/animal_welfare_certified_fish_6.jpg","/assets/certifications/width85/applegate_humanely_raised.png","/assets/certifications/width85/certified_humane_free_range.png","/assets/certifications/width85/certified_humane_grass_fed.png","/assets/certifications/width85/certified_humane_pasture_raised_grass_fed.png","/assets/certifications/width85/certified_humane.png","/assets/certifications/width85/food_alliance_certified.png","/assets/certifications/width85/one_health_certified.png","/assets/certifications/width85/regenerative_organic_certified.png","/assets/certifications/width85/usda_organic.png","/assets/certifications/width85/better_chicken_project.png","/assets/No-Image-Placeholder.png","/js/context/AppState.js","/node_modules/@reduxjs/toolkit/dist/redux-toolkit.esm.js","/node_modules/immer/dist/immer.esm.js","/node_modules/redux/es/redux.js","/node_modules/@babel/runtime/helpers/esm/objectSpread2.js","/node_modules/@babel/runtime/helpers/esm/defineProperty.js","/node_modules/reselect/es/index.js","/node_modules/reselect/es/defaultMemoize.js","/node_modules/redux-thunk/es/index.js","/node_modules/@react-navigation/bottom-tabs/lib/module/index.js","/node_modules/@react-navigation/bottom-tabs/lib/module/navigators/createBottomTabNavigator.js","/node_modules/warn-once/index.js","/node_modules/@react-navigation/bottom-tabs/lib/module/views/BottomTabView.js","/node_modules/@react-navigation/bottom-tabs/lib/module/utils/BottomTabBarHeightCallbackContext.js","/node_modules/@react-navigation/bottom-tabs/lib/module/utils/BottomTabBarHeightContext.js","/node_modules/@react-navigation/bottom-tabs/lib/module/views/BottomTabBar.js","/node_modules/@react-navigation/bottom-tabs/lib/module/utils/useIsKeyboardShown.js","/node_modules/@react-navigation/bottom-tabs/lib/module/views/BottomTabItem.js","/node_modules/color/index.js","/node_modules/color/node_modules/color-convert/index.js","/node_modules/color/node_modules/color-convert/conversions.js","/node_modules/color/node_modules/color-name/index.js","/node_modules/color/node_modules/color-convert/route.js","/node_modules/@react-navigation/bottom-tabs/lib/module/views/TabBarIcon.js","/node_modules/@react-navigation/bottom-tabs/lib/module/views/Badge.js","/node_modules/@react-navigation/bottom-tabs/lib/module/views/ScreenFallback.js","/node_modules/react-native-screens/lib/module/index.js","/node_modules/react-native-screens/lib/module/types.js","/node_modules/react-native-screens/lib/module/useTransitionProgress.js","/node_modules/react-native-screens/lib/module/TransitionProgressContext.js","/node_modules/react-native-screens/lib/module/utils.js","/.expo/metro/shims/react-native-web/dist/exports/BackHandler/index.js","/node_modules/@react-navigation/bottom-tabs/lib/module/utils/useBottomTabBarHeight.js","/js/screens/MapStack.js","/js/screens/Map.js","/js/components/MapView.js","/node_modules/@googlemaps/react-wrapper/dist/index.umd.js","/node_modules/@googlemaps/js-api-loader/dist/index.mjs","/node_modules/@googlemaps/markerclusterer/dist/index.esm.js","/node_modules/@googlemaps/markerclusterer/node_modules/supercluster/index.js","/node_modules/@googlemaps/markerclusterer/node_modules/kdbush/index.js","/node_modules/expo-location/build/Location.js","/node_modules/expo-location/build/ExpoLocation.web.js","/node_modules/expo-location/build/Location.types.js","/node_modules/expo-location/build/LocationEventEmitter.web.js","/node_modules/expo-location/build/LocationSubscribers.js","/node_modules/expo-location/build/GeolocationPolyfill.js","/node_modules/react-redux/es/index.js","/node_modules/use-sync-external-store/shim/index.js","/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js","/node_modules/use-sync-external-store/shim/with-selector.js","/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js","/node_modules/react-redux/es/utils/reactBatchedUpdates.js","/node_modules/react-redux/es/utils/batch.js","/node_modules/react-redux/es/hooks/useSelector.js","/node_modules/react-redux/es/hooks/useReduxContext.js","/node_modules/react-redux/es/components/Context.js","/node_modules/react-redux/es/utils/useSyncExternalStore.js","/node_modules/react-redux/es/components/connect.js","/node_modules/@babel/runtime/helpers/esm/extends.js","/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","/node_modules/react-redux/node_modules/react-is/index.js","/node_modules/react-redux/node_modules/react-is/cjs/react-is.production.min.js","/node_modules/react-redux/es/connect/selectorFactory.js","/node_modules/react-redux/es/connect/verifySubselectors.js","/node_modules/react-redux/es/utils/warning.js","/node_modules/react-redux/es/connect/mapDispatchToProps.js","/node_modules/react-redux/es/utils/bindActionCreators.js","/node_modules/react-redux/es/connect/wrapMapToProps.js","/node_modules/react-redux/es/utils/verifyPlainObject.js","/node_modules/react-redux/es/utils/isPlainObject.js","/node_modules/react-redux/es/connect/invalidArgFactory.js","/node_modules/react-redux/es/connect/mapStateToProps.js","/node_modules/react-redux/es/connect/mergeProps.js","/node_modules/react-redux/es/utils/Subscription.js","/node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js","/node_modules/react-redux/es/utils/shallowEqual.js","/node_modules/react-redux/es/exports.js","/node_modules/react-redux/es/components/Provider.js","/node_modules/react-redux/es/hooks/useDispatch.js","/node_modules/react-redux/es/hooks/useStore.js","/node_modules/react-redux/es/types.js","/js/context/AppContext.js","/js/components/MapSearch.js","/js/components/SearchLauncher.js","/assets/cart-grey.png","/assets/restaurant-grey.png","/assets/coffee-grey.png","/assets/farmers-market-booth.png","/assets/agriculture-grey.png","/assets/filter-circle-grey.png","/assets/magnify-grey-25.png","/assets/clear-grey-18.png","/js/components/CustomActivityIndicator.js","/node_modules/react-native-web/dist/exports/ActivityIndicator/index.js","/assets/loading.gif","/js/screens/MapAds.js","/js/components/FilterSlider.js","/assets/sunpasture_checked.png","/assets/sunpasture.png","/assets/sun_checked.png","/assets/sun.png","/assets/factory_checked.png","/assets/factory.png","/assets/crosshairs-gps-grey-25.png","/assets/plus-minus-variant-grey-25.png","/assets/truck-outline-grey-25.png","/assets/filter-outline-darkgrey.png","/assets/pins/pin_filled.png","/assets/pins/pin_cart.png","/assets/pins/pin_cutlery.png","/assets/pins/pin_coffee.png","/assets/pins/pin_farmersmarket.png","/assets/pins/pin_farm.png","/assets/pins/pin_grey_search.png","/js/screens/LocationDetails.js","/js/components/Collapsible.js","/assets/chevron-right-black-25.png","/assets/chevron-down-black-25.png","/node_modules/react-hook-form/dist/index.esm.mjs","/js/components/CustomButton.js","/node_modules/@ui-kitten/components/index.js","/node_modules/@ui-kitten/components/theme/index.js","/node_modules/@ui-kitten/components/theme/application/applicationProvider.component.js","/node_modules/lodash.merge/index.js","/node_modules/@eva-design/processor/index.js","/node_modules/@eva-design/processor/js/src/processor/index.js","/node_modules/@eva-design/processor/js/src/processor/mapping/mappingProcessor.js","/node_modules/@eva-design/processor/js/src/service/index.js","/node_modules/@eva-design/processor/js/src/service/common/index.js","/node_modules/@eva-design/processor/js/src/service/common/common.service.js","/node_modules/@eva-design/processor/js/src/service/mapping/index.js","/node_modules/@eva-design/processor/js/src/service/mapping/mapping.service.js","/node_modules/@eva-design/processor/js/src/service/style/index.js","/node_modules/@eva-design/processor/js/src/service/style/style.service.js","/node_modules/@eva-design/processor/js/src/processor/meta/metaProcessor.js","/node_modules/@eva-design/processor/js/src/processor/schema/schemaProcessor.js","/node_modules/@ui-kitten/components/theme/style/styleProvider.component.js","/node_modules/@ui-kitten/components/theme/mapping/mappingProvider.component.js","/node_modules/@ui-kitten/components/theme/mapping/mappingContext.js","/node_modules/@ui-kitten/components/theme/theme/themeProvider.component.js","/node_modules/@ui-kitten/components/theme/theme/themeContext.js","/node_modules/@ui-kitten/components/theme/theme/theme.service.js","/node_modules/@ui-kitten/components/theme/modal/modal.service.js","/node_modules/@ui-kitten/components/theme/style/styled.js","/node_modules/@ui-kitten/components/theme/style/styleConsumer.service.js","/node_modules/@ui-kitten/components/theme/style/style.service.js","/node_modules/@ui-kitten/components/theme/theme/withStyles.js","/node_modules/@ui-kitten/components/ui/index.js","/node_modules/@ui-kitten/components/ui/autocomplete/autocomplete.component.js","/node_modules/react-native-web/dist/index.js","/node_modules/react-native-web/dist/exports/Alert/index.js","/node_modules/react-native-web/dist/exports/AppState/index.js","/node_modules/react-native-web/dist/exports/Clipboard/index.js","/node_modules/react-native-web/dist/exports/LayoutAnimation/index.js","/node_modules/react-native-web/dist/vendor/react-native/LayoutAnimation/index.js","/node_modules/react-native-web/dist/exports/Linking/index.js","/node_modules/react-native-web/dist/exports/PanResponder/index.js","/node_modules/react-native-web/dist/vendor/react-native/PanResponder/index.js","/node_modules/react-native-web/dist/vendor/react-native/TouchHistoryMath/index.js","/node_modules/react-native-web/dist/exports/Share/index.js","/node_modules/react-native-web/dist/exports/Vibration/index.js","/node_modules/react-native-web/dist/exports/Button/index.js","/node_modules/react-native-web/dist/exports/CheckBox/index.js","/node_modules/react-native-web/dist/exports/ImageBackground/index.js","/node_modules/react-native-web/dist/exports/KeyboardAvoidingView/index.js","/node_modules/react-native-web/dist/exports/Modal/index.js","/node_modules/react-native-web/dist/exports/Modal/ModalPortal.js","/node_modules/react-native-web/dist/exports/Modal/ModalAnimation.js","/node_modules/react-native-web/dist/exports/Modal/ModalContent.js","/node_modules/react-native-web/dist/exports/Modal/ModalFocusTrap.js","/node_modules/react-native-web/dist/exports/Picker/index.js","/node_modules/react-native-web/dist/exports/Picker/PickerItem.js","/node_modules/react-native-web/dist/exports/ProgressBar/index.js","/node_modules/react-native-web/dist/exports/SafeAreaView/index.js","/node_modules/react-native-web/dist/exports/StatusBar/index.js","/node_modules/react-native-web/dist/exports/Touchable/index.js","/node_modules/react-native-web/dist/exports/Touchable/BoundingDimensions.js","/node_modules/react-native-web/dist/vendor/react-native/PooledClass/index.js","/node_modules/react-native-web/dist/exports/Touchable/Position.js","/node_modules/react-native-web/dist/exports/TouchableNativeFeedback/index.js","/node_modules/react-native-web/dist/modules/UnimplementedView/index.js","/node_modules/react-native-web/dist/exports/TouchableWithoutFeedback/index.js","/node_modules/react-native-web/dist/exports/VirtualizedList/index.js","/node_modules/react-native-web/dist/exports/YellowBox/index.js","/node_modules/react-native-web/dist/exports/LogBox/index.js","/node_modules/react-native-web/dist/exports/useColorScheme/index.js","/node_modules/react-native-web/dist/exports/useLocaleContext/index.js","/node_modules/@ui-kitten/components/ui/input/input.component.js","/node_modules/@ui-kitten/components/devsupport/index.js","/node_modules/@ui-kitten/components/devsupport/components/falsyFC/falsyFC.component.js","/node_modules/@ui-kitten/components/devsupport/components/falsyText/falsyText.component.js","/node_modules/@ui-kitten/components/ui/text/text.component.js","/node_modules/@ui-kitten/components/devsupport/components/touchableWithoutFeedback.component.js","/node_modules/@ui-kitten/components/devsupport/components/touchableWeb.component.js","/node_modules/@ui-kitten/components/devsupport/components/measure/measure.component.js","/node_modules/@ui-kitten/components/devsupport/components/measure/type.js","/node_modules/@ui-kitten/components/devsupport/services/web/webEventResponder.js","/node_modules/@ui-kitten/components/devsupport/services/rtl/rtl.service.js","/node_modules/@ui-kitten/components/devsupport/services/rtl/rtlFlexMap.js","/node_modules/@ui-kitten/components/devsupport/services/props/props.service.js","/node_modules/@ui-kitten/components/devsupport/typings.js","/node_modules/@ui-kitten/components/ui/list/list.component.js","/node_modules/@ui-kitten/components/ui/popover/popover.component.js","/node_modules/@ui-kitten/components/ui/modal/modal.component.js","/node_modules/@ui-kitten/components/theme/backdrop/backdrop.component.js","/node_modules/@ui-kitten/components/ui/popover/popoverView.component.js","/node_modules/@ui-kitten/components/ui/popover/placement.service.js","/node_modules/@ui-kitten/components/ui/popover/type.js","/node_modules/@ui-kitten/components/ui/autocomplete/autocompleteItem.component.js","/node_modules/@ui-kitten/components/ui/list/listItem.component.js","/node_modules/@ui-kitten/components/ui/avatar/avatar.component.js","/node_modules/@ui-kitten/components/ui/bottomNavigation/bottomNavigation.component.js","/node_modules/@babel/runtime/helpers/toArray.js","/node_modules/@ui-kitten/components/ui/shared/tabIndicator.component.js","/node_modules/@ui-kitten/components/ui/bottomNavigation/bottomNavigationTab.component.js","/node_modules/@ui-kitten/components/ui/button/button.component.js","/node_modules/@ui-kitten/components/ui/buttonGroup/buttonGroup.component.js","/node_modules/@ui-kitten/components/ui/calendar/calendar.component.js","/node_modules/@ui-kitten/components/ui/calendar/baseCalendar.component.js","/node_modules/@ui-kitten/components/ui/divider/divider.component.js","/node_modules/@ui-kitten/components/ui/calendar/components/calendarHeader.component.js","/node_modules/@ui-kitten/components/ui/shared/chevronDown.component.js","/node_modules/react-native-svg/lib/module/index.js","/node_modules/react-native-svg/lib/module/ReactNativeSVG.web.js","/node_modules/react-native-svg/lib/module/lib/SvgTouchableMixin.js","/node_modules/react-native-svg/lib/module/lib/resolve.js","/node_modules/react-native-svg/lib/module/lib/extract/extractTransform.js","/node_modules/react-native-svg/lib/module/lib/Matrix2D.js","/node_modules/react-native-svg/lib/module/lib/extract/transform.js","/node_modules/@ui-kitten/components/ui/shared/chevronLeft.component.js","/node_modules/@ui-kitten/components/ui/shared/chevronRight.component.js","/node_modules/@ui-kitten/components/ui/calendar/type.js","/node_modules/@ui-kitten/components/ui/calendar/components/calendarMonthHeader.component.js","/node_modules/@ui-kitten/components/ui/calendar/components/picker/calendarPicker.component.js","/node_modules/@ui-kitten/components/ui/calendar/components/picker/calendarPickerRow.component.js","/node_modules/@ui-kitten/components/ui/calendar/components/picker/calendarPickerCell.component.js","/node_modules/@ui-kitten/components/ui/calendar/components/calendarDateContent.component.js","/node_modules/@ui-kitten/components/ui/calendar/i18n/type.js","/node_modules/@ui-kitten/components/ui/calendar/service/nativeDate.service.js","/node_modules/fecha/src/fecha.js","/node_modules/@ui-kitten/components/ui/calendar/service/date.service.js","/node_modules/@ui-kitten/components/ui/calendar/i18n/en.js","/node_modules/@ui-kitten/components/ui/calendar/service/calendarData.service.js","/node_modules/@ui-kitten/components/ui/calendar/service/helpers.js","/node_modules/@ui-kitten/components/ui/card/card.component.js","/node_modules/@ui-kitten/components/ui/calendar/rangeCalendar.component.js","/node_modules/@ui-kitten/components/ui/calendar/service/rangeDate.service.js","/node_modules/@ui-kitten/components/ui/checkbox/checkbox.component.js","/node_modules/@ui-kitten/components/ui/shared/checkmark.component.js","/node_modules/@ui-kitten/components/ui/shared/minus.component.js","/node_modules/@ui-kitten/components/ui/datepicker/datepicker.component.js","/node_modules/@ui-kitten/components/ui/datepicker/baseDatepicker.component.js","/node_modules/@ui-kitten/components/ui/datepicker/rangeDatepicker.component.js","/node_modules/@ui-kitten/components/ui/drawer/drawer.component.js","/node_modules/@ui-kitten/components/ui/menu/menu.component.js","/node_modules/@ui-kitten/components/ui/menu/menu.service.js","/node_modules/@ui-kitten/components/ui/drawer/drawerGroup.component.js","/node_modules/@ui-kitten/components/ui/menu/menuGroup.component.js","/node_modules/@ui-kitten/components/ui/menu/menuItem.component.js","/node_modules/@ui-kitten/components/ui/drawer/drawerItem.component.js","/node_modules/@ui-kitten/components/ui/select/select.component.js","/node_modules/@ui-kitten/components/ui/select/select.service.js","/node_modules/@ui-kitten/components/ui/select/selectGroup.component.js","/node_modules/@ui-kitten/components/ui/select/selectItem.component.js","/node_modules/@ui-kitten/components/ui/icon/icon.component.js","/node_modules/@ui-kitten/components/ui/icon/iconAnimation.js","/node_modules/@ui-kitten/components/ui/animation/index.js","/node_modules/@ui-kitten/components/ui/animation/animation.js","/node_modules/@ui-kitten/components/ui/animation/pulseAnimation.js","/node_modules/@ui-kitten/components/ui/animation/shakeAnimation.js","/node_modules/@ui-kitten/components/ui/animation/zoomAnimation.js","/node_modules/@ui-kitten/components/ui/icon/service/iconRegistry.service.js","/node_modules/@ui-kitten/components/ui/icon/iconRegistry.component.js","/node_modules/@ui-kitten/components/ui/layout/layout.component.js","/node_modules/@ui-kitten/components/ui/overflowMenu/overflowMenu.component.js","/node_modules/@ui-kitten/components/ui/radio/radio.component.js","/node_modules/@ui-kitten/components/ui/radioGroup/radioGroup.component.js","/node_modules/@ui-kitten/components/ui/progressBar/progressBar.component.js","/node_modules/@ui-kitten/components/ui/progressBar/animation.js","/node_modules/@ui-kitten/components/ui/circularProgressBar/circularProgressBar.component.js","/node_modules/@ui-kitten/components/ui/circularProgressBar/animation.js","/node_modules/@ui-kitten/components/ui/spinner/spinner.component.js","/node_modules/@ui-kitten/components/ui/spinner/animation.js","/node_modules/@ui-kitten/components/ui/tab/tabView.component.js","/node_modules/@ui-kitten/components/ui/tab/tabBar.component.js","/node_modules/@ui-kitten/components/ui/viewPager/viewPager.component.js","/node_modules/@ui-kitten/components/ui/tab/tab.component.js","/node_modules/@ui-kitten/components/ui/toggle/toggle.component.js","/node_modules/@ui-kitten/components/ui/tooltip/tooltip.component.js","/node_modules/@ui-kitten/components/ui/popover/popoverIndicator.component.js","/node_modules/@ui-kitten/components/ui/topNavigation/topNavigation.component.js","/node_modules/@ui-kitten/components/ui/topNavigation/topNavigationAction.component.js","/node_modules/react-native-markdown-display-fh/src/index.js","/node_modules/react-native-markdown-display-fh/src/lib/parser.js","/node_modules/react-native-markdown-display-fh/src/lib/util/tokensToAST.js","/node_modules/react-native-markdown-display-fh/src/lib/util/getUniqueID.js","/node_modules/react-native-markdown-display-fh/src/lib/util/getTokenTypeByToken.js","/node_modules/react-native-markdown-display-fh/src/lib/util/stringToTokens.js","/node_modules/react-native-markdown-display-fh/src/lib/util/cleanupTokens.js","/node_modules/react-native-markdown-display-fh/src/lib/util/flattenInlineTokens.js","/node_modules/react-native-markdown-display-fh/src/lib/util/renderInlineAsText.js","/node_modules/react-native-markdown-display-fh/src/lib/util/groupTextTokens.js","/node_modules/react-native-markdown-display-fh/src/lib/util/Token.js","/node_modules/react-native-markdown-display-fh/src/lib/util/omitListItemParagraph.js","/node_modules/react-native-markdown-display-fh/src/lib/util/hasParents.js","/node_modules/react-native-markdown-display-fh/src/lib/util/openUrl.js","/node_modules/react-native-markdown-display-fh/src/lib/renderRules.js","/node_modules/react-native-fit-image/dist/FitImage.js","/node_modules/react-native-markdown-display-fh/src/lib/data/textStyleProps.js","/node_modules/react-native-markdown-display-fh/src/lib/AstRenderer.js","/node_modules/react-native-markdown-display-fh/src/lib/util/convertAdditionalStyles.js","/node_modules/css-to-react-native/index.js","/node_modules/camelize/index.js","/node_modules/css-color-keywords/index.js","/node_modules/css-color-keywords/colors.json","/node_modules/markdown-it/index.js","/node_modules/markdown-it/lib/index.js","/node_modules/markdown-it/lib/common/utils.js","/node_modules/markdown-it/lib/common/entities.js","/node_modules/markdown-it/node_modules/entities/lib/maps/entities.json","/node_modules/uc.micro/categories/P/regex.js","/node_modules/mdurl/index.js","/node_modules/mdurl/encode.js","/node_modules/mdurl/decode.js","/node_modules/mdurl/format.js","/node_modules/mdurl/parse.js","/node_modules/uc.micro/index.js","/node_modules/uc.micro/properties/Any/regex.js","/node_modules/uc.micro/categories/Cc/regex.js","/node_modules/uc.micro/categories/Cf/regex.js","/node_modules/uc.micro/categories/Z/regex.js","/node_modules/markdown-it/lib/helpers/index.js","/node_modules/markdown-it/lib/helpers/parse_link_label.js","/node_modules/markdown-it/lib/helpers/parse_link_destination.js","/node_modules/markdown-it/lib/helpers/parse_link_title.js","/node_modules/markdown-it/lib/renderer.js","/node_modules/markdown-it/lib/parser_core.js","/node_modules/markdown-it/lib/ruler.js","/node_modules/markdown-it/lib/rules_core/normalize.js","/node_modules/markdown-it/lib/rules_core/block.js","/node_modules/markdown-it/lib/rules_core/inline.js","/node_modules/markdown-it/lib/rules_core/linkify.js","/node_modules/markdown-it/lib/rules_core/replacements.js","/node_modules/markdown-it/lib/rules_core/smartquotes.js","/node_modules/markdown-it/lib/rules_core/text_join.js","/node_modules/markdown-it/lib/rules_core/state_core.js","/node_modules/markdown-it/lib/token.js","/node_modules/markdown-it/lib/parser_block.js","/node_modules/markdown-it/lib/rules_block/table.js","/node_modules/markdown-it/lib/rules_block/code.js","/node_modules/markdown-it/lib/rules_block/fence.js","/node_modules/markdown-it/lib/rules_block/blockquote.js","/node_modules/markdown-it/lib/rules_block/hr.js","/node_modules/markdown-it/lib/rules_block/list.js","/node_modules/markdown-it/lib/rules_block/reference.js","/node_modules/markdown-it/lib/rules_block/html_block.js","/node_modules/markdown-it/lib/common/html_blocks.js","/node_modules/markdown-it/lib/common/html_re.js","/node_modules/markdown-it/lib/rules_block/heading.js","/node_modules/markdown-it/lib/rules_block/lheading.js","/node_modules/markdown-it/lib/rules_block/paragraph.js","/node_modules/markdown-it/lib/rules_block/state_block.js","/node_modules/markdown-it/lib/parser_inline.js","/node_modules/markdown-it/lib/rules_inline/text.js","/node_modules/markdown-it/lib/rules_inline/linkify.js","/node_modules/markdown-it/lib/rules_inline/newline.js","/node_modules/markdown-it/lib/rules_inline/escape.js","/node_modules/markdown-it/lib/rules_inline/backticks.js","/node_modules/markdown-it/lib/rules_inline/strikethrough.js","/node_modules/markdown-it/lib/rules_inline/emphasis.js","/node_modules/markdown-it/lib/rules_inline/link.js","/node_modules/markdown-it/lib/rules_inline/image.js","/node_modules/markdown-it/lib/rules_inline/autolink.js","/node_modules/markdown-it/lib/rules_inline/html_inline.js","/node_modules/markdown-it/lib/rules_inline/entity.js","/node_modules/markdown-it/lib/rules_inline/balance_pairs.js","/node_modules/markdown-it/lib/rules_inline/fragments_join.js","/node_modules/markdown-it/lib/rules_inline/state_inline.js","/node_modules/linkify-it/index.js","/node_modules/linkify-it/lib/re.js","/node_modules/punycode/punycode.es6.js","/node_modules/markdown-it/lib/presets/default.js","/node_modules/markdown-it/lib/presets/zero.js","/node_modules/markdown-it/lib/presets/commonmark.js","/node_modules/react-native-markdown-display-fh/src/lib/util/removeTextStyleProps.js","/node_modules/react-native-markdown-display-fh/src/lib/styles.js","/js/components/HeaderLeft.tsx","/assets/back/back-icon.png","/assets/circle-half-full-grey-25.png","/assets/google-maps-black-30.png","/assets/navigation-variant-outline-black-30.png","/js/screens/ProductDetails.js","/js/components/CustomScrollView.js","/assets/circle-half-full-black-30.png","/js/screens/Filter.js","/assets/logo.png","/assets/appstore30.png","/assets/playstore30.png","/js/screens/DeliveryStack.js","/js/screens/Delivery.js","/js/components/CustomChip.js","/js/context/AppCache.js","/node_modules/expo-file-system/build/index.js","/node_modules/expo-file-system/build/FileSystem.js","/node_modules/expo-file-system/build/ExponentFileSystem.web.js","/node_modules/expo-file-system/build/ExponentFileSystemShim.js","/node_modules/expo-file-system/build/FileSystem.types.js","/assets/delivery.png","/js/screens/MoreStack.js","/js/screens/More.js","/assets/chevron-right-grey.png","/assets/information-outline-grey.png","/assets/chat-question-outline-grey.png","/assets/email-circle-outline-grey.png","/assets/lightbulb-on-outline-grey.png","/assets/plus-circle-outline-grey.png","/assets/email-outline-grey.png","/assets/list-ol-grey.png","/assets/newspaper-variant-outline-grey.png","/assets/eye-off-outline-grey.png","/assets/gavel-grey.png","/assets/tools-grey.png","/assets/format-list-bulleted-type-25-grey.png","/assets/account-cowboy-hat-25-grey.png","/js/screens/About.js","/js/components/CustomParagraph.js","/assets/share-black.png","/assets/facebook.png","/assets/instagram.png","/assets/twitter.png","/assets/rss.png","/assets/email-send-outline-black.png","/assets/appstore50.png","/assets/playstore50.png","/assets/Certified_B_Corporation_PENDING-SM_150_250.png","/assets/aspca-grant-badge-2023.png","/js/screens/FAQ.js","/js/components/CustomBullet.js","/node_modules/@babel/runtime/helpers/readOnlyError.js","/js/screens/Learn.js","/js/screens/Credits.js","/js/screens/PrivacyPolicy.js","/js/screens/Terms.js","/js/screens/Debug.js","/js/screens/SuggestLocation.js","/node_modules/react-native-google-places-autocomplete/GooglePlacesAutocomplete.js","/node_modules/lodash.debounce/index.js","/node_modules/react-native-google-places-autocomplete/node_modules/qs/lib/index.js","/node_modules/react-native-google-places-autocomplete/node_modules/qs/lib/stringify.js","/node_modules/react-native-google-places-autocomplete/node_modules/qs/lib/utils.js","/node_modules/react-native-google-places-autocomplete/node_modules/qs/lib/formats.js","/node_modules/react-native-google-places-autocomplete/node_modules/qs/lib/parse.js","/node_modules/react-native-google-places-autocomplete/images/powered_by_google_on_white.png","/js/screens/ListLocationsNear.js","/js/screens/Contact.js","/js/screens/Subscribe.js","/js/screens/News.js","/js/screens/Test.js","/js/screens/AllProducts.js","/js/screens/AllProducers.js","/js/screens/ExploreStack.js","/js/screens/Explore.js","/assets/explore.png","/node_modules/expo-splash-screen/build/index.js","/assets/map-marker-blue.png","/assets/map-marker-grey.png","/assets/package-variant-closed-blue.png","/assets/package-variant-closed-grey.png","/assets/find-blue.png","/assets/find-grey.png","/assets/ellipsis-horizontal-circle-blue.png","/assets/ellipsis-horizontal-circle-grey.png","/js/components/Search.js","/js/components/CustomCheckbox.tsx","/js/components/SearchTextInput.js","/js/components/CustomKeyboardAvoidingView.js","/node_modules/@eva-design/eva/index.js","/node_modules/@eva-design/eva/mapping.json","/node_modules/@eva-design/eva/themes/light.json","/node_modules/@eva-design/eva/themes/dark.json","/node_modules/expo-status-bar/build/StatusBar.web.js","/js/components/ChangeFilter.js","/js/components/Subscribe.js","/node_modules/@ui-kitten/eva-icons/index.js","/node_modules/@ui-kitten/eva-icons/createIconsMap.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/index.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Activity.js","/node_modules/@ui-kitten/eva-icons/node_modules/react/index.js","/node_modules/@ui-kitten/eva-icons/node_modules/react/cjs/react.production.min.js","/node_modules/object-assign/index.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ActivityOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/AlertCircle.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/AlertCircleOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/AlertTriangle.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/AlertTriangleOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Archive.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArchiveOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowBack.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowBackOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowCircleDown.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowCircleDownOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowCircleLeft.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowCircleLeftOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowCircleRight.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowCircleRightOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowCircleUp.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowCircleUpOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowDown.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowDownOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowDownward.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowDownwardOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowForward.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowForwardOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowIosBack.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowIosBackOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowIosDownward.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowIosDownwardOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowIosForward.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowIosForwardOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowIosUpward.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowIosUpwardOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowLeft.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowLeftOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowRight.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowRightOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowUp.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowUpOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowUpward.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowUpwardOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowheadDown.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowheadDownOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowheadLeft.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowheadLeftOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowheadRight.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowheadRightOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowheadUp.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ArrowheadUpOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/At.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/AtOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Attach.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/AttachOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Attach_2.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Attach_2Outline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Award.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/AwardOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Backspace.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/BackspaceOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/BarChart.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/BarChartOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/BarChart_2.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/BarChart_2Outline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Battery.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/BatteryOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Behance.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/BehanceOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Bell.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/BellOff.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/BellOffOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/BellOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Bluetooth.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/BluetoothOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Book.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/BookOpen.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/BookOpenOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/BookOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Bookmark.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/BookmarkOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Briefcase.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/BriefcaseOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Browser.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/BrowserOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Brush.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/BrushOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Bulb.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/BulbOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Calendar.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CalendarOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Camera.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CameraOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Car.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CarOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Cast.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CastOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Charging.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ChargingOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Checkmark.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CheckmarkCircle.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CheckmarkCircleOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CheckmarkCircle_2.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CheckmarkCircle_2Outline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CheckmarkOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CheckmarkSquare.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CheckmarkSquareOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CheckmarkSquare_2.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CheckmarkSquare_2Outline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ChevronDown.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ChevronDownOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ChevronLeft.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ChevronLeftOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ChevronRight.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ChevronRightOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ChevronUp.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ChevronUpOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Clipboard.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ClipboardOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Clock.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ClockOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Close.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CloseCircle.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CloseCircleOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CloseOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CloseSquare.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CloseSquareOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CloudDownload.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CloudDownloadOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CloudUpload.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CloudUploadOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Code.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CodeDownload.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CodeDownloadOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CodeOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Collapse.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CollapseOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ColorPalette.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ColorPaletteOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ColorPicker.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ColorPickerOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Compass.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CompassOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Copy.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CopyOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CornerDownLeft.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CornerDownLeftOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CornerDownRight.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CornerDownRightOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CornerLeftDown.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CornerLeftDownOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CornerLeftUp.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CornerLeftUpOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CornerRightDown.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CornerRightDownOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CornerRightUp.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CornerRightUpOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CornerUpLeft.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CornerUpLeftOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CornerUpRight.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CornerUpRightOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CreditCard.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CreditCardOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Crop.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CropOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Cube.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/CubeOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/DiagonalArrowLeftDown.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/DiagonalArrowLeftDownOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/DiagonalArrowLeftUp.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/DiagonalArrowLeftUpOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/DiagonalArrowRightDown.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/DiagonalArrowRightDownOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/DiagonalArrowRightUp.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/DiagonalArrowRightUpOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/DoneAll.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/DoneAllOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Download.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/DownloadOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Droplet.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/DropletOff.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/DropletOffOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/DropletOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Edit.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/EditOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Edit_2.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Edit_2Outline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Email.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/EmailOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Expand.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ExpandOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ExternalLink.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ExternalLinkOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Eye.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/EyeOff.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/EyeOffOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/EyeOff_2.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/EyeOff_2Outline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/EyeOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Facebook.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/FacebookOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/File.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/FileAdd.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/FileAddOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/FileOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/FileRemove.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/FileRemoveOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/FileText.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/FileTextOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Film.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/FilmOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Flag.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/FlagOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Flash.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/FlashOff.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/FlashOffOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/FlashOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Flip.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/FlipOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Flip_2.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Flip_2Outline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Folder.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/FolderAdd.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/FolderAddOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/FolderOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/FolderRemove.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/FolderRemoveOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Funnel.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/FunnelOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Gift.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/GiftOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Github.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/GithubOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Globe.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/GlobeOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Globe_2.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Globe_2Outline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Globe_3.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Google.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/GoogleOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Grid.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/GridOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/HardDrive.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/HardDriveOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Hash.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/HashOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Headphones.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/HeadphonesOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Heart.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/HeartOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Home.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/HomeOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Image.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ImageOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Image_2.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Inbox.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/InboxOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Info.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/InfoOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Keypad.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/KeypadOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Layers.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/LayersOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Layout.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/LayoutOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Link.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/LinkOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Link_2.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Link_2Outline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Linkedin.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/LinkedinOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/List.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ListOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/LoaderOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Lock.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/LockOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/LogIn.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/LogInOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/LogOut.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/LogOutOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Map.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/MapOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Maximize.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/MaximizeOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Menu.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/MenuArrow.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/MenuArrowOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/MenuOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Menu_2.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Menu_2Outline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/MessageCircle.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/MessageCircleOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/MessageSquare.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/MessageSquareOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Mic.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/MicOff.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/MicOffOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/MicOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Minimize.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/MinimizeOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Minus.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/MinusCircle.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/MinusCircleOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/MinusOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/MinusSquare.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/MinusSquareOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Monitor.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/MonitorOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Moon.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/MoonOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/MoreHorizontal.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/MoreHorizontalOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/MoreVertical.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/MoreVerticalOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Move.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/MoveOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Music.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/MusicOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Navigation.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/NavigationOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Navigation_2.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Navigation_2Outline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Npm.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/NpmOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Options.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/OptionsOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Options_2.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Options_2Outline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Pantone.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PantoneOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PaperPlane.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PaperPlaneOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PauseCircle.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PauseCircleOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/People.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PeopleOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Percent.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PercentOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Person.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PersonAdd.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PersonAddOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PersonDelete.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PersonDeleteOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PersonDone.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PersonDoneOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PersonOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PersonRemove.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PersonRemoveOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Phone.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PhoneCall.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PhoneCallOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PhoneMissed.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PhoneMissedOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PhoneOff.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PhoneOffOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PhoneOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PieChart.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PieChartOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PieChart_2.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Pin.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PinOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PlayCircle.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PlayCircleOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Plus.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PlusCircle.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PlusCircleOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PlusOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PlusSquare.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PlusSquareOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Power.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PowerOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Pricetags.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PricetagsOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Printer.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/PrinterOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/QuestionMark.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/QuestionMarkCircle.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/QuestionMarkCircleOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/QuestionMarkOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Radio.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/RadioButtonOff.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/RadioButtonOffOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/RadioButtonOn.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/RadioButtonOnOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/RadioOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Recording.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/RecordingOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Refresh.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/RefreshOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Repeat.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/RepeatOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/RewindLeft.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/RewindLeftOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/RewindRight.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/RewindRightOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Save.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/SaveOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Scissors.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ScissorsOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Search.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/SearchOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Settings.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/SettingsOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Settings_2.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Settings_2Outline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Shake.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ShakeOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Share.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ShareOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Shield.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ShieldOff.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ShieldOffOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ShieldOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ShoppingBag.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ShoppingBagOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ShoppingCart.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ShoppingCartOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Shuffle.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ShuffleOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Shuffle_2.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Shuffle_2Outline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/SkipBack.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/SkipBackOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/SkipForward.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/SkipForwardOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Slash.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/SlashOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Smartphone.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/SmartphoneOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/SmilingFace.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/SmilingFaceOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Speaker.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/SpeakerOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Square.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/SquareOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Star.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/StarOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/StopCircle.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/StopCircleOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Sun.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/SunOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Swap.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/SwapOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Sync.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/SyncOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Text.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/TextOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Thermometer.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ThermometerMinus.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ThermometerMinusOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ThermometerOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ThermometerPlus.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ThermometerPlusOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ToggleLeft.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ToggleLeftOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ToggleRight.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/ToggleRightOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Trash.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/TrashOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Trash_2.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Trash_2Outline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/TrendingDown.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/TrendingDownOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/TrendingUp.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/TrendingUpOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Tv.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/TvOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Twitter.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/TwitterOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Umbrella.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/UmbrellaOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Undo.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/UndoOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Unlock.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/UnlockOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Upload.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/UploadOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Video.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/VideoOff.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/VideoOffOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/VideoOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/VolumeDown.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/VolumeDownOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/VolumeMute.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/VolumeMuteOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/VolumeOff.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/VolumeOffOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/VolumeUp.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/VolumeUpOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/Wifi.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/WifiOff.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/WifiOffOutline.js","/node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons/icons/WifiOutline.js","/node_modules/@ui-kitten/eva-icons/evaIcon.component.js"],"sourcesContent":["var __BUNDLE_START_TIME__=this.nativePerformanceNow?nativePerformanceNow():Date.now(),__DEV__=false,process=this.process||{},__METRO_GLOBAL_PREFIX__='';process.env=process.env||{};process.env.NODE_ENV=process.env.NODE_ENV||\"production\";","\"use strict\";\n\nglobal.__r = metroRequire;\nglobal[`${__METRO_GLOBAL_PREFIX__}__d`] = define;\nglobal.__c = clear;\nglobal.__registerSegment = registerSegment;\nvar modules = clear();\nconst EMPTY = {};\nconst CYCLE_DETECTED = {};\nconst { hasOwnProperty } = {};\nif (__DEV__) {\n global.$RefreshReg$ = () => {};\n global.$RefreshSig$ = () => (type) => type;\n}\nfunction clear() {\n modules = Object.create(null);\n return modules;\n}\nif (__DEV__) {\n var verboseNamesToModuleIds = Object.create(null);\n var initializingModuleIds = [];\n}\nfunction define(factory, moduleId, dependencyMap) {\n if (modules[moduleId] != null) {\n if (__DEV__) {\n const inverseDependencies = arguments[4];\n if (inverseDependencies) {\n global.__accept(moduleId, factory, dependencyMap, inverseDependencies);\n }\n }\n return;\n }\n const mod = {\n dependencyMap,\n factory,\n hasError: false,\n importedAll: EMPTY,\n importedDefault: EMPTY,\n isInitialized: false,\n publicModule: {\n exports: {},\n },\n };\n modules[moduleId] = mod;\n if (__DEV__) {\n mod.hot = createHotReloadingObject();\n const verboseName = arguments[3];\n if (verboseName) {\n mod.verboseName = verboseName;\n verboseNamesToModuleIds[verboseName] = moduleId;\n }\n }\n}\nfunction metroRequire(moduleId) {\n if (__DEV__ && typeof moduleId === \"string\") {\n const verboseName = moduleId;\n moduleId = verboseNamesToModuleIds[verboseName];\n if (moduleId == null) {\n throw new Error(`Unknown named module: \"${verboseName}\"`);\n } else {\n console.warn(\n `Requiring module \"${verboseName}\" by name is only supported for ` +\n \"debugging purposes and will BREAK IN PRODUCTION!\"\n );\n }\n }\n const moduleIdReallyIsNumber = moduleId;\n if (__DEV__) {\n const initializingIndex = initializingModuleIds.indexOf(\n moduleIdReallyIsNumber\n );\n if (initializingIndex !== -1) {\n const cycle = initializingModuleIds\n .slice(initializingIndex)\n .map((id) => (modules[id] ? modules[id].verboseName : \"[unknown]\"));\n if (shouldPrintRequireCycle(cycle)) {\n cycle.push(cycle[0]);\n console.warn(\n `Require cycle: ${cycle.join(\" -> \")}\\n\\n` +\n \"Require cycles are allowed, but can result in uninitialized values. \" +\n \"Consider refactoring to remove the need for a cycle.\"\n );\n }\n }\n }\n const module = modules[moduleIdReallyIsNumber];\n return module && module.isInitialized\n ? module.publicModule.exports\n : guardedLoadModule(moduleIdReallyIsNumber, module);\n}\nfunction shouldPrintRequireCycle(modules) {\n const regExps =\n global[__METRO_GLOBAL_PREFIX__ + \"__requireCycleIgnorePatterns\"];\n if (!Array.isArray(regExps)) {\n return true;\n }\n const isIgnored = (module) =>\n module != null && regExps.some((regExp) => regExp.test(module));\n return modules.every((module) => !isIgnored(module));\n}\nfunction metroImportDefault(moduleId) {\n if (__DEV__ && typeof moduleId === \"string\") {\n const verboseName = moduleId;\n moduleId = verboseNamesToModuleIds[verboseName];\n }\n const moduleIdReallyIsNumber = moduleId;\n if (\n modules[moduleIdReallyIsNumber] &&\n modules[moduleIdReallyIsNumber].importedDefault !== EMPTY\n ) {\n return modules[moduleIdReallyIsNumber].importedDefault;\n }\n const exports = metroRequire(moduleIdReallyIsNumber);\n const importedDefault =\n exports && exports.__esModule ? exports.default : exports;\n return (modules[moduleIdReallyIsNumber].importedDefault = importedDefault);\n}\nmetroRequire.importDefault = metroImportDefault;\nfunction metroImportAll(moduleId) {\n if (__DEV__ && typeof moduleId === \"string\") {\n const verboseName = moduleId;\n moduleId = verboseNamesToModuleIds[verboseName];\n }\n const moduleIdReallyIsNumber = moduleId;\n if (\n modules[moduleIdReallyIsNumber] &&\n modules[moduleIdReallyIsNumber].importedAll !== EMPTY\n ) {\n return modules[moduleIdReallyIsNumber].importedAll;\n }\n const exports = metroRequire(moduleIdReallyIsNumber);\n let importedAll;\n if (exports && exports.__esModule) {\n importedAll = exports;\n } else {\n importedAll = {};\n if (exports) {\n for (const key in exports) {\n if (hasOwnProperty.call(exports, key)) {\n importedAll[key] = exports[key];\n }\n }\n }\n importedAll.default = exports;\n }\n return (modules[moduleIdReallyIsNumber].importedAll = importedAll);\n}\nmetroRequire.importAll = metroImportAll;\nmetroRequire.context = function fallbackRequireContext() {\n if (__DEV__) {\n throw new Error(\n \"The experimental Metro feature `require.context` is not enabled in your project.\\nThis can be enabled by setting the `transformer.unstable_allowRequireContext` property to `true` in your Metro configuration.\"\n );\n }\n throw new Error(\n \"The experimental Metro feature `require.context` is not enabled in your project.\"\n );\n};\nmetroRequire.resolveWeak = function fallbackRequireResolveWeak() {\n if (__DEV__) {\n throw new Error(\n \"require.resolveWeak cannot be called dynamically. Ensure you are using the same version of `metro` and `metro-runtime`.\"\n );\n }\n throw new Error(\"require.resolveWeak cannot be called dynamically.\");\n};\nlet inGuard = false;\nfunction guardedLoadModule(moduleId, module) {\n if (!inGuard && global.ErrorUtils) {\n inGuard = true;\n let returnValue;\n try {\n returnValue = loadModuleImplementation(moduleId, module);\n } catch (e) {\n global.ErrorUtils.reportFatalError(e);\n }\n inGuard = false;\n return returnValue;\n } else {\n return loadModuleImplementation(moduleId, module);\n }\n}\nconst ID_MASK_SHIFT = 16;\nconst LOCAL_ID_MASK = ~0 >>> ID_MASK_SHIFT;\nfunction unpackModuleId(moduleId) {\n const segmentId = moduleId >>> ID_MASK_SHIFT;\n const localId = moduleId & LOCAL_ID_MASK;\n return {\n segmentId,\n localId,\n };\n}\nmetroRequire.unpackModuleId = unpackModuleId;\nfunction packModuleId(value) {\n return (value.segmentId << ID_MASK_SHIFT) + value.localId;\n}\nmetroRequire.packModuleId = packModuleId;\nconst moduleDefinersBySegmentID = [];\nconst definingSegmentByModuleID = new Map();\nfunction registerSegment(segmentId, moduleDefiner, moduleIds) {\n moduleDefinersBySegmentID[segmentId] = moduleDefiner;\n if (__DEV__) {\n if (segmentId === 0 && moduleIds) {\n throw new Error(\n \"registerSegment: Expected moduleIds to be null for main segment\"\n );\n }\n if (segmentId !== 0 && !moduleIds) {\n throw new Error(\n \"registerSegment: Expected moduleIds to be passed for segment #\" +\n segmentId\n );\n }\n }\n if (moduleIds) {\n moduleIds.forEach((moduleId) => {\n if (!modules[moduleId] && !definingSegmentByModuleID.has(moduleId)) {\n definingSegmentByModuleID.set(moduleId, segmentId);\n }\n });\n }\n}\nfunction loadModuleImplementation(moduleId, module) {\n if (!module && moduleDefinersBySegmentID.length > 0) {\n const segmentId = definingSegmentByModuleID.get(moduleId) ?? 0;\n const definer = moduleDefinersBySegmentID[segmentId];\n if (definer != null) {\n definer(moduleId);\n module = modules[moduleId];\n definingSegmentByModuleID.delete(moduleId);\n }\n }\n const nativeRequire = global.nativeRequire;\n if (!module && nativeRequire) {\n const { segmentId, localId } = unpackModuleId(moduleId);\n nativeRequire(localId, segmentId);\n module = modules[moduleId];\n }\n if (!module) {\n throw unknownModuleError(moduleId);\n }\n if (module.hasError) {\n throw module.error;\n }\n if (__DEV__) {\n var Systrace = requireSystrace();\n var Refresh = requireRefresh();\n }\n module.isInitialized = true;\n const { factory, dependencyMap } = module;\n if (__DEV__) {\n initializingModuleIds.push(moduleId);\n }\n try {\n if (__DEV__) {\n Systrace.beginEvent(\"JS_require_\" + (module.verboseName || moduleId));\n }\n const moduleObject = module.publicModule;\n if (__DEV__) {\n moduleObject.hot = module.hot;\n var prevRefreshReg = global.$RefreshReg$;\n var prevRefreshSig = global.$RefreshSig$;\n if (Refresh != null) {\n const RefreshRuntime = Refresh;\n global.$RefreshReg$ = (type, id) => {\n RefreshRuntime.register(type, moduleId + \" \" + id);\n };\n global.$RefreshSig$ =\n RefreshRuntime.createSignatureFunctionForTransform;\n }\n }\n moduleObject.id = moduleId;\n factory(\n global,\n metroRequire,\n metroImportDefault,\n metroImportAll,\n moduleObject,\n moduleObject.exports,\n dependencyMap\n );\n if (!__DEV__) {\n module.factory = undefined;\n module.dependencyMap = undefined;\n }\n if (__DEV__) {\n Systrace.endEvent();\n if (Refresh != null) {\n registerExportsForReactRefresh(Refresh, moduleObject.exports, moduleId);\n }\n }\n return moduleObject.exports;\n } catch (e) {\n module.hasError = true;\n module.error = e;\n module.isInitialized = false;\n module.publicModule.exports = undefined;\n throw e;\n } finally {\n if (__DEV__) {\n if (initializingModuleIds.pop() !== moduleId) {\n throw new Error(\n \"initializingModuleIds is corrupt; something is terribly wrong\"\n );\n }\n global.$RefreshReg$ = prevRefreshReg;\n global.$RefreshSig$ = prevRefreshSig;\n }\n }\n}\nfunction unknownModuleError(id) {\n let message = 'Requiring unknown module \"' + id + '\".';\n if (__DEV__) {\n message +=\n \" If you are sure the module exists, try restarting Metro. \" +\n \"You may also want to run `yarn` or `npm install`.\";\n }\n return Error(message);\n}\nif (__DEV__) {\n metroRequire.Systrace = {\n beginEvent: () => {},\n endEvent: () => {},\n };\n metroRequire.getModules = () => {\n return modules;\n };\n var createHotReloadingObject = function () {\n const hot = {\n _acceptCallback: null,\n _disposeCallback: null,\n _didAccept: false,\n accept: (callback) => {\n hot._didAccept = true;\n hot._acceptCallback = callback;\n },\n dispose: (callback) => {\n hot._disposeCallback = callback;\n },\n };\n return hot;\n };\n let reactRefreshTimeout = null;\n const metroHotUpdateModule = function (\n id,\n factory,\n dependencyMap,\n inverseDependencies\n ) {\n const mod = modules[id];\n if (!mod) {\n if (factory) {\n return;\n }\n throw unknownModuleError(id);\n }\n if (!mod.hasError && !mod.isInitialized) {\n mod.factory = factory;\n mod.dependencyMap = dependencyMap;\n return;\n }\n const Refresh = requireRefresh();\n const refreshBoundaryIDs = new Set();\n let didBailOut = false;\n let updatedModuleIDs;\n try {\n updatedModuleIDs = topologicalSort(\n [id],\n (pendingID) => {\n const pendingModule = modules[pendingID];\n if (pendingModule == null) {\n return [];\n }\n const pendingHot = pendingModule.hot;\n if (pendingHot == null) {\n throw new Error(\n \"[Refresh] Expected module.hot to always exist in DEV.\"\n );\n }\n let canAccept = pendingHot._didAccept;\n if (!canAccept && Refresh != null) {\n const isBoundary = isReactRefreshBoundary(\n Refresh,\n pendingModule.publicModule.exports\n );\n if (isBoundary) {\n canAccept = true;\n refreshBoundaryIDs.add(pendingID);\n }\n }\n if (canAccept) {\n return [];\n }\n const parentIDs = inverseDependencies[pendingID];\n if (parentIDs.length === 0) {\n performFullRefresh(\"No root boundary\", {\n source: mod,\n failed: pendingModule,\n });\n didBailOut = true;\n return [];\n }\n return parentIDs;\n },\n () => didBailOut\n ).reverse();\n } catch (e) {\n if (e === CYCLE_DETECTED) {\n performFullRefresh(\"Dependency cycle\", {\n source: mod,\n });\n return;\n }\n throw e;\n }\n if (didBailOut) {\n return;\n }\n const seenModuleIDs = new Set();\n for (let i = 0; i < updatedModuleIDs.length; i++) {\n const updatedID = updatedModuleIDs[i];\n if (seenModuleIDs.has(updatedID)) {\n continue;\n }\n seenModuleIDs.add(updatedID);\n const updatedMod = modules[updatedID];\n if (updatedMod == null) {\n throw new Error(\"[Refresh] Expected to find the updated module.\");\n }\n const prevExports = updatedMod.publicModule.exports;\n const didError = runUpdatedModule(\n updatedID,\n updatedID === id ? factory : undefined,\n updatedID === id ? dependencyMap : undefined\n );\n const nextExports = updatedMod.publicModule.exports;\n if (didError) {\n return;\n }\n if (refreshBoundaryIDs.has(updatedID)) {\n const isNoLongerABoundary = !isReactRefreshBoundary(\n Refresh,\n nextExports\n );\n const didInvalidate = shouldInvalidateReactRefreshBoundary(\n Refresh,\n prevExports,\n nextExports\n );\n if (isNoLongerABoundary || didInvalidate) {\n const parentIDs = inverseDependencies[updatedID];\n if (parentIDs.length === 0) {\n performFullRefresh(\n isNoLongerABoundary\n ? \"No longer a boundary\"\n : \"Invalidated boundary\",\n {\n source: mod,\n failed: updatedMod,\n }\n );\n return;\n }\n for (let j = 0; j < parentIDs.length; j++) {\n const parentID = parentIDs[j];\n const parentMod = modules[parentID];\n if (parentMod == null) {\n throw new Error(\"[Refresh] Expected to find parent module.\");\n }\n const canAcceptParent = isReactRefreshBoundary(\n Refresh,\n parentMod.publicModule.exports\n );\n if (canAcceptParent) {\n refreshBoundaryIDs.add(parentID);\n updatedModuleIDs.push(parentID);\n } else {\n performFullRefresh(\"Invalidated boundary\", {\n source: mod,\n failed: parentMod,\n });\n return;\n }\n }\n }\n }\n }\n if (Refresh != null) {\n if (reactRefreshTimeout == null) {\n reactRefreshTimeout = setTimeout(() => {\n reactRefreshTimeout = null;\n Refresh.performReactRefresh();\n }, 30);\n }\n }\n };\n const topologicalSort = function (roots, getEdges, earlyStop) {\n const result = [];\n const visited = new Set();\n const stack = new Set();\n function traverseDependentNodes(node) {\n if (stack.has(node)) {\n throw CYCLE_DETECTED;\n }\n if (visited.has(node)) {\n return;\n }\n visited.add(node);\n stack.add(node);\n const dependentNodes = getEdges(node);\n if (earlyStop(node)) {\n stack.delete(node);\n return;\n }\n dependentNodes.forEach((dependent) => {\n traverseDependentNodes(dependent);\n });\n stack.delete(node);\n result.push(node);\n }\n roots.forEach((root) => {\n traverseDependentNodes(root);\n });\n return result;\n };\n const runUpdatedModule = function (id, factory, dependencyMap) {\n const mod = modules[id];\n if (mod == null) {\n throw new Error(\"[Refresh] Expected to find the module.\");\n }\n const { hot } = mod;\n if (!hot) {\n throw new Error(\"[Refresh] Expected module.hot to always exist in DEV.\");\n }\n if (hot._disposeCallback) {\n try {\n hot._disposeCallback();\n } catch (error) {\n console.error(\n `Error while calling dispose handler for module ${id}: `,\n error\n );\n }\n }\n if (factory) {\n mod.factory = factory;\n }\n if (dependencyMap) {\n mod.dependencyMap = dependencyMap;\n }\n mod.hasError = false;\n mod.error = undefined;\n mod.importedAll = EMPTY;\n mod.importedDefault = EMPTY;\n mod.isInitialized = false;\n const prevExports = mod.publicModule.exports;\n mod.publicModule.exports = {};\n hot._didAccept = false;\n hot._acceptCallback = null;\n hot._disposeCallback = null;\n metroRequire(id);\n if (mod.hasError) {\n mod.hasError = false;\n mod.isInitialized = true;\n mod.error = null;\n mod.publicModule.exports = prevExports;\n return true;\n }\n if (hot._acceptCallback) {\n try {\n hot._acceptCallback();\n } catch (error) {\n console.error(\n `Error while calling accept handler for module ${id}: `,\n error\n );\n }\n }\n return false;\n };\n const performFullRefresh = (reason, modules) => {\n if (\n typeof window !== \"undefined\" &&\n window.location != null &&\n typeof window.location.reload === \"function\"\n ) {\n window.location.reload();\n } else {\n const Refresh = requireRefresh();\n if (Refresh != null) {\n const sourceName = modules.source?.verboseName ?? \"unknown\";\n const failedName = modules.failed?.verboseName ?? \"unknown\";\n Refresh.performFullRefresh(\n `Fast Refresh - ${reason} <${sourceName}> <${failedName}>`\n );\n } else {\n console.warn(\"Could not reload the application after an edit.\");\n }\n }\n };\n var isReactRefreshBoundary = function (Refresh, moduleExports) {\n if (Refresh.isLikelyComponentType(moduleExports)) {\n return true;\n }\n if (moduleExports == null || typeof moduleExports !== \"object\") {\n return false;\n }\n let hasExports = false;\n let areAllExportsComponents = true;\n for (const key in moduleExports) {\n hasExports = true;\n if (key === \"__esModule\") {\n continue;\n }\n const desc = Object.getOwnPropertyDescriptor(moduleExports, key);\n if (desc && desc.get) {\n return false;\n }\n const exportValue = moduleExports[key];\n if (!Refresh.isLikelyComponentType(exportValue)) {\n areAllExportsComponents = false;\n }\n }\n return hasExports && areAllExportsComponents;\n };\n var shouldInvalidateReactRefreshBoundary = (\n Refresh,\n prevExports,\n nextExports\n ) => {\n const prevSignature = getRefreshBoundarySignature(Refresh, prevExports);\n const nextSignature = getRefreshBoundarySignature(Refresh, nextExports);\n if (prevSignature.length !== nextSignature.length) {\n return true;\n }\n for (let i = 0; i < nextSignature.length; i++) {\n if (prevSignature[i] !== nextSignature[i]) {\n return true;\n }\n }\n return false;\n };\n var getRefreshBoundarySignature = (Refresh, moduleExports) => {\n const signature = [];\n signature.push(Refresh.getFamilyByType(moduleExports));\n if (moduleExports == null || typeof moduleExports !== \"object\") {\n return signature;\n }\n for (const key in moduleExports) {\n if (key === \"__esModule\") {\n continue;\n }\n const desc = Object.getOwnPropertyDescriptor(moduleExports, key);\n if (desc && desc.get) {\n continue;\n }\n const exportValue = moduleExports[key];\n signature.push(key);\n signature.push(Refresh.getFamilyByType(exportValue));\n }\n return signature;\n };\n var registerExportsForReactRefresh = (Refresh, moduleExports, moduleID) => {\n Refresh.register(moduleExports, moduleID + \" %exports%\");\n if (moduleExports == null || typeof moduleExports !== \"object\") {\n return;\n }\n for (const key in moduleExports) {\n const desc = Object.getOwnPropertyDescriptor(moduleExports, key);\n if (desc && desc.get) {\n continue;\n }\n const exportValue = moduleExports[key];\n const typeID = moduleID + \" %exports% \" + key;\n Refresh.register(exportValue, typeID);\n }\n };\n global.__accept = metroHotUpdateModule;\n}\nif (__DEV__) {\n var requireSystrace = function requireSystrace() {\n return (\n global[__METRO_GLOBAL_PREFIX__ + \"__SYSTRACE\"] || metroRequire.Systrace\n );\n };\n var requireRefresh = function requireRefresh() {\n return (\n global[__METRO_GLOBAL_PREFIX__ + \"__ReactRefresh\"] || metroRequire.Refresh\n );\n };\n}\n","global.$$require_external = typeof window === \"undefined\" ? require : () => null;","import registerRootComponent from 'expo/build/launch/registerRootComponent';\n\nimport App from '../../App';\n\nregisterRootComponent(App);\n","function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import '../Expo.fx';\nimport { AppRegistry, Platform } from 'react-native';\nexport default function registerRootComponent(component) {\n let qualifiedComponent = component;\n if (process.env.NODE_ENV !== 'production') {\n const { withDevTools } = require('./withDevTools');\n qualifiedComponent = withDevTools(component);\n }\n AppRegistry.registerComponent('main', () => qualifiedComponent);\n if (Platform.OS === 'web') {\n // Use two if statements for better dead code elimination.\n if (\n // Skip querying the DOM if we're in a Node.js environment.\n typeof document !== 'undefined') {\n const rootTag = document.getElementById('root');\n if (process.env.NODE_ENV !== 'production') {\n if (!rootTag) {\n throw new Error('Required HTML element with id \"root\" was not found in the document HTML.');\n }\n }\n AppRegistry.runApplication('main', {\n rootTag,\n hydrate: process.env.EXPO_PUBLIC_USE_STATIC === '1',\n });\n }\n }\n}\n//# sourceMappingURL=registerRootComponent.js.map","// When users dangerously import a file inside of react-native, it breaks the web alias.\n// This is one of the most common, and cryptic web errors that users encounter.\n// This conditional side-effect provides a more helpful error message for debugging.\n// Use a wrapper `__DEV__` to remove this entire block in production.\nif (__DEV__) {\n if (\n // Skip mocking if someone is shimming this value out.\n !('__fbBatchedBridgeConfig' in global)) {\n Object.defineProperty(global, '__fbBatchedBridgeConfig', {\n get() {\n throw new Error(\"Your web project is importing a module from 'react-native' instead of 'react-native-web'. Learn more: https://expo.fyi/fb-batched-bridge-config-web\");\n },\n });\n }\n}\n//# sourceMappingURL=Expo.fx.web.js.map","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport invariant from 'fbjs/lib/invariant';\nimport unmountComponentAtNode from '../unmountComponentAtNode';\nimport renderApplication, { getApplication as _getApplication } from './renderApplication';\nvar emptyObject = {};\nvar runnables = {};\nvar componentProviderInstrumentationHook = component => component();\nvar wrapperComponentProvider;\n\n/**\n * `AppRegistry` is the JS entry point to running all React Native apps.\n */\nexport default class AppRegistry {\n static getAppKeys() {\n return Object.keys(runnables);\n }\n static getApplication(appKey, appParameters) {\n invariant(runnables[appKey] && runnables[appKey].getApplication, \"Application \" + appKey + \" has not been registered. \" + 'This is either due to an import error during initialization or failure to call AppRegistry.registerComponent.');\n return runnables[appKey].getApplication(appParameters);\n }\n static registerComponent(appKey, componentProvider) {\n runnables[appKey] = {\n getApplication: appParameters => _getApplication(componentProviderInstrumentationHook(componentProvider), appParameters ? appParameters.initialProps : emptyObject, wrapperComponentProvider && wrapperComponentProvider(appParameters)),\n run: appParameters => renderApplication(componentProviderInstrumentationHook(componentProvider), wrapperComponentProvider && wrapperComponentProvider(appParameters), appParameters.callback, {\n hydrate: appParameters.hydrate || false,\n initialProps: appParameters.initialProps || emptyObject,\n mode: appParameters.mode || 'concurrent',\n rootTag: appParameters.rootTag\n })\n };\n return appKey;\n }\n static registerConfig(config) {\n config.forEach(_ref => {\n var appKey = _ref.appKey,\n component = _ref.component,\n run = _ref.run;\n if (run) {\n AppRegistry.registerRunnable(appKey, run);\n } else {\n invariant(component, 'No component provider passed in');\n AppRegistry.registerComponent(appKey, component);\n }\n });\n }\n\n // TODO: fix style sheet creation when using this method\n static registerRunnable(appKey, run) {\n runnables[appKey] = {\n run\n };\n return appKey;\n }\n static runApplication(appKey, appParameters) {\n var isDevelopment = process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test';\n if (isDevelopment) {\n var params = _objectSpread({}, appParameters);\n params.rootTag = \"#\" + params.rootTag.id;\n console.log(\"Running application \\\"\" + appKey + \"\\\" with appParams:\\n\", params, \"\\nDevelopment-level warnings: \" + (isDevelopment ? 'ON' : 'OFF') + \".\" + (\"\\nPerformance optimizations: \" + (isDevelopment ? 'OFF' : 'ON') + \".\"));\n }\n invariant(runnables[appKey] && runnables[appKey].run, \"Application \\\"\" + appKey + \"\\\" has not been registered. \" + 'This is either due to an import error during initialization or failure to call AppRegistry.registerComponent.');\n return runnables[appKey].run(appParameters);\n }\n static setComponentProviderInstrumentationHook(hook) {\n componentProviderInstrumentationHook = hook;\n }\n static setWrapperComponentProvider(provider) {\n wrapperComponentProvider = provider;\n }\n static unmountApplicationComponentAtRootTag(rootTag) {\n unmountComponentAtNode(rootTag);\n }\n}","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","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}\nfunction _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}\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var defineProperty = require(\"./defineProperty.js\");\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\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 return keys;\n}\nfunction _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 return target;\n}\nmodule.exports = _objectSpread2, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","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 return obj;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","/**\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'use strict';\n\nvar validateFormat = process.env.NODE_ENV !== \"production\" ? function (format) {\n if (format === undefined) {\n throw new Error('invariant(...): Second argument must be a string.');\n }\n} : function (format) {};\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments to provide\n * information about what broke and what you were expecting.\n *\n * The invariant message will be stripped in production, but the invariant will\n * remain to ensure logic does not differ in production.\n */\n\nfunction invariant(condition, format) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n validateFormat(format);\n\n if (!condition) {\n var error;\n\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return String(args[argIndex++]);\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // Skip invariant's own stack frame.\n\n throw error;\n }\n}\n\nmodule.exports = invariant;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { unmountComponentAtNode } from 'react-dom';\nexport default unmountComponentAtNode;","'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n","/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"\")&&(k=k.replace(\"\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e\"+b.valueOf().toString()+\"\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a>=g;e-=g;rg=1<<32-oc(b)+e|c<w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;ww?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&uh(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=sh(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Ah(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=yh(f.type,f.key,f.props,null,a.mode,h),h.ref=sh(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=zh(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);th(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=xh(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Bh=vh(!0),Ch=vh(!1),Dh={},Eh=Uf(Dh),Fh=Uf(Dh),Gh=Uf(Dh);function Hh(a){if(a===Dh)throw Error(p(174));return a}function Ih(a,b){G(Gh,b);G(Fh,a);G(Eh,Dh);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:lb(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=lb(b,a)}E(Eh);G(Eh,b)}function Jh(){E(Eh);E(Fh);E(Gh)}\nfunction Kh(a){Hh(Gh.current);var b=Hh(Eh.current);var c=lb(b,a.type);b!==c&&(G(Fh,a),G(Eh,c))}function Lh(a){Fh.current===a&&(E(Eh),E(Fh))}var M=Uf(0);\nfunction Mh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||\"$?\"===c.data||\"$!\"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&128))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var Nh=[];\nfunction Oh(){for(var a=0;ac?c:4;a(!0);var d=Qh.transition;Qh.transition={};try{a(!1),b()}finally{C=c,Qh.transition=d}}function Fi(){return di().memoizedState}\nfunction Gi(a,b,c){var d=lh(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(Hi(a))Ii(b,c);else if(c=Yg(a,b,c,d),null!==c){var e=L();mh(c,a,d,e);Ji(c,b,d)}}\nfunction ri(a,b,c){var d=lh(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(Hi(a))Ii(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,Xg(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=Yg(a,b,e,d);null!==c&&(e=L(),mh(c,a,d,e),Ji(c,b,d))}}\nfunction Hi(a){var b=a.alternate;return a===N||null!==b&&b===N}function Ii(a,b){Th=Sh=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Ji(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar ai={readContext:Vg,useCallback:Q,useContext:Q,useEffect:Q,useImperativeHandle:Q,useInsertionEffect:Q,useLayoutEffect:Q,useMemo:Q,useReducer:Q,useRef:Q,useState:Q,useDebugValue:Q,useDeferredValue:Q,useTransition:Q,useMutableSource:Q,useSyncExternalStore:Q,useId:Q,unstable_isNewReconciler:!1},Yh={readContext:Vg,useCallback:function(a,b){ci().memoizedState=[a,void 0===b?null:b];return a},useContext:Vg,useEffect:vi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ti(4194308,\n4,yi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ti(4194308,4,a,b)},useInsertionEffect:function(a,b){return ti(4,2,a,b)},useMemo:function(a,b){var c=ci();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=ci();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=Gi.bind(null,N,a);return[d.memoizedState,a]},useRef:function(a){var b=\nci();a={current:a};return b.memoizedState=a},useState:qi,useDebugValue:Ai,useDeferredValue:function(a){return ci().memoizedState=a},useTransition:function(){var a=qi(!1),b=a[0];a=Ei.bind(null,a[1]);ci().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=N,e=ci();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===R)throw Error(p(349));0!==(Rh&30)||ni(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;vi(ki.bind(null,d,\nf,a),[a]);d.flags|=2048;li(9,mi.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=ci(),b=R.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Uh++;0\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;Aj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;eHj&&(b.flags|=128,d=!0,Ej(f,!1),b.lanes=4194304)}else{if(!d)if(a=Mh(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Ej(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Hj&&1073741824!==c&&(b.flags|=128,d=!0,Ej(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=M.current,G(M,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Ij(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(gj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Jj(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return Jh(),E(Wf),E(H),Oh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Lh(b),null;case 13:E(M);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(M),null;case 4:return Jh(),null;case 10:return Rg(b.type._context),null;case 22:case 23:return Ij(),\nnull;case 24:return null;default:return null}}var Kj=!1,U=!1,Lj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Mj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Nj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Oj=!1;\nfunction Pj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Lg(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Oj;Oj=!1;return n}\nfunction Qj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Nj(b,c,f)}e=e.next}while(e!==d)}}function Rj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Sj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Tj(a){var b=a.alternate;null!==b&&(a.alternate=null,Tj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Uj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Vj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Uj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}\nfunction Xj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Xj(a,b,c),a=a.sibling;null!==a;)Xj(a,b,c),a=a.sibling}var X=null,Yj=!1;function Zj(a,b,c){for(c=c.child;null!==c;)ak(a,b,c),c=c.sibling}\nfunction ak(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Mj(c,b);case 6:var d=X,e=Yj;X=null;Zj(a,b,c);X=d;Yj=e;null!==X&&(Yj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Yj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Yj;X=c.stateNode.containerInfo;Yj=!0;\nZj(a,b,c);X=d;Yj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Nj(c,b,g):0!==(f&4)&&Nj(c,b,g));e=e.next}while(e!==d)}Zj(a,b,c);break;case 1:if(!U&&(Mj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Zj(a,b,c);break;case 21:Zj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Zj(a,b,c),U=d):Zj(a,b,c);break;default:Zj(a,b,c)}}function bk(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Lj);b.forEach(function(b){var d=ck.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction dk(a,b){var c=b.deletions;if(null!==c)for(var d=0;de&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*mk(d/1960))-d;if(10a?16:a;if(null===xk)var d=!1;else{a=xk;xk=null;yk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kB()-gk?Lk(a,0):sk|=c);Ek(a,b)}function Zk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=L();a=Zg(a,b);null!==a&&(Ac(a,b,c),Ek(a,c))}function vj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Zk(a,c)}\nfunction ck(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Zk(a,c)}var Wk;\nWk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)Ug=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return Ug=!1,zj(a,b,c);Ug=0!==(a.flags&131072)?!0:!1}else Ug=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;jj(a,b);a=b.pendingProps;var e=Yf(b,H.current);Tg(b,c);e=Xh(null,b,d,a,e,c);var f=bi();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,ah(b),e.updater=nh,b.stateNode=e,e._reactInternals=b,rh(b,d,a,c),b=kj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Yi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{jj(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=$k(d);a=Lg(d,a);switch(e){case 0:b=dj(null,b,d,a,c);break a;case 1:b=ij(null,b,d,a,c);break a;case 11:b=Zi(null,b,d,a,c);break a;case 14:b=aj(null,b,d,Lg(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),dj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),ij(a,b,d,e,c);case 3:a:{lj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;bh(a,b);gh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ki(Error(p(423)),b);b=mj(a,b,d,c,e);break a}else if(d!==e){e=Ki(Error(p(424)),b);b=mj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Ch(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=$i(a,b,c);break a}Yi(a,b,d,c)}b=b.child}return b;case 5:return Kh(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\nhj(a,b),Yi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return pj(a,b,c);case 4:return Ih(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Bh(b,null,d,c):Yi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),Zi(a,b,d,e,c);case 7:return Yi(a,b,b.pendingProps,c),b.child;case 8:return Yi(a,b,b.pendingProps.children,c),b.child;case 12:return Yi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Mg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=$i(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=ch(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);Sg(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);Sg(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Yi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,Tg(b,c),e=Vg(e),d=d(e),b.flags|=1,Yi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Lg(d,b.pendingProps),e=Lg(d.type,e),aj(a,b,d,e,c);case 15:return cj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),jj(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,Tg(b,c),ph(b,d,e),rh(b,d,e,c),kj(null,b,d,!0,a,c);case 19:return yj(a,b,c);case 22:return ej(a,b,c)}throw Error(p(156,b.tag));};function Gk(a,b){return ac(a,b)}\nfunction al(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new al(a,b,c,d)}function bj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction $k(a){if(\"function\"===typeof a)return bj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction wh(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction yh(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)bj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Ah(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return qj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Ah(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function qj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function xh(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction zh(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction bl(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function cl(a,b,c,d,e,f,g,h,k){a=new bl(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};ah(f);return a}function dl(a,b,c){var d=3>>1,e=a[d];if(0>>1;dg(C,c))ng(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(ng(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","import _extends from \"@babel/runtime/helpers/extends\";\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport AppContainer from './AppContainer';\nimport invariant from 'fbjs/lib/invariant';\nimport renderLegacy, { hydrateLegacy, render, hydrate } from '../render';\nimport StyleSheet from '../StyleSheet';\nimport React from 'react';\nexport default function renderApplication(RootComponent, WrapperComponent, callback, options) {\n var shouldHydrate = options.hydrate,\n initialProps = options.initialProps,\n mode = options.mode,\n rootTag = options.rootTag;\n var renderFn = shouldHydrate ? mode === 'concurrent' ? hydrate : hydrateLegacy : mode === 'concurrent' ? render : renderLegacy;\n invariant(rootTag, 'Expect to have a valid rootTag, instead got ', rootTag);\n return renderFn( /*#__PURE__*/React.createElement(AppContainer, {\n WrapperComponent: WrapperComponent,\n ref: callback,\n rootTag: rootTag\n }, /*#__PURE__*/React.createElement(RootComponent, initialProps)), rootTag);\n}\nexport function getApplication(RootComponent, initialProps, WrapperComponent) {\n var element = /*#__PURE__*/React.createElement(AppContainer, {\n WrapperComponent: WrapperComponent,\n rootTag: {}\n }, /*#__PURE__*/React.createElement(RootComponent, initialProps));\n // Don't escape CSS text\n var getStyleElement = props => {\n var sheet = StyleSheet.getSheet();\n return /*#__PURE__*/React.createElement(\"style\", _extends({}, props, {\n dangerouslySetInnerHTML: {\n __html: sheet.textContent\n },\n id: sheet.id\n }));\n };\n return {\n element,\n getStyleElement\n };\n}","function _extends() {\n module.exports = _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _extends.apply(this, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// NOTE(EvanBacon): `react-native-web` adds a extra `div`s around the root HTML, these\n// make static rendering much harder as we expect the root element to be ``.\n// This resolution will alias to a simple in-out component to avoid the extra HTML.\nfunction AppContainer({ children }) {\n return children;\n}\n\nif (process.env.NODE_ENV !== 'production') {\n AppContainer.displayName = 'AppContainer';\n}\n\nexport default AppContainer;\n","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { hydrate as domLegacyHydrate, render as domLegacyRender } from 'react-dom';\nimport { createRoot as domCreateRoot, hydrateRoot as domHydrateRoot } from 'react-dom/client';\nimport unmountComponentAtNode from '../unmountComponentAtNode';\nimport { createSheet } from '../StyleSheet/dom';\nexport function hydrate(element, root) {\n createSheet(root);\n return domHydrateRoot(root, element);\n}\nexport function render(element, root) {\n createSheet(root);\n var reactRoot = domCreateRoot(root);\n reactRoot.render(element);\n return reactRoot;\n}\nexport function hydrateLegacy(element, root, callback) {\n createSheet(root);\n domLegacyHydrate(element, root, callback);\n return {\n unmount: function unmount() {\n return unmountComponentAtNode(root);\n }\n };\n}\nexport default function renderLegacy(element, root, callback) {\n createSheet(root);\n domLegacyRender(element, root, callback);\n return {\n unmount: function unmount() {\n return unmountComponentAtNode(root);\n }\n };\n}","'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n exports.createRoot = m.createRoot;\n exports.hydrateRoot = m.hydrateRoot;\n} else {\n var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n exports.createRoot = function(c, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.createRoot(c, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n exports.hydrateRoot = function(c, h, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.hydrateRoot(c, h, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n}\n","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport canUseDOM from '../../../modules/canUseDom';\nimport createCSSStyleSheet from './createCSSStyleSheet';\nimport createOrderedCSSStyleSheet from './createOrderedCSSStyleSheet';\nvar defaultId = 'react-native-stylesheet';\nvar roots = new WeakMap();\nvar sheets = [];\nvar initialRules = [\n// minimal top-level reset\n'html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0);}', 'body{margin:0;}',\n// minimal form pseudo-element reset\n'button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0;}', 'input::-webkit-search-cancel-button,input::-webkit-search-decoration,input::-webkit-search-results-button,input::-webkit-search-results-decoration{display:none;}'];\nexport function createSheet(root, id) {\n if (id === void 0) {\n id = defaultId;\n }\n var sheet;\n if (canUseDOM) {\n var rootNode = root != null ? root.getRootNode() : document;\n // Create the initial style sheet\n if (sheets.length === 0) {\n sheet = createOrderedCSSStyleSheet(createCSSStyleSheet(id));\n initialRules.forEach(rule => {\n sheet.insert(rule, 0);\n });\n roots.set(rootNode, sheets.length);\n sheets.push(sheet);\n } else {\n var index = roots.get(rootNode);\n if (index == null) {\n var initialSheet = sheets[0];\n // If we're creating a new sheet, populate it with existing styles\n var textContent = initialSheet != null ? initialSheet.getTextContent() : '';\n // Cast rootNode to 'any' because Flow types for getRootNode are wrong\n sheet = createOrderedCSSStyleSheet(createCSSStyleSheet(id, rootNode, textContent));\n roots.set(rootNode, sheets.length);\n sheets.push(sheet);\n } else {\n sheet = sheets[index];\n }\n }\n } else {\n // Create the initial style sheet\n if (sheets.length === 0) {\n sheet = createOrderedCSSStyleSheet(createCSSStyleSheet(id));\n initialRules.forEach(rule => {\n sheet.insert(rule, 0);\n });\n sheets.push(sheet);\n } else {\n sheet = sheets[0];\n }\n }\n return {\n getTextContent() {\n return sheet.getTextContent();\n },\n id,\n insert(cssText, groupValue) {\n sheets.forEach(s => {\n s.insert(cssText, groupValue);\n });\n }\n };\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nexport default canUseDOM;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\nimport canUseDOM from '../../../modules/canUseDom';\n\n// $FlowFixMe: HTMLStyleElement is incorrectly typed - https://github.com/facebook/flow/issues/2696\nexport default function createCSSStyleSheet(id, rootNode, textContent) {\n if (canUseDOM) {\n var root = rootNode != null ? rootNode : document;\n var element = root.getElementById(id);\n if (element == null) {\n element = document.createElement('style');\n element.setAttribute('id', id);\n if (typeof textContent === 'string') {\n element.appendChild(document.createTextNode(textContent));\n }\n if (root instanceof ShadowRoot) {\n root.insertBefore(element, root.firstChild);\n } else {\n var head = root.head;\n if (head) {\n head.insertBefore(element, head.firstChild);\n }\n }\n }\n // $FlowFixMe: HTMLElement is incorrectly typed\n return element.sheet;\n } else {\n return null;\n }\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar slice = Array.prototype.slice;\n\n/**\n * Order-based insertion of CSS.\n *\n * Each rule is associated with a numerically defined group.\n * Groups are ordered within the style sheet according to their number, with the\n * lowest first.\n *\n * Groups are implemented using marker rules. The selector of the first rule of\n * each group is used only to encode the group number for hydration. An\n * alternative implementation could rely on CSSMediaRule, allowing groups to be\n * treated as a sub-sheet, but the Edge implementation of CSSMediaRule is\n * broken.\n * https://developer.mozilla.org/en-US/docs/Web/API/CSSMediaRule\n * https://gist.github.com/necolas/aa0c37846ad6bd3b05b727b959e82674\n */\nexport default function createOrderedCSSStyleSheet(sheet) {\n var groups = {};\n var selectors = {};\n\n /**\n * Hydrate approximate record from any existing rules in the sheet.\n */\n if (sheet != null) {\n var group;\n slice.call(sheet.cssRules).forEach((cssRule, i) => {\n var cssText = cssRule.cssText;\n // Create record of existing selectors and rules\n if (cssText.indexOf('stylesheet-group') > -1) {\n group = decodeGroupRule(cssRule);\n groups[group] = {\n start: i,\n rules: [cssText]\n };\n } else {\n var selectorText = getSelectorText(cssText);\n if (selectorText != null) {\n selectors[selectorText] = true;\n groups[group].rules.push(cssText);\n }\n }\n });\n }\n function sheetInsert(sheet, group, text) {\n var orderedGroups = getOrderedGroups(groups);\n var groupIndex = orderedGroups.indexOf(group);\n var nextGroupIndex = groupIndex + 1;\n var nextGroup = orderedGroups[nextGroupIndex];\n // Insert rule before the next group, or at the end of the stylesheet\n var position = nextGroup != null && groups[nextGroup].start != null ? groups[nextGroup].start : sheet.cssRules.length;\n var isInserted = insertRuleAt(sheet, text, position);\n if (isInserted) {\n // Set the starting index of the new group\n if (groups[group].start == null) {\n groups[group].start = position;\n }\n // Increment the starting index of all subsequent groups\n for (var i = nextGroupIndex; i < orderedGroups.length; i += 1) {\n var groupNumber = orderedGroups[i];\n var previousStart = groups[groupNumber].start || 0;\n groups[groupNumber].start = previousStart + 1;\n }\n }\n return isInserted;\n }\n var OrderedCSSStyleSheet = {\n /**\n * The textContent of the style sheet.\n */\n getTextContent() {\n return getOrderedGroups(groups).map(group => {\n var rules = groups[group].rules;\n // Sorting provides deterministic order of styles in group for\n // build-time extraction of the style sheet.\n var marker = rules.shift();\n rules.sort();\n rules.unshift(marker);\n return rules.join('\\n');\n }).join('\\n');\n },\n /**\n * Insert a rule into the style sheet\n */\n insert(cssText, groupValue) {\n var group = Number(groupValue);\n\n // Create a new group.\n if (groups[group] == null) {\n var markerRule = encodeGroupRule(group);\n // Create the internal record.\n groups[group] = {\n start: null,\n rules: [markerRule]\n };\n // Update CSSOM.\n if (sheet != null) {\n sheetInsert(sheet, group, markerRule);\n }\n }\n\n // selectorText is more reliable than cssText for insertion checks. The\n // browser excludes vendor-prefixed properties and rewrites certain values\n // making cssText more likely to be different from what was inserted.\n var selectorText = getSelectorText(cssText);\n if (selectorText != null && selectors[selectorText] == null) {\n // Update the internal records.\n selectors[selectorText] = true;\n groups[group].rules.push(cssText);\n // Update CSSOM.\n if (sheet != null) {\n var isInserted = sheetInsert(sheet, group, cssText);\n if (!isInserted) {\n // Revert internal record change if a rule was rejected (e.g.,\n // unrecognized pseudo-selector)\n groups[group].rules.pop();\n }\n }\n }\n }\n };\n return OrderedCSSStyleSheet;\n}\n\n/**\n * Helper functions\n */\n\nfunction encodeGroupRule(group) {\n return \"[stylesheet-group=\\\"\" + group + \"\\\"]{}\";\n}\nvar groupPattern = /[\"']/g;\nfunction decodeGroupRule(cssRule) {\n return Number(cssRule.selectorText.split(groupPattern)[1]);\n}\nfunction getOrderedGroups(obj) {\n return Object.keys(obj).map(Number).sort((a, b) => a > b ? 1 : -1);\n}\nvar selectorPattern = /\\s*([,])\\s*/g;\nfunction getSelectorText(cssText) {\n var selector = cssText.split('{')[0].trim();\n return selector !== '' ? selector.replace(selectorPattern, '$1') : null;\n}\nfunction insertRuleAt(root, cssText, position) {\n try {\n // $FlowFixMe: Flow is missing CSSOM types needed to type 'root'.\n root.insertRule(cssText, position);\n return true;\n } catch (e) {\n // JSDOM doesn't support `CSSSMediaRule#insertRule`.\n // Also ignore errors that occur from attempting to insert vendor-prefixed selectors.\n return false;\n }\n}","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"writingDirection\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { atomic, classic, inline } from './compiler';\nimport { createSheet } from './dom';\nimport { localizeStyle } from 'styleq/transform-localize-style';\nimport { preprocess } from './preprocess';\nimport { styleq } from 'styleq';\nimport { validate } from './validate';\nimport canUseDOM from '../../modules/canUseDom';\nvar staticStyleMap = new WeakMap();\nvar sheet = createSheet();\nvar defaultPreprocessOptions = {\n shadow: true,\n textShadow: true\n};\nfunction customStyleq(styles, options) {\n if (options === void 0) {\n options = {};\n }\n var _options = options,\n writingDirection = _options.writingDirection,\n preprocessOptions = _objectWithoutPropertiesLoose(_options, _excluded);\n var isRTL = writingDirection === 'rtl';\n return styleq.factory({\n transform(style) {\n var compiledStyle = staticStyleMap.get(style);\n if (compiledStyle != null) {\n return localizeStyle(compiledStyle, isRTL);\n }\n return preprocess(style, _objectSpread(_objectSpread({}, defaultPreprocessOptions), preprocessOptions));\n }\n })(styles);\n}\nfunction insertRules(compiledOrderedRules) {\n compiledOrderedRules.forEach(_ref => {\n var rules = _ref[0],\n order = _ref[1];\n if (sheet != null) {\n rules.forEach(rule => {\n sheet.insert(rule, order);\n });\n }\n });\n}\nfunction compileAndInsertAtomic(style) {\n var _atomic = atomic(preprocess(style, defaultPreprocessOptions)),\n compiledStyle = _atomic[0],\n compiledOrderedRules = _atomic[1];\n insertRules(compiledOrderedRules);\n return compiledStyle;\n}\nfunction compileAndInsertReset(style, key) {\n var _classic = classic(style, key),\n compiledStyle = _classic[0],\n compiledOrderedRules = _classic[1];\n insertRules(compiledOrderedRules);\n return compiledStyle;\n}\n\n/* ----- API ----- */\n\nvar absoluteFillObject = {\n position: 'absolute',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n};\nvar absoluteFill = create({\n x: _objectSpread({}, absoluteFillObject)\n}).x;\n\n/**\n * create\n */\nfunction create(styles) {\n Object.keys(styles).forEach(key => {\n var styleObj = styles[key];\n // Only compile at runtime if the style is not already compiled\n if (styleObj != null && styleObj.$$css !== true) {\n var compiledStyles;\n if (key.indexOf('$raw') > -1) {\n compiledStyles = compileAndInsertReset(styleObj, key.split('$raw')[0]);\n } else {\n if (process.env.NODE_ENV !== 'production') {\n validate(styleObj);\n styles[key] = Object.freeze(styleObj);\n }\n compiledStyles = compileAndInsertAtomic(styleObj);\n }\n staticStyleMap.set(styleObj, compiledStyles);\n }\n });\n return styles;\n}\n\n/**\n * compose\n */\nfunction compose(style1, style2) {\n if (process.env.NODE_ENV !== 'production') {\n /* eslint-disable prefer-rest-params */\n var len = arguments.length;\n if (len > 2) {\n var readableStyles = [...arguments].map(a => flatten(a));\n throw new Error(\"StyleSheet.compose() only accepts 2 arguments, received \" + len + \": \" + JSON.stringify(readableStyles));\n }\n /* eslint-enable prefer-rest-params */\n console.warn('StyleSheet.compose(a, b) is deprecated; use array syntax, i.e., [a,b].');\n }\n return [style1, style2];\n}\n\n/**\n * flatten\n */\nfunction flatten() {\n for (var _len = arguments.length, styles = new Array(_len), _key = 0; _key < _len; _key++) {\n styles[_key] = arguments[_key];\n }\n var flatArray = styles.flat(Infinity);\n var result = {};\n for (var i = 0; i < flatArray.length; i++) {\n var style = flatArray[i];\n if (style != null && typeof style === 'object') {\n // $FlowFixMe\n Object.assign(result, style);\n }\n }\n return result;\n}\n\n/**\n * getSheet\n */\nfunction getSheet() {\n return {\n id: sheet.id,\n textContent: sheet.getTextContent()\n };\n}\n\n/**\n * resolve\n */\n\nfunction StyleSheet(styles, options) {\n if (options === void 0) {\n options = {};\n }\n var isRTL = options.writingDirection === 'rtl';\n var styleProps = customStyleq(styles, options);\n if (Array.isArray(styleProps) && styleProps[1] != null) {\n styleProps[1] = inline(styleProps[1], isRTL);\n }\n return styleProps;\n}\nStyleSheet.absoluteFill = absoluteFill;\nStyleSheet.absoluteFillObject = absoluteFillObject;\nStyleSheet.create = create;\nStyleSheet.compose = compose;\nStyleSheet.flatten = flatten;\nStyleSheet.getSheet = getSheet;\n// `hairlineWidth` is not implemented using screen density as browsers may\n// round sub-pixel values down to `0`, causing the line not to be rendered.\nStyleSheet.hairlineWidth = 1;\nif (canUseDOM && window.__REACT_DEVTOOLS_GLOBAL_HOOK__) {\n window.__REACT_DEVTOOLS_GLOBAL_HOOK__.resolveRNStyle = StyleSheet.flatten;\n}\nvar stylesheet = StyleSheet;\nexport default stylesheet;","function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\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 return target;\n}\nmodule.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"animationKeyframes\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport createReactDOMStyle from './createReactDOMStyle';\nimport hash from './hash';\nimport hyphenateStyleName from './hyphenateStyleName';\nimport normalizeValueWithProperty from './normalizeValueWithProperty';\nimport prefixStyles from '../../../modules/prefixStyles';\nvar cache = new Map();\nvar emptyObject = {};\nvar classicGroup = 1;\nvar atomicGroup = 3;\nvar customGroup = {\n borderColor: 2,\n borderRadius: 2,\n borderStyle: 2,\n borderWidth: 2,\n display: 2,\n flex: 2,\n inset: 2,\n margin: 2,\n overflow: 2,\n overscrollBehavior: 2,\n padding: 2,\n insetBlock: 2.1,\n insetInline: 2.1,\n marginInline: 2.1,\n marginBlock: 2.1,\n paddingInline: 2.1,\n paddingBlock: 2.1,\n borderBlockStartColor: 2.2,\n borderBlockStartStyle: 2.2,\n borderBlockStartWidth: 2.2,\n borderBlockEndColor: 2.2,\n borderBlockEndStyle: 2.2,\n borderBlockEndWidth: 2.2,\n borderInlineStartColor: 2.2,\n borderInlineStartStyle: 2.2,\n borderInlineStartWidth: 2.2,\n borderInlineEndColor: 2.2,\n borderInlineEndStyle: 2.2,\n borderInlineEndWidth: 2.2,\n borderEndStartRadius: 2.2,\n borderEndEndRadius: 2.2,\n borderStartStartRadius: 2.2,\n borderStartEndRadius: 2.2,\n insetBlockEnd: 2.2,\n insetBlockStart: 2.2,\n insetInlineEnd: 2.2,\n insetInlineStart: 2.2,\n marginBlockStart: 2.2,\n marginBlockEnd: 2.2,\n marginInlineStart: 2.2,\n marginInlineEnd: 2.2,\n paddingBlockStart: 2.2,\n paddingBlockEnd: 2.2,\n paddingInlineStart: 2.2,\n paddingInlineEnd: 2.2\n};\nvar borderTopLeftRadius = 'borderTopLeftRadius';\nvar borderTopRightRadius = 'borderTopRightRadius';\nvar borderBottomLeftRadius = 'borderBottomLeftRadius';\nvar borderBottomRightRadius = 'borderBottomRightRadius';\nvar borderLeftColor = 'borderLeftColor';\nvar borderLeftStyle = 'borderLeftStyle';\nvar borderLeftWidth = 'borderLeftWidth';\nvar borderRightColor = 'borderRightColor';\nvar borderRightStyle = 'borderRightStyle';\nvar borderRightWidth = 'borderRightWidth';\nvar right = 'right';\nvar marginLeft = 'marginLeft';\nvar marginRight = 'marginRight';\nvar paddingLeft = 'paddingLeft';\nvar paddingRight = 'paddingRight';\nvar left = 'left';\n\n// Map of LTR property names to their BiDi equivalent.\nvar PROPERTIES_FLIP = {\n [borderTopLeftRadius]: borderTopRightRadius,\n [borderTopRightRadius]: borderTopLeftRadius,\n [borderBottomLeftRadius]: borderBottomRightRadius,\n [borderBottomRightRadius]: borderBottomLeftRadius,\n [borderLeftColor]: borderRightColor,\n [borderLeftStyle]: borderRightStyle,\n [borderLeftWidth]: borderRightWidth,\n [borderRightColor]: borderLeftColor,\n [borderRightStyle]: borderLeftStyle,\n [borderRightWidth]: borderLeftWidth,\n [left]: right,\n [marginLeft]: marginRight,\n [marginRight]: marginLeft,\n [paddingLeft]: paddingRight,\n [paddingRight]: paddingLeft,\n [right]: left\n};\n\n// Map of I18N property names to their LTR equivalent.\nvar PROPERTIES_I18N = {\n borderStartStartRadius: borderTopLeftRadius,\n borderStartEndRadius: borderTopRightRadius,\n borderEndStartRadius: borderBottomLeftRadius,\n borderEndEndRadius: borderBottomRightRadius,\n borderInlineStartColor: borderLeftColor,\n borderInlineStartStyle: borderLeftStyle,\n borderInlineStartWidth: borderLeftWidth,\n borderInlineEndColor: borderRightColor,\n borderInlineEndStyle: borderRightStyle,\n borderInlineEndWidth: borderRightWidth,\n insetInlineEnd: right,\n insetInlineStart: left,\n marginInlineStart: marginLeft,\n marginInlineEnd: marginRight,\n paddingInlineStart: paddingLeft,\n paddingInlineEnd: paddingRight\n};\nvar PROPERTIES_VALUE = ['clear', 'float', 'textAlign'];\nexport function atomic(style) {\n var compiledStyle = {\n $$css: true\n };\n var compiledRules = [];\n function atomicCompile(srcProp, prop, value) {\n var valueString = stringifyValueWithProperty(value, prop);\n var cacheKey = prop + valueString;\n var cachedResult = cache.get(cacheKey);\n var identifier;\n if (cachedResult != null) {\n identifier = cachedResult[0];\n compiledRules.push(cachedResult[1]);\n } else {\n var v = srcProp !== prop ? cacheKey : valueString;\n identifier = createIdentifier('r', srcProp, v);\n var order = customGroup[srcProp] || atomicGroup;\n var rules = createAtomicRules(identifier, prop, value);\n var orderedRules = [rules, order];\n compiledRules.push(orderedRules);\n cache.set(cacheKey, [identifier, orderedRules]);\n }\n return identifier;\n }\n Object.keys(style).sort().forEach(srcProp => {\n var value = style[srcProp];\n if (value != null) {\n var localizeableValue;\n // BiDi flip values\n if (PROPERTIES_VALUE.indexOf(srcProp) > -1) {\n var _left = atomicCompile(srcProp, srcProp, 'left');\n var _right = atomicCompile(srcProp, srcProp, 'right');\n if (value === 'start') {\n localizeableValue = [_left, _right];\n } else if (value === 'end') {\n localizeableValue = [_right, _left];\n }\n }\n // BiDi flip properties\n var propPolyfill = PROPERTIES_I18N[srcProp];\n if (propPolyfill != null) {\n var ltr = atomicCompile(srcProp, propPolyfill, value);\n var rtl = atomicCompile(srcProp, PROPERTIES_FLIP[propPolyfill], value);\n localizeableValue = [ltr, rtl];\n }\n // BiDi flip transitionProperty value\n if (srcProp === 'transitionProperty') {\n var values = Array.isArray(value) ? value : [value];\n var polyfillIndices = [];\n for (var i = 0; i < values.length; i++) {\n var val = values[i];\n if (typeof val === 'string' && PROPERTIES_I18N[val] != null) {\n polyfillIndices.push(i);\n }\n }\n if (polyfillIndices.length > 0) {\n var ltrPolyfillValues = [...values];\n var rtlPolyfillValues = [...values];\n polyfillIndices.forEach(i => {\n var ltrVal = ltrPolyfillValues[i];\n if (typeof ltrVal === 'string') {\n var ltrPolyfill = PROPERTIES_I18N[ltrVal];\n var rtlPolyfill = PROPERTIES_FLIP[ltrPolyfill];\n ltrPolyfillValues[i] = ltrPolyfill;\n rtlPolyfillValues[i] = rtlPolyfill;\n var _ltr = atomicCompile(srcProp, srcProp, ltrPolyfillValues);\n var _rtl = atomicCompile(srcProp, srcProp, rtlPolyfillValues);\n localizeableValue = [_ltr, _rtl];\n }\n });\n }\n }\n if (localizeableValue == null) {\n localizeableValue = atomicCompile(srcProp, srcProp, value);\n } else {\n compiledStyle['$$css$localize'] = true;\n }\n compiledStyle[srcProp] = localizeableValue;\n }\n });\n return [compiledStyle, compiledRules];\n}\n\n/**\n * Compile simple style object to classic CSS rules.\n * No support for 'placeholderTextColor', 'scrollbarWidth', or 'pointerEvents'.\n */\nexport function classic(style, name) {\n var compiledStyle = {\n $$css: true\n };\n var compiledRules = [];\n var animationKeyframes = style.animationKeyframes,\n rest = _objectWithoutPropertiesLoose(style, _excluded);\n var identifier = createIdentifier('css', name, JSON.stringify(style));\n var selector = \".\" + identifier;\n var animationName;\n if (animationKeyframes != null) {\n var _processKeyframesValu = processKeyframesValue(animationKeyframes),\n animationNames = _processKeyframesValu[0],\n keyframesRules = _processKeyframesValu[1];\n animationName = animationNames.join(',');\n compiledRules.push(...keyframesRules);\n }\n var block = createDeclarationBlock(_objectSpread(_objectSpread({}, rest), {}, {\n animationName\n }));\n compiledRules.push(\"\" + selector + block);\n compiledStyle[identifier] = identifier;\n return [compiledStyle, [[compiledRules, classicGroup]]];\n}\n\n/**\n * Compile simple style object to inline DOM styles.\n * No support for 'animationKeyframes', 'placeholderTextColor', 'scrollbarWidth', or 'pointerEvents'.\n */\nexport function inline(originalStyle, isRTL) {\n var style = originalStyle || emptyObject;\n var frozenProps = {};\n var nextStyle = {};\n var _loop = function _loop() {\n var originalValue = style[originalProp];\n var prop = originalProp;\n var value = originalValue;\n if (!Object.prototype.hasOwnProperty.call(style, originalProp) || originalValue == null) {\n return \"continue\";\n }\n\n // BiDi flip values\n if (PROPERTIES_VALUE.indexOf(originalProp) > -1) {\n if (originalValue === 'start') {\n value = isRTL ? 'right' : 'left';\n } else if (originalValue === 'end') {\n value = isRTL ? 'left' : 'right';\n }\n }\n // BiDi flip properties\n var propPolyfill = PROPERTIES_I18N[originalProp];\n if (propPolyfill != null) {\n prop = isRTL ? PROPERTIES_FLIP[propPolyfill] : propPolyfill;\n }\n // BiDi flip transitionProperty value\n if (originalProp === 'transitionProperty') {\n // $FlowFixMe\n var originalValues = Array.isArray(originalValue) ? originalValue : [originalValue];\n originalValues.forEach((val, i) => {\n if (typeof val === 'string') {\n var valuePolyfill = PROPERTIES_I18N[val];\n if (valuePolyfill != null) {\n originalValues[i] = isRTL ? PROPERTIES_FLIP[valuePolyfill] : valuePolyfill;\n value = originalValues.join(' ');\n }\n }\n });\n }\n\n // Create finalized style\n if (!frozenProps[prop]) {\n nextStyle[prop] = value;\n }\n if (prop === originalProp) {\n frozenProps[prop] = true;\n }\n\n // if (PROPERTIES_I18N.hasOwnProperty(originalProp)) {\n // frozenProps[prop] = true;\n //}\n };\n for (var originalProp in style) {\n var _ret = _loop();\n if (_ret === \"continue\") continue;\n }\n return createReactDOMStyle(nextStyle, true);\n}\n\n/**\n * Create a value string that normalizes different input values with a common\n * output.\n */\nexport function stringifyValueWithProperty(value, property) {\n // e.g., 0 => '0px', 'black' => 'rgba(0,0,0,1)'\n var normalizedValue = normalizeValueWithProperty(value, property);\n return typeof normalizedValue !== 'string' ? JSON.stringify(normalizedValue || '') : normalizedValue;\n}\n\n/**\n * Create the Atomic CSS rules needed for a given StyleSheet rule.\n * Translates StyleSheet declarations to CSS.\n */\nfunction createAtomicRules(identifier, property, value) {\n var rules = [];\n var selector = \".\" + identifier;\n\n // Handle non-standard properties and object values that require multiple\n // CSS rules to be created.\n switch (property) {\n case 'animationKeyframes':\n {\n var _processKeyframesValu2 = processKeyframesValue(value),\n animationNames = _processKeyframesValu2[0],\n keyframesRules = _processKeyframesValu2[1];\n var block = createDeclarationBlock({\n animationName: animationNames.join(',')\n });\n rules.push(\"\" + selector + block, ...keyframesRules);\n break;\n }\n\n // Equivalent to using '::placeholder'\n case 'placeholderTextColor':\n {\n var _block = createDeclarationBlock({\n color: value,\n opacity: 1\n });\n rules.push(selector + \"::-webkit-input-placeholder\" + _block, selector + \"::-moz-placeholder\" + _block, selector + \":-ms-input-placeholder\" + _block, selector + \"::placeholder\" + _block);\n break;\n }\n\n // Polyfill for additional 'pointer-events' values\n // See d13f78622b233a0afc0c7a200c0a0792c8ca9e58\n case 'pointerEvents':\n {\n var finalValue = value;\n if (value === 'auto' || value === 'box-only') {\n finalValue = 'auto!important';\n if (value === 'box-only') {\n var _block2 = createDeclarationBlock({\n pointerEvents: 'none'\n });\n rules.push(selector + \">*\" + _block2);\n }\n } else if (value === 'none' || value === 'box-none') {\n finalValue = 'none!important';\n if (value === 'box-none') {\n var _block3 = createDeclarationBlock({\n pointerEvents: 'auto'\n });\n rules.push(selector + \">*\" + _block3);\n }\n }\n var _block4 = createDeclarationBlock({\n pointerEvents: finalValue\n });\n rules.push(\"\" + selector + _block4);\n break;\n }\n\n // Polyfill for draft spec\n // https://drafts.csswg.org/css-scrollbars-1/\n case 'scrollbarWidth':\n {\n if (value === 'none') {\n rules.push(selector + \"::-webkit-scrollbar{display:none}\");\n }\n var _block5 = createDeclarationBlock({\n scrollbarWidth: value\n });\n rules.push(\"\" + selector + _block5);\n break;\n }\n default:\n {\n var _block6 = createDeclarationBlock({\n [property]: value\n });\n rules.push(\"\" + selector + _block6);\n break;\n }\n }\n return rules;\n}\n\n/**\n * Creates a CSS declaration block from a StyleSheet object.\n */\nfunction createDeclarationBlock(style) {\n var domStyle = prefixStyles(createReactDOMStyle(style));\n var declarationsString = Object.keys(domStyle).map(property => {\n var value = domStyle[property];\n var prop = hyphenateStyleName(property);\n // The prefixer may return an array of values:\n // { display: [ '-webkit-flex', 'flex' ] }\n // to represent \"fallback\" declarations\n // { display: -webkit-flex; display: flex; }\n if (Array.isArray(value)) {\n return value.map(v => prop + \":\" + v).join(';');\n } else {\n return prop + \":\" + value;\n }\n })\n // Once properties are hyphenated, this will put the vendor\n // prefixed and short-form properties first in the list.\n .sort().join(';');\n return \"{\" + declarationsString + \";}\";\n}\n\n/**\n * An identifier is associated with a unique set of styles.\n */\nfunction createIdentifier(prefix, name, key) {\n var hashedString = hash(name + key);\n return process.env.NODE_ENV !== 'production' ? prefix + \"-\" + name + \"-\" + hashedString : prefix + \"-\" + hashedString;\n}\n\n/**\n * Create individual CSS keyframes rules.\n */\nfunction createKeyframes(keyframes) {\n var prefixes = ['-webkit-', ''];\n var identifier = createIdentifier('r', 'animation', JSON.stringify(keyframes));\n var steps = '{' + Object.keys(keyframes).map(stepName => {\n var rule = keyframes[stepName];\n var block = createDeclarationBlock(rule);\n return \"\" + stepName + block;\n }).join('') + '}';\n var rules = prefixes.map(prefix => {\n return \"@\" + prefix + \"keyframes \" + identifier + steps;\n });\n return [identifier, rules];\n}\n\n/**\n * Create CSS keyframes rules and names from a StyleSheet keyframes object.\n */\nfunction processKeyframesValue(keyframesValue) {\n if (typeof keyframesValue === 'number') {\n throw new Error(\"Invalid CSS keyframes type: \" + typeof keyframesValue);\n }\n var animationNames = [];\n var rules = [];\n var value = Array.isArray(keyframesValue) ? keyframesValue : [keyframesValue];\n value.forEach(keyframes => {\n if (typeof keyframes === 'string') {\n // Support external animation libraries (identifiers only)\n animationNames.push(keyframes);\n } else {\n // Create rules for each of the keyframes\n var _createKeyframes = createKeyframes(keyframes),\n identifier = _createKeyframes[0],\n keyframesRules = _createKeyframes[1];\n animationNames.push(identifier);\n rules.push(...keyframesRules);\n }\n });\n return [animationNames, rules];\n}","var arrayWithoutHoles = require(\"./arrayWithoutHoles.js\");\nvar iterableToArray = require(\"./iterableToArray.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableSpread = require(\"./nonIterableSpread.js\");\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\nmodule.exports = _toConsumableArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\nmodule.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n return arr2;\n}\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nmodule.exports = _iterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport normalizeValueWithProperty from './normalizeValueWithProperty';\nimport canUseDOM from '../../../modules/canUseDom';\n/**\n * The browser implements the CSS cascade, where the order of properties is a\n * factor in determining which styles to paint. React Native is different. It\n * gives giving precedence to the more specific style property. For example,\n * the value of `paddingTop` takes precedence over that of `padding`.\n *\n * This module creates mutally exclusive style declarations by expanding all of\n * React Native's supported shortform properties (e.g. `padding`) to their\n * longfrom equivalents.\n */\n\nvar emptyObject = {};\nvar supportsCSS3TextDecoration = !canUseDOM || window.CSS != null && window.CSS.supports != null && (window.CSS.supports('text-decoration-line', 'none') || window.CSS.supports('-webkit-text-decoration-line', 'none'));\nvar MONOSPACE_FONT_STACK = 'monospace,monospace';\nvar SYSTEM_FONT_STACK = '-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif';\nvar STYLE_SHORT_FORM_EXPANSIONS = {\n borderColor: ['borderTopColor', 'borderRightColor', 'borderBottomColor', 'borderLeftColor'],\n borderBlockColor: ['borderTopColor', 'borderBottomColor'],\n borderInlineColor: ['borderRightColor', 'borderLeftColor'],\n borderRadius: ['borderTopLeftRadius', 'borderTopRightRadius', 'borderBottomRightRadius', 'borderBottomLeftRadius'],\n borderStyle: ['borderTopStyle', 'borderRightStyle', 'borderBottomStyle', 'borderLeftStyle'],\n borderBlockStyle: ['borderTopStyle', 'borderBottomStyle'],\n borderInlineStyle: ['borderRightStyle', 'borderLeftStyle'],\n borderWidth: ['borderTopWidth', 'borderRightWidth', 'borderBottomWidth', 'borderLeftWidth'],\n borderBlockWidth: ['borderTopWidth', 'borderBottomWidth'],\n borderInlineWidth: ['borderRightWidth', 'borderLeftWidth'],\n insetBlock: ['top', 'bottom'],\n insetInline: ['left', 'right'],\n marginBlock: ['marginTop', 'marginBottom'],\n marginInline: ['marginRight', 'marginLeft'],\n paddingBlock: ['paddingTop', 'paddingBottom'],\n paddingInline: ['paddingRight', 'paddingLeft'],\n overflow: ['overflowX', 'overflowY'],\n overscrollBehavior: ['overscrollBehaviorX', 'overscrollBehaviorY'],\n borderBlockStartColor: ['borderTopColor'],\n borderBlockStartStyle: ['borderTopStyle'],\n borderBlockStartWidth: ['borderTopWidth'],\n borderBlockEndColor: ['borderBottomColor'],\n borderBlockEndStyle: ['borderBottomStyle'],\n borderBlockEndWidth: ['borderBottomWidth'],\n //borderInlineStartColor: ['borderLeftColor'],\n //borderInlineStartStyle: ['borderLeftStyle'],\n //borderInlineStartWidth: ['borderLeftWidth'],\n //borderInlineEndColor: ['borderRightColor'],\n //borderInlineEndStyle: ['borderRightStyle'],\n //borderInlineEndWidth: ['borderRightWidth'],\n borderEndStartRadius: ['borderBottomLeftRadius'],\n borderEndEndRadius: ['borderBottomRightRadius'],\n borderStartStartRadius: ['borderTopLeftRadius'],\n borderStartEndRadius: ['borderTopRightRadius'],\n insetBlockEnd: ['bottom'],\n insetBlockStart: ['top'],\n //insetInlineEnd: ['right'],\n //insetInlineStart: ['left'],\n marginBlockStart: ['marginTop'],\n marginBlockEnd: ['marginBottom'],\n //marginInlineStart: ['marginLeft'],\n //marginInlineEnd: ['marginRight'],\n paddingBlockStart: ['paddingTop'],\n paddingBlockEnd: ['paddingBottom']\n //paddingInlineStart: ['marginLeft'],\n //paddingInlineEnd: ['marginRight'],\n};\n\n/**\n * Reducer\n */\n\nvar createReactDOMStyle = (style, isInline) => {\n if (!style) {\n return emptyObject;\n }\n var resolvedStyle = {};\n var _loop = function _loop() {\n var value = style[prop];\n if (\n // Ignore everything with a null value\n value == null) {\n return \"continue\";\n }\n if (prop === 'backgroundClip') {\n // TODO: remove once this issue is fixed\n // https://github.com/rofrischmann/inline-style-prefixer/issues/159\n if (value === 'text') {\n resolvedStyle.backgroundClip = value;\n resolvedStyle.WebkitBackgroundClip = value;\n }\n } else if (prop === 'flex') {\n if (value === -1) {\n resolvedStyle.flexGrow = 0;\n resolvedStyle.flexShrink = 1;\n resolvedStyle.flexBasis = 'auto';\n } else {\n resolvedStyle.flex = value;\n }\n } else if (prop === 'font') {\n resolvedStyle[prop] = value.replace('System', SYSTEM_FONT_STACK);\n } else if (prop === 'fontFamily') {\n if (value.indexOf('System') > -1) {\n var stack = value.split(/,\\s*/);\n stack[stack.indexOf('System')] = SYSTEM_FONT_STACK;\n resolvedStyle[prop] = stack.join(',');\n } else if (value === 'monospace') {\n resolvedStyle[prop] = MONOSPACE_FONT_STACK;\n } else {\n resolvedStyle[prop] = value;\n }\n } else if (prop === 'textDecorationLine') {\n // use 'text-decoration' for browsers that only support CSS2\n // text-decoration (e.g., IE, Edge)\n if (!supportsCSS3TextDecoration) {\n resolvedStyle.textDecoration = value;\n } else {\n resolvedStyle.textDecorationLine = value;\n }\n } else if (prop === 'writingDirection') {\n resolvedStyle.direction = value;\n } else {\n var _value = normalizeValueWithProperty(style[prop], prop);\n var longFormProperties = STYLE_SHORT_FORM_EXPANSIONS[prop];\n if (isInline && prop === 'inset') {\n if (style.insetInline == null) {\n resolvedStyle.left = _value;\n resolvedStyle.right = _value;\n }\n if (style.insetBlock == null) {\n resolvedStyle.top = _value;\n resolvedStyle.bottom = _value;\n }\n } else if (isInline && prop === 'margin') {\n if (style.marginInline == null) {\n resolvedStyle.marginLeft = _value;\n resolvedStyle.marginRight = _value;\n }\n if (style.marginBlock == null) {\n resolvedStyle.marginTop = _value;\n resolvedStyle.marginBottom = _value;\n }\n } else if (isInline && prop === 'padding') {\n if (style.paddingInline == null) {\n resolvedStyle.paddingLeft = _value;\n resolvedStyle.paddingRight = _value;\n }\n if (style.paddingBlock == null) {\n resolvedStyle.paddingTop = _value;\n resolvedStyle.paddingBottom = _value;\n }\n } else if (longFormProperties) {\n longFormProperties.forEach((longForm, i) => {\n // The value of any longform property in the original styles takes\n // precedence over the shortform's value.\n if (style[longForm] == null) {\n resolvedStyle[longForm] = _value;\n }\n });\n } else {\n resolvedStyle[prop] = _value;\n }\n }\n };\n for (var prop in style) {\n var _ret = _loop();\n if (_ret === \"continue\") continue;\n }\n return resolvedStyle;\n};\nexport default createReactDOMStyle;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport unitlessNumbers from './unitlessNumbers';\nimport normalizeColor from './normalizeColor';\nvar colorProps = {\n backgroundColor: true,\n borderColor: true,\n borderTopColor: true,\n borderRightColor: true,\n borderBottomColor: true,\n borderLeftColor: true,\n color: true,\n shadowColor: true,\n textDecorationColor: true,\n textShadowColor: true\n};\nexport default function normalizeValueWithProperty(value, property) {\n var returnValue = value;\n if ((property == null || !unitlessNumbers[property]) && typeof value === 'number') {\n returnValue = value + \"px\";\n } else if (property != null && colorProps[property]) {\n returnValue = normalizeColor(value);\n }\n return returnValue;\n}","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar unitlessNumbers = {\n animationIterationCount: true,\n aspectRatio: true,\n borderImageOutset: true,\n borderImageSlice: true,\n borderImageWidth: true,\n boxFlex: true,\n boxFlexGroup: true,\n boxOrdinalGroup: true,\n columnCount: true,\n flex: true,\n flexGrow: true,\n flexOrder: true,\n flexPositive: true,\n flexShrink: true,\n flexNegative: true,\n fontWeight: true,\n gridRow: true,\n gridRowEnd: true,\n gridRowGap: true,\n gridRowStart: true,\n gridColumn: true,\n gridColumnEnd: true,\n gridColumnGap: true,\n gridColumnStart: true,\n lineClamp: true,\n opacity: true,\n order: true,\n orphans: true,\n tabSize: true,\n widows: true,\n zIndex: true,\n zoom: true,\n // SVG-related\n fillOpacity: true,\n floodOpacity: true,\n stopOpacity: true,\n strokeDasharray: true,\n strokeDashoffset: true,\n strokeMiterlimit: true,\n strokeOpacity: true,\n strokeWidth: true,\n // transform types\n scale: true,\n scaleX: true,\n scaleY: true,\n scaleZ: true,\n // RN properties\n shadowOpacity: true\n};\n\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\nvar prefixes = ['ms', 'Moz', 'O', 'Webkit'];\nvar prefixKey = (prefix, key) => {\n return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n};\nObject.keys(unitlessNumbers).forEach(prop => {\n prefixes.forEach(prefix => {\n unitlessNumbers[prefixKey(prefix, prop)] = unitlessNumbers[prop];\n });\n});\nexport default unitlessNumbers;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport isWebColor from '../../../modules/isWebColor';\nimport processColor from '../../../exports/processColor';\nvar normalizeColor = function normalizeColor(color, opacity) {\n if (opacity === void 0) {\n opacity = 1;\n }\n if (color == null) return;\n if (typeof color === 'string' && isWebColor(color)) {\n return color;\n }\n var colorInt = processColor(color);\n if (colorInt != null) {\n var r = colorInt >> 16 & 255;\n var g = colorInt >> 8 & 255;\n var b = colorInt & 255;\n var a = (colorInt >> 24 & 255) / 255;\n var alpha = (a * opacity).toFixed(2);\n return \"rgba(\" + r + \",\" + g + \",\" + b + \",\" + alpha + \")\";\n }\n};\nexport default normalizeColor;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar isWebColor = color => color === 'currentcolor' || color === 'currentColor' || color === 'inherit' || color.indexOf('var(') === 0;\nexport default isWebColor;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport normalizeColor from '@react-native/normalize-color';\nvar processColor = color => {\n if (color === undefined || color === null) {\n return color;\n }\n\n // convert number and hex\n var int32Color = normalizeColor(color);\n if (int32Color === undefined || int32Color === null) {\n return undefined;\n }\n int32Color = (int32Color << 24 | int32Color >>> 8) >>> 0;\n return int32Color;\n};\nexport default processColor;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @noflow\n */\n\n/* eslint no-bitwise: 0 */\n\n'use strict';\n\nfunction normalizeColor(color) {\n if (typeof color === 'number') {\n if (color >>> 0 === color && color >= 0 && color <= 0xffffffff) {\n return color;\n }\n return null;\n }\n\n if (typeof color !== 'string') {\n return null;\n }\n\n const matchers = getMatchers();\n let match;\n\n // Ordered based on occurrences on Facebook codebase\n if ((match = matchers.hex6.exec(color))) {\n return parseInt(match[1] + 'ff', 16) >>> 0;\n }\n\n const colorFromKeyword = normalizeKeyword(color);\n if (colorFromKeyword != null) {\n return colorFromKeyword;\n }\n\n if ((match = matchers.rgb.exec(color))) {\n return (\n ((parse255(match[1]) << 24) | // r\n (parse255(match[2]) << 16) | // g\n (parse255(match[3]) << 8) | // b\n 0x000000ff) >>> // a\n 0\n );\n }\n\n if ((match = matchers.rgba.exec(color))) {\n // rgba(R G B / A) notation\n if (match[6] !== undefined) {\n return (\n ((parse255(match[6]) << 24) | // r\n (parse255(match[7]) << 16) | // g\n (parse255(match[8]) << 8) | // b\n parse1(match[9])) >>> // a\n 0\n );\n }\n\n // rgba(R, G, B, A) notation\n return (\n ((parse255(match[2]) << 24) | // r\n (parse255(match[3]) << 16) | // g\n (parse255(match[4]) << 8) | // b\n parse1(match[5])) >>> // a\n 0\n );\n }\n\n if ((match = matchers.hex3.exec(color))) {\n return (\n parseInt(\n match[1] +\n match[1] + // r\n match[2] +\n match[2] + // g\n match[3] +\n match[3] + // b\n 'ff', // a\n 16,\n ) >>> 0\n );\n }\n\n // https://drafts.csswg.org/css-color-4/#hex-notation\n if ((match = matchers.hex8.exec(color))) {\n return parseInt(match[1], 16) >>> 0;\n }\n\n if ((match = matchers.hex4.exec(color))) {\n return (\n parseInt(\n match[1] +\n match[1] + // r\n match[2] +\n match[2] + // g\n match[3] +\n match[3] + // b\n match[4] +\n match[4], // a\n 16,\n ) >>> 0\n );\n }\n\n if ((match = matchers.hsl.exec(color))) {\n return (\n (hslToRgb(\n parse360(match[1]), // h\n parsePercentage(match[2]), // s\n parsePercentage(match[3]), // l\n ) |\n 0x000000ff) >>> // a\n 0\n );\n }\n\n if ((match = matchers.hsla.exec(color))) {\n // hsla(H S L / A) notation\n if (match[6] !== undefined) {\n return (\n (hslToRgb(\n parse360(match[6]), // h\n parsePercentage(match[7]), // s\n parsePercentage(match[8]), // l\n ) |\n parse1(match[9])) >>> // a\n 0\n );\n }\n\n // hsla(H, S, L, A) notation\n return (\n (hslToRgb(\n parse360(match[2]), // h\n parsePercentage(match[3]), // s\n parsePercentage(match[4]), // l\n ) |\n parse1(match[5])) >>> // a\n 0\n );\n }\n\n if ((match = matchers.hwb.exec(color))) {\n return (\n (hwbToRgb(\n parse360(match[1]), // h\n parsePercentage(match[2]), // w\n parsePercentage(match[3]), // b\n ) |\n 0x000000ff) >>> // a\n 0\n );\n }\n\n return null;\n}\n\nfunction hue2rgb(p, q, t) {\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n}\n\nfunction hslToRgb(h, s, l) {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n const r = hue2rgb(p, q, h + 1 / 3);\n const g = hue2rgb(p, q, h);\n const b = hue2rgb(p, q, h - 1 / 3);\n\n return (\n (Math.round(r * 255) << 24) |\n (Math.round(g * 255) << 16) |\n (Math.round(b * 255) << 8)\n );\n}\n\nfunction hwbToRgb(h, w, b) {\n if (w + b >= 1) {\n const gray = Math.round((w * 255) / (w + b));\n\n return (gray << 24) | (gray << 16) | (gray << 8);\n }\n\n const red = hue2rgb(0, 1, h + 1 / 3) * (1 - w - b) + w;\n const green = hue2rgb(0, 1, h) * (1 - w - b) + w;\n const blue = hue2rgb(0, 1, h - 1 / 3) * (1 - w - b) + w;\n\n return (\n (Math.round(red * 255) << 24) |\n (Math.round(green * 255) << 16) |\n (Math.round(blue * 255) << 8)\n );\n}\n\nconst NUMBER = '[-+]?\\\\d*\\\\.?\\\\d+';\nconst PERCENTAGE = NUMBER + '%';\n\nfunction call(...args) {\n return '\\\\(\\\\s*(' + args.join(')\\\\s*,?\\\\s*(') + ')\\\\s*\\\\)';\n}\n\nfunction callWithSlashSeparator(...args) {\n return (\n '\\\\(\\\\s*(' +\n args.slice(0, args.length - 1).join(')\\\\s*,?\\\\s*(') +\n ')\\\\s*/\\\\s*(' +\n args[args.length - 1] +\n ')\\\\s*\\\\)'\n );\n}\n\nfunction commaSeparatedCall(...args) {\n return '\\\\(\\\\s*(' + args.join(')\\\\s*,\\\\s*(') + ')\\\\s*\\\\)';\n}\n\nlet cachedMatchers;\n\nfunction getMatchers() {\n if (cachedMatchers === undefined) {\n cachedMatchers = {\n rgb: new RegExp('rgb' + call(NUMBER, NUMBER, NUMBER)),\n rgba: new RegExp(\n 'rgba(' +\n commaSeparatedCall(NUMBER, NUMBER, NUMBER, NUMBER) +\n '|' +\n callWithSlashSeparator(NUMBER, NUMBER, NUMBER, NUMBER) +\n ')',\n ),\n hsl: new RegExp('hsl' + call(NUMBER, PERCENTAGE, PERCENTAGE)),\n hsla: new RegExp(\n 'hsla(' +\n commaSeparatedCall(NUMBER, PERCENTAGE, PERCENTAGE, NUMBER) +\n '|' +\n callWithSlashSeparator(NUMBER, PERCENTAGE, PERCENTAGE, NUMBER) +\n ')',\n ),\n hwb: new RegExp('hwb' + call(NUMBER, PERCENTAGE, PERCENTAGE)),\n hex3: /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex4: /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#([0-9a-fA-F]{6})$/,\n hex8: /^#([0-9a-fA-F]{8})$/,\n };\n }\n return cachedMatchers;\n}\n\nfunction parse255(str) {\n const int = parseInt(str, 10);\n if (int < 0) {\n return 0;\n }\n if (int > 255) {\n return 255;\n }\n return int;\n}\n\nfunction parse360(str) {\n const int = parseFloat(str);\n return (((int % 360) + 360) % 360) / 360;\n}\n\nfunction parse1(str) {\n const num = parseFloat(str);\n if (num < 0) {\n return 0;\n }\n if (num > 1) {\n return 255;\n }\n return Math.round(num * 255);\n}\n\nfunction parsePercentage(str) {\n // parseFloat conveniently ignores the final %\n const int = parseFloat(str);\n if (int < 0) {\n return 0;\n }\n if (int > 100) {\n return 1;\n }\n return int / 100;\n}\n\nfunction normalizeKeyword(name) {\n // prettier-ignore\n switch (name) {\n case 'transparent': return 0x00000000;\n // http://www.w3.org/TR/css3-color/#svg-color\n case 'aliceblue': return 0xf0f8ffff;\n case 'antiquewhite': return 0xfaebd7ff;\n case 'aqua': return 0x00ffffff;\n case 'aquamarine': return 0x7fffd4ff;\n case 'azure': return 0xf0ffffff;\n case 'beige': return 0xf5f5dcff;\n case 'bisque': return 0xffe4c4ff;\n case 'black': return 0x000000ff;\n case 'blanchedalmond': return 0xffebcdff;\n case 'blue': return 0x0000ffff;\n case 'blueviolet': return 0x8a2be2ff;\n case 'brown': return 0xa52a2aff;\n case 'burlywood': return 0xdeb887ff;\n case 'burntsienna': return 0xea7e5dff;\n case 'cadetblue': return 0x5f9ea0ff;\n case 'chartreuse': return 0x7fff00ff;\n case 'chocolate': return 0xd2691eff;\n case 'coral': return 0xff7f50ff;\n case 'cornflowerblue': return 0x6495edff;\n case 'cornsilk': return 0xfff8dcff;\n case 'crimson': return 0xdc143cff;\n case 'cyan': return 0x00ffffff;\n case 'darkblue': return 0x00008bff;\n case 'darkcyan': return 0x008b8bff;\n case 'darkgoldenrod': return 0xb8860bff;\n case 'darkgray': return 0xa9a9a9ff;\n case 'darkgreen': return 0x006400ff;\n case 'darkgrey': return 0xa9a9a9ff;\n case 'darkkhaki': return 0xbdb76bff;\n case 'darkmagenta': return 0x8b008bff;\n case 'darkolivegreen': return 0x556b2fff;\n case 'darkorange': return 0xff8c00ff;\n case 'darkorchid': return 0x9932ccff;\n case 'darkred': return 0x8b0000ff;\n case 'darksalmon': return 0xe9967aff;\n case 'darkseagreen': return 0x8fbc8fff;\n case 'darkslateblue': return 0x483d8bff;\n case 'darkslategray': return 0x2f4f4fff;\n case 'darkslategrey': return 0x2f4f4fff;\n case 'darkturquoise': return 0x00ced1ff;\n case 'darkviolet': return 0x9400d3ff;\n case 'deeppink': return 0xff1493ff;\n case 'deepskyblue': return 0x00bfffff;\n case 'dimgray': return 0x696969ff;\n case 'dimgrey': return 0x696969ff;\n case 'dodgerblue': return 0x1e90ffff;\n case 'firebrick': return 0xb22222ff;\n case 'floralwhite': return 0xfffaf0ff;\n case 'forestgreen': return 0x228b22ff;\n case 'fuchsia': return 0xff00ffff;\n case 'gainsboro': return 0xdcdcdcff;\n case 'ghostwhite': return 0xf8f8ffff;\n case 'gold': return 0xffd700ff;\n case 'goldenrod': return 0xdaa520ff;\n case 'gray': return 0x808080ff;\n case 'green': return 0x008000ff;\n case 'greenyellow': return 0xadff2fff;\n case 'grey': return 0x808080ff;\n case 'honeydew': return 0xf0fff0ff;\n case 'hotpink': return 0xff69b4ff;\n case 'indianred': return 0xcd5c5cff;\n case 'indigo': return 0x4b0082ff;\n case 'ivory': return 0xfffff0ff;\n case 'khaki': return 0xf0e68cff;\n case 'lavender': return 0xe6e6faff;\n case 'lavenderblush': return 0xfff0f5ff;\n case 'lawngreen': return 0x7cfc00ff;\n case 'lemonchiffon': return 0xfffacdff;\n case 'lightblue': return 0xadd8e6ff;\n case 'lightcoral': return 0xf08080ff;\n case 'lightcyan': return 0xe0ffffff;\n case 'lightgoldenrodyellow': return 0xfafad2ff;\n case 'lightgray': return 0xd3d3d3ff;\n case 'lightgreen': return 0x90ee90ff;\n case 'lightgrey': return 0xd3d3d3ff;\n case 'lightpink': return 0xffb6c1ff;\n case 'lightsalmon': return 0xffa07aff;\n case 'lightseagreen': return 0x20b2aaff;\n case 'lightskyblue': return 0x87cefaff;\n case 'lightslategray': return 0x778899ff;\n case 'lightslategrey': return 0x778899ff;\n case 'lightsteelblue': return 0xb0c4deff;\n case 'lightyellow': return 0xffffe0ff;\n case 'lime': return 0x00ff00ff;\n case 'limegreen': return 0x32cd32ff;\n case 'linen': return 0xfaf0e6ff;\n case 'magenta': return 0xff00ffff;\n case 'maroon': return 0x800000ff;\n case 'mediumaquamarine': return 0x66cdaaff;\n case 'mediumblue': return 0x0000cdff;\n case 'mediumorchid': return 0xba55d3ff;\n case 'mediumpurple': return 0x9370dbff;\n case 'mediumseagreen': return 0x3cb371ff;\n case 'mediumslateblue': return 0x7b68eeff;\n case 'mediumspringgreen': return 0x00fa9aff;\n case 'mediumturquoise': return 0x48d1ccff;\n case 'mediumvioletred': return 0xc71585ff;\n case 'midnightblue': return 0x191970ff;\n case 'mintcream': return 0xf5fffaff;\n case 'mistyrose': return 0xffe4e1ff;\n case 'moccasin': return 0xffe4b5ff;\n case 'navajowhite': return 0xffdeadff;\n case 'navy': return 0x000080ff;\n case 'oldlace': return 0xfdf5e6ff;\n case 'olive': return 0x808000ff;\n case 'olivedrab': return 0x6b8e23ff;\n case 'orange': return 0xffa500ff;\n case 'orangered': return 0xff4500ff;\n case 'orchid': return 0xda70d6ff;\n case 'palegoldenrod': return 0xeee8aaff;\n case 'palegreen': return 0x98fb98ff;\n case 'paleturquoise': return 0xafeeeeff;\n case 'palevioletred': return 0xdb7093ff;\n case 'papayawhip': return 0xffefd5ff;\n case 'peachpuff': return 0xffdab9ff;\n case 'peru': return 0xcd853fff;\n case 'pink': return 0xffc0cbff;\n case 'plum': return 0xdda0ddff;\n case 'powderblue': return 0xb0e0e6ff;\n case 'purple': return 0x800080ff;\n case 'rebeccapurple': return 0x663399ff;\n case 'red': return 0xff0000ff;\n case 'rosybrown': return 0xbc8f8fff;\n case 'royalblue': return 0x4169e1ff;\n case 'saddlebrown': return 0x8b4513ff;\n case 'salmon': return 0xfa8072ff;\n case 'sandybrown': return 0xf4a460ff;\n case 'seagreen': return 0x2e8b57ff;\n case 'seashell': return 0xfff5eeff;\n case 'sienna': return 0xa0522dff;\n case 'silver': return 0xc0c0c0ff;\n case 'skyblue': return 0x87ceebff;\n case 'slateblue': return 0x6a5acdff;\n case 'slategray': return 0x708090ff;\n case 'slategrey': return 0x708090ff;\n case 'snow': return 0xfffafaff;\n case 'springgreen': return 0x00ff7fff;\n case 'steelblue': return 0x4682b4ff;\n case 'tan': return 0xd2b48cff;\n case 'teal': return 0x008080ff;\n case 'thistle': return 0xd8bfd8ff;\n case 'tomato': return 0xff6347ff;\n case 'turquoise': return 0x40e0d0ff;\n case 'violet': return 0xee82eeff;\n case 'wheat': return 0xf5deb3ff;\n case 'white': return 0xffffffff;\n case 'whitesmoke': return 0xf5f5f5ff;\n case 'yellow': return 0xffff00ff;\n case 'yellowgreen': return 0x9acd32ff;\n }\n return null;\n}\n\nmodule.exports = normalizeColor;\n","/* eslint-disable */\n\n/**\n * JS Implementation of MurmurHash2\n *\n * @author Gary Court\n * @see http://github.com/garycourt/murmurhash-js\n * @author Austin Appleby\n * @see http://sites.google.com/site/murmurhash/\n *\n * @param {string} str ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n *\n * \n */\n\nfunction murmurhash2_32_gc(str, seed) {\n var l = str.length,\n h = seed ^ l,\n i = 0,\n k;\n while (l >= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k = (k & 0xffff) * 0x5bd1e995 + (((k >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n k ^= k >>> 24;\n k = (k & 0xffff) * 0x5bd1e995 + (((k >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16) ^ k;\n l -= 4;\n ++i;\n }\n switch (l) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n }\n h ^= h >>> 13;\n h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n h ^= h >>> 15;\n return h >>> 0;\n}\nvar hash = str => murmurhash2_32_gc(str, 1).toString(36);\nexport default hash;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar uppercasePattern = /[A-Z]/g;\nvar msPattern = /^ms-/;\nvar cache = {};\nfunction toHyphenLower(match) {\n return '-' + match.toLowerCase();\n}\nfunction hyphenateStyleName(name) {\n if (name in cache) {\n return cache[name];\n }\n var hName = name.replace(uppercasePattern, toHyphenLower);\n return cache[name] = msPattern.test(hName) ? '-' + hName : hName;\n}\nexport default hyphenateStyleName;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport createPrefixer from 'inline-style-prefixer/lib/createPrefixer';\nimport staticData from './static';\nvar prefixAll = createPrefixer(staticData);\nexport default prefixAll;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = createPrefixer;\n\nvar _prefixProperty = require('./utils/prefixProperty');\n\nvar _prefixProperty2 = _interopRequireDefault(_prefixProperty);\n\nvar _prefixValue = require('./utils/prefixValue');\n\nvar _prefixValue2 = _interopRequireDefault(_prefixValue);\n\nvar _addNewValuesOnly = require('./utils/addNewValuesOnly');\n\nvar _addNewValuesOnly2 = _interopRequireDefault(_addNewValuesOnly);\n\nvar _isObject = require('./utils/isObject');\n\nvar _isObject2 = _interopRequireDefault(_isObject);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction createPrefixer(_ref) {\n var prefixMap = _ref.prefixMap,\n plugins = _ref.plugins;\n\n return function prefix(style) {\n for (var property in style) {\n var value = style[property];\n\n // handle nested objects\n if ((0, _isObject2.default)(value)) {\n style[property] = prefix(value);\n // handle array values\n } else if (Array.isArray(value)) {\n var combinedValue = [];\n\n for (var i = 0, len = value.length; i < len; ++i) {\n var processedValue = (0, _prefixValue2.default)(plugins, property, value[i], style, prefixMap);\n\n (0, _addNewValuesOnly2.default)(combinedValue, processedValue || value[i]);\n }\n\n // only modify the value if it was touched\n // by any plugin to prevent unnecessary mutations\n if (combinedValue.length > 0) {\n style[property] = combinedValue;\n }\n } else {\n var _processedValue = (0, _prefixValue2.default)(plugins, property, value, style, prefixMap);\n\n // only modify the value if it was touched\n // by any plugin to prevent unnecessary mutations\n if (_processedValue) {\n style[property] = _processedValue;\n }\n\n style = (0, _prefixProperty2.default)(prefixMap, property, style);\n }\n }\n\n return style;\n };\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = prefixProperty;\n\nvar _capitalizeString = require('./capitalizeString');\n\nvar _capitalizeString2 = _interopRequireDefault(_capitalizeString);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction prefixProperty(prefixProperties, property, style) {\n var requiredPrefixes = prefixProperties[property];\n\n if (requiredPrefixes && style.hasOwnProperty(property)) {\n var capitalizedProperty = (0, _capitalizeString2.default)(property);\n\n for (var i = 0; i < requiredPrefixes.length; ++i) {\n var prefixedProperty = requiredPrefixes[i] + capitalizedProperty;\n\n if (!style[prefixedProperty]) {\n style[prefixedProperty] = style[property];\n }\n }\n }\n\n return style;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = capitalizeString;\nfunction capitalizeString(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = prefixValue;\nfunction prefixValue(plugins, property, value, style, metaData) {\n for (var i = 0, len = plugins.length; i < len; ++i) {\n var processedValue = plugins[i](property, value, style, metaData);\n\n // we can stop processing if a value is returned\n // as all plugin criteria are unique\n if (processedValue) {\n return processedValue;\n }\n }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = addNewValuesOnly;\nfunction addIfNew(list, value) {\n if (list.indexOf(value) === -1) {\n list.push(value);\n }\n}\n\nfunction addNewValuesOnly(list, values) {\n if (Array.isArray(values)) {\n for (var i = 0, len = values.length; i < len; ++i) {\n addIfNew(list, values[i]);\n }\n } else {\n addIfNew(list, values);\n }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = isObject;\nfunction isObject(value) {\n return value instanceof Object && !Array.isArray(value);\n}","import backgroundClip from 'inline-style-prefixer/lib/plugins/backgroundClip';\nimport crossFade from 'inline-style-prefixer/lib/plugins/crossFade';\nimport cursor from 'inline-style-prefixer/lib/plugins/cursor';\nimport filter from 'inline-style-prefixer/lib/plugins/filter';\nimport imageSet from 'inline-style-prefixer/lib/plugins/imageSet';\nimport logical from 'inline-style-prefixer/lib/plugins/logical';\nimport position from 'inline-style-prefixer/lib/plugins/position';\nimport sizing from 'inline-style-prefixer/lib/plugins/sizing';\nimport transition from 'inline-style-prefixer/lib/plugins/transition';\nvar w = ['Webkit'];\nvar m = ['Moz'];\nvar wm = ['Webkit', 'Moz'];\nvar wms = ['Webkit', 'ms'];\nvar wmms = ['Webkit', 'Moz', 'ms'];\nexport default {\n plugins: [backgroundClip, crossFade, cursor, filter, imageSet, logical, position, sizing, transition],\n prefixMap: {\n appearance: wmms,\n userSelect: wm,\n textEmphasisPosition: wms,\n textEmphasis: wms,\n textEmphasisStyle: wms,\n textEmphasisColor: wms,\n boxDecorationBreak: wms,\n clipPath: w,\n maskImage: wms,\n maskMode: wms,\n maskRepeat: wms,\n maskPosition: wms,\n maskClip: wms,\n maskOrigin: wms,\n maskSize: wms,\n maskComposite: wms,\n mask: wms,\n maskBorderSource: wms,\n maskBorderMode: wms,\n maskBorderSlice: wms,\n maskBorderWidth: wms,\n maskBorderOutset: wms,\n maskBorderRepeat: wms,\n maskBorder: wms,\n maskType: wms,\n textDecorationStyle: w,\n textDecorationSkip: w,\n textDecorationLine: w,\n textDecorationColor: w,\n filter: w,\n breakAfter: w,\n breakBefore: w,\n breakInside: w,\n columnCount: w,\n columnFill: w,\n columnGap: w,\n columnRule: w,\n columnRuleColor: w,\n columnRuleStyle: w,\n columnRuleWidth: w,\n columns: w,\n columnSpan: w,\n columnWidth: w,\n backdropFilter: w,\n hyphens: w,\n flowInto: w,\n flowFrom: w,\n regionFragment: w,\n textOrientation: w,\n tabSize: m,\n fontKerning: w,\n textSizeAdjust: w\n }\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = backgroundClip;\nfunction backgroundClip() {\n return null;\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = crossFade;\n\nvar _cssInJsUtils = require('css-in-js-utils');\n\nvar CROSS_FADE_REGEX = /cross-fade\\(/g;\n// http://caniuse.com/#search=cross-fade\nvar prefixes = ['-webkit-', ''];\n\nfunction crossFade(property, value) {\n if (typeof value === 'string' && !(0, _cssInJsUtils.isPrefixedValue)(value) && value.indexOf('cross-fade(') !== -1) {\n return prefixes.map(function (prefix) {\n return value.replace(CROSS_FADE_REGEX, prefix + 'cross-fade(');\n });\n }\n}","import assignStyle from './assignStyle';\nimport camelCaseProperty from './camelCaseProperty';\nimport cssifyDeclaration from './cssifyDeclaration';\nimport cssifyObject from './cssifyObject';\nimport hyphenateProperty from './hyphenateProperty';\nimport isPrefixedProperty from './isPrefixedProperty';\nimport isPrefixedValue from './isPrefixedValue';\nimport isUnitlessProperty from './isUnitlessProperty';\nimport normalizeProperty from './normalizeProperty';\nimport resolveArrayValue from './resolveArrayValue';\nimport unprefixProperty from './unprefixProperty';\nimport unprefixValue from './unprefixValue';\nexport { assignStyle, camelCaseProperty, cssifyDeclaration, cssifyObject, hyphenateProperty, isPrefixedProperty, isPrefixedValue, isUnitlessProperty, normalizeProperty, resolveArrayValue, unprefixProperty, unprefixValue };","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(n); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction filterUniqueArray(arr) {\n return arr.filter(function (val, index) {\n return arr.lastIndexOf(val) === index;\n });\n}\n\nexport default function assignStyle(base) {\n for (var i = 0, len = arguments.length <= 1 ? 0 : arguments.length - 1; i < len; ++i) {\n var style = i + 1 < 1 || arguments.length <= i + 1 ? undefined : arguments[i + 1];\n\n for (var property in style) {\n var value = style[property];\n var baseValue = base[property];\n\n if (baseValue && value) {\n if (Array.isArray(baseValue)) {\n base[property] = filterUniqueArray(baseValue.concat(value));\n continue;\n }\n\n if (Array.isArray(value)) {\n base[property] = filterUniqueArray([baseValue].concat(_toConsumableArray(value)));\n continue;\n }\n\n if (_typeof(value) === 'object') {\n base[property] = assignStyle({}, baseValue, value);\n continue;\n }\n }\n\n base[property] = value;\n }\n }\n\n return base;\n}","var DASH = /-([a-z])/g;\nvar MS = /^Ms/g;\nvar cache = {};\n\nfunction toUpper(match) {\n return match[1].toUpperCase();\n}\n\nexport default function camelCaseProperty(property) {\n if (cache.hasOwnProperty(property)) {\n return cache[property];\n }\n\n var camelProp = property.replace(DASH, toUpper).replace(MS, 'ms');\n cache[property] = camelProp;\n return camelProp;\n}","import hyphenateProperty from './hyphenateProperty';\nexport default function cssifyDeclaration(property, value) {\n return hyphenateProperty(property) + ':' + value;\n}","import hyphenateStyleName from 'hyphenate-style-name';\nexport default function hyphenateProperty(property) {\n return hyphenateStyleName(property);\n}","/* eslint-disable no-var, prefer-template */\nvar uppercasePattern = /[A-Z]/g\nvar msPattern = /^ms-/\nvar cache = {}\n\nfunction toHyphenLower(match) {\n return '-' + match.toLowerCase()\n}\n\nfunction hyphenateStyleName(name) {\n if (cache.hasOwnProperty(name)) {\n return cache[name]\n }\n\n var hName = name.replace(uppercasePattern, toHyphenLower)\n return (cache[name] = msPattern.test(hName) ? '-' + hName : hName)\n}\n\nexport default hyphenateStyleName\n","import cssifyDeclaration from './cssifyDeclaration';\nexport default function cssifyObject(style) {\n var css = '';\n\n for (var property in style) {\n var value = style[property];\n\n if (typeof value !== 'string' && typeof value !== 'number') {\n continue;\n } // prevents the semicolon after\n // the last rule declaration\n\n\n if (css) {\n css += ';';\n }\n\n css += cssifyDeclaration(property, value);\n }\n\n return css;\n}","var RE = /^(Webkit|Moz|O|ms)/;\nexport default function isPrefixedProperty(property) {\n return RE.test(property);\n}","var RE = /-webkit-|-moz-|-ms-/;\nexport default function isPrefixedValue(value) {\n return typeof value === 'string' && RE.test(value);\n}","import hyphenateProperty from './hyphenateProperty';\nvar unitlessProperties = {\n borderImageOutset: true,\n borderImageSlice: true,\n borderImageWidth: true,\n fontWeight: true,\n lineHeight: true,\n opacity: true,\n orphans: true,\n tabSize: true,\n widows: true,\n zIndex: true,\n zoom: true,\n // SVG-related properties\n fillOpacity: true,\n floodOpacity: true,\n stopOpacity: true,\n strokeDasharray: true,\n strokeDashoffset: true,\n strokeMiterlimit: true,\n strokeOpacity: true,\n strokeWidth: true\n};\nvar prefixedUnitlessProperties = ['animationIterationCount', 'boxFlex', 'boxFlexGroup', 'boxOrdinalGroup', 'columnCount', 'flex', 'flexGrow', 'flexPositive', 'flexShrink', 'flexNegative', 'flexOrder', 'gridColumn', 'gridColumnEnd', 'gridColumnStart', 'gridRow', 'gridRowEnd', 'gridRowStart', 'lineClamp', 'order'];\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O'];\n\nfunction getPrefixedProperty(prefix, property) {\n return prefix + property.charAt(0).toUpperCase() + property.slice(1);\n} // add all prefixed properties to the unitless properties\n\n\nfor (var i = 0, len = prefixedUnitlessProperties.length; i < len; ++i) {\n var property = prefixedUnitlessProperties[i];\n unitlessProperties[property] = true;\n\n for (var j = 0, jLen = prefixes.length; j < jLen; ++j) {\n unitlessProperties[getPrefixedProperty(prefixes[j], property)] = true;\n }\n} // add all hypenated properties as well\n\n\nfor (var _property in unitlessProperties) {\n unitlessProperties[hyphenateProperty(_property)] = true;\n}\n\nexport default function isUnitlessProperty(property) {\n return unitlessProperties.hasOwnProperty(property);\n}","import camelCaseProperty from './camelCaseProperty';\nimport unprefixProperty from './unprefixProperty';\nexport default function normalizeProperty(property) {\n return unprefixProperty(camelCaseProperty(property));\n}","var RE = /^(ms|Webkit|Moz|O)/;\nexport default function unprefixProperty(property) {\n var propertyWithoutPrefix = property.replace(RE, '');\n return propertyWithoutPrefix.charAt(0).toLowerCase() + propertyWithoutPrefix.slice(1);\n}","import hyphenateProperty from './hyphenateProperty';\nexport default function resolveArrayValue(property, value) {\n return value.join(';' + hyphenateProperty(property) + ':');\n}","var RE = /(-ms-|-webkit-|-moz-|-o-)/g;\nexport default function unprefixValue(value) {\n if (typeof value === 'string') {\n return value.replace(RE, '');\n }\n\n return value;\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = cursor;\nvar prefixes = ['-webkit-', '-moz-', ''];\n\nvar values = {\n 'zoom-in': true,\n 'zoom-out': true,\n grab: true,\n grabbing: true\n};\n\nfunction cursor(property, value) {\n if (property === 'cursor' && values.hasOwnProperty(value)) {\n return prefixes.map(function (prefix) {\n return prefix + value;\n });\n }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = filter;\n\nvar _cssInJsUtils = require('css-in-js-utils');\n\nvar FILTER_REGEX = /filter\\(/g;\n// http://caniuse.com/#feat=css-filter-function\nvar prefixes = ['-webkit-', ''];\n\nfunction filter(property, value) {\n if (typeof value === 'string' && !(0, _cssInJsUtils.isPrefixedValue)(value) && value.indexOf('filter(') !== -1) {\n return prefixes.map(function (prefix) {\n return value.replace(FILTER_REGEX, prefix + 'filter(');\n });\n }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = imageSet;\n\nvar _isPrefixedValue = require('css-in-js-utils/lib/isPrefixedValue');\n\nvar _isPrefixedValue2 = _interopRequireDefault(_isPrefixedValue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// http://caniuse.com/#feat=css-image-set\nvar prefixes = ['-webkit-', ''];\n\nfunction imageSet(property, value) {\n if (typeof value === 'string' && !(0, _isPrefixedValue2.default)(value) && value.indexOf('image-set(') > -1) {\n return prefixes.map(function (prefix) {\n return value.replace(/image-set\\(/g, prefix + 'image-set(');\n });\n }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = isPrefixedValue;\nvar RE = /-webkit-|-moz-|-ms-/;\n\nfunction isPrefixedValue(value) {\n return typeof value === 'string' && RE.test(value);\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = logical;\nvar alternativeProps = {\n marginBlockStart: ['WebkitMarginBefore'],\n marginBlockEnd: ['WebkitMarginAfter'],\n marginInlineStart: ['WebkitMarginStart', 'MozMarginStart'],\n marginInlineEnd: ['WebkitMarginEnd', 'MozMarginEnd'],\n paddingBlockStart: ['WebkitPaddingBefore'],\n paddingBlockEnd: ['WebkitPaddingAfter'],\n paddingInlineStart: ['WebkitPaddingStart', 'MozPaddingStart'],\n paddingInlineEnd: ['WebkitPaddingEnd', 'MozPaddingEnd'],\n borderBlockStart: ['WebkitBorderBefore'],\n borderBlockStartColor: ['WebkitBorderBeforeColor'],\n borderBlockStartStyle: ['WebkitBorderBeforeStyle'],\n borderBlockStartWidth: ['WebkitBorderBeforeWidth'],\n borderBlockEnd: ['WebkitBorderAfter'],\n borderBlockEndColor: ['WebkitBorderAfterColor'],\n borderBlockEndStyle: ['WebkitBorderAfterStyle'],\n borderBlockEndWidth: ['WebkitBorderAfterWidth'],\n borderInlineStart: ['WebkitBorderStart', 'MozBorderStart'],\n borderInlineStartColor: ['WebkitBorderStartColor', 'MozBorderStartColor'],\n borderInlineStartStyle: ['WebkitBorderStartStyle', 'MozBorderStartStyle'],\n borderInlineStartWidth: ['WebkitBorderStartWidth', 'MozBorderStartWidth'],\n borderInlineEnd: ['WebkitBorderEnd', 'MozBorderEnd'],\n borderInlineEndColor: ['WebkitBorderEndColor', 'MozBorderEndColor'],\n borderInlineEndStyle: ['WebkitBorderEndStyle', 'MozBorderEndStyle'],\n borderInlineEndWidth: ['WebkitBorderEndWidth', 'MozBorderEndWidth']\n};\n\nfunction logical(property, value, style) {\n if (Object.prototype.hasOwnProperty.call(alternativeProps, property)) {\n var alternativePropList = alternativeProps[property];\n for (var i = 0, len = alternativePropList.length; i < len; ++i) {\n style[alternativePropList[i]] = value;\n }\n }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = position;\nfunction position(property, value) {\n if (property === 'position' && value === 'sticky') {\n return ['-webkit-sticky', 'sticky'];\n }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = sizing;\nvar prefixes = ['-webkit-', '-moz-', ''];\n\nvar properties = {\n maxHeight: true,\n maxWidth: true,\n width: true,\n height: true,\n columnWidth: true,\n minWidth: true,\n minHeight: true\n};\nvar values = {\n 'min-content': true,\n 'max-content': true,\n 'fill-available': true,\n 'fit-content': true,\n 'contain-floats': true\n};\n\nfunction sizing(property, value) {\n if (properties.hasOwnProperty(property) && values.hasOwnProperty(value)) {\n return prefixes.map(function (prefix) {\n return prefix + value;\n });\n }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = transition;\n\nvar _hyphenateProperty = require('css-in-js-utils/lib/hyphenateProperty');\n\nvar _hyphenateProperty2 = _interopRequireDefault(_hyphenateProperty);\n\nvar _isPrefixedValue = require('css-in-js-utils/lib/isPrefixedValue');\n\nvar _isPrefixedValue2 = _interopRequireDefault(_isPrefixedValue);\n\nvar _capitalizeString = require('../utils/capitalizeString');\n\nvar _capitalizeString2 = _interopRequireDefault(_capitalizeString);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar properties = {\n transition: true,\n transitionProperty: true,\n WebkitTransition: true,\n WebkitTransitionProperty: true,\n MozTransition: true,\n MozTransitionProperty: true\n};\n\nvar prefixMapping = {\n Webkit: '-webkit-',\n Moz: '-moz-',\n ms: '-ms-'\n};\n\nfunction prefixValue(value, propertyPrefixMap) {\n if ((0, _isPrefixedValue2.default)(value)) {\n return value;\n }\n\n // only split multi values, not cubic beziers\n var multipleValues = value.split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g);\n\n for (var i = 0, len = multipleValues.length; i < len; ++i) {\n var singleValue = multipleValues[i];\n var values = [singleValue];\n for (var property in propertyPrefixMap) {\n var dashCaseProperty = (0, _hyphenateProperty2.default)(property);\n\n if (singleValue.indexOf(dashCaseProperty) > -1 && dashCaseProperty !== 'order') {\n var prefixes = propertyPrefixMap[property];\n for (var j = 0, pLen = prefixes.length; j < pLen; ++j) {\n // join all prefixes and create a new value\n values.unshift(singleValue.replace(dashCaseProperty, prefixMapping[prefixes[j]] + dashCaseProperty));\n }\n }\n }\n\n multipleValues[i] = values.join(',');\n }\n\n return multipleValues.join(',');\n}\n\nfunction transition(property, value, style, propertyPrefixMap) {\n // also check for already prefixed transitions\n if (typeof value === 'string' && properties.hasOwnProperty(property)) {\n var outputValue = prefixValue(value, propertyPrefixMap);\n // if the property is already prefixed\n var webkitOutput = outputValue.split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g).filter(function (val) {\n return !/-moz-|-ms-/.test(val);\n }).join(',');\n\n if (property.indexOf('Webkit') > -1) {\n return webkitOutput;\n }\n\n var mozOutput = outputValue.split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g).filter(function (val) {\n return !/-webkit-|-ms-/.test(val);\n }).join(',');\n\n if (property.indexOf('Moz') > -1) {\n return mozOutput;\n }\n\n style['Webkit' + (0, _capitalizeString2.default)(property)] = webkitOutput;\n style['Moz' + (0, _capitalizeString2.default)(property)] = mozOutput;\n return outputValue;\n }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = hyphenateProperty;\n\nvar _hyphenateStyleName = require(\"hyphenate-style-name\");\n\nvar _hyphenateStyleName2 = _interopRequireDefault(_hyphenateStyleName);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction hyphenateProperty(property) {\n return (0, _hyphenateStyleName2[\"default\"])(property);\n}","/**\n * Copyright (c) Nicolas Gallagher\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nmodule.exports = require('./dist/transform-localize-style');\n","/**\n * Copyright (c) Nicolas Gallagher\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.localizeStyle = localizeStyle;\nvar cache = new WeakMap();\nvar markerProp = '$$css$localize';\n/**\n * The compiler polyfills logical properties and values, generating a class\n * name for both writing directions. The style objects are annotated by\n * the compiler as needing this runtime transform. The results are memoized.\n *\n * { '$$css$localize': true, float: [ 'float-left', 'float-right' ] }\n * => { float: 'float-left' }\n */\n\nfunction compileStyle(style, isRTL) {\n // Create a new compiled style for styleq\n var compiledStyle = {};\n\n for (var prop in style) {\n if (prop !== markerProp) {\n var value = style[prop];\n\n if (Array.isArray(value)) {\n compiledStyle[prop] = isRTL ? value[1] : value[0];\n } else {\n compiledStyle[prop] = value;\n }\n }\n }\n\n return compiledStyle;\n}\n\nfunction localizeStyle(style, isRTL) {\n if (style[markerProp] != null) {\n var compiledStyleIndex = isRTL ? 1 : 0; // Check the cache in case we've already seen this object\n\n if (cache.has(style)) {\n var _cachedStyles = cache.get(style);\n\n var _compiledStyle = _cachedStyles[compiledStyleIndex];\n\n if (_compiledStyle == null) {\n // Update the missing cache entry\n _compiledStyle = compileStyle(style, isRTL);\n _cachedStyles[compiledStyleIndex] = _compiledStyle;\n cache.set(style, _cachedStyles);\n }\n\n return _compiledStyle;\n } // Create a new compiled style for styleq\n\n\n var compiledStyle = compileStyle(style, isRTL);\n var cachedStyles = new Array(2);\n cachedStyles[compiledStyleIndex] = compiledStyle;\n cache.set(style, cachedStyles);\n return compiledStyle;\n }\n\n return style;\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport normalizeColor from './compiler/normalizeColor';\nimport normalizeValueWithProperty from './compiler/normalizeValueWithProperty';\nimport { warnOnce } from '../../modules/warnOnce';\nvar emptyObject = {};\n\n/**\n * Shadows\n */\n\nvar defaultOffset = {\n height: 0,\n width: 0\n};\nexport var createBoxShadowValue = style => {\n var shadowColor = style.shadowColor,\n shadowOffset = style.shadowOffset,\n shadowOpacity = style.shadowOpacity,\n shadowRadius = style.shadowRadius;\n var _ref = shadowOffset || defaultOffset,\n height = _ref.height,\n width = _ref.width;\n var offsetX = normalizeValueWithProperty(width);\n var offsetY = normalizeValueWithProperty(height);\n var blurRadius = normalizeValueWithProperty(shadowRadius || 0);\n var color = normalizeColor(shadowColor || 'black', shadowOpacity);\n if (color != null && offsetX != null && offsetY != null && blurRadius != null) {\n return offsetX + \" \" + offsetY + \" \" + blurRadius + \" \" + color;\n }\n};\nexport var createTextShadowValue = style => {\n var textShadowColor = style.textShadowColor,\n textShadowOffset = style.textShadowOffset,\n textShadowRadius = style.textShadowRadius;\n var _ref2 = textShadowOffset || defaultOffset,\n height = _ref2.height,\n width = _ref2.width;\n var radius = textShadowRadius || 0;\n var offsetX = normalizeValueWithProperty(width);\n var offsetY = normalizeValueWithProperty(height);\n var blurRadius = normalizeValueWithProperty(radius);\n var color = normalizeValueWithProperty(textShadowColor, 'textShadowColor');\n if (color && (height !== 0 || width !== 0 || radius !== 0) && offsetX != null && offsetY != null && blurRadius != null) {\n return offsetX + \" \" + offsetY + \" \" + blurRadius + \" \" + color;\n }\n};\n\n// { scale: 2 } => 'scale(2)'\n// { translateX: 20 } => 'translateX(20px)'\n// { matrix: [1,2,3,4,5,6] } => 'matrix(1,2,3,4,5,6)'\nvar mapTransform = transform => {\n var type = Object.keys(transform)[0];\n var value = transform[type];\n if (type === 'matrix' || type === 'matrix3d') {\n return type + \"(\" + value.join(',') + \")\";\n } else {\n var normalizedValue = normalizeValueWithProperty(value, type);\n return type + \"(\" + normalizedValue + \")\";\n }\n};\nexport var createTransformValue = value => {\n return value.map(mapTransform).join(' ');\n};\nvar PROPERTIES_STANDARD = {\n borderBottomEndRadius: 'borderEndEndRadius',\n borderBottomStartRadius: 'borderEndStartRadius',\n borderTopEndRadius: 'borderStartEndRadius',\n borderTopStartRadius: 'borderStartStartRadius',\n borderEndColor: 'borderInlineEndColor',\n borderEndStyle: 'borderInlineEndStyle',\n borderEndWidth: 'borderInlineEndWidth',\n borderStartColor: 'borderInlineStartColor',\n borderStartStyle: 'borderInlineStartStyle',\n borderStartWidth: 'borderInlineStartWidth',\n end: 'insetInlineEnd',\n marginEnd: 'marginInlineEnd',\n marginHorizontal: 'marginInline',\n marginStart: 'marginInlineStart',\n marginVertical: 'marginBlock',\n paddingEnd: 'paddingInlineEnd',\n paddingHorizontal: 'paddingInline',\n paddingStart: 'paddingInlineStart',\n paddingVertical: 'paddingBlock',\n start: 'insetInlineStart'\n};\nvar ignoredProps = {\n elevation: true,\n overlayColor: true,\n resizeMode: true,\n tintColor: true\n};\n\n/**\n * Preprocess styles\n */\nexport var preprocess = function preprocess(originalStyle, options) {\n if (options === void 0) {\n options = {};\n }\n var style = originalStyle || emptyObject;\n var nextStyle = {};\n\n // Convert shadow styles\n if (options.shadow === true, style.shadowColor != null || style.shadowOffset != null || style.shadowOpacity != null || style.shadowRadius != null) {\n warnOnce('shadowStyles', \"\\\"shadow*\\\" style props are deprecated. Use \\\"boxShadow\\\".\");\n var boxShadowValue = createBoxShadowValue(style);\n if (boxShadowValue != null && nextStyle.boxShadow == null) {\n var boxShadow = style.boxShadow;\n var value = boxShadow ? boxShadow + \", \" + boxShadowValue : boxShadowValue;\n nextStyle.boxShadow = value;\n }\n }\n\n // Convert text shadow styles\n if (options.textShadow === true, style.textShadowColor != null || style.textShadowOffset != null || style.textShadowRadius != null) {\n warnOnce('textShadowStyles', \"\\\"textShadow*\\\" style props are deprecated. Use \\\"textShadow\\\".\");\n var textShadowValue = createTextShadowValue(style);\n if (textShadowValue != null && nextStyle.textShadow == null) {\n var textShadow = style.textShadow;\n var _value = textShadow ? textShadow + \", \" + textShadowValue : textShadowValue;\n nextStyle.textShadow = _value;\n }\n }\n for (var originalProp in style) {\n if (\n // Ignore some React Native styles\n ignoredProps[originalProp] != null || originalProp === 'shadowColor' || originalProp === 'shadowOffset' || originalProp === 'shadowOpacity' || originalProp === 'shadowRadius' || originalProp === 'textShadowColor' || originalProp === 'textShadowOffset' || originalProp === 'textShadowRadius') {\n continue;\n }\n var originalValue = style[originalProp];\n var prop = PROPERTIES_STANDARD[originalProp] || originalProp;\n var _value2 = originalValue;\n if (!Object.prototype.hasOwnProperty.call(style, originalProp) || prop !== originalProp && style[prop] != null) {\n continue;\n }\n if (prop === 'aspectRatio' && typeof _value2 === 'number') {\n nextStyle[prop] = _value2.toString();\n } else if (prop === 'fontVariant') {\n if (Array.isArray(_value2) && _value2.length > 0) {\n warnOnce('fontVariant', '\"fontVariant\" style array value is deprecated. Use space-separated values.');\n _value2 = _value2.join(' ');\n }\n nextStyle[prop] = _value2;\n } else if (prop === 'textAlignVertical') {\n warnOnce('textAlignVertical', '\"textAlignVertical\" style is deprecated. Use \"verticalAlign\".');\n if (style.verticalAlign == null) {\n nextStyle.verticalAlign = _value2 === 'center' ? 'middle' : _value2;\n }\n } else if (prop === 'transform') {\n if (Array.isArray(_value2)) {\n _value2 = createTransformValue(_value2);\n }\n nextStyle.transform = _value2;\n } else {\n nextStyle[prop] = _value2;\n }\n }\n\n // $FlowIgnore\n return nextStyle;\n};\nexport default preprocess;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar warnedKeys = {};\n\n/**\n * A simple function that prints a warning message once per session.\n *\n * @param {string} key - The key used to ensure the message is printed once.\n * This should be unique to the callsite.\n * @param {string} message - The message to print\n */\nexport function warnOnce(key, message) {\n if (process.env.NODE_ENV !== 'production') {\n if (warnedKeys[key]) {\n return;\n }\n console.warn(message);\n warnedKeys[key] = true;\n }\n}","/**\n * Copyright (c) Nicolas Gallagher\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.styleq = void 0;\nvar cache = new WeakMap();\nvar compiledKey = '$$css';\n\nfunction createStyleq(options) {\n var disableCache;\n var disableMix;\n var transform;\n\n if (options != null) {\n disableCache = options.disableCache === true;\n disableMix = options.disableMix === true;\n transform = options.transform;\n }\n\n return function styleq() {\n // Keep track of property commits to the className\n var definedProperties = []; // The className and inline style to build up\n\n var className = '';\n var inlineStyle = null; // The current position in the cache graph\n\n var nextCache = disableCache ? null : cache; // This way of creating an array from arguments is fastest\n\n var styles = new Array(arguments.length);\n\n for (var i = 0; i < arguments.length; i++) {\n styles[i] = arguments[i];\n } // Iterate over styles from last to first\n\n\n while (styles.length > 0) {\n var possibleStyle = styles.pop(); // Skip empty items\n\n if (possibleStyle == null || possibleStyle === false) {\n continue;\n } // Push nested styles back onto the stack to be processed\n\n\n if (Array.isArray(possibleStyle)) {\n for (var _i = 0; _i < possibleStyle.length; _i++) {\n styles.push(possibleStyle[_i]);\n }\n\n continue;\n } // Process an individual style object\n\n\n var style = transform != null ? transform(possibleStyle) : possibleStyle;\n\n if (style.$$css) {\n // Build up the class names defined by this object\n var classNameChunk = ''; // Check the cache to see if we've already done this work\n\n if (nextCache != null && nextCache.has(style)) {\n // Cache: read\n var cacheEntry = nextCache.get(style);\n\n if (cacheEntry != null) {\n classNameChunk = cacheEntry[0]; // $FlowIgnore\n\n definedProperties.push.apply(definedProperties, cacheEntry[1]);\n nextCache = cacheEntry[2];\n }\n } // Update the chunks with data from this object\n else {\n // The properties defined by this object\n var definedPropertiesChunk = [];\n\n for (var prop in style) {\n var value = style[prop];\n if (prop === compiledKey) continue; // Each property value is used as an HTML class name\n // { 'debug.string': 'debug.string', opacity: 's-jskmnoqp' }\n\n if (typeof value === 'string' || value === null) {\n // Only add to chunks if this property hasn't already been seen\n if (!definedProperties.includes(prop)) {\n definedProperties.push(prop);\n\n if (nextCache != null) {\n definedPropertiesChunk.push(prop);\n }\n\n if (typeof value === 'string') {\n classNameChunk += classNameChunk ? ' ' + value : value;\n }\n }\n } // If we encounter a value that isn't a string or `null`\n else {\n console.error(\"styleq: \".concat(prop, \" typeof \").concat(String(value), \" is not \\\"string\\\" or \\\"null\\\".\"));\n }\n } // Cache: write\n\n\n if (nextCache != null) {\n // Create the next WeakMap for this sequence of styles\n var weakMap = new WeakMap();\n nextCache.set(style, [classNameChunk, definedPropertiesChunk, weakMap]);\n nextCache = weakMap;\n }\n } // Order of classes in chunks matches property-iteration order of style\n // object. Order of chunks matches passed order of styles from first to\n // last (which we iterate over in reverse).\n\n\n if (classNameChunk) {\n className = className ? classNameChunk + ' ' + className : classNameChunk;\n }\n } // ----- DYNAMIC: Process inline style object -----\n else {\n if (disableMix) {\n if (inlineStyle == null) {\n inlineStyle = {};\n }\n\n inlineStyle = Object.assign({}, style, inlineStyle);\n } else {\n var subStyle = null;\n\n for (var _prop in style) {\n var _value = style[_prop];\n\n if (_value !== undefined) {\n if (!definedProperties.includes(_prop)) {\n if (_value != null) {\n if (inlineStyle == null) {\n inlineStyle = {};\n }\n\n if (subStyle == null) {\n subStyle = {};\n }\n\n subStyle[_prop] = _value;\n }\n\n definedProperties.push(_prop); // Cache is unnecessary overhead if results can't be reused.\n\n nextCache = null;\n }\n }\n }\n\n if (subStyle != null) {\n inlineStyle = Object.assign(subStyle, inlineStyle);\n }\n }\n }\n }\n\n var styleProps = [className, inlineStyle];\n return styleProps;\n };\n}\n\nvar styleq = createStyleq();\nexports.styleq = styleq;\nstyleq.factory = createStyleq;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport valueParser from 'postcss-value-parser';\nvar invalidShortforms = {\n background: true,\n borderBottom: true,\n borderLeft: true,\n borderRight: true,\n borderTop: true,\n font: true,\n grid: true,\n outline: true,\n textDecoration: true\n};\nvar invalidMultiValueShortforms = {\n flex: true,\n margin: true,\n padding: true,\n borderColor: true,\n borderRadius: true,\n borderStyle: true,\n borderWidth: true,\n inset: true,\n insetBlock: true,\n insetInline: true,\n marginBlock: true,\n marginInline: true,\n marginHorizontal: true,\n marginVertical: true,\n paddingBlock: true,\n paddingInline: true,\n paddingHorizontal: true,\n paddingVertical: true,\n overflow: true,\n overscrollBehavior: true,\n backgroundPosition: true\n};\nfunction error(message) {\n console.error(message);\n}\nexport function validate(obj) {\n for (var k in obj) {\n var prop = k.trim();\n var value = obj[prop];\n var isInvalid = false;\n if (value === null) {\n continue;\n }\n if (typeof value === 'string' && value.indexOf('!important') > -1) {\n error(\"Invalid style declaration \\\"\" + prop + \":\" + value + \"\\\". Values cannot include \\\"!important\\\"\");\n isInvalid = true;\n } else {\n var suggestion = '';\n if (prop === 'animation' || prop === 'animationName') {\n suggestion = 'Did you mean \"animationKeyframes\"?';\n isInvalid = true;\n } else if (prop === 'direction') {\n suggestion = 'Did you mean \"writingDirection\"?';\n isInvalid = true;\n } else if (invalidShortforms[prop]) {\n suggestion = 'Please use long-form properties.';\n isInvalid = true;\n } else if (invalidMultiValueShortforms[prop]) {\n if (typeof value === 'string' && valueParser(value).nodes.length > 1) {\n suggestion = \"Value is \\\"\" + value + \"\\\" but only single values are supported.\";\n isInvalid = true;\n }\n }\n if (suggestion !== '') {\n error(\"Invalid style property of \\\"\" + prop + \"\\\". \" + suggestion);\n }\n }\n if (isInvalid) {\n delete obj[k];\n }\n }\n}","var parse = require(\"./parse\");\nvar walk = require(\"./walk\");\nvar stringify = require(\"./stringify\");\n\nfunction ValueParser(value) {\n if (this instanceof ValueParser) {\n this.nodes = parse(value);\n return this;\n }\n return new ValueParser(value);\n}\n\nValueParser.prototype.toString = function() {\n return Array.isArray(this.nodes) ? stringify(this.nodes) : \"\";\n};\n\nValueParser.prototype.walk = function(cb, bubble) {\n walk(this.nodes, cb, bubble);\n return this;\n};\n\nValueParser.unit = require(\"./unit\");\n\nValueParser.walk = walk;\n\nValueParser.stringify = stringify;\n\nmodule.exports = ValueParser;\n","var openParentheses = \"(\".charCodeAt(0);\nvar closeParentheses = \")\".charCodeAt(0);\nvar singleQuote = \"'\".charCodeAt(0);\nvar doubleQuote = '\"'.charCodeAt(0);\nvar backslash = \"\\\\\".charCodeAt(0);\nvar slash = \"/\".charCodeAt(0);\nvar comma = \",\".charCodeAt(0);\nvar colon = \":\".charCodeAt(0);\nvar star = \"*\".charCodeAt(0);\nvar uLower = \"u\".charCodeAt(0);\nvar uUpper = \"U\".charCodeAt(0);\nvar plus = \"+\".charCodeAt(0);\nvar isUnicodeRange = /^[a-f0-9?-]+$/i;\n\nmodule.exports = function(input) {\n var tokens = [];\n var value = input;\n\n var next,\n quote,\n prev,\n token,\n escape,\n escapePos,\n whitespacePos,\n parenthesesOpenPos;\n var pos = 0;\n var code = value.charCodeAt(pos);\n var max = value.length;\n var stack = [{ nodes: tokens }];\n var balanced = 0;\n var parent;\n\n var name = \"\";\n var before = \"\";\n var after = \"\";\n\n while (pos < max) {\n // Whitespaces\n if (code <= 32) {\n next = pos;\n do {\n next += 1;\n code = value.charCodeAt(next);\n } while (code <= 32);\n token = value.slice(pos, next);\n\n prev = tokens[tokens.length - 1];\n if (code === closeParentheses && balanced) {\n after = token;\n } else if (prev && prev.type === \"div\") {\n prev.after = token;\n prev.sourceEndIndex += token.length;\n } else if (\n code === comma ||\n code === colon ||\n (code === slash &&\n value.charCodeAt(next + 1) !== star &&\n (!parent ||\n (parent && parent.type === \"function\" && parent.value !== \"calc\")))\n ) {\n before = token;\n } else {\n tokens.push({\n type: \"space\",\n sourceIndex: pos,\n sourceEndIndex: next,\n value: token\n });\n }\n\n pos = next;\n\n // Quotes\n } else if (code === singleQuote || code === doubleQuote) {\n next = pos;\n quote = code === singleQuote ? \"'\" : '\"';\n token = {\n type: \"string\",\n sourceIndex: pos,\n quote: quote\n };\n do {\n escape = false;\n next = value.indexOf(quote, next + 1);\n if (~next) {\n escapePos = next;\n while (value.charCodeAt(escapePos - 1) === backslash) {\n escapePos -= 1;\n escape = !escape;\n }\n } else {\n value += quote;\n next = value.length - 1;\n token.unclosed = true;\n }\n } while (escape);\n token.value = value.slice(pos + 1, next);\n token.sourceEndIndex = token.unclosed ? next : next + 1;\n tokens.push(token);\n pos = next + 1;\n code = value.charCodeAt(pos);\n\n // Comments\n } else if (code === slash && value.charCodeAt(pos + 1) === star) {\n next = value.indexOf(\"*/\", pos);\n\n token = {\n type: \"comment\",\n sourceIndex: pos,\n sourceEndIndex: next + 2\n };\n\n if (next === -1) {\n token.unclosed = true;\n next = value.length;\n token.sourceEndIndex = next;\n }\n\n token.value = value.slice(pos + 2, next);\n tokens.push(token);\n\n pos = next + 2;\n code = value.charCodeAt(pos);\n\n // Operation within calc\n } else if (\n (code === slash || code === star) &&\n parent &&\n parent.type === \"function\" &&\n parent.value === \"calc\"\n ) {\n token = value[pos];\n tokens.push({\n type: \"word\",\n sourceIndex: pos - before.length,\n sourceEndIndex: pos + token.length,\n value: token\n });\n pos += 1;\n code = value.charCodeAt(pos);\n\n // Dividers\n } else if (code === slash || code === comma || code === colon) {\n token = value[pos];\n\n tokens.push({\n type: \"div\",\n sourceIndex: pos - before.length,\n sourceEndIndex: pos + token.length,\n value: token,\n before: before,\n after: \"\"\n });\n before = \"\";\n\n pos += 1;\n code = value.charCodeAt(pos);\n\n // Open parentheses\n } else if (openParentheses === code) {\n // Whitespaces after open parentheses\n next = pos;\n do {\n next += 1;\n code = value.charCodeAt(next);\n } while (code <= 32);\n parenthesesOpenPos = pos;\n token = {\n type: \"function\",\n sourceIndex: pos - name.length,\n value: name,\n before: value.slice(parenthesesOpenPos + 1, next)\n };\n pos = next;\n\n if (name === \"url\" && code !== singleQuote && code !== doubleQuote) {\n next -= 1;\n do {\n escape = false;\n next = value.indexOf(\")\", next + 1);\n if (~next) {\n escapePos = next;\n while (value.charCodeAt(escapePos - 1) === backslash) {\n escapePos -= 1;\n escape = !escape;\n }\n } else {\n value += \")\";\n next = value.length - 1;\n token.unclosed = true;\n }\n } while (escape);\n // Whitespaces before closed\n whitespacePos = next;\n do {\n whitespacePos -= 1;\n code = value.charCodeAt(whitespacePos);\n } while (code <= 32);\n if (parenthesesOpenPos < whitespacePos) {\n if (pos !== whitespacePos + 1) {\n token.nodes = [\n {\n type: \"word\",\n sourceIndex: pos,\n sourceEndIndex: whitespacePos + 1,\n value: value.slice(pos, whitespacePos + 1)\n }\n ];\n } else {\n token.nodes = [];\n }\n if (token.unclosed && whitespacePos + 1 !== next) {\n token.after = \"\";\n token.nodes.push({\n type: \"space\",\n sourceIndex: whitespacePos + 1,\n sourceEndIndex: next,\n value: value.slice(whitespacePos + 1, next)\n });\n } else {\n token.after = value.slice(whitespacePos + 1, next);\n token.sourceEndIndex = next;\n }\n } else {\n token.after = \"\";\n token.nodes = [];\n }\n pos = next + 1;\n token.sourceEndIndex = token.unclosed ? next : pos;\n code = value.charCodeAt(pos);\n tokens.push(token);\n } else {\n balanced += 1;\n token.after = \"\";\n token.sourceEndIndex = pos + 1;\n tokens.push(token);\n stack.push(token);\n tokens = token.nodes = [];\n parent = token;\n }\n name = \"\";\n\n // Close parentheses\n } else if (closeParentheses === code && balanced) {\n pos += 1;\n code = value.charCodeAt(pos);\n\n parent.after = after;\n parent.sourceEndIndex += after.length;\n after = \"\";\n balanced -= 1;\n stack[stack.length - 1].sourceEndIndex = pos;\n stack.pop();\n parent = stack[balanced];\n tokens = parent.nodes;\n\n // Words\n } else {\n next = pos;\n do {\n if (code === backslash) {\n next += 1;\n }\n next += 1;\n code = value.charCodeAt(next);\n } while (\n next < max &&\n !(\n code <= 32 ||\n code === singleQuote ||\n code === doubleQuote ||\n code === comma ||\n code === colon ||\n code === slash ||\n code === openParentheses ||\n (code === star &&\n parent &&\n parent.type === \"function\" &&\n parent.value === \"calc\") ||\n (code === slash &&\n parent.type === \"function\" &&\n parent.value === \"calc\") ||\n (code === closeParentheses && balanced)\n )\n );\n token = value.slice(pos, next);\n\n if (openParentheses === code) {\n name = token;\n } else if (\n (uLower === token.charCodeAt(0) || uUpper === token.charCodeAt(0)) &&\n plus === token.charCodeAt(1) &&\n isUnicodeRange.test(token.slice(2))\n ) {\n tokens.push({\n type: \"unicode-range\",\n sourceIndex: pos,\n sourceEndIndex: next,\n value: token\n });\n } else {\n tokens.push({\n type: \"word\",\n sourceIndex: pos,\n sourceEndIndex: next,\n value: token\n });\n }\n\n pos = next;\n }\n }\n\n for (pos = stack.length - 1; pos; pos -= 1) {\n stack[pos].unclosed = true;\n stack[pos].sourceEndIndex = value.length;\n }\n\n return stack[0].nodes;\n};\n","module.exports = function walk(nodes, cb, bubble) {\n var i, max, node, result;\n\n for (i = 0, max = nodes.length; i < max; i += 1) {\n node = nodes[i];\n if (!bubble) {\n result = cb(node, i, nodes);\n }\n\n if (\n result !== false &&\n node.type === \"function\" &&\n Array.isArray(node.nodes)\n ) {\n walk(node.nodes, cb, bubble);\n }\n\n if (bubble) {\n cb(node, i, nodes);\n }\n }\n};\n","function stringifyNode(node, custom) {\n var type = node.type;\n var value = node.value;\n var buf;\n var customResult;\n\n if (custom && (customResult = custom(node)) !== undefined) {\n return customResult;\n } else if (type === \"word\" || type === \"space\") {\n return value;\n } else if (type === \"string\") {\n buf = node.quote || \"\";\n return buf + value + (node.unclosed ? \"\" : buf);\n } else if (type === \"comment\") {\n return \"/*\" + value + (node.unclosed ? \"\" : \"*/\");\n } else if (type === \"div\") {\n return (node.before || \"\") + value + (node.after || \"\");\n } else if (Array.isArray(node.nodes)) {\n buf = stringify(node.nodes, custom);\n if (type !== \"function\") {\n return buf;\n }\n return (\n value +\n \"(\" +\n (node.before || \"\") +\n buf +\n (node.after || \"\") +\n (node.unclosed ? \"\" : \")\")\n );\n }\n return value;\n}\n\nfunction stringify(nodes, custom) {\n var result, i;\n\n if (Array.isArray(nodes)) {\n result = \"\";\n for (i = nodes.length - 1; ~i; i -= 1) {\n result = stringifyNode(nodes[i], custom) + result;\n }\n return result;\n }\n return stringifyNode(nodes, custom);\n}\n\nmodule.exports = stringify;\n","var minus = \"-\".charCodeAt(0);\nvar plus = \"+\".charCodeAt(0);\nvar dot = \".\".charCodeAt(0);\nvar exp = \"e\".charCodeAt(0);\nvar EXP = \"E\".charCodeAt(0);\n\n// Check if three code points would start a number\n// https://www.w3.org/TR/css-syntax-3/#starts-with-a-number\nfunction likeNumber(value) {\n var code = value.charCodeAt(0);\n var nextCode;\n\n if (code === plus || code === minus) {\n nextCode = value.charCodeAt(1);\n\n if (nextCode >= 48 && nextCode <= 57) {\n return true;\n }\n\n var nextNextCode = value.charCodeAt(2);\n\n if (nextCode === dot && nextNextCode >= 48 && nextNextCode <= 57) {\n return true;\n }\n\n return false;\n }\n\n if (code === dot) {\n nextCode = value.charCodeAt(1);\n\n if (nextCode >= 48 && nextCode <= 57) {\n return true;\n }\n\n return false;\n }\n\n if (code >= 48 && code <= 57) {\n return true;\n }\n\n return false;\n}\n\n// Consume a number\n// https://www.w3.org/TR/css-syntax-3/#consume-number\nmodule.exports = function(value) {\n var pos = 0;\n var length = value.length;\n var code;\n var nextCode;\n var nextNextCode;\n\n if (length === 0 || !likeNumber(value)) {\n return false;\n }\n\n code = value.charCodeAt(pos);\n\n if (code === plus || code === minus) {\n pos++;\n }\n\n while (pos < length) {\n code = value.charCodeAt(pos);\n\n if (code < 48 || code > 57) {\n break;\n }\n\n pos += 1;\n }\n\n code = value.charCodeAt(pos);\n nextCode = value.charCodeAt(pos + 1);\n\n if (code === dot && nextCode >= 48 && nextCode <= 57) {\n pos += 2;\n\n while (pos < length) {\n code = value.charCodeAt(pos);\n\n if (code < 48 || code > 57) {\n break;\n }\n\n pos += 1;\n }\n }\n\n code = value.charCodeAt(pos);\n nextCode = value.charCodeAt(pos + 1);\n nextNextCode = value.charCodeAt(pos + 2);\n\n if (\n (code === exp || code === EXP) &&\n ((nextCode >= 48 && nextCode <= 57) ||\n ((nextCode === plus || nextCode === minus) &&\n nextNextCode >= 48 &&\n nextNextCode <= 57))\n ) {\n pos += nextCode === plus || nextCode === minus ? 3 : 2;\n\n while (pos < length) {\n code = value.charCodeAt(pos);\n\n if (code < 48 || code > 57) {\n break;\n }\n\n pos += 1;\n }\n }\n\n return {\n number: value.slice(0, pos),\n unit: value.slice(pos)\n };\n};\n","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar Platform = {\n OS: 'web',\n select: obj => 'web' in obj ? obj.web : obj.default,\n get isTesting() {\n if (process.env.NODE_ENV === 'test') {\n return true;\n }\n return false;\n }\n};\nexport default Platform;","console.log(\"FindHumane launched\");\n\nimport * as React from 'react';\nimport 'react-native-get-random-values';\nimport { Platform, StyleSheet, View } from 'react-native';\nimport { AppWrapper } from \"./js/screens/AppWrapper\";\nimport * as AppState from \"./js/context/AppState\";\nimport { Provider } from 'react-redux';\nimport * as AppUtilities from \"./js/context/AppUtilities\";\nimport * as AppConstants from \"./js/context/AppConstants\";\nimport * as SplashScreen from 'expo-splash-screen';\nimport { CustomActivityIndicator } from \"./js/components/CustomActivityIndicator\";\nimport * as AppCache from \"./js/context/AppCache\";\n\nSplashScreen.preventAutoHideAsync();\n\nconst styles = StyleSheet.create({\n loadingContainer: {\n flex: 1,\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n});\n\nfunction isBooleanTrue(urlParams, name) {\n const val = urlParams.get(name);\n if (val && val.length > 0 && val.toLowerCase() != 'n') {\n return true;\n } else {\n return false;\n }\n}\n\nexport default function App() {\n const [appState, setAppState] = React.useState(null);\n\n React.useEffect(() => {\n AppUtilities.info(\"App started. version: \" + AppConstants.VERSION + \", platform: \" + Platform.OS);\n\n const bootstrapAsync = async () => {\n\n let temporaryAppState = Object.assign({}, AppConstants.DEFAULT_STATE);\n\n try {\n try {\n AppUtilities.info(\"App.bootstrapAsync Core info: width: \" + AppUtilities.getWidth() + \", height: \" + AppUtilities.getHeight());\n } catch (e) {\n AppUtilities.handleException(e, \"App.bootstrapAsync Core info\");\n }\n try {\n const localData = await AppUtilities.loadLocalData();\n if (localData) {\n AppUtilities.info(\"App.bootstrapAsync Saved state:\");\n AppUtilities.dir(localData);\n }\n } catch (localDataException) {\n if (localDataException.message && localDataException.message.includes(\"Failed to read the 'localStorage' property from 'Window': Access is denied for this document\")) {\n // Some browser disallow localStorage. Don't bother reporting on this.\n AppUtilities.info(\"App.bootstrapAsync Could not read localStorage: \" + AppUtilities.getErrors(localDataException));\n } else {\n AppUtilities.handleException(localDataException, \"App.bootstrapAsync loadLocalData\");\n }\n }\n\n if (AppUtilities.isWeb()) {\n // Load up any query parameters\n if (window && window.location && window.location.search) {\n try {\n const urlParams = new URLSearchParams(window.location.search);\n\n if (isBooleanTrue(urlParams, \"indoorsplus\")) {\n AppUtilities.info(\"App.bootstrapAsync indoorsplus set\");\n temporaryAppState.dataFilter = AppConstants.createDataFilter(AppConstants.DATA_FILTERS_BUILTIN_OPTIONS[AppConstants.DATA_FILTERS_BUILTIN_NAMES.INDOORS]);\n }\n\n if (isBooleanTrue(urlParams, \"outdoorsplus\")) {\n AppUtilities.info(\"App.bootstrapAsync outdoorsplus set\");\n temporaryAppState.dataFilter = AppConstants.createDataFilter(AppConstants.DATA_FILTERS_BUILTIN_OPTIONS[AppConstants.DATA_FILTERS_BUILTIN_NAMES.OUTDOORS]);\n }\n\n if (isBooleanTrue(urlParams, \"pasture\")) {\n AppUtilities.info(\"App.bootstrapAsync pasture set\");\n temporaryAppState.dataFilter = AppConstants.createDataFilter(AppConstants.DATA_FILTERS_BUILTIN_OPTIONS[AppConstants.DATA_FILTERS_BUILTIN_NAMES.PASTURE]);\n }\n\n const q = urlParams.get('q');\n if (q && q.length > 0 && q != \"All Categories\") {\n AppUtilities.info(\"App.bootstrapAsync Search query: \" + q);\n temporaryAppState.dataFilter[AppConstants.SYNTHESIZED_TYPES.GENERAL_SEARCH[AppConstants.TYPE_KEYS.URL_KEY]] = q;\n }\n\n const lat = urlParams.get('lat');\n const lng = urlParams.get('lng');\n if (lat && lat.length > 0 && lng && lng.length > 0) {\n AppUtilities.info(\"App.bootstrapAsync Query center: \" + lat + \",\" + lng);\n temporaryAppState.initialCenter = {\n lat: parseFloat(lat),\n lng: parseFloat(lng),\n };\n temporaryAppState.shouldAskToMoveToCurrentLocation = false;\n }\n\n const zoom = urlParams.get('zoom');\n if (zoom && zoom.length > 0) {\n AppUtilities.info(\"App.bootstrapAsync Query zoom: \" + zoom);\n temporaryAppState.initialZoom = parseInt(zoom);\n }\n\n if (isBooleanTrue(urlParams, \"noz\")) {\n AppUtilities.info(\"App.bootstrapAsync nozoom\");\n temporaryAppState.shouldAskToMoveToCurrentLocation = false;\n }\n\n /*\n const locationSearch = urlParams.get('l');\n if (locationSearch && locationSearch.length > 0) {\n AppUtilities.info(\"App.bootstrapAsync Query location search: \" + locationSearch);\n temporaryAppState.initialLocationSearch = locationSearch;\n }\n */\n\n const deliverySearch = urlParams.get('d');\n if (deliverySearch && deliverySearch.length > 0) {\n AppUtilities.info(\"App.bootstrapAsync Delivery search: \" + deliverySearch);\n temporaryAppState.deliveryLocationFilter = deliverySearch;\n }\n\n const producerSearch = urlParams.get('producer');\n if (producerSearch && producerSearch.length > 0) {\n AppUtilities.info(\"App.bootstrapAsync Producer search: \" + producerSearch);\n temporaryAppState.dataFilter[AppConstants.SYNTHESIZED_TYPES.PRODUCER[AppConstants.TYPE_KEYS.URL_KEY]] = producerSearch;\n }\n\n const productSearch = urlParams.get('product');\n if (productSearch && productSearch.length > 0) {\n AppUtilities.info(\"App.bootstrapAsync Product search: \" + productSearch);\n temporaryAppState.dataFilter[AppConstants.SYNTHESIZED_TYPES.PRODUCT[AppConstants.TYPE_KEYS.URL_KEY]] = productSearch;\n }\n\n /*\n const locationNameSearch = urlParams.get('location');\n if (locationNameSearch && locationNameSearch.length > 0) {\n AppUtilities.info(\"App.bootstrapAsync Location name search: \" + locationNameSearch);\n temporaryAppState.search = locationNameSearch;\n temporaryAppState.searchLocation = locationNameSearch;\n temporaryAppState.filter = Object.assign({}, temporaryAppState.filter, { searchlocation: locationNameSearch });\n temporaryAppState.filterForLocation = Object.assign({}, temporaryAppState.filterForLocation, { searchlocation: locationNameSearch });\n }\n */\n\n if (isBooleanTrue(urlParams, \"debug\")) {\n AppUtilities.info(\"App.bootstrapAsync Debug enabled\");\n AppState.setGlobalState(AppConstants.SIMPLE_GLOBAL_STATE.DEFAULT_SHOW_DEBUG, true);\n }\n\n if (isBooleanTrue(urlParams, \"extradebug\")) {\n AppUtilities.info(\"App.bootstrapAsync Extra debug enabled\");\n AppState.setGlobalState(AppConstants.SIMPLE_GLOBAL_STATE.DEFAULT_SHOW_DEBUG, true);\n temporaryAppState.extraDebug = true;\n AppUtilities.setExtraDebug(true);\n }\n\n if (isBooleanTrue(urlParams, \"light\")) {\n AppUtilities.info(\"App.bootstrapAsync Light mode enabled\");\n temporaryAppState.lightMode = true;\n }\n\n if (isBooleanTrue(urlParams, \"notabs\")) {\n AppUtilities.info(\"App.bootstrapAsync No tabs\");\n temporaryAppState.showTabs = false;\n }\n\n if (isBooleanTrue(urlParams, \"nozbtns\")) {\n AppUtilities.info(\"App.bootstrapAsync No zoom buttons\");\n temporaryAppState.showZoomControls = false;\n }\n\n if (isBooleanTrue(urlParams, \"nosearch\")) {\n AppUtilities.info(\"App.bootstrapAsync No search\");\n temporaryAppState.shouldShowSearch = false;\n }\n\n if (isBooleanTrue(urlParams, \"noheader\")) {\n AppUtilities.info(\"App.bootstrapAsync No header\");\n temporaryAppState.showHeader = false;\n }\n\n if (isBooleanTrue(urlParams, \"nofilterpicker\")) {\n AppUtilities.info(\"App.bootstrapAsync No filter picker\");\n temporaryAppState.showFilterSlider = false;\n }\n } catch (paramsError) {\n AppUtilities.handleException(paramsError, \"App.bootstrapAsync error parsing params\");\n }\n }\n } else {\n // Nothing native-specific for now\n }\n\n try {\n await AppCache.initialize();\n } catch (cacheException) {\n AppUtilities.handleException(cacheException, \"App.bootstrapAsync cache initialize\");\n }\n } catch (e) {\n AppUtilities.handleException(e, \"App.bootstrapAsync load stored state\");\n }\n\n AppUtilities.info(\"App.bootstrapAsync Finished bootstrap1\");\n\n if (AppUtilities.DEBUGLEVEL.relativelyImportant) {\n AppUtilities.debug(\"App.bootstrapAsync app state:\");\n AppUtilities.dir(temporaryAppState);\n }\n\n setAppState(temporaryAppState);\n };\n\n bootstrapAsync();\n }, []);\n\n if (!appState) {\n // Splash screen should still be showing in the phone app and hidden in AppWrapper;\n // however, for web, we should show something\n if (AppUtilities.isWeb()) {\n return (\n \n \n \n );\n } else {\n return null;\n }\n } else {\n return (\n \n \n \n );\n }\n}\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\nmodule.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithHoles = require(\"./arrayWithHoles.js\");\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableRest = require(\"./nonIterableRest.js\");\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\nmodule.exports = _slicedToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\nmodule.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _s, _e;\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n return _arr;\n}\nmodule.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableRest, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// The web platform already has support for getRandomValues\n","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"hrefAttrs\", \"onLayout\", \"onMoveShouldSetResponder\", \"onMoveShouldSetResponderCapture\", \"onResponderEnd\", \"onResponderGrant\", \"onResponderMove\", \"onResponderReject\", \"onResponderRelease\", \"onResponderStart\", \"onResponderTerminate\", \"onResponderTerminationRequest\", \"onScrollShouldSetResponder\", \"onScrollShouldSetResponderCapture\", \"onSelectionChangeShouldSetResponder\", \"onSelectionChangeShouldSetResponderCapture\", \"onStartShouldSetResponder\", \"onStartShouldSetResponderCapture\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport * as forwardedProps from '../../modules/forwardedProps';\nimport pick from '../../modules/pick';\nimport useElementLayout from '../../modules/useElementLayout';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePlatformMethods from '../../modules/usePlatformMethods';\nimport useResponderEvents from '../../modules/useResponderEvents';\nimport StyleSheet from '../StyleSheet';\nimport TextAncestorContext from '../Text/TextAncestorContext';\nimport { useLocaleContext, getLocaleDirection } from '../../modules/useLocale';\nvar forwardPropsList = Object.assign({}, forwardedProps.defaultProps, forwardedProps.accessibilityProps, forwardedProps.clickProps, forwardedProps.focusProps, forwardedProps.keyboardProps, forwardedProps.mouseProps, forwardedProps.touchProps, forwardedProps.styleProps, {\n href: true,\n lang: true,\n onScroll: true,\n onWheel: true,\n pointerEvents: true\n});\nvar pickProps = props => pick(props, forwardPropsList);\nvar View = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n var hrefAttrs = props.hrefAttrs,\n onLayout = props.onLayout,\n onMoveShouldSetResponder = props.onMoveShouldSetResponder,\n onMoveShouldSetResponderCapture = props.onMoveShouldSetResponderCapture,\n onResponderEnd = props.onResponderEnd,\n onResponderGrant = props.onResponderGrant,\n onResponderMove = props.onResponderMove,\n onResponderReject = props.onResponderReject,\n onResponderRelease = props.onResponderRelease,\n onResponderStart = props.onResponderStart,\n onResponderTerminate = props.onResponderTerminate,\n onResponderTerminationRequest = props.onResponderTerminationRequest,\n onScrollShouldSetResponder = props.onScrollShouldSetResponder,\n onScrollShouldSetResponderCapture = props.onScrollShouldSetResponderCapture,\n onSelectionChangeShouldSetResponder = props.onSelectionChangeShouldSetResponder,\n onSelectionChangeShouldSetResponderCapture = props.onSelectionChangeShouldSetResponderCapture,\n onStartShouldSetResponder = props.onStartShouldSetResponder,\n onStartShouldSetResponderCapture = props.onStartShouldSetResponderCapture,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n if (process.env.NODE_ENV !== 'production') {\n React.Children.toArray(props.children).forEach(item => {\n if (typeof item === 'string') {\n console.error(\"Unexpected text node: \" + item + \". A text node cannot be a child of a .\");\n }\n });\n }\n var hasTextAncestor = React.useContext(TextAncestorContext);\n var hostRef = React.useRef(null);\n var _useLocaleContext = useLocaleContext(),\n contextDirection = _useLocaleContext.direction;\n useElementLayout(hostRef, onLayout);\n useResponderEvents(hostRef, {\n onMoveShouldSetResponder,\n onMoveShouldSetResponderCapture,\n onResponderEnd,\n onResponderGrant,\n onResponderMove,\n onResponderReject,\n onResponderRelease,\n onResponderStart,\n onResponderTerminate,\n onResponderTerminationRequest,\n onScrollShouldSetResponder,\n onScrollShouldSetResponderCapture,\n onSelectionChangeShouldSetResponder,\n onSelectionChangeShouldSetResponderCapture,\n onStartShouldSetResponder,\n onStartShouldSetResponderCapture\n });\n var component = 'div';\n var langDirection = props.lang != null ? getLocaleDirection(props.lang) : null;\n var componentDirection = props.dir || langDirection;\n var writingDirection = componentDirection || contextDirection;\n var supportedProps = pickProps(rest);\n supportedProps.dir = componentDirection;\n supportedProps.style = [styles.view$raw, hasTextAncestor && styles.inline, props.style];\n if (props.href != null) {\n component = 'a';\n if (hrefAttrs != null) {\n var download = hrefAttrs.download,\n rel = hrefAttrs.rel,\n target = hrefAttrs.target;\n if (download != null) {\n supportedProps.download = download;\n }\n if (rel != null) {\n supportedProps.rel = rel;\n }\n if (typeof target === 'string') {\n supportedProps.target = target.charAt(0) !== '_' ? '_' + target : target;\n }\n }\n }\n var platformMethodsRef = usePlatformMethods(supportedProps);\n var setRef = useMergeRefs(hostRef, platformMethodsRef, forwardedRef);\n supportedProps.ref = setRef;\n return createElement(component, supportedProps, {\n writingDirection\n });\n});\nView.displayName = 'View';\nvar styles = StyleSheet.create({\n view$raw: {\n alignItems: 'stretch',\n backgroundColor: 'transparent',\n border: '0 solid black',\n boxSizing: 'border-box',\n display: 'flex',\n flexBasis: 'auto',\n flexDirection: 'column',\n flexShrink: 0,\n listStyle: 'none',\n margin: 0,\n minHeight: 0,\n minWidth: 0,\n padding: 0,\n position: 'relative',\n textDecoration: 'none',\n zIndex: 0\n },\n inline: {\n display: 'inline-flex'\n }\n});\nexport default View;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport AccessibilityUtil from '../../modules/AccessibilityUtil';\nimport createDOMProps from '../../modules/createDOMProps';\nimport React from 'react';\nimport { LocaleProvider } from '../../modules/useLocale';\nvar createElement = (component, props, options) => {\n // Use equivalent platform elements where possible.\n var accessibilityComponent;\n if (component && component.constructor === String) {\n accessibilityComponent = AccessibilityUtil.propsToAccessibilityComponent(props);\n }\n var Component = accessibilityComponent || component;\n var domProps = createDOMProps(Component, props, options);\n var element = /*#__PURE__*/React.createElement(Component, domProps);\n\n // Update locale context if element's writing direction prop changes\n var elementWithLocaleProvider = domProps.dir ? /*#__PURE__*/React.createElement(LocaleProvider, {\n children: element,\n direction: domProps.dir,\n locale: domProps.lang\n }) : element;\n return elementWithLocaleProvider;\n};\nexport default createElement;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport isDisabled from './isDisabled';\nimport propsToAccessibilityComponent from './propsToAccessibilityComponent';\nimport propsToAriaRole from './propsToAriaRole';\nvar AccessibilityUtil = {\n isDisabled,\n propsToAccessibilityComponent,\n propsToAriaRole\n};\nexport default AccessibilityUtil;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar isDisabled = props => props.disabled || Array.isArray(props.accessibilityStates) && props.accessibilityStates.indexOf('disabled') > -1;\nexport default isDisabled;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport propsToAriaRole from './propsToAriaRole';\nvar roleComponents = {\n article: 'article',\n banner: 'header',\n blockquote: 'blockquote',\n button: 'button',\n code: 'code',\n complementary: 'aside',\n contentinfo: 'footer',\n deletion: 'del',\n emphasis: 'em',\n figure: 'figure',\n insertion: 'ins',\n form: 'form',\n list: 'ul',\n listitem: 'li',\n main: 'main',\n navigation: 'nav',\n paragraph: 'p',\n region: 'section',\n strong: 'strong'\n};\nvar emptyObject = {};\nvar propsToAccessibilityComponent = function propsToAccessibilityComponent(props) {\n if (props === void 0) {\n props = emptyObject;\n }\n // special-case for \"label\" role which doesn't map to an ARIA role\n if (props.accessibilityRole === 'label') {\n return 'label';\n }\n var role = propsToAriaRole(props);\n if (role) {\n if (role === 'heading') {\n var level = props.accessibilityLevel || props['aria-level'];\n if (level != null) {\n return \"h\" + level;\n }\n return 'h1';\n }\n return roleComponents[role];\n }\n};\nexport default propsToAccessibilityComponent;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar accessibilityRoleToWebRole = {\n adjustable: 'slider',\n button: 'button',\n header: 'heading',\n image: 'img',\n imagebutton: null,\n keyboardkey: null,\n label: null,\n link: 'link',\n none: 'presentation',\n search: 'search',\n summary: 'region',\n text: null\n};\nvar propsToAriaRole = _ref => {\n var accessibilityRole = _ref.accessibilityRole,\n role = _ref.role;\n var _role = role || accessibilityRole;\n if (_role) {\n var inferredRole = accessibilityRoleToWebRole[_role];\n if (inferredRole !== null) {\n // ignore roles that don't map to web\n return inferredRole || _role;\n }\n }\n};\nexport default propsToAriaRole;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"aria-activedescendant\", \"accessibilityActiveDescendant\", \"aria-atomic\", \"accessibilityAtomic\", \"aria-autocomplete\", \"accessibilityAutoComplete\", \"aria-busy\", \"accessibilityBusy\", \"aria-checked\", \"accessibilityChecked\", \"aria-colcount\", \"accessibilityColumnCount\", \"aria-colindex\", \"accessibilityColumnIndex\", \"aria-colspan\", \"accessibilityColumnSpan\", \"aria-controls\", \"accessibilityControls\", \"aria-current\", \"accessibilityCurrent\", \"aria-describedby\", \"accessibilityDescribedBy\", \"aria-details\", \"accessibilityDetails\", \"aria-disabled\", \"accessibilityDisabled\", \"aria-errormessage\", \"accessibilityErrorMessage\", \"aria-expanded\", \"accessibilityExpanded\", \"aria-flowto\", \"accessibilityFlowTo\", \"aria-haspopup\", \"accessibilityHasPopup\", \"aria-hidden\", \"accessibilityHidden\", \"aria-invalid\", \"accessibilityInvalid\", \"aria-keyshortcuts\", \"accessibilityKeyShortcuts\", \"aria-label\", \"accessibilityLabel\", \"aria-labelledby\", \"accessibilityLabelledBy\", \"aria-level\", \"accessibilityLevel\", \"aria-live\", \"accessibilityLiveRegion\", \"aria-modal\", \"accessibilityModal\", \"aria-multiline\", \"accessibilityMultiline\", \"aria-multiselectable\", \"accessibilityMultiSelectable\", \"aria-orientation\", \"accessibilityOrientation\", \"aria-owns\", \"accessibilityOwns\", \"aria-placeholder\", \"accessibilityPlaceholder\", \"aria-posinset\", \"accessibilityPosInSet\", \"aria-pressed\", \"accessibilityPressed\", \"aria-readonly\", \"accessibilityReadOnly\", \"aria-required\", \"accessibilityRequired\", \"role\", \"accessibilityRole\", \"aria-roledescription\", \"accessibilityRoleDescription\", \"aria-rowcount\", \"accessibilityRowCount\", \"aria-rowindex\", \"accessibilityRowIndex\", \"aria-rowspan\", \"accessibilityRowSpan\", \"aria-selected\", \"accessibilitySelected\", \"aria-setsize\", \"accessibilitySetSize\", \"aria-sort\", \"accessibilitySort\", \"aria-valuemax\", \"accessibilityValueMax\", \"aria-valuemin\", \"accessibilityValueMin\", \"aria-valuenow\", \"accessibilityValueNow\", \"aria-valuetext\", \"accessibilityValueText\", \"dataSet\", \"focusable\", \"id\", \"nativeID\", \"pointerEvents\", \"style\", \"tabIndex\", \"testID\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport AccessibilityUtil from '../AccessibilityUtil';\nimport StyleSheet from '../../exports/StyleSheet';\nimport { warnOnce } from '../warnOnce';\nvar emptyObject = {};\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\nvar uppercasePattern = /[A-Z]/g;\nfunction toHyphenLower(match) {\n return '-' + match.toLowerCase();\n}\nfunction hyphenateString(str) {\n return str.replace(uppercasePattern, toHyphenLower);\n}\nfunction processIDRefList(idRefList) {\n return isArray(idRefList) ? idRefList.join(' ') : idRefList;\n}\nvar pointerEventsStyles = StyleSheet.create({\n auto: {\n pointerEvents: 'auto'\n },\n 'box-none': {\n pointerEvents: 'box-none'\n },\n 'box-only': {\n pointerEvents: 'box-only'\n },\n none: {\n pointerEvents: 'none'\n }\n});\nvar createDOMProps = (elementType, props, options) => {\n if (!props) {\n props = emptyObject;\n }\n var _props = props,\n ariaActiveDescendant = _props['aria-activedescendant'],\n accessibilityActiveDescendant = _props.accessibilityActiveDescendant,\n ariaAtomic = _props['aria-atomic'],\n accessibilityAtomic = _props.accessibilityAtomic,\n ariaAutoComplete = _props['aria-autocomplete'],\n accessibilityAutoComplete = _props.accessibilityAutoComplete,\n ariaBusy = _props['aria-busy'],\n accessibilityBusy = _props.accessibilityBusy,\n ariaChecked = _props['aria-checked'],\n accessibilityChecked = _props.accessibilityChecked,\n ariaColumnCount = _props['aria-colcount'],\n accessibilityColumnCount = _props.accessibilityColumnCount,\n ariaColumnIndex = _props['aria-colindex'],\n accessibilityColumnIndex = _props.accessibilityColumnIndex,\n ariaColumnSpan = _props['aria-colspan'],\n accessibilityColumnSpan = _props.accessibilityColumnSpan,\n ariaControls = _props['aria-controls'],\n accessibilityControls = _props.accessibilityControls,\n ariaCurrent = _props['aria-current'],\n accessibilityCurrent = _props.accessibilityCurrent,\n ariaDescribedBy = _props['aria-describedby'],\n accessibilityDescribedBy = _props.accessibilityDescribedBy,\n ariaDetails = _props['aria-details'],\n accessibilityDetails = _props.accessibilityDetails,\n ariaDisabled = _props['aria-disabled'],\n accessibilityDisabled = _props.accessibilityDisabled,\n ariaErrorMessage = _props['aria-errormessage'],\n accessibilityErrorMessage = _props.accessibilityErrorMessage,\n ariaExpanded = _props['aria-expanded'],\n accessibilityExpanded = _props.accessibilityExpanded,\n ariaFlowTo = _props['aria-flowto'],\n accessibilityFlowTo = _props.accessibilityFlowTo,\n ariaHasPopup = _props['aria-haspopup'],\n accessibilityHasPopup = _props.accessibilityHasPopup,\n ariaHidden = _props['aria-hidden'],\n accessibilityHidden = _props.accessibilityHidden,\n ariaInvalid = _props['aria-invalid'],\n accessibilityInvalid = _props.accessibilityInvalid,\n ariaKeyShortcuts = _props['aria-keyshortcuts'],\n accessibilityKeyShortcuts = _props.accessibilityKeyShortcuts,\n ariaLabel = _props['aria-label'],\n accessibilityLabel = _props.accessibilityLabel,\n ariaLabelledBy = _props['aria-labelledby'],\n accessibilityLabelledBy = _props.accessibilityLabelledBy,\n ariaLevel = _props['aria-level'],\n accessibilityLevel = _props.accessibilityLevel,\n ariaLive = _props['aria-live'],\n accessibilityLiveRegion = _props.accessibilityLiveRegion,\n ariaModal = _props['aria-modal'],\n accessibilityModal = _props.accessibilityModal,\n ariaMultiline = _props['aria-multiline'],\n accessibilityMultiline = _props.accessibilityMultiline,\n ariaMultiSelectable = _props['aria-multiselectable'],\n accessibilityMultiSelectable = _props.accessibilityMultiSelectable,\n ariaOrientation = _props['aria-orientation'],\n accessibilityOrientation = _props.accessibilityOrientation,\n ariaOwns = _props['aria-owns'],\n accessibilityOwns = _props.accessibilityOwns,\n ariaPlaceholder = _props['aria-placeholder'],\n accessibilityPlaceholder = _props.accessibilityPlaceholder,\n ariaPosInSet = _props['aria-posinset'],\n accessibilityPosInSet = _props.accessibilityPosInSet,\n ariaPressed = _props['aria-pressed'],\n accessibilityPressed = _props.accessibilityPressed,\n ariaReadOnly = _props['aria-readonly'],\n accessibilityReadOnly = _props.accessibilityReadOnly,\n ariaRequired = _props['aria-required'],\n accessibilityRequired = _props.accessibilityRequired,\n ariaRole = _props.role,\n accessibilityRole = _props.accessibilityRole,\n ariaRoleDescription = _props['aria-roledescription'],\n accessibilityRoleDescription = _props.accessibilityRoleDescription,\n ariaRowCount = _props['aria-rowcount'],\n accessibilityRowCount = _props.accessibilityRowCount,\n ariaRowIndex = _props['aria-rowindex'],\n accessibilityRowIndex = _props.accessibilityRowIndex,\n ariaRowSpan = _props['aria-rowspan'],\n accessibilityRowSpan = _props.accessibilityRowSpan,\n ariaSelected = _props['aria-selected'],\n accessibilitySelected = _props.accessibilitySelected,\n ariaSetSize = _props['aria-setsize'],\n accessibilitySetSize = _props.accessibilitySetSize,\n ariaSort = _props['aria-sort'],\n accessibilitySort = _props.accessibilitySort,\n ariaValueMax = _props['aria-valuemax'],\n accessibilityValueMax = _props.accessibilityValueMax,\n ariaValueMin = _props['aria-valuemin'],\n accessibilityValueMin = _props.accessibilityValueMin,\n ariaValueNow = _props['aria-valuenow'],\n accessibilityValueNow = _props.accessibilityValueNow,\n ariaValueText = _props['aria-valuetext'],\n accessibilityValueText = _props.accessibilityValueText,\n dataSet = _props.dataSet,\n focusable = _props.focusable,\n id = _props.id,\n nativeID = _props.nativeID,\n pointerEvents = _props.pointerEvents,\n style = _props.style,\n tabIndex = _props.tabIndex,\n testID = _props.testID,\n domProps = _objectWithoutPropertiesLoose(_props, _excluded);\n if (accessibilityDisabled != null) {\n warnOnce('accessibilityDisabled', \"accessibilityDisabled is deprecated.\");\n }\n var disabled = ariaDisabled || accessibilityDisabled;\n var role = AccessibilityUtil.propsToAriaRole(props);\n\n // ACCESSIBILITY\n if (accessibilityActiveDescendant != null) {\n warnOnce('accessibilityActiveDescendant', \"accessibilityActiveDescendant is deprecated. Use aria-activedescendant.\");\n }\n var _ariaActiveDescendant = ariaActiveDescendant != null ? ariaActiveDescendant : accessibilityActiveDescendant;\n if (_ariaActiveDescendant != null) {\n domProps['aria-activedescendant'] = _ariaActiveDescendant;\n }\n if (accessibilityAtomic != null) {\n warnOnce('accessibilityAtomic', \"accessibilityAtomic is deprecated. Use aria-atomic.\");\n }\n var _ariaAtomic = ariaAtomic != null ? ariaActiveDescendant : accessibilityAtomic;\n if (_ariaAtomic != null) {\n domProps['aria-atomic'] = _ariaAtomic;\n }\n if (accessibilityAutoComplete != null) {\n warnOnce('accessibilityAutoComplete', \"accessibilityAutoComplete is deprecated. Use aria-autocomplete.\");\n }\n var _ariaAutoComplete = ariaAutoComplete != null ? ariaAutoComplete : accessibilityAutoComplete;\n if (_ariaAutoComplete != null) {\n domProps['aria-autocomplete'] = _ariaAutoComplete;\n }\n if (accessibilityBusy != null) {\n warnOnce('accessibilityBusy', \"accessibilityBusy is deprecated. Use aria-busy.\");\n }\n var _ariaBusy = ariaBusy != null ? ariaBusy : accessibilityBusy;\n if (_ariaBusy != null) {\n domProps['aria-busy'] = _ariaBusy;\n }\n if (accessibilityChecked != null) {\n warnOnce('accessibilityChecked', \"accessibilityChecked is deprecated. Use aria-checked.\");\n }\n var _ariaChecked = ariaChecked != null ? ariaChecked : accessibilityChecked;\n if (_ariaChecked != null) {\n domProps['aria-checked'] = _ariaChecked;\n }\n if (accessibilityColumnCount != null) {\n warnOnce('accessibilityColumnCount', \"accessibilityColumnCount is deprecated. Use aria-colcount.\");\n }\n var _ariaColumnCount = ariaColumnCount != null ? ariaColumnCount : accessibilityColumnCount;\n if (_ariaColumnCount != null) {\n domProps['aria-colcount'] = _ariaColumnCount;\n }\n if (accessibilityColumnIndex != null) {\n warnOnce('accessibilityColumnIndex', \"accessibilityColumnIndex is deprecated. Use aria-colindex.\");\n }\n var _ariaColumnIndex = ariaColumnIndex != null ? ariaColumnIndex : accessibilityColumnIndex;\n if (_ariaColumnIndex != null) {\n domProps['aria-colindex'] = _ariaColumnIndex;\n }\n if (accessibilityColumnSpan != null) {\n warnOnce('accessibilityColumnSpan', \"accessibilityColumnSpan is deprecated. Use aria-colspan.\");\n }\n var _ariaColumnSpan = ariaColumnSpan != null ? ariaColumnSpan : accessibilityColumnSpan;\n if (_ariaColumnSpan != null) {\n domProps['aria-colspan'] = _ariaColumnSpan;\n }\n if (accessibilityControls != null) {\n warnOnce('accessibilityControls', \"accessibilityControls is deprecated. Use aria-controls.\");\n }\n var _ariaControls = ariaControls != null ? ariaControls : accessibilityControls;\n if (_ariaControls != null) {\n domProps['aria-controls'] = processIDRefList(_ariaControls);\n }\n if (accessibilityCurrent != null) {\n warnOnce('accessibilityCurrent', \"accessibilityCurrent is deprecated. Use aria-current.\");\n }\n var _ariaCurrent = ariaCurrent != null ? ariaCurrent : accessibilityCurrent;\n if (_ariaCurrent != null) {\n domProps['aria-current'] = _ariaCurrent;\n }\n if (accessibilityDescribedBy != null) {\n warnOnce('accessibilityDescribedBy', \"accessibilityDescribedBy is deprecated. Use aria-describedby.\");\n }\n var _ariaDescribedBy = ariaDescribedBy != null ? ariaDescribedBy : accessibilityDescribedBy;\n if (_ariaDescribedBy != null) {\n domProps['aria-describedby'] = processIDRefList(_ariaDescribedBy);\n }\n if (accessibilityDetails != null) {\n warnOnce('accessibilityDetails', \"accessibilityDetails is deprecated. Use aria-details.\");\n }\n var _ariaDetails = ariaDetails != null ? ariaDetails : accessibilityDetails;\n if (_ariaDetails != null) {\n domProps['aria-details'] = _ariaDetails;\n }\n if (disabled === true) {\n domProps['aria-disabled'] = true;\n // Enhance with native semantics\n if (elementType === 'button' || elementType === 'form' || elementType === 'input' || elementType === 'select' || elementType === 'textarea') {\n domProps.disabled = true;\n }\n }\n if (accessibilityErrorMessage != null) {\n warnOnce('accessibilityErrorMessage', \"accessibilityErrorMessage is deprecated. Use aria-errormessage.\");\n }\n var _ariaErrorMessage = ariaErrorMessage != null ? ariaErrorMessage : accessibilityErrorMessage;\n if (_ariaErrorMessage != null) {\n domProps['aria-errormessage'] = _ariaErrorMessage;\n }\n if (accessibilityExpanded != null) {\n warnOnce('accessibilityExpanded', \"accessibilityExpanded is deprecated. Use aria-expanded.\");\n }\n var _ariaExpanded = ariaExpanded != null ? ariaExpanded : accessibilityExpanded;\n if (_ariaExpanded != null) {\n domProps['aria-expanded'] = _ariaExpanded;\n }\n if (accessibilityFlowTo != null) {\n warnOnce('accessibilityFlowTo', \"accessibilityFlowTo is deprecated. Use aria-flowto.\");\n }\n var _ariaFlowTo = ariaFlowTo != null ? ariaFlowTo : accessibilityFlowTo;\n if (_ariaFlowTo != null) {\n domProps['aria-flowto'] = processIDRefList(_ariaFlowTo);\n }\n if (accessibilityHasPopup != null) {\n warnOnce('accessibilityHasPopup', \"accessibilityHasPopup is deprecated. Use aria-haspopup.\");\n }\n var _ariaHasPopup = ariaHasPopup != null ? ariaHasPopup : accessibilityHasPopup;\n if (_ariaHasPopup != null) {\n domProps['aria-haspopup'] = _ariaHasPopup;\n }\n if (accessibilityHidden != null) {\n warnOnce('accessibilityHidden', \"accessibilityHidden is deprecated. Use aria-hidden.\");\n }\n var _ariaHidden = ariaHidden != null ? ariaHidden : accessibilityHidden;\n if (_ariaHidden === true) {\n domProps['aria-hidden'] = _ariaHidden;\n }\n if (accessibilityInvalid != null) {\n warnOnce('accessibilityInvalid', \"accessibilityInvalid is deprecated. Use aria-invalid.\");\n }\n var _ariaInvalid = ariaInvalid != null ? ariaInvalid : accessibilityInvalid;\n if (_ariaInvalid != null) {\n domProps['aria-invalid'] = _ariaInvalid;\n }\n if (accessibilityKeyShortcuts != null) {\n warnOnce('accessibilityKeyShortcuts', \"accessibilityKeyShortcuts is deprecated. Use aria-keyshortcuts.\");\n }\n var _ariaKeyShortcuts = ariaKeyShortcuts != null ? ariaKeyShortcuts : accessibilityKeyShortcuts;\n if (_ariaKeyShortcuts != null) {\n domProps['aria-keyshortcuts'] = processIDRefList(_ariaKeyShortcuts);\n }\n if (accessibilityLabel != null) {\n warnOnce('accessibilityLabel', \"accessibilityLabel is deprecated. Use aria-label.\");\n }\n var _ariaLabel = ariaLabel != null ? ariaLabel : accessibilityLabel;\n if (_ariaLabel != null) {\n domProps['aria-label'] = _ariaLabel;\n }\n if (accessibilityLabelledBy != null) {\n warnOnce('accessibilityLabelledBy', \"accessibilityLabelledBy is deprecated. Use aria-labelledby.\");\n }\n var _ariaLabelledBy = ariaLabelledBy != null ? ariaLabelledBy : accessibilityLabelledBy;\n if (_ariaLabelledBy != null) {\n domProps['aria-labelledby'] = processIDRefList(_ariaLabelledBy);\n }\n if (accessibilityLevel != null) {\n warnOnce('accessibilityLevel', \"accessibilityLevel is deprecated. Use aria-level.\");\n }\n var _ariaLevel = ariaLevel != null ? ariaLevel : accessibilityLevel;\n if (_ariaLevel != null) {\n domProps['aria-level'] = _ariaLevel;\n }\n if (accessibilityLiveRegion != null) {\n warnOnce('accessibilityLiveRegion', \"accessibilityLiveRegion is deprecated. Use aria-live.\");\n }\n var _ariaLive = ariaLive != null ? ariaLive : accessibilityLiveRegion;\n if (_ariaLive != null) {\n domProps['aria-live'] = _ariaLive === 'none' ? 'off' : _ariaLive;\n }\n if (accessibilityModal != null) {\n warnOnce('accessibilityModal', \"accessibilityModal is deprecated. Use aria-modal.\");\n }\n var _ariaModal = ariaModal != null ? ariaModal : accessibilityModal;\n if (_ariaModal != null) {\n domProps['aria-modal'] = _ariaModal;\n }\n if (accessibilityMultiline != null) {\n warnOnce('accessibilityMultiline', \"accessibilityMultiline is deprecated. Use aria-multiline.\");\n }\n var _ariaMultiline = ariaMultiline != null ? ariaMultiline : accessibilityMultiline;\n if (_ariaMultiline != null) {\n domProps['aria-multiline'] = _ariaMultiline;\n }\n if (accessibilityMultiSelectable != null) {\n warnOnce('accessibilityMultiSelectable', \"accessibilityMultiSelectable is deprecated. Use aria-multiselectable.\");\n }\n var _ariaMultiSelectable = ariaMultiSelectable != null ? ariaMultiSelectable : accessibilityMultiSelectable;\n if (_ariaMultiSelectable != null) {\n domProps['aria-multiselectable'] = _ariaMultiSelectable;\n }\n if (accessibilityOrientation != null) {\n warnOnce('accessibilityOrientation', \"accessibilityOrientation is deprecated. Use aria-orientation.\");\n }\n var _ariaOrientation = ariaOrientation != null ? ariaOrientation : accessibilityOrientation;\n if (_ariaOrientation != null) {\n domProps['aria-orientation'] = _ariaOrientation;\n }\n if (accessibilityOwns != null) {\n warnOnce('accessibilityOwns', \"accessibilityOwns is deprecated. Use aria-owns.\");\n }\n var _ariaOwns = ariaOwns != null ? ariaOwns : accessibilityOwns;\n if (_ariaOwns != null) {\n domProps['aria-owns'] = processIDRefList(_ariaOwns);\n }\n if (accessibilityPlaceholder != null) {\n warnOnce('accessibilityPlaceholder', \"accessibilityPlaceholder is deprecated. Use aria-placeholder.\");\n }\n var _ariaPlaceholder = ariaPlaceholder != null ? ariaPlaceholder : accessibilityPlaceholder;\n if (_ariaPlaceholder != null) {\n domProps['aria-placeholder'] = _ariaPlaceholder;\n }\n if (accessibilityPosInSet != null) {\n warnOnce('accessibilityPosInSet', \"accessibilityPosInSet is deprecated. Use aria-posinset.\");\n }\n var _ariaPosInSet = ariaPosInSet != null ? ariaPosInSet : accessibilityPosInSet;\n if (_ariaPosInSet != null) {\n domProps['aria-posinset'] = _ariaPosInSet;\n }\n if (accessibilityPressed != null) {\n warnOnce('accessibilityPressed', \"accessibilityPressed is deprecated. Use aria-pressed.\");\n }\n var _ariaPressed = ariaPressed != null ? ariaPressed : accessibilityPressed;\n if (_ariaPressed != null) {\n domProps['aria-pressed'] = _ariaPressed;\n }\n if (accessibilityReadOnly != null) {\n warnOnce('accessibilityReadOnly', \"accessibilityReadOnly is deprecated. Use aria-readonly.\");\n }\n var _ariaReadOnly = ariaReadOnly != null ? ariaReadOnly : accessibilityReadOnly;\n if (_ariaReadOnly != null) {\n domProps['aria-readonly'] = _ariaReadOnly;\n // Enhance with native semantics\n if (elementType === 'input' || elementType === 'select' || elementType === 'textarea') {\n domProps.readOnly = true;\n }\n }\n if (accessibilityRequired != null) {\n warnOnce('accessibilityRequired', \"accessibilityRequired is deprecated. Use aria-required.\");\n }\n var _ariaRequired = ariaRequired != null ? ariaRequired : accessibilityRequired;\n if (_ariaRequired != null) {\n domProps['aria-required'] = _ariaRequired;\n // Enhance with native semantics\n if (elementType === 'input' || elementType === 'select' || elementType === 'textarea') {\n domProps.required = accessibilityRequired;\n }\n }\n if (accessibilityRole != null) {\n warnOnce('accessibilityRole', \"accessibilityRole is deprecated. Use role.\");\n }\n if (role != null) {\n // 'presentation' synonym has wider browser support\n domProps['role'] = role === 'none' ? 'presentation' : role;\n }\n if (accessibilityRoleDescription != null) {\n warnOnce('accessibilityRoleDescription', \"accessibilityRoleDescription is deprecated. Use aria-roledescription.\");\n }\n var _ariaRoleDescription = ariaRoleDescription != null ? ariaRoleDescription : accessibilityRoleDescription;\n if (_ariaRoleDescription != null) {\n domProps['aria-roledescription'] = _ariaRoleDescription;\n }\n if (accessibilityRowCount != null) {\n warnOnce('accessibilityRowCount', \"accessibilityRowCount is deprecated. Use aria-rowcount.\");\n }\n var _ariaRowCount = ariaRowCount != null ? ariaRowCount : accessibilityRowCount;\n if (_ariaRowCount != null) {\n domProps['aria-rowcount'] = _ariaRowCount;\n }\n if (accessibilityRowIndex != null) {\n warnOnce('accessibilityRowIndex', \"accessibilityRowIndex is deprecated. Use aria-rowindex.\");\n }\n var _ariaRowIndex = ariaRowIndex != null ? ariaRowIndex : accessibilityRowIndex;\n if (_ariaRowIndex != null) {\n domProps['aria-rowindex'] = _ariaRowIndex;\n }\n if (accessibilityRowSpan != null) {\n warnOnce('accessibilityRowSpan', \"accessibilityRowSpan is deprecated. Use aria-rowspan.\");\n }\n var _ariaRowSpan = ariaRowSpan != null ? ariaRowSpan : accessibilityRowSpan;\n if (_ariaRowSpan != null) {\n domProps['aria-rowspan'] = _ariaRowSpan;\n }\n if (accessibilitySelected != null) {\n warnOnce('accessibilitySelected', \"accessibilitySelected is deprecated. Use aria-selected.\");\n }\n var _ariaSelected = ariaSelected != null ? ariaSelected : accessibilitySelected;\n if (_ariaSelected != null) {\n domProps['aria-selected'] = _ariaSelected;\n }\n if (accessibilitySetSize != null) {\n warnOnce('accessibilitySetSize', \"accessibilitySetSize is deprecated. Use aria-setsize.\");\n }\n var _ariaSetSize = ariaSetSize != null ? ariaSetSize : accessibilitySetSize;\n if (_ariaSetSize != null) {\n domProps['aria-setsize'] = _ariaSetSize;\n }\n if (accessibilitySort != null) {\n warnOnce('accessibilitySort', \"accessibilitySort is deprecated. Use aria-sort.\");\n }\n var _ariaSort = ariaSort != null ? ariaSort : accessibilitySort;\n if (_ariaSort != null) {\n domProps['aria-sort'] = _ariaSort;\n }\n if (accessibilityValueMax != null) {\n warnOnce('accessibilityValueMax', \"accessibilityValueMax is deprecated. Use aria-valuemax.\");\n }\n var _ariaValueMax = ariaValueMax != null ? ariaValueMax : accessibilityValueMax;\n if (_ariaValueMax != null) {\n domProps['aria-valuemax'] = _ariaValueMax;\n }\n if (accessibilityValueMin != null) {\n warnOnce('accessibilityValueMin', \"accessibilityValueMin is deprecated. Use aria-valuemin.\");\n }\n var _ariaValueMin = ariaValueMin != null ? ariaValueMin : accessibilityValueMin;\n if (_ariaValueMin != null) {\n domProps['aria-valuemin'] = _ariaValueMin;\n }\n if (accessibilityValueNow != null) {\n warnOnce('accessibilityValueNow', \"accessibilityValueNow is deprecated. Use aria-valuenow.\");\n }\n var _ariaValueNow = ariaValueNow != null ? ariaValueNow : accessibilityValueNow;\n if (_ariaValueNow != null) {\n domProps['aria-valuenow'] = _ariaValueNow;\n }\n if (accessibilityValueText != null) {\n warnOnce('accessibilityValueText', \"accessibilityValueText is deprecated. Use aria-valuetext.\");\n }\n var _ariaValueText = ariaValueText != null ? ariaValueText : accessibilityValueText;\n if (_ariaValueText != null) {\n domProps['aria-valuetext'] = _ariaValueText;\n }\n\n // \"dataSet\" replaced with \"data-*\"\n if (dataSet != null) {\n for (var dataProp in dataSet) {\n if (hasOwnProperty.call(dataSet, dataProp)) {\n var dataName = hyphenateString(dataProp);\n var dataValue = dataSet[dataProp];\n if (dataValue != null) {\n domProps[\"data-\" + dataName] = dataValue;\n }\n }\n }\n }\n\n // FOCUS\n if (tabIndex === 0 || tabIndex === '0' || tabIndex === -1 || tabIndex === '-1') {\n domProps.tabIndex = tabIndex;\n } else {\n if (focusable != null) {\n warnOnce('focusable', \"focusable is deprecated.\");\n }\n\n // \"focusable\" indicates that an element may be a keyboard tab-stop.\n if (focusable === false) {\n domProps.tabIndex = '-1';\n }\n if (\n // These native elements are keyboard focusable by default\n elementType === 'a' || elementType === 'button' || elementType === 'input' || elementType === 'select' || elementType === 'textarea') {\n if (focusable === false || accessibilityDisabled === true) {\n domProps.tabIndex = '-1';\n }\n } else if (\n // These roles are made keyboard focusable by default\n role === 'button' || role === 'checkbox' || role === 'link' || role === 'radio' || role === 'textbox' || role === 'switch') {\n if (focusable !== false) {\n domProps.tabIndex = '0';\n }\n } else {\n // Everything else must explicitly set the prop\n if (focusable === true) {\n domProps.tabIndex = '0';\n }\n }\n }\n\n // Resolve styles\n if (pointerEvents != null) {\n warnOnce('pointerEvents', \"props.pointerEvents is deprecated. Use style.pointerEvents\");\n }\n var _StyleSheet = StyleSheet([style, pointerEvents && pointerEventsStyles[pointerEvents]], _objectSpread({\n writingDirection: 'ltr'\n }, options)),\n className = _StyleSheet[0],\n inlineStyle = _StyleSheet[1];\n if (className) {\n domProps.className = className;\n }\n if (inlineStyle) {\n domProps.style = inlineStyle;\n }\n\n // OTHER\n // Native element ID\n if (nativeID != null) {\n warnOnce('nativeID', \"nativeID is deprecated. Use id.\");\n }\n var _id = id != null ? id : nativeID;\n if (_id != null) {\n domProps.id = _id;\n }\n // Automated test IDs\n if (testID != null) {\n domProps['data-testid'] = testID;\n }\n if (domProps.type == null && elementType === 'button') {\n domProps.type = 'button';\n }\n return domProps;\n};\nexport default createDOMProps;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport React, { createContext, useContext } from 'react';\nimport { isLocaleRTL } from './isLocaleRTL';\nvar defaultLocale = {\n direction: 'ltr',\n locale: 'en-US'\n};\nvar LocaleContext = /*#__PURE__*/createContext(defaultLocale);\nexport function getLocaleDirection(locale) {\n return isLocaleRTL(locale) ? 'rtl' : 'ltr';\n}\nexport function LocaleProvider(props) {\n var direction = props.direction,\n locale = props.locale,\n children = props.children;\n var needsContext = direction || locale;\n return needsContext ? /*#__PURE__*/React.createElement(LocaleContext.Provider, {\n children: children,\n value: {\n direction: locale ? getLocaleDirection(locale) : direction,\n locale\n }\n }) : children;\n}\nexport function useLocaleContext() {\n return useContext(LocaleContext);\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar rtlScripts = new Set(['Arab', 'Syrc', 'Samr', 'Mand', 'Thaa', 'Mend', 'Nkoo', 'Adlm', 'Rohg', 'Hebr']);\nvar rtlLangs = new Set(['ae',\n// Avestan\n'ar',\n// Arabic\n'arc',\n// Aramaic\n'bcc',\n// Southern Balochi\n'bqi',\n// Bakthiari\n'ckb',\n// Sorani\n'dv',\n// Dhivehi\n'fa', 'far',\n// Persian\n'glk',\n// Gilaki\n'he', 'iw',\n// Hebrew\n'khw',\n// Khowar\n'ks',\n// Kashmiri\n'ku',\n// Kurdish\n'mzn',\n// Mazanderani\n'nqo',\n// N'Ko\n'pnb',\n// Western Punjabi\n'ps',\n// Pashto\n'sd',\n// Sindhi\n'ug',\n// Uyghur\n'ur',\n// Urdu\n'yi' // Yiddish\n]);\n\nvar cache = new Map();\n\n/**\n * Determine the writing direction of a locale\n */\nexport function isLocaleRTL(locale) {\n var cachedRTL = cache.get(locale);\n if (cachedRTL) {\n return cachedRTL;\n }\n var isRTL = false;\n // $FlowFixMe\n if (Intl.Locale) {\n // $FlowFixMe\n var script = new Intl.Locale(locale).maximize().script;\n isRTL = rtlScripts.has(script);\n } else {\n // Fallback to inferring from language\n var lang = locale.split('-')[0];\n isRTL = rtlLangs.has(lang);\n }\n cache.set(locale, isRTL);\n return isRTL;\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nexport var defaultProps = {\n children: true,\n dataSet: true,\n dir: true,\n id: true,\n ref: true,\n suppressHydrationWarning: true,\n tabIndex: true,\n testID: true,\n // @deprecated\n focusable: true,\n nativeID: true\n};\nexport var accessibilityProps = {\n 'aria-activedescendant': true,\n 'aria-atomic': true,\n 'aria-autocomplete': true,\n 'aria-busy': true,\n 'aria-checked': true,\n 'aria-colcount': true,\n 'aria-colindex': true,\n 'aria-colspan': true,\n 'aria-controls': true,\n 'aria-current': true,\n 'aria-describedby': true,\n 'aria-details': true,\n 'aria-disabled': true,\n 'aria-errormessage': true,\n 'aria-expanded': true,\n 'aria-flowto': true,\n 'aria-haspopup': true,\n 'aria-hidden': true,\n 'aria-invalid': true,\n 'aria-keyshortcuts': true,\n 'aria-label': true,\n 'aria-labelledby': true,\n 'aria-level': true,\n 'aria-live': true,\n 'aria-modal': true,\n 'aria-multiline': true,\n 'aria-multiselectable': true,\n 'aria-orientation': true,\n 'aria-owns': true,\n 'aria-placeholder': true,\n 'aria-posinset': true,\n 'aria-pressed': true,\n 'aria-readonly': true,\n 'aria-required': true,\n role: true,\n 'aria-roledescription': true,\n 'aria-rowcount': true,\n 'aria-rowindex': true,\n 'aria-rowspan': true,\n 'aria-selected': true,\n 'aria-setsize': true,\n 'aria-sort': true,\n 'aria-valuemax': true,\n 'aria-valuemin': true,\n 'aria-valuenow': true,\n 'aria-valuetext': true,\n // @deprecated\n accessibilityActiveDescendant: true,\n accessibilityAtomic: true,\n accessibilityAutoComplete: true,\n accessibilityBusy: true,\n accessibilityChecked: true,\n accessibilityColumnCount: true,\n accessibilityColumnIndex: true,\n accessibilityColumnSpan: true,\n accessibilityControls: true,\n accessibilityCurrent: true,\n accessibilityDescribedBy: true,\n accessibilityDetails: true,\n accessibilityDisabled: true,\n accessibilityErrorMessage: true,\n accessibilityExpanded: true,\n accessibilityFlowTo: true,\n accessibilityHasPopup: true,\n accessibilityHidden: true,\n accessibilityInvalid: true,\n accessibilityKeyShortcuts: true,\n accessibilityLabel: true,\n accessibilityLabelledBy: true,\n accessibilityLevel: true,\n accessibilityLiveRegion: true,\n accessibilityModal: true,\n accessibilityMultiline: true,\n accessibilityMultiSelectable: true,\n accessibilityOrientation: true,\n accessibilityOwns: true,\n accessibilityPlaceholder: true,\n accessibilityPosInSet: true,\n accessibilityPressed: true,\n accessibilityReadOnly: true,\n accessibilityRequired: true,\n accessibilityRole: true,\n accessibilityRoleDescription: true,\n accessibilityRowCount: true,\n accessibilityRowIndex: true,\n accessibilityRowSpan: true,\n accessibilitySelected: true,\n accessibilitySetSize: true,\n accessibilitySort: true,\n accessibilityValueMax: true,\n accessibilityValueMin: true,\n accessibilityValueNow: true,\n accessibilityValueText: true\n};\nexport var clickProps = {\n onClick: true,\n onAuxClick: true,\n onContextMenu: true,\n onGotPointerCapture: true,\n onLostPointerCapture: true,\n onPointerCancel: true,\n onPointerDown: true,\n onPointerEnter: true,\n onPointerMove: true,\n onPointerLeave: true,\n onPointerOut: true,\n onPointerOver: true,\n onPointerUp: true\n};\nexport var focusProps = {\n onBlur: true,\n onFocus: true\n};\nexport var keyboardProps = {\n onKeyDown: true,\n onKeyDownCapture: true,\n onKeyUp: true,\n onKeyUpCapture: true\n};\nexport var mouseProps = {\n onMouseDown: true,\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseMove: true,\n onMouseOver: true,\n onMouseOut: true,\n onMouseUp: true\n};\nexport var touchProps = {\n onTouchCancel: true,\n onTouchCancelCapture: true,\n onTouchEnd: true,\n onTouchEndCapture: true,\n onTouchMove: true,\n onTouchMoveCapture: true,\n onTouchStart: true,\n onTouchStartCapture: true\n};\nexport var styleProps = {\n style: true\n};","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nexport default function pick(obj, list) {\n var nextObj = {};\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n if (list[key] === true) {\n nextObj[key] = obj[key];\n }\n }\n }\n return nextObj;\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport useLayoutEffect from '../useLayoutEffect';\nimport UIManager from '../../exports/UIManager';\nimport canUseDOM from '../canUseDom';\nvar DOM_LAYOUT_HANDLER_NAME = '__reactLayoutHandler';\nvar didWarn = !canUseDOM;\nvar resizeObserver = null;\nfunction getResizeObserver() {\n if (canUseDOM && typeof window.ResizeObserver !== 'undefined') {\n if (resizeObserver == null) {\n resizeObserver = new window.ResizeObserver(function (entries) {\n entries.forEach(entry => {\n var node = entry.target;\n var onLayout = node[DOM_LAYOUT_HANDLER_NAME];\n if (typeof onLayout === 'function') {\n // We still need to measure the view because browsers don't yet provide\n // border-box dimensions in the entry\n UIManager.measure(node, (x, y, width, height, left, top) => {\n var event = {\n // $FlowFixMe\n nativeEvent: {\n layout: {\n x,\n y,\n width,\n height,\n left,\n top\n }\n },\n timeStamp: Date.now()\n };\n Object.defineProperty(event.nativeEvent, 'target', {\n enumerable: true,\n get: () => entry.target\n });\n onLayout(event);\n });\n }\n });\n });\n }\n } else if (!didWarn) {\n if (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test') {\n console.warn('onLayout relies on ResizeObserver which is not supported by your browser. ' + 'Please include a polyfill, e.g., https://github.com/que-etc/resize-observer-polyfill.');\n didWarn = true;\n }\n }\n return resizeObserver;\n}\nexport default function useElementLayout(ref, onLayout) {\n var observer = getResizeObserver();\n useLayoutEffect(() => {\n var node = ref.current;\n if (node != null) {\n node[DOM_LAYOUT_HANDLER_NAME] = onLayout;\n }\n }, [ref, onLayout]);\n\n // Observing is done in a separate effect to avoid this effect running\n // when 'onLayout' changes.\n useLayoutEffect(() => {\n var node = ref.current;\n if (node != null && observer != null) {\n if (typeof node[DOM_LAYOUT_HANDLER_NAME] === 'function') {\n observer.observe(node);\n } else {\n observer.unobserve(node);\n }\n }\n return () => {\n if (node != null && observer != null) {\n observer.unobserve(node);\n }\n };\n }, [ref, observer]);\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * useLayoutEffect throws an error on the server. On the few occasions where is\n * problematic, use this hook.\n *\n * \n */\n\nimport { useEffect, useLayoutEffect } from 'react';\nimport canUseDOM from '../canUseDom';\nvar useLayoutEffectImpl = canUseDOM ? useLayoutEffect : useEffect;\nexport default useLayoutEffectImpl;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport setValueForStyles from '../../modules/setValueForStyles';\nvar getRect = node => {\n var height = node.offsetHeight;\n var width = node.offsetWidth;\n var left = node.offsetLeft;\n var top = node.offsetTop;\n node = node.offsetParent;\n while (node && node.nodeType === 1 /* Node.ELEMENT_NODE */) {\n left += node.offsetLeft + node.clientLeft - node.scrollLeft;\n top += node.offsetTop + node.clientTop - node.scrollTop;\n node = node.offsetParent;\n }\n top -= window.scrollY;\n left -= window.scrollX;\n return {\n width,\n height,\n top,\n left\n };\n};\nvar measureLayout = (node, relativeToNativeNode, callback) => {\n var relativeNode = relativeToNativeNode || node && node.parentNode;\n if (node && relativeNode) {\n setTimeout(() => {\n if (node.isConnected && relativeNode.isConnected) {\n var relativeRect = getRect(relativeNode);\n var _getRect = getRect(node),\n height = _getRect.height,\n left = _getRect.left,\n top = _getRect.top,\n width = _getRect.width;\n var x = left - relativeRect.left;\n var y = top - relativeRect.top;\n callback(x, y, width, height, left, top);\n }\n }, 0);\n }\n};\nvar elementsToIgnore = {\n A: true,\n BODY: true,\n INPUT: true,\n SELECT: true,\n TEXTAREA: true\n};\nvar UIManager = {\n blur(node) {\n try {\n node.blur();\n } catch (err) {}\n },\n focus(node) {\n try {\n var name = node.nodeName;\n // A tabIndex of -1 allows element to be programmatically focused but\n // prevents keyboard focus. We don't want to set the tabindex value on\n // elements that should not prevent keyboard focus.\n if (node.getAttribute('tabIndex') == null && node.isContentEditable !== true && elementsToIgnore[name] == null) {\n node.setAttribute('tabIndex', '-1');\n }\n node.focus();\n } catch (err) {}\n },\n measure(node, callback) {\n measureLayout(node, null, callback);\n },\n measureInWindow(node, callback) {\n if (node) {\n setTimeout(() => {\n var _getRect2 = getRect(node),\n height = _getRect2.height,\n left = _getRect2.left,\n top = _getRect2.top,\n width = _getRect2.width;\n callback(left, top, width, height);\n }, 0);\n }\n },\n measureLayout(node, relativeToNativeNode, onFail, onSuccess) {\n measureLayout(node, relativeToNativeNode, onSuccess);\n },\n updateView(node, props) {\n for (var prop in props) {\n if (!Object.prototype.hasOwnProperty.call(props, prop)) {\n continue;\n }\n var value = props[prop];\n switch (prop) {\n case 'style':\n {\n setValueForStyles(node, value);\n break;\n }\n case 'class':\n case 'className':\n {\n node.setAttribute('class', value);\n break;\n }\n case 'text':\n case 'value':\n // native platforms use `text` prop to replace text input value\n node.value = value;\n break;\n default:\n node.setAttribute(prop, value);\n }\n }\n },\n configureNextLayoutAnimation(config, onAnimationDidEnd) {\n onAnimationDidEnd();\n },\n // mocks\n setLayoutAnimationEnabledExperimental() {}\n};\nexport default UIManager;","/* eslint-disable */\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * From React 16.3.0\n * \n */\n\nimport dangerousStyleValue from './dangerousStyleValue';\n\n/**\n * Sets the value for multiple styles on a node. If a value is specified as\n * '' (empty string), the corresponding style property will be unset.\n *\n * @param {DOMElement} node\n * @param {object} styles\n */\nfunction setValueForStyles(node, styles) {\n var style = node.style;\n for (var styleName in styles) {\n if (!styles.hasOwnProperty(styleName)) {\n continue;\n }\n var isCustomProperty = styleName.indexOf('--') === 0;\n var styleValue = dangerousStyleValue(styleName, styles[styleName], isCustomProperty);\n if (styleName === 'float') {\n styleName = 'cssFloat';\n }\n if (isCustomProperty) {\n style.setProperty(styleName, styleValue);\n } else {\n style[styleName] = styleValue;\n }\n }\n}\nexport default setValueForStyles;","/* eslint-disable */\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * From React 16.0.0\n * \n */\n\nimport isUnitlessNumber from '../unitlessNumbers';\n\n/**\n * Convert a value into the proper css writable value. The style name `name`\n * should be logical (no hyphens), as specified\n * in `CSSProperty.isUnitlessNumber`.\n *\n * @param {string} name CSS property name such as `topMargin`.\n * @param {*} value CSS property value such as `10px`.\n * @return {string} Normalized style value with dimensions applied.\n */\nfunction dangerousStyleValue(name, value, isCustomProperty) {\n // Note that we've removed escapeTextForBrowser() calls here since the\n // whole string will be escaped when the attribute is injected into\n // the markup. If you provide unsafe user data here they can inject\n // arbitrary CSS which may be problematic (I couldn't repro this):\n // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\n // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\n // This is not an XSS hole but instead a potential CSS injection issue\n // which has lead to a greater discussion about how we're going to\n // trust URLs moving forward. See #2115901\n\n var isEmpty = value == null || typeof value === 'boolean' || value === '';\n if (isEmpty) {\n return '';\n }\n if (!isCustomProperty && typeof value === 'number' && value !== 0 && !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name])) {\n return value + 'px'; // Presumes implicit 'px' suffix for unitless numbers\n }\n\n return ('' + value).trim();\n}\nexport default dangerousStyleValue;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar unitlessNumbers = {\n animationIterationCount: true,\n aspectRatio: true,\n borderImageOutset: true,\n borderImageSlice: true,\n borderImageWidth: true,\n boxFlex: true,\n boxFlexGroup: true,\n boxOrdinalGroup: true,\n columnCount: true,\n flex: true,\n flexGrow: true,\n flexOrder: true,\n flexPositive: true,\n flexShrink: true,\n flexNegative: true,\n fontWeight: true,\n gridRow: true,\n gridRowEnd: true,\n gridRowGap: true,\n gridRowStart: true,\n gridColumn: true,\n gridColumnEnd: true,\n gridColumnGap: true,\n gridColumnStart: true,\n lineClamp: true,\n opacity: true,\n order: true,\n orphans: true,\n tabSize: true,\n widows: true,\n zIndex: true,\n zoom: true,\n // SVG-related\n fillOpacity: true,\n floodOpacity: true,\n stopOpacity: true,\n strokeDasharray: true,\n strokeDashoffset: true,\n strokeMiterlimit: true,\n strokeOpacity: true,\n strokeWidth: true,\n // transform types\n scale: true,\n scaleX: true,\n scaleY: true,\n scaleZ: true,\n // RN properties\n shadowOpacity: true\n};\n\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\nvar prefixes = ['ms', 'Moz', 'O', 'Webkit'];\nvar prefixKey = (prefix, key) => {\n return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n};\nObject.keys(unitlessNumbers).forEach(prop => {\n prefixes.forEach(prefix => {\n unitlessNumbers[prefixKey(prefix, prop)] = unitlessNumbers[prop];\n });\n});\nexport default unitlessNumbers;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport mergeRefs from '../mergeRefs';\nexport default function useMergeRefs() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return React.useMemo(() => mergeRefs(...args),\n // eslint-disable-next-line\n [...args]);\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nexport default function mergeRefs() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return function forwardRef(node) {\n args.forEach(ref => {\n if (ref == null) {\n return;\n }\n if (typeof ref === 'function') {\n ref(node);\n return;\n }\n if (typeof ref === 'object') {\n ref.current = node;\n return;\n }\n console.error(\"mergeRefs cannot handle Refs of type boolean, number or string, received ref \" + String(ref));\n });\n };\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport UIManager from '../../exports/UIManager';\nimport useStable from '../useStable';\n\n/**\n * Adds non-standard methods to the hode element. This is temporarily until an\n * API like `ReactNative.measure(hostRef, callback)` is added to React Native.\n */\nexport default function usePlatformMethods(_ref) {\n var pointerEvents = _ref.pointerEvents,\n style = _ref.style;\n // Avoid creating a new ref on every render.\n var ref = useStable(() => hostNode => {\n if (hostNode != null) {\n hostNode.measure = callback => UIManager.measure(hostNode, callback);\n hostNode.measureLayout = (relativeToNode, success, failure) => UIManager.measureLayout(hostNode, relativeToNode, failure, success);\n hostNode.measureInWindow = callback => UIManager.measureInWindow(hostNode, callback);\n }\n });\n return ref;\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nvar UNINITIALIZED = typeof Symbol === 'function' && typeof Symbol() === 'symbol' ? Symbol() : Object.freeze({});\nexport default function useStable(getInitialValue) {\n var ref = React.useRef(UNINITIALIZED);\n if (ref.current === UNINITIALIZED) {\n ref.current = getInitialValue();\n }\n // $FlowFixMe (#64650789) Trouble refining types where `Symbol` is concerned.\n return ref.current;\n}","/**\n * Copyright (c) Nicolas Gallagher\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n/**\n * Hook for integrating the Responder System into React\n *\n * function SomeComponent({ onStartShouldSetResponder }) {\n * const ref = useRef(null);\n * useResponderEvents(ref, { onStartShouldSetResponder });\n * return
\n * }\n */\n\nimport * as React from 'react';\nimport * as ResponderSystem from './ResponderSystem';\nvar emptyObject = {};\nvar idCounter = 0;\nfunction useStable(getInitialValue) {\n var ref = React.useRef(null);\n if (ref.current == null) {\n ref.current = getInitialValue();\n }\n return ref.current;\n}\nexport default function useResponderEvents(hostRef, config) {\n if (config === void 0) {\n config = emptyObject;\n }\n var id = useStable(() => idCounter++);\n var isAttachedRef = React.useRef(false);\n\n // This is a separate effects so it doesn't run when the config changes.\n // On initial mount, attach global listeners if needed.\n // On unmount, remove node potentially attached to the Responder System.\n React.useEffect(() => {\n ResponderSystem.attachListeners();\n return () => {\n ResponderSystem.removeNode(id);\n };\n }, [id]);\n\n // Register and unregister with the Responder System as necessary\n React.useEffect(() => {\n var _config = config,\n onMoveShouldSetResponder = _config.onMoveShouldSetResponder,\n onMoveShouldSetResponderCapture = _config.onMoveShouldSetResponderCapture,\n onScrollShouldSetResponder = _config.onScrollShouldSetResponder,\n onScrollShouldSetResponderCapture = _config.onScrollShouldSetResponderCapture,\n onSelectionChangeShouldSetResponder = _config.onSelectionChangeShouldSetResponder,\n onSelectionChangeShouldSetResponderCapture = _config.onSelectionChangeShouldSetResponderCapture,\n onStartShouldSetResponder = _config.onStartShouldSetResponder,\n onStartShouldSetResponderCapture = _config.onStartShouldSetResponderCapture;\n var requiresResponderSystem = onMoveShouldSetResponder != null || onMoveShouldSetResponderCapture != null || onScrollShouldSetResponder != null || onScrollShouldSetResponderCapture != null || onSelectionChangeShouldSetResponder != null || onSelectionChangeShouldSetResponderCapture != null || onStartShouldSetResponder != null || onStartShouldSetResponderCapture != null;\n var node = hostRef.current;\n if (requiresResponderSystem) {\n ResponderSystem.addNode(id, node, config);\n isAttachedRef.current = true;\n } else if (isAttachedRef.current) {\n ResponderSystem.removeNode(id);\n isAttachedRef.current = false;\n }\n }, [config, hostRef, id]);\n React.useDebugValue({\n isResponder: hostRef.current === ResponderSystem.getResponderNode()\n });\n React.useDebugValue(config);\n}","/**\n * Copyright (c) Nicolas Gallagher\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n/**\n * RESPONDER EVENT SYSTEM\n *\n * A single, global \"interaction lock\" on views. For a view to be the \"responder\" means\n * that pointer interactions are exclusive to that view and none other. The \"interaction\n * lock\" can be transferred (only) to ancestors of the current \"responder\" as long as\n * pointers continue to be active.\n *\n * Responder being granted:\n *\n * A view can become the \"responder\" after the following events:\n * * \"pointerdown\" (implemented using \"touchstart\", \"mousedown\")\n * * \"pointermove\" (implemented using \"touchmove\", \"mousemove\")\n * * \"scroll\" (while a pointer is down)\n * * \"selectionchange\" (while a pointer is down)\n *\n * If nothing is already the \"responder\", the event propagates to (capture) and from\n * (bubble) the event target until a view returns `true` for\n * `on*ShouldSetResponder(Capture)`.\n *\n * If something is already the responder, the event propagates to (capture) and from\n * (bubble) the lowest common ancestor of the event target and the current \"responder\".\n * Then negotiation happens between the current \"responder\" and a view that wants to\n * become the \"responder\": see the timing diagram below.\n *\n * (NOTE: Scrolled views either automatically become the \"responder\" or release the\n * \"interaction lock\". A native scroll view that isn't built on top of the responder\n * system must result in the current \"responder\" being notified that it no longer has\n * the \"interaction lock\" - the native system has taken over.\n *\n * Responder being released:\n *\n * As soon as there are no more active pointers that *started* inside descendants\n * of the *current* \"responder\", an `onResponderRelease` event is dispatched to the\n * current \"responder\", and the responder lock is released.\n *\n * Typical sequence of events:\n * * startShouldSetResponder\n * * responderGrant/Reject\n * * responderStart\n * * responderMove\n * * responderEnd\n * * responderRelease\n */\n\n/* Negotiation Performed\n +-----------------------+\n / \\\nProcess low level events to + Current Responder + wantsResponderID\ndetermine who to perform negot-| (if any exists at all) |\niation/transition | Otherwise just pass through|\n-------------------------------+----------------------------+------------------+\nBubble to find first ID | |\nto return true:wantsResponderID| |\n | |\n +--------------+ | |\n | onTouchStart | | |\n +------+-------+ none | |\n | return| |\n+-----------v-------------+true| +------------------------+ |\n|onStartShouldSetResponder|----->| onResponderStart (cur) |<-----------+\n+-----------+-------------+ | +------------------------+ | |\n | | | +--------+-------+\n | returned true for| false:REJECT +-------->|onResponderReject\n | wantsResponderID | | | +----------------+\n | (now attempt | +------------------+-----+ |\n | handoff) | | onResponder | |\n +------------------->| TerminationRequest | |\n | +------------------+-----+ |\n | | | +----------------+\n | true:GRANT +-------->|onResponderGrant|\n | | +--------+-------+\n | +------------------------+ | |\n | | onResponderTerminate |<-----------+\n | +------------------+-----+ |\n | | | +----------------+\n | +-------->|onResponderStart|\n | | +----------------+\nBubble to find first ID | |\nto return true:wantsResponderID| |\n | |\n +-------------+ | |\n | onTouchMove | | |\n +------+------+ none | |\n | return| |\n+-----------v-------------+true| +------------------------+ |\n|onMoveShouldSetResponder |----->| onResponderMove (cur) |<-----------+\n+-----------+-------------+ | +------------------------+ | |\n | | | +--------+-------+\n | returned true for| false:REJECT +-------->|onResponderReject\n | wantsResponderID | | | +----------------+\n | (now attempt | +------------------+-----+ |\n | handoff) | | onResponder | |\n +------------------->| TerminationRequest| |\n | +------------------+-----+ |\n | | | +----------------+\n | true:GRANT +-------->|onResponderGrant|\n | | +--------+-------+\n | +------------------------+ | |\n | | onResponderTerminate |<-----------+\n | +------------------+-----+ |\n | | | +----------------+\n | +-------->|onResponderMove |\n | | +----------------+\n | |\n | |\n Some active touch started| |\n inside current responder | +------------------------+ |\n +------------------------->| onResponderEnd | |\n | | +------------------------+ |\n +---+---------+ | |\n | onTouchEnd | | |\n +---+---------+ | |\n | | +------------------------+ |\n +------------------------->| onResponderEnd | |\n No active touches started| +-----------+------------+ |\n inside current responder | | |\n | v |\n | +------------------------+ |\n | | onResponderRelease | |\n | +------------------------+ |\n | |\n + + */\n\nimport createResponderEvent from './createResponderEvent';\nimport { isCancelish, isEndish, isMoveish, isScroll, isSelectionChange, isStartish } from './ResponderEventTypes';\nimport { getLowestCommonAncestor, getResponderPaths, hasTargetTouches, hasValidSelection, isPrimaryPointerDown, setResponderId } from './utils';\nimport { ResponderTouchHistoryStore } from './ResponderTouchHistoryStore';\nimport canUseDOM from '../canUseDom';\n\n/* ------------ TYPES ------------ */\n\nvar emptyObject = {};\n\n/* ------------ IMPLEMENTATION ------------ */\n\nvar startRegistration = ['onStartShouldSetResponderCapture', 'onStartShouldSetResponder', {\n bubbles: true\n}];\nvar moveRegistration = ['onMoveShouldSetResponderCapture', 'onMoveShouldSetResponder', {\n bubbles: true\n}];\nvar scrollRegistration = ['onScrollShouldSetResponderCapture', 'onScrollShouldSetResponder', {\n bubbles: false\n}];\nvar shouldSetResponderEvents = {\n touchstart: startRegistration,\n mousedown: startRegistration,\n touchmove: moveRegistration,\n mousemove: moveRegistration,\n scroll: scrollRegistration\n};\nvar emptyResponder = {\n id: null,\n idPath: null,\n node: null\n};\nvar responderListenersMap = new Map();\nvar isEmulatingMouseEvents = false;\nvar trackedTouchCount = 0;\nvar currentResponder = {\n id: null,\n node: null,\n idPath: null\n};\nvar responderTouchHistoryStore = new ResponderTouchHistoryStore();\nfunction changeCurrentResponder(responder) {\n currentResponder = responder;\n}\nfunction getResponderConfig(id) {\n var config = responderListenersMap.get(id);\n return config != null ? config : emptyObject;\n}\n\n/**\n * Process native events\n *\n * A single event listener is used to manage the responder system.\n * All pointers are tracked in the ResponderTouchHistoryStore. Native events\n * are interpreted in terms of the Responder System and checked to see if\n * the responder should be transferred. Each host node that is attached to\n * the Responder System has an ID, which is used to look up its associated\n * callbacks.\n */\nfunction eventListener(domEvent) {\n var eventType = domEvent.type;\n var eventTarget = domEvent.target;\n\n /**\n * Manage emulated events and early bailout.\n * Since PointerEvent is not used yet (lack of support in older Safari), it's\n * necessary to manually manage the mess of browser touch/mouse events.\n * And bailout early for termination events when there is no active responder.\n */\n\n // Flag when browser may produce emulated events\n if (eventType === 'touchstart') {\n isEmulatingMouseEvents = true;\n }\n // Remove flag when browser will not produce emulated events\n if (eventType === 'touchmove' || trackedTouchCount > 1) {\n isEmulatingMouseEvents = false;\n }\n // Ignore various events in particular circumstances\n if (\n // Ignore browser emulated mouse events\n eventType === 'mousedown' && isEmulatingMouseEvents || eventType === 'mousemove' && isEmulatingMouseEvents ||\n // Ignore mousemove if a mousedown didn't occur first\n eventType === 'mousemove' && trackedTouchCount < 1) {\n return;\n }\n // Remove flag after emulated events are finished\n if (isEmulatingMouseEvents && eventType === 'mouseup') {\n if (trackedTouchCount === 0) {\n isEmulatingMouseEvents = false;\n }\n return;\n }\n var isStartEvent = isStartish(eventType) && isPrimaryPointerDown(domEvent);\n var isMoveEvent = isMoveish(eventType);\n var isEndEvent = isEndish(eventType);\n var isScrollEvent = isScroll(eventType);\n var isSelectionChangeEvent = isSelectionChange(eventType);\n var responderEvent = createResponderEvent(domEvent, responderTouchHistoryStore);\n\n /**\n * Record the state of active pointers\n */\n\n if (isStartEvent || isMoveEvent || isEndEvent) {\n if (domEvent.touches) {\n trackedTouchCount = domEvent.touches.length;\n } else {\n if (isStartEvent) {\n trackedTouchCount = 1;\n } else if (isEndEvent) {\n trackedTouchCount = 0;\n }\n }\n responderTouchHistoryStore.recordTouchTrack(eventType, responderEvent.nativeEvent);\n }\n\n /**\n * Responder System logic\n */\n\n var eventPaths = getResponderPaths(domEvent);\n var wasNegotiated = false;\n var wantsResponder;\n\n // If an event occured that might change the current responder...\n if (isStartEvent || isMoveEvent || isScrollEvent && trackedTouchCount > 0) {\n // If there is already a responder, prune the event paths to the lowest common ancestor\n // of the existing responder and deepest target of the event.\n var currentResponderIdPath = currentResponder.idPath;\n var eventIdPath = eventPaths.idPath;\n if (currentResponderIdPath != null && eventIdPath != null) {\n var lowestCommonAncestor = getLowestCommonAncestor(currentResponderIdPath, eventIdPath);\n if (lowestCommonAncestor != null) {\n var indexOfLowestCommonAncestor = eventIdPath.indexOf(lowestCommonAncestor);\n // Skip the current responder so it doesn't receive unexpected \"shouldSet\" events.\n var index = indexOfLowestCommonAncestor + (lowestCommonAncestor === currentResponder.id ? 1 : 0);\n eventPaths = {\n idPath: eventIdPath.slice(index),\n nodePath: eventPaths.nodePath.slice(index)\n };\n } else {\n eventPaths = null;\n }\n }\n if (eventPaths != null) {\n // If a node wants to become the responder, attempt to transfer.\n wantsResponder = findWantsResponder(eventPaths, domEvent, responderEvent);\n if (wantsResponder != null) {\n // Sets responder if none exists, or negotates with existing responder.\n attemptTransfer(responderEvent, wantsResponder);\n wasNegotiated = true;\n }\n }\n }\n\n // If there is now a responder, invoke its callbacks for the lifecycle of the gesture.\n if (currentResponder.id != null && currentResponder.node != null) {\n var _currentResponder = currentResponder,\n id = _currentResponder.id,\n node = _currentResponder.node;\n var _getResponderConfig = getResponderConfig(id),\n onResponderStart = _getResponderConfig.onResponderStart,\n onResponderMove = _getResponderConfig.onResponderMove,\n onResponderEnd = _getResponderConfig.onResponderEnd,\n onResponderRelease = _getResponderConfig.onResponderRelease,\n onResponderTerminate = _getResponderConfig.onResponderTerminate,\n onResponderTerminationRequest = _getResponderConfig.onResponderTerminationRequest;\n responderEvent.bubbles = false;\n responderEvent.cancelable = false;\n responderEvent.currentTarget = node;\n\n // Start\n if (isStartEvent) {\n if (onResponderStart != null) {\n responderEvent.dispatchConfig.registrationName = 'onResponderStart';\n onResponderStart(responderEvent);\n }\n }\n // Move\n else if (isMoveEvent) {\n if (onResponderMove != null) {\n responderEvent.dispatchConfig.registrationName = 'onResponderMove';\n onResponderMove(responderEvent);\n }\n } else {\n var isTerminateEvent = isCancelish(eventType) ||\n // native context menu\n eventType === 'contextmenu' ||\n // window blur\n eventType === 'blur' && eventTarget === window ||\n // responder (or ancestors) blur\n eventType === 'blur' && eventTarget.contains(node) && domEvent.relatedTarget !== node ||\n // native scroll without using a pointer\n isScrollEvent && trackedTouchCount === 0 ||\n // native scroll on node that is parent of the responder (allow siblings to scroll)\n isScrollEvent && eventTarget.contains(node) && eventTarget !== node ||\n // native select/selectionchange on node\n isSelectionChangeEvent && hasValidSelection(domEvent);\n var isReleaseEvent = isEndEvent && !isTerminateEvent && !hasTargetTouches(node, domEvent.touches);\n\n // End\n if (isEndEvent) {\n if (onResponderEnd != null) {\n responderEvent.dispatchConfig.registrationName = 'onResponderEnd';\n onResponderEnd(responderEvent);\n }\n }\n // Release\n if (isReleaseEvent) {\n if (onResponderRelease != null) {\n responderEvent.dispatchConfig.registrationName = 'onResponderRelease';\n onResponderRelease(responderEvent);\n }\n changeCurrentResponder(emptyResponder);\n }\n // Terminate\n if (isTerminateEvent) {\n var shouldTerminate = true;\n\n // Responders can still avoid termination but only for these events.\n if (eventType === 'contextmenu' || eventType === 'scroll' || eventType === 'selectionchange') {\n // Only call this function is it wasn't already called during negotiation.\n if (wasNegotiated) {\n shouldTerminate = false;\n } else if (onResponderTerminationRequest != null) {\n responderEvent.dispatchConfig.registrationName = 'onResponderTerminationRequest';\n if (onResponderTerminationRequest(responderEvent) === false) {\n shouldTerminate = false;\n }\n }\n }\n if (shouldTerminate) {\n if (onResponderTerminate != null) {\n responderEvent.dispatchConfig.registrationName = 'onResponderTerminate';\n onResponderTerminate(responderEvent);\n }\n changeCurrentResponder(emptyResponder);\n isEmulatingMouseEvents = false;\n trackedTouchCount = 0;\n }\n }\n }\n }\n}\n\n/**\n * Walk the event path to/from the target node. At each node, stop and call the\n * relevant \"shouldSet\" functions for the given event type. If any of those functions\n * call \"stopPropagation\" on the event, stop searching for a responder.\n */\nfunction findWantsResponder(eventPaths, domEvent, responderEvent) {\n var shouldSetCallbacks = shouldSetResponderEvents[domEvent.type]; // for Flow\n\n if (shouldSetCallbacks != null) {\n var idPath = eventPaths.idPath,\n nodePath = eventPaths.nodePath;\n var shouldSetCallbackCaptureName = shouldSetCallbacks[0];\n var shouldSetCallbackBubbleName = shouldSetCallbacks[1];\n var bubbles = shouldSetCallbacks[2].bubbles;\n var check = function check(id, node, callbackName) {\n var config = getResponderConfig(id);\n var shouldSetCallback = config[callbackName];\n if (shouldSetCallback != null) {\n responderEvent.currentTarget = node;\n if (shouldSetCallback(responderEvent) === true) {\n // Start the path from the potential responder\n var prunedIdPath = idPath.slice(idPath.indexOf(id));\n return {\n id,\n node,\n idPath: prunedIdPath\n };\n }\n }\n };\n\n // capture\n for (var i = idPath.length - 1; i >= 0; i--) {\n var id = idPath[i];\n var node = nodePath[i];\n var result = check(id, node, shouldSetCallbackCaptureName);\n if (result != null) {\n return result;\n }\n if (responderEvent.isPropagationStopped() === true) {\n return;\n }\n }\n\n // bubble\n if (bubbles) {\n for (var _i = 0; _i < idPath.length; _i++) {\n var _id = idPath[_i];\n var _node = nodePath[_i];\n var _result = check(_id, _node, shouldSetCallbackBubbleName);\n if (_result != null) {\n return _result;\n }\n if (responderEvent.isPropagationStopped() === true) {\n return;\n }\n }\n } else {\n var _id2 = idPath[0];\n var _node2 = nodePath[0];\n var target = domEvent.target;\n if (target === _node2) {\n return check(_id2, _node2, shouldSetCallbackBubbleName);\n }\n }\n }\n}\n\n/**\n * Attempt to transfer the responder.\n */\nfunction attemptTransfer(responderEvent, wantsResponder) {\n var _currentResponder2 = currentResponder,\n currentId = _currentResponder2.id,\n currentNode = _currentResponder2.node;\n var id = wantsResponder.id,\n node = wantsResponder.node;\n var _getResponderConfig2 = getResponderConfig(id),\n onResponderGrant = _getResponderConfig2.onResponderGrant,\n onResponderReject = _getResponderConfig2.onResponderReject;\n responderEvent.bubbles = false;\n responderEvent.cancelable = false;\n responderEvent.currentTarget = node;\n\n // Set responder\n if (currentId == null) {\n if (onResponderGrant != null) {\n responderEvent.currentTarget = node;\n responderEvent.dispatchConfig.registrationName = 'onResponderGrant';\n onResponderGrant(responderEvent);\n }\n changeCurrentResponder(wantsResponder);\n }\n // Negotiate with current responder\n else {\n var _getResponderConfig3 = getResponderConfig(currentId),\n onResponderTerminate = _getResponderConfig3.onResponderTerminate,\n onResponderTerminationRequest = _getResponderConfig3.onResponderTerminationRequest;\n var allowTransfer = true;\n if (onResponderTerminationRequest != null) {\n responderEvent.currentTarget = currentNode;\n responderEvent.dispatchConfig.registrationName = 'onResponderTerminationRequest';\n if (onResponderTerminationRequest(responderEvent) === false) {\n allowTransfer = false;\n }\n }\n if (allowTransfer) {\n // Terminate existing responder\n if (onResponderTerminate != null) {\n responderEvent.currentTarget = currentNode;\n responderEvent.dispatchConfig.registrationName = 'onResponderTerminate';\n onResponderTerminate(responderEvent);\n }\n // Grant next responder\n if (onResponderGrant != null) {\n responderEvent.currentTarget = node;\n responderEvent.dispatchConfig.registrationName = 'onResponderGrant';\n onResponderGrant(responderEvent);\n }\n changeCurrentResponder(wantsResponder);\n } else {\n // Reject responder request\n if (onResponderReject != null) {\n responderEvent.currentTarget = node;\n responderEvent.dispatchConfig.registrationName = 'onResponderReject';\n onResponderReject(responderEvent);\n }\n }\n }\n}\n\n/* ------------ PUBLIC API ------------ */\n\n/**\n * Attach Listeners\n *\n * Use native events as ReactDOM doesn't have a non-plugin API to implement\n * this system.\n */\nvar documentEventsCapturePhase = ['blur', 'scroll'];\nvar documentEventsBubblePhase = [\n// mouse\n'mousedown', 'mousemove', 'mouseup', 'dragstart',\n// touch\n'touchstart', 'touchmove', 'touchend', 'touchcancel',\n// other\n'contextmenu', 'select', 'selectionchange'];\nexport function attachListeners() {\n if (canUseDOM && window.__reactResponderSystemActive == null) {\n window.addEventListener('blur', eventListener);\n documentEventsBubblePhase.forEach(eventType => {\n document.addEventListener(eventType, eventListener);\n });\n documentEventsCapturePhase.forEach(eventType => {\n document.addEventListener(eventType, eventListener, true);\n });\n window.__reactResponderSystemActive = true;\n }\n}\n\n/**\n * Register a node with the ResponderSystem.\n */\nexport function addNode(id, node, config) {\n setResponderId(node, id);\n responderListenersMap.set(id, config);\n}\n\n/**\n * Unregister a node with the ResponderSystem.\n */\nexport function removeNode(id) {\n if (currentResponder.id === id) {\n terminateResponder();\n }\n if (responderListenersMap.has(id)) {\n responderListenersMap.delete(id);\n }\n}\n\n/**\n * Allow the current responder to be terminated from within components to support\n * more complex requirements, such as use with other React libraries for working\n * with scroll views, input views, etc.\n */\nexport function terminateResponder() {\n var _currentResponder3 = currentResponder,\n id = _currentResponder3.id,\n node = _currentResponder3.node;\n if (id != null && node != null) {\n var _getResponderConfig4 = getResponderConfig(id),\n onResponderTerminate = _getResponderConfig4.onResponderTerminate;\n if (onResponderTerminate != null) {\n var event = createResponderEvent({}, responderTouchHistoryStore);\n event.currentTarget = node;\n onResponderTerminate(event);\n }\n changeCurrentResponder(emptyResponder);\n }\n isEmulatingMouseEvents = false;\n trackedTouchCount = 0;\n}\n\n/**\n * Allow unit tests to inspect the current responder in the system.\n * FOR TESTING ONLY.\n */\nexport function getResponderNode() {\n return currentResponder.node;\n}","/**\n * Copyright (c) Nicolas Gallagher\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport getBoundingClientRect from '../../modules/getBoundingClientRect';\nvar emptyFunction = () => {};\nvar emptyObject = {};\nvar emptyArray = [];\n\n/**\n * Safari produces very large identifiers that would cause the `touchBank` array\n * length to be so large as to crash the browser, if not normalized like this.\n * In the future the `touchBank` should use an object/map instead.\n */\nfunction normalizeIdentifier(identifier) {\n return identifier > 20 ? identifier % 20 : identifier;\n}\n\n/**\n * Converts a native DOM event to a ResponderEvent.\n * Mouse events are transformed into fake touch events.\n */\nexport default function createResponderEvent(domEvent, responderTouchHistoryStore) {\n var rect;\n var propagationWasStopped = false;\n var changedTouches;\n var touches;\n var domEventChangedTouches = domEvent.changedTouches;\n var domEventType = domEvent.type;\n var metaKey = domEvent.metaKey === true;\n var shiftKey = domEvent.shiftKey === true;\n var force = domEventChangedTouches && domEventChangedTouches[0].force || 0;\n var identifier = normalizeIdentifier(domEventChangedTouches && domEventChangedTouches[0].identifier || 0);\n var clientX = domEventChangedTouches && domEventChangedTouches[0].clientX || domEvent.clientX;\n var clientY = domEventChangedTouches && domEventChangedTouches[0].clientY || domEvent.clientY;\n var pageX = domEventChangedTouches && domEventChangedTouches[0].pageX || domEvent.pageX;\n var pageY = domEventChangedTouches && domEventChangedTouches[0].pageY || domEvent.pageY;\n var preventDefault = typeof domEvent.preventDefault === 'function' ? domEvent.preventDefault.bind(domEvent) : emptyFunction;\n var timestamp = domEvent.timeStamp;\n function normalizeTouches(touches) {\n return Array.prototype.slice.call(touches).map(touch => {\n return {\n force: touch.force,\n identifier: normalizeIdentifier(touch.identifier),\n get locationX() {\n return locationX(touch.clientX);\n },\n get locationY() {\n return locationY(touch.clientY);\n },\n pageX: touch.pageX,\n pageY: touch.pageY,\n target: touch.target,\n timestamp\n };\n });\n }\n if (domEventChangedTouches != null) {\n changedTouches = normalizeTouches(domEventChangedTouches);\n touches = normalizeTouches(domEvent.touches);\n } else {\n var emulatedTouches = [{\n force,\n identifier,\n get locationX() {\n return locationX(clientX);\n },\n get locationY() {\n return locationY(clientY);\n },\n pageX,\n pageY,\n target: domEvent.target,\n timestamp\n }];\n changedTouches = emulatedTouches;\n touches = domEventType === 'mouseup' || domEventType === 'dragstart' ? emptyArray : emulatedTouches;\n }\n var responderEvent = {\n bubbles: true,\n cancelable: true,\n // `currentTarget` is set before dispatch\n currentTarget: null,\n defaultPrevented: domEvent.defaultPrevented,\n dispatchConfig: emptyObject,\n eventPhase: domEvent.eventPhase,\n isDefaultPrevented() {\n return domEvent.defaultPrevented;\n },\n isPropagationStopped() {\n return propagationWasStopped;\n },\n isTrusted: domEvent.isTrusted,\n nativeEvent: {\n altKey: false,\n ctrlKey: false,\n metaKey,\n shiftKey,\n changedTouches,\n force,\n identifier,\n get locationX() {\n return locationX(clientX);\n },\n get locationY() {\n return locationY(clientY);\n },\n pageX,\n pageY,\n target: domEvent.target,\n timestamp,\n touches,\n type: domEventType\n },\n persist: emptyFunction,\n preventDefault,\n stopPropagation() {\n propagationWasStopped = true;\n },\n target: domEvent.target,\n timeStamp: timestamp,\n touchHistory: responderTouchHistoryStore.touchHistory\n };\n\n // Using getters and functions serves two purposes:\n // 1) The value of `currentTarget` is not initially available.\n // 2) Measuring the clientRect may cause layout jank and should only be done on-demand.\n function locationX(x) {\n rect = rect || getBoundingClientRect(responderEvent.currentTarget);\n if (rect) {\n return x - rect.left;\n }\n }\n function locationY(y) {\n rect = rect || getBoundingClientRect(responderEvent.currentTarget);\n if (rect) {\n return y - rect.top;\n }\n }\n return responderEvent;\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar getBoundingClientRect = node => {\n if (node != null) {\n var isElement = node.nodeType === 1; /* Node.ELEMENT_NODE */\n if (isElement && typeof node.getBoundingClientRect === 'function') {\n return node.getBoundingClientRect();\n }\n }\n};\nexport default getBoundingClientRect;","/**\n * Copyright (c) Nicolas Gallagher\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nexport var BLUR = 'blur';\nexport var CONTEXT_MENU = 'contextmenu';\nexport var FOCUS_OUT = 'focusout';\nexport var MOUSE_DOWN = 'mousedown';\nexport var MOUSE_MOVE = 'mousemove';\nexport var MOUSE_UP = 'mouseup';\nexport var MOUSE_CANCEL = 'dragstart';\nexport var TOUCH_START = 'touchstart';\nexport var TOUCH_MOVE = 'touchmove';\nexport var TOUCH_END = 'touchend';\nexport var TOUCH_CANCEL = 'touchcancel';\nexport var SCROLL = 'scroll';\nexport var SELECT = 'select';\nexport var SELECTION_CHANGE = 'selectionchange';\nexport function isStartish(eventType) {\n return eventType === TOUCH_START || eventType === MOUSE_DOWN;\n}\nexport function isMoveish(eventType) {\n return eventType === TOUCH_MOVE || eventType === MOUSE_MOVE;\n}\nexport function isEndish(eventType) {\n return eventType === TOUCH_END || eventType === MOUSE_UP || isCancelish(eventType);\n}\nexport function isCancelish(eventType) {\n return eventType === TOUCH_CANCEL || eventType === MOUSE_CANCEL;\n}\nexport function isScroll(eventType) {\n return eventType === SCROLL;\n}\nexport function isSelectionChange(eventType) {\n return eventType === SELECT || eventType === SELECTION_CHANGE;\n}","/**\n * Copyright (c) Nicolas Gallagher\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport isSelectionValid from '../../modules/isSelectionValid';\nvar keyName = '__reactResponderId';\nfunction getEventPath(domEvent) {\n // The 'selectionchange' event always has the 'document' as the target.\n // Use the anchor node as the initial target to reconstruct a path.\n // (We actually only need the first \"responder\" node in practice.)\n if (domEvent.type === 'selectionchange') {\n var target = window.getSelection().anchorNode;\n return composedPathFallback(target);\n } else {\n var path = domEvent.composedPath != null ? domEvent.composedPath() : composedPathFallback(domEvent.target);\n return path;\n }\n}\nfunction composedPathFallback(target) {\n var path = [];\n while (target != null && target !== document.body) {\n path.push(target);\n target = target.parentNode;\n }\n return path;\n}\n\n/**\n * Retrieve the responderId from a host node\n */\nfunction getResponderId(node) {\n if (node != null) {\n return node[keyName];\n }\n return null;\n}\n\n/**\n * Store the responderId on a host node\n */\nexport function setResponderId(node, id) {\n if (node != null) {\n node[keyName] = id;\n }\n}\n\n/**\n * Filter the event path to contain only the nodes attached to the responder system\n */\nexport function getResponderPaths(domEvent) {\n var idPath = [];\n var nodePath = [];\n var eventPath = getEventPath(domEvent);\n for (var i = 0; i < eventPath.length; i++) {\n var node = eventPath[i];\n var id = getResponderId(node);\n if (id != null) {\n idPath.push(id);\n nodePath.push(node);\n }\n }\n return {\n idPath,\n nodePath\n };\n}\n\n/**\n * Walk the paths and find the first common ancestor\n */\nexport function getLowestCommonAncestor(pathA, pathB) {\n var pathALength = pathA.length;\n var pathBLength = pathB.length;\n if (\n // If either path is empty\n pathALength === 0 || pathBLength === 0 ||\n // If the last elements aren't the same there can't be a common ancestor\n // that is connected to the responder system\n pathA[pathALength - 1] !== pathB[pathBLength - 1]) {\n return null;\n }\n var itemA = pathA[0];\n var indexA = 0;\n var itemB = pathB[0];\n var indexB = 0;\n\n // If A is deeper, skip indices that can't match.\n if (pathALength - pathBLength > 0) {\n indexA = pathALength - pathBLength;\n itemA = pathA[indexA];\n pathALength = pathBLength;\n }\n\n // If B is deeper, skip indices that can't match\n if (pathBLength - pathALength > 0) {\n indexB = pathBLength - pathALength;\n itemB = pathB[indexB];\n pathBLength = pathALength;\n }\n\n // Walk in lockstep until a match is found\n var depth = pathALength;\n while (depth--) {\n if (itemA === itemB) {\n return itemA;\n }\n itemA = pathA[indexA++];\n itemB = pathB[indexB++];\n }\n return null;\n}\n\n/**\n * Determine whether any of the active touches are within the current responder.\n * This cannot rely on W3C `targetTouches`, as neither IE11 nor Safari implement it.\n */\nexport function hasTargetTouches(target, touches) {\n if (!touches || touches.length === 0) {\n return false;\n }\n for (var i = 0; i < touches.length; i++) {\n var node = touches[i].target;\n if (node != null) {\n if (target.contains(node)) {\n return true;\n }\n }\n }\n return false;\n}\n\n/**\n * Ignore 'selectionchange' events that don't correspond with a person's intent to\n * select text.\n */\nexport function hasValidSelection(domEvent) {\n if (domEvent.type === 'selectionchange') {\n return isSelectionValid();\n }\n return domEvent.type === 'select';\n}\n\n/**\n * Events are only valid if the primary button was used without specific modifier keys.\n */\nexport function isPrimaryPointerDown(domEvent) {\n var altKey = domEvent.altKey,\n button = domEvent.button,\n buttons = domEvent.buttons,\n ctrlKey = domEvent.ctrlKey,\n type = domEvent.type;\n var isTouch = type === 'touchstart' || type === 'touchmove';\n var isPrimaryMouseDown = type === 'mousedown' && (button === 0 || buttons === 1);\n var isPrimaryMouseMove = type === 'mousemove' && buttons === 1;\n var noModifiers = altKey === false && ctrlKey === false;\n if (isTouch || isPrimaryMouseDown && noModifiers || isPrimaryMouseMove && noModifiers) {\n return true;\n }\n return false;\n}","/**\n * Copyright (c) Nicolas Gallagher\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nexport default function isSelectionValid() {\n var selection = window.getSelection();\n var string = selection.toString();\n var anchorNode = selection.anchorNode;\n var focusNode = selection.focusNode;\n var isTextNode = anchorNode && anchorNode.nodeType === window.Node.TEXT_NODE || focusNode && focusNode.nodeType === window.Node.TEXT_NODE;\n return string.length >= 1 && string !== '\\n' && isTextNode;\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { isStartish, isMoveish, isEndish } from './ResponderEventTypes';\n/**\n * Tracks the position and time of each active touch by `touch.identifier`. We\n * should typically only see IDs in the range of 1-20 because IDs get recycled\n * when touches end and start again.\n */\n\nvar __DEV__ = process.env.NODE_ENV !== 'production';\nvar MAX_TOUCH_BANK = 20;\nfunction timestampForTouch(touch) {\n // The legacy internal implementation provides \"timeStamp\", which has been\n // renamed to \"timestamp\".\n return touch.timeStamp || touch.timestamp;\n}\n\n/**\n * TODO: Instead of making gestures recompute filtered velocity, we could\n * include a built in velocity computation that can be reused globally.\n */\nfunction createTouchRecord(touch) {\n return {\n touchActive: true,\n startPageX: touch.pageX,\n startPageY: touch.pageY,\n startTimeStamp: timestampForTouch(touch),\n currentPageX: touch.pageX,\n currentPageY: touch.pageY,\n currentTimeStamp: timestampForTouch(touch),\n previousPageX: touch.pageX,\n previousPageY: touch.pageY,\n previousTimeStamp: timestampForTouch(touch)\n };\n}\nfunction resetTouchRecord(touchRecord, touch) {\n touchRecord.touchActive = true;\n touchRecord.startPageX = touch.pageX;\n touchRecord.startPageY = touch.pageY;\n touchRecord.startTimeStamp = timestampForTouch(touch);\n touchRecord.currentPageX = touch.pageX;\n touchRecord.currentPageY = touch.pageY;\n touchRecord.currentTimeStamp = timestampForTouch(touch);\n touchRecord.previousPageX = touch.pageX;\n touchRecord.previousPageY = touch.pageY;\n touchRecord.previousTimeStamp = timestampForTouch(touch);\n}\nfunction getTouchIdentifier(_ref) {\n var identifier = _ref.identifier;\n if (identifier == null) {\n console.error('Touch object is missing identifier.');\n }\n if (__DEV__) {\n if (identifier > MAX_TOUCH_BANK) {\n console.error('Touch identifier %s is greater than maximum supported %s which causes ' + 'performance issues backfilling array locations for all of the indices.', identifier, MAX_TOUCH_BANK);\n }\n }\n return identifier;\n}\nfunction recordTouchStart(touch, touchHistory) {\n var identifier = getTouchIdentifier(touch);\n var touchRecord = touchHistory.touchBank[identifier];\n if (touchRecord) {\n resetTouchRecord(touchRecord, touch);\n } else {\n touchHistory.touchBank[identifier] = createTouchRecord(touch);\n }\n touchHistory.mostRecentTimeStamp = timestampForTouch(touch);\n}\nfunction recordTouchMove(touch, touchHistory) {\n var touchRecord = touchHistory.touchBank[getTouchIdentifier(touch)];\n if (touchRecord) {\n touchRecord.touchActive = true;\n touchRecord.previousPageX = touchRecord.currentPageX;\n touchRecord.previousPageY = touchRecord.currentPageY;\n touchRecord.previousTimeStamp = touchRecord.currentTimeStamp;\n touchRecord.currentPageX = touch.pageX;\n touchRecord.currentPageY = touch.pageY;\n touchRecord.currentTimeStamp = timestampForTouch(touch);\n touchHistory.mostRecentTimeStamp = timestampForTouch(touch);\n } else {\n console.warn('Cannot record touch move without a touch start.\\n', \"Touch Move: \" + printTouch(touch) + \"\\n\", \"Touch Bank: \" + printTouchBank(touchHistory));\n }\n}\nfunction recordTouchEnd(touch, touchHistory) {\n var touchRecord = touchHistory.touchBank[getTouchIdentifier(touch)];\n if (touchRecord) {\n touchRecord.touchActive = false;\n touchRecord.previousPageX = touchRecord.currentPageX;\n touchRecord.previousPageY = touchRecord.currentPageY;\n touchRecord.previousTimeStamp = touchRecord.currentTimeStamp;\n touchRecord.currentPageX = touch.pageX;\n touchRecord.currentPageY = touch.pageY;\n touchRecord.currentTimeStamp = timestampForTouch(touch);\n touchHistory.mostRecentTimeStamp = timestampForTouch(touch);\n } else {\n console.warn('Cannot record touch end without a touch start.\\n', \"Touch End: \" + printTouch(touch) + \"\\n\", \"Touch Bank: \" + printTouchBank(touchHistory));\n }\n}\nfunction printTouch(touch) {\n return JSON.stringify({\n identifier: touch.identifier,\n pageX: touch.pageX,\n pageY: touch.pageY,\n timestamp: timestampForTouch(touch)\n });\n}\nfunction printTouchBank(touchHistory) {\n var touchBank = touchHistory.touchBank;\n var printed = JSON.stringify(touchBank.slice(0, MAX_TOUCH_BANK));\n if (touchBank.length > MAX_TOUCH_BANK) {\n printed += ' (original size: ' + touchBank.length + ')';\n }\n return printed;\n}\nexport class ResponderTouchHistoryStore {\n constructor() {\n this._touchHistory = {\n touchBank: [],\n //Array\n numberActiveTouches: 0,\n // If there is only one active touch, we remember its location. This prevents\n // us having to loop through all of the touches all the time in the most\n // common case.\n indexOfSingleActiveTouch: -1,\n mostRecentTimeStamp: 0\n };\n }\n recordTouchTrack(topLevelType, nativeEvent) {\n var touchHistory = this._touchHistory;\n if (isMoveish(topLevelType)) {\n nativeEvent.changedTouches.forEach(touch => recordTouchMove(touch, touchHistory));\n } else if (isStartish(topLevelType)) {\n nativeEvent.changedTouches.forEach(touch => recordTouchStart(touch, touchHistory));\n touchHistory.numberActiveTouches = nativeEvent.touches.length;\n if (touchHistory.numberActiveTouches === 1) {\n touchHistory.indexOfSingleActiveTouch = nativeEvent.touches[0].identifier;\n }\n } else if (isEndish(topLevelType)) {\n nativeEvent.changedTouches.forEach(touch => recordTouchEnd(touch, touchHistory));\n touchHistory.numberActiveTouches = nativeEvent.touches.length;\n if (touchHistory.numberActiveTouches === 1) {\n var touchBank = touchHistory.touchBank;\n for (var i = 0; i < touchBank.length; i++) {\n var touchTrackToCheck = touchBank[i];\n if (touchTrackToCheck != null && touchTrackToCheck.touchActive) {\n touchHistory.indexOfSingleActiveTouch = i;\n break;\n }\n }\n if (__DEV__) {\n var activeRecord = touchBank[touchHistory.indexOfSingleActiveTouch];\n if (!(activeRecord != null && activeRecord.touchActive)) {\n console.error('Cannot find single active touch.');\n }\n }\n }\n }\n }\n get touchHistory() {\n return this._touchHistory;\n }\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { createContext } from 'react';\nvar TextAncestorContext = /*#__PURE__*/createContext(false);\nexport default TextAncestorContext;","import * as React from 'react';\nimport { StyleSheet, View, useWindowDimensions } from 'react-native';\nimport { NavigationContainer } from '@react-navigation/native';\nimport { MainStack } from \"./MainStack\";\nimport { AppContext } from \"../context/AppContext\";\nimport * as AppConstants from \"../context/AppConstants\";\nimport * as AppUtilities from \"../context/AppUtilities\";\nimport { CustomKeyboardAvoidingView } from \"../components/CustomKeyboardAvoidingView\";\nimport { CustomActivityIndicator } from \"../components/CustomActivityIndicator\";\nimport { Search } from \"../components/Search\";\nimport * as eva from '@eva-design/eva';\nimport { ApplicationProvider, IconRegistry, Modal } from '@ui-kitten/components';\nimport { Snackbar, Provider as PaperProvider } from 'react-native-paper';\nimport * as StatusBar from 'expo-status-bar';\nimport * as AppState from \"../context/AppState\";\nimport { ChangeFilter } from '../components/ChangeFilter';\nimport { Subscribe } from '../components/Subscribe';\nimport { EvaIconsPack } from '@ui-kitten/eva-icons';\n\nconst TEMPORARY_SNACK_DEFAULT_DURATION = 7000;\n\nconst styles = StyleSheet.create({\n modal: {\n alignSelf: \"center\",\n backgroundColor: \"white\",\n padding: 20,\n borderRadius: 2,\n shadowColor: \"rgba(0, 0, 0, 0.3)\",\n shadowOffset: {width: 1, height: 1},\n },\n backdrop: {\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n },\n image: {\n width: 24,\n height: 24,\n },\n radioText: {\n fontWeight: \"bold\",\n },\n line: {\n paddingBottom: 15,\n flexWrap: \"wrap\",\n flexDirection: \"row\",\n alignItems: \"center\",\n },\n toggle: {\n marginVertical: 10,\n marginRight: 10,\n },\n});\n\nconst REACT_NATIVE_NAVIGATION_CONFIG = {\n screens: {\n [AppConstants.SCREENS.HOME]: {\n screens: {\n [AppConstants.SCREENS.MAP_STACK]: {\n initialRouteName: AppConstants.SCREENS.MAP,\n screens: {\n [AppConstants.SCREENS.MAP]: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.MAP],\n [AppConstants.SCREENS.LOCATION_DETAILS]: {\n path: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.LOCATION_DETAILS],\n parse: {\n locationid: (locationid) => parseInt(locationid),\n },\n stringify: {\n locationid: (locationid) => \"\" + locationid,\n },\n },\n [AppConstants.SCREENS.PRODUCT_DETAILS]: {\n path: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.PRODUCT_DETAILS],\n parse: {\n productid: (productid) => parseInt(productid),\n },\n stringify: {\n productid: (productid) => \"\" + productid,\n },\n },\n [AppConstants.SCREENS.FILTER_MAP]: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.FILTER_MAP],\n }\n },\n [AppConstants.SCREENS.DELIVERY_STACK]: {\n initialRouteName: AppConstants.SCREENS.DELIVERY,\n screens: {\n [AppConstants.SCREENS.DELIVERY]: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.DELIVERY],\n [AppConstants.SCREENS.LOCATION_ONLINE_DETAILS]: {\n path: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.LOCATION_ONLINE_DETAILS],\n parse: {\n locationid: (locationid) => parseInt(locationid),\n },\n stringify: {\n locationid: (locationid) => \"\" + locationid,\n },\n },\n [AppConstants.SCREENS.PRODUCT_ONLINE_DETAILS]: {\n path: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.PRODUCT_ONLINE_DETAILS],\n parse: {\n productid: (productid) => parseInt(productid),\n },\n stringify: {\n productid: (productid) => \"\" + productid,\n },\n },\n }\n },\n [AppConstants.SCREENS.EXPLORE_STACK]: {\n screens: {\n [AppConstants.SCREENS.EXPLORE]: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.EXPLORE],\n [AppConstants.SCREENS.PRODUCT_EXPLORE_DETAILS]: {\n path: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.PRODUCT_EXPLORE_DETAILS],\n parse: {\n productid: (productid) => parseInt(productid),\n },\n stringify: {\n productid: (productid) => \"\" + productid,\n },\n },\n },\n },\n [AppConstants.SCREENS.SUGGEST_STACK]: {\n screens: {\n [AppConstants.SCREENS.ADD_LOCATION]: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.ADD_LOCATION],\n }\n },\n [AppConstants.SCREENS.MORE_STACK]: {\n initialRouteName: AppConstants.SCREENS.MORE,\n screens: {\n [AppConstants.SCREENS.MORE]: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.MORE],\n [AppConstants.SCREENS.FAQ]: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.FAQ],\n [AppConstants.SCREENS.LEARN]: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.LEARN],\n [AppConstants.SCREENS.CREDITS]: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.CREDITS],\n [AppConstants.SCREENS.MORE_CONTACT]: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.MORE_CONTACT],\n [AppConstants.SCREENS.MORE_SUBSCRIBE]: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.MORE_SUBSCRIBE],\n [AppConstants.SCREENS.MORE_ABOUT]: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.MORE_ABOUT],\n [AppConstants.SCREENS.MORE_PRIVACY]: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.MORE_PRIVACY],\n [AppConstants.SCREENS.MORE_TERMS]: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.MORE_TERMS],\n [AppConstants.SCREENS.MORE_SUGGEST_LOCATION]: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.MORE_SUGGEST_LOCATION],\n [AppConstants.SCREENS.MORE_LIST_LOCATIONS_NEAR]: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.MORE_LIST_LOCATIONS_NEAR],\n [AppConstants.SCREENS.LOCATION_LIST_DETAILS]: {\n path: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.LOCATION_LIST_DETAILS],\n parse: {\n locationid: (locationid) => parseInt(locationid),\n },\n stringify: {\n locationid: (locationid) => \"\" + locationid,\n },\n },\n [AppConstants.SCREENS.MORE_DEBUG]: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.MORE_DEBUG],\n [AppConstants.SCREENS.MORE_NEWS]: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.MORE_NEWS],\n [AppConstants.SCREENS.MORE_TEST]: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.MORE_TEST],\n [AppConstants.SCREENS.ALL_PRODUCTS]: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.ALL_PRODUCTS],\n [AppConstants.SCREENS.ALL_PRODUCERS]: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.ALL_PRODUCERS],\n [AppConstants.SCREENS.FILTER]: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.FILTER],\n [AppConstants.SCREENS.PRODUCTS_ALL_DETAILS]: {\n path: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.PRODUCTS_ALL_DETAILS],\n parse: {\n productid: (productid) => parseInt(productid),\n },\n stringify: {\n productid: (productid) => \"\" + productid,\n },\n },\n }\n }\n }\n },\n [AppConstants.SCREENS.SEARCH]: AppConstants.SCREEN_LINKS[AppConstants.SCREENS.SEARCH],\n }\n};\n\n// jq .components.Toggle node_modules/@eva-design/eva/mapping.json\nconst UIKittenToggleSizeMedium = {\n width: 39,\n height: 24,\n borderRadius: 12,\n\n thumbWidth: 20,\n thumbHeight: 20,\n thumbBorderRadius: 10,\n\n outlineWidth: 39,\n outlineHeight: 24,\n outlineBorderRadius: 12,\n\n textMarginHorizontal: 12,\n\n iconWidth: 12,\n iconHeight: 12\n};\n\nconst UIKittenToggleSizeSmallMedium = {\n width: 32,\n height: 20,\n borderRadius: 10,\n\n thumbWidth: 16,\n thumbHeight: 16,\n thumbBorderRadius: 8,\n\n outlineWidth: 32,\n outlineHeight: 20,\n outlineBorderRadius: 10,\n\n textMarginHorizontal: 12,\n\n iconWidth: 10,\n iconHeight: 10\n};\n\nconst UIKittenToggleSizeSmall = {\n width: 26,\n height: 16,\n borderRadius: 8,\n\n thumbWidth: 12,\n thumbHeight: 12,\n thumbBorderRadius: 6,\n\n outlineWidth: 26,\n outlineHeight: 16,\n outlineBorderRadius: 8,\n\n textMarginHorizontal: 12,\n\n iconWidth: 6,\n iconHeight: 6\n};\n\nconst UI_KITTEN_CONFIGURATION = {\n components: {\n Toggle: {\n appearances: {\n default: {\n mapping: UIKittenToggleSizeSmallMedium,\n variantGroups: {\n status: {\n basic: {\n backgroundColor: \"#ffffff\",\n thumbBackgroundColor: \"#dddddd\",\n }\n }\n }\n }\n }\n }\n }\n};\n\nfunction getTitle(options, route) {\n if (options && options.title) {\n return options.title + \" - Find Humane\";\n }\n if (route && route.name) {\n const title = AppConstants.SCREEN_TITLES[route.name];\n if (title) {\n return title + \" - Find Humane\";\n }\n }\n return \"Find Humane\";\n}\n\nfunction reducer(prevState, action) {\n switch (action.type) {\n case 'INITIALIZED':\n return {\n ...prevState,\n };\n case 'SIGN_IN_LOCAL':\n return {\n ...prevState,\n loginState: AppConstants.LOGIN_STATE.LOGGED_IN_LOCALLY,\n };\n case 'SIGN_IN_REMOTE':\n return {\n ...prevState,\n loginState: AppConstants.LOGIN_STATE.LOGGED_IN_REMOTELY,\n };\n case 'SIGN_OUT':\n return {\n ...prevState,\n loginState: AppConstants.DEFAULT_LOGIN_STATE,\n };\n case 'SHOW_SNACK':\n return {\n ...prevState,\n snackVisible: true,\n snackText: action.data,\n snackDuration: action.duration ? action.duration : TEMPORARY_SNACK_DEFAULT_DURATION,\n snackButtonText: action.snackButtonText,\n snackButtonCallback: action.snackButtonCallback,\n };\n case 'HIDE_SNACK':\n return {\n ...prevState,\n snackVisible: false,\n snackText: null,\n snackButtonText: null,\n snackButtonCallback: null,\n };\n case 'SHOW_SPINNER':\n return {\n ...prevState,\n showSpinner: true,\n };\n case 'HIDE_SPINNER':\n return {\n ...prevState,\n showSpinner: false,\n };\n case 'TOGGLE_MODAL':\n const newVisibleState = !prevState.modalVisible;\n if (newVisibleState && !AppUtilities.isNullOrUndefined(action.selection)) {\n return {\n ...prevState,\n modalVisible: newVisibleState,\n modalSelection: action.selection,\n };\n } else {\n return {\n ...prevState,\n modalVisible: newVisibleState,\n };\n }\n case 'SET_DEBUG':\n return {\n ...prevState,\n showDebug: action.debug,\n };\n }\n}\n\nconst INITIAL_STATE = {\n loginState: AppConstants.DEFAULT_LOGIN_STATE,\n snackVisible: false,\n snackText: null,\n snackDuration: null,\n snackButtonText: null,\n snackButtonCallback: null,\n showSpinner: false,\n modalVisible: false,\n modalSelection: 1,\n //showDebug: AppState.getGlobalState(AppConstants.SIMPLE_GLOBAL_STATE.DEFAULT_SHOW_DEBUG),\n showDebug: AppConstants.IS_DEVELOPMENT,\n};\n\nexport function AppWrapper() {\n const [appLoading, setAppLoading] = React.useState(0);\n const navigationRef = React.useRef();\n const [subscribeVisible, setSubscribeVisible] = React.useState(false);\n const [searchVisible, setSearchVisible] = React.useState(false);\n const [hideSearchLocation, setHideSearchLocation] = React.useState(false);\n const [state, dispatch] = React.useReducer(reducer, INITIAL_STATE);\n const { width, height } = useWindowDimensions();\n\n React.useEffect(() => {\n const bootstrapAsync = async () => {\n AppUtilities.info(\"AppWrapper started bootstrap\");\n\n let isLoggedIn = false;\n\n try {\n if (AppUtilities.getLocalDataRemoteSession()) {\n AppUtilities.info(\"Remote session exists\");\n isLoggedIn = true;\n }\n } catch (e) {\n AppUtilities.handleException(e, \"AppWrapper.bootstrapAsync load stored state\");\n }\n\n try {\n //AppUtilities.info(\"Config: \" + AppUtilities.toJSONPretty(Constants.expoConfig.extra.test));\n } catch (e) {\n AppUtilities.handleException(e, \"AppWrapper.bootstrapAsync extra processing\");\n }\n\n //AppUtilities.info(\"Finished bootstrap2\");\n\n if (isLoggedIn) {\n dispatch({ type: 'SIGN_IN_REMOTE' });\n } else {\n dispatch({ type: 'SIGN_IN_LOCAL' });\n }\n\n setAppLoading(1);\n };\n\n bootstrapAsync();\n }, []);\n\n const onLayoutRootView = React.useCallback(async () => {\n //AppUtilities.info(\"AppWrapper.onLayoutRootView appLoading = \" + appLoading);\n\n if (appLoading == 1) {\n try {\n if (!AppUtilities.isWeb()) {\n AppUtilities.info(\"Configuring StatusBar\");\n }\n \n //\n StatusBar.setStatusBarStyle(\"dark\");\n if (AppUtilities.isAndroid()) {\n StatusBar.setStatusBarBackgroundColor(\"#ffffff\", false);\n }\n } catch (e) {\n AppUtilities.handleException(e, \"AppWrapper.onLayoutRootView\");\n }\n\n setAppLoading(2);\n }\n }, [appLoading]);\n\n React.useEffect(() => {\n //AppUtilities.info(\"AppWrapper.useEffect appLoading = \" + appLoading);\n if (appLoading == 2) {\n async function checkSubscribePopup() {\n if (await AppState.shouldPopUpSubscribe())\n {\n setTimeout(\n () => {\n setSubscribeVisible(true);\n },\n AppConstants.SUBSCRIBE_POPUP_DELAY_MILLISECONDS\n );\n }\n }\n checkSubscribePopup();\n }\n }, [appLoading]);\n\n function showSpinner(text, duration) {\n dispatch({ type: 'SHOW_SPINNER' });\n }\n\n function hideSpinner(text, duration) {\n dispatch({ type: 'HIDE_SPINNER' });\n }\n\n function hideSnack() {\n if (state.snackVisible) {\n dispatch({ type: 'HIDE_SNACK' });\n }\n }\n\n function showSnack(text, duration, snackButtonText, snackButtonCallback) {\n if (!snackButtonText) {\n snackButtonText = \"OK\";\n }\n if (!snackButtonCallback) {\n snackButtonCallback = hideSnack;\n }\n dispatch({ type: 'SHOW_SNACK', data: text, duration: duration, snackButtonText: snackButtonText, snackButtonCallback: snackButtonCallback });\n }\n\n function showPermanentSnack(text, snackButtonText, snackButtonCallback) {\n showSnack(text, Number.POSITIVE_INFINITY, snackButtonText, snackButtonCallback);\n }\n\n function showTemporarySnack(text, snackButtonText, snackButtonCallback, duration) {\n if (!duration) {\n duration = TEMPORARY_SNACK_DEFAULT_DURATION;\n }\n showSnack(text, duration, snackButtonText, snackButtonCallback);\n }\n\n function toggleModal(selection) {\n dispatch({ type: 'TOGGLE_MODAL', selection: selection });\n }\n\n /*\n function isSignedIn() {\n return state.loginState != AppConstants.LOGIN_STATE.LOGGED_OUT;\n }\n\n async function login_or_register(user, password, login_only) {\n try {\n hideSnack();\n showSpinner();\n\n const result = await AppUtilities.fetchUnauthorized(\n \"AppWrapper.login_or_register\",\n AppUtilities.createRequestUrl(\"/find_humane/api/login_or_register\"),\n \"POST\",\n {\n email: user,\n password: password,\n login_only: login_only,\n },\n );\n\n if (result.body) {\n await AppUtilities.login(result.body);\n dispatch({ type: 'SIGN_IN_REMOTE' });\n } else {\n throw new Error(\"Result body not found\");\n }\n } catch (e) {\n AppUtilities.handleException(e, \"AppWrapper.bootstrapAsync login_or_register\");\n showPermanentSnack(AppUtilities.getErrors(e));\n return e;\n } finally {\n hideSpinner();\n }\n return null;\n }\n\n async function forgotPassword(email) {\n try {\n hideSnack();\n showSpinner();\n\n const result = await AppUtilities.fetchUnauthorized(\n \"AppWrapper.forgotPassword\",\n \"/api/forgot_password\",\n \"POST\",\n {\n \"email\": email,\n },\n );\n\n if (result.body) {\n return null;\n } else {\n throw new Error(\"Result body not found\");\n }\n } catch (e) {\n AppUtilities.handleException(e, \"AppWrapper.bootstrapAsync forgotPassword\");\n showPermanentSnack(AppUtilities.getErrors(e));\n return e;\n } finally {\n hideSpinner();\n }\n }\n */\n\n const appContext = React.useMemo(\n () => (\n {\n /*\n register: async (data) => {\n return await login_or_register(data.username, data.password, false);\n },\n signIn: async (data) => {\n return await login_or_register(data.username, data.password, true);\n },\n signOut: async () => {\n try {\n await AppUtilities.logout();\n } catch (e) {\n AppUtilities.handleException(e, \"AppWrapper.bootstrapAsync signOut\");\n showPermanentSnack(e.toString());\n }\n dispatch({ type: 'SIGN_OUT' })\n },\n forgotPassword: async (data) => {\n return await forgotPassword(data.username);\n },\n isSignedIn: () => isSignedIn(),\n */\n setDebug: async (debug) => {\n dispatch({ type: 'SET_DEBUG', debug: debug });\n },\n isLoading: () => appLoading == 0,\n showPermanentSnack: showPermanentSnack,\n showTemporarySnack: showTemporarySnack,\n hideSnack: hideSnack,\n showSpinner: showSpinner,\n hideSpinner: hideSpinner,\n getLoginState: () => state.loginState,\n getShowDebug: () => state.showDebug,\n toggleModal: toggleModal,\n showSearch: (hideLocationSearch) => {\n setHideSearchLocation(hideLocationSearch);\n setSearchVisible(true);\n }\n }\n ),\n [state]\n );\n\n if (appLoading == 0) {\n return null;\n } else {\n return (\n \n \n \n \n \n \n \n \n \n {state.snackText}\n \n \n \n \n \n setSubscribeVisible(false)}\n >\n setSubscribeVisible(false)} />\n \n setSearchVisible(false)}\n style={{ width: width, height: height }}\n >\n \n \n \n \n \n \n \n \n );\n }\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * \n */\n\n'use strict';\n\nimport Dimensions from '../Dimensions';\nimport { useEffect, useState } from 'react';\nexport default function useWindowDimensions() {\n var _useState = useState(() => Dimensions.get('window')),\n dims = _useState[0],\n setDims = _useState[1];\n useEffect(() => {\n function handleChange(_ref) {\n var window = _ref.window;\n if (window != null) {\n setDims(window);\n }\n }\n Dimensions.addEventListener('change', handleChange);\n // We might have missed an update between calling `get` in render and\n // `addEventListener` in this handler, so we set it here. If there was\n // no change, React will filter out this update as a no-op.\n setDims(Dimensions.get('window'));\n return () => {\n Dimensions.removeEventListener('change', handleChange);\n };\n }, []);\n return dims;\n}","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport invariant from 'fbjs/lib/invariant';\nimport canUseDOM from '../../modules/canUseDom';\nvar dimensions = {\n window: {\n fontScale: 1,\n height: 0,\n scale: 1,\n width: 0\n },\n screen: {\n fontScale: 1,\n height: 0,\n scale: 1,\n width: 0\n }\n};\nvar listeners = {};\nvar shouldInit = canUseDOM;\nfunction update() {\n if (!canUseDOM) {\n return;\n }\n var win = window;\n var height;\n var width;\n\n /**\n * iOS does not update viewport dimensions on keyboard open/close.\n * window.visualViewport(https://developer.mozilla.org/en-US/docs/Web/API/VisualViewport)\n * is used instead of document.documentElement.clientHeight (which remains as a fallback)\n */\n if (win.visualViewport) {\n var visualViewport = win.visualViewport;\n /**\n * We are multiplying by scale because height and width from visual viewport\n * also react to pinch zoom, and become smaller when zoomed. But it is not desired\n * behaviour, since originally documentElement client height and width were used,\n * and they do not react to pinch zoom.\n */\n height = Math.round(visualViewport.height * visualViewport.scale);\n width = Math.round(visualViewport.width * visualViewport.scale);\n } else {\n var docEl = win.document.documentElement;\n height = docEl.clientHeight;\n width = docEl.clientWidth;\n }\n dimensions.window = {\n fontScale: 1,\n height,\n scale: win.devicePixelRatio || 1,\n width\n };\n dimensions.screen = {\n fontScale: 1,\n height: win.screen.height,\n scale: win.devicePixelRatio || 1,\n width: win.screen.width\n };\n}\nfunction handleResize() {\n update();\n if (Array.isArray(listeners['change'])) {\n listeners['change'].forEach(handler => handler(dimensions));\n }\n}\nexport default class Dimensions {\n static get(dimension) {\n if (shouldInit) {\n shouldInit = false;\n update();\n }\n invariant(dimensions[dimension], \"No dimension set for key \" + dimension);\n return dimensions[dimension];\n }\n static set(initialDimensions) {\n if (initialDimensions) {\n if (canUseDOM) {\n invariant(false, 'Dimensions cannot be set in the browser');\n } else {\n if (initialDimensions.screen != null) {\n dimensions.screen = initialDimensions.screen;\n }\n if (initialDimensions.window != null) {\n dimensions.window = initialDimensions.window;\n }\n }\n }\n }\n static addEventListener(type, handler) {\n listeners[type] = listeners[type] || [];\n listeners[type].push(handler);\n return {\n remove: () => {\n this.removeEventListener(type, handler);\n }\n };\n }\n static removeEventListener(type, handler) {\n if (Array.isArray(listeners[type])) {\n listeners[type] = listeners[type].filter(_handler => _handler !== handler);\n }\n }\n}\nif (canUseDOM) {\n if (window.visualViewport) {\n window.visualViewport.addEventListener('resize', handleResize, false);\n } else {\n window.addEventListener('resize', handleResize, false);\n }\n}","export { default as Link } from './Link';\nexport { default as LinkingContext } from './LinkingContext';\nexport { default as NavigationContainer } from './NavigationContainer';\nexport { default as ServerContainer } from './ServerContainer';\nexport { default as DarkTheme } from './theming/DarkTheme';\nexport { default as DefaultTheme } from './theming/DefaultTheme';\nexport { default as ThemeProvider } from './theming/ThemeProvider';\nexport { default as useTheme } from './theming/useTheme';\nexport * from './types';\nexport { default as useLinkBuilder } from './useLinkBuilder';\nexport { default as useLinkProps } from './useLinkProps';\nexport { default as useLinkTo } from './useLinkTo';\nexport { default as useScrollToTop } from './useScrollToTop';\nexport * from '@react-navigation/core';\n//# sourceMappingURL=index.js.map","import * as React from 'react';\nimport { Platform, Text } from 'react-native';\nimport useLinkProps from './useLinkProps';\n/**\n * Component to render link to another screen using a path.\n * Uses an anchor tag on the web.\n *\n * @param props.to Absolute path to screen (e.g. `/feeds/hot`).\n * @param props.action Optional action to use for in-page navigation. By default, the path is parsed to an action based on linking config.\n * @param props.children Child elements to render the content.\n */\nexport default function Link(_ref) {\n let {\n to,\n action,\n ...rest\n } = _ref;\n const props = useLinkProps({\n to,\n action\n });\n const onPress = e => {\n if ('onPress' in rest) {\n var _rest$onPress;\n (_rest$onPress = rest.onPress) === null || _rest$onPress === void 0 ? void 0 : _rest$onPress.call(rest, e);\n }\n props.onPress(e);\n };\n return /*#__PURE__*/React.createElement(Text, {\n ...props,\n ...rest,\n ...Platform.select({\n web: {\n onClick: onPress\n },\n default: {\n onPress\n }\n })\n });\n}\n//# sourceMappingURL=Link.js.map","var objectWithoutPropertiesLoose = require(\"./objectWithoutPropertiesLoose.js\");\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\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 return target;\n}\nmodule.exports = _objectWithoutProperties, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"hrefAttrs\", \"numberOfLines\", \"onClick\", \"onLayout\", \"onPress\", \"onMoveShouldSetResponder\", \"onMoveShouldSetResponderCapture\", \"onResponderEnd\", \"onResponderGrant\", \"onResponderMove\", \"onResponderReject\", \"onResponderRelease\", \"onResponderStart\", \"onResponderTerminate\", \"onResponderTerminationRequest\", \"onScrollShouldSetResponder\", \"onScrollShouldSetResponderCapture\", \"onSelectionChangeShouldSetResponder\", \"onSelectionChangeShouldSetResponderCapture\", \"onStartShouldSetResponder\", \"onStartShouldSetResponderCapture\", \"selectable\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport * as forwardedProps from '../../modules/forwardedProps';\nimport pick from '../../modules/pick';\nimport useElementLayout from '../../modules/useElementLayout';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePlatformMethods from '../../modules/usePlatformMethods';\nimport useResponderEvents from '../../modules/useResponderEvents';\nimport StyleSheet from '../StyleSheet';\nimport TextAncestorContext from './TextAncestorContext';\nimport { useLocaleContext, getLocaleDirection } from '../../modules/useLocale';\nimport { warnOnce } from '../../modules/warnOnce';\nvar forwardPropsList = Object.assign({}, forwardedProps.defaultProps, forwardedProps.accessibilityProps, forwardedProps.clickProps, forwardedProps.focusProps, forwardedProps.keyboardProps, forwardedProps.mouseProps, forwardedProps.touchProps, forwardedProps.styleProps, {\n href: true,\n lang: true,\n pointerEvents: true\n});\nvar pickProps = props => pick(props, forwardPropsList);\nvar Text = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n var hrefAttrs = props.hrefAttrs,\n numberOfLines = props.numberOfLines,\n onClick = props.onClick,\n onLayout = props.onLayout,\n onPress = props.onPress,\n onMoveShouldSetResponder = props.onMoveShouldSetResponder,\n onMoveShouldSetResponderCapture = props.onMoveShouldSetResponderCapture,\n onResponderEnd = props.onResponderEnd,\n onResponderGrant = props.onResponderGrant,\n onResponderMove = props.onResponderMove,\n onResponderReject = props.onResponderReject,\n onResponderRelease = props.onResponderRelease,\n onResponderStart = props.onResponderStart,\n onResponderTerminate = props.onResponderTerminate,\n onResponderTerminationRequest = props.onResponderTerminationRequest,\n onScrollShouldSetResponder = props.onScrollShouldSetResponder,\n onScrollShouldSetResponderCapture = props.onScrollShouldSetResponderCapture,\n onSelectionChangeShouldSetResponder = props.onSelectionChangeShouldSetResponder,\n onSelectionChangeShouldSetResponderCapture = props.onSelectionChangeShouldSetResponderCapture,\n onStartShouldSetResponder = props.onStartShouldSetResponder,\n onStartShouldSetResponderCapture = props.onStartShouldSetResponderCapture,\n selectable = props.selectable,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n if (selectable != null) {\n warnOnce('selectable', 'selectable prop is deprecated. Use styles.userSelect.');\n }\n var hasTextAncestor = React.useContext(TextAncestorContext);\n var hostRef = React.useRef(null);\n var _useLocaleContext = useLocaleContext(),\n contextDirection = _useLocaleContext.direction;\n useElementLayout(hostRef, onLayout);\n useResponderEvents(hostRef, {\n onMoveShouldSetResponder,\n onMoveShouldSetResponderCapture,\n onResponderEnd,\n onResponderGrant,\n onResponderMove,\n onResponderReject,\n onResponderRelease,\n onResponderStart,\n onResponderTerminate,\n onResponderTerminationRequest,\n onScrollShouldSetResponder,\n onScrollShouldSetResponderCapture,\n onSelectionChangeShouldSetResponder,\n onSelectionChangeShouldSetResponderCapture,\n onStartShouldSetResponder,\n onStartShouldSetResponderCapture\n });\n var handleClick = React.useCallback(e => {\n if (onClick != null) {\n onClick(e);\n } else if (onPress != null) {\n e.stopPropagation();\n onPress(e);\n }\n }, [onClick, onPress]);\n var component = hasTextAncestor ? 'span' : 'div';\n var langDirection = props.lang != null ? getLocaleDirection(props.lang) : null;\n var componentDirection = props.dir || langDirection;\n var writingDirection = componentDirection || contextDirection;\n var supportedProps = pickProps(rest);\n supportedProps.dir = componentDirection;\n // 'auto' by default allows browsers to infer writing direction (root elements only)\n if (!hasTextAncestor) {\n supportedProps.dir = componentDirection != null ? componentDirection : 'auto';\n }\n if (onClick || onPress) {\n supportedProps.onClick = handleClick;\n }\n supportedProps.style = [numberOfLines != null && numberOfLines > 1 && {\n WebkitLineClamp: numberOfLines\n }, hasTextAncestor === true ? styles.textHasAncestor$raw : styles.text$raw, numberOfLines === 1 && styles.textOneLine, numberOfLines != null && numberOfLines > 1 && styles.textMultiLine, props.style, selectable === true && styles.selectable, selectable === false && styles.notSelectable, onPress && styles.pressable];\n if (props.href != null) {\n component = 'a';\n if (hrefAttrs != null) {\n var download = hrefAttrs.download,\n rel = hrefAttrs.rel,\n target = hrefAttrs.target;\n if (download != null) {\n supportedProps.download = download;\n }\n if (rel != null) {\n supportedProps.rel = rel;\n }\n if (typeof target === 'string') {\n supportedProps.target = target.charAt(0) !== '_' ? '_' + target : target;\n }\n }\n }\n var platformMethodsRef = usePlatformMethods(supportedProps);\n var setRef = useMergeRefs(hostRef, platformMethodsRef, forwardedRef);\n supportedProps.ref = setRef;\n var element = createElement(component, supportedProps, {\n writingDirection\n });\n return hasTextAncestor ? element : /*#__PURE__*/React.createElement(TextAncestorContext.Provider, {\n value: true\n }, element);\n});\nText.displayName = 'Text';\nvar textStyle = {\n backgroundColor: 'transparent',\n border: '0 solid black',\n boxSizing: 'border-box',\n color: 'black',\n display: 'inline',\n font: '14px System',\n listStyle: 'none',\n margin: 0,\n padding: 0,\n position: 'relative',\n textAlign: 'start',\n textDecoration: 'none',\n whiteSpace: 'pre-wrap',\n wordWrap: 'break-word'\n};\nvar styles = StyleSheet.create({\n text$raw: textStyle,\n textHasAncestor$raw: _objectSpread(_objectSpread({}, textStyle), {}, {\n color: 'inherit',\n font: 'inherit',\n textAlign: 'inherit',\n whiteSpace: 'inherit'\n }),\n textOneLine: {\n maxWidth: '100%',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n wordWrap: 'normal'\n },\n // See #13\n textMultiLine: {\n display: '-webkit-box',\n maxWidth: '100%',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n WebkitBoxOrient: 'vertical'\n },\n notSelectable: {\n userSelect: 'none'\n },\n selectable: {\n userSelect: 'text'\n },\n pressable: {\n cursor: 'pointer'\n }\n});\nexport default Text;","import { getPathFromState, NavigationContainerRefContext, NavigationHelpersContext } from '@react-navigation/core';\nimport * as React from 'react';\nimport { Platform } from 'react-native';\nimport LinkingContext from './LinkingContext';\nimport useLinkTo from './useLinkTo';\nconst getStateFromParams = params => {\n if (params !== null && params !== void 0 && params.state) {\n return params.state;\n }\n if (params !== null && params !== void 0 && params.screen) {\n return {\n routes: [{\n name: params.screen,\n params: params.params,\n // @ts-expect-error\n state: params.screen ? getStateFromParams(params.params) : undefined\n }]\n };\n }\n return undefined;\n};\n\n/**\n * Hook to get props for an anchor tag so it can work with in page navigation.\n *\n * @param props.to Absolute path to screen (e.g. `/feeds/hot`).\n * @param props.action Optional action to use for in-page navigation. By default, the path is parsed to an action based on linking config.\n */\nexport default function useLinkProps(_ref) {\n let {\n to,\n action\n } = _ref;\n const root = React.useContext(NavigationContainerRefContext);\n const navigation = React.useContext(NavigationHelpersContext);\n const {\n options\n } = React.useContext(LinkingContext);\n const linkTo = useLinkTo();\n const onPress = e => {\n var _e$currentTarget;\n let shouldHandle = false;\n if (Platform.OS !== 'web' || !e) {\n shouldHandle = e ? !e.defaultPrevented : true;\n } else if (!e.defaultPrevented &&\n // onPress prevented default\n // @ts-expect-error: these properties exist on web, but not in React Native\n !(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) && (\n // ignore clicks with modifier keys\n // @ts-expect-error: these properties exist on web, but not in React Native\n e.button == null || e.button === 0) &&\n // ignore everything but left clicks\n // @ts-expect-error: these properties exist on web, but not in React Native\n [undefined, null, '', 'self'].includes((_e$currentTarget = e.currentTarget) === null || _e$currentTarget === void 0 ? void 0 : _e$currentTarget.target) // let browser handle \"target=_blank\" etc.\n ) {\n e.preventDefault();\n shouldHandle = true;\n }\n if (shouldHandle) {\n if (action) {\n if (navigation) {\n navigation.dispatch(action);\n } else if (root) {\n root.dispatch(action);\n } else {\n throw new Error(\"Couldn't find a navigation object. Is your component inside NavigationContainer?\");\n }\n } else {\n linkTo(to);\n }\n }\n };\n const getPathFromStateHelper = (options === null || options === void 0 ? void 0 : options.getPathFromState) ?? getPathFromState;\n const href = typeof to === 'string' ? to : getPathFromStateHelper({\n routes: [{\n name: to.screen,\n // @ts-expect-error\n params: to.params,\n // @ts-expect-error\n state: getStateFromParams(to.params)\n }]\n }, options === null || options === void 0 ? void 0 : options.config);\n return {\n href,\n accessibilityRole: 'link',\n onPress\n };\n}\n//# sourceMappingURL=useLinkProps.js.map","export { default as BaseNavigationContainer } from './BaseNavigationContainer';\nexport { default as createNavigationContainerRef } from './createNavigationContainerRef';\nexport { default as createNavigatorFactory } from './createNavigatorFactory';\nexport { default as CurrentRenderContext } from './CurrentRenderContext';\nexport { default as findFocusedRoute } from './findFocusedRoute';\nexport { default as getActionFromState } from './getActionFromState';\nexport { default as getFocusedRouteNameFromRoute } from './getFocusedRouteNameFromRoute';\nexport { default as getPathFromState } from './getPathFromState';\nexport { default as getStateFromPath } from './getStateFromPath';\nexport { default as NavigationContainerRefContext } from './NavigationContainerRefContext';\nexport { default as NavigationContext } from './NavigationContext';\nexport { default as NavigationHelpersContext } from './NavigationHelpersContext';\nexport { default as NavigationRouteContext } from './NavigationRouteContext';\nexport { default as PreventRemoveContext } from './PreventRemoveContext';\nexport { default as PreventRemoveProvider } from './PreventRemoveProvider';\nexport * from './types';\nexport { default as useFocusEffect } from './useFocusEffect';\nexport { default as useIsFocused } from './useIsFocused';\nexport { default as useNavigation } from './useNavigation';\nexport { default as useNavigationBuilder } from './useNavigationBuilder';\nexport { default as useNavigationContainerRef } from './useNavigationContainerRef';\nexport { default as useNavigationState } from './useNavigationState';\nexport { default as UNSTABLE_usePreventRemove } from './usePreventRemove';\nexport { default as usePreventRemoveContext } from './usePreventRemoveContext';\nexport { default as useRoute } from './useRoute';\nexport { default as validatePathConfig } from './validatePathConfig';\nexport * from '@react-navigation/routers';\n//# sourceMappingURL=index.js.map","import { CommonActions } from '@react-navigation/routers';\nimport * as React from 'react';\nimport checkDuplicateRouteNames from './checkDuplicateRouteNames';\nimport checkSerializable from './checkSerializable';\nimport { NOT_INITIALIZED_ERROR } from './createNavigationContainerRef';\nimport EnsureSingleNavigator from './EnsureSingleNavigator';\nimport findFocusedRoute from './findFocusedRoute';\nimport NavigationBuilderContext from './NavigationBuilderContext';\nimport NavigationContainerRefContext from './NavigationContainerRefContext';\nimport NavigationContext from './NavigationContext';\nimport NavigationRouteContext from './NavigationRouteContext';\nimport NavigationStateContext from './NavigationStateContext';\nimport UnhandledActionContext from './UnhandledActionContext';\nimport useChildListeners from './useChildListeners';\nimport useEventEmitter from './useEventEmitter';\nimport useKeyedChildListeners from './useKeyedChildListeners';\nimport useOptionsGetters from './useOptionsGetters';\nimport { ScheduleUpdateContext } from './useScheduleUpdate';\nimport useSyncState from './useSyncState';\nconst serializableWarnings = [];\nconst duplicateNameWarnings = [];\n\n/**\n * Remove `key` and `routeNames` from the state objects recursively to get partial state.\n *\n * @param state Initial state object.\n */\nconst getPartialState = state => {\n if (state === undefined) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n key,\n routeNames,\n ...partialState\n } = state;\n return {\n ...partialState,\n stale: true,\n routes: state.routes.map(route => {\n if (route.state === undefined) {\n return route;\n }\n return {\n ...route,\n state: getPartialState(route.state)\n };\n })\n };\n};\n\n/**\n * Container component which holds the navigation state.\n * This should be rendered at the root wrapping the whole app.\n *\n * @param props.initialState Initial state object for the navigation tree.\n * @param props.onStateChange Callback which is called with the latest navigation state when it changes.\n * @param props.children Child elements to render the content.\n * @param props.ref Ref object which refers to the navigation object containing helper methods.\n */\nconst BaseNavigationContainer = /*#__PURE__*/React.forwardRef(function BaseNavigationContainer(_ref, ref) {\n let {\n initialState,\n onStateChange,\n onUnhandledAction,\n independent,\n children\n } = _ref;\n const parent = React.useContext(NavigationStateContext);\n if (!parent.isDefault && !independent) {\n throw new Error(\"Looks like you have nested a 'NavigationContainer' inside another. Normally you need only one container at the root of the app, so this was probably an error. If this was intentional, pass 'independent={true}' explicitly. Note that this will make the child navigators disconnected from the parent and you won't be able to navigate between them.\");\n }\n const [state, getState, setState, scheduleUpdate, flushUpdates] = useSyncState(() => getPartialState(initialState == null ? undefined : initialState));\n const isFirstMountRef = React.useRef(true);\n const navigatorKeyRef = React.useRef();\n const getKey = React.useCallback(() => navigatorKeyRef.current, []);\n const setKey = React.useCallback(key => {\n navigatorKeyRef.current = key;\n }, []);\n const {\n listeners,\n addListener\n } = useChildListeners();\n const {\n keyedListeners,\n addKeyedListener\n } = useKeyedChildListeners();\n const dispatch = React.useCallback(action => {\n if (listeners.focus[0] == null) {\n console.error(NOT_INITIALIZED_ERROR);\n } else {\n listeners.focus[0](navigation => navigation.dispatch(action));\n }\n }, [listeners.focus]);\n const canGoBack = React.useCallback(() => {\n if (listeners.focus[0] == null) {\n return false;\n }\n const {\n result,\n handled\n } = listeners.focus[0](navigation => navigation.canGoBack());\n if (handled) {\n return result;\n } else {\n return false;\n }\n }, [listeners.focus]);\n const resetRoot = React.useCallback(state => {\n var _keyedListeners$getSt, _keyedListeners$getSt2;\n const target = (state === null || state === void 0 ? void 0 : state.key) ?? ((_keyedListeners$getSt = (_keyedListeners$getSt2 = keyedListeners.getState).root) === null || _keyedListeners$getSt === void 0 ? void 0 : _keyedListeners$getSt.call(_keyedListeners$getSt2).key);\n if (target == null) {\n console.error(NOT_INITIALIZED_ERROR);\n } else {\n listeners.focus[0](navigation => navigation.dispatch({\n ...CommonActions.reset(state),\n target\n }));\n }\n }, [keyedListeners.getState, listeners.focus]);\n const getRootState = React.useCallback(() => {\n var _keyedListeners$getSt3, _keyedListeners$getSt4;\n return (_keyedListeners$getSt3 = (_keyedListeners$getSt4 = keyedListeners.getState).root) === null || _keyedListeners$getSt3 === void 0 ? void 0 : _keyedListeners$getSt3.call(_keyedListeners$getSt4);\n }, [keyedListeners.getState]);\n const getCurrentRoute = React.useCallback(() => {\n const state = getRootState();\n if (state == null) {\n return undefined;\n }\n const route = findFocusedRoute(state);\n return route;\n }, [getRootState]);\n const emitter = useEventEmitter();\n const {\n addOptionsGetter,\n getCurrentOptions\n } = useOptionsGetters({});\n const navigation = React.useMemo(() => ({\n ...Object.keys(CommonActions).reduce((acc, name) => {\n acc[name] = function () {\n return (\n // @ts-expect-error: this is ok\n dispatch(CommonActions[name](...arguments))\n );\n };\n return acc;\n }, {}),\n ...emitter.create('root'),\n dispatch,\n resetRoot,\n isFocused: () => true,\n canGoBack,\n getParent: () => undefined,\n getState: () => stateRef.current,\n getRootState,\n getCurrentRoute,\n getCurrentOptions,\n isReady: () => listeners.focus[0] != null,\n setOptions: () => {\n throw new Error('Cannot call setOptions outside a screen');\n }\n }), [canGoBack, dispatch, emitter, getCurrentOptions, getCurrentRoute, getRootState, listeners.focus, resetRoot]);\n React.useImperativeHandle(ref, () => navigation, [navigation]);\n const onDispatchAction = React.useCallback((action, noop) => {\n emitter.emit({\n type: '__unsafe_action__',\n data: {\n action,\n noop,\n stack: stackRef.current\n }\n });\n }, [emitter]);\n const lastEmittedOptionsRef = React.useRef();\n const onOptionsChange = React.useCallback(options => {\n if (lastEmittedOptionsRef.current === options) {\n return;\n }\n lastEmittedOptionsRef.current = options;\n emitter.emit({\n type: 'options',\n data: {\n options\n }\n });\n }, [emitter]);\n const stackRef = React.useRef();\n const builderContext = React.useMemo(() => ({\n addListener,\n addKeyedListener,\n onDispatchAction,\n onOptionsChange,\n stackRef\n }), [addListener, addKeyedListener, onDispatchAction, onOptionsChange]);\n const scheduleContext = React.useMemo(() => ({\n scheduleUpdate,\n flushUpdates\n }), [scheduleUpdate, flushUpdates]);\n const isInitialRef = React.useRef(true);\n const getIsInitial = React.useCallback(() => isInitialRef.current, []);\n const context = React.useMemo(() => ({\n state,\n getState,\n setState,\n getKey,\n setKey,\n getIsInitial,\n addOptionsGetter\n }), [state, getState, setState, getKey, setKey, getIsInitial, addOptionsGetter]);\n const onStateChangeRef = React.useRef(onStateChange);\n const stateRef = React.useRef(state);\n React.useEffect(() => {\n isInitialRef.current = false;\n onStateChangeRef.current = onStateChange;\n stateRef.current = state;\n });\n React.useEffect(() => {\n const hydratedState = getRootState();\n if (process.env.NODE_ENV !== 'production') {\n if (hydratedState !== undefined) {\n const serializableResult = checkSerializable(hydratedState);\n if (!serializableResult.serializable) {\n const {\n location,\n reason\n } = serializableResult;\n let path = '';\n let pointer = hydratedState;\n let params = false;\n for (let i = 0; i < location.length; i++) {\n const curr = location[i];\n const prev = location[i - 1];\n pointer = pointer[curr];\n if (!params && curr === 'state') {\n continue;\n } else if (!params && curr === 'routes') {\n if (path) {\n path += ' > ';\n }\n } else if (!params && typeof curr === 'number' && prev === 'routes') {\n var _pointer;\n path += (_pointer = pointer) === null || _pointer === void 0 ? void 0 : _pointer.name;\n } else if (!params) {\n path += ` > ${curr}`;\n params = true;\n } else {\n if (typeof curr === 'number' || /^[0-9]+$/.test(curr)) {\n path += `[${curr}]`;\n } else if (/^[a-z$_]+$/i.test(curr)) {\n path += `.${curr}`;\n } else {\n path += `[${JSON.stringify(curr)}]`;\n }\n }\n }\n const message = `Non-serializable values were found in the navigation state. Check:\\n\\n${path} (${reason})\\n\\nThis can break usage such as persisting and restoring state. This might happen if you passed non-serializable values such as function, class instances etc. in params. If you need to use components with callbacks in your options, you can use 'navigation.setOptions' instead. See https://reactnavigation.org/docs/troubleshooting#i-get-the-warning-non-serializable-values-were-found-in-the-navigation-state for more details.`;\n if (!serializableWarnings.includes(message)) {\n serializableWarnings.push(message);\n console.warn(message);\n }\n }\n const duplicateRouteNamesResult = checkDuplicateRouteNames(hydratedState);\n if (duplicateRouteNamesResult.length) {\n const message = `Found screens with the same name nested inside one another. Check:\\n${duplicateRouteNamesResult.map(locations => `\\n${locations.join(', ')}`)}\\n\\nThis can cause confusing behavior during navigation. Consider using unique names for each screen instead.`;\n if (!duplicateNameWarnings.includes(message)) {\n duplicateNameWarnings.push(message);\n console.warn(message);\n }\n }\n }\n }\n emitter.emit({\n type: 'state',\n data: {\n state\n }\n });\n if (!isFirstMountRef.current && onStateChangeRef.current) {\n onStateChangeRef.current(hydratedState);\n }\n isFirstMountRef.current = false;\n }, [getRootState, emitter, state]);\n const defaultOnUnhandledAction = React.useCallback(action => {\n if (process.env.NODE_ENV === 'production') {\n return;\n }\n const payload = action.payload;\n let message = `The action '${action.type}'${payload ? ` with payload ${JSON.stringify(action.payload)}` : ''} was not handled by any navigator.`;\n switch (action.type) {\n case 'NAVIGATE':\n case 'PUSH':\n case 'REPLACE':\n case 'JUMP_TO':\n if (payload !== null && payload !== void 0 && payload.name) {\n message += `\\n\\nDo you have a screen named '${payload.name}'?\\n\\nIf you're trying to navigate to a screen in a nested navigator, see https://reactnavigation.org/docs/nesting-navigators#navigating-to-a-screen-in-a-nested-navigator.`;\n } else {\n message += `\\n\\nYou need to pass the name of the screen to navigate to.\\n\\nSee https://reactnavigation.org/docs/navigation-actions for usage.`;\n }\n break;\n case 'GO_BACK':\n case 'POP':\n case 'POP_TO_TOP':\n message += `\\n\\nIs there any screen to go back to?`;\n break;\n case 'OPEN_DRAWER':\n case 'CLOSE_DRAWER':\n case 'TOGGLE_DRAWER':\n message += `\\n\\nIs your screen inside a Drawer navigator?`;\n break;\n }\n message += `\\n\\nThis is a development-only warning and won't be shown in production.`;\n console.error(message);\n }, []);\n let element = /*#__PURE__*/React.createElement(NavigationContainerRefContext.Provider, {\n value: navigation\n }, /*#__PURE__*/React.createElement(ScheduleUpdateContext.Provider, {\n value: scheduleContext\n }, /*#__PURE__*/React.createElement(NavigationBuilderContext.Provider, {\n value: builderContext\n }, /*#__PURE__*/React.createElement(NavigationStateContext.Provider, {\n value: context\n }, /*#__PURE__*/React.createElement(UnhandledActionContext.Provider, {\n value: onUnhandledAction ?? defaultOnUnhandledAction\n }, /*#__PURE__*/React.createElement(EnsureSingleNavigator, null, children))))));\n if (independent) {\n // We need to clear any existing contexts for nested independent container to work correctly\n element = /*#__PURE__*/React.createElement(NavigationRouteContext.Provider, {\n value: undefined\n }, /*#__PURE__*/React.createElement(NavigationContext.Provider, {\n value: undefined\n }, element));\n }\n return element;\n});\nexport default BaseNavigationContainer;\n//# sourceMappingURL=BaseNavigationContainer.js.map","import * as CommonActions from './CommonActions';\nexport { CommonActions };\nexport { default as BaseRouter } from './BaseRouter';\nexport { DrawerActions, default as DrawerRouter } from './DrawerRouter';\nexport { StackActions, default as StackRouter } from './StackRouter';\nexport { TabActions, default as TabRouter } from './TabRouter';\nexport * from './types';\n//# sourceMappingURL=index.js.map","export function goBack() {\n return {\n type: 'GO_BACK'\n };\n}\n// eslint-disable-next-line no-redeclare\nexport function navigate() {\n if (typeof (arguments.length <= 0 ? undefined : arguments[0]) === 'string') {\n return {\n type: 'NAVIGATE',\n payload: {\n name: arguments.length <= 0 ? undefined : arguments[0],\n params: arguments.length <= 1 ? undefined : arguments[1]\n }\n };\n } else {\n const payload = (arguments.length <= 0 ? undefined : arguments[0]) || {};\n if (!payload.hasOwnProperty('key') && !payload.hasOwnProperty('name')) {\n throw new Error('You need to specify name or key when calling navigate with an object as the argument. See https://reactnavigation.org/docs/navigation-actions#navigate for usage.');\n }\n return {\n type: 'NAVIGATE',\n payload\n };\n }\n}\nexport function reset(state) {\n return {\n type: 'RESET',\n payload: state\n };\n}\nexport function setParams(params) {\n return {\n type: 'SET_PARAMS',\n payload: {\n params\n }\n };\n}\n//# sourceMappingURL=CommonActions.js.map","import { nanoid } from 'nanoid/non-secure';\n/**\n * Base router object that can be used when writing custom routers.\n * This provides few helper methods to handle common actions such as `RESET`.\n */\nconst BaseRouter = {\n getStateForAction(state, action) {\n switch (action.type) {\n case 'SET_PARAMS':\n {\n const index = action.source ? state.routes.findIndex(r => r.key === action.source) : state.index;\n if (index === -1) {\n return null;\n }\n return {\n ...state,\n routes: state.routes.map((r, i) => i === index ? {\n ...r,\n params: {\n ...r.params,\n ...action.payload.params\n }\n } : r)\n };\n }\n case 'RESET':\n {\n const nextState = action.payload;\n if (nextState.routes.length === 0 || nextState.routes.some(route => !state.routeNames.includes(route.name))) {\n return null;\n }\n if (nextState.stale === false) {\n if (state.routeNames.length !== nextState.routeNames.length || nextState.routeNames.some(name => !state.routeNames.includes(name))) {\n return null;\n }\n return {\n ...nextState,\n routes: nextState.routes.map(route => route.key ? route : {\n ...route,\n key: `${route.name}-${nanoid()}`\n })\n };\n }\n return nextState;\n }\n default:\n return null;\n }\n },\n shouldActionChangeFocus(action) {\n return action.type === 'NAVIGATE';\n }\n};\nexport default BaseRouter;\n//# sourceMappingURL=BaseRouter.js.map","let urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\nlet customAlphabet = (alphabet, defaultSize = 21) => {\n return (size = defaultSize) => {\n let id = ''\n let i = size\n while (i--) {\n id += alphabet[(Math.random() * alphabet.length) | 0]\n }\n return id\n }\n}\nlet nanoid = (size = 21) => {\n let id = ''\n let i = size\n while (i--) {\n id += urlAlphabet[(Math.random() * 64) | 0]\n }\n return id\n}\nexport { nanoid, customAlphabet }\n","import { nanoid } from 'nanoid/non-secure';\nimport TabRouter, { TabActions } from './TabRouter';\nexport const DrawerActions = {\n ...TabActions,\n openDrawer() {\n return {\n type: 'OPEN_DRAWER'\n };\n },\n closeDrawer() {\n return {\n type: 'CLOSE_DRAWER'\n };\n },\n toggleDrawer() {\n return {\n type: 'TOGGLE_DRAWER'\n };\n }\n};\nexport default function DrawerRouter(_ref) {\n let {\n defaultStatus = 'closed',\n ...rest\n } = _ref;\n const router = TabRouter(rest);\n const isDrawerInHistory = state => {\n var _state$history;\n return Boolean((_state$history = state.history) === null || _state$history === void 0 ? void 0 : _state$history.some(it => it.type === 'drawer'));\n };\n const addDrawerToHistory = state => {\n if (isDrawerInHistory(state)) {\n return state;\n }\n return {\n ...state,\n history: [...state.history, {\n type: 'drawer',\n status: defaultStatus === 'open' ? 'closed' : 'open'\n }]\n };\n };\n const removeDrawerFromHistory = state => {\n if (!isDrawerInHistory(state)) {\n return state;\n }\n return {\n ...state,\n history: state.history.filter(it => it.type !== 'drawer')\n };\n };\n const openDrawer = state => {\n if (defaultStatus === 'open') {\n return removeDrawerFromHistory(state);\n }\n return addDrawerToHistory(state);\n };\n const closeDrawer = state => {\n if (defaultStatus === 'open') {\n return addDrawerToHistory(state);\n }\n return removeDrawerFromHistory(state);\n };\n return {\n ...router,\n type: 'drawer',\n getInitialState(_ref2) {\n let {\n routeNames,\n routeParamList,\n routeGetIdList\n } = _ref2;\n const state = router.getInitialState({\n routeNames,\n routeParamList,\n routeGetIdList\n });\n return {\n ...state,\n default: defaultStatus,\n stale: false,\n type: 'drawer',\n key: `drawer-${nanoid()}`\n };\n },\n getRehydratedState(partialState, _ref3) {\n let {\n routeNames,\n routeParamList,\n routeGetIdList\n } = _ref3;\n if (partialState.stale === false) {\n return partialState;\n }\n let state = router.getRehydratedState(partialState, {\n routeNames,\n routeParamList,\n routeGetIdList\n });\n if (isDrawerInHistory(partialState)) {\n // Re-sync the drawer entry in history to correct it if it was wrong\n state = removeDrawerFromHistory(state);\n state = addDrawerToHistory(state);\n }\n return {\n ...state,\n default: defaultStatus,\n type: 'drawer',\n key: `drawer-${nanoid()}`\n };\n },\n getStateForRouteFocus(state, key) {\n const result = router.getStateForRouteFocus(state, key);\n return closeDrawer(result);\n },\n getStateForAction(state, action, options) {\n switch (action.type) {\n case 'OPEN_DRAWER':\n return openDrawer(state);\n case 'CLOSE_DRAWER':\n return closeDrawer(state);\n case 'TOGGLE_DRAWER':\n if (isDrawerInHistory(state)) {\n return removeDrawerFromHistory(state);\n }\n return addDrawerToHistory(state);\n case 'JUMP_TO':\n case 'NAVIGATE':\n {\n const result = router.getStateForAction(state, action, options);\n if (result != null && result.index !== state.index) {\n return closeDrawer(result);\n }\n return result;\n }\n case 'GO_BACK':\n if (isDrawerInHistory(state)) {\n return removeDrawerFromHistory(state);\n }\n return router.getStateForAction(state, action, options);\n default:\n return router.getStateForAction(state, action, options);\n }\n },\n actionCreators: DrawerActions\n };\n}\n//# sourceMappingURL=DrawerRouter.js.map","import { nanoid } from 'nanoid/non-secure';\nimport BaseRouter from './BaseRouter';\nconst TYPE_ROUTE = 'route';\nexport const TabActions = {\n jumpTo(name, params) {\n return {\n type: 'JUMP_TO',\n payload: {\n name,\n params\n }\n };\n }\n};\nconst getRouteHistory = (routes, index, backBehavior, initialRouteName) => {\n const history = [{\n type: TYPE_ROUTE,\n key: routes[index].key\n }];\n let initialRouteIndex;\n switch (backBehavior) {\n case 'order':\n for (let i = index; i > 0; i--) {\n history.unshift({\n type: TYPE_ROUTE,\n key: routes[i - 1].key\n });\n }\n break;\n case 'firstRoute':\n if (index !== 0) {\n history.unshift({\n type: TYPE_ROUTE,\n key: routes[0].key\n });\n }\n break;\n case 'initialRoute':\n initialRouteIndex = routes.findIndex(route => route.name === initialRouteName);\n initialRouteIndex = initialRouteIndex === -1 ? 0 : initialRouteIndex;\n if (index !== initialRouteIndex) {\n history.unshift({\n type: TYPE_ROUTE,\n key: routes[initialRouteIndex].key\n });\n }\n break;\n case 'history':\n // The history will fill up on navigation\n break;\n }\n return history;\n};\nconst changeIndex = (state, index, backBehavior, initialRouteName) => {\n let history;\n if (backBehavior === 'history') {\n const currentKey = state.routes[index].key;\n history = state.history.filter(it => it.type === 'route' ? it.key !== currentKey : false).concat({\n type: TYPE_ROUTE,\n key: currentKey\n });\n } else {\n history = getRouteHistory(state.routes, index, backBehavior, initialRouteName);\n }\n return {\n ...state,\n index,\n history\n };\n};\nexport default function TabRouter(_ref) {\n let {\n initialRouteName,\n backBehavior = 'firstRoute'\n } = _ref;\n const router = {\n ...BaseRouter,\n type: 'tab',\n getInitialState(_ref2) {\n let {\n routeNames,\n routeParamList\n } = _ref2;\n const index = initialRouteName !== undefined && routeNames.includes(initialRouteName) ? routeNames.indexOf(initialRouteName) : 0;\n const routes = routeNames.map(name => ({\n name,\n key: `${name}-${nanoid()}`,\n params: routeParamList[name]\n }));\n const history = getRouteHistory(routes, index, backBehavior, initialRouteName);\n return {\n stale: false,\n type: 'tab',\n key: `tab-${nanoid()}`,\n index,\n routeNames,\n history,\n routes\n };\n },\n getRehydratedState(partialState, _ref3) {\n var _state$routes, _state$history;\n let {\n routeNames,\n routeParamList\n } = _ref3;\n let state = partialState;\n if (state.stale === false) {\n return state;\n }\n const routes = routeNames.map(name => {\n const route = state.routes.find(r => r.name === name);\n return {\n ...route,\n name,\n key: route && route.name === name && route.key ? route.key : `${name}-${nanoid()}`,\n params: routeParamList[name] !== undefined ? {\n ...routeParamList[name],\n ...(route ? route.params : undefined)\n } : route ? route.params : undefined\n };\n });\n const index = Math.min(Math.max(routeNames.indexOf((_state$routes = state.routes[(state === null || state === void 0 ? void 0 : state.index) ?? 0]) === null || _state$routes === void 0 ? void 0 : _state$routes.name), 0), routes.length - 1);\n const history = ((_state$history = state.history) === null || _state$history === void 0 ? void 0 : _state$history.filter(it => routes.find(r => r.key === it.key))) ?? [];\n return changeIndex({\n stale: false,\n type: 'tab',\n key: `tab-${nanoid()}`,\n index,\n routeNames,\n history,\n routes\n }, index, backBehavior, initialRouteName);\n },\n getStateForRouteNamesChange(state, _ref4) {\n let {\n routeNames,\n routeParamList,\n routeKeyChanges\n } = _ref4;\n const routes = routeNames.map(name => state.routes.find(r => r.name === name && !routeKeyChanges.includes(r.name)) || {\n name,\n key: `${name}-${nanoid()}`,\n params: routeParamList[name]\n });\n const index = Math.max(0, routeNames.indexOf(state.routes[state.index].name));\n let history = state.history.filter(\n // Type will always be 'route' for tabs, but could be different in a router extending this (e.g. drawer)\n it => it.type !== 'route' || routes.find(r => r.key === it.key));\n if (!history.length) {\n history = getRouteHistory(routes, index, backBehavior, initialRouteName);\n }\n return {\n ...state,\n history,\n routeNames,\n routes,\n index\n };\n },\n getStateForRouteFocus(state, key) {\n const index = state.routes.findIndex(r => r.key === key);\n if (index === -1 || index === state.index) {\n return state;\n }\n return changeIndex(state, index, backBehavior, initialRouteName);\n },\n getStateForAction(state, action, _ref5) {\n let {\n routeParamList,\n routeGetIdList\n } = _ref5;\n switch (action.type) {\n case 'JUMP_TO':\n case 'NAVIGATE':\n {\n let index = -1;\n if (action.type === 'NAVIGATE' && action.payload.key) {\n index = state.routes.findIndex(route => route.key === action.payload.key);\n } else {\n index = state.routes.findIndex(route => route.name === action.payload.name);\n }\n if (index === -1) {\n return null;\n }\n return changeIndex({\n ...state,\n routes: state.routes.map((route, i) => {\n if (i !== index) {\n return route;\n }\n const getId = routeGetIdList[route.name];\n const currentId = getId === null || getId === void 0 ? void 0 : getId({\n params: route.params\n });\n const nextId = getId === null || getId === void 0 ? void 0 : getId({\n params: action.payload.params\n });\n const key = currentId === nextId ? route.key : `${route.name}-${nanoid()}`;\n let params;\n if (action.type === 'NAVIGATE' && action.payload.merge && currentId === nextId) {\n params = action.payload.params !== undefined || routeParamList[route.name] !== undefined ? {\n ...routeParamList[route.name],\n ...route.params,\n ...action.payload.params\n } : route.params;\n } else {\n params = routeParamList[route.name] !== undefined ? {\n ...routeParamList[route.name],\n ...action.payload.params\n } : action.payload.params;\n }\n const path = action.type === 'NAVIGATE' && action.payload.path != null ? action.payload.path : route.path;\n return params !== route.params || path !== route.path ? {\n ...route,\n key,\n path,\n params\n } : route;\n })\n }, index, backBehavior, initialRouteName);\n }\n case 'GO_BACK':\n {\n if (state.history.length === 1) {\n return null;\n }\n const previousKey = state.history[state.history.length - 2].key;\n const index = state.routes.findIndex(route => route.key === previousKey);\n if (index === -1) {\n return null;\n }\n return {\n ...state,\n history: state.history.slice(0, -1),\n index\n };\n }\n default:\n return BaseRouter.getStateForAction(state, action);\n }\n },\n shouldActionChangeFocus(action) {\n return action.type === 'NAVIGATE';\n },\n actionCreators: TabActions\n };\n return router;\n}\n//# sourceMappingURL=TabRouter.js.map","import { nanoid } from 'nanoid/non-secure';\nimport BaseRouter from './BaseRouter';\nexport const StackActions = {\n replace(name, params) {\n return {\n type: 'REPLACE',\n payload: {\n name,\n params\n }\n };\n },\n push(name, params) {\n return {\n type: 'PUSH',\n payload: {\n name,\n params\n }\n };\n },\n pop() {\n let count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n return {\n type: 'POP',\n payload: {\n count\n }\n };\n },\n popToTop() {\n return {\n type: 'POP_TO_TOP'\n };\n }\n};\nexport default function StackRouter(options) {\n const router = {\n ...BaseRouter,\n type: 'stack',\n getInitialState(_ref) {\n let {\n routeNames,\n routeParamList\n } = _ref;\n const initialRouteName = options.initialRouteName !== undefined && routeNames.includes(options.initialRouteName) ? options.initialRouteName : routeNames[0];\n return {\n stale: false,\n type: 'stack',\n key: `stack-${nanoid()}`,\n index: 0,\n routeNames,\n routes: [{\n key: `${initialRouteName}-${nanoid()}`,\n name: initialRouteName,\n params: routeParamList[initialRouteName]\n }]\n };\n },\n getRehydratedState(partialState, _ref2) {\n let {\n routeNames,\n routeParamList\n } = _ref2;\n let state = partialState;\n if (state.stale === false) {\n return state;\n }\n const routes = state.routes.filter(route => routeNames.includes(route.name)).map(route => ({\n ...route,\n key: route.key || `${route.name}-${nanoid()}`,\n params: routeParamList[route.name] !== undefined ? {\n ...routeParamList[route.name],\n ...route.params\n } : route.params\n }));\n if (routes.length === 0) {\n const initialRouteName = options.initialRouteName !== undefined ? options.initialRouteName : routeNames[0];\n routes.push({\n key: `${initialRouteName}-${nanoid()}`,\n name: initialRouteName,\n params: routeParamList[initialRouteName]\n });\n }\n return {\n stale: false,\n type: 'stack',\n key: `stack-${nanoid()}`,\n index: routes.length - 1,\n routeNames,\n routes\n };\n },\n getStateForRouteNamesChange(state, _ref3) {\n let {\n routeNames,\n routeParamList,\n routeKeyChanges\n } = _ref3;\n const routes = state.routes.filter(route => routeNames.includes(route.name) && !routeKeyChanges.includes(route.name));\n if (routes.length === 0) {\n const initialRouteName = options.initialRouteName !== undefined && routeNames.includes(options.initialRouteName) ? options.initialRouteName : routeNames[0];\n routes.push({\n key: `${initialRouteName}-${nanoid()}`,\n name: initialRouteName,\n params: routeParamList[initialRouteName]\n });\n }\n return {\n ...state,\n routeNames,\n routes,\n index: Math.min(state.index, routes.length - 1)\n };\n },\n getStateForRouteFocus(state, key) {\n const index = state.routes.findIndex(r => r.key === key);\n if (index === -1 || index === state.index) {\n return state;\n }\n return {\n ...state,\n index,\n routes: state.routes.slice(0, index + 1)\n };\n },\n getStateForAction(state, action, options) {\n const {\n routeParamList\n } = options;\n switch (action.type) {\n case 'REPLACE':\n {\n const index = action.target === state.key && action.source ? state.routes.findIndex(r => r.key === action.source) : state.index;\n if (index === -1) {\n return null;\n }\n const {\n name,\n key,\n params\n } = action.payload;\n if (!state.routeNames.includes(name)) {\n return null;\n }\n return {\n ...state,\n routes: state.routes.map((route, i) => i === index ? {\n key: key !== undefined ? key : `${name}-${nanoid()}`,\n name,\n params: routeParamList[name] !== undefined ? {\n ...routeParamList[name],\n ...params\n } : params\n } : route)\n };\n }\n case 'PUSH':\n if (state.routeNames.includes(action.payload.name)) {\n const getId = options.routeGetIdList[action.payload.name];\n const id = getId === null || getId === void 0 ? void 0 : getId({\n params: action.payload.params\n });\n const route = id ? state.routes.find(route => route.name === action.payload.name && id === (getId === null || getId === void 0 ? void 0 : getId({\n params: route.params\n }))) : undefined;\n let routes;\n if (route) {\n routes = state.routes.filter(r => r.key !== route.key);\n routes.push({\n ...route,\n params: routeParamList[action.payload.name] !== undefined ? {\n ...routeParamList[action.payload.name],\n ...action.payload.params\n } : action.payload.params\n });\n } else {\n routes = [...state.routes, {\n key: `${action.payload.name}-${nanoid()}`,\n name: action.payload.name,\n params: routeParamList[action.payload.name] !== undefined ? {\n ...routeParamList[action.payload.name],\n ...action.payload.params\n } : action.payload.params\n }];\n }\n return {\n ...state,\n index: routes.length - 1,\n routes\n };\n }\n return null;\n case 'POP':\n {\n const index = action.target === state.key && action.source ? state.routes.findIndex(r => r.key === action.source) : state.index;\n if (index > 0) {\n const count = Math.max(index - action.payload.count + 1, 1);\n const routes = state.routes.slice(0, count).concat(state.routes.slice(index + 1));\n return {\n ...state,\n index: routes.length - 1,\n routes\n };\n }\n return null;\n }\n case 'POP_TO_TOP':\n return router.getStateForAction(state, {\n type: 'POP',\n payload: {\n count: state.routes.length - 1\n }\n }, options);\n case 'NAVIGATE':\n if (action.payload.name !== undefined && !state.routeNames.includes(action.payload.name)) {\n return null;\n }\n if (action.payload.key || action.payload.name) {\n // If the route already exists, navigate to that\n let index = -1;\n const getId =\n // `getId` and `key` can't be used together\n action.payload.key === undefined && action.payload.name !== undefined ? options.routeGetIdList[action.payload.name] : undefined;\n const id = getId === null || getId === void 0 ? void 0 : getId({\n params: action.payload.params\n });\n if (id) {\n index = state.routes.findIndex(route => route.name === action.payload.name && id === (getId === null || getId === void 0 ? void 0 : getId({\n params: route.params\n })));\n } else if (state.routes[state.index].name === action.payload.name && action.payload.key === undefined || state.routes[state.index].key === action.payload.key) {\n index = state.index;\n } else {\n for (let i = state.routes.length - 1; i >= 0; i--) {\n if (state.routes[i].name === action.payload.name && action.payload.key === undefined || state.routes[i].key === action.payload.key) {\n index = i;\n break;\n }\n }\n }\n if (index === -1 && action.payload.key && action.payload.name === undefined) {\n return null;\n }\n if (index === -1 && action.payload.name !== undefined) {\n const routes = [...state.routes, {\n key: action.payload.key ?? `${action.payload.name}-${nanoid()}`,\n name: action.payload.name,\n path: action.payload.path,\n params: routeParamList[action.payload.name] !== undefined ? {\n ...routeParamList[action.payload.name],\n ...action.payload.params\n } : action.payload.params\n }];\n return {\n ...state,\n routes,\n index: routes.length - 1\n };\n }\n const route = state.routes[index];\n let params;\n if (action.payload.merge) {\n params = action.payload.params !== undefined || routeParamList[route.name] !== undefined ? {\n ...routeParamList[route.name],\n ...route.params,\n ...action.payload.params\n } : route.params;\n } else {\n params = routeParamList[route.name] !== undefined ? {\n ...routeParamList[route.name],\n ...action.payload.params\n } : action.payload.params;\n }\n return {\n ...state,\n index,\n routes: [...state.routes.slice(0, index), params !== route.params || action.payload.path && action.payload.path !== route.path ? {\n ...route,\n path: action.payload.path ?? route.path,\n params\n } : state.routes[index]]\n };\n }\n return null;\n case 'GO_BACK':\n if (state.index > 0) {\n return router.getStateForAction(state, {\n type: 'POP',\n payload: {\n count: 1\n },\n target: action.target,\n source: action.source\n }, options);\n }\n return null;\n default:\n return BaseRouter.getStateForAction(state, action);\n }\n },\n actionCreators: StackActions\n };\n return router;\n}\n//# sourceMappingURL=StackRouter.js.map","export {};\n//# sourceMappingURL=types.js.map","export default function checkDuplicateRouteNames(state) {\n const duplicates = [];\n const getRouteNames = (location, state) => {\n state.routes.forEach(route => {\n var _route$state, _route$state$routeNam;\n const currentLocation = location ? `${location} > ${route.name}` : route.name;\n (_route$state = route.state) === null || _route$state === void 0 ? void 0 : (_route$state$routeNam = _route$state.routeNames) === null || _route$state$routeNam === void 0 ? void 0 : _route$state$routeNam.forEach(routeName => {\n if (routeName === route.name) {\n duplicates.push([currentLocation, `${currentLocation} > ${route.name}`]);\n }\n });\n if (route.state) {\n getRouteNames(currentLocation, route.state);\n }\n });\n };\n getRouteNames('', state);\n return duplicates;\n}\n//# sourceMappingURL=checkDuplicateRouteNames.js.map","const checkSerializableWithoutCircularReference = (o, seen, location) => {\n if (o === undefined || o === null || typeof o === 'boolean' || typeof o === 'number' || typeof o === 'string') {\n return {\n serializable: true\n };\n }\n if (Object.prototype.toString.call(o) !== '[object Object]' && !Array.isArray(o)) {\n return {\n serializable: false,\n location,\n reason: typeof o === 'function' ? 'Function' : String(o)\n };\n }\n if (seen.has(o)) {\n return {\n serializable: false,\n reason: 'Circular reference',\n location\n };\n }\n seen.add(o);\n if (Array.isArray(o)) {\n for (let i = 0; i < o.length; i++) {\n const childResult = checkSerializableWithoutCircularReference(o[i], new Set(seen), [...location, i]);\n if (!childResult.serializable) {\n return childResult;\n }\n }\n } else {\n for (const key in o) {\n const childResult = checkSerializableWithoutCircularReference(o[key], new Set(seen), [...location, key]);\n if (!childResult.serializable) {\n return childResult;\n }\n }\n }\n return {\n serializable: true\n };\n};\nexport default function checkSerializable(o) {\n return checkSerializableWithoutCircularReference(o, new Set(), []);\n}\n//# sourceMappingURL=checkSerializable.js.map","import { CommonActions } from '@react-navigation/routers';\nexport const NOT_INITIALIZED_ERROR = \"The 'navigation' object hasn't been initialized yet. This might happen if you don't have a navigator mounted, or if the navigator hasn't finished mounting. See https://reactnavigation.org/docs/navigating-without-navigation-prop#handling-initialization for more details.\";\nexport default function createNavigationContainerRef() {\n const methods = [...Object.keys(CommonActions), 'addListener', 'removeListener', 'resetRoot', 'dispatch', 'isFocused', 'canGoBack', 'getRootState', 'getState', 'getParent', 'getCurrentRoute', 'getCurrentOptions'];\n const listeners = {};\n const removeListener = (event, callback) => {\n if (listeners[event]) {\n listeners[event] = listeners[event].filter(cb => cb !== callback);\n }\n };\n let current = null;\n const ref = {\n get current() {\n return current;\n },\n set current(value) {\n current = value;\n if (value != null) {\n Object.entries(listeners).forEach(_ref => {\n let [event, callbacks] = _ref;\n callbacks.forEach(callback => {\n value.addListener(event, callback);\n });\n });\n }\n },\n isReady: () => {\n if (current == null) {\n return false;\n }\n return current.isReady();\n },\n ...methods.reduce((acc, name) => {\n acc[name] = function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (current == null) {\n switch (name) {\n case 'addListener':\n {\n const [event, callback] = args;\n listeners[event] = listeners[event] || [];\n listeners[event].push(callback);\n return () => removeListener(event, callback);\n }\n case 'removeListener':\n {\n const [event, callback] = args;\n removeListener(event, callback);\n break;\n }\n default:\n console.error(NOT_INITIALIZED_ERROR);\n }\n } else {\n // @ts-expect-error: this is ok\n return current[name](...args);\n }\n };\n return acc;\n }, {})\n };\n return ref;\n}\n//# sourceMappingURL=createNavigationContainerRef.js.map","import * as React from 'react';\nconst MULTIPLE_NAVIGATOR_ERROR = `Another navigator is already registered for this container. You likely have multiple navigators under a single \"NavigationContainer\" or \"Screen\". Make sure each navigator is under a separate \"Screen\" container. See https://reactnavigation.org/docs/nesting-navigators for a guide on nesting.`;\nexport const SingleNavigatorContext = /*#__PURE__*/React.createContext(undefined);\n\n/**\n * Component which ensures that there's only one navigator nested under it.\n */\nexport default function EnsureSingleNavigator(_ref) {\n let {\n children\n } = _ref;\n const navigatorKeyRef = React.useRef();\n const value = React.useMemo(() => ({\n register(key) {\n const currentKey = navigatorKeyRef.current;\n if (currentKey !== undefined && key !== currentKey) {\n throw new Error(MULTIPLE_NAVIGATOR_ERROR);\n }\n navigatorKeyRef.current = key;\n },\n unregister(key) {\n const currentKey = navigatorKeyRef.current;\n if (key !== currentKey) {\n return;\n }\n navigatorKeyRef.current = undefined;\n }\n }), []);\n return /*#__PURE__*/React.createElement(SingleNavigatorContext.Provider, {\n value: value\n }, children);\n}\n//# sourceMappingURL=EnsureSingleNavigator.js.map","export default function findFocusedRoute(state) {\n var _current2, _current3;\n let current = state;\n while (((_current = current) === null || _current === void 0 ? void 0 : _current.routes[current.index ?? 0].state) != null) {\n var _current;\n current = current.routes[current.index ?? 0].state;\n }\n const route = (_current2 = current) === null || _current2 === void 0 ? void 0 : _current2.routes[((_current3 = current) === null || _current3 === void 0 ? void 0 : _current3.index) ?? 0];\n return route;\n}\n//# sourceMappingURL=findFocusedRoute.js.map","import * as React from 'react';\n/**\n * Context which holds the required helpers needed to build nested navigators.\n */\nconst NavigationBuilderContext = /*#__PURE__*/React.createContext({\n onDispatchAction: () => undefined,\n onOptionsChange: () => undefined\n});\nexport default NavigationBuilderContext;\n//# sourceMappingURL=NavigationBuilderContext.js.map","import * as React from 'react';\n/**\n * Context which holds the route prop for a screen.\n */\nconst NavigationContainerRefContext = /*#__PURE__*/React.createContext(undefined);\nexport default NavigationContainerRefContext;\n//# sourceMappingURL=NavigationContainerRefContext.js.map","import * as React from 'react';\n/**\n * Context which holds the navigation prop for a screen.\n */\nconst NavigationContext = /*#__PURE__*/React.createContext(undefined);\nexport default NavigationContext;\n//# sourceMappingURL=NavigationContext.js.map","import * as React from 'react';\n\n/**\n * Context which holds the route prop for a screen.\n */\nconst NavigationRouteContext = /*#__PURE__*/React.createContext(undefined);\nexport default NavigationRouteContext;\n//# sourceMappingURL=NavigationRouteContext.js.map","import * as React from 'react';\nconst MISSING_CONTEXT_ERROR = \"Couldn't find a navigation context. Have you wrapped your app with 'NavigationContainer'? See https://reactnavigation.org/docs/getting-started for setup instructions.\";\nexport default /*#__PURE__*/React.createContext({\n isDefault: true,\n get getKey() {\n throw new Error(MISSING_CONTEXT_ERROR);\n },\n get setKey() {\n throw new Error(MISSING_CONTEXT_ERROR);\n },\n get getState() {\n throw new Error(MISSING_CONTEXT_ERROR);\n },\n get setState() {\n throw new Error(MISSING_CONTEXT_ERROR);\n },\n get getIsInitial() {\n throw new Error(MISSING_CONTEXT_ERROR);\n }\n});\n//# sourceMappingURL=NavigationStateContext.js.map","import * as React from 'react';\nconst UnhandledActionContext = /*#__PURE__*/React.createContext(undefined);\nexport default UnhandledActionContext;\n//# sourceMappingURL=UnhandledActionContext.js.map","import * as React from 'react';\n/**\n * Hook which lets child navigators add action listeners.\n */\nexport default function useChildListeners() {\n const {\n current: listeners\n } = React.useRef({\n action: [],\n focus: []\n });\n const addListener = React.useCallback((type, listener) => {\n listeners[type].push(listener);\n let removed = false;\n return () => {\n const index = listeners[type].indexOf(listener);\n if (!removed && index > -1) {\n removed = true;\n listeners[type].splice(index, 1);\n }\n };\n }, [listeners]);\n return {\n listeners,\n addListener\n };\n}\n//# sourceMappingURL=useChildListeners.js.map","import * as React from 'react';\n/**\n * Hook to manage the event system used by the navigator to notify screens of various events.\n */\nexport default function useEventEmitter(listen) {\n const listenRef = React.useRef(listen);\n React.useEffect(() => {\n listenRef.current = listen;\n });\n const listeners = React.useRef(Object.create(null));\n const create = React.useCallback(target => {\n const removeListener = (type, callback) => {\n const callbacks = listeners.current[type] ? listeners.current[type][target] : undefined;\n if (!callbacks) {\n return;\n }\n const index = callbacks.indexOf(callback);\n if (index > -1) {\n callbacks.splice(index, 1);\n }\n };\n const addListener = (type, callback) => {\n listeners.current[type] = listeners.current[type] || {};\n listeners.current[type][target] = listeners.current[type][target] || [];\n listeners.current[type][target].push(callback);\n let removed = false;\n return () => {\n // Prevent removing other listeners when unsubscribing same listener multiple times\n if (!removed) {\n removed = true;\n removeListener(type, callback);\n }\n };\n };\n return {\n addListener,\n removeListener\n };\n }, []);\n const emit = React.useCallback(_ref => {\n var _items$target, _listenRef$current;\n let {\n type,\n data,\n target,\n canPreventDefault\n } = _ref;\n const items = listeners.current[type] || {};\n\n // Copy the current list of callbacks in case they are mutated during execution\n const callbacks = target !== undefined ? (_items$target = items[target]) === null || _items$target === void 0 ? void 0 : _items$target.slice() : [].concat(...Object.keys(items).map(t => items[t])).filter((cb, i, self) => self.lastIndexOf(cb) === i);\n const event = {\n get type() {\n return type;\n }\n };\n if (target !== undefined) {\n Object.defineProperty(event, 'target', {\n enumerable: true,\n get() {\n return target;\n }\n });\n }\n if (data !== undefined) {\n Object.defineProperty(event, 'data', {\n enumerable: true,\n get() {\n return data;\n }\n });\n }\n if (canPreventDefault) {\n let defaultPrevented = false;\n Object.defineProperties(event, {\n defaultPrevented: {\n enumerable: true,\n get() {\n return defaultPrevented;\n }\n },\n preventDefault: {\n enumerable: true,\n value() {\n defaultPrevented = true;\n }\n }\n });\n }\n (_listenRef$current = listenRef.current) === null || _listenRef$current === void 0 ? void 0 : _listenRef$current.call(listenRef, event);\n callbacks === null || callbacks === void 0 ? void 0 : callbacks.forEach(cb => cb(event));\n return event;\n }, []);\n return React.useMemo(() => ({\n create,\n emit\n }), [create, emit]);\n}\n//# sourceMappingURL=useEventEmitter.js.map","import * as React from 'react';\n/**\n * Hook which lets child navigators add getters to be called for obtaining rehydrated state.\n */\nexport default function useKeyedChildListeners() {\n const {\n current: keyedListeners\n } = React.useRef(Object.assign(Object.create(null), {\n getState: {},\n beforeRemove: {}\n }));\n const addKeyedListener = React.useCallback((type, key, listener) => {\n // @ts-expect-error: according to ref stated above you can use `key` to index type\n keyedListeners[type][key] = listener;\n return () => {\n // @ts-expect-error: according to ref stated above you can use `key` to index type\n keyedListeners[type][key] = undefined;\n };\n }, [keyedListeners]);\n return {\n keyedListeners,\n addKeyedListener\n };\n}\n//# sourceMappingURL=useKeyedChildListeners.js.map","import * as React from 'react';\nimport NavigationBuilderContext from './NavigationBuilderContext';\nimport NavigationStateContext from './NavigationStateContext';\nexport default function useOptionsGetters(_ref) {\n let {\n key,\n options,\n navigation\n } = _ref;\n const optionsRef = React.useRef(options);\n const optionsGettersFromChildRef = React.useRef({});\n const {\n onOptionsChange\n } = React.useContext(NavigationBuilderContext);\n const {\n addOptionsGetter: parentAddOptionsGetter\n } = React.useContext(NavigationStateContext);\n const optionsChangeListener = React.useCallback(() => {\n const isFocused = (navigation === null || navigation === void 0 ? void 0 : navigation.isFocused()) ?? true;\n const hasChildren = Object.keys(optionsGettersFromChildRef.current).length;\n if (isFocused && !hasChildren) {\n onOptionsChange(optionsRef.current ?? {});\n }\n }, [navigation, onOptionsChange]);\n React.useEffect(() => {\n optionsRef.current = options;\n optionsChangeListener();\n return navigation === null || navigation === void 0 ? void 0 : navigation.addListener('focus', optionsChangeListener);\n }, [navigation, options, optionsChangeListener]);\n const getOptionsFromListener = React.useCallback(() => {\n for (let key in optionsGettersFromChildRef.current) {\n if (optionsGettersFromChildRef.current.hasOwnProperty(key)) {\n var _optionsGettersFromCh, _optionsGettersFromCh2;\n const result = (_optionsGettersFromCh = (_optionsGettersFromCh2 = optionsGettersFromChildRef.current)[key]) === null || _optionsGettersFromCh === void 0 ? void 0 : _optionsGettersFromCh.call(_optionsGettersFromCh2);\n\n // null means unfocused route\n if (result !== null) {\n return result;\n }\n }\n }\n return null;\n }, []);\n const getCurrentOptions = React.useCallback(() => {\n const isFocused = (navigation === null || navigation === void 0 ? void 0 : navigation.isFocused()) ?? true;\n if (!isFocused) {\n return null;\n }\n const optionsFromListener = getOptionsFromListener();\n if (optionsFromListener !== null) {\n return optionsFromListener;\n }\n return optionsRef.current;\n }, [navigation, getOptionsFromListener]);\n React.useEffect(() => {\n return parentAddOptionsGetter === null || parentAddOptionsGetter === void 0 ? void 0 : parentAddOptionsGetter(key, getCurrentOptions);\n }, [getCurrentOptions, parentAddOptionsGetter, key]);\n const addOptionsGetter = React.useCallback((key, getter) => {\n optionsGettersFromChildRef.current[key] = getter;\n optionsChangeListener();\n return () => {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete optionsGettersFromChildRef.current[key];\n optionsChangeListener();\n };\n }, [optionsChangeListener]);\n return {\n addOptionsGetter,\n getCurrentOptions\n };\n}\n//# sourceMappingURL=useOptionsGetters.js.map","import * as React from 'react';\nconst MISSING_CONTEXT_ERROR = \"Couldn't find a schedule context.\";\nexport const ScheduleUpdateContext = /*#__PURE__*/React.createContext({\n scheduleUpdate() {\n throw new Error(MISSING_CONTEXT_ERROR);\n },\n flushUpdates() {\n throw new Error(MISSING_CONTEXT_ERROR);\n }\n});\n\n/**\n * When screen config changes, we want to update the navigator in the same update phase.\n * However, navigation state is in the root component and React won't let us update it from a child.\n * This is a workaround for that, the scheduled update is stored in the ref without actually calling setState.\n * It lets all subsequent updates access the latest state so it stays correct.\n * Then we call setState during after the component updates.\n */\nexport default function useScheduleUpdate(callback) {\n const {\n scheduleUpdate,\n flushUpdates\n } = React.useContext(ScheduleUpdateContext);\n scheduleUpdate(callback);\n React.useEffect(flushUpdates);\n}\n//# sourceMappingURL=useScheduleUpdate.js.map","import * as React from 'react';\nconst UNINTIALIZED_STATE = {};\n\n/**\n * This is definitely not compatible with concurrent mode, but we don't have a solution for sync state yet.\n */\nexport default function useSyncState(initialState) {\n const stateRef = React.useRef(UNINTIALIZED_STATE);\n const isSchedulingRef = React.useRef(false);\n const isMountedRef = React.useRef(true);\n React.useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n if (stateRef.current === UNINTIALIZED_STATE) {\n stateRef.current =\n // @ts-expect-error: initialState is a function, but TypeScript doesn't think so\n typeof initialState === 'function' ? initialState() : initialState;\n }\n const [trackingState, setTrackingState] = React.useState(stateRef.current);\n const getState = React.useCallback(() => stateRef.current, []);\n const setState = React.useCallback(state => {\n if (state === stateRef.current || !isMountedRef.current) {\n return;\n }\n stateRef.current = state;\n if (!isSchedulingRef.current) {\n setTrackingState(state);\n }\n }, []);\n const scheduleUpdate = React.useCallback(callback => {\n isSchedulingRef.current = true;\n try {\n callback();\n } finally {\n isSchedulingRef.current = false;\n }\n }, []);\n const flushUpdates = React.useCallback(() => {\n if (!isMountedRef.current) {\n return;\n }\n\n // Make sure that the tracking state is up-to-date.\n // We call it unconditionally, but React should skip the update if state is unchanged.\n setTrackingState(stateRef.current);\n }, []);\n\n // If we're rendering and the tracking state is out of date, update it immediately\n // This will make sure that our updates are applied as early as possible.\n if (trackingState !== stateRef.current) {\n setTrackingState(stateRef.current);\n }\n const state = stateRef.current;\n React.useDebugValue(state);\n return [state, getState, setState, scheduleUpdate, flushUpdates];\n}\n//# sourceMappingURL=useSyncState.js.map","import Group from './Group';\nimport Screen from './Screen';\n/**\n * Higher order component to create a `Navigator` and `Screen` pair.\n * Custom navigators should wrap the navigator component in `createNavigator` before exporting.\n *\n * @param Navigator The navigtor component to wrap.\n * @returns Factory method to create a `Navigator` and `Screen` pair.\n */\nexport default function createNavigatorFactory(Navigator) {\n return function () {\n if (arguments[0] !== undefined) {\n throw new Error(\"Creating a navigator doesn't take an argument. Maybe you are trying to use React Navigation 4 API? See https://reactnavigation.org/docs/hello-react-navigation for the latest API and guides.\");\n }\n return {\n Navigator,\n Group,\n Screen\n };\n };\n}\n//# sourceMappingURL=createNavigatorFactory.js.map","/**\n * Empty component used for grouping screen configs.\n */\nexport default function Group(_) {\n /* istanbul ignore next */\n return null;\n}\n//# sourceMappingURL=Group.js.map","/**\n * Empty component used for specifying route configuration.\n */\nexport default function Screen(_) {\n /* istanbul ignore next */\n return null;\n}\n//# sourceMappingURL=Screen.js.map","import * as React from 'react';\n\n/**\n * Context which holds the values for the current navigation tree.\n * Intended for use in SSR. This is not safe to use on the client.\n */\nconst CurrentRenderContext = /*#__PURE__*/React.createContext(undefined);\nexport default CurrentRenderContext;\n//# sourceMappingURL=CurrentRenderContext.js.map","export default function getActionFromState(state, options) {\n var _normalizedConfig$scr;\n // Create a normalized configs object which will be easier to use\n const normalizedConfig = options ? createNormalizedConfigItem(options) : {};\n const routes = state.index != null ? state.routes.slice(0, state.index + 1) : state.routes;\n if (routes.length === 0) {\n return undefined;\n }\n if (!(routes.length === 1 && routes[0].key === undefined || routes.length === 2 && routes[0].key === undefined && routes[0].name === (normalizedConfig === null || normalizedConfig === void 0 ? void 0 : normalizedConfig.initialRouteName) && routes[1].key === undefined)) {\n return {\n type: 'RESET',\n payload: state\n };\n }\n const route = state.routes[state.index ?? state.routes.length - 1];\n let current = route === null || route === void 0 ? void 0 : route.state;\n let config = normalizedConfig === null || normalizedConfig === void 0 ? void 0 : (_normalizedConfig$scr = normalizedConfig.screens) === null || _normalizedConfig$scr === void 0 ? void 0 : _normalizedConfig$scr[route === null || route === void 0 ? void 0 : route.name];\n let params = {\n ...route.params\n };\n let payload = route ? {\n name: route.name,\n path: route.path,\n params\n } : undefined;\n while (current) {\n var _config, _config2, _config2$screens;\n if (current.routes.length === 0) {\n return undefined;\n }\n const routes = current.index != null ? current.routes.slice(0, current.index + 1) : current.routes;\n const route = routes[routes.length - 1];\n\n // Explicitly set to override existing value when merging params\n Object.assign(params, {\n initial: undefined,\n screen: undefined,\n params: undefined,\n state: undefined\n });\n if (routes.length === 1 && routes[0].key === undefined) {\n params.initial = true;\n params.screen = route.name;\n } else if (routes.length === 2 && routes[0].key === undefined && routes[0].name === ((_config = config) === null || _config === void 0 ? void 0 : _config.initialRouteName) && routes[1].key === undefined) {\n params.initial = false;\n params.screen = route.name;\n } else {\n params.state = current;\n break;\n }\n if (route.state) {\n params.params = {\n ...route.params\n };\n params = params.params;\n } else {\n params.path = route.path;\n params.params = route.params;\n }\n current = route.state;\n config = (_config2 = config) === null || _config2 === void 0 ? void 0 : (_config2$screens = _config2.screens) === null || _config2$screens === void 0 ? void 0 : _config2$screens[route.name];\n }\n if (!payload) {\n return;\n }\n\n // Try to construct payload for a `NAVIGATE` action from the state\n // This lets us preserve the navigation state and not lose it\n return {\n type: 'NAVIGATE',\n payload\n };\n}\nconst createNormalizedConfigItem = config => typeof config === 'object' && config != null ? {\n initialRouteName: config.initialRouteName,\n screens: config.screens != null ? createNormalizedConfigs(config.screens) : undefined\n} : {};\nconst createNormalizedConfigs = options => Object.entries(options).reduce((acc, _ref) => {\n let [k, v] = _ref;\n acc[k] = createNormalizedConfigItem(v);\n return acc;\n}, {});\n//# sourceMappingURL=getActionFromState.js.map","import { CHILD_STATE } from './useRouteCache';\nexport default function getFocusedRouteNameFromRoute(route) {\n // @ts-expect-error: this isn't in type definitions coz we want this private\n const state = route[CHILD_STATE] ?? route.state;\n const params = route.params;\n const routeName = state ?\n // Get the currently active route name in the nested navigator\n state.routes[\n // If we have a partial state without index, for tab/drawer, first screen will be focused one, and last for stack\n // The type property will only exist for rehydrated state and not for state from deep link\n state.index ?? (typeof state.type === 'string' && state.type !== 'stack' ? 0 : state.routes.length - 1)].name :\n // If state doesn't exist, we need to default to `screen` param if available\n typeof (params === null || params === void 0 ? void 0 : params.screen) === 'string' ? params.screen : undefined;\n return routeName;\n}\n//# sourceMappingURL=getFocusedRouteNameFromRoute.js.map","import * as React from 'react';\n/**\n * Utilites such as `getFocusedRouteNameFromRoute` need to access state.\n * So we need a way to suppress the warning for those use cases.\n * This is fine since they are internal utilities and this is not public API.\n */\nexport const CHILD_STATE = Symbol('CHILD_STATE');\n\n/**\n * Hook to cache route props for each screen in the navigator.\n * This lets add warnings and modifications to the route object but keep references between renders.\n */\nexport default function useRouteCache(routes) {\n // Cache object which holds route objects for each screen\n const cache = React.useMemo(() => ({\n current: new Map()\n }), []);\n if (process.env.NODE_ENV === 'production') {\n // We don't want the overhead of creating extra maps every render in prod\n return routes;\n }\n cache.current = routes.reduce((acc, route) => {\n const previous = cache.current.get(route);\n if (previous) {\n // If a cached route object already exists, reuse it\n acc.set(route, previous);\n } else {\n const {\n state,\n ...proxy\n } = route;\n Object.defineProperty(proxy, CHILD_STATE, {\n enumerable: false,\n value: state\n });\n acc.set(route, proxy);\n }\n return acc;\n }, new Map());\n return Array.from(cache.current.values());\n}\n//# sourceMappingURL=useRouteCache.js.map","import * as queryString from 'query-string';\nimport fromEntries from './fromEntries';\nimport validatePathConfig from './validatePathConfig';\nconst getActiveRoute = state => {\n const route = typeof state.index === 'number' ? state.routes[state.index] : state.routes[state.routes.length - 1];\n if (route.state) {\n return getActiveRoute(route.state);\n }\n return route;\n};\n\n/**\n * Utility to serialize a navigation state object to a path string.\n *\n * @example\n * ```js\n * getPathFromState(\n * {\n * routes: [\n * {\n * name: 'Chat',\n * params: { author: 'Jane', id: 42 },\n * },\n * ],\n * },\n * {\n * screens: {\n * Chat: {\n * path: 'chat/:author/:id',\n * stringify: { author: author => author.toLowerCase() }\n * }\n * }\n * }\n * )\n * ```\n *\n * @param state Navigation state to serialize.\n * @param options Extra options to fine-tune how to serialize the path.\n * @returns Path representing the state, e.g. /foo/bar?count=42.\n */\nexport default function getPathFromState(state, options) {\n if (state == null) {\n throw Error(\"Got 'undefined' for the navigation state. You must pass a valid state object.\");\n }\n if (options) {\n validatePathConfig(options);\n }\n\n // Create a normalized configs object which will be easier to use\n const configs = options !== null && options !== void 0 && options.screens ? createNormalizedConfigs(options === null || options === void 0 ? void 0 : options.screens) : {};\n let path = '/';\n let current = state;\n const allParams = {};\n while (current) {\n let index = typeof current.index === 'number' ? current.index : 0;\n let route = current.routes[index];\n let pattern;\n let focusedParams;\n let focusedRoute = getActiveRoute(state);\n let currentOptions = configs;\n\n // Keep all the route names that appeared during going deeper in config in case the pattern is resolved to undefined\n let nestedRouteNames = [];\n let hasNext = true;\n while (route.name in currentOptions && hasNext) {\n pattern = currentOptions[route.name].pattern;\n nestedRouteNames.push(route.name);\n if (route.params) {\n var _currentOptions$route;\n const stringify = (_currentOptions$route = currentOptions[route.name]) === null || _currentOptions$route === void 0 ? void 0 : _currentOptions$route.stringify;\n const currentParams = fromEntries(Object.entries(route.params).map(_ref => {\n let [key, value] = _ref;\n return [key, stringify !== null && stringify !== void 0 && stringify[key] ? stringify[key](value) : String(value)];\n }));\n if (pattern) {\n Object.assign(allParams, currentParams);\n }\n if (focusedRoute === route) {\n var _pattern;\n // If this is the focused route, keep the params for later use\n // We save it here since it's been stringified already\n focusedParams = {\n ...currentParams\n };\n (_pattern = pattern) === null || _pattern === void 0 ? void 0 : _pattern.split('/').filter(p => p.startsWith(':'))\n // eslint-disable-next-line no-loop-func\n .forEach(p => {\n const name = getParamName(p);\n\n // Remove the params present in the pattern since we'll only use the rest for query string\n if (focusedParams) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete focusedParams[name];\n }\n });\n }\n }\n\n // If there is no `screens` property or no nested state, we return pattern\n if (!currentOptions[route.name].screens || route.state === undefined) {\n hasNext = false;\n } else {\n index = typeof route.state.index === 'number' ? route.state.index : route.state.routes.length - 1;\n const nextRoute = route.state.routes[index];\n const nestedConfig = currentOptions[route.name].screens;\n\n // if there is config for next route name, we go deeper\n if (nestedConfig && nextRoute.name in nestedConfig) {\n route = nextRoute;\n currentOptions = nestedConfig;\n } else {\n // If not, there is no sense in going deeper in config\n hasNext = false;\n }\n }\n }\n if (pattern === undefined) {\n pattern = nestedRouteNames.join('/');\n }\n if (currentOptions[route.name] !== undefined) {\n path += pattern.split('/').map(p => {\n const name = getParamName(p);\n\n // We don't know what to show for wildcard patterns\n // Showing the route name seems ok, though whatever we show here will be incorrect\n // Since the page doesn't actually exist\n if (p === '*') {\n return route.name;\n }\n\n // If the path has a pattern for a param, put the param in the path\n if (p.startsWith(':')) {\n const value = allParams[name];\n if (value === undefined && p.endsWith('?')) {\n // Optional params without value assigned in route.params should be ignored\n return '';\n }\n return encodeURIComponent(value);\n }\n return encodeURIComponent(p);\n }).join('/');\n } else {\n path += encodeURIComponent(route.name);\n }\n if (!focusedParams) {\n focusedParams = focusedRoute.params;\n }\n if (route.state) {\n path += '/';\n } else if (focusedParams) {\n for (let param in focusedParams) {\n if (focusedParams[param] === 'undefined') {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete focusedParams[param];\n }\n }\n const query = queryString.stringify(focusedParams, {\n sort: false\n });\n if (query) {\n path += `?${query}`;\n }\n }\n current = route.state;\n }\n\n // Remove multiple as well as trailing slashes\n path = path.replace(/\\/+/g, '/');\n path = path.length > 1 ? path.replace(/\\/$/, '') : path;\n return path;\n}\nconst getParamName = pattern => pattern.replace(/^:/, '').replace(/\\?$/, '');\nconst joinPaths = function () {\n for (var _len = arguments.length, paths = new Array(_len), _key = 0; _key < _len; _key++) {\n paths[_key] = arguments[_key];\n }\n return [].concat(...paths.map(p => p.split('/'))).filter(Boolean).join('/');\n};\nconst createConfigItem = (config, parentPattern) => {\n var _pattern2;\n if (typeof config === 'string') {\n // If a string is specified as the value of the key(e.g. Foo: '/path'), use it as the pattern\n const pattern = parentPattern ? joinPaths(parentPattern, config) : config;\n return {\n pattern\n };\n }\n\n // If an object is specified as the value (e.g. Foo: { ... }),\n // It can have `path` property and `screens` prop which has nested configs\n let pattern;\n if (config.exact && config.path === undefined) {\n throw new Error(\"A 'path' needs to be specified when specifying 'exact: true'. If you don't want this screen in the URL, specify it as empty string, e.g. `path: ''`.\");\n }\n pattern = config.exact !== true ? joinPaths(parentPattern || '', config.path || '') : config.path || '';\n const screens = config.screens ? createNormalizedConfigs(config.screens, pattern) : undefined;\n return {\n // Normalize pattern to remove any leading, trailing slashes, duplicate slashes etc.\n pattern: (_pattern2 = pattern) === null || _pattern2 === void 0 ? void 0 : _pattern2.split('/').filter(Boolean).join('/'),\n stringify: config.stringify,\n screens\n };\n};\nconst createNormalizedConfigs = (options, pattern) => fromEntries(Object.entries(options).map(_ref2 => {\n let [name, c] = _ref2;\n const result = createConfigItem(c, pattern);\n return [name, result];\n}));\n//# sourceMappingURL=getPathFromState.js.map","'use strict';\nconst strictUriEncode = require('strict-uri-encode');\nconst decodeComponent = require('decode-uri-component');\nconst splitOnFirst = require('split-on-first');\nconst filterObject = require('filter-obj');\n\nconst isNullOrUndefined = value => value === null || value === undefined;\n\nconst encodeFragmentIdentifier = Symbol('encodeFragmentIdentifier');\n\nfunction encoderForArrayFormat(options) {\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tconst index = result.length;\n\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[', index, ']'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '[', encode(index, options), ']=', encode(value, options)].join('')\n\t\t\t\t];\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[]'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '[]=', encode(value, options)].join('')];\n\t\t\t};\n\n\t\tcase 'colon-list-separator':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), ':list='].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), ':list=', encode(value, options)].join('')];\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\tcase 'bracket-separator': {\n\t\t\tconst keyValueSep = options.arrayFormat === 'bracket-separator' ?\n\t\t\t\t'[]=' :\n\t\t\t\t'=';\n\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\t// Translate null to an empty string so that it doesn't serialize as 'null'\n\t\t\t\tvalue = value === null ? '' : value;\n\n\t\t\t\tif (result.length === 0) {\n\t\t\t\t\treturn [[encode(key, options), keyValueSep, encode(value, options)].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [[result, encode(value, options)].join(options.arrayFormatSeparator)];\n\t\t\t};\n\t\t}\n\n\t\tdefault:\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, encode(key, options)];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '=', encode(value, options)].join('')];\n\t\t\t};\n\t}\n}\n\nfunction parserForArrayFormat(options) {\n\tlet result;\n\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /\\[(\\d*)\\]$/.exec(key);\n\n\t\t\t\tkey = key.replace(/\\[\\d*\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = {};\n\t\t\t\t}\n\n\t\t\t\taccumulator[key][result[1]] = value;\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(\\[\\])$/.exec(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tcase 'colon-list-separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(:list)$/.exec(key);\n\t\t\t\tkey = key.replace(/:list$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = typeof value === 'string' && value.includes(options.arrayFormatSeparator);\n\t\t\t\tconst isEncodedArray = (typeof value === 'string' && !isArray && decode(value, options).includes(options.arrayFormatSeparator));\n\t\t\t\tvalue = isEncodedArray ? decode(value, options) : value;\n\t\t\t\tconst newValue = isArray || isEncodedArray ? value.split(options.arrayFormatSeparator).map(item => decode(item, options)) : value === null ? value : decode(value, options);\n\t\t\t\taccumulator[key] = newValue;\n\t\t\t};\n\n\t\tcase 'bracket-separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = /(\\[\\])$/.test(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!isArray) {\n\t\t\t\t\taccumulator[key] = value ? decode(value, options) : value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst arrayValue = value === null ?\n\t\t\t\t\t[] :\n\t\t\t\t\tvalue.split(options.arrayFormatSeparator).map(item => decode(item, options));\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = arrayValue;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], arrayValue);\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\t}\n}\n\nfunction validateArrayFormatSeparator(value) {\n\tif (typeof value !== 'string' || value.length !== 1) {\n\t\tthrow new TypeError('arrayFormatSeparator must be single character string');\n\t}\n}\n\nfunction encode(value, options) {\n\tif (options.encode) {\n\t\treturn options.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction decode(value, options) {\n\tif (options.decode) {\n\t\treturn decodeComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction keysSorter(input) {\n\tif (Array.isArray(input)) {\n\t\treturn input.sort();\n\t}\n\n\tif (typeof input === 'object') {\n\t\treturn keysSorter(Object.keys(input))\n\t\t\t.sort((a, b) => Number(a) - Number(b))\n\t\t\t.map(key => input[key]);\n\t}\n\n\treturn input;\n}\n\nfunction removeHash(input) {\n\tconst hashStart = input.indexOf('#');\n\tif (hashStart !== -1) {\n\t\tinput = input.slice(0, hashStart);\n\t}\n\n\treturn input;\n}\n\nfunction getHash(url) {\n\tlet hash = '';\n\tconst hashStart = url.indexOf('#');\n\tif (hashStart !== -1) {\n\t\thash = url.slice(hashStart);\n\t}\n\n\treturn hash;\n}\n\nfunction extract(input) {\n\tinput = removeHash(input);\n\tconst queryStart = input.indexOf('?');\n\tif (queryStart === -1) {\n\t\treturn '';\n\t}\n\n\treturn input.slice(queryStart + 1);\n}\n\nfunction parseValue(value, options) {\n\tif (options.parseNumbers && !Number.isNaN(Number(value)) && (typeof value === 'string' && value.trim() !== '')) {\n\t\tvalue = Number(value);\n\t} else if (options.parseBooleans && value !== null && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) {\n\t\tvalue = value.toLowerCase() === 'true';\n\t}\n\n\treturn value;\n}\n\nfunction parse(query, options) {\n\toptions = Object.assign({\n\t\tdecode: true,\n\t\tsort: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ',',\n\t\tparseNumbers: false,\n\t\tparseBooleans: false\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst formatter = parserForArrayFormat(options);\n\n\t// Create an object with no prototype\n\tconst ret = Object.create(null);\n\n\tif (typeof query !== 'string') {\n\t\treturn ret;\n\t}\n\n\tquery = query.trim().replace(/^[?#&]/, '');\n\n\tif (!query) {\n\t\treturn ret;\n\t}\n\n\tfor (const param of query.split('&')) {\n\t\tif (param === '') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet [key, value] = splitOnFirst(options.decode ? param.replace(/\\+/g, ' ') : param, '=');\n\n\t\t// Missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tvalue = value === undefined ? null : ['comma', 'separator', 'bracket-separator'].includes(options.arrayFormat) ? value : decode(value, options);\n\t\tformatter(decode(key, options), value, ret);\n\t}\n\n\tfor (const key of Object.keys(ret)) {\n\t\tconst value = ret[key];\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\tfor (const k of Object.keys(value)) {\n\t\t\t\tvalue[k] = parseValue(value[k], options);\n\t\t\t}\n\t\t} else {\n\t\t\tret[key] = parseValue(value, options);\n\t\t}\n\t}\n\n\tif (options.sort === false) {\n\t\treturn ret;\n\t}\n\n\treturn (options.sort === true ? Object.keys(ret).sort() : Object.keys(ret).sort(options.sort)).reduce((result, key) => {\n\t\tconst value = ret[key];\n\t\tif (Boolean(value) && typeof value === 'object' && !Array.isArray(value)) {\n\t\t\t// Sort object keys, not values\n\t\t\tresult[key] = keysSorter(value);\n\t\t} else {\n\t\t\tresult[key] = value;\n\t\t}\n\n\t\treturn result;\n\t}, Object.create(null));\n}\n\nexports.extract = extract;\nexports.parse = parse;\n\nexports.stringify = (object, options) => {\n\tif (!object) {\n\t\treturn '';\n\t}\n\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ','\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst shouldFilter = key => (\n\t\t(options.skipNull && isNullOrUndefined(object[key])) ||\n\t\t(options.skipEmptyString && object[key] === '')\n\t);\n\n\tconst formatter = encoderForArrayFormat(options);\n\n\tconst objectCopy = {};\n\n\tfor (const key of Object.keys(object)) {\n\t\tif (!shouldFilter(key)) {\n\t\t\tobjectCopy[key] = object[key];\n\t\t}\n\t}\n\n\tconst keys = Object.keys(objectCopy);\n\n\tif (options.sort !== false) {\n\t\tkeys.sort(options.sort);\n\t}\n\n\treturn keys.map(key => {\n\t\tconst value = object[key];\n\n\t\tif (value === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (value === null) {\n\t\t\treturn encode(key, options);\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\tif (value.length === 0 && options.arrayFormat === 'bracket-separator') {\n\t\t\t\treturn encode(key, options) + '[]';\n\t\t\t}\n\n\t\t\treturn value\n\t\t\t\t.reduce(formatter(key), [])\n\t\t\t\t.join('&');\n\t\t}\n\n\t\treturn encode(key, options) + '=' + encode(value, options);\n\t}).filter(x => x.length > 0).join('&');\n};\n\nexports.parseUrl = (url, options) => {\n\toptions = Object.assign({\n\t\tdecode: true\n\t}, options);\n\n\tconst [url_, hash] = splitOnFirst(url, '#');\n\n\treturn Object.assign(\n\t\t{\n\t\t\turl: url_.split('?')[0] || '',\n\t\t\tquery: parse(extract(url), options)\n\t\t},\n\t\toptions && options.parseFragmentIdentifier && hash ? {fragmentIdentifier: decode(hash, options)} : {}\n\t);\n};\n\nexports.stringifyUrl = (object, options) => {\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true,\n\t\t[encodeFragmentIdentifier]: true\n\t}, options);\n\n\tconst url = removeHash(object.url).split('?')[0] || '';\n\tconst queryFromUrl = exports.extract(object.url);\n\tconst parsedQueryFromUrl = exports.parse(queryFromUrl, {sort: false});\n\n\tconst query = Object.assign(parsedQueryFromUrl, object.query);\n\tlet queryString = exports.stringify(query, options);\n\tif (queryString) {\n\t\tqueryString = `?${queryString}`;\n\t}\n\n\tlet hash = getHash(object.url);\n\tif (object.fragmentIdentifier) {\n\t\thash = `#${options[encodeFragmentIdentifier] ? encode(object.fragmentIdentifier, options) : object.fragmentIdentifier}`;\n\t}\n\n\treturn `${url}${queryString}${hash}`;\n};\n\nexports.pick = (input, filter, options) => {\n\toptions = Object.assign({\n\t\tparseFragmentIdentifier: true,\n\t\t[encodeFragmentIdentifier]: false\n\t}, options);\n\n\tconst {url, query, fragmentIdentifier} = exports.parseUrl(input, options);\n\treturn exports.stringifyUrl({\n\t\turl,\n\t\tquery: filterObject(query, filter),\n\t\tfragmentIdentifier\n\t}, options);\n};\n\nexports.exclude = (input, filter, options) => {\n\tconst exclusionFilter = Array.isArray(filter) ? key => !filter.includes(key) : (key, value) => !filter(key, value);\n\n\treturn exports.pick(input, exclusionFilter, options);\n};\n","'use strict';\nmodule.exports = str => encodeURIComponent(str).replace(/[!'()*]/g, x => `%${x.charCodeAt(0).toString(16).toUpperCase()}`);\n","'use strict';\nvar token = '%[a-f0-9]{2}';\nvar singleMatcher = new RegExp('(' + token + ')|([^%]+?)', 'gi');\nvar multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\nfunction decodeComponents(components, split) {\n\ttry {\n\t\t// Try to decode the entire string first\n\t\treturn [decodeURIComponent(components.join(''))];\n\t} catch (err) {\n\t\t// Do nothing\n\t}\n\n\tif (components.length === 1) {\n\t\treturn components;\n\t}\n\n\tsplit = split || 1;\n\n\t// Split the array in 2 parts\n\tvar left = components.slice(0, split);\n\tvar right = components.slice(split);\n\n\treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n}\n\nfunction decode(input) {\n\ttry {\n\t\treturn decodeURIComponent(input);\n\t} catch (err) {\n\t\tvar tokens = input.match(singleMatcher) || [];\n\n\t\tfor (var i = 1; i < tokens.length; i++) {\n\t\t\tinput = decodeComponents(tokens, i).join('');\n\n\t\t\ttokens = input.match(singleMatcher) || [];\n\t\t}\n\n\t\treturn input;\n\t}\n}\n\nfunction customDecodeURIComponent(input) {\n\t// Keep track of all the replacements and prefill the map with the `BOM`\n\tvar replaceMap = {\n\t\t'%FE%FF': '\\uFFFD\\uFFFD',\n\t\t'%FF%FE': '\\uFFFD\\uFFFD'\n\t};\n\n\tvar match = multiMatcher.exec(input);\n\twhile (match) {\n\t\ttry {\n\t\t\t// Decode as big chunks as possible\n\t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n\t\t} catch (err) {\n\t\t\tvar result = decode(match[0]);\n\n\t\t\tif (result !== match[0]) {\n\t\t\t\treplaceMap[match[0]] = result;\n\t\t\t}\n\t\t}\n\n\t\tmatch = multiMatcher.exec(input);\n\t}\n\n\t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n\treplaceMap['%C2'] = '\\uFFFD';\n\n\tvar entries = Object.keys(replaceMap);\n\n\tfor (var i = 0; i < entries.length; i++) {\n\t\t// Replace all decoded components\n\t\tvar key = entries[i];\n\t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n\t}\n\n\treturn input;\n}\n\nmodule.exports = function (encodedURI) {\n\tif (typeof encodedURI !== 'string') {\n\t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n\t}\n\n\ttry {\n\t\tencodedURI = encodedURI.replace(/\\+/g, ' ');\n\n\t\t// Try the built in decoder first\n\t\treturn decodeURIComponent(encodedURI);\n\t} catch (err) {\n\t\t// Fallback to a more advanced decoder\n\t\treturn customDecodeURIComponent(encodedURI);\n\t}\n};\n","'use strict';\n\nmodule.exports = (string, separator) => {\n\tif (!(typeof string === 'string' && typeof separator === 'string')) {\n\t\tthrow new TypeError('Expected the arguments to be of type `string`');\n\t}\n\n\tif (separator === '') {\n\t\treturn [string];\n\t}\n\n\tconst separatorIndex = string.indexOf(separator);\n\n\tif (separatorIndex === -1) {\n\t\treturn [string];\n\t}\n\n\treturn [\n\t\tstring.slice(0, separatorIndex),\n\t\tstring.slice(separatorIndex + separator.length)\n\t];\n};\n","'use strict';\nmodule.exports = function (obj, predicate) {\n\tvar ret = {};\n\tvar keys = Object.keys(obj);\n\tvar isArr = Array.isArray(predicate);\n\n\tfor (var i = 0; i < keys.length; i++) {\n\t\tvar key = keys[i];\n\t\tvar val = obj[key];\n\n\t\tif (isArr ? predicate.indexOf(key) !== -1 : predicate(key, val, obj)) {\n\t\t\tret[key] = val;\n\t\t}\n\t}\n\n\treturn ret;\n};\n","// Object.fromEntries is not available in older iOS versions\nexport default function fromEntries(entries) {\n return entries.reduce((acc, _ref) => {\n let [k, v] = _ref;\n if (acc.hasOwnProperty(k)) {\n throw new Error(`A value for key '${k}' already exists in the object.`);\n }\n acc[k] = v;\n return acc;\n }, {});\n}\n//# sourceMappingURL=fromEntries.js.map","const formatToList = items => items.map(key => `- ${key}`).join('\\n');\nexport default function validatePathConfig(config) {\n let root = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n const validKeys = ['initialRouteName', 'screens'];\n if (!root) {\n validKeys.push('path', 'exact', 'stringify', 'parse');\n }\n const invalidKeys = Object.keys(config).filter(key => !validKeys.includes(key));\n if (invalidKeys.length) {\n throw new Error(`Found invalid properties in the configuration:\\n${formatToList(invalidKeys)}\\n\\nDid you forget to specify them under a 'screens' property?\\n\\nYou can only specify the following properties:\\n${formatToList(validKeys)}\\n\\nSee https://reactnavigation.org/docs/configuring-links for more details on how to specify a linking configuration.`);\n }\n if (config.screens) {\n Object.entries(config.screens).forEach(_ref => {\n let [_, value] = _ref;\n if (typeof value !== 'string') {\n validatePathConfig(value, false);\n }\n });\n }\n}\n//# sourceMappingURL=validatePathConfig.js.map","import escape from 'escape-string-regexp';\nimport * as queryString from 'query-string';\nimport findFocusedRoute from './findFocusedRoute';\nimport validatePathConfig from './validatePathConfig';\n/**\n * Utility to parse a path string to initial state object accepted by the container.\n * This is useful for deep linking when we need to handle the incoming URL.\n *\n * @example\n * ```js\n * getStateFromPath(\n * '/chat/jane/42',\n * {\n * screens: {\n * Chat: {\n * path: 'chat/:author/:id',\n * parse: { id: Number }\n * }\n * }\n * }\n * )\n * ```\n * @param path Path string to parse and convert, e.g. /foo/bar?count=42.\n * @param options Extra options to fine-tune how to parse the path.\n */\nexport default function getStateFromPath(path, options) {\n if (options) {\n validatePathConfig(options);\n }\n let initialRoutes = [];\n if (options !== null && options !== void 0 && options.initialRouteName) {\n initialRoutes.push({\n initialRouteName: options.initialRouteName,\n parentScreens: []\n });\n }\n const screens = options === null || options === void 0 ? void 0 : options.screens;\n let remaining = path.replace(/\\/+/g, '/') // Replace multiple slash (//) with single ones\n .replace(/^\\//, '') // Remove extra leading slash\n .replace(/\\?.*$/, ''); // Remove query params which we will handle later\n\n // Make sure there is a trailing slash\n remaining = remaining.endsWith('/') ? remaining : `${remaining}/`;\n if (screens === undefined) {\n // When no config is specified, use the path segments as route names\n const routes = remaining.split('/').filter(Boolean).map(segment => {\n const name = decodeURIComponent(segment);\n return {\n name\n };\n });\n if (routes.length) {\n return createNestedStateObject(path, routes, initialRoutes);\n }\n return undefined;\n }\n\n // Create a normalized configs array which will be easier to use\n const configs = [].concat(...Object.keys(screens).map(key => createNormalizedConfigs(key, screens, [], initialRoutes, []))).sort((a, b) => {\n // Sort config so that:\n // - the most exhaustive ones are always at the beginning\n // - patterns with wildcard are always at the end\n\n // If 2 patterns are same, move the one with less route names up\n // This is an error state, so it's only useful for consistent error messages\n if (a.pattern === b.pattern) {\n return b.routeNames.join('>').localeCompare(a.routeNames.join('>'));\n }\n\n // If one of the patterns starts with the other, it's more exhaustive\n // So move it up\n if (a.pattern.startsWith(b.pattern)) {\n return -1;\n }\n if (b.pattern.startsWith(a.pattern)) {\n return 1;\n }\n const aParts = a.pattern.split('/');\n const bParts = b.pattern.split('/');\n for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {\n // if b is longer, b get higher priority\n if (aParts[i] == null) {\n return 1;\n }\n // if a is longer, a get higher priority\n if (bParts[i] == null) {\n return -1;\n }\n const aWildCard = aParts[i] === '*' || aParts[i].startsWith(':');\n const bWildCard = bParts[i] === '*' || bParts[i].startsWith(':');\n // if both are wildcard we compare next component\n if (aWildCard && bWildCard) {\n continue;\n }\n // if only a is wild card, b get higher priority\n if (aWildCard) {\n return 1;\n }\n // if only b is wild card, a get higher priority\n if (bWildCard) {\n return -1;\n }\n }\n return bParts.length - aParts.length;\n });\n\n // Check for duplicate patterns in the config\n configs.reduce((acc, config) => {\n if (acc[config.pattern]) {\n const a = acc[config.pattern].routeNames;\n const b = config.routeNames;\n\n // It's not a problem if the path string omitted from a inner most screen\n // For example, it's ok if a path resolves to `A > B > C` or `A > B`\n const intersects = a.length > b.length ? b.every((it, i) => a[i] === it) : a.every((it, i) => b[i] === it);\n if (!intersects) {\n throw new Error(`Found conflicting screens with the same pattern. The pattern '${config.pattern}' resolves to both '${a.join(' > ')}' and '${b.join(' > ')}'. Patterns must be unique and cannot resolve to more than one screen.`);\n }\n }\n return Object.assign(acc, {\n [config.pattern]: config\n });\n }, {});\n if (remaining === '/') {\n // We need to add special handling of empty path so navigation to empty path also works\n // When handling empty path, we should only look at the root level config\n const match = configs.find(config => config.path === '' && config.routeNames.every(\n // Make sure that none of the parent configs have a non-empty path defined\n name => {\n var _configs$find;\n return !((_configs$find = configs.find(c => c.screen === name)) !== null && _configs$find !== void 0 && _configs$find.path);\n }));\n if (match) {\n return createNestedStateObject(path, match.routeNames.map(name => ({\n name\n })), initialRoutes, configs);\n }\n return undefined;\n }\n let result;\n let current;\n\n // We match the whole path against the regex instead of segments\n // This makes sure matches such as wildcard will catch any unmatched routes, even if nested\n const {\n routes,\n remainingPath\n } = matchAgainstConfigs(remaining, configs.map(c => ({\n ...c,\n // Add `$` to the regex to make sure it matches till end of the path and not just beginning\n regex: c.regex ? new RegExp(c.regex.source + '$') : undefined\n })));\n if (routes !== undefined) {\n // This will always be empty if full path matched\n current = createNestedStateObject(path, routes, initialRoutes, configs);\n remaining = remainingPath;\n result = current;\n }\n if (current == null || result == null) {\n return undefined;\n }\n return result;\n}\nconst joinPaths = function () {\n for (var _len = arguments.length, paths = new Array(_len), _key = 0; _key < _len; _key++) {\n paths[_key] = arguments[_key];\n }\n return [].concat(...paths.map(p => p.split('/'))).filter(Boolean).join('/');\n};\nconst matchAgainstConfigs = (remaining, configs) => {\n let routes;\n let remainingPath = remaining;\n\n // Go through all configs, and see if the next path segment matches our regex\n for (const config of configs) {\n if (!config.regex) {\n continue;\n }\n const match = remainingPath.match(config.regex);\n\n // If our regex matches, we need to extract params from the path\n if (match) {\n var _config$pattern;\n const matchedParams = (_config$pattern = config.pattern) === null || _config$pattern === void 0 ? void 0 : _config$pattern.split('/').filter(p => p.startsWith(':')).reduce((acc, p, i) => Object.assign(acc, {\n // The param segments appear every second item starting from 2 in the regex match result\n [p]: match[(i + 1) * 2].replace(/\\//, '')\n }), {});\n routes = config.routeNames.map(name => {\n var _config$path;\n const config = configs.find(c => c.screen === name);\n const params = config === null || config === void 0 ? void 0 : (_config$path = config.path) === null || _config$path === void 0 ? void 0 : _config$path.split('/').filter(p => p.startsWith(':')).reduce((acc, p) => {\n const value = matchedParams[p];\n if (value) {\n var _config$parse;\n const key = p.replace(/^:/, '').replace(/\\?$/, '');\n acc[key] = (_config$parse = config.parse) !== null && _config$parse !== void 0 && _config$parse[key] ? config.parse[key](value) : value;\n }\n return acc;\n }, {});\n if (params && Object.keys(params).length) {\n return {\n name,\n params\n };\n }\n return {\n name\n };\n });\n remainingPath = remainingPath.replace(match[1], '');\n break;\n }\n }\n return {\n routes,\n remainingPath\n };\n};\nconst createNormalizedConfigs = function (screen, routeConfig) {\n let routeNames = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n let initials = arguments.length > 3 ? arguments[3] : undefined;\n let parentScreens = arguments.length > 4 ? arguments[4] : undefined;\n let parentPattern = arguments.length > 5 ? arguments[5] : undefined;\n const configs = [];\n routeNames.push(screen);\n parentScreens.push(screen);\n\n // @ts-expect-error: we can't strongly typecheck this for now\n const config = routeConfig[screen];\n if (typeof config === 'string') {\n // If a string is specified as the value of the key(e.g. Foo: '/path'), use it as the pattern\n const pattern = parentPattern ? joinPaths(parentPattern, config) : config;\n configs.push(createConfigItem(screen, routeNames, pattern, config));\n } else if (typeof config === 'object') {\n let pattern;\n\n // if an object is specified as the value (e.g. Foo: { ... }),\n // it can have `path` property and\n // it could have `screens` prop which has nested configs\n if (typeof config.path === 'string') {\n if (config.exact && config.path === undefined) {\n throw new Error(\"A 'path' needs to be specified when specifying 'exact: true'. If you don't want this screen in the URL, specify it as empty string, e.g. `path: ''`.\");\n }\n pattern = config.exact !== true ? joinPaths(parentPattern || '', config.path || '') : config.path || '';\n configs.push(createConfigItem(screen, routeNames, pattern, config.path, config.parse));\n }\n if (config.screens) {\n // property `initialRouteName` without `screens` has no purpose\n if (config.initialRouteName) {\n initials.push({\n initialRouteName: config.initialRouteName,\n parentScreens\n });\n }\n Object.keys(config.screens).forEach(nestedConfig => {\n const result = createNormalizedConfigs(nestedConfig, config.screens, routeNames, initials, [...parentScreens], pattern ?? parentPattern);\n configs.push(...result);\n });\n }\n }\n routeNames.pop();\n return configs;\n};\nconst createConfigItem = (screen, routeNames, pattern, path, parse) => {\n // Normalize pattern to remove any leading, trailing slashes, duplicate slashes etc.\n pattern = pattern.split('/').filter(Boolean).join('/');\n const regex = pattern ? new RegExp(`^(${pattern.split('/').map(it => {\n if (it.startsWith(':')) {\n return `(([^/]+\\\\/)${it.endsWith('?') ? '?' : ''})`;\n }\n return `${it === '*' ? '.*' : escape(it)}\\\\/`;\n }).join('')})`) : undefined;\n return {\n screen,\n regex,\n pattern,\n path,\n // The routeNames array is mutated, so copy it to keep the current state\n routeNames: [...routeNames],\n parse\n };\n};\nconst findParseConfigForRoute = (routeName, flatConfig) => {\n for (const config of flatConfig) {\n if (routeName === config.routeNames[config.routeNames.length - 1]) {\n return config.parse;\n }\n }\n return undefined;\n};\n\n// Try to find an initial route connected with the one passed\nconst findInitialRoute = (routeName, parentScreens, initialRoutes) => {\n for (const config of initialRoutes) {\n if (parentScreens.length === config.parentScreens.length) {\n let sameParents = true;\n for (let i = 0; i < parentScreens.length; i++) {\n if (parentScreens[i].localeCompare(config.parentScreens[i]) !== 0) {\n sameParents = false;\n break;\n }\n }\n if (sameParents) {\n return routeName !== config.initialRouteName ? config.initialRouteName : undefined;\n }\n }\n }\n return undefined;\n};\n\n// returns state object with values depending on whether\n// it is the end of state and if there is initialRoute for this level\nconst createStateObject = (initialRoute, route, isEmpty) => {\n if (isEmpty) {\n if (initialRoute) {\n return {\n index: 1,\n routes: [{\n name: initialRoute\n }, route]\n };\n } else {\n return {\n routes: [route]\n };\n }\n } else {\n if (initialRoute) {\n return {\n index: 1,\n routes: [{\n name: initialRoute\n }, {\n ...route,\n state: {\n routes: []\n }\n }]\n };\n } else {\n return {\n routes: [{\n ...route,\n state: {\n routes: []\n }\n }]\n };\n }\n }\n};\nconst createNestedStateObject = (path, routes, initialRoutes, flatConfig) => {\n let state;\n let route = routes.shift();\n const parentScreens = [];\n let initialRoute = findInitialRoute(route.name, parentScreens, initialRoutes);\n parentScreens.push(route.name);\n state = createStateObject(initialRoute, route, routes.length === 0);\n if (routes.length > 0) {\n let nestedState = state;\n while (route = routes.shift()) {\n initialRoute = findInitialRoute(route.name, parentScreens, initialRoutes);\n const nestedStateIndex = nestedState.index || nestedState.routes.length - 1;\n nestedState.routes[nestedStateIndex].state = createStateObject(initialRoute, route, routes.length === 0);\n if (routes.length > 0) {\n nestedState = nestedState.routes[nestedStateIndex].state;\n }\n parentScreens.push(route.name);\n }\n }\n route = findFocusedRoute(state);\n route.path = path;\n const params = parseQueryParams(path, flatConfig ? findParseConfigForRoute(route.name, flatConfig) : undefined);\n if (params) {\n route.params = {\n ...route.params,\n ...params\n };\n }\n return state;\n};\nconst parseQueryParams = (path, parseConfig) => {\n const query = path.split('?')[1];\n const params = queryString.parse(query);\n if (parseConfig) {\n Object.keys(params).forEach(name => {\n if (Object.hasOwnProperty.call(parseConfig, name) && typeof params[name] === 'string') {\n params[name] = parseConfig[name](params[name]);\n }\n });\n }\n return Object.keys(params).length ? params : undefined;\n};\n//# sourceMappingURL=getStateFromPath.js.map","'use strict';\n\nmodule.exports = string => {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a \\unnnn escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n};\n","import * as React from 'react';\n/**\n * Context which holds the navigation helpers of the parent navigator.\n * Navigators should use this context in their view component.\n */\nconst NavigationHelpersContext = /*#__PURE__*/React.createContext(undefined);\nexport default NavigationHelpersContext;\n//# sourceMappingURL=NavigationHelpersContext.js.map","import * as React from 'react';\n\n/**\n * A type of an object that have a route key as an object key\n * and a value whether to prevent that route.\n */\n\nconst PreventRemoveContext = /*#__PURE__*/React.createContext(undefined);\nexport default PreventRemoveContext;\n//# sourceMappingURL=PreventRemoveContext.js.map","import { nanoid } from 'nanoid/non-secure';\nimport * as React from 'react';\nimport useLatestCallback from 'use-latest-callback';\nimport NavigationHelpersContext from './NavigationHelpersContext';\nimport NavigationRouteContext from './NavigationRouteContext';\nimport PreventRemoveContext from './PreventRemoveContext';\n/**\n * Util function to transform map of prevented routes to a simpler object.\n */\nconst transformPreventedRoutes = preventedRoutesMap => {\n const preventedRoutesToTransform = [...preventedRoutesMap.values()];\n const preventedRoutes = preventedRoutesToTransform.reduce((acc, _ref) => {\n var _acc$routeKey;\n let {\n routeKey,\n preventRemove\n } = _ref;\n acc[routeKey] = {\n preventRemove: ((_acc$routeKey = acc[routeKey]) === null || _acc$routeKey === void 0 ? void 0 : _acc$routeKey.preventRemove) || preventRemove\n };\n return acc;\n }, {});\n return preventedRoutes;\n};\n\n/**\n * Component used for managing which routes have to be prevented from removal in native-stack.\n */\nexport default function PreventRemoveProvider(_ref2) {\n let {\n children\n } = _ref2;\n const [parentId] = React.useState(() => nanoid());\n const [preventedRoutesMap, setPreventedRoutesMap] = React.useState(new Map());\n const navigation = React.useContext(NavigationHelpersContext);\n const route = React.useContext(NavigationRouteContext);\n const preventRemoveContextValue = React.useContext(PreventRemoveContext);\n // take `setPreventRemove` from parent context - if exist it means we're in a nested context\n const setParentPrevented = preventRemoveContextValue === null || preventRemoveContextValue === void 0 ? void 0 : preventRemoveContextValue.setPreventRemove;\n const setPreventRemove = useLatestCallback((id, routeKey, preventRemove) => {\n if (preventRemove && (navigation == null || navigation !== null && navigation !== void 0 && navigation.getState().routes.every(route => route.key !== routeKey))) {\n throw new Error(`Couldn't find a route with the key ${routeKey}. Is your component inside NavigationContent?`);\n }\n setPreventedRoutesMap(prevPrevented => {\n var _prevPrevented$get, _prevPrevented$get2;\n // values haven't changed - do nothing\n if (routeKey === ((_prevPrevented$get = prevPrevented.get(id)) === null || _prevPrevented$get === void 0 ? void 0 : _prevPrevented$get.routeKey) && preventRemove === ((_prevPrevented$get2 = prevPrevented.get(id)) === null || _prevPrevented$get2 === void 0 ? void 0 : _prevPrevented$get2.preventRemove)) {\n return prevPrevented;\n }\n const nextPrevented = new Map(prevPrevented);\n if (preventRemove) {\n nextPrevented.set(id, {\n routeKey,\n preventRemove\n });\n } else {\n nextPrevented.delete(id);\n }\n return nextPrevented;\n });\n });\n const isPrevented = [...preventedRoutesMap.values()].some(_ref3 => {\n let {\n preventRemove\n } = _ref3;\n return preventRemove;\n });\n React.useEffect(() => {\n if ((route === null || route === void 0 ? void 0 : route.key) !== undefined && setParentPrevented !== undefined) {\n // when route is defined (and setParentPrevented) it means we're in a nested stack\n // route.key then will be the route key of parent\n setParentPrevented(parentId, route.key, isPrevented);\n return () => {\n setParentPrevented(parentId, route.key, false);\n };\n }\n return;\n }, [parentId, isPrevented, route === null || route === void 0 ? void 0 : route.key, setParentPrevented]);\n const value = React.useMemo(() => ({\n setPreventRemove,\n preventedRoutes: transformPreventedRoutes(preventedRoutesMap)\n }), [setPreventRemove, preventedRoutesMap]);\n return /*#__PURE__*/React.createElement(PreventRemoveContext.Provider, {\n value: value\n }, children);\n}\n//# sourceMappingURL=PreventRemoveProvider.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar useIsomorphicLayoutEffect_1 = __importDefault(require(\"./useIsomorphicLayoutEffect\"));\n/**\n * React hook which returns the latest callback without changing the reference.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction useLatestCallback(callback) {\n var ref = React.useRef(callback);\n var latestCallback = React.useRef(function latestCallback() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return ref.current.apply(this, args);\n }).current;\n (0, useIsomorphicLayoutEffect_1.default)(function () {\n ref.current = callback;\n });\n return latestCallback;\n}\nexports.default = useLatestCallback;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = require(\"react\");\n/**\n * Use `useEffect` during SSR and `useLayoutEffect` in the browser to avoid warnings.\n */\nvar useIsomorphicLayoutEffect = typeof document !== 'undefined' ? react_1.useLayoutEffect : react_1.useEffect;\nexports.default = useIsomorphicLayoutEffect;\n","export class PrivateValueStore {}\n//# sourceMappingURL=types.js.map","import * as React from 'react';\nimport useNavigation from './useNavigation';\n/**\n * Hook to run an effect in a focused screen, similar to `React.useEffect`.\n * This can be used to perform side-effects such as fetching data or subscribing to events.\n * The passed callback should be wrapped in `React.useCallback` to avoid running the effect too often.\n *\n * @param callback Memoized callback containing the effect, should optionally return a cleanup function.\n */\nexport default function useFocusEffect(effect) {\n const navigation = useNavigation();\n if (arguments[1] !== undefined) {\n const message = \"You passed a second argument to 'useFocusEffect', but it only accepts one argument. \" + \"If you want to pass a dependency array, you can use 'React.useCallback':\\n\\n\" + 'useFocusEffect(\\n' + ' React.useCallback(() => {\\n' + ' // Your code here\\n' + ' }, [depA, depB])\\n' + ');\\n\\n' + 'See usage guide: https://reactnavigation.org/docs/use-focus-effect';\n console.error(message);\n }\n React.useEffect(() => {\n let isFocused = false;\n let cleanup;\n const callback = () => {\n const destroy = effect();\n if (destroy === undefined || typeof destroy === 'function') {\n return destroy;\n }\n if (process.env.NODE_ENV !== 'production') {\n let message = 'An effect function must not return anything besides a function, which is used for clean-up.';\n if (destroy === null) {\n message += \" You returned 'null'. If your effect does not require clean-up, return 'undefined' (or nothing).\";\n } else if (typeof destroy.then === 'function') {\n message += \"\\n\\nIt looks like you wrote 'useFocusEffect(async () => ...)' or returned a Promise. \" + 'Instead, write the async function inside your effect ' + 'and call it immediately:\\n\\n' + 'useFocusEffect(\\n' + ' React.useCallback(() => {\\n' + ' async function fetchData() {\\n' + ' // You can await here\\n' + ' const response = await MyAPI.getData(someId);\\n' + ' // ...\\n' + ' }\\n\\n' + ' fetchData();\\n' + ' }, [someId])\\n' + ');\\n\\n' + 'See usage guide: https://reactnavigation.org/docs/use-focus-effect';\n } else {\n message += ` You returned '${JSON.stringify(destroy)}'.`;\n }\n console.error(message);\n }\n };\n\n // We need to run the effect on intial render/dep changes if the screen is focused\n if (navigation.isFocused()) {\n cleanup = callback();\n isFocused = true;\n }\n const unsubscribeFocus = navigation.addListener('focus', () => {\n // If callback was already called for focus, avoid calling it again\n // The focus event may also fire on intial render, so we guard against runing the effect twice\n if (isFocused) {\n return;\n }\n if (cleanup !== undefined) {\n cleanup();\n }\n cleanup = callback();\n isFocused = true;\n });\n const unsubscribeBlur = navigation.addListener('blur', () => {\n if (cleanup !== undefined) {\n cleanup();\n }\n cleanup = undefined;\n isFocused = false;\n });\n return () => {\n if (cleanup !== undefined) {\n cleanup();\n }\n unsubscribeFocus();\n unsubscribeBlur();\n };\n }, [effect, navigation]);\n}\n//# sourceMappingURL=useFocusEffect.js.map","import * as React from 'react';\nimport NavigationContainerRefContext from './NavigationContainerRefContext';\nimport NavigationContext from './NavigationContext';\n/**\n * Hook to access the navigation prop of the parent screen anywhere.\n *\n * @returns Navigation prop of the parent screen.\n */\nexport default function useNavigation() {\n const root = React.useContext(NavigationContainerRefContext);\n const navigation = React.useContext(NavigationContext);\n if (navigation === undefined && root === undefined) {\n throw new Error(\"Couldn't find a navigation object. Is your component inside NavigationContainer?\");\n }\n\n // FIXME: Figure out a better way to do this\n return navigation ?? root;\n}\n//# sourceMappingURL=useNavigation.js.map","import * as React from 'react';\nimport { useState } from 'react';\nimport useNavigation from './useNavigation';\n\n/**\n * Hook to get the current focus state of the screen. Returns a `true` if screen is focused, otherwise `false`.\n * This can be used if a component needs to render something based on the focus state.\n */\nexport default function useIsFocused() {\n const navigation = useNavigation();\n const [isFocused, setIsFocused] = useState(navigation.isFocused);\n const valueToReturn = navigation.isFocused();\n if (isFocused !== valueToReturn) {\n // If the value has changed since the last render, we need to update it.\n // This could happen if we missed an update from the event listeners during re-render.\n // React will process this update immediately, so the old subscription value won't be committed.\n // It is still nice to avoid returning a mismatched value though, so let's override the return value.\n // This is the same logic as in https://github.com/facebook/react/tree/master/packages/use-subscription\n setIsFocused(valueToReturn);\n }\n React.useEffect(() => {\n const unsubscribeFocus = navigation.addListener('focus', () => setIsFocused(true));\n const unsubscribeBlur = navigation.addListener('blur', () => setIsFocused(false));\n return () => {\n unsubscribeFocus();\n unsubscribeBlur();\n };\n }, [navigation]);\n React.useDebugValue(valueToReturn);\n return valueToReturn;\n}\n//# sourceMappingURL=useIsFocused.js.map","import { CommonActions } from '@react-navigation/routers';\nimport * as React from 'react';\nimport { isValidElementType } from 'react-is';\nimport Group from './Group';\nimport isArrayEqual from './isArrayEqual';\nimport isRecordEqual from './isRecordEqual';\nimport NavigationHelpersContext from './NavigationHelpersContext';\nimport NavigationRouteContext from './NavigationRouteContext';\nimport NavigationStateContext from './NavigationStateContext';\nimport PreventRemoveProvider from './PreventRemoveProvider';\nimport Screen from './Screen';\nimport { PrivateValueStore } from './types';\nimport useChildListeners from './useChildListeners';\nimport useComponent from './useComponent';\nimport useCurrentRender from './useCurrentRender';\nimport useDescriptors from './useDescriptors';\nimport useEventEmitter from './useEventEmitter';\nimport useFocusedListenersChildrenAdapter from './useFocusedListenersChildrenAdapter';\nimport useFocusEvents from './useFocusEvents';\nimport useKeyedChildListeners from './useKeyedChildListeners';\nimport useNavigationHelpers from './useNavigationHelpers';\nimport useOnAction from './useOnAction';\nimport useOnGetState from './useOnGetState';\nimport useOnRouteFocus from './useOnRouteFocus';\nimport useRegisterNavigator from './useRegisterNavigator';\nimport useScheduleUpdate from './useScheduleUpdate';\n\n// This is to make TypeScript compiler happy\n// eslint-disable-next-line babel/no-unused-expressions\nPrivateValueStore;\nconst isValidKey = key => key === undefined || typeof key === 'string' && key !== '';\n\n/**\n * Extract route config object from React children elements.\n *\n * @param children React Elements to extract the config from.\n */\nconst getRouteConfigsFromChildren = (children, groupKey, groupOptions) => {\n const configs = React.Children.toArray(children).reduce((acc, child) => {\n var _child$type, _child$props;\n if ( /*#__PURE__*/React.isValidElement(child)) {\n if (child.type === Screen) {\n // We can only extract the config from `Screen` elements\n // If something else was rendered, it's probably a bug\n\n if (!isValidKey(child.props.navigationKey)) {\n throw new Error(`Got an invalid 'navigationKey' prop (${JSON.stringify(child.props.navigationKey)}) for the screen '${child.props.name}'. It must be a non-empty string or 'undefined'.`);\n }\n acc.push({\n keys: [groupKey, child.props.navigationKey],\n options: groupOptions,\n props: child.props\n });\n return acc;\n }\n if (child.type === React.Fragment || child.type === Group) {\n if (!isValidKey(child.props.navigationKey)) {\n throw new Error(`Got an invalid 'navigationKey' prop (${JSON.stringify(child.props.navigationKey)}) for the group. It must be a non-empty string or 'undefined'.`);\n }\n\n // When we encounter a fragment or group, we need to dive into its children to extract the configs\n // This is handy to conditionally define a group of screens\n acc.push(...getRouteConfigsFromChildren(child.props.children, child.props.navigationKey, child.type !== Group ? groupOptions : groupOptions != null ? [...groupOptions, child.props.screenOptions] : [child.props.screenOptions]));\n return acc;\n }\n }\n throw new Error(`A navigator can only contain 'Screen', 'Group' or 'React.Fragment' as its direct children (found ${/*#__PURE__*/React.isValidElement(child) ? `'${typeof child.type === 'string' ? child.type : (_child$type = child.type) === null || _child$type === void 0 ? void 0 : _child$type.name}'${child.props != null && typeof child.props === 'object' && 'name' in child.props && (_child$props = child.props) !== null && _child$props !== void 0 && _child$props.name ? ` for the screen '${child.props.name}'` : ''}` : typeof child === 'object' ? JSON.stringify(child) : `'${String(child)}'`}). To render this component in the navigator, pass it in the 'component' prop to 'Screen'.`);\n }, []);\n if (process.env.NODE_ENV !== 'production') {\n configs.forEach(config => {\n const {\n name,\n children,\n component,\n getComponent\n } = config.props;\n if (typeof name !== 'string' || !name) {\n throw new Error(`Got an invalid name (${JSON.stringify(name)}) for the screen. It must be a non-empty string.`);\n }\n if (children != null || component !== undefined || getComponent !== undefined) {\n if (children != null && component !== undefined) {\n throw new Error(`Got both 'component' and 'children' props for the screen '${name}'. You must pass only one of them.`);\n }\n if (children != null && getComponent !== undefined) {\n throw new Error(`Got both 'getComponent' and 'children' props for the screen '${name}'. You must pass only one of them.`);\n }\n if (component !== undefined && getComponent !== undefined) {\n throw new Error(`Got both 'component' and 'getComponent' props for the screen '${name}'. You must pass only one of them.`);\n }\n if (children != null && typeof children !== 'function') {\n throw new Error(`Got an invalid value for 'children' prop for the screen '${name}'. It must be a function returning a React Element.`);\n }\n if (component !== undefined && !isValidElementType(component)) {\n throw new Error(`Got an invalid value for 'component' prop for the screen '${name}'. It must be a valid React Component.`);\n }\n if (getComponent !== undefined && typeof getComponent !== 'function') {\n throw new Error(`Got an invalid value for 'getComponent' prop for the screen '${name}'. It must be a function returning a React Component.`);\n }\n if (typeof component === 'function') {\n if (component.name === 'component') {\n // Inline anonymous functions passed in the `component` prop will have the name of the prop\n // It's relatively safe to assume that it's not a component since it should also have PascalCase name\n // We won't catch all scenarios here, but this should catch a good chunk of incorrect use.\n console.warn(`Looks like you're passing an inline function for 'component' prop for the screen '${name}' (e.g. component={() => }). Passing an inline function will cause the component state to be lost on re-render and cause perf issues since it's re-created every render. You can pass the function as children to 'Screen' instead to achieve the desired behaviour.`);\n } else if (/^[a-z]/.test(component.name)) {\n console.warn(`Got a component with the name '${component.name}' for the screen '${name}'. React Components must start with an uppercase letter. If you're passing a regular function and not a component, pass it as children to 'Screen' instead. Otherwise capitalize your component's name.`);\n }\n }\n } else {\n throw new Error(`Couldn't find a 'component', 'getComponent' or 'children' prop for the screen '${name}'. This can happen if you passed 'undefined'. You likely forgot to export your component from the file it's defined in, or mixed up default import and named import when importing.`);\n }\n });\n }\n return configs;\n};\n\n/**\n * Hook for building navigators.\n *\n * @param createRouter Factory method which returns router object.\n * @param options Options object containing `children` and additional options for the router.\n * @returns An object containing `state`, `navigation`, `descriptors` objects.\n */\nexport default function useNavigationBuilder(createRouter, options) {\n const navigatorKey = useRegisterNavigator();\n const route = React.useContext(NavigationRouteContext);\n const {\n children,\n screenListeners,\n ...rest\n } = options;\n const {\n current: router\n } = React.useRef(createRouter({\n ...rest,\n ...(route !== null && route !== void 0 && route.params && route.params.state == null && route.params.initial !== false && typeof route.params.screen === 'string' ? {\n initialRouteName: route.params.screen\n } : null)\n }));\n const routeConfigs = getRouteConfigsFromChildren(children);\n const screens = routeConfigs.reduce((acc, config) => {\n if (config.props.name in acc) {\n throw new Error(`A navigator cannot contain multiple 'Screen' components with the same name (found duplicate screen named '${config.props.name}')`);\n }\n acc[config.props.name] = config;\n return acc;\n }, {});\n const routeNames = routeConfigs.map(config => config.props.name);\n const routeKeyList = routeNames.reduce((acc, curr) => {\n acc[curr] = screens[curr].keys.map(key => key ?? '').join(':');\n return acc;\n }, {});\n const routeParamList = routeNames.reduce((acc, curr) => {\n const {\n initialParams\n } = screens[curr].props;\n acc[curr] = initialParams;\n return acc;\n }, {});\n const routeGetIdList = routeNames.reduce((acc, curr) => Object.assign(acc, {\n [curr]: screens[curr].props.getId\n }), {});\n if (!routeNames.length) {\n throw new Error(\"Couldn't find any screens for the navigator. Have you defined any screens as its children?\");\n }\n const isStateValid = React.useCallback(state => state.type === undefined || state.type === router.type, [router.type]);\n const isStateInitialized = React.useCallback(state => state !== undefined && state.stale === false && isStateValid(state), [isStateValid]);\n const {\n state: currentState,\n getState: getCurrentState,\n setState: setCurrentState,\n setKey,\n getKey,\n getIsInitial\n } = React.useContext(NavigationStateContext);\n const stateCleanedUp = React.useRef(false);\n const cleanUpState = React.useCallback(() => {\n setCurrentState(undefined);\n stateCleanedUp.current = true;\n }, [setCurrentState]);\n const setState = React.useCallback(state => {\n if (stateCleanedUp.current) {\n // State might have been already cleaned up due to unmount\n // We do not want to expose API allowing to override this\n // This would lead to old data preservation on main navigator unmount\n return;\n }\n setCurrentState(state);\n }, [setCurrentState]);\n const [initializedState, isFirstStateInitialization] = React.useMemo(() => {\n var _route$params4;\n const initialRouteParamList = routeNames.reduce((acc, curr) => {\n var _route$params, _route$params2, _route$params3;\n const {\n initialParams\n } = screens[curr].props;\n const initialParamsFromParams = (route === null || route === void 0 ? void 0 : (_route$params = route.params) === null || _route$params === void 0 ? void 0 : _route$params.state) == null && (route === null || route === void 0 ? void 0 : (_route$params2 = route.params) === null || _route$params2 === void 0 ? void 0 : _route$params2.initial) !== false && (route === null || route === void 0 ? void 0 : (_route$params3 = route.params) === null || _route$params3 === void 0 ? void 0 : _route$params3.screen) === curr ? route.params.params : undefined;\n acc[curr] = initialParams !== undefined || initialParamsFromParams !== undefined ? {\n ...initialParams,\n ...initialParamsFromParams\n } : undefined;\n return acc;\n }, {});\n\n // If the current state isn't initialized on first render, we initialize it\n // We also need to re-initialize it if the state passed from parent was changed (maybe due to reset)\n // Otherwise assume that the state was provided as initial state\n // So we need to rehydrate it to make it usable\n if ((currentState === undefined || !isStateValid(currentState)) && (route === null || route === void 0 ? void 0 : (_route$params4 = route.params) === null || _route$params4 === void 0 ? void 0 : _route$params4.state) == null) {\n return [router.getInitialState({\n routeNames,\n routeParamList: initialRouteParamList,\n routeGetIdList\n }), true];\n } else {\n var _route$params5;\n return [router.getRehydratedState((route === null || route === void 0 ? void 0 : (_route$params5 = route.params) === null || _route$params5 === void 0 ? void 0 : _route$params5.state) ?? currentState, {\n routeNames,\n routeParamList: initialRouteParamList,\n routeGetIdList\n }), false];\n }\n // We explicitly don't include routeNames, route.params etc. in the dep list\n // below. We want to avoid forcing a new state to be calculated in those cases\n // Instead, we handle changes to these in the nextState code below. Note\n // that some changes to routeConfigs are explicitly ignored, such as changes\n // to initialParams\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentState, router, isStateValid]);\n const previousRouteKeyListRef = React.useRef(routeKeyList);\n React.useEffect(() => {\n previousRouteKeyListRef.current = routeKeyList;\n });\n const previousRouteKeyList = previousRouteKeyListRef.current;\n let state =\n // If the state isn't initialized, or stale, use the state we initialized instead\n // The state won't update until there's a change needed in the state we have initalized locally\n // So it'll be `undefined` or stale until the first navigation event happens\n isStateInitialized(currentState) ? currentState : initializedState;\n let nextState = state;\n if (!isArrayEqual(state.routeNames, routeNames) || !isRecordEqual(routeKeyList, previousRouteKeyList)) {\n // When the list of route names change, the router should handle it to remove invalid routes\n nextState = router.getStateForRouteNamesChange(state, {\n routeNames,\n routeParamList,\n routeGetIdList,\n routeKeyChanges: Object.keys(routeKeyList).filter(name => previousRouteKeyList.hasOwnProperty(name) && routeKeyList[name] !== previousRouteKeyList[name])\n });\n }\n const previousNestedParamsRef = React.useRef(route === null || route === void 0 ? void 0 : route.params);\n React.useEffect(() => {\n previousNestedParamsRef.current = route === null || route === void 0 ? void 0 : route.params;\n }, [route === null || route === void 0 ? void 0 : route.params]);\n if (route !== null && route !== void 0 && route.params) {\n const previousParams = previousNestedParamsRef.current;\n let action;\n if (typeof route.params.state === 'object' && route.params.state != null && route.params !== previousParams) {\n // If the route was updated with new state, we should reset to it\n action = CommonActions.reset(route.params.state);\n } else if (typeof route.params.screen === 'string' && (route.params.initial === false && isFirstStateInitialization || route.params !== previousParams)) {\n // If the route was updated with new screen name and/or params, we should navigate there\n action = CommonActions.navigate({\n name: route.params.screen,\n params: route.params.params,\n path: route.params.path\n });\n }\n\n // The update should be limited to current navigator only, so we call the router manually\n const updatedState = action ? router.getStateForAction(nextState, action, {\n routeNames,\n routeParamList,\n routeGetIdList\n }) : null;\n nextState = updatedState !== null ? router.getRehydratedState(updatedState, {\n routeNames,\n routeParamList,\n routeGetIdList\n }) : nextState;\n }\n const shouldUpdate = state !== nextState;\n useScheduleUpdate(() => {\n if (shouldUpdate) {\n // If the state needs to be updated, we'll schedule an update\n setState(nextState);\n }\n });\n\n // The up-to-date state will come in next render, but we don't need to wait for it\n // We can't use the outdated state since the screens have changed, which will cause error due to mismatched config\n // So we override the state object we return to use the latest state as soon as possible\n state = nextState;\n React.useEffect(() => {\n setKey(navigatorKey);\n if (!getIsInitial()) {\n // If it's not initial render, we need to update the state\n // This will make sure that our container gets notifier of state changes due to new mounts\n // This is necessary for proper screen tracking, URL updates etc.\n setState(nextState);\n }\n return () => {\n // We need to clean up state for this navigator on unmount\n // We do it in a timeout because we need to detect if another navigator mounted in the meantime\n // For example, if another navigator has started rendering, we should skip cleanup\n // Otherwise, our cleanup step will cleanup state for the other navigator and re-initialize it\n setTimeout(() => {\n if (getCurrentState() !== undefined && getKey() === navigatorKey) {\n cleanUpState();\n }\n }, 0);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // We initialize this ref here to avoid a new getState getting initialized\n // whenever initializedState changes. We want getState to have access to the\n // latest initializedState, but don't need it to change when that happens\n const initializedStateRef = React.useRef();\n initializedStateRef.current = initializedState;\n const getState = React.useCallback(() => {\n const currentState = getCurrentState();\n return isStateInitialized(currentState) ? currentState : initializedStateRef.current;\n }, [getCurrentState, isStateInitialized]);\n const emitter = useEventEmitter(e => {\n let routeNames = [];\n let route;\n if (e.target) {\n var _route;\n route = state.routes.find(route => route.key === e.target);\n if ((_route = route) !== null && _route !== void 0 && _route.name) {\n routeNames.push(route.name);\n }\n } else {\n route = state.routes[state.index];\n routeNames.push(...Object.keys(screens).filter(name => {\n var _route2;\n return ((_route2 = route) === null || _route2 === void 0 ? void 0 : _route2.name) === name;\n }));\n }\n if (route == null) {\n return;\n }\n const navigation = descriptors[route.key].navigation;\n const listeners = [].concat(\n // Get an array of listeners for all screens + common listeners on navigator\n ...[screenListeners, ...routeNames.map(name => {\n const {\n listeners\n } = screens[name].props;\n return listeners;\n })].map(listeners => {\n const map = typeof listeners === 'function' ? listeners({\n route: route,\n navigation\n }) : listeners;\n return map ? Object.keys(map).filter(type => type === e.type).map(type => map === null || map === void 0 ? void 0 : map[type]) : undefined;\n }))\n // We don't want same listener to be called multiple times for same event\n // So we remove any duplicate functions from the array\n .filter((cb, i, self) => cb && self.lastIndexOf(cb) === i);\n listeners.forEach(listener => listener === null || listener === void 0 ? void 0 : listener(e));\n });\n useFocusEvents({\n state,\n emitter\n });\n React.useEffect(() => {\n emitter.emit({\n type: 'state',\n data: {\n state\n }\n });\n }, [emitter, state]);\n const {\n listeners: childListeners,\n addListener\n } = useChildListeners();\n const {\n keyedListeners,\n addKeyedListener\n } = useKeyedChildListeners();\n const onAction = useOnAction({\n router,\n getState,\n setState,\n key: route === null || route === void 0 ? void 0 : route.key,\n actionListeners: childListeners.action,\n beforeRemoveListeners: keyedListeners.beforeRemove,\n routerConfigOptions: {\n routeNames,\n routeParamList,\n routeGetIdList\n },\n emitter\n });\n const onRouteFocus = useOnRouteFocus({\n router,\n key: route === null || route === void 0 ? void 0 : route.key,\n getState,\n setState\n });\n const navigation = useNavigationHelpers({\n id: options.id,\n onAction,\n getState,\n emitter,\n router\n });\n useFocusedListenersChildrenAdapter({\n navigation,\n focusedListeners: childListeners.focus\n });\n useOnGetState({\n getState,\n getStateListeners: keyedListeners.getState\n });\n const descriptors = useDescriptors({\n state,\n screens,\n navigation,\n screenOptions: options.screenOptions,\n defaultScreenOptions: options.defaultScreenOptions,\n onAction,\n getState,\n setState,\n onRouteFocus,\n addListener,\n addKeyedListener,\n router,\n // @ts-expect-error: this should have both core and custom events, but too much work right now\n emitter\n });\n useCurrentRender({\n state,\n navigation,\n descriptors\n });\n const NavigationContent = useComponent(children => /*#__PURE__*/React.createElement(NavigationHelpersContext.Provider, {\n value: navigation\n }, /*#__PURE__*/React.createElement(PreventRemoveProvider, null, children)));\n return {\n state,\n navigation,\n descriptors,\n NavigationContent\n };\n}\n//# sourceMappingURL=useNavigationBuilder.js.map","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","/**\n * Compare two arrays with primitive values as the content.\n * We need to make sure that both values and order match.\n */\nexport default function isArrayEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (a.length !== b.length) {\n return false;\n }\n return a.every((it, index) => it === b[index]);\n}\n//# sourceMappingURL=isArrayEqual.js.map","/**\n * Compare two records with primitive values as the content.\n */\nexport default function isRecordEqual(a, b) {\n if (a === b) {\n return true;\n }\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n return aKeys.every(key => a[key] === b[key]);\n}\n//# sourceMappingURL=isRecordEqual.js.map","import * as React from 'react';\nconst NavigationContent = _ref => {\n let {\n render,\n children\n } = _ref;\n return render(children);\n};\nexport default function useComponent(render) {\n const renderRef = React.useRef(render);\n\n // Normally refs shouldn't be mutated in render\n // But we return a component which will be rendered\n // So it's just for immediate consumption\n renderRef.current = render;\n React.useEffect(() => {\n renderRef.current = null;\n });\n return React.useRef(_ref2 => {\n let {\n children\n } = _ref2;\n const render = renderRef.current;\n if (render === null) {\n throw new Error('The returned component must be rendered in the same render phase as the hook.');\n }\n return /*#__PURE__*/React.createElement(NavigationContent, {\n render: render\n }, children);\n }).current;\n}\n//# sourceMappingURL=useComponent.js.map","import * as React from 'react';\nimport CurrentRenderContext from './CurrentRenderContext';\n/**\n * Write the current options, so that server renderer can get current values\n * Mutating values like this is not safe in async mode, but it doesn't apply to SSR\n */\nexport default function useCurrentRender(_ref) {\n let {\n state,\n navigation,\n descriptors\n } = _ref;\n const current = React.useContext(CurrentRenderContext);\n if (current && navigation.isFocused()) {\n current.options = descriptors[state.routes[state.index].key].options;\n }\n}\n//# sourceMappingURL=useCurrentRender.js.map","import * as React from 'react';\nimport NavigationBuilderContext from './NavigationBuilderContext';\nimport NavigationContext from './NavigationContext';\nimport NavigationRouteContext from './NavigationRouteContext';\nimport SceneView from './SceneView';\nimport useNavigationCache from './useNavigationCache';\nimport useRouteCache from './useRouteCache';\n/**\n * Hook to create descriptor objects for the child routes.\n *\n * A descriptor object provides 3 things:\n * - Helper method to render a screen\n * - Options specified by the screen for the navigator\n * - Navigation object intended for the route\n */\nexport default function useDescriptors(_ref) {\n let {\n state,\n screens,\n navigation,\n screenOptions,\n defaultScreenOptions,\n onAction,\n getState,\n setState,\n addListener,\n addKeyedListener,\n onRouteFocus,\n router,\n emitter\n } = _ref;\n const [options, setOptions] = React.useState({});\n const {\n onDispatchAction,\n onOptionsChange,\n stackRef\n } = React.useContext(NavigationBuilderContext);\n const context = React.useMemo(() => ({\n navigation,\n onAction,\n addListener,\n addKeyedListener,\n onRouteFocus,\n onDispatchAction,\n onOptionsChange,\n stackRef\n }), [navigation, onAction, addListener, addKeyedListener, onRouteFocus, onDispatchAction, onOptionsChange, stackRef]);\n const navigations = useNavigationCache({\n state,\n getState,\n navigation,\n setOptions,\n router,\n emitter\n });\n const routes = useRouteCache(state.routes);\n return routes.reduce((acc, route, i) => {\n const config = screens[route.name];\n const screen = config.props;\n const navigation = navigations[route.key];\n const optionsList = [\n // The default `screenOptions` passed to the navigator\n screenOptions,\n // The `screenOptions` props passed to `Group` elements\n ...(config.options ? config.options.filter(Boolean) : []),\n // The `options` prop passed to `Screen` elements,\n screen.options,\n // The options set via `navigation.setOptions`\n options[route.key]];\n const customOptions = optionsList.reduce((acc, curr) => Object.assign(acc,\n // @ts-expect-error: we check for function but TS still complains\n typeof curr !== 'function' ? curr : curr({\n route,\n navigation\n })), {});\n const mergedOptions = {\n ...(typeof defaultScreenOptions === 'function' ?\n // @ts-expect-error: ts gives incorrect error here\n defaultScreenOptions({\n route,\n navigation,\n options: customOptions\n }) : defaultScreenOptions),\n ...customOptions\n };\n const clearOptions = () => setOptions(o => {\n if (route.key in o) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n [route.key]: _,\n ...rest\n } = o;\n return rest;\n }\n return o;\n });\n acc[route.key] = {\n route,\n // @ts-expect-error: it's missing action helpers, fix later\n navigation,\n render() {\n return /*#__PURE__*/React.createElement(NavigationBuilderContext.Provider, {\n key: route.key,\n value: context\n }, /*#__PURE__*/React.createElement(NavigationContext.Provider, {\n value: navigation\n }, /*#__PURE__*/React.createElement(NavigationRouteContext.Provider, {\n value: route\n }, /*#__PURE__*/React.createElement(SceneView, {\n navigation: navigation,\n route: route,\n screen: screen,\n routeState: state.routes[i].state,\n getState: getState,\n setState: setState,\n options: mergedOptions,\n clearOptions: clearOptions\n }))));\n },\n options: mergedOptions\n };\n return acc;\n }, {});\n}\n//# sourceMappingURL=useDescriptors.js.map","import * as React from 'react';\nimport EnsureSingleNavigator from './EnsureSingleNavigator';\nimport NavigationStateContext from './NavigationStateContext';\nimport StaticContainer from './StaticContainer';\nimport useOptionsGetters from './useOptionsGetters';\n/**\n * Component which takes care of rendering the screen for a route.\n * It provides all required contexts and applies optimizations when applicable.\n */\nexport default function SceneView(_ref) {\n let {\n screen,\n route,\n navigation,\n routeState,\n getState,\n setState,\n options,\n clearOptions\n } = _ref;\n const navigatorKeyRef = React.useRef();\n const getKey = React.useCallback(() => navigatorKeyRef.current, []);\n const {\n addOptionsGetter\n } = useOptionsGetters({\n key: route.key,\n options,\n navigation\n });\n const setKey = React.useCallback(key => {\n navigatorKeyRef.current = key;\n }, []);\n const getCurrentState = React.useCallback(() => {\n const state = getState();\n const currentRoute = state.routes.find(r => r.key === route.key);\n return currentRoute ? currentRoute.state : undefined;\n }, [getState, route.key]);\n const setCurrentState = React.useCallback(child => {\n const state = getState();\n setState({\n ...state,\n routes: state.routes.map(r => r.key === route.key ? {\n ...r,\n state: child\n } : r)\n });\n }, [getState, route.key, setState]);\n const isInitialRef = React.useRef(true);\n React.useEffect(() => {\n isInitialRef.current = false;\n });\n\n // Clear options set by this screen when it is unmounted\n React.useEffect(() => {\n return clearOptions;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n const getIsInitial = React.useCallback(() => isInitialRef.current, []);\n const context = React.useMemo(() => ({\n state: routeState,\n getState: getCurrentState,\n setState: setCurrentState,\n getKey,\n setKey,\n getIsInitial,\n addOptionsGetter\n }), [routeState, getCurrentState, setCurrentState, getKey, setKey, getIsInitial, addOptionsGetter]);\n const ScreenComponent = screen.getComponent ? screen.getComponent() : screen.component;\n return /*#__PURE__*/React.createElement(NavigationStateContext.Provider, {\n value: context\n }, /*#__PURE__*/React.createElement(EnsureSingleNavigator, null, /*#__PURE__*/React.createElement(StaticContainer, {\n name: screen.name,\n render: ScreenComponent || screen.children,\n navigation: navigation,\n route: route\n }, ScreenComponent !== undefined ? /*#__PURE__*/React.createElement(ScreenComponent, {\n navigation: navigation,\n route: route\n }) : screen.children !== undefined ? screen.children({\n navigation,\n route\n }) : null)));\n}\n//# sourceMappingURL=SceneView.js.map","import * as React from 'react';\n\n/**\n * Component which prevents updates for children if no props changed\n */\nfunction StaticContainer(props) {\n return props.children;\n}\nexport default /*#__PURE__*/React.memo(StaticContainer, (prevProps, nextProps) => {\n const prevPropKeys = Object.keys(prevProps);\n const nextPropKeys = Object.keys(nextProps);\n if (prevPropKeys.length !== nextPropKeys.length) {\n return false;\n }\n for (const key of prevPropKeys) {\n if (key === 'children') {\n continue;\n }\n if (prevProps[key] !== nextProps[key]) {\n return false;\n }\n }\n return true;\n});\n//# sourceMappingURL=StaticContainer.js.map","import { CommonActions } from '@react-navigation/routers';\nimport * as React from 'react';\nimport NavigationBuilderContext from './NavigationBuilderContext';\n/**\n * Hook to cache navigation objects for each screen in the navigator.\n * It's important to cache them to make sure navigation objects don't change between renders.\n * This lets us apply optimizations like `React.memo` to minimize re-rendering screens.\n */\nexport default function useNavigationCache(_ref) {\n let {\n state,\n getState,\n navigation,\n setOptions,\n router,\n emitter\n } = _ref;\n const {\n stackRef\n } = React.useContext(NavigationBuilderContext);\n\n // Cache object which holds navigation objects for each screen\n // We use `React.useMemo` instead of `React.useRef` coz we want to invalidate it when deps change\n // In reality, these deps will rarely change, if ever\n const cache = React.useMemo(() => ({\n current: {}\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [getState, navigation, setOptions, router, emitter]);\n const actions = {\n ...router.actionCreators,\n ...CommonActions\n };\n cache.current = state.routes.reduce((acc, route) => {\n const previous = cache.current[route.key];\n if (previous) {\n // If a cached navigation object already exists, reuse it\n acc[route.key] = previous;\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n emit,\n ...rest\n } = navigation;\n const dispatch = thunk => {\n const action = typeof thunk === 'function' ? thunk(getState()) : thunk;\n if (action != null) {\n navigation.dispatch({\n source: route.key,\n ...action\n });\n }\n };\n const withStack = callback => {\n let isStackSet = false;\n try {\n if (process.env.NODE_ENV !== 'production' && stackRef && !stackRef.current) {\n // Capture the stack trace for devtools\n stackRef.current = new Error().stack;\n isStackSet = true;\n }\n callback();\n } finally {\n if (isStackSet && stackRef) {\n stackRef.current = undefined;\n }\n }\n };\n const helpers = Object.keys(actions).reduce((acc, name) => {\n acc[name] = function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return withStack(() =>\n // @ts-expect-error: name is a valid key, but TypeScript is dumb\n dispatch(actions[name](...args)));\n };\n return acc;\n }, {});\n acc[route.key] = {\n ...rest,\n ...helpers,\n // FIXME: too much work to fix the types for now\n ...emitter.create(route.key),\n dispatch: thunk => withStack(() => dispatch(thunk)),\n getParent: id => {\n if (id !== undefined && id === rest.getId()) {\n // If the passed id is the same as the current navigation id,\n // we return the cached navigation object for the relevant route\n return acc[route.key];\n }\n return rest.getParent(id);\n },\n setOptions: options => setOptions(o => ({\n ...o,\n [route.key]: {\n ...o[route.key],\n ...options\n }\n })),\n isFocused: () => {\n const state = getState();\n if (state.routes[state.index].key !== route.key) {\n return false;\n }\n\n // If the current screen is focused, we also need to check if parent navigator is focused\n // This makes sure that we return the focus state in the whole tree, not just this navigator\n return navigation ? navigation.isFocused() : true;\n }\n };\n }\n return acc;\n }, {});\n return cache.current;\n}\n//# sourceMappingURL=useNavigationCache.js.map","import * as React from 'react';\nimport NavigationBuilderContext from './NavigationBuilderContext';\n/**\n * Hook for passing focus callback to children\n */\nexport default function useFocusedListenersChildrenAdapter(_ref) {\n let {\n navigation,\n focusedListeners\n } = _ref;\n const {\n addListener\n } = React.useContext(NavigationBuilderContext);\n const listener = React.useCallback(callback => {\n if (navigation.isFocused()) {\n for (const listener of focusedListeners) {\n const {\n handled,\n result\n } = listener(callback);\n if (handled) {\n return {\n handled,\n result\n };\n }\n }\n return {\n handled: true,\n result: callback(navigation)\n };\n } else {\n return {\n handled: false,\n result: null\n };\n }\n }, [focusedListeners, navigation]);\n React.useEffect(() => addListener === null || addListener === void 0 ? void 0 : addListener('focus', listener), [addListener, listener]);\n}\n//# sourceMappingURL=useFocusedListenersChildrenAdapter.js.map","import * as React from 'react';\nimport NavigationContext from './NavigationContext';\n/**\n * Hook to take care of emitting `focus` and `blur` events.\n */\nexport default function useFocusEvents(_ref) {\n let {\n state,\n emitter\n } = _ref;\n const navigation = React.useContext(NavigationContext);\n const lastFocusedKeyRef = React.useRef();\n const currentFocusedKey = state.routes[state.index].key;\n\n // When the parent screen changes its focus state, we also need to change child's focus\n // Coz the child screen can't be focused if the parent screen is out of focus\n React.useEffect(() => navigation === null || navigation === void 0 ? void 0 : navigation.addListener('focus', () => {\n lastFocusedKeyRef.current = currentFocusedKey;\n emitter.emit({\n type: 'focus',\n target: currentFocusedKey\n });\n }), [currentFocusedKey, emitter, navigation]);\n React.useEffect(() => navigation === null || navigation === void 0 ? void 0 : navigation.addListener('blur', () => {\n lastFocusedKeyRef.current = undefined;\n emitter.emit({\n type: 'blur',\n target: currentFocusedKey\n });\n }), [currentFocusedKey, emitter, navigation]);\n React.useEffect(() => {\n const lastFocusedKey = lastFocusedKeyRef.current;\n lastFocusedKeyRef.current = currentFocusedKey;\n\n // We wouldn't have `lastFocusedKey` on initial mount\n // Fire focus event for the current route on mount if there's no parent navigator\n if (lastFocusedKey === undefined && !navigation) {\n emitter.emit({\n type: 'focus',\n target: currentFocusedKey\n });\n }\n\n // We should only emit events when the focused key changed and navigator is focused\n // When navigator is not focused, screens inside shouldn't receive focused status either\n if (lastFocusedKey === currentFocusedKey || !(navigation ? navigation.isFocused() : true)) {\n return;\n }\n if (lastFocusedKey === undefined) {\n // Only fire events after initial mount\n return;\n }\n emitter.emit({\n type: 'blur',\n target: lastFocusedKey\n });\n emitter.emit({\n type: 'focus',\n target: currentFocusedKey\n });\n }, [currentFocusedKey, emitter, navigation]);\n}\n//# sourceMappingURL=useFocusEvents.js.map","import { CommonActions } from '@react-navigation/routers';\nimport * as React from 'react';\nimport NavigationContext from './NavigationContext';\nimport { PrivateValueStore } from './types';\nimport UnhandledActionContext from './UnhandledActionContext';\n// This is to make TypeScript compiler happy\n// eslint-disable-next-line babel/no-unused-expressions\nPrivateValueStore;\n/**\n * Navigation object with helper methods to be used by a navigator.\n * This object includes methods for common actions as well as methods the parent screen's navigation object.\n */\nexport default function useNavigationHelpers(_ref) {\n let {\n id: navigatorId,\n onAction,\n getState,\n emitter,\n router\n } = _ref;\n const onUnhandledAction = React.useContext(UnhandledActionContext);\n const parentNavigationHelpers = React.useContext(NavigationContext);\n return React.useMemo(() => {\n const dispatch = op => {\n const action = typeof op === 'function' ? op(getState()) : op;\n const handled = onAction(action);\n if (!handled) {\n onUnhandledAction === null || onUnhandledAction === void 0 ? void 0 : onUnhandledAction(action);\n }\n };\n const actions = {\n ...router.actionCreators,\n ...CommonActions\n };\n const helpers = Object.keys(actions).reduce((acc, name) => {\n // @ts-expect-error: name is a valid key, but TypeScript is dumb\n acc[name] = function () {\n return dispatch(actions[name](...arguments));\n };\n return acc;\n }, {});\n const navigationHelpers = {\n ...parentNavigationHelpers,\n ...helpers,\n dispatch,\n emit: emitter.emit,\n isFocused: parentNavigationHelpers ? parentNavigationHelpers.isFocused : () => true,\n canGoBack: () => {\n const state = getState();\n return router.getStateForAction(state, CommonActions.goBack(), {\n routeNames: state.routeNames,\n routeParamList: {},\n routeGetIdList: {}\n }) !== null || (parentNavigationHelpers === null || parentNavigationHelpers === void 0 ? void 0 : parentNavigationHelpers.canGoBack()) || false;\n },\n getId: () => navigatorId,\n getParent: id => {\n if (id !== undefined) {\n let current = navigationHelpers;\n while (current && id !== current.getId()) {\n current = current.getParent();\n }\n return current;\n }\n return parentNavigationHelpers;\n },\n getState\n };\n return navigationHelpers;\n }, [navigatorId, emitter.emit, getState, onAction, onUnhandledAction, parentNavigationHelpers, router]);\n}\n//# sourceMappingURL=useNavigationHelpers.js.map","import * as React from 'react';\nimport NavigationBuilderContext from './NavigationBuilderContext';\nimport useOnPreventRemove, { shouldPreventRemove } from './useOnPreventRemove';\n/**\n * Hook to handle actions for a navigator, including state updates and bubbling.\n *\n * Bubbling an action is achieved in 2 ways:\n * 1. To bubble action to parent, we expose the action handler in context and then access the parent context\n * 2. To bubble action to child, child adds event listeners subscribing to actions from parent\n *\n * When the action handler handles as action, it returns `true`, otherwise `false`.\n */\nexport default function useOnAction(_ref) {\n let {\n router,\n getState,\n setState,\n key,\n actionListeners,\n beforeRemoveListeners,\n routerConfigOptions,\n emitter\n } = _ref;\n const {\n onAction: onActionParent,\n onRouteFocus: onRouteFocusParent,\n addListener: addListenerParent,\n onDispatchAction\n } = React.useContext(NavigationBuilderContext);\n const routerConfigOptionsRef = React.useRef(routerConfigOptions);\n React.useEffect(() => {\n routerConfigOptionsRef.current = routerConfigOptions;\n });\n const onAction = React.useCallback(function (action) {\n let visitedNavigators = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Set();\n const state = getState();\n\n // Since actions can bubble both up and down, they could come to the same navigator again\n // We keep track of navigators which have already tried to handle the action and return if it's already visited\n if (visitedNavigators.has(state.key)) {\n return false;\n }\n visitedNavigators.add(state.key);\n if (typeof action.target !== 'string' || action.target === state.key) {\n let result = router.getStateForAction(state, action, routerConfigOptionsRef.current);\n\n // If a target is specified and set to current navigator, the action shouldn't bubble\n // So instead of `null`, we use the state object for such cases to signal that action was handled\n result = result === null && action.target === state.key ? state : result;\n if (result !== null) {\n onDispatchAction(action, state === result);\n if (state !== result) {\n const isPrevented = shouldPreventRemove(emitter, beforeRemoveListeners, state.routes, result.routes, action);\n if (isPrevented) {\n return true;\n }\n setState(result);\n }\n if (onRouteFocusParent !== undefined) {\n // Some actions such as `NAVIGATE` also want to bring the navigated route to focus in the whole tree\n // This means we need to focus all of the parent navigators of this navigator as well\n const shouldFocus = router.shouldActionChangeFocus(action);\n if (shouldFocus && key !== undefined) {\n onRouteFocusParent(key);\n }\n }\n return true;\n }\n }\n if (onActionParent !== undefined) {\n // Bubble action to the parent if the current navigator didn't handle it\n if (onActionParent(action, visitedNavigators)) {\n return true;\n }\n }\n\n // If the action wasn't handled by current navigator or a parent navigator, let children handle it\n for (let i = actionListeners.length - 1; i >= 0; i--) {\n const listener = actionListeners[i];\n if (listener(action, visitedNavigators)) {\n return true;\n }\n }\n return false;\n }, [actionListeners, beforeRemoveListeners, emitter, getState, key, onActionParent, onDispatchAction, onRouteFocusParent, router, setState]);\n useOnPreventRemove({\n getState,\n emitter,\n beforeRemoveListeners\n });\n React.useEffect(() => addListenerParent === null || addListenerParent === void 0 ? void 0 : addListenerParent('action', onAction), [addListenerParent, onAction]);\n return onAction;\n}\n//# sourceMappingURL=useOnAction.js.map","import * as React from 'react';\nimport NavigationBuilderContext from './NavigationBuilderContext';\nimport NavigationRouteContext from './NavigationRouteContext';\nconst VISITED_ROUTE_KEYS = Symbol('VISITED_ROUTE_KEYS');\nexport const shouldPreventRemove = (emitter, beforeRemoveListeners, currentRoutes, nextRoutes, action) => {\n const nextRouteKeys = nextRoutes.map(route => route.key);\n\n // Call these in reverse order so last screens handle the event first\n const removedRoutes = currentRoutes.filter(route => !nextRouteKeys.includes(route.key)).reverse();\n const visitedRouteKeys =\n // @ts-expect-error: add this property to mark that we've already emitted this action\n action[VISITED_ROUTE_KEYS] ?? new Set();\n const beforeRemoveAction = {\n ...action,\n [VISITED_ROUTE_KEYS]: visitedRouteKeys\n };\n for (const route of removedRoutes) {\n var _beforeRemoveListener;\n if (visitedRouteKeys.has(route.key)) {\n // Skip if we've already emitted this action for this screen\n continue;\n }\n\n // First, we need to check if any child screens want to prevent it\n const isPrevented = (_beforeRemoveListener = beforeRemoveListeners[route.key]) === null || _beforeRemoveListener === void 0 ? void 0 : _beforeRemoveListener.call(beforeRemoveListeners, beforeRemoveAction);\n if (isPrevented) {\n return true;\n }\n visitedRouteKeys.add(route.key);\n const event = emitter.emit({\n type: 'beforeRemove',\n target: route.key,\n data: {\n action: beforeRemoveAction\n },\n canPreventDefault: true\n });\n if (event.defaultPrevented) {\n return true;\n }\n }\n return false;\n};\nexport default function useOnPreventRemove(_ref) {\n let {\n getState,\n emitter,\n beforeRemoveListeners\n } = _ref;\n const {\n addKeyedListener\n } = React.useContext(NavigationBuilderContext);\n const route = React.useContext(NavigationRouteContext);\n const routeKey = route === null || route === void 0 ? void 0 : route.key;\n React.useEffect(() => {\n if (routeKey) {\n return addKeyedListener === null || addKeyedListener === void 0 ? void 0 : addKeyedListener('beforeRemove', routeKey, action => {\n const state = getState();\n return shouldPreventRemove(emitter, beforeRemoveListeners, state.routes, [], action);\n });\n }\n }, [addKeyedListener, beforeRemoveListeners, emitter, getState, routeKey]);\n}\n//# sourceMappingURL=useOnPreventRemove.js.map","import * as React from 'react';\nimport isArrayEqual from './isArrayEqual';\nimport NavigationBuilderContext from './NavigationBuilderContext';\nimport NavigationRouteContext from './NavigationRouteContext';\nexport default function useOnGetState(_ref) {\n let {\n getState,\n getStateListeners\n } = _ref;\n const {\n addKeyedListener\n } = React.useContext(NavigationBuilderContext);\n const route = React.useContext(NavigationRouteContext);\n const key = route ? route.key : 'root';\n const getRehydratedState = React.useCallback(() => {\n const state = getState();\n\n // Avoid returning new route objects if we don't need to\n const routes = state.routes.map(route => {\n var _getStateListeners$ro;\n const childState = (_getStateListeners$ro = getStateListeners[route.key]) === null || _getStateListeners$ro === void 0 ? void 0 : _getStateListeners$ro.call(getStateListeners);\n if (route.state === childState) {\n return route;\n }\n return {\n ...route,\n state: childState\n };\n });\n if (isArrayEqual(state.routes, routes)) {\n return state;\n }\n return {\n ...state,\n routes\n };\n }, [getState, getStateListeners]);\n React.useEffect(() => {\n return addKeyedListener === null || addKeyedListener === void 0 ? void 0 : addKeyedListener('getState', key, getRehydratedState);\n }, [addKeyedListener, getRehydratedState, key]);\n}\n//# sourceMappingURL=useOnGetState.js.map","import * as React from 'react';\nimport NavigationBuilderContext from './NavigationBuilderContext';\n/**\n * Hook to handle focus actions for a route.\n * Focus action needs to be treated specially, coz when a nested route is focused,\n * the parent navigators also needs to be focused.\n */\nexport default function useOnRouteFocus(_ref) {\n let {\n router,\n getState,\n key: sourceRouteKey,\n setState\n } = _ref;\n const {\n onRouteFocus: onRouteFocusParent\n } = React.useContext(NavigationBuilderContext);\n return React.useCallback(key => {\n const state = getState();\n const result = router.getStateForRouteFocus(state, key);\n if (result !== state) {\n setState(result);\n }\n if (onRouteFocusParent !== undefined && sourceRouteKey !== undefined) {\n onRouteFocusParent(sourceRouteKey);\n }\n }, [getState, onRouteFocusParent, router, setState, sourceRouteKey]);\n}\n//# sourceMappingURL=useOnRouteFocus.js.map","import { nanoid } from 'nanoid/non-secure';\nimport * as React from 'react';\nimport { SingleNavigatorContext } from './EnsureSingleNavigator';\n\n/**\n * Register a navigator in the parent context (either a navigation container or a screen).\n * This is used to prevent multiple navigators under a single container or screen.\n */\nexport default function useRegisterNavigator() {\n const [key] = React.useState(() => nanoid());\n const container = React.useContext(SingleNavigatorContext);\n if (container === undefined) {\n throw new Error(\"Couldn't register the navigator. Have you wrapped your app with 'NavigationContainer'?\\n\\nThis can also happen if there are multiple copies of '@react-navigation' packages installed.\");\n }\n React.useEffect(() => {\n const {\n register,\n unregister\n } = container;\n register(key);\n return () => unregister(key);\n }, [container, key]);\n return key;\n}\n//# sourceMappingURL=useRegisterNavigator.js.map","import * as React from 'react';\nimport createNavigationContainerRef from './createNavigationContainerRef';\nexport default function useNavigationContainerRef() {\n const navigation = React.useRef(null);\n if (navigation.current == null) {\n navigation.current = createNavigationContainerRef();\n }\n return navigation.current;\n}\n//# sourceMappingURL=useNavigationContainerRef.js.map","import * as React from 'react';\nimport useNavigation from './useNavigation';\n/**\n * Hook to get a value from the current navigation state using a selector.\n *\n * @param selector Selector function to get a value from the state.\n */\nexport default function useNavigationState(selector) {\n const navigation = useNavigation();\n\n // We don't care about the state value, we run the selector again at the end\n // The state is only to make sure that there's a re-render when we have a new value\n const [, setResult] = React.useState(() => selector(navigation.getState()));\n\n // We store the selector in a ref to avoid re-subscribing listeners every render\n const selectorRef = React.useRef(selector);\n React.useEffect(() => {\n selectorRef.current = selector;\n });\n React.useEffect(() => {\n const unsubscribe = navigation.addListener('state', e => {\n setResult(selectorRef.current(e.data.state));\n });\n return unsubscribe;\n }, [navigation]);\n return selector(navigation.getState());\n}\n//# sourceMappingURL=useNavigationState.js.map","import { nanoid } from 'nanoid/non-secure';\nimport * as React from 'react';\nimport useLatestCallback from 'use-latest-callback';\nimport useNavigation from './useNavigation';\nimport usePreventRemoveContext from './usePreventRemoveContext';\nimport useRoute from './useRoute';\n\n/**\n * Hook to prevent screen from being removed. Can be used to prevent users from leaving the screen.\n *\n * @param preventRemove Boolean indicating whether to prevent screen from being removed.\n * @param callback Function which is executed when screen was prevented from being removed.\n */\nexport default function usePreventRemove(preventRemove, callback) {\n const [id] = React.useState(() => nanoid());\n const navigation = useNavigation();\n const {\n key: routeKey\n } = useRoute();\n const {\n setPreventRemove\n } = usePreventRemoveContext();\n React.useEffect(() => {\n setPreventRemove(id, routeKey, preventRemove);\n return () => {\n setPreventRemove(id, routeKey, false);\n };\n }, [setPreventRemove, id, routeKey, preventRemove]);\n const beforeRemoveListener = useLatestCallback(e => {\n if (!preventRemove) {\n return;\n }\n e.preventDefault();\n callback({\n data: e.data\n });\n });\n React.useEffect(() => navigation === null || navigation === void 0 ? void 0 : navigation.addListener('beforeRemove', beforeRemoveListener), [navigation, beforeRemoveListener]);\n}\n//# sourceMappingURL=usePreventRemove.js.map","import * as React from 'react';\nimport PreventRemoveContext from './PreventRemoveContext';\nexport default function usePreventRemoveContext() {\n const value = React.useContext(PreventRemoveContext);\n if (value == null) {\n throw new Error(\"Couldn't find the prevent remove context. Is your component inside NavigationContent?\");\n }\n return value;\n}\n//# sourceMappingURL=usePreventRemoveContext.js.map","import * as React from 'react';\nimport NavigationRouteContext from './NavigationRouteContext';\n/**\n * Hook to access the route prop of the parent screen anywhere.\n *\n * @returns Route prop of the parent screen.\n */\nexport default function useRoute() {\n const route = React.useContext(NavigationRouteContext);\n if (route === undefined) {\n throw new Error(\"Couldn't find a route object. Is your component inside a screen in a navigator?\");\n }\n return route;\n}\n//# sourceMappingURL=useRoute.js.map","import * as React from 'react';\nconst LinkingContext = /*#__PURE__*/React.createContext({\n options: undefined\n});\nLinkingContext.displayName = 'LinkingContext';\nexport default LinkingContext;\n//# sourceMappingURL=LinkingContext.js.map","import { getActionFromState, getStateFromPath, NavigationContainerRefContext } from '@react-navigation/core';\nimport * as React from 'react';\nimport LinkingContext from './LinkingContext';\nexport default function useLinkTo() {\n const navigation = React.useContext(NavigationContainerRefContext);\n const linking = React.useContext(LinkingContext);\n const linkTo = React.useCallback(to => {\n if (navigation === undefined) {\n throw new Error(\"Couldn't find a navigation object. Is your component inside NavigationContainer?\");\n }\n if (typeof to !== 'string') {\n // @ts-expect-error: This is fine\n navigation.navigate(to.screen, to.params);\n return;\n }\n if (!to.startsWith('/')) {\n throw new Error(`The path must start with '/' (${to}).`);\n }\n const {\n options\n } = linking;\n const state = options !== null && options !== void 0 && options.getStateFromPath ? options.getStateFromPath(to, options.config) : getStateFromPath(to, options === null || options === void 0 ? void 0 : options.config);\n if (state) {\n const action = getActionFromState(state, options === null || options === void 0 ? void 0 : options.config);\n if (action !== undefined) {\n navigation.dispatch(action);\n } else {\n navigation.reset(state);\n }\n } else {\n throw new Error('Failed to parse the path to a navigation state.');\n }\n }, [linking, navigation]);\n return linkTo;\n}\n//# sourceMappingURL=useLinkTo.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport { BaseNavigationContainer, getActionFromState, getPathFromState, getStateFromPath, validatePathConfig } from '@react-navigation/core';\nimport * as React from 'react';\nimport LinkingContext from './LinkingContext';\nimport DefaultTheme from './theming/DefaultTheme';\nimport ThemeProvider from './theming/ThemeProvider';\nimport useBackButton from './useBackButton';\nimport useDocumentTitle from './useDocumentTitle';\nimport useLinking from './useLinking';\nimport useThenable from './useThenable';\nglobal.REACT_NAVIGATION_DEVTOOLS = new WeakMap();\n/**\n * Container component which holds the navigation state designed for React Native apps.\n * This should be rendered at the root wrapping the whole app.\n *\n * @param props.initialState Initial state object for the navigation tree. When deep link handling is enabled, this will override deep links when specified. Make sure that you don't specify an `initialState` when there's a deep link (`Linking.getInitialURL()`).\n * @param props.onReady Callback which is called after the navigation tree mounts.\n * @param props.onStateChange Callback which is called with the latest navigation state when it changes.\n * @param props.theme Theme object for the navigators.\n * @param props.linking Options for deep linking. Deep link handling is enabled when this prop is provided, unless `linking.enabled` is `false`.\n * @param props.fallback Fallback component to render until we have finished getting initial state when linking is enabled. Defaults to `null`.\n * @param props.documentTitle Options to configure the document title on Web. Updating document title is handled by default unless `documentTitle.enabled` is `false`.\n * @param props.children Child elements to render the content.\n * @param props.ref Ref object which refers to the navigation object containing helper methods.\n */\nfunction NavigationContainerInner(_ref, ref) {\n let {\n theme = DefaultTheme,\n linking,\n fallback = null,\n documentTitle,\n onReady,\n ...rest\n } = _ref;\n const isLinkingEnabled = linking ? linking.enabled !== false : false;\n if (linking !== null && linking !== void 0 && linking.config) {\n validatePathConfig(linking.config);\n }\n const refContainer = React.useRef(null);\n useBackButton(refContainer);\n useDocumentTitle(refContainer, documentTitle);\n const {\n getInitialState\n } = useLinking(refContainer, {\n independent: rest.independent,\n enabled: isLinkingEnabled,\n prefixes: [],\n ...linking\n });\n\n // Add additional linking related info to the ref\n // This will be used by the devtools\n React.useEffect(() => {\n if (refContainer.current) {\n REACT_NAVIGATION_DEVTOOLS.set(refContainer.current, {\n get linking() {\n return {\n ...linking,\n enabled: isLinkingEnabled,\n prefixes: (linking === null || linking === void 0 ? void 0 : linking.prefixes) ?? [],\n getStateFromPath: (linking === null || linking === void 0 ? void 0 : linking.getStateFromPath) ?? getStateFromPath,\n getPathFromState: (linking === null || linking === void 0 ? void 0 : linking.getPathFromState) ?? getPathFromState,\n getActionFromState: (linking === null || linking === void 0 ? void 0 : linking.getActionFromState) ?? getActionFromState\n };\n }\n });\n }\n });\n const [isResolved, initialState] = useThenable(getInitialState);\n React.useImperativeHandle(ref, () => refContainer.current);\n const linkingContext = React.useMemo(() => ({\n options: linking\n }), [linking]);\n const isReady = rest.initialState != null || !isLinkingEnabled || isResolved;\n const onReadyRef = React.useRef(onReady);\n React.useEffect(() => {\n onReadyRef.current = onReady;\n });\n React.useEffect(() => {\n if (isReady) {\n var _onReadyRef$current;\n (_onReadyRef$current = onReadyRef.current) === null || _onReadyRef$current === void 0 ? void 0 : _onReadyRef$current.call(onReadyRef);\n }\n }, [isReady]);\n if (!isReady) {\n // This is temporary until we have Suspense for data-fetching\n // Then the fallback will be handled by a parent `Suspense` component\n return fallback;\n }\n return /*#__PURE__*/React.createElement(LinkingContext.Provider, {\n value: linkingContext\n }, /*#__PURE__*/React.createElement(ThemeProvider, {\n value: theme\n }, /*#__PURE__*/React.createElement(BaseNavigationContainer, _extends({}, rest, {\n initialState: rest.initialState == null ? initialState : rest.initialState,\n ref: refContainer\n }))));\n}\nconst NavigationContainer = /*#__PURE__*/React.forwardRef(NavigationContainerInner);\nexport default NavigationContainer;\n//# sourceMappingURL=NavigationContainer.js.map","const DefaultTheme = {\n dark: false,\n colors: {\n primary: 'rgb(0, 122, 255)',\n background: 'rgb(242, 242, 242)',\n card: 'rgb(255, 255, 255)',\n text: 'rgb(28, 28, 30)',\n border: 'rgb(216, 216, 216)',\n notification: 'rgb(255, 59, 48)'\n }\n};\nexport default DefaultTheme;\n//# sourceMappingURL=DefaultTheme.js.map","import * as React from 'react';\nimport ThemeContext from './ThemeContext';\nexport default function ThemeProvider(_ref) {\n let {\n value,\n children\n } = _ref;\n return /*#__PURE__*/React.createElement(ThemeContext.Provider, {\n value: value\n }, children);\n}\n//# sourceMappingURL=ThemeProvider.js.map","import * as React from 'react';\nimport DefaultTheme from './DefaultTheme';\nconst ThemeContext = /*#__PURE__*/React.createContext(DefaultTheme);\nThemeContext.displayName = 'ThemeContext';\nexport default ThemeContext;\n//# sourceMappingURL=ThemeContext.js.map","export default function useBackButton(_) {\n // No-op\n // BackHandler is not available on web\n}\n//# sourceMappingURL=useBackButton.js.map","import * as React from 'react';\n/**\n * Set the document title for the active screen\n */\nexport default function useDocumentTitle(ref) {\n let {\n enabled = true,\n formatter = (options, route) => (options === null || options === void 0 ? void 0 : options.title) ?? (route === null || route === void 0 ? void 0 : route.name)\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n React.useEffect(() => {\n if (!enabled) {\n return;\n }\n const navigation = ref.current;\n if (navigation) {\n const title = formatter(navigation.getCurrentOptions(), navigation.getCurrentRoute());\n document.title = title;\n }\n return navigation === null || navigation === void 0 ? void 0 : navigation.addListener('options', e => {\n const title = formatter(e.data.options, navigation === null || navigation === void 0 ? void 0 : navigation.getCurrentRoute());\n document.title = title;\n });\n });\n}\n//# sourceMappingURL=useDocumentTitle.js.map","import { findFocusedRoute, getActionFromState as getActionFromStateDefault, getPathFromState as getPathFromStateDefault, getStateFromPath as getStateFromPathDefault } from '@react-navigation/core';\nimport isEqual from 'fast-deep-equal';\nimport * as React from 'react';\nimport createMemoryHistory from './createMemoryHistory';\nimport ServerContext from './ServerContext';\n/**\n * Find the matching navigation state that changed between 2 navigation states\n * e.g.: a -> b -> c -> d and a -> b -> c -> e -> f, if history in b changed, b is the matching state\n */\nconst findMatchingState = (a, b) => {\n if (a === undefined || b === undefined || a.key !== b.key) {\n return [undefined, undefined];\n }\n\n // Tab and drawer will have `history` property, but stack will have history in `routes`\n const aHistoryLength = a.history ? a.history.length : a.routes.length;\n const bHistoryLength = b.history ? b.history.length : b.routes.length;\n const aRoute = a.routes[a.index];\n const bRoute = b.routes[b.index];\n const aChildState = aRoute.state;\n const bChildState = bRoute.state;\n\n // Stop here if this is the state object that changed:\n // - history length is different\n // - focused routes are different\n // - one of them doesn't have child state\n // - child state keys are different\n if (aHistoryLength !== bHistoryLength || aRoute.key !== bRoute.key || aChildState === undefined || bChildState === undefined || aChildState.key !== bChildState.key) {\n return [a, b];\n }\n return findMatchingState(aChildState, bChildState);\n};\n\n/**\n * Run async function in series as it's called.\n */\nexport const series = cb => {\n let queue = Promise.resolve();\n const callback = () => {\n queue = queue.then(cb);\n };\n return callback;\n};\nlet linkingHandlers = [];\nexport default function useLinking(ref, _ref) {\n let {\n independent,\n enabled = true,\n config,\n getStateFromPath = getStateFromPathDefault,\n getPathFromState = getPathFromStateDefault,\n getActionFromState = getActionFromStateDefault\n } = _ref;\n React.useEffect(() => {\n if (process.env.NODE_ENV === 'production') {\n return undefined;\n }\n if (independent) {\n return undefined;\n }\n if (enabled !== false && linkingHandlers.length) {\n console.error(['Looks like you have configured linking in multiple places. This is likely an error since deep links should only be handled in one place to avoid conflicts. Make sure that:', \"- You don't have multiple NavigationContainers in the app each with 'linking' enabled\", '- Only a single instance of the root component is rendered'].join('\\n').trim());\n }\n const handler = Symbol();\n if (enabled !== false) {\n linkingHandlers.push(handler);\n }\n return () => {\n const index = linkingHandlers.indexOf(handler);\n if (index > -1) {\n linkingHandlers.splice(index, 1);\n }\n };\n }, [enabled, independent]);\n const [history] = React.useState(createMemoryHistory);\n\n // We store these options in ref to avoid re-creating getInitialState and re-subscribing listeners\n // This lets user avoid wrapping the items in `React.useCallback` or `React.useMemo`\n // Not re-creating `getInitialState` is important coz it makes it easier for the user to use in an effect\n const enabledRef = React.useRef(enabled);\n const configRef = React.useRef(config);\n const getStateFromPathRef = React.useRef(getStateFromPath);\n const getPathFromStateRef = React.useRef(getPathFromState);\n const getActionFromStateRef = React.useRef(getActionFromState);\n React.useEffect(() => {\n enabledRef.current = enabled;\n configRef.current = config;\n getStateFromPathRef.current = getStateFromPath;\n getPathFromStateRef.current = getPathFromState;\n getActionFromStateRef.current = getActionFromState;\n });\n const server = React.useContext(ServerContext);\n const getInitialState = React.useCallback(() => {\n let value;\n if (enabledRef.current) {\n const location = (server === null || server === void 0 ? void 0 : server.location) ?? (typeof window !== 'undefined' ? window.location : undefined);\n const path = location ? location.pathname + location.search : undefined;\n if (path) {\n value = getStateFromPathRef.current(path, configRef.current);\n }\n }\n const thenable = {\n then(onfulfilled) {\n return Promise.resolve(onfulfilled ? onfulfilled(value) : value);\n },\n catch() {\n return thenable;\n }\n };\n return thenable;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n const previousIndexRef = React.useRef(undefined);\n const previousStateRef = React.useRef(undefined);\n const pendingPopStatePathRef = React.useRef(undefined);\n React.useEffect(() => {\n previousIndexRef.current = history.index;\n return history.listen(() => {\n const navigation = ref.current;\n if (!navigation || !enabled) {\n return;\n }\n const {\n location\n } = window;\n const path = location.pathname + location.search;\n const index = history.index;\n const previousIndex = previousIndexRef.current ?? 0;\n previousIndexRef.current = index;\n pendingPopStatePathRef.current = path;\n\n // When browser back/forward is clicked, we first need to check if state object for this index exists\n // If it does we'll reset to that state object\n // Otherwise, we'll handle it like a regular deep link\n const record = history.get(index);\n if ((record === null || record === void 0 ? void 0 : record.path) === path && record !== null && record !== void 0 && record.state) {\n navigation.resetRoot(record.state);\n return;\n }\n const state = getStateFromPathRef.current(path, configRef.current);\n\n // We should only dispatch an action when going forward\n // Otherwise the action will likely add items to history, which would mess things up\n if (state) {\n // Make sure that the routes in the state exist in the root navigator\n // Otherwise there's an error in the linking configuration\n const rootState = navigation.getRootState();\n if (state.routes.some(r => !(rootState !== null && rootState !== void 0 && rootState.routeNames.includes(r.name)))) {\n console.warn(\"The navigation state parsed from the URL contains routes not present in the root navigator. This usually means that the linking configuration doesn't match the navigation structure. See https://reactnavigation.org/docs/configuring-links for more details on how to specify a linking configuration.\");\n return;\n }\n if (index > previousIndex) {\n const action = getActionFromStateRef.current(state, configRef.current);\n if (action !== undefined) {\n try {\n navigation.dispatch(action);\n } catch (e) {\n // Ignore any errors from deep linking.\n // This could happen in case of malformed links, navigation object not being initialized etc.\n console.warn(`An error occurred when trying to handle the link '${path}': ${typeof e === 'object' && e != null && 'message' in e ? e.message : e}`);\n }\n } else {\n navigation.resetRoot(state);\n }\n } else {\n navigation.resetRoot(state);\n }\n } else {\n // if current path didn't return any state, we should revert to initial state\n navigation.resetRoot(state);\n }\n });\n }, [enabled, history, ref]);\n React.useEffect(() => {\n var _ref$current;\n if (!enabled) {\n return;\n }\n const getPathForRoute = (route, state) => {\n // If the `route` object contains a `path`, use that path as long as `route.name` and `params` still match\n // This makes sure that we preserve the original URL for wildcard routes\n if (route !== null && route !== void 0 && route.path) {\n const stateForPath = getStateFromPathRef.current(route.path, configRef.current);\n if (stateForPath) {\n const focusedRoute = findFocusedRoute(stateForPath);\n if (focusedRoute && focusedRoute.name === route.name && isEqual(focusedRoute.params, route.params)) {\n return route.path;\n }\n }\n }\n return getPathFromStateRef.current(state, configRef.current);\n };\n if (ref.current) {\n // We need to record the current metadata on the first render if they aren't set\n // This will allow the initial state to be in the history entry\n const state = ref.current.getRootState();\n if (state) {\n const route = findFocusedRoute(state);\n const path = getPathForRoute(route, state);\n if (previousStateRef.current === undefined) {\n previousStateRef.current = state;\n }\n history.replace({\n path,\n state\n });\n }\n }\n const onStateChange = async () => {\n const navigation = ref.current;\n if (!navigation || !enabled) {\n return;\n }\n const previousState = previousStateRef.current;\n const state = navigation.getRootState();\n\n // root state may not available, for example when root navigators switch inside the container\n if (!state) {\n return;\n }\n const pendingPath = pendingPopStatePathRef.current;\n const route = findFocusedRoute(state);\n const path = getPathForRoute(route, state);\n previousStateRef.current = state;\n pendingPopStatePathRef.current = undefined;\n\n // To detect the kind of state change, we need to:\n // - Find the common focused navigation state in previous and current state\n // - If only the route keys changed, compare history/routes.length to check if we go back/forward/replace\n // - If no common focused navigation state found, it's a replace\n const [previousFocusedState, focusedState] = findMatchingState(previousState, state);\n if (previousFocusedState && focusedState &&\n // We should only handle push/pop if path changed from what was in last `popstate`\n // Otherwise it's likely a change triggered by `popstate`\n path !== pendingPath) {\n const historyDelta = (focusedState.history ? focusedState.history.length : focusedState.routes.length) - (previousFocusedState.history ? previousFocusedState.history.length : previousFocusedState.routes.length);\n if (historyDelta > 0) {\n // If history length is increased, we should pushState\n // Note that path might not actually change here, for example, drawer open should pushState\n history.push({\n path,\n state\n });\n } else if (historyDelta < 0) {\n // If history length is decreased, i.e. entries were removed, we want to go back\n\n const nextIndex = history.backIndex({\n path\n });\n const currentIndex = history.index;\n try {\n if (nextIndex !== -1 && nextIndex < currentIndex &&\n // We should only go back if the entry exists and it's less than current index\n history.get(nextIndex - currentIndex)) {\n // An existing entry for this path exists and it's less than current index, go back to that\n await history.go(nextIndex - currentIndex);\n } else {\n // We couldn't find an existing entry to go back to, so we'll go back by the delta\n // This won't be correct if multiple routes were pushed in one go before\n // Usually this shouldn't happen and this is a fallback for that\n await history.go(historyDelta);\n }\n\n // Store the updated state as well as fix the path if incorrect\n history.replace({\n path,\n state\n });\n } catch (e) {\n // The navigation was interrupted\n }\n } else {\n // If history length is unchanged, we want to replaceState\n history.replace({\n path,\n state\n });\n }\n } else {\n // If no common navigation state was found, assume it's a replace\n // This would happen if the user did a reset/conditionally changed navigators\n history.replace({\n path,\n state\n });\n }\n };\n\n // We debounce onStateChange coz we don't want multiple state changes to be handled at one time\n // This could happen since `history.go(n)` is asynchronous\n // If `pushState` or `replaceState` were called before `history.go(n)` completes, it'll mess stuff up\n return (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.addListener('state', series(onStateChange));\n }, [enabled, history, ref]);\n return {\n getInitialState\n };\n}\n//# sourceMappingURL=useLinking.js.map","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","import { nanoid } from 'nanoid/non-secure';\nexport default function createMemoryHistory() {\n let index = 0;\n let items = [];\n\n // Pending callbacks for `history.go(n)`\n // We might modify the callback stored if it was interrupted, so we have a ref to identify it\n const pending = [];\n const interrupt = () => {\n // If another history operation was performed we need to interrupt existing ones\n // This makes sure that calls such as `history.replace` after `history.go` don't happen\n // Since otherwise it won't be correct if something else has changed\n pending.forEach(it => {\n const cb = it.cb;\n it.cb = () => cb(true);\n });\n };\n const history = {\n get index() {\n var _window$history$state;\n // We store an id in the state instead of an index\n // Index could get out of sync with in-memory values if page reloads\n const id = (_window$history$state = window.history.state) === null || _window$history$state === void 0 ? void 0 : _window$history$state.id;\n if (id) {\n const index = items.findIndex(item => item.id === id);\n return index > -1 ? index : 0;\n }\n return 0;\n },\n get(index) {\n return items[index];\n },\n backIndex(_ref) {\n let {\n path\n } = _ref;\n // We need to find the index from the element before current to get closest path to go back to\n for (let i = index - 1; i >= 0; i--) {\n const item = items[i];\n if (item.path === path) {\n return i;\n }\n }\n return -1;\n },\n push(_ref2) {\n let {\n path,\n state\n } = _ref2;\n interrupt();\n const id = nanoid();\n\n // When a new entry is pushed, all the existing entries after index will be inaccessible\n // So we remove any existing entries after the current index to clean them up\n items = items.slice(0, index + 1);\n items.push({\n path,\n state,\n id\n });\n index = items.length - 1;\n\n // We pass empty string for title because it's ignored in all browsers except safari\n // We don't store state object in history.state because:\n // - browsers have limits on how big it can be, and we don't control the size\n // - while not recommended, there could be non-serializable data in state\n window.history.pushState({\n id\n }, '', path);\n },\n replace(_ref3) {\n var _window$history$state2;\n let {\n path,\n state\n } = _ref3;\n interrupt();\n const id = ((_window$history$state2 = window.history.state) === null || _window$history$state2 === void 0 ? void 0 : _window$history$state2.id) ?? nanoid();\n\n // Need to keep the hash part of the path if there was no previous history entry\n // or the previous history entry had the same path\n let pathWithHash = path;\n if (!items.length || items.findIndex(item => item.id === id) < 0) {\n // There are two scenarios for creating an array with only one history record:\n // - When loaded id not found in the items array, this function by default will replace\n // the first item. We need to keep only the new updated object, otherwise it will break\n // the page when navigating forward in history.\n // - This is the first time any state modifications are done\n // So we need to push the entry as there's nothing to replace\n pathWithHash = pathWithHash + location.hash;\n items = [{\n path: pathWithHash,\n state,\n id\n }];\n index = 0;\n } else {\n if (items[index].path === path) {\n pathWithHash = pathWithHash + location.hash;\n }\n items[index] = {\n path,\n state,\n id\n };\n }\n window.history.replaceState({\n id\n }, '', pathWithHash);\n },\n // `history.go(n)` is asynchronous, there are couple of things to keep in mind:\n // - it won't do anything if we can't go `n` steps, the `popstate` event won't fire.\n // - each `history.go(n)` call will trigger a separate `popstate` event with correct location.\n // - the `popstate` event fires before the next frame after calling `history.go(n)`.\n // This method differs from `history.go(n)` in the sense that it'll go back as many steps it can.\n go(n) {\n interrupt();\n\n // To guard against unexpected navigation out of the app we will assume that browser history is only as deep as the length of our memory\n // history. If we don't have an item to navigate to then update our index and navigate as far as we can without taking the user out of the app.\n const nextIndex = index + n;\n const lastItemIndex = items.length - 1;\n if (n < 0 && !items[nextIndex]) {\n // Attempted to navigate beyond the first index. Negating the current index will align the browser history with the first item.\n n = -index;\n index = 0;\n } else if (n > 0 && nextIndex > lastItemIndex) {\n // Attempted to navigate past the last index. Calculate how many indices away from the last index and go there.\n n = lastItemIndex - index;\n index = lastItemIndex;\n } else {\n index = nextIndex;\n }\n if (n === 0) {\n return;\n }\n\n // When we call `history.go`, `popstate` will fire when there's history to go back to\n // So we need to somehow handle following cases:\n // - There's history to go back, `history.go` is called, and `popstate` fires\n // - `history.go` is called multiple times, we need to resolve on respective `popstate`\n // - No history to go back, but `history.go` was called, browser has no API to detect it\n return new Promise((resolve, reject) => {\n const done = interrupted => {\n clearTimeout(timer);\n if (interrupted) {\n reject(new Error('History was changed during navigation.'));\n return;\n }\n\n // There seems to be a bug in Chrome regarding updating the title\n // If we set a title just before calling `history.go`, the title gets lost\n // However the value of `document.title` is still what we set it to\n // It's just not displayed in the tab bar\n // To update the tab bar, we need to reset the title to something else first (e.g. '')\n // And set the title to what it was before so it gets applied\n // It won't work without setting it to empty string coz otherwise title isn't changing\n // Which means that the browser won't do anything after setting the title\n const {\n title\n } = window.document;\n window.document.title = '';\n window.document.title = title;\n resolve();\n };\n pending.push({\n ref: done,\n cb: done\n });\n\n // If navigation didn't happen within 100ms, assume that it won't happen\n // This may not be accurate, but hopefully it won't take so much time\n // In Chrome, navigation seems to happen instantly in next microtask\n // But on Firefox, it seems to take much longer, around 50ms from our testing\n // We're using a hacky timeout since there doesn't seem to be way to know for sure\n const timer = setTimeout(() => {\n const index = pending.findIndex(it => it.ref === done);\n if (index > -1) {\n pending[index].cb();\n pending.splice(index, 1);\n }\n }, 100);\n const onPopState = () => {\n var _window$history$state3;\n const id = (_window$history$state3 = window.history.state) === null || _window$history$state3 === void 0 ? void 0 : _window$history$state3.id;\n const currentIndex = items.findIndex(item => item.id === id);\n\n // Fix createMemoryHistory.index variable's value\n // as it may go out of sync when navigating in the browser.\n index = Math.max(currentIndex, 0);\n const last = pending.pop();\n window.removeEventListener('popstate', onPopState);\n last === null || last === void 0 ? void 0 : last.cb();\n };\n window.addEventListener('popstate', onPopState);\n window.history.go(n);\n });\n },\n // The `popstate` event is triggered when history changes, except `pushState` and `replaceState`\n // If we call `history.go(n)` ourselves, we don't want it to trigger the listener\n // Here we normalize it so that only external changes (e.g. user pressing back/forward) trigger the listener\n listen(listener) {\n const onPopState = () => {\n if (pending.length) {\n // This was triggered by `history.go(n)`, we shouldn't call the listener\n return;\n }\n listener();\n };\n window.addEventListener('popstate', onPopState);\n return () => window.removeEventListener('popstate', onPopState);\n }\n };\n return history;\n}\n//# sourceMappingURL=createMemoryHistory.js.map","import * as React from 'react';\nconst ServerContext = /*#__PURE__*/React.createContext(undefined);\nexport default ServerContext;\n//# sourceMappingURL=ServerContext.js.map","import * as React from 'react';\nexport default function useThenable(create) {\n const [promise] = React.useState(create);\n let initialState = [false, undefined];\n\n // Check if our thenable is synchronous\n promise.then(result => {\n initialState = [true, result];\n });\n const [state, setState] = React.useState(initialState);\n const [resolved] = state;\n React.useEffect(() => {\n let cancelled = false;\n const resolve = async () => {\n let result;\n try {\n result = await promise;\n } finally {\n if (!cancelled) {\n setState([true, result]);\n }\n }\n };\n if (!resolved) {\n resolve();\n }\n return () => {\n cancelled = true;\n };\n }, [promise, resolved]);\n return state;\n}\n//# sourceMappingURL=useThenable.js.map","import { CurrentRenderContext } from '@react-navigation/core';\nimport * as React from 'react';\nimport ServerContext from './ServerContext';\n/**\n * Container component for server rendering.\n *\n * @param props.location Location object to base the initial URL for SSR.\n * @param props.children Child elements to render the content.\n * @param props.ref Ref object which contains helper methods.\n */\nexport default /*#__PURE__*/React.forwardRef(function ServerContainer(_ref, ref) {\n let {\n children,\n location\n } = _ref;\n React.useEffect(() => {\n console.error(\"'ServerContainer' should only be used on the server with 'react-dom/server' for SSR.\");\n }, []);\n const current = {};\n if (ref) {\n const value = {\n getCurrentOptions() {\n return current.options;\n }\n };\n\n // We write to the `ref` during render instead of `React.useImperativeHandle`\n // This is because `useImperativeHandle` will update the ref after 'commit',\n // and there's no 'commit' phase during SSR.\n // Mutating ref during render is unsafe in concurrent mode, but we don't care about it for SSR.\n if (typeof ref === 'function') {\n ref(value);\n } else {\n // @ts-expect-error: the TS types are incorrect and say that ref.current is readonly\n ref.current = value;\n }\n }\n return /*#__PURE__*/React.createElement(ServerContext.Provider, {\n value: {\n location\n }\n }, /*#__PURE__*/React.createElement(CurrentRenderContext.Provider, {\n value: current\n }, children));\n});\n//# sourceMappingURL=ServerContainer.js.map","const DarkTheme = {\n dark: true,\n colors: {\n primary: 'rgb(10, 132, 255)',\n background: 'rgb(1, 1, 1)',\n card: 'rgb(18, 18, 18)',\n text: 'rgb(229, 229, 231)',\n border: 'rgb(39, 39, 41)',\n notification: 'rgb(255, 69, 58)'\n }\n};\nexport default DarkTheme;\n//# sourceMappingURL=DarkTheme.js.map","import * as React from 'react';\nimport ThemeContext from './ThemeContext';\nexport default function useTheme() {\n const theme = React.useContext(ThemeContext);\n return theme;\n}\n//# sourceMappingURL=useTheme.js.map","export {};\n//# sourceMappingURL=types.js.map","import { getPathFromState, NavigationHelpersContext } from '@react-navigation/core';\nimport * as React from 'react';\nimport LinkingContext from './LinkingContext';\nconst getRootStateForNavigate = (navigation, state) => {\n const parent = navigation.getParent();\n if (parent) {\n const parentState = parent.getState();\n return getRootStateForNavigate(parent, {\n index: 0,\n routes: [{\n ...parentState.routes[parentState.index],\n state: state\n }]\n });\n }\n return state;\n};\n\n/**\n * Build destination link for a navigate action.\n * Useful for showing anchor tags on the web for buttons that perform navigation.\n */\nexport default function useLinkBuilder() {\n const navigation = React.useContext(NavigationHelpersContext);\n const linking = React.useContext(LinkingContext);\n const buildLink = React.useCallback((name, params) => {\n const {\n options\n } = linking;\n if ((options === null || options === void 0 ? void 0 : options.enabled) === false) {\n return undefined;\n }\n const state = navigation ? getRootStateForNavigate(navigation, {\n index: 0,\n routes: [{\n name,\n params\n }]\n }) :\n // If we couldn't find a navigation object in context, we're at root\n // So we'll construct a basic state object to use\n {\n index: 0,\n routes: [{\n name,\n params\n }]\n };\n const path = options !== null && options !== void 0 && options.getPathFromState ? options.getPathFromState(state, options === null || options === void 0 ? void 0 : options.config) : getPathFromState(state, options === null || options === void 0 ? void 0 : options.config);\n return path;\n }, [linking, navigation]);\n return buildLink;\n}\n//# sourceMappingURL=useLinkBuilder.js.map","import { NavigationContext, useRoute } from '@react-navigation/core';\nimport * as React from 'react';\nfunction getScrollableNode(ref) {\n if (ref.current == null) {\n return null;\n }\n if ('scrollToTop' in ref.current || 'scrollTo' in ref.current || 'scrollToOffset' in ref.current || 'scrollResponderScrollTo' in ref.current) {\n // This is already a scrollable node.\n return ref.current;\n } else if ('getScrollResponder' in ref.current) {\n // If the view is a wrapper like FlatList, SectionList etc.\n // We need to use `getScrollResponder` to get access to the scroll responder\n return ref.current.getScrollResponder();\n } else if ('getNode' in ref.current) {\n // When a `ScrollView` is wraped in `Animated.createAnimatedComponent`\n // we need to use `getNode` to get the ref to the actual scrollview.\n // Note that `getNode` is deprecated in newer versions of react-native\n // this is why we check if we already have a scrollable node above.\n return ref.current.getNode();\n } else {\n return ref.current;\n }\n}\nexport default function useScrollToTop(ref) {\n const navigation = React.useContext(NavigationContext);\n const route = useRoute();\n if (navigation === undefined) {\n throw new Error(\"Couldn't find a navigation object. Is your component inside NavigationContainer?\");\n }\n React.useEffect(() => {\n const tabNavigations = [];\n let currentNavigation = navigation;\n // If the screen is nested inside multiple tab navigators, we should scroll to top for any of them\n // So we need to find all the parent tab navigators and add the listeners there\n while (currentNavigation) {\n if (currentNavigation.getState().type === 'tab') {\n tabNavigations.push(currentNavigation);\n }\n currentNavigation = currentNavigation.getParent();\n }\n if (tabNavigations.length === 0) {\n return;\n }\n const unsubscribers = tabNavigations.map(tab => {\n return tab.addListener(\n // We don't wanna import tab types here to avoid extra deps\n // in addition, there are multiple tab implementations\n // @ts-expect-error\n 'tabPress', e => {\n // We should scroll to top only when the screen is focused\n const isFocused = navigation.isFocused();\n\n // In a nested stack navigator, tab press resets the stack to first screen\n // So we should scroll to top only when we are on first screen\n const isFirst = tabNavigations.includes(navigation) || navigation.getState().routes[0].key === route.key;\n\n // Run the operation in the next frame so we're sure all listeners have been run\n // This is necessary to know if preventDefault() has been called\n requestAnimationFrame(() => {\n const scrollable = getScrollableNode(ref);\n if (isFocused && isFirst && scrollable && !e.defaultPrevented) {\n if ('scrollToTop' in scrollable) {\n scrollable.scrollToTop();\n } else if ('scrollTo' in scrollable) {\n scrollable.scrollTo({\n y: 0,\n animated: true\n });\n } else if ('scrollToOffset' in scrollable) {\n scrollable.scrollToOffset({\n offset: 0,\n animated: true\n });\n } else if ('scrollResponderScrollTo' in scrollable) {\n scrollable.scrollResponderScrollTo({\n y: 0,\n animated: true\n });\n }\n }\n });\n });\n });\n return () => {\n unsubscribers.forEach(unsubscribe => unsubscribe());\n };\n }, [navigation, ref, route.key]);\n}\n//# sourceMappingURL=useScrollToTop.js.map","import * as React from 'react';\nimport { Text } from 'react-native';\nimport { createNativeStackNavigator } from '@react-navigation/native-stack';\nimport { HomepageAuthenticated } from \"./HomepageAuthenticated\";\nimport * as AppConstants from \"../context/AppConstants\";\nimport * as AppUtilities from \"../context/AppUtilities\";\nimport { Search } from \"../components/Search\";\n\nconst Stack = createNativeStackNavigator();\n\nexport function MainStack() {\n return (\n ({\n headerRight: AppUtilities.getHeaderRight(navigation),\n headerTitle: (props) => \n })}\n >\n <>\n \n \n \n \n );\n}\n","/**\n * Navigators\n */\nexport { default as createNativeStackNavigator } from './navigators/createNativeStackNavigator';\n\n/**\n * Views\n */\nexport { default as NativeStackView } from './views/NativeStackView';\n\n/**\n * Types\n */\n//# sourceMappingURL=index.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport { createNavigatorFactory, StackActions, StackRouter, useNavigationBuilder } from '@react-navigation/native';\nimport * as React from 'react';\nimport NativeStackView from '../views/NativeStackView';\nfunction NativeStackNavigator(_ref) {\n let {\n id,\n initialRouteName,\n children,\n screenListeners,\n screenOptions,\n ...rest\n } = _ref;\n const {\n state,\n descriptors,\n navigation,\n NavigationContent\n } = useNavigationBuilder(StackRouter, {\n id,\n initialRouteName,\n children,\n screenListeners,\n screenOptions\n });\n React.useEffect(() => {\n var _navigation$addListen;\n return (// @ts-expect-error: there may not be a tab navigator in parent\n navigation === null || navigation === void 0 ? void 0 : (_navigation$addListen = navigation.addListener) === null || _navigation$addListen === void 0 ? void 0 : _navigation$addListen.call(navigation, 'tabPress', e => {\n const isFocused = navigation.isFocused();\n\n // Run the operation in the next frame so we're sure all listeners have been run\n // This is necessary to know if preventDefault() has been called\n requestAnimationFrame(() => {\n if (state.index > 0 && isFocused && !e.defaultPrevented) {\n // When user taps on already focused tab and we're inside the tab,\n // reset the stack to replicate native behaviour\n navigation.dispatch({\n ...StackActions.popToTop(),\n target: state.key\n });\n }\n });\n })\n );\n }, [navigation, state.index, state.key]);\n return /*#__PURE__*/React.createElement(NavigationContent, null, /*#__PURE__*/React.createElement(NativeStackView, _extends({}, rest, {\n state: state,\n navigation: navigation,\n descriptors: descriptors\n })));\n}\nexport default createNavigatorFactory(NativeStackNavigator);\n//# sourceMappingURL=createNativeStackNavigator.js.map","import { getHeaderTitle, Header, HeaderBackButton, HeaderBackContext, SafeAreaProviderCompat, Screen } from '@react-navigation/elements';\nimport * as React from 'react';\nimport { Image, StyleSheet, View } from 'react-native';\nconst TRANSPARENT_PRESENTATIONS = ['transparentModal', 'containedTransparentModal'];\nexport default function NativeStackView(_ref) {\n let {\n state,\n descriptors\n } = _ref;\n const parentHeaderBack = React.useContext(HeaderBackContext);\n return /*#__PURE__*/React.createElement(SafeAreaProviderCompat, null, /*#__PURE__*/React.createElement(View, {\n style: styles.container\n }, state.routes.map((route, i) => {\n var _state$routes, _state$routes2;\n const isFocused = state.index === i;\n const previousKey = (_state$routes = state.routes[i - 1]) === null || _state$routes === void 0 ? void 0 : _state$routes.key;\n const nextKey = (_state$routes2 = state.routes[i + 1]) === null || _state$routes2 === void 0 ? void 0 : _state$routes2.key;\n const previousDescriptor = previousKey ? descriptors[previousKey] : undefined;\n const nextDescriptor = nextKey ? descriptors[nextKey] : undefined;\n const {\n options,\n navigation,\n render\n } = descriptors[route.key];\n const headerBack = previousDescriptor ? {\n title: getHeaderTitle(previousDescriptor.options, previousDescriptor.route.name)\n } : parentHeaderBack;\n const canGoBack = headerBack !== undefined;\n const {\n header,\n headerShown,\n headerTintColor,\n headerBackImageSource,\n headerLeft,\n headerRight,\n headerTitle,\n headerTitleAlign,\n headerTitleStyle,\n headerStyle,\n headerShadowVisible,\n headerTransparent,\n headerBackground,\n headerBackTitle,\n presentation,\n contentStyle\n } = options;\n const nextPresentation = nextDescriptor === null || nextDescriptor === void 0 ? void 0 : nextDescriptor.options.presentation;\n return /*#__PURE__*/React.createElement(Screen, {\n key: route.key,\n focused: isFocused,\n route: route,\n navigation: navigation,\n headerShown: headerShown,\n headerTransparent: headerTransparent,\n header: header !== undefined ? header({\n back: headerBack,\n options,\n route,\n navigation\n }) : /*#__PURE__*/React.createElement(Header, {\n title: getHeaderTitle(options, route.name),\n headerTintColor: headerTintColor,\n headerLeft: typeof headerLeft === 'function' ? _ref2 => {\n let {\n tintColor\n } = _ref2;\n return headerLeft({\n tintColor,\n canGoBack,\n label: headerBackTitle\n });\n } : headerLeft === undefined && canGoBack ? _ref3 => {\n let {\n tintColor\n } = _ref3;\n return /*#__PURE__*/React.createElement(HeaderBackButton, {\n tintColor: tintColor,\n backImage: headerBackImageSource !== undefined ? () => /*#__PURE__*/React.createElement(Image, {\n source: headerBackImageSource,\n style: [styles.backImage, {\n tintColor\n }]\n }) : undefined,\n onPress: navigation.goBack,\n canGoBack: canGoBack\n });\n } : headerLeft,\n headerRight: typeof headerRight === 'function' ? _ref4 => {\n let {\n tintColor\n } = _ref4;\n return headerRight({\n tintColor,\n canGoBack\n });\n } : headerRight,\n headerTitle: typeof headerTitle === 'function' ? _ref5 => {\n let {\n children,\n tintColor\n } = _ref5;\n return headerTitle({\n children,\n tintColor\n });\n } : headerTitle,\n headerTitleAlign: headerTitleAlign,\n headerTitleStyle: headerTitleStyle,\n headerTransparent: headerTransparent,\n headerShadowVisible: headerShadowVisible,\n headerBackground: headerBackground,\n headerStyle: headerStyle\n }),\n style: [StyleSheet.absoluteFill, {\n display: isFocused || nextPresentation != null && TRANSPARENT_PRESENTATIONS.includes(nextPresentation) ? 'flex' : 'none'\n }, presentation != null && TRANSPARENT_PRESENTATIONS.includes(presentation) ? {\n backgroundColor: 'transparent'\n } : null]\n }, /*#__PURE__*/React.createElement(HeaderBackContext.Provider, {\n value: headerBack\n }, /*#__PURE__*/React.createElement(View, {\n style: [styles.contentContainer, contentStyle]\n }, render())));\n })));\n}\nconst styles = StyleSheet.create({\n container: {\n flex: 1\n },\n contentContainer: {\n flex: 1\n },\n backImage: {\n height: 24,\n width: 24,\n margin: 3,\n resizeMode: 'contain'\n }\n});\n//# sourceMappingURL=NativeStackView.js.map","export { default as Background } from './Background';\nexport { default as getDefaultHeaderHeight } from './Header/getDefaultHeaderHeight';\nexport { default as getHeaderTitle } from './Header/getHeaderTitle';\nexport { default as Header } from './Header/Header';\nexport { default as HeaderBackButton } from './Header/HeaderBackButton';\nexport { default as HeaderBackContext } from './Header/HeaderBackContext';\nexport { default as HeaderBackground } from './Header/HeaderBackground';\nexport { default as HeaderHeightContext } from './Header/HeaderHeightContext';\nexport { default as HeaderShownContext } from './Header/HeaderShownContext';\nexport { default as HeaderTitle } from './Header/HeaderTitle';\nexport { default as useHeaderHeight } from './Header/useHeaderHeight';\nexport { default as MissingIcon } from './MissingIcon';\nexport { default as PlatformPressable } from './PlatformPressable';\nexport { default as ResourceSavingView } from './ResourceSavingView';\nexport { default as SafeAreaProviderCompat } from './SafeAreaProviderCompat';\nexport { default as Screen } from './Screen';\nexport const Assets = [\n// eslint-disable-next-line import/no-commonjs\nrequire('./assets/back-icon.png'),\n// eslint-disable-next-line import/no-commonjs\nrequire('./assets/back-icon-mask.png')];\nexport * from './types';\n//# sourceMappingURL=index.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport { useTheme } from '@react-navigation/native';\nimport * as React from 'react';\nimport { View } from 'react-native';\nexport default function Background(_ref) {\n let {\n style,\n ...rest\n } = _ref;\n const {\n colors\n } = useTheme();\n return /*#__PURE__*/React.createElement(View, _extends({}, rest, {\n style: [{\n flex: 1,\n backgroundColor: colors.background\n }, style]\n }));\n}\n//# sourceMappingURL=Background.js.map","import { Platform } from 'react-native';\nexport default function getDefaultHeaderHeight(layout, modalPresentation, statusBarHeight) {\n let headerHeight;\n const isLandscape = layout.width > layout.height;\n if (Platform.OS === 'ios') {\n if (Platform.isPad || Platform.isTV) {\n if (modalPresentation) {\n headerHeight = 56;\n } else {\n headerHeight = 50;\n }\n } else {\n if (isLandscape) {\n headerHeight = 32;\n } else {\n if (modalPresentation) {\n headerHeight = 56;\n } else {\n headerHeight = 44;\n }\n }\n }\n } else if (Platform.OS === 'android') {\n headerHeight = 56;\n } else {\n headerHeight = 64;\n }\n return headerHeight + statusBarHeight;\n}\n//# sourceMappingURL=getDefaultHeaderHeight.js.map","export default function getHeaderTitle(options, fallback) {\n return typeof options.headerTitle === 'string' ? options.headerTitle : options.title !== undefined ? options.title : fallback;\n}\n//# sourceMappingURL=getHeaderTitle.js.map","import * as React from 'react';\nimport { Animated, Platform, StyleSheet, View } from 'react-native';\nimport { useSafeAreaFrame, useSafeAreaInsets } from 'react-native-safe-area-context';\nimport getDefaultHeaderHeight from './getDefaultHeaderHeight';\nimport HeaderBackground from './HeaderBackground';\nimport HeaderShownContext from './HeaderShownContext';\nimport HeaderTitle from './HeaderTitle';\nconst warnIfHeaderStylesDefined = styles => {\n Object.keys(styles).forEach(styleProp => {\n const value = styles[styleProp];\n if (styleProp === 'position' && value === 'absolute') {\n console.warn(\"position: 'absolute' is not supported on headerStyle. If you would like to render content under the header, use the 'headerTransparent' option.\");\n } else if (value !== undefined) {\n console.warn(`${styleProp} was given a value of ${value}, this has no effect on headerStyle.`);\n }\n });\n};\nexport default function Header(props) {\n const insets = useSafeAreaInsets();\n const frame = useSafeAreaFrame();\n const isParentHeaderShown = React.useContext(HeaderShownContext);\n\n // On models with Dynamic Island the status bar height is smaller than the safe area top inset.\n const hasDynamicIsland = Platform.OS === 'ios' && insets.top > 50;\n const statusBarHeight = hasDynamicIsland ? insets.top - 5 : insets.top;\n const {\n layout = frame,\n modal = false,\n title,\n headerTitle: customTitle,\n headerTitleAlign = Platform.select({\n ios: 'center',\n default: 'left'\n }),\n headerLeft,\n headerLeftLabelVisible,\n headerTransparent,\n headerTintColor,\n headerBackground,\n headerRight,\n headerTitleAllowFontScaling: titleAllowFontScaling,\n headerTitleStyle: titleStyle,\n headerLeftContainerStyle: leftContainerStyle,\n headerRightContainerStyle: rightContainerStyle,\n headerTitleContainerStyle: titleContainerStyle,\n headerBackgroundContainerStyle: backgroundContainerStyle,\n headerStyle: customHeaderStyle,\n headerShadowVisible,\n headerPressColor,\n headerPressOpacity,\n headerStatusBarHeight = isParentHeaderShown ? 0 : statusBarHeight\n } = props;\n const defaultHeight = getDefaultHeaderHeight(layout, modal, headerStatusBarHeight);\n const {\n height = defaultHeight,\n minHeight,\n maxHeight,\n backgroundColor,\n borderBottomColor,\n borderBottomEndRadius,\n borderBottomLeftRadius,\n borderBottomRightRadius,\n borderBottomStartRadius,\n borderBottomWidth,\n borderColor,\n borderEndColor,\n borderEndWidth,\n borderLeftColor,\n borderLeftWidth,\n borderRadius,\n borderRightColor,\n borderRightWidth,\n borderStartColor,\n borderStartWidth,\n borderStyle,\n borderTopColor,\n borderTopEndRadius,\n borderTopLeftRadius,\n borderTopRightRadius,\n borderTopStartRadius,\n borderTopWidth,\n borderWidth,\n // @ts-expect-error: web support for shadow\n boxShadow,\n elevation,\n shadowColor,\n shadowOffset,\n shadowOpacity,\n shadowRadius,\n opacity,\n transform,\n ...unsafeStyles\n } = StyleSheet.flatten(customHeaderStyle || {});\n if (process.env.NODE_ENV !== 'production') {\n warnIfHeaderStylesDefined(unsafeStyles);\n }\n const safeStyles = {\n backgroundColor,\n borderBottomColor,\n borderBottomEndRadius,\n borderBottomLeftRadius,\n borderBottomRightRadius,\n borderBottomStartRadius,\n borderBottomWidth,\n borderColor,\n borderEndColor,\n borderEndWidth,\n borderLeftColor,\n borderLeftWidth,\n borderRadius,\n borderRightColor,\n borderRightWidth,\n borderStartColor,\n borderStartWidth,\n borderStyle,\n borderTopColor,\n borderTopEndRadius,\n borderTopLeftRadius,\n borderTopRightRadius,\n borderTopStartRadius,\n borderTopWidth,\n borderWidth,\n // @ts-expect-error: boxShadow is only for Web\n boxShadow,\n elevation,\n shadowColor,\n shadowOffset,\n shadowOpacity,\n shadowRadius,\n opacity,\n transform\n };\n\n // Setting a property to undefined triggers default style\n // So we need to filter them out\n // Users can use `null` instead\n for (const styleProp in safeStyles) {\n // @ts-expect-error: typescript wrongly complains that styleProp cannot be used to index safeStyles\n if (safeStyles[styleProp] === undefined) {\n // @ts-expect-error\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete safeStyles[styleProp];\n }\n }\n const backgroundStyle = [safeStyles, headerShadowVisible === false && {\n elevation: 0,\n shadowOpacity: 0,\n borderBottomWidth: 0\n }];\n const leftButton = headerLeft ? headerLeft({\n tintColor: headerTintColor,\n pressColor: headerPressColor,\n pressOpacity: headerPressOpacity,\n labelVisible: headerLeftLabelVisible\n }) : null;\n const rightButton = headerRight ? headerRight({\n tintColor: headerTintColor,\n pressColor: headerPressColor,\n pressOpacity: headerPressOpacity\n }) : null;\n const headerTitle = typeof customTitle !== 'function' ? props => /*#__PURE__*/React.createElement(HeaderTitle, props) : customTitle;\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Animated.View, {\n pointerEvents: \"box-none\",\n style: [StyleSheet.absoluteFill, {\n zIndex: 0\n }, backgroundContainerStyle]\n }, headerBackground ? headerBackground({\n style: backgroundStyle\n }) : headerTransparent ? null : /*#__PURE__*/React.createElement(HeaderBackground, {\n style: backgroundStyle\n })), /*#__PURE__*/React.createElement(Animated.View, {\n pointerEvents: \"box-none\",\n style: [{\n height,\n minHeight,\n maxHeight,\n opacity,\n transform\n }]\n }, /*#__PURE__*/React.createElement(View, {\n pointerEvents: \"none\",\n style: {\n height: headerStatusBarHeight\n }\n }), /*#__PURE__*/React.createElement(View, {\n pointerEvents: \"box-none\",\n style: styles.content\n }, /*#__PURE__*/React.createElement(Animated.View, {\n pointerEvents: \"box-none\",\n style: [styles.left, headerTitleAlign === 'center' && styles.expand, {\n marginStart: insets.left\n }, leftContainerStyle]\n }, leftButton), /*#__PURE__*/React.createElement(Animated.View, {\n pointerEvents: \"box-none\",\n style: [styles.title, {\n // Avoid the title from going offscreen or overlapping buttons\n maxWidth: headerTitleAlign === 'center' ? layout.width - ((leftButton ? headerLeftLabelVisible !== false ? 80 : 32 : 16) + Math.max(insets.left, insets.right)) * 2 : layout.width - ((leftButton ? 72 : 16) + (rightButton ? 72 : 16) + insets.left - insets.right)\n }, titleContainerStyle]\n }, headerTitle({\n children: title,\n allowFontScaling: titleAllowFontScaling,\n tintColor: headerTintColor,\n style: titleStyle\n })), /*#__PURE__*/React.createElement(Animated.View, {\n pointerEvents: \"box-none\",\n style: [styles.right, styles.expand, {\n marginEnd: insets.right\n }, rightContainerStyle]\n }, rightButton))));\n}\nconst styles = StyleSheet.create({\n content: {\n flex: 1,\n flexDirection: 'row',\n alignItems: 'stretch'\n },\n title: {\n marginHorizontal: 16,\n justifyContent: 'center'\n },\n left: {\n justifyContent: 'center',\n alignItems: 'flex-start'\n },\n right: {\n justifyContent: 'center',\n alignItems: 'flex-end'\n },\n expand: {\n flexGrow: 1,\n flexBasis: 0\n }\n});\n//# sourceMappingURL=Header.js.map","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport Animated from '../../vendor/react-native/Animated/Animated';\nexport default Animated;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport Platform from '../../../exports/Platform';\nimport FlatList from './components/AnimatedFlatList';\nimport Image from './components/AnimatedImage';\nimport ScrollView from './components/AnimatedScrollView';\nimport SectionList from './components/AnimatedSectionList';\nimport Text from './components/AnimatedText';\nimport View from './components/AnimatedView';\nimport AnimatedMock from './AnimatedMock';\nimport AnimatedImplementation from './AnimatedImplementation';\nvar Animated = Platform.isTesting ? AnimatedMock : AnimatedImplementation;\nexport default _objectSpread({\n FlatList,\n Image,\n ScrollView,\n SectionList,\n Text,\n View\n}, Animated);","import _extends from \"@babel/runtime/helpers/extends\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport * as React from 'react';\nimport FlatList from '../../../../exports/FlatList';\nimport createAnimatedComponent from '../createAnimatedComponent';\n/**\n * @see https://github.com/facebook/react-native/commit/b8c8562\n */\nvar FlatListWithEventThrottle = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(FlatList, _extends({\n scrollEventThrottle: 0.0001\n}, props, {\n ref: ref\n})));\nexport default createAnimatedComponent(FlatListWithEventThrottle);","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport FlatList from '../../vendor/react-native/FlatList';\nexport default FlatList;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nvar _excluded = [\"numColumns\", \"columnWrapperStyle\", \"removeClippedSubviews\", \"strictMode\"];\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport View from '../../../exports/View';\nimport StyleSheet from '../../../exports/StyleSheet';\nimport deepDiffer from '../deepDiffer';\nimport Platform from '../../../exports/Platform';\nimport invariant from 'fbjs/lib/invariant';\nimport * as React from 'react';\nimport VirtualizedList from '../VirtualizedList';\nimport { keyExtractor as defaultKeyExtractor } from '../VirtualizeUtils';\nimport memoizeOne from 'memoize-one';\n/**\n * Default Props Helper Functions\n * Use the following helper functions for default values\n */\n\n// removeClippedSubviewsOrDefault(this.props.removeClippedSubviews)\nfunction removeClippedSubviewsOrDefault(removeClippedSubviews) {\n return removeClippedSubviews !== null && removeClippedSubviews !== void 0 ? removeClippedSubviews : Platform.OS === 'android';\n}\n\n// numColumnsOrDefault(this.props.numColumns)\nfunction numColumnsOrDefault(numColumns) {\n return numColumns !== null && numColumns !== void 0 ? numColumns : 1;\n}\nfunction isArrayLike(data) {\n // $FlowExpectedError[incompatible-use]\n return typeof Object(data).length === 'number';\n}\n/**\n * A performant interface for rendering simple, flat lists, supporting the most handy features:\n *\n * - Fully cross-platform.\n * - Optional horizontal mode.\n * - Configurable viewability callbacks.\n * - Header support.\n * - Footer support.\n * - Separator support.\n * - Pull to Refresh.\n * - Scroll loading.\n * - ScrollToIndex support.\n *\n * If you need section support, use [``](docs/sectionlist.html).\n *\n * Minimal Example:\n *\n * {item.key}}\n * />\n *\n * More complex, multi-select example demonstrating `PureComponent` usage for perf optimization and avoiding bugs.\n *\n * - By binding the `onPressItem` handler, the props will remain `===` and `PureComponent` will\n * prevent wasteful re-renders unless the actual `id`, `selected`, or `title` props change, even\n * if the components rendered in `MyListItem` did not have such optimizations.\n * - By passing `extraData={this.state}` to `FlatList` we make sure `FlatList` itself will re-render\n * when the `state.selected` changes. Without setting this prop, `FlatList` would not know it\n * needs to re-render any items because it is also a `PureComponent` and the prop comparison will\n * not show any changes.\n * - `keyExtractor` tells the list to use the `id`s for the react keys instead of the default `key` property.\n *\n *\n * class MyListItem extends React.PureComponent {\n * _onPress = () => {\n * this.props.onPressItem(this.props.id);\n * };\n *\n * render() {\n * const textColor = this.props.selected ? \"red\" : \"black\";\n * return (\n * \n * \n * \n * {this.props.title}\n * \n * \n * \n * );\n * }\n * }\n *\n * class MultiSelectList extends React.PureComponent {\n * state = {selected: (new Map(): Map)};\n *\n * _keyExtractor = (item, index) => item.id;\n *\n * _onPressItem = (id: string) => {\n * // updater functions are preferred for transactional updates\n * this.setState((state) => {\n * // copy the map rather than modifying state.\n * const selected = new Map(state.selected);\n * selected.set(id, !selected.get(id)); // toggle\n * return {selected};\n * });\n * };\n *\n * _renderItem = ({item}) => (\n * \n * );\n *\n * render() {\n * return (\n * \n * );\n * }\n * }\n *\n * This is a convenience wrapper around [``](docs/virtualizedlist.html),\n * and thus inherits its props (as well as those of `ScrollView`) that aren't explicitly listed\n * here, along with the following caveats:\n *\n * - Internal state is not preserved when content scrolls out of the render window. Make sure all\n * your data is captured in the item data or external stores like Flux, Redux, or Relay.\n * - This is a `PureComponent` which means that it will not re-render if `props` remain shallow-\n * equal. Make sure that everything your `renderItem` function depends on is passed as a prop\n * (e.g. `extraData`) that is not `===` after updates, otherwise your UI may not update on\n * changes. This includes the `data` prop and parent component state.\n * - In order to constrain memory and enable smooth scrolling, content is rendered asynchronously\n * offscreen. This means it's possible to scroll faster than the fill rate ands momentarily see\n * blank content. This is a tradeoff that can be adjusted to suit the needs of each application,\n * and we are working on improving it behind the scenes.\n * - By default, the list looks for a `key` prop on each item and uses that for the React key.\n * Alternatively, you can provide a custom `keyExtractor` prop.\n *\n * Also inherits [ScrollView Props](docs/scrollview.html#props), unless it is nested in another FlatList of same orientation.\n */\nclass FlatList extends React.PureComponent {\n /**\n * Scrolls to the end of the content. May be janky without `getItemLayout` prop.\n */\n scrollToEnd(params) {\n if (this._listRef) {\n this._listRef.scrollToEnd(params);\n }\n }\n\n /**\n * Scrolls to the item at the specified index such that it is positioned in the viewable area\n * such that `viewPosition` 0 places it at the top, 1 at the bottom, and 0.5 centered in the\n * middle. `viewOffset` is a fixed number of pixels to offset the final target position.\n *\n * Note: cannot scroll to locations outside the render window without specifying the\n * `getItemLayout` prop.\n */\n scrollToIndex(params) {\n if (this._listRef) {\n this._listRef.scrollToIndex(params);\n }\n }\n\n /**\n * Requires linear scan through data - use `scrollToIndex` instead if possible.\n *\n * Note: cannot scroll to locations outside the render window without specifying the\n * `getItemLayout` prop.\n */\n scrollToItem(params) {\n if (this._listRef) {\n this._listRef.scrollToItem(params);\n }\n }\n\n /**\n * Scroll to a specific content pixel offset in the list.\n *\n * Check out [scrollToOffset](docs/virtualizedlist.html#scrolltooffset) of VirtualizedList\n */\n scrollToOffset(params) {\n if (this._listRef) {\n this._listRef.scrollToOffset(params);\n }\n }\n\n /**\n * Tells the list an interaction has occurred, which should trigger viewability calculations, e.g.\n * if `waitForInteractions` is true and the user has not scrolled. This is typically called by\n * taps on items or by navigation actions.\n */\n recordInteraction() {\n if (this._listRef) {\n this._listRef.recordInteraction();\n }\n }\n\n /**\n * Displays the scroll indicators momentarily.\n *\n * @platform ios\n */\n flashScrollIndicators() {\n if (this._listRef) {\n this._listRef.flashScrollIndicators();\n }\n }\n\n /**\n * Provides a handle to the underlying scroll responder.\n */\n getScrollResponder() {\n if (this._listRef) {\n return this._listRef.getScrollResponder();\n }\n }\n\n /**\n * Provides a reference to the underlying host component\n */\n getNativeScrollRef() {\n if (this._listRef) {\n /* $FlowFixMe[incompatible-return] Suppresses errors found when fixing\n * TextInput typing */\n return this._listRef.getScrollRef();\n }\n }\n getScrollableNode() {\n if (this._listRef) {\n return this._listRef.getScrollableNode();\n }\n }\n constructor(_props) {\n super(_props);\n this._virtualizedListPairs = [];\n this._captureRef = ref => {\n this._listRef = ref;\n };\n this._getItem = (data, index) => {\n var numColumns = numColumnsOrDefault(this.props.numColumns);\n if (numColumns > 1) {\n var ret = [];\n for (var kk = 0; kk < numColumns; kk++) {\n var itemIndex = index * numColumns + kk;\n if (itemIndex < data.length) {\n var _item = data[itemIndex];\n ret.push(_item);\n }\n }\n return ret;\n } else {\n return data[index];\n }\n };\n this._getItemCount = data => {\n // Legacy behavior of FlatList was to forward \"undefined\" length if invalid\n // data like a non-arraylike object is passed. VirtualizedList would then\n // coerce this, and the math would work out to no-op. For compatibility, if\n // invalid data is passed, we tell VirtualizedList there are zero items\n // available to prevent it from trying to read from the invalid data\n // (without propagating invalidly typed data).\n if (data != null && isArrayLike(data)) {\n var numColumns = numColumnsOrDefault(this.props.numColumns);\n return numColumns > 1 ? Math.ceil(data.length / numColumns) : data.length;\n } else {\n return 0;\n }\n };\n this._keyExtractor = (items, index) => {\n var _this$props$keyExtrac;\n var numColumns = numColumnsOrDefault(this.props.numColumns);\n var keyExtractor = (_this$props$keyExtrac = this.props.keyExtractor) !== null && _this$props$keyExtrac !== void 0 ? _this$props$keyExtrac : defaultKeyExtractor;\n if (numColumns > 1) {\n invariant(Array.isArray(items), 'FlatList: Encountered internal consistency error, expected each item to consist of an ' + 'array with 1-%s columns; instead, received a single item.', numColumns);\n return items.map((item, kk) => keyExtractor(item, index * numColumns + kk)).join(':');\n }\n\n // $FlowFixMe[incompatible-call] Can't call keyExtractor with an array\n return keyExtractor(items, index);\n };\n this._renderer = (ListItemComponent, renderItem, columnWrapperStyle, numColumns, extraData\n // $FlowFixMe[missing-local-annot]\n ) => {\n var cols = numColumnsOrDefault(numColumns);\n var render = props => {\n if (ListItemComponent) {\n // $FlowFixMe[not-a-component] Component isn't valid\n // $FlowFixMe[incompatible-type-arg] Component isn't valid\n // $FlowFixMe[incompatible-return] Component isn't valid\n return /*#__PURE__*/React.createElement(ListItemComponent, props);\n } else if (renderItem) {\n // $FlowFixMe[incompatible-call]\n return renderItem(props);\n } else {\n return null;\n }\n };\n var renderProp = info => {\n if (cols > 1) {\n var _item2 = info.item,\n _index = info.index;\n invariant(Array.isArray(_item2), 'Expected array of items with numColumns > 1');\n return /*#__PURE__*/React.createElement(View, {\n style: [styles.row, columnWrapperStyle]\n }, _item2.map((it, kk) => {\n var element = render({\n // $FlowFixMe[incompatible-call]\n item: it,\n index: _index * cols + kk,\n separators: info.separators\n });\n return element != null ? /*#__PURE__*/React.createElement(React.Fragment, {\n key: kk\n }, element) : null;\n }));\n } else {\n return render(info);\n }\n };\n return ListItemComponent ? {\n ListItemComponent: renderProp\n } : {\n renderItem: renderProp\n };\n };\n this._memoizedRenderer = memoizeOne(this._renderer);\n this._checkProps(this.props);\n if (this.props.viewabilityConfigCallbackPairs) {\n this._virtualizedListPairs = this.props.viewabilityConfigCallbackPairs.map(pair => ({\n viewabilityConfig: pair.viewabilityConfig,\n onViewableItemsChanged: this._createOnViewableItemsChanged(pair.onViewableItemsChanged)\n }));\n } else if (this.props.onViewableItemsChanged) {\n this._virtualizedListPairs.push({\n /* $FlowFixMe[incompatible-call] (>=0.63.0 site=react_native_fb) This\n * comment suppresses an error found when Flow v0.63 was deployed. To\n * see the error delete this comment and run Flow. */\n viewabilityConfig: this.props.viewabilityConfig,\n onViewableItemsChanged: this._createOnViewableItemsChanged(this.props.onViewableItemsChanged)\n });\n }\n }\n\n // $FlowFixMe[missing-local-annot]\n componentDidUpdate(prevProps) {\n invariant(prevProps.numColumns === this.props.numColumns, 'Changing numColumns on the fly is not supported. Change the key prop on FlatList when ' + 'changing the number of columns to force a fresh render of the component.');\n invariant(prevProps.onViewableItemsChanged === this.props.onViewableItemsChanged, 'Changing onViewableItemsChanged on the fly is not supported');\n invariant(!deepDiffer(prevProps.viewabilityConfig, this.props.viewabilityConfig), 'Changing viewabilityConfig on the fly is not supported');\n invariant(prevProps.viewabilityConfigCallbackPairs === this.props.viewabilityConfigCallbackPairs, 'Changing viewabilityConfigCallbackPairs on the fly is not supported');\n this._checkProps(this.props);\n }\n // $FlowFixMe[missing-local-annot]\n _checkProps(props) {\n var getItem = props.getItem,\n getItemCount = props.getItemCount,\n horizontal = props.horizontal,\n columnWrapperStyle = props.columnWrapperStyle,\n onViewableItemsChanged = props.onViewableItemsChanged,\n viewabilityConfigCallbackPairs = props.viewabilityConfigCallbackPairs;\n var numColumns = numColumnsOrDefault(this.props.numColumns);\n invariant(!getItem && !getItemCount, 'FlatList does not support custom data formats.');\n if (numColumns > 1) {\n invariant(!horizontal, 'numColumns does not support horizontal.');\n } else {\n invariant(!columnWrapperStyle, 'columnWrapperStyle not supported for single column lists');\n }\n invariant(!(onViewableItemsChanged && viewabilityConfigCallbackPairs), 'FlatList does not support setting both onViewableItemsChanged and ' + 'viewabilityConfigCallbackPairs.');\n }\n _pushMultiColumnViewable(arr, v) {\n var _this$props$keyExtrac2;\n var numColumns = numColumnsOrDefault(this.props.numColumns);\n var keyExtractor = (_this$props$keyExtrac2 = this.props.keyExtractor) !== null && _this$props$keyExtrac2 !== void 0 ? _this$props$keyExtrac2 : defaultKeyExtractor;\n v.item.forEach((item, ii) => {\n invariant(v.index != null, 'Missing index!');\n var index = v.index * numColumns + ii;\n arr.push(_objectSpread(_objectSpread({}, v), {}, {\n item,\n key: keyExtractor(item, index),\n index\n }));\n });\n }\n _createOnViewableItemsChanged(onViewableItemsChanged\n // $FlowFixMe[missing-local-annot]\n ) {\n return info => {\n var numColumns = numColumnsOrDefault(this.props.numColumns);\n if (onViewableItemsChanged) {\n if (numColumns > 1) {\n var changed = [];\n var viewableItems = [];\n info.viewableItems.forEach(v => this._pushMultiColumnViewable(viewableItems, v));\n info.changed.forEach(v => this._pushMultiColumnViewable(changed, v));\n onViewableItemsChanged({\n viewableItems,\n changed\n });\n } else {\n onViewableItemsChanged(info);\n }\n }\n };\n }\n render() {\n var _this$props = this.props,\n numColumns = _this$props.numColumns,\n columnWrapperStyle = _this$props.columnWrapperStyle,\n _removeClippedSubviews = _this$props.removeClippedSubviews,\n _this$props$strictMod = _this$props.strictMode,\n strictMode = _this$props$strictMod === void 0 ? false : _this$props$strictMod,\n restProps = _objectWithoutPropertiesLoose(_this$props, _excluded);\n var renderer = strictMode ? this._memoizedRenderer : this._renderer;\n return (\n /*#__PURE__*/\n // $FlowFixMe[incompatible-exact] - `restProps` (`Props`) is inexact.\n React.createElement(VirtualizedList, _extends({}, restProps, {\n getItem: this._getItem,\n getItemCount: this._getItemCount,\n keyExtractor: this._keyExtractor,\n ref: this._captureRef,\n viewabilityConfigCallbackPairs: this._virtualizedListPairs,\n removeClippedSubviews: removeClippedSubviewsOrDefault(_removeClippedSubviews)\n }, renderer(this.props.ListItemComponent, this.props.renderItem, columnWrapperStyle, numColumns, this.props.extraData)))\n );\n }\n}\nvar styles = StyleSheet.create({\n row: {\n flexDirection: 'row'\n }\n});\nexport default FlatList;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\nfunction _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 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}\nmodule.exports = _inherits, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _setPrototypeOf(o, p);\n}\nmodule.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar assertThisInitialized = require(\"./assertThisInitialized.js\");\nfunction _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 return assertThisInitialized(self);\n}\nmodule.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(obj);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}\nmodule.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _getPrototypeOf(o);\n}\nmodule.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * \n */\n\n'use strict';\n\n/*\n * @returns {bool} true if different, false if equal\n */\nvar deepDiffer = function deepDiffer(one, two, maxDepth) {\n if (maxDepth === void 0) {\n maxDepth = -1;\n }\n if (maxDepth === 0) {\n return true;\n }\n if (one === two) {\n // Short circuit on identical object references instead of traversing them.\n return false;\n }\n if (typeof one === 'function' && typeof two === 'function') {\n // We consider all functions equal\n return false;\n }\n if (typeof one !== 'object' || one === null) {\n // Primitives can be directly compared\n return one !== two;\n }\n if (typeof two !== 'object' || two === null) {\n // We know they are different because the previous case would have triggered\n // otherwise.\n return true;\n }\n if (one.constructor !== two.constructor) {\n return true;\n }\n if (Array.isArray(one)) {\n // We know two is also an array because the constructors are equal\n var len = one.length;\n if (two.length !== len) {\n return true;\n }\n for (var ii = 0; ii < len; ii++) {\n if (deepDiffer(one[ii], two[ii], maxDepth - 1)) {\n return true;\n }\n }\n } else {\n for (var key in one) {\n if (deepDiffer(one[key], two[key], maxDepth - 1)) {\n return true;\n }\n }\n for (var twoKey in two) {\n // The only case we haven't checked yet is keys that are in two but aren't\n // in one, which means they are different.\n if (one[twoKey] === undefined && two[twoKey] !== undefined) {\n return true;\n }\n }\n }\n return false;\n};\nexport default deepDiffer;","import _createForOfIteratorHelperLoose from \"@babel/runtime/helpers/createForOfIteratorHelperLoose\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport RefreshControl from '../../../exports/RefreshControl';\nimport ScrollView from '../../../exports/ScrollView';\nimport View from '../../../exports/View';\nimport StyleSheet from '../../../exports/StyleSheet';\nimport findNodeHandle from '../../../exports/findNodeHandle';\nimport Batchinator from '../Batchinator';\nimport clamp from '../Utilities/clamp';\nimport infoLog from '../infoLog';\nimport { CellRenderMask } from './CellRenderMask';\nimport ChildListCollection from './ChildListCollection';\nimport FillRateHelper from '../FillRateHelper';\nimport StateSafePureComponent from './StateSafePureComponent';\nimport ViewabilityHelper from '../ViewabilityHelper';\nimport CellRenderer from './VirtualizedListCellRenderer';\nimport { VirtualizedListCellContextProvider, VirtualizedListContext, VirtualizedListContextProvider } from './VirtualizedListContext.js';\nimport { computeWindowedRenderLimits, keyExtractor as defaultKeyExtractor } from '../VirtualizeUtils';\nimport invariant from 'fbjs/lib/invariant';\nimport nullthrows from 'nullthrows';\nimport * as React from 'react';\nvar __DEV__ = process.env.NODE_ENV !== 'production';\nvar ON_EDGE_REACHED_EPSILON = 0.001;\nvar _usedIndexForKey = false;\nvar _keylessItemComponentName = '';\n/**\n * Default Props Helper Functions\n * Use the following helper functions for default values\n */\n\n// horizontalOrDefault(this.props.horizontal)\nfunction horizontalOrDefault(horizontal) {\n return horizontal !== null && horizontal !== void 0 ? horizontal : false;\n}\n\n// initialNumToRenderOrDefault(this.props.initialNumToRender)\nfunction initialNumToRenderOrDefault(initialNumToRender) {\n return initialNumToRender !== null && initialNumToRender !== void 0 ? initialNumToRender : 10;\n}\n\n// maxToRenderPerBatchOrDefault(this.props.maxToRenderPerBatch)\nfunction maxToRenderPerBatchOrDefault(maxToRenderPerBatch) {\n return maxToRenderPerBatch !== null && maxToRenderPerBatch !== void 0 ? maxToRenderPerBatch : 10;\n}\n\n// onStartReachedThresholdOrDefault(this.props.onStartReachedThreshold)\nfunction onStartReachedThresholdOrDefault(onStartReachedThreshold) {\n return onStartReachedThreshold !== null && onStartReachedThreshold !== void 0 ? onStartReachedThreshold : 2;\n}\n\n// onEndReachedThresholdOrDefault(this.props.onEndReachedThreshold)\nfunction onEndReachedThresholdOrDefault(onEndReachedThreshold) {\n return onEndReachedThreshold !== null && onEndReachedThreshold !== void 0 ? onEndReachedThreshold : 2;\n}\n\n// getScrollingThreshold(visibleLength, onEndReachedThreshold)\nfunction getScrollingThreshold(threshold, visibleLength) {\n return threshold * visibleLength / 2;\n}\n\n// scrollEventThrottleOrDefault(this.props.scrollEventThrottle)\nfunction scrollEventThrottleOrDefault(scrollEventThrottle) {\n return scrollEventThrottle !== null && scrollEventThrottle !== void 0 ? scrollEventThrottle : 50;\n}\n\n// windowSizeOrDefault(this.props.windowSize)\nfunction windowSizeOrDefault(windowSize) {\n return windowSize !== null && windowSize !== void 0 ? windowSize : 21;\n}\nfunction findLastWhere(arr, predicate) {\n for (var i = arr.length - 1; i >= 0; i--) {\n if (predicate(arr[i])) {\n return arr[i];\n }\n }\n return null;\n}\n\n/**\n * Base implementation for the more convenient [``](https://reactnative.dev/docs/flatlist)\n * and [``](https://reactnative.dev/docs/sectionlist) components, which are also better\n * documented. In general, this should only really be used if you need more flexibility than\n * `FlatList` provides, e.g. for use with immutable data instead of plain arrays.\n *\n * Virtualization massively improves memory consumption and performance of large lists by\n * maintaining a finite render window of active items and replacing all items outside of the render\n * window with appropriately sized blank space. The window adapts to scrolling behavior, and items\n * are rendered incrementally with low-pri (after any running interactions) if they are far from the\n * visible area, or with hi-pri otherwise to minimize the potential of seeing blank space.\n *\n * Some caveats:\n *\n * - Internal state is not preserved when content scrolls out of the render window. Make sure all\n * your data is captured in the item data or external stores like Flux, Redux, or Relay.\n * - This is a `PureComponent` which means that it will not re-render if `props` remain shallow-\n * equal. Make sure that everything your `renderItem` function depends on is passed as a prop\n * (e.g. `extraData`) that is not `===` after updates, otherwise your UI may not update on\n * changes. This includes the `data` prop and parent component state.\n * - In order to constrain memory and enable smooth scrolling, content is rendered asynchronously\n * offscreen. This means it's possible to scroll faster than the fill rate ands momentarily see\n * blank content. This is a tradeoff that can be adjusted to suit the needs of each application,\n * and we are working on improving it behind the scenes.\n * - By default, the list looks for a `key` or `id` prop on each item and uses that for the React key.\n * Alternatively, you can provide a custom `keyExtractor` prop.\n * - As an effort to remove defaultProps, use helper functions when referencing certain props\n *\n */\nclass VirtualizedList extends StateSafePureComponent {\n // scrollToEnd may be janky without getItemLayout prop\n scrollToEnd(params) {\n var animated = params ? params.animated : true;\n var veryLast = this.props.getItemCount(this.props.data) - 1;\n if (veryLast < 0) {\n return;\n }\n var frame = this.__getFrameMetricsApprox(veryLast, this.props);\n var offset = Math.max(0, frame.offset + frame.length + this._footerLength - this._scrollMetrics.visibleLength);\n if (this._scrollRef == null) {\n return;\n }\n if (this._scrollRef.scrollTo == null) {\n console.warn('No scrollTo method provided. This may be because you have two nested ' + 'VirtualizedLists with the same orientation, or because you are ' + 'using a custom component that does not implement scrollTo.');\n return;\n }\n this._scrollRef.scrollTo(horizontalOrDefault(this.props.horizontal) ? {\n x: offset,\n animated\n } : {\n y: offset,\n animated\n });\n }\n\n // scrollToIndex may be janky without getItemLayout prop\n scrollToIndex(params) {\n var _this$props = this.props,\n data = _this$props.data,\n horizontal = _this$props.horizontal,\n getItemCount = _this$props.getItemCount,\n getItemLayout = _this$props.getItemLayout,\n onScrollToIndexFailed = _this$props.onScrollToIndexFailed;\n var animated = params.animated,\n index = params.index,\n viewOffset = params.viewOffset,\n viewPosition = params.viewPosition;\n invariant(index >= 0, \"scrollToIndex out of range: requested index \" + index + \" but minimum is 0\");\n invariant(getItemCount(data) >= 1, \"scrollToIndex out of range: item length \" + getItemCount(data) + \" but minimum is 1\");\n invariant(index < getItemCount(data), \"scrollToIndex out of range: requested index \" + index + \" is out of 0 to \" + (getItemCount(data) - 1));\n if (!getItemLayout && index > this._highestMeasuredFrameIndex) {\n invariant(!!onScrollToIndexFailed, 'scrollToIndex should be used in conjunction with getItemLayout or onScrollToIndexFailed, ' + 'otherwise there is no way to know the location of offscreen indices or handle failures.');\n onScrollToIndexFailed({\n averageItemLength: this._averageCellLength,\n highestMeasuredFrameIndex: this._highestMeasuredFrameIndex,\n index\n });\n return;\n }\n var frame = this.__getFrameMetricsApprox(Math.floor(index), this.props);\n var offset = Math.max(0, this._getOffsetApprox(index, this.props) - (viewPosition || 0) * (this._scrollMetrics.visibleLength - frame.length)) - (viewOffset || 0);\n if (this._scrollRef == null) {\n return;\n }\n if (this._scrollRef.scrollTo == null) {\n console.warn('No scrollTo method provided. This may be because you have two nested ' + 'VirtualizedLists with the same orientation, or because you are ' + 'using a custom component that does not implement scrollTo.');\n return;\n }\n this._scrollRef.scrollTo(horizontal ? {\n x: offset,\n animated\n } : {\n y: offset,\n animated\n });\n }\n\n // scrollToItem may be janky without getItemLayout prop. Required linear scan through items -\n // use scrollToIndex instead if possible.\n scrollToItem(params) {\n var item = params.item;\n var _this$props2 = this.props,\n data = _this$props2.data,\n getItem = _this$props2.getItem,\n getItemCount = _this$props2.getItemCount;\n var itemCount = getItemCount(data);\n for (var _index = 0; _index < itemCount; _index++) {\n if (getItem(data, _index) === item) {\n this.scrollToIndex(_objectSpread(_objectSpread({}, params), {}, {\n index: _index\n }));\n break;\n }\n }\n }\n\n /**\n * Scroll to a specific content pixel offset in the list.\n *\n * Param `offset` expects the offset to scroll to.\n * In case of `horizontal` is true, the offset is the x-value,\n * in any other case the offset is the y-value.\n *\n * Param `animated` (`true` by default) defines whether the list\n * should do an animation while scrolling.\n */\n scrollToOffset(params) {\n var animated = params.animated,\n offset = params.offset;\n if (this._scrollRef == null) {\n return;\n }\n if (this._scrollRef.scrollTo == null) {\n console.warn('No scrollTo method provided. This may be because you have two nested ' + 'VirtualizedLists with the same orientation, or because you are ' + 'using a custom component that does not implement scrollTo.');\n return;\n }\n this._scrollRef.scrollTo(horizontalOrDefault(this.props.horizontal) ? {\n x: offset,\n animated\n } : {\n y: offset,\n animated\n });\n }\n recordInteraction() {\n this._nestedChildLists.forEach(childList => {\n childList.recordInteraction();\n });\n this._viewabilityTuples.forEach(t => {\n t.viewabilityHelper.recordInteraction();\n });\n this._updateViewableItems(this.props, this.state.cellsAroundViewport);\n }\n flashScrollIndicators() {\n if (this._scrollRef == null) {\n return;\n }\n this._scrollRef.flashScrollIndicators();\n }\n\n /**\n * Provides a handle to the underlying scroll responder.\n * Note that `this._scrollRef` might not be a `ScrollView`, so we\n * need to check that it responds to `getScrollResponder` before calling it.\n */\n getScrollResponder() {\n if (this._scrollRef && this._scrollRef.getScrollResponder) {\n return this._scrollRef.getScrollResponder();\n }\n }\n getScrollableNode() {\n if (this._scrollRef && this._scrollRef.getScrollableNode) {\n return this._scrollRef.getScrollableNode();\n } else {\n return this._scrollRef;\n }\n }\n getScrollRef() {\n if (this._scrollRef && this._scrollRef.getScrollRef) {\n return this._scrollRef.getScrollRef();\n } else {\n return this._scrollRef;\n }\n }\n _getCellKey() {\n var _this$context;\n return ((_this$context = this.context) == null ? void 0 : _this$context.cellKey) || 'rootList';\n }\n\n // $FlowFixMe[missing-local-annot]\n\n hasMore() {\n return this._hasMore;\n }\n\n // $FlowFixMe[missing-local-annot]\n\n constructor(_props) {\n var _this$props$updateCel;\n super(_props);\n this._getScrollMetrics = () => {\n return this._scrollMetrics;\n };\n this._getOutermostParentListRef = () => {\n if (this._isNestedWithSameOrientation()) {\n return this.context.getOutermostParentListRef();\n } else {\n return this;\n }\n };\n this._registerAsNestedChild = childList => {\n this._nestedChildLists.add(childList.ref, childList.cellKey);\n if (this._hasInteracted) {\n childList.ref.recordInteraction();\n }\n };\n this._unregisterAsNestedChild = childList => {\n this._nestedChildLists.remove(childList.ref);\n };\n this._onUpdateSeparators = (keys, newProps) => {\n keys.forEach(key => {\n var ref = key != null && this._cellRefs[key];\n ref && ref.updateSeparatorProps(newProps);\n });\n };\n this._getSpacerKey = isVertical => isVertical ? 'height' : 'width';\n this._averageCellLength = 0;\n this._cellRefs = {};\n this._frames = {};\n this._footerLength = 0;\n this._hasTriggeredInitialScrollToIndex = false;\n this._hasInteracted = false;\n this._hasMore = false;\n this._hasWarned = {};\n this._headerLength = 0;\n this._hiPriInProgress = false;\n this._highestMeasuredFrameIndex = 0;\n this._indicesToKeys = new Map();\n this._lastFocusedCellKey = null;\n this._nestedChildLists = new ChildListCollection();\n this._offsetFromParentVirtualizedList = 0;\n this._prevParentOffset = 0;\n this._scrollMetrics = {\n contentLength: 0,\n dOffset: 0,\n dt: 10,\n offset: 0,\n timestamp: 0,\n velocity: 0,\n visibleLength: 0,\n zoomScale: 1\n };\n this._scrollRef = null;\n this._sentStartForContentLength = 0;\n this._sentEndForContentLength = 0;\n this._totalCellLength = 0;\n this._totalCellsMeasured = 0;\n this._viewabilityTuples = [];\n this._captureScrollRef = ref => {\n this._scrollRef = ref;\n };\n this._defaultRenderScrollComponent = props => {\n var onRefresh = props.onRefresh;\n if (this._isNestedWithSameOrientation()) {\n // $FlowFixMe[prop-missing] - Typing ReactNativeComponent revealed errors\n return /*#__PURE__*/React.createElement(View, props);\n } else if (onRefresh) {\n var _props$refreshing;\n invariant(typeof props.refreshing === 'boolean', '`refreshing` prop must be set as a boolean in order to use `onRefresh`, but got `' + JSON.stringify((_props$refreshing = props.refreshing) !== null && _props$refreshing !== void 0 ? _props$refreshing : 'undefined') + '`');\n return (\n /*#__PURE__*/\n // $FlowFixMe[prop-missing] Invalid prop usage\n // $FlowFixMe[incompatible-use]\n React.createElement(ScrollView, _extends({}, props, {\n refreshControl: props.refreshControl == null ? /*#__PURE__*/React.createElement(RefreshControl\n // $FlowFixMe[incompatible-type]\n , {\n refreshing: props.refreshing,\n onRefresh: onRefresh,\n progressViewOffset: props.progressViewOffset\n }) : props.refreshControl\n }))\n );\n } else {\n // $FlowFixMe[prop-missing] Invalid prop usage\n // $FlowFixMe[incompatible-use]\n return /*#__PURE__*/React.createElement(ScrollView, props);\n }\n };\n this._onCellLayout = (e, cellKey, index) => {\n var layout = e.nativeEvent.layout;\n var next = {\n offset: this._selectOffset(layout),\n length: this._selectLength(layout),\n index,\n inLayout: true\n };\n var curr = this._frames[cellKey];\n if (!curr || next.offset !== curr.offset || next.length !== curr.length || index !== curr.index) {\n this._totalCellLength += next.length - (curr ? curr.length : 0);\n this._totalCellsMeasured += curr ? 0 : 1;\n this._averageCellLength = this._totalCellLength / this._totalCellsMeasured;\n this._frames[cellKey] = next;\n this._highestMeasuredFrameIndex = Math.max(this._highestMeasuredFrameIndex, index);\n this._scheduleCellsToRenderUpdate();\n } else {\n this._frames[cellKey].inLayout = true;\n }\n this._triggerRemeasureForChildListsInCell(cellKey);\n this._computeBlankness();\n this._updateViewableItems(this.props, this.state.cellsAroundViewport);\n };\n this._onCellUnmount = cellKey => {\n delete this._cellRefs[cellKey];\n var curr = this._frames[cellKey];\n if (curr) {\n this._frames[cellKey] = _objectSpread(_objectSpread({}, curr), {}, {\n inLayout: false\n });\n }\n };\n this._onLayout = e => {\n if (this._isNestedWithSameOrientation()) {\n // Need to adjust our scroll metrics to be relative to our containing\n // VirtualizedList before we can make claims about list item viewability\n this.measureLayoutRelativeToContainingList();\n } else {\n this._scrollMetrics.visibleLength = this._selectLength(e.nativeEvent.layout);\n }\n this.props.onLayout && this.props.onLayout(e);\n this._scheduleCellsToRenderUpdate();\n this._maybeCallOnEdgeReached();\n };\n this._onLayoutEmpty = e => {\n this.props.onLayout && this.props.onLayout(e);\n };\n this._onLayoutFooter = e => {\n this._triggerRemeasureForChildListsInCell(this._getFooterCellKey());\n this._footerLength = this._selectLength(e.nativeEvent.layout);\n };\n this._onLayoutHeader = e => {\n this._headerLength = this._selectLength(e.nativeEvent.layout);\n };\n this._onContentSizeChange = (width, height) => {\n if (width > 0 && height > 0 && this.props.initialScrollIndex != null && this.props.initialScrollIndex > 0 && !this._hasTriggeredInitialScrollToIndex) {\n if (this.props.contentOffset == null) {\n if (this.props.initialScrollIndex < this.props.getItemCount(this.props.data)) {\n this.scrollToIndex({\n animated: false,\n index: nullthrows(this.props.initialScrollIndex)\n });\n } else {\n this.scrollToEnd({\n animated: false\n });\n }\n }\n this._hasTriggeredInitialScrollToIndex = true;\n }\n if (this.props.onContentSizeChange) {\n this.props.onContentSizeChange(width, height);\n }\n this._scrollMetrics.contentLength = this._selectLength({\n height,\n width\n });\n this._scheduleCellsToRenderUpdate();\n this._maybeCallOnEdgeReached();\n };\n this._convertParentScrollMetrics = metrics => {\n // Offset of the top of the nested list relative to the top of its parent's viewport\n var offset = metrics.offset - this._offsetFromParentVirtualizedList;\n // Child's visible length is the same as its parent's\n var visibleLength = metrics.visibleLength;\n var dOffset = offset - this._scrollMetrics.offset;\n var contentLength = this._scrollMetrics.contentLength;\n return {\n visibleLength,\n contentLength,\n offset,\n dOffset\n };\n };\n this._onScroll = e => {\n this._nestedChildLists.forEach(childList => {\n childList._onScroll(e);\n });\n if (this.props.onScroll) {\n this.props.onScroll(e);\n }\n var timestamp = e.timeStamp;\n var visibleLength = this._selectLength(e.nativeEvent.layoutMeasurement);\n var contentLength = this._selectLength(e.nativeEvent.contentSize);\n var offset = this._selectOffset(e.nativeEvent.contentOffset);\n var dOffset = offset - this._scrollMetrics.offset;\n if (this._isNestedWithSameOrientation()) {\n if (this._scrollMetrics.contentLength === 0) {\n // Ignore scroll events until onLayout has been called and we\n // know our offset from our offset from our parent\n return;\n }\n var _this$_convertParentS = this._convertParentScrollMetrics({\n visibleLength,\n offset\n });\n visibleLength = _this$_convertParentS.visibleLength;\n contentLength = _this$_convertParentS.contentLength;\n offset = _this$_convertParentS.offset;\n dOffset = _this$_convertParentS.dOffset;\n }\n var dt = this._scrollMetrics.timestamp ? Math.max(1, timestamp - this._scrollMetrics.timestamp) : 1;\n var velocity = dOffset / dt;\n if (dt > 500 && this._scrollMetrics.dt > 500 && contentLength > 5 * visibleLength && !this._hasWarned.perf) {\n infoLog('VirtualizedList: You have a large list that is slow to update - make sure your ' + 'renderItem function renders components that follow React performance best practices ' + 'like PureComponent, shouldComponentUpdate, etc.', {\n dt,\n prevDt: this._scrollMetrics.dt,\n contentLength\n });\n this._hasWarned.perf = true;\n }\n\n // For invalid negative values (w/ RTL), set this to 1.\n var zoomScale = e.nativeEvent.zoomScale < 0 ? 1 : e.nativeEvent.zoomScale;\n this._scrollMetrics = {\n contentLength,\n dt,\n dOffset,\n offset,\n timestamp,\n velocity,\n visibleLength,\n zoomScale\n };\n this._updateViewableItems(this.props, this.state.cellsAroundViewport);\n if (!this.props) {\n return;\n }\n this._maybeCallOnEdgeReached();\n if (velocity !== 0) {\n this._fillRateHelper.activate();\n }\n this._computeBlankness();\n this._scheduleCellsToRenderUpdate();\n };\n this._onScrollBeginDrag = e => {\n this._nestedChildLists.forEach(childList => {\n childList._onScrollBeginDrag(e);\n });\n this._viewabilityTuples.forEach(tuple => {\n tuple.viewabilityHelper.recordInteraction();\n });\n this._hasInteracted = true;\n this.props.onScrollBeginDrag && this.props.onScrollBeginDrag(e);\n };\n this._onScrollEndDrag = e => {\n this._nestedChildLists.forEach(childList => {\n childList._onScrollEndDrag(e);\n });\n var velocity = e.nativeEvent.velocity;\n if (velocity) {\n this._scrollMetrics.velocity = this._selectOffset(velocity);\n }\n this._computeBlankness();\n this.props.onScrollEndDrag && this.props.onScrollEndDrag(e);\n };\n this._onMomentumScrollBegin = e => {\n this._nestedChildLists.forEach(childList => {\n childList._onMomentumScrollBegin(e);\n });\n this.props.onMomentumScrollBegin && this.props.onMomentumScrollBegin(e);\n };\n this._onMomentumScrollEnd = e => {\n this._nestedChildLists.forEach(childList => {\n childList._onMomentumScrollEnd(e);\n });\n this._scrollMetrics.velocity = 0;\n this._computeBlankness();\n this.props.onMomentumScrollEnd && this.props.onMomentumScrollEnd(e);\n };\n this._updateCellsToRender = () => {\n this._updateViewableItems(this.props, this.state.cellsAroundViewport);\n this.setState((state, props) => {\n var cellsAroundViewport = this._adjustCellsAroundViewport(props, state.cellsAroundViewport);\n var renderMask = VirtualizedList._createRenderMask(props, cellsAroundViewport, this._getNonViewportRenderRegions(props));\n if (cellsAroundViewport.first === state.cellsAroundViewport.first && cellsAroundViewport.last === state.cellsAroundViewport.last && renderMask.equals(state.renderMask)) {\n return null;\n }\n return {\n cellsAroundViewport,\n renderMask\n };\n });\n };\n this._createViewToken = (index, isViewable, props\n // $FlowFixMe[missing-local-annot]\n ) => {\n var data = props.data,\n getItem = props.getItem;\n var item = getItem(data, index);\n return {\n index,\n item,\n key: this._keyExtractor(item, index, props),\n isViewable\n };\n };\n this._getOffsetApprox = (index, props) => {\n if (Number.isInteger(index)) {\n return this.__getFrameMetricsApprox(index, props).offset;\n } else {\n var frameMetrics = this.__getFrameMetricsApprox(Math.floor(index), props);\n var remainder = index - Math.floor(index);\n return frameMetrics.offset + remainder * frameMetrics.length;\n }\n };\n this.__getFrameMetricsApprox = (index, props) => {\n var frame = this._getFrameMetrics(index, props);\n if (frame && frame.index === index) {\n // check for invalid frames due to row re-ordering\n return frame;\n } else {\n var data = props.data,\n getItemCount = props.getItemCount,\n getItemLayout = props.getItemLayout;\n invariant(index >= 0 && index < getItemCount(data), 'Tried to get frame for out of range index ' + index);\n invariant(!getItemLayout, 'Should not have to estimate frames when a measurement metrics function is provided');\n return {\n length: this._averageCellLength,\n offset: this._averageCellLength * index\n };\n }\n };\n this._getFrameMetrics = (index, props) => {\n var data = props.data,\n getItem = props.getItem,\n getItemCount = props.getItemCount,\n getItemLayout = props.getItemLayout;\n invariant(index >= 0 && index < getItemCount(data), 'Tried to get frame for out of range index ' + index);\n var item = getItem(data, index);\n var frame = this._frames[this._keyExtractor(item, index, props)];\n if (!frame || frame.index !== index) {\n if (getItemLayout) {\n /* $FlowFixMe[prop-missing] (>=0.63.0 site=react_native_fb) This comment\n * suppresses an error found when Flow v0.63 was deployed. To see the error\n * delete this comment and run Flow. */\n return getItemLayout(data, index);\n }\n }\n return frame;\n };\n this._getNonViewportRenderRegions = props => {\n // Keep a viewport's worth of content around the last focused cell to allow\n // random navigation around it without any blanking. E.g. tabbing from one\n // focused item out of viewport to another.\n if (!(this._lastFocusedCellKey && this._cellRefs[this._lastFocusedCellKey])) {\n return [];\n }\n var lastFocusedCellRenderer = this._cellRefs[this._lastFocusedCellKey];\n var focusedCellIndex = lastFocusedCellRenderer.props.index;\n var itemCount = props.getItemCount(props.data);\n\n // The last cell we rendered may be at a new index. Bail if we don't know\n // where it is.\n if (focusedCellIndex >= itemCount || this._keyExtractor(props.getItem(props.data, focusedCellIndex), focusedCellIndex, props) !== this._lastFocusedCellKey) {\n return [];\n }\n var first = focusedCellIndex;\n var heightOfCellsBeforeFocused = 0;\n for (var i = first - 1; i >= 0 && heightOfCellsBeforeFocused < this._scrollMetrics.visibleLength; i--) {\n first--;\n heightOfCellsBeforeFocused += this.__getFrameMetricsApprox(i, props).length;\n }\n var last = focusedCellIndex;\n var heightOfCellsAfterFocused = 0;\n for (var _i = last + 1; _i < itemCount && heightOfCellsAfterFocused < this._scrollMetrics.visibleLength; _i++) {\n last++;\n heightOfCellsAfterFocused += this.__getFrameMetricsApprox(_i, props).length;\n }\n return [{\n first,\n last\n }];\n };\n this._checkProps(_props);\n this._fillRateHelper = new FillRateHelper(this._getFrameMetrics);\n this._updateCellsToRenderBatcher = new Batchinator(this._updateCellsToRender, (_this$props$updateCel = this.props.updateCellsBatchingPeriod) !== null && _this$props$updateCel !== void 0 ? _this$props$updateCel : 50);\n if (this.props.viewabilityConfigCallbackPairs) {\n this._viewabilityTuples = this.props.viewabilityConfigCallbackPairs.map(pair => ({\n viewabilityHelper: new ViewabilityHelper(pair.viewabilityConfig),\n onViewableItemsChanged: pair.onViewableItemsChanged\n }));\n } else {\n var _this$props3 = this.props,\n onViewableItemsChanged = _this$props3.onViewableItemsChanged,\n viewabilityConfig = _this$props3.viewabilityConfig;\n if (onViewableItemsChanged) {\n this._viewabilityTuples.push({\n viewabilityHelper: new ViewabilityHelper(viewabilityConfig),\n onViewableItemsChanged: onViewableItemsChanged\n });\n }\n }\n var initialRenderRegion = VirtualizedList._initialRenderRegion(_props);\n this.state = {\n cellsAroundViewport: initialRenderRegion,\n renderMask: VirtualizedList._createRenderMask(_props, initialRenderRegion)\n };\n\n // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n // For issue https://github.com/necolas/react-native-web/issues/995\n this.invertedWheelEventHandler = ev => {\n var scrollOffset = this.props.horizontal ? ev.target.scrollLeft : ev.target.scrollTop;\n var scrollLength = this.props.horizontal ? ev.target.scrollWidth : ev.target.scrollHeight;\n var clientLength = this.props.horizontal ? ev.target.clientWidth : ev.target.clientHeight;\n var isEventTargetScrollable = scrollLength > clientLength;\n var delta = this.props.horizontal ? ev.deltaX || ev.wheelDeltaX : ev.deltaY || ev.wheelDeltaY;\n var leftoverDelta = delta;\n if (isEventTargetScrollable) {\n leftoverDelta = delta < 0 ? Math.min(delta + scrollOffset, 0) : Math.max(delta - (scrollLength - clientLength - scrollOffset), 0);\n }\n var targetDelta = delta - leftoverDelta;\n if (this.props.inverted && this._scrollRef && this._scrollRef.getScrollableNode) {\n var node = this._scrollRef.getScrollableNode();\n if (this.props.horizontal) {\n ev.target.scrollLeft += targetDelta;\n var nextScrollLeft = node.scrollLeft - leftoverDelta;\n node.scrollLeft = !this.props.getItemLayout ? Math.min(nextScrollLeft, this._totalCellLength) : nextScrollLeft;\n } else {\n ev.target.scrollTop += targetDelta;\n var nextScrollTop = node.scrollTop - leftoverDelta;\n node.scrollTop = !this.props.getItemLayout ? Math.min(nextScrollTop, this._totalCellLength) : nextScrollTop;\n }\n ev.preventDefault();\n }\n };\n }\n _checkProps(props) {\n var onScroll = props.onScroll,\n windowSize = props.windowSize,\n getItemCount = props.getItemCount,\n data = props.data,\n initialScrollIndex = props.initialScrollIndex;\n invariant(\n // $FlowFixMe[prop-missing]\n !onScroll || !onScroll.__isNative, 'Components based on VirtualizedList must be wrapped with Animated.createAnimatedComponent ' + 'to support native onScroll events with useNativeDriver');\n invariant(windowSizeOrDefault(windowSize) > 0, 'VirtualizedList: The windowSize prop must be present and set to a value greater than 0.');\n invariant(getItemCount, 'VirtualizedList: The \"getItemCount\" prop must be provided');\n var itemCount = getItemCount(data);\n if (initialScrollIndex != null && !this._hasTriggeredInitialScrollToIndex && (initialScrollIndex < 0 || itemCount > 0 && initialScrollIndex >= itemCount) && !this._hasWarned.initialScrollIndex) {\n console.warn(\"initialScrollIndex \\\"\" + initialScrollIndex + \"\\\" is not valid (list has \" + itemCount + \" items)\");\n this._hasWarned.initialScrollIndex = true;\n }\n if (__DEV__ && !this._hasWarned.flexWrap) {\n // $FlowFixMe[underconstrained-implicit-instantiation]\n var flatStyles = StyleSheet.flatten(this.props.contentContainerStyle);\n if (flatStyles != null && flatStyles.flexWrap === 'wrap') {\n console.warn('`flexWrap: `wrap`` is not supported with the `VirtualizedList` components.' + 'Consider using `numColumns` with `FlatList` instead.');\n this._hasWarned.flexWrap = true;\n }\n }\n }\n static _createRenderMask(props, cellsAroundViewport, additionalRegions) {\n var itemCount = props.getItemCount(props.data);\n invariant(cellsAroundViewport.first >= 0 && cellsAroundViewport.last >= cellsAroundViewport.first - 1 && cellsAroundViewport.last < itemCount, \"Invalid cells around viewport \\\"[\" + cellsAroundViewport.first + \", \" + cellsAroundViewport.last + \"]\\\" was passed to VirtualizedList._createRenderMask\");\n var renderMask = new CellRenderMask(itemCount);\n if (itemCount > 0) {\n var allRegions = [cellsAroundViewport, ...(additionalRegions !== null && additionalRegions !== void 0 ? additionalRegions : [])];\n for (var _i2 = 0, _allRegions = allRegions; _i2 < _allRegions.length; _i2++) {\n var region = _allRegions[_i2];\n renderMask.addCells(region);\n }\n\n // The initially rendered cells are retained as part of the\n // \"scroll-to-top\" optimization\n if (props.initialScrollIndex == null || props.initialScrollIndex <= 0) {\n var initialRegion = VirtualizedList._initialRenderRegion(props);\n renderMask.addCells(initialRegion);\n }\n\n // The layout coordinates of sticker headers may be off-screen while the\n // actual header is on-screen. Keep the most recent before the viewport\n // rendered, even if its layout coordinates are not in viewport.\n var stickyIndicesSet = new Set(props.stickyHeaderIndices);\n VirtualizedList._ensureClosestStickyHeader(props, stickyIndicesSet, renderMask, cellsAroundViewport.first);\n }\n return renderMask;\n }\n static _initialRenderRegion(props) {\n var _props$initialScrollI;\n var itemCount = props.getItemCount(props.data);\n var firstCellIndex = Math.max(0, Math.min(itemCount - 1, Math.floor((_props$initialScrollI = props.initialScrollIndex) !== null && _props$initialScrollI !== void 0 ? _props$initialScrollI : 0)));\n var lastCellIndex = Math.min(itemCount, firstCellIndex + initialNumToRenderOrDefault(props.initialNumToRender)) - 1;\n return {\n first: firstCellIndex,\n last: lastCellIndex\n };\n }\n static _ensureClosestStickyHeader(props, stickyIndicesSet, renderMask, cellIdx) {\n var stickyOffset = props.ListHeaderComponent ? 1 : 0;\n for (var itemIdx = cellIdx - 1; itemIdx >= 0; itemIdx--) {\n if (stickyIndicesSet.has(itemIdx + stickyOffset)) {\n renderMask.addCells({\n first: itemIdx,\n last: itemIdx\n });\n break;\n }\n }\n }\n _adjustCellsAroundViewport(props, cellsAroundViewport) {\n var data = props.data,\n getItemCount = props.getItemCount;\n var onEndReachedThreshold = onEndReachedThresholdOrDefault(props.onEndReachedThreshold);\n var _this$_scrollMetrics = this._scrollMetrics,\n contentLength = _this$_scrollMetrics.contentLength,\n offset = _this$_scrollMetrics.offset,\n visibleLength = _this$_scrollMetrics.visibleLength;\n var distanceFromEnd = contentLength - visibleLength - offset;\n\n // Wait until the scroll view metrics have been set up. And until then,\n // we will trust the initialNumToRender suggestion\n if (visibleLength <= 0 || contentLength <= 0) {\n return cellsAroundViewport.last >= getItemCount(data) ? VirtualizedList._constrainToItemCount(cellsAroundViewport, props) : cellsAroundViewport;\n }\n var newCellsAroundViewport;\n if (props.disableVirtualization) {\n var renderAhead = distanceFromEnd < onEndReachedThreshold * visibleLength ? maxToRenderPerBatchOrDefault(props.maxToRenderPerBatch) : 0;\n newCellsAroundViewport = {\n first: 0,\n last: Math.min(cellsAroundViewport.last + renderAhead, getItemCount(data) - 1)\n };\n } else {\n // If we have a non-zero initialScrollIndex and run this before we've scrolled,\n // we'll wipe out the initialNumToRender rendered elements starting at initialScrollIndex.\n // So let's wait until we've scrolled the view to the right place. And until then,\n // we will trust the initialScrollIndex suggestion.\n\n // Thus, we want to recalculate the windowed render limits if any of the following hold:\n // - initialScrollIndex is undefined or is 0\n // - initialScrollIndex > 0 AND scrolling is complete\n // - initialScrollIndex > 0 AND the end of the list is visible (this handles the case\n // where the list is shorter than the visible area)\n if (props.initialScrollIndex && !this._scrollMetrics.offset && Math.abs(distanceFromEnd) >= Number.EPSILON) {\n return cellsAroundViewport.last >= getItemCount(data) ? VirtualizedList._constrainToItemCount(cellsAroundViewport, props) : cellsAroundViewport;\n }\n newCellsAroundViewport = computeWindowedRenderLimits(props, maxToRenderPerBatchOrDefault(props.maxToRenderPerBatch), windowSizeOrDefault(props.windowSize), cellsAroundViewport, this.__getFrameMetricsApprox, this._scrollMetrics);\n invariant(newCellsAroundViewport.last < getItemCount(data), 'computeWindowedRenderLimits() should return range in-bounds');\n }\n if (this._nestedChildLists.size() > 0) {\n // If some cell in the new state has a child list in it, we should only render\n // up through that item, so that we give that list a chance to render.\n // Otherwise there's churn from multiple child lists mounting and un-mounting\n // their items.\n\n // Will this prevent rendering if the nested list doesn't realize the end?\n var childIdx = this._findFirstChildWithMore(newCellsAroundViewport.first, newCellsAroundViewport.last);\n newCellsAroundViewport.last = childIdx !== null && childIdx !== void 0 ? childIdx : newCellsAroundViewport.last;\n }\n return newCellsAroundViewport;\n }\n _findFirstChildWithMore(first, last) {\n for (var ii = first; ii <= last; ii++) {\n var cellKeyForIndex = this._indicesToKeys.get(ii);\n if (cellKeyForIndex != null && this._nestedChildLists.anyInCell(cellKeyForIndex, childList => childList.hasMore())) {\n return ii;\n }\n }\n return null;\n }\n componentDidMount() {\n if (this._isNestedWithSameOrientation()) {\n this.context.registerAsNestedChild({\n ref: this,\n cellKey: this.context.cellKey\n });\n }\n\n // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n this.setupWebWheelHandler();\n }\n componentWillUnmount() {\n if (this._isNestedWithSameOrientation()) {\n this.context.unregisterAsNestedChild({\n ref: this\n });\n }\n this._updateCellsToRenderBatcher.dispose({\n abort: true\n });\n this._viewabilityTuples.forEach(tuple => {\n tuple.viewabilityHelper.dispose();\n });\n this._fillRateHelper.deactivateAndFlush();\n\n // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n this.teardownWebWheelHandler();\n }\n\n // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n setupWebWheelHandler() {\n if (this._scrollRef && this._scrollRef.getScrollableNode) {\n this._scrollRef.getScrollableNode().addEventListener('wheel', this.invertedWheelEventHandler);\n } else {\n setTimeout(() => this.setupWebWheelHandler(), 50);\n return;\n }\n }\n\n // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n teardownWebWheelHandler() {\n if (this._scrollRef && this._scrollRef.getScrollableNode) {\n this._scrollRef.getScrollableNode().removeEventListener('wheel', this.invertedWheelEventHandler);\n }\n }\n static getDerivedStateFromProps(newProps, prevState) {\n // first and last could be stale (e.g. if a new, shorter items props is passed in), so we make\n // sure we're rendering a reasonable range here.\n var itemCount = newProps.getItemCount(newProps.data);\n if (itemCount === prevState.renderMask.numCells()) {\n return prevState;\n }\n var constrainedCells = VirtualizedList._constrainToItemCount(prevState.cellsAroundViewport, newProps);\n return {\n cellsAroundViewport: constrainedCells,\n renderMask: VirtualizedList._createRenderMask(newProps, constrainedCells)\n };\n }\n _pushCells(cells, stickyHeaderIndices, stickyIndicesFromProps, first, last, inversionStyle) {\n var _this = this;\n var _this$props4 = this.props,\n CellRendererComponent = _this$props4.CellRendererComponent,\n ItemSeparatorComponent = _this$props4.ItemSeparatorComponent,\n ListHeaderComponent = _this$props4.ListHeaderComponent,\n ListItemComponent = _this$props4.ListItemComponent,\n data = _this$props4.data,\n debug = _this$props4.debug,\n getItem = _this$props4.getItem,\n getItemCount = _this$props4.getItemCount,\n getItemLayout = _this$props4.getItemLayout,\n horizontal = _this$props4.horizontal,\n renderItem = _this$props4.renderItem;\n var stickyOffset = ListHeaderComponent ? 1 : 0;\n var end = getItemCount(data) - 1;\n var prevCellKey;\n last = Math.min(end, last);\n var _loop = function _loop() {\n var item = getItem(data, ii);\n var key = _this._keyExtractor(item, ii, _this.props);\n _this._indicesToKeys.set(ii, key);\n if (stickyIndicesFromProps.has(ii + stickyOffset)) {\n stickyHeaderIndices.push(cells.length);\n }\n var shouldListenForLayout = getItemLayout == null || debug || _this._fillRateHelper.enabled();\n cells.push( /*#__PURE__*/React.createElement(CellRenderer, _extends({\n CellRendererComponent: CellRendererComponent,\n ItemSeparatorComponent: ii < end ? ItemSeparatorComponent : undefined,\n ListItemComponent: ListItemComponent,\n cellKey: key,\n horizontal: horizontal,\n index: ii,\n inversionStyle: inversionStyle,\n item: item,\n key: key,\n prevCellKey: prevCellKey,\n onUpdateSeparators: _this._onUpdateSeparators,\n onCellFocusCapture: e => _this._onCellFocusCapture(key),\n onUnmount: _this._onCellUnmount,\n ref: _ref => {\n _this._cellRefs[key] = _ref;\n },\n renderItem: renderItem\n }, shouldListenForLayout && {\n onCellLayout: _this._onCellLayout\n })));\n prevCellKey = key;\n };\n for (var ii = first; ii <= last; ii++) {\n _loop();\n }\n }\n static _constrainToItemCount(cells, props) {\n var itemCount = props.getItemCount(props.data);\n var last = Math.min(itemCount - 1, cells.last);\n var maxToRenderPerBatch = maxToRenderPerBatchOrDefault(props.maxToRenderPerBatch);\n return {\n first: clamp(0, itemCount - 1 - maxToRenderPerBatch, cells.first),\n last\n };\n }\n _isNestedWithSameOrientation() {\n var nestedContext = this.context;\n return !!(nestedContext && !!nestedContext.horizontal === horizontalOrDefault(this.props.horizontal));\n }\n _keyExtractor(item, index, props\n // $FlowFixMe[missing-local-annot]\n ) {\n if (props.keyExtractor != null) {\n return props.keyExtractor(item, index);\n }\n var key = defaultKeyExtractor(item, index);\n if (key === String(index)) {\n _usedIndexForKey = true;\n if (item.type && item.type.displayName) {\n _keylessItemComponentName = item.type.displayName;\n }\n }\n return key;\n }\n render() {\n this._checkProps(this.props);\n var _this$props5 = this.props,\n ListEmptyComponent = _this$props5.ListEmptyComponent,\n ListFooterComponent = _this$props5.ListFooterComponent,\n ListHeaderComponent = _this$props5.ListHeaderComponent;\n var _this$props6 = this.props,\n data = _this$props6.data,\n horizontal = _this$props6.horizontal;\n var inversionStyle = this.props.inverted ? horizontalOrDefault(this.props.horizontal) ? styles.horizontallyInverted : styles.verticallyInverted : null;\n var cells = [];\n var stickyIndicesFromProps = new Set(this.props.stickyHeaderIndices);\n var stickyHeaderIndices = [];\n\n // 1. Add cell for ListHeaderComponent\n if (ListHeaderComponent) {\n if (stickyIndicesFromProps.has(0)) {\n stickyHeaderIndices.push(0);\n }\n var _element = /*#__PURE__*/React.isValidElement(ListHeaderComponent) ? ListHeaderComponent :\n /*#__PURE__*/\n // $FlowFixMe[not-a-component]\n // $FlowFixMe[incompatible-type-arg]\n React.createElement(ListHeaderComponent, null);\n cells.push( /*#__PURE__*/React.createElement(VirtualizedListCellContextProvider, {\n cellKey: this._getCellKey() + '-header',\n key: \"$header\"\n }, /*#__PURE__*/React.createElement(View, {\n onLayout: this._onLayoutHeader,\n style: [inversionStyle, this.props.ListHeaderComponentStyle]\n },\n // $FlowFixMe[incompatible-type] - Typing ReactNativeComponent revealed errors\n _element)));\n }\n\n // 2a. Add a cell for ListEmptyComponent if applicable\n var itemCount = this.props.getItemCount(data);\n if (itemCount === 0 && ListEmptyComponent) {\n var _element2 = /*#__PURE__*/React.isValidElement(ListEmptyComponent) ? ListEmptyComponent :\n /*#__PURE__*/\n // $FlowFixMe[not-a-component]\n // $FlowFixMe[incompatible-type-arg]\n React.createElement(ListEmptyComponent, null);\n cells.push( /*#__PURE__*/React.createElement(VirtualizedListCellContextProvider, {\n cellKey: this._getCellKey() + '-empty',\n key: \"$empty\"\n }, /*#__PURE__*/React.cloneElement(_element2, {\n onLayout: event => {\n this._onLayoutEmpty(event);\n if (_element2.props.onLayout) {\n _element2.props.onLayout(event);\n }\n },\n style: [inversionStyle, _element2.props.style]\n })));\n }\n\n // 2b. Add cells and spacers for each item\n if (itemCount > 0) {\n _usedIndexForKey = false;\n _keylessItemComponentName = '';\n var spacerKey = this._getSpacerKey(!horizontal);\n var renderRegions = this.state.renderMask.enumerateRegions();\n var lastSpacer = findLastWhere(renderRegions, r => r.isSpacer);\n for (var _iterator = _createForOfIteratorHelperLoose(renderRegions), _step; !(_step = _iterator()).done;) {\n var section = _step.value;\n if (section.isSpacer) {\n // Legacy behavior is to avoid spacers when virtualization is\n // disabled (including head spacers on initial render).\n if (this.props.disableVirtualization) {\n continue;\n }\n\n // Without getItemLayout, we limit our tail spacer to the _highestMeasuredFrameIndex to\n // prevent the user for hyperscrolling into un-measured area because otherwise content will\n // likely jump around as it renders in above the viewport.\n var isLastSpacer = section === lastSpacer;\n var constrainToMeasured = isLastSpacer && !this.props.getItemLayout;\n var last = constrainToMeasured ? clamp(section.first - 1, section.last, this._highestMeasuredFrameIndex) : section.last;\n var firstMetrics = this.__getFrameMetricsApprox(section.first, this.props);\n var lastMetrics = this.__getFrameMetricsApprox(last, this.props);\n var spacerSize = lastMetrics.offset + lastMetrics.length - firstMetrics.offset;\n cells.push( /*#__PURE__*/React.createElement(View, {\n key: \"$spacer-\" + section.first,\n style: {\n [spacerKey]: spacerSize\n }\n }));\n } else {\n this._pushCells(cells, stickyHeaderIndices, stickyIndicesFromProps, section.first, section.last, inversionStyle);\n }\n }\n if (!this._hasWarned.keys && _usedIndexForKey) {\n console.warn('VirtualizedList: missing keys for items, make sure to specify a key or id property on each ' + 'item or provide a custom keyExtractor.', _keylessItemComponentName);\n this._hasWarned.keys = true;\n }\n }\n\n // 3. Add cell for ListFooterComponent\n if (ListFooterComponent) {\n var _element3 = /*#__PURE__*/React.isValidElement(ListFooterComponent) ? ListFooterComponent :\n /*#__PURE__*/\n // $FlowFixMe[not-a-component]\n // $FlowFixMe[incompatible-type-arg]\n React.createElement(ListFooterComponent, null);\n cells.push( /*#__PURE__*/React.createElement(VirtualizedListCellContextProvider, {\n cellKey: this._getFooterCellKey(),\n key: \"$footer\"\n }, /*#__PURE__*/React.createElement(View, {\n onLayout: this._onLayoutFooter,\n style: [inversionStyle, this.props.ListFooterComponentStyle]\n },\n // $FlowFixMe[incompatible-type] - Typing ReactNativeComponent revealed errors\n _element3)));\n }\n\n // 4. Render the ScrollView\n var scrollProps = _objectSpread(_objectSpread({}, this.props), {}, {\n onContentSizeChange: this._onContentSizeChange,\n onLayout: this._onLayout,\n onScroll: this._onScroll,\n onScrollBeginDrag: this._onScrollBeginDrag,\n onScrollEndDrag: this._onScrollEndDrag,\n onMomentumScrollBegin: this._onMomentumScrollBegin,\n onMomentumScrollEnd: this._onMomentumScrollEnd,\n scrollEventThrottle: scrollEventThrottleOrDefault(this.props.scrollEventThrottle),\n // TODO: Android support\n invertStickyHeaders: this.props.invertStickyHeaders !== undefined ? this.props.invertStickyHeaders : this.props.inverted,\n stickyHeaderIndices,\n style: inversionStyle ? [inversionStyle, this.props.style] : this.props.style\n });\n this._hasMore = this.state.cellsAroundViewport.last < itemCount - 1;\n var innerRet = /*#__PURE__*/React.createElement(VirtualizedListContextProvider, {\n value: {\n cellKey: null,\n getScrollMetrics: this._getScrollMetrics,\n horizontal: horizontalOrDefault(this.props.horizontal),\n getOutermostParentListRef: this._getOutermostParentListRef,\n registerAsNestedChild: this._registerAsNestedChild,\n unregisterAsNestedChild: this._unregisterAsNestedChild\n }\n }, /*#__PURE__*/React.cloneElement((this.props.renderScrollComponent || this._defaultRenderScrollComponent)(scrollProps), {\n ref: this._captureScrollRef\n }, cells));\n var ret = innerRet;\n /* https://github.com/necolas/react-native-web/issues/2239: Re-enable when ScrollView.Context.Consumer is available.\n if (__DEV__) {\n ret = (\n \n {scrollContext => {\n if (\n scrollContext != null &&\n !scrollContext.horizontal ===\n !horizontalOrDefault(this.props.horizontal) &&\n !this._hasWarned.nesting &&\n this.context == null &&\n this.props.scrollEnabled !== false\n ) {\n // TODO (T46547044): use React.warn once 16.9 is sync'd: https://github.com/facebook/react/pull/15170\n console.error(\n 'VirtualizedLists should never be nested inside plain ScrollViews with the same ' +\n 'orientation because it can break windowing and other functionality - use another ' +\n 'VirtualizedList-backed container instead.',\n );\n this._hasWarned.nesting = true;\n }\n return innerRet;\n }}\n \n );\n }*/\n if (this.props.debug) {\n return /*#__PURE__*/React.createElement(View, {\n style: styles.debug\n }, ret, this._renderDebugOverlay());\n } else {\n return ret;\n }\n }\n componentDidUpdate(prevProps) {\n var _this$props7 = this.props,\n data = _this$props7.data,\n extraData = _this$props7.extraData;\n if (data !== prevProps.data || extraData !== prevProps.extraData) {\n // clear the viewableIndices cache to also trigger\n // the onViewableItemsChanged callback with the new data\n this._viewabilityTuples.forEach(tuple => {\n tuple.viewabilityHelper.resetViewableIndices();\n });\n }\n // The `this._hiPriInProgress` is guaranteeing a hiPri cell update will only happen\n // once per fiber update. The `_scheduleCellsToRenderUpdate` will set it to true\n // if a hiPri update needs to perform. If `componentDidUpdate` is triggered with\n // `this._hiPriInProgress=true`, means it's triggered by the hiPri update. The\n // `_scheduleCellsToRenderUpdate` will check this condition and not perform\n // another hiPri update.\n var hiPriInProgress = this._hiPriInProgress;\n this._scheduleCellsToRenderUpdate();\n // Make sure setting `this._hiPriInProgress` back to false after `componentDidUpdate`\n // is triggered with `this._hiPriInProgress = true`\n if (hiPriInProgress) {\n this._hiPriInProgress = false;\n }\n }\n _computeBlankness() {\n this._fillRateHelper.computeBlankness(this.props, this.state.cellsAroundViewport, this._scrollMetrics);\n }\n\n /* $FlowFixMe[missing-local-annot] The type annotation(s) required by Flow's\n * LTI update could not be added via codemod */\n\n _onCellFocusCapture(cellKey) {\n this._lastFocusedCellKey = cellKey;\n this._updateCellsToRender();\n }\n _triggerRemeasureForChildListsInCell(cellKey) {\n this._nestedChildLists.forEachInCell(cellKey, childList => {\n childList.measureLayoutRelativeToContainingList();\n });\n }\n measureLayoutRelativeToContainingList() {\n // TODO (T35574538): findNodeHandle sometimes crashes with \"Unable to find\n // node on an unmounted component\" during scrolling\n try {\n if (!this._scrollRef) {\n return;\n }\n // We are assuming that getOutermostParentListRef().getScrollRef()\n // is a non-null reference to a ScrollView\n this._scrollRef.measureLayout(this.context.getOutermostParentListRef().getScrollRef(), (x, y, width, height) => {\n this._offsetFromParentVirtualizedList = this._selectOffset({\n x,\n y\n });\n this._scrollMetrics.contentLength = this._selectLength({\n width,\n height\n });\n var scrollMetrics = this._convertParentScrollMetrics(this.context.getScrollMetrics());\n var metricsChanged = this._scrollMetrics.visibleLength !== scrollMetrics.visibleLength || this._scrollMetrics.offset !== scrollMetrics.offset;\n if (metricsChanged) {\n this._scrollMetrics.visibleLength = scrollMetrics.visibleLength;\n this._scrollMetrics.offset = scrollMetrics.offset;\n\n // If metrics of the scrollView changed, then we triggered remeasure for child list\n // to ensure VirtualizedList has the right information.\n this._nestedChildLists.forEach(childList => {\n childList.measureLayoutRelativeToContainingList();\n });\n }\n }, error => {\n console.warn(\"VirtualizedList: Encountered an error while measuring a list's\" + ' offset from its containing VirtualizedList.');\n });\n } catch (error) {\n console.warn('measureLayoutRelativeToContainingList threw an error', error.stack);\n }\n }\n _getFooterCellKey() {\n return this._getCellKey() + '-footer';\n }\n // $FlowFixMe[missing-local-annot]\n _renderDebugOverlay() {\n var normalize = this._scrollMetrics.visibleLength / (this._scrollMetrics.contentLength || 1);\n var framesInLayout = [];\n var itemCount = this.props.getItemCount(this.props.data);\n for (var ii = 0; ii < itemCount; ii++) {\n var frame = this.__getFrameMetricsApprox(ii, this.props);\n /* $FlowFixMe[prop-missing] (>=0.68.0 site=react_native_fb) This comment\n * suppresses an error found when Flow v0.68 was deployed. To see the\n * error delete this comment and run Flow. */\n if (frame.inLayout) {\n framesInLayout.push(frame);\n }\n }\n var windowTop = this.__getFrameMetricsApprox(this.state.cellsAroundViewport.first, this.props).offset;\n var frameLast = this.__getFrameMetricsApprox(this.state.cellsAroundViewport.last, this.props);\n var windowLen = frameLast.offset + frameLast.length - windowTop;\n var visTop = this._scrollMetrics.offset;\n var visLen = this._scrollMetrics.visibleLength;\n return /*#__PURE__*/React.createElement(View, {\n style: [styles.debugOverlayBase, styles.debugOverlay]\n }, framesInLayout.map((f, ii) => /*#__PURE__*/React.createElement(View, {\n key: 'f' + ii,\n style: [styles.debugOverlayBase, styles.debugOverlayFrame, {\n top: f.offset * normalize,\n height: f.length * normalize\n }]\n })), /*#__PURE__*/React.createElement(View, {\n style: [styles.debugOverlayBase, styles.debugOverlayFrameLast, {\n top: windowTop * normalize,\n height: windowLen * normalize\n }]\n }), /*#__PURE__*/React.createElement(View, {\n style: [styles.debugOverlayBase, styles.debugOverlayFrameVis, {\n top: visTop * normalize,\n height: visLen * normalize\n }]\n }));\n }\n _selectLength(metrics) {\n return !horizontalOrDefault(this.props.horizontal) ? metrics.height : metrics.width;\n }\n _selectOffset(metrics) {\n return !horizontalOrDefault(this.props.horizontal) ? metrics.y : metrics.x;\n }\n _maybeCallOnEdgeReached() {\n var _this$props8 = this.props,\n data = _this$props8.data,\n getItemCount = _this$props8.getItemCount,\n onStartReached = _this$props8.onStartReached,\n onStartReachedThreshold = _this$props8.onStartReachedThreshold,\n onEndReached = _this$props8.onEndReached,\n onEndReachedThreshold = _this$props8.onEndReachedThreshold,\n initialScrollIndex = _this$props8.initialScrollIndex;\n var _this$_scrollMetrics2 = this._scrollMetrics,\n contentLength = _this$_scrollMetrics2.contentLength,\n visibleLength = _this$_scrollMetrics2.visibleLength,\n offset = _this$_scrollMetrics2.offset;\n var distanceFromStart = offset;\n var distanceFromEnd = contentLength - visibleLength - offset;\n\n // Especially when oERT is zero it's necessary to 'floor' very small distance values to be 0\n // since debouncing causes us to not fire this event for every single \"pixel\" we scroll and can thus\n // be at the edge of the list with a distance approximating 0 but not quite there.\n if (distanceFromStart < ON_EDGE_REACHED_EPSILON) {\n distanceFromStart = 0;\n }\n if (distanceFromEnd < ON_EDGE_REACHED_EPSILON) {\n distanceFromEnd = 0;\n }\n\n // TODO: T121172172 Look into why we're \"defaulting\" to a threshold of 2px\n // when oERT is not present (different from 2 viewports used elsewhere)\n var DEFAULT_THRESHOLD_PX = 2;\n var startThreshold = onStartReachedThreshold != null ? onStartReachedThreshold * visibleLength : DEFAULT_THRESHOLD_PX;\n var endThreshold = onEndReachedThreshold != null ? onEndReachedThreshold * visibleLength : DEFAULT_THRESHOLD_PX;\n var isWithinStartThreshold = distanceFromStart <= startThreshold;\n var isWithinEndThreshold = distanceFromEnd <= endThreshold;\n\n // First check if the user just scrolled within the end threshold\n // and call onEndReached only once for a given content length,\n // and only if onStartReached is not being executed\n if (onEndReached && this.state.cellsAroundViewport.last === getItemCount(data) - 1 && isWithinEndThreshold && this._scrollMetrics.contentLength !== this._sentEndForContentLength) {\n this._sentEndForContentLength = this._scrollMetrics.contentLength;\n onEndReached({\n distanceFromEnd\n });\n }\n\n // Next check if the user just scrolled within the start threshold\n // and call onStartReached only once for a given content length,\n // and only if onEndReached is not being executed\n else if (onStartReached != null && this.state.cellsAroundViewport.first === 0 && isWithinStartThreshold && this._scrollMetrics.contentLength !== this._sentStartForContentLength) {\n // On initial mount when using initialScrollIndex the offset will be 0 initially\n // and will trigger an unexpected onStartReached. To avoid this we can use\n // timestamp to differentiate between the initial scroll metrics and when we actually\n // received the first scroll event.\n if (!initialScrollIndex || this._scrollMetrics.timestamp !== 0) {\n this._sentStartForContentLength = this._scrollMetrics.contentLength;\n onStartReached({\n distanceFromStart\n });\n }\n }\n\n // If the user scrolls away from the start or end and back again,\n // cause onStartReached or onEndReached to be triggered again\n else {\n this._sentStartForContentLength = isWithinStartThreshold ? this._sentStartForContentLength : 0;\n this._sentEndForContentLength = isWithinEndThreshold ? this._sentEndForContentLength : 0;\n }\n }\n _scheduleCellsToRenderUpdate() {\n var _this$state$cellsArou = this.state.cellsAroundViewport,\n first = _this$state$cellsArou.first,\n last = _this$state$cellsArou.last;\n var _this$_scrollMetrics3 = this._scrollMetrics,\n offset = _this$_scrollMetrics3.offset,\n visibleLength = _this$_scrollMetrics3.visibleLength,\n velocity = _this$_scrollMetrics3.velocity;\n var itemCount = this.props.getItemCount(this.props.data);\n var hiPri = false;\n var onStartReachedThreshold = onStartReachedThresholdOrDefault(this.props.onStartReachedThreshold);\n var onEndReachedThreshold = onEndReachedThresholdOrDefault(this.props.onEndReachedThreshold);\n // Mark as high priority if we're close to the start of the first item\n // But only if there are items before the first rendered item\n if (first > 0) {\n var distTop = offset - this.__getFrameMetricsApprox(first, this.props).offset;\n hiPri = distTop < 0 || velocity < -2 && distTop < getScrollingThreshold(onStartReachedThreshold, visibleLength);\n }\n // Mark as high priority if we're close to the end of the last item\n // But only if there are items after the last rendered item\n if (!hiPri && last >= 0 && last < itemCount - 1) {\n var distBottom = this.__getFrameMetricsApprox(last, this.props).offset - (offset + visibleLength);\n hiPri = distBottom < 0 || velocity > 2 && distBottom < getScrollingThreshold(onEndReachedThreshold, visibleLength);\n }\n // Only trigger high-priority updates if we've actually rendered cells,\n // and with that size estimate, accurately compute how many cells we should render.\n // Otherwise, it would just render as many cells as it can (of zero dimension),\n // each time through attempting to render more (limited by maxToRenderPerBatch),\n // starving the renderer from actually laying out the objects and computing _averageCellLength.\n // If this is triggered in an `componentDidUpdate` followed by a hiPri cellToRenderUpdate\n // We shouldn't do another hipri cellToRenderUpdate\n if (hiPri && (this._averageCellLength || this.props.getItemLayout) && !this._hiPriInProgress) {\n this._hiPriInProgress = true;\n // Don't worry about interactions when scrolling quickly; focus on filling content as fast\n // as possible.\n this._updateCellsToRenderBatcher.dispose({\n abort: true\n });\n this._updateCellsToRender();\n return;\n } else {\n this._updateCellsToRenderBatcher.schedule();\n }\n }\n _updateViewableItems(props, cellsAroundViewport) {\n this._viewabilityTuples.forEach(tuple => {\n tuple.viewabilityHelper.onUpdate(props, this._scrollMetrics.offset, this._scrollMetrics.visibleLength, this._getFrameMetrics, this._createViewToken, tuple.onViewableItemsChanged, cellsAroundViewport);\n });\n }\n}\nVirtualizedList.contextType = VirtualizedListContext;\nvar styles = StyleSheet.create({\n verticallyInverted: {\n transform: 'scaleY(-1)'\n },\n horizontallyInverted: {\n transform: 'scaleX(-1)'\n },\n debug: {\n flex: 1\n },\n debugOverlayBase: {\n position: 'absolute',\n top: 0,\n right: 0\n },\n debugOverlay: {\n bottom: 0,\n width: 20,\n borderColor: 'blue',\n borderWidth: 1\n },\n debugOverlayFrame: {\n left: 0,\n backgroundColor: 'orange'\n },\n debugOverlayFrameLast: {\n left: 0,\n borderColor: 'green',\n borderWidth: 2\n },\n debugOverlayFrameVis: {\n left: 0,\n borderColor: 'red',\n borderWidth: 2\n }\n});\nexport default VirtualizedList;","var unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n if (it) return (it = it.call(o)).next.bind(it);\n if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n return function () {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n };\n }\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _createForOfIteratorHelperLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"colors\", \"enabled\", \"onRefresh\", \"progressBackgroundColor\", \"progressViewOffset\", \"refreshing\", \"size\", \"tintColor\", \"title\", \"titleColor\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport View from '../View';\nimport React from 'react';\nfunction RefreshControl(props) {\n var colors = props.colors,\n enabled = props.enabled,\n onRefresh = props.onRefresh,\n progressBackgroundColor = props.progressBackgroundColor,\n progressViewOffset = props.progressViewOffset,\n refreshing = props.refreshing,\n size = props.size,\n tintColor = props.tintColor,\n title = props.title,\n titleColor = props.titleColor,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n return /*#__PURE__*/React.createElement(View, rest);\n}\nexport default RefreshControl;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"contentContainerStyle\", \"horizontal\", \"onContentSizeChange\", \"refreshControl\", \"stickyHeaderIndices\", \"pagingEnabled\", \"forwardedRef\", \"keyboardDismissMode\", \"onScroll\", \"centerContent\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport Dimensions from '../Dimensions';\nimport dismissKeyboard from '../../modules/dismissKeyboard';\nimport invariant from 'fbjs/lib/invariant';\nimport mergeRefs from '../../modules/mergeRefs';\nimport Platform from '../Platform';\nimport ScrollViewBase from './ScrollViewBase';\nimport StyleSheet from '../StyleSheet';\nimport TextInputState from '../../modules/TextInputState';\nimport UIManager from '../UIManager';\nimport View from '../View';\nimport React from 'react';\nimport warning from 'fbjs/lib/warning';\nvar emptyObject = {};\nvar IS_ANIMATING_TOUCH_START_THRESHOLD_MS = 16;\nclass ScrollView extends React.Component {\n constructor() {\n super(...arguments);\n this._scrollNodeRef = null;\n this._innerViewRef = null;\n this.isTouching = false;\n this.lastMomentumScrollBeginTime = 0;\n this.lastMomentumScrollEndTime = 0;\n this.observedScrollSinceBecomingResponder = false;\n this.becameResponderWhileAnimating = false;\n this.scrollResponderHandleScrollShouldSetResponder = () => {\n return this.isTouching;\n };\n this.scrollResponderHandleStartShouldSetResponderCapture = e => {\n // First see if we want to eat taps while the keyboard is up\n // var currentlyFocusedTextInput = TextInputState.currentlyFocusedField();\n // if (!this.props.keyboardShouldPersistTaps &&\n // currentlyFocusedTextInput != null &&\n // e.target !== currentlyFocusedTextInput) {\n // return true;\n // }\n return this.scrollResponderIsAnimating();\n };\n this.scrollResponderHandleTerminationRequest = () => {\n return !this.observedScrollSinceBecomingResponder;\n };\n this.scrollResponderHandleTouchEnd = e => {\n var nativeEvent = e.nativeEvent;\n this.isTouching = nativeEvent.touches.length !== 0;\n this.props.onTouchEnd && this.props.onTouchEnd(e);\n };\n this.scrollResponderHandleResponderRelease = e => {\n this.props.onResponderRelease && this.props.onResponderRelease(e);\n\n // By default scroll views will unfocus a textField\n // if another touch occurs outside of it\n var currentlyFocusedTextInput = TextInputState.currentlyFocusedField();\n if (!this.props.keyboardShouldPersistTaps && currentlyFocusedTextInput != null && e.target !== currentlyFocusedTextInput && !this.observedScrollSinceBecomingResponder && !this.becameResponderWhileAnimating) {\n this.props.onScrollResponderKeyboardDismissed && this.props.onScrollResponderKeyboardDismissed(e);\n TextInputState.blurTextInput(currentlyFocusedTextInput);\n }\n };\n this.scrollResponderHandleScroll = e => {\n this.observedScrollSinceBecomingResponder = true;\n this.props.onScroll && this.props.onScroll(e);\n };\n this.scrollResponderHandleResponderGrant = e => {\n this.observedScrollSinceBecomingResponder = false;\n this.props.onResponderGrant && this.props.onResponderGrant(e);\n this.becameResponderWhileAnimating = this.scrollResponderIsAnimating();\n };\n this.scrollResponderHandleScrollBeginDrag = e => {\n this.props.onScrollBeginDrag && this.props.onScrollBeginDrag(e);\n };\n this.scrollResponderHandleScrollEndDrag = e => {\n this.props.onScrollEndDrag && this.props.onScrollEndDrag(e);\n };\n this.scrollResponderHandleMomentumScrollBegin = e => {\n this.lastMomentumScrollBeginTime = Date.now();\n this.props.onMomentumScrollBegin && this.props.onMomentumScrollBegin(e);\n };\n this.scrollResponderHandleMomentumScrollEnd = e => {\n this.lastMomentumScrollEndTime = Date.now();\n this.props.onMomentumScrollEnd && this.props.onMomentumScrollEnd(e);\n };\n this.scrollResponderHandleTouchStart = e => {\n this.isTouching = true;\n this.props.onTouchStart && this.props.onTouchStart(e);\n };\n this.scrollResponderHandleTouchMove = e => {\n this.props.onTouchMove && this.props.onTouchMove(e);\n };\n this.scrollResponderIsAnimating = () => {\n var now = Date.now();\n var timeSinceLastMomentumScrollEnd = now - this.lastMomentumScrollEndTime;\n var isAnimating = timeSinceLastMomentumScrollEnd < IS_ANIMATING_TOUCH_START_THRESHOLD_MS || this.lastMomentumScrollEndTime < this.lastMomentumScrollBeginTime;\n return isAnimating;\n };\n this.scrollResponderScrollTo = (x, y, animated) => {\n if (typeof x === 'number') {\n console.warn('`scrollResponderScrollTo(x, y, animated)` is deprecated. Use `scrollResponderScrollTo({x: 5, y: 5, animated: true})` instead.');\n } else {\n var _ref = x || emptyObject;\n x = _ref.x;\n y = _ref.y;\n animated = _ref.animated;\n }\n var node = this.getScrollableNode();\n var left = x || 0;\n var top = y || 0;\n if (node != null) {\n if (typeof node.scroll === 'function') {\n node.scroll({\n top,\n left,\n behavior: !animated ? 'auto' : 'smooth'\n });\n } else {\n node.scrollLeft = left;\n node.scrollTop = top;\n }\n }\n };\n this.scrollResponderZoomTo = (rect, animated) => {\n if (Platform.OS !== 'ios') {\n invariant('zoomToRect is not implemented');\n }\n };\n this.scrollResponderScrollNativeHandleToKeyboard = (nodeHandle, additionalOffset, preventNegativeScrollOffset) => {\n this.additionalScrollOffset = additionalOffset || 0;\n this.preventNegativeScrollOffset = !!preventNegativeScrollOffset;\n UIManager.measureLayout(nodeHandle, this.getInnerViewNode(), this.scrollResponderTextInputFocusError, this.scrollResponderInputMeasureAndScrollToKeyboard);\n };\n this.scrollResponderInputMeasureAndScrollToKeyboard = (left, top, width, height) => {\n var keyboardScreenY = Dimensions.get('window').height;\n if (this.keyboardWillOpenTo) {\n keyboardScreenY = this.keyboardWillOpenTo.endCoordinates.screenY;\n }\n var scrollOffsetY = top - keyboardScreenY + height + this.additionalScrollOffset;\n\n // By default, this can scroll with negative offset, pulling the content\n // down so that the target component's bottom meets the keyboard's top.\n // If requested otherwise, cap the offset at 0 minimum to avoid content\n // shifting down.\n if (this.preventNegativeScrollOffset) {\n scrollOffsetY = Math.max(0, scrollOffsetY);\n }\n this.scrollResponderScrollTo({\n x: 0,\n y: scrollOffsetY,\n animated: true\n });\n this.additionalOffset = 0;\n this.preventNegativeScrollOffset = false;\n };\n this.scrollResponderKeyboardWillShow = e => {\n this.keyboardWillOpenTo = e;\n this.props.onKeyboardWillShow && this.props.onKeyboardWillShow(e);\n };\n this.scrollResponderKeyboardWillHide = e => {\n this.keyboardWillOpenTo = null;\n this.props.onKeyboardWillHide && this.props.onKeyboardWillHide(e);\n };\n this.scrollResponderKeyboardDidShow = e => {\n // TODO(7693961): The event for DidShow is not available on iOS yet.\n // Use the one from WillShow and do not assign.\n if (e) {\n this.keyboardWillOpenTo = e;\n }\n this.props.onKeyboardDidShow && this.props.onKeyboardDidShow(e);\n };\n this.scrollResponderKeyboardDidHide = e => {\n this.keyboardWillOpenTo = null;\n this.props.onKeyboardDidHide && this.props.onKeyboardDidHide(e);\n };\n this.flashScrollIndicators = () => {\n this.scrollResponderFlashScrollIndicators();\n };\n this.getScrollResponder = () => {\n return this;\n };\n this.getScrollableNode = () => {\n return this._scrollNodeRef;\n };\n this.getInnerViewRef = () => {\n return this._innerViewRef;\n };\n this.getInnerViewNode = () => {\n return this._innerViewRef;\n };\n this.getNativeScrollRef = () => {\n return this._scrollNodeRef;\n };\n this.scrollTo = (y, x, animated) => {\n if (typeof y === 'number') {\n console.warn('`scrollTo(y, x, animated)` is deprecated. Use `scrollTo({x: 5, y: 5, animated: true})` instead.');\n } else {\n var _ref2 = y || emptyObject;\n x = _ref2.x;\n y = _ref2.y;\n animated = _ref2.animated;\n }\n this.scrollResponderScrollTo({\n x: x || 0,\n y: y || 0,\n animated: animated !== false\n });\n };\n this.scrollToEnd = options => {\n // Default to true\n var animated = (options && options.animated) !== false;\n var horizontal = this.props.horizontal;\n var scrollResponderNode = this.getScrollableNode();\n var x = horizontal ? scrollResponderNode.scrollWidth : 0;\n var y = horizontal ? 0 : scrollResponderNode.scrollHeight;\n this.scrollResponderScrollTo({\n x,\n y,\n animated\n });\n };\n this._handleContentOnLayout = e => {\n var _e$nativeEvent$layout = e.nativeEvent.layout,\n width = _e$nativeEvent$layout.width,\n height = _e$nativeEvent$layout.height;\n this.props.onContentSizeChange(width, height);\n };\n this._handleScroll = e => {\n if (process.env.NODE_ENV !== 'production') {\n if (this.props.onScroll && this.props.scrollEventThrottle == null) {\n console.log('You specified `onScroll` on a but not ' + '`scrollEventThrottle`. You will only receive one event. ' + 'Using `16` you get all the events but be aware that it may ' + \"cause frame drops, use a bigger number if you don't need as \" + 'much precision.');\n }\n }\n if (this.props.keyboardDismissMode === 'on-drag') {\n dismissKeyboard();\n }\n this.scrollResponderHandleScroll(e);\n };\n this._setInnerViewRef = node => {\n this._innerViewRef = node;\n };\n this._setScrollNodeRef = node => {\n this._scrollNodeRef = node;\n // ScrollView needs to add more methods to the hostNode in addition to those\n // added by `usePlatformMethods`. This is temporarily until an API like\n // `ScrollView.scrollTo(hostNode, { x, y })` is added to React Native.\n if (node != null) {\n node.getScrollResponder = this.getScrollResponder;\n node.getInnerViewNode = this.getInnerViewNode;\n node.getInnerViewRef = this.getInnerViewRef;\n node.getNativeScrollRef = this.getNativeScrollRef;\n node.getScrollableNode = this.getScrollableNode;\n node.scrollTo = this.scrollTo;\n node.scrollToEnd = this.scrollToEnd;\n node.flashScrollIndicators = this.flashScrollIndicators;\n node.scrollResponderZoomTo = this.scrollResponderZoomTo;\n node.scrollResponderScrollNativeHandleToKeyboard = this.scrollResponderScrollNativeHandleToKeyboard;\n }\n var ref = mergeRefs(this.props.forwardedRef);\n ref(node);\n };\n }\n /**\n * Merely touch starting is not sufficient for a scroll view to become the\n * responder. Being the \"responder\" means that the very next touch move/end\n * event will result in an action/movement.\n *\n * Invoke this from an `onStartShouldSetResponder` event.\n *\n * `onStartShouldSetResponder` is used when the next move/end will trigger\n * some UI movement/action, but when you want to yield priority to views\n * nested inside of the view.\n *\n * There may be some cases where scroll views actually should return `true`\n * from `onStartShouldSetResponder`: Any time we are detecting a standard tap\n * that gives priority to nested views.\n *\n * - If a single tap on the scroll view triggers an action such as\n * recentering a map style view yet wants to give priority to interaction\n * views inside (such as dropped pins or labels), then we would return true\n * from this method when there is a single touch.\n *\n * - Similar to the previous case, if a two finger \"tap\" should trigger a\n * zoom, we would check the `touches` count, and if `>= 2`, we would return\n * true.\n *\n */\n scrollResponderHandleStartShouldSetResponder() {\n return false;\n }\n\n /**\n * There are times when the scroll view wants to become the responder\n * (meaning respond to the next immediate `touchStart/touchEnd`), in a way\n * that *doesn't* give priority to nested views (hence the capture phase):\n *\n * - Currently animating.\n * - Tapping anywhere that is not the focused input, while the keyboard is\n * up (which should dismiss the keyboard).\n *\n * Invoke this from an `onStartShouldSetResponderCapture` event.\n */\n\n /**\n * Invoke this from an `onResponderReject` event.\n *\n * Some other element is not yielding its role as responder. Normally, we'd\n * just disable the `UIScrollView`, but a touch has already began on it, the\n * `UIScrollView` will not accept being disabled after that. The easiest\n * solution for now is to accept the limitation of disallowing this\n * altogether. To improve this, find a way to disable the `UIScrollView` after\n * a touch has already started.\n */\n scrollResponderHandleResponderReject() {\n warning(false, \"ScrollView doesn't take rejection well - scrolls anyway\");\n }\n\n /**\n * We will allow the scroll view to give up its lock iff it acquired the lock\n * during an animation. This is a very useful default that happens to satisfy\n * many common user experiences.\n *\n * - Stop a scroll on the left edge, then turn that into an outer view's\n * backswipe.\n * - Stop a scroll mid-bounce at the top, continue pulling to have the outer\n * view dismiss.\n * - However, without catching the scroll view mid-bounce (while it is\n * motionless), if you drag far enough for the scroll view to become\n * responder (and therefore drag the scroll view a bit), any backswipe\n * navigation of a swipe gesture higher in the view hierarchy, should be\n * rejected.\n */\n\n /**\n * Displays the scroll indicators momentarily.\n */\n scrollResponderFlashScrollIndicators() {}\n\n /**\n * This method should be used as the callback to onFocus in a TextInputs'\n * parent view. Note that any module using this mixin needs to return\n * the parent view's ref in getScrollViewRef() in order to use this method.\n * @param {any} nodeHandle The TextInput node handle\n * @param {number} additionalOffset The scroll view's top \"contentInset\".\n * Default is 0.\n * @param {bool} preventNegativeScrolling Whether to allow pulling the content\n * down to make it meet the keyboard's top. Default is false.\n */\n\n scrollResponderTextInputFocusError(e) {\n console.error('Error measuring text field: ', e);\n }\n\n /**\n * Warning, this may be called several times for a single keyboard opening.\n * It's best to store the information in this method and then take any action\n * at a later point (either in `keyboardDidShow` or other).\n *\n * Here's the order that events occur in:\n * - focus\n * - willShow {startCoordinates, endCoordinates} several times\n * - didShow several times\n * - blur\n * - willHide {startCoordinates, endCoordinates} several times\n * - didHide several times\n *\n * The `ScrollResponder` providesModule callbacks for each of these events.\n * Even though any user could have easily listened to keyboard events\n * themselves, using these `props` callbacks ensures that ordering of events\n * is consistent - and not dependent on the order that the keyboard events are\n * subscribed to. This matters when telling the scroll view to scroll to where\n * the keyboard is headed - the scroll responder better have been notified of\n * the keyboard destination before being instructed to scroll to where the\n * keyboard will be. Stick to the `ScrollResponder` callbacks, and everything\n * will work.\n *\n * WARNING: These callbacks will fire even if a keyboard is displayed in a\n * different navigation pane. Filter out the events to determine if they are\n * relevant to you. (For example, only if you receive these callbacks after\n * you had explicitly focused a node etc).\n */\n\n render() {\n var _this$props = this.props,\n contentContainerStyle = _this$props.contentContainerStyle,\n horizontal = _this$props.horizontal,\n onContentSizeChange = _this$props.onContentSizeChange,\n refreshControl = _this$props.refreshControl,\n stickyHeaderIndices = _this$props.stickyHeaderIndices,\n pagingEnabled = _this$props.pagingEnabled,\n forwardedRef = _this$props.forwardedRef,\n keyboardDismissMode = _this$props.keyboardDismissMode,\n onScroll = _this$props.onScroll,\n centerContent = _this$props.centerContent,\n other = _objectWithoutPropertiesLoose(_this$props, _excluded);\n if (process.env.NODE_ENV !== 'production' && this.props.style) {\n var style = StyleSheet.flatten(this.props.style);\n var childLayoutProps = ['alignItems', 'justifyContent'].filter(prop => style && style[prop] !== undefined);\n invariant(childLayoutProps.length === 0, \"ScrollView child layout (\" + JSON.stringify(childLayoutProps) + \") \" + 'must be applied through the contentContainerStyle prop.');\n }\n var contentSizeChangeProps = {};\n if (onContentSizeChange) {\n contentSizeChangeProps = {\n onLayout: this._handleContentOnLayout\n };\n }\n var hasStickyHeaderIndices = !horizontal && Array.isArray(stickyHeaderIndices);\n var children = hasStickyHeaderIndices || pagingEnabled ? React.Children.map(this.props.children, (child, i) => {\n var isSticky = hasStickyHeaderIndices && stickyHeaderIndices.indexOf(i) > -1;\n if (child != null && (isSticky || pagingEnabled)) {\n return /*#__PURE__*/React.createElement(View, {\n style: [isSticky && styles.stickyHeader, pagingEnabled && styles.pagingEnabledChild]\n }, child);\n } else {\n return child;\n }\n }) : this.props.children;\n var contentContainer = /*#__PURE__*/React.createElement(View, _extends({}, contentSizeChangeProps, {\n children: children,\n collapsable: false,\n ref: this._setInnerViewRef,\n style: [horizontal && styles.contentContainerHorizontal, centerContent && styles.contentContainerCenterContent, contentContainerStyle]\n }));\n var baseStyle = horizontal ? styles.baseHorizontal : styles.baseVertical;\n var pagingEnabledStyle = horizontal ? styles.pagingEnabledHorizontal : styles.pagingEnabledVertical;\n var props = _objectSpread(_objectSpread({}, other), {}, {\n style: [baseStyle, pagingEnabled && pagingEnabledStyle, this.props.style],\n onTouchStart: this.scrollResponderHandleTouchStart,\n onTouchMove: this.scrollResponderHandleTouchMove,\n onTouchEnd: this.scrollResponderHandleTouchEnd,\n onScrollBeginDrag: this.scrollResponderHandleScrollBeginDrag,\n onScrollEndDrag: this.scrollResponderHandleScrollEndDrag,\n onMomentumScrollBegin: this.scrollResponderHandleMomentumScrollBegin,\n onMomentumScrollEnd: this.scrollResponderHandleMomentumScrollEnd,\n onStartShouldSetResponder: this.scrollResponderHandleStartShouldSetResponder,\n onStartShouldSetResponderCapture: this.scrollResponderHandleStartShouldSetResponderCapture,\n onScrollShouldSetResponder: this.scrollResponderHandleScrollShouldSetResponder,\n onScroll: this._handleScroll,\n onResponderGrant: this.scrollResponderHandleResponderGrant,\n onResponderTerminationRequest: this.scrollResponderHandleTerminationRequest,\n onResponderTerminate: this.scrollResponderHandleTerminate,\n onResponderRelease: this.scrollResponderHandleResponderRelease,\n onResponderReject: this.scrollResponderHandleResponderReject\n });\n var ScrollViewClass = ScrollViewBase;\n invariant(ScrollViewClass !== undefined, 'ScrollViewClass must not be undefined');\n var scrollView = /*#__PURE__*/React.createElement(ScrollViewClass, _extends({}, props, {\n ref: this._setScrollNodeRef\n }), contentContainer);\n if (refreshControl) {\n return /*#__PURE__*/React.cloneElement(refreshControl, {\n style: props.style\n }, scrollView);\n }\n return scrollView;\n }\n}\nvar commonStyle = {\n flexGrow: 1,\n flexShrink: 1,\n // Enable hardware compositing in modern browsers.\n // Creates a new layer with its own backing surface that can significantly\n // improve scroll performance.\n transform: 'translateZ(0)',\n // iOS native scrolling\n WebkitOverflowScrolling: 'touch'\n};\nvar styles = StyleSheet.create({\n baseVertical: _objectSpread(_objectSpread({}, commonStyle), {}, {\n flexDirection: 'column',\n overflowX: 'hidden',\n overflowY: 'auto'\n }),\n baseHorizontal: _objectSpread(_objectSpread({}, commonStyle), {}, {\n flexDirection: 'row',\n overflowX: 'auto',\n overflowY: 'hidden'\n }),\n contentContainerHorizontal: {\n flexDirection: 'row'\n },\n contentContainerCenterContent: {\n justifyContent: 'center',\n flexGrow: 1\n },\n stickyHeader: {\n position: 'sticky',\n top: 0,\n zIndex: 10\n },\n pagingEnabledHorizontal: {\n scrollSnapType: 'x mandatory'\n },\n pagingEnabledVertical: {\n scrollSnapType: 'y mandatory'\n },\n pagingEnabledChild: {\n scrollSnapAlign: 'start'\n }\n});\nvar ForwardedScrollView = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n return /*#__PURE__*/React.createElement(ScrollView, _extends({}, props, {\n forwardedRef: forwardedRef\n }));\n});\nForwardedScrollView.displayName = 'ScrollView';\nexport default ForwardedScrollView;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport TextInputState from '../TextInputState';\nvar dismissKeyboard = () => {\n TextInputState.blurTextInput(TextInputState.currentlyFocusedField());\n};\nexport default dismissKeyboard;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport UIManager from '../../exports/UIManager';\n\n/**\n * This class is responsible for coordinating the \"focused\"\n * state for TextInputs. All calls relating to the keyboard\n * should be funneled through here\n */\nvar TextInputState = {\n /**\n * Internal state\n */\n _currentlyFocusedNode: null,\n /**\n * Returns the ID of the currently focused text field, if one exists\n * If no text field is focused it returns null\n */\n currentlyFocusedField() {\n if (document.activeElement !== this._currentlyFocusedNode) {\n this._currentlyFocusedNode = null;\n }\n return this._currentlyFocusedNode;\n },\n /**\n * @param {Object} TextInputID id of the text field to focus\n * Focuses the specified text field\n * noop if the text field was already focused\n */\n focusTextInput(textFieldNode) {\n if (textFieldNode !== null) {\n this._currentlyFocusedNode = textFieldNode;\n if (document.activeElement !== textFieldNode) {\n UIManager.focus(textFieldNode);\n }\n }\n },\n /**\n * @param {Object} textFieldNode id of the text field to focus\n * Unfocuses the specified text field\n * noop if it wasn't focused\n */\n blurTextInput(textFieldNode) {\n if (textFieldNode !== null) {\n this._currentlyFocusedNode = null;\n if (document.activeElement === textFieldNode) {\n UIManager.blur(textFieldNode);\n }\n }\n }\n};\nexport default TextInputState;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"onScroll\", \"onTouchMove\", \"onWheel\", \"scrollEnabled\", \"scrollEventThrottle\", \"showsHorizontalScrollIndicator\", \"showsVerticalScrollIndicator\", \"style\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nimport useMergeRefs from '../../modules/useMergeRefs';\nfunction normalizeScrollEvent(e) {\n return {\n nativeEvent: {\n contentOffset: {\n get x() {\n return e.target.scrollLeft;\n },\n get y() {\n return e.target.scrollTop;\n }\n },\n contentSize: {\n get height() {\n return e.target.scrollHeight;\n },\n get width() {\n return e.target.scrollWidth;\n }\n },\n layoutMeasurement: {\n get height() {\n return e.target.offsetHeight;\n },\n get width() {\n return e.target.offsetWidth;\n }\n }\n },\n timeStamp: Date.now()\n };\n}\nfunction shouldEmitScrollEvent(lastTick, eventThrottle) {\n var timeSinceLastTick = Date.now() - lastTick;\n return eventThrottle > 0 && timeSinceLastTick >= eventThrottle;\n}\n\n/**\n * Encapsulates the Web-specific scroll throttling and disabling logic\n */\nvar ScrollViewBase = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n var onScroll = props.onScroll,\n onTouchMove = props.onTouchMove,\n onWheel = props.onWheel,\n _props$scrollEnabled = props.scrollEnabled,\n scrollEnabled = _props$scrollEnabled === void 0 ? true : _props$scrollEnabled,\n _props$scrollEventThr = props.scrollEventThrottle,\n scrollEventThrottle = _props$scrollEventThr === void 0 ? 0 : _props$scrollEventThr,\n showsHorizontalScrollIndicator = props.showsHorizontalScrollIndicator,\n showsVerticalScrollIndicator = props.showsVerticalScrollIndicator,\n style = props.style,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n var scrollState = React.useRef({\n isScrolling: false,\n scrollLastTick: 0\n });\n var scrollTimeout = React.useRef(null);\n var scrollRef = React.useRef(null);\n function createPreventableScrollHandler(handler) {\n return e => {\n if (scrollEnabled) {\n if (handler) {\n handler(e);\n }\n }\n };\n }\n function handleScroll(e) {\n e.stopPropagation();\n if (e.target === scrollRef.current) {\n e.persist();\n // A scroll happened, so the scroll resets the scrollend timeout.\n if (scrollTimeout.current != null) {\n clearTimeout(scrollTimeout.current);\n }\n scrollTimeout.current = setTimeout(() => {\n handleScrollEnd(e);\n }, 100);\n if (scrollState.current.isScrolling) {\n // Scroll last tick may have changed, check if we need to notify\n if (shouldEmitScrollEvent(scrollState.current.scrollLastTick, scrollEventThrottle)) {\n handleScrollTick(e);\n }\n } else {\n // Weren't scrolling, so we must have just started\n handleScrollStart(e);\n }\n }\n }\n function handleScrollStart(e) {\n scrollState.current.isScrolling = true;\n handleScrollTick(e);\n }\n function handleScrollTick(e) {\n scrollState.current.scrollLastTick = Date.now();\n if (onScroll) {\n onScroll(normalizeScrollEvent(e));\n }\n }\n function handleScrollEnd(e) {\n scrollState.current.isScrolling = false;\n if (onScroll) {\n onScroll(normalizeScrollEvent(e));\n }\n }\n var hideScrollbar = showsHorizontalScrollIndicator === false || showsVerticalScrollIndicator === false;\n return /*#__PURE__*/React.createElement(View, _extends({}, rest, {\n onScroll: handleScroll,\n onTouchMove: createPreventableScrollHandler(onTouchMove),\n onWheel: createPreventableScrollHandler(onWheel),\n ref: useMergeRefs(scrollRef, forwardedRef),\n style: [style, !scrollEnabled && styles.scrollDisabled, hideScrollbar && styles.hideScrollbar]\n }));\n});\n\n// Chrome doesn't support e.preventDefault in this case; touch-action must be\n// used to disable scrolling.\n// https://developers.google.com/web/updates/2017/01/scrolling-intervention\nvar styles = StyleSheet.create({\n scrollDisabled: {\n overflowX: 'hidden',\n overflowY: 'hidden',\n touchAction: 'none'\n },\n hideScrollbar: {\n scrollbarWidth: 'none'\n }\n});\nexport default ScrollViewBase;","/**\n * Copyright (c) 2014-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'use strict';\n\nvar emptyFunction = require(\"./emptyFunction\");\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\n\nfunction printWarning(format) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n\n if (typeof console !== 'undefined') {\n console.error(message);\n }\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\nvar warning = process.env.NODE_ENV !== \"production\" ? function (condition, format) {\n if (format === undefined) {\n throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n\n if (!condition) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n args[_key2 - 2] = arguments[_key2];\n }\n\n printWarning.apply(void 0, [format].concat(args));\n }\n} : emptyFunction;\nmodule.exports = warning;","\"use strict\";\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 */\nfunction makeEmptyFunction(arg) {\n return function () {\n return arg;\n };\n}\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\n\n\nvar emptyFunction = function emptyFunction() {};\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\n\nemptyFunction.thatReturnsThis = function () {\n return this;\n};\n\nemptyFunction.thatReturnsArgument = function (arg) {\n return arg;\n};\n\nmodule.exports = emptyFunction;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { findDOMNode } from 'react-dom';\n\n/**\n * @deprecated imperatively finding the DOM element of a react component has been deprecated in React 18.\n * You should use ref properties on the component instead.\n */\nvar findNodeHandle = component => {\n var node;\n try {\n node = findDOMNode(component);\n } catch (e) {}\n return node;\n};\nexport default findNodeHandle;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * \n */\n\n'use strict';\n\nimport InteractionManager from '../../../exports/InteractionManager';\n\n/**\n * A simple class for batching up invocations of a low-pri callback. A timeout is set to run the\n * callback once after a delay, no matter how many times it's scheduled. Once the delay is reached,\n * InteractionManager.runAfterInteractions is used to invoke the callback after any hi-pri\n * interactions are done running.\n *\n * Make sure to cleanup with dispose(). Example:\n *\n * class Widget extends React.Component {\n * _batchedSave: new Batchinator(() => this._saveState, 1000);\n * _saveSate() {\n * // save this.state to disk\n * }\n * componentDidUpdate() {\n * this._batchedSave.schedule();\n * }\n * componentWillUnmount() {\n * this._batchedSave.dispose();\n * }\n * ...\n * }\n */\nclass Batchinator {\n constructor(callback, delayMS) {\n this._delay = delayMS;\n this._callback = callback;\n }\n /*\n * Cleanup any pending tasks.\n *\n * By default, if there is a pending task the callback is run immediately. Set the option abort to\n * true to not call the callback if it was pending.\n */\n dispose(options) {\n if (options === void 0) {\n options = {\n abort: false\n };\n }\n if (this._taskHandle) {\n this._taskHandle.cancel();\n if (!options.abort) {\n this._callback();\n }\n this._taskHandle = null;\n }\n }\n schedule() {\n if (this._taskHandle) {\n return;\n }\n var timeoutHandle = setTimeout(() => {\n this._taskHandle = InteractionManager.runAfterInteractions(() => {\n // Note that we clear the handle before invoking the callback so that if the callback calls\n // schedule again, it will actually schedule another task.\n this._taskHandle = null;\n this._callback();\n });\n }, this._delay);\n this._taskHandle = {\n cancel: () => clearTimeout(timeoutHandle)\n };\n }\n}\nexport default Batchinator;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport invariant from 'fbjs/lib/invariant';\nimport TaskQueue from './TaskQueue';\nimport EventEmitter from '../../vendor/react-native/vendor/emitter/EventEmitter';\nimport requestIdleCallback from '../../modules/requestIdleCallback';\nvar _emitter = new EventEmitter();\nvar InteractionManager = {\n Events: {\n interactionStart: 'interactionStart',\n interactionComplete: 'interactionComplete'\n },\n /**\n * Schedule a function to run after all interactions have completed.\n */\n runAfterInteractions(task) {\n var tasks = [];\n var promise = new Promise(resolve => {\n _scheduleUpdate();\n if (task) {\n tasks.push(task);\n }\n tasks.push({\n run: resolve,\n name: 'resolve ' + (task && task.name || '?')\n });\n _taskQueue.enqueueTasks(tasks);\n });\n return {\n then: promise.then.bind(promise),\n done: promise.then.bind(promise),\n cancel: () => {\n _taskQueue.cancelTasks(tasks);\n }\n };\n },\n /**\n * Notify manager that an interaction has started.\n */\n createInteractionHandle() {\n _scheduleUpdate();\n var handle = ++_inc;\n _addInteractionSet.add(handle);\n return handle;\n },\n /**\n * Notify manager that an interaction has completed.\n */\n clearInteractionHandle(handle) {\n invariant(!!handle, 'Must provide a handle to clear.');\n _scheduleUpdate();\n _addInteractionSet.delete(handle);\n _deleteInteractionSet.add(handle);\n },\n addListener: _emitter.addListener.bind(_emitter),\n /**\n *\n * @param deadline\n */\n setDeadline(deadline) {\n _deadline = deadline;\n }\n};\nvar _interactionSet = new Set();\nvar _addInteractionSet = new Set();\nvar _deleteInteractionSet = new Set();\nvar _taskQueue = new TaskQueue({\n onMoreTasks: _scheduleUpdate\n});\nvar _nextUpdateHandle = 0;\nvar _inc = 0;\nvar _deadline = -1;\n\n/**\n * Schedule an asynchronous update to the interaction state.\n */\nfunction _scheduleUpdate() {\n if (!_nextUpdateHandle) {\n if (_deadline > 0) {\n _nextUpdateHandle = setTimeout(_processUpdate);\n } else {\n _nextUpdateHandle = requestIdleCallback(_processUpdate);\n }\n }\n}\n\n/**\n * Notify listeners, process queue, etc\n */\nfunction _processUpdate() {\n _nextUpdateHandle = 0;\n var interactionCount = _interactionSet.size;\n _addInteractionSet.forEach(handle => _interactionSet.add(handle));\n _deleteInteractionSet.forEach(handle => _interactionSet.delete(handle));\n var nextInteractionCount = _interactionSet.size;\n if (interactionCount !== 0 && nextInteractionCount === 0) {\n _emitter.emit(InteractionManager.Events.interactionComplete);\n } else if (interactionCount === 0 && nextInteractionCount !== 0) {\n _emitter.emit(InteractionManager.Events.interactionStart);\n }\n if (nextInteractionCount === 0) {\n // It seems that we can't know the running time of the current event loop,\n // we can only calculate the running time of the current task queue.\n var begin = Date.now();\n while (_taskQueue.hasTasksToProcess()) {\n _taskQueue.processNext();\n if (_deadline > 0 && Date.now() - begin >= _deadline) {\n _scheduleUpdate();\n break;\n }\n }\n }\n _addInteractionSet.clear();\n _deleteInteractionSet.clear();\n}\nexport default InteractionManager;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport invariant from 'fbjs/lib/invariant';\nclass TaskQueue {\n constructor(_ref) {\n var onMoreTasks = _ref.onMoreTasks;\n this._onMoreTasks = onMoreTasks;\n this._queueStack = [{\n tasks: [],\n popable: true\n }];\n }\n enqueue(task) {\n this._getCurrentQueue().push(task);\n }\n enqueueTasks(tasks) {\n tasks.forEach(task => this.enqueue(task));\n }\n cancelTasks(tasksToCancel) {\n this._queueStack = this._queueStack.map(queue => _objectSpread(_objectSpread({}, queue), {}, {\n tasks: queue.tasks.filter(task => tasksToCancel.indexOf(task) === -1)\n })).filter((queue, idx) => queue.tasks.length > 0 || idx === 0);\n }\n hasTasksToProcess() {\n return this._getCurrentQueue().length > 0;\n }\n\n /**\n * Executes the next task in the queue.\n */\n processNext() {\n var queue = this._getCurrentQueue();\n if (queue.length) {\n var task = queue.shift();\n try {\n if (typeof task === 'object' && task.gen) {\n this._genPromise(task);\n } else if (typeof task === 'object' && task.run) {\n task.run();\n } else {\n invariant(typeof task === 'function', 'Expected Function, SimpleTask, or PromiseTask, but got:\\n' + JSON.stringify(task, null, 2));\n task();\n }\n } catch (e) {\n e.message = 'TaskQueue: Error with task ' + (task.name || '') + ': ' + e.message;\n throw e;\n }\n }\n }\n _getCurrentQueue() {\n var stackIdx = this._queueStack.length - 1;\n var queue = this._queueStack[stackIdx];\n if (queue.popable && queue.tasks.length === 0 && stackIdx > 0) {\n this._queueStack.pop();\n return this._getCurrentQueue();\n } else {\n return queue.tasks;\n }\n }\n _genPromise(task) {\n var length = this._queueStack.push({\n tasks: [],\n popable: false\n });\n var stackIdx = length - 1;\n var stackItem = this._queueStack[stackIdx];\n task.gen().then(() => {\n stackItem.popable = true;\n this.hasTasksToProcess() && this._onMoreTasks();\n }).catch(ex => {\n setTimeout(() => {\n ex.message = \"TaskQueue: Error resolving Promise in task \" + task.name + \": \" + ex.message;\n throw ex;\n }, 0);\n });\n }\n}\nexport default TaskQueue;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n/**\n * EventEmitter manages listeners and publishes events to them.\n *\n * EventEmitter accepts a single type parameter that defines the valid events\n * and associated listener argument(s).\n *\n * @example\n *\n * const emitter = new EventEmitter<{\n * success: [number, string],\n * error: [Error],\n * }>();\n *\n * emitter.on('success', (statusCode, responseText) => {...});\n * emitter.emit('success', 200, '...');\n *\n * emitter.on('error', error => {...});\n * emitter.emit('error', new Error('Resource not found'));\n *\n */\nexport default class EventEmitter {\n constructor() {\n this._registry = {};\n }\n /**\n * Registers a listener that is called when the supplied event is emitted.\n * Returns a subscription that has a `remove` method to undo registration.\n */\n addListener(eventType, listener, context) {\n var registrations = allocate(this._registry, eventType);\n var registration = {\n context,\n listener,\n remove() {\n registrations.delete(registration);\n }\n };\n registrations.add(registration);\n return registration;\n }\n\n /**\n * Emits the supplied event. Additional arguments supplied to `emit` will be\n * passed through to each of the registered listeners.\n *\n * If a listener modifies the listeners registered for the same event, those\n * changes will not be reflected in the current invocation of `emit`.\n */\n emit(eventType) {\n var registrations = this._registry[eventType];\n if (registrations != null) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n for (var _i = 0, _arr = [...registrations]; _i < _arr.length; _i++) {\n var registration = _arr[_i];\n registration.listener.apply(registration.context, args);\n }\n }\n }\n\n /**\n * Removes all registered listeners.\n */\n removeAllListeners(eventType) {\n if (eventType == null) {\n this._registry = {};\n } else {\n delete this._registry[eventType];\n }\n }\n\n /**\n * Returns the number of registered listeners for the supplied event.\n */\n listenerCount(eventType) {\n var registrations = this._registry[eventType];\n return registrations == null ? 0 : registrations.size;\n }\n}\nfunction allocate(registry, eventType) {\n var registrations = registry[eventType];\n if (registrations == null) {\n registrations = new Set();\n registry[eventType] = registrations;\n }\n return registrations;\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\nimport canUseDOM from '../canUseDom';\nvar _requestIdleCallback = function _requestIdleCallback(cb, options) {\n return setTimeout(() => {\n var start = Date.now();\n cb({\n didTimeout: false,\n timeRemaining() {\n return Math.max(0, 50 - (Date.now() - start));\n }\n });\n }, 1);\n};\nvar _cancelIdleCallback = function _cancelIdleCallback(id) {\n clearTimeout(id);\n};\nvar isSupported = canUseDOM && typeof window.requestIdleCallback !== 'undefined';\nvar requestIdleCallback = isSupported ? window.requestIdleCallback : _requestIdleCallback;\nvar cancelIdleCallback = isSupported ? window.cancelIdleCallback : _cancelIdleCallback;\nexport default requestIdleCallback;\nexport { cancelIdleCallback };","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * \n */\n\n'use strict';\n\nfunction clamp(min, value, max) {\n if (value < min) {\n return min;\n }\n if (value > max) {\n return max;\n }\n return value;\n}\nmodule.exports = clamp;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * \n */\n\n'use strict';\n\n/**\n * Intentional info-level logging for clear separation from ad-hoc console debug logging.\n */\nfunction infoLog() {\n return console.log(...arguments);\n}\nexport default infoLog;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport invariant from 'fbjs/lib/invariant';\nexport class CellRenderMask {\n constructor(numCells) {\n invariant(numCells >= 0, 'CellRenderMask must contain a non-negative number os cells');\n this._numCells = numCells;\n if (numCells === 0) {\n this._regions = [];\n } else {\n this._regions = [{\n first: 0,\n last: numCells - 1,\n isSpacer: true\n }];\n }\n }\n enumerateRegions() {\n return this._regions;\n }\n addCells(cells) {\n invariant(cells.first >= 0 && cells.first < this._numCells && cells.last >= -1 && cells.last < this._numCells && cells.last >= cells.first - 1, 'CellRenderMask.addCells called with invalid cell range');\n\n // VirtualizedList uses inclusive ranges, where zero-count states are\n // possible. E.g. [0, -1] for no cells, starting at 0.\n if (cells.last < cells.first) {\n return;\n }\n var _this$_findRegion = this._findRegion(cells.first),\n firstIntersect = _this$_findRegion[0],\n firstIntersectIdx = _this$_findRegion[1];\n var _this$_findRegion2 = this._findRegion(cells.last),\n lastIntersect = _this$_findRegion2[0],\n lastIntersectIdx = _this$_findRegion2[1];\n\n // Fast-path if the cells to add are already all present in the mask. We\n // will otherwise need to do some mutation.\n if (firstIntersectIdx === lastIntersectIdx && !firstIntersect.isSpacer) {\n return;\n }\n\n // We need to replace the existing covered regions with 1-3 new regions\n // depending whether we need to split spacers out of overlapping regions.\n var newLeadRegion = [];\n var newTailRegion = [];\n var newMainRegion = _objectSpread(_objectSpread({}, cells), {}, {\n isSpacer: false\n });\n if (firstIntersect.first < newMainRegion.first) {\n if (firstIntersect.isSpacer) {\n newLeadRegion.push({\n first: firstIntersect.first,\n last: newMainRegion.first - 1,\n isSpacer: true\n });\n } else {\n newMainRegion.first = firstIntersect.first;\n }\n }\n if (lastIntersect.last > newMainRegion.last) {\n if (lastIntersect.isSpacer) {\n newTailRegion.push({\n first: newMainRegion.last + 1,\n last: lastIntersect.last,\n isSpacer: true\n });\n } else {\n newMainRegion.last = lastIntersect.last;\n }\n }\n var replacementRegions = [...newLeadRegion, newMainRegion, ...newTailRegion];\n var numRegionsToDelete = lastIntersectIdx - firstIntersectIdx + 1;\n this._regions.splice(firstIntersectIdx, numRegionsToDelete, ...replacementRegions);\n }\n numCells() {\n return this._numCells;\n }\n equals(other) {\n return this._numCells === other._numCells && this._regions.length === other._regions.length && this._regions.every((region, i) => region.first === other._regions[i].first && region.last === other._regions[i].last && region.isSpacer === other._regions[i].isSpacer);\n }\n _findRegion(cellIdx) {\n var firstIdx = 0;\n var lastIdx = this._regions.length - 1;\n while (firstIdx <= lastIdx) {\n var middleIdx = Math.floor((firstIdx + lastIdx) / 2);\n var middleRegion = this._regions[middleIdx];\n if (cellIdx >= middleRegion.first && cellIdx <= middleRegion.last) {\n return [middleRegion, middleIdx];\n } else if (cellIdx < middleRegion.first) {\n lastIdx = middleIdx - 1;\n } else if (cellIdx > middleRegion.last) {\n firstIdx = middleIdx + 1;\n }\n }\n invariant(false, \"A region was not found containing cellIdx \" + cellIdx);\n }\n}","import _createForOfIteratorHelperLoose from \"@babel/runtime/helpers/createForOfIteratorHelperLoose\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport invariant from 'fbjs/lib/invariant';\nexport default class ChildListCollection {\n constructor() {\n this._cellKeyToChildren = new Map();\n this._childrenToCellKey = new Map();\n }\n add(list, cellKey) {\n var _this$_cellKeyToChild;\n invariant(!this._childrenToCellKey.has(list), 'Trying to add already present child list');\n var cellLists = (_this$_cellKeyToChild = this._cellKeyToChildren.get(cellKey)) !== null && _this$_cellKeyToChild !== void 0 ? _this$_cellKeyToChild : new Set();\n cellLists.add(list);\n this._cellKeyToChildren.set(cellKey, cellLists);\n this._childrenToCellKey.set(list, cellKey);\n }\n remove(list) {\n var cellKey = this._childrenToCellKey.get(list);\n invariant(cellKey != null, 'Trying to remove non-present child list');\n this._childrenToCellKey.delete(list);\n var cellLists = this._cellKeyToChildren.get(cellKey);\n invariant(cellLists, '_cellKeyToChildren should contain cellKey');\n cellLists.delete(list);\n if (cellLists.size === 0) {\n this._cellKeyToChildren.delete(cellKey);\n }\n }\n forEach(fn) {\n for (var _iterator = _createForOfIteratorHelperLoose(this._cellKeyToChildren.values()), _step; !(_step = _iterator()).done;) {\n var listSet = _step.value;\n for (var _iterator2 = _createForOfIteratorHelperLoose(listSet), _step2; !(_step2 = _iterator2()).done;) {\n var list = _step2.value;\n fn(list);\n }\n }\n }\n forEachInCell(cellKey, fn) {\n var _this$_cellKeyToChild2;\n var listSet = (_this$_cellKeyToChild2 = this._cellKeyToChildren.get(cellKey)) !== null && _this$_cellKeyToChild2 !== void 0 ? _this$_cellKeyToChild2 : [];\n for (var _iterator3 = _createForOfIteratorHelperLoose(listSet), _step3; !(_step3 = _iterator3()).done;) {\n var list = _step3.value;\n fn(list);\n }\n }\n anyInCell(cellKey, fn) {\n var _this$_cellKeyToChild3;\n var listSet = (_this$_cellKeyToChild3 = this._cellKeyToChildren.get(cellKey)) !== null && _this$_cellKeyToChild3 !== void 0 ? _this$_cellKeyToChild3 : [];\n for (var _iterator4 = _createForOfIteratorHelperLoose(listSet), _step4; !(_step4 = _iterator4()).done;) {\n var list = _step4.value;\n if (fn(list)) {\n return true;\n }\n }\n return false;\n }\n size() {\n return this._childrenToCellKey.size;\n }\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nclass Info {\n constructor() {\n this.any_blank_count = 0;\n this.any_blank_ms = 0;\n this.any_blank_speed_sum = 0;\n this.mostly_blank_count = 0;\n this.mostly_blank_ms = 0;\n this.pixels_blank = 0;\n this.pixels_sampled = 0;\n this.pixels_scrolled = 0;\n this.total_time_spent = 0;\n this.sample_count = 0;\n }\n}\nvar DEBUG = false;\nvar _listeners = [];\nvar _minSampleCount = 10;\nvar _sampleRate = DEBUG ? 1 : null;\n\n/**\n * A helper class for detecting when the maximem fill rate of `VirtualizedList` is exceeded.\n * By default the sampling rate is set to zero and this will do nothing. If you want to collect\n * samples (e.g. to log them), make sure to call `FillRateHelper.setSampleRate(0.0-1.0)`.\n *\n * Listeners and sample rate are global for all `VirtualizedList`s - typical usage will combine with\n * `SceneTracker.getActiveScene` to determine the context of the events.\n */\nclass FillRateHelper {\n static addListener(callback) {\n if (_sampleRate === null) {\n console.warn('Call `FillRateHelper.setSampleRate` before `addListener`.');\n }\n _listeners.push(callback);\n return {\n remove: () => {\n _listeners = _listeners.filter(listener => callback !== listener);\n }\n };\n }\n static setSampleRate(sampleRate) {\n _sampleRate = sampleRate;\n }\n static setMinSampleCount(minSampleCount) {\n _minSampleCount = minSampleCount;\n }\n constructor(getFrameMetrics) {\n this._anyBlankStartTime = null;\n this._enabled = false;\n this._info = new Info();\n this._mostlyBlankStartTime = null;\n this._samplesStartTime = null;\n this._getFrameMetrics = getFrameMetrics;\n this._enabled = (_sampleRate || 0) > Math.random();\n this._resetData();\n }\n activate() {\n if (this._enabled && this._samplesStartTime == null) {\n DEBUG && console.debug('FillRateHelper: activate');\n this._samplesStartTime = global.performance.now();\n }\n }\n deactivateAndFlush() {\n if (!this._enabled) {\n return;\n }\n var start = this._samplesStartTime; // const for flow\n if (start == null) {\n DEBUG && console.debug('FillRateHelper: bail on deactivate with no start time');\n return;\n }\n if (this._info.sample_count < _minSampleCount) {\n // Don't bother with under-sampled events.\n this._resetData();\n return;\n }\n var total_time_spent = global.performance.now() - start;\n var info = _objectSpread(_objectSpread({}, this._info), {}, {\n total_time_spent\n });\n if (DEBUG) {\n var derived = {\n avg_blankness: this._info.pixels_blank / this._info.pixels_sampled,\n avg_speed: this._info.pixels_scrolled / (total_time_spent / 1000),\n avg_speed_when_any_blank: this._info.any_blank_speed_sum / this._info.any_blank_count,\n any_blank_per_min: this._info.any_blank_count / (total_time_spent / 1000 / 60),\n any_blank_time_frac: this._info.any_blank_ms / total_time_spent,\n mostly_blank_per_min: this._info.mostly_blank_count / (total_time_spent / 1000 / 60),\n mostly_blank_time_frac: this._info.mostly_blank_ms / total_time_spent\n };\n for (var key in derived) {\n // $FlowFixMe[prop-missing]\n derived[key] = Math.round(1000 * derived[key]) / 1000;\n }\n console.debug('FillRateHelper deactivateAndFlush: ', {\n derived,\n info\n });\n }\n _listeners.forEach(listener => listener(info));\n this._resetData();\n }\n computeBlankness(props, cellsAroundViewport, scrollMetrics) {\n if (!this._enabled || props.getItemCount(props.data) === 0 || cellsAroundViewport.last < cellsAroundViewport.first || this._samplesStartTime == null) {\n return 0;\n }\n var dOffset = scrollMetrics.dOffset,\n offset = scrollMetrics.offset,\n velocity = scrollMetrics.velocity,\n visibleLength = scrollMetrics.visibleLength;\n\n // Denominator metrics that we track for all events - most of the time there is no blankness and\n // we want to capture that.\n this._info.sample_count++;\n this._info.pixels_sampled += Math.round(visibleLength);\n this._info.pixels_scrolled += Math.round(Math.abs(dOffset));\n var scrollSpeed = Math.round(Math.abs(velocity) * 1000); // px / sec\n\n // Whether blank now or not, record the elapsed time blank if we were blank last time.\n var now = global.performance.now();\n if (this._anyBlankStartTime != null) {\n this._info.any_blank_ms += now - this._anyBlankStartTime;\n }\n this._anyBlankStartTime = null;\n if (this._mostlyBlankStartTime != null) {\n this._info.mostly_blank_ms += now - this._mostlyBlankStartTime;\n }\n this._mostlyBlankStartTime = null;\n var blankTop = 0;\n var first = cellsAroundViewport.first;\n var firstFrame = this._getFrameMetrics(first, props);\n while (first <= cellsAroundViewport.last && (!firstFrame || !firstFrame.inLayout)) {\n firstFrame = this._getFrameMetrics(first, props);\n first++;\n }\n // Only count blankTop if we aren't rendering the first item, otherwise we will count the header\n // as blank.\n if (firstFrame && first > 0) {\n blankTop = Math.min(visibleLength, Math.max(0, firstFrame.offset - offset));\n }\n var blankBottom = 0;\n var last = cellsAroundViewport.last;\n var lastFrame = this._getFrameMetrics(last, props);\n while (last >= cellsAroundViewport.first && (!lastFrame || !lastFrame.inLayout)) {\n lastFrame = this._getFrameMetrics(last, props);\n last--;\n }\n // Only count blankBottom if we aren't rendering the last item, otherwise we will count the\n // footer as blank.\n if (lastFrame && last < props.getItemCount(props.data) - 1) {\n var bottomEdge = lastFrame.offset + lastFrame.length;\n blankBottom = Math.min(visibleLength, Math.max(0, offset + visibleLength - bottomEdge));\n }\n var pixels_blank = Math.round(blankTop + blankBottom);\n var blankness = pixels_blank / visibleLength;\n if (blankness > 0) {\n this._anyBlankStartTime = now;\n this._info.any_blank_speed_sum += scrollSpeed;\n this._info.any_blank_count++;\n this._info.pixels_blank += pixels_blank;\n if (blankness > 0.5) {\n this._mostlyBlankStartTime = now;\n this._info.mostly_blank_count++;\n }\n } else if (scrollSpeed < 0.01 || Math.abs(dOffset) < 1) {\n this.deactivateAndFlush();\n }\n return blankness;\n }\n enabled() {\n return this._enabled;\n }\n _resetData() {\n this._anyBlankStartTime = null;\n this._info = new Info();\n this._mostlyBlankStartTime = null;\n this._samplesStartTime = null;\n }\n}\nexport default FillRateHelper;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport invariant from 'fbjs/lib/invariant';\nimport * as React from 'react';\n\n/**\n * `setState` is called asynchronously, and should not rely on the value of\n * `this.props` or `this.state`:\n * https://reactjs.org/docs/state-and-lifecycle.html#state-updates-may-be-asynchronous\n *\n * SafePureComponent adds runtime enforcement, to catch cases where these\n * variables are read in a state updater function, instead of the ones passed\n * in.\n */\nexport default class StateSafePureComponent extends React.PureComponent {\n constructor(props) {\n super(props);\n this._inAsyncStateUpdate = false;\n this._installSetStateHooks();\n }\n setState(partialState, callback) {\n if (typeof partialState === 'function') {\n super.setState((state, props) => {\n this._inAsyncStateUpdate = true;\n var ret;\n try {\n ret = partialState(state, props);\n } catch (err) {\n throw err;\n } finally {\n this._inAsyncStateUpdate = false;\n }\n return ret;\n }, callback);\n } else {\n super.setState(partialState, callback);\n }\n }\n _installSetStateHooks() {\n var that = this;\n var props = this.props,\n state = this.state;\n Object.defineProperty(this, 'props', {\n get() {\n invariant(!that._inAsyncStateUpdate, '\"this.props\" should not be accessed during state updates');\n return props;\n },\n set(newProps) {\n props = newProps;\n }\n });\n Object.defineProperty(this, 'state', {\n get() {\n invariant(!that._inAsyncStateUpdate, '\"this.state\" should not be acceessed during state updates');\n return state;\n },\n set(newState) {\n state = newState;\n }\n });\n }\n}","var superPropBase = require(\"./superPropBase.js\");\nfunction _get() {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n module.exports = _get = Reflect.get.bind(), module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n } else {\n module.exports = _get = function _get(target, property, receiver) {\n var base = superPropBase(target, property);\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n if (desc.get) {\n return desc.get.call(arguments.length < 3 ? target : receiver);\n }\n return desc.value;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n }\n return _get.apply(this, arguments);\n}\nmodule.exports = _get, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var getPrototypeOf = require(\"./getPrototypeOf.js\");\nfunction _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = getPrototypeOf(object);\n if (object === null) break;\n }\n return object;\n}\nmodule.exports = _superPropBase, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _createForOfIteratorHelperLoose from \"@babel/runtime/helpers/createForOfIteratorHelperLoose\";\nimport invariant from 'fbjs/lib/invariant';\n/**\n * A Utility class for calculating viewable items based on current metrics like scroll position and\n * layout.\n *\n * An item is said to be in a \"viewable\" state when any of the following\n * is true for longer than `minimumViewTime` milliseconds (after an interaction if `waitForInteraction`\n * is true):\n *\n * - Occupying >= `viewAreaCoveragePercentThreshold` of the view area XOR fraction of the item\n * visible in the view area >= `itemVisiblePercentThreshold`.\n * - Entirely visible on screen\n */\nclass ViewabilityHelper {\n constructor(config) {\n if (config === void 0) {\n config = {\n viewAreaCoveragePercentThreshold: 0\n };\n }\n this._hasInteracted = false;\n this._timers = new Set();\n this._viewableIndices = [];\n this._viewableItems = new Map();\n this._config = config;\n }\n\n /**\n * Cleanup, e.g. on unmount. Clears any pending timers.\n */\n dispose() {\n /* $FlowFixMe[incompatible-call] (>=0.63.0 site=react_native_fb) This\n * comment suppresses an error found when Flow v0.63 was deployed. To see\n * the error delete this comment and run Flow. */\n this._timers.forEach(clearTimeout);\n }\n\n /**\n * Determines which items are viewable based on the current metrics and config.\n */\n computeViewableItems(props, scrollOffset, viewportHeight, getFrameMetrics,\n // Optional optimization to reduce the scan size\n renderRange) {\n var itemCount = props.getItemCount(props.data);\n var _this$_config = this._config,\n itemVisiblePercentThreshold = _this$_config.itemVisiblePercentThreshold,\n viewAreaCoveragePercentThreshold = _this$_config.viewAreaCoveragePercentThreshold;\n var viewAreaMode = viewAreaCoveragePercentThreshold != null;\n var viewablePercentThreshold = viewAreaMode ? viewAreaCoveragePercentThreshold : itemVisiblePercentThreshold;\n invariant(viewablePercentThreshold != null && itemVisiblePercentThreshold != null !== (viewAreaCoveragePercentThreshold != null), 'Must set exactly one of itemVisiblePercentThreshold or viewAreaCoveragePercentThreshold');\n var viewableIndices = [];\n if (itemCount === 0) {\n return viewableIndices;\n }\n var firstVisible = -1;\n var _ref = renderRange || {\n first: 0,\n last: itemCount - 1\n },\n first = _ref.first,\n last = _ref.last;\n if (last >= itemCount) {\n console.warn('Invalid render range computing viewability ' + JSON.stringify({\n renderRange,\n itemCount\n }));\n return [];\n }\n for (var idx = first; idx <= last; idx++) {\n var metrics = getFrameMetrics(idx, props);\n if (!metrics) {\n continue;\n }\n var top = metrics.offset - scrollOffset;\n var bottom = top + metrics.length;\n if (top < viewportHeight && bottom > 0) {\n firstVisible = idx;\n if (_isViewable(viewAreaMode, viewablePercentThreshold, top, bottom, viewportHeight, metrics.length)) {\n viewableIndices.push(idx);\n }\n } else if (firstVisible >= 0) {\n break;\n }\n }\n return viewableIndices;\n }\n\n /**\n * Figures out which items are viewable and how that has changed from before and calls\n * `onViewableItemsChanged` as appropriate.\n */\n onUpdate(props, scrollOffset, viewportHeight, getFrameMetrics, createViewToken, onViewableItemsChanged,\n // Optional optimization to reduce the scan size\n renderRange) {\n var itemCount = props.getItemCount(props.data);\n if (this._config.waitForInteraction && !this._hasInteracted || itemCount === 0 || !getFrameMetrics(0, props)) {\n return;\n }\n var viewableIndices = [];\n if (itemCount) {\n viewableIndices = this.computeViewableItems(props, scrollOffset, viewportHeight, getFrameMetrics, renderRange);\n }\n if (this._viewableIndices.length === viewableIndices.length && this._viewableIndices.every((v, ii) => v === viewableIndices[ii])) {\n // We might get a lot of scroll events where visibility doesn't change and we don't want to do\n // extra work in those cases.\n return;\n }\n this._viewableIndices = viewableIndices;\n if (this._config.minimumViewTime) {\n var handle = setTimeout(() => {\n /* $FlowFixMe[incompatible-call] (>=0.63.0 site=react_native_fb) This\n * comment suppresses an error found when Flow v0.63 was deployed. To\n * see the error delete this comment and run Flow. */\n this._timers.delete(handle);\n this._onUpdateSync(props, viewableIndices, onViewableItemsChanged, createViewToken);\n }, this._config.minimumViewTime);\n /* $FlowFixMe[incompatible-call] (>=0.63.0 site=react_native_fb) This\n * comment suppresses an error found when Flow v0.63 was deployed. To see\n * the error delete this comment and run Flow. */\n this._timers.add(handle);\n } else {\n this._onUpdateSync(props, viewableIndices, onViewableItemsChanged, createViewToken);\n }\n }\n\n /**\n * clean-up cached _viewableIndices to evaluate changed items on next update\n */\n resetViewableIndices() {\n this._viewableIndices = [];\n }\n\n /**\n * Records that an interaction has happened even if there has been no scroll.\n */\n recordInteraction() {\n this._hasInteracted = true;\n }\n _onUpdateSync(props, viewableIndicesToCheck, onViewableItemsChanged, createViewToken) {\n // Filter out indices that have gone out of view since this call was scheduled.\n viewableIndicesToCheck = viewableIndicesToCheck.filter(ii => this._viewableIndices.includes(ii));\n var prevItems = this._viewableItems;\n var nextItems = new Map(viewableIndicesToCheck.map(ii => {\n var viewable = createViewToken(ii, true, props);\n return [viewable.key, viewable];\n }));\n var changed = [];\n for (var _iterator = _createForOfIteratorHelperLoose(nextItems), _step; !(_step = _iterator()).done;) {\n var _step$value = _step.value,\n key = _step$value[0],\n viewable = _step$value[1];\n if (!prevItems.has(key)) {\n changed.push(viewable);\n }\n }\n for (var _iterator2 = _createForOfIteratorHelperLoose(prevItems), _step2; !(_step2 = _iterator2()).done;) {\n var _step2$value = _step2.value,\n _key = _step2$value[0],\n _viewable = _step2$value[1];\n if (!nextItems.has(_key)) {\n changed.push(_objectSpread(_objectSpread({}, _viewable), {}, {\n isViewable: false\n }));\n }\n }\n if (changed.length > 0) {\n this._viewableItems = nextItems;\n onViewableItemsChanged({\n viewableItems: Array.from(nextItems.values()),\n changed,\n viewabilityConfig: this._config\n });\n }\n }\n}\nfunction _isViewable(viewAreaMode, viewablePercentThreshold, top, bottom, viewportHeight, itemLength) {\n if (_isEntirelyVisible(top, bottom, viewportHeight)) {\n return true;\n } else {\n var pixels = _getPixelsVisible(top, bottom, viewportHeight);\n var percent = 100 * (viewAreaMode ? pixels / viewportHeight : pixels / itemLength);\n return percent >= viewablePercentThreshold;\n }\n}\nfunction _getPixelsVisible(top, bottom, viewportHeight) {\n var visibleHeight = Math.min(bottom, viewportHeight) - Math.max(top, 0);\n return Math.max(0, visibleHeight);\n}\nfunction _isEntirelyVisible(top, bottom, viewportHeight) {\n return top >= 0 && bottom <= viewportHeight && bottom > top;\n}\nexport default ViewabilityHelper;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport View from '../../../exports/View';\nimport StyleSheet from '../../../exports/StyleSheet';\nimport { VirtualizedListCellContextProvider } from './VirtualizedListContext.js';\nimport invariant from 'fbjs/lib/invariant';\nimport * as React from 'react';\nexport default class CellRenderer extends React.Component {\n constructor() {\n super(...arguments);\n this.state = {\n separatorProps: {\n highlighted: false,\n leadingItem: this.props.item\n }\n };\n this._separators = {\n highlight: () => {\n var _this$props = this.props,\n cellKey = _this$props.cellKey,\n prevCellKey = _this$props.prevCellKey;\n this.props.onUpdateSeparators([cellKey, prevCellKey], {\n highlighted: true\n });\n },\n unhighlight: () => {\n var _this$props2 = this.props,\n cellKey = _this$props2.cellKey,\n prevCellKey = _this$props2.prevCellKey;\n this.props.onUpdateSeparators([cellKey, prevCellKey], {\n highlighted: false\n });\n },\n updateProps: (select, newProps) => {\n var _this$props3 = this.props,\n cellKey = _this$props3.cellKey,\n prevCellKey = _this$props3.prevCellKey;\n this.props.onUpdateSeparators([select === 'leading' ? prevCellKey : cellKey], newProps);\n }\n };\n this._onLayout = nativeEvent => {\n this.props.onCellLayout && this.props.onCellLayout(nativeEvent, this.props.cellKey, this.props.index);\n };\n }\n static getDerivedStateFromProps(props, prevState) {\n return {\n separatorProps: _objectSpread(_objectSpread({}, prevState.separatorProps), {}, {\n leadingItem: props.item\n })\n };\n }\n\n // TODO: consider factoring separator stuff out of VirtualizedList into FlatList since it's not\n // reused by SectionList and we can keep VirtualizedList simpler.\n // $FlowFixMe[missing-local-annot]\n\n updateSeparatorProps(newProps) {\n this.setState(state => ({\n separatorProps: _objectSpread(_objectSpread({}, state.separatorProps), newProps)\n }));\n }\n componentWillUnmount() {\n this.props.onUnmount(this.props.cellKey);\n }\n _renderElement(renderItem, ListItemComponent, item, index) {\n if (renderItem && ListItemComponent) {\n console.warn('VirtualizedList: Both ListItemComponent and renderItem props are present. ListItemComponent will take' + ' precedence over renderItem.');\n }\n if (ListItemComponent) {\n /* $FlowFixMe[not-a-component] (>=0.108.0 site=react_native_fb) This\n * comment suppresses an error found when Flow v0.108 was deployed. To\n * see the error, delete this comment and run Flow. */\n /* $FlowFixMe[incompatible-type-arg] (>=0.108.0 site=react_native_fb)\n * This comment suppresses an error found when Flow v0.108 was deployed.\n * To see the error, delete this comment and run Flow. */\n return /*#__PURE__*/React.createElement(ListItemComponent, {\n item,\n index,\n separators: this._separators\n });\n }\n if (renderItem) {\n return renderItem({\n item,\n index,\n separators: this._separators\n });\n }\n invariant(false, 'VirtualizedList: Either ListItemComponent or renderItem props are required but none were found.');\n }\n render() {\n var _this$props4 = this.props,\n CellRendererComponent = _this$props4.CellRendererComponent,\n ItemSeparatorComponent = _this$props4.ItemSeparatorComponent,\n ListItemComponent = _this$props4.ListItemComponent,\n cellKey = _this$props4.cellKey,\n horizontal = _this$props4.horizontal,\n item = _this$props4.item,\n index = _this$props4.index,\n inversionStyle = _this$props4.inversionStyle,\n onCellFocusCapture = _this$props4.onCellFocusCapture,\n onCellLayout = _this$props4.onCellLayout,\n renderItem = _this$props4.renderItem;\n var element = this._renderElement(renderItem, ListItemComponent, item, index);\n\n // NOTE: that when this is a sticky header, `onLayout` will get automatically extracted and\n // called explicitly by `ScrollViewStickyHeader`.\n var itemSeparator = /*#__PURE__*/React.isValidElement(ItemSeparatorComponent) ?\n // $FlowFixMe[incompatible-type]\n ItemSeparatorComponent :\n // $FlowFixMe[incompatible-type]\n ItemSeparatorComponent && /*#__PURE__*/React.createElement(ItemSeparatorComponent, this.state.separatorProps);\n var cellStyle = inversionStyle ? horizontal ? [styles.rowReverse, inversionStyle] : [styles.columnReverse, inversionStyle] : horizontal ? [styles.row, inversionStyle] : inversionStyle;\n var result = !CellRendererComponent ? /*#__PURE__*/React.createElement(View, _extends({\n style: cellStyle,\n onFocusCapture: onCellFocusCapture\n }, onCellLayout && {\n onLayout: this._onLayout\n }), element, itemSeparator) : /*#__PURE__*/React.createElement(CellRendererComponent, _extends({\n cellKey: cellKey,\n index: index,\n item: item,\n style: cellStyle,\n onFocusCapture: onCellFocusCapture\n }, onCellLayout && {\n onLayout: this._onLayout\n }), element, itemSeparator);\n return /*#__PURE__*/React.createElement(VirtualizedListCellContextProvider, {\n cellKey: this.props.cellKey\n }, result);\n }\n}\nvar styles = StyleSheet.create({\n row: {\n flexDirection: 'row'\n },\n rowReverse: {\n flexDirection: 'row-reverse'\n },\n columnReverse: {\n flexDirection: 'column-reverse'\n }\n});","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport * as React from 'react';\nimport { useContext, useMemo } from 'react';\nvar __DEV__ = process.env.NODE_ENV !== 'production';\nexport var VirtualizedListContext = /*#__PURE__*/React.createContext(null);\nif (__DEV__) {\n VirtualizedListContext.displayName = 'VirtualizedListContext';\n}\n\n/**\n * Resets the context. Intended for use by portal-like components (e.g. Modal).\n */\nexport function VirtualizedListContextResetter(_ref) {\n var children = _ref.children;\n return /*#__PURE__*/React.createElement(VirtualizedListContext.Provider, {\n value: null\n }, children);\n}\n\n/**\n * Sets the context with memoization. Intended to be used by `VirtualizedList`.\n */\nexport function VirtualizedListContextProvider(_ref2) {\n var children = _ref2.children,\n value = _ref2.value;\n // Avoid setting a newly created context object if the values are identical.\n var context = useMemo(() => ({\n cellKey: null,\n getScrollMetrics: value.getScrollMetrics,\n horizontal: value.horizontal,\n getOutermostParentListRef: value.getOutermostParentListRef,\n registerAsNestedChild: value.registerAsNestedChild,\n unregisterAsNestedChild: value.unregisterAsNestedChild\n }), [value.getScrollMetrics, value.horizontal, value.getOutermostParentListRef, value.registerAsNestedChild, value.unregisterAsNestedChild]);\n return /*#__PURE__*/React.createElement(VirtualizedListContext.Provider, {\n value: context\n }, children);\n}\n\n/**\n * Sets the `cellKey`. Intended to be used by `VirtualizedList` for each cell.\n */\nexport function VirtualizedListCellContextProvider(_ref3) {\n var cellKey = _ref3.cellKey,\n children = _ref3.children;\n // Avoid setting a newly created context object if the values are identical.\n var currContext = useContext(VirtualizedListContext);\n var context = useMemo(() => currContext == null ? null : _objectSpread(_objectSpread({}, currContext), {}, {\n cellKey\n }), [currContext, cellKey]);\n return /*#__PURE__*/React.createElement(VirtualizedListContext.Provider, {\n value: context\n }, children);\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\n/**\n * Used to find the indices of the frames that overlap the given offsets. Useful for finding the\n * items that bound different windows of content, such as the visible area or the buffered overscan\n * area.\n */\nexport function elementsThatOverlapOffsets(offsets, props, getFrameMetrics, zoomScale) {\n if (zoomScale === void 0) {\n zoomScale = 1;\n }\n var itemCount = props.getItemCount(props.data);\n var result = [];\n for (var offsetIndex = 0; offsetIndex < offsets.length; offsetIndex++) {\n var currentOffset = offsets[offsetIndex];\n var left = 0;\n var right = itemCount - 1;\n while (left <= right) {\n // eslint-disable-next-line no-bitwise\n var mid = left + (right - left >>> 1);\n var frame = getFrameMetrics(mid, props);\n var scaledOffsetStart = frame.offset * zoomScale;\n var scaledOffsetEnd = (frame.offset + frame.length) * zoomScale;\n\n // We want the first frame that contains the offset, with inclusive bounds. Thus, for the\n // first frame the scaledOffsetStart is inclusive, while for other frames it is exclusive.\n if (mid === 0 && currentOffset < scaledOffsetStart || mid !== 0 && currentOffset <= scaledOffsetStart) {\n right = mid - 1;\n } else if (currentOffset > scaledOffsetEnd) {\n left = mid + 1;\n } else {\n result[offsetIndex] = mid;\n break;\n }\n }\n }\n return result;\n}\n\n/**\n * Computes the number of elements in the `next` range that are new compared to the `prev` range.\n * Handy for calculating how many new items will be rendered when the render window changes so we\n * can restrict the number of new items render at once so that content can appear on the screen\n * faster.\n */\nexport function newRangeCount(prev, next) {\n return next.last - next.first + 1 - Math.max(0, 1 + Math.min(next.last, prev.last) - Math.max(next.first, prev.first));\n}\n\n/**\n * Custom logic for determining which items should be rendered given the current frame and scroll\n * metrics, as well as the previous render state. The algorithm may evolve over time, but generally\n * prioritizes the visible area first, then expands that with overscan regions ahead and behind,\n * biased in the direction of scroll.\n */\nexport function computeWindowedRenderLimits(props, maxToRenderPerBatch, windowSize, prev, getFrameMetricsApprox, scrollMetrics) {\n var itemCount = props.getItemCount(props.data);\n if (itemCount === 0) {\n return {\n first: 0,\n last: -1\n };\n }\n var offset = scrollMetrics.offset,\n velocity = scrollMetrics.velocity,\n visibleLength = scrollMetrics.visibleLength,\n _scrollMetrics$zoomSc = scrollMetrics.zoomScale,\n zoomScale = _scrollMetrics$zoomSc === void 0 ? 1 : _scrollMetrics$zoomSc;\n\n // Start with visible area, then compute maximum overscan region by expanding from there, biased\n // in the direction of scroll. Total overscan area is capped, which should cap memory consumption\n // too.\n var visibleBegin = Math.max(0, offset);\n var visibleEnd = visibleBegin + visibleLength;\n var overscanLength = (windowSize - 1) * visibleLength;\n\n // Considering velocity seems to introduce more churn than it's worth.\n var leadFactor = 0.5; // Math.max(0, Math.min(1, velocity / 25 + 0.5));\n\n var fillPreference = velocity > 1 ? 'after' : velocity < -1 ? 'before' : 'none';\n var overscanBegin = Math.max(0, visibleBegin - (1 - leadFactor) * overscanLength);\n var overscanEnd = Math.max(0, visibleEnd + leadFactor * overscanLength);\n var lastItemOffset = getFrameMetricsApprox(itemCount - 1, props).offset * zoomScale;\n if (lastItemOffset < overscanBegin) {\n // Entire list is before our overscan window\n return {\n first: Math.max(0, itemCount - 1 - maxToRenderPerBatch),\n last: itemCount - 1\n };\n }\n\n // Find the indices that correspond to the items at the render boundaries we're targeting.\n var _elementsThatOverlapO = elementsThatOverlapOffsets([overscanBegin, visibleBegin, visibleEnd, overscanEnd], props, getFrameMetricsApprox, zoomScale),\n overscanFirst = _elementsThatOverlapO[0],\n first = _elementsThatOverlapO[1],\n last = _elementsThatOverlapO[2],\n overscanLast = _elementsThatOverlapO[3];\n overscanFirst = overscanFirst == null ? 0 : overscanFirst;\n first = first == null ? Math.max(0, overscanFirst) : first;\n overscanLast = overscanLast == null ? itemCount - 1 : overscanLast;\n last = last == null ? Math.min(overscanLast, first + maxToRenderPerBatch - 1) : last;\n var visible = {\n first,\n last\n };\n\n // We want to limit the number of new cells we're rendering per batch so that we can fill the\n // content on the screen quickly. If we rendered the entire overscan window at once, the user\n // could be staring at white space for a long time waiting for a bunch of offscreen content to\n // render.\n var newCellCount = newRangeCount(prev, visible);\n while (true) {\n if (first <= overscanFirst && last >= overscanLast) {\n // If we fill the entire overscan range, we're done.\n break;\n }\n var maxNewCells = newCellCount >= maxToRenderPerBatch;\n var firstWillAddMore = first <= prev.first || first > prev.last;\n var firstShouldIncrement = first > overscanFirst && (!maxNewCells || !firstWillAddMore);\n var lastWillAddMore = last >= prev.last || last < prev.first;\n var lastShouldIncrement = last < overscanLast && (!maxNewCells || !lastWillAddMore);\n if (maxNewCells && !firstShouldIncrement && !lastShouldIncrement) {\n // We only want to stop if we've hit maxNewCells AND we cannot increment first or last\n // without rendering new items. This let's us preserve as many already rendered items as\n // possible, reducing render churn and keeping the rendered overscan range as large as\n // possible.\n break;\n }\n if (firstShouldIncrement && !(fillPreference === 'after' && lastShouldIncrement && lastWillAddMore)) {\n if (firstWillAddMore) {\n newCellCount++;\n }\n first--;\n }\n if (lastShouldIncrement && !(fillPreference === 'before' && firstShouldIncrement && firstWillAddMore)) {\n if (lastWillAddMore) {\n newCellCount++;\n }\n last++;\n }\n }\n if (!(last >= first && first >= 0 && last < itemCount && first >= overscanFirst && last <= overscanLast && first <= visible.first && last >= visible.last)) {\n throw new Error('Bad window calculation ' + JSON.stringify({\n first,\n last,\n itemCount,\n overscanFirst,\n overscanLast,\n visible\n }));\n }\n return {\n first,\n last\n };\n}\nexport function keyExtractor(item, index) {\n if (typeof item === 'object' && (item == null ? void 0 : item.key) != null) {\n return item.key;\n }\n if (typeof item === 'object' && (item == null ? void 0 : item.id) != null) {\n return item.id;\n }\n return String(index);\n}","'use strict';\n\nfunction nullthrows(x, message) {\n if (x != null) {\n return x;\n }\n var error = new Error(message !== undefined ? message : 'Got unexpected ' + x);\n error.framesToPop = 1; // Skip nullthrows's own stack frame.\n throw error;\n}\n\nmodule.exports = nullthrows;\nmodule.exports.default = nullthrows;\n\nObject.defineProperty(module.exports, '__esModule', {value: true});\n","var safeIsNaN = Number.isNaN ||\n function ponyfill(value) {\n return typeof value === 'number' && value !== value;\n };\nfunction isEqual(first, second) {\n if (first === second) {\n return true;\n }\n if (safeIsNaN(first) && safeIsNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (!isEqual(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var cache = null;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (cache && cache.lastThis === this && isEqual(newArgs, cache.lastArgs)) {\n return cache.lastResult;\n }\n var lastResult = resultFn.apply(this, newArgs);\n cache = {\n lastResult: lastResult,\n lastArgs: newArgs,\n lastThis: this,\n };\n return lastResult;\n }\n memoized.clear = function clear() {\n cache = null;\n };\n return memoized;\n}\n\nexport { memoizeOne as default };\n","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"style\"];\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport useAnimatedProps from './useAnimatedProps';\nimport useMergeRefs from '../Utilities/useMergeRefs';\nimport StyleSheet from '../../../exports/StyleSheet';\nimport View from '../../../exports/View';\nimport * as React from 'react';\n/**\n * Experimental implementation of `createAnimatedComponent` that is intended to\n * be compatible with concurrent rendering.\n */\nexport default function createAnimatedComponent(Component) {\n return /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n var _useAnimatedProps = useAnimatedProps(props),\n reducedProps = _useAnimatedProps[0],\n callbackRef = _useAnimatedProps[1];\n var ref = useMergeRefs(callbackRef, forwardedRef);\n\n // Some components require explicit passthrough values for animation\n // to work properly. For example, if an animated component is\n // transformed and Pressable, onPress will not work after transform\n // without these passthrough values.\n // $FlowFixMe[prop-missing]\n var passthroughAnimatedPropExplicitValues = reducedProps.passthroughAnimatedPropExplicitValues,\n style = reducedProps.style;\n var _ref = passthroughAnimatedPropExplicitValues !== null && passthroughAnimatedPropExplicitValues !== void 0 ? passthroughAnimatedPropExplicitValues : {},\n passthroughStyle = _ref.style,\n passthroughProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n var mergedStyle = [style, passthroughStyle];\n return /*#__PURE__*/React.createElement(Component, _extends({}, reducedProps, passthroughProps, {\n style: mergedStyle,\n ref: ref\n }));\n });\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport AnimatedProps from './nodes/AnimatedProps';\nimport { AnimatedEvent } from './AnimatedEvent';\nimport useRefEffect from '../Utilities/useRefEffect';\nimport NativeAnimatedHelper from './NativeAnimatedHelper';\nimport { useCallback, useEffect, useMemo, useReducer, useRef } from 'react';\nimport useLayoutEffect from '../../../modules/useLayoutEffect';\nexport default function useAnimatedProps(props) {\n var _useReducer = useReducer(count => count + 1, 0),\n scheduleUpdate = _useReducer[1];\n var onUpdateRef = useRef(null);\n\n // TODO: Only invalidate `node` if animated props or `style` change. In the\n // previous implementation, we permitted `style` to override props with the\n // same name property name as styles, so we can probably continue doing that.\n // The ordering of other props *should* not matter.\n var node = useMemo(() => new AnimatedProps(props, () => onUpdateRef.current == null ? void 0 : onUpdateRef.current()), [props]);\n useAnimatedPropsLifecycle(node);\n\n // TODO: This \"effect\" does three things:\n //\n // 1) Call `setNativeView`.\n // 2) Update `onUpdateRef`.\n // 3) Update listeners for `AnimatedEvent` props.\n //\n // Ideally, each of these would be separat \"effects\" so that they are not\n // unnecessarily re-run when irrelevant dependencies change. For example, we\n // should be able to hoist all `AnimatedEvent` props and only do #3 if either\n // the `AnimatedEvent` props change or `instance` changes.\n //\n // But there is no way to transparently compose three separate callback refs,\n // so we just combine them all into one for now.\n var refEffect = useCallback(instance => {\n // NOTE: This may be called more often than necessary (e.g. when `props`\n // changes), but `setNativeView` already optimizes for that.\n node.setNativeView(instance);\n\n // NOTE: This callback is only used by the JavaScript animation driver.\n onUpdateRef.current = () => {\n // Schedule an update for this component to update `reducedProps`,\n // but do not compute it immediately. If a parent also updated, we\n // need to merge those new props in before updating.\n scheduleUpdate();\n };\n var target = getEventTarget(instance);\n var events = [];\n for (var propName in props) {\n var propValue = props[propName];\n if (propValue instanceof AnimatedEvent && propValue.__isNative) {\n propValue.__attach(target, propName);\n events.push([propName, propValue]);\n }\n }\n return () => {\n onUpdateRef.current = null;\n for (var _i = 0, _events = events; _i < _events.length; _i++) {\n var _events$_i = _events[_i],\n _propName = _events$_i[0],\n _propValue = _events$_i[1];\n _propValue.__detach(target, _propName);\n }\n };\n }, [props, node]);\n var callbackRef = useRefEffect(refEffect);\n return [reduceAnimatedProps(node), callbackRef];\n}\nfunction reduceAnimatedProps(node) {\n // Force `collapsable` to be false so that the native view is not flattened.\n // Flattened views cannot be accurately referenced by the native driver.\n return _objectSpread(_objectSpread({}, node.__getValue()), {}, {\n collapsable: false\n });\n}\n\n/**\n * Manages the lifecycle of the supplied `AnimatedProps` by invoking `__attach`\n * and `__detach`. However, this is more complicated because `AnimatedProps`\n * uses reference counting to determine when to recursively detach its children\n * nodes. So in order to optimize this, we avoid detaching until the next attach\n * unless we are unmounting.\n */\nfunction useAnimatedPropsLifecycle(node) {\n var prevNodeRef = useRef(null);\n var isUnmountingRef = useRef(false);\n useEffect(() => {\n // It is ok for multiple components to call `flushQueue` because it noops\n // if the queue is empty. When multiple animated components are mounted at\n // the same time. Only first component flushes the queue and the others will noop.\n NativeAnimatedHelper.API.flushQueue();\n });\n useLayoutEffect(() => {\n isUnmountingRef.current = false;\n return () => {\n isUnmountingRef.current = true;\n };\n }, []);\n useLayoutEffect(() => {\n node.__attach();\n if (prevNodeRef.current != null) {\n var prevNode = prevNodeRef.current;\n // TODO: Stop restoring default values (unless `reset` is called).\n prevNode.__restoreDefaultValues();\n prevNode.__detach();\n prevNodeRef.current = null;\n }\n return () => {\n if (isUnmountingRef.current) {\n // NOTE: Do not restore default values on unmount, see D18197735.\n node.__detach();\n } else {\n prevNodeRef.current = node;\n }\n };\n }, [node]);\n}\nfunction getEventTarget(instance) {\n return typeof instance === 'object' && typeof (instance == null ? void 0 : instance.getScrollableNode) === 'function' ?\n // $FlowFixMe[incompatible-use] - Legacy instance assumptions.\n instance.getScrollableNode() : instance;\n}\n\n// $FlowFixMe[unclear-type] - Legacy instance assumptions.\nfunction isFabricInstance(instance) {\n var _instance$getScrollRe;\n return hasFabricHandle(instance) ||\n // Some components have a setNativeProps function but aren't a host component\n // such as lists like FlatList and SectionList. These should also use\n // forceUpdate in Fabric since setNativeProps doesn't exist on the underlying\n // host component. This crazy hack is essentially special casing those lists and\n // ScrollView itself to use forceUpdate in Fabric.\n // If these components end up using forwardRef then these hacks can go away\n // as instance would actually be the underlying host component and the above check\n // would be sufficient.\n hasFabricHandle(instance == null ? void 0 : instance.getNativeScrollRef == null ? void 0 : instance.getNativeScrollRef()) || hasFabricHandle(instance == null ? void 0 : instance.getScrollResponder == null ? void 0 : (_instance$getScrollRe = instance.getScrollResponder()) == null ? void 0 : _instance$getScrollRe.getNativeScrollRef == null ? void 0 : _instance$getScrollRe.getNativeScrollRef());\n}\n\n// $FlowFixMe[unclear-type] - Legacy instance assumptions.\nfunction hasFabricHandle(instance) {\n var _instance$_internalIn, _instance$_internalIn2;\n // eslint-disable-next-line dot-notation\n return (instance == null ? void 0 : (_instance$_internalIn = instance['_internalInstanceHandle']) == null ? void 0 : (_instance$_internalIn2 = _instance$_internalIn.stateNode) == null ? void 0 : _instance$_internalIn2.canonical) != null;\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport { AnimatedEvent } from '../AnimatedEvent';\nimport AnimatedNode from './AnimatedNode';\nimport AnimatedStyle from './AnimatedStyle';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nimport invariant from 'fbjs/lib/invariant';\nclass AnimatedProps extends AnimatedNode {\n constructor(props, callback) {\n super();\n if (props.style) {\n props = _objectSpread(_objectSpread({}, props), {}, {\n style: new AnimatedStyle(props.style)\n });\n }\n this._props = props;\n this._callback = callback;\n this.__attach();\n }\n __getValue() {\n var props = {};\n for (var key in this._props) {\n var value = this._props[key];\n if (value instanceof AnimatedNode) {\n if (!value.__isNative || value instanceof AnimatedStyle) {\n // We cannot use value of natively driven nodes this way as the value we have access from\n // JS may not be up to date.\n props[key] = value.__getValue();\n }\n } else if (value instanceof AnimatedEvent) {\n props[key] = value.__getHandler();\n } else {\n props[key] = value;\n }\n }\n return props;\n }\n __getAnimatedValue() {\n var props = {};\n for (var key in this._props) {\n var value = this._props[key];\n if (value instanceof AnimatedNode) {\n props[key] = value.__getAnimatedValue();\n }\n }\n return props;\n }\n __attach() {\n for (var key in this._props) {\n var value = this._props[key];\n if (value instanceof AnimatedNode) {\n value.__addChild(this);\n }\n }\n }\n __detach() {\n if (this.__isNative && this._animatedView) {\n this.__disconnectAnimatedView();\n }\n for (var key in this._props) {\n var value = this._props[key];\n if (value instanceof AnimatedNode) {\n value.__removeChild(this);\n }\n }\n super.__detach();\n }\n update() {\n this._callback();\n }\n __makeNative() {\n if (!this.__isNative) {\n this.__isNative = true;\n for (var key in this._props) {\n var value = this._props[key];\n if (value instanceof AnimatedNode) {\n value.__makeNative();\n }\n }\n if (this._animatedView) {\n this.__connectAnimatedView();\n }\n }\n }\n setNativeView(animatedView) {\n if (this._animatedView === animatedView) {\n return;\n }\n this._animatedView = animatedView;\n if (this.__isNative) {\n this.__connectAnimatedView();\n }\n }\n __connectAnimatedView() {\n invariant(this.__isNative, 'Expected node to be marked as \"native\"');\n var nativeViewTag = this._animatedView;\n invariant(nativeViewTag != null, 'Unable to locate attached view in the native tree');\n NativeAnimatedHelper.API.connectAnimatedNodeToView(this.__getNativeTag(), nativeViewTag);\n }\n __disconnectAnimatedView() {\n invariant(this.__isNative, 'Expected node to be marked as \"native\"');\n var nativeViewTag = this._animatedView;\n invariant(nativeViewTag != null, 'Unable to locate attached view in the native tree');\n NativeAnimatedHelper.API.disconnectAnimatedNodeFromView(this.__getNativeTag(), nativeViewTag);\n }\n __restoreDefaultValues() {\n // When using the native driver, view properties need to be restored to\n // their default values manually since react no longer tracks them. This\n // is needed to handle cases where a prop driven by native animated is removed\n // after having been changed natively by an animation.\n if (this.__isNative) {\n NativeAnimatedHelper.API.restoreDefaultValues(this.__getNativeTag());\n }\n }\n __getNativeConfig() {\n var propsConfig = {};\n for (var propKey in this._props) {\n var value = this._props[propKey];\n if (value instanceof AnimatedNode) {\n value.__makeNative();\n propsConfig[propKey] = value.__getNativeTag();\n }\n }\n return {\n type: 'props',\n props: propsConfig\n };\n }\n}\nexport default AnimatedProps;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedValue from './nodes/AnimatedValue';\nimport NativeAnimatedHelper from './NativeAnimatedHelper';\nimport invariant from 'fbjs/lib/invariant';\nimport { shouldUseNativeDriver } from './NativeAnimatedHelper';\nvar __DEV__ = process.env.NODE_ENV !== 'production';\nexport function attachNativeEvent(viewRef, eventName, argMapping) {\n // Find animated values in `argMapping` and create an array representing their\n // key path inside the `nativeEvent` object. Ex.: ['contentOffset', 'x'].\n var eventMappings = [];\n var traverse = (value, path) => {\n if (value instanceof AnimatedValue) {\n value.__makeNative();\n eventMappings.push({\n nativeEventPath: path,\n animatedValueTag: value.__getNativeTag()\n });\n } else if (typeof value === 'object') {\n for (var _key in value) {\n traverse(value[_key], path.concat(_key));\n }\n }\n };\n invariant(argMapping[0] && argMapping[0].nativeEvent, 'Native driven events only support animated values contained inside `nativeEvent`.');\n\n // Assume that the event containing `nativeEvent` is always the first argument.\n traverse(argMapping[0].nativeEvent, []);\n if (viewRef != null) {\n eventMappings.forEach(mapping => {\n NativeAnimatedHelper.API.addAnimatedEventToView(viewRef, eventName, mapping);\n });\n }\n return {\n detach() {\n if (viewRef != null) {\n eventMappings.forEach(mapping => {\n NativeAnimatedHelper.API.removeAnimatedEventFromView(viewRef, eventName,\n // $FlowFixMe[incompatible-call]\n mapping.animatedValueTag);\n });\n }\n }\n };\n}\nfunction validateMapping(argMapping, args) {\n var validate = (recMapping, recEvt, key) => {\n if (recMapping instanceof AnimatedValue) {\n invariant(typeof recEvt === 'number', 'Bad mapping of event key ' + key + ', should be number but got ' + typeof recEvt);\n return;\n }\n if (typeof recEvt === 'number') {\n invariant(recMapping instanceof AnimatedValue, 'Bad mapping of type ' + typeof recMapping + ' for key ' + key + ', event value must map to AnimatedValue');\n return;\n }\n invariant(typeof recMapping === 'object', 'Bad mapping of type ' + typeof recMapping + ' for key ' + key);\n invariant(typeof recEvt === 'object', 'Bad event of type ' + typeof recEvt + ' for key ' + key);\n for (var mappingKey in recMapping) {\n validate(recMapping[mappingKey], recEvt[mappingKey], mappingKey);\n }\n };\n invariant(args.length >= argMapping.length, 'Event has less arguments than mapping');\n argMapping.forEach((mapping, idx) => {\n validate(mapping, args[idx], 'arg' + idx);\n });\n}\nexport class AnimatedEvent {\n constructor(argMapping, config) {\n this._listeners = [];\n this._argMapping = argMapping;\n if (config == null) {\n console.warn('Animated.event now requires a second argument for options');\n config = {\n useNativeDriver: false\n };\n }\n if (config.listener) {\n this.__addListener(config.listener);\n }\n this._callListeners = this._callListeners.bind(this);\n this._attachedEvent = null;\n this.__isNative = shouldUseNativeDriver(config);\n }\n __addListener(callback) {\n this._listeners.push(callback);\n }\n __removeListener(callback) {\n this._listeners = this._listeners.filter(listener => listener !== callback);\n }\n __attach(viewRef, eventName) {\n invariant(this.__isNative, 'Only native driven events need to be attached.');\n this._attachedEvent = attachNativeEvent(viewRef, eventName, this._argMapping);\n }\n __detach(viewTag, eventName) {\n invariant(this.__isNative, 'Only native driven events need to be detached.');\n this._attachedEvent && this._attachedEvent.detach();\n }\n __getHandler() {\n var _this = this;\n if (this.__isNative) {\n if (__DEV__) {\n var _validatedMapping = false;\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key2 = 0; _key2 < _len; _key2++) {\n args[_key2] = arguments[_key2];\n }\n if (!_validatedMapping) {\n validateMapping(_this._argMapping, args);\n _validatedMapping = true;\n }\n _this._callListeners(...args);\n };\n } else {\n return this._callListeners;\n }\n }\n var validatedMapping = false;\n return function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key3 = 0; _key3 < _len2; _key3++) {\n args[_key3] = arguments[_key3];\n }\n if (__DEV__ && !validatedMapping) {\n validateMapping(_this._argMapping, args);\n validatedMapping = true;\n }\n var traverse = (recMapping, recEvt, key) => {\n if (recMapping instanceof AnimatedValue) {\n if (typeof recEvt === 'number') {\n recMapping.setValue(recEvt);\n }\n } else if (typeof recMapping === 'object') {\n for (var mappingKey in recMapping) {\n /* $FlowFixMe(>=0.120.0) This comment suppresses an error found\n * when Flow v0.120 was deployed. To see the error, delete this\n * comment and run Flow. */\n traverse(recMapping[mappingKey], recEvt[mappingKey], mappingKey);\n }\n }\n };\n _this._argMapping.forEach((mapping, idx) => {\n traverse(mapping, args[idx], 'arg' + idx);\n });\n _this._callListeners(...args);\n };\n }\n _callListeners() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key4 = 0; _key4 < _len3; _key4++) {\n args[_key4] = arguments[_key4];\n }\n this._listeners.forEach(listener => listener(...args));\n }\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nimport InteractionManager from '../../../../exports/InteractionManager';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nvar NativeAnimatedAPI = NativeAnimatedHelper.API;\n\n/**\n * Animated works by building a directed acyclic graph of dependencies\n * transparently when you render your Animated components.\n *\n * new Animated.Value(0)\n * .interpolate() .interpolate() new Animated.Value(1)\n * opacity translateY scale\n * style transform\n * View#234 style\n * View#123\n *\n * A) Top Down phase\n * When an Animated.Value is updated, we recursively go down through this\n * graph in order to find leaf nodes: the views that we flag as needing\n * an update.\n *\n * B) Bottom Up phase\n * When a view is flagged as needing an update, we recursively go back up\n * in order to build the new value that it needs. The reason why we need\n * this two-phases process is to deal with composite props such as\n * transform which can receive values from multiple parents.\n */\nfunction _flush(rootNode) {\n var animatedStyles = new Set();\n function findAnimatedStyles(node) {\n /* $FlowFixMe[prop-missing] (>=0.68.0 site=react_native_fb) This comment\n * suppresses an error found when Flow v0.68 was deployed. To see the error\n * delete this comment and run Flow. */\n if (typeof node.update === 'function') {\n animatedStyles.add(node);\n } else {\n node.__getChildren().forEach(findAnimatedStyles);\n }\n }\n findAnimatedStyles(rootNode);\n // $FlowFixMe[prop-missing]\n animatedStyles.forEach(animatedStyle => animatedStyle.update());\n}\n\n/**\n * Some operations are executed only on batch end, which is _mostly_ scheduled when\n * Animated component props change. For some of the changes which require immediate execution\n * (e.g. setValue), we create a separate batch in case none is scheduled.\n */\nfunction _executeAsAnimatedBatch(id, operation) {\n NativeAnimatedAPI.setWaitingForIdentifier(id);\n operation();\n NativeAnimatedAPI.unsetWaitingForIdentifier(id);\n}\n\n/**\n * Standard value for driving animations. One `Animated.Value` can drive\n * multiple properties in a synchronized fashion, but can only be driven by one\n * mechanism at a time. Using a new mechanism (e.g. starting a new animation,\n * or calling `setValue`) will stop any previous ones.\n *\n * See https://reactnative.dev/docs/animatedvalue\n */\nclass AnimatedValue extends AnimatedWithChildren {\n constructor(value, config) {\n super();\n if (typeof value !== 'number') {\n throw new Error('AnimatedValue: Attempting to set value to undefined');\n }\n this._startingValue = this._value = value;\n this._offset = 0;\n this._animation = null;\n if (config && config.useNativeDriver) {\n this.__makeNative();\n }\n }\n __detach() {\n if (this.__isNative) {\n NativeAnimatedAPI.getValue(this.__getNativeTag(), value => {\n this._value = value - this._offset;\n });\n }\n this.stopAnimation();\n super.__detach();\n }\n __getValue() {\n return this._value + this._offset;\n }\n\n /**\n * Directly set the value. This will stop any animations running on the value\n * and update all the bound properties.\n *\n * See https://reactnative.dev/docs/animatedvalue#setvalue\n */\n setValue(value) {\n if (this._animation) {\n this._animation.stop();\n this._animation = null;\n }\n this._updateValue(value, !this.__isNative /* don't perform a flush for natively driven values */);\n\n if (this.__isNative) {\n _executeAsAnimatedBatch(this.__getNativeTag().toString(), () => NativeAnimatedAPI.setAnimatedNodeValue(this.__getNativeTag(), value));\n }\n }\n\n /**\n * Sets an offset that is applied on top of whatever value is set, whether via\n * `setValue`, an animation, or `Animated.event`. Useful for compensating\n * things like the start of a pan gesture.\n *\n * See https://reactnative.dev/docs/animatedvalue#setoffset\n */\n setOffset(offset) {\n this._offset = offset;\n if (this.__isNative) {\n NativeAnimatedAPI.setAnimatedNodeOffset(this.__getNativeTag(), offset);\n }\n }\n\n /**\n * Merges the offset value into the base value and resets the offset to zero.\n * The final output of the value is unchanged.\n *\n * See https://reactnative.dev/docs/animatedvalue#flattenoffset\n */\n flattenOffset() {\n this._value += this._offset;\n this._offset = 0;\n if (this.__isNative) {\n NativeAnimatedAPI.flattenAnimatedNodeOffset(this.__getNativeTag());\n }\n }\n\n /**\n * Sets the offset value to the base value, and resets the base value to zero.\n * The final output of the value is unchanged.\n *\n * See https://reactnative.dev/docs/animatedvalue#extractoffset\n */\n extractOffset() {\n this._offset += this._value;\n this._value = 0;\n if (this.__isNative) {\n NativeAnimatedAPI.extractAnimatedNodeOffset(this.__getNativeTag());\n }\n }\n\n /**\n * Stops any running animation or tracking. `callback` is invoked with the\n * final value after stopping the animation, which is useful for updating\n * state to match the animation position with layout.\n *\n * See https://reactnative.dev/docs/animatedvalue#stopanimation\n */\n stopAnimation(callback) {\n this.stopTracking();\n this._animation && this._animation.stop();\n this._animation = null;\n if (callback) {\n if (this.__isNative) {\n NativeAnimatedAPI.getValue(this.__getNativeTag(), callback);\n } else {\n callback(this.__getValue());\n }\n }\n }\n\n /**\n * Stops any animation and resets the value to its original.\n *\n * See https://reactnative.dev/docs/animatedvalue#resetanimation\n */\n resetAnimation(callback) {\n this.stopAnimation(callback);\n this._value = this._startingValue;\n if (this.__isNative) {\n NativeAnimatedAPI.setAnimatedNodeValue(this.__getNativeTag(), this._startingValue);\n }\n }\n __onAnimatedValueUpdateReceived(value) {\n this._updateValue(value, false /*flush*/);\n }\n\n /**\n * Interpolates the value before updating the property, e.g. mapping 0-1 to\n * 0-10.\n */\n interpolate(config) {\n return new AnimatedInterpolation(this, config);\n }\n\n /**\n * Typically only used internally, but could be used by a custom Animation\n * class.\n *\n * See https://reactnative.dev/docs/animatedvalue#animate\n */\n animate(animation, callback) {\n var handle = null;\n if (animation.__isInteraction) {\n handle = InteractionManager.createInteractionHandle();\n }\n var previousAnimation = this._animation;\n this._animation && this._animation.stop();\n this._animation = animation;\n animation.start(this._value, value => {\n // Natively driven animations will never call into that callback\n this._updateValue(value, true /* flush */);\n }, result => {\n this._animation = null;\n if (handle !== null) {\n InteractionManager.clearInteractionHandle(handle);\n }\n callback && callback(result);\n }, previousAnimation, this);\n }\n\n /**\n * Typically only used internally.\n */\n stopTracking() {\n this._tracking && this._tracking.__detach();\n this._tracking = null;\n }\n\n /**\n * Typically only used internally.\n */\n track(tracking) {\n this.stopTracking();\n this._tracking = tracking;\n // Make sure that the tracking animation starts executing\n this._tracking && this._tracking.update();\n }\n _updateValue(value, flush) {\n if (value === undefined) {\n throw new Error('AnimatedValue: Attempting to set value to undefined');\n }\n this._value = value;\n if (flush) {\n _flush(this);\n }\n super.__callListeners(this.__getValue());\n }\n __getNativeConfig() {\n return {\n type: 'value',\n value: this._value,\n offset: this._offset\n };\n }\n}\nexport default AnimatedValue;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n/* eslint no-bitwise: 0 */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport AnimatedWithChildren from './AnimatedWithChildren';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nimport invariant from 'fbjs/lib/invariant';\nimport normalizeColor from '@react-native/normalize-color';\nvar __DEV__ = process.env.NODE_ENV !== 'production';\nvar linear = t => t;\n\n/**\n * Very handy helper to map input ranges to output ranges with an easing\n * function and custom behavior outside of the ranges.\n */\nfunction createInterpolation(config) {\n if (config.outputRange && typeof config.outputRange[0] === 'string') {\n return createInterpolationFromStringOutputRange(config);\n }\n var outputRange = config.outputRange;\n var inputRange = config.inputRange;\n if (__DEV__) {\n checkInfiniteRange('outputRange', outputRange);\n checkInfiniteRange('inputRange', inputRange);\n checkValidInputRange(inputRange);\n invariant(inputRange.length === outputRange.length, 'inputRange (' + inputRange.length + ') and outputRange (' + outputRange.length + ') must have the same length');\n }\n var easing = config.easing || linear;\n var extrapolateLeft = 'extend';\n if (config.extrapolateLeft !== undefined) {\n extrapolateLeft = config.extrapolateLeft;\n } else if (config.extrapolate !== undefined) {\n extrapolateLeft = config.extrapolate;\n }\n var extrapolateRight = 'extend';\n if (config.extrapolateRight !== undefined) {\n extrapolateRight = config.extrapolateRight;\n } else if (config.extrapolate !== undefined) {\n extrapolateRight = config.extrapolate;\n }\n return input => {\n invariant(typeof input === 'number', 'Cannot interpolation an input which is not a number');\n var range = findRange(input, inputRange);\n return interpolate(input, inputRange[range], inputRange[range + 1], outputRange[range], outputRange[range + 1], easing, extrapolateLeft, extrapolateRight);\n };\n}\nfunction interpolate(input, inputMin, inputMax, outputMin, outputMax, easing, extrapolateLeft, extrapolateRight) {\n var result = input;\n\n // Extrapolate\n if (result < inputMin) {\n if (extrapolateLeft === 'identity') {\n return result;\n } else if (extrapolateLeft === 'clamp') {\n result = inputMin;\n } else if (extrapolateLeft === 'extend') {\n // noop\n }\n }\n if (result > inputMax) {\n if (extrapolateRight === 'identity') {\n return result;\n } else if (extrapolateRight === 'clamp') {\n result = inputMax;\n } else if (extrapolateRight === 'extend') {\n // noop\n }\n }\n if (outputMin === outputMax) {\n return outputMin;\n }\n if (inputMin === inputMax) {\n if (input <= inputMin) {\n return outputMin;\n }\n return outputMax;\n }\n\n // Input Range\n if (inputMin === -Infinity) {\n result = -result;\n } else if (inputMax === Infinity) {\n result = result - inputMin;\n } else {\n result = (result - inputMin) / (inputMax - inputMin);\n }\n\n // Easing\n result = easing(result);\n\n // Output Range\n if (outputMin === -Infinity) {\n result = -result;\n } else if (outputMax === Infinity) {\n result = result + outputMin;\n } else {\n result = result * (outputMax - outputMin) + outputMin;\n }\n return result;\n}\nfunction colorToRgba(input) {\n var normalizedColor = normalizeColor(input);\n if (normalizedColor === null || typeof normalizedColor !== 'number') {\n return input;\n }\n normalizedColor = normalizedColor || 0;\n var r = (normalizedColor & 0xff000000) >>> 24;\n var g = (normalizedColor & 0x00ff0000) >>> 16;\n var b = (normalizedColor & 0x0000ff00) >>> 8;\n var a = (normalizedColor & 0x000000ff) / 255;\n return \"rgba(\" + r + \", \" + g + \", \" + b + \", \" + a + \")\";\n}\nvar stringShapeRegex = /[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:[eE][+-]?\\d+)?/g;\n\n/**\n * Supports string shapes by extracting numbers so new values can be computed,\n * and recombines those values into new strings of the same shape. Supports\n * things like:\n *\n * rgba(123, 42, 99, 0.36) // colors\n * -45deg // values with units\n */\nfunction createInterpolationFromStringOutputRange(config) {\n var outputRange = config.outputRange;\n invariant(outputRange.length >= 2, 'Bad output range');\n outputRange = outputRange.map(colorToRgba);\n checkPattern(outputRange);\n\n // ['rgba(0, 100, 200, 0)', 'rgba(50, 150, 250, 0.5)']\n // ->\n // [\n // [0, 50],\n // [100, 150],\n // [200, 250],\n // [0, 0.5],\n // ]\n /* $FlowFixMe[incompatible-use] (>=0.18.0): `outputRange[0].match()` can\n * return `null`. Need to guard against this possibility. */\n var outputRanges = outputRange[0].match(stringShapeRegex).map(() => []);\n outputRange.forEach(value => {\n /* $FlowFixMe[incompatible-use] (>=0.18.0): `value.match()` can return\n * `null`. Need to guard against this possibility. */\n value.match(stringShapeRegex).forEach((number, i) => {\n outputRanges[i].push(+number);\n });\n });\n var interpolations = outputRange[0].match(stringShapeRegex)\n /* $FlowFixMe[incompatible-use] (>=0.18.0): `outputRange[0].match()` can\n * return `null`. Need to guard against this possibility. */\n /* $FlowFixMe[incompatible-call] (>=0.18.0): `outputRange[0].match()` can\n * return `null`. Need to guard against this possibility. */.map((value, i) => {\n return createInterpolation(_objectSpread(_objectSpread({}, config), {}, {\n outputRange: outputRanges[i]\n }));\n });\n\n // rgba requires that the r,g,b are integers.... so we want to round them, but we *dont* want to\n // round the opacity (4th column).\n var shouldRound = isRgbOrRgba(outputRange[0]);\n return input => {\n var i = 0;\n // 'rgba(0, 100, 200, 0)'\n // ->\n // 'rgba(${interpolations[0](input)}, ${interpolations[1](input)}, ...'\n return outputRange[0].replace(stringShapeRegex, () => {\n var val = +interpolations[i++](input);\n if (shouldRound) {\n val = i < 4 ? Math.round(val) : Math.round(val * 1000) / 1000;\n }\n return String(val);\n });\n };\n}\nfunction isRgbOrRgba(range) {\n return typeof range === 'string' && range.startsWith('rgb');\n}\nfunction checkPattern(arr) {\n var pattern = arr[0].replace(stringShapeRegex, '');\n for (var i = 1; i < arr.length; ++i) {\n invariant(pattern === arr[i].replace(stringShapeRegex, ''), 'invalid pattern ' + arr[0] + ' and ' + arr[i]);\n }\n}\nfunction findRange(input, inputRange) {\n var i;\n for (i = 1; i < inputRange.length - 1; ++i) {\n if (inputRange[i] >= input) {\n break;\n }\n }\n return i - 1;\n}\nfunction checkValidInputRange(arr) {\n invariant(arr.length >= 2, 'inputRange must have at least 2 elements');\n var message = 'inputRange must be monotonically non-decreasing ' + String(arr);\n for (var i = 1; i < arr.length; ++i) {\n invariant(arr[i] >= arr[i - 1], message);\n }\n}\nfunction checkInfiniteRange(name, arr) {\n invariant(arr.length >= 2, name + ' must have at least 2 elements');\n invariant(arr.length !== 2 || arr[0] !== -Infinity || arr[1] !== Infinity,\n /* $FlowFixMe[incompatible-type] (>=0.13.0) - In the addition expression\n * below this comment, one or both of the operands may be something that\n * doesn't cleanly convert to a string, like undefined, null, and object,\n * etc. If you really mean this implicit string conversion, you can do\n * something like String(myThing) */\n name + 'cannot be ]-infinity;+infinity[ ' + arr);\n}\nclass AnimatedInterpolation extends AnimatedWithChildren {\n // Export for testing.\n\n constructor(parent, config) {\n super();\n this._parent = parent;\n this._config = config;\n this._interpolation = createInterpolation(config);\n }\n __makeNative(platformConfig) {\n this._parent.__makeNative(platformConfig);\n super.__makeNative(platformConfig);\n }\n __getValue() {\n var parentValue = this._parent.__getValue();\n invariant(typeof parentValue === 'number', 'Cannot interpolate an input which is not a number.');\n return this._interpolation(parentValue);\n }\n interpolate(config) {\n return new AnimatedInterpolation(this, config);\n }\n __attach() {\n this._parent.__addChild(this);\n }\n __detach() {\n this._parent.__removeChild(this);\n super.__detach();\n }\n __transformDataType(range) {\n return range.map(NativeAnimatedHelper.transformDataType);\n }\n __getNativeConfig() {\n if (__DEV__) {\n NativeAnimatedHelper.validateInterpolation(this._config);\n }\n return {\n inputRange: this._config.inputRange,\n // Only the `outputRange` can contain strings so we don't need to transform `inputRange` here\n outputRange: this.__transformDataType(this._config.outputRange),\n extrapolateLeft: this._config.extrapolateLeft || this._config.extrapolate || 'extend',\n extrapolateRight: this._config.extrapolateRight || this._config.extrapolate || 'extend',\n type: 'interpolation'\n };\n }\n}\nAnimatedInterpolation.__createInterpolation = createInterpolation;\nexport default AnimatedInterpolation;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _createForOfIteratorHelperLoose from \"@babel/runtime/helpers/createForOfIteratorHelperLoose\";\nimport AnimatedNode from './AnimatedNode';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nclass AnimatedWithChildren extends AnimatedNode {\n constructor() {\n super();\n this._children = [];\n }\n __makeNative(platformConfig) {\n if (!this.__isNative) {\n this.__isNative = true;\n for (var _iterator = _createForOfIteratorHelperLoose(this._children), _step; !(_step = _iterator()).done;) {\n var child = _step.value;\n child.__makeNative(platformConfig);\n NativeAnimatedHelper.API.connectAnimatedNodes(this.__getNativeTag(), child.__getNativeTag());\n }\n }\n super.__makeNative(platformConfig);\n }\n __addChild(child) {\n if (this._children.length === 0) {\n this.__attach();\n }\n this._children.push(child);\n if (this.__isNative) {\n // Only accept \"native\" animated nodes as children\n child.__makeNative(this.__getPlatformConfig());\n NativeAnimatedHelper.API.connectAnimatedNodes(this.__getNativeTag(), child.__getNativeTag());\n }\n }\n __removeChild(child) {\n var index = this._children.indexOf(child);\n if (index === -1) {\n console.warn(\"Trying to remove a child that doesn't exist\");\n return;\n }\n if (this.__isNative && child.__isNative) {\n NativeAnimatedHelper.API.disconnectAnimatedNodes(this.__getNativeTag(), child.__getNativeTag());\n }\n this._children.splice(index, 1);\n if (this._children.length === 0) {\n this.__detach();\n }\n }\n __getChildren() {\n return this._children;\n }\n __callListeners(value) {\n super.__callListeners(value);\n if (!this.__isNative) {\n for (var _iterator2 = _createForOfIteratorHelperLoose(this._children), _step2; !(_step2 = _iterator2()).done;) {\n var child = _step2.value;\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n if (child.__getValue) {\n child.__callListeners(child.__getValue());\n }\n }\n }\n }\n}\nexport default AnimatedWithChildren;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nvar NativeAnimatedAPI = NativeAnimatedHelper.API;\nimport invariant from 'fbjs/lib/invariant';\nvar _uniqueId = 1;\n\n// Note(vjeux): this would be better as an interface but flow doesn't\n// support them yet\nclass AnimatedNode {\n __attach() {}\n __detach() {\n if (this.__isNative && this.__nativeTag != null) {\n NativeAnimatedHelper.API.dropAnimatedNode(this.__nativeTag);\n this.__nativeTag = undefined;\n }\n }\n __getValue() {}\n __getAnimatedValue() {\n return this.__getValue();\n }\n __addChild(child) {}\n __removeChild(child) {}\n __getChildren() {\n return [];\n }\n\n /* Methods and props used by native Animated impl */\n\n constructor() {\n this._listeners = {};\n }\n __makeNative(platformConfig) {\n if (!this.__isNative) {\n throw new Error('This node cannot be made a \"native\" animated node');\n }\n this._platformConfig = platformConfig;\n if (this.hasListeners()) {\n this._startListeningToNativeValueUpdates();\n }\n }\n\n /**\n * Adds an asynchronous listener to the value so you can observe updates from\n * animations. This is useful because there is no way to\n * synchronously read the value because it might be driven natively.\n *\n * See https://reactnative.dev/docs/animatedvalue#addlistener\n */\n addListener(callback) {\n var id = String(_uniqueId++);\n this._listeners[id] = callback;\n if (this.__isNative) {\n this._startListeningToNativeValueUpdates();\n }\n return id;\n }\n\n /**\n * Unregister a listener. The `id` param shall match the identifier\n * previously returned by `addListener()`.\n *\n * See https://reactnative.dev/docs/animatedvalue#removelistener\n */\n removeListener(id) {\n delete this._listeners[id];\n if (this.__isNative && !this.hasListeners()) {\n this._stopListeningForNativeValueUpdates();\n }\n }\n\n /**\n * Remove all registered listeners.\n *\n * See https://reactnative.dev/docs/animatedvalue#removealllisteners\n */\n removeAllListeners() {\n this._listeners = {};\n if (this.__isNative) {\n this._stopListeningForNativeValueUpdates();\n }\n }\n hasListeners() {\n return !!Object.keys(this._listeners).length;\n }\n _startListeningToNativeValueUpdates() {\n if (this.__nativeAnimatedValueListener && !this.__shouldUpdateListenersForNewNativeTag) {\n return;\n }\n if (this.__shouldUpdateListenersForNewNativeTag) {\n this.__shouldUpdateListenersForNewNativeTag = false;\n this._stopListeningForNativeValueUpdates();\n }\n NativeAnimatedAPI.startListeningToAnimatedNodeValue(this.__getNativeTag());\n this.__nativeAnimatedValueListener = NativeAnimatedHelper.nativeEventEmitter.addListener('onAnimatedValueUpdate', data => {\n if (data.tag !== this.__getNativeTag()) {\n return;\n }\n this.__onAnimatedValueUpdateReceived(data.value);\n });\n }\n __onAnimatedValueUpdateReceived(value) {\n this.__callListeners(value);\n }\n __callListeners(value) {\n for (var _key in this._listeners) {\n this._listeners[_key]({\n value\n });\n }\n }\n _stopListeningForNativeValueUpdates() {\n if (!this.__nativeAnimatedValueListener) {\n return;\n }\n this.__nativeAnimatedValueListener.remove();\n this.__nativeAnimatedValueListener = null;\n NativeAnimatedAPI.stopListeningToAnimatedNodeValue(this.__getNativeTag());\n }\n __getNativeTag() {\n var _this$__nativeTag;\n NativeAnimatedHelper.assertNativeAnimatedModule();\n invariant(this.__isNative, 'Attempt to get native tag from node not marked as \"native\"');\n var nativeTag = (_this$__nativeTag = this.__nativeTag) !== null && _this$__nativeTag !== void 0 ? _this$__nativeTag : NativeAnimatedHelper.generateNewNodeTag();\n if (this.__nativeTag == null) {\n this.__nativeTag = nativeTag;\n var config = this.__getNativeConfig();\n if (this._platformConfig) {\n config.platformConfig = this._platformConfig;\n }\n NativeAnimatedHelper.API.createAnimatedNode(nativeTag, config);\n this.__shouldUpdateListenersForNewNativeTag = true;\n }\n return nativeTag;\n }\n __getNativeConfig() {\n throw new Error('This JS animated node type cannot be used as native animated node');\n }\n toJSON() {\n return this.__getValue();\n }\n __getPlatformConfig() {\n return this._platformConfig;\n }\n __setPlatformConfig(platformConfig) {\n this._platformConfig = platformConfig;\n }\n}\nexport default AnimatedNode;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport NativeAnimatedNonTurboModule from './NativeAnimatedModule';\nimport NativeAnimatedTurboModule from './NativeAnimatedTurboModule';\nimport NativeEventEmitter from '../EventEmitter/NativeEventEmitter';\nimport Platform from '../Utilities/Platform';\nimport ReactNativeFeatureFlags from '../ReactNative/ReactNativeFeatureFlags';\nimport invariant from 'fbjs/lib/invariant';\nimport RCTDeviceEventEmitter from '../EventEmitter/RCTDeviceEventEmitter';\n// TODO T69437152 @petetheheat - Delete this fork when Fabric ships to 100%.\nvar NativeAnimatedModule = Platform.OS === 'ios' && global.RN$Bridgeless === true ? NativeAnimatedTurboModule : NativeAnimatedNonTurboModule;\nvar __nativeAnimatedNodeTagCount = 1; /* used for animated nodes */\nvar __nativeAnimationIdCount = 1; /* used for started animations */\n\nvar nativeEventEmitter;\nvar waitingForQueuedOperations = new Set();\nvar queueOperations = false;\nvar queue = [];\n// $FlowFixMe\nvar singleOpQueue = [];\nvar useSingleOpBatching = false;\nPlatform.OS === 'android' && !!(NativeAnimatedModule != null && NativeAnimatedModule.queueAndExecuteBatchedOperations) && ReactNativeFeatureFlags.animatedShouldUseSingleOp();\nvar flushQueueTimeout = null;\nvar eventListenerGetValueCallbacks = {};\nvar eventListenerAnimationFinishedCallbacks = {};\nvar globalEventEmitterGetValueListener = null;\nvar globalEventEmitterAnimationFinishedListener = null;\nvar nativeOps = useSingleOpBatching ? function () {\n var apis = ['createAnimatedNode',\n // 1\n 'updateAnimatedNodeConfig',\n // 2\n 'getValue',\n // 3\n 'startListeningToAnimatedNodeValue',\n // 4\n 'stopListeningToAnimatedNodeValue',\n // 5\n 'connectAnimatedNodes',\n // 6\n 'disconnectAnimatedNodes',\n // 7\n 'startAnimatingNode',\n // 8\n 'stopAnimation',\n // 9\n 'setAnimatedNodeValue',\n // 10\n 'setAnimatedNodeOffset',\n // 11\n 'flattenAnimatedNodeOffset',\n // 12\n 'extractAnimatedNodeOffset',\n // 13\n 'connectAnimatedNodeToView',\n // 14\n 'disconnectAnimatedNodeFromView',\n // 15\n 'restoreDefaultValues',\n // 16\n 'dropAnimatedNode',\n // 17\n 'addAnimatedEventToView',\n // 18\n 'removeAnimatedEventFromView',\n // 19\n 'addListener',\n // 20\n 'removeListener' // 21\n ];\n\n return apis.reduce((acc, functionName, i) => {\n // These indices need to be kept in sync with the indices in native (see NativeAnimatedModule in Java, or the equivalent for any other native platform).\n // $FlowFixMe[prop-missing]\n acc[functionName] = i + 1;\n return acc;\n }, {});\n}() : NativeAnimatedModule;\n\n/**\n * Wrappers around NativeAnimatedModule to provide flow and autocomplete support for\n * the native module methods, and automatic queue management on Android\n */\nvar API = {\n getValue: function getValue(tag, saveValueCallback) {\n invariant(nativeOps, 'Native animated module is not available');\n if (useSingleOpBatching) {\n if (saveValueCallback) {\n eventListenerGetValueCallbacks[tag] = saveValueCallback;\n }\n // $FlowFixMe\n API.queueOperation(nativeOps.getValue, tag);\n } else {\n API.queueOperation(nativeOps.getValue, tag, saveValueCallback);\n }\n },\n setWaitingForIdentifier: function setWaitingForIdentifier(id) {\n waitingForQueuedOperations.add(id);\n queueOperations = true;\n if (ReactNativeFeatureFlags.animatedShouldDebounceQueueFlush() && flushQueueTimeout) {\n clearTimeout(flushQueueTimeout);\n }\n },\n unsetWaitingForIdentifier: function unsetWaitingForIdentifier(id) {\n waitingForQueuedOperations.delete(id);\n if (waitingForQueuedOperations.size === 0) {\n queueOperations = false;\n API.disableQueue();\n }\n },\n disableQueue: function disableQueue() {\n invariant(nativeOps, 'Native animated module is not available');\n if (ReactNativeFeatureFlags.animatedShouldDebounceQueueFlush()) {\n var prevTimeout = flushQueueTimeout;\n clearImmediate(prevTimeout);\n flushQueueTimeout = setImmediate(API.flushQueue);\n } else {\n API.flushQueue();\n }\n },\n flushQueue: function flushQueue() {\n /*\n invariant(NativeAnimatedModule, 'Native animated module is not available');\n flushQueueTimeout = null;\n // Early returns before calling any APIs\n if (useSingleOpBatching && singleOpQueue.length === 0) {\n return;\n }\n if (!useSingleOpBatching && queue.length === 0) {\n return;\n }\n if (useSingleOpBatching) {\n // Set up event listener for callbacks if it's not set up\n if (\n !globalEventEmitterGetValueListener ||\n !globalEventEmitterAnimationFinishedListener\n ) {\n setupGlobalEventEmitterListeners();\n }\n // Single op batching doesn't use callback functions, instead we\n // use RCTDeviceEventEmitter. This reduces overhead of sending lots of\n // JSI functions across to native code; but also, TM infrastructure currently\n // does not support packing a function into native arrays.\n NativeAnimatedModule.queueAndExecuteBatchedOperations?.(singleOpQueue);\n singleOpQueue.length = 0;\n } else {\n Platform.OS === 'android' && NativeAnimatedModule.startOperationBatch?.();\n for (let q = 0, l = queue.length; q < l; q++) {\n queue[q]();\n }\n queue.length = 0;\n Platform.OS === 'android' &&\n NativeAnimatedModule.finishOperationBatch?.();\n }\n */\n },\n queueOperation: function queueOperation(fn) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (useSingleOpBatching) {\n // Get the command ID from the queued function, and push that ID and any arguments needed to execute the operation\n // $FlowFixMe: surprise, fn is actually a number\n singleOpQueue.push(fn, ...args);\n return;\n }\n\n // If queueing is explicitly on, *or* the queue has not yet\n // been flushed, use the queue. This is to prevent operations\n // from being executed out of order.\n if (queueOperations || queue.length !== 0) {\n queue.push(() => fn(...args));\n } else {\n fn(...args);\n }\n },\n createAnimatedNode: function createAnimatedNode(tag, config) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.createAnimatedNode, tag, config);\n },\n updateAnimatedNodeConfig: function updateAnimatedNodeConfig(tag, config) {\n invariant(nativeOps, 'Native animated module is not available');\n //if (nativeOps.updateAnimatedNodeConfig) {\n // API.queueOperation(nativeOps.updateAnimatedNodeConfig, tag, config);\n //}\n },\n\n startListeningToAnimatedNodeValue: function startListeningToAnimatedNodeValue(tag) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.startListeningToAnimatedNodeValue, tag);\n },\n stopListeningToAnimatedNodeValue: function stopListeningToAnimatedNodeValue(tag) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.stopListeningToAnimatedNodeValue, tag);\n },\n connectAnimatedNodes: function connectAnimatedNodes(parentTag, childTag) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.connectAnimatedNodes, parentTag, childTag);\n },\n disconnectAnimatedNodes: function disconnectAnimatedNodes(parentTag, childTag) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.disconnectAnimatedNodes, parentTag, childTag);\n },\n startAnimatingNode: function startAnimatingNode(animationId, nodeTag, config, endCallback) {\n invariant(nativeOps, 'Native animated module is not available');\n if (useSingleOpBatching) {\n if (endCallback) {\n eventListenerAnimationFinishedCallbacks[animationId] = endCallback;\n }\n // $FlowFixMe\n API.queueOperation(nativeOps.startAnimatingNode, animationId, nodeTag, config);\n } else {\n API.queueOperation(nativeOps.startAnimatingNode, animationId, nodeTag, config, endCallback);\n }\n },\n stopAnimation: function stopAnimation(animationId) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.stopAnimation, animationId);\n },\n setAnimatedNodeValue: function setAnimatedNodeValue(nodeTag, value) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.setAnimatedNodeValue, nodeTag, value);\n },\n setAnimatedNodeOffset: function setAnimatedNodeOffset(nodeTag, offset) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.setAnimatedNodeOffset, nodeTag, offset);\n },\n flattenAnimatedNodeOffset: function flattenAnimatedNodeOffset(nodeTag) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.flattenAnimatedNodeOffset, nodeTag);\n },\n extractAnimatedNodeOffset: function extractAnimatedNodeOffset(nodeTag) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.extractAnimatedNodeOffset, nodeTag);\n },\n connectAnimatedNodeToView: function connectAnimatedNodeToView(nodeTag, viewTag) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.connectAnimatedNodeToView, nodeTag, viewTag);\n },\n disconnectAnimatedNodeFromView: function disconnectAnimatedNodeFromView(nodeTag, viewTag) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.disconnectAnimatedNodeFromView, nodeTag, viewTag);\n },\n restoreDefaultValues: function restoreDefaultValues(nodeTag) {\n invariant(nativeOps, 'Native animated module is not available');\n // Backwards compat with older native runtimes, can be removed later.\n if (nativeOps.restoreDefaultValues != null) {\n API.queueOperation(nativeOps.restoreDefaultValues, nodeTag);\n }\n },\n dropAnimatedNode: function dropAnimatedNode(tag) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.dropAnimatedNode, tag);\n },\n addAnimatedEventToView: function addAnimatedEventToView(viewTag, eventName, eventMapping) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.addAnimatedEventToView, viewTag, eventName, eventMapping);\n },\n removeAnimatedEventFromView(viewTag, eventName, animatedNodeTag) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.removeAnimatedEventFromView, viewTag, eventName, animatedNodeTag);\n }\n};\nfunction setupGlobalEventEmitterListeners() {\n globalEventEmitterGetValueListener = RCTDeviceEventEmitter.addListener('onNativeAnimatedModuleGetValue', function (params) {\n var tag = params.tag;\n var callback = eventListenerGetValueCallbacks[tag];\n if (!callback) {\n return;\n }\n callback(params.value);\n delete eventListenerGetValueCallbacks[tag];\n });\n globalEventEmitterAnimationFinishedListener = RCTDeviceEventEmitter.addListener('onNativeAnimatedModuleAnimationFinished', function (params) {\n var animationId = params.animationId;\n var callback = eventListenerAnimationFinishedCallbacks[animationId];\n if (!callback) {\n return;\n }\n callback(params);\n delete eventListenerAnimationFinishedCallbacks[animationId];\n });\n}\n\n/**\n * Styles allowed by the native animated implementation.\n *\n * In general native animated implementation should support any numeric or color property that\n * doesn't need to be updated through the shadow view hierarchy (all non-layout properties).\n */\nvar SUPPORTED_COLOR_STYLES = {\n backgroundColor: true,\n borderBottomColor: true,\n borderColor: true,\n borderEndColor: true,\n borderLeftColor: true,\n borderRightColor: true,\n borderStartColor: true,\n borderTopColor: true,\n color: true,\n tintColor: true\n};\nvar SUPPORTED_STYLES = _objectSpread(_objectSpread({}, SUPPORTED_COLOR_STYLES), {}, {\n borderBottomEndRadius: true,\n borderBottomLeftRadius: true,\n borderBottomRightRadius: true,\n borderBottomStartRadius: true,\n borderRadius: true,\n borderTopEndRadius: true,\n borderTopLeftRadius: true,\n borderTopRightRadius: true,\n borderTopStartRadius: true,\n elevation: true,\n opacity: true,\n transform: true,\n zIndex: true,\n /* ios styles */\n shadowOpacity: true,\n shadowRadius: true,\n /* legacy android transform properties */\n scaleX: true,\n scaleY: true,\n translateX: true,\n translateY: true\n});\nvar SUPPORTED_TRANSFORMS = {\n translateX: true,\n translateY: true,\n scale: true,\n scaleX: true,\n scaleY: true,\n rotate: true,\n rotateX: true,\n rotateY: true,\n rotateZ: true,\n perspective: true\n};\nvar SUPPORTED_INTERPOLATION_PARAMS = {\n inputRange: true,\n outputRange: true,\n extrapolate: true,\n extrapolateRight: true,\n extrapolateLeft: true\n};\nfunction addWhitelistedStyleProp(prop) {\n SUPPORTED_STYLES[prop] = true;\n}\nfunction addWhitelistedTransformProp(prop) {\n SUPPORTED_TRANSFORMS[prop] = true;\n}\nfunction addWhitelistedInterpolationParam(param) {\n SUPPORTED_INTERPOLATION_PARAMS[param] = true;\n}\nfunction isSupportedColorStyleProp(prop) {\n return SUPPORTED_COLOR_STYLES.hasOwnProperty(prop);\n}\nfunction isSupportedStyleProp(prop) {\n return SUPPORTED_STYLES.hasOwnProperty(prop);\n}\nfunction isSupportedTransformProp(prop) {\n return SUPPORTED_TRANSFORMS.hasOwnProperty(prop);\n}\nfunction isSupportedInterpolationParam(param) {\n return SUPPORTED_INTERPOLATION_PARAMS.hasOwnProperty(param);\n}\nfunction validateTransform(configs) {\n configs.forEach(config => {\n if (!isSupportedTransformProp(config.property)) {\n throw new Error(\"Property '\" + config.property + \"' is not supported by native animated module\");\n }\n });\n}\nfunction validateStyles(styles) {\n for (var _key2 in styles) {\n if (!isSupportedStyleProp(_key2)) {\n throw new Error(\"Style property '\" + _key2 + \"' is not supported by native animated module\");\n }\n }\n}\nfunction validateInterpolation(config) {\n for (var _key3 in config) {\n if (!isSupportedInterpolationParam(_key3)) {\n throw new Error(\"Interpolation property '\" + _key3 + \"' is not supported by native animated module\");\n }\n }\n}\nfunction generateNewNodeTag() {\n return __nativeAnimatedNodeTagCount++;\n}\nfunction generateNewAnimationId() {\n return __nativeAnimationIdCount++;\n}\nfunction assertNativeAnimatedModule() {\n invariant(NativeAnimatedModule, 'Native animated module is not available');\n}\nvar _warnedMissingNativeAnimated = false;\nfunction shouldUseNativeDriver(config) {\n if (config.useNativeDriver == null) {\n console.warn('Animated: `useNativeDriver` was not specified. This is a required ' + 'option and must be explicitly set to `true` or `false`');\n }\n if (config.useNativeDriver === true && !NativeAnimatedModule) {\n if (!_warnedMissingNativeAnimated) {\n console.warn('Animated: `useNativeDriver` is not supported because the native ' + 'animated module is missing. Falling back to JS-based animation. To ' + 'resolve this, add `RCTAnimation` module to this app, or remove ' + '`useNativeDriver`. ' + 'Make sure to run `bundle exec pod install` first. Read more about autolinking: https://github.com/react-native-community/cli/blob/master/docs/autolinking.md');\n _warnedMissingNativeAnimated = true;\n }\n return false;\n }\n return config.useNativeDriver || false;\n}\nfunction transformDataType(value) {\n // Change the string type to number type so we can reuse the same logic in\n // iOS and Android platform\n if (typeof value !== 'string') {\n return value;\n }\n if (/deg$/.test(value)) {\n var degrees = parseFloat(value) || 0;\n var radians = degrees * Math.PI / 180.0;\n return radians;\n } else {\n return value;\n }\n}\nexport { API, isSupportedColorStyleProp, isSupportedStyleProp, isSupportedTransformProp, isSupportedInterpolationParam, addWhitelistedStyleProp, addWhitelistedTransformProp, addWhitelistedInterpolationParam, validateStyles, validateTransform, validateInterpolation, generateNewNodeTag, generateNewAnimationId, assertNativeAnimatedModule, shouldUseNativeDriver, transformDataType };\nexport default {\n API,\n isSupportedColorStyleProp,\n isSupportedStyleProp,\n isSupportedTransformProp,\n isSupportedInterpolationParam,\n addWhitelistedStyleProp,\n addWhitelistedTransformProp,\n addWhitelistedInterpolationParam,\n validateStyles,\n validateTransform,\n validateInterpolation,\n generateNewNodeTag,\n generateNewAnimationId,\n assertNativeAnimatedModule,\n shouldUseNativeDriver,\n transformDataType,\n // $FlowExpectedError[unsafe-getters-setters] - unsafe getter lint suppresion\n // $FlowExpectedError[missing-type-arg] - unsafe getter lint suppresion\n get nativeEventEmitter() {\n if (!nativeEventEmitter) {\n nativeEventEmitter = new NativeEventEmitter(\n // T88715063: NativeEventEmitter only used this parameter on iOS. Now it uses it on all platforms, so this code was modified automatically to preserve its behavior\n // If you want to use the native module on other platforms, please remove this condition and test its behavior\n Platform.OS !== 'ios' ? null : NativeAnimatedModule);\n }\n return nativeEventEmitter;\n }\n};","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\nexport default TurboModuleRegistry.get('NativeAnimatedModule');","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport invariant from 'fbjs/lib/invariant';\nexport function get(name) {\n return null;\n}\nexport function getEnforcing(name) {\n var module = get(name);\n invariant(module != null, \"TurboModuleRegistry.getEnforcing(...): '\" + name + \"' could not be found. \" + 'Verify that a module by this name is registered in the native binary.');\n return module;\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\nexport default TurboModuleRegistry.get('NativeAnimatedTurboModule');","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport Platform from '../../../exports/Platform';\nimport RCTDeviceEventEmitter from './RCTDeviceEventEmitter';\nimport invariant from 'fbjs/lib/invariant';\n/**\n * `NativeEventEmitter` is intended for use by Native Modules to emit events to\n * JavaScript listeners. If a `NativeModule` is supplied to the constructor, it\n * will be notified (via `addListener` and `removeListeners`) when the listener\n * count changes to manage \"native memory\".\n *\n * Currently, all native events are fired via a global `RCTDeviceEventEmitter`.\n * This means event names must be globally unique, and it means that call sites\n * can theoretically listen to `RCTDeviceEventEmitter` (although discouraged).\n */\nexport default class NativeEventEmitter {\n constructor(nativeModule) {\n if (Platform.OS === 'ios') {\n invariant(nativeModule != null, '`new NativeEventEmitter()` requires a non-null argument.');\n this._nativeModule = nativeModule;\n }\n }\n addListener(eventType, listener, context) {\n var _this$_nativeModule;\n (_this$_nativeModule = this._nativeModule) == null ? void 0 : _this$_nativeModule.addListener(eventType);\n var subscription = RCTDeviceEventEmitter.addListener(eventType, listener, context);\n return {\n remove: () => {\n if (subscription != null) {\n var _this$_nativeModule2;\n (_this$_nativeModule2 = this._nativeModule) == null ? void 0 : _this$_nativeModule2.removeListeners(1);\n // $FlowFixMe[incompatible-use]\n subscription.remove();\n subscription = null;\n }\n }\n };\n }\n\n /**\n * @deprecated Use `remove` on the EventSubscription from `addListener`.\n */\n removeListener(eventType, listener) {\n var _this$_nativeModule3;\n (_this$_nativeModule3 = this._nativeModule) == null ? void 0 : _this$_nativeModule3.removeListeners(1);\n // NOTE: This will report a deprecation notice via `console.error`.\n // $FlowFixMe[prop-missing] - `removeListener` exists but is deprecated.\n RCTDeviceEventEmitter.removeListener(eventType, listener);\n }\n emit(eventType) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n // Generally, `RCTDeviceEventEmitter` is directly invoked. But this is\n // included for completeness.\n RCTDeviceEventEmitter.emit(eventType, ...args);\n }\n removeAllListeners(eventType) {\n var _this$_nativeModule4;\n invariant(eventType != null, '`NativeEventEmitter.removeAllListener()` requires a non-null argument.');\n (_this$_nativeModule4 = this._nativeModule) == null ? void 0 : _this$_nativeModule4.removeListeners(this.listenerCount(eventType));\n RCTDeviceEventEmitter.removeAllListeners(eventType);\n }\n listenerCount(eventType) {\n return RCTDeviceEventEmitter.listenerCount(eventType);\n }\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport EventEmitter from '../vendor/emitter/EventEmitter';\n\n// FIXME: use typed events\n\n/**\n * Global EventEmitter used by the native platform to emit events to JavaScript.\n * Events are identified by globally unique event names.\n *\n * NativeModules that emit events should instead subclass `NativeEventEmitter`.\n */\nexport default new EventEmitter();","import Platform from '../../../exports/Platform';\nexport default Platform;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nvar ReactNativeFeatureFlags = {\n isLayoutAnimationEnabled: () => true,\n shouldEmitW3CPointerEvents: () => false,\n shouldPressibilityUseW3CPointerEventsForHover: () => false,\n animatedShouldDebounceQueueFlush: () => false,\n animatedShouldUseSingleOp: () => false\n};\nexport default ReactNativeFeatureFlags;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedNode from './AnimatedNode';\nimport AnimatedTransform from './AnimatedTransform';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nimport StyleSheet from '../../../../exports/StyleSheet';\nvar flattenStyle = StyleSheet.flatten;\nfunction createAnimatedStyle(inputStyle) {\n var style = flattenStyle(inputStyle);\n var animatedStyles = {};\n for (var key in style) {\n var value = style[key];\n if (key === 'transform' && Array.isArray(value)) {\n animatedStyles[key] = new AnimatedTransform(value);\n } else if (value instanceof AnimatedNode) {\n animatedStyles[key] = value;\n } else if (value && !Array.isArray(value) && typeof value === 'object') {\n animatedStyles[key] = createAnimatedStyle(value);\n }\n }\n return animatedStyles;\n}\nclass AnimatedStyle extends AnimatedWithChildren {\n constructor(style) {\n super();\n this._inputStyle = style;\n this._style = createAnimatedStyle(style);\n }\n\n // Recursively get values for nested styles (like iOS's shadowOffset)\n _walkStyleAndGetValues(style) {\n var updatedStyle = {};\n for (var key in style) {\n var value = style[key];\n if (value instanceof AnimatedNode) {\n if (!value.__isNative) {\n // We cannot use value of natively driven nodes this way as the value we have access from\n // JS may not be up to date.\n updatedStyle[key] = value.__getValue();\n }\n } else if (value && !Array.isArray(value) && typeof value === 'object') {\n // Support animating nested values (for example: shadowOffset.height)\n updatedStyle[key] = this._walkStyleAndGetValues(value);\n } else {\n updatedStyle[key] = value;\n }\n }\n return updatedStyle;\n }\n __getValue() {\n return [this._inputStyle, this._walkStyleAndGetValues(this._style)];\n }\n\n // Recursively get animated values for nested styles (like iOS's shadowOffset)\n _walkStyleAndGetAnimatedValues(style) {\n var updatedStyle = {};\n for (var key in style) {\n var value = style[key];\n if (value instanceof AnimatedNode) {\n updatedStyle[key] = value.__getAnimatedValue();\n } else if (value && !Array.isArray(value) && typeof value === 'object') {\n // Support animating nested values (for example: shadowOffset.height)\n updatedStyle[key] = this._walkStyleAndGetAnimatedValues(value);\n }\n }\n return updatedStyle;\n }\n __getAnimatedValue() {\n return this._walkStyleAndGetAnimatedValues(this._style);\n }\n __attach() {\n for (var key in this._style) {\n var value = this._style[key];\n if (value instanceof AnimatedNode) {\n value.__addChild(this);\n }\n }\n }\n __detach() {\n for (var key in this._style) {\n var value = this._style[key];\n if (value instanceof AnimatedNode) {\n value.__removeChild(this);\n }\n }\n super.__detach();\n }\n __makeNative() {\n for (var key in this._style) {\n var value = this._style[key];\n if (value instanceof AnimatedNode) {\n value.__makeNative();\n }\n }\n super.__makeNative();\n }\n __getNativeConfig() {\n var styleConfig = {};\n for (var styleKey in this._style) {\n if (this._style[styleKey] instanceof AnimatedNode) {\n var style = this._style[styleKey];\n style.__makeNative();\n styleConfig[styleKey] = style.__getNativeTag();\n }\n }\n NativeAnimatedHelper.validateStyles(styleConfig);\n return {\n type: 'style',\n style: styleConfig\n };\n }\n}\nexport default AnimatedStyle;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedNode from './AnimatedNode';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nclass AnimatedTransform extends AnimatedWithChildren {\n constructor(transforms) {\n super();\n this._transforms = transforms;\n }\n __makeNative() {\n this._transforms.forEach(transform => {\n for (var key in transform) {\n var value = transform[key];\n if (value instanceof AnimatedNode) {\n value.__makeNative();\n }\n }\n });\n super.__makeNative();\n }\n __getValue() {\n return this._transforms.map(transform => {\n var result = {};\n for (var key in transform) {\n var value = transform[key];\n if (value instanceof AnimatedNode) {\n result[key] = value.__getValue();\n } else {\n result[key] = value;\n }\n }\n return result;\n });\n }\n __getAnimatedValue() {\n return this._transforms.map(transform => {\n var result = {};\n for (var key in transform) {\n var value = transform[key];\n if (value instanceof AnimatedNode) {\n result[key] = value.__getAnimatedValue();\n } else {\n // All transform components needed to recompose matrix\n result[key] = value;\n }\n }\n return result;\n });\n }\n __attach() {\n this._transforms.forEach(transform => {\n for (var key in transform) {\n var value = transform[key];\n if (value instanceof AnimatedNode) {\n value.__addChild(this);\n }\n }\n });\n }\n __detach() {\n this._transforms.forEach(transform => {\n for (var key in transform) {\n var value = transform[key];\n if (value instanceof AnimatedNode) {\n value.__removeChild(this);\n }\n }\n });\n super.__detach();\n }\n __getNativeConfig() {\n var transConfigs = [];\n this._transforms.forEach(transform => {\n for (var key in transform) {\n var value = transform[key];\n if (value instanceof AnimatedNode) {\n transConfigs.push({\n type: 'animated',\n property: key,\n nodeTag: value.__getNativeTag()\n });\n } else {\n transConfigs.push({\n type: 'static',\n property: key,\n value: NativeAnimatedHelper.transformDataType(value)\n });\n }\n }\n });\n NativeAnimatedHelper.validateTransform(transConfigs);\n return {\n type: 'transform',\n transforms: transConfigs\n };\n }\n}\nexport default AnimatedTransform;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport { useCallback, useRef } from 'react';\n/**\n * Constructs a callback ref that provides similar semantics as `useEffect`. The\n * supplied `effect` callback will be called with non-null component instances.\n * The `effect` callback can also optionally return a cleanup function.\n *\n * When a component is updated or unmounted, the cleanup function is called. The\n * `effect` callback will then be called again, if applicable.\n *\n * When a new `effect` callback is supplied, the previously returned cleanup\n * function will be called before the new `effect` callback is called with the\n * same instance.\n *\n * WARNING: The `effect` callback should be stable (e.g. using `useCallback`).\n */\nexport default function useRefEffect(effect) {\n var cleanupRef = useRef(undefined);\n return useCallback(instance => {\n if (cleanupRef.current) {\n cleanupRef.current();\n cleanupRef.current = undefined;\n }\n if (instance != null) {\n cleanupRef.current = effect(instance);\n }\n }, [effect]);\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport { useCallback } from 'react';\n/**\n * Constructs a new ref that forwards new values to each of the given refs. The\n * given refs will always be invoked in the order that they are supplied.\n *\n * WARNING: A known problem of merging refs using this approach is that if any\n * of the given refs change, the returned callback ref will also be changed. If\n * the returned callback ref is supplied as a `ref` to a React element, this may\n * lead to problems with the given refs being invoked more times than desired.\n */\nexport default function useMergeRefs() {\n for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {\n refs[_key] = arguments[_key];\n }\n return useCallback(current => {\n for (var _i = 0, _refs = refs; _i < _refs.length; _i++) {\n var ref = _refs[_i];\n if (ref != null) {\n if (typeof ref === 'function') {\n ref(current);\n } else {\n ref.current = current;\n }\n }\n }\n }, [...refs] // eslint-disable-line react-hooks/exhaustive-deps\n );\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport * as React from 'react';\nimport Image from '../../../../exports/Image';\nimport createAnimatedComponent from '../createAnimatedComponent';\nexport default createAnimatedComponent(Image);","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"aria-label\", \"blurRadius\", \"defaultSource\", \"draggable\", \"onError\", \"onLayout\", \"onLoad\", \"onLoadEnd\", \"onLoadStart\", \"pointerEvents\", \"source\", \"style\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport { getAssetByID } from '../../modules/AssetRegistry';\nimport { createBoxShadowValue } from '../StyleSheet/preprocess';\nimport ImageLoader from '../../modules/ImageLoader';\nimport PixelRatio from '../PixelRatio';\nimport StyleSheet from '../StyleSheet';\nimport TextAncestorContext from '../Text/TextAncestorContext';\nimport View from '../View';\nimport { warnOnce } from '../../modules/warnOnce';\nvar ERRORED = 'ERRORED';\nvar LOADED = 'LOADED';\nvar LOADING = 'LOADING';\nvar IDLE = 'IDLE';\nvar _filterId = 0;\nvar svgDataUriPattern = /^(data:image\\/svg\\+xml;utf8,)(.*)/;\nfunction createTintColorSVG(tintColor, id) {\n return tintColor && id != null ? /*#__PURE__*/React.createElement(\"svg\", {\n style: {\n position: 'absolute',\n height: 0,\n visibility: 'hidden',\n width: 0\n }\n }, /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"filter\", {\n id: \"tint-\" + id,\n suppressHydrationWarning: true\n }, /*#__PURE__*/React.createElement(\"feFlood\", {\n floodColor: \"\" + tintColor,\n key: tintColor\n }), /*#__PURE__*/React.createElement(\"feComposite\", {\n in2: \"SourceAlpha\",\n operator: \"atop\"\n })))) : null;\n}\nfunction extractNonStandardStyleProps(style, blurRadius, filterId, tintColorProp) {\n var flatStyle = StyleSheet.flatten(style);\n var filter = flatStyle.filter,\n resizeMode = flatStyle.resizeMode,\n shadowOffset = flatStyle.shadowOffset,\n tintColor = flatStyle.tintColor;\n if (flatStyle.resizeMode) {\n warnOnce('Image.style.resizeMode', 'Image: style.resizeMode is deprecated. Please use props.resizeMode.');\n }\n if (flatStyle.tintColor) {\n warnOnce('Image.style.tintColor', 'Image: style.tintColor is deprecated. Please use props.tintColor.');\n }\n\n // Add CSS filters\n // React Native exposes these features as props and proprietary styles\n var filters = [];\n var _filter = null;\n if (filter) {\n filters.push(filter);\n }\n if (blurRadius) {\n filters.push(\"blur(\" + blurRadius + \"px)\");\n }\n if (shadowOffset) {\n var shadowString = createBoxShadowValue(flatStyle);\n if (shadowString) {\n filters.push(\"drop-shadow(\" + shadowString + \")\");\n }\n }\n if ((tintColorProp || tintColor) && filterId != null) {\n filters.push(\"url(#tint-\" + filterId + \")\");\n }\n if (filters.length > 0) {\n _filter = filters.join(' ');\n }\n return [resizeMode, _filter, tintColor];\n}\nfunction resolveAssetDimensions(source) {\n if (typeof source === 'number') {\n var _getAssetByID = getAssetByID(source),\n _height = _getAssetByID.height,\n _width = _getAssetByID.width;\n return {\n height: _height,\n width: _width\n };\n } else if (source != null && !Array.isArray(source) && typeof source === 'object') {\n var _height2 = source.height,\n _width2 = source.width;\n return {\n height: _height2,\n width: _width2\n };\n }\n}\nfunction resolveAssetUri(source) {\n var uri = null;\n if (typeof source === 'number') {\n // get the URI from the packager\n var asset = getAssetByID(source);\n if (asset == null) {\n throw new Error(\"Image: asset with ID \\\"\" + source + \"\\\" could not be found. Please check the image source or packager.\");\n }\n var scale = asset.scales[0];\n if (asset.scales.length > 1) {\n var preferredScale = PixelRatio.get();\n // Get the scale which is closest to the preferred scale\n scale = asset.scales.reduce((prev, curr) => Math.abs(curr - preferredScale) < Math.abs(prev - preferredScale) ? curr : prev);\n }\n var scaleSuffix = scale !== 1 ? \"@\" + scale + \"x\" : '';\n uri = asset ? asset.httpServerLocation + \"/\" + asset.name + scaleSuffix + \".\" + asset.type : '';\n } else if (typeof source === 'string') {\n uri = source;\n } else if (source && typeof source.uri === 'string') {\n uri = source.uri;\n }\n if (uri) {\n var match = uri.match(svgDataUriPattern);\n // inline SVG markup may contain characters (e.g., #, \") that need to be escaped\n if (match) {\n var prefix = match[1],\n svg = match[2];\n var encodedSvg = encodeURIComponent(svg);\n return \"\" + prefix + encodedSvg;\n }\n }\n return uri;\n}\nvar Image = /*#__PURE__*/React.forwardRef((props, ref) => {\n var ariaLabel = props['aria-label'],\n blurRadius = props.blurRadius,\n defaultSource = props.defaultSource,\n draggable = props.draggable,\n onError = props.onError,\n onLayout = props.onLayout,\n onLoad = props.onLoad,\n onLoadEnd = props.onLoadEnd,\n onLoadStart = props.onLoadStart,\n pointerEvents = props.pointerEvents,\n source = props.source,\n style = props.style,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n if (process.env.NODE_ENV !== 'production') {\n if (props.children) {\n throw new Error('The component cannot contain children. If you want to render content on top of the image, consider using the component or absolute positioning.');\n }\n }\n var _React$useState = React.useState(() => {\n var uri = resolveAssetUri(source);\n if (uri != null) {\n var isLoaded = ImageLoader.has(uri);\n if (isLoaded) {\n return LOADED;\n }\n }\n return IDLE;\n }),\n state = _React$useState[0],\n updateState = _React$useState[1];\n var _React$useState2 = React.useState({}),\n layout = _React$useState2[0],\n updateLayout = _React$useState2[1];\n var hasTextAncestor = React.useContext(TextAncestorContext);\n var hiddenImageRef = React.useRef(null);\n var filterRef = React.useRef(_filterId++);\n var requestRef = React.useRef(null);\n var shouldDisplaySource = state === LOADED || state === LOADING && defaultSource == null;\n var _extractNonStandardSt = extractNonStandardStyleProps(style, blurRadius, filterRef.current, props.tintColor),\n _resizeMode = _extractNonStandardSt[0],\n filter = _extractNonStandardSt[1],\n _tintColor = _extractNonStandardSt[2];\n var resizeMode = props.resizeMode || _resizeMode || 'cover';\n var tintColor = props.tintColor || _tintColor;\n var selectedSource = shouldDisplaySource ? source : defaultSource;\n var displayImageUri = resolveAssetUri(selectedSource);\n var imageSizeStyle = resolveAssetDimensions(selectedSource);\n var backgroundImage = displayImageUri ? \"url(\\\"\" + displayImageUri + \"\\\")\" : null;\n var backgroundSize = getBackgroundSize();\n\n // Accessibility image allows users to trigger the browser's image context menu\n var hiddenImage = displayImageUri ? createElement('img', {\n alt: ariaLabel || '',\n style: styles.accessibilityImage$raw,\n draggable: draggable || false,\n ref: hiddenImageRef,\n src: displayImageUri\n }) : null;\n function getBackgroundSize() {\n if (hiddenImageRef.current != null && (resizeMode === 'center' || resizeMode === 'repeat')) {\n var _hiddenImageRef$curre = hiddenImageRef.current,\n naturalHeight = _hiddenImageRef$curre.naturalHeight,\n naturalWidth = _hiddenImageRef$curre.naturalWidth;\n var _height3 = layout.height,\n _width3 = layout.width;\n if (naturalHeight && naturalWidth && _height3 && _width3) {\n var scaleFactor = Math.min(1, _width3 / naturalWidth, _height3 / naturalHeight);\n var x = Math.ceil(scaleFactor * naturalWidth);\n var y = Math.ceil(scaleFactor * naturalHeight);\n return x + \"px \" + y + \"px\";\n }\n }\n }\n function handleLayout(e) {\n if (resizeMode === 'center' || resizeMode === 'repeat' || onLayout) {\n var _layout = e.nativeEvent.layout;\n onLayout && onLayout(e);\n updateLayout(_layout);\n }\n }\n\n // Image loading\n var uri = resolveAssetUri(source);\n React.useEffect(() => {\n abortPendingRequest();\n if (uri != null) {\n updateState(LOADING);\n if (onLoadStart) {\n onLoadStart();\n }\n requestRef.current = ImageLoader.load(uri, function load(e) {\n updateState(LOADED);\n if (onLoad) {\n onLoad(e);\n }\n if (onLoadEnd) {\n onLoadEnd();\n }\n }, function error() {\n updateState(ERRORED);\n if (onError) {\n onError({\n nativeEvent: {\n error: \"Failed to load resource \" + uri + \" (404)\"\n }\n });\n }\n if (onLoadEnd) {\n onLoadEnd();\n }\n });\n }\n function abortPendingRequest() {\n if (requestRef.current != null) {\n ImageLoader.abort(requestRef.current);\n requestRef.current = null;\n }\n }\n return abortPendingRequest;\n }, [uri, requestRef, updateState, onError, onLoad, onLoadEnd, onLoadStart]);\n return /*#__PURE__*/React.createElement(View, _extends({}, rest, {\n \"aria-label\": ariaLabel,\n onLayout: handleLayout,\n pointerEvents: pointerEvents,\n ref: ref,\n style: [styles.root, hasTextAncestor && styles.inline, imageSizeStyle, style, styles.undo,\n // TEMP: avoid deprecated shadow props regression\n // until Image refactored to use createElement.\n {\n boxShadow: null\n }]\n }), /*#__PURE__*/React.createElement(View, {\n style: [styles.image, resizeModeStyles[resizeMode], {\n backgroundImage,\n filter\n }, backgroundSize != null && {\n backgroundSize\n }],\n suppressHydrationWarning: true\n }), hiddenImage, createTintColorSVG(tintColor, filterRef.current));\n});\nImage.displayName = 'Image';\n\n// $FlowIgnore: This is the correct type, but casting makes it unhappy since the variables aren't defined yet\nvar ImageWithStatics = Image;\nImageWithStatics.getSize = function (uri, success, failure) {\n ImageLoader.getSize(uri, success, failure);\n};\nImageWithStatics.prefetch = function (uri) {\n return ImageLoader.prefetch(uri);\n};\nImageWithStatics.queryCache = function (uris) {\n return ImageLoader.queryCache(uris);\n};\nvar styles = StyleSheet.create({\n root: {\n flexBasis: 'auto',\n overflow: 'hidden',\n zIndex: 0\n },\n inline: {\n display: 'inline-flex'\n },\n undo: {\n // These styles are converted to CSS filters applied to the\n // element displaying the background image.\n blurRadius: null,\n shadowColor: null,\n shadowOpacity: null,\n shadowOffset: null,\n shadowRadius: null,\n tintColor: null,\n // These styles are not supported\n overlayColor: null,\n resizeMode: null\n },\n image: _objectSpread(_objectSpread({}, StyleSheet.absoluteFillObject), {}, {\n backgroundColor: 'transparent',\n backgroundPosition: 'center',\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover',\n height: '100%',\n width: '100%',\n zIndex: -1\n }),\n accessibilityImage$raw: _objectSpread(_objectSpread({}, StyleSheet.absoluteFillObject), {}, {\n height: '100%',\n opacity: 0,\n width: '100%',\n zIndex: -1\n })\n});\nvar resizeModeStyles = StyleSheet.create({\n center: {\n backgroundSize: 'auto'\n },\n contain: {\n backgroundSize: 'contain'\n },\n cover: {\n backgroundSize: 'cover'\n },\n none: {\n backgroundPosition: '0',\n backgroundSize: 'auto'\n },\n repeat: {\n backgroundPosition: '0',\n backgroundRepeat: 'repeat',\n backgroundSize: 'auto'\n },\n stretch: {\n backgroundSize: '100% 100%'\n }\n});\nexport default ImageWithStatics;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\n'use strict';\n\nexport type PackagerAsset = {\n +__packager_asset: boolean,\n +fileSystemLocation: string,\n +httpServerLocation: string,\n +width: ?number,\n +height: ?number,\n +scales: Array,\n +hash: string,\n +name: string,\n +type: string,\n ...\n};\n\nconst assets: Array = [];\n\nfunction registerAsset(asset: PackagerAsset): number {\n // `push` returns new array length, so the first asset will\n // get id 1 (not 0) to make the value truthy\n return assets.push(asset);\n}\n\nfunction getAssetByID(assetId: number): PackagerAsset {\n return assets[assetId - 1];\n}\n\nmodule.exports = {registerAsset, getAssetByID};\n","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar dataUriPattern = /^data:/;\nexport class ImageUriCache {\n static has(uri) {\n var entries = ImageUriCache._entries;\n var isDataUri = dataUriPattern.test(uri);\n return isDataUri || Boolean(entries[uri]);\n }\n static add(uri) {\n var entries = ImageUriCache._entries;\n var lastUsedTimestamp = Date.now();\n if (entries[uri]) {\n entries[uri].lastUsedTimestamp = lastUsedTimestamp;\n entries[uri].refCount += 1;\n } else {\n entries[uri] = {\n lastUsedTimestamp,\n refCount: 1\n };\n }\n }\n static remove(uri) {\n var entries = ImageUriCache._entries;\n if (entries[uri]) {\n entries[uri].refCount -= 1;\n }\n // Free up entries when the cache is \"full\"\n ImageUriCache._cleanUpIfNeeded();\n }\n static _cleanUpIfNeeded() {\n var entries = ImageUriCache._entries;\n var imageUris = Object.keys(entries);\n if (imageUris.length + 1 > ImageUriCache._maximumEntries) {\n var leastRecentlyUsedKey;\n var leastRecentlyUsedEntry;\n imageUris.forEach(uri => {\n var entry = entries[uri];\n if ((!leastRecentlyUsedEntry || entry.lastUsedTimestamp < leastRecentlyUsedEntry.lastUsedTimestamp) && entry.refCount === 0) {\n leastRecentlyUsedKey = uri;\n leastRecentlyUsedEntry = entry;\n }\n });\n if (leastRecentlyUsedKey) {\n delete entries[leastRecentlyUsedKey];\n }\n }\n }\n}\nImageUriCache._maximumEntries = 256;\nImageUriCache._entries = {};\nvar id = 0;\nvar requests = {};\nvar ImageLoader = {\n abort(requestId) {\n var image = requests[\"\" + requestId];\n if (image) {\n image.onerror = null;\n image.onload = null;\n image = null;\n delete requests[\"\" + requestId];\n }\n },\n getSize(uri, success, failure) {\n var complete = false;\n var interval = setInterval(callback, 16);\n var requestId = ImageLoader.load(uri, callback, errorCallback);\n function callback() {\n var image = requests[\"\" + requestId];\n if (image) {\n var naturalHeight = image.naturalHeight,\n naturalWidth = image.naturalWidth;\n if (naturalHeight && naturalWidth) {\n success(naturalWidth, naturalHeight);\n complete = true;\n }\n }\n if (complete) {\n ImageLoader.abort(requestId);\n clearInterval(interval);\n }\n }\n function errorCallback() {\n if (typeof failure === 'function') {\n failure();\n }\n ImageLoader.abort(requestId);\n clearInterval(interval);\n }\n },\n has(uri) {\n return ImageUriCache.has(uri);\n },\n load(uri, onLoad, onError) {\n id += 1;\n var image = new window.Image();\n image.onerror = onError;\n image.onload = e => {\n // avoid blocking the main thread\n var onDecode = () => onLoad({\n nativeEvent: e\n });\n if (typeof image.decode === 'function') {\n // Safari currently throws exceptions when decoding svgs.\n // We want to catch that error and allow the load handler\n // to be forwarded to the onLoad handler in this case\n image.decode().then(onDecode, onDecode);\n } else {\n setTimeout(onDecode, 0);\n }\n };\n image.src = uri;\n requests[\"\" + id] = image;\n return id;\n },\n prefetch(uri) {\n return new Promise((resolve, reject) => {\n ImageLoader.load(uri, () => {\n // Add the uri to the cache so it can be immediately displayed when used\n // but also immediately remove it to correctly reflect that it has no active references\n ImageUriCache.add(uri);\n ImageUriCache.remove(uri);\n resolve();\n }, reject);\n });\n },\n queryCache(uris) {\n var result = {};\n uris.forEach(u => {\n if (ImageUriCache.has(u)) {\n result[u] = 'disk/memory';\n }\n });\n return Promise.resolve(result);\n }\n};\nexport default ImageLoader;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport Dimensions from '../Dimensions';\n\n/**\n * PixelRatio gives access to the device pixel density.\n */\nexport default class PixelRatio {\n /**\n * Returns the device pixel density.\n */\n static get() {\n return Dimensions.get('window').scale;\n }\n\n /**\n * No equivalent for Web\n */\n static getFontScale() {\n return Dimensions.get('window').fontScale || PixelRatio.get();\n }\n\n /**\n * Converts a layout size (dp) to pixel size (px).\n * Guaranteed to return an integer number.\n */\n static getPixelSizeForLayoutSize(layoutSize) {\n return Math.round(layoutSize * PixelRatio.get());\n }\n\n /**\n * Rounds a layout size (dp) to the nearest layout size that corresponds to\n * an integer number of pixels. For example, on a device with a PixelRatio\n * of 3, `PixelRatio.roundToNearestPixel(8.4) = 8.33`, which corresponds to\n * exactly (8.33 * 3) = 25 pixels.\n */\n static roundToNearestPixel(layoutSize) {\n var ratio = PixelRatio.get();\n return Math.round(layoutSize * ratio) / ratio;\n }\n}","import _extends from \"@babel/runtime/helpers/extends\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport * as React from 'react';\nimport ScrollView from '../../../../exports/ScrollView';\nimport createAnimatedComponent from '../createAnimatedComponent';\n/**\n * @see https://github.com/facebook/react-native/commit/b8c8562\n */\nvar ScrollViewWithEventThrottle = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(ScrollView, _extends({\n scrollEventThrottle: 0.0001\n}, props, {\n ref: ref\n})));\nexport default createAnimatedComponent(ScrollViewWithEventThrottle);","import _extends from \"@babel/runtime/helpers/extends\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport * as React from 'react';\nimport SectionList from '../../../../exports/SectionList';\nimport createAnimatedComponent from '../createAnimatedComponent';\n/**\n * @see https://github.com/facebook/react-native/commit/b8c8562\n */\nvar SectionListWithEventThrottle = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SectionList, _extends({\n scrollEventThrottle: 0.0001\n}, props, {\n ref: ref\n})));\nexport default createAnimatedComponent(SectionListWithEventThrottle);","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport SectionList from '../../vendor/react-native/SectionList';\nexport default SectionList;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"stickySectionHeadersEnabled\"];\nimport Platform from '../../../exports/Platform';\nimport * as React from 'react';\nimport VirtualizedSectionList from '../VirtualizedSectionList';\n/**\n * A performant interface for rendering sectioned lists, supporting the most handy features:\n *\n * - Fully cross-platform.\n * - Configurable viewability callbacks.\n * - List header support.\n * - List footer support.\n * - Item separator support.\n * - Section header support.\n * - Section separator support.\n * - Heterogeneous data and item rendering support.\n * - Pull to Refresh.\n * - Scroll loading.\n *\n * If you don't need section support and want a simpler interface, use\n * [``](https://reactnative.dev/docs/flatlist).\n *\n * Simple Examples:\n *\n * }\n * renderSectionHeader={({section}) =>
}\n * sections={[ // homogeneous rendering between sections\n * {data: [...], title: ...},\n * {data: [...], title: ...},\n * {data: [...], title: ...},\n * ]}\n * />\n *\n * \n *\n * This is a convenience wrapper around [``](docs/virtualizedlist),\n * and thus inherits its props (as well as those of `ScrollView`) that aren't explicitly listed\n * here, along with the following caveats:\n *\n * - Internal state is not preserved when content scrolls out of the render window. Make sure all\n * your data is captured in the item data or external stores like Flux, Redux, or Relay.\n * - This is a `PureComponent` which means that it will not re-render if `props` remain shallow-\n * equal. Make sure that everything your `renderItem` function depends on is passed as a prop\n * (e.g. `extraData`) that is not `===` after updates, otherwise your UI may not update on\n * changes. This includes the `data` prop and parent component state.\n * - In order to constrain memory and enable smooth scrolling, content is rendered asynchronously\n * offscreen. This means it's possible to scroll faster than the fill rate and momentarily see\n * blank content. This is a tradeoff that can be adjusted to suit the needs of each application,\n * and we are working on improving it behind the scenes.\n * - By default, the list looks for a `key` prop on each item and uses that for the React key.\n * Alternatively, you can provide a custom `keyExtractor` prop.\n *\n */\nexport default class SectionList extends React.PureComponent {\n constructor() {\n super(...arguments);\n this._captureRef = ref => {\n this._wrapperListRef = ref;\n };\n }\n /**\n * Scrolls to the item at the specified `sectionIndex` and `itemIndex` (within the section)\n * positioned in the viewable area such that `viewPosition` 0 places it at the top (and may be\n * covered by a sticky header), 1 at the bottom, and 0.5 centered in the middle. `viewOffset` is a\n * fixed number of pixels to offset the final target position, e.g. to compensate for sticky\n * headers.\n *\n * Note: cannot scroll to locations outside the render window without specifying the\n * `getItemLayout` prop.\n */\n scrollToLocation(params) {\n if (this._wrapperListRef != null) {\n this._wrapperListRef.scrollToLocation(params);\n }\n }\n\n /**\n * Tells the list an interaction has occurred, which should trigger viewability calculations, e.g.\n * if `waitForInteractions` is true and the user has not scrolled. This is typically called by\n * taps on items or by navigation actions.\n */\n recordInteraction() {\n var listRef = this._wrapperListRef && this._wrapperListRef.getListRef();\n listRef && listRef.recordInteraction();\n }\n\n /**\n * Displays the scroll indicators momentarily.\n *\n * @platform ios\n */\n flashScrollIndicators() {\n var listRef = this._wrapperListRef && this._wrapperListRef.getListRef();\n listRef && listRef.flashScrollIndicators();\n }\n\n /**\n * Provides a handle to the underlying scroll responder.\n */\n getScrollResponder() {\n var listRef = this._wrapperListRef && this._wrapperListRef.getListRef();\n if (listRef) {\n return listRef.getScrollResponder();\n }\n }\n getScrollableNode() {\n var listRef = this._wrapperListRef && this._wrapperListRef.getListRef();\n if (listRef) {\n return listRef.getScrollableNode();\n }\n }\n render() {\n var _this$props = this.props,\n _stickySectionHeadersEnabled = _this$props.stickySectionHeadersEnabled,\n restProps = _objectWithoutPropertiesLoose(_this$props, _excluded);\n var stickySectionHeadersEnabled = _stickySectionHeadersEnabled !== null && _stickySectionHeadersEnabled !== void 0 ? _stickySectionHeadersEnabled : Platform.OS === 'ios';\n return /*#__PURE__*/React.createElement(VirtualizedSectionList, _extends({}, restProps, {\n stickySectionHeadersEnabled: stickySectionHeadersEnabled,\n ref: this._captureRef,\n getItemCount: items => items.length,\n getItem: (items, index) => items[index]\n }));\n }\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _createForOfIteratorHelperLoose from \"@babel/runtime/helpers/createForOfIteratorHelperLoose\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nvar _excluded = [\"ItemSeparatorComponent\", \"SectionSeparatorComponent\", \"renderItem\", \"renderSectionFooter\", \"renderSectionHeader\", \"sections\", \"stickySectionHeadersEnabled\"];\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport View from '../../../exports/View';\nimport VirtualizedList from '../VirtualizedList';\nimport { keyExtractor as defaultKeyExtractor } from '../VirtualizeUtils';\nimport invariant from 'fbjs/lib/invariant';\nimport * as React from 'react';\n/**\n * Right now this just flattens everything into one list and uses VirtualizedList under the\n * hood. The only operation that might not scale well is concatting the data arrays of all the\n * sections when new props are received, which should be plenty fast for up to ~10,000 items.\n */\nclass VirtualizedSectionList extends React.PureComponent {\n constructor() {\n super(...arguments);\n this._keyExtractor = (item, index) => {\n var info = this._subExtractor(index);\n return info && info.key || String(index);\n };\n this._convertViewable = viewable => {\n var _info$index;\n invariant(viewable.index != null, 'Received a broken ViewToken');\n var info = this._subExtractor(viewable.index);\n if (!info) {\n return null;\n }\n var keyExtractorWithNullableIndex = info.section.keyExtractor;\n var keyExtractorWithNonNullableIndex = this.props.keyExtractor || defaultKeyExtractor;\n var key = keyExtractorWithNullableIndex != null ? keyExtractorWithNullableIndex(viewable.item, info.index) : keyExtractorWithNonNullableIndex(viewable.item, (_info$index = info.index) !== null && _info$index !== void 0 ? _info$index : 0);\n return _objectSpread(_objectSpread({}, viewable), {}, {\n index: info.index,\n key,\n section: info.section\n });\n };\n this._onViewableItemsChanged = _ref => {\n var viewableItems = _ref.viewableItems,\n changed = _ref.changed;\n var onViewableItemsChanged = this.props.onViewableItemsChanged;\n if (onViewableItemsChanged != null) {\n onViewableItemsChanged({\n viewableItems: viewableItems.map(this._convertViewable, this).filter(Boolean),\n changed: changed.map(this._convertViewable, this).filter(Boolean)\n });\n }\n };\n this._renderItem = listItemCount =>\n // eslint-disable-next-line react/no-unstable-nested-components\n _ref2 => {\n var item = _ref2.item,\n index = _ref2.index;\n var info = this._subExtractor(index);\n if (!info) {\n return null;\n }\n var infoIndex = info.index;\n if (infoIndex == null) {\n var section = info.section;\n if (info.header === true) {\n var renderSectionHeader = this.props.renderSectionHeader;\n return renderSectionHeader ? renderSectionHeader({\n section\n }) : null;\n } else {\n var renderSectionFooter = this.props.renderSectionFooter;\n return renderSectionFooter ? renderSectionFooter({\n section\n }) : null;\n }\n } else {\n var renderItem = info.section.renderItem || this.props.renderItem;\n var SeparatorComponent = this._getSeparatorComponent(index, info, listItemCount);\n invariant(renderItem, 'no renderItem!');\n return /*#__PURE__*/React.createElement(ItemWithSeparator, {\n SeparatorComponent: SeparatorComponent,\n LeadingSeparatorComponent: infoIndex === 0 ? this.props.SectionSeparatorComponent : undefined,\n cellKey: info.key,\n index: infoIndex,\n item: item,\n leadingItem: info.leadingItem,\n leadingSection: info.leadingSection,\n prevCellKey: (this._subExtractor(index - 1) || {}).key\n // Callback to provide updateHighlight for this item\n ,\n setSelfHighlightCallback: this._setUpdateHighlightFor,\n setSelfUpdatePropsCallback: this._setUpdatePropsFor\n // Provide child ability to set highlight/updateProps for previous item using prevCellKey\n ,\n updateHighlightFor: this._updateHighlightFor,\n updatePropsFor: this._updatePropsFor,\n renderItem: renderItem,\n section: info.section,\n trailingItem: info.trailingItem,\n trailingSection: info.trailingSection,\n inverted: !!this.props.inverted\n });\n }\n };\n this._updatePropsFor = (cellKey, value) => {\n var updateProps = this._updatePropsMap[cellKey];\n if (updateProps != null) {\n updateProps(value);\n }\n };\n this._updateHighlightFor = (cellKey, value) => {\n var updateHighlight = this._updateHighlightMap[cellKey];\n if (updateHighlight != null) {\n updateHighlight(value);\n }\n };\n this._setUpdateHighlightFor = (cellKey, updateHighlightFn) => {\n if (updateHighlightFn != null) {\n this._updateHighlightMap[cellKey] = updateHighlightFn;\n } else {\n // $FlowFixMe[prop-missing]\n delete this._updateHighlightFor[cellKey];\n }\n };\n this._setUpdatePropsFor = (cellKey, updatePropsFn) => {\n if (updatePropsFn != null) {\n this._updatePropsMap[cellKey] = updatePropsFn;\n } else {\n delete this._updatePropsMap[cellKey];\n }\n };\n this._updateHighlightMap = {};\n this._updatePropsMap = {};\n this._captureRef = ref => {\n this._listRef = ref;\n };\n }\n scrollToLocation(params) {\n var index = params.itemIndex;\n for (var i = 0; i < params.sectionIndex; i++) {\n index += this.props.getItemCount(this.props.sections[i].data) + 2;\n }\n var viewOffset = params.viewOffset || 0;\n if (this._listRef == null) {\n return;\n }\n if (params.itemIndex > 0 && this.props.stickySectionHeadersEnabled) {\n var frame = this._listRef.__getFrameMetricsApprox(index - params.itemIndex, this._listRef.props);\n viewOffset += frame.length;\n }\n var toIndexParams = _objectSpread(_objectSpread({}, params), {}, {\n viewOffset,\n index\n });\n // $FlowFixMe[incompatible-use]\n this._listRef.scrollToIndex(toIndexParams);\n }\n getListRef() {\n return this._listRef;\n }\n render() {\n var _this$props = this.props,\n ItemSeparatorComponent = _this$props.ItemSeparatorComponent,\n SectionSeparatorComponent = _this$props.SectionSeparatorComponent,\n _renderItem = _this$props.renderItem,\n renderSectionFooter = _this$props.renderSectionFooter,\n renderSectionHeader = _this$props.renderSectionHeader,\n _sections = _this$props.sections,\n stickySectionHeadersEnabled = _this$props.stickySectionHeadersEnabled,\n passThroughProps = _objectWithoutPropertiesLoose(_this$props, _excluded);\n var listHeaderOffset = this.props.ListHeaderComponent ? 1 : 0;\n var stickyHeaderIndices = this.props.stickySectionHeadersEnabled ? [] : undefined;\n var itemCount = 0;\n for (var _iterator = _createForOfIteratorHelperLoose(this.props.sections), _step; !(_step = _iterator()).done;) {\n var section = _step.value;\n // Track the section header indices\n if (stickyHeaderIndices != null) {\n stickyHeaderIndices.push(itemCount + listHeaderOffset);\n }\n\n // Add two for the section header and footer.\n itemCount += 2;\n itemCount += this.props.getItemCount(section.data);\n }\n var renderItem = this._renderItem(itemCount);\n return /*#__PURE__*/React.createElement(VirtualizedList, _extends({}, passThroughProps, {\n keyExtractor: this._keyExtractor,\n stickyHeaderIndices: stickyHeaderIndices,\n renderItem: renderItem,\n data: this.props.sections,\n getItem: (sections, index) => this._getItem(this.props, sections, index),\n getItemCount: () => itemCount,\n onViewableItemsChanged: this.props.onViewableItemsChanged ? this._onViewableItemsChanged : undefined,\n ref: this._captureRef\n }));\n }\n _getItem(props, sections, index) {\n if (!sections) {\n return null;\n }\n var itemIdx = index - 1;\n for (var i = 0; i < sections.length; i++) {\n var section = sections[i];\n var sectionData = section.data;\n var itemCount = props.getItemCount(sectionData);\n if (itemIdx === -1 || itemIdx === itemCount) {\n // We intend for there to be overflow by one on both ends of the list.\n // This will be for headers and footers. When returning a header or footer\n // item the section itself is the item.\n return section;\n } else if (itemIdx < itemCount) {\n // If we are in the bounds of the list's data then return the item.\n return props.getItem(sectionData, itemIdx);\n } else {\n itemIdx -= itemCount + 2; // Add two for the header and footer\n }\n }\n\n return null;\n }\n\n // $FlowFixMe[missing-local-annot]\n\n _subExtractor(index) {\n var itemIndex = index;\n var _this$props2 = this.props,\n getItem = _this$props2.getItem,\n getItemCount = _this$props2.getItemCount,\n keyExtractor = _this$props2.keyExtractor,\n sections = _this$props2.sections;\n for (var i = 0; i < sections.length; i++) {\n var section = sections[i];\n var sectionData = section.data;\n var key = section.key || String(i);\n itemIndex -= 1; // The section adds an item for the header\n if (itemIndex >= getItemCount(sectionData) + 1) {\n itemIndex -= getItemCount(sectionData) + 1; // The section adds an item for the footer.\n } else if (itemIndex === -1) {\n return {\n section,\n key: key + ':header',\n index: null,\n header: true,\n trailingSection: sections[i + 1]\n };\n } else if (itemIndex === getItemCount(sectionData)) {\n return {\n section,\n key: key + ':footer',\n index: null,\n header: false,\n trailingSection: sections[i + 1]\n };\n } else {\n var extractor = section.keyExtractor || keyExtractor || defaultKeyExtractor;\n return {\n section,\n key: key + ':' + extractor(getItem(sectionData, itemIndex), itemIndex),\n index: itemIndex,\n leadingItem: getItem(sectionData, itemIndex - 1),\n leadingSection: sections[i - 1],\n trailingItem: getItem(sectionData, itemIndex + 1),\n trailingSection: sections[i + 1]\n };\n }\n }\n }\n _getSeparatorComponent(index, info, listItemCount) {\n info = info || this._subExtractor(index);\n if (!info) {\n return null;\n }\n var ItemSeparatorComponent = info.section.ItemSeparatorComponent || this.props.ItemSeparatorComponent;\n var SectionSeparatorComponent = this.props.SectionSeparatorComponent;\n var isLastItemInList = index === listItemCount - 1;\n var isLastItemInSection = info.index === this.props.getItemCount(info.section.data) - 1;\n if (SectionSeparatorComponent && isLastItemInSection) {\n return SectionSeparatorComponent;\n }\n if (ItemSeparatorComponent && !isLastItemInSection && !isLastItemInList) {\n return ItemSeparatorComponent;\n }\n return null;\n }\n}\nfunction ItemWithSeparator(props) {\n var LeadingSeparatorComponent = props.LeadingSeparatorComponent,\n SeparatorComponent = props.SeparatorComponent,\n cellKey = props.cellKey,\n prevCellKey = props.prevCellKey,\n setSelfHighlightCallback = props.setSelfHighlightCallback,\n updateHighlightFor = props.updateHighlightFor,\n setSelfUpdatePropsCallback = props.setSelfUpdatePropsCallback,\n updatePropsFor = props.updatePropsFor,\n item = props.item,\n index = props.index,\n section = props.section,\n inverted = props.inverted;\n var _React$useState = React.useState(false),\n leadingSeparatorHiglighted = _React$useState[0],\n setLeadingSeparatorHighlighted = _React$useState[1];\n var _React$useState2 = React.useState(false),\n separatorHighlighted = _React$useState2[0],\n setSeparatorHighlighted = _React$useState2[1];\n var _React$useState3 = React.useState({\n leadingItem: props.leadingItem,\n leadingSection: props.leadingSection,\n section: props.section,\n trailingItem: props.item,\n trailingSection: props.trailingSection\n }),\n leadingSeparatorProps = _React$useState3[0],\n setLeadingSeparatorProps = _React$useState3[1];\n var _React$useState4 = React.useState({\n leadingItem: props.item,\n leadingSection: props.leadingSection,\n section: props.section,\n trailingItem: props.trailingItem,\n trailingSection: props.trailingSection\n }),\n separatorProps = _React$useState4[0],\n setSeparatorProps = _React$useState4[1];\n React.useEffect(() => {\n setSelfHighlightCallback(cellKey, setSeparatorHighlighted);\n // $FlowFixMe[incompatible-call]\n setSelfUpdatePropsCallback(cellKey, setSeparatorProps);\n return () => {\n setSelfUpdatePropsCallback(cellKey, null);\n setSelfHighlightCallback(cellKey, null);\n };\n }, [cellKey, setSelfHighlightCallback, setSeparatorProps, setSelfUpdatePropsCallback]);\n var separators = {\n highlight: () => {\n setLeadingSeparatorHighlighted(true);\n setSeparatorHighlighted(true);\n if (prevCellKey != null) {\n updateHighlightFor(prevCellKey, true);\n }\n },\n unhighlight: () => {\n setLeadingSeparatorHighlighted(false);\n setSeparatorHighlighted(false);\n if (prevCellKey != null) {\n updateHighlightFor(prevCellKey, false);\n }\n },\n updateProps: (select, newProps) => {\n if (select === 'leading') {\n if (LeadingSeparatorComponent != null) {\n setLeadingSeparatorProps(_objectSpread(_objectSpread({}, leadingSeparatorProps), newProps));\n } else if (prevCellKey != null) {\n // update the previous item's separator\n updatePropsFor(prevCellKey, _objectSpread(_objectSpread({}, leadingSeparatorProps), newProps));\n }\n } else if (select === 'trailing' && SeparatorComponent != null) {\n setSeparatorProps(_objectSpread(_objectSpread({}, separatorProps), newProps));\n }\n }\n };\n var element = props.renderItem({\n item,\n index,\n section,\n separators\n });\n var leadingSeparator = LeadingSeparatorComponent != null && /*#__PURE__*/React.createElement(LeadingSeparatorComponent, _extends({\n highlighted: leadingSeparatorHiglighted\n }, leadingSeparatorProps));\n var separator = SeparatorComponent != null && /*#__PURE__*/React.createElement(SeparatorComponent, _extends({\n highlighted: separatorHighlighted\n }, separatorProps));\n return leadingSeparator || separator ? /*#__PURE__*/React.createElement(View, null, inverted === false ? leadingSeparator : separator, element, inverted === false ? separator : leadingSeparator) : element;\n}\n\n/* $FlowFixMe[class-object-subtyping] added when improving typing for this\n * parameters */\n// $FlowFixMe[method-unbinding]\nexport default VirtualizedSectionList;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport * as React from 'react';\nimport Text from '../../../../exports/Text';\nimport createAnimatedComponent from '../createAnimatedComponent';\nexport default createAnimatedComponent(Text);","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport * as React from 'react';\nimport View from '../../../../exports/View';\nimport createAnimatedComponent from '../createAnimatedComponent';\nexport default createAnimatedComponent(View);","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport { AnimatedEvent, attachNativeEvent } from './AnimatedEvent';\nimport AnimatedImplementation from './AnimatedImplementation';\nimport AnimatedInterpolation from './nodes/AnimatedInterpolation';\nimport AnimatedNode from './nodes/AnimatedNode';\nimport AnimatedValue from './nodes/AnimatedValue';\nimport AnimatedValueXY from './nodes/AnimatedValueXY';\nimport createAnimatedComponent from './createAnimatedComponent';\nimport AnimatedColor from './nodes/AnimatedColor';\n\n/**\n * Animations are a source of flakiness in snapshot testing. This mock replaces\n * animation functions from AnimatedImplementation with empty animations for\n * predictability in tests. When possible the animation will run immediately\n * to the final state.\n */\n\n// Prevent any callback invocation from recursively triggering another\n// callback, which may trigger another animation\nvar inAnimationCallback = false;\nfunction mockAnimationStart(start) {\n return callback => {\n var guardedCallback = callback == null ? callback : function () {\n if (inAnimationCallback) {\n console.warn('Ignoring recursive animation callback when running mock animations');\n return;\n }\n inAnimationCallback = true;\n try {\n callback(...arguments);\n } finally {\n inAnimationCallback = false;\n }\n };\n start(guardedCallback);\n };\n}\nvar emptyAnimation = {\n start: () => {},\n stop: () => {},\n reset: () => {},\n _startNativeLoop: () => {},\n _isUsingNativeDriver: () => {\n return false;\n }\n};\nvar mockCompositeAnimation = animations => _objectSpread(_objectSpread({}, emptyAnimation), {}, {\n start: mockAnimationStart(callback => {\n animations.forEach(animation => animation.start());\n callback == null ? void 0 : callback({\n finished: true\n });\n })\n});\nvar spring = function spring(value, config) {\n var anyValue = value;\n return _objectSpread(_objectSpread({}, emptyAnimation), {}, {\n start: mockAnimationStart(callback => {\n anyValue.setValue(config.toValue);\n callback == null ? void 0 : callback({\n finished: true\n });\n })\n });\n};\nvar timing = function timing(value, config) {\n var anyValue = value;\n return _objectSpread(_objectSpread({}, emptyAnimation), {}, {\n start: mockAnimationStart(callback => {\n anyValue.setValue(config.toValue);\n callback == null ? void 0 : callback({\n finished: true\n });\n })\n });\n};\nvar decay = function decay(value, config) {\n return emptyAnimation;\n};\nvar sequence = function sequence(animations) {\n return mockCompositeAnimation(animations);\n};\nvar parallel = function parallel(animations, config) {\n return mockCompositeAnimation(animations);\n};\nvar delay = function delay(time) {\n return emptyAnimation;\n};\nvar stagger = function stagger(time, animations) {\n return mockCompositeAnimation(animations);\n};\nvar loop = function loop(animation, // $FlowFixMe[prop-missing]\n_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n _ref$iterations = _ref.iterations,\n iterations = _ref$iterations === void 0 ? -1 : _ref$iterations;\n return emptyAnimation;\n};\nexport default {\n Value: AnimatedValue,\n ValueXY: AnimatedValueXY,\n Color: AnimatedColor,\n Interpolation: AnimatedInterpolation,\n Node: AnimatedNode,\n decay,\n timing,\n spring,\n add: AnimatedImplementation.add,\n subtract: AnimatedImplementation.subtract,\n divide: AnimatedImplementation.divide,\n multiply: AnimatedImplementation.multiply,\n modulo: AnimatedImplementation.modulo,\n diffClamp: AnimatedImplementation.diffClamp,\n delay,\n sequence,\n parallel,\n stagger,\n loop,\n event: AnimatedImplementation.event,\n createAnimatedComponent,\n attachNativeEvent,\n forkEvent: AnimatedImplementation.forkEvent,\n unforkEvent: AnimatedImplementation.unforkEvent,\n Event: AnimatedEvent\n};","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport { AnimatedEvent, attachNativeEvent } from './AnimatedEvent';\nimport AnimatedAddition from './nodes/AnimatedAddition';\nimport AnimatedDiffClamp from './nodes/AnimatedDiffClamp';\nimport AnimatedDivision from './nodes/AnimatedDivision';\nimport AnimatedInterpolation from './nodes/AnimatedInterpolation';\nimport AnimatedModulo from './nodes/AnimatedModulo';\nimport AnimatedMultiplication from './nodes/AnimatedMultiplication';\nimport AnimatedNode from './nodes/AnimatedNode';\nimport AnimatedProps from './nodes/AnimatedProps';\nimport AnimatedSubtraction from './nodes/AnimatedSubtraction';\nimport AnimatedTracking from './nodes/AnimatedTracking';\nimport AnimatedValue from './nodes/AnimatedValue';\nimport AnimatedValueXY from './nodes/AnimatedValueXY';\nimport DecayAnimation from './animations/DecayAnimation';\nimport SpringAnimation from './animations/SpringAnimation';\nimport TimingAnimation from './animations/TimingAnimation';\nimport createAnimatedComponent from './createAnimatedComponent';\nimport AnimatedColor from './nodes/AnimatedColor';\nvar add = function add(a, b) {\n return new AnimatedAddition(a, b);\n};\nvar subtract = function subtract(a, b) {\n return new AnimatedSubtraction(a, b);\n};\nvar divide = function divide(a, b) {\n return new AnimatedDivision(a, b);\n};\nvar multiply = function multiply(a, b) {\n return new AnimatedMultiplication(a, b);\n};\nvar modulo = function modulo(a, modulus) {\n return new AnimatedModulo(a, modulus);\n};\nvar diffClamp = function diffClamp(a, min, max) {\n return new AnimatedDiffClamp(a, min, max);\n};\nvar _combineCallbacks = function _combineCallbacks(callback, config) {\n if (callback && config.onComplete) {\n return function () {\n config.onComplete && config.onComplete(...arguments);\n callback && callback(...arguments);\n };\n } else {\n return callback || config.onComplete;\n }\n};\nvar maybeVectorAnim = function maybeVectorAnim(value, config, anim) {\n if (value instanceof AnimatedValueXY) {\n var configX = _objectSpread({}, config);\n var configY = _objectSpread({}, config);\n for (var key in config) {\n var _config$key = config[key],\n x = _config$key.x,\n y = _config$key.y;\n if (x !== undefined && y !== undefined) {\n configX[key] = x;\n configY[key] = y;\n }\n }\n var aX = anim(value.x, configX);\n var aY = anim(value.y, configY);\n // We use `stopTogether: false` here because otherwise tracking will break\n // because the second animation will get stopped before it can update.\n return parallel([aX, aY], {\n stopTogether: false\n });\n } else if (value instanceof AnimatedColor) {\n var configR = _objectSpread({}, config);\n var configG = _objectSpread({}, config);\n var configB = _objectSpread({}, config);\n var configA = _objectSpread({}, config);\n for (var _key in config) {\n var _config$_key = config[_key],\n r = _config$_key.r,\n g = _config$_key.g,\n b = _config$_key.b,\n a = _config$_key.a;\n if (r !== undefined && g !== undefined && b !== undefined && a !== undefined) {\n configR[_key] = r;\n configG[_key] = g;\n configB[_key] = b;\n configA[_key] = a;\n }\n }\n var aR = anim(value.r, configR);\n var aG = anim(value.g, configG);\n var aB = anim(value.b, configB);\n var aA = anim(value.a, configA);\n // We use `stopTogether: false` here because otherwise tracking will break\n // because the second animation will get stopped before it can update.\n return parallel([aR, aG, aB, aA], {\n stopTogether: false\n });\n }\n return null;\n};\nvar spring = function spring(value, config) {\n var _start = function start(animatedValue, configuration, callback) {\n callback = _combineCallbacks(callback, configuration);\n var singleValue = animatedValue;\n var singleConfig = configuration;\n singleValue.stopTracking();\n if (configuration.toValue instanceof AnimatedNode) {\n singleValue.track(new AnimatedTracking(singleValue, configuration.toValue, SpringAnimation, singleConfig, callback));\n } else {\n singleValue.animate(new SpringAnimation(singleConfig), callback);\n }\n };\n return maybeVectorAnim(value, config, spring) || {\n start: function start(callback) {\n _start(value, config, callback);\n },\n stop: function stop() {\n value.stopAnimation();\n },\n reset: function reset() {\n value.resetAnimation();\n },\n _startNativeLoop: function _startNativeLoop(iterations) {\n var singleConfig = _objectSpread(_objectSpread({}, config), {}, {\n iterations\n });\n _start(value, singleConfig);\n },\n _isUsingNativeDriver: function _isUsingNativeDriver() {\n return config.useNativeDriver || false;\n }\n };\n};\nvar timing = function timing(value, config) {\n var _start2 = function start(animatedValue, configuration, callback) {\n callback = _combineCallbacks(callback, configuration);\n var singleValue = animatedValue;\n var singleConfig = configuration;\n singleValue.stopTracking();\n if (configuration.toValue instanceof AnimatedNode) {\n singleValue.track(new AnimatedTracking(singleValue, configuration.toValue, TimingAnimation, singleConfig, callback));\n } else {\n singleValue.animate(new TimingAnimation(singleConfig), callback);\n }\n };\n return maybeVectorAnim(value, config, timing) || {\n start: function start(callback) {\n _start2(value, config, callback);\n },\n stop: function stop() {\n value.stopAnimation();\n },\n reset: function reset() {\n value.resetAnimation();\n },\n _startNativeLoop: function _startNativeLoop(iterations) {\n var singleConfig = _objectSpread(_objectSpread({}, config), {}, {\n iterations\n });\n _start2(value, singleConfig);\n },\n _isUsingNativeDriver: function _isUsingNativeDriver() {\n return config.useNativeDriver || false;\n }\n };\n};\nvar decay = function decay(value, config) {\n var _start3 = function start(animatedValue, configuration, callback) {\n callback = _combineCallbacks(callback, configuration);\n var singleValue = animatedValue;\n var singleConfig = configuration;\n singleValue.stopTracking();\n singleValue.animate(new DecayAnimation(singleConfig), callback);\n };\n return maybeVectorAnim(value, config, decay) || {\n start: function start(callback) {\n _start3(value, config, callback);\n },\n stop: function stop() {\n value.stopAnimation();\n },\n reset: function reset() {\n value.resetAnimation();\n },\n _startNativeLoop: function _startNativeLoop(iterations) {\n var singleConfig = _objectSpread(_objectSpread({}, config), {}, {\n iterations\n });\n _start3(value, singleConfig);\n },\n _isUsingNativeDriver: function _isUsingNativeDriver() {\n return config.useNativeDriver || false;\n }\n };\n};\nvar sequence = function sequence(animations) {\n var current = 0;\n return {\n start: function start(callback) {\n var onComplete = function onComplete(result) {\n if (!result.finished) {\n callback && callback(result);\n return;\n }\n current++;\n if (current === animations.length) {\n callback && callback(result);\n return;\n }\n animations[current].start(onComplete);\n };\n if (animations.length === 0) {\n callback && callback({\n finished: true\n });\n } else {\n animations[current].start(onComplete);\n }\n },\n stop: function stop() {\n if (current < animations.length) {\n animations[current].stop();\n }\n },\n reset: function reset() {\n animations.forEach((animation, idx) => {\n if (idx <= current) {\n animation.reset();\n }\n });\n current = 0;\n },\n _startNativeLoop: function _startNativeLoop() {\n throw new Error('Loops run using the native driver cannot contain Animated.sequence animations');\n },\n _isUsingNativeDriver: function _isUsingNativeDriver() {\n return false;\n }\n };\n};\nvar parallel = function parallel(animations, config) {\n var doneCount = 0;\n // Make sure we only call stop() at most once for each animation\n var hasEnded = {};\n var stopTogether = !(config && config.stopTogether === false);\n var result = {\n start: function start(callback) {\n if (doneCount === animations.length) {\n callback && callback({\n finished: true\n });\n return;\n }\n animations.forEach((animation, idx) => {\n var cb = function cb(endResult) {\n hasEnded[idx] = true;\n doneCount++;\n if (doneCount === animations.length) {\n doneCount = 0;\n callback && callback(endResult);\n return;\n }\n if (!endResult.finished && stopTogether) {\n result.stop();\n }\n };\n if (!animation) {\n cb({\n finished: true\n });\n } else {\n animation.start(cb);\n }\n });\n },\n stop: function stop() {\n animations.forEach((animation, idx) => {\n !hasEnded[idx] && animation.stop();\n hasEnded[idx] = true;\n });\n },\n reset: function reset() {\n animations.forEach((animation, idx) => {\n animation.reset();\n hasEnded[idx] = false;\n doneCount = 0;\n });\n },\n _startNativeLoop: function _startNativeLoop() {\n throw new Error('Loops run using the native driver cannot contain Animated.parallel animations');\n },\n _isUsingNativeDriver: function _isUsingNativeDriver() {\n return false;\n }\n };\n return result;\n};\nvar delay = function delay(time) {\n // Would be nice to make a specialized implementation\n return timing(new AnimatedValue(0), {\n toValue: 0,\n delay: time,\n duration: 0,\n useNativeDriver: false\n });\n};\nvar stagger = function stagger(time, animations) {\n return parallel(animations.map((animation, i) => {\n return sequence([delay(time * i), animation]);\n }));\n};\nvar loop = function loop(animation, // $FlowFixMe[prop-missing]\n_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n _ref$iterations = _ref.iterations,\n iterations = _ref$iterations === void 0 ? -1 : _ref$iterations,\n _ref$resetBeforeItera = _ref.resetBeforeIteration,\n resetBeforeIteration = _ref$resetBeforeItera === void 0 ? true : _ref$resetBeforeItera;\n var isFinished = false;\n var iterationsSoFar = 0;\n return {\n start: function start(callback) {\n var restart = function restart(result) {\n if (result === void 0) {\n result = {\n finished: true\n };\n }\n if (isFinished || iterationsSoFar === iterations || result.finished === false) {\n callback && callback(result);\n } else {\n iterationsSoFar++;\n resetBeforeIteration && animation.reset();\n animation.start(restart);\n }\n };\n if (!animation || iterations === 0) {\n callback && callback({\n finished: true\n });\n } else {\n if (animation._isUsingNativeDriver()) {\n animation._startNativeLoop(iterations);\n } else {\n restart(); // Start looping recursively on the js thread\n }\n }\n },\n\n stop: function stop() {\n isFinished = true;\n animation.stop();\n },\n reset: function reset() {\n iterationsSoFar = 0;\n isFinished = false;\n animation.reset();\n },\n _startNativeLoop: function _startNativeLoop() {\n throw new Error('Loops run using the native driver cannot contain Animated.loop animations');\n },\n _isUsingNativeDriver: function _isUsingNativeDriver() {\n return animation._isUsingNativeDriver();\n }\n };\n};\nfunction forkEvent(event, listener) {\n if (!event) {\n return listener;\n } else if (event instanceof AnimatedEvent) {\n event.__addListener(listener);\n return event;\n } else {\n return function () {\n typeof event === 'function' && event(...arguments);\n listener(...arguments);\n };\n }\n}\nfunction unforkEvent(event, listener) {\n if (event && event instanceof AnimatedEvent) {\n event.__removeListener(listener);\n }\n}\nvar event = function event(argMapping, config) {\n var animatedEvent = new AnimatedEvent(argMapping, config);\n if (animatedEvent.__isNative) {\n return animatedEvent;\n } else {\n return animatedEvent.__getHandler();\n }\n};\n\n// All types of animated nodes that represent scalar numbers and can be interpolated (etc)\n\n/**\n * The `Animated` library is designed to make animations fluid, powerful, and\n * easy to build and maintain. `Animated` focuses on declarative relationships\n * between inputs and outputs, with configurable transforms in between, and\n * simple `start`/`stop` methods to control time-based animation execution.\n * If additional transforms are added, be sure to include them in\n * AnimatedMock.js as well.\n *\n * See https://reactnative.dev/docs/animated\n */\nexport default {\n /**\n * Standard value class for driving animations. Typically initialized with\n * `new Animated.Value(0);`\n *\n * See https://reactnative.dev/docs/animated#value\n */\n Value: AnimatedValue,\n /**\n * 2D value class for driving 2D animations, such as pan gestures.\n *\n * See https://reactnative.dev/docs/animatedvaluexy\n */\n ValueXY: AnimatedValueXY,\n /**\n * Value class for driving color animations.\n */\n Color: AnimatedColor,\n /**\n * Exported to use the Interpolation type in flow.\n *\n * See https://reactnative.dev/docs/animated#interpolation\n */\n Interpolation: AnimatedInterpolation,\n /**\n * Exported for ease of type checking. All animated values derive from this\n * class.\n *\n * See https://reactnative.dev/docs/animated#node\n */\n Node: AnimatedNode,\n /**\n * Animates a value from an initial velocity to zero based on a decay\n * coefficient.\n *\n * See https://reactnative.dev/docs/animated#decay\n */\n decay,\n /**\n * Animates a value along a timed easing curve. The Easing module has tons of\n * predefined curves, or you can use your own function.\n *\n * See https://reactnative.dev/docs/animated#timing\n */\n timing,\n /**\n * Animates a value according to an analytical spring model based on\n * damped harmonic oscillation.\n *\n * See https://reactnative.dev/docs/animated#spring\n */\n spring,\n /**\n * Creates a new Animated value composed from two Animated values added\n * together.\n *\n * See https://reactnative.dev/docs/animated#add\n */\n add,\n /**\n * Creates a new Animated value composed by subtracting the second Animated\n * value from the first Animated value.\n *\n * See https://reactnative.dev/docs/animated#subtract\n */\n subtract,\n /**\n * Creates a new Animated value composed by dividing the first Animated value\n * by the second Animated value.\n *\n * See https://reactnative.dev/docs/animated#divide\n */\n divide,\n /**\n * Creates a new Animated value composed from two Animated values multiplied\n * together.\n *\n * See https://reactnative.dev/docs/animated#multiply\n */\n multiply,\n /**\n * Creates a new Animated value that is the (non-negative) modulo of the\n * provided Animated value.\n *\n * See https://reactnative.dev/docs/animated#modulo\n */\n modulo,\n /**\n * Create a new Animated value that is limited between 2 values. It uses the\n * difference between the last value so even if the value is far from the\n * bounds it will start changing when the value starts getting closer again.\n *\n * See https://reactnative.dev/docs/animated#diffclamp\n */\n diffClamp,\n /**\n * Starts an animation after the given delay.\n *\n * See https://reactnative.dev/docs/animated#delay\n */\n delay,\n /**\n * Starts an array of animations in order, waiting for each to complete\n * before starting the next. If the current running animation is stopped, no\n * following animations will be started.\n *\n * See https://reactnative.dev/docs/animated#sequence\n */\n sequence,\n /**\n * Starts an array of animations all at the same time. By default, if one\n * of the animations is stopped, they will all be stopped. You can override\n * this with the `stopTogether` flag.\n *\n * See https://reactnative.dev/docs/animated#parallel\n */\n parallel,\n /**\n * Array of animations may run in parallel (overlap), but are started in\n * sequence with successive delays. Nice for doing trailing effects.\n *\n * See https://reactnative.dev/docs/animated#stagger\n */\n stagger,\n /**\n * Loops a given animation continuously, so that each time it reaches the\n * end, it resets and begins again from the start.\n *\n * See https://reactnative.dev/docs/animated#loop\n */\n loop,\n /**\n * Takes an array of mappings and extracts values from each arg accordingly,\n * then calls `setValue` on the mapped outputs.\n *\n * See https://reactnative.dev/docs/animated#event\n */\n event,\n /**\n * Make any React component Animatable. Used to create `Animated.View`, etc.\n *\n * See https://reactnative.dev/docs/animated#createanimatedcomponent\n */\n createAnimatedComponent,\n /**\n * Imperative API to attach an animated value to an event on a view. Prefer\n * using `Animated.event` with `useNativeDrive: true` if possible.\n *\n * See https://reactnative.dev/docs/animated#attachnativeevent\n */\n attachNativeEvent,\n /**\n * Advanced imperative API for snooping on animated events that are passed in\n * through props. Use values directly where possible.\n *\n * See https://reactnative.dev/docs/animated#forkevent\n */\n forkEvent,\n unforkEvent,\n /**\n * Expose Event class, so it can be used as a type for type checkers.\n */\n Event: AnimatedEvent\n};","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nclass AnimatedAddition extends AnimatedWithChildren {\n constructor(a, b) {\n super();\n this._a = typeof a === 'number' ? new AnimatedValue(a) : a;\n this._b = typeof b === 'number' ? new AnimatedValue(b) : b;\n }\n __makeNative(platformConfig) {\n this._a.__makeNative(platformConfig);\n this._b.__makeNative(platformConfig);\n super.__makeNative(platformConfig);\n }\n __getValue() {\n return this._a.__getValue() + this._b.__getValue();\n }\n interpolate(config) {\n return new AnimatedInterpolation(this, config);\n }\n __attach() {\n this._a.__addChild(this);\n this._b.__addChild(this);\n }\n __detach() {\n this._a.__removeChild(this);\n this._b.__removeChild(this);\n super.__detach();\n }\n __getNativeConfig() {\n return {\n type: 'addition',\n input: [this._a.__getNativeTag(), this._b.__getNativeTag()]\n };\n }\n}\nexport default AnimatedAddition;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nclass AnimatedDiffClamp extends AnimatedWithChildren {\n constructor(a, min, max) {\n super();\n this._a = a;\n this._min = min;\n this._max = max;\n this._value = this._lastValue = this._a.__getValue();\n }\n __makeNative(platformConfig) {\n this._a.__makeNative(platformConfig);\n super.__makeNative(platformConfig);\n }\n interpolate(config) {\n return new AnimatedInterpolation(this, config);\n }\n __getValue() {\n var value = this._a.__getValue();\n var diff = value - this._lastValue;\n this._lastValue = value;\n this._value = Math.min(Math.max(this._value + diff, this._min), this._max);\n return this._value;\n }\n __attach() {\n this._a.__addChild(this);\n }\n __detach() {\n this._a.__removeChild(this);\n super.__detach();\n }\n __getNativeConfig() {\n return {\n type: 'diffclamp',\n input: this._a.__getNativeTag(),\n min: this._min,\n max: this._max\n };\n }\n}\nexport default AnimatedDiffClamp;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedNode from './AnimatedNode';\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nclass AnimatedDivision extends AnimatedWithChildren {\n constructor(a, b) {\n super();\n this._warnedAboutDivideByZero = false;\n if (b === 0 || b instanceof AnimatedNode && b.__getValue() === 0) {\n console.error('Detected potential division by zero in AnimatedDivision');\n }\n this._a = typeof a === 'number' ? new AnimatedValue(a) : a;\n this._b = typeof b === 'number' ? new AnimatedValue(b) : b;\n }\n __makeNative(platformConfig) {\n this._a.__makeNative(platformConfig);\n this._b.__makeNative(platformConfig);\n super.__makeNative(platformConfig);\n }\n __getValue() {\n var a = this._a.__getValue();\n var b = this._b.__getValue();\n if (b === 0) {\n // Prevent spamming the console/LogBox\n if (!this._warnedAboutDivideByZero) {\n console.error('Detected division by zero in AnimatedDivision');\n this._warnedAboutDivideByZero = true;\n }\n // Passing infinity/NaN to Fabric will cause a native crash\n return 0;\n }\n this._warnedAboutDivideByZero = false;\n return a / b;\n }\n interpolate(config) {\n return new AnimatedInterpolation(this, config);\n }\n __attach() {\n this._a.__addChild(this);\n this._b.__addChild(this);\n }\n __detach() {\n this._a.__removeChild(this);\n this._b.__removeChild(this);\n super.__detach();\n }\n __getNativeConfig() {\n return {\n type: 'division',\n input: [this._a.__getNativeTag(), this._b.__getNativeTag()]\n };\n }\n}\nexport default AnimatedDivision;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nclass AnimatedModulo extends AnimatedWithChildren {\n constructor(a, modulus) {\n super();\n this._a = a;\n this._modulus = modulus;\n }\n __makeNative(platformConfig) {\n this._a.__makeNative(platformConfig);\n super.__makeNative(platformConfig);\n }\n __getValue() {\n return (this._a.__getValue() % this._modulus + this._modulus) % this._modulus;\n }\n interpolate(config) {\n return new AnimatedInterpolation(this, config);\n }\n __attach() {\n this._a.__addChild(this);\n }\n __detach() {\n this._a.__removeChild(this);\n super.__detach();\n }\n __getNativeConfig() {\n return {\n type: 'modulus',\n input: this._a.__getNativeTag(),\n modulus: this._modulus\n };\n }\n}\nexport default AnimatedModulo;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nclass AnimatedMultiplication extends AnimatedWithChildren {\n constructor(a, b) {\n super();\n this._a = typeof a === 'number' ? new AnimatedValue(a) : a;\n this._b = typeof b === 'number' ? new AnimatedValue(b) : b;\n }\n __makeNative(platformConfig) {\n this._a.__makeNative(platformConfig);\n this._b.__makeNative(platformConfig);\n super.__makeNative(platformConfig);\n }\n __getValue() {\n return this._a.__getValue() * this._b.__getValue();\n }\n interpolate(config) {\n return new AnimatedInterpolation(this, config);\n }\n __attach() {\n this._a.__addChild(this);\n this._b.__addChild(this);\n }\n __detach() {\n this._a.__removeChild(this);\n this._b.__removeChild(this);\n super.__detach();\n }\n __getNativeConfig() {\n return {\n type: 'multiplication',\n input: [this._a.__getNativeTag(), this._b.__getNativeTag()]\n };\n }\n}\nexport default AnimatedMultiplication;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nclass AnimatedSubtraction extends AnimatedWithChildren {\n constructor(a, b) {\n super();\n this._a = typeof a === 'number' ? new AnimatedValue(a) : a;\n this._b = typeof b === 'number' ? new AnimatedValue(b) : b;\n }\n __makeNative(platformConfig) {\n this._a.__makeNative(platformConfig);\n this._b.__makeNative(platformConfig);\n super.__makeNative(platformConfig);\n }\n __getValue() {\n return this._a.__getValue() - this._b.__getValue();\n }\n interpolate(config) {\n return new AnimatedInterpolation(this, config);\n }\n __attach() {\n this._a.__addChild(this);\n this._b.__addChild(this);\n }\n __detach() {\n this._a.__removeChild(this);\n this._b.__removeChild(this);\n super.__detach();\n }\n __getNativeConfig() {\n return {\n type: 'subtraction',\n input: [this._a.__getNativeTag(), this._b.__getNativeTag()]\n };\n }\n}\nexport default AnimatedSubtraction;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedNode from './AnimatedNode';\nimport { generateNewAnimationId, shouldUseNativeDriver } from '../NativeAnimatedHelper';\nclass AnimatedTracking extends AnimatedNode {\n constructor(value, parent, animationClass, animationConfig, callback) {\n super();\n this._value = value;\n this._parent = parent;\n this._animationClass = animationClass;\n this._animationConfig = animationConfig;\n this._useNativeDriver = shouldUseNativeDriver(animationConfig);\n this._callback = callback;\n this.__attach();\n }\n __makeNative() {\n this.__isNative = true;\n this._parent.__makeNative();\n super.__makeNative();\n this._value.__makeNative();\n }\n __getValue() {\n return this._parent.__getValue();\n }\n __attach() {\n this._parent.__addChild(this);\n if (this._useNativeDriver) {\n // when the tracking starts we need to convert this node to a \"native node\"\n // so that the parent node will be made \"native\" too. This is necessary as\n // if we don't do this `update` method will get called. At that point it\n // may be too late as it would mean the JS driver has already started\n // updating node values\n this.__makeNative();\n }\n }\n __detach() {\n this._parent.__removeChild(this);\n super.__detach();\n }\n update() {\n this._value.animate(new this._animationClass(_objectSpread(_objectSpread({}, this._animationConfig), {}, {\n toValue: this._animationConfig.toValue.__getValue()\n })), this._callback);\n }\n __getNativeConfig() {\n var animation = new this._animationClass(_objectSpread(_objectSpread({}, this._animationConfig), {}, {\n // remove toValue from the config as it's a ref to Animated.Value\n toValue: undefined\n }));\n var animationConfig = animation.__getNativeAnimationConfig();\n return {\n type: 'tracking',\n animationId: generateNewAnimationId(),\n animationConfig,\n toValue: this._parent.__getNativeTag(),\n value: this._value.__getNativeTag()\n };\n }\n}\nexport default AnimatedTracking;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nimport invariant from 'fbjs/lib/invariant';\nvar _uniqueId = 1;\n\n/**\n * 2D Value for driving 2D animations, such as pan gestures. Almost identical\n * API to normal `Animated.Value`, but multiplexed.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html\n */\nclass AnimatedValueXY extends AnimatedWithChildren {\n constructor(valueIn) {\n super();\n var value = valueIn || {\n x: 0,\n y: 0\n }; // fixme: shouldn't need `: any`\n if (typeof value.x === 'number' && typeof value.y === 'number') {\n this.x = new AnimatedValue(value.x);\n this.y = new AnimatedValue(value.y);\n } else {\n invariant(value.x instanceof AnimatedValue && value.y instanceof AnimatedValue, 'AnimatedValueXY must be initialized with an object of numbers or ' + 'AnimatedValues.');\n this.x = value.x;\n this.y = value.y;\n }\n this._listeners = {};\n }\n\n /**\n * Directly set the value. This will stop any animations running on the value\n * and update all the bound properties.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#setvalue\n */\n setValue(value) {\n this.x.setValue(value.x);\n this.y.setValue(value.y);\n }\n\n /**\n * Sets an offset that is applied on top of whatever value is set, whether\n * via `setValue`, an animation, or `Animated.event`. Useful for compensating\n * things like the start of a pan gesture.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#setoffset\n */\n setOffset(offset) {\n this.x.setOffset(offset.x);\n this.y.setOffset(offset.y);\n }\n\n /**\n * Merges the offset value into the base value and resets the offset to zero.\n * The final output of the value is unchanged.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#flattenoffset\n */\n flattenOffset() {\n this.x.flattenOffset();\n this.y.flattenOffset();\n }\n\n /**\n * Sets the offset value to the base value, and resets the base value to\n * zero. The final output of the value is unchanged.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#extractoffset\n */\n extractOffset() {\n this.x.extractOffset();\n this.y.extractOffset();\n }\n __getValue() {\n return {\n x: this.x.__getValue(),\n y: this.y.__getValue()\n };\n }\n\n /**\n * Stops any animation and resets the value to its original.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#resetanimation\n */\n resetAnimation(callback) {\n this.x.resetAnimation();\n this.y.resetAnimation();\n callback && callback(this.__getValue());\n }\n\n /**\n * Stops any running animation or tracking. `callback` is invoked with the\n * final value after stopping the animation, which is useful for updating\n * state to match the animation position with layout.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#stopanimation\n */\n stopAnimation(callback) {\n this.x.stopAnimation();\n this.y.stopAnimation();\n callback && callback(this.__getValue());\n }\n\n /**\n * Adds an asynchronous listener to the value so you can observe updates from\n * animations. This is useful because there is no way to synchronously read\n * the value because it might be driven natively.\n *\n * Returns a string that serves as an identifier for the listener.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#addlistener\n */\n addListener(callback) {\n var id = String(_uniqueId++);\n var jointCallback = _ref => {\n var number = _ref.value;\n callback(this.__getValue());\n };\n this._listeners[id] = {\n x: this.x.addListener(jointCallback),\n y: this.y.addListener(jointCallback)\n };\n return id;\n }\n\n /**\n * Unregister a listener. The `id` param shall match the identifier\n * previously returned by `addListener()`.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#removelistener\n */\n removeListener(id) {\n this.x.removeListener(this._listeners[id].x);\n this.y.removeListener(this._listeners[id].y);\n delete this._listeners[id];\n }\n\n /**\n * Remove all registered listeners.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#removealllisteners\n */\n removeAllListeners() {\n this.x.removeAllListeners();\n this.y.removeAllListeners();\n this._listeners = {};\n }\n\n /**\n * Converts `{x, y}` into `{left, top}` for use in style.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#getlayout\n */\n getLayout() {\n return {\n left: this.x,\n top: this.y\n };\n }\n\n /**\n * Converts `{x, y}` into a useable translation transform.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#gettranslatetransform\n */\n getTranslateTransform() {\n return [{\n translateX: this.x\n }, {\n translateY: this.y\n }];\n }\n}\nexport default AnimatedValueXY;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport Animation from './Animation';\nimport { shouldUseNativeDriver } from '../NativeAnimatedHelper';\nclass DecayAnimation extends Animation {\n constructor(config) {\n var _config$deceleration, _config$isInteraction, _config$iterations;\n super();\n this._deceleration = (_config$deceleration = config.deceleration) !== null && _config$deceleration !== void 0 ? _config$deceleration : 0.998;\n this._velocity = config.velocity;\n this._useNativeDriver = shouldUseNativeDriver(config);\n this.__isInteraction = (_config$isInteraction = config.isInteraction) !== null && _config$isInteraction !== void 0 ? _config$isInteraction : !this._useNativeDriver;\n this.__iterations = (_config$iterations = config.iterations) !== null && _config$iterations !== void 0 ? _config$iterations : 1;\n }\n __getNativeAnimationConfig() {\n return {\n type: 'decay',\n deceleration: this._deceleration,\n velocity: this._velocity,\n iterations: this.__iterations\n };\n }\n start(fromValue, onUpdate, onEnd, previousAnimation, animatedValue) {\n this.__active = true;\n this._lastValue = fromValue;\n this._fromValue = fromValue;\n this._onUpdate = onUpdate;\n this.__onEnd = onEnd;\n this._startTime = Date.now();\n if (this._useNativeDriver) {\n this.__startNativeAnimation(animatedValue);\n } else {\n this._animationFrame = requestAnimationFrame(this.onUpdate.bind(this));\n }\n }\n onUpdate() {\n var now = Date.now();\n var value = this._fromValue + this._velocity / (1 - this._deceleration) * (1 - Math.exp(-(1 - this._deceleration) * (now - this._startTime)));\n this._onUpdate(value);\n if (Math.abs(this._lastValue - value) < 0.1) {\n this.__debouncedOnEnd({\n finished: true\n });\n return;\n }\n this._lastValue = value;\n if (this.__active) {\n this._animationFrame = requestAnimationFrame(this.onUpdate.bind(this));\n }\n }\n stop() {\n super.stop();\n this.__active = false;\n global.cancelAnimationFrame(this._animationFrame);\n this.__debouncedOnEnd({\n finished: false\n });\n }\n}\nexport default DecayAnimation;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nvar startNativeAnimationNextId = 1;\n\n// Important note: start() and stop() will only be called at most once.\n// Once an animation has been stopped or finished its course, it will\n// not be reused.\nclass Animation {\n start(fromValue, onUpdate, onEnd, previousAnimation, animatedValue) {}\n stop() {\n if (this.__nativeId) {\n NativeAnimatedHelper.API.stopAnimation(this.__nativeId);\n }\n }\n __getNativeAnimationConfig() {\n // Subclasses that have corresponding animation implementation done in native\n // should override this method\n throw new Error('This animation type cannot be offloaded to native');\n }\n // Helper function for subclasses to make sure onEnd is only called once.\n __debouncedOnEnd(result) {\n var onEnd = this.__onEnd;\n this.__onEnd = null;\n onEnd && onEnd(result);\n }\n __startNativeAnimation(animatedValue) {\n var startNativeAnimationWaitId = startNativeAnimationNextId + \":startAnimation\";\n startNativeAnimationNextId += 1;\n NativeAnimatedHelper.API.setWaitingForIdentifier(startNativeAnimationWaitId);\n try {\n var config = this.__getNativeAnimationConfig();\n animatedValue.__makeNative(config.platformConfig);\n this.__nativeId = NativeAnimatedHelper.generateNewAnimationId();\n NativeAnimatedHelper.API.startAnimatingNode(this.__nativeId, animatedValue.__getNativeTag(), config,\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n this.__debouncedOnEnd.bind(this));\n } catch (e) {\n throw e;\n } finally {\n NativeAnimatedHelper.API.unsetWaitingForIdentifier(startNativeAnimationWaitId);\n }\n }\n}\nexport default Animation;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport Animation from './Animation';\nimport SpringConfig from '../SpringConfig';\nimport invariant from 'fbjs/lib/invariant';\nimport { shouldUseNativeDriver } from '../NativeAnimatedHelper';\nimport AnimatedColor from '../nodes/AnimatedColor';\nclass SpringAnimation extends Animation {\n constructor(config) {\n var _config$overshootClam, _config$restDisplacem, _config$restSpeedThre, _config$velocity, _config$velocity2, _config$delay, _config$isInteraction, _config$iterations;\n super();\n this._overshootClamping = (_config$overshootClam = config.overshootClamping) !== null && _config$overshootClam !== void 0 ? _config$overshootClam : false;\n this._restDisplacementThreshold = (_config$restDisplacem = config.restDisplacementThreshold) !== null && _config$restDisplacem !== void 0 ? _config$restDisplacem : 0.001;\n this._restSpeedThreshold = (_config$restSpeedThre = config.restSpeedThreshold) !== null && _config$restSpeedThre !== void 0 ? _config$restSpeedThre : 0.001;\n this._initialVelocity = (_config$velocity = config.velocity) !== null && _config$velocity !== void 0 ? _config$velocity : 0;\n this._lastVelocity = (_config$velocity2 = config.velocity) !== null && _config$velocity2 !== void 0 ? _config$velocity2 : 0;\n this._toValue = config.toValue;\n this._delay = (_config$delay = config.delay) !== null && _config$delay !== void 0 ? _config$delay : 0;\n this._useNativeDriver = shouldUseNativeDriver(config);\n this._platformConfig = config.platformConfig;\n this.__isInteraction = (_config$isInteraction = config.isInteraction) !== null && _config$isInteraction !== void 0 ? _config$isInteraction : !this._useNativeDriver;\n this.__iterations = (_config$iterations = config.iterations) !== null && _config$iterations !== void 0 ? _config$iterations : 1;\n if (config.stiffness !== undefined || config.damping !== undefined || config.mass !== undefined) {\n var _config$stiffness, _config$damping, _config$mass;\n invariant(config.bounciness === undefined && config.speed === undefined && config.tension === undefined && config.friction === undefined, 'You can define one of bounciness/speed, tension/friction, or stiffness/damping/mass, but not more than one');\n this._stiffness = (_config$stiffness = config.stiffness) !== null && _config$stiffness !== void 0 ? _config$stiffness : 100;\n this._damping = (_config$damping = config.damping) !== null && _config$damping !== void 0 ? _config$damping : 10;\n this._mass = (_config$mass = config.mass) !== null && _config$mass !== void 0 ? _config$mass : 1;\n } else if (config.bounciness !== undefined || config.speed !== undefined) {\n var _config$bounciness, _config$speed;\n // Convert the origami bounciness/speed values to stiffness/damping\n // We assume mass is 1.\n invariant(config.tension === undefined && config.friction === undefined && config.stiffness === undefined && config.damping === undefined && config.mass === undefined, 'You can define one of bounciness/speed, tension/friction, or stiffness/damping/mass, but not more than one');\n var springConfig = SpringConfig.fromBouncinessAndSpeed((_config$bounciness = config.bounciness) !== null && _config$bounciness !== void 0 ? _config$bounciness : 8, (_config$speed = config.speed) !== null && _config$speed !== void 0 ? _config$speed : 12);\n this._stiffness = springConfig.stiffness;\n this._damping = springConfig.damping;\n this._mass = 1;\n } else {\n var _config$tension, _config$friction;\n // Convert the origami tension/friction values to stiffness/damping\n // We assume mass is 1.\n var _springConfig = SpringConfig.fromOrigamiTensionAndFriction((_config$tension = config.tension) !== null && _config$tension !== void 0 ? _config$tension : 40, (_config$friction = config.friction) !== null && _config$friction !== void 0 ? _config$friction : 7);\n this._stiffness = _springConfig.stiffness;\n this._damping = _springConfig.damping;\n this._mass = 1;\n }\n invariant(this._stiffness > 0, 'Stiffness value must be greater than 0');\n invariant(this._damping > 0, 'Damping value must be greater than 0');\n invariant(this._mass > 0, 'Mass value must be greater than 0');\n }\n __getNativeAnimationConfig() {\n var _this$_initialVelocit;\n return {\n type: 'spring',\n overshootClamping: this._overshootClamping,\n restDisplacementThreshold: this._restDisplacementThreshold,\n restSpeedThreshold: this._restSpeedThreshold,\n stiffness: this._stiffness,\n damping: this._damping,\n mass: this._mass,\n initialVelocity: (_this$_initialVelocit = this._initialVelocity) !== null && _this$_initialVelocit !== void 0 ? _this$_initialVelocit : this._lastVelocity,\n toValue: this._toValue,\n iterations: this.__iterations,\n platformConfig: this._platformConfig\n };\n }\n start(fromValue, onUpdate, onEnd, previousAnimation, animatedValue) {\n this.__active = true;\n this._startPosition = fromValue;\n this._lastPosition = this._startPosition;\n this._onUpdate = onUpdate;\n this.__onEnd = onEnd;\n this._lastTime = Date.now();\n this._frameTime = 0.0;\n if (previousAnimation instanceof SpringAnimation) {\n var internalState = previousAnimation.getInternalState();\n this._lastPosition = internalState.lastPosition;\n this._lastVelocity = internalState.lastVelocity;\n // Set the initial velocity to the last velocity\n this._initialVelocity = this._lastVelocity;\n this._lastTime = internalState.lastTime;\n }\n var start = () => {\n if (this._useNativeDriver) {\n this.__startNativeAnimation(animatedValue);\n } else {\n this.onUpdate();\n }\n };\n\n // If this._delay is more than 0, we start after the timeout.\n if (this._delay) {\n this._timeout = setTimeout(start, this._delay);\n } else {\n start();\n }\n }\n getInternalState() {\n return {\n lastPosition: this._lastPosition,\n lastVelocity: this._lastVelocity,\n lastTime: this._lastTime\n };\n }\n\n /**\n * This spring model is based off of a damped harmonic oscillator\n * (https://en.wikipedia.org/wiki/Harmonic_oscillator#Damped_harmonic_oscillator).\n *\n * We use the closed form of the second order differential equation:\n *\n * x'' + (2ζ⍵_0)x' + ⍵^2x = 0\n *\n * where\n * ⍵_0 = √(k / m) (undamped angular frequency of the oscillator),\n * ζ = c / 2√mk (damping ratio),\n * c = damping constant\n * k = stiffness\n * m = mass\n *\n * The derivation of the closed form is described in detail here:\n * http://planetmath.org/sites/default/files/texpdf/39745.pdf\n *\n * This algorithm happens to match the algorithm used by CASpringAnimation,\n * a QuartzCore (iOS) API that creates spring animations.\n */\n onUpdate() {\n // If for some reason we lost a lot of frames (e.g. process large payload or\n // stopped in the debugger), we only advance by 4 frames worth of\n // computation and will continue on the next frame. It's better to have it\n // running at faster speed than jumping to the end.\n var MAX_STEPS = 64;\n var now = Date.now();\n if (now > this._lastTime + MAX_STEPS) {\n now = this._lastTime + MAX_STEPS;\n }\n var deltaTime = (now - this._lastTime) / 1000;\n this._frameTime += deltaTime;\n var c = this._damping;\n var m = this._mass;\n var k = this._stiffness;\n var v0 = -this._initialVelocity;\n var zeta = c / (2 * Math.sqrt(k * m)); // damping ratio\n var omega0 = Math.sqrt(k / m); // undamped angular frequency of the oscillator (rad/ms)\n var omega1 = omega0 * Math.sqrt(1.0 - zeta * zeta); // exponential decay\n var x0 = this._toValue - this._startPosition; // calculate the oscillation from x0 = 1 to x = 0\n\n var position = 0.0;\n var velocity = 0.0;\n var t = this._frameTime;\n if (zeta < 1) {\n // Under damped\n var envelope = Math.exp(-zeta * omega0 * t);\n position = this._toValue - envelope * ((v0 + zeta * omega0 * x0) / omega1 * Math.sin(omega1 * t) + x0 * Math.cos(omega1 * t));\n // This looks crazy -- it's actually just the derivative of the\n // oscillation function\n velocity = zeta * omega0 * envelope * (Math.sin(omega1 * t) * (v0 + zeta * omega0 * x0) / omega1 + x0 * Math.cos(omega1 * t)) - envelope * (Math.cos(omega1 * t) * (v0 + zeta * omega0 * x0) - omega1 * x0 * Math.sin(omega1 * t));\n } else {\n // Critically damped\n var _envelope = Math.exp(-omega0 * t);\n position = this._toValue - _envelope * (x0 + (v0 + omega0 * x0) * t);\n velocity = _envelope * (v0 * (t * omega0 - 1) + t * x0 * (omega0 * omega0));\n }\n this._lastTime = now;\n this._lastPosition = position;\n this._lastVelocity = velocity;\n this._onUpdate(position);\n if (!this.__active) {\n // a listener might have stopped us in _onUpdate\n return;\n }\n\n // Conditions for stopping the spring animation\n var isOvershooting = false;\n if (this._overshootClamping && this._stiffness !== 0) {\n if (this._startPosition < this._toValue) {\n isOvershooting = position > this._toValue;\n } else {\n isOvershooting = position < this._toValue;\n }\n }\n var isVelocity = Math.abs(velocity) <= this._restSpeedThreshold;\n var isDisplacement = true;\n if (this._stiffness !== 0) {\n isDisplacement = Math.abs(this._toValue - position) <= this._restDisplacementThreshold;\n }\n if (isOvershooting || isVelocity && isDisplacement) {\n if (this._stiffness !== 0) {\n // Ensure that we end up with a round value\n this._lastPosition = this._toValue;\n this._lastVelocity = 0;\n this._onUpdate(this._toValue);\n }\n this.__debouncedOnEnd({\n finished: true\n });\n return;\n }\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n this._animationFrame = requestAnimationFrame(this.onUpdate.bind(this));\n }\n stop() {\n super.stop();\n this.__active = false;\n clearTimeout(this._timeout);\n global.cancelAnimationFrame(this._animationFrame);\n this.__debouncedOnEnd({\n finished: false\n });\n }\n}\nexport default SpringAnimation;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * \n */\n\n'use strict';\n\nfunction stiffnessFromOrigamiValue(oValue) {\n return (oValue - 30) * 3.62 + 194;\n}\nfunction dampingFromOrigamiValue(oValue) {\n return (oValue - 8) * 3 + 25;\n}\nfunction fromOrigamiTensionAndFriction(tension, friction) {\n return {\n stiffness: stiffnessFromOrigamiValue(tension),\n damping: dampingFromOrigamiValue(friction)\n };\n}\nfunction fromBouncinessAndSpeed(bounciness, speed) {\n function normalize(value, startValue, endValue) {\n return (value - startValue) / (endValue - startValue);\n }\n function projectNormal(n, start, end) {\n return start + n * (end - start);\n }\n function linearInterpolation(t, start, end) {\n return t * end + (1 - t) * start;\n }\n function quadraticOutInterpolation(t, start, end) {\n return linearInterpolation(2 * t - t * t, start, end);\n }\n function b3Friction1(x) {\n return 0.0007 * Math.pow(x, 3) - 0.031 * Math.pow(x, 2) + 0.64 * x + 1.28;\n }\n function b3Friction2(x) {\n return 0.000044 * Math.pow(x, 3) - 0.006 * Math.pow(x, 2) + 0.36 * x + 2;\n }\n function b3Friction3(x) {\n return 0.00000045 * Math.pow(x, 3) - 0.000332 * Math.pow(x, 2) + 0.1078 * x + 5.84;\n }\n function b3Nobounce(tension) {\n if (tension <= 18) {\n return b3Friction1(tension);\n } else if (tension > 18 && tension <= 44) {\n return b3Friction2(tension);\n } else {\n return b3Friction3(tension);\n }\n }\n var b = normalize(bounciness / 1.7, 0, 20);\n b = projectNormal(b, 0, 0.8);\n var s = normalize(speed / 1.7, 0, 20);\n var bouncyTension = projectNormal(s, 0.5, 200);\n var bouncyFriction = quadraticOutInterpolation(b, b3Nobounce(bouncyTension), 0.01);\n return {\n stiffness: stiffnessFromOrigamiValue(bouncyTension),\n damping: dampingFromOrigamiValue(bouncyFriction)\n };\n}\nexport default {\n fromOrigamiTensionAndFriction,\n fromBouncinessAndSpeed\n};","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nimport normalizeColor from '@react-native/normalize-color';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nvar NativeAnimatedAPI = NativeAnimatedHelper.API;\nvar defaultColor = {\n r: 0,\n g: 0,\n b: 0,\n a: 1.0\n};\nvar _uniqueId = 1;\nvar processColorObject = color => {\n return color;\n};\n\n/* eslint no-bitwise: 0 */\nfunction processColor(color) {\n if (color === undefined || color === null) {\n return null;\n }\n if (isRgbaValue(color)) {\n // $FlowIgnore[incompatible-cast] - Type is verified above\n return color;\n }\n var normalizedColor = normalizeColor(\n // $FlowIgnore[incompatible-cast] - Type is verified above\n color);\n if (normalizedColor === undefined || normalizedColor === null) {\n return null;\n }\n if (typeof normalizedColor === 'object') {\n var processedColorObj = processColorObject(normalizedColor);\n if (processedColorObj != null) {\n return processedColorObj;\n }\n } else if (typeof normalizedColor === 'number') {\n var r = (normalizedColor & 0xff000000) >>> 24;\n var g = (normalizedColor & 0x00ff0000) >>> 16;\n var b = (normalizedColor & 0x0000ff00) >>> 8;\n var a = (normalizedColor & 0x000000ff) / 255;\n return {\n r,\n g,\n b,\n a\n };\n }\n return null;\n}\nfunction isRgbaValue(value) {\n return value && typeof value.r === 'number' && typeof value.g === 'number' && typeof value.b === 'number' && typeof value.a === 'number';\n}\nfunction isRgbaAnimatedValue(value) {\n return value && value.r instanceof AnimatedValue && value.g instanceof AnimatedValue && value.b instanceof AnimatedValue && value.a instanceof AnimatedValue;\n}\nexport default class AnimatedColor extends AnimatedWithChildren {\n constructor(valueIn, config) {\n super();\n this._listeners = {};\n var value = valueIn !== null && valueIn !== void 0 ? valueIn : defaultColor;\n if (isRgbaAnimatedValue(value)) {\n // $FlowIgnore[incompatible-cast] - Type is verified above\n var rgbaAnimatedValue = value;\n this.r = rgbaAnimatedValue.r;\n this.g = rgbaAnimatedValue.g;\n this.b = rgbaAnimatedValue.b;\n this.a = rgbaAnimatedValue.a;\n } else {\n var _processColor;\n var processedColor = // $FlowIgnore[incompatible-cast] - Type is verified above\n (_processColor = processColor(value)) !== null && _processColor !== void 0 ? _processColor : defaultColor;\n var initColor = defaultColor;\n if (isRgbaValue(processedColor)) {\n // $FlowIgnore[incompatible-cast] - Type is verified above\n initColor = processedColor;\n } else {\n // $FlowIgnore[incompatible-cast] - Type is verified above\n this.nativeColor = processedColor;\n }\n this.r = new AnimatedValue(initColor.r);\n this.g = new AnimatedValue(initColor.g);\n this.b = new AnimatedValue(initColor.b);\n this.a = new AnimatedValue(initColor.a);\n }\n if (this.nativeColor || config && config.useNativeDriver) {\n this.__makeNative();\n }\n }\n\n /**\n * Directly set the value. This will stop any animations running on the value\n * and update all the bound properties.\n */\n setValue(value) {\n var _processColor2;\n var shouldUpdateNodeConfig = false;\n if (this.__isNative) {\n var nativeTag = this.__getNativeTag();\n NativeAnimatedAPI.setWaitingForIdentifier(nativeTag.toString());\n }\n var processedColor = (_processColor2 = processColor(value)) !== null && _processColor2 !== void 0 ? _processColor2 : defaultColor;\n if (isRgbaValue(processedColor)) {\n // $FlowIgnore[incompatible-type] - Type is verified above\n var rgbaValue = processedColor;\n this.r.setValue(rgbaValue.r);\n this.g.setValue(rgbaValue.g);\n this.b.setValue(rgbaValue.b);\n this.a.setValue(rgbaValue.a);\n if (this.nativeColor != null) {\n this.nativeColor = null;\n shouldUpdateNodeConfig = true;\n }\n } else {\n // $FlowIgnore[incompatible-type] - Type is verified above\n var nativeColor = processedColor;\n if (this.nativeColor !== nativeColor) {\n this.nativeColor = nativeColor;\n shouldUpdateNodeConfig = true;\n }\n }\n if (this.__isNative) {\n var _nativeTag = this.__getNativeTag();\n if (shouldUpdateNodeConfig) {\n NativeAnimatedAPI.updateAnimatedNodeConfig(_nativeTag, this.__getNativeConfig());\n }\n NativeAnimatedAPI.unsetWaitingForIdentifier(_nativeTag.toString());\n }\n }\n\n /**\n * Sets an offset that is applied on top of whatever value is set, whether\n * via `setValue`, an animation, or `Animated.event`. Useful for compensating\n * things like the start of a pan gesture.\n */\n setOffset(offset) {\n this.r.setOffset(offset.r);\n this.g.setOffset(offset.g);\n this.b.setOffset(offset.b);\n this.a.setOffset(offset.a);\n }\n\n /**\n * Merges the offset value into the base value and resets the offset to zero.\n * The final output of the value is unchanged.\n */\n flattenOffset() {\n this.r.flattenOffset();\n this.g.flattenOffset();\n this.b.flattenOffset();\n this.a.flattenOffset();\n }\n\n /**\n * Sets the offset value to the base value, and resets the base value to\n * zero. The final output of the value is unchanged.\n */\n extractOffset() {\n this.r.extractOffset();\n this.g.extractOffset();\n this.b.extractOffset();\n this.a.extractOffset();\n }\n\n /**\n * Adds an asynchronous listener to the value so you can observe updates from\n * animations. This is useful because there is no way to synchronously read\n * the value because it might be driven natively.\n *\n * Returns a string that serves as an identifier for the listener.\n */\n addListener(callback) {\n var id = String(_uniqueId++);\n var jointCallback = _ref => {\n var number = _ref.value;\n callback(this.__getValue());\n };\n this._listeners[id] = {\n r: this.r.addListener(jointCallback),\n g: this.g.addListener(jointCallback),\n b: this.b.addListener(jointCallback),\n a: this.a.addListener(jointCallback)\n };\n return id;\n }\n\n /**\n * Unregister a listener. The `id` param shall match the identifier\n * previously returned by `addListener()`.\n */\n removeListener(id) {\n this.r.removeListener(this._listeners[id].r);\n this.g.removeListener(this._listeners[id].g);\n this.b.removeListener(this._listeners[id].b);\n this.a.removeListener(this._listeners[id].a);\n delete this._listeners[id];\n }\n\n /**\n * Remove all registered listeners.\n */\n removeAllListeners() {\n this.r.removeAllListeners();\n this.g.removeAllListeners();\n this.b.removeAllListeners();\n this.a.removeAllListeners();\n this._listeners = {};\n }\n\n /**\n * Stops any running animation or tracking. `callback` is invoked with the\n * final value after stopping the animation, which is useful for updating\n * state to match the animation position with layout.\n */\n stopAnimation(callback) {\n this.r.stopAnimation();\n this.g.stopAnimation();\n this.b.stopAnimation();\n this.a.stopAnimation();\n callback && callback(this.__getValue());\n }\n\n /**\n * Stops any animation and resets the value to its original.\n */\n resetAnimation(callback) {\n this.r.resetAnimation();\n this.g.resetAnimation();\n this.b.resetAnimation();\n this.a.resetAnimation();\n callback && callback(this.__getValue());\n }\n __getValue() {\n if (this.nativeColor != null) {\n return this.nativeColor;\n } else {\n return \"rgba(\" + this.r.__getValue() + \", \" + this.g.__getValue() + \", \" + this.b.__getValue() + \", \" + this.a.__getValue() + \")\";\n }\n }\n __attach() {\n this.r.__addChild(this);\n this.g.__addChild(this);\n this.b.__addChild(this);\n this.a.__addChild(this);\n super.__attach();\n }\n __detach() {\n this.r.__removeChild(this);\n this.g.__removeChild(this);\n this.b.__removeChild(this);\n this.a.__removeChild(this);\n super.__detach();\n }\n __makeNative(platformConfig) {\n this.r.__makeNative(platformConfig);\n this.g.__makeNative(platformConfig);\n this.b.__makeNative(platformConfig);\n this.a.__makeNative(platformConfig);\n super.__makeNative(platformConfig);\n }\n __getNativeConfig() {\n return {\n type: 'color',\n r: this.r.__getNativeTag(),\n g: this.g.__getNativeTag(),\n b: this.b.__getNativeTag(),\n a: this.a.__getNativeTag(),\n nativeColor: this.nativeColor\n };\n }\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedValue from '../nodes/AnimatedValue';\nimport AnimatedValueXY from '../nodes/AnimatedValueXY';\nimport AnimatedInterpolation from '../nodes/AnimatedInterpolation';\nimport Easing from '../../../../exports/Easing';\nimport Animation from './Animation';\nimport { shouldUseNativeDriver } from '../NativeAnimatedHelper';\nimport AnimatedColor from '../nodes/AnimatedColor';\nvar _easeInOut;\nfunction easeInOut() {\n if (!_easeInOut) {\n _easeInOut = Easing.inOut(Easing.ease);\n }\n return _easeInOut;\n}\nclass TimingAnimation extends Animation {\n constructor(config) {\n var _config$easing, _config$duration, _config$delay, _config$iterations, _config$isInteraction;\n super();\n this._toValue = config.toValue;\n this._easing = (_config$easing = config.easing) !== null && _config$easing !== void 0 ? _config$easing : easeInOut();\n this._duration = (_config$duration = config.duration) !== null && _config$duration !== void 0 ? _config$duration : 500;\n this._delay = (_config$delay = config.delay) !== null && _config$delay !== void 0 ? _config$delay : 0;\n this.__iterations = (_config$iterations = config.iterations) !== null && _config$iterations !== void 0 ? _config$iterations : 1;\n this._useNativeDriver = shouldUseNativeDriver(config);\n this._platformConfig = config.platformConfig;\n this.__isInteraction = (_config$isInteraction = config.isInteraction) !== null && _config$isInteraction !== void 0 ? _config$isInteraction : !this._useNativeDriver;\n }\n __getNativeAnimationConfig() {\n var frameDuration = 1000.0 / 60.0;\n var frames = [];\n var numFrames = Math.round(this._duration / frameDuration);\n for (var frame = 0; frame < numFrames; frame++) {\n frames.push(this._easing(frame / numFrames));\n }\n frames.push(this._easing(1));\n return {\n type: 'frames',\n frames,\n toValue: this._toValue,\n iterations: this.__iterations,\n platformConfig: this._platformConfig\n };\n }\n start(fromValue, onUpdate, onEnd, previousAnimation, animatedValue) {\n this.__active = true;\n this._fromValue = fromValue;\n this._onUpdate = onUpdate;\n this.__onEnd = onEnd;\n var start = () => {\n // Animations that sometimes have 0 duration and sometimes do not\n // still need to use the native driver when duration is 0 so as to\n // not cause intermixed JS and native animations.\n if (this._duration === 0 && !this._useNativeDriver) {\n this._onUpdate(this._toValue);\n this.__debouncedOnEnd({\n finished: true\n });\n } else {\n this._startTime = Date.now();\n if (this._useNativeDriver) {\n this.__startNativeAnimation(animatedValue);\n } else {\n this._animationFrame = requestAnimationFrame(\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n this.onUpdate.bind(this));\n }\n }\n };\n if (this._delay) {\n this._timeout = setTimeout(start, this._delay);\n } else {\n start();\n }\n }\n onUpdate() {\n var now = Date.now();\n if (now >= this._startTime + this._duration) {\n if (this._duration === 0) {\n this._onUpdate(this._toValue);\n } else {\n this._onUpdate(this._fromValue + this._easing(1) * (this._toValue - this._fromValue));\n }\n this.__debouncedOnEnd({\n finished: true\n });\n return;\n }\n this._onUpdate(this._fromValue + this._easing((now - this._startTime) / this._duration) * (this._toValue - this._fromValue));\n if (this.__active) {\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n this._animationFrame = requestAnimationFrame(this.onUpdate.bind(this));\n }\n }\n stop() {\n super.stop();\n this.__active = false;\n clearTimeout(this._timeout);\n global.cancelAnimationFrame(this._animationFrame);\n this.__debouncedOnEnd({\n finished: false\n });\n }\n}\nexport default TimingAnimation;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport Easing from '../../vendor/react-native/Animated/Easing';\nexport default Easing;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * \n */\n\n'use strict';\n\nimport _bezier from './bezier';\nvar ease;\n\n/**\n * The `Easing` module implements common easing functions. This module is used\n * by [Animate.timing()](docs/animate.html#timing) to convey physically\n * believable motion in animations.\n *\n * You can find a visualization of some common easing functions at\n * http://easings.net/\n *\n * ### Predefined animations\n *\n * The `Easing` module provides several predefined animations through the\n * following methods:\n *\n * - [`back`](docs/easing.html#back) provides a simple animation where the\n * object goes slightly back before moving forward\n * - [`bounce`](docs/easing.html#bounce) provides a bouncing animation\n * - [`ease`](docs/easing.html#ease) provides a simple inertial animation\n * - [`elastic`](docs/easing.html#elastic) provides a simple spring interaction\n *\n * ### Standard functions\n *\n * Three standard easing functions are provided:\n *\n * - [`linear`](docs/easing.html#linear)\n * - [`quad`](docs/easing.html#quad)\n * - [`cubic`](docs/easing.html#cubic)\n *\n * The [`poly`](docs/easing.html#poly) function can be used to implement\n * quartic, quintic, and other higher power functions.\n *\n * ### Additional functions\n *\n * Additional mathematical functions are provided by the following methods:\n *\n * - [`bezier`](docs/easing.html#bezier) provides a cubic bezier curve\n * - [`circle`](docs/easing.html#circle) provides a circular function\n * - [`sin`](docs/easing.html#sin) provides a sinusoidal function\n * - [`exp`](docs/easing.html#exp) provides an exponential function\n *\n * The following helpers are used to modify other easing functions.\n *\n * - [`in`](docs/easing.html#in) runs an easing function forwards\n * - [`inOut`](docs/easing.html#inout) makes any easing function symmetrical\n * - [`out`](docs/easing.html#out) runs an easing function backwards\n */\nclass Easing {\n /**\n * A stepping function, returns 1 for any positive value of `n`.\n */\n static step0(n) {\n return n > 0 ? 1 : 0;\n }\n\n /**\n * A stepping function, returns 1 if `n` is greater than or equal to 1.\n */\n static step1(n) {\n return n >= 1 ? 1 : 0;\n }\n\n /**\n * A linear function, `f(t) = t`. Position correlates to elapsed time one to\n * one.\n *\n * http://cubic-bezier.com/#0,0,1,1\n */\n static linear(t) {\n return t;\n }\n\n /**\n * A simple inertial interaction, similar to an object slowly accelerating to\n * speed.\n *\n * http://cubic-bezier.com/#.42,0,1,1\n */\n static ease(t) {\n if (!ease) {\n ease = Easing.bezier(0.42, 0, 1, 1);\n }\n return ease(t);\n }\n\n /**\n * A quadratic function, `f(t) = t * t`. Position equals the square of elapsed\n * time.\n *\n * http://easings.net/#easeInQuad\n */\n static quad(t) {\n return t * t;\n }\n\n /**\n * A cubic function, `f(t) = t * t * t`. Position equals the cube of elapsed\n * time.\n *\n * http://easings.net/#easeInCubic\n */\n static cubic(t) {\n return t * t * t;\n }\n\n /**\n * A power function. Position is equal to the Nth power of elapsed time.\n *\n * n = 4: http://easings.net/#easeInQuart\n * n = 5: http://easings.net/#easeInQuint\n */\n static poly(n) {\n return t => Math.pow(t, n);\n }\n\n /**\n * A sinusoidal function.\n *\n * http://easings.net/#easeInSine\n */\n static sin(t) {\n return 1 - Math.cos(t * Math.PI / 2);\n }\n\n /**\n * A circular function.\n *\n * http://easings.net/#easeInCirc\n */\n static circle(t) {\n return 1 - Math.sqrt(1 - t * t);\n }\n\n /**\n * An exponential function.\n *\n * http://easings.net/#easeInExpo\n */\n static exp(t) {\n return Math.pow(2, 10 * (t - 1));\n }\n\n /**\n * A simple elastic interaction, similar to a spring oscillating back and\n * forth.\n *\n * Default bounciness is 1, which overshoots a little bit once. 0 bounciness\n * doesn't overshoot at all, and bounciness of N > 1 will overshoot about N\n * times.\n *\n * http://easings.net/#easeInElastic\n */\n static elastic(bounciness) {\n if (bounciness === void 0) {\n bounciness = 1;\n }\n var p = bounciness * Math.PI;\n return t => 1 - Math.pow(Math.cos(t * Math.PI / 2), 3) * Math.cos(t * p);\n }\n\n /**\n * Use with `Animated.parallel()` to create a simple effect where the object\n * animates back slightly as the animation starts.\n *\n * Wolfram Plot:\n *\n * - http://tiny.cc/back_default (s = 1.70158, default)\n */\n static back(s) {\n if (s === void 0) {\n s = 1.70158;\n }\n return t => t * t * ((s + 1) * t - s);\n }\n\n /**\n * Provides a simple bouncing effect.\n *\n * http://easings.net/#easeInBounce\n */\n static bounce(t) {\n if (t < 1 / 2.75) {\n return 7.5625 * t * t;\n }\n if (t < 2 / 2.75) {\n var _t = t - 1.5 / 2.75;\n return 7.5625 * _t * _t + 0.75;\n }\n if (t < 2.5 / 2.75) {\n var _t2 = t - 2.25 / 2.75;\n return 7.5625 * _t2 * _t2 + 0.9375;\n }\n var t2 = t - 2.625 / 2.75;\n return 7.5625 * t2 * t2 + 0.984375;\n }\n\n /**\n * Provides a cubic bezier curve, equivalent to CSS Transitions'\n * `transition-timing-function`.\n *\n * A useful tool to visualize cubic bezier curves can be found at\n * http://cubic-bezier.com/\n */\n static bezier(x1, y1, x2, y2) {\n return _bezier(x1, y1, x2, y2);\n }\n\n /**\n * Runs an easing function forwards.\n */\n static in(easing) {\n return easing;\n }\n\n /**\n * Runs an easing function backwards.\n */\n static out(easing) {\n return t => 1 - easing(1 - t);\n }\n\n /**\n * Makes any easing function symmetrical. The easing function will run\n * forwards for half of the duration, then backwards for the rest of the\n * duration.\n */\n static inOut(easing) {\n return t => {\n if (t < 0.5) {\n return easing(t * 2) / 2;\n }\n return 1 - easing((1 - t) * 2) / 2;\n };\n }\n}\nexport default Easing;","/**\n * Portions Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n/**\n * BezierEasing - use bezier curve for transition easing function\n * https://github.com/gre/bezier-easing\n * @copyright 2014-2015 Gaëtan Renaudeau. MIT License.\n */\n\n'use strict';\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\nvar NEWTON_ITERATIONS = 4;\nvar NEWTON_MIN_SLOPE = 0.001;\nvar SUBDIVISION_PRECISION = 0.0000001;\nvar SUBDIVISION_MAX_ITERATIONS = 10;\nvar kSplineTableSize = 11;\nvar kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\nvar float32ArraySupported = typeof Float32Array === 'function';\nfunction A(aA1, aA2) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n}\nfunction B(aA1, aA2) {\n return 3.0 * aA2 - 6.0 * aA1;\n}\nfunction C(aA1) {\n return 3.0 * aA1;\n}\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier(aT, aA1, aA2) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n}\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope(aT, aA1, aA2) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n}\nfunction binarySubdivide(aX, _aA, _aB, mX1, mX2) {\n var currentX,\n currentT,\n i = 0,\n aA = _aA,\n aB = _aB;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n return currentT;\n}\nfunction newtonRaphsonIterate(aX, _aGuessT, mX1, mX2) {\n var aGuessT = _aGuessT;\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) {\n return aGuessT;\n }\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n}\nexport default function bezier(mX1, mY1, mX2, mY2) {\n if (!(mX1 >= 0 && mX1 <= 1 && mX2 >= 0 && mX2 <= 1)) {\n throw new Error('bezier x values must be in [0, 1] range');\n }\n\n // Precompute samples table\n var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n if (mX1 !== mY1 || mX2 !== mY2) {\n for (var i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n }\n function getTForX(aX) {\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n var initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n }\n return function BezierEasing(x) {\n if (mX1 === mY1 && mX2 === mY2) {\n return x; // linear\n }\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if (x === 0) {\n return 0;\n }\n if (x === 1) {\n return 1;\n }\n return calcBezier(getTForX(x), mY1, mY2);\n };\n}\n;","export * from './SafeAreaContext';\nexport * from './SafeAreaView';\nexport * from './InitialWindow';\nexport * from './SafeArea.types';\n//# sourceMappingURL=index.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Dimensions, StyleSheet } from 'react-native';\nimport { NativeSafeAreaProvider } from './NativeSafeAreaProvider';\nconst isDev = process.env.NODE_ENV !== 'production';\nexport const SafeAreaInsetsContext = /*#__PURE__*/React.createContext(null);\nif (isDev) {\n SafeAreaInsetsContext.displayName = 'SafeAreaInsetsContext';\n}\nexport const SafeAreaFrameContext = /*#__PURE__*/React.createContext(null);\nif (isDev) {\n SafeAreaFrameContext.displayName = 'SafeAreaFrameContext';\n}\nexport function SafeAreaProvider({\n children,\n initialMetrics,\n initialSafeAreaInsets,\n style,\n ...others\n}) {\n const parentInsets = useParentSafeAreaInsets();\n const parentFrame = useParentSafeAreaFrame();\n const [insets, setInsets] = React.useState(initialMetrics?.insets ?? initialSafeAreaInsets ?? parentInsets ?? null);\n const [frame, setFrame] = React.useState(initialMetrics?.frame ?? parentFrame ?? {\n // Backwards compat so we render anyway if we don't have frame.\n x: 0,\n y: 0,\n width: Dimensions.get('window').width,\n height: Dimensions.get('window').height\n });\n const onInsetsChange = React.useCallback(event => {\n const {\n nativeEvent: {\n frame: nextFrame,\n insets: nextInsets\n }\n } = event;\n setFrame(curFrame => {\n if (\n // Backwards compat with old native code that won't send frame.\n nextFrame && (nextFrame.height !== curFrame.height || nextFrame.width !== curFrame.width || nextFrame.x !== curFrame.x || nextFrame.y !== curFrame.y)) {\n return nextFrame;\n } else {\n return curFrame;\n }\n });\n setInsets(curInsets => {\n if (!curInsets || nextInsets.bottom !== curInsets.bottom || nextInsets.left !== curInsets.left || nextInsets.right !== curInsets.right || nextInsets.top !== curInsets.top) {\n return nextInsets;\n } else {\n return curInsets;\n }\n });\n }, []);\n return /*#__PURE__*/React.createElement(NativeSafeAreaProvider, _extends({\n style: [styles.fill, style],\n onInsetsChange: onInsetsChange\n }, others), insets != null ? /*#__PURE__*/React.createElement(SafeAreaFrameContext.Provider, {\n value: frame\n }, /*#__PURE__*/React.createElement(SafeAreaInsetsContext.Provider, {\n value: insets\n }, children)) : null);\n}\nconst styles = StyleSheet.create({\n fill: {\n flex: 1\n }\n});\nfunction useParentSafeAreaInsets() {\n return React.useContext(SafeAreaInsetsContext);\n}\nfunction useParentSafeAreaFrame() {\n return React.useContext(SafeAreaFrameContext);\n}\nconst NO_INSETS_ERROR = 'No safe area value available. Make sure you are rendering `` at the top of your app.';\nexport function useSafeAreaInsets() {\n const insets = React.useContext(SafeAreaInsetsContext);\n if (insets == null) {\n throw new Error(NO_INSETS_ERROR);\n }\n return insets;\n}\nexport function useSafeAreaFrame() {\n const frame = React.useContext(SafeAreaFrameContext);\n if (frame == null) {\n throw new Error(NO_INSETS_ERROR);\n }\n return frame;\n}\nexport function withSafeAreaInsets(WrappedComponent) {\n return /*#__PURE__*/React.forwardRef((props, ref) => {\n const insets = useSafeAreaInsets();\n return /*#__PURE__*/React.createElement(WrappedComponent, _extends({}, props, {\n insets: insets,\n ref: ref\n }));\n });\n}\n\n/**\n * @deprecated\n */\nexport function useSafeArea() {\n return useSafeAreaInsets();\n}\n\n/**\n * @deprecated\n */\nexport const SafeAreaConsumer = SafeAreaInsetsContext.Consumer;\n\n/**\n * @deprecated\n */\nexport const SafeAreaContext = SafeAreaInsetsContext;\n//# sourceMappingURL=SafeAreaContext.js.map","/* eslint-env browser */\n\nimport * as React from 'react';\nimport { View } from 'react-native';\n/**\n * TODO:\n * Currently insets and frame are based on the window and are not\n * relative to the provider view. This is inconsistent with iOS and Android.\n * However in most cases if the provider view covers the screen this is not\n * an issue.\n */\n\nconst CSSTransitions = {\n WebkitTransition: 'webkitTransitionEnd',\n Transition: 'transitionEnd',\n MozTransition: 'transitionend',\n MSTransition: 'msTransitionEnd',\n OTransition: 'oTransitionEnd'\n};\nexport function NativeSafeAreaProvider({\n children,\n style,\n onInsetsChange\n}) {\n React.useEffect(() => {\n // Skip for SSR.\n if (typeof document === 'undefined') {\n return;\n }\n const element = createContextElement();\n document.body.appendChild(element);\n const onEnd = () => {\n const {\n paddingTop,\n paddingBottom,\n paddingLeft,\n paddingRight\n } = window.getComputedStyle(element);\n const insets = {\n top: paddingTop ? parseInt(paddingTop, 10) : 0,\n bottom: paddingBottom ? parseInt(paddingBottom, 10) : 0,\n left: paddingLeft ? parseInt(paddingLeft, 10) : 0,\n right: paddingRight ? parseInt(paddingRight, 10) : 0\n };\n const frame = {\n x: 0,\n y: 0,\n width: document.documentElement.offsetWidth,\n height: document.documentElement.offsetHeight\n };\n // @ts-ignore: missing properties\n onInsetsChange({\n nativeEvent: {\n insets,\n frame\n }\n });\n };\n element.addEventListener(getSupportedTransitionEvent(), onEnd);\n onEnd();\n return () => {\n document.body.removeChild(element);\n element.removeEventListener(getSupportedTransitionEvent(), onEnd);\n };\n }, [onInsetsChange]);\n return /*#__PURE__*/React.createElement(View, {\n style: style\n }, children);\n}\nlet _supportedTransitionEvent = null;\nfunction getSupportedTransitionEvent() {\n if (_supportedTransitionEvent != null) {\n return _supportedTransitionEvent;\n }\n const element = document.createElement('invalidtype');\n _supportedTransitionEvent = CSSTransitions.Transition;\n for (const key in CSSTransitions) {\n if (element.style[key] !== undefined) {\n _supportedTransitionEvent = CSSTransitions[key];\n break;\n }\n }\n return _supportedTransitionEvent;\n}\nlet _supportedEnv = null;\nfunction getSupportedEnv() {\n if (_supportedEnv !== null) {\n return _supportedEnv;\n }\n const {\n CSS\n } = window;\n if (CSS && CSS.supports && CSS.supports('top: constant(safe-area-inset-top)')) {\n _supportedEnv = 'constant';\n } else {\n _supportedEnv = 'env';\n }\n return _supportedEnv;\n}\nfunction getInset(side) {\n return `${getSupportedEnv()}(safe-area-inset-${side})`;\n}\nfunction createContextElement() {\n const element = document.createElement('div');\n const {\n style\n } = element;\n style.position = 'fixed';\n style.left = '0';\n style.top = '0';\n style.width = '0';\n style.height = '0';\n style.zIndex = '-1';\n style.overflow = 'hidden';\n style.visibility = 'hidden';\n // Bacon: Anything faster than this and the callback will be invoked too early with the wrong insets\n style.transitionDuration = '0.05s';\n style.transitionProperty = 'padding';\n style.transitionDelay = '0s';\n style.paddingTop = getInset('top');\n style.paddingBottom = getInset('bottom');\n style.paddingLeft = getInset('left');\n style.paddingRight = getInset('right');\n return element;\n}\n//# sourceMappingURL=NativeSafeAreaProvider.web.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { View, StyleSheet } from 'react-native';\nimport { useSafeAreaInsets } from './SafeAreaContext';\n// prettier-ignore\nconst TOP = 0b1000,\n RIGHT = 0b0100,\n BOTTOM = 0b0010,\n LEFT = 0b0001,\n ALL = 0b1111;\n\n/* eslint-disable no-bitwise */\n\nconst edgeBitmaskMap = {\n top: TOP,\n right: RIGHT,\n bottom: BOTTOM,\n left: LEFT\n};\nexport const SafeAreaView = /*#__PURE__*/React.forwardRef(({\n style = {},\n mode,\n edges,\n ...rest\n}, ref) => {\n const insets = useSafeAreaInsets();\n const edgeBitmask = edges != null ? Array.isArray(edges) ? edges.reduce((acc, edge) => acc | edgeBitmaskMap[edge], 0) : Object.keys(edges).reduce((acc, edge) => acc | edgeBitmaskMap[edge], 0) : ALL;\n const appliedStyle = React.useMemo(() => {\n const insetTop = edgeBitmask & TOP ? insets.top : 0;\n const insetRight = edgeBitmask & RIGHT ? insets.right : 0;\n const insetBottom = edgeBitmask & BOTTOM ? insets.bottom : 0;\n const insetLeft = edgeBitmask & LEFT ? insets.left : 0;\n const flatStyle = StyleSheet.flatten(style);\n if (mode === 'margin') {\n const {\n margin = 0,\n marginVertical = margin,\n marginHorizontal = margin,\n marginTop = marginVertical,\n marginRight = marginHorizontal,\n marginBottom = marginVertical,\n marginLeft = marginHorizontal\n } = flatStyle;\n const marginStyle = {\n marginTop: marginTop + insetTop,\n marginRight: marginRight + insetRight,\n marginBottom: marginBottom + insetBottom,\n marginLeft: marginLeft + insetLeft\n };\n return [style, marginStyle];\n } else {\n const {\n padding = 0,\n paddingVertical = padding,\n paddingHorizontal = padding,\n paddingTop = paddingVertical,\n paddingRight = paddingHorizontal,\n paddingBottom = paddingVertical,\n paddingLeft = paddingHorizontal\n } = flatStyle;\n const paddingStyle = {\n paddingTop: paddingTop + insetTop,\n paddingRight: paddingRight + insetRight,\n paddingBottom: paddingBottom + insetBottom,\n paddingLeft: paddingLeft + insetLeft\n };\n return [style, paddingStyle];\n }\n }, [style, insets, mode, edgeBitmask]);\n return /*#__PURE__*/React.createElement(View, _extends({\n style: appliedStyle\n }, rest, {\n ref: ref\n }));\n});\n//# sourceMappingURL=SafeAreaView.web.js.map","export const initialWindowMetrics = null;\n\n/**\n * @deprecated\n */\nexport const initialWindowSafeAreaInsets = null;\n//# sourceMappingURL=InitialWindow.js.map","export {};\n//# sourceMappingURL=SafeArea.types.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport { useTheme } from '@react-navigation/native';\nimport * as React from 'react';\nimport { Animated, Platform, StyleSheet } from 'react-native';\nexport default function HeaderBackground(_ref) {\n let {\n style,\n ...rest\n } = _ref;\n const {\n colors\n } = useTheme();\n return /*#__PURE__*/React.createElement(Animated.View, _extends({\n style: [styles.container, {\n backgroundColor: colors.card,\n borderBottomColor: colors.border,\n shadowColor: colors.border\n }, style]\n }, rest));\n}\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n ...Platform.select({\n android: {\n elevation: 4\n },\n ios: {\n shadowOpacity: 0.85,\n shadowRadius: 0,\n shadowOffset: {\n width: 0,\n height: StyleSheet.hairlineWidth\n }\n },\n default: {\n borderBottomWidth: StyleSheet.hairlineWidth\n }\n })\n }\n});\n//# sourceMappingURL=HeaderBackground.js.map","import getNamedContext from '../getNamedContext';\nconst HeaderShownContext = getNamedContext('HeaderShownContext', false);\nexport default HeaderShownContext;\n//# sourceMappingURL=HeaderShownContext.js.map","import * as React from 'react';\nconst contexts = '__react_navigation__elements_contexts';\n// We use a global variable to keep our contexts so that we can reuse same contexts across packages\nglobal[contexts] = global[contexts] ?? new Map();\nexport default function getNamedContext(name, initialValue) {\n let context = global[contexts].get(name);\n if (context) {\n return context;\n }\n context = /*#__PURE__*/React.createContext(initialValue);\n context.displayName = name;\n global[contexts].set(name, context);\n return context;\n}\n//# sourceMappingURL=getNamedContext.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport { useTheme } from '@react-navigation/native';\nimport * as React from 'react';\nimport { Animated, Platform, StyleSheet } from 'react-native';\nexport default function HeaderTitle(_ref) {\n let {\n tintColor,\n style,\n ...rest\n } = _ref;\n const {\n colors\n } = useTheme();\n return /*#__PURE__*/React.createElement(Animated.Text, _extends({\n accessibilityRole: \"header\",\n \"aria-level\": \"1\",\n numberOfLines: 1\n }, rest, {\n style: [styles.title, {\n color: tintColor === undefined ? colors.text : tintColor\n }, style]\n }));\n}\nconst styles = StyleSheet.create({\n title: Platform.select({\n ios: {\n fontSize: 17,\n fontWeight: '600'\n },\n android: {\n fontSize: 20,\n fontFamily: 'sans-serif-medium',\n fontWeight: 'normal'\n },\n default: {\n fontSize: 18,\n fontWeight: '500'\n }\n })\n});\n//# sourceMappingURL=HeaderTitle.js.map","import { useTheme } from '@react-navigation/native';\nimport * as React from 'react';\nimport { Animated, I18nManager, Image, Platform, StyleSheet, View } from 'react-native';\nimport MaskedView from '../MaskedView';\nimport PlatformPressable from '../PlatformPressable';\nexport default function HeaderBackButton(_ref) {\n let {\n disabled,\n allowFontScaling,\n backImage,\n label,\n labelStyle,\n labelVisible = Platform.OS === 'ios',\n onLabelLayout,\n onPress,\n pressColor,\n pressOpacity,\n screenLayout,\n tintColor: customTintColor,\n titleLayout,\n truncatedLabel = 'Back',\n accessibilityLabel = label && label !== 'Back' ? `${label}, back` : 'Go back',\n testID,\n style\n } = _ref;\n const {\n colors\n } = useTheme();\n const [initialLabelWidth, setInitialLabelWidth] = React.useState(undefined);\n const tintColor = customTintColor !== undefined ? customTintColor : Platform.select({\n ios: colors.primary,\n default: colors.text\n });\n const handleLabelLayout = e => {\n onLabelLayout === null || onLabelLayout === void 0 ? void 0 : onLabelLayout(e);\n setInitialLabelWidth(e.nativeEvent.layout.x + e.nativeEvent.layout.width);\n };\n const shouldTruncateLabel = () => {\n return !label || initialLabelWidth && titleLayout && screenLayout && (screenLayout.width - titleLayout.width) / 2 < initialLabelWidth + 26;\n };\n const renderBackImage = () => {\n if (backImage) {\n return backImage({\n tintColor\n });\n } else {\n return /*#__PURE__*/React.createElement(Image, {\n style: [styles.icon, Boolean(labelVisible) && styles.iconWithLabel, Boolean(tintColor) && {\n tintColor\n }],\n source: require('../assets/back-icon.png'),\n fadeDuration: 0\n });\n }\n };\n const renderLabel = () => {\n const leftLabelText = shouldTruncateLabel() ? truncatedLabel : label;\n if (!labelVisible || leftLabelText === undefined) {\n return null;\n }\n const labelElement = /*#__PURE__*/React.createElement(View, {\n style: screenLayout ?\n // We make the button extend till the middle of the screen\n // Otherwise it appears to cut off when translating\n [styles.labelWrapper, {\n minWidth: screenLayout.width / 2 - 27\n }] : null\n }, /*#__PURE__*/React.createElement(Animated.Text, {\n accessible: false,\n onLayout:\n // This measurement is used to determine if we should truncate the label when it doesn't fit\n // Only measure it when label is not truncated because we want the measurement of full label\n leftLabelText === label ? handleLabelLayout : undefined,\n style: [styles.label, tintColor ? {\n color: tintColor\n } : null, labelStyle],\n numberOfLines: 1,\n allowFontScaling: !!allowFontScaling\n }, leftLabelText));\n if (backImage || Platform.OS !== 'ios') {\n // When a custom backimage is specified, we can't mask the label\n // Otherwise there might be weird effect due to our mask not being the same as the image\n return labelElement;\n }\n return /*#__PURE__*/React.createElement(MaskedView, {\n maskElement: /*#__PURE__*/React.createElement(View, {\n style: styles.iconMaskContainer\n }, /*#__PURE__*/React.createElement(Image, {\n source: require('../assets/back-icon-mask.png'),\n style: styles.iconMask\n }), /*#__PURE__*/React.createElement(View, {\n style: styles.iconMaskFillerRect\n }))\n }, labelElement);\n };\n const handlePress = () => onPress && requestAnimationFrame(onPress);\n return /*#__PURE__*/React.createElement(PlatformPressable, {\n disabled: disabled,\n accessible: true,\n accessibilityRole: \"button\",\n accessibilityLabel: accessibilityLabel,\n testID: testID,\n onPress: disabled ? undefined : handlePress,\n pressColor: pressColor,\n pressOpacity: pressOpacity,\n android_ripple: androidRipple,\n style: [styles.container, disabled && styles.disabled, style],\n hitSlop: Platform.select({\n ios: undefined,\n default: {\n top: 16,\n right: 16,\n bottom: 16,\n left: 16\n }\n })\n }, /*#__PURE__*/React.createElement(React.Fragment, null, renderBackImage(), renderLabel()));\n}\nconst androidRipple = {\n borderless: true,\n foreground: Platform.OS === 'android' && Platform.Version >= 23,\n radius: 20\n};\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n flexDirection: 'row',\n minWidth: StyleSheet.hairlineWidth,\n // Avoid collapsing when title is long\n ...Platform.select({\n ios: null,\n default: {\n marginVertical: 3,\n marginHorizontal: 11\n }\n })\n },\n disabled: {\n opacity: 0.5\n },\n label: {\n fontSize: 17,\n // Title and back label are a bit different width due to title being bold\n // Adjusting the letterSpacing makes them coincide better\n letterSpacing: 0.35\n },\n labelWrapper: {\n // These styles will make sure that the label doesn't fill the available space\n // Otherwise it messes with the measurement of the label\n flexDirection: 'row',\n alignItems: 'flex-start'\n },\n icon: Platform.select({\n ios: {\n height: 21,\n width: 13,\n marginLeft: 8,\n marginRight: 22,\n marginVertical: 12,\n resizeMode: 'contain',\n transform: [{\n scaleX: I18nManager.getConstants().isRTL ? -1 : 1\n }]\n },\n default: {\n height: 24,\n width: 24,\n margin: 3,\n resizeMode: 'contain',\n transform: [{\n scaleX: I18nManager.getConstants().isRTL ? -1 : 1\n }]\n }\n }),\n iconWithLabel: Platform.OS === 'ios' ? {\n marginRight: 6\n } : {},\n iconMaskContainer: {\n flex: 1,\n flexDirection: 'row',\n justifyContent: 'center'\n },\n iconMaskFillerRect: {\n flex: 1,\n backgroundColor: '#000'\n },\n iconMask: {\n height: 21,\n width: 13,\n marginLeft: -14.5,\n marginVertical: 12,\n alignSelf: 'center',\n resizeMode: 'contain',\n transform: [{\n scaleX: I18nManager.getConstants().isRTL ? -1 : 1\n }]\n }\n});\n//# sourceMappingURL=HeaderBackButton.js.map","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar I18nManager = {\n allowRTL() {\n return;\n },\n forceRTL() {\n return;\n },\n getConstants() {\n return {\n isRTL: false\n };\n }\n};\nexport default I18nManager;","/**\n * Use a stub for MaskedView on all Platforms that don't support it.\n */\n\nexport default function MaskedView(_ref) {\n let {\n children\n } = _ref;\n return children;\n}\n//# sourceMappingURL=MaskedView.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport { useTheme } from '@react-navigation/native';\nimport * as React from 'react';\nimport { Animated, Easing, Platform, Pressable } from 'react-native';\nconst AnimatedPressable = Animated.createAnimatedComponent(Pressable);\nconst ANDROID_VERSION_LOLLIPOP = 21;\nconst ANDROID_SUPPORTS_RIPPLE = Platform.OS === 'android' && Platform.Version >= ANDROID_VERSION_LOLLIPOP;\n\n/**\n * PlatformPressable provides an abstraction on top of Pressable to handle platform differences.\n */\nexport default function PlatformPressable(_ref) {\n let {\n onPressIn,\n onPressOut,\n android_ripple,\n pressColor,\n pressOpacity = 0.3,\n style,\n ...rest\n } = _ref;\n const {\n dark\n } = useTheme();\n const [opacity] = React.useState(() => new Animated.Value(1));\n const animateTo = (toValue, duration) => {\n if (ANDROID_SUPPORTS_RIPPLE) {\n return;\n }\n Animated.timing(opacity, {\n toValue,\n duration,\n easing: Easing.inOut(Easing.quad),\n useNativeDriver: true\n }).start();\n };\n const handlePressIn = e => {\n animateTo(pressOpacity, 0);\n onPressIn === null || onPressIn === void 0 ? void 0 : onPressIn(e);\n };\n const handlePressOut = e => {\n animateTo(1, 200);\n onPressOut === null || onPressOut === void 0 ? void 0 : onPressOut(e);\n };\n return /*#__PURE__*/React.createElement(AnimatedPressable, _extends({\n onPressIn: handlePressIn,\n onPressOut: handlePressOut,\n android_ripple: ANDROID_SUPPORTS_RIPPLE ? {\n color: pressColor !== undefined ? pressColor : dark ? 'rgba(255, 255, 255, .32)' : 'rgba(0, 0, 0, .32)',\n ...android_ripple\n } : undefined,\n style: [{\n opacity: !ANDROID_SUPPORTS_RIPPLE ? opacity : 1\n }, style]\n }, rest));\n}\n//# sourceMappingURL=PlatformPressable.js.map","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use strict';\n\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"children\", \"delayLongPress\", \"delayPressIn\", \"delayPressOut\", \"disabled\", \"onBlur\", \"onContextMenu\", \"onFocus\", \"onHoverIn\", \"onHoverOut\", \"onKeyDown\", \"onLongPress\", \"onPress\", \"onPressMove\", \"onPressIn\", \"onPressOut\", \"style\", \"tabIndex\", \"testOnly_hovered\", \"testOnly_pressed\"];\nimport * as React from 'react';\nimport { forwardRef, memo, useMemo, useState, useRef } from 'react';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport useHover from '../../modules/useHover';\nimport usePressEvents from '../../modules/usePressEvents';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\n/**\n * Component used to build display components that should respond to whether the\n * component is currently pressed or not.\n */\nfunction Pressable(props, forwardedRef) {\n var children = props.children,\n delayLongPress = props.delayLongPress,\n delayPressIn = props.delayPressIn,\n delayPressOut = props.delayPressOut,\n disabled = props.disabled,\n onBlur = props.onBlur,\n onContextMenu = props.onContextMenu,\n onFocus = props.onFocus,\n onHoverIn = props.onHoverIn,\n onHoverOut = props.onHoverOut,\n onKeyDown = props.onKeyDown,\n onLongPress = props.onLongPress,\n onPress = props.onPress,\n onPressMove = props.onPressMove,\n onPressIn = props.onPressIn,\n onPressOut = props.onPressOut,\n style = props.style,\n tabIndex = props.tabIndex,\n testOnly_hovered = props.testOnly_hovered,\n testOnly_pressed = props.testOnly_pressed,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n var _useForceableState = useForceableState(testOnly_hovered === true),\n hovered = _useForceableState[0],\n setHovered = _useForceableState[1];\n var _useForceableState2 = useForceableState(false),\n focused = _useForceableState2[0],\n setFocused = _useForceableState2[1];\n var _useForceableState3 = useForceableState(testOnly_pressed === true),\n pressed = _useForceableState3[0],\n setPressed = _useForceableState3[1];\n var hostRef = useRef(null);\n var setRef = useMergeRefs(forwardedRef, hostRef);\n var pressConfig = useMemo(() => ({\n delayLongPress,\n delayPressStart: delayPressIn,\n delayPressEnd: delayPressOut,\n disabled,\n onLongPress,\n onPress,\n onPressChange: setPressed,\n onPressStart: onPressIn,\n onPressMove,\n onPressEnd: onPressOut\n }), [delayLongPress, delayPressIn, delayPressOut, disabled, onLongPress, onPress, onPressIn, onPressMove, onPressOut, setPressed]);\n var pressEventHandlers = usePressEvents(hostRef, pressConfig);\n var onContextMenuPress = pressEventHandlers.onContextMenu,\n onKeyDownPress = pressEventHandlers.onKeyDown;\n useHover(hostRef, {\n contain: true,\n disabled,\n onHoverChange: setHovered,\n onHoverStart: onHoverIn,\n onHoverEnd: onHoverOut\n });\n var interactionState = {\n hovered,\n focused,\n pressed\n };\n var blurHandler = React.useCallback(e => {\n if (e.nativeEvent.target === hostRef.current) {\n setFocused(false);\n if (onBlur != null) {\n onBlur(e);\n }\n }\n }, [hostRef, setFocused, onBlur]);\n var focusHandler = React.useCallback(e => {\n if (e.nativeEvent.target === hostRef.current) {\n setFocused(true);\n if (onFocus != null) {\n onFocus(e);\n }\n }\n }, [hostRef, setFocused, onFocus]);\n var contextMenuHandler = React.useCallback(e => {\n if (onContextMenuPress != null) {\n onContextMenuPress(e);\n }\n if (onContextMenu != null) {\n onContextMenu(e);\n }\n }, [onContextMenu, onContextMenuPress]);\n var keyDownHandler = React.useCallback(e => {\n if (onKeyDownPress != null) {\n onKeyDownPress(e);\n }\n if (onKeyDown != null) {\n onKeyDown(e);\n }\n }, [onKeyDown, onKeyDownPress]);\n var _tabIndex;\n if (tabIndex !== undefined) {\n _tabIndex = tabIndex;\n } else {\n _tabIndex = disabled ? -1 : 0;\n }\n return /*#__PURE__*/React.createElement(View, _extends({}, rest, pressEventHandlers, {\n \"aria-disabled\": disabled,\n onBlur: blurHandler,\n onContextMenu: contextMenuHandler,\n onFocus: focusHandler,\n onKeyDown: keyDownHandler,\n ref: setRef,\n style: [disabled ? styles.disabled : styles.active, typeof style === 'function' ? style(interactionState) : style],\n tabIndex: _tabIndex\n }), typeof children === 'function' ? children(interactionState) : children);\n}\nfunction useForceableState(forced) {\n var _useState = useState(false),\n bool = _useState[0],\n setBool = _useState[1];\n return [bool || forced, setBool];\n}\nvar styles = StyleSheet.create({\n active: {\n cursor: 'pointer',\n touchAction: 'manipulation'\n },\n disabled: {\n pointerEvents: 'box-none'\n }\n});\nvar MemoedPressable = /*#__PURE__*/memo( /*#__PURE__*/forwardRef(Pressable));\nMemoedPressable.displayName = 'Pressable';\nexport default MemoedPressable;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { getModality } from '../modality';\nimport useEvent from '../useEvent';\nimport useLayoutEffect from '../useLayoutEffect';\n\n/**\n * Types\n */\n\n/**\n * Implementation\n */\n\nvar emptyObject = {};\nvar opts = {\n passive: true\n};\nvar lockEventType = 'react-gui:hover:lock';\nvar unlockEventType = 'react-gui:hover:unlock';\nvar supportsPointerEvent = () => !!(typeof window !== 'undefined' && window.PointerEvent != null);\nfunction dispatchCustomEvent(target, type, payload) {\n var event = document.createEvent('CustomEvent');\n var _ref = payload || emptyObject,\n _ref$bubbles = _ref.bubbles,\n bubbles = _ref$bubbles === void 0 ? true : _ref$bubbles,\n _ref$cancelable = _ref.cancelable,\n cancelable = _ref$cancelable === void 0 ? true : _ref$cancelable,\n detail = _ref.detail;\n event.initCustomEvent(type, bubbles, cancelable, detail);\n target.dispatchEvent(event);\n}\n\n// This accounts for the non-PointerEvent fallback events.\nfunction getPointerType(event) {\n var pointerType = event.pointerType;\n return pointerType != null ? pointerType : getModality();\n}\nexport default function useHover(targetRef, config) {\n var contain = config.contain,\n disabled = config.disabled,\n onHoverStart = config.onHoverStart,\n onHoverChange = config.onHoverChange,\n onHoverUpdate = config.onHoverUpdate,\n onHoverEnd = config.onHoverEnd;\n var canUsePE = supportsPointerEvent();\n var addMoveListener = useEvent(canUsePE ? 'pointermove' : 'mousemove', opts);\n var addEnterListener = useEvent(canUsePE ? 'pointerenter' : 'mouseenter', opts);\n var addLeaveListener = useEvent(canUsePE ? 'pointerleave' : 'mouseleave', opts);\n // These custom events are used to implement the \"contain\" prop.\n var addLockListener = useEvent(lockEventType, opts);\n var addUnlockListener = useEvent(unlockEventType, opts);\n useLayoutEffect(() => {\n var target = targetRef.current;\n if (target !== null) {\n /**\n * End the hover gesture\n */\n var hoverEnd = function hoverEnd(e) {\n if (onHoverEnd != null) {\n onHoverEnd(e);\n }\n if (onHoverChange != null) {\n onHoverChange(false);\n }\n // Remove the listeners once finished.\n addMoveListener(target, null);\n addLeaveListener(target, null);\n };\n\n /**\n * Leave element\n */\n var leaveListener = function leaveListener(e) {\n var target = targetRef.current;\n if (target != null && getPointerType(e) !== 'touch') {\n if (contain) {\n dispatchCustomEvent(target, unlockEventType);\n }\n hoverEnd(e);\n }\n };\n\n /**\n * Move within element\n */\n var moveListener = function moveListener(e) {\n if (getPointerType(e) !== 'touch') {\n if (onHoverUpdate != null) {\n // Not all browsers have these properties\n if (e.x == null) {\n e.x = e.clientX;\n }\n if (e.y == null) {\n e.y = e.clientY;\n }\n onHoverUpdate(e);\n }\n }\n };\n\n /**\n * Start the hover gesture\n */\n var hoverStart = function hoverStart(e) {\n if (onHoverStart != null) {\n onHoverStart(e);\n }\n if (onHoverChange != null) {\n onHoverChange(true);\n }\n // Set the listeners needed for the rest of the hover gesture.\n if (onHoverUpdate != null) {\n addMoveListener(target, !disabled ? moveListener : null);\n }\n addLeaveListener(target, !disabled ? leaveListener : null);\n };\n\n /**\n * Enter element\n */\n var enterListener = function enterListener(e) {\n var target = targetRef.current;\n if (target != null && getPointerType(e) !== 'touch') {\n if (contain) {\n dispatchCustomEvent(target, lockEventType);\n }\n hoverStart(e);\n var lockListener = function lockListener(lockEvent) {\n if (lockEvent.target !== target) {\n hoverEnd(e);\n }\n };\n var unlockListener = function unlockListener(lockEvent) {\n if (lockEvent.target !== target) {\n hoverStart(e);\n }\n };\n addLockListener(target, !disabled ? lockListener : null);\n addUnlockListener(target, !disabled ? unlockListener : null);\n }\n };\n addEnterListener(target, !disabled ? enterListener : null);\n }\n }, [addEnterListener, addMoveListener, addLeaveListener, addLockListener, addUnlockListener, contain, disabled, onHoverStart, onHoverChange, onHoverUpdate, onHoverEnd, targetRef]);\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { addEventListener } from '../addEventListener';\nimport canUseDOM from '../canUseDom';\nvar supportsPointerEvent = () => !!(typeof window !== 'undefined' && window.PointerEvent != null);\nvar activeModality = 'keyboard';\nvar modality = 'keyboard';\nvar previousModality;\nvar previousActiveModality;\nvar isEmulatingMouseEvents = false;\nvar listeners = new Set();\nvar KEYBOARD = 'keyboard';\nvar MOUSE = 'mouse';\nvar TOUCH = 'touch';\nvar BLUR = 'blur';\nvar CONTEXTMENU = 'contextmenu';\nvar FOCUS = 'focus';\nvar KEYDOWN = 'keydown';\nvar MOUSEDOWN = 'mousedown';\nvar MOUSEMOVE = 'mousemove';\nvar MOUSEUP = 'mouseup';\nvar POINTERDOWN = 'pointerdown';\nvar POINTERMOVE = 'pointermove';\nvar SCROLL = 'scroll';\nvar SELECTIONCHANGE = 'selectionchange';\nvar TOUCHCANCEL = 'touchcancel';\nvar TOUCHMOVE = 'touchmove';\nvar TOUCHSTART = 'touchstart';\nvar VISIBILITYCHANGE = 'visibilitychange';\nvar bubbleOptions = {\n passive: true\n};\nvar captureOptions = {\n capture: true,\n passive: true\n};\nfunction restoreModality() {\n if (previousModality != null || previousActiveModality != null) {\n if (previousModality != null) {\n modality = previousModality;\n previousModality = null;\n }\n if (previousActiveModality != null) {\n activeModality = previousActiveModality;\n previousActiveModality = null;\n }\n callListeners();\n }\n}\nfunction onBlurWindow() {\n previousModality = modality;\n previousActiveModality = activeModality;\n activeModality = KEYBOARD;\n modality = KEYBOARD;\n callListeners();\n // for fallback events\n isEmulatingMouseEvents = false;\n}\nfunction onFocusWindow() {\n restoreModality();\n}\nfunction onKeyDown(event) {\n if (event.metaKey || event.altKey || event.ctrlKey) {\n return;\n }\n if (modality !== KEYBOARD) {\n modality = KEYBOARD;\n activeModality = KEYBOARD;\n callListeners();\n }\n}\nfunction onVisibilityChange() {\n if (document.visibilityState !== 'hidden') {\n restoreModality();\n }\n}\nfunction onPointerish(event) {\n var eventType = event.type;\n if (supportsPointerEvent()) {\n if (eventType === POINTERDOWN) {\n if (activeModality !== event.pointerType) {\n modality = event.pointerType;\n activeModality = event.pointerType;\n callListeners();\n }\n return;\n }\n if (eventType === POINTERMOVE) {\n if (modality !== event.pointerType) {\n modality = event.pointerType;\n callListeners();\n }\n return;\n }\n }\n // Fallback for non-PointerEvent environment\n else {\n if (!isEmulatingMouseEvents) {\n if (eventType === MOUSEDOWN) {\n if (activeModality !== MOUSE) {\n modality = MOUSE;\n activeModality = MOUSE;\n callListeners();\n }\n }\n if (eventType === MOUSEMOVE) {\n if (modality !== MOUSE) {\n modality = MOUSE;\n callListeners();\n }\n }\n }\n\n // Flag when browser may produce emulated events\n if (eventType === TOUCHSTART) {\n isEmulatingMouseEvents = true;\n if (event.touches && event.touches.length > 1) {\n isEmulatingMouseEvents = false;\n }\n if (activeModality !== TOUCH) {\n modality = TOUCH;\n activeModality = TOUCH;\n callListeners();\n }\n return;\n }\n\n // Remove flag after emulated events are finished or cancelled, and if an\n // event occurs that cuts short a touch event sequence.\n if (eventType === CONTEXTMENU || eventType === MOUSEUP || eventType === SELECTIONCHANGE || eventType === SCROLL || eventType === TOUCHCANCEL || eventType === TOUCHMOVE) {\n isEmulatingMouseEvents = false;\n }\n }\n}\nif (canUseDOM) {\n // Window events\n addEventListener(window, BLUR, onBlurWindow, bubbleOptions);\n addEventListener(window, FOCUS, onFocusWindow, bubbleOptions);\n // Must be capture phase because 'stopPropagation' might prevent these\n // events bubbling to the document.\n addEventListener(document, KEYDOWN, onKeyDown, captureOptions);\n addEventListener(document, VISIBILITYCHANGE, onVisibilityChange, captureOptions);\n addEventListener(document, POINTERDOWN, onPointerish, captureOptions);\n addEventListener(document, POINTERMOVE, onPointerish, captureOptions);\n // Fallback events\n addEventListener(document, CONTEXTMENU, onPointerish, captureOptions);\n addEventListener(document, MOUSEDOWN, onPointerish, captureOptions);\n addEventListener(document, MOUSEMOVE, onPointerish, captureOptions);\n addEventListener(document, MOUSEUP, onPointerish, captureOptions);\n addEventListener(document, TOUCHCANCEL, onPointerish, captureOptions);\n addEventListener(document, TOUCHMOVE, onPointerish, captureOptions);\n addEventListener(document, TOUCHSTART, onPointerish, captureOptions);\n addEventListener(document, SELECTIONCHANGE, onPointerish, captureOptions);\n addEventListener(document, SCROLL, onPointerish, captureOptions);\n}\nfunction callListeners() {\n var value = {\n activeModality,\n modality\n };\n listeners.forEach(listener => {\n listener(value);\n });\n}\nexport function getActiveModality() {\n return activeModality;\n}\nexport function getModality() {\n return modality;\n}\nexport function addModalityListener(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n}\nexport function testOnly_resetActiveModality() {\n isEmulatingMouseEvents = false;\n activeModality = KEYBOARD;\n modality = KEYBOARD;\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use strict';\n\nimport canUseDOM from '../canUseDom';\nvar emptyFunction = () => {};\nfunction supportsPassiveEvents() {\n var supported = false;\n // Check if browser supports event with passive listeners\n // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n if (canUseDOM) {\n try {\n var options = {};\n Object.defineProperty(options, 'passive', {\n get() {\n supported = true;\n return false;\n }\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {}\n }\n return supported;\n}\nvar canUsePassiveEvents = supportsPassiveEvents();\nfunction getOptions(options) {\n if (options == null) {\n return false;\n }\n return canUsePassiveEvents ? options : Boolean(options.capture);\n}\n\n/**\n * Shim generic API compatibility with ReactDOM's synthetic events, without needing the\n * large amount of code ReactDOM uses to do this. Ideally we wouldn't use a synthetic\n * event wrapper at all.\n */\nfunction isPropagationStopped() {\n return this.cancelBubble;\n}\nfunction isDefaultPrevented() {\n return this.defaultPrevented;\n}\nfunction normalizeEvent(event) {\n event.nativeEvent = event;\n event.persist = emptyFunction;\n event.isDefaultPrevented = isDefaultPrevented;\n event.isPropagationStopped = isPropagationStopped;\n return event;\n}\n\n/**\n *\n */\nexport function addEventListener(target, type, listener, options) {\n var opts = getOptions(options);\n var compatListener = e => listener(normalizeEvent(e));\n target.addEventListener(type, compatListener, opts);\n return function removeEventListener() {\n if (target != null) {\n target.removeEventListener(type, compatListener, opts);\n }\n };\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { addEventListener } from '../addEventListener';\nimport useLayoutEffect from '../useLayoutEffect';\nimport useStable from '../useStable';\n/**\n * This can be used with any event type include custom events.\n *\n * const click = useEvent('click', options);\n * useEffect(() => {\n * click.setListener(target, onClick);\n * return () => click.clear();\n * }).\n */\nexport default function useEvent(eventType, options) {\n var targetListeners = useStable(() => new Map());\n var addListener = useStable(() => {\n return (target, callback) => {\n var removeTargetListener = targetListeners.get(target);\n if (removeTargetListener != null) {\n removeTargetListener();\n }\n if (callback == null) {\n targetListeners.delete(target);\n callback = () => {};\n }\n var removeEventListener = addEventListener(target, eventType, callback, options);\n targetListeners.set(target, removeEventListener);\n return removeEventListener;\n };\n });\n useLayoutEffect(() => {\n return () => {\n targetListeners.forEach(removeListener => {\n removeListener();\n });\n targetListeners.clear();\n };\n }, [targetListeners]);\n return addListener;\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport PressResponder from './PressResponder';\nimport { useDebugValue, useEffect, useRef } from 'react';\nexport default function usePressEvents(hostRef, config) {\n var pressResponderRef = useRef(null);\n if (pressResponderRef.current == null) {\n pressResponderRef.current = new PressResponder(config);\n }\n var pressResponder = pressResponderRef.current;\n\n // Re-configure to use the current node and configuration.\n useEffect(() => {\n pressResponder.configure(config);\n }, [config, pressResponder]);\n\n // Reset the `pressResponder` when cleanup needs to occur. This is\n // a separate effect because we do not want to rest the responder when `config` changes.\n useEffect(() => {\n return () => {\n pressResponder.reset();\n };\n }, [pressResponder]);\n useDebugValue(config);\n return pressResponder.getEventHandlers();\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nvar DELAY = 'DELAY';\nvar ERROR = 'ERROR';\nvar LONG_PRESS_DETECTED = 'LONG_PRESS_DETECTED';\nvar NOT_RESPONDER = 'NOT_RESPONDER';\nvar RESPONDER_ACTIVE_LONG_PRESS_START = 'RESPONDER_ACTIVE_LONG_PRESS_START';\nvar RESPONDER_ACTIVE_PRESS_START = 'RESPONDER_ACTIVE_PRESS_START';\nvar RESPONDER_INACTIVE_PRESS_START = 'RESPONDER_INACTIVE_PRESS_START';\nvar RESPONDER_GRANT = 'RESPONDER_GRANT';\nvar RESPONDER_RELEASE = 'RESPONDER_RELEASE';\nvar RESPONDER_TERMINATED = 'RESPONDER_TERMINATED';\nvar Transitions = Object.freeze({\n NOT_RESPONDER: {\n DELAY: ERROR,\n RESPONDER_GRANT: RESPONDER_INACTIVE_PRESS_START,\n RESPONDER_RELEASE: ERROR,\n RESPONDER_TERMINATED: ERROR,\n LONG_PRESS_DETECTED: ERROR\n },\n RESPONDER_INACTIVE_PRESS_START: {\n DELAY: RESPONDER_ACTIVE_PRESS_START,\n RESPONDER_GRANT: ERROR,\n RESPONDER_RELEASE: NOT_RESPONDER,\n RESPONDER_TERMINATED: NOT_RESPONDER,\n LONG_PRESS_DETECTED: ERROR\n },\n RESPONDER_ACTIVE_PRESS_START: {\n DELAY: ERROR,\n RESPONDER_GRANT: ERROR,\n RESPONDER_RELEASE: NOT_RESPONDER,\n RESPONDER_TERMINATED: NOT_RESPONDER,\n LONG_PRESS_DETECTED: RESPONDER_ACTIVE_LONG_PRESS_START\n },\n RESPONDER_ACTIVE_LONG_PRESS_START: {\n DELAY: ERROR,\n RESPONDER_GRANT: ERROR,\n RESPONDER_RELEASE: NOT_RESPONDER,\n RESPONDER_TERMINATED: NOT_RESPONDER,\n LONG_PRESS_DETECTED: RESPONDER_ACTIVE_LONG_PRESS_START\n },\n ERROR: {\n DELAY: NOT_RESPONDER,\n RESPONDER_GRANT: RESPONDER_INACTIVE_PRESS_START,\n RESPONDER_RELEASE: NOT_RESPONDER,\n RESPONDER_TERMINATED: NOT_RESPONDER,\n LONG_PRESS_DETECTED: NOT_RESPONDER\n }\n});\nvar getElementRole = element => element.getAttribute('role');\nvar getElementType = element => element.tagName.toLowerCase();\nvar isActiveSignal = signal => signal === RESPONDER_ACTIVE_PRESS_START || signal === RESPONDER_ACTIVE_LONG_PRESS_START;\nvar isButtonRole = element => getElementRole(element) === 'button';\nvar isPressStartSignal = signal => signal === RESPONDER_INACTIVE_PRESS_START || signal === RESPONDER_ACTIVE_PRESS_START || signal === RESPONDER_ACTIVE_LONG_PRESS_START;\nvar isTerminalSignal = signal => signal === RESPONDER_TERMINATED || signal === RESPONDER_RELEASE;\nvar isValidKeyPress = event => {\n var key = event.key,\n target = event.target;\n var isSpacebar = key === ' ' || key === 'Spacebar';\n var isButtonish = getElementType(target) === 'button' || isButtonRole(target);\n return key === 'Enter' || isSpacebar && isButtonish;\n};\nvar DEFAULT_LONG_PRESS_DELAY_MS = 450; // 500 - 50\nvar DEFAULT_PRESS_DELAY_MS = 50;\n\n/**\n * =========================== PressResponder Tutorial ===========================\n *\n * The `PressResponder` class helps you create press interactions by analyzing the\n * geometry of elements and observing when another responder (e.g. ScrollView)\n * has stolen the touch lock. It offers hooks for your component to provide\n * interaction feedback to the user:\n *\n * - When a press has activated (e.g. highlight an element)\n * - When a press has deactivated (e.g. un-highlight an element)\n * - When a press sould trigger an action, meaning it activated and deactivated\n * while within the geometry of the element without the lock being stolen.\n *\n * A high quality interaction isn't as simple as you might think. There should\n * be a slight delay before activation. Moving your finger beyond an element's\n * bounds should trigger deactivation, but moving the same finger back within an\n * element's bounds should trigger reactivation.\n *\n * In order to use `PressResponder`, do the following:\n *\n * const pressResponder = new PressResponder(config);\n *\n * 2. Choose the rendered component who should collect the press events. On that\n * element, spread `pressability.getEventHandlers()` into its props.\n *\n * return (\n * \n * );\n *\n * 3. Reset `PressResponder` when your component unmounts.\n *\n * componentWillUnmount() {\n * this.state.pressResponder.reset();\n * }\n *\n * ==================== Implementation Details ====================\n *\n * `PressResponder` only assumes that there exists a `HitRect` node. The `PressRect`\n * is an abstract box that is extended beyond the `HitRect`.\n *\n * # Geometry\n *\n * ┌────────────────────────┐\n * │ ┌──────────────────┐ │ - Presses start anywhere within `HitRect`.\n * │ │ ┌────────────┐ │ │\n * │ │ │ VisualRect │ │ │\n * │ │ └────────────┘ │ │ - When pressed down for sufficient amount of time\n * │ │ HitRect │ │ before letting up, `VisualRect` activates.\n * │ └──────────────────┘ │\n * │ Out Region o │\n * └────────────────────│───┘\n * └────── When the press is released outside the `HitRect`,\n * the responder is NOT eligible for a \"press\".\n *\n * # State Machine\n *\n * ┌───────────────┐ ◀──── RESPONDER_RELEASE\n * │ NOT_RESPONDER │\n * └───┬───────────┘ ◀──── RESPONDER_TERMINATED\n * │\n * │ RESPONDER_GRANT (HitRect)\n * │\n * ▼\n * ┌─────────────────────┐ ┌───────────────────┐ ┌───────────────────┐\n * │ RESPONDER_INACTIVE_ │ DELAY │ RESPONDER_ACTIVE_ │ T + DELAY │ RESPONDER_ACTIVE_ │\n * │ PRESS_START ├────────▶ │ PRESS_START ├────────────▶ │ LONG_PRESS_START │\n * └─────────────────────┘ └───────────────────┘ └───────────────────┘\n *\n * T + DELAY => LONG_PRESS_DELAY + DELAY\n *\n * Not drawn are the side effects of each transition. The most important side\n * effect is the invocation of `onLongPress`. Only when the browser produces a\n * `click` event is `onPress` invoked.\n */\nexport default class PressResponder {\n constructor(config) {\n this._eventHandlers = null;\n this._isPointerTouch = false;\n this._longPressDelayTimeout = null;\n this._longPressDispatched = false;\n this._pressDelayTimeout = null;\n this._pressOutDelayTimeout = null;\n this._touchState = NOT_RESPONDER;\n this.configure(config);\n }\n configure(config) {\n this._config = config;\n }\n\n /**\n * Resets any pending timers. This should be called on unmount.\n */\n reset() {\n this._cancelLongPressDelayTimeout();\n this._cancelPressDelayTimeout();\n this._cancelPressOutDelayTimeout();\n }\n\n /**\n * Returns a set of props to spread into the interactive element.\n */\n getEventHandlers() {\n if (this._eventHandlers == null) {\n this._eventHandlers = this._createEventHandlers();\n }\n return this._eventHandlers;\n }\n _createEventHandlers() {\n var start = (event, shouldDelay) => {\n event.persist();\n this._cancelPressOutDelayTimeout();\n this._longPressDispatched = false;\n this._selectionTerminated = false;\n this._touchState = NOT_RESPONDER;\n this._isPointerTouch = event.nativeEvent.type === 'touchstart';\n this._receiveSignal(RESPONDER_GRANT, event);\n var delayPressStart = normalizeDelay(this._config.delayPressStart, 0, DEFAULT_PRESS_DELAY_MS);\n if (shouldDelay !== false && delayPressStart > 0) {\n this._pressDelayTimeout = setTimeout(() => {\n this._receiveSignal(DELAY, event);\n }, delayPressStart);\n } else {\n this._receiveSignal(DELAY, event);\n }\n var delayLongPress = normalizeDelay(this._config.delayLongPress, 10, DEFAULT_LONG_PRESS_DELAY_MS);\n this._longPressDelayTimeout = setTimeout(() => {\n this._handleLongPress(event);\n }, delayLongPress + delayPressStart);\n };\n var end = event => {\n this._receiveSignal(RESPONDER_RELEASE, event);\n };\n var keyupHandler = event => {\n var onPress = this._config.onPress;\n var target = event.target;\n if (this._touchState !== NOT_RESPONDER && isValidKeyPress(event)) {\n end(event);\n document.removeEventListener('keyup', keyupHandler);\n var role = target.getAttribute('role');\n var elementType = getElementType(target);\n var isNativeInteractiveElement = role === 'link' || elementType === 'a' || elementType === 'button' || elementType === 'input' || elementType === 'select' || elementType === 'textarea';\n if (onPress != null && !isNativeInteractiveElement) {\n onPress(event);\n }\n }\n };\n return {\n onStartShouldSetResponder: event => {\n var disabled = this._config.disabled;\n if (disabled && isButtonRole(event.currentTarget)) {\n event.stopPropagation();\n }\n if (disabled == null) {\n return true;\n }\n return !disabled;\n },\n onKeyDown: event => {\n var disabled = this._config.disabled;\n var key = event.key,\n target = event.target;\n if (!disabled && isValidKeyPress(event)) {\n if (this._touchState === NOT_RESPONDER) {\n start(event, false);\n // Listen to 'keyup' on document to account for situations where\n // focus is moved to another element during 'keydown'.\n document.addEventListener('keyup', keyupHandler);\n }\n var isSpacebarKey = key === ' ' || key === 'Spacebar';\n var role = getElementRole(target);\n var isButtonLikeRole = role === 'button' || role === 'menuitem';\n if (isSpacebarKey && isButtonLikeRole && getElementType(target) !== 'button') {\n // Prevent spacebar scrolling the window if using non-native button\n event.preventDefault();\n }\n event.stopPropagation();\n }\n },\n onResponderGrant: event => start(event),\n onResponderMove: event => {\n if (this._config.onPressMove != null) {\n this._config.onPressMove(event);\n }\n var touch = getTouchFromResponderEvent(event);\n if (this._touchActivatePosition != null) {\n var deltaX = this._touchActivatePosition.pageX - touch.pageX;\n var deltaY = this._touchActivatePosition.pageY - touch.pageY;\n if (Math.hypot(deltaX, deltaY) > 10) {\n this._cancelLongPressDelayTimeout();\n }\n }\n },\n onResponderRelease: event => end(event),\n onResponderTerminate: event => {\n if (event.nativeEvent.type === 'selectionchange') {\n this._selectionTerminated = true;\n }\n this._receiveSignal(RESPONDER_TERMINATED, event);\n },\n onResponderTerminationRequest: event => {\n var _this$_config = this._config,\n cancelable = _this$_config.cancelable,\n disabled = _this$_config.disabled,\n onLongPress = _this$_config.onLongPress;\n // If `onLongPress` is provided, don't terminate on `contextmenu` as default\n // behavior will be prevented for non-mouse pointers.\n if (!disabled && onLongPress != null && this._isPointerTouch && event.nativeEvent.type === 'contextmenu') {\n return false;\n }\n if (cancelable == null) {\n return true;\n }\n return cancelable;\n },\n // NOTE: this diverges from react-native in 3 significant ways:\n // * The `onPress` callback is not connected to the responder system (the native\n // `click` event must be used but is dispatched in many scenarios where no pointers\n // are on the screen.) Therefore, it's possible for `onPress` to be called without\n // `onPress{Start,End}` being called first.\n // * The `onPress` callback is only be called on the first ancestor of the native\n // `click` target that is using the PressResponder.\n // * The event's `nativeEvent` is a `MouseEvent` not a `TouchEvent`.\n onClick: event => {\n var _this$_config2 = this._config,\n disabled = _this$_config2.disabled,\n onPress = _this$_config2.onPress;\n if (!disabled) {\n // If long press dispatched, cancel default click behavior.\n // If the responder terminated because text was selected during the gesture,\n // cancel the default click behavior.\n event.stopPropagation();\n if (this._longPressDispatched || this._selectionTerminated) {\n event.preventDefault();\n } else if (onPress != null && event.altKey === false) {\n onPress(event);\n }\n } else {\n if (isButtonRole(event.currentTarget)) {\n event.stopPropagation();\n }\n }\n },\n // If `onLongPress` is provided and a touch pointer is being used, prevent the\n // default context menu from opening.\n onContextMenu: event => {\n var _this$_config3 = this._config,\n disabled = _this$_config3.disabled,\n onLongPress = _this$_config3.onLongPress;\n if (!disabled) {\n if (onLongPress != null && this._isPointerTouch && !event.defaultPrevented) {\n event.preventDefault();\n event.stopPropagation();\n }\n } else {\n if (isButtonRole(event.currentTarget)) {\n event.stopPropagation();\n }\n }\n }\n };\n }\n\n /**\n * Receives a state machine signal, performs side effects of the transition\n * and stores the new state. Validates the transition as well.\n */\n _receiveSignal(signal, event) {\n var prevState = this._touchState;\n var nextState = null;\n if (Transitions[prevState] != null) {\n nextState = Transitions[prevState][signal];\n }\n if (this._touchState === NOT_RESPONDER && signal === RESPONDER_RELEASE) {\n return;\n }\n if (nextState == null || nextState === ERROR) {\n console.error(\"PressResponder: Invalid signal \" + signal + \" for state \" + prevState + \" on responder\");\n } else if (prevState !== nextState) {\n this._performTransitionSideEffects(prevState, nextState, signal, event);\n this._touchState = nextState;\n }\n }\n\n /**\n * Performs a transition between touchable states and identify any activations\n * or deactivations (and callback invocations).\n */\n _performTransitionSideEffects(prevState, nextState, signal, event) {\n if (isTerminalSignal(signal)) {\n // Pressable suppression of contextmenu on windows.\n // On Windows, the contextmenu is displayed after pointerup.\n // https://github.com/necolas/react-native-web/issues/2296\n setTimeout(() => {\n this._isPointerTouch = false;\n }, 0);\n this._touchActivatePosition = null;\n this._cancelLongPressDelayTimeout();\n }\n if (isPressStartSignal(prevState) && signal === LONG_PRESS_DETECTED) {\n var onLongPress = this._config.onLongPress;\n // Long press is not supported for keyboards because 'click' can be dispatched\n // immediately (and multiple times) after 'keydown'.\n if (onLongPress != null && event.nativeEvent.key == null) {\n onLongPress(event);\n this._longPressDispatched = true;\n }\n }\n var isPrevActive = isActiveSignal(prevState);\n var isNextActive = isActiveSignal(nextState);\n if (!isPrevActive && isNextActive) {\n this._activate(event);\n } else if (isPrevActive && !isNextActive) {\n this._deactivate(event);\n }\n if (isPressStartSignal(prevState) && signal === RESPONDER_RELEASE) {\n var _this$_config4 = this._config,\n _onLongPress = _this$_config4.onLongPress,\n onPress = _this$_config4.onPress;\n if (onPress != null) {\n var isPressCanceledByLongPress = _onLongPress != null && prevState === RESPONDER_ACTIVE_LONG_PRESS_START;\n if (!isPressCanceledByLongPress) {\n // If we never activated (due to delays), activate and deactivate now.\n if (!isNextActive && !isPrevActive) {\n this._activate(event);\n this._deactivate(event);\n }\n }\n }\n }\n this._cancelPressDelayTimeout();\n }\n _activate(event) {\n var _this$_config5 = this._config,\n onPressChange = _this$_config5.onPressChange,\n onPressStart = _this$_config5.onPressStart;\n var touch = getTouchFromResponderEvent(event);\n this._touchActivatePosition = {\n pageX: touch.pageX,\n pageY: touch.pageY\n };\n if (onPressStart != null) {\n onPressStart(event);\n }\n if (onPressChange != null) {\n onPressChange(true);\n }\n }\n _deactivate(event) {\n var _this$_config6 = this._config,\n onPressChange = _this$_config6.onPressChange,\n onPressEnd = _this$_config6.onPressEnd;\n function end() {\n if (onPressEnd != null) {\n onPressEnd(event);\n }\n if (onPressChange != null) {\n onPressChange(false);\n }\n }\n var delayPressEnd = normalizeDelay(this._config.delayPressEnd);\n if (delayPressEnd > 0) {\n this._pressOutDelayTimeout = setTimeout(() => {\n end();\n }, delayPressEnd);\n } else {\n end();\n }\n }\n _handleLongPress(event) {\n if (this._touchState === RESPONDER_ACTIVE_PRESS_START || this._touchState === RESPONDER_ACTIVE_LONG_PRESS_START) {\n this._receiveSignal(LONG_PRESS_DETECTED, event);\n }\n }\n _cancelLongPressDelayTimeout() {\n if (this._longPressDelayTimeout != null) {\n clearTimeout(this._longPressDelayTimeout);\n this._longPressDelayTimeout = null;\n }\n }\n _cancelPressDelayTimeout() {\n if (this._pressDelayTimeout != null) {\n clearTimeout(this._pressDelayTimeout);\n this._pressDelayTimeout = null;\n }\n }\n _cancelPressOutDelayTimeout() {\n if (this._pressOutDelayTimeout != null) {\n clearTimeout(this._pressOutDelayTimeout);\n this._pressOutDelayTimeout = null;\n }\n }\n}\nfunction normalizeDelay(delay, min, fallback) {\n if (min === void 0) {\n min = 0;\n }\n if (fallback === void 0) {\n fallback = 0;\n }\n return Math.max(min, delay !== null && delay !== void 0 ? delay : fallback);\n}\nfunction getTouchFromResponderEvent(event) {\n var _event$nativeEvent = event.nativeEvent,\n changedTouches = _event$nativeEvent.changedTouches,\n touches = _event$nativeEvent.touches;\n if (touches != null && touches.length > 0) {\n return touches[0];\n }\n if (changedTouches != null && changedTouches.length > 0) {\n return changedTouches[0];\n }\n return event.nativeEvent;\n}","","","import getNamedContext from '../getNamedContext';\nconst HeaderBackContext = getNamedContext('HeaderBackContext', undefined);\nexport default HeaderBackContext;\n//# sourceMappingURL=HeaderBackContext.js.map","import getNamedContext from '../getNamedContext';\nconst HeaderHeightContext = getNamedContext('HeaderHeightContext', undefined);\nexport default HeaderHeightContext;\n//# sourceMappingURL=HeaderHeightContext.js.map","import * as React from 'react';\nimport HeaderHeightContext from './HeaderHeightContext';\nexport default function useHeaderHeight() {\n const height = React.useContext(HeaderHeightContext);\n if (height === undefined) {\n throw new Error(\"Couldn't find the header height. Are you inside a screen in a navigator with a header?\");\n }\n return height;\n}\n//# sourceMappingURL=useHeaderHeight.js.map","import * as React from 'react';\nimport { StyleSheet, Text } from 'react-native';\nexport default function MissingIcon(_ref) {\n let {\n color,\n size,\n style\n } = _ref;\n return /*#__PURE__*/React.createElement(Text, {\n style: [styles.icon, {\n color,\n fontSize: size\n }, style]\n }, \"\\u23F7\");\n}\nconst styles = StyleSheet.create({\n icon: {\n backgroundColor: 'transparent'\n }\n});\n//# sourceMappingURL=MissingIcon.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Platform, StyleSheet, View } from 'react-native';\nconst FAR_FAR_AWAY = 30000; // this should be big enough to move the whole view out of its container\n\nexport default function ResourceSavingScene(_ref) {\n let {\n visible,\n children,\n style,\n ...rest\n } = _ref;\n if (Platform.OS === 'web') {\n return /*#__PURE__*/React.createElement(View\n // @ts-expect-error: hidden exists on web, but not in React Native\n , _extends({\n hidden: !visible,\n style: [{\n display: visible ? 'flex' : 'none'\n }, styles.container, style],\n pointerEvents: visible ? 'auto' : 'none'\n }, rest), children);\n }\n return /*#__PURE__*/React.createElement(View, {\n style: [styles.container, style]\n // box-none doesn't seem to work properly on Android\n ,\n pointerEvents: visible ? 'auto' : 'none'\n }, /*#__PURE__*/React.createElement(View, {\n collapsable: false,\n removeClippedSubviews:\n // On iOS & macOS, set removeClippedSubviews to true only when not focused\n // This is an workaround for a bug where the clipped view never re-appears\n Platform.OS === 'ios' || Platform.OS === 'macos' ? !visible : true,\n pointerEvents: visible ? 'auto' : 'none',\n style: visible ? styles.attached : styles.detached\n }, children));\n}\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n overflow: 'hidden'\n },\n attached: {\n flex: 1\n },\n detached: {\n flex: 1,\n top: FAR_FAR_AWAY\n }\n});\n//# sourceMappingURL=ResourceSavingView.js.map","import * as React from 'react';\nimport { Dimensions, Platform, StyleSheet, View } from 'react-native';\nimport { initialWindowMetrics, SafeAreaInsetsContext, SafeAreaProvider } from 'react-native-safe-area-context';\nconst {\n width = 0,\n height = 0\n} = Dimensions.get('window');\n\n// To support SSR on web, we need to have empty insets for initial values\n// Otherwise there can be mismatch between SSR and client output\n// We also need to specify empty values to support tests environments\nconst initialMetrics = Platform.OS === 'web' || initialWindowMetrics == null ? {\n frame: {\n x: 0,\n y: 0,\n width,\n height\n },\n insets: {\n top: 0,\n left: 0,\n right: 0,\n bottom: 0\n }\n} : initialWindowMetrics;\nexport default function SafeAreaProviderCompat(_ref) {\n let {\n children,\n style\n } = _ref;\n return /*#__PURE__*/React.createElement(SafeAreaInsetsContext.Consumer, null, insets => {\n if (insets) {\n // If we already have insets, don't wrap the stack in another safe area provider\n // This avoids an issue with updates at the cost of potentially incorrect values\n // https://github.com/react-navigation/react-navigation/issues/174\n return /*#__PURE__*/React.createElement(View, {\n style: [styles.container, style]\n }, children);\n }\n return /*#__PURE__*/React.createElement(SafeAreaProvider, {\n initialMetrics: initialMetrics,\n style: style\n }, children);\n });\n}\nSafeAreaProviderCompat.initialMetrics = initialMetrics;\nconst styles = StyleSheet.create({\n container: {\n flex: 1\n }\n});\n//# sourceMappingURL=SafeAreaProviderCompat.js.map","import { NavigationContext, NavigationRouteContext } from '@react-navigation/native';\nimport * as React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport { useSafeAreaFrame, useSafeAreaInsets } from 'react-native-safe-area-context';\nimport Background from './Background';\nimport getDefaultHeaderHeight from './Header/getDefaultHeaderHeight';\nimport HeaderHeightContext from './Header/HeaderHeightContext';\nimport HeaderShownContext from './Header/HeaderShownContext';\nexport default function Screen(props) {\n const dimensions = useSafeAreaFrame();\n const insets = useSafeAreaInsets();\n const isParentHeaderShown = React.useContext(HeaderShownContext);\n const parentHeaderHeight = React.useContext(HeaderHeightContext);\n const {\n focused,\n modal = false,\n header,\n headerShown = true,\n headerTransparent,\n headerStatusBarHeight = isParentHeaderShown ? 0 : insets.top,\n navigation,\n route,\n children,\n style\n } = props;\n const [headerHeight, setHeaderHeight] = React.useState(() => getDefaultHeaderHeight(dimensions, modal, headerStatusBarHeight));\n return /*#__PURE__*/React.createElement(Background, {\n accessibilityElementsHidden: !focused,\n importantForAccessibility: focused ? 'auto' : 'no-hide-descendants',\n style: [styles.container, style]\n }, /*#__PURE__*/React.createElement(View, {\n style: styles.content\n }, /*#__PURE__*/React.createElement(HeaderShownContext.Provider, {\n value: isParentHeaderShown || headerShown !== false\n }, /*#__PURE__*/React.createElement(HeaderHeightContext.Provider, {\n value: headerShown ? headerHeight : parentHeaderHeight ?? 0\n }, children))), headerShown ? /*#__PURE__*/React.createElement(NavigationContext.Provider, {\n value: navigation\n }, /*#__PURE__*/React.createElement(NavigationRouteContext.Provider, {\n value: route\n }, /*#__PURE__*/React.createElement(View, {\n onLayout: e => {\n const {\n height\n } = e.nativeEvent.layout;\n setHeaderHeight(height);\n },\n style: headerTransparent ? styles.absolute : null\n }, header))) : null);\n}\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n flexDirection: 'column-reverse'\n },\n // This is necessary to avoid applying 'column-reverse' to screen content\n content: {\n flex: 1\n },\n absolute: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0\n }\n});\n//# sourceMappingURL=Screen.js.map","export {};\n//# sourceMappingURL=types.js.map","import * as React from 'react';\nimport { Image, Text, View } from 'react-native';\nimport * as AppUtilities from \"../context/AppUtilities\";\nimport * as AppConstants from \"../context/AppConstants\";\nimport * as AppState from \"../context/AppState\";\nimport { createBottomTabNavigator } from '@react-navigation/bottom-tabs';\nimport { MapStack } from \"./MapStack\";\nimport { DeliveryStack } from \"./DeliveryStack\";\nimport { MoreStack } from \"./MoreStack\";\nimport { ExploreStack } from \"./ExploreStack\";\nimport * as SplashScreen from 'expo-splash-screen';\nimport { useSelector, useDispatch } from 'react-redux';\n\nconst Tab = createBottomTabNavigator();\n\nexport function HomepageAuthenticated() {\n const [appLoading, setAppLoading] = React.useState(0);\n const dispatch = useDispatch();\n const showTabs = useSelector((state) => state.showTabs);\n\n const onLayoutRootView = React.useCallback(async () => {\n if (appLoading == 0) {\n try {\n if (!AppUtilities.isWeb()) {\n AppUtilities.info(\"HomepageAuthenticated.onLayoutRootView Hiding splash screen\");\n await SplashScreen.hideAsync();\n }\n } catch (e) {\n AppUtilities.handleException(e, \"HomepageAuthenticated.onLayoutRootView\");\n }\n\n setAppLoading(1);\n }\n }, [appLoading]);\n\n const tabProps = {};\n if (!showTabs) {\n tabProps.tabBar = (props) => null;\n }\n\n return (\n \n ({\n headerRight: AppUtilities.getHeaderRight(navigation),\n headerTitle: (props) => ,\n tabBarLabelPosition: \"below-icon\",\n lazy: true,\n })}\n {...tabProps}\n >\n {\n return focused ? : ;\n },\n headerShown: false\n }}\n listeners={({ navigation, route }) => ({\n tabPress: (e) => {\n dispatch(AppState.createDispatch(AppConstants.DISPATCH.SET_LAST_MAIN_VIEW, AppConstants.SCREENS.MAP_STACK));\n },\n })}\n />\n {\n return focused ? : ;\n },\n headerShown: false,\n }}\n listeners={({ navigation, route }) => ({\n tabPress: (e) => {\n dispatch(AppState.createDispatch(AppConstants.DISPATCH.SET_LAST_MAIN_VIEW, AppConstants.SCREENS.DELIVERY_STACK));\n },\n })}\n />\n {\n return focused ? : ;\n },\n headerShown: false,\n }}\n listeners={({ navigation, route }) => ({\n tabPress: (e) => {\n dispatch(AppState.createDispatch(AppConstants.DISPATCH.SET_LAST_MAIN_VIEW, AppConstants.SCREENS.EXPLORE_STACK));\n },\n })}\n />\n {\n return focused ? : ;\n },\n headerShown: false,\n lazy: false,\n }}\n listeners={({ navigation, route }) => ({\n tabPress: (e) => {\n //dispatch(AppState.createDispatch(AppConstants.DISPATCH.SET_LAST_MAIN_VIEW, AppConstants.SCREENS.MORE_STACK));\n },\n })}\n />\n \n \n );\n}\n","import {\n Dimensions,\n Image,\n PixelRatio,\n Platform,\n Pressable,\n StyleSheet,\n Text,\n TouchableOpacity,\n View,\n} from 'react-native';\nimport * as SecureStore from 'expo-secure-store';\nimport AsyncStorage from '@react-native-async-storage/async-storage';\nimport * as AppConstants from './AppConstants';\nimport 'react-native-get-random-values';\nimport { v4 as uuidv4 } from 'uuid';\nimport * as Linking from 'expo-linking';\nimport { UAParser } from 'ua-parser-js';\nimport DeviceInfo from 'react-native-device-info';\nimport * as Network from 'expo-network';\nimport { Link } from '@react-navigation/native';\n\nconst MAX_DEBUG = 1000000;\nconst MAX_CONSOLE_LOG_SIZE = 9500;\nconst HOST = \"findhumane.com\";\nconst maxRemoteErrors = 5;\nconst maxLocalErrors = 10;\nconst storageKeyLocalData = \"localData\";\nconst FETCH_TIMEOUT_MILLISECONDS_MAIN = 60000;\n\nlet accumulatedDebug = \"\";\nlet urlMappings = {};\nlet errorsProcessed = 0;\nlet localData = {};\nlet debugLevelsRevert = null;\n\nconst LABEL_GUIDES = We recommend reviewing the humane certification guides from the {createLink(\"American Society for the Prevention of Cruelty to Animals (ASPCA)\", \"https://www.aspca.org/shopwithyourheart/consumer-resources/meat-eggs-and-dairy-label-guide\")}, the {createLink(\"Animal Welfare Institute (AWI)\", \"https://awionline.org/sites/default/files/publication/digital_download/AWI-Consumers-Guide-Food-Labels-Animal-Welfare.pdf\")}, and {createLink(\"Farm Forward\", \"https://www.farmforward.com/label-guide/\")}.;\n\nlet DEBUGLEVEL = {\n ads: AppConstants.DEFAULT_DEBUG_LEVEL,\n certifications: AppConstants.DEFAULT_DEBUG_LEVEL,\n dataLocations: AppConstants.DEFAULT_DEBUG_LEVEL,\n filter: AppConstants.DEFAULT_DEBUG_LEVEL,\n local: AppConstants.DEFAULT_DEBUG_LEVEL,\n location: AppConstants.DEFAULT_DEBUG_LEVEL,\n map: AppConstants.DEFAULT_DEBUG_LEVEL,\n product: AppConstants.DEFAULT_DEBUG_LEVEL,\n network: AppConstants.DEFAULT_DEBUG_LEVEL,\n relativelyImportant: AppConstants.DEFAULT_DEBUG_LEVEL || AppConstants.IS_DEVELOPMENT,\n search: AppConstants.DEFAULT_DEBUG_LEVEL,\n state: AppConstants.DEFAULT_DEBUG_LEVEL,\n warnings: true, // Always keep warnings by default\n};\n\nconst EXTRA_DEBUGLEVELS = {\n search: true,\n};\n\nfunction setExtraDebug(toggle) {\n if (toggle) {\n debugLevelsRevert = DEBUGLEVEL;\n for (const [k, v] of Object.entries(EXTRA_DEBUGLEVELS)) {\n DEBUGLEVEL[k] = v;\n }\n } else {\n DEBUGLEVEL = debugLevelsRevert;\n }\n}\n\nfunction appendToLog(str) {\n accumulatedDebug = accumulatedDebug + \"\\n\" + str;\n\n // Limit how much memory debug is storing\n if (accumulatedDebug.length > MAX_DEBUG) {\n accumulatedDebug = \"[... truncated ...] \" + accumulatedDebug.substring(MAX_DEBUG / 2);\n }\n}\n\nfunction getLogPrefix() {\n return \"[\" + new Date().toISOString() + \"] \";\n}\n\nfunction info(message, skipConsole) {\n const str = getLogPrefix() + message;\n if (!skipConsole) {\n console.log(str);\n }\n appendToLog(str);\n}\n\nfunction toJSONPretty(obj) {\n try {\n return JSON.stringify(obj, null, 2);\n } catch (e) {\n info(\"Error in toJSONPretty for \" + (typeof obj) + \" : \" + e);\n }\n}\n\nfunction getMillisecondsAsSeconds(ms) {\n const millisecondsFloat = ms / 1000.0;\n let result = millisecondsFloat.toFixed(2);\n if (result.endsWith(\"00\")) {\n result = result.substring(0, result.length - 3);\n }\n return result;\n}\n\nfunction getRootUri() {\n if (AppConstants.IS_DEVELOPMENT) {\n if (Platform.OS === \"web\") {\n return \"http://localhost:3000/\";\n } else {\n return \"http://10.0.2.2:3000/\";\n }\n } else {\n return \"https://\" + HOST + \"/\";\n }\n}\n\nfunction debug(message) {\n const str = getLogPrefix() + message;\n if (str.length > MAX_CONSOLE_LOG_SIZE) {\n console.debug(str.substr(0, MAX_CONSOLE_LOG_SIZE) + \" [...] TRUNCATED\");\n } else {\n console.debug(str);\n }\n appendToLog(str);\n}\n\nfunction error(e, context) {\n if (e) {\n if (context) {\n info(\"ERROR (\" + context + \"): \" + getErrors(e));\n } else {\n info(\"ERROR: \" + getErrors(e));\n dir(e);\n }\n }\n}\n\nlet LOGICAL_USER_AGENT = null;\ntry {\n LOGICAL_USER_AGENT = UAParser();\n} catch (e) {\n debug(\"Error parsing user agent: \" + e);\n}\n\nfunction dir(obj) {\n try {\n if (isWeb()) {\n console.dir(obj);\n } else {\n console.debug(toJSONPretty(obj));\n }\n appendToLog(toJSONPretty(obj));\n } catch (e) {\n appendToLog(\"Error in dir: \" + e);\n }\n}\n\nfunction isAndroid() {\n return Platform.OS === \"android\";\n}\n\nfunction isIOS() {\n return Platform.OS === \"ios\";\n}\n\nfunction isWeb() {\n return Platform.OS === \"web\";\n}\n\nfunction isWebAndroid() {\n if (isWeb()) {\n if (LOGICAL_USER_AGENT) {\n if (LOGICAL_USER_AGENT.os && LOGICAL_USER_AGENT.os.name && LOGICAL_USER_AGENT.os.name.startsWith(\"Android\")) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction isWebiOS() {\n if (isWeb()) {\n if (LOGICAL_USER_AGENT) {\n if (LOGICAL_USER_AGENT.os && LOGICAL_USER_AGENT.os.name && LOGICAL_USER_AGENT.os.name.startsWith(\"iOS\")) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction handleException(\n e,\n source,\n snackContainer,\n additionalSetState = {\n },\n) {\n handleErrors({\n explicitErrors: e,\n source: source,\n snackContainer: snackContainer,\n additionalSetState: additionalSetState,\n });\n}\n\nfunction reportIssue(message) {\n handleErrors({\n explicitErrors: message,\n });\n}\n\nfunction getClass(obj) {\n return obj && obj.constructor ? obj.constructor.name : \"Unknown class\";\n}\n\n// Either specify an explicit object or array in errors,\n// or specify an errorsSource (such as a fetch response)\n// that will be checked for various well-known error properties\n// such as errorsSource.body.messages, errorsSource.errors\n//\n// If snackContainer is set, call setState({ snackVisible: true, snackText: errors, processing: false, ...additionalSetState });\n// If errorsContainer is set, call setState({ errors: errors, processing: false, ...additionalSetState });\n//\n// If remoteLog is true, POST debug back to /api/debug\n//\n// We use console.log instead of console.error because Expo considers console.error as fatal\nfunction handleErrors({\n explicitErrors = null,\n errorsSource = null,\n snackContainer = null,\n errorsContainer = null,\n additionalSetState = {\n },\n remoteLog = true,\n remoteData = null,\n source = \"unknown\",\n} = {}) {\n\n errorsProcessed++;\n\n if (remoteLog && errorsProcessed > maxRemoteErrors) {\n // Don't want to overwhelm the network with error reports\n remoteLog = false;\n }\n\n if (errorsProcessed > maxLocalErrors) {\n //console.log(getLogPrefix() + \"handleErrors: Reached maxLocalErrors\");\n return;\n }\n\n try {\n // Before we do anything risky, log the errors to the console, if available\n let errors = \"Unknown error\";\n let stacks = \"\";\n if (explicitErrors) {\n errors = explicitErrors;\n } else if (errorsSource) {\n if (errorsSource.body && errorsSource.body.messages) {\n errors = errorsSource.body.messages;\n } else if (errorsSource.errors) {\n errors = errorsSource.errors;\n } else if (errorsSource.componentDidCatch) {\n errors = [errorsSource.componentDidCatch.error, errorsSource.componentDidCatch.errorInfo];\n if (errorsSource.componentDidCatch.errorInfo && typeof errorsSource.componentDidCatch.errorInfo === 'object') {\n for (let prop in errorsSource.componentDidCatch.errorInfo) {\n errors += prop + \"=\" + errorsSource.componentDidCatch.errorInfo[prop];\n }\n }\n }\n }\n\n let allErrors = getLogPrefix() + \"handleErrors: Received errors (\" + source + \")\";\n\n if (errors) {\n allErrors += \": \";\n if (Array.isArray(errors)) {\n console.log(allErrors);\n console.log(errors);\n for (x of errors) {\n const getErrorsResult = getErrors(x, null, true);\n allErrors += \"\\n\\nDetails: \" + getErrors(x, null, true);\n console.log(getErrorsResult);\n }\n } else {\n const getErrorsResult = getErrors(errors, null, true);\n console.log(allErrors);\n console.log(errors);\n console.log(getErrorsResult);\n allErrors += \"\\n\\nDetails: \" + getErrorsResult;\n }\n }\n\n // Append the errors to our log\n appendToLog(allErrors);\n appendToLog(getLogPrefix() + \"Finished handleErrors processing\");\n\n if (remoteLog) {\n // Finally, we want to send this debug back to the server\n\n if (source) {\n allErrors += \"\\n\\nSource: \" + source;\n }\n\n // Add various context if we find it\n if (errorsSource) {\n if (errorsSource.status) {\n allErrors += \"\\n\\nStatus: \" + errorsSource.status;\n }\n }\n\n // Try to add in the state\n //try {\n // Causes issues serializing a lot of state\n //allErrors += \"\\n\\nState: \" + toJSONPretty(store.getState());\n //} catch (innerException) {\n // allErrors += \"\\n\\nState: Could not serialize: \" + innerException;\n //}\n\n if (remoteData) {\n try {\n allErrors += \"\\n\\nremoteData: \" + toJSONPretty(remoteData);\n } catch (innerException) {\n allErrors += \"\\n\\nremoteData: Could not serialize: \" + innerException + \" ; \" + remoteData;\n }\n }\n\n allErrors += \"\\n\\nLog:\\n\" + accumulatedDebug;\n\n sendDebug(allErrors);\n }\n } catch (e) {\n console.log(getLogPrefix() + \"handleErrors: Error processing\", e);\n }\n}\n\nfunction getErrors(e, detailed, includeMaximumDetails) {\n let result = \"\";\n if (e) {\n result = e.toString();\n try {\n if (e.message && !result.endsWith(e.message)) {\n result += \" (message: \" + e.message + \")\";\n }\n if (e.status && !result.endsWith(\"Error \" + e.status)) {\n result += \" (status: \" + e.status + \")\";\n }\n if (e.code) {\n result += \" (code: \" + e.code + \")\";\n }\n if (e.detailCode) {\n result += \" (detailCode: \" + e.detailCode + \")\";\n }\n if (e.nativeEvent && e.nativeEvent.error) {\n result += \" (nativeEvent.error: \" + e.nativeEvent.error + \")\";\n }\n if (detailed && e.messages_list && e.messages_list.length > 0) {\n result += \" (messages list: \" + e.messages_list.join(\"; \") + \")\";\n }\n if (detailed && e.fileName) {\n result += \" (file: \" + e.fileName + \")\";\n }\n if (detailed && e.lineNumber) {\n result += \" (line: \" + e.lineNumber + \")\";\n }\n if (detailed && e.columnNumber) {\n result += \" (column: \" + e.columnNumber + \")\";\n }\n if (detailed && e.name) {\n result += \" (class: \" + e.name + \")\";\n } else if (detailed && e.constructor) {\n result += \" (class: \" + e.constructor.name + \")\";\n }\n if (detailed && e.stack) {\n result += \" (stack: \" + e.stack + \")\";\n }\n if (detailed && e.underlyingException) {\n result += \" (underlying: \" + getErrors(e.underlyingException, detailed) + \")\";\n }\n\n if (includeMaximumDetails) {\n result += \" (class: \" + getClass(e) + \")\";\n }\n\n // Replace some common text\n result = result.replaceAll(\"Error: Error\", \"Error\");\n result = result.replaceAll(\"Network request failed\", \"Check your internet connection\");\n result = result.replaceAll(\"The operation was aborted.\", \"Timed out after \" + getMillisecondsAsSeconds(FETCH_TIMEOUT_MILLISECONDS_MAIN) + \" seconds\");\n } catch (innerException) {\n result += \" (failed processing: \" + innerException.toString() + \")\";\n }\n } else {\n result = \"Unexpected error\";\n }\n return result;\n}\n\nasync function sendDebugDirect(msg) {\n try {\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 120000 /* ms */);\n\n const result = await fetch(\n getRootUri() + \"api/debug\",\n {\n method: \"POST\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n \"Host\": HOST,\n },\n body: JSON.stringify({\n message: msg,\n }),\n signal: controller.signal,\n }\n );\n\n clearTimeout(timeoutId);\n\n return result;\n\n } catch (e) {\n info(\"sendDebugDirect failed with: \" + getErrors(e));\n return null;\n }\n}\n\n\n// We use console.log instead of console.error because Expo considers console.error as fatal\nasync function sendDebug(msg) {\n try {\n console.log(getLogPrefix() + \"sendDebug: Started\");\n await sendDebugDirect(msg);\n console.log(getLogPrefix() + \"sendDebug: Succeeded calling api/debug\");\n } catch (e) {\n console.log(getLogPrefix() + \"sendDebug: Failed call to api/debug\", e);\n }\n}\n\nasync function getStoredValue(key) {\n return await getStoredValueInsecure(key);\n}\n\nasync function getStoredValueSecure(key) {\n if (Platform.OS === \"web\") {\n return await AsyncStorage.getItem(key);\n } else {\n return await SecureStore.getItemAsync(key);\n }\n}\n\nasync function getStoredValueInsecure(key) {\n if (isWeb()) {\n return await AsyncStorage.getItem(key);\n } else {\n return await AsyncStorage.getItem(key);\n }\n}\n\nasync function setStoredValue(key, val) {\n return await setStoredValueInsecure(key, val);\n}\n\nasync function setStoredValueSecure(key, val) {\n if (Platform.OS === \"web\") {\n return await setStoredValueWeb(key, val);\n } else {\n // https://docs.expo.dev/versions/latest/sdk/securestore/\n // Size limit for a value is 2048 bytes\n return await SecureStore.setItemAsync(key, val);\n }\n}\n\nasync function setStoredValueInsecure(key, val) {\n if (isWeb()) {\n return await setStoredValueWeb(key, val);\n } else {\n // https://react-native-async-storage.github.io/async-storage/docs/limits/\n // \n // Total storage size is capped at 6 MB by default. You can increase this size\n // by specifying a new size using feature flag.\n // \n // Per-entry is limited by a size of a WindowCursor, a buffer used to read data\n // from SQLite. Currently it's size is around 2 MB. This means that the single\n // item read at one time cannot be larger than 2 MB. There's no supported\n // workaround from AsyncStorage. We suggest keeping your data lower than that,\n // by chopping it down into many entries, instead of one massive entry. This\n // is where multiGet and multiSet APIs can shine.\n return await AsyncStorage.setItem(key, val);\n }\n}\n\nasync function setStoredValueWeb(key, val) {\n // Limits:\n //\n // Android: https://react-native-async-storage.github.io/async-storage/docs/limits\n // \"This means that the single item read at one time cannot be larger than 2 MB\"\n // \"Total storage size is capped at 6 MB by default\"\n //\n // Web: https://en.wikipedia.org/wiki/Web_storage#Storage_size\n // \"Safari 8 allows 5 MB'\"\n //\n return await AsyncStorage.setItem(key, val);\n}\n\nasync function removeStoredValue(key) {\n if (isWeb()) {\n return await AsyncStorage.removeItem(key);\n } else {\n return await SecureStore.deleteItemAsync(key);\n }\n}\n\nasync function loadLocalData() {\n const rawLocalData = await getStoredValue(storageKeyLocalData);\n if (rawLocalData) {\n localData = JSON.parse(rawLocalData);\n if (DEBUGLEVEL.local) debug(\"localData: \" + toJSONPretty(localData));\n }\n return localData;\n}\n\nasync function updateLocalData(key, val) {\n localData[key] = val;\n await setStoredValue(storageKeyLocalData, toJSONPretty(localData));\n}\n\nasync function removeLocalData() {\n localData = {};\n await removeStoredValue(storageKeyLocalData);\n}\n\nfunction isUndefined(o) {\n return typeof o === 'undefined';\n}\n\nfunction isDefined(o) {\n return !isUndefined(o);\n}\n\nfunction isString(o) {\n return typeof o === 'string';\n}\n\nfunction isNull(obj) {\n return obj === null;\n}\n\nfunction isBlank(str) {\n return isUndefined(str) || isNull(str) || str.length == 0;\n}\n\nfunction isNullOrUndefined(x) {\n return isNull(x) || isUndefined(x);\n}\n\nfunction getLocalData(key, defaultValue) {\n let result = localData[key];\n if (isNullOrUndefined(result)) {\n result = defaultValue;\n }\n return result;\n}\n\nfunction getAllLocalData() {\n return localData;\n}\n\nasync function login(responseJson) {\n responseJson.expires = new Date().getTime() + (responseJson.expires_in * 1000);\n await updateLocalData(AppConstants.LOCAL_DATA_KEYS.REMOTE_SESSION, responseJson);\n}\n\nfunction getLocalDataRemoteSession() {\n return localData[AppConstants.LOCAL_DATA_KEYS.REMOTE_SESSION];\n}\n\nasync function logout() {\n if (getLocalData(AppConstants.LOCAL_DATA_KEYS.REMOTE_SESSION)) {\n await clearLogInData();\n }\n}\n\nasync function clearLogInData() {\n debug(\"clearLogInData entry\");\n await updateLocalData(AppConstants.LOCAL_DATA_KEYS.REMOTE_SESSION, null);\n debug(\"clearLogInData exit\");\n}\n\nfunction isAccessTokenExpired() {\n if (getLocalDataRemoteSession()) {\n const x = new Date(getLocalDataRemoteSession().expires);\n const y = new Date();\n if (DEBUGLEVEL.network) debug(\"isAccessTokenExpired expires: \" + x + \", now: \" + y);\n return x < y;\n } else {\n return true;\n }\n}\n\nasync function ensureValidAccessToken() {\n if (DEBUGLEVEL.network) debug(\"> ensureValidAccessToken \" + toJSONPretty(getLocalDataRemoteSession()));\n\n if (isAccessTokenExpired()) {\n\n const url = getRootUri() + \"api/refresh_token\";\n\n debug(\"ensureValidAccessToken: Requesting token refresh from \" + url);\n\n let result = null;\n\n try {\n const response = await fetch(\n url,\n {\n method: \"POST\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n \"Host\": HOST,\n },\n body: toJSONPretty({\n \"refresh_token\": getLocalDataRemoteSession().refresh_token,\n }),\n }\n );\n \n if (DEBUGLEVEL.network) debug(\"refresh_token raw response: \" + toJSONPretty(response));\n \n const responseJson = await response.json();\n \n if (DEBUGLEVEL.network) debug(\"refresh_token JSON response: \" + toJSONPretty(responseJson));\n \n if (responseJson.result) {\n await login(responseJson);\n result = { successful: true, token: getLocalDataRemoteSession().token };\n } else {\n // If there's some problem with the refresh token, require a relogin\n if (responseJson.status == 403) {\n // This can happen, for example, if the app logs into development\n // and then tries to log into production. In that case, we think\n // the token is still not expired, but when we try to use it,\n // it fails. It could also happen if the token database is cleared\n // for some reason. So in this case, just log the user out and\n // have them log back in.\n if (DEBUGLEVEL.network) debug(\"ensureValidAccessToken: 403; logging out\");\n \n await logout();\n \n result = { successful: false, errors: responseJson.messages, status: responseJson.status, failedRefresh: true, redirected: true };\n } else {\n result = { successful: false, errors: responseJson.messages, status: responseJson.status, failedRefresh: true };\n }\n }\n } catch (error) {\n result = { successful: false, errors: [\"Error: \" + error] };\n }\n\n debug(\"ensureValidAccessToken: Token refresh result: successful: \" + result.successful + \", token: \" + result.token);\n\n return result;\n }\n if (DEBUGLEVEL.network) debug(\"< ensureValidAccessToken token is valid\");\n return { successful: true, token: getLocalDataRemoteSession().token };\n}\n\nasync function fetchAuthorized(context, uri, method, postJson, formUrlEncoded, skipAudit, skipErrorStatusHandling) {\n return await fetchCustomized(context, uri, method, postJson, true, formUrlEncoded, skipAudit, skipErrorStatusHandling);\n}\n\nasync function fetchUnauthorized(context, uri, method, postJson, formUrlEncoded, skipAudit, skipErrorStatusHandling) {\n return await fetchCustomized(context, uri, method, postJson, false, formUrlEncoded, skipAudit, skipErrorStatusHandling);\n}\n\nfunction handleErrorStatus(status, responseText) {\n if (DEBUGLEVEL.warnings) debug(\"handleErrorStatus response error: \" + responseText);\n \n let messages_list = [];\n let message = \"Error \" + status;\n let detailCode = 0;\n\n try {\n let responseJson = JSON.parse(responseText);\n\n if (DEBUGLEVEL.warnings) debug(\"handleErrorStatus error response JSON: \" + toJSONPretty(responseJson));\n\n if (responseJson) {\n if (responseJson.messages) {\n messages_list = responseJson.messages;\n } else if (responseJson.message) {\n message = responseJson.message;\n } else if (responseJson.error) {\n message = responseJson.error;\n } else {\n if (responseText) {\n message += \" (\" + responseText + \")\";\n }\n }\n\n if (\"detailCode\" in responseJson) {\n detailCode = responseJson.detailCode;\n }\n } else {\n if (responseText) {\n message += \" (\" + responseText + \")\";\n }\n }\n } catch (e) {\n if (responseText) {\n // This is usually HTML, so no reason\n // to add to the user message. It will\n // be logged above and sent in sendDebug\n //message += \" (\" + responseText + \")\";\n }\n }\n\n if (message && message.length > 200) {\n message = message.substring(0, 200) + \" ... \";\n }\n\n var error = new Error(message);\n error.status = status;\n error.messages_list = messages_list;\n error.detailCode = detailCode;\n if (DEBUGLEVEL.warnings) debug(\"handleErrorStatus error: \" + toJSONPretty(error));\n throw error;\n}\n\nfunction isStatusSuccess(status) {\n return status >= 200 && status < 300;\n}\n\nasync function fetchCustomized(context, uri, method, postJson, authorize, formUrlEncoded, skipAudit, skipErrorStatusHandling) {\n const urlMapping = urlMappings[uri];\n const actualRootUri = urlMapping && urlMapping.rootUri ? urlMapping.rootUri : getRootUri();\n const actualHost = urlMapping && urlMapping.host ? urlMapping.host : HOST;\n\n if (uri[0] == '/') {\n uri = uri.substring(1);\n }\n\n if (uri.indexOf(\"?v=\") == -1 && uri.indexOf(\"&v=\") == -1) {\n if (uri.indexOf('?') == -1) {\n uri += \"?v=\" + AppConstants.VERSION;\n } else {\n uri += \"&v=\" + AppConstants.VERSION;\n }\n }\n\n if (!method) {\n method = \"GET\";\n }\n\n info(\"> fetchCustomized \" + method + \" \" + actualRootUri + uri + \" (\" + context + \")\");\n\n if (postJson) {\n\n let debugJson = postJson;\n\n if (\"password\" in postJson) {\n debugJson = Object.assign({}, postJson);\n delete debugJson.password;\n }\n\n if (!skipAudit) {\n dir(debugJson);\n }\n }\n\n let result = { successful: false };\n try {\n if (DEBUGLEVEL.network) debug(\"fetchCustomized authorize: \" + authorize + \", formUrlEncoded: \" + toJSONPretty(formUrlEncoded));\n\n let ready = true;\n\n if (authorize) {\n if (DEBUGLEVEL.network) debug(\"fetchCustomized calling ensureValidAccessToken\");\n\n result = await ensureValidAccessToken();\n ready = result.successful;\n\n if (DEBUGLEVEL.network) debug(\"fetchCustomized ensureValidAccessToken returned \" + ready);\n }\n \n if (ready) {\n let headers = {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n \"Host\": actualHost,\n };\n\n if (authorize) {\n headers[\"Authorization\"] = \"Bearer \" + result.token;\n }\n\n const savedToken = authorize ? result.token : null;\n\n let fetchParams = {\n method: method,\n headers: headers,\n };\n\n if (formUrlEncoded) {\n headers[\"Content-Type\"] = \"application/x-www-form-urlencoded\";\n fetchParams.body = formUrlEncoded.toString();\n } else if (postJson) {\n fetchParams.body = toJSONPretty(postJson);\n }\n\n // Timeout in RN v0.60.4; wait until it's available in Expo\n // https://github.com/facebook/react-native/commit/5e36b0c6eb2494cefd11907673aa018831526750\n //const controller = new AbortController();\n //const signal = controller.signal;\n //signal: signal,\n //const timeoutId = setTimeout(() => controller.abort(), 30000);\n //clearTimeout(timeoutId);\n\n try {\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MILLISECONDS_MAIN /* ms */);\n fetchParams.signal = controller.signal;\n\n const response = await fetch(\n actualRootUri + uri,\n fetchParams,\n );\n \n clearTimeout(timeoutId);\n\n const status = response.status;\n \n info(\"< fetchCustomized response: \" + status + \" (\" + context + \")\");\n \n const responseText = await response.text();\n \n if (isStatusSuccess(status)) {\n\n const responseBody = JSON.parse(responseText);\n\n if (DEBUGLEVEL.network) {\n debug(\"fetchCustomized response success:\");\n dir(responseBody);\n }\n\n result = {\n status: status,\n successful: true,\n body: responseBody,\n token: savedToken,\n };\n } else {\n if (skipErrorStatusHandling) {\n result = {\n status: status,\n successful: false,\n responseText: responseText,\n };\n } else {\n handleErrorStatus(status, responseText);\n }\n }\n } catch (error) {\n if (DEBUGLEVEL.warnings) debug(\"< fetchCustomized error: url: \" + uri + \", error: \" + getErrors(error, true));\n\n result = {\n status: 500,\n successful: false,\n status: error.status,\n detailCode: \"detailCode\" in error ? error.detailCode : 0,\n errors: error.messages_list && error.messages_list.length > 0 ? error.messages_list : [ error.message ],\n };\n\n var finalError = new Error(result.errors.join(\", \"));\n finalError.status = result.status;\n finalError.detailCode = result.detailCode;\n finalError.errors = result.errors;\n finalError.underlyingException = error;\n throw finalError;\n }\n } else {\n if (DEBUGLEVEL.network) debug(\"fetchCustomized not ready\");\n\n var finalError = new Error(result.errors.join(\", \"));\n finalError.status = result.status;\n finalError.detailCode = result.detailCode;\n finalError.errors = result.errors;\n throw finalError;\n }\n } catch (e) {\n if (e.errors) {\n throw e;\n } else {\n var finalError = new Error(e.toString());\n finalError.status = result.status;\n finalError.detailCode = result.detailCode;\n finalError.errors = result.errors;\n finalError.underlyingException = e;\n throw finalError;\n }\n }\n\n if (DEBUGLEVEL.network) {\n debug(\"< fetchCustomized result:\");\n dir(result);\n }\n\n return result;\n}\n\nfunction getHeight() {\n return Dimensions.get(\"window\").height;\n}\n\nfunction getWidth() {\n return Dimensions.get(\"window\").width;\n}\n\nfunction sleep(ms) {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\nfunction getAccumulatedDebug() {\n return accumulatedDebug;\n}\n\nfunction getUUID() {\n return uuidv4();\n}\n\nfunction createRequestUrl(url) {\n if (url.includes(\"?\")) {\n url += \"&emulate_host=findhumane.com\";\n } else {\n url += \"?emulate_host=findhumane.com\";\n }\n return url;\n}\n\n// [min, max]\nfunction randomInt(min, max) {\n return Math.floor(Math.random() * (max - min + 1) + min);\n}\n\nfunction getHeaderRight(navigation) {\n return null;\n}\n\nfunction debugObject(obj, name) {\n try {\n info(\"debugObject stringifying \" + name);\n for (var prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n try {\n JSON.stringify(obj[prop]);\n info(\" debugObject \" + prop + \": \" + toJSONPretty(obj[prop]));\n } catch (e) {\n info(\" debugObject could not stringify \" + prop);\n }\n }\n }\n } catch (e) {\n handleException(e, \"debugObject\");\n }\n}\n\nfunction escapeHTML(unsafe) {\n if (isNullOrUndefined(unsafe)) {\n return \"\";\n } else {\n return unsafe.replace(\n /[\\u0000-\\u002F\\u003A-\\u0040\\u005B-\\u0060\\u007B-\\u00FF]/g,\n c => '&#' + ('000' + c.charCodeAt(0)).slice(-4) + ';'\n );\n }\n}\n\n// compare\nfunction areObjectsEqual(x, y) {\n for (var prop in x) {\n if (x[prop] !== y[prop]) {\n return false;\n }\n }\n for (var prop in y) {\n if (x[prop] !== y[prop]) {\n return false;\n }\n }\n return true;\n}\n\nfunction removeTemporaryParams(filter) {\n // Some params will be filtered out\n const result = Object.assign({}, filter);\n delete result[AppConstants.SYNTHESIZED_TYPES.QUERY_ID[AppConstants.TYPE_KEYS.URL_KEY]];\n return result;\n}\n\nfunction isDefaultFilterPasture(dataFilter) {\n return areObjectsEqual(removeTemporaryParams(dataFilter), AppConstants.DATA_FILTERS_BUILTIN_OPTIONS[AppConstants.DATA_FILTERS_BUILTIN_NAMES.PASTURE]);\n}\n\nfunction isDefaultFilterOutdoors(dataFilter) {\n return areObjectsEqual(removeTemporaryParams(dataFilter), AppConstants.DATA_FILTERS_BUILTIN_OPTIONS[AppConstants.DATA_FILTERS_BUILTIN_NAMES.OUTDOORS]);\n}\n\nfunction isDefaultFilterIndoors(dataFilter) {\n return areObjectsEqual(removeTemporaryParams(dataFilter), AppConstants.DATA_FILTERS_BUILTIN_OPTIONS[AppConstants.DATA_FILTERS_BUILTIN_NAMES.INDOORS]);\n}\n\nfunction getDefaultFilterPastureLink() {\n return \"/find_humane/api/defaultMainDataPastureV16.json\";\n}\n\nfunction getDefaultFilterOutdoorsLink() {\n return \"/find_humane/api/defaultMainDataOutdoorsPlusV16.json\";\n}\n\nfunction getDefaultFilterIndoorsLink() {\n return \"/find_humane/api/defaultMainDataIndoorsPlusV16.json\";\n}\n\nfunction isDefaultFilter(dataFilter) {\n return isDefaultFilterPasture(dataFilter) || isDefaultFilterOutdoors(dataFilter) || isDefaultFilterIndoors(dataFilter);\n}\n\nfunction getDefaultFilterLink(dataFilter) {\n if (isDefaultFilterOutdoors(dataFilter)) {\n return getDefaultFilterOutdoorsLink();\n } else if (isDefaultFilterPasture(dataFilter)) {\n return getDefaultFilterPastureLink();\n } else if (isDefaultFilterIndoors(dataFilter)) {\n return getDefaultFilterIndoorsLink();\n }\n\n return null;\n}\n\nfunction getMainDataLink(dataFilter) {\n if (isDefaultFilterOutdoors(dataFilter)) {\n return getDefaultFilterOutdoorsLink();\n } else if (isDefaultFilterPasture(dataFilter)) {\n return getDefaultFilterPastureLink();\n } else if (isDefaultFilterIndoors(dataFilter)) {\n return getDefaultFilterIndoorsLink();\n }\n\n let result = \"/find_humane/api/mainData.json?\" + convertFilterHashToQueryParametersSorted(dataFilter);\n return result;\n}\n\nfunction getDefaultFilterExplorePastureLink() {\n return \"/find_humane/api/defaultExplorePastureV16.json\";\n}\n\nfunction getDefaultFilterExploreOutdoorsLink() {\n return \"/find_humane/api/defaultExploreOutdoorsPlusV16.json\";\n}\n\nfunction getDefaultFilterExploreIndoorsLink() {\n return \"/find_humane/api/defaultExploreIndoorsPlusV16.json\";\n}\n\nfunction getDefaultFilterExploreLink(dataFilter) {\n if (isDefaultFilterOutdoors(dataFilter)) {\n return getDefaultFilterExploreOutdoorsLink();\n } else if (isDefaultFilterPasture(dataFilter)) {\n return getDefaultFilterExplorePastureLink();\n } else if (isDefaultFilterIndoors(dataFilter)) {\n return getDefaultFilterExploreIndoorsLink();\n }\n\n return null;\n}\n\nfunction getExploreLink(dataFilter) {\n if (isDefaultFilterOutdoors(dataFilter, AppConstants.DATA_FILTERS_BUILTIN_OPTIONS[AppConstants.DATA_FILTERS_BUILTIN_NAMES.OUTDOORS])) {\n return getDefaultFilterExploreOutdoorsLink();\n } else if (isDefaultFilterPasture(dataFilter, AppConstants.DATA_FILTERS_BUILTIN_OPTIONS[AppConstants.DATA_FILTERS_BUILTIN_NAMES.PASTURE])) {\n return getDefaultFilterExplorePastureLink();\n } else if (isDefaultFilterIndoors(dataFilter, AppConstants.DATA_FILTERS_BUILTIN_OPTIONS[AppConstants.DATA_FILTERS_BUILTIN_NAMES.INDOORS])) {\n return getDefaultFilterExploreIndoorsLink();\n }\n\n let result = \"/find_humane/api/explore.json?\" + convertFilterHashToQueryParametersSorted(dataFilter);\n return result;\n}\n\nfunction convertFilterHashToQueryParametersSorted(hash) {\n // https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/QueryStringParameters.html\n // \"The order of parameters matters in query strings. [...] [different orders may cause CDNs] to cache two separate versions of the object\"\n const finalHash = Object.assign({}, hash);\n finalHash[\"v\"] = AppConstants.VERSION;\n\n let q = finalHash[AppConstants.SYNTHESIZED_TYPES.GENERAL_SEARCH[AppConstants.TYPE_KEYS.URL_KEY]];\n delete finalHash[AppConstants.SYNTHESIZED_TYPES.GENERAL_SEARCH[AppConstants.TYPE_KEYS.URL_KEY]];\n\n // Sending a unique ID on each query would break caches\n let id = finalHash[AppConstants.SYNTHESIZED_TYPES.QUERY_ID[AppConstants.TYPE_KEYS.URL_KEY]];\n delete finalHash[AppConstants.SYNTHESIZED_TYPES.QUERY_ID[AppConstants.TYPE_KEYS.URL_KEY]];\n\n const props = [];\n for (const prop in finalHash) {\n props.push(prop);\n }\n props.sort();\n let result = \"\";\n for (const prop of props) {\n if (result.length > 0) {\n result += \"&\";\n }\n result += prop + \"=\" + encodeURIComponent(finalHash[prop]);\n }\n if (!isBlank(q)) {\n if (result.length > 0) {\n result += \"&\";\n }\n result += AppConstants.SYNTHESIZED_TYPES.GENERAL_SEARCH[AppConstants.TYPE_KEYS.URL_KEY] + \"=\" + encodeURIComponent(q);\n }\n return result;\n}\n\n// utmCampaign: The individual campaign name, slogan, promo code, etc. for a product.\n// utmMedium (optional): The advertising or marketing medium, for example:\n// referral, affiliate, cpc, banner, email, social, newsletter, blog_comments, cpm, display, organic, ad (https://cxl.com/wp-content/uploads/2020/02/Screen-Shot-2020-02-28-at-12.06.14-PM.png)\n// Default: referral: \"Used to identify traffic from websites not known to be a search engine or social media platform.\"\nfunction getLinkWithUTM(link, utmCampaign, utmMedium) {\n if (link.indexOf(\"utm_source\") == -1) {\n if (link.indexOf(\"?\") == -1) {\n link += \"?\";\n } else {\n link += \"&\";\n }\n if (!utmMedium) {\n utmMedium = AppConstants.UTM_MEDIUMS.REFERRAL;\n }\n if (!utmCampaign) {\n utmCampaign = AppConstants.UTM_CAMPAIGNS.GENERAL;\n }\n link += \"utm_source=\" + AppConstants.UTM_SOURCES.FINDHUMANE;\n link += \"&utm_medium=\" + utmMedium;\n link += \"&utm_campaign=\" + utmCampaign;\n }\n return link;\n}\n\nfunction openLink(link, utmCampaign, utmMedium) {\n link = getLinkWithUTM(link, utmCampaign, utmMedium);\n info(\"openLink: \" + link);\n if (isWeb()) {\n window.open(link, '_blank');\n } else {\n Linking.openURL(link);\n }\n}\n\nfunction createLink(\n children,\n link,\n utmCampaign,\n utmMedium,\n skipUTM,\n linkStyle,\n key\n ) {\n if (isWeb()) {\n if (link.startsWith(\"http\") && !skipUTM) {\n link = getLinkWithUTM(link, utmCampaign, utmMedium);\n }\n const linkProps = {};\n if (linkStyle) {\n linkProps.style = linkStyle;\n }\n if (key) {\n linkProps.key = key;\n }\n return (\n {children}\n );\n } else {\n const linkProps = {};\n if (key) {\n linkProps.key = key;\n }\n if (isString(children)) {\n return (\n openLink(link, utmCampaign, utmMedium)}\n {...linkProps}\n >{children}\n );\n } else {\n return (\n openLink(link, utmCampaign, utmMedium)}\n {...linkProps}\n >{children}\n );\n }\n }\n}\n\nfunction createInternalLink(navigation, children, screen, params, linkStyle) {\n // Using a normal link causes navigation history to be lost on web\n if (isWeb() && false) {\n let link = AppConstants.SCREEN_LINKS[screen];\n if (params) {\n for (const key of Object.keys(params)) {\n const regex = new RegExp(\":\" + key);\n link = link.replace(regex, params[key]);\n }\n }\n const linkProps = {};\n if (linkStyle) {\n linkProps.style = linkStyle;\n }\n\n return (\n {children}\n );\n } else {\n if (isString(children)) {\n return (\n navigation.navigate(screen, params)}\n >{children}\n );\n } else {\n return (\n navigation.navigate(screen, params)}\n >{children}\n );\n }\n }\n}\n\nfunction createNavigationLink(children, screen, params, style) {\n return (\n \n { children }\n \n );\n}\n\nfunction filterDown(baseFilter, deeperFilter) {\n const result = Object.assign({}, baseFilter);\n if (AppConstants.CERTIFICATIONS_MAP[deeperFilter]) {\n Object.keys(AppConstants.CERTIFICATIONS_MAP).forEach((key) => {\n if (result[key] && key == deeperFilter) {\n // Keep it\n } else {\n result[key] = false;\n }\n });\n } else {\n result[deeperFilter] = true;\n }\n return result;\n}\n\nfunction getZoomLevelForGeolocationTypes(types) {\n // https://developers.google.com/maps/documentation/javascript/overview#MapOptions\n let zoomLevel = AppConstants.DEFAULT_ZOOMED;\n if (types && types.length > 0) {\n // https://developers.google.com/maps/documentation/geocoding/requests-geocoding#Types\n for (const resultType of types) {\n if (resultType == \"street_address\" ||\n resultType == \"intersection\" ||\n resultType == \"premise\" ||\n resultType == \"subpremise\" ||\n resultType == \"intersection\" ||\n resultType == \"park\" ||\n resultType == \"point_of_interest\"\n ) {\n zoomLevel = AppConstants.ZOOM_LEVELS.BUILDINGS - 4;\n } else if (resultType == \"locality\") {\n zoomLevel = AppConstants.ZOOM_LEVELS.CITY;\n } else if (resultType == \"sublocality\" || resultType == \"postal_code\") {\n zoomLevel = AppConstants.ZOOM_LEVELS.CITY + 2;\n } else if (resultType == \"neighborhood\" || resultType == \"airport\") {\n zoomLevel = AppConstants.ZOOM_LEVELS.CITY + 3;\n } else if (resultType == \"country\") {\n zoomLevel = 6;\n }\n }\n }\n return zoomLevel;\n}\n\nfunction checkSearchResults(resultsCount, showSnack) {\n if (resultsCount == 0) {\n showSnack(\"No results\");\n }\n}\n\nfunction isMarkdownLink(markdown) {\n if (markdown) {\n if (markdown.startsWith(\"\")) {\n return true;\n } else if (markdown.startsWith(\"[http\") && markdown.endsWith(\")\")) {\n return true;\n }\n }\n return false;\n}\n\nfunction getMarkdownLink(markdown) {\n if (isMarkdownLink(markdown)) {\n if (markdown.startsWith(\"\")) {\n return markdown.substring(1, markdown.length - 1);\n } else if (markdown.startsWith(\"[http\") && markdown.endsWith(\")\")) {\n return markdown.substring(markdown.indexOf(\"(\") + 1, markdown.lastIndexOf(\")\"));\n }\n }\n return null;\n}\n\nfunction getMarkdownLinkText(markdown) {\n if (isMarkdownLink(markdown)) {\n if (markdown.startsWith(\"\")) {\n return markdown.substring(1, markdown.length - 1);\n } else if (markdown.startsWith(\"[http\") && markdown.endsWith(\")\")) {\n return markdown.substring(1, markdown.lastIndexOf(\"](\"));\n }\n }\n return null;\n}\n\nasync function recordPageView(urlFragment) {\n // https://plausible.io/docs/events-api\n info(\"recordPageView started for \" + urlFragment);\n\n try {\n const userAgent = await getUserAgent();\n\n // Response from Plausible:\n // \"I think our API docs are slightly wrong in that they are written\n // with server-side and proxy use-cases in mind. We do infer the IP\n // if it is not explicitly set\"\n // \n //let ipAddress = await getPublicIPAddress();\n //if (!ipAddress) {\n // ipAddress = await getIPAddress();\n //}\n\n //info(\"recordPageView IP address: \" + ipAddress + \", user agent: \" + userAgent);\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 5000 /* ms */);\n const url = \"https://\" + HOST + \"/\" + urlFragment;\n\n await fetch(\n \"https://plausible.io/api/event\",\n {\n method: \"POST\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n \"User-Agent\": userAgent,\n //\"X-Forwarded-For\": ipAddress,\n },\n body: JSON.stringify({\n name: \"pageview\",\n domain: HOST,\n url: url,\n }),\n signal: controller.signal,\n }\n );\n\n clearTimeout(timeoutId);\n\n info(\"recordPageView completed to \" + url);\n } catch (e) {\n info(\"recordPageView error to \" + urlFragment + \": \" + getErrors(e));\n }\n}\n\nasync function getUserAgent() {\n if (isAndroid() || isIOS()) {\n return await DeviceInfo.getUserAgent();\n } else if (isWeb()) {\n return window.navigator.userAgent;\n } else {\n throw new Error(\"Unknown platform\");\n }\n}\n\nasync function getIPAddress() {\n // https://docs.expo.dev/versions/latest/sdk/network/#networkgetipaddressasync\n return await Network.getIpAddressAsync();\n}\n\nasync function getPublicIPAddress() {\n try {\n info(\"getPublicIPAddress started\");\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 2000 /* ms */);\n const resp = await fetch(\n \"https://api.ipify.org/?format=json\",\n {\n signal: controller.signal,\n }\n );\n clearTimeout(timeoutId);\n\n info(\"getPublicIPAddress returned\");\n\n const data = await resp.json();\n return data.ip;\n } catch (e) {\n info(\"getPublicIPAddress failed with: \" + getErrors(e));\n return null;\n }\n}\n\nasync function onFirstInitializedMap() {\n info(\"AppUtilities.onFirstInitializedMap Map is fully initialized\");\n if (!isWeb()) {\n recordPageView(\"map\");\n } else {\n // Web is already handled by Plausible\n }\n}\n\nconst PRODUCT_ITEM_HEIGHT = 100;\nconst PRODUCT_ITEM_PADDING_VERTICAL = 10;\nconst PRODUCT_ITEM_HEIGHT_TOTAL = PRODUCT_ITEM_HEIGHT + PRODUCT_ITEM_PADDING_VERTICAL + PRODUCT_ITEM_PADDING_VERTICAL + StyleSheet.hairlineWidth;\nconst PRODUCT_THUMBNAIL_WIDTH = isWeb() ? PRODUCT_ITEM_HEIGHT : 75;\nconst PRODUCT_MAIN_FONT_SIZE = isWeb() ? 18 : 16;\n\nconst STYLES = StyleSheet.create({\n certificationImage: {\n maxHeight: isWeb() ? 70 : 60,\n marginRight: 10,\n marginLeft: 10,\n },\n});\n\nfunction productListItemLayout(data, index) {\n return {\n length: PRODUCT_ITEM_HEIGHT_TOTAL,\n offset: PRODUCT_ITEM_HEIGHT_TOTAL * index,\n index,\n };\n}\n\nfunction createItemRow(product, onPress, accessoryLeft) {\n return {\n i: product.id,\n title: product.product_name,\n description: product.producer,\n imageId: product.files && product.files.length > 0 ? product.files[0].id : null,\n price_amount: product.price_amount,\n price_details: product.price_details,\n details: product,\n onPress: onPress,\n accessoryLeft: accessoryLeft,\n };\n}\n\n\n// ls assets/certifications/width85/ | awk 'BEGIN { print \"const certificationLogos = [\"; } { img=$0; gsub(/\\..*$/, \"\", img); map[0+(i++)] = img; print \" require(\\\"../../assets/certifications/width85/\" $0 \"\\\"),\"; } END { print \"];\\n\"; print \"const certificationLogoOffsets = {\"; for (key in map) { print \" \" map[key] \": \" key \",\"; } print \"}\"; }'\nconst certificationLogos = [\n require(\"../../assets/certifications/width85/agw_certified_grassfed.png\"),\n require(\"../../assets/certifications/width85/agw_certified_non_gmo.png\"),\n require(\"../../assets/certifications/width85/agw_certified_organic.png\"),\n require(\"../../assets/certifications/width85/agw_certified_regenerative.png\"),\n require(\"../../assets/certifications/width85/agw_salmon_welfare_certified.png\"),\n require(\"../../assets/certifications/width85/american_grassfed_association.png\"),\n require(\"../../assets/certifications/width85/american_humane_certified.png\"),\n require(\"../../assets/certifications/width85/animal_welfare_approved.png\"),\n require(\"../../assets/certifications/width85/animal_welfare_certified_1.png\"),\n require(\"../../assets/certifications/width85/animal_welfare_certified_2.png\"),\n require(\"../../assets/certifications/width85/animal_welfare_certified_3.png\"),\n require(\"../../assets/certifications/width85/animal_welfare_certified_4.png\"),\n require(\"../../assets/certifications/width85/animal_welfare_certified_5.png\"),\n require(\"../../assets/certifications/width85/animal_welfare_certified_6.png\"),\n require(\"../../assets/certifications/width85/animal_welfare_certified_fish_1.jpg\"),\n require(\"../../assets/certifications/width85/animal_welfare_certified_fish_3.jpg\"),\n require(\"../../assets/certifications/width85/animal_welfare_certified_fish_6.jpg\"),\n require(\"../../assets/certifications/width85/applegate_humanely_raised.png\"),\n require(\"../../assets/certifications/width85/certified_humane_free_range.png\"),\n require(\"../../assets/certifications/width85/certified_humane_grass_fed.png\"),\n require(\"../../assets/certifications/width85/certified_humane_pasture_raised_grass_fed.png\"),\n require(\"../../assets/certifications/width85/certified_humane.png\"),\n require(\"../../assets/certifications/width85/food_alliance_certified.png\"),\n require(\"../../assets/certifications/width85/one_health_certified.png\"),\n require(\"../../assets/certifications/width85/regenerative_organic_certified.png\"),\n require(\"../../assets/certifications/width85/usda_organic.png\"),\n require(\"../../assets/certifications/width85/better_chicken_project.png\"),\n];\n\nconst certificationLogoOffsets = {\n agw_certified_grassfed: 0,\n agw_certified_non_gmo: 1,\n agw_certified_organic: 2,\n agw_certified_regenerative: 3,\n agw_salmon_welfare_certified: 4,\n american_grassfed_association: 5,\n american_humane_certified: 6,\n animal_welfare_approved: 7,\n animal_welfare_certified_1: 8,\n animal_welfare_certified_2: 9,\n animal_welfare_certified_3: 10,\n animal_welfare_certified_4: 11,\n animal_welfare_certified_5: 12,\n animal_welfare_certified_6: 13,\n animal_welfare_certified_fish_1: 14,\n animal_welfare_certified_fish_3: 15,\n animal_welfare_certified_fish_6: 16,\n applegate_humanely_raised: 17,\n certified_humane_free_range: 18,\n certified_humane_grass_fed: 19,\n certified_humane_pasture_raised_grass_fed: 20,\n certified_humane: 21,\n food_alliance_certified: 22,\n one_health_certified: 23,\n regenerative_organic_certified: 24,\n usda_organic: 25,\n better_chicken_project: 26,\n}\n\nfunction renderProductRow(item, index, width) {\n const leftAccessory = item.accessoryLeft ? item.accessoryLeft() : null;\n const details = item.details;\n let images = [];\n if (details) {\n // NOTE: We only show some of these when horizontal space is limited\n if (details.animal_welfare_approved && (images.length == 0 || width >= AppConstants.SMALL_SCREEN_WIDTH1)) {\n images.push();\n\n if (details.agw_certified_grassfed && width >= AppConstants.SMALL_SCREEN_WIDTH1) {\n images.push();\n }\n if (details.agw_certified_non_gmo && width >= AppConstants.SMALL_SCREEN_WIDTH1) {\n images.push();\n }\n if (details.agw_certified_organic && width >= AppConstants.SMALL_SCREEN_WIDTH1) {\n images.push();\n }\n if (details.agw_certified_regenerative && width >= AppConstants.SMALL_SCREEN_WIDTH1) {\n images.push();\n }\n if (details.agw_salmon_welfare_certified && width >= AppConstants.SMALL_SCREEN_WIDTH1) {\n images.push();\n }\n }\n if (details.certified_humane_pasture_raised_grass_fed && (images.length == 0 || width >= AppConstants.SMALL_SCREEN_WIDTH1)) {\n images.push();\n } else if (details.certified_humane_grass_fed && (images.length == 0 || width >= AppConstants.SMALL_SCREEN_WIDTH1)) {\n images.push();\n } else if (details.certified_humane_free_range && (images.length == 0 || width >= AppConstants.SMALL_SCREEN_WIDTH1)) {\n images.push();\n } else if (details.certified_humane && (images.length == 0 || width >= AppConstants.SMALL_SCREEN_WIDTH1)) {\n images.push();\n }\n if (details.animal_welfare_certified_6 && (images.length == 0 || width >= AppConstants.SMALL_SCREEN_WIDTH1)) {\n images.push();\n } else if (details.animal_welfare_certified_5 && (images.length == 0 || width >= AppConstants.SMALL_SCREEN_WIDTH1)) {\n images.push();\n } else if (details.animal_welfare_certified_4 && (images.length == 0 || width >= AppConstants.SMALL_SCREEN_WIDTH1)) {\n images.push();\n } else if (details.animal_welfare_certified_3 && (images.length == 0 || width >= AppConstants.SMALL_SCREEN_WIDTH1)) {\n images.push();\n } else if (details.animal_welfare_certified_2 && (images.length == 0 || width >= AppConstants.SMALL_SCREEN_WIDTH1)) {\n images.push();\n } else if (details.animal_welfare_certified_1 && (images.length == 0 || width >= AppConstants.SMALL_SCREEN_WIDTH1)) {\n images.push();\n }\n if (details.animal_welfare_certified_fish_6 && (images.length == 0 || width >= AppConstants.SMALL_SCREEN_WIDTH1)) {\n images.push();\n } else if (details.animal_welfare_certified_fish_3 && (images.length == 0 || width >= AppConstants.SMALL_SCREEN_WIDTH1)) {\n images.push();\n } else if (details.animal_welfare_certified_fish_1 && (images.length == 0 || width >= AppConstants.SMALL_SCREEN_WIDTH1)) {\n images.push();\n }\n if (details.better_chicken_project && (images.length == 0 || width >= AppConstants.SMALL_SCREEN_WIDTH1)) {\n images.push();\n }\n }\n\n return (\n \n \n {\n details ?\n \n {\n item.imageId ?\n \n :\n \n }\n \n :\n null\n }\n {\n leftAccessory ?\n \n {\n leftAccessory\n }\n \n :\n null\n }\n \n \n {item.title}\n \n {\n item.price_amount || (details && details.price_details) ?\n \n {item.price_amount ? item.price_amount : details.price_details}\n \n :\n null\n }\n {\n item.description ?\n \n {item.description}\n \n :\n null\n }\n \n \n { images }\n \n \n \n );\n}\n\n// Assume the srcset is sorted by scale\nfunction selectImageFromSrcSet(srcset) {\n const sources = srcset.split(\", \");\n const originalPixelRatio = PixelRatio.get();\n // At least in Firefox on mobile, 2.5 was rounded up to 3 by \n const comparisonRatio = Math.ceil(originalPixelRatio);\n info(\"selectImageFromSrcSet pixelRatio: \" + originalPixelRatio + \", comparisonRatio: \" + comparisonRatio + \", searching: \" + srcset);\n let result = null;\n for (let i = 0; i < sources.length; i++) {\n const source = sources[i];\n const space = source.lastIndexOf(' ');\n const uri = source.substring(0, space);\n const scale = source.substring(space + 1);\n if (scale.endsWith(\"x\")) {\n const sourceScale = Number.parseFloat(scale.substring(0, scale.length - 1));\n //info(\"selectImageFromSrcSet uri: \" + uri + \", scale: \" + scale + \", sourceScale: \" + sourceScale);\n if (sourceScale <= comparisonRatio) {\n result = uri;\n } else {\n break;\n }\n } else {\n info(\"Unknown scale \" + scale);\n }\n }\n info(\"selectImageFromSrcSet result: <\" + result + \">\");\n return result;\n}\n\nfunction getCertificationImage(filter, style) {\n const offset = certificationLogoOffsets[filter];\n if (DEBUGLEVEL.certifications) {\n debug(\"AppUtilities.getCertificationImage filter: \" + filter + \", offset: \" + offset);\n }\n if (isDefined(offset)) {\n const src = certificationLogos[certificationLogoOffsets[filter]];\n if (DEBUGLEVEL.certifications) {\n debug(\"AppUtilities.getCertificationImage src: \");\n dir(src);\n }\n if (src) {\n const cert = AppConstants.FILTER_TO_CERTIFICATION_MAP[filter];\n if (DEBUGLEVEL.certifications) {\n debug(\"AppUtilities.getCertificationImage cert: \" + cert);\n }\n const link = AppConstants.CERTIFICATION_LINKS[cert];\n if (DEBUGLEVEL.certifications) {\n debug(\"AppUtilities.getCertificationImage link: \" + link);\n }\n return createLink(\n ,\n link,\n AppConstants.UTM_CAMPAIGNS.PRODUCT_DETAILS,\n null,\n null,\n null,\n filter\n );\n } else {\n return null;\n }\n } else {\n return null;\n }\n}\n\nfunction postProcessResultsLocations(locationsJSON) {\n // See FindHumane::Utilities.postProcessSearchResultsDetailed\n if (DEBUGLEVEL.location) debug(\"> postProcessResultsLocations\");\n const locationNames = locationsJSON.names;\n const locations = {};\n for (const location of locationsJSON.locations) {\n const id = location[0];\n const locationObj = {\n i: id,\n l: location[1],\n g: location[2],\n t: locationNames[location[3]],\n };\n if (location.length >= 5 && location[4] < AppConstants.MAP_PIN_TYPES.length) {\n locationObj.p = location[4];\n }\n locations[\"\" + id] = locationObj;\n }\n if (DEBUGLEVEL.location) debug(\"< postProcessResultsLocations\");\n return locations;\n}\n\nexport {\n DEBUGLEVEL,\n LABEL_GUIDES,\n info,\n debug,\n dir,\n error,\n isAndroid,\n isIOS,\n isWeb,\n isWebAndroid,\n isWebiOS,\n handleException,\n fetchAuthorized,\n fetchUnauthorized,\n handleErrorStatus,\n isStatusSuccess,\n toJSONPretty,\n getHeight,\n getWidth,\n sleep,\n login,\n logout,\n getErrors,\n getAccumulatedDebug,\n loadLocalData,\n updateLocalData,\n getLocalData,\n getAllLocalData,\n getUUID,\n getLocalDataRemoteSession,\n createRequestUrl,\n randomInt,\n getHeaderRight,\n getRootUri,\n sendDebugDirect,\n openLink,\n createLink,\n createInternalLink,\n createNavigationLink,\n setStoredValue,\n removeStoredValue,\n removeLocalData,\n reportIssue,\n debugObject,\n isUndefined,\n isDefined,\n isNull,\n isBlank,\n isString,\n isNullOrUndefined,\n escapeHTML,\n getLinkWithUTM,\n filterDown,\n getZoomLevelForGeolocationTypes,\n checkSearchResults,\n isMarkdownLink,\n getMarkdownLink,\n getMarkdownLinkText,\n onFirstInitializedMap,\n renderProductRow,\n productListItemLayout,\n createItemRow,\n selectImageFromSrcSet,\n getCertificationImage,\n setExtraDebug,\n postProcessResultsLocations,\n certificationLogos,\n certificationLogoOffsets,\n getMainDataLink,\n getExploreLink,\n convertFilterHashToQueryParametersSorted,\n getDefaultFilterOutdoorsLink,\n getDefaultFilterPastureLink,\n getDefaultFilterIndoorsLink,\n isDefaultFilter,\n getDefaultFilterLink,\n getDefaultFilterExploreLink,\n getDefaultFilterExploreOutdoorsLink,\n getDefaultFilterExplorePastureLink,\n getDefaultFilterExploreIndoorsLink,\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"activeOpacity\", \"delayPressIn\", \"delayPressOut\", \"delayLongPress\", \"disabled\", \"focusable\", \"onLongPress\", \"onPress\", \"onPressIn\", \"onPressOut\", \"rejectResponderTermination\", \"style\"];\nimport * as React from 'react';\nimport { useCallback, useMemo, useState, useRef } from 'react';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePressEvents from '../../modules/usePressEvents';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nimport { warnOnce } from '../../modules/warnOnce';\n/**\n * A wrapper for making views respond properly to touches.\n * On press down, the opacity of the wrapped view is decreased, dimming it.\n */\nfunction TouchableOpacity(props, forwardedRef) {\n warnOnce('TouchableOpacity', 'TouchableOpacity is deprecated. Please use Pressable.');\n var activeOpacity = props.activeOpacity,\n delayPressIn = props.delayPressIn,\n delayPressOut = props.delayPressOut,\n delayLongPress = props.delayLongPress,\n disabled = props.disabled,\n focusable = props.focusable,\n onLongPress = props.onLongPress,\n onPress = props.onPress,\n onPressIn = props.onPressIn,\n onPressOut = props.onPressOut,\n rejectResponderTermination = props.rejectResponderTermination,\n style = props.style,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n var hostRef = useRef(null);\n var setRef = useMergeRefs(forwardedRef, hostRef);\n var _useState = useState('0s'),\n duration = _useState[0],\n setDuration = _useState[1];\n var _useState2 = useState(null),\n opacityOverride = _useState2[0],\n setOpacityOverride = _useState2[1];\n var setOpacityTo = useCallback((value, duration) => {\n setOpacityOverride(value);\n setDuration(duration ? duration / 1000 + \"s\" : '0s');\n }, [setOpacityOverride, setDuration]);\n var setOpacityActive = useCallback(duration => {\n setOpacityTo(activeOpacity !== null && activeOpacity !== void 0 ? activeOpacity : 0.2, duration);\n }, [activeOpacity, setOpacityTo]);\n var setOpacityInactive = useCallback(duration => {\n setOpacityTo(null, duration);\n }, [setOpacityTo]);\n var pressConfig = useMemo(() => ({\n cancelable: !rejectResponderTermination,\n disabled,\n delayLongPress,\n delayPressStart: delayPressIn,\n delayPressEnd: delayPressOut,\n onLongPress,\n onPress,\n onPressStart(event) {\n var isGrant = event.dispatchConfig != null ? event.dispatchConfig.registrationName === 'onResponderGrant' : event.type === 'keydown';\n setOpacityActive(isGrant ? 0 : 150);\n if (onPressIn != null) {\n onPressIn(event);\n }\n },\n onPressEnd(event) {\n setOpacityInactive(250);\n if (onPressOut != null) {\n onPressOut(event);\n }\n }\n }), [delayLongPress, delayPressIn, delayPressOut, disabled, onLongPress, onPress, onPressIn, onPressOut, rejectResponderTermination, setOpacityActive, setOpacityInactive]);\n var pressEventHandlers = usePressEvents(hostRef, pressConfig);\n return /*#__PURE__*/React.createElement(View, _extends({}, rest, pressEventHandlers, {\n accessibilityDisabled: disabled,\n focusable: !disabled && focusable !== false,\n pointerEvents: disabled ? 'box-none' : undefined,\n ref: setRef,\n style: [styles.root, !disabled && styles.actionable, style, opacityOverride != null && {\n opacity: opacityOverride\n }, {\n transitionDuration: duration\n }]\n }));\n}\nvar styles = StyleSheet.create({\n root: {\n transitionProperty: 'opacity',\n transitionDuration: '0.15s',\n userSelect: 'none'\n },\n actionable: {\n cursor: 'pointer',\n touchAction: 'manipulation'\n }\n});\nvar MemoedTouchableOpacity = /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef(TouchableOpacity));\nMemoedTouchableOpacity.displayName = 'TouchableOpacity';\nexport default MemoedTouchableOpacity;","import ExpoSecureStore from './ExpoSecureStore';\n// @needsAudit\n/**\n * The data in the keychain item cannot be accessed after a restart until the device has been\n * unlocked once by the user. This may be useful if you need to access the item when the phone\n * is locked.\n */\nexport const AFTER_FIRST_UNLOCK = ExpoSecureStore.AFTER_FIRST_UNLOCK;\n// @needsAudit\n/**\n * Similar to `AFTER_FIRST_UNLOCK`, except the entry is not migrated to a new device when restoring\n * from a backup.\n */\nexport const AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY = ExpoSecureStore.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY;\n// @needsAudit\n/**\n * The data in the keychain item can always be accessed regardless of whether the device is locked.\n * This is the least secure option.\n */\nexport const ALWAYS = ExpoSecureStore.ALWAYS;\n// @needsAudit\n/**\n * Similar to `WHEN_UNLOCKED_THIS_DEVICE_ONLY`, except the user must have set a passcode in order to\n * store an entry. If the user removes their passcode, the entry will be deleted.\n */\nexport const WHEN_PASSCODE_SET_THIS_DEVICE_ONLY = ExpoSecureStore.WHEN_PASSCODE_SET_THIS_DEVICE_ONLY;\n// @needsAudit\n/**\n * Similar to `ALWAYS`, except the entry is not migrated to a new device when restoring from a backup.\n */\nexport const ALWAYS_THIS_DEVICE_ONLY = ExpoSecureStore.ALWAYS_THIS_DEVICE_ONLY;\n// @needsAudit\n/**\n * The data in the keychain item can be accessed only while the device is unlocked by the user.\n */\nexport const WHEN_UNLOCKED = ExpoSecureStore.WHEN_UNLOCKED;\n// @needsAudit\n/**\n * Similar to `WHEN_UNLOCKED`, except the entry is not migrated to a new device when restoring from\n * a backup.\n */\nexport const WHEN_UNLOCKED_THIS_DEVICE_ONLY = ExpoSecureStore.WHEN_UNLOCKED_THIS_DEVICE_ONLY;\nconst VALUE_BYTES_LIMIT = 2048;\n// @needsAudit\n/**\n * Returns whether the SecureStore API is enabled on the current device. This does not check the app\n * permissions.\n *\n * @return Promise which fulfils witch `boolean`, indicating whether the SecureStore API is available\n * on the current device. Currently, this resolves `true` on Android and iOS only.\n */\nexport async function isAvailableAsync() {\n return !!ExpoSecureStore.getValueWithKeyAsync;\n}\n// @needsAudit\n/**\n * Delete the value associated with the provided key.\n *\n * @param key The key that was used to store the associated value.\n * @param options An [`SecureStoreOptions`](#securestoreoptions) object.\n *\n * @return A promise that will reject if the value couldn't be deleted.\n */\nexport async function deleteItemAsync(key, options = {}) {\n ensureValidKey(key);\n await ExpoSecureStore.deleteValueWithKeyAsync(key, options);\n}\n// @needsAudit\n/**\n * Reads the stored value associated with the provided key.\n *\n * @param key The key that was used to store the associated value.\n * @param options An [`SecureStoreOptions`](#securestoreoptions) object.\n *\n * @return A promise that resolves to the previously stored value. It will return `null` if there is no entry\n * for the given key or if the key has been invalidated. It will reject if an error occurs while retrieving the value.\n *\n * > Keys are invalidated by the system when biometrics change, such as adding a new fingerprint or changing the face profile used for face recognition.\n * > After a key has been invalidated, it becomes impossible to read its value.\n * > This only applies to values stored with `requireAuthentication` set to `true`.\n */\nexport async function getItemAsync(key, options = {}) {\n ensureValidKey(key);\n return await ExpoSecureStore.getValueWithKeyAsync(key, options);\n}\n// @needsAudit\n/**\n * Stores a key–value pair.\n *\n * @param key The key to associate with the stored value. Keys may contain alphanumeric characters, `.`, `-`, and `_`.\n * @param value The value to store. Size limit is 2048 bytes.\n * @param options An [`SecureStoreOptions`](#securestoreoptions) object.\n *\n * @return A promise that will reject if value cannot be stored on the device.\n */\nexport async function setItemAsync(key, value, options = {}) {\n ensureValidKey(key);\n if (!isValidValue(value)) {\n throw new Error(`Invalid value provided to SecureStore. Values must be strings; consider JSON-encoding your values if they are serializable.`);\n }\n await ExpoSecureStore.setValueWithKeyAsync(value, key, options);\n}\n/**\n * Stores a key–value pair synchronously.\n * > **Note:** This function blocks the JavaScript thread, so the application may not be interactive when the `requireAuthentication` option is set to `true` until the user authenticates.\n *\n * @param key The key to associate with the stored value. Keys may contain alphanumeric characters, `.`, `-`, and `_`.\n * @param value The value to store. Size limit is 2048 bytes.\n * @param options An [`SecureStoreOptions`](#securestoreoptions) object.\n *\n */\nexport function setItem(key, value, options = {}) {\n ensureValidKey(key);\n if (!isValidValue(value)) {\n throw new Error(`Invalid value provided to SecureStore. Values must be strings; consider JSON-encoding your values if they are serializable.`);\n }\n return ExpoSecureStore.setValueWithKeySync(value, key, options);\n}\n/**\n * Synchronously reads the stored value associated with the provided key.\n * > **Note:** This function blocks the JavaScript thread, so the application may not be interactive when reading a value with `requireAuthentication`\n * > option set to `true` until the user authenticates.\n * @param key The key that was used to store the associated value.\n * @param options An [`SecureStoreOptions`](#securestoreoptions) object.\n *\n * @return Previously stored value. It will return `null` if there is no entry for the given key or if the key has been invalidated.\n */\nexport function getItem(key, options = {}) {\n ensureValidKey(key);\n return ExpoSecureStore.getValueWithKeySync(key, options);\n}\nfunction ensureValidKey(key) {\n if (!isValidKey(key)) {\n throw new Error(`Invalid key provided to SecureStore. Keys must not be empty and contain only alphanumeric characters, \".\", \"-\", and \"_\".`);\n }\n}\nfunction isValidKey(key) {\n return typeof key === 'string' && /^[\\w.-]+$/.test(key);\n}\nfunction isValidValue(value) {\n if (typeof value !== 'string') {\n return false;\n }\n if (byteCount(value) > VALUE_BYTES_LIMIT) {\n console.warn('Provided value to SecureStore is larger than 2048 bytes. An attempt to store such a value will throw an error in SDK 35.');\n }\n return true;\n}\n// copy-pasted from https://stackoverflow.com/a/39488643\nfunction byteCount(value) {\n let bytes = 0;\n for (let i = 0; i < value.length; i++) {\n const codePoint = value.charCodeAt(i);\n // Lone surrogates cannot be passed to encodeURI\n if (codePoint >= 0xd800 && codePoint < 0xe000) {\n if (codePoint < 0xdc00 && i + 1 < value.length) {\n const next = value.charCodeAt(i + 1);\n if (next >= 0xdc00 && next < 0xe000) {\n bytes += 4;\n i++;\n continue;\n }\n }\n }\n bytes += codePoint < 0x80 ? 1 : codePoint < 0x800 ? 2 : 3;\n }\n return bytes;\n}\n//# sourceMappingURL=SecureStore.js.map","export default {\n get name() {\n return 'ExpoSecureStore';\n },\n};\n//# sourceMappingURL=ExpoSecureStore.web.js.map","import AsyncStorage from \"./AsyncStorage\";\nexport { useAsyncStorage } from \"./hooks\";\nexport default AsyncStorage;\n//# sourceMappingURL=index.js.map","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport mergeOptions from \"merge-options\";\n\n// eslint-disable-next-line @typescript-eslint/ban-types\n\n// eslint-disable-next-line @typescript-eslint/ban-types\n\nconst merge = mergeOptions.bind({\n concatArrays: true,\n ignoreUndefined: true\n});\nfunction mergeLocalStorageItem(key, value) {\n const oldValue = window.localStorage.getItem(key);\n if (oldValue) {\n const oldObject = JSON.parse(oldValue);\n const newObject = JSON.parse(value);\n const nextValue = JSON.stringify(merge(oldObject, newObject));\n window.localStorage.setItem(key, nextValue);\n } else {\n window.localStorage.setItem(key, value);\n }\n}\nfunction createPromise(getValue, callback) {\n return new Promise((resolve, reject) => {\n try {\n const value = getValue();\n callback === null || callback === void 0 ? void 0 : callback(null, value);\n resolve(value);\n } catch (err) {\n callback === null || callback === void 0 ? void 0 : callback(err);\n reject(err);\n }\n });\n}\nfunction createPromiseAll(promises, callback, processResult) {\n return Promise.all(promises).then(result => {\n const value = (processResult === null || processResult === void 0 ? void 0 : processResult(result)) ?? null;\n callback === null || callback === void 0 ? void 0 : callback(null, value);\n return Promise.resolve(value);\n }, errors => {\n callback === null || callback === void 0 ? void 0 : callback(errors);\n return Promise.reject(errors);\n });\n}\nconst AsyncStorage = {\n /**\n * Fetches `key` value.\n */\n getItem: (key, callback) => {\n return createPromise(() => window.localStorage.getItem(key), callback);\n },\n /**\n * Sets `value` for `key`.\n */\n setItem: (key, value, callback) => {\n return createPromise(() => window.localStorage.setItem(key, value), callback);\n },\n /**\n * Removes a `key`\n */\n removeItem: (key, callback) => {\n return createPromise(() => window.localStorage.removeItem(key), callback);\n },\n /**\n * Merges existing value with input value, assuming they are stringified JSON.\n */\n mergeItem: (key, value, callback) => {\n return createPromise(() => mergeLocalStorageItem(key, value), callback);\n },\n /**\n * Erases *all* AsyncStorage for the domain.\n */\n clear: callback => {\n return createPromise(() => window.localStorage.clear(), callback);\n },\n /**\n * Gets *all* keys known to the app, for all callers, libraries, etc.\n */\n getAllKeys: callback => {\n return createPromise(() => {\n const numberOfKeys = window.localStorage.length;\n const keys = [];\n for (let i = 0; i < numberOfKeys; i += 1) {\n const key = window.localStorage.key(i) || \"\";\n keys.push(key);\n }\n return keys;\n }, callback);\n },\n /**\n * (stub) Flushes any pending requests using a single batch call to get the data.\n */\n flushGetRequests: () => undefined,\n /**\n * multiGet resolves to an array of key-value pair arrays that matches the\n * input format of multiSet.\n *\n * multiGet(['k1', 'k2']) -> [['k1', 'val1'], ['k2', 'val2']]\n */\n multiGet: (keys, callback) => {\n const promises = keys.map(key => AsyncStorage.getItem(key));\n const processResult = result => result.map((value, i) => [keys[i], value]);\n return createPromiseAll(promises, callback, processResult);\n },\n /**\n * Takes an array of key-value array pairs.\n * multiSet([['k1', 'val1'], ['k2', 'val2']])\n */\n multiSet: (keyValuePairs, callback) => {\n const promises = keyValuePairs.map(item => AsyncStorage.setItem(item[0], item[1]));\n return createPromiseAll(promises, callback);\n },\n /**\n * Delete all the keys in the `keys` array.\n */\n multiRemove: (keys, callback) => {\n const promises = keys.map(key => AsyncStorage.removeItem(key));\n return createPromiseAll(promises, callback);\n },\n /**\n * Takes an array of key-value array pairs and merges them with existing\n * values, assuming they are stringified JSON.\n *\n * multiMerge([['k1', 'val1'], ['k2', 'val2']])\n */\n multiMerge: (keyValuePairs, callback) => {\n const promises = keyValuePairs.map(item => AsyncStorage.mergeItem(item[0], item[1]));\n return createPromiseAll(promises, callback);\n }\n};\nexport default AsyncStorage;\n//# sourceMappingURL=AsyncStorage.js.map","'use strict';\nconst isOptionObject = require('is-plain-obj');\n\nconst {hasOwnProperty} = Object.prototype;\nconst {propertyIsEnumerable} = Object;\nconst defineProperty = (object, name, value) => Object.defineProperty(object, name, {\n\tvalue,\n\twritable: true,\n\tenumerable: true,\n\tconfigurable: true\n});\n\nconst globalThis = this;\nconst defaultMergeOptions = {\n\tconcatArrays: false,\n\tignoreUndefined: false\n};\n\nconst getEnumerableOwnPropertyKeys = value => {\n\tconst keys = [];\n\n\tfor (const key in value) {\n\t\tif (hasOwnProperty.call(value, key)) {\n\t\t\tkeys.push(key);\n\t\t}\n\t}\n\n\t/* istanbul ignore else */\n\tif (Object.getOwnPropertySymbols) {\n\t\tconst symbols = Object.getOwnPropertySymbols(value);\n\n\t\tfor (const symbol of symbols) {\n\t\t\tif (propertyIsEnumerable.call(value, symbol)) {\n\t\t\t\tkeys.push(symbol);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn keys;\n};\n\nfunction clone(value) {\n\tif (Array.isArray(value)) {\n\t\treturn cloneArray(value);\n\t}\n\n\tif (isOptionObject(value)) {\n\t\treturn cloneOptionObject(value);\n\t}\n\n\treturn value;\n}\n\nfunction cloneArray(array) {\n\tconst result = array.slice(0, 0);\n\n\tgetEnumerableOwnPropertyKeys(array).forEach(key => {\n\t\tdefineProperty(result, key, clone(array[key]));\n\t});\n\n\treturn result;\n}\n\nfunction cloneOptionObject(object) {\n\tconst result = Object.getPrototypeOf(object) === null ? Object.create(null) : {};\n\n\tgetEnumerableOwnPropertyKeys(object).forEach(key => {\n\t\tdefineProperty(result, key, clone(object[key]));\n\t});\n\n\treturn result;\n}\n\n/**\n * @param {*} merged already cloned\n * @param {*} source something to merge\n * @param {string[]} keys keys to merge\n * @param {Object} config Config Object\n * @returns {*} cloned Object\n */\nconst mergeKeys = (merged, source, keys, config) => {\n\tkeys.forEach(key => {\n\t\tif (typeof source[key] === 'undefined' && config.ignoreUndefined) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Do not recurse into prototype chain of merged\n\t\tif (key in merged && merged[key] !== Object.getPrototypeOf(merged)) {\n\t\t\tdefineProperty(merged, key, merge(merged[key], source[key], config));\n\t\t} else {\n\t\t\tdefineProperty(merged, key, clone(source[key]));\n\t\t}\n\t});\n\n\treturn merged;\n};\n\n/**\n * @param {*} merged already cloned\n * @param {*} source something to merge\n * @param {Object} config Config Object\n * @returns {*} cloned Object\n *\n * see [Array.prototype.concat ( ...arguments )](http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.concat)\n */\nconst concatArrays = (merged, source, config) => {\n\tlet result = merged.slice(0, 0);\n\tlet resultIndex = 0;\n\n\t[merged, source].forEach(array => {\n\t\tconst indices = [];\n\n\t\t// `result.concat(array)` with cloning\n\t\tfor (let k = 0; k < array.length; k++) {\n\t\t\tif (!hasOwnProperty.call(array, k)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tindices.push(String(k));\n\n\t\t\tif (array === merged) {\n\t\t\t\t// Already cloned\n\t\t\t\tdefineProperty(result, resultIndex++, array[k]);\n\t\t\t} else {\n\t\t\t\tdefineProperty(result, resultIndex++, clone(array[k]));\n\t\t\t}\n\t\t}\n\n\t\t// Merge non-index keys\n\t\tresult = mergeKeys(result, array, getEnumerableOwnPropertyKeys(array).filter(key => !indices.includes(key)), config);\n\t});\n\n\treturn result;\n};\n\n/**\n * @param {*} merged already cloned\n * @param {*} source something to merge\n * @param {Object} config Config Object\n * @returns {*} cloned Object\n */\nfunction merge(merged, source, config) {\n\tif (config.concatArrays && Array.isArray(merged) && Array.isArray(source)) {\n\t\treturn concatArrays(merged, source, config);\n\t}\n\n\tif (!isOptionObject(source) || !isOptionObject(merged)) {\n\t\treturn clone(source);\n\t}\n\n\treturn mergeKeys(merged, source, getEnumerableOwnPropertyKeys(source), config);\n}\n\nmodule.exports = function (...options) {\n\tconst config = merge(clone(defaultMergeOptions), (this !== globalThis && this) || {}, defaultMergeOptions);\n\tlet merged = {_: {}};\n\n\tfor (const option of options) {\n\t\tif (option === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!isOptionObject(option)) {\n\t\t\tthrow new TypeError('`' + option + '` is not an Option Object');\n\t\t}\n\n\t\tmerged = merge(merged, {_: option}, config);\n\t}\n\n\treturn merged._;\n};\n","'use strict';\n\nmodule.exports = value => {\n\tif (Object.prototype.toString.call(value) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn prototype === null || prototype === Object.prototype;\n};\n","import AsyncStorage from \"./AsyncStorage\";\nexport function useAsyncStorage(key) {\n return {\n getItem: (...args) => AsyncStorage.getItem(key, ...args),\n setItem: (...args) => AsyncStorage.setItem(key, ...args),\n mergeItem: (...args) => AsyncStorage.mergeItem(key, ...args),\n removeItem: (...args) => AsyncStorage.removeItem(key, ...args)\n };\n}\n//# sourceMappingURL=hooks.js.map","import { Platform, StyleSheet } from 'react-native';\nimport Constants from 'expo-constants';\nimport { MD3LightTheme as PaperDefaultTheme } from 'react-native-paper';\nimport { v4 as uuidv4 } from 'uuid';\n\nconst VERSION = Constants.expoConfig.version;\nconst MAJOR_VERSION_NUMBER = Constants.expoConfig.extra.majorVersion;\nconst MINOR_VERSION_NUMBER = Constants.expoConfig.extra.minorVersion;\nconst PATCH_VERSION_NUMBER = Constants.expoConfig.extra.patchVersion;\n\nconst IS_DEVELOPMENT = false;\nconst DEFAULT_DEBUG_LEVEL = false;\n\nconst HOMEPAGE_LINK = \"https://findhumane.com/\";\nconst APPLE_STORE_LINK = \"https://apps.apple.com/app/find-humane/id6444166104\";\nconst ANDROID_STORE_LINK = \"https://play.google.com/store/apps/details?id=com.findhumane.app\";\nconst SUBSTACK_LINK = \"https://blog.findhumane.com/\";\nconst TWITTER_LINK = \"https://twitter.com/findhumane\";\nconst INSTAGRAM_LINK = \"https://www.instagram.com/findhumane/\";\nconst FACEBOOK_LINK = \"https://www.facebook.com/findhumane/\";\nconst B_CORP_LINK = \"https://blog.findhumane.com/p/pending-certified-b-corporation\";\nconst GRANT_LINK = \"https://blog.findhumane.com/p/find-humane-receives-25000-grant\";\nconst HEADER_TEXT_OVERFLOW_LENGTH = 30;\nconst SMALL_SCREEN_WIDTH1 = 500;\nconst SUBSCRIBE_POPUP_DELAY_MILLISECONDS = IS_DEVELOPMENT ? 10000 : 60000;\nconst GOOGLE_API_KEY_AUTOCOMPLETE = Constants.expoConfig.extra.googleNoRestrictionsKey;\n\n// https://support.google.com/analytics/answer/1033863\nconst UTM_SOURCES = Object.freeze({\n FINDHUMANE: \"findhumane\",\n});\n\n// The advertising or marketing medium\nconst UTM_MEDIUMS = Object.freeze({\n REFERRAL: \"referral\",\n AFFILIATE: \"affiliate\",\n CPC: \"cpc\",\n BANNER: \"banner\",\n EMAIL: \"email\",\n NEWSLETTER: \"newsletter\",\n SOCIAL: \"social\",\n});\n\nconst UTM_CAMPAIGNS = Object.freeze({\n GENERAL: \"general\",\n LOCATION_DETAILS: \"locationpage\",\n PRODUCT_DETAILS: \"productdetails\",\n DELIVERY: \"deliverypage\",\n FILTER: \"filterpage\",\n MAP: \"map\",\n LEARN: \"learnpage\",\n ABOUT: \"aboutpage\",\n FAQ: \"faqpage\",\n});\n\nconst APPCONFIG = {\n colors: {\n hamburger: {\n light: \"white\",\n dark: \"black\",\n }\n }\n};\n\nconst STYLES = StyleSheet.create({\n flex1: {\n flex: 1,\n },\n flex1Center: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n },\n image18x18: {\n width: 18,\n height: 18,\n },\n image24x24: {\n width: 24,\n height: 24,\n },\n image25x25: {\n width: 25,\n height: 25,\n },\n image30x30: {\n width: 30,\n height: 30,\n },\n margin10: {\n margin: 10,\n },\n marginBottom10: {\n marginBottom: 10,\n },\n marginBottom20: {\n marginBottom: 20,\n },\n marginVertical10: {\n marginVertical: 10,\n },\n marginVertical20: {\n marginVertical: 20,\n },\n marginTop5: {\n marginTop: 5,\n },\n marginTop10: {\n marginTop: 10,\n },\n marginTop15: {\n marginTop: 15,\n },\n marginTop20: {\n marginTop: 20,\n },\n padding20: {\n padding: 20,\n },\n paddingTop10Bottom15: {\n paddingTop: 10,\n paddingBottom: 15,\n },\n paddingVertical10: {\n paddingVertical: 10,\n },\n paddingVertical10Left10: {\n paddingVertical: 10,\n paddingLeft: 10,\n },\n paddingVertical10Right10: {\n paddingVertical: 10,\n paddingRight: 10,\n },\n paddingRight10: {\n paddingRight: 10,\n },\n fontSize17: {\n fontSize: 17,\n },\n fontBoldColorRed: {\n fontWeight: \"bold\",\n color: \"red\",\n },\n backgroundWhite: {\n backgroundColor: \"#ffffff\",\n },\n width100PmarginVertical10borderNone: {\n width: \"100%\",\n marginVertical: 10,\n borderColor: 'none',\n },\n width100PmarginVertical10borderNoneMinHeight: {\n width: \"100%\",\n marginVertical: 10,\n borderColor: 'none',\n ...Platform.select({\n ios: {\n minHeight: 20 * 5\n },\n })\n },\n width100PmarginVertical10border1: {\n width: \"100%\",\n marginVertical: 10,\n borderWidth: 1,\n padding: 10,\n borderColor: '#000000',\n },\n snackWrapper: {\n alignSelf: \"center\",\n zIndex: 1,\n width: 326,\n },\n link: {\n color: \"#0000EE\",\n textDecorationLine: \"underline\",\n },\n});\n\nconst LOGIN_STATE = Object.freeze({\n LOGGED_OUT: 0,\n LOGGED_IN_LOCALLY: 1,\n LOGGED_IN_REMOTELY: 2,\n});\n\nconst DEFAULT_LOGIN_STATE = LOGIN_STATE.LOGGED_IN_LOCALLY;\n\nconst DISPATCH = Object.freeze({\n RESET_STATE: \"resetState\",\n SET_INITIAL_DATA: \"setInitialData\",\n LIGHT_MODE: \"lightMode\",\n EXTRA_DEBUG: \"extraDebug\",\n SET_LAST_MAIN_VIEW: \"setLastMainView\",\n SET_DELIVERY_LOCATION_FILTER: \"setDeliveryLocationFilter\",\n SET_MAP_CENTER: \"setMapCenter\",\n MOVE_MAP: \"moveMap\",\n UPDATE_DATA_FILTER: \"updateDataFilter\",\n UPDATE_LAST_GPS_LOCATION: \"updateLastGPSLocation\",\n});\n\nconst LOCAL_DATA_KEYS = Object.freeze({\n REMOTE_SESSION: \"remoteSession\",\n FILTER_DATA: \"filterData\",\n DATA_FILTER: \"dataFilter\",\n USED_APP_BEFORE: \"usedAppBefore\",\n USED_QUICK_FILTER_BEFORE: \"usedQuickFilterBefore\",\n SEEN_SUBSCRIBE_POPUP: \"seenSubscribePopup\",\n});\n\nconst SIMPLE_GLOBAL_STATE = Object.freeze({\n DEFAULT_SHOW_DEBUG: \"defaultShowDebug\",\n PRODUCER_SEARCH: \"producerSearch\",\n PRODUCT_SEARCH: \"productSearch\",\n});\n\n// https://developers.google.com/maps/documentation/javascript/overview\n// https://developers.google.com/maps/documentation/javascript/react-map\n// https://developers.google.com/maps/documentation/javascript/adding-a-google-map\n// https://developers.google.com/maps/documentation/javascript/overview#MapOptions\n// https://developers.google.com/maps/documentation/javascript/reference\n// https://developers.google.com/maps/documentation/javascript/reference/map#Map\nconst ZOOM_LEVELS = Object.freeze({\n WORLD: 1,\n CONTINENT: 5,\n CITY: 10,\n STREETS: 15,\n BUILDINGS: 20,\n});\n\nconst DEFAULT_ZOOMED = ZOOM_LEVELS.CITY + 1;\n\n// In the middle of the \"United States\" text of Google Maps\nconst CENTER_UNITED_STATES = {\n lat: 39.837917118760664,\n lng: -101.47794131398716,\n};\n\n// https://developers.google.com/maps/documentation/javascript/style-reference#style-features\n// https://developers.google.com/maps/documentation/javascript/style-reference#style-elements\n// https://developers.google.com/maps/documentation/javascript/style-reference#stylers\nconst MAP_FEATURES = [\n {\n featureType: \"poi\",\n elementType: \"labels\",\n stylers: [{ visibility: \"off\" }],\n },\n {\n featureType: \"transit\",\n elementType: \"labels\",\n stylers: [{ visibility: \"off\" }],\n },\n {\n featureType: \"administrative.neighborhood\",\n elementType: \"labels\",\n stylers: [{ visibility: \"off\" }],\n },\n /*\n // This removes suburb names but also removes city names:\n {\n featureType: \"administrative.locality\",\n elementType: \"labels\",\n stylers: [{ visibility: \"off\" }],\n },\n */\n];\n\n// When adding here, also add to SCREEN_LINKS\nconst SCREENS = Object.freeze({\n HOME: \"Home\",\n MAP_STACK: \"MapStack\",\n MAP: \"Map\",\n SUGGEST_STACK: \"SuggestStack\",\n MORE_STACK: \"MoreStack\",\n LOCATION_DETAILS: \"LocationDetails\",\n LOCATION_ONLINE_DETAILS: \"LocationOnlineDetails\",\n LOCATION_LIST_DETAILS: \"LocationListDetails\",\n PRODUCT_DETAILS: \"Product Details\",\n PRODUCT_ONLINE_DETAILS: \"ProductOnlineDetails\",\n PRODUCT_EXPLORE_DETAILS: \"ProductExploreDetails\",\n FILTER: \"Filter\",\n FILTER_MAP: \"FilterMap\",\n ADD_LOCATION: \"AddLocation\",\n MORE: \"More\",\n FAQ: \"FAQ\",\n MORE_CONTACT: \"MoreContact\",\n MORE_ABOUT: \"MoreAbout\",\n MORE_PRIVACY: \"MorePrivacy\",\n MORE_TERMS: \"MoreTerms\",\n MORE_SUGGEST_LOCATION: \"MoreSuggestLocation\",\n MORE_LIST_LOCATIONS_NEAR: \"MoreListLocationsNear\",\n MORE_DEBUG: \"MoreDebug\",\n MORE_NEWS: \"MoreNews\",\n MORE_TEST: \"MoreTest\",\n MORE_SUBSCRIBE: \"MoreSubscribe\",\n LEARN: \"Learn\",\n CREDITS: \"Credits\",\n DELIVERY: \"Delivery\",\n DELIVERY_STACK: \"DeliveryStack\",\n COARSE_FILTER: \"Filter\",\n ALL_PRODUCTS: \"AllProducts\",\n ALL_PRODUCERS: \"AllProducers\",\n PRODUCTS_ALL_DETAILS: \"AllProductDetails\",\n EXPLORE: \"Explore\",\n EXPLORE_STACK: \"ExploreStack\",\n SEARCH: \"Search\",\n});\n\nconst SCREEN_LINKS = Object.freeze({\n [SCREENS.HOME]: \"map\",\n [SCREENS.MAP]: \"map\",\n [SCREENS.MAP_STACK]: \"map\",\n [SCREENS.LOCATION_DETAILS]: \"place/:locationid\",\n [SCREENS.PRODUCT_DETAILS]: \"product/:productid\",\n [SCREENS.DELIVERY]: \"delivery\",\n [SCREENS.DELIVERY_STACK]: \"delivery\",\n [SCREENS.LOCATION_ONLINE_DETAILS]: \"place_delivery/:locationid/:online\",\n [SCREENS.LOCATION_LIST_DETAILS]: \"place_list/:locationid\",\n [SCREENS.PRODUCT_ONLINE_DETAILS]: \"product_delivery/:productid\",\n [SCREENS.PRODUCT_EXPLORE_DETAILS]: \"product_explore/:productid\",\n [SCREENS.FILTER]: \"filter\",\n [SCREENS.FILTER_MAP]: \"quickfilter\",\n [SCREENS.ADD_LOCATION]: \"add\",\n [SCREENS.FAQ]: \"faq\",\n [SCREENS.MORE_STACK]: \"more\",\n [SCREENS.MORE]: \"more\",\n [SCREENS.MORE_NEWS]: \"news\",\n [SCREENS.MORE_TEST]: \"test\",\n [SCREENS.LEARN]: \"learn\",\n [SCREENS.CREDITS]: \"credits\",\n [SCREENS.MORE_CONTACT]: \"contact\",\n [SCREENS.MORE_SUBSCRIBE]: \"subscribe\",\n [SCREENS.MORE_ABOUT]: \"about\",\n [SCREENS.MORE_PRIVACY]: \"privacy\",\n [SCREENS.MORE_TERMS]: \"terms\",\n [SCREENS.SUGGEST_STACK]: \"suggest\",\n [SCREENS.MORE_SUGGEST_LOCATION]: \"suggest\",\n [SCREENS.MORE_LIST_LOCATIONS_NEAR]: \"listnear\",\n [SCREENS.MORE_DEBUG]: \"debug\",\n [SCREENS.ALL_PRODUCTS]: \"allproducts\",\n [SCREENS.ALL_PRODUCERS]: \"allproducers\",\n [SCREENS.PRODUCTS_ALL_DETAILS]: \"allproducts/:productid\",\n [SCREENS.EXPLORE]: \"explore\",\n [SCREENS.EXPLORE_STACK]: \"explore\",\n [SCREENS.SEARCH]: \"search\",\n});\n\nconst SCREEN_TITLES = Object.freeze({\n [SCREENS.HOME]: \"Home\",\n [SCREENS.MAP]: \"Map\",\n [SCREENS.MAP_STACK]: \"Map\",\n [SCREENS.DELIVERY]: \"Delivery\",\n [SCREENS.DELIVERY_STACK]: \"Delivery\",\n [SCREENS.FILTER]: \"Filter\",\n [SCREENS.FILTER_MAP]: \"Filter\",\n [SCREENS.ADD_LOCATION]: \"Add Location\",\n [SCREENS.FAQ]: \"FAQ\",\n [SCREENS.MORE_STACK]: \"More Links\",\n [SCREENS.MORE]: \"More Links\",\n [SCREENS.MORE_NEWS]: \"News\",\n [SCREENS.MORE_TEST]: \"Test\",\n [SCREENS.LEARN]: \"Learn More\",\n [SCREENS.CREDITS]: \"Credits\",\n [SCREENS.MORE_CONTACT]: \"Contact Us\",\n [SCREENS.MORE_SUBSCRIBE]: \"Subscribe\",\n [SCREENS.MORE_ABOUT]: \"About\",\n [SCREENS.MORE_PRIVACY]: \"Privacy\",\n [SCREENS.MORE_TERMS]: \"Terms & Conditions\",\n [SCREENS.SUGGEST_STACK]: \"Suggest New Location\",\n [SCREENS.MORE_SUGGEST_LOCATION]: \"Suggest New Location\",\n [SCREENS.MORE_DEBUG]: \"Debug\",\n [SCREENS.ALL_PRODUCTS]: \"All Products\",\n [SCREENS.ALL_PRODUCERS]: \"All Producers\",\n [SCREENS.EXPLORE]: \"Explore\",\n [SCREENS.EXPLORE_STACK]: \"Explore\",\n [SCREENS.SEARCH]: \"Search\",\n});\n\n// https://callstack.github.io/react-native-paper/theming.html\nconst REACT_NATIVE_PAPER_THEME = {\n ...PaperDefaultTheme,\n roundness: 2,\n colors: {\n ...PaperDefaultTheme.colors,\n primary: '#000000',\n },\n};\n\nconst CERTIFICATION_NAMES = Object.freeze({\n ANIMAL_WELFARE_APPROVED: \"Animal Welfare Approved by AGW\",\n CERTIFIED_HUMANE: \"Certified Humane®\",\n APPLEGATE_HUMANELY_RAISED: \"Applegate Humanely Raised®\",\n GAP: \"Global Animal Partnership®\",\n GAP_FISH: \"Global Animal Partnership® Salmon Welfare\",\n AGW_CERTIFIED_GRASSFED: \"Certified Grassfed by AGW\",\n AGW_CERTIFIED_NONGMO: \"Certified Non-GMO by AGW\",\n AGW_CERTIFIED_ORGANIC: \"Certified Organic by AGW\",\n AGW_CERTIFIED_REGENERATIVE: \"Certified Regenerative by AGW\",\n AGW_SALMON_WELFARE_CERTIFIED: \"Salmon Welfare Certified by AGW\",\n AMERICAN_HUMANE_CERTIFIED: \"American Humane Certified™\",\n AMERICAN_GRASSFED_ASSOCIATION: \"American Grassfed Association®\",\n USDA_ORGANIC: \"USDA Organic\",\n FOOD_ALLIANCE_CERTIFIED: \"Food Alliance Certified™\",\n ONE_HEALTH_CERTIFIED: \"One Health Certified\",\n SELF_CERTIFIED: \"Self-Certified Humanely Raised\",\n REGENERATIVE_ORGANIC_CERTIFIED: \"Regenerative Organic Certified®\",\n BETTER_CHICKEN_PROJECT: \"Better Chicken Project\",\n});\n\nconst ASPCA_RECOMMENDED_SUFFIX = \" (ASPCA-Recommended)\";\n\nconst TYPE_KEYS = Object.freeze({\n TITLE: \"title\",\n DATABASE_KEY: \"dbkey\",\n URL_KEY: \"urlkey\",\n});\n\n// The order of elements controls the order in the Search pane\nconst PRODUCT_TYPES = Object.freeze({\n CHICKEN: { [TYPE_KEYS.URL_KEY]: \"ch\", [TYPE_KEYS.TITLE]: \"Chicken\", [TYPE_KEYS.DATABASE_KEY]: \"chicken\" },\n CHICKEN_EGGS: { [TYPE_KEYS.URL_KEY]: \"che\", [TYPE_KEYS.TITLE]: \"Eggs (Chicken)\", [TYPE_KEYS.DATABASE_KEY]: \"eggs\", },\n COW: { [TYPE_KEYS.URL_KEY]: \"c\", [TYPE_KEYS.TITLE]: \"Cow\", [TYPE_KEYS.DATABASE_KEY]: \"beef\", },\n VEAL: { [TYPE_KEYS.URL_KEY]: \"vl\", [TYPE_KEYS.TITLE]: \"Veal\", [TYPE_KEYS.DATABASE_KEY]: \"veal\", },\n GOAT: { [TYPE_KEYS.URL_KEY]: \"g\", [TYPE_KEYS.TITLE]: \"Goat\", [TYPE_KEYS.DATABASE_KEY]: \"goat\", },\n LAMB: { [TYPE_KEYS.URL_KEY]: \"lb\", [TYPE_KEYS.TITLE]: \"Lamb\", [TYPE_KEYS.DATABASE_KEY]: \"lamb\", },\n MUTTON: { [TYPE_KEYS.URL_KEY]: \"m\", [TYPE_KEYS.TITLE]: \"Mutton\", [TYPE_KEYS.DATABASE_KEY]: \"mutton\", },\n COW_DAIRY: { [TYPE_KEYS.URL_KEY]: \"cd\", [TYPE_KEYS.TITLE]: \"Dairy (Cow Milk)\", [TYPE_KEYS.DATABASE_KEY]: \"dairy\", },\n GOAT_DAIRY: { [TYPE_KEYS.URL_KEY]: \"gd\", [TYPE_KEYS.TITLE]: \"Dairy (Goat Milk)\", [TYPE_KEYS.DATABASE_KEY]: \"dairygoat\", },\n SHEEP_DAIRY: { [TYPE_KEYS.URL_KEY]: \"sd\", [TYPE_KEYS.TITLE]: \"Dairy (Sheep Milk)\", [TYPE_KEYS.DATABASE_KEY]: \"dairysheep\", },\n COW_CHEESE: { [TYPE_KEYS.TITLE]: \"Cheese (Cow Milk)\", [TYPE_KEYS.DATABASE_KEY]: \"cheese\", [TYPE_KEYS.URL_KEY]: \"cc\" },\n GOAT_CHEESE: { [TYPE_KEYS.URL_KEY]: \"gc\", [TYPE_KEYS.TITLE]: \"Cheese (Goat Milk)\", [TYPE_KEYS.DATABASE_KEY]: \"cheesegoat\", },\n SHEEP_CHEESE: { [TYPE_KEYS.URL_KEY]: \"sc\", [TYPE_KEYS.TITLE]: \"Cheese (Sheep Milk)\", [TYPE_KEYS.DATABASE_KEY]: \"cheesesheep\", },\n PORK: { [TYPE_KEYS.URL_KEY]: \"po\", [TYPE_KEYS.TITLE]: \"Pork\", [TYPE_KEYS.DATABASE_KEY]: \"pork\", },\n BISON: { [TYPE_KEYS.URL_KEY]: \"b\", [TYPE_KEYS.TITLE]: \"Bison\", [TYPE_KEYS.DATABASE_KEY]: \"bison\", },\n TURKEY: { [TYPE_KEYS.URL_KEY]: \"t\", [TYPE_KEYS.TITLE]: \"Turkey\", [TYPE_KEYS.DATABASE_KEY]: \"turkey\", },\n TURKEY_EGGS: { [TYPE_KEYS.URL_KEY]: \"te\", [TYPE_KEYS.TITLE]: \"Eggs (Turkey)\", [TYPE_KEYS.DATABASE_KEY]: \"eggs_turkey\", },\n DUCK: { [TYPE_KEYS.URL_KEY]: \"d\", [TYPE_KEYS.TITLE]: \"Duck\", [TYPE_KEYS.DATABASE_KEY]: \"duck\", },\n DUCK_EGGS: { [TYPE_KEYS.URL_KEY]: \"de\", [TYPE_KEYS.TITLE]: \"Eggs (Duck)\", [TYPE_KEYS.DATABASE_KEY]: \"eggs_duck\", },\n VENISON: { [TYPE_KEYS.URL_KEY]: \"v\", [TYPE_KEYS.TITLE]: \"Venison\", [TYPE_KEYS.DATABASE_KEY]: \"venison\", },\n FOR_CATS: { [TYPE_KEYS.URL_KEY]: \"cf\", [TYPE_KEYS.TITLE]: \"Cat food\", [TYPE_KEYS.DATABASE_KEY]: \"catfood\", },\n FOR_DOGS: { [TYPE_KEYS.URL_KEY]: \"df\", [TYPE_KEYS.TITLE]: \"Dog food\", [TYPE_KEYS.DATABASE_KEY]: \"dogfood\", },\n FISH: { [TYPE_KEYS.URL_KEY]: \"f\", [TYPE_KEYS.TITLE]: \"Fish\", [TYPE_KEYS.DATABASE_KEY]: \"fish\", },\n PANTRY: { [TYPE_KEYS.URL_KEY]: \"pa\", [TYPE_KEYS.TITLE]: \"Pantry Foods\", [TYPE_KEYS.DATABASE_KEY]: \"pantry\", },\n SWEETS: { [TYPE_KEYS.URL_KEY]: \"sw\", [TYPE_KEYS.TITLE]: \"Sweets & Baked Goods\", [TYPE_KEYS.DATABASE_KEY]: \"sweet\", },\n BATH_BODY: { [TYPE_KEYS.URL_KEY]: \"bb\", [TYPE_KEYS.TITLE]: \"Bath, Body & Skin Care\", [TYPE_KEYS.DATABASE_KEY]: \"bath_body\", },\n LEATHER: { [TYPE_KEYS.URL_KEY]: \"le\", [TYPE_KEYS.TITLE]: \"Leather\", [TYPE_KEYS.DATABASE_KEY]: \"leather\", },\n ACCESSORIES: { [TYPE_KEYS.URL_KEY]: \"a\", [TYPE_KEYS.TITLE]: \"Accessories\", [TYPE_KEYS.DATABASE_KEY]: \"accessories\", },\n CLOTHING: { [TYPE_KEYS.URL_KEY]: \"ci\", [TYPE_KEYS.TITLE]: \"Clothing\", [TYPE_KEYS.DATABASE_KEY]: \"clothing\", },\n HOME_GOODS: { [TYPE_KEYS.URL_KEY]: \"hg\", [TYPE_KEYS.TITLE]: \"Home Goods\", [TYPE_KEYS.DATABASE_KEY]: \"homegoods\", },\n //FARM_STAY: { [TYPE_KEYS.URL_KEY]: \"fs\", [TYPE_KEYS.TITLE]: \"Overnight Farmstay\", [TYPE_KEYS.DATABASE_KEY]: \"farmstay\", },\n});\n\nconst SYNTHESIZED_TYPES = Object.freeze({\n FOR_HUMANS: { [TYPE_KEYS.URL_KEY]: \"h\", [TYPE_KEYS.TITLE]: \"For People\", [TYPE_KEYS.DATABASE_KEY]: \"for_humans\", },\n FOR_PETS: { [TYPE_KEYS.URL_KEY]: \"p\", [TYPE_KEYS.TITLE]: \"For Pets\", [TYPE_KEYS.DATABASE_KEY]: \"for_pets\", },\n GENERAL_SEARCH: { [TYPE_KEYS.URL_KEY]: \"q\", [TYPE_KEYS.TITLE]: \"Search\", [TYPE_KEYS.DATABASE_KEY]: \"generalsearch\", },\n LOCATION_ID: { [TYPE_KEYS.URL_KEY]: \"l\", [TYPE_KEYS.TITLE]: \"Location\", [TYPE_KEYS.DATABASE_KEY]: \"l\", },\n PRODUCER: { [TYPE_KEYS.URL_KEY]: \"pr\", [TYPE_KEYS.TITLE]: \"Producer\", [TYPE_KEYS.DATABASE_KEY]: \"pr\", },\n PRODUCT: { [TYPE_KEYS.URL_KEY]: \"pt\", [TYPE_KEYS.TITLE]: \"Product\", [TYPE_KEYS.DATABASE_KEY]: \"pt\", },\n QUERY_ID: { [TYPE_KEYS.URL_KEY]: \"qid\", [TYPE_KEYS.TITLE]: \"Query\", [TYPE_KEYS.DATABASE_KEY]: \"qid\", },\n});\n\nconst GROUP_TYPES = Object.freeze({\n PASTURE: { [TYPE_KEYS.URL_KEY]: \"pasture\", [TYPE_KEYS.TITLE]: \"Pasture\", [TYPE_KEYS.DATABASE_KEY]: \"pasture\", },\n OUTDOORS: { [TYPE_KEYS.URL_KEY]: \"outdoorsplus\", [TYPE_KEYS.TITLE]: \"Outdoors+\", [TYPE_KEYS.DATABASE_KEY]: \"outdoorsplus\", },\n INDOORS: { [TYPE_KEYS.URL_KEY]: \"indoorsplus\", [TYPE_KEYS.TITLE]: \"Indoors+\", [TYPE_KEYS.DATABASE_KEY]: \"indoorsplus\", },\n});\n\nconst WELFARE_CERTIFICATIONS = Object.freeze({\n ANIMAL_WELFARE_APPROVED: { [TYPE_KEYS.URL_KEY]: \"aw\", [TYPE_KEYS.TITLE]: \"Animal Welfare Approved by AGW\", [TYPE_KEYS.DATABASE_KEY]: \"animal_welfare_approved\", },\n CERTIFIED_REGENERATIVE: { [TYPE_KEYS.URL_KEY]: \"cw\", [TYPE_KEYS.TITLE]: \"Certified Regenerative by AGW\", [TYPE_KEYS.DATABASE_KEY]: \"agw_certified_regenerative\", },\n CERTIFIED_GRASSFED: { [TYPE_KEYS.URL_KEY]: \"cs\", [TYPE_KEYS.TITLE]: \"Certified Grassfed by AGW\", [TYPE_KEYS.DATABASE_KEY]: \"agw_certified_grassfed\", },\n CERTIFIED_NON_GMO: { [TYPE_KEYS.URL_KEY]: \"cm\", [TYPE_KEYS.TITLE]: \"Certified Non-GMO by AGW\", [TYPE_KEYS.DATABASE_KEY]: \"agw_certified_non_gmo\", },\n CERTIFIED_ORGANIC: { [TYPE_KEYS.URL_KEY]: \"co\", [TYPE_KEYS.TITLE]: \"Certified Organic by AGW\", [TYPE_KEYS.DATABASE_KEY]: \"agw_certified_organic\", },\n REGENERATIVE_ORGANIC_CERTIFIED: { [TYPE_KEYS.URL_KEY]: \"ro\", [TYPE_KEYS.TITLE]: \"Regenerative Organic Certified®\", [TYPE_KEYS.DATABASE_KEY]: \"regenerative_organic_certified\", },\n CERTIFIED_HUMANE: { [TYPE_KEYS.URL_KEY]: \"cu\", [TYPE_KEYS.TITLE]: \"Certified Humane®\", [TYPE_KEYS.DATABASE_KEY]: \"certified_humane\", },\n CERTIFIED_HUMANE_FREE_RANGE: { [TYPE_KEYS.URL_KEY]: \"hr\", [TYPE_KEYS.TITLE]: \"Certified Humane® + Free range\", [TYPE_KEYS.DATABASE_KEY]: \"certified_humane_free_range\", },\n CERTIFIED_HUMANE_GRASS_FED: { [TYPE_KEYS.URL_KEY]: \"ca\", [TYPE_KEYS.TITLE]: \"Certified Humane® + Grass-fed\", [TYPE_KEYS.DATABASE_KEY]: \"certified_humane_grass_fed\", },\n CERTIFIED_HUMANE_PASTURE_RAISED: { [TYPE_KEYS.URL_KEY]: \"hp\", [TYPE_KEYS.TITLE]: \"Certified Humane® + Pasture Raised\", [TYPE_KEYS.DATABASE_KEY]: \"certified_humane_pasture_raised_grass_fed\", },\n //ANIMAL_WELFARE_CERTIFIED_1: { [TYPE_KEYS.URL_KEY]: \"a1\", [TYPE_KEYS.TITLE]: \"Global Animal Partnership® Step 1\", [TYPE_KEYS.DATABASE_KEY]: \"animal_welfare_certified_1\", },\n ANIMAL_WELFARE_CERTIFIED_2: { [TYPE_KEYS.URL_KEY]: \"a2\", [TYPE_KEYS.TITLE]: \"Global Animal Partnership® Step 2\", [TYPE_KEYS.DATABASE_KEY]: \"animal_welfare_certified_2\", },\n ANIMAL_WELFARE_CERTIFIED_3: { [TYPE_KEYS.URL_KEY]: \"a3\", [TYPE_KEYS.TITLE]: \"Global Animal Partnership® Step 3\", [TYPE_KEYS.DATABASE_KEY]: \"animal_welfare_certified_3\", },\n ANIMAL_WELFARE_CERTIFIED_4: { [TYPE_KEYS.URL_KEY]: \"a4\", [TYPE_KEYS.TITLE]: \"Global Animal Partnership® Step 4\", [TYPE_KEYS.DATABASE_KEY]: \"animal_welfare_certified_4\", },\n ANIMAL_WELFARE_CERTIFIED_5: { [TYPE_KEYS.URL_KEY]: \"a5\", [TYPE_KEYS.TITLE]: \"Global Animal Partnership® Step 5\", [TYPE_KEYS.DATABASE_KEY]: \"animal_welfare_certified_5\", },\n ANIMAL_WELFARE_CERTIFIED_6: { [TYPE_KEYS.URL_KEY]: \"a6\", [TYPE_KEYS.TITLE]: \"Global Animal Partnership® Step 5+\", [TYPE_KEYS.DATABASE_KEY]: \"animal_welfare_certified_6\", },\n BETTER_CHICKEN_PROJECT: { [TYPE_KEYS.URL_KEY]: \"bc\", [TYPE_KEYS.TITLE]: \"Better Chicken Project\", [TYPE_KEYS.DATABASE_KEY]: \"better_chicken_project\", },\n //APPLEGATE_HUMANELY_RAISED: { [TYPE_KEYS.URL_KEY]: \"ah\", [TYPE_KEYS.TITLE]: \"Applegate Humanely Raised\", [TYPE_KEYS.DATABASE_KEY]: \"applegate_humanely_raised\", },\n AMERICAN_GRASSFED_ASSOCIATION: { [TYPE_KEYS.URL_KEY]: \"ag\", [TYPE_KEYS.TITLE]: \"American Grassfed Association\", [TYPE_KEYS.DATABASE_KEY]: \"american_grassfed_association\", },\n USDA_ORGANIC: { [TYPE_KEYS.URL_KEY]: \"o\", [TYPE_KEYS.TITLE]: \"USDA Organic\", [TYPE_KEYS.DATABASE_KEY]: \"usda_organic\", },\n //ANIMAL_WELFARE_CERTIFIED_FISH_1: { [TYPE_KEYS.URL_KEY]: \"s1\", [TYPE_KEYS.TITLE]: \"Global Animal Partnership® Salmon Welfare Step 1\", [TYPE_KEYS.DATABASE_KEY]: \"animal_welfare_certified_fish_1\", },\n //ANIMAL_WELFARE_CERTIFIED_FISH_3: { [TYPE_KEYS.URL_KEY]: \"s3\", [TYPE_KEYS.TITLE]: \"Global Animal Partnership® Salmon Welfare Step 3\", [TYPE_KEYS.DATABASE_KEY]: \"animal_welfare_certified_fish_3\", },\n //ANIMAL_WELFARE_CERTIFIED_FISH_6: { [TYPE_KEYS.URL_KEY]: \"s6\", [TYPE_KEYS.TITLE]: \"Global Animal Partnership® Salmon Welfare Step 5+\", [TYPE_KEYS.DATABASE_KEY]: \"animal_welfare_certified_fish_6\", },\n //AGW_SALMON_WELFARE_CERTIFIED: { [TYPE_KEYS.URL_KEY]: \"as\", [TYPE_KEYS.TITLE]: \"Salmon Welfare Certified by AGW\", [TYPE_KEYS.DATABASE_KEY]: \"agw_salmon_welfare_certified\", },\n});\n\nconst EXTRA_ANIMAL_WELFARE = Object.freeze({\n REGENERATIVE_FARM: { [TYPE_KEYS.URL_KEY]: \"r\", [TYPE_KEYS.TITLE]: \"Regenerative Farm\", [TYPE_KEYS.DATABASE_KEY]: \"restorativefarms\", },\n SLAUGHTERED_ON_FARM: { [TYPE_KEYS.URL_KEY]: \"sl\", [TYPE_KEYS.TITLE]: \"Slaughtered On Farm\", [TYPE_KEYS.DATABASE_KEY]: \"slaughtered_without_transport\", },\n NO_HORMONES: { [TYPE_KEYS.URL_KEY]: \"nh\", [TYPE_KEYS.TITLE]: \"No Hormones\", [TYPE_KEYS.DATABASE_KEY]: \"nohormones\", },\n NO_ANTIBIOTICS: { [TYPE_KEYS.URL_KEY]: \"na\", [TYPE_KEYS.TITLE]: \"No Antibiotics\", [TYPE_KEYS.DATABASE_KEY]: \"noantibiotics\", },\n PASTURE_RAISED: { [TYPE_KEYS.URL_KEY]: \"pd\", [TYPE_KEYS.TITLE]: \"Pasture Raised\", [TYPE_KEYS.DATABASE_KEY]: \"pastureraised\", },\n GRASS_FED: { [TYPE_KEYS.URL_KEY]: \"gf\", [TYPE_KEYS.TITLE]: \"Grass-fed\", [TYPE_KEYS.DATABASE_KEY]: \"grassfed\", },\n GRASS_FINISHED: { [TYPE_KEYS.URL_KEY]: \"gs\", [TYPE_KEYS.TITLE]: \"Grass-finished\", [TYPE_KEYS.DATABASE_KEY]: \"grassfinished\", },\n VEGETARIAN_DIET: { [TYPE_KEYS.URL_KEY]: \"vd\", [TYPE_KEYS.TITLE]: \"Vegetarian diet\", [TYPE_KEYS.DATABASE_KEY]: \"vegetariandiet\", },\n FREE_RANGE: { [TYPE_KEYS.URL_KEY]: \"fg\", [TYPE_KEYS.TITLE]: \"Free-range\", [TYPE_KEYS.DATABASE_KEY]: \"freerange\", },\n NO_PESTICIDES: { [TYPE_KEYS.URL_KEY]: \"np\", [TYPE_KEYS.TITLE]: \"No Pesticides\", [TYPE_KEYS.DATABASE_KEY]: \"nopesticides\", },\n SMALL_FAMILY_FARMS: { [TYPE_KEYS.URL_KEY]: \"sf\", [TYPE_KEYS.TITLE]: \"Small family farms\", [TYPE_KEYS.DATABASE_KEY]: \"smallfamilyfarms\", },\n CAGE_FREE: { [TYPE_KEYS.URL_KEY]: \"nf\", [TYPE_KEYS.TITLE]: \"Cage-free\", [TYPE_KEYS.DATABASE_KEY]: \"cagefree\", },\n B_CORPORATION: { [TYPE_KEYS.URL_KEY]: \"bn\", [TYPE_KEYS.TITLE]: \"Certified B Corporation\", [TYPE_KEYS.DATABASE_KEY]: \"bcorporation\", },\n NO_CRATES: { [TYPE_KEYS.URL_KEY]: \"nt\", [TYPE_KEYS.TITLE]: \"No Crates\", [TYPE_KEYS.DATABASE_KEY]: \"nocrates\", },\n NO_MALE_CULLING: { [TYPE_KEYS.URL_KEY]: \"nu\", [TYPE_KEYS.TITLE]: \"No Male Culling\", [TYPE_KEYS.DATABASE_KEY]: \"nomaleculling\", },\n CERTIFIED_CARBONNEUTRAL: { [TYPE_KEYS.URL_KEY]: \"cn\", [TYPE_KEYS.TITLE]: \"Certified CarbonNeutral®\", [TYPE_KEYS.DATABASE_KEY]: \"carbonneutralcertified\", },\n LIVE_WEBCAM: { [TYPE_KEYS.URL_KEY]: \"lw\", [TYPE_KEYS.TITLE]: \"Live Webcam\", [TYPE_KEYS.DATABASE_KEY]: \"livewebcam\", },\n NO_BEAK_TRIMMING: { [TYPE_KEYS.URL_KEY]: \"nb\", [TYPE_KEYS.TITLE]: \"No Beak Trimming\", [TYPE_KEYS.DATABASE_KEY]: \"nobeaktrimming\", },\n CONSISTENT_DAYLIGHT: { [TYPE_KEYS.URL_KEY]: \"dy\", [TYPE_KEYS.TITLE]: \"Consistent daylight access\", [TYPE_KEYS.DATABASE_KEY]: \"consistentdaylight\", },\n UPCYCLED_FEED: { [TYPE_KEYS.URL_KEY]: \"up\", [TYPE_KEYS.TITLE]: \"Up-cycled Feed\", [TYPE_KEYS.DATABASE_KEY]: \"upcycledfeed\", },\n USDA_GRASSFED: { [TYPE_KEYS.URL_KEY]: \"ug\", [TYPE_KEYS.TITLE]: \"USDA Certified Grassfed\", [TYPE_KEYS.DATABASE_KEY]: \"usda_certified_grassfed\", },\n UNVACCINATED: { [TYPE_KEYS.URL_KEY]: \"u\", [TYPE_KEYS.TITLE]: \"Unvaccinated\", [TYPE_KEYS.DATABASE_KEY]: \"unvaccinated\", },\n WEANED_NATURALLY: { [TYPE_KEYS.URL_KEY]: \"wn\", [TYPE_KEYS.TITLE]: \"Weaned naturally\", [TYPE_KEYS.DATABASE_KEY]: \"weaned_naturally\", },\n});\n\n// for i in $(awk '/INGREDIENTS =/ {go=1;} $0 == \"});\" {go=0;} go && /\\[TYPE_KEYS.DATABASE_KEY\\]:/ {gsub(/[\",]/, \"\"); print $(NF-1);}' js/context/AppConstants.js); do echo \"$i;\"; echo \"select count(*) from find_humane_humane_location_humane_products a inner join find_humane_humane_products b on a.find_humane_humane_product_id = b.id where b.$i is true;\"; done\nconst INGREDIENTS = Object.freeze({\n //PARTIALLY_HUMANE: { [TYPE_KEYS.URL_KEY]: \"ph\", [TYPE_KEYS.TITLE]: \"\", [TYPE_KEYS.DATABASE_KEY]: \"partiallyhumane\", },\n KOSHER: { [TYPE_KEYS.URL_KEY]: \"k\", [TYPE_KEYS.TITLE]: \"Kosher\", [TYPE_KEYS.DATABASE_KEY]: \"kosher\", },\n HALAL: { [TYPE_KEYS.URL_KEY]: \"ha\", [TYPE_KEYS.TITLE]: \"Halal\", [TYPE_KEYS.DATABASE_KEY]: \"halal\", },\n ZERO_SUGARS: { [TYPE_KEYS.URL_KEY]: \"zs\", [TYPE_KEYS.TITLE]: \"Zero Sugars\", [TYPE_KEYS.DATABASE_KEY]: \"zerocarbs\", },\n MICROWAVABLE: { [TYPE_KEYS.URL_KEY]: \"mi\", [TYPE_KEYS.TITLE]: \"Microwavable\", [TYPE_KEYS.DATABASE_KEY]: \"microwavable\", },\n FULLY_COOKED: { [TYPE_KEYS.URL_KEY]: \"fc\", [TYPE_KEYS.TITLE]: \"Fully Cooked\", [TYPE_KEYS.DATABASE_KEY]: \"fullycooked\", },\n FROZEN: { [TYPE_KEYS.URL_KEY]: \"fr\", [TYPE_KEYS.TITLE]: \"Frozen\", [TYPE_KEYS.DATABASE_KEY]: \"frozen\", },\n NO_CASEIN: { [TYPE_KEYS.URL_KEY]: \"nc\", [TYPE_KEYS.TITLE]: \"No Casein\", [TYPE_KEYS.DATABASE_KEY]: \"nocasein\", },\n GLUTEN_FREE: { [TYPE_KEYS.URL_KEY]: \"ng\", [TYPE_KEYS.TITLE]: \"Gluten-free\", [TYPE_KEYS.DATABASE_KEY]: \"glutenfree\", },\n NO_NITRATES: { [TYPE_KEYS.URL_KEY]: \"nn\", [TYPE_KEYS.TITLE]: \"No nitrates\", [TYPE_KEYS.DATABASE_KEY]: \"nonitrates\", },\n NO_SOY: { [TYPE_KEYS.URL_KEY]: \"ny\", [TYPE_KEYS.TITLE]: \"No Soy\", [TYPE_KEYS.DATABASE_KEY]: \"nosoy\", },\n NO_GMO: { [TYPE_KEYS.URL_KEY]: \"nm\", [TYPE_KEYS.TITLE]: \"No GMOs\", [TYPE_KEYS.DATABASE_KEY]: \"nongmo\", },\n NON_GMO_VERIFIED: { [TYPE_KEYS.URL_KEY]: \"nv\", [TYPE_KEYS.TITLE]: \"Non-GMO Project Verified\", [TYPE_KEYS.DATABASE_KEY]: \"nongmoproject\", },\n KETO_FRIENDLY: { [TYPE_KEYS.URL_KEY]: \"kf\", [TYPE_KEYS.TITLE]: \"Keto-friendly\", [TYPE_KEYS.DATABASE_KEY]: \"ketofriendly\", },\n PALEO_FRIENDLY: { [TYPE_KEYS.URL_KEY]: \"pf\", [TYPE_KEYS.TITLE]: \"Paleo-friendly\", [TYPE_KEYS.DATABASE_KEY]: \"paleofriendly\", },\n DAIRY_FREE: { [TYPE_KEYS.URL_KEY]: \"da\", [TYPE_KEYS.TITLE]: \"Dairy-free\", [TYPE_KEYS.DATABASE_KEY]: \"dairyfree\", },\n LOW_SODIUM: { [TYPE_KEYS.URL_KEY]: \"ls\", [TYPE_KEYS.TITLE]: \"Low Sodium\", [TYPE_KEYS.DATABASE_KEY]: \"lowsodium\", },\n //LOW_FAT: { [TYPE_KEYS.URL_KEY]: \"lf\", [TYPE_KEYS.TITLE]: \"Low Fat\", [TYPE_KEYS.DATABASE_KEY]: \"lowfat\", },\n NO_PRESERVATIVES: { [TYPE_KEYS.URL_KEY]: \"ns\", [TYPE_KEYS.TITLE]: \"No Preservatives\", [TYPE_KEYS.DATABASE_KEY]: \"nopreservatives\", },\n WHOLE30_APPROVED: { [TYPE_KEYS.URL_KEY]: \"w\", [TYPE_KEYS.TITLE]: \"Whole30 Approved®\", [TYPE_KEYS.DATABASE_KEY]: \"whole30approved\", },\n NO_ARTIFICIAL: { [TYPE_KEYS.URL_KEY]: \"nl\", [TYPE_KEYS.TITLE]: \"No Artificial Ingredients\", [TYPE_KEYS.DATABASE_KEY]: \"noartificial\", },\n CERTIFIED_PALEO: { [TYPE_KEYS.URL_KEY]: \"cp\", [TYPE_KEYS.TITLE]: \"Certified Paleo®\", [TYPE_KEYS.DATABASE_KEY]: \"certified_paleo\", },\n KETO_CERTIFIED: { [TYPE_KEYS.URL_KEY]: \"kc\", [TYPE_KEYS.TITLE]: \"Keto Certified™\", [TYPE_KEYS.DATABASE_KEY]: \"keto_certified\", },\n RECYCLABLE_PACKAGING: { [TYPE_KEYS.URL_KEY]: \"rp\", [TYPE_KEYS.TITLE]: \"Recyclable Packaging\", [TYPE_KEYS.DATABASE_KEY]: \"recyclablepackaging\", },\n NO_CORN: { [TYPE_KEYS.URL_KEY]: \"nr\", [TYPE_KEYS.TITLE]: \"No Corn\", [TYPE_KEYS.DATABASE_KEY]: \"nocorn\", },\n});\n\n// for i in $(awk '/LOCATION_FLAGS =/ {go=1;} $0 == \"});\" {go=0;} go && /\\[TYPE_KEYS.DATABASE_KEY\\]:/ {gsub(/[\",]/, \"\"); print $(NF-1);}' js/context/AppConstants.js); do echo \"$i;\"; echo \"select count(*) from find_humane_humane_location_humane_products a inner join find_humane_humane_locations b on a.find_humane_humane_location_id = b.id where b.$i IS TRUE;\"; done\nconst LOCATION_FLAGS = Object.freeze({\n GROCERY_STORE: { [TYPE_KEYS.URL_KEY]: \"go\", [TYPE_KEYS.TITLE]: \"Grocery store\", [TYPE_KEYS.DATABASE_KEY]: \"supermarket\", },\n RESTAURANT: { [TYPE_KEYS.URL_KEY]: \"re\", [TYPE_KEYS.TITLE]: \"Restaurant\", [TYPE_KEYS.DATABASE_KEY]: \"restaurant\", },\n FARM: { [TYPE_KEYS.URL_KEY]: \"fa\", [TYPE_KEYS.TITLE]: \"Farm\", [TYPE_KEYS.DATABASE_KEY]: \"farm\", },\n FARM_STORE: { [TYPE_KEYS.URL_KEY]: \"fm\", [TYPE_KEYS.TITLE]: \"Farm store\", [TYPE_KEYS.DATABASE_KEY]: \"farm_store\", },\n FARMERS_MARKET: { [TYPE_KEYS.URL_KEY]: \"ft\", [TYPE_KEYS.TITLE]: \"Farmers Market\", [TYPE_KEYS.DATABASE_KEY]: \"farmers_market\", },\n CSA: { [TYPE_KEYS.URL_KEY]: \"ct\", [TYPE_KEYS.TITLE]: \"Community-Supported Agriculture (CSA)\", [TYPE_KEYS.DATABASE_KEY]: \"csa\", },\n FARM_STAY_LOCATION: { [TYPE_KEYS.URL_KEY]: \"fb\", [TYPE_KEYS.TITLE]: \"Farm Stay & BnB\", [TYPE_KEYS.DATABASE_KEY]: \"farm_stay_bnb\", },\n OFFERS_DELIVERY: { [TYPE_KEYS.URL_KEY]: \"od\", [TYPE_KEYS.TITLE]: \"Offers delivery\", [TYPE_KEYS.DATABASE_KEY]: \"online_shopping\", },\n CAFE: { [TYPE_KEYS.URL_KEY]: \"ce\", [TYPE_KEYS.TITLE]: \"Café\", [TYPE_KEYS.DATABASE_KEY]: \"coffeeshop\", },\n DINE_IN: { [TYPE_KEYS.URL_KEY]: \"di\", [TYPE_KEYS.TITLE]: \"Dine-in\", [TYPE_KEYS.DATABASE_KEY]: \"dinein\", },\n SOLAR_PANELS_USED: { [TYPE_KEYS.URL_KEY]: \"sp\", [TYPE_KEYS.TITLE]: \"Solar panels used\", [TYPE_KEYS.DATABASE_KEY]: \"solarpanels\", },\n BAKERY: { [TYPE_KEYS.URL_KEY]: \"by\", [TYPE_KEYS.TITLE]: \"Bakery\", [TYPE_KEYS.DATABASE_KEY]: \"bakery\", },\n SERVES_ALCOHOL: { [TYPE_KEYS.URL_KEY]: \"sv\", [TYPE_KEYS.TITLE]: \"Serves Alcohol\", [TYPE_KEYS.DATABASE_KEY]: \"servesalcohol\", },\n //FOOD_TRUCK: { [TYPE_KEYS.URL_KEY]: \"fu\", [TYPE_KEYS.TITLE]: \"Food truck\", [TYPE_KEYS.DATABASE_KEY]: \"foodtruck\", },\n ONLINE_ORDERING: { [TYPE_KEYS.URL_KEY]: \"on\", [TYPE_KEYS.TITLE]: \"Offers online ordering\", [TYPE_KEYS.DATABASE_KEY]: \"website_ordering\", },\n PRIVATE_EVENTS: { [TYPE_KEYS.URL_KEY]: \"pe\", [TYPE_KEYS.TITLE]: \"Private events\", [TYPE_KEYS.DATABASE_KEY]: \"private_events\", },\n WIFI: { [TYPE_KEYS.URL_KEY]: \"wf\", [TYPE_KEYS.TITLE]: \"WiFi\", [TYPE_KEYS.DATABASE_KEY]: \"wifi\", },\n WORK_ON_LAPTOP: { [TYPE_KEYS.URL_KEY]: \"lp\", [TYPE_KEYS.TITLE]: \"Place to work on laptop\", [TYPE_KEYS.DATABASE_KEY]: \"workonlaptop\", },\n BAR: { [TYPE_KEYS.URL_KEY]: \"br\", [TYPE_KEYS.TITLE]: \"Bar\", [TYPE_KEYS.DATABASE_KEY]: \"bar\", },\n //CLUB: { [TYPE_KEYS.URL_KEY]: \"cl\", [TYPE_KEYS.TITLE]: \"Club\", [TYPE_KEYS.DATABASE_KEY]: \"club\", },\n WINE_BAR: { [TYPE_KEYS.URL_KEY]: \"wb\", [TYPE_KEYS.TITLE]: \"Wine bar\", [TYPE_KEYS.DATABASE_KEY]: \"winebar\", },\n DISTILLERY: { [TYPE_KEYS.URL_KEY]: \"dl\", [TYPE_KEYS.TITLE]: \"Distillery\", [TYPE_KEYS.DATABASE_KEY]: \"distillery\", },\n COCKTAIL_BAR: { [TYPE_KEYS.URL_KEY]: \"cb\", [TYPE_KEYS.TITLE]: \"Cocktail bar\", [TYPE_KEYS.DATABASE_KEY]: \"cocktailbar\", },\n //SPEAKEASY: { [TYPE_KEYS.URL_KEY]: \"sy\", [TYPE_KEYS.TITLE]: \"Speakeasy\", [TYPE_KEYS.DATABASE_KEY]: \"speakeasy\", },\n //SPORTS_BAR: { [TYPE_KEYS.URL_KEY]: \"sb\", [TYPE_KEYS.TITLE]: \"Sports bar\", [TYPE_KEYS.DATABASE_KEY]: \"sportsbar\", },\n //DIVE_BAR: { [TYPE_KEYS.URL_KEY]: \"db\", [TYPE_KEYS.TITLE]: \"Dive bar\", [TYPE_KEYS.DATABASE_KEY]: \"divebar\", },\n //LIVE_MUSIC: { [TYPE_KEYS.URL_KEY]: \"lm\", [TYPE_KEYS.TITLE]: \"Live music\", [TYPE_KEYS.DATABASE_KEY]: \"livemusic\", },\n HOTEL: { [TYPE_KEYS.URL_KEY]: \"ho\", [TYPE_KEYS.TITLE]: \"Hotel\", [TYPE_KEYS.DATABASE_KEY]: \"hotel\", },\n //HOTEL_BAR: { [TYPE_KEYS.URL_KEY]: \"hb\", [TYPE_KEYS.TITLE]: \"Hotel bar\", [TYPE_KEYS.DATABASE_KEY]: \"hotelbar\", },\n //CIGAR_BAR: { [TYPE_KEYS.URL_KEY]: \"cg\", [TYPE_KEYS.TITLE]: \"Cigar bar\", [TYPE_KEYS.DATABASE_KEY]: \"cigarbar\", },\n //LOUNGE: { [TYPE_KEYS.URL_KEY]: \"lu\", [TYPE_KEYS.TITLE]: \"Lounge\", [TYPE_KEYS.DATABASE_KEY]: \"lounge\", },\n //ARCADE: { [TYPE_KEYS.URL_KEY]: \"ar\", [TYPE_KEYS.TITLE]: \"Arcade\", [TYPE_KEYS.DATABASE_KEY]: \"arcade\", },\n //COMEDY_CLUB: { [TYPE_KEYS.URL_KEY]: \"cy\", [TYPE_KEYS.TITLE]: \"Comedy club\", [TYPE_KEYS.DATABASE_KEY]: \"comedyclub\", },\n //KARAOKE_BAR: { [TYPE_KEYS.URL_KEY]: \"kk\", [TYPE_KEYS.TITLE]: \"Karaoke bar\", [TYPE_KEYS.DATABASE_KEY]: \"karaokebar\", },\n //TIKI_BAR: { [TYPE_KEYS.URL_KEY]: \"tk\", [TYPE_KEYS.TITLE]: \"Tiki bar\", [TYPE_KEYS.DATABASE_KEY]: \"tikibar\", },\n GIFT_SHOP: { [TYPE_KEYS.URL_KEY]: \"gi\", [TYPE_KEYS.TITLE]: \"Gift shop\", [TYPE_KEYS.DATABASE_KEY]: \"giftshop\", },\n HAIR_SALON: { [TYPE_KEYS.URL_KEY]: \"hs\", [TYPE_KEYS.TITLE]: \"Hair salon\", [TYPE_KEYS.DATABASE_KEY]: \"hairsalon\", },\n PICKUP_ONLINE_ORDERS: { [TYPE_KEYS.URL_KEY]: \"pp\", [TYPE_KEYS.TITLE]: \"Pickup online orders\", [TYPE_KEYS.DATABASE_KEY]: \"localpickup\", },\n ONLINE_ONLY: { [TYPE_KEYS.URL_KEY]: \"oo\", [TYPE_KEYS.TITLE]: \"Online-only\", [TYPE_KEYS.DATABASE_KEY]: \"onlineonly\", },\n BOUTIQUE: { [TYPE_KEYS.URL_KEY]: \"bo\", [TYPE_KEYS.TITLE]: \"Boutique\", [TYPE_KEYS.DATABASE_KEY]: \"boutique\", },\n SPA: { [TYPE_KEYS.URL_KEY]: \"sa\", [TYPE_KEYS.TITLE]: \"Spa\", [TYPE_KEYS.DATABASE_KEY]: \"spa\", },\n SUPPLEMENT_STORE: { [TYPE_KEYS.URL_KEY]: \"su\", [TYPE_KEYS.TITLE]: \"Supplement store\", [TYPE_KEYS.DATABASE_KEY]: \"supplementstore\", },\n GARDEN_CENTER: { [TYPE_KEYS.URL_KEY]: \"ga\", [TYPE_KEYS.TITLE]: \"Garden center\", [TYPE_KEYS.DATABASE_KEY]: \"gardencenter\", },\n HERB_SHOP: { [TYPE_KEYS.URL_KEY]: \"he\", [TYPE_KEYS.TITLE]: \"Herb shop\", [TYPE_KEYS.DATABASE_KEY]: \"herbshop\", },\n HOME_GOODS_STORE: { [TYPE_KEYS.URL_KEY]: \"hd\", [TYPE_KEYS.TITLE]: \"Home goods store\", [TYPE_KEYS.DATABASE_KEY]: \"homegoodsstore\", },\n CLOTHING_STORE: { [TYPE_KEYS.URL_KEY]: \"cr\", [TYPE_KEYS.TITLE]: \"Clothing store\", [TYPE_KEYS.DATABASE_KEY]: \"clothingstore\", },\n});\n\nconst DATA_FILTERS_BUILTIN_NAMES = Object.freeze({\n INDOORS: \"Indoors with Enrichments\" + ASPCA_RECOMMENDED_SUFFIX,\n OUTDOORS: \"Default: Outdoor Access\" + ASPCA_RECOMMENDED_SUFFIX,\n PASTURE: \"Pasture\" + ASPCA_RECOMMENDED_SUFFIX,\n});\n\nconst DATA_FILTERS_BUILTIN_DEFAULT = DATA_FILTERS_BUILTIN_NAMES.OUTDOORS;\n\nconst DATA_FILTERS_BUILTIN_OPTIONS = Object.freeze({\n [DATA_FILTERS_BUILTIN_NAMES.INDOORS]: {\n [GROUP_TYPES.INDOORS[TYPE_KEYS.URL_KEY]]: \"y\",\n },\n [DATA_FILTERS_BUILTIN_NAMES.OUTDOORS]: {\n [GROUP_TYPES.OUTDOORS[TYPE_KEYS.URL_KEY]]: \"y\",\n },\n [DATA_FILTERS_BUILTIN_NAMES.PASTURE]: {\n [GROUP_TYPES.PASTURE[TYPE_KEYS.URL_KEY]]: \"y\",\n },\n});\n\nconst DATA_FILTERS_BUILTIN_REVERSE_MAP = Object.freeze({\n [GROUP_TYPES.INDOORS[TYPE_KEYS.URL_KEY]]: DATA_FILTERS_BUILTIN_NAMES.INDOORS,\n [GROUP_TYPES.OUTDOORS[TYPE_KEYS.URL_KEY]]: DATA_FILTERS_BUILTIN_NAMES.OUTDOORS,\n [GROUP_TYPES.PASTURE[TYPE_KEYS.URL_KEY]]: DATA_FILTERS_BUILTIN_NAMES.PASTURE,\n});\n\nconst CERTIFICATION_LINKS = Object.freeze({\n [CERTIFICATION_NAMES.ANIMAL_WELFARE_APPROVED]: \"https://agreenerworld.org/certifications/animal-welfare-approved/\",\n [CERTIFICATION_NAMES.AGW_CERTIFIED_GRASSFED]: \"https://agreenerworld.org/certifications/certified-grass-fed/\",\n [CERTIFICATION_NAMES.AGW_CERTIFIED_NONGMO]: \"https://agreenerworld.org/certifications/certified-nongmo-agw/\",\n [CERTIFICATION_NAMES.AGW_CERTIFIED_ORGANIC]: \"https://agreenerworld.org/certifications/certified-organic-by-agw/\",\n [CERTIFICATION_NAMES.AGW_CERTIFIED_REGENERATIVE]: \"https://agreenerworld.org/certifications/certified-regenerative/\",\n [CERTIFICATION_NAMES.AGW_SALMON_WELFARE_CERTIFIED]: \"https://agreenerworld.org/certifications/animal-welfare-approved/\",\n [CERTIFICATION_NAMES.CERTIFIED_HUMANE]: \"https://certifiedhumane.org/overview/\",\n [CERTIFICATION_NAMES.GAP]: \"https://globalanimalpartnership.org/\",\n [CERTIFICATION_NAMES.GAP_FISH]: \"https://globalanimalpartnership.org/standards/salmon/\",\n [CERTIFICATION_NAMES.APPLEGATE_HUMANELY_RAISED]: \"https://applegate.com/mission/animal-welfare\",\n [CERTIFICATION_NAMES.USDA_ORGANIC]: \"https://www.ams.usda.gov/\",\n [CERTIFICATION_NAMES.AMERICAN_GRASSFED_ASSOCIATION]: \"https://www.americangrassfed.org/about-us/our-standards/\",\n [CERTIFICATION_NAMES.AMERICAN_HUMANE_CERTIFIED]: \"https://www.americanhumane.org/humane-heartland/our-standards/\",\n [CERTIFICATION_NAMES.FOOD_ALLIANCE_CERTIFIED]: \"https://foodalliance.org/livestock-producers/\",\n [CERTIFICATION_NAMES.ONE_HEALTH_CERTIFIED]: \"https://onehealthcertified.org/\",\n [CERTIFICATION_NAMES.REGENERATIVE_ORGANIC_CERTIFIED]: \"https://regenorganic.org/why-regenerative-organic/\",\n [CERTIFICATION_NAMES.BETTER_CHICKEN_PROJECT]: \"https://globalanimalpartnership.org/better-chicken/\",\n});\n\nconst FILTER_CERTIFICATION_NAMES = Object.freeze({\n ANIMAL_WELFARE_APPROVED: \"animal_welfare_approved\",\n AGW_CERTIFIED_REGENERATIVE: \"agw_certified_regenerative\",\n AGW_CERTIFIED_GRASSFED: \"agw_certified_grassfed\",\n AGW_CERTIFIED_NONGMO: \"agw_certified_non_gmo\",\n AGW_CERTIFIED_ORGANIC: \"agw_certified_organic\",\n AGW_SALMON_WELFARE_CERTIFIED: \"agw_salmon_welfare_certified\",\n REGENERATIVE_ORGANIC_CERTIFIED: \"regenerative_organic_certified\",\n CERTIFIED_HUMANE: \"certified_humane\",\n CERTIFIED_HUMANE_FREE_RANGE: \"certified_humane_free_range\",\n CERTIFIED_HUMANE_GRASS_FED: \"certified_humane_grass_fed\",\n CERTIFIED_HUMANE_PASTURE_RAISED: \"certified_humane_pasture_raised_grass_fed\",\n ANIMAL_WELFARE_CERTIFIED_1: \"animal_welfare_certified_1\",\n ANIMAL_WELFARE_CERTIFIED_2: \"animal_welfare_certified_2\",\n ANIMAL_WELFARE_CERTIFIED_3: \"animal_welfare_certified_3\",\n ANIMAL_WELFARE_CERTIFIED_4: \"animal_welfare_certified_4\",\n ANIMAL_WELFARE_CERTIFIED_5: \"animal_welfare_certified_5\",\n ANIMAL_WELFARE_CERTIFIED_6: \"animal_welfare_certified_6\",\n BETTER_CHICKEN_PROJECT: \"better_chicken_project\",\n ANIMAL_WELFARE_CERTIFIED_FISH_1: \"animal_welfare_certified_fish_1\",\n ANIMAL_WELFARE_CERTIFIED_FISH_3: \"animal_welfare_certified_fish_3\",\n ANIMAL_WELFARE_CERTIFIED_FISH_6: \"animal_welfare_certified_fish_6\",\n APPLEGATE_HUMANELY_RAISED: \"applegate_humanely_raised\",\n SELF_CERTIFIED: \"self_certified\",\n AMERICAN_HUMANE_CERTIFIED: \"american_humane_certified\",\n AMERICAN_GRASSFED_ASSOCIATION: \"american_grassfed_association\",\n USDA_ORGANIC: \"usda_organic\",\n FOOD_ALLIANCE_CERTIFIED: \"food_alliance_certified\",\n ONE_HEALTH_CERTIFIED: \"one_health_certified\",\n});\n\nconst FILTER_TO_CERTIFICATION_MAP = Object.freeze({\n [FILTER_CERTIFICATION_NAMES.ANIMAL_WELFARE_APPROVED]: CERTIFICATION_NAMES.ANIMAL_WELFARE_APPROVED,\n [FILTER_CERTIFICATION_NAMES.AGW_CERTIFIED_REGENERATIVE]: CERTIFICATION_NAMES.AGW_CERTIFIED_REGENERATIVE,\n [FILTER_CERTIFICATION_NAMES.AGW_CERTIFIED_GRASSFED]: CERTIFICATION_NAMES.AGW_CERTIFIED_GRASSFED,\n [FILTER_CERTIFICATION_NAMES.AGW_CERTIFIED_NONGMO]: CERTIFICATION_NAMES.AGW_CERTIFIED_NONGMO,\n [FILTER_CERTIFICATION_NAMES.AGW_CERTIFIED_ORGANIC]: CERTIFICATION_NAMES.AGW_CERTIFIED_ORGANIC,\n [FILTER_CERTIFICATION_NAMES.AGW_SALMON_WELFARE_CERTIFIED]: CERTIFICATION_NAMES.AGW_SALMON_WELFARE_CERTIFIED,\n [FILTER_CERTIFICATION_NAMES.REGENERATIVE_ORGANIC_CERTIFIED]: CERTIFICATION_NAMES.REGENERATIVE_ORGANIC_CERTIFIED,\n [FILTER_CERTIFICATION_NAMES.CERTIFIED_HUMANE]: CERTIFICATION_NAMES.CERTIFIED_HUMANE,\n [FILTER_CERTIFICATION_NAMES.CERTIFIED_HUMANE_FREE_RANGE]: CERTIFICATION_NAMES.CERTIFIED_HUMANE,\n [FILTER_CERTIFICATION_NAMES.CERTIFIED_HUMANE_GRASS_FED]: CERTIFICATION_NAMES.CERTIFIED_HUMANE,\n [FILTER_CERTIFICATION_NAMES.CERTIFIED_HUMANE_PASTURE_RAISED]: CERTIFICATION_NAMES.CERTIFIED_HUMANE,\n [FILTER_CERTIFICATION_NAMES.ANIMAL_WELFARE_CERTIFIED_1]: CERTIFICATION_NAMES.GAP,\n [FILTER_CERTIFICATION_NAMES.ANIMAL_WELFARE_CERTIFIED_2]: CERTIFICATION_NAMES.GAP,\n [FILTER_CERTIFICATION_NAMES.ANIMAL_WELFARE_CERTIFIED_3]: CERTIFICATION_NAMES.GAP,\n [FILTER_CERTIFICATION_NAMES.ANIMAL_WELFARE_CERTIFIED_4]: CERTIFICATION_NAMES.GAP,\n [FILTER_CERTIFICATION_NAMES.ANIMAL_WELFARE_CERTIFIED_5]: CERTIFICATION_NAMES.GAP,\n [FILTER_CERTIFICATION_NAMES.ANIMAL_WELFARE_CERTIFIED_6]: CERTIFICATION_NAMES.GAP,\n [FILTER_CERTIFICATION_NAMES.BETTER_CHICKEN_PROJECT]: CERTIFICATION_NAMES.BETTER_CHICKEN_PROJECT,\n [FILTER_CERTIFICATION_NAMES.ANIMAL_WELFARE_CERTIFIED_FISH_1]: CERTIFICATION_NAMES.GAP_FISH,\n [FILTER_CERTIFICATION_NAMES.ANIMAL_WELFARE_CERTIFIED_FISH_3]: CERTIFICATION_NAMES.GAP_FISH,\n [FILTER_CERTIFICATION_NAMES.ANIMAL_WELFARE_CERTIFIED_FISH_6]: CERTIFICATION_NAMES.GAP_FISH,\n [FILTER_CERTIFICATION_NAMES.APPLEGATE_HUMANELY_RAISED]: CERTIFICATION_NAMES.APPLEGATE_HUMANELY_RAISED,\n [FILTER_CERTIFICATION_NAMES.SELF_CERTIFIED]: CERTIFICATION_NAMES.SELF_CERTIFIED,\n [FILTER_CERTIFICATION_NAMES.AMERICAN_HUMANE_CERTIFIED]: CERTIFICATION_NAMES.AMERICAN_HUMANE_CERTIFIED,\n [FILTER_CERTIFICATION_NAMES.AMERICAN_GRASSFED_ASSOCIATION]: CERTIFICATION_NAMES.AMERICAN_GRASSFED_ASSOCIATION,\n [FILTER_CERTIFICATION_NAMES.USDA_ORGANIC]: CERTIFICATION_NAMES.USDA_ORGANIC,\n [FILTER_CERTIFICATION_NAMES.FOOD_ALLIANCE_CERTIFIED]: CERTIFICATION_NAMES.FOOD_ALLIANCE_CERTIFIED,\n [FILTER_CERTIFICATION_NAMES.ONE_HEALTH_CERTIFIED]: CERTIFICATION_NAMES.ONE_HEALTH_CERTIFIED,\n});\n\n\n// Update FilterSlider.FILTER_SLIDER_DEFAULT is updating the default\nconst DEFAULT_FILTER_NAMES = Object.freeze({\n DEFAULT: \"Default: Outdoor Access\" + ASPCA_RECOMMENDED_SUFFIX,\n ASPCA_BASELINE: \"Indoors with Enrichments\" + ASPCA_RECOMMENDED_SUFFIX,\n ASPCA_BETTER: \"Outdoor Access\" + ASPCA_RECOMMENDED_SUFFIX,\n ASPCA_BEST: \"Pasture\" + ASPCA_RECOMMENDED_SUFFIX,\n ANY: \"Any certification\",\n});\n\nconst DEFAULT_FILTER_DESCRIPTIONS = Object.freeze({\n [GROUP_TYPES.PASTURE[TYPE_KEYS.URL_KEY]]: \"This is the best recommendation from the ASPCA. In addition to other welfare improvements, animals have reliable access to pasture.\",\n [GROUP_TYPES.OUTDOORS[TYPE_KEYS.URL_KEY]]: \"Find Humane's default filter shows pasture-raised and outdoor-access certified products. This is the second-best recommendation from the ASPCA. In addition to other welfare improvements, animals are either raised on pasture or have access to more space, fresh air, and sunlight compared to traditional industrial environments. The product selection is limited but it fits into our vision of animals that aren't always confined indoors.\",\n [GROUP_TYPES.INDOORS[TYPE_KEYS.URL_KEY]]: \"This is the baseline recommendation from the ASPCA for meaningful welfare certification programs with unacceptable industrial practices banned. This may include animals raised in industrial environments without outdoor access although with improved indoor conditions. This also includes pasture-raised and outdoor-access certified products.\",\n});\n\nconst DEFAULT_FILTER_SUBTITLES = Object.freeze({\n [GROUP_TYPES.PASTURE[TYPE_KEYS.URL_KEY]]: \"Animals raised on pasture or in industrial environments with more space, fresh air, and sunlight\",\n [GROUP_TYPES.OUTDOORS[TYPE_KEYS.URL_KEY]]: \"Animals raised on pasture or in industrial environments with access to more space, fresh air, and sunlight\",\n [GROUP_TYPES.INDOORS[TYPE_KEYS.URL_KEY]]: \"Meaningfully more humane but may include industrial environments without outdoor access although with improved indoor conditions\",\n});\n\nconst DEFAULT_FILTER_SHORT_DESCRIPTIONS = Object.freeze({\n [DEFAULT_FILTER_NAMES.DEFAULT]: \"Outdoor Access +\",\n [DEFAULT_FILTER_NAMES.ASPCA_BASELINE]: \"Indoors with Enrichments +\",\n [DEFAULT_FILTER_NAMES.ASPCA_BETTER]: \"Outdoor Access +\",\n [DEFAULT_FILTER_NAMES.ASPCA_BEST]: \"Pasture\",\n [DEFAULT_FILTER_NAMES.ANY]: \"All\",\n});\n\nconst FILTER_NONE_SAVED = \"None saved\";\n\n// All certifications with a value of `true` to allow a\n// simple map lookup to check if a key is a certification\nconst CERTIFICATIONS_MAP = Object.freeze({\n animal_welfare_approved: true,\n agw_certified_regenerative: true,\n agw_certified_grassfed: true,\n agw_certified_non_gmo: true,\n agw_certified_organic: true,\n agw_salmon_welfare_certified: true,\n certified_humane: true,\n certified_humane_free_range: true,\n certified_humane_grass_fed: true,\n certified_humane_pasture_raised_grass_fed: true,\n animal_welfare_certified_1: true,\n animal_welfare_certified_2: true,\n animal_welfare_certified_3: true,\n animal_welfare_certified_4: true,\n animal_welfare_certified_5: true,\n animal_welfare_certified_6: true,\n better_chicken_project: true,\n animal_welfare_certified_fish_1: true,\n animal_welfare_certified_fish_3: true,\n animal_welfare_certified_fish_6: true,\n applegate_humanely_raised: true,\n american_humane_certified: true,\n american_grassfed_association: true,\n usda_organic: true,\n food_alliance_certified: true,\n one_health_certified: true,\n self_certified: true,\n nopartial: true,\n regenerative_organic_certified: true,\n});\n\nconst FILTER_RECOMMENDED_VALUES_UNIQUE = Object.freeze({\n [GROUP_TYPES.OUTDOORS[TYPE_KEYS.URL_KEY]]: {\n certified_humane_free_range: true,\n animal_welfare_certified_3: true,\n },\n\n [GROUP_TYPES.INDOORS[TYPE_KEYS.URL_KEY]]: {\n certified_humane: true,\n animal_welfare_certified_2: true,\n },\n\n [GROUP_TYPES.PASTURE[TYPE_KEYS.URL_KEY]]: {\n animal_welfare_approved: true,\n certified_humane_grass_fed: true,\n certified_humane_pasture_raised_grass_fed: true,\n animal_welfare_certified_4: true,\n animal_welfare_certified_5: true,\n animal_welfare_certified_6: true,\n regenerative_organic_certified: true,\n },\n});\n\nfunction createDataFilter(filter) {\n return Object.assign(\n {},\n filter,\n {\n [SYNTHESIZED_TYPES.QUERY_ID[TYPE_KEYS.URL_KEY]]: uuidv4(),\n },\n );\n}\n\nconst MAP_PIN_NAMES = Object.freeze({\n GENERIC: \"Generic\",\n CART: \"Cart\",\n DINING: \"Dining\",\n COFFEE_SHOP: \"Coffee Shop\",\n FARMERS_MARKET: \"Farmers Market\",\n FARM: \"Farm\",\n SEARCH: \"Search\",\n});\n\n// Match humane_location.rb } getMapPinType\nconst MAP_PIN_TYPES = Object.freeze([\n MAP_PIN_NAMES.GENERIC,\n MAP_PIN_NAMES.CART,\n MAP_PIN_NAMES.DINING,\n MAP_PIN_NAMES.COFFEE_SHOP,\n MAP_PIN_NAMES.FARMERS_MARKET,\n MAP_PIN_NAMES.FARM,\n]);\n\nconst DEFAULT_STATE = Object.freeze({\n locations: {},\n locations_online: null,\n ads: [],\n adRefreshInterval: 15000,\n hideAds: false,\n lightMode: false,\n extraDebug: IS_DEVELOPMENT,\n lastMainView: SCREENS.MAP_STACK,\n deliveryLocationFilter: \"\",\n firstZoom: ZOOM_LEVELS.CITY + 1,\n initialCenter: CENTER_UNITED_STATES,\n initialZoom: ZOOM_LEVELS.CONTINENT,\n shouldAskToMoveToCurrentLocation: true,\n shouldShowSearch: true,\n detailedZoom: ZOOM_LEVELS.BUILDINGS - 4,\n mapCenter: CENTER_UNITED_STATES,\n showTabs: true,\n showHeader: true,\n showFilterSlider: true,\n showZoomControls: true,\n moveMap: null,\n lastGPSLocation: null,\n dataFilter: createDataFilter(DATA_FILTERS_BUILTIN_OPTIONS[DATA_FILTERS_BUILTIN_DEFAULT]),\n});\n\nexport {\n createDataFilter,\n VERSION,\n MAJOR_VERSION_NUMBER,\n MINOR_VERSION_NUMBER,\n PATCH_VERSION_NUMBER,\n IS_DEVELOPMENT,\n DEFAULT_DEBUG_LEVEL,\n APPCONFIG,\n STYLES,\n LOGIN_STATE,\n DEFAULT_LOGIN_STATE,\n DISPATCH,\n ZOOM_LEVELS,\n CENTER_UNITED_STATES,\n DEFAULT_ZOOMED,\n MAP_FEATURES,\n SCREENS,\n SCREEN_LINKS,\n REACT_NATIVE_PAPER_THEME,\n FILTER_RECOMMENDED_VALUES_UNIQUE,\n FILTER_NONE_SAVED,\n DEFAULT_STATE,\n LOCAL_DATA_KEYS,\n CERTIFICATIONS_MAP,\n APPLE_STORE_LINK,\n ANDROID_STORE_LINK,\n CERTIFICATION_NAMES,\n DEFAULT_FILTER_NAMES,\n PRODUCT_TYPES,\n SUBSTACK_LINK,\n TWITTER_LINK,\n HOMEPAGE_LINK,\n INSTAGRAM_LINK,\n DEFAULT_FILTER_DESCRIPTIONS,\n ASPCA_RECOMMENDED_SUFFIX,\n DEFAULT_FILTER_SUBTITLES,\n UTM_SOURCES,\n UTM_MEDIUMS,\n UTM_CAMPAIGNS,\n HEADER_TEXT_OVERFLOW_LENGTH,\n DEFAULT_FILTER_SHORT_DESCRIPTIONS,\n SIMPLE_GLOBAL_STATE,\n FACEBOOK_LINK,\n SMALL_SCREEN_WIDTH1,\n CERTIFICATION_LINKS,\n FILTER_CERTIFICATION_NAMES,\n FILTER_TO_CERTIFICATION_MAP,\n B_CORP_LINK,\n GRANT_LINK,\n SUBSCRIBE_POPUP_DELAY_MILLISECONDS,\n DATA_FILTERS_BUILTIN_DEFAULT,\n DATA_FILTERS_BUILTIN_NAMES,\n DATA_FILTERS_BUILTIN_OPTIONS,\n GOOGLE_API_KEY_AUTOCOMPLETE,\n DATA_FILTERS_BUILTIN_REVERSE_MAP,\n TYPE_KEYS,\n SYNTHESIZED_TYPES,\n GROUP_TYPES,\n EXTRA_ANIMAL_WELFARE,\n INGREDIENTS,\n WELFARE_CERTIFICATIONS,\n LOCATION_FLAGS,\n SCREEN_TITLES,\n MAP_PIN_NAMES,\n MAP_PIN_TYPES,\n}\n","import { CodedError, NativeModulesProxy } from 'expo-modules-core';\nimport { Platform, NativeModules } from 'react-native';\nimport { AppOwnership, ExecutionEnvironment, UserInterfaceIdiom, } from './Constants.types';\nimport ExponentConstants from './ExponentConstants';\nexport { AppOwnership, ExecutionEnvironment, UserInterfaceIdiom, };\nif (!ExponentConstants) {\n console.warn(\"No native ExponentConstants module found, are you sure the expo-constants's module is linked properly?\");\n}\nlet rawUpdatesManifest = null;\n// If expo-updates defines a non-empty manifest, prefer that one\nif (NativeModulesProxy.ExpoUpdates) {\n let updatesManifest;\n if (NativeModulesProxy.ExpoUpdates.manifest) {\n updatesManifest = NativeModulesProxy.ExpoUpdates.manifest;\n }\n else if (NativeModulesProxy.ExpoUpdates.manifestString) {\n updatesManifest = JSON.parse(NativeModulesProxy.ExpoUpdates.manifestString);\n }\n if (updatesManifest && Object.keys(updatesManifest).length > 0) {\n rawUpdatesManifest = updatesManifest;\n }\n}\n// If dev-launcher defines a non-empty manifest, prefer that one\nlet rawDevLauncherManifest = null;\nif (NativeModules.EXDevLauncher) {\n let devLauncherManifest;\n if (NativeModules.EXDevLauncher.manifestString) {\n devLauncherManifest = JSON.parse(NativeModules.EXDevLauncher.manifestString);\n }\n if (devLauncherManifest && Object.keys(devLauncherManifest).length > 0) {\n rawDevLauncherManifest = devLauncherManifest;\n }\n}\n// Fall back to ExponentConstants.manifest if we don't have one from Updates\nlet rawAppConfig = null;\nif (ExponentConstants && ExponentConstants.manifest) {\n const appConfig = ExponentConstants.manifest;\n // On Android we pass the manifest in JSON form so this step is necessary\n if (typeof appConfig === 'string') {\n rawAppConfig = JSON.parse(appConfig);\n }\n else {\n rawAppConfig = appConfig;\n }\n}\nlet rawManifest = rawUpdatesManifest ?? rawDevLauncherManifest ?? rawAppConfig;\nconst { name, appOwnership, ...nativeConstants } = (ExponentConstants || {});\nlet warnedAboutManifestField = false;\nconst constants = {\n ...nativeConstants,\n // Ensure this is null in bare workflow\n appOwnership: appOwnership ?? null,\n};\nObject.defineProperties(constants, {\n installationId: {\n get() {\n return nativeConstants.installationId;\n },\n enumerable: false,\n },\n /**\n * Use `manifest` property by default.\n * This property is only used for internal purposes.\n * It behaves similarly to the original one, but suppresses warning upon no manifest available.\n * `expo-asset` uses it to prevent users from seeing mentioned warning.\n */\n __unsafeNoWarnManifest: {\n get() {\n const maybeManifest = getManifest(true);\n if (!maybeManifest || !isBareManifest(maybeManifest)) {\n return null;\n }\n return maybeManifest;\n },\n enumerable: false,\n },\n __unsafeNoWarnManifest2: {\n get() {\n const maybeManifest = getManifest(true);\n if (!maybeManifest || !isManifest(maybeManifest)) {\n return null;\n }\n return maybeManifest;\n },\n enumerable: false,\n },\n manifest: {\n get() {\n if (__DEV__ && !warnedAboutManifestField) {\n console.warn(`Constants.manifest has been deprecated in favor of Constants.expoConfig.`);\n warnedAboutManifestField = true;\n }\n const maybeManifest = getManifest();\n if (!maybeManifest || !isBareManifest(maybeManifest)) {\n return null;\n }\n return maybeManifest;\n },\n enumerable: true,\n },\n manifest2: {\n get() {\n const maybeManifest = getManifest();\n if (!maybeManifest || !isManifest(maybeManifest)) {\n return null;\n }\n return maybeManifest;\n },\n enumerable: true,\n },\n expoConfig: {\n get() {\n const maybeManifest = getManifest(true);\n if (!maybeManifest) {\n return null;\n }\n // if running an embedded update, maybeManifest is a BareManifest which doesn't have\n // the expo config. Instead, the embedded expo-constants app.config should be used.\n if (NativeModulesProxy.ExpoUpdates && NativeModulesProxy.ExpoUpdates.isEmbeddedLaunch) {\n return rawAppConfig;\n }\n if (isManifest(maybeManifest)) {\n return maybeManifest.extra?.expoClient ?? null;\n }\n else if (isBareManifest(maybeManifest)) {\n return maybeManifest;\n }\n return null;\n },\n enumerable: true,\n },\n expoGoConfig: {\n get() {\n const maybeManifest = getManifest(true);\n if (!maybeManifest) {\n return null;\n }\n if (isManifest(maybeManifest)) {\n return maybeManifest.extra?.expoGo ?? null;\n }\n else if (isBareManifest(maybeManifest)) {\n return maybeManifest;\n }\n return null;\n },\n enumerable: true,\n },\n easConfig: {\n get() {\n const maybeManifest = getManifest(true);\n if (!maybeManifest) {\n return null;\n }\n if (isManifest(maybeManifest)) {\n return maybeManifest.extra?.eas ?? null;\n }\n else if (isBareManifest(maybeManifest)) {\n return maybeManifest;\n }\n return null;\n },\n enumerable: true,\n },\n __rawManifest_TEST: {\n get() {\n return rawManifest;\n },\n set(value) {\n rawManifest = value;\n },\n enumerable: false,\n },\n});\nfunction isBareManifest(manifest) {\n return !isManifest(manifest);\n}\nfunction isManifest(manifest) {\n return 'metadata' in manifest;\n}\nfunction getManifest(suppressWarning = false) {\n if (!rawManifest) {\n const invalidManifestType = rawManifest === null ? 'null' : 'undefined';\n if (nativeConstants.executionEnvironment === ExecutionEnvironment.Bare &&\n Platform.OS !== 'web') {\n if (!suppressWarning) {\n console.warn(`Constants.manifest is ${invalidManifestType} because the embedded app.config could not be read. Ensure that you have installed the expo-constants build scripts if you need to read from Constants.manifest.`);\n }\n }\n else if (nativeConstants.executionEnvironment === ExecutionEnvironment.StoreClient ||\n nativeConstants.executionEnvironment === ExecutionEnvironment.Standalone) {\n // If we somehow get here, this is a truly exceptional state to be in.\n // Constants.manifest should *always* be defined in those contexts.\n throw new CodedError('ERR_CONSTANTS_MANIFEST_UNAVAILABLE', `Constants.manifest is ${invalidManifestType}, must be an object.`);\n }\n }\n return rawManifest;\n}\nexport default constants;\n//# sourceMappingURL=Constants.js.map","import { DeviceEventEmitter } from 'react-native';\nimport { EventEmitter } from './EventEmitter';\nimport NativeModulesProxy from './NativeModulesProxy';\nimport { requireNativeViewManager } from './NativeViewManagerAdapter';\nimport Platform from './Platform';\nimport { CodedError } from './errors/CodedError';\nimport { UnavailabilityError } from './errors/UnavailabilityError';\nimport './sweet/setUpErrorManager.fx';\nexport { default as uuid } from './uuid';\nexport { DeviceEventEmitter, EventEmitter, NativeModulesProxy, Platform, requireNativeViewManager, \n// Errors\nCodedError, UnavailabilityError, };\nexport * from './requireNativeModule';\nexport * from './TypedArrays.types';\n/**\n * @deprecated renamed to `DeviceEventEmitter`\n */\nexport const SyntheticPlatformEmitter = DeviceEventEmitter;\nexport * from './PermissionsInterface';\nexport * from './PermissionsHook';\n//# sourceMappingURL=index.js.map","import RCTDeviceEventEmitter from '../../vendor/react-native/EventEmitter/RCTDeviceEventEmitter';\nexport default RCTDeviceEventEmitter;","import invariant from 'invariant';\nimport { NativeEventEmitter, NativeModules, Platform } from 'react-native';\nconst nativeEmitterSubscriptionKey = '@@nativeEmitterSubscription@@';\nexport class EventEmitter {\n _listenerCount = 0;\n _nativeModule;\n _eventEmitter;\n constructor(nativeModule) {\n // Expo modules installed through the JSI don't have `addListener` and `removeListeners` set,\n // so if someone wants to use them with `EventEmitter`, make sure to provide these functions\n // as they are required by `NativeEventEmitter`. This is only temporary — in the future\n // JSI modules will have event emitter built in.\n if (nativeModule.__expo_module_name__ && NativeModules.EXReactNativeEventEmitter) {\n nativeModule.addListener = (...args) => NativeModules.EXReactNativeEventEmitter.addProxiedListener(nativeModule.__expo_module_name__, ...args);\n nativeModule.removeListeners = (...args) => NativeModules.EXReactNativeEventEmitter.removeProxiedListeners(nativeModule.__expo_module_name__, ...args);\n }\n this._nativeModule = nativeModule;\n this._eventEmitter = new NativeEventEmitter(nativeModule);\n }\n addListener(eventName, listener) {\n if (!this._listenerCount && Platform.OS !== 'ios' && this._nativeModule.startObserving) {\n this._nativeModule.startObserving();\n }\n this._listenerCount++;\n const nativeEmitterSubscription = this._eventEmitter.addListener(eventName, listener);\n const subscription = {\n [nativeEmitterSubscriptionKey]: nativeEmitterSubscription,\n remove: () => {\n this.removeSubscription(subscription);\n },\n };\n return subscription;\n }\n removeAllListeners(eventName) {\n // @ts-ignore: the EventEmitter interface has been changed in react-native@0.64.0\n const removedListenerCount = this._eventEmitter.listenerCount\n ? // @ts-ignore: this is available since 0.64\n this._eventEmitter.listenerCount(eventName)\n : // @ts-ignore: this is available in older versions\n this._eventEmitter.listeners(eventName).length;\n this._eventEmitter.removeAllListeners(eventName);\n this._listenerCount -= removedListenerCount;\n invariant(this._listenerCount >= 0, `EventEmitter must have a non-negative number of listeners`);\n if (!this._listenerCount && Platform.OS !== 'ios' && this._nativeModule.stopObserving) {\n this._nativeModule.stopObserving();\n }\n }\n removeSubscription(subscription) {\n const nativeEmitterSubscription = subscription[nativeEmitterSubscriptionKey];\n if (!nativeEmitterSubscription) {\n return;\n }\n if ('remove' in nativeEmitterSubscription) {\n nativeEmitterSubscription.remove();\n }\n this._listenerCount--;\n // Ensure that the emitter's internal state remains correct even if `removeSubscription` is\n // called again with the same subscription\n delete subscription[nativeEmitterSubscriptionKey];\n // Release closed-over references to the emitter\n subscription.remove = () => { };\n if (!this._listenerCount && Platform.OS !== 'ios' && this._nativeModule.stopObserving) {\n this._nativeModule.stopObserving();\n }\n }\n emit(eventName, ...params) {\n this._eventEmitter.emit(eventName, ...params);\n }\n}\n//# sourceMappingURL=EventEmitter.js.map","/**\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'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport NativeEventEmitter from '../../vendor/react-native/EventEmitter/NativeEventEmitter';\nexport default NativeEventEmitter;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport UIManager from '../UIManager';\n\n// NativeModules shim\nvar NativeModules = {\n UIManager\n};\nexport default NativeModules;","// We default to an empty object shim wherever we don't have an environment-specific implementation\n/**\n * @deprecated `NativeModulesProxy` is deprecated and might be removed in the future releases.\n * Use `requireNativeModule` or `requireOptionalNativeModule` instead.\n */\nexport default {};\n//# sourceMappingURL=NativeModulesProxy.js.map","import { UnavailabilityError } from './errors/UnavailabilityError';\n/**\n * A drop-in replacement for `requireNativeComponent`.\n */\nexport function requireNativeViewManager(viewName) {\n throw new UnavailabilityError('expo-modules-core', 'requireNativeViewManager');\n}\n//# sourceMappingURL=NativeViewManagerAdapter.js.map","import { CodedError } from './CodedError';\nimport Platform from '../Platform';\n/**\n * A class for errors to be thrown when a property is accessed which is\n * unavailable, unsupported, or not currently implemented on the running\n * platform.\n */\nexport class UnavailabilityError extends CodedError {\n constructor(moduleName, propertyName) {\n super('ERR_UNAVAILABLE', `The method or property ${moduleName}.${propertyName} is not available on ${Platform.OS}, are you sure you've linked all the native dependencies properly?`);\n }\n}\n//# sourceMappingURL=UnavailabilityError.js.map","/**\n * A general error class that should be used for all errors in Expo modules.\n * Guarantees a `code` field that can be used to differentiate between different\n * types of errors without further subclassing Error.\n */\nexport class CodedError extends Error {\n code;\n info;\n constructor(code, message) {\n super(message);\n this.code = code;\n }\n}\n//# sourceMappingURL=CodedError.js.map","var getPrototypeOf = require(\"./getPrototypeOf.js\");\nvar setPrototypeOf = require(\"./setPrototypeOf.js\");\nvar isNativeFunction = require(\"./isNativeFunction.js\");\nvar construct = require(\"./construct.js\");\nfunction _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n module.exports = _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n _cache.set(Class, Wrapper);\n }\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _wrapNativeSuper(Class);\n}\nmodule.exports = _wrapNativeSuper, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\nmodule.exports = _isNativeFunction, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\nvar isNativeReflectConstruct = require(\"./isNativeReflectConstruct.js\");\nfunction _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n module.exports = _construct = Reflect.construct.bind(), module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n } else {\n module.exports = _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n }\n return _construct.apply(null, arguments);\n}\nmodule.exports = _construct, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","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 try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\nmodule.exports = _isNativeReflectConstruct, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import { Platform as ReactNativePlatform } from 'react-native';\nimport { isDOMAvailable, canUseEventListeners, canUseViewport, isAsyncDebugging, } from './environment/browser';\nconst Platform = {\n /**\n * Denotes the currently running platform.\n * Can be one of ios, android, web.\n */\n OS: ReactNativePlatform.OS,\n /**\n * Returns the value with the matching platform.\n * Object keys can be any of ios, android, native, web, default.\n *\n * @ios ios, native, default\n * @android android, native, default\n * @web web, default\n */\n select: ReactNativePlatform.select,\n /**\n * Denotes if the DOM API is available in the current environment.\n * The DOM is not available in native React runtimes and Node.js.\n */\n isDOMAvailable,\n /**\n * Denotes if the current environment can attach event listeners\n * to the window. This will return false in native React\n * runtimes and Node.js.\n */\n canUseEventListeners,\n /**\n * Denotes if the current environment can inspect properties of the\n * screen on which the current window is being rendered. This will\n * return false in native React runtimes and Node.js.\n */\n canUseViewport,\n /**\n * If the JavaScript is being executed in a remote JavaScript environment.\n * When `true`, synchronous native invocations cannot be executed.\n */\n isAsyncDebugging,\n};\nexport default Platform;\n//# sourceMappingURL=Platform.js.map","// Used for delegating node actions when browser APIs aren't available\n// like in SSR websites.\nexport const isDOMAvailable = typeof window !== 'undefined' && !!window.document?.createElement;\nexport const canUseEventListeners = isDOMAvailable && !!(window.addEventListener || window.attachEvent);\nexport const canUseViewport = isDOMAvailable && !!window.screen;\nexport const isAsyncDebugging = false;\n//# sourceMappingURL=browser.web.js.map","//# sourceMappingURL=setUpErrorManager.fx.web.js.map","export { default } from './uuid';\n//# sourceMappingURL=index.js.map","import sha1 from './lib/sha1';\nimport v35 from './lib/v35';\nimport { Uuidv5Namespace } from './uuid.types';\nfunction uuidv4() {\n // Crypto needs to be required when run in Node.js environment.\n const cryptoObject = typeof crypto === 'undefined' || typeof crypto.randomUUID === 'undefined'\n ? require('crypto')\n : crypto;\n if (!cryptoObject?.randomUUID) {\n throw Error(\"The browser doesn't support `crypto.randomUUID` function\");\n }\n return cryptoObject.randomUUID();\n}\nconst uuid = {\n v4: uuidv4,\n v5: v35('v5', 0x50, sha1),\n namespace: Uuidv5Namespace,\n};\nexport default uuid;\n//# sourceMappingURL=uuid.web.js.map","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\n'use strict';\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return (x & y) ^ (~x & z);\n case 1:\n return x ^ y ^ z;\n case 2:\n return (x & y) ^ (x & z) ^ (y & z);\n case 3:\n return x ^ y ^ z;\n default:\n return 0;\n }\n}\nfunction ROTL(x, n) {\n return (x << n) | (x >>> (32 - n));\n}\nfunction sha1(bytes) {\n const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n if (typeof bytes == 'string') {\n const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n bytes = new Array(msg.length);\n for (let i = 0; i < msg.length; i++)\n bytes[i] = msg.charCodeAt(i);\n }\n bytes.push(0x80);\n const l = bytes.length / 4 + 2;\n const N = Math.ceil(l / 16);\n const M = new Array(N);\n for (let i = 0; i < N; i++) {\n M[i] = new Array(16);\n for (let j = 0; j < 16; j++) {\n M[i][j] =\n (bytes[i * 64 + j * 4] << 24) |\n (bytes[i * 64 + j * 4 + 1] << 16) |\n (bytes[i * 64 + j * 4 + 2] << 8) |\n bytes[i * 64 + j * 4 + 3];\n }\n }\n M[N - 1][14] = ((bytes.length - 1) * 8) / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = ((bytes.length - 1) * 8) & 0xffffffff;\n for (let i = 0; i < N; i++) {\n const W = new Array(80);\n for (let t = 0; t < 16; t++)\n W[t] = M[i][t];\n for (let t = 16; t < 80; t++) {\n W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);\n }\n let a = H[0];\n let b = H[1];\n let c = H[2];\n let d = H[3];\n let e = H[4];\n for (let t = 0; t < 80; t++) {\n const s = Math.floor(t / 20);\n const T = (ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t]) >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n H[0] = (H[0] + a) >>> 0;\n H[1] = (H[1] + b) >>> 0;\n H[2] = (H[2] + c) >>> 0;\n H[3] = (H[3] + d) >>> 0;\n H[4] = (H[4] + e) >>> 0;\n }\n return [\n (H[0] >> 24) & 0xff,\n (H[0] >> 16) & 0xff,\n (H[0] >> 8) & 0xff,\n H[0] & 0xff,\n (H[1] >> 24) & 0xff,\n (H[1] >> 16) & 0xff,\n (H[1] >> 8) & 0xff,\n H[1] & 0xff,\n (H[2] >> 24) & 0xff,\n (H[2] >> 16) & 0xff,\n (H[2] >> 8) & 0xff,\n H[2] & 0xff,\n (H[3] >> 24) & 0xff,\n (H[3] >> 16) & 0xff,\n (H[3] >> 8) & 0xff,\n H[3] & 0xff,\n (H[4] >> 24) & 0xff,\n (H[4] >> 16) & 0xff,\n (H[4] >> 8) & 0xff,\n H[4] & 0xff,\n ];\n}\nexport default sha1;\n//# sourceMappingURL=sha1.js.map","import bytesToUuid from './bytesToUuid';\nfunction uuidToBytes(uuid) {\n // Note: We assume we're being passed a valid uuid string\n const bytes = [];\n uuid.replace(/[a-fA-F0-9]{2}/g, (hex) => {\n bytes.push(parseInt(hex, 16));\n return '';\n });\n return bytes;\n}\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n const bytes = new Array(str.length);\n for (let i = 0; i < str.length; i++) {\n bytes[i] = str.charCodeAt(i);\n }\n return bytes;\n}\nexport default function (name, version, hashfunc) {\n const generateUUID = function (value, namespace, buf, offset) {\n const off = (buf && offset) || 0;\n if (typeof value == 'string')\n value = stringToBytes(value);\n if (typeof namespace == 'string')\n namespace = uuidToBytes(namespace);\n if (!Array.isArray(value))\n throw TypeError('value must be an array of bytes');\n if (!Array.isArray(namespace) || namespace.length !== 16)\n throw TypeError('namespace must be uuid string or an Array of 16 byte values');\n // Per 4.3\n const bytes = hashfunc(namespace.concat(value));\n bytes[6] = (bytes[6] & 0x0f) | version;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n if (buf) {\n for (let idx = 0; idx < 16; ++idx) {\n buf[off + idx] = bytes[idx];\n }\n }\n return bytesToUuid(bytes);\n };\n // Function#name is not settable on some platforms (#270)\n try {\n generateUUID.name = name;\n }\n catch { }\n // Pre-defined namespaces, per Appendix C\n generateUUID.DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\n generateUUID.URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\n return generateUUID;\n}\n//# sourceMappingURL=v35.js.map","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\nfunction bytesToUuid(buf, offset) {\n let i = offset || 0;\n const bth = byteToHex;\n // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n return [\n bth[buf[i++]],\n bth[buf[i++]],\n bth[buf[i++]],\n bth[buf[i++]],\n '-',\n bth[buf[i++]],\n bth[buf[i++]],\n '-',\n bth[buf[i++]],\n bth[buf[i++]],\n '-',\n bth[buf[i++]],\n bth[buf[i++]],\n '-',\n bth[buf[i++]],\n bth[buf[i++]],\n bth[buf[i++]],\n bth[buf[i++]],\n bth[buf[i++]],\n bth[buf[i++]],\n ].join('');\n}\nexport default bytesToUuid;\n//# sourceMappingURL=bytesToUuid.js.map","/**\n * Default namespaces for UUID v5 defined in RFC 4122\n */\nexport var Uuidv5Namespace;\n(function (Uuidv5Namespace) {\n // Source of the UUIDs: https://datatracker.ietf.org/doc/html/rfc4122\n Uuidv5Namespace[\"dns\"] = \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\";\n Uuidv5Namespace[\"url\"] = \"6ba7b811-9dad-11d1-80b4-00c04fd430c8\";\n Uuidv5Namespace[\"oid\"] = \"6ba7b812-9dad-11d1-80b4-00c04fd430c8\";\n Uuidv5Namespace[\"x500\"] = \"6ba7b814-9dad-11d1-80b4-00c04fd430c8\";\n})(Uuidv5Namespace || (Uuidv5Namespace = {}));\n//# sourceMappingURL=uuid.types.js.map","\"use strict\";\n","export function requireNativeModule(moduleName) {\n throw new Error(`Cannot find native module '${moduleName}'`);\n}\nexport function requireOptionalNativeModule() {\n return null;\n}\n//# sourceMappingURL=requireNativeModule.web.js.map","export {};\n//# sourceMappingURL=TypedArrays.types.js.map","export var PermissionStatus;\n(function (PermissionStatus) {\n /**\n * User has granted the permission.\n */\n PermissionStatus[\"GRANTED\"] = \"granted\";\n /**\n * User hasn't granted or denied the permission yet.\n */\n PermissionStatus[\"UNDETERMINED\"] = \"undetermined\";\n /**\n * User has denied the permission.\n */\n PermissionStatus[\"DENIED\"] = \"denied\";\n})(PermissionStatus || (PermissionStatus = {}));\n//# sourceMappingURL=PermissionsInterface.js.map","import { useCallback, useEffect, useRef, useState } from 'react';\n/**\n * Get or request permission for protected functionality within the app.\n * It uses separate permission requesters to interact with a single permission.\n * By default, the hook will only retrieve the permission status.\n */\nfunction usePermission(methods, options) {\n const isMounted = useRef(true);\n const [status, setStatus] = useState(null);\n const { get = true, request = false, ...permissionOptions } = options || {};\n const getPermission = useCallback(async () => {\n const response = await methods.getMethod(Object.keys(permissionOptions).length > 0 ? permissionOptions : undefined);\n if (isMounted.current)\n setStatus(response);\n return response;\n }, [methods.getMethod]);\n const requestPermission = useCallback(async () => {\n const response = await methods.requestMethod(Object.keys(permissionOptions).length > 0 ? permissionOptions : undefined);\n if (isMounted.current)\n setStatus(response);\n return response;\n }, [methods.requestMethod]);\n useEffect(function runMethods() {\n if (request)\n requestPermission();\n if (!request && get)\n getPermission();\n }, [get, request, requestPermission, getPermission]);\n // Workaround for unmounting components receiving state updates\n useEffect(function didMount() {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n return [status, requestPermission, getPermission];\n}\n/**\n * Create a new permission hook with the permission methods built-in.\n * This can be used to quickly create specific permission hooks in every module.\n */\nexport function createPermissionHook(methods) {\n return (options) => usePermission(methods, options);\n}\n//# sourceMappingURL=PermissionsHook.js.map","// @needsAudit\nexport var AppOwnership;\n(function (AppOwnership) {\n /**\n * It is a [standalone app](/classic/building-standalone-apps#building-standalone-apps).\n */\n AppOwnership[\"Standalone\"] = \"standalone\";\n /**\n * The experience is running inside of the Expo Go app.\n */\n AppOwnership[\"Expo\"] = \"expo\";\n /**\n * It has been opened through a link from a standalone app.\n */\n AppOwnership[\"Guest\"] = \"guest\";\n})(AppOwnership || (AppOwnership = {}));\n// @docsMissing\nexport var ExecutionEnvironment;\n(function (ExecutionEnvironment) {\n ExecutionEnvironment[\"Bare\"] = \"bare\";\n ExecutionEnvironment[\"Standalone\"] = \"standalone\";\n ExecutionEnvironment[\"StoreClient\"] = \"storeClient\";\n})(ExecutionEnvironment || (ExecutionEnvironment = {}));\n// @needsAudit\n/**\n * Current supported values are `handset`, `tablet`, `desktop` and `tv`. CarPlay will show up\n * as `unsupported`.\n */\nexport var UserInterfaceIdiom;\n(function (UserInterfaceIdiom) {\n UserInterfaceIdiom[\"Handset\"] = \"handset\";\n UserInterfaceIdiom[\"Tablet\"] = \"tablet\";\n UserInterfaceIdiom[\"Desktop\"] = \"desktop\";\n UserInterfaceIdiom[\"TV\"] = \"tv\";\n UserInterfaceIdiom[\"Unsupported\"] = \"unsupported\";\n})(UserInterfaceIdiom || (UserInterfaceIdiom = {}));\n//# sourceMappingURL=Constants.types.js.map","import { ExecutionEnvironment, } from './Constants.types';\nconst ID_KEY = 'EXPO_CONSTANTS_INSTALLATION_ID';\nconst _sessionId = (Date.now() + '-' + Math.floor(Math.random() * 1000000000)).toString();\nfunction getBrowserName() {\n if (typeof navigator !== 'undefined' && typeof navigator.userAgent === 'string') {\n const agent = navigator.userAgent.toLowerCase();\n if (agent.includes('edge')) {\n return 'Edge';\n }\n else if (agent.includes('edg')) {\n return 'Chromium Edge';\n }\n else if (agent.includes('opr') && !!window['opr']) {\n return 'Opera';\n }\n else if (agent.includes('chrome') && !!window['chrome']) {\n return 'Chrome';\n }\n else if (agent.includes('trident')) {\n return 'IE';\n }\n else if (agent.includes('firefox')) {\n return 'Firefox';\n }\n else if (agent.includes('safari')) {\n return 'Safari';\n }\n }\n return undefined;\n}\nexport default {\n get appOwnership() {\n return null;\n },\n get executionEnvironment() {\n return ExecutionEnvironment.Bare;\n },\n get installationId() {\n let installationId;\n try {\n installationId = localStorage.getItem(ID_KEY);\n if (installationId == null || typeof installationId !== 'string') {\n installationId = (Date.now() + '-' + Math.floor(Math.random() * 1000000000)).toString();\n localStorage.setItem(ID_KEY, installationId);\n }\n }\n catch {\n installationId = _sessionId;\n }\n finally {\n return installationId;\n }\n },\n get sessionId() {\n return _sessionId;\n },\n get platform() {\n return { web: typeof navigator !== 'undefined' ? { ua: navigator.userAgent } : undefined };\n },\n get isHeadless() {\n if (typeof navigator === 'undefined')\n return true;\n return /\\bHeadlessChrome\\//.test(navigator.userAgent);\n },\n get isDevice() {\n // TODO: Bacon: Possibly want to add information regarding simulators\n return true;\n },\n get expoVersion() {\n return this.manifest.sdkVersion || null;\n },\n get linkingUri() {\n if (typeof location !== 'undefined') {\n // On native this is `exp://`\n // On web we should use the protocol and hostname (location.origin)\n return location.origin;\n }\n else {\n return '';\n }\n },\n get expoRuntimeVersion() {\n return this.expoVersion;\n },\n get deviceName() {\n return getBrowserName();\n },\n get nativeAppVersion() {\n return null;\n },\n get nativeBuildVersion() {\n return null;\n },\n get systemFonts() {\n // TODO: Bacon: Maybe possible.\n return [];\n },\n get statusBarHeight() {\n return 0;\n },\n get deviceYearClass() {\n // TODO: Bacon: The android version isn't very accurate either, maybe we could try and guess this value.\n return null;\n },\n get manifest() {\n // This is defined by @expo/webpack-config or babel-preset-expo.\n // If your site is bundled with a different config then you may not have access to the app.json automatically.\n return process.env.APP_MANIFEST || {};\n },\n get manifest2() {\n return null;\n },\n get experienceUrl() {\n if (typeof location !== 'undefined') {\n return location.origin;\n }\n else {\n return '';\n }\n },\n get debugMode() {\n return __DEV__;\n },\n async getWebViewUserAgentAsync() {\n if (typeof navigator !== 'undefined') {\n return navigator.userAgent;\n }\n else {\n return null;\n }\n },\n};\n//# sourceMappingURL=ExponentConstants.web.js.map","export { MD3Colors } from './styles/themes/v3/tokens';\nexport { useTheme, withTheme, ThemeProvider, DefaultTheme, adaptNavigationTheme } from './core/theming';\nexport * from './styles/themes';\nexport { default as Provider } from './core/PaperProvider';\nexport { default as PaperProvider } from './core/PaperProvider';\nexport { default as shadow } from './styles/shadow';\nexport { default as overlay } from './styles/overlay';\nexport { default as configureFonts } from './styles/fonts';\nimport * as Avatar from './components/Avatar/Avatar';\nimport * as Drawer from './components/Drawer/Drawer';\nimport * as List from './components/List/List';\nimport * as MD2Colors from './styles/themes/v2/colors';\nexport { MD2Colors };\nexport { Avatar, List, Drawer };\nexport * from './components/FAB/AnimatedFAB';\nexport { default as Badge } from './components/Badge';\nexport { default as ActivityIndicator } from './components/ActivityIndicator';\nexport { default as Banner } from './components/Banner';\nexport { default as BottomNavigation } from './components/BottomNavigation/BottomNavigation';\nexport { default as Button } from './components/Button/Button';\nexport { default as Card } from './components/Card/Card';\nexport { default as Checkbox } from './components/Checkbox';\nexport { default as Chip } from './components/Chip/Chip';\nexport { default as DataTable } from './components/DataTable/DataTable';\nexport { default as Dialog } from './components/Dialog/Dialog';\nexport { default as Divider } from './components/Divider';\nexport { default as FAB } from './components/FAB';\nexport { default as AnimatedFAB } from './components/FAB/AnimatedFAB';\nexport { default as HelperText } from './components/HelperText/HelperText';\nexport { default as Icon } from './components/Icon';\nexport { default as IconButton } from './components/IconButton/IconButton';\nexport { default as Menu } from './components/Menu/Menu';\nexport { default as Modal } from './components/Modal';\nexport { default as Portal } from './components/Portal/Portal';\nexport { default as ProgressBar } from './components/ProgressBar';\nexport { default as RadioButton } from './components/RadioButton';\nexport { default as Searchbar } from './components/Searchbar';\nexport { default as Snackbar } from './components/Snackbar';\nexport { default as Surface } from './components/Surface';\nexport { default as Switch } from './components/Switch/Switch';\nexport { default as Appbar } from './components/Appbar';\nexport { default as TouchableRipple } from './components/TouchableRipple/TouchableRipple';\nexport { default as TextInput } from './components/TextInput/TextInput';\nexport { default as ToggleButton } from './components/ToggleButton';\nexport { default as SegmentedButtons } from './components/SegmentedButtons/SegmentedButtons';\nexport { default as Tooltip } from './components/Tooltip/Tooltip';\nexport { Caption, Headline, Paragraph, Subheading, Title } from './components/Typography/v2';\nexport { default as Text, customText } from './components/Typography/Text';\n\n// Types\n//# sourceMappingURL=index.js.map","import { Platform } from 'react-native';\nconst ref = {\n palette: {\n primary100: 'rgba(255, 255, 255, 1)',\n primary99: 'rgba(255, 251, 254, 1)',\n primary95: 'rgba(246, 237, 255, 1)',\n primary90: 'rgba(234, 221, 255, 1)',\n primary80: 'rgba(208, 188, 255, 1)',\n primary70: 'rgba(182, 157, 248, 1)',\n primary60: 'rgba(154, 130, 219, 1)',\n primary50: 'rgba(127, 103, 190, 1)',\n primary40: 'rgba(103, 80, 164, 1)',\n primary30: 'rgba(79, 55, 139, 1)',\n primary20: 'rgba(56, 30, 114, 1)',\n primary10: 'rgba(33, 0, 93, 1)',\n primary0: 'rgba(0, 0, 0, 1)',\n secondary100: 'rgba(255, 255, 255, 1)',\n secondary99: 'rgba(255, 251, 254, 1)',\n secondary95: 'rgba(246, 237, 255, 1)',\n secondary90: 'rgba(232, 222, 248, 1)',\n secondary80: 'rgba(204, 194, 220, 1)',\n secondary70: 'rgba(176, 167, 192, 1)',\n secondary60: 'rgba(149, 141, 165, 1)',\n secondary50: 'rgba(122, 114, 137, 1)',\n secondary40: 'rgba(98, 91, 113, 1)',\n secondary30: 'rgba(74, 68, 88, 1)',\n secondary20: 'rgba(51, 45, 65, 1)',\n secondary10: 'rgba(29, 25, 43, 1)',\n secondary0: 'rgba(0, 0, 0, 1)',\n tertiary100: 'rgba(255, 255, 255, 1)',\n tertiary99: 'rgba(255, 251, 250, 1)',\n tertiary95: 'rgba(255, 236, 241, 1)',\n tertiary90: 'rgba(255, 216, 228, 1)',\n tertiary80: 'rgba(239, 184, 200, 1)',\n tertiary70: 'rgba(210, 157, 172, 1)',\n tertiary60: 'rgba(181, 131, 146, 1)',\n tertiary50: 'rgba(152, 105, 119, 1)',\n tertiary40: 'rgba(125, 82, 96, 1)',\n tertiary30: 'rgba(99, 59, 72, 1)',\n tertiary20: 'rgba(73, 37, 50, 1)',\n tertiary10: 'rgba(49, 17, 29, 1)',\n tertiary0: 'rgba(0, 0, 0, 1)',\n neutral100: 'rgba(255, 255, 255, 1)',\n neutral99: 'rgba(255, 251, 254, 1)',\n neutral95: 'rgba(244, 239, 244, 1)',\n neutral90: 'rgba(230, 225, 229, 1)',\n neutral80: 'rgba(201, 197, 202, 1)',\n neutral70: 'rgba(174, 170, 174, 1)',\n neutral60: 'rgba(147, 144, 148, 1)',\n neutral50: 'rgba(120, 117, 121, 1)',\n neutral40: 'rgba(96, 93, 98, 1)',\n neutral30: 'rgba(72, 70, 73, 1)',\n neutral20: 'rgba(49, 48, 51, 1)',\n neutral10: 'rgba(28, 27, 31, 1)',\n neutral0: 'rgba(0, 0, 0, 1)',\n neutralVariant100: 'rgba(255, 255, 255, 1)',\n neutralVariant99: 'rgba(255, 251, 254, 1)',\n neutralVariant95: 'rgba(245, 238, 250, 1)',\n neutralVariant90: 'rgba(231, 224, 236, 1)',\n neutralVariant80: 'rgba(202, 196, 208, 1)',\n neutralVariant70: 'rgba(174, 169, 180, 1)',\n neutralVariant60: 'rgba(147, 143, 153, 1)',\n neutralVariant50: 'rgba(121, 116, 126, 1)',\n neutralVariant40: 'rgba(96, 93, 102, 1)',\n neutralVariant30: 'rgba(73, 69, 79, 1)',\n neutralVariant20: 'rgba(50, 47, 55, 1)',\n neutralVariant10: 'rgba(29, 26, 34, 1)',\n neutralVariant0: 'rgba(0, 0, 0, 1)',\n error100: 'rgba(255, 255, 255, 1)',\n error99: 'rgba(255, 251, 249, 1)',\n error95: 'rgba(252, 238, 238, 1)',\n error90: 'rgba(249, 222, 220, 1)',\n error80: 'rgba(242, 184, 181, 1)',\n error70: 'rgba(236, 146, 142, 1)',\n error60: 'rgba(228, 105, 98, 1)',\n error50: 'rgba(220, 54, 46, 1)',\n error40: 'rgba(179, 38, 30, 1)',\n error30: 'rgba(140, 29, 24, 1)',\n error20: 'rgba(96, 20, 16, 1)',\n error10: 'rgba(65, 14, 11, 1)',\n error0: 'rgba(0, 0, 0, 1)'\n },\n typeface: {\n brandRegular: Platform.select({\n web: 'Roboto, \"Helvetica Neue\", Helvetica, Arial, sans-serif',\n ios: 'System',\n default: 'sans-serif'\n }),\n weightRegular: '400',\n plainMedium: Platform.select({\n web: 'Roboto, \"Helvetica Neue\", Helvetica, Arial, sans-serif',\n ios: 'System',\n default: 'sans-serif-medium'\n }),\n weightMedium: '500'\n },\n opacity: {\n level1: 0.08,\n level2: 0.12,\n level3: 0.16,\n level4: 0.38\n }\n};\nconst regularType = {\n fontFamily: ref.typeface.brandRegular,\n letterSpacing: 0,\n fontWeight: ref.typeface.weightRegular\n};\nconst mediumType = {\n fontFamily: ref.typeface.plainMedium,\n letterSpacing: 0.15,\n fontWeight: ref.typeface.weightMedium\n};\nexport const typescale = {\n displayLarge: {\n ...regularType,\n lineHeight: 64,\n fontSize: 57\n },\n displayMedium: {\n ...regularType,\n lineHeight: 52,\n fontSize: 45\n },\n displaySmall: {\n ...regularType,\n lineHeight: 44,\n fontSize: 36\n },\n headlineLarge: {\n ...regularType,\n lineHeight: 40,\n fontSize: 32\n },\n headlineMedium: {\n ...regularType,\n lineHeight: 36,\n fontSize: 28\n },\n headlineSmall: {\n ...regularType,\n lineHeight: 32,\n fontSize: 24\n },\n titleLarge: {\n ...regularType,\n lineHeight: 28,\n fontSize: 22\n },\n titleMedium: {\n ...mediumType,\n lineHeight: 24,\n fontSize: 16\n },\n titleSmall: {\n ...mediumType,\n letterSpacing: 0.1,\n lineHeight: 20,\n fontSize: 14\n },\n labelLarge: {\n ...mediumType,\n letterSpacing: 0.1,\n lineHeight: 20,\n fontSize: 14\n },\n labelMedium: {\n ...mediumType,\n letterSpacing: 0.5,\n lineHeight: 16,\n fontSize: 12\n },\n labelSmall: {\n ...mediumType,\n letterSpacing: 0.5,\n lineHeight: 16,\n fontSize: 11\n },\n bodyLarge: {\n ...mediumType,\n fontWeight: ref.typeface.weightRegular,\n fontFamily: ref.typeface.brandRegular,\n lineHeight: 24,\n fontSize: 16\n },\n bodyMedium: {\n ...mediumType,\n fontWeight: ref.typeface.weightRegular,\n fontFamily: ref.typeface.brandRegular,\n letterSpacing: 0.25,\n lineHeight: 20,\n fontSize: 14\n },\n bodySmall: {\n ...mediumType,\n fontWeight: ref.typeface.weightRegular,\n fontFamily: ref.typeface.brandRegular,\n letterSpacing: 0.4,\n lineHeight: 16,\n fontSize: 12\n },\n default: {\n ...regularType\n }\n};\nexport const tokens = {\n md: {\n ref,\n sys: {\n typescale\n }\n }\n};\nexport const MD3Colors = ref.palette;\n//# sourceMappingURL=tokens.js.map","import { createTheming } from '@callstack/react-theme-provider';\nimport color from 'color';\nimport { MD2DarkTheme, MD2LightTheme, MD3DarkTheme, MD3LightTheme } from '../styles/themes';\nexport const DefaultTheme = MD3LightTheme;\nexport const {\n ThemeProvider,\n withTheme,\n useTheme: useAppTheme\n} = createTheming(MD3LightTheme);\nexport function useTheme(overrides) {\n return useAppTheme(overrides);\n}\nexport const useInternalTheme = themeOverrides => useAppTheme(themeOverrides);\nexport const withInternalTheme = WrappedComponent => withTheme(WrappedComponent);\nexport const defaultThemesByVersion = {\n 2: {\n light: MD2LightTheme,\n dark: MD2DarkTheme\n },\n 3: {\n light: MD3LightTheme,\n dark: MD3DarkTheme\n }\n};\nexport const getTheme = function () {\n let isDark = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n let isV3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n const themeVersion = isV3 ? 3 : 2;\n const scheme = isDark ? 'dark' : 'light';\n return defaultThemesByVersion[themeVersion][scheme];\n};\n\n// eslint-disable-next-line no-redeclare\n\n// eslint-disable-next-line no-redeclare\n\n// eslint-disable-next-line no-redeclare\n\n// eslint-disable-next-line no-redeclare\nexport function adaptNavigationTheme(themes) {\n const {\n reactNavigationLight,\n reactNavigationDark,\n materialLight,\n materialDark\n } = themes;\n const getAdaptedTheme = (navigationTheme, MD3Theme) => {\n return {\n ...navigationTheme,\n colors: {\n ...navigationTheme.colors,\n primary: MD3Theme.colors.primary,\n background: MD3Theme.colors.background,\n card: MD3Theme.colors.elevation.level2,\n text: MD3Theme.colors.onSurface,\n border: MD3Theme.colors.outline,\n notification: MD3Theme.colors.error\n }\n };\n };\n const MD3Themes = {\n light: materialLight || MD3LightTheme,\n dark: materialDark || MD3DarkTheme\n };\n if (reactNavigationLight && reactNavigationDark) {\n const modes = ['light', 'dark'];\n const NavigationThemes = {\n light: reactNavigationLight,\n dark: reactNavigationDark\n };\n const {\n light: adaptedLight,\n dark: adaptedDark\n } = modes.reduce((prev, curr) => {\n return {\n ...prev,\n [curr]: getAdaptedTheme(NavigationThemes[curr], MD3Themes[curr])\n };\n }, {\n light: reactNavigationLight,\n dark: reactNavigationDark\n });\n return {\n LightTheme: adaptedLight,\n DarkTheme: adaptedDark\n };\n }\n if (reactNavigationDark) {\n return {\n DarkTheme: getAdaptedTheme(reactNavigationDark, MD3Themes.dark)\n };\n }\n return {\n LightTheme: getAdaptedTheme(reactNavigationLight, MD3Themes.light)\n };\n}\nexport const getDynamicThemeElevations = scheme => {\n const elevationValues = ['transparent', 0.05, 0.08, 0.11, 0.12, 0.14];\n return elevationValues.reduce((elevations, elevationValue, index) => {\n return {\n ...elevations,\n [`level${index}`]: index === 0 ? elevationValue : color(scheme.surface).mix(color(scheme.primary), elevationValue).rgb().string()\n };\n }, {});\n};\n//# sourceMappingURL=theming.js.map","\"use strict\";\n\nexports.__esModule = true;\n\nvar _createTheming = _interopRequireDefault(require(\"./createTheming\"));\n\nexports.createTheming = _createTheming.default;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n//# sourceMappingURL=index.js.map","\"use strict\";\n\nexports.__esModule = true;\nexports.default = createTheming;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _deepmerge = _interopRequireDefault(require(\"deepmerge\"));\n\nvar _createThemeProvider = _interopRequireDefault(require(\"./createThemeProvider\"));\n\nvar _createWithTheme = _interopRequireDefault(require(\"./createWithTheme\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\n\nfunction createTheming(defaultTheme) {\n var ThemeContext = React.createContext(defaultTheme);\n var ThemeProvider = (0, _createThemeProvider.default)(defaultTheme, ThemeContext);\n var withTheme = (0, _createWithTheme.default)(ThemeProvider, ThemeContext);\n\n var useTheme = function useTheme(overrides) {\n var theme = React.useContext(ThemeContext);\n var result = React.useMemo(function () {\n return theme && overrides ? (0, _deepmerge.default)(theme, overrides) : theme || overrides;\n }, [theme, overrides]);\n return result;\n };\n\n return {\n ThemeContext: ThemeContext,\n ThemeProvider: ThemeProvider,\n withTheme: withTheme,\n useTheme: useTheme\n };\n}\n//# sourceMappingURL=createTheming.js.map","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global = global || self, global.deepmerge = factory());\n}(this, function () { 'use strict';\n\n\tvar isMergeableObject = function isMergeableObject(value) {\n\t\treturn isNonNullObject(value)\n\t\t\t&& !isSpecial(value)\n\t};\n\n\tfunction isNonNullObject(value) {\n\t\treturn !!value && typeof value === 'object'\n\t}\n\n\tfunction isSpecial(value) {\n\t\tvar stringValue = Object.prototype.toString.call(value);\n\n\t\treturn stringValue === '[object RegExp]'\n\t\t\t|| stringValue === '[object Date]'\n\t\t\t|| isReactElement(value)\n\t}\n\n\t// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\n\tvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\n\tvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\n\tfunction isReactElement(value) {\n\t\treturn value.$$typeof === REACT_ELEMENT_TYPE\n\t}\n\n\tfunction emptyTarget(val) {\n\t\treturn Array.isArray(val) ? [] : {}\n\t}\n\n\tfunction cloneUnlessOtherwiseSpecified(value, options) {\n\t\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t\t: value\n\t}\n\n\tfunction defaultArrayMerge(target, source, options) {\n\t\treturn target.concat(source).map(function(element) {\n\t\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t\t})\n\t}\n\n\tfunction getMergeFunction(key, options) {\n\t\tif (!options.customMerge) {\n\t\t\treturn deepmerge\n\t\t}\n\t\tvar customMerge = options.customMerge(key);\n\t\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n\t}\n\n\tfunction getEnumerableOwnPropertySymbols(target) {\n\t\treturn Object.getOwnPropertySymbols\n\t\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\t\treturn target.propertyIsEnumerable(symbol)\n\t\t\t})\n\t\t\t: []\n\t}\n\n\tfunction getKeys(target) {\n\t\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n\t}\n\n\tfunction mergeObject(target, source, options) {\n\t\tvar destination = {};\n\t\tif (options.isMergeableObject(target)) {\n\t\t\tgetKeys(target).forEach(function(key) {\n\t\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t\t});\n\t\t}\n\t\tgetKeys(source).forEach(function(key) {\n\t\t\tif (!options.isMergeableObject(source[key]) || !target[key]) {\n\t\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t\t} else {\n\t\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t\t}\n\t\t});\n\t\treturn destination\n\t}\n\n\tfunction deepmerge(target, source, options) {\n\t\toptions = options || {};\n\t\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\t\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\n\t\tvar sourceIsArray = Array.isArray(source);\n\t\tvar targetIsArray = Array.isArray(target);\n\t\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\t\tif (!sourceAndTargetTypesMatch) {\n\t\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t\t} else if (sourceIsArray) {\n\t\t\treturn options.arrayMerge(target, source, options)\n\t\t} else {\n\t\t\treturn mergeObject(target, source, options)\n\t\t}\n\t}\n\n\tdeepmerge.all = function deepmergeAll(array, options) {\n\t\tif (!Array.isArray(array)) {\n\t\t\tthrow new Error('first argument should be an array')\n\t\t}\n\n\t\treturn array.reduce(function(prev, next) {\n\t\t\treturn deepmerge(prev, next, options)\n\t\t}, {})\n\t};\n\n\tvar deepmerge_1 = deepmerge;\n\n\treturn deepmerge_1;\n\n}));\n","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction createThemeProvider(defaultTheme, ThemeContext) {\n var _class, _temp;\n\n return _temp = _class =\n /*#__PURE__*/\n function (_React$Component) {\n _inheritsLoose(ThemeProvider, _React$Component);\n\n function ThemeProvider() {\n return _React$Component.apply(this, arguments) || this;\n }\n\n var _proto = ThemeProvider.prototype;\n\n _proto.render = function render() {\n return React.createElement(ThemeContext.Provider, {\n value: this.props.theme\n }, this.props.children);\n };\n\n return ThemeProvider;\n }(React.Component), _defineProperty(_class, \"defaultProps\", {\n theme: defaultTheme\n }), _temp;\n}\n\nvar _default = createThemeProvider;\nexports.default = _default;\n//# sourceMappingURL=createThemeProvider.js.map","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _deepmerge = _interopRequireDefault(require(\"deepmerge\"));\n\nvar _hoistNonReactStatics = _interopRequireDefault(require(\"hoist-non-react-statics\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar createWithTheme = function createWithTheme(ThemeProvider, ThemeContext) {\n return function withTheme(Comp) {\n var ThemedComponent =\n /*#__PURE__*/\n function (_React$Component) {\n _inheritsLoose(ThemedComponent, _React$Component);\n\n function ThemedComponent() {\n var _this;\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 = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _defineProperty(_assertThisInitialized(_this), \"_previous\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_merge\", function (a, b) {\n var previous = _this._previous;\n\n if (previous && previous.a === a && previous.b === b) {\n return previous.result;\n }\n\n var result = a && b && a !== b ? (0, _deepmerge.default)(a, b) : a || b;\n _this._previous = {\n a: a,\n b: b,\n result: result\n };\n return result;\n });\n\n return _this;\n }\n\n var _proto = ThemedComponent.prototype;\n\n _proto.render = function render() {\n var _this2 = this;\n\n var _this$props = this.props,\n _reactThemeProviderForwardedRef = _this$props._reactThemeProviderForwardedRef,\n rest = _objectWithoutPropertiesLoose(_this$props, [\"_reactThemeProviderForwardedRef\"]);\n\n return React.createElement(ThemeContext.Consumer, null, function (theme) {\n return React.createElement(Comp, _extends({}, rest, {\n theme: _this2._merge(theme, rest.theme),\n ref: _reactThemeProviderForwardedRef\n }));\n });\n };\n\n return ThemedComponent;\n }(React.Component);\n\n var ResultComponent = React.forwardRef(function (props, ref) {\n return React.createElement(ThemedComponent, _extends({}, props, {\n _reactThemeProviderForwardedRef: ref\n }));\n });\n ResultComponent.displayName = \"withTheme(\" + (Comp.displayName || Comp.name) + \")\";\n (0, _hoistNonReactStatics.default)(ResultComponent, Comp);\n return ResultComponent;\n };\n};\n\nvar _default = createWithTheme;\nexports.default = _default;\n//# sourceMappingURL=createWithTheme.js.map","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","'use strict';\n\nvar colorString = require('color-string');\nvar convert = require('color-convert');\n\nvar _slice = [].slice;\n\nvar skippedModels = [\n\t// to be honest, I don't really feel like keyword belongs in color convert, but eh.\n\t'keyword',\n\n\t// gray conflicts with some method names, and has its own method defined.\n\t'gray',\n\n\t// shouldn't really be in color-convert either...\n\t'hex'\n];\n\nvar hashedModelKeys = {};\nObject.keys(convert).forEach(function (model) {\n\thashedModelKeys[_slice.call(convert[model].labels).sort().join('')] = model;\n});\n\nvar limiters = {};\n\nfunction Color(obj, model) {\n\tif (!(this instanceof Color)) {\n\t\treturn new Color(obj, model);\n\t}\n\n\tif (model && model in skippedModels) {\n\t\tmodel = null;\n\t}\n\n\tif (model && !(model in convert)) {\n\t\tthrow new Error('Unknown model: ' + model);\n\t}\n\n\tvar i;\n\tvar channels;\n\n\tif (obj == null) { // eslint-disable-line no-eq-null,eqeqeq\n\t\tthis.model = 'rgb';\n\t\tthis.color = [0, 0, 0];\n\t\tthis.valpha = 1;\n\t} else if (obj instanceof Color) {\n\t\tthis.model = obj.model;\n\t\tthis.color = obj.color.slice();\n\t\tthis.valpha = obj.valpha;\n\t} else if (typeof obj === 'string') {\n\t\tvar result = colorString.get(obj);\n\t\tif (result === null) {\n\t\t\tthrow new Error('Unable to parse color from string: ' + obj);\n\t\t}\n\n\t\tthis.model = result.model;\n\t\tchannels = convert[this.model].channels;\n\t\tthis.color = result.value.slice(0, channels);\n\t\tthis.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1;\n\t} else if (obj.length) {\n\t\tthis.model = model || 'rgb';\n\t\tchannels = convert[this.model].channels;\n\t\tvar newArr = _slice.call(obj, 0, channels);\n\t\tthis.color = zeroArray(newArr, channels);\n\t\tthis.valpha = typeof obj[channels] === 'number' ? obj[channels] : 1;\n\t} else if (typeof obj === 'number') {\n\t\t// this is always RGB - can be converted later on.\n\t\tobj &= 0xFFFFFF;\n\t\tthis.model = 'rgb';\n\t\tthis.color = [\n\t\t\t(obj >> 16) & 0xFF,\n\t\t\t(obj >> 8) & 0xFF,\n\t\t\tobj & 0xFF\n\t\t];\n\t\tthis.valpha = 1;\n\t} else {\n\t\tthis.valpha = 1;\n\n\t\tvar keys = Object.keys(obj);\n\t\tif ('alpha' in obj) {\n\t\t\tkeys.splice(keys.indexOf('alpha'), 1);\n\t\t\tthis.valpha = typeof obj.alpha === 'number' ? obj.alpha : 0;\n\t\t}\n\n\t\tvar hashedKeys = keys.sort().join('');\n\t\tif (!(hashedKeys in hashedModelKeys)) {\n\t\t\tthrow new Error('Unable to parse color from object: ' + JSON.stringify(obj));\n\t\t}\n\n\t\tthis.model = hashedModelKeys[hashedKeys];\n\n\t\tvar labels = convert[this.model].labels;\n\t\tvar color = [];\n\t\tfor (i = 0; i < labels.length; i++) {\n\t\t\tcolor.push(obj[labels[i]]);\n\t\t}\n\n\t\tthis.color = zeroArray(color);\n\t}\n\n\t// perform limitations (clamping, etc.)\n\tif (limiters[this.model]) {\n\t\tchannels = convert[this.model].channels;\n\t\tfor (i = 0; i < channels; i++) {\n\t\t\tvar limit = limiters[this.model][i];\n\t\t\tif (limit) {\n\t\t\t\tthis.color[i] = limit(this.color[i]);\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.valpha = Math.max(0, Math.min(1, this.valpha));\n\n\tif (Object.freeze) {\n\t\tObject.freeze(this);\n\t}\n}\n\nColor.prototype = {\n\ttoString: function () {\n\t\treturn this.string();\n\t},\n\n\ttoJSON: function () {\n\t\treturn this[this.model]();\n\t},\n\n\tstring: function (places) {\n\t\tvar self = this.model in colorString.to ? this : this.rgb();\n\t\tself = self.round(typeof places === 'number' ? places : 1);\n\t\tvar args = self.valpha === 1 ? self.color : self.color.concat(this.valpha);\n\t\treturn colorString.to[self.model](args);\n\t},\n\n\tpercentString: function (places) {\n\t\tvar self = this.rgb().round(typeof places === 'number' ? places : 1);\n\t\tvar args = self.valpha === 1 ? self.color : self.color.concat(this.valpha);\n\t\treturn colorString.to.rgb.percent(args);\n\t},\n\n\tarray: function () {\n\t\treturn this.valpha === 1 ? this.color.slice() : this.color.concat(this.valpha);\n\t},\n\n\tobject: function () {\n\t\tvar result = {};\n\t\tvar channels = convert[this.model].channels;\n\t\tvar labels = convert[this.model].labels;\n\n\t\tfor (var i = 0; i < channels; i++) {\n\t\t\tresult[labels[i]] = this.color[i];\n\t\t}\n\n\t\tif (this.valpha !== 1) {\n\t\t\tresult.alpha = this.valpha;\n\t\t}\n\n\t\treturn result;\n\t},\n\n\tunitArray: function () {\n\t\tvar rgb = this.rgb().color;\n\t\trgb[0] /= 255;\n\t\trgb[1] /= 255;\n\t\trgb[2] /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.push(this.valpha);\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tunitObject: function () {\n\t\tvar rgb = this.rgb().object();\n\t\trgb.r /= 255;\n\t\trgb.g /= 255;\n\t\trgb.b /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.alpha = this.valpha;\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tround: function (places) {\n\t\tplaces = Math.max(places || 0, 0);\n\t\treturn new Color(this.color.map(roundToPlace(places)).concat(this.valpha), this.model);\n\t},\n\n\talpha: function (val) {\n\t\tif (arguments.length) {\n\t\t\treturn new Color(this.color.concat(Math.max(0, Math.min(1, val))), this.model);\n\t\t}\n\n\t\treturn this.valpha;\n\t},\n\n\t// rgb\n\tred: getset('rgb', 0, maxfn(255)),\n\tgreen: getset('rgb', 1, maxfn(255)),\n\tblue: getset('rgb', 2, maxfn(255)),\n\n\thue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, function (val) { return ((val % 360) + 360) % 360; }), // eslint-disable-line brace-style\n\n\tsaturationl: getset('hsl', 1, maxfn(100)),\n\tlightness: getset('hsl', 2, maxfn(100)),\n\n\tsaturationv: getset('hsv', 1, maxfn(100)),\n\tvalue: getset('hsv', 2, maxfn(100)),\n\n\tchroma: getset('hcg', 1, maxfn(100)),\n\tgray: getset('hcg', 2, maxfn(100)),\n\n\twhite: getset('hwb', 1, maxfn(100)),\n\twblack: getset('hwb', 2, maxfn(100)),\n\n\tcyan: getset('cmyk', 0, maxfn(100)),\n\tmagenta: getset('cmyk', 1, maxfn(100)),\n\tyellow: getset('cmyk', 2, maxfn(100)),\n\tblack: getset('cmyk', 3, maxfn(100)),\n\n\tx: getset('xyz', 0, maxfn(100)),\n\ty: getset('xyz', 1, maxfn(100)),\n\tz: getset('xyz', 2, maxfn(100)),\n\n\tl: getset('lab', 0, maxfn(100)),\n\ta: getset('lab', 1),\n\tb: getset('lab', 2),\n\n\tkeyword: function (val) {\n\t\tif (arguments.length) {\n\t\t\treturn new Color(val);\n\t\t}\n\n\t\treturn convert[this.model].keyword(this.color);\n\t},\n\n\thex: function (val) {\n\t\tif (arguments.length) {\n\t\t\treturn new Color(val);\n\t\t}\n\n\t\treturn colorString.to.hex(this.rgb().round().color);\n\t},\n\n\trgbNumber: function () {\n\t\tvar rgb = this.rgb().color;\n\t\treturn ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF);\n\t},\n\n\tluminosity: function () {\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\tvar rgb = this.rgb().color;\n\n\t\tvar lum = [];\n\t\tfor (var i = 0; i < rgb.length; i++) {\n\t\t\tvar chan = rgb[i] / 255;\n\t\t\tlum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4);\n\t\t}\n\n\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t},\n\n\tcontrast: function (color2) {\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\tvar lum1 = this.luminosity();\n\t\tvar lum2 = color2.luminosity();\n\n\t\tif (lum1 > lum2) {\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t}\n\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t},\n\n\tlevel: function (color2) {\n\t\tvar contrastRatio = this.contrast(color2);\n\t\tif (contrastRatio >= 7.1) {\n\t\t\treturn 'AAA';\n\t\t}\n\n\t\treturn (contrastRatio >= 4.5) ? 'AA' : '';\n\t},\n\n\tisDark: function () {\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\tvar rgb = this.rgb().color;\n\t\tvar yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;\n\t\treturn yiq < 128;\n\t},\n\n\tisLight: function () {\n\t\treturn !this.isDark();\n\t},\n\n\tnegate: function () {\n\t\tvar rgb = this.rgb();\n\t\tfor (var i = 0; i < 3; i++) {\n\t\t\trgb.color[i] = 255 - rgb.color[i];\n\t\t}\n\t\treturn rgb;\n\t},\n\n\tlighten: function (ratio) {\n\t\tvar hsl = this.hsl();\n\t\thsl.color[2] += hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdarken: function (ratio) {\n\t\tvar hsl = this.hsl();\n\t\thsl.color[2] -= hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tsaturate: function (ratio) {\n\t\tvar hsl = this.hsl();\n\t\thsl.color[1] += hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdesaturate: function (ratio) {\n\t\tvar hsl = this.hsl();\n\t\thsl.color[1] -= hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\twhiten: function (ratio) {\n\t\tvar hwb = this.hwb();\n\t\thwb.color[1] += hwb.color[1] * ratio;\n\t\treturn hwb;\n\t},\n\n\tblacken: function (ratio) {\n\t\tvar hwb = this.hwb();\n\t\thwb.color[2] += hwb.color[2] * ratio;\n\t\treturn hwb;\n\t},\n\n\tgrayscale: function () {\n\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n\t\tvar rgb = this.rgb().color;\n\t\tvar val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\treturn Color.rgb(val, val, val);\n\t},\n\n\tfade: function (ratio) {\n\t\treturn this.alpha(this.valpha - (this.valpha * ratio));\n\t},\n\n\topaquer: function (ratio) {\n\t\treturn this.alpha(this.valpha + (this.valpha * ratio));\n\t},\n\n\trotate: function (degrees) {\n\t\tvar hsl = this.hsl();\n\t\tvar hue = hsl.color[0];\n\t\thue = (hue + degrees) % 360;\n\t\thue = hue < 0 ? 360 + hue : hue;\n\t\thsl.color[0] = hue;\n\t\treturn hsl;\n\t},\n\n\tmix: function (mixinColor, weight) {\n\t\t// ported from sass implementation in C\n\t\t// https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n\t\tif (!mixinColor || !mixinColor.rgb) {\n\t\t\tthrow new Error('Argument to \"mix\" was not a Color instance, but rather an instance of ' + typeof mixinColor);\n\t\t}\n\t\tvar color1 = mixinColor.rgb();\n\t\tvar color2 = this.rgb();\n\t\tvar p = weight === undefined ? 0.5 : weight;\n\n\t\tvar w = 2 * p - 1;\n\t\tvar a = color1.alpha() - color2.alpha();\n\n\t\tvar w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n\t\tvar w2 = 1 - w1;\n\n\t\treturn Color.rgb(\n\t\t\t\tw1 * color1.red() + w2 * color2.red(),\n\t\t\t\tw1 * color1.green() + w2 * color2.green(),\n\t\t\t\tw1 * color1.blue() + w2 * color2.blue(),\n\t\t\t\tcolor1.alpha() * p + color2.alpha() * (1 - p));\n\t}\n};\n\n// model conversion methods and static constructors\nObject.keys(convert).forEach(function (model) {\n\tif (skippedModels.indexOf(model) !== -1) {\n\t\treturn;\n\t}\n\n\tvar channels = convert[model].channels;\n\n\t// conversion methods\n\tColor.prototype[model] = function () {\n\t\tif (this.model === model) {\n\t\t\treturn new Color(this);\n\t\t}\n\n\t\tif (arguments.length) {\n\t\t\treturn new Color(arguments, model);\n\t\t}\n\n\t\tvar newAlpha = typeof arguments[channels] === 'number' ? channels : this.valpha;\n\t\treturn new Color(assertArray(convert[this.model][model].raw(this.color)).concat(newAlpha), model);\n\t};\n\n\t// 'static' construction methods\n\tColor[model] = function (color) {\n\t\tif (typeof color === 'number') {\n\t\t\tcolor = zeroArray(_slice.call(arguments), channels);\n\t\t}\n\t\treturn new Color(color, model);\n\t};\n});\n\nfunction roundTo(num, places) {\n\treturn Number(num.toFixed(places));\n}\n\nfunction roundToPlace(places) {\n\treturn function (num) {\n\t\treturn roundTo(num, places);\n\t};\n}\n\nfunction getset(model, channel, modifier) {\n\tmodel = Array.isArray(model) ? model : [model];\n\n\tmodel.forEach(function (m) {\n\t\t(limiters[m] || (limiters[m] = []))[channel] = modifier;\n\t});\n\n\tmodel = model[0];\n\n\treturn function (val) {\n\t\tvar result;\n\n\t\tif (arguments.length) {\n\t\t\tif (modifier) {\n\t\t\t\tval = modifier(val);\n\t\t\t}\n\n\t\t\tresult = this[model]();\n\t\t\tresult.color[channel] = val;\n\t\t\treturn result;\n\t\t}\n\n\t\tresult = this[model]().color[channel];\n\t\tif (modifier) {\n\t\t\tresult = modifier(result);\n\t\t}\n\n\t\treturn result;\n\t};\n}\n\nfunction maxfn(max) {\n\treturn function (v) {\n\t\treturn Math.max(0, Math.min(max, v));\n\t};\n}\n\nfunction assertArray(val) {\n\treturn Array.isArray(val) ? val : [val];\n}\n\nfunction zeroArray(arr, length) {\n\tfor (var i = 0; i < length; i++) {\n\t\tif (typeof arr[i] !== 'number') {\n\t\t\tarr[i] = 0;\n\t\t}\n\t}\n\n\treturn arr;\n}\n\nmodule.exports = Color;\n","/* MIT license */\nvar colorNames = require('color-name');\nvar swizzle = require('simple-swizzle');\nvar hasOwnProperty = Object.hasOwnProperty;\n\nvar reverseNames = Object.create(null);\n\n// create a list of reverse color names\nfor (var name in colorNames) {\n\tif (hasOwnProperty.call(colorNames, name)) {\n\t\treverseNames[colorNames[name]] = name;\n\t}\n}\n\nvar cs = module.exports = {\n\tto: {},\n\tget: {}\n};\n\ncs.get = function (string) {\n\tvar prefix = string.substring(0, 3).toLowerCase();\n\tvar val;\n\tvar model;\n\tswitch (prefix) {\n\t\tcase 'hsl':\n\t\t\tval = cs.get.hsl(string);\n\t\t\tmodel = 'hsl';\n\t\t\tbreak;\n\t\tcase 'hwb':\n\t\t\tval = cs.get.hwb(string);\n\t\t\tmodel = 'hwb';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tval = cs.get.rgb(string);\n\t\t\tmodel = 'rgb';\n\t\t\tbreak;\n\t}\n\n\tif (!val) {\n\t\treturn null;\n\t}\n\n\treturn {model: model, value: val};\n};\n\ncs.get.rgb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar abbr = /^#([a-f0-9]{3,4})$/i;\n\tvar hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i;\n\tvar rgba = /^rgba?\\(\\s*([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/;\n\tvar per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/;\n\tvar keyword = /^(\\w+)$/;\n\n\tvar rgb = [0, 0, 0, 1];\n\tvar match;\n\tvar i;\n\tvar hexAlpha;\n\n\tif (match = string.match(hex)) {\n\t\thexAlpha = match[2];\n\t\tmatch = match[1];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\t// https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19\n\t\t\tvar i2 = i * 2;\n\t\t\trgb[i] = parseInt(match.slice(i2, i2 + 2), 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = parseInt(hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(abbr)) {\n\t\tmatch = match[1];\n\t\thexAlpha = match[3];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = parseInt(match[i] + match[i], 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(rgba)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = parseInt(match[i + 1], 0);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\tif (match[5]) {\n\t\t\t\trgb[3] = parseFloat(match[4]) * 0.01;\n\t\t\t} else {\n\t\t\t\trgb[3] = parseFloat(match[4]);\n\t\t\t}\n\t\t}\n\t} else if (match = string.match(per)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\tif (match[5]) {\n\t\t\t\trgb[3] = parseFloat(match[4]) * 0.01;\n\t\t\t} else {\n\t\t\t\trgb[3] = parseFloat(match[4]);\n\t\t\t}\n\t\t}\n\t} else if (match = string.match(keyword)) {\n\t\tif (match[1] === 'transparent') {\n\t\t\treturn [0, 0, 0, 0];\n\t\t}\n\n\t\tif (!hasOwnProperty.call(colorNames, match[1])) {\n\t\t\treturn null;\n\t\t}\n\n\t\trgb = colorNames[match[1]];\n\t\trgb[3] = 1;\n\n\t\treturn rgb;\n\t} else {\n\t\treturn null;\n\t}\n\n\tfor (i = 0; i < 3; i++) {\n\t\trgb[i] = clamp(rgb[i], 0, 255);\n\t}\n\trgb[3] = clamp(rgb[3], 0, 1);\n\n\treturn rgb;\n};\n\ncs.get.hsl = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar hsl = /^hsla?\\(\\s*([+-]?(?:\\d{0,3}\\.)?\\d+)(?:deg)?\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*(?:[,|\\/]\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tvar match = string.match(hsl);\n\n\tif (match) {\n\t\tvar alpha = parseFloat(match[4]);\n\t\tvar h = ((parseFloat(match[1]) % 360) + 360) % 360;\n\t\tvar s = clamp(parseFloat(match[2]), 0, 100);\n\t\tvar l = clamp(parseFloat(match[3]), 0, 100);\n\t\tvar a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);\n\n\t\treturn [h, s, l, a];\n\t}\n\n\treturn null;\n};\n\ncs.get.hwb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar hwb = /^hwb\\(\\s*([+-]?\\d{0,3}(?:\\.\\d+)?)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tvar match = string.match(hwb);\n\n\tif (match) {\n\t\tvar alpha = parseFloat(match[4]);\n\t\tvar h = ((parseFloat(match[1]) % 360) + 360) % 360;\n\t\tvar w = clamp(parseFloat(match[2]), 0, 100);\n\t\tvar b = clamp(parseFloat(match[3]), 0, 100);\n\t\tvar a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);\n\t\treturn [h, w, b, a];\n\t}\n\n\treturn null;\n};\n\ncs.to.hex = function () {\n\tvar rgba = swizzle(arguments);\n\n\treturn (\n\t\t'#' +\n\t\thexDouble(rgba[0]) +\n\t\thexDouble(rgba[1]) +\n\t\thexDouble(rgba[2]) +\n\t\t(rgba[3] < 1\n\t\t\t? (hexDouble(Math.round(rgba[3] * 255)))\n\t\t\t: '')\n\t);\n};\n\ncs.to.rgb = function () {\n\tvar rgba = swizzle(arguments);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')'\n\t\t: 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')';\n};\n\ncs.to.rgb.percent = function () {\n\tvar rgba = swizzle(arguments);\n\n\tvar r = Math.round(rgba[0] / 255 * 100);\n\tvar g = Math.round(rgba[1] / 255 * 100);\n\tvar b = Math.round(rgba[2] / 255 * 100);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)'\n\t\t: 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')';\n};\n\ncs.to.hsl = function () {\n\tvar hsla = swizzle(arguments);\n\treturn hsla.length < 4 || hsla[3] === 1\n\t\t? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)'\n\t\t: 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')';\n};\n\n// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\ncs.to.hwb = function () {\n\tvar hwba = swizzle(arguments);\n\n\tvar a = '';\n\tif (hwba.length >= 4 && hwba[3] !== 1) {\n\t\ta = ', ' + hwba[3];\n\t}\n\n\treturn 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')';\n};\n\ncs.to.keyword = function (rgb) {\n\treturn reverseNames[rgb.slice(0, 3)];\n};\n\n// helpers\nfunction clamp(num, min, max) {\n\treturn Math.min(Math.max(min, num), max);\n}\n\nfunction hexDouble(num) {\n\tvar str = Math.round(num).toString(16).toUpperCase();\n\treturn (str.length < 2) ? '0' + str : str;\n}\n","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","'use strict';\n\nvar isArrayish = require('is-arrayish');\n\nvar concat = Array.prototype.concat;\nvar slice = Array.prototype.slice;\n\nvar swizzle = module.exports = function swizzle(args) {\n\tvar results = [];\n\n\tfor (var i = 0, len = args.length; i < len; i++) {\n\t\tvar arg = args[i];\n\n\t\tif (isArrayish(arg)) {\n\t\t\t// http://jsperf.com/javascript-array-concat-vs-push/98\n\t\t\tresults = concat.call(results, slice.call(arg));\n\t\t} else {\n\t\t\tresults.push(arg);\n\t\t}\n\t}\n\n\treturn results;\n};\n\nswizzle.wrap = function (fn) {\n\treturn function () {\n\t\treturn fn(swizzle(arguments));\n\t};\n};\n","module.exports = function isArrayish(obj) {\n\tif (!obj || typeof obj === 'string') {\n\t\treturn false;\n\t}\n\n\treturn obj instanceof Array || Array.isArray(obj) ||\n\t\t(obj.length >= 0 && (obj.splice instanceof Function ||\n\t\t\t(Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String')));\n};\n","var conversions = require('./conversions');\nvar route = require('./route');\n\nvar convert = {};\n\nvar models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\tvar result = fn(args);\n\n\t\t// we're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (var len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(function (fromModel) {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tvar routes = route(fromModel);\n\tvar routeModels = Object.keys(routes);\n\n\trouteModels.forEach(function (toModel) {\n\t\tvar fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nmodule.exports = convert;\n","/* MIT license */\nvar cssKeywords = require('color-name');\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `typeof` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nvar reverseKeywords = {};\nfor (var key in cssKeywords) {\n\tif (cssKeywords.hasOwnProperty(key)) {\n\t\treverseKeywords[cssKeywords[key]] = key;\n\t}\n}\n\nvar convert = module.exports = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\n// hide .channels and .labels properties\nfor (var model in convert) {\n\tif (convert.hasOwnProperty(model)) {\n\t\tif (!('channels' in convert[model])) {\n\t\t\tthrow new Error('missing channels property: ' + model);\n\t\t}\n\n\t\tif (!('labels' in convert[model])) {\n\t\t\tthrow new Error('missing channel labels property: ' + model);\n\t\t}\n\n\t\tif (convert[model].labels.length !== convert[model].channels) {\n\t\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t\t}\n\n\t\tvar channels = convert[model].channels;\n\t\tvar labels = convert[model].labels;\n\t\tdelete convert[model].channels;\n\t\tdelete convert[model].labels;\n\t\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\t\tObject.defineProperty(convert[model], 'labels', {value: labels});\n\t}\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar min = Math.min(r, g, b);\n\tvar max = Math.max(r, g, b);\n\tvar delta = max - min;\n\tvar h;\n\tvar s;\n\tvar l;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tl = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tvar rdif;\n\tvar gdif;\n\tvar bdif;\n\tvar h;\n\tvar s;\n\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar v = Math.max(r, g, b);\n\tvar diff = v - Math.min(r, g, b);\n\tvar diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = s = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tvar r = rgb[0];\n\tvar g = rgb[1];\n\tvar b = rgb[2];\n\tvar h = convert.rgb.hsl(rgb)[0];\n\tvar w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar c;\n\tvar m;\n\tvar y;\n\tvar k;\n\n\tk = Math.min(1 - r, 1 - g, 1 - b);\n\tc = (1 - r - k) / (1 - k) || 0;\n\tm = (1 - g - k) / (1 - k) || 0;\n\ty = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\n/**\n * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n * */\nfunction comparativeDistance(x, y) {\n\treturn (\n\t\tMath.pow(x[0] - y[0], 2) +\n\t\tMath.pow(x[1] - y[1], 2) +\n\t\tMath.pow(x[2] - y[2], 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tvar reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tvar currentClosestDistance = Infinity;\n\tvar currentClosestKeyword;\n\n\tfor (var keyword in cssKeywords) {\n\t\tif (cssKeywords.hasOwnProperty(keyword)) {\n\t\t\tvar value = cssKeywords[keyword];\n\n\t\t\t// Compute comparative distance\n\t\t\tvar distance = comparativeDistance(rgb, value);\n\n\t\t\t// Check if its less, if so set as closest\n\t\t\tif (distance < currentClosestDistance) {\n\t\t\t\tcurrentClosestDistance = distance;\n\t\t\t\tcurrentClosestKeyword = keyword;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\n\t// assume sRGB\n\tr = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);\n\n\tvar x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tvar y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tvar z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tvar xyz = convert.rgb.xyz(rgb);\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tvar h = hsl[0] / 360;\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar t1;\n\tvar t2;\n\tvar t3;\n\tvar rgb;\n\tvar val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tt1 = 2 * l - t2;\n\n\trgb = [0, 0, 0];\n\tfor (var i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tvar h = hsl[0];\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar smin = s;\n\tvar lmin = Math.max(l, 0.01);\n\tvar sv;\n\tvar v;\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tv = (l + s) / 2;\n\tsv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tvar h = hsv[0] / 60;\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar hi = Math.floor(h) % 6;\n\n\tvar f = h - Math.floor(h);\n\tvar p = 255 * v * (1 - s);\n\tvar q = 255 * v * (1 - (s * f));\n\tvar t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tvar h = hsv[0];\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar vmin = Math.max(v, 0.01);\n\tvar lmin;\n\tvar sl;\n\tvar l;\n\n\tl = (2 - s) * v;\n\tlmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tvar h = hwb[0] / 360;\n\tvar wh = hwb[1] / 100;\n\tvar bl = hwb[2] / 100;\n\tvar ratio = wh + bl;\n\tvar i;\n\tvar v;\n\tvar f;\n\tvar n;\n\n\t// wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\ti = Math.floor(6 * h);\n\tv = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tn = wh + f * (v - wh); // linear interpolation\n\n\tvar r;\n\tvar g;\n\tvar b;\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tvar c = cmyk[0] / 100;\n\tvar m = cmyk[1] / 100;\n\tvar y = cmyk[2] / 100;\n\tvar k = cmyk[3] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = 1 - Math.min(1, c * (1 - k) + k);\n\tg = 1 - Math.min(1, m * (1 - k) + k);\n\tb = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tvar x = xyz[0] / 100;\n\tvar y = xyz[1] / 100;\n\tvar z = xyz[2] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar x;\n\tvar y;\n\tvar z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tvar y2 = Math.pow(y, 3);\n\tvar x2 = Math.pow(x, 3);\n\tvar z2 = Math.pow(z, 3);\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar hr;\n\tvar h;\n\tvar c;\n\n\thr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tc = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tvar l = lch[0];\n\tvar c = lch[1];\n\tvar h = lch[2];\n\tvar a;\n\tvar b;\n\tvar hr;\n\n\thr = h / 360 * 2 * Math.PI;\n\ta = c * Math.cos(hr);\n\tb = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\tvar value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tvar ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\n\t// we use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tvar ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tvar color = args % 10;\n\n\t// handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tvar mult = (~~(args > 50) + 1) * 0.5;\n\tvar r = ((color & 1) * mult) * 255;\n\tvar g = (((color >> 1) & 1) * mult) * 255;\n\tvar b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// handle greyscale\n\tif (args >= 232) {\n\t\tvar c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tvar rem;\n\tvar r = Math.floor(args / 36) / 5 * 255;\n\tvar g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tvar b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tvar integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tvar match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tvar colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(function (char) {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tvar integer = parseInt(colorString, 16);\n\tvar r = (integer >> 16) & 0xFF;\n\tvar g = (integer >> 8) & 0xFF;\n\tvar b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar max = Math.max(Math.max(r, g), b);\n\tvar min = Math.min(Math.min(r, g), b);\n\tvar chroma = (max - min);\n\tvar grayscale;\n\tvar hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma + 4;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar c = 1;\n\tvar f = 0;\n\n\tif (l < 0.5) {\n\t\tc = 2.0 * s * l;\n\t} else {\n\t\tc = 2.0 * s * (1.0 - l);\n\t}\n\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\n\tvar c = s * v;\n\tvar f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tvar h = hcg[0] / 360;\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tvar pure = [0, 0, 0];\n\tvar hi = (h % 1) * 6;\n\tvar v = hi % 1;\n\tvar w = 1 - v;\n\tvar mg = 0;\n\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar v = c + g * (1.0 - c);\n\tvar f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar l = g * (1.0 - c) + 0.5 * c;\n\tvar s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\tvar v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tvar w = hwb[1] / 100;\n\tvar b = hwb[2] / 100;\n\tvar v = 1 - b;\n\tvar c = v - w;\n\tvar g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = convert.gray.hsv = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tvar val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tvar integer = (val << 16) + (val << 8) + val;\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tvar val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n","var conversions = require('./conversions');\n\n/*\n\tthis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tvar graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tvar models = Object.keys(conversions);\n\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tvar graph = buildGraph();\n\tvar queue = [fromModel]; // unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tvar current = queue.pop();\n\t\tvar adjacents = Object.keys(conversions[current]);\n\n\t\tfor (var len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tvar adjacent = adjacents[i];\n\t\t\tvar node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tvar path = [graph[toModel].parent, toModel];\n\tvar fn = conversions[graph[toModel].parent][toModel];\n\n\tvar cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nmodule.exports = function (fromModel) {\n\tvar graph = deriveBFS(fromModel);\n\tvar conversion = {};\n\n\tvar models = Object.keys(graph);\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tvar toModel = models[i];\n\t\tvar node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// no possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\n","export { MD3LightTheme } from './v3/LightTheme';\nexport { MD3DarkTheme } from './v3/DarkTheme';\nexport { MD2LightTheme } from './v2/LightTheme';\nexport { MD2DarkTheme } from './v2/DarkTheme';\n//# sourceMappingURL=index.js.map","import color from 'color';\nimport { MD3Colors, tokens } from './tokens';\nimport configureFonts from '../../fonts';\nconst {\n palette,\n opacity\n} = tokens.md.ref;\nexport const MD3LightTheme = {\n dark: false,\n roundness: 4,\n version: 3,\n isV3: true,\n colors: {\n primary: palette.primary40,\n primaryContainer: palette.primary90,\n secondary: palette.secondary40,\n secondaryContainer: palette.secondary90,\n tertiary: palette.tertiary40,\n tertiaryContainer: palette.tertiary90,\n surface: palette.neutral99,\n surfaceVariant: palette.neutralVariant90,\n surfaceDisabled: color(palette.neutral10).alpha(opacity.level2).rgb().string(),\n background: palette.neutral99,\n error: palette.error40,\n errorContainer: palette.error90,\n onPrimary: palette.primary100,\n onPrimaryContainer: palette.primary10,\n onSecondary: palette.secondary100,\n onSecondaryContainer: palette.secondary10,\n onTertiary: palette.tertiary100,\n onTertiaryContainer: palette.tertiary10,\n onSurface: palette.neutral10,\n onSurfaceVariant: palette.neutralVariant30,\n onSurfaceDisabled: color(palette.neutral10).alpha(opacity.level4).rgb().string(),\n onError: palette.error100,\n onErrorContainer: palette.error10,\n onBackground: palette.neutral10,\n outline: palette.neutralVariant50,\n outlineVariant: palette.neutralVariant80,\n inverseSurface: palette.neutral20,\n inverseOnSurface: palette.neutral95,\n inversePrimary: palette.primary80,\n shadow: palette.neutral0,\n scrim: palette.neutral0,\n backdrop: color(MD3Colors.neutralVariant20).alpha(0.4).rgb().string(),\n elevation: {\n level0: 'transparent',\n // Note: Color values with transparency cause RN to transfer shadows to children nodes\n // instead of View component in Surface. Providing solid background fixes the issue.\n // Opaque color values generated with `palette.primary99` used as background\n level1: 'rgb(247, 243, 249)',\n // palette.primary40, alpha 0.05\n level2: 'rgb(243, 237, 246)',\n // palette.primary40, alpha 0.08\n level3: 'rgb(238, 232, 244)',\n // palette.primary40, alpha 0.11\n level4: 'rgb(236, 230, 243)',\n // palette.primary40, alpha 0.12\n level5: 'rgb(233, 227, 241)' // palette.primary40, alpha 0.14\n }\n },\n\n fonts: configureFonts(),\n animation: {\n scale: 1.0\n }\n};\n//# sourceMappingURL=LightTheme.js.map","import { Platform } from 'react-native';\nimport { typescale } from './themes/v3/tokens';\nexport const fontConfig = {\n web: {\n regular: {\n fontFamily: 'Roboto, \"Helvetica Neue\", Helvetica, Arial, sans-serif',\n fontWeight: '400'\n },\n medium: {\n fontFamily: 'Roboto, \"Helvetica Neue\", Helvetica, Arial, sans-serif',\n fontWeight: '500'\n },\n light: {\n fontFamily: 'Roboto, \"Helvetica Neue\", Helvetica, Arial, sans-serif',\n fontWeight: '300'\n },\n thin: {\n fontFamily: 'Roboto, \"Helvetica Neue\", Helvetica, Arial, sans-serif',\n fontWeight: '100'\n }\n },\n ios: {\n regular: {\n fontFamily: 'System',\n fontWeight: '400'\n },\n medium: {\n fontFamily: 'System',\n fontWeight: '500'\n },\n light: {\n fontFamily: 'System',\n fontWeight: '300'\n },\n thin: {\n fontFamily: 'System',\n fontWeight: '100'\n }\n },\n default: {\n regular: {\n fontFamily: 'sans-serif',\n fontWeight: 'normal'\n },\n medium: {\n fontFamily: 'sans-serif-medium',\n fontWeight: 'normal'\n },\n light: {\n fontFamily: 'sans-serif-light',\n fontWeight: 'normal'\n },\n thin: {\n fontFamily: 'sans-serif-thin',\n fontWeight: 'normal'\n }\n }\n};\nfunction configureV2Fonts(config) {\n const fonts = Platform.select({\n ...fontConfig,\n ...config\n });\n return fonts;\n}\nfunction configureV3Fonts(config) {\n if (!config) {\n return typescale;\n }\n const isFlatConfig = Object.keys(config).every(key => typeof config[key] !== 'object');\n if (isFlatConfig) {\n return Object.fromEntries(Object.entries(typescale).map(_ref => {\n let [variantName, variantProperties] = _ref;\n return [variantName, {\n ...variantProperties,\n ...config\n }];\n }));\n }\n return Object.assign({}, typescale, ...Object.entries(config).map(_ref2 => {\n let [variantName, variantProperties] = _ref2;\n return {\n [variantName]: {\n ...typescale[variantName],\n ...variantProperties\n }\n };\n }));\n}\n\n// eslint-disable-next-line no-redeclare\n\n// eslint-disable-next-line no-redeclare\n\n// eslint-disable-next-line no-redeclare\n\n// eslint-disable-next-line no-redeclare\n\n// eslint-disable-next-line no-redeclare\n\n// eslint-disable-next-line no-redeclare\nexport default function configureFonts(params) {\n const {\n isV3 = true,\n config\n } = params || {};\n if (isV3) {\n return configureV3Fonts(config);\n }\n return configureV2Fonts(config);\n}\n//# sourceMappingURL=fonts.js.map","import color from 'color';\nimport { MD3LightTheme } from './LightTheme';\nimport { MD3Colors, tokens } from './tokens';\nconst {\n palette,\n opacity\n} = tokens.md.ref;\nexport const MD3DarkTheme = {\n ...MD3LightTheme,\n dark: true,\n mode: 'adaptive',\n version: 3,\n isV3: true,\n colors: {\n primary: palette.primary80,\n primaryContainer: palette.primary30,\n secondary: palette.secondary80,\n secondaryContainer: palette.secondary30,\n tertiary: palette.tertiary80,\n tertiaryContainer: palette.tertiary30,\n surface: palette.neutral10,\n surfaceVariant: palette.neutralVariant30,\n surfaceDisabled: color(palette.neutral90).alpha(opacity.level2).rgb().string(),\n background: palette.neutral10,\n error: palette.error80,\n errorContainer: palette.error30,\n onPrimary: palette.primary20,\n onPrimaryContainer: palette.primary90,\n onSecondary: palette.secondary20,\n onSecondaryContainer: palette.secondary90,\n onTertiary: palette.tertiary20,\n onTertiaryContainer: palette.tertiary90,\n onSurface: palette.neutral90,\n onSurfaceVariant: palette.neutralVariant80,\n onSurfaceDisabled: color(palette.neutral90).alpha(opacity.level4).rgb().string(),\n onError: palette.error20,\n onErrorContainer: palette.error80,\n onBackground: palette.neutral90,\n outline: palette.neutralVariant60,\n outlineVariant: palette.neutralVariant30,\n inverseSurface: palette.neutral90,\n inverseOnSurface: palette.neutral20,\n inversePrimary: palette.primary40,\n shadow: palette.neutral0,\n scrim: palette.neutral0,\n backdrop: color(MD3Colors.neutralVariant20).alpha(0.4).rgb().string(),\n elevation: {\n level0: 'transparent',\n // Note: Color values with transparency cause RN to transfer shadows to children nodes\n // instead of View component in Surface. Providing solid background fixes the issue.\n // Opaque color values generated with `palette.primary80` used as background\n level1: 'rgb(37, 35, 42)',\n // palette.primary80, alpha 0.05\n level2: 'rgb(44, 40, 49)',\n // palette.primary80, alpha 0.08\n level3: 'rgb(49, 44, 56)',\n // palette.primary80, alpha 0.11\n level4: 'rgb(51, 46, 58)',\n // palette.primary80, alpha 0.12\n level5: 'rgb(52, 49, 63)' // palette.primary80, alpha 0.14\n }\n }\n};\n//# sourceMappingURL=DarkTheme.js.map","import color from 'color';\nimport { black, pinkA400, white } from './colors';\nimport configureFonts from '../../fonts';\nexport const MD2LightTheme = {\n dark: false,\n roundness: 4,\n version: 2,\n isV3: false,\n colors: {\n primary: '#6200ee',\n accent: '#03dac4',\n background: '#f6f6f6',\n surface: white,\n error: '#B00020',\n text: black,\n onSurface: '#000000',\n disabled: color(black).alpha(0.26).rgb().string(),\n placeholder: color(black).alpha(0.54).rgb().string(),\n backdrop: color(black).alpha(0.5).rgb().string(),\n notification: pinkA400,\n tooltip: 'rgba(28, 27, 31, 1)'\n },\n fonts: configureFonts({\n isV3: false\n }),\n animation: {\n scale: 1.0\n }\n};\n//# sourceMappingURL=LightTheme.js.map","export const transparent = 'rgba(255, 255, 255, 0)';\nexport const red50 = '#ffebee';\nexport const red100 = '#ffcdd2';\nexport const red200 = '#ef9a9a';\nexport const red300 = '#e57373';\nexport const red400 = '#ef5350';\nexport const red500 = '#f44336';\nexport const red600 = '#e53935';\nexport const red700 = '#d32f2f';\nexport const red800 = '#c62828';\nexport const red900 = '#b71c1c';\nexport const redA100 = '#ff8a80';\nexport const redA200 = '#ff5252';\nexport const redA400 = '#ff1744';\nexport const redA700 = '#d50000';\nexport const pink50 = '#fce4ec';\nexport const pink100 = '#f8bbd0';\nexport const pink200 = '#f48fb1';\nexport const pink300 = '#f06292';\nexport const pink400 = '#ec407a';\nexport const pink500 = '#e91e63';\nexport const pink600 = '#d81b60';\nexport const pink700 = '#c2185b';\nexport const pink800 = '#ad1457';\nexport const pink900 = '#880e4f';\nexport const pinkA100 = '#ff80ab';\nexport const pinkA200 = '#ff4081';\nexport const pinkA400 = '#f50057';\nexport const pinkA700 = '#c51162';\nexport const purple50 = '#f3e5f5';\nexport const purple100 = '#e1bee7';\nexport const purple200 = '#ce93d8';\nexport const purple300 = '#ba68c8';\nexport const purple400 = '#ab47bc';\nexport const purple500 = '#9c27b0';\nexport const purple600 = '#8e24aa';\nexport const purple700 = '#7b1fa2';\nexport const purple800 = '#6a1b9a';\nexport const purple900 = '#4a148c';\nexport const purpleA100 = '#ea80fc';\nexport const purpleA200 = '#e040fb';\nexport const purpleA400 = '#d500f9';\nexport const purpleA700 = '#aa00ff';\nexport const deepPurple50 = '#ede7f6';\nexport const deepPurple100 = '#d1c4e9';\nexport const deepPurple200 = '#b39ddb';\nexport const deepPurple300 = '#9575cd';\nexport const deepPurple400 = '#7e57c2';\nexport const deepPurple500 = '#673ab7';\nexport const deepPurple600 = '#5e35b1';\nexport const deepPurple700 = '#512da8';\nexport const deepPurple800 = '#4527a0';\nexport const deepPurple900 = '#311b92';\nexport const deepPurpleA100 = '#b388ff';\nexport const deepPurpleA200 = '#7c4dff';\nexport const deepPurpleA400 = '#651fff';\nexport const deepPurpleA700 = '#6200ea';\nexport const indigo50 = '#e8eaf6';\nexport const indigo100 = '#c5cae9';\nexport const indigo200 = '#9fa8da';\nexport const indigo300 = '#7986cb';\nexport const indigo400 = '#5c6bc0';\nexport const indigo500 = '#3f51b5';\nexport const indigo600 = '#3949ab';\nexport const indigo700 = '#303f9f';\nexport const indigo800 = '#283593';\nexport const indigo900 = '#1a237e';\nexport const indigoA100 = '#8c9eff';\nexport const indigoA200 = '#536dfe';\nexport const indigoA400 = '#3d5afe';\nexport const indigoA700 = '#304ffe';\nexport const blue50 = '#e3f2fd';\nexport const blue100 = '#bbdefb';\nexport const blue200 = '#90caf9';\nexport const blue300 = '#64b5f6';\nexport const blue400 = '#42a5f5';\nexport const blue500 = '#2196f3';\nexport const blue600 = '#1e88e5';\nexport const blue700 = '#1976d2';\nexport const blue800 = '#1565c0';\nexport const blue900 = '#0d47a1';\nexport const blueA100 = '#82b1ff';\nexport const blueA200 = '#448aff';\nexport const blueA400 = '#2979ff';\nexport const blueA700 = '#2962ff';\nexport const lightBlue50 = '#e1f5fe';\nexport const lightBlue100 = '#b3e5fc';\nexport const lightBlue200 = '#81d4fa';\nexport const lightBlue300 = '#4fc3f7';\nexport const lightBlue400 = '#29b6f6';\nexport const lightBlue500 = '#03a9f4';\nexport const lightBlue600 = '#039be5';\nexport const lightBlue700 = '#0288d1';\nexport const lightBlue800 = '#0277bd';\nexport const lightBlue900 = '#01579b';\nexport const lightBlueA100 = '#80d8ff';\nexport const lightBlueA200 = '#40c4ff';\nexport const lightBlueA400 = '#00b0ff';\nexport const lightBlueA700 = '#0091ea';\nexport const cyan50 = '#e0f7fa';\nexport const cyan100 = '#b2ebf2';\nexport const cyan200 = '#80deea';\nexport const cyan300 = '#4dd0e1';\nexport const cyan400 = '#26c6da';\nexport const cyan500 = '#00bcd4';\nexport const cyan600 = '#00acc1';\nexport const cyan700 = '#0097a7';\nexport const cyan800 = '#00838f';\nexport const cyan900 = '#006064';\nexport const cyanA100 = '#84ffff';\nexport const cyanA200 = '#18ffff';\nexport const cyanA400 = '#00e5ff';\nexport const cyanA700 = '#00b8d4';\nexport const teal50 = '#e0f2f1';\nexport const teal100 = '#b2dfdb';\nexport const teal200 = '#80cbc4';\nexport const teal300 = '#4db6ac';\nexport const teal400 = '#26a69a';\nexport const teal500 = '#009688';\nexport const teal600 = '#00897b';\nexport const teal700 = '#00796b';\nexport const teal800 = '#00695c';\nexport const teal900 = '#004d40';\nexport const tealA100 = '#a7ffeb';\nexport const tealA200 = '#64ffda';\nexport const tealA400 = '#1de9b6';\nexport const tealA700 = '#00bfa5';\nexport const green50 = '#e8f5e9';\nexport const green100 = '#c8e6c9';\nexport const green200 = '#a5d6a7';\nexport const green300 = '#81c784';\nexport const green400 = '#66bb6a';\nexport const green500 = '#4caf50';\nexport const green600 = '#43a047';\nexport const green700 = '#388e3c';\nexport const green800 = '#2e7d32';\nexport const green900 = '#1b5e20';\nexport const greenA100 = '#b9f6ca';\nexport const greenA200 = '#69f0ae';\nexport const greenA400 = '#00e676';\nexport const greenA700 = '#00c853';\nexport const lightGreen50 = '#f1f8e9';\nexport const lightGreen100 = '#dcedc8';\nexport const lightGreen200 = '#c5e1a5';\nexport const lightGreen300 = '#aed581';\nexport const lightGreen400 = '#9ccc65';\nexport const lightGreen500 = '#8bc34a';\nexport const lightGreen600 = '#7cb342';\nexport const lightGreen700 = '#689f38';\nexport const lightGreen800 = '#558b2f';\nexport const lightGreen900 = '#33691e';\nexport const lightGreenA100 = '#ccff90';\nexport const lightGreenA200 = '#b2ff59';\nexport const lightGreenA400 = '#76ff03';\nexport const lightGreenA700 = '#64dd17';\nexport const lime50 = '#f9fbe7';\nexport const lime100 = '#f0f4c3';\nexport const lime200 = '#e6ee9c';\nexport const lime300 = '#dce775';\nexport const lime400 = '#d4e157';\nexport const lime500 = '#cddc39';\nexport const lime600 = '#c0ca33';\nexport const lime700 = '#afb42b';\nexport const lime800 = '#9e9d24';\nexport const lime900 = '#827717';\nexport const limeA100 = '#f4ff81';\nexport const limeA200 = '#eeff41';\nexport const limeA400 = '#c6ff00';\nexport const limeA700 = '#aeea00';\nexport const yellow50 = '#fffde7';\nexport const yellow100 = '#fff9c4';\nexport const yellow200 = '#fff59d';\nexport const yellow300 = '#fff176';\nexport const yellow400 = '#ffee58';\nexport const yellow500 = '#ffeb3b';\nexport const yellow600 = '#fdd835';\nexport const yellow700 = '#fbc02d';\nexport const yellow800 = '#f9a825';\nexport const yellow900 = '#f57f17';\nexport const yellowA100 = '#ffff8d';\nexport const yellowA200 = '#ffff00';\nexport const yellowA400 = '#ffea00';\nexport const yellowA700 = '#ffd600';\nexport const amber50 = '#fff8e1';\nexport const amber100 = '#ffecb3';\nexport const amber200 = '#ffe082';\nexport const amber300 = '#ffd54f';\nexport const amber400 = '#ffca28';\nexport const amber500 = '#ffc107';\nexport const amber600 = '#ffb300';\nexport const amber700 = '#ffa000';\nexport const amber800 = '#ff8f00';\nexport const amber900 = '#ff6f00';\nexport const amberA100 = '#ffe57f';\nexport const amberA200 = '#ffd740';\nexport const amberA400 = '#ffc400';\nexport const amberA700 = '#ffab00';\nexport const orange50 = '#fff3e0';\nexport const orange100 = '#ffe0b2';\nexport const orange200 = '#ffcc80';\nexport const orange300 = '#ffb74d';\nexport const orange400 = '#ffa726';\nexport const orange500 = '#ff9800';\nexport const orange600 = '#fb8c00';\nexport const orange700 = '#f57c00';\nexport const orange800 = '#ef6c00';\nexport const orange900 = '#e65100';\nexport const orangeA100 = '#ffd180';\nexport const orangeA200 = '#ffab40';\nexport const orangeA400 = '#ff9100';\nexport const orangeA700 = '#ff6d00';\nexport const deepOrange50 = '#fbe9e7';\nexport const deepOrange100 = '#ffccbc';\nexport const deepOrange200 = '#ffab91';\nexport const deepOrange300 = '#ff8a65';\nexport const deepOrange400 = '#ff7043';\nexport const deepOrange500 = '#ff5722';\nexport const deepOrange600 = '#f4511e';\nexport const deepOrange700 = '#e64a19';\nexport const deepOrange800 = '#d84315';\nexport const deepOrange900 = '#bf360c';\nexport const deepOrangeA100 = '#ff9e80';\nexport const deepOrangeA200 = '#ff6e40';\nexport const deepOrangeA400 = '#ff3d00';\nexport const deepOrangeA700 = '#dd2c00';\nexport const brown50 = '#efebe9';\nexport const brown100 = '#d7ccc8';\nexport const brown200 = '#bcaaa4';\nexport const brown300 = '#a1887f';\nexport const brown400 = '#8d6e63';\nexport const brown500 = '#795548';\nexport const brown600 = '#6d4c41';\nexport const brown700 = '#5d4037';\nexport const brown800 = '#4e342e';\nexport const brown900 = '#3e2723';\nexport const blueGrey50 = '#eceff1';\nexport const blueGrey100 = '#cfd8dc';\nexport const blueGrey200 = '#b0bec5';\nexport const blueGrey300 = '#90a4ae';\nexport const blueGrey400 = '#78909c';\nexport const blueGrey500 = '#607d8b';\nexport const blueGrey600 = '#546e7a';\nexport const blueGrey700 = '#455a64';\nexport const blueGrey800 = '#37474f';\nexport const blueGrey900 = '#263238';\nexport const grey50 = '#fafafa';\nexport const grey100 = '#f5f5f5';\nexport const grey200 = '#eeeeee';\nexport const grey300 = '#e0e0e0';\nexport const grey400 = '#bdbdbd';\nexport const grey500 = '#9e9e9e';\nexport const grey600 = '#757575';\nexport const grey700 = '#616161';\nexport const grey800 = '#424242';\nexport const grey900 = '#212121';\nexport const black = '#000000';\nexport const white = '#ffffff';\n//# sourceMappingURL=colors.js.map","import color from 'color';\nimport { black, pinkA100, white } from './colors';\nimport { MD2LightTheme } from './LightTheme';\nimport configureFonts from '../../fonts';\nexport const MD2DarkTheme = {\n ...MD2LightTheme,\n dark: true,\n mode: 'adaptive',\n version: 2,\n isV3: false,\n colors: {\n ...MD2LightTheme.colors,\n primary: '#BB86FC',\n accent: '#03dac6',\n background: '#121212',\n surface: '#121212',\n error: '#CF6679',\n onSurface: '#FFFFFF',\n text: white,\n disabled: color(white).alpha(0.38).rgb().string(),\n placeholder: color(white).alpha(0.54).rgb().string(),\n backdrop: color(black).alpha(0.5).rgb().string(),\n notification: pinkA100,\n tooltip: 'rgba(230, 225, 229, 1)'\n },\n fonts: configureFonts({\n isV3: false\n })\n};\n//# sourceMappingURL=DarkTheme.js.map","import * as React from 'react';\nimport { AccessibilityInfo, Appearance } from 'react-native';\nimport SafeAreaProviderCompat from './SafeAreaProviderCompat';\nimport { Provider as SettingsProvider } from './settings';\nimport { defaultThemesByVersion, ThemeProvider } from './theming';\nimport MaterialCommunityIcon from '../components/MaterialCommunityIcon';\nimport PortalHost from '../components/Portal/PortalHost';\nimport { addEventListener } from '../utils/addEventListener';\nconst PaperProvider = props => {\n const isOnlyVersionInTheme = props.theme && Object.keys(props.theme).length === 1 && props.theme.version;\n const colorSchemeName = (!props.theme || isOnlyVersionInTheme) && (Appearance === null || Appearance === void 0 ? void 0 : Appearance.getColorScheme()) || 'light';\n const [reduceMotionEnabled, setReduceMotionEnabled] = React.useState(false);\n const [colorScheme, setColorScheme] = React.useState(colorSchemeName);\n const handleAppearanceChange = preferences => {\n const {\n colorScheme\n } = preferences;\n setColorScheme(colorScheme);\n };\n React.useEffect(() => {\n let subscription;\n if (!props.theme) {\n subscription = addEventListener(AccessibilityInfo, 'reduceMotionChanged', setReduceMotionEnabled);\n }\n return () => {\n if (!props.theme) {\n var _subscription;\n (_subscription = subscription) === null || _subscription === void 0 ? void 0 : _subscription.remove();\n }\n };\n }, [props.theme]);\n React.useEffect(() => {\n let appearanceSubscription;\n if (!props.theme || isOnlyVersionInTheme) {\n appearanceSubscription = Appearance === null || Appearance === void 0 ? void 0 : Appearance.addChangeListener(handleAppearanceChange);\n }\n return () => {\n if (!props.theme || isOnlyVersionInTheme) {\n if (appearanceSubscription) {\n appearanceSubscription.remove();\n } else {\n // @ts-expect-error: We keep deprecated listener remove method for backwards compat with old RN versions\n Appearance === null || Appearance === void 0 ? void 0 : Appearance.removeChangeListener(handleAppearanceChange);\n }\n }\n };\n }, [props.theme, isOnlyVersionInTheme]);\n const getTheme = () => {\n var _props$theme, _props$theme2;\n const themeVersion = ((_props$theme = props.theme) === null || _props$theme === void 0 ? void 0 : _props$theme.version) || 3;\n const scheme = colorScheme || 'light';\n const defaultThemeBase = defaultThemesByVersion[themeVersion][scheme];\n const extendedThemeBase = {\n ...defaultThemeBase,\n ...props.theme,\n version: themeVersion,\n animation: {\n ...((_props$theme2 = props.theme) === null || _props$theme2 === void 0 ? void 0 : _props$theme2.animation),\n scale: reduceMotionEnabled ? 0 : 1\n }\n };\n return {\n ...extendedThemeBase,\n isV3: extendedThemeBase.version === 3\n };\n };\n const {\n children,\n settings\n } = props;\n return /*#__PURE__*/React.createElement(SafeAreaProviderCompat, null, /*#__PURE__*/React.createElement(PortalHost, null, /*#__PURE__*/React.createElement(SettingsProvider, {\n value: {\n icon: MaterialCommunityIcon,\n rippleEffectEnabled: true,\n ...settings\n }\n }, /*#__PURE__*/React.createElement(ThemeProvider, {\n theme: getTheme()\n }, children))));\n};\nexport default PaperProvider;\n//# sourceMappingURL=PaperProvider.js.map","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\nimport canUseDOM from '../../modules/canUseDom';\nfunction isScreenReaderEnabled() {\n return new Promise((resolve, reject) => {\n resolve(true);\n });\n}\nvar prefersReducedMotionMedia = canUseDOM && typeof window.matchMedia === 'function' ? window.matchMedia('(prefers-reduced-motion: reduce)') : null;\nfunction isReduceMotionEnabled() {\n return new Promise((resolve, reject) => {\n resolve(prefersReducedMotionMedia ? prefersReducedMotionMedia.matches : true);\n });\n}\nfunction addChangeListener(fn) {\n if (prefersReducedMotionMedia != null) {\n prefersReducedMotionMedia.addEventListener != null ? prefersReducedMotionMedia.addEventListener('change', fn) : prefersReducedMotionMedia.addListener(fn);\n }\n}\nfunction removeChangeListener(fn) {\n if (prefersReducedMotionMedia != null) {\n prefersReducedMotionMedia.removeEventListener != null ? prefersReducedMotionMedia.removeEventListener('change', fn) : prefersReducedMotionMedia.removeListener(fn);\n }\n}\nvar handlers = {};\nvar AccessibilityInfo = {\n /**\n * Query whether a screen reader is currently enabled.\n *\n * Returns a promise which resolves to a boolean.\n * The result is `true` when a screen reader is enabled and `false` otherwise.\n */\n isScreenReaderEnabled,\n /**\n * Query whether the user prefers reduced motion.\n *\n * Returns a promise which resolves to a boolean.\n * The result is `true` when a screen reader is enabled and `false` otherwise.\n */\n isReduceMotionEnabled,\n /**\n * Deprecated\n */\n fetch: isScreenReaderEnabled,\n /**\n * Add an event handler. Supported events: reduceMotionChanged\n */\n addEventListener: function addEventListener(eventName, handler) {\n if (eventName === 'reduceMotionChanged') {\n if (!prefersReducedMotionMedia) {\n return;\n }\n var listener = event => {\n handler(event.matches);\n };\n addChangeListener(listener);\n handlers[handler] = listener;\n }\n return {\n remove: () => AccessibilityInfo.removeEventListener(eventName, handler)\n };\n },\n /**\n * Set accessibility focus to a react component.\n */\n setAccessibilityFocus: function setAccessibilityFocus(reactTag) {},\n /**\n * Post a string to be announced by the screen reader.\n */\n announceForAccessibility: function announceForAccessibility(announcement) {},\n /**\n * Remove an event handler.\n */\n removeEventListener: function removeEventListener(eventName, handler) {\n if (eventName === 'reduceMotionChanged') {\n var listener = handlers[handler];\n if (!listener || !prefersReducedMotionMedia) {\n return;\n }\n removeChangeListener(listener);\n }\n return;\n }\n};\nexport default AccessibilityInfo;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\nimport canUseDOM from '../../modules/canUseDom';\nfunction getQuery() {\n return canUseDOM && window.matchMedia != null ? window.matchMedia('(prefers-color-scheme: dark)') : null;\n}\nvar query = getQuery();\nvar listenerMapping = new WeakMap();\nvar Appearance = {\n getColorScheme() {\n return query && query.matches ? 'dark' : 'light';\n },\n addChangeListener(listener) {\n var mappedListener = listenerMapping.get(listener);\n if (!mappedListener) {\n mappedListener = _ref => {\n var matches = _ref.matches;\n listener({\n colorScheme: matches ? 'dark' : 'light'\n });\n };\n listenerMapping.set(listener, mappedListener);\n }\n if (query) {\n query.addListener(mappedListener);\n }\n function remove() {\n var mappedListener = listenerMapping.get(listener);\n if (query && mappedListener) {\n query.removeListener(mappedListener);\n }\n listenerMapping.delete(listener);\n }\n return {\n remove\n };\n }\n};\nexport default Appearance;","/**\n * Ported from @react-navigation https://github.com/react-navigation/react-navigation/blob/main/packages/elements/src/SafeAreaProviderCompat.tsx\n */\nimport * as React from 'react';\nimport { Dimensions, Platform, StyleSheet, View } from 'react-native';\nimport { initialWindowMetrics, SafeAreaInsetsContext, SafeAreaProvider } from 'react-native-safe-area-context';\nconst {\n width = 0,\n height = 0\n} = Dimensions.get('window');\n\n// To support SSR on web, we need to have empty insets for initial values\n// Otherwise there can be mismatch between SSR and client output\n// We also need to specify empty values to support tests environments\nconst initialMetrics = Platform.OS === 'web' || initialWindowMetrics == null ? {\n frame: {\n x: 0,\n y: 0,\n width,\n height\n },\n insets: {\n top: 0,\n left: 0,\n right: 0,\n bottom: 0\n }\n} : initialWindowMetrics;\nexport default function SafeAreaProviderCompat(_ref) {\n let {\n children,\n style\n } = _ref;\n return /*#__PURE__*/React.createElement(SafeAreaInsetsContext.Consumer, null, insets => {\n if (insets) {\n // If we already have insets, don't wrap the stack in another safe area provider\n // This avoids an issue with updates at the cost of potentially incorrect values\n // https://github.com/react-navigation/react-navigation/issues/174\n return /*#__PURE__*/React.createElement(View, {\n style: [styles.container, style]\n }, children);\n }\n return /*#__PURE__*/React.createElement(SafeAreaProvider, {\n initialMetrics: initialMetrics,\n style: style\n }, children);\n });\n}\nSafeAreaProviderCompat.initialMetrics = initialMetrics;\nconst styles = StyleSheet.create({\n container: {\n flex: 1\n }\n});\n//# sourceMappingURL=SafeAreaProviderCompat.js.map","import * as React from 'react';\nimport MaterialCommunityIcon from '../components/MaterialCommunityIcon';\nexport const SettingsContext = /*#__PURE__*/React.createContext({\n icon: MaterialCommunityIcon,\n rippleEffectEnabled: true\n});\nexport const {\n Provider,\n Consumer\n} = SettingsContext;\n//# sourceMappingURL=settings.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet, Text, Platform } from 'react-native';\nimport { black } from '../styles/themes/v2/colors';\nlet MaterialCommunityIcons;\ntry {\n // Optionally require vector-icons\n MaterialCommunityIcons = require('react-native-vector-icons/MaterialCommunityIcons').default;\n} catch (e) {\n let isErrorLogged = false;\n\n // Fallback component for icons\n MaterialCommunityIcons = _ref => {\n let {\n name,\n color,\n size,\n ...rest\n } = _ref;\n /* eslint-disable no-console */\n if (!isErrorLogged) {\n if (!/(Cannot find module|Module not found|Cannot resolve module)/.test(e.message)) {\n console.error(e);\n }\n console.warn(`Tried to use the icon '${name}' in a component from 'react-native-paper', but 'react-native-vector-icons/MaterialCommunityIcons' could not be loaded.`, `To remove this warning, try installing 'react-native-vector-icons' or use another method to specify icon: https://callstack.github.io/react-native-paper/docs/guides/icons`);\n isErrorLogged = true;\n }\n return /*#__PURE__*/React.createElement(Text, _extends({}, rest, {\n style: [styles.icon, {\n color,\n fontSize: size\n }]\n // @ts-expect-error: Text doesn't support this, but it seems to affect TouchableNativeFeedback\n ,\n pointerEvents: \"none\",\n selectable: false\n }), \"\\u25A1\");\n };\n}\nexport const accessibilityProps = Platform.OS === 'web' ? {\n role: 'img',\n focusable: false\n} : {\n accessibilityElementsHidden: true,\n importantForAccessibility: 'no-hide-descendants'\n};\nconst defaultIcon = _ref2 => {\n let {\n name,\n color = black,\n size,\n direction,\n allowFontScaling,\n testID\n } = _ref2;\n return /*#__PURE__*/React.createElement(MaterialCommunityIcons, _extends({\n allowFontScaling: allowFontScaling,\n name: name,\n color: color,\n size: size,\n style: [{\n transform: [{\n scaleX: direction === 'rtl' ? -1 : 1\n }],\n lineHeight: size\n }, styles.icon],\n pointerEvents: \"none\",\n selectable: false,\n testID: testID\n }, accessibilityProps));\n};\nconst styles = StyleSheet.create({\n // eslint-disable-next-line react-native/no-color-literals\n icon: {\n backgroundColor: 'transparent'\n }\n});\nexport default defaultIcon;\n//# sourceMappingURL=MaterialCommunityIcon.js.map","import MaterialCommunityIcons from './build/MaterialCommunityIcons';\nexport default MaterialCommunityIcons;\n","import createIconSet from './createIconSet';\nimport font from './vendor/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf';\nimport glyphMap from './vendor/react-native-vector-icons/glyphmaps/MaterialCommunityIcons.json';\nexport default createIconSet(glyphMap, 'material-community', font);\n//# sourceMappingURL=MaterialCommunityIcons.js.map","import * as Font from 'expo-font';\nimport React from 'react';\nimport { Text, } from 'react-native';\nimport createIconSet from './vendor/react-native-vector-icons/lib/create-icon-set';\nimport createIconButtonComponent from './vendor/react-native-vector-icons/lib/icon-button';\nexport { DEFAULT_ICON_COLOR, DEFAULT_ICON_SIZE, } from './vendor/react-native-vector-icons/lib/create-icon-set';\nexport default function (glyphMap, fontName, expoAssetId, fontStyle) {\n const font = { [fontName]: expoAssetId };\n const RNVIconComponent = createIconSet(glyphMap, fontName, null, fontStyle);\n return class Icon extends React.Component {\n static defaultProps = RNVIconComponent.defaultProps;\n static Button = createIconButtonComponent(Icon);\n static glyphMap = glyphMap;\n static getRawGlyphMap = () => glyphMap;\n static getFontFamily = () => fontName;\n static loadFont = () => Font.loadAsync(font);\n static font = font;\n _mounted = false;\n _icon;\n state = {\n fontIsLoaded: Font.isLoaded(fontName),\n };\n async componentDidMount() {\n this._mounted = true;\n if (!this.state.fontIsLoaded) {\n await Font.loadAsync(font);\n /* eslint-disable react/no-did-mount-set-state */\n this._mounted && this.setState({ fontIsLoaded: true });\n }\n }\n componentWillUnmount() {\n this._mounted = false;\n }\n setNativeProps(props) {\n if (this._icon) {\n this._icon.setNativeProps(props);\n }\n }\n render() {\n if (__DEV__ && this.props.name && !(this.props.name in glyphMap)) {\n console.warn(`\"${this.props.name}\" is not a valid icon name for family \"${fontName}\"`);\n }\n if (!this.state.fontIsLoaded) {\n return React.createElement(Text, null);\n }\n return (React.createElement(RNVIconComponent, { ref: (view) => {\n this._icon = view;\n }, ...this.props }));\n }\n };\n}\n//# sourceMappingURL=createIconSet.js.map","export * from './Font';\nexport { useFonts } from './FontHooks';\n//# sourceMappingURL=index.js.map","import { CodedError, Platform, UnavailabilityError } from 'expo-modules-core';\nimport ExpoFontLoader from './ExpoFontLoader';\nimport { FontDisplay } from './Font.types';\nimport { getAssetForSource, loadSingleFontAsync, fontFamilyNeedsScoping, getNativeFontName, } from './FontLoader';\nimport { loaded, loadPromises } from './memory';\nimport { registerStaticFont } from './server';\n// @needsAudit\n// note(brentvatne): at some point we may want to warn if this is called outside of a managed app.\n/**\n * Used to transform font family names to the scoped name. This does not need to\n * be called in standalone or bare apps but it will return unscoped font family\n * names if it is called in those contexts.\n *\n * @param fontFamily Name of font to process.\n * @returns Returns a name processed for use with the [current workflow](https://docs.expo.dev/archive/managed-vs-bare/).\n */\nexport function processFontFamily(fontFamily) {\n if (!fontFamily || !fontFamilyNeedsScoping(fontFamily)) {\n return fontFamily;\n }\n if (!isLoaded(fontFamily)) {\n if (__DEV__) {\n if (isLoading(fontFamily)) {\n console.warn(`You started loading the font \"${fontFamily}\", but used it before it finished loading. You need to wait for Font.loadAsync to complete before using the font.`);\n }\n else {\n console.warn(`fontFamily \"${fontFamily}\" is not a system font and has not been loaded through expo-font.`);\n }\n }\n }\n return `ExpoFont-${getNativeFontName(fontFamily)}`;\n}\n// @needsAudit\n/**\n * Synchronously detect if the font for `fontFamily` has finished loading.\n *\n * @param fontFamily The name used to load the `FontResource`.\n * @return Returns `true` if the font has fully loaded.\n */\nexport function isLoaded(fontFamily) {\n if (Platform.OS === 'web') {\n return fontFamily in loaded || !!ExpoFontLoader.isLoaded(fontFamily);\n }\n return fontFamily in loaded || ExpoFontLoader.customNativeFonts?.includes(fontFamily);\n}\n// @needsAudit\n/**\n * Synchronously detect if the font for `fontFamily` is still being loaded.\n *\n * @param fontFamily The name used to load the `FontResource`.\n * @returns Returns `true` if the font is still loading.\n */\nexport function isLoading(fontFamily) {\n return fontFamily in loadPromises;\n}\n// @needsAudit\n/**\n * Highly efficient method for loading fonts from static or remote resources which can then be used\n * with the platform's native text elements. In the browser this generates a `@font-face` block in\n * a shared style sheet for fonts. No CSS is needed to use this method.\n *\n * @param fontFamilyOrFontMap string or map of values that can be used as the [`fontFamily`](https://reactnative.dev/docs/text#style)\n * style prop with React Native Text elements.\n * @param source the font asset that should be loaded into the `fontFamily` namespace.\n *\n * @return Returns a promise that fulfils when the font has loaded. Often you may want to wrap the\n * method in a `try/catch/finally` to ensure the app continues if the font fails to load.\n */\nexport function loadAsync(fontFamilyOrFontMap, source) {\n // NOTE(EvanBacon): Static render pass on web must be synchronous to collect all fonts.\n // Because of this, `loadAsync` doesn't use the `async` keyword and deviates from the\n // standard Expo SDK style guide.\n const isServer = Platform.OS === 'web' && typeof window === 'undefined';\n if (typeof fontFamilyOrFontMap === 'object') {\n if (source) {\n return Promise.reject(new CodedError(`ERR_FONT_API`, `No fontFamily can be used for the provided source: ${source}. The second argument of \\`loadAsync()\\` can only be used with a \\`string\\` value as the first argument.`));\n }\n const fontMap = fontFamilyOrFontMap;\n const names = Object.keys(fontMap);\n if (isServer) {\n names.map((name) => registerStaticFont(name, fontMap[name]));\n return Promise.resolve();\n }\n return Promise.all(names.map((name) => loadFontInNamespaceAsync(name, fontMap[name]))).then(() => { });\n }\n if (isServer) {\n registerStaticFont(fontFamilyOrFontMap, source);\n return Promise.resolve();\n }\n return loadFontInNamespaceAsync(fontFamilyOrFontMap, source);\n}\nasync function loadFontInNamespaceAsync(fontFamily, source) {\n if (!source) {\n throw new CodedError(`ERR_FONT_SOURCE`, `Cannot load null or undefined font source: { \"${fontFamily}\": ${source} }. Expected asset of type \\`FontSource\\` for fontFamily of name: \"${fontFamily}\"`);\n }\n if (loaded[fontFamily]) {\n return;\n }\n if (loadPromises.hasOwnProperty(fontFamily)) {\n return loadPromises[fontFamily];\n }\n // Important: we want all callers that concurrently try to load the same font to await the same\n // promise. If we're here, we haven't created the promise yet. To ensure we create only one\n // promise in the program, we need to create the promise synchronously without yielding the event\n // loop from this point.\n const asset = getAssetForSource(source);\n loadPromises[fontFamily] = (async () => {\n try {\n await loadSingleFontAsync(fontFamily, asset);\n loaded[fontFamily] = true;\n }\n finally {\n delete loadPromises[fontFamily];\n }\n })();\n await loadPromises[fontFamily];\n}\n// @needsAudit\n/**\n * Unloads all the custom fonts. This is used for testing.\n */\nexport async function unloadAllAsync() {\n if (!ExpoFontLoader.unloadAllAsync) {\n throw new UnavailabilityError('expo-font', 'unloadAllAsync');\n }\n if (Object.keys(loadPromises).length) {\n throw new CodedError(`ERR_UNLOAD`, `Cannot unload fonts while they're still loading: ${Object.keys(loadPromises).join(', ')}`);\n }\n for (const fontFamily of Object.keys(loaded)) {\n delete loaded[fontFamily];\n }\n await ExpoFontLoader.unloadAllAsync();\n}\n// @needsAudit\n/**\n * Unload custom fonts matching the `fontFamily`s and display values provided.\n * Because fonts are automatically unloaded on every platform this is mostly used for testing.\n *\n * @param fontFamilyOrFontMap The name or names of the custom fonts that will be unloaded.\n * @param options When `fontFamilyOrFontMap` is a string, this should be the font source used to load\n * the custom font originally.\n */\nexport async function unloadAsync(fontFamilyOrFontMap, options) {\n if (!ExpoFontLoader.unloadAsync) {\n throw new UnavailabilityError('expo-font', 'unloadAsync');\n }\n if (typeof fontFamilyOrFontMap === 'object') {\n if (options) {\n throw new CodedError(`ERR_FONT_API`, `No fontFamily can be used for the provided options: ${options}. The second argument of \\`unloadAsync()\\` can only be used with a \\`string\\` value as the first argument.`);\n }\n const fontMap = fontFamilyOrFontMap;\n const names = Object.keys(fontMap);\n await Promise.all(names.map((name) => unloadFontInNamespaceAsync(name, fontMap[name])));\n return;\n }\n return await unloadFontInNamespaceAsync(fontFamilyOrFontMap, options);\n}\nasync function unloadFontInNamespaceAsync(fontFamily, options) {\n if (!loaded[fontFamily]) {\n return;\n }\n else {\n delete loaded[fontFamily];\n }\n // Important: we want all callers that concurrently try to load the same font to await the same\n // promise. If we're here, we haven't created the promise yet. To ensure we create only one\n // promise in the program, we need to create the promise synchronously without yielding the event\n // loop from this point.\n const nativeFontName = getNativeFontName(fontFamily);\n if (!nativeFontName) {\n throw new CodedError(`ERR_FONT_FAMILY`, `Cannot unload an empty name`);\n }\n await ExpoFontLoader.unloadAsync(nativeFontName, options);\n}\nexport { FontDisplay };\n//# sourceMappingURL=Font.js.map","import { CodedError, Platform } from 'expo-modules-core';\nimport FontObserver from 'fontfaceobserver';\nimport { FontDisplay } from './Font.types';\nfunction getFontFaceStyleSheet() {\n if (!Platform.isDOMAvailable) {\n return null;\n }\n const styleSheet = getStyleElement();\n return styleSheet.sheet ? styleSheet.sheet : null;\n}\nfunction getFontFaceRules() {\n const sheet = getFontFaceStyleSheet();\n if (sheet) {\n // @ts-ignore: rule iterator\n const rules = [...sheet.cssRules];\n const items = [];\n for (let i = 0; i < rules.length; i++) {\n const rule = rules[i];\n if (rule instanceof CSSFontFaceRule) {\n items.push({ rule, index: i });\n }\n }\n return items;\n }\n return [];\n}\nfunction getFontFaceRulesMatchingResource(fontFamilyName, options) {\n const rules = getFontFaceRules();\n return rules.filter(({ rule }) => {\n return (rule.style.fontFamily === fontFamilyName &&\n (options && options.display ? options.display === rule.style.fontDisplay : true));\n });\n}\nconst serverContext = new Set();\nfunction getHeadElements() {\n const entries = [...serverContext.entries()];\n if (!entries.length) {\n return [];\n }\n const css = entries.map(([{ css }]) => css).join('\\n');\n const links = entries.map(([{ resourceId }]) => resourceId);\n // TODO: Maybe return nothing if no fonts were loaded.\n return [\n {\n $$type: 'style',\n children: css,\n id: ID,\n type: 'text/css',\n },\n ...links.map((resourceId) => ({\n $$type: 'link',\n rel: 'preload',\n href: resourceId,\n as: 'font',\n crossorigin: '',\n })),\n ];\n}\nexport default {\n get name() {\n return 'ExpoFontLoader';\n },\n async unloadAllAsync() {\n if (!Platform.isDOMAvailable)\n return;\n const element = document.getElementById(ID);\n if (element && element instanceof HTMLStyleElement) {\n document.removeChild(element);\n }\n },\n async unloadAsync(fontFamilyName, options) {\n const sheet = getFontFaceStyleSheet();\n if (!sheet)\n return;\n const items = getFontFaceRulesMatchingResource(fontFamilyName, options);\n for (const item of items) {\n sheet.deleteRule(item.index);\n }\n },\n getServerResources() {\n const elements = getHeadElements();\n return elements\n .map((element) => {\n switch (element.$$type) {\n case 'style':\n return ``;\n case 'link':\n return ``;\n default:\n return '';\n }\n })\n .filter(Boolean);\n },\n resetServerContext() {\n serverContext.clear();\n },\n isLoaded(fontFamilyName, resource = {}) {\n if (typeof window === 'undefined') {\n return !![...serverContext.values()].find((asset) => {\n return asset.name === fontFamilyName;\n });\n }\n return getFontFaceRulesMatchingResource(fontFamilyName, resource)?.length > 0;\n },\n // NOTE(EvanBacon): No async keyword! This cannot return a promise in Node environments.\n loadAsync(fontFamilyName, resource) {\n if (typeof window === 'undefined') {\n serverContext.add({\n name: fontFamilyName,\n css: _createWebFontTemplate(fontFamilyName, resource),\n // @ts-expect-error: typeof string\n resourceId: resource.uri,\n });\n return Promise.resolve();\n }\n const canInjectStyle = document.head && typeof document.head.appendChild === 'function';\n if (!canInjectStyle) {\n throw new CodedError('ERR_WEB_ENVIRONMENT', `The browser's \\`document.head\\` element doesn't support injecting fonts.`);\n }\n const style = getStyleElement();\n document.head.appendChild(style);\n const res = getFontFaceRulesMatchingResource(fontFamilyName, resource);\n if (!res.length) {\n _createWebStyle(fontFamilyName, resource);\n }\n if (!isFontLoadingListenerSupported()) {\n return Promise.resolve();\n }\n return new FontObserver(fontFamilyName, { display: resource.display }).load(null, 6000);\n },\n};\nconst ID = 'expo-generated-fonts';\nfunction getStyleElement() {\n const element = document.getElementById(ID);\n if (element && element instanceof HTMLStyleElement) {\n return element;\n }\n const styleElement = document.createElement('style');\n styleElement.id = ID;\n styleElement.type = 'text/css';\n return styleElement;\n}\nexport function _createWebFontTemplate(fontFamily, resource) {\n return `@font-face{font-family:${fontFamily};src:url(${resource.uri});font-display:${resource.display || FontDisplay.AUTO}}`;\n}\nfunction _createWebStyle(fontFamily, resource) {\n const fontStyle = _createWebFontTemplate(fontFamily, resource);\n const styleElement = getStyleElement();\n // @ts-ignore: TypeScript does not define HTMLStyleElement::styleSheet. This is just for IE and\n // possibly can be removed if it's unnecessary on IE 11.\n if (styleElement.styleSheet) {\n const styleElementIE = styleElement;\n styleElementIE.styleSheet.cssText = styleElementIE.styleSheet.cssText\n ? styleElementIE.styleSheet.cssText + fontStyle\n : fontStyle;\n }\n else {\n const textNode = document.createTextNode(fontStyle);\n styleElement.appendChild(textNode);\n }\n return styleElement;\n}\nfunction isFontLoadingListenerSupported() {\n const { userAgent } = window.navigator;\n // WebKit is broken https://github.com/bramstein/fontfaceobserver/issues/95\n const isIOS = !!userAgent.match(/iPad|iPhone/i);\n const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n // Edge is broken https://github.com/bramstein/fontfaceobserver/issues/109#issuecomment-333356795\n const isEdge = userAgent.includes('Edge');\n // Internet Explorer\n const isIE = userAgent.includes('Trident');\n // Firefox\n const isFirefox = userAgent.includes('Firefox');\n return !isSafari && !isIOS && !isEdge && !isIE && !isFirefox;\n}\n//# sourceMappingURL=ExpoFontLoader.web.js.map","/* Font Face Observer v2.3.0 - © Bram Stein. License: BSD-3-Clause */(function(){function p(a,c){document.addEventListener?a.addEventListener(\"scroll\",c,!1):a.attachEvent(\"scroll\",c)}function u(a){document.body?a():document.addEventListener?document.addEventListener(\"DOMContentLoaded\",function b(){document.removeEventListener(\"DOMContentLoaded\",b);a()}):document.attachEvent(\"onreadystatechange\",function g(){if(\"interactive\"==document.readyState||\"complete\"==document.readyState)document.detachEvent(\"onreadystatechange\",g),a()})};function w(a){this.g=document.createElement(\"div\");this.g.setAttribute(\"aria-hidden\",\"true\");this.g.appendChild(document.createTextNode(a));this.h=document.createElement(\"span\");this.i=document.createElement(\"span\");this.m=document.createElement(\"span\");this.j=document.createElement(\"span\");this.l=-1;this.h.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";this.i.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";\nthis.j.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";this.m.style.cssText=\"display:inline-block;width:200%;height:200%;font-size:16px;max-width:none;\";this.h.appendChild(this.m);this.i.appendChild(this.j);this.g.appendChild(this.h);this.g.appendChild(this.i)}\nfunction x(a,c){a.g.style.cssText=\"max-width:none;min-width:20px;min-height:20px;display:inline-block;overflow:hidden;position:absolute;width:auto;margin:0;padding:0;top:-999px;white-space:nowrap;font-synthesis:none;font:\"+c+\";\"}function B(a){var c=a.g.offsetWidth,b=c+100;a.j.style.width=b+\"px\";a.i.scrollLeft=b;a.h.scrollLeft=a.h.scrollWidth+100;return a.l!==c?(a.l=c,!0):!1}function C(a,c){function b(){var e=g;B(e)&&null!==e.g.parentNode&&c(e.l)}var g=a;p(a.h,b);p(a.i,b);B(a)};function D(a,c,b){c=c||{};b=b||window;this.family=a;this.style=c.style||\"normal\";this.weight=c.weight||\"normal\";this.stretch=c.stretch||\"normal\";this.context=b}var E=null,F=null,G=null,H=null;function I(a){null===F&&(M(a)&&/Apple/.test(window.navigator.vendor)?(a=/AppleWebKit\\/([0-9]+)(?:\\.([0-9]+))(?:\\.([0-9]+))/.exec(window.navigator.userAgent),F=!!a&&603>parseInt(a[1],10)):F=!1);return F}function M(a){null===H&&(H=!!a.document.fonts);return H}\nfunction N(a,c){var b=a.style,g=a.weight;if(null===G){var e=document.createElement(\"div\");try{e.style.font=\"condensed 100px sans-serif\"}catch(q){}G=\"\"!==e.style.font}return[b,g,G?a.stretch:\"\",\"100px\",c].join(\" \")}\nD.prototype.load=function(a,c){var b=this,g=a||\"BESbswy\",e=0,q=c||3E3,J=(new Date).getTime();return new Promise(function(K,L){if(M(b.context)&&!I(b.context)){var O=new Promise(function(r,t){function h(){(new Date).getTime()-J>=q?t(Error(\"\"+q+\"ms timeout exceeded\")):b.context.document.fonts.load(N(b,'\"'+b.family+'\"'),g).then(function(n){1<=n.length?r():setTimeout(h,25)},t)}h()}),P=new Promise(function(r,t){e=setTimeout(function(){t(Error(\"\"+q+\"ms timeout exceeded\"))},q)});Promise.race([P,O]).then(function(){clearTimeout(e);\nK(b)},L)}else u(function(){function r(){var d;if(d=-1!=k&&-1!=l||-1!=k&&-1!=m||-1!=l&&-1!=m)(d=k!=l&&k!=m&&l!=m)||(null===E&&(d=/AppleWebKit\\/([0-9]+)(?:\\.([0-9]+))/.exec(window.navigator.userAgent),E=!!d&&(536>parseInt(d[1],10)||536===parseInt(d[1],10)&&11>=parseInt(d[2],10))),d=E&&(k==y&&l==y&&m==y||k==z&&l==z&&m==z||k==A&&l==A&&m==A)),d=!d;d&&(null!==f.parentNode&&f.parentNode.removeChild(f),clearTimeout(e),K(b))}function t(){if((new Date).getTime()-J>=q)null!==f.parentNode&&f.parentNode.removeChild(f),\nL(Error(\"\"+q+\"ms timeout exceeded\"));else{var d=b.context.document.hidden;if(!0===d||void 0===d)k=h.g.offsetWidth,l=n.g.offsetWidth,m=v.g.offsetWidth,r();e=setTimeout(t,50)}}var h=new w(g),n=new w(g),v=new w(g),k=-1,l=-1,m=-1,y=-1,z=-1,A=-1,f=document.createElement(\"div\");f.dir=\"ltr\";x(h,N(b,\"sans-serif\"));x(n,N(b,\"serif\"));x(v,N(b,\"monospace\"));f.appendChild(h.g);f.appendChild(n.g);f.appendChild(v.g);b.context.document.body.appendChild(f);y=h.g.offsetWidth;z=n.g.offsetWidth;A=v.g.offsetWidth;t();\nC(h,function(d){k=d;r()});x(h,N(b,'\"'+b.family+'\",sans-serif'));C(n,function(d){l=d;r()});x(n,N(b,'\"'+b.family+'\",serif'));C(v,function(d){m=d;r()});x(v,N(b,'\"'+b.family+'\",monospace'))})})};\"object\"===typeof module?module.exports=D:(window.FontFaceObserver=D,window.FontFaceObserver.prototype.load=D.prototype.load);}());\n","// @needsAudit\n/**\n * Sets the [font-display](https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display)\n * for a given typeface. The default font value on web is `FontDisplay.AUTO`.\n * Even though setting the `fontDisplay` does nothing on native platforms, the default behavior\n * emulates `FontDisplay.SWAP` on flagship devices like iOS, Samsung, Pixel, etc. Default\n * functionality varies on One Plus devices. In the browser this value is set in the generated\n * `@font-face` CSS block and not as a style property meaning you cannot dynamically change this\n * value based on the element it's used in.\n * @platform web\n */\nexport var FontDisplay;\n(function (FontDisplay) {\n /**\n * __(Default)__ The font display strategy is defined by the user agent or platform.\n * This generally defaults to the text being invisible until the font is loaded.\n * Good for buttons or banners that require a specific treatment.\n */\n FontDisplay[\"AUTO\"] = \"auto\";\n /**\n * Fallback text is rendered immediately with a default font while the desired font is loaded.\n * This is good for making the content appear to load instantly and is usually preferred.\n */\n FontDisplay[\"SWAP\"] = \"swap\";\n /**\n * The text will be invisible until the font has loaded. If the font fails to load then nothing\n * will appear - it's best to turn this off when debugging missing text.\n */\n FontDisplay[\"BLOCK\"] = \"block\";\n /**\n * Splits the behavior between `SWAP` and `BLOCK`.\n * There will be a [100ms timeout](https://developers.google.com/web/updates/2016/02/font-display?hl=en)\n * where the text with a custom font is invisible, after that the text will either swap to the\n * styled text or it'll show the unstyled text and continue to load the custom font. This is good\n * for buttons that need a custom font but should also be quickly available to screen-readers.\n */\n FontDisplay[\"FALLBACK\"] = \"fallback\";\n /**\n * This works almost identically to `FALLBACK`, the only difference is that the browser will\n * decide to load the font based on slow connection speed or critical resource demand.\n */\n FontDisplay[\"OPTIONAL\"] = \"optional\";\n})(FontDisplay || (FontDisplay = {}));\n//# sourceMappingURL=Font.types.js.map","import { Asset } from 'expo-asset';\nimport { CodedError } from 'expo-modules-core';\nimport ExpoFontLoader from './ExpoFontLoader';\nimport { FontDisplay } from './Font.types';\nfunction uriFromFontSource(asset) {\n if (typeof asset === 'string') {\n return asset || null;\n }\n else if (typeof asset === 'object') {\n return asset.uri || asset.localUri || asset.default || null;\n }\n else if (typeof asset === 'number') {\n return uriFromFontSource(Asset.fromModule(asset));\n }\n return null;\n}\nfunction displayFromFontSource(asset) {\n return asset.display || FontDisplay.AUTO;\n}\nexport function fontFamilyNeedsScoping(name) {\n return false;\n}\nexport function getAssetForSource(source) {\n const uri = uriFromFontSource(source);\n const display = displayFromFontSource(source);\n if (!uri || typeof uri !== 'string') {\n throwInvalidSourceError(uri);\n }\n return {\n uri: uri,\n display,\n };\n}\nfunction throwInvalidSourceError(source) {\n let type = typeof source;\n if (type === 'object')\n type = JSON.stringify(source, null, 2);\n throw new CodedError(`ERR_FONT_SOURCE`, `Expected font asset of type \\`string | FontResource | Asset\\` instead got: ${type}`);\n}\n// NOTE(EvanBacon): No async keyword!\nexport function loadSingleFontAsync(name, input) {\n if (typeof input !== 'object' || typeof input.uri !== 'string' || input.downloadAsync) {\n throwInvalidSourceError(input);\n }\n try {\n return ExpoFontLoader.loadAsync(name, input);\n }\n catch {\n // No-op.\n }\n return Promise.resolve();\n}\nexport function getNativeFontName(name) {\n return name;\n}\n//# sourceMappingURL=FontLoader.web.js.map","import './Asset.fx';\nexport * from './Asset';\nexport * from './AssetHooks';\n//# sourceMappingURL=index.js.map","import { Asset } from './Asset';\nimport { IS_ENV_WITH_UPDATES_ENABLED } from './PlatformUtils';\nimport { setCustomSourceTransformer } from './resolveAssetSource';\n// Override React Native's asset resolution for `Image` components in contexts where it matters\nif (IS_ENV_WITH_UPDATES_ENABLED) {\n setCustomSourceTransformer((resolver) => {\n try {\n // Bundler is using the hashAssetFiles plugin if and only if the fileHashes property exists\n if (resolver.asset.fileHashes) {\n const asset = Asset.fromMetadata(resolver.asset);\n return resolver.fromSource(asset.downloaded ? asset.localUri : asset.uri);\n }\n else {\n return resolver.defaultAsset();\n }\n }\n catch {\n return resolver.defaultAsset();\n }\n });\n}\n//# sourceMappingURL=Asset.fx.js.map","import { getAssetByID } from '@react-native/assets-registry/registry';\nimport { Platform } from 'expo-modules-core';\nimport { selectAssetSource } from './AssetSources';\nimport * as AssetUris from './AssetUris';\nimport * as ImageAssets from './ImageAssets';\nimport { getLocalAssetUri } from './LocalAssets';\nimport { downloadAsync, IS_ENV_WITH_UPDATES_ENABLED } from './PlatformUtils';\nimport resolveAssetSource from './resolveAssetSource';\n// @needsAudit\n/**\n * The `Asset` class represents an asset in your app. It gives metadata about the asset (such as its\n * name and type) and provides facilities to load the asset data.\n */\nexport class Asset {\n /**\n * @private\n */\n static byHash = {};\n /**\n * @private\n */\n static byUri = {};\n /**\n * The name of the asset file without the extension. Also without the part from `@` onward in the\n * filename (used to specify scale factor for images).\n */\n name;\n /**\n * The extension of the asset filename.\n */\n type;\n /**\n * The MD5 hash of the asset's data.\n */\n hash = null;\n /**\n * A URI that points to the asset's data on the remote server. When running the published version\n * of your app, this refers to the location on Expo's asset server where Expo has stored your\n * asset. When running the app from Expo CLI during development, this URI points to Expo CLI's\n * server running on your computer and the asset is served directly from your computer. If you\n * are not using Classic Updates (legacy), this field should be ignored as we ensure your assets\n * are on device before before running your application logic.\n */\n uri;\n /**\n * If the asset has been downloaded (by calling [`downloadAsync()`](#downloadasync)), the\n * `file://` URI pointing to the local file on the device that contains the asset data.\n */\n localUri = null;\n /**\n * If the asset is an image, the width of the image data divided by the scale factor. The scale\n * factor is the number after `@` in the filename, or `1` if not present.\n */\n width = null;\n /**\n * If the asset is an image, the height of the image data divided by the scale factor. The scale factor is the number after `@` in the filename, or `1` if not present.\n */\n height = null;\n // @docsMissing\n downloading = false;\n // @docsMissing\n downloaded = false;\n /**\n * @private\n */\n _downloadCallbacks = [];\n constructor({ name, type, hash = null, uri, width, height }) {\n this.name = name;\n this.type = type;\n this.hash = hash;\n this.uri = uri;\n if (typeof width === 'number') {\n this.width = width;\n }\n if (typeof height === 'number') {\n this.height = height;\n }\n if (hash) {\n this.localUri = getLocalAssetUri(hash, type);\n if (this.localUri) {\n this.downloaded = true;\n }\n }\n if (Platform.OS === 'web') {\n if (!name) {\n this.name = AssetUris.getFilename(uri);\n }\n if (!type) {\n this.type = AssetUris.getFileExtension(uri);\n }\n }\n }\n // @needsAudit\n /**\n * A helper that wraps `Asset.fromModule(module).downloadAsync` for convenience.\n * @param moduleId An array of `require('path/to/file')` or external network URLs. Can also be\n * just one module or URL without an Array.\n * @return Returns a Promise that fulfills with an array of `Asset`s when the asset(s) has been\n * saved to disk.\n * @example\n * ```ts\n * const [{ localUri }] = await Asset.loadAsync(require('./assets/snack-icon.png'));\n * ```\n */\n static loadAsync(moduleId) {\n const moduleIds = Array.isArray(moduleId) ? moduleId : [moduleId];\n return Promise.all(moduleIds.map((moduleId) => Asset.fromModule(moduleId).downloadAsync()));\n }\n // @needsAudit\n /**\n * Returns the [`Asset`](#asset) instance representing an asset given its module or URL.\n * @param virtualAssetModule The value of `require('path/to/file')` for the asset or external\n * network URL\n * @return The [`Asset`](#asset) instance for the asset.\n */\n static fromModule(virtualAssetModule) {\n if (typeof virtualAssetModule === 'string') {\n return Asset.fromURI(virtualAssetModule);\n }\n const meta = getAssetByID(virtualAssetModule);\n if (!meta) {\n throw new Error(`Module \"${virtualAssetModule}\" is missing from the asset registry`);\n }\n // Outside of the managed env we need the moduleId to initialize the asset\n // because resolveAssetSource depends on it\n if (!IS_ENV_WITH_UPDATES_ENABLED) {\n // null-check is performed above with `getAssetByID`.\n const { uri } = resolveAssetSource(virtualAssetModule);\n const asset = new Asset({\n name: meta.name,\n type: meta.type,\n hash: meta.hash,\n uri,\n width: meta.width,\n height: meta.height,\n });\n // TODO: FileSystem should probably support 'downloading' from drawable\n // resources But for now it doesn't (it only supports raw resources) and\n // React Native's Image works fine with drawable resource names for\n // images.\n if (Platform.OS === 'android' && !uri.includes(':') && (meta.width || meta.height)) {\n asset.localUri = asset.uri;\n asset.downloaded = true;\n }\n Asset.byHash[meta.hash] = asset;\n return asset;\n }\n return Asset.fromMetadata(meta);\n }\n // @docsMissing\n static fromMetadata(meta) {\n // The hash of the whole asset, not to be confused with the hash of a specific file returned\n // from `selectAssetSource`\n const metaHash = meta.hash;\n if (Asset.byHash[metaHash]) {\n return Asset.byHash[metaHash];\n }\n const { uri, hash } = selectAssetSource(meta);\n const asset = new Asset({\n name: meta.name,\n type: meta.type,\n hash,\n uri,\n width: meta.width,\n height: meta.height,\n });\n Asset.byHash[metaHash] = asset;\n return asset;\n }\n // @docsMissing\n static fromURI(uri) {\n if (Asset.byUri[uri]) {\n return Asset.byUri[uri];\n }\n // Possibly a Base64-encoded URI\n let type = '';\n if (uri.indexOf(';base64') > -1) {\n type = uri.split(';')[0].split('/')[1];\n }\n else {\n const extension = AssetUris.getFileExtension(uri);\n type = extension.startsWith('.') ? extension.substring(1) : extension;\n }\n const asset = new Asset({\n name: '',\n type,\n hash: null,\n uri,\n });\n Asset.byUri[uri] = asset;\n return asset;\n }\n // @needsAudit\n /**\n * Downloads the asset data to a local file in the device's cache directory. Once the returned\n * promise is fulfilled without error, the [`localUri`](#assetlocaluri) field of this asset points\n * to a local file containing the asset data. The asset is only downloaded if an up-to-date local\n * file for the asset isn't already present due to an earlier download. The downloaded `Asset`\n * will be returned when the promise is resolved.\n * @return Returns a Promise which fulfills with an `Asset` instance.\n */\n async downloadAsync() {\n if (this.downloaded) {\n return this;\n }\n if (this.downloading) {\n await new Promise((resolve, reject) => {\n this._downloadCallbacks.push({ resolve, reject });\n });\n return this;\n }\n this.downloading = true;\n try {\n if (Platform.OS === 'web') {\n if (ImageAssets.isImageType(this.type)) {\n const { width, height, name } = await ImageAssets.getImageInfoAsync(this.uri);\n this.width = width;\n this.height = height;\n this.name = name;\n }\n else {\n this.name = AssetUris.getFilename(this.uri);\n }\n }\n this.localUri = await downloadAsync(this.uri, this.hash, this.type, this.name);\n this.downloaded = true;\n this._downloadCallbacks.forEach(({ resolve }) => resolve());\n }\n catch (e) {\n this._downloadCallbacks.forEach(({ reject }) => reject(e));\n throw e;\n }\n finally {\n this.downloading = false;\n this._downloadCallbacks = [];\n }\n return this;\n }\n}\n//# sourceMappingURL=Asset.js.map","import { Platform } from 'expo-modules-core';\nimport { PixelRatio, NativeModules } from 'react-native';\nimport AssetSourceResolver from './AssetSourceResolver';\nimport { getManifest, getManifest2, manifestBaseUrl } from './PlatformUtils';\n// Fast lookup check if asset map has any overrides in the manifest.\n// This value will always be either null or an absolute URL, e.g. `https://expo.dev/`\nconst assetMapOverride = getManifest().assetMapOverride;\n/**\n * Selects the best file for the given asset (ex: choosing the best scale for images) and returns\n * a { uri, hash } pair for the specific asset file.\n *\n * If the asset isn't an image with multiple scales, the first file is selected.\n */\nexport function selectAssetSource(meta) {\n // Override with the asset map in manifest if available\n if (assetMapOverride && assetMapOverride.hasOwnProperty(meta.hash)) {\n meta = { ...meta, ...assetMapOverride[meta.hash] };\n }\n // This logic is based on that of AssetSourceResolver, with additional support for file hashes and\n // explicitly provided URIs\n const scale = AssetSourceResolver.pickScale(meta.scales, PixelRatio.get());\n const index = meta.scales.findIndex((s) => s === scale);\n const hash = meta.fileHashes ? meta.fileHashes[index] ?? meta.fileHashes[0] : meta.hash;\n // Allow asset processors to directly provide the URL to load\n const uri = meta.fileUris ? meta.fileUris[index] ?? meta.fileUris[0] : meta.uri;\n if (uri) {\n return { uri: resolveUri(uri), hash };\n }\n // Check if the assetUrl was overridden in the manifest\n const assetUrlOverride = getManifest().assetUrlOverride;\n if (assetUrlOverride) {\n const uri = pathJoin(assetUrlOverride, hash);\n return { uri: resolveUri(uri), hash };\n }\n const fileScale = scale === 1 ? '' : `@${scale}x`;\n const fileExtension = meta.type ? `.${encodeURIComponent(meta.type)}` : '';\n const suffix = `/${encodeURIComponent(meta.name)}${fileScale}${fileExtension}`;\n const params = new URLSearchParams({\n platform: Platform.OS,\n hash: meta.hash,\n });\n // For assets with a specified absolute URL, we use the existing origin instead of prepending the\n // development server or production CDN URL origin\n if (/^https?:\\/\\//.test(meta.httpServerLocation)) {\n const uri = meta.httpServerLocation + suffix + '?' + params;\n return { uri, hash };\n }\n // For assets during development using manifest2, we use the development server's URL origin\n const manifest2 = getManifest2();\n const devServerUrl = manifest2?.extra?.expoGo?.developer\n ? 'http://' + manifest2.extra.expoGo.debuggerHost\n : // For assets during development, we use the development server's URL origin\n getManifest().developer\n ? getManifest().bundleUrl\n : null;\n if (devServerUrl) {\n const baseUrl = new URL(meta.httpServerLocation + suffix, devServerUrl);\n baseUrl.searchParams.set('platform', Platform.OS);\n baseUrl.searchParams.set('hash', meta.hash);\n return {\n uri: baseUrl.href,\n hash,\n };\n }\n // Temporary fallback for loading assets in Expo Go home\n if (NativeModules.ExponentKernel) {\n return { uri: `https://classic-assets.eascdn.net/~assets/${encodeURIComponent(hash)}`, hash };\n }\n // In correctly configured apps, we arrive here if the asset is locally available on disk due to\n // being managed by expo-updates, and `getLocalAssetUri(hash)` must return a local URI for this\n // hash. Since the asset is local, we don't have a remote URL and specify an invalid URL (an empty\n // string) as a placeholder.\n return { uri: '', hash };\n}\n/**\n * Resolves the given URI to an absolute URI. If the given URI is already an absolute URI, it is\n * simply returned. Otherwise, if it is a relative URI, it is resolved relative to the manifest's\n * base URI.\n */\nexport function resolveUri(uri) {\n // `manifestBaseUrl` is always an absolute URL or `null`.\n return manifestBaseUrl ? new URL(uri, manifestBaseUrl).href : uri;\n}\n// A very cheap path canonicalization like path.join but without depending on a `path` polyfill.\nexport function pathJoin(...paths) {\n // Start by simply combining paths, without worrying about \"..\" or \".\"\n const combined = paths\n .map((part, index) => {\n if (index === 0) {\n return part.trim().replace(/\\/*$/, '');\n }\n return part.trim().replace(/(^\\/*|\\/*$)/g, '');\n })\n .filter((part) => part.length > 0)\n .join('/')\n .split('/');\n // Handle \"..\" and \".\" in paths\n const resolved = [];\n for (const part of combined) {\n if (part === '..') {\n resolved.pop(); // Remove the last element from the result\n }\n else if (part !== '.') {\n resolved.push(part);\n }\n }\n return resolved.join('/');\n}\n//# sourceMappingURL=AssetSources.js.map","import { Platform } from 'expo-modules-core';\nimport { PixelRatio } from 'react-native';\n// Returns the Metro dev server-specific asset location.\nfunction getScaledAssetPath(asset) {\n const scale = AssetSourceResolver.pickScale(asset.scales, PixelRatio.get());\n const scaleSuffix = scale === 1 ? '' : '@' + scale + 'x';\n const type = !asset.type ? '' : `.${asset.type}`;\n if (__DEV__) {\n return asset.httpServerLocation + '/' + asset.name + scaleSuffix + type;\n }\n else {\n return asset.httpServerLocation.replace(/\\.\\.\\//g, '_') + '/' + asset.name + scaleSuffix + type;\n }\n}\nexport default class AssetSourceResolver {\n serverUrl;\n // where the jsbundle is being run from\n // NOTE(EvanBacon): Never defined on web.\n jsbundleUrl;\n // the asset to resolve\n asset;\n constructor(serverUrl, jsbundleUrl, asset) {\n this.serverUrl = serverUrl || 'https://expo.dev';\n this.jsbundleUrl = null;\n this.asset = asset;\n }\n // Always true for web runtimes\n isLoadedFromServer() {\n return true;\n }\n // Always false for web runtimes\n isLoadedFromFileSystem() {\n return false;\n }\n defaultAsset() {\n return this.assetServerURL();\n }\n /**\n * @returns absolute remote URL for the hosted asset.\n */\n assetServerURL() {\n const fromUrl = new URL(getScaledAssetPath(this.asset), this.serverUrl);\n fromUrl.searchParams.set('platform', Platform.OS);\n fromUrl.searchParams.set('hash', this.asset.hash);\n return this.fromSource(\n // Relative on web\n fromUrl.toString().replace(fromUrl.origin, ''));\n }\n fromSource(source) {\n return {\n __packager_asset: true,\n width: this.asset.width ?? undefined,\n height: this.asset.height ?? undefined,\n uri: source,\n scale: AssetSourceResolver.pickScale(this.asset.scales, PixelRatio.get()),\n };\n }\n static pickScale(scales, deviceScale) {\n for (let i = 0; i < scales.length; i++) {\n if (scales[i] >= deviceScale) {\n return scales[i];\n }\n }\n return scales[scales.length - 1] || 1;\n }\n}\n//# sourceMappingURL=AssetSourceResolver.js.map","export const IS_MANAGED_ENV = false;\nexport const IS_ENV_WITH_UPDATES_ENABLED = false;\nexport const IS_ENV_WITHOUT_UPDATES_ENABLED = false;\n// Compute manifest base URL if available\nexport const manifestBaseUrl = null;\nexport async function downloadAsync(uri, hash, type, name) {\n return uri;\n}\nexport function getManifest() {\n return {};\n}\nexport function getManifest2() {\n return {};\n}\n//# sourceMappingURL=PlatformUtils.web.js.map","export function getFilename(url) {\n const { pathname, searchParams } = new URL(url, 'https://e');\n // When attached to a dev server, we use `unstable_path` to represent the file path. This ensures\n // the file name is not canonicalized by the browser.\n // NOTE(EvanBacon): This is technically not tied to `__DEV__` as it's possible to use this while bundling in production\n // mode.\n if (__DEV__) {\n if (searchParams.has('unstable_path')) {\n const encodedFilePath = decodeURIComponent(searchParams.get('unstable_path'));\n return getBasename(encodedFilePath);\n }\n }\n return getBasename(pathname);\n}\nfunction getBasename(pathname) {\n return pathname.substring(pathname.lastIndexOf('/') + 1);\n}\nexport function getFileExtension(url) {\n const filename = getFilename(url);\n const dotIndex = filename.lastIndexOf('.');\n // Ignore leading dots for hidden files\n return dotIndex > 0 ? filename.substring(dotIndex) : '';\n}\n/**\n * Returns the base URL from a manifest's URL. For example, given a manifest hosted at\n * https://example.com/app/manifest.json, the base URL would be https://example.com/app/. Query\n * parameters and fragments also are removed.\n *\n * For an Expo-hosted project with a manifest hosted at https://exp.host/@user/project/index.exp, the\n * base URL would be https://exp.host/@user/project.\n *\n * We also normalize the \"exp\" protocol to \"http\" to handle internal URLs with the Expo schemes used\n * to tell the OS to open the URLs in the the Expo client.\n */\nexport function getManifestBaseUrl(manifestUrl) {\n const urlObject = new URL(manifestUrl);\n let nextProtocol = urlObject.protocol;\n // Change the scheme to http(s) if it is exp(s)\n if (nextProtocol === 'exp:') {\n nextProtocol = 'http:';\n }\n else if (nextProtocol === 'exps:') {\n nextProtocol = 'https:';\n }\n urlObject.protocol = nextProtocol;\n // Trim filename, query parameters, and fragment, if any\n const directory = urlObject.pathname.substring(0, urlObject.pathname.lastIndexOf('/') + 1);\n urlObject.pathname = directory;\n urlObject.search = '';\n urlObject.hash = '';\n // The URL spec doesn't allow for changing the protocol to `http` or `https`\n // without a port set so instead, we'll just swap the protocol manually.\n return urlObject.protocol !== nextProtocol\n ? urlObject.href.replace(urlObject.protocol, nextProtocol)\n : urlObject.href;\n}\n//# sourceMappingURL=AssetUris.js.map","/* eslint-env browser */\nimport { Platform } from 'expo-modules-core';\nimport { getFilename } from './AssetUris';\nexport function isImageType(type) {\n return /^(jpeg|jpg|gif|png|bmp|webp|heic)$/i.test(type);\n}\nexport function getImageInfoAsync(url) {\n if (!Platform.isDOMAvailable) {\n return Promise.resolve({ name: getFilename(url), width: 0, height: 0 });\n }\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.onerror = reject;\n img.onload = () => {\n resolve({\n name: getFilename(url),\n width: img.naturalWidth,\n height: img.naturalHeight,\n });\n };\n img.src = url;\n });\n}\n//# sourceMappingURL=ImageAssets.js.map","export function getLocalAssetUri(hash, type) {\n // noop on web\n return null;\n}\n//# sourceMappingURL=LocalAssets.web.js.map","import { getAssetByID } from '@react-native/assets-registry/registry';\nimport AssetSourceResolver from './AssetSourceResolver';\nlet _customSourceTransformer;\nexport function setCustomSourceTransformer(transformer) {\n _customSourceTransformer = transformer;\n}\n/**\n * `source` is either a number (opaque type returned by require('./foo.png'))\n * or an `ImageSource` like { uri: '' }\n */\nexport default function resolveAssetSource(source) {\n if (typeof source === 'object') {\n return source;\n }\n const asset = getAssetByID(source);\n if (!asset) {\n return null;\n }\n const resolver = new AssetSourceResolver(\n // Doesn't matter since this is removed on web\n 'https://expo.dev', null, asset);\n if (_customSourceTransformer) {\n return _customSourceTransformer(resolver);\n }\n return resolver.defaultAsset();\n}\nObject.defineProperty(resolveAssetSource, 'setCustomSourceTransformer', {\n get() {\n return setCustomSourceTransformer;\n },\n});\nexport const { pickScale } = AssetSourceResolver;\n//# sourceMappingURL=resolveAssetSource.js.map","import { useEffect, useState } from 'react';\nimport { Asset } from './Asset';\n// @needsAudit\n/**\n * Downloads and stores one or more assets locally.\n * After the assets are loaded, this hook returns a list of asset instances.\n * If something went wrong when loading the assets, an error is returned.\n *\n * > Note, the assets are not \"reloaded\" when you dynamically change the asset list.\n *\n * @return Returns an array containing:\n * - on the first position, a list of all loaded assets. If they aren't loaded yet, this value is\n * `undefined`.\n * - on the second position, an error which encountered when loading the assets. If there was no\n * error, this value is `undefined`.\n *\n * @example\n * ```tsx\n * const [assets, error] = useAssets([require('path/to/asset.jpg'), require('path/to/other.png')]);\n *\n * return assets ? : null;\n * ```\n */\nexport function useAssets(moduleIds) {\n const [assets, setAssets] = useState();\n const [error, setError] = useState();\n useEffect(() => {\n Asset.loadAsync(moduleIds).then(setAssets).catch(setError);\n }, []);\n return [assets, error];\n}\n//# sourceMappingURL=AssetHooks.js.map","export const loaded = {};\nexport const loadPromises = {};\n//# sourceMappingURL=memory.js.map","import { CodedError } from 'expo-modules-core';\nimport ExpoFontLoader from './ExpoFontLoader';\nimport { getAssetForSource, loadSingleFontAsync } from './FontLoader';\n/**\n * @returns the server resources that should be statically extracted.\n * @private\n */\nexport function getServerResources() {\n return ExpoFontLoader.getServerResources();\n}\n/**\n * @returns clear the server resources from the global scope.\n * @private\n */\nexport function resetServerContext() {\n return ExpoFontLoader.resetServerContext();\n}\nexport function registerStaticFont(fontFamily, source) {\n // MUST BE A SYNC FUNCTION!\n if (!source) {\n throw new CodedError(`ERR_FONT_SOURCE`, `Cannot load null or undefined font source: { \"${fontFamily}\": ${source} }. Expected asset of type \\`FontSource\\` for fontFamily of name: \"${fontFamily}\"`);\n }\n const asset = getAssetForSource(source);\n loadSingleFontAsync(fontFamily, asset);\n}\n//# sourceMappingURL=server.js.map","import { useEffect, useState } from 'react';\nimport { loadAsync, isLoaded } from './Font';\nfunction isMapLoaded(map) {\n if (typeof map === 'string') {\n return isLoaded(map);\n }\n else {\n return Object.keys(map).every((fontFamily) => isLoaded(fontFamily));\n }\n}\nfunction useRuntimeFonts(map) {\n const [loaded, setLoaded] = useState(\n // For web rehydration, we need to check if the fonts are already loaded during the static render.\n // Native will also benefit from this optimization.\n isMapLoaded(map));\n const [error, setError] = useState(null);\n useEffect(() => {\n loadAsync(map)\n .then(() => setLoaded(true))\n .catch(setError);\n }, []);\n return [loaded, error];\n}\nfunction useStaticFonts(map) {\n loadAsync(map);\n return [true, null];\n}\n// @needsAudit\n/**\n * ```ts\n * const [loaded, error] = useFonts({ ... });\n * ```\n * Load a map of fonts with [`loadAsync`](#loadasync). This returns a `boolean` if the fonts are\n * loaded and ready to use. It also returns an error if something went wrong, to use in development.\n *\n * > Note, the fonts are not \"reloaded\" when you dynamically change the font map.\n *\n * @param map A map of `fontFamily`s to [`FontSource`](#fontsource)s. After loading the font you can\n * use the key in the `fontFamily` style prop of a `Text` element.\n *\n * @return\n * - __loaded__ (`boolean`) - A boolean to detect if the font for `fontFamily` has finished\n * loading.\n * - __error__ (`Error | null`) - An error encountered when loading the fonts.\n */\nexport const useFonts = typeof window === 'undefined' ? useStaticFonts : useRuntimeFonts;\n//# sourceMappingURL=FontHooks.js.map","import React, { PureComponent } from 'react';\nimport {Platform, PixelRatio, processColor, Text, NativeModules} from 'react-native';\n\nimport ensureNativeModuleAvailable from './ensure-native-module-available';\nimport createIconSourceCache from './create-icon-source-cache';\nimport createIconButtonComponent from './icon-button';\n\nexport const NativeIconAPI =\n NativeModules.RNVectorIconsManager || NativeModules.RNVectorIconsModule;\n\nexport const DEFAULT_ICON_SIZE = 12;\nexport const DEFAULT_ICON_COLOR = 'black';\n\nexport default function createIconSet(\n glyphMap,\n fontFamily,\n fontFile,\n fontStyle\n) {\n // Android doesn't care about actual fontFamily name, it will only look in fonts folder.\n const fontBasename = fontFile\n ? fontFile.replace(/\\.(otf|ttf)$/, '')\n : fontFamily;\n\n const fontReference = Platform.select({\n windows: `/Assets/${fontFile}#${fontFamily}`,\n android: fontBasename,\n web: fontBasename,\n default: fontFamily,\n });\n\n class Icon extends PureComponent {\n root = null;\n\n static defaultProps = {\n size: DEFAULT_ICON_SIZE,\n allowFontScaling: false,\n };\n\n render() {\n const { name, size, color, style, children, ...props } = this.props;\n\n let glyph = name ? glyphMap[name] || '?' : '';\n if (typeof glyph === 'number') {\n glyph = String.fromCodePoint(glyph);\n }\n\n const styleDefaults = {\n fontSize: size,\n color,\n };\n\n const styleOverrides = {\n fontFamily: fontReference,\n fontWeight: 'normal',\n fontStyle: 'normal',\n };\n\n props.style = [styleDefaults, style, styleOverrides, fontStyle || {}];\n\n return (\n \n {glyph}\n {children}\n \n );\n }\n }\n\n const imageSourceCache = createIconSourceCache();\n\n function resolveGlyph(name) {\n const glyph = glyphMap[name] || '?';\n if (typeof glyph === 'number') {\n return String.fromCodePoint(glyph);\n }\n return glyph;\n }\n\n function getImageSourceSync(\n name,\n size = DEFAULT_ICON_SIZE,\n color = DEFAULT_ICON_COLOR\n ) {\n ensureNativeModuleAvailable();\n\n const glyph = resolveGlyph(name);\n const processedColor = processColor(color);\n const cacheKey = `${glyph}:${size}:${processedColor}`;\n\n if (imageSourceCache.has(cacheKey)) {\n return imageSourceCache.get(cacheKey);\n }\n try {\n const imagePath = NativeIconAPI.getImageForFontSync(\n fontReference,\n glyph,\n size,\n processedColor\n );\n const value = { uri: imagePath, scale: PixelRatio.get() };\n imageSourceCache.setValue(cacheKey, value);\n return value;\n } catch (error) {\n imageSourceCache.setError(cacheKey, error);\n throw error;\n }\n }\n\n async function getImageSource(\n name,\n size = DEFAULT_ICON_SIZE,\n color = DEFAULT_ICON_COLOR\n ) {\n ensureNativeModuleAvailable();\n\n const glyph = resolveGlyph(name);\n const processedColor = processColor(color);\n const cacheKey = `${glyph}:${size}:${processedColor}`;\n\n if (imageSourceCache.has(cacheKey)) {\n return imageSourceCache.get(cacheKey);\n }\n try {\n const imagePath = await NativeIconAPI.getImageForFont(\n fontReference,\n glyph,\n size,\n processedColor\n );\n const value = { uri: imagePath, scale: PixelRatio.get() };\n imageSourceCache.setValue(cacheKey, value);\n return value;\n } catch (error) {\n imageSourceCache.setError(cacheKey, error);\n throw error;\n }\n }\n\n async function loadFont(file = fontFile) {\n if (Platform.OS === 'ios') {\n ensureNativeModuleAvailable();\n if (!file) {\n throw new Error('Unable to load font, because no file was specified. ');\n }\n await NativeIconAPI.loadFontWithFileName(...file.split('.'));\n }\n }\n\n function hasIcon(name) {\n return Object.prototype.hasOwnProperty.call(glyphMap, name);\n }\n\n function getRawGlyphMap() {\n return glyphMap;\n }\n\n function getFontFamily() {\n return fontReference;\n }\n\n Icon.Button = createIconButtonComponent(Icon);\n Icon.getImageSource = getImageSource;\n Icon.getImageSourceSync = getImageSourceSync;\n Icon.loadFont = loadFont;\n Icon.hasIcon = hasIcon;\n Icon.getRawGlyphMap = getRawGlyphMap;\n Icon.getFontFamily = getFontFamily;\n\n return Icon;\n}\n","import {NativeModules} from \"react-native\";\n\nconst NativeIconAPI =\n NativeModules.RNVectorIconsManager || NativeModules.RNVectorIconsModule;\n\nexport default function ensureNativeModuleAvailable() {\n if (!NativeIconAPI) {\n throw new Error(\n 'The native RNVectorIcons API is not available, did you properly integrate the module? Please verify your autolinking setup and recompile.'\n );\n }\n}\n","const TYPE_VALUE = 'value';\nconst TYPE_ERROR = 'error';\n\nexport default function createIconSourceCache() {\n const cache = new Map();\n\n const setValue = (key, value) =>\n cache.set(key, { type: TYPE_VALUE, data: value });\n\n const setError = (key, error) =>\n cache.set(key, { type: TYPE_ERROR, data: error });\n\n const has = key => cache.has(key);\n\n const get = key => {\n if (!cache.has(key)) {\n return undefined;\n }\n const { type, data } = cache.get(key);\n if (type === TYPE_ERROR) {\n throw data;\n }\n return data;\n };\n\n return { setValue, setError, has, get };\n}\n","import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { StyleSheet, Text, TouchableHighlight, View } from 'react-native';\nimport { pick, omit } from './object-utils';\n\nconst styles = StyleSheet.create({\n container: {\n flexDirection: 'row',\n justifyContent: 'flex-start',\n alignItems: 'center',\n padding: 8,\n },\n touchable: {\n overflow: 'hidden',\n },\n icon: {\n marginRight: 10,\n },\n text: {\n fontWeight: '600',\n backgroundColor: 'transparent',\n },\n});\n\nconst IOS7_BLUE = '#007AFF';\n\nconst TEXT_PROP_NAMES = [\n 'ellipsizeMode',\n 'numberOfLines',\n 'textBreakStrategy',\n 'selectable',\n 'suppressHighlighting',\n 'allowFontScaling',\n 'adjustsFontSizeToFit',\n 'minimumFontScale',\n];\n\nconst TOUCHABLE_PROP_NAMES = [\n 'accessible',\n 'accessibilityLabel',\n 'accessibilityHint',\n 'accessibilityComponentType',\n 'accessibilityRole',\n 'accessibilityStates',\n 'accessibilityTraits',\n 'onFocus',\n 'onBlur',\n 'disabled',\n 'onPress',\n 'onPressIn',\n 'onPressOut',\n 'onLayout',\n 'onLongPress',\n 'nativeID',\n 'testID',\n 'delayPressIn',\n 'delayPressOut',\n 'delayLongPress',\n 'activeOpacity',\n 'underlayColor',\n 'selectionColor',\n 'onShowUnderlay',\n 'onHideUnderlay',\n 'hasTVPreferredFocus',\n 'tvParallaxProperties',\n];\n\nexport default function createIconButtonComponent(Icon) {\n return class IconButton extends PureComponent {\n static propTypes = {\n backgroundColor: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number,\n ]),\n borderRadius: PropTypes.number,\n color: PropTypes.any, // eslint-disable-line react/forbid-prop-types\n size: PropTypes.number,\n iconStyle: PropTypes.any, // eslint-disable-line react/forbid-prop-types\n style: PropTypes.any, // eslint-disable-line react/forbid-prop-types\n children: PropTypes.node,\n };\n\n static defaultProps = {\n backgroundColor: IOS7_BLUE,\n borderRadius: 5,\n color: 'white',\n size: 20,\n };\n\n render() {\n const { style, iconStyle, children, ...restProps } = this.props;\n\n const iconProps = pick(\n restProps,\n TEXT_PROP_NAMES,\n 'style',\n 'name',\n 'size',\n 'color'\n );\n const touchableProps = pick(restProps, TOUCHABLE_PROP_NAMES);\n const props = omit(\n restProps,\n Object.keys(iconProps),\n Object.keys(touchableProps),\n 'iconStyle',\n 'borderRadius',\n 'backgroundColor'\n );\n iconProps.style = iconStyle ? [styles.icon, iconStyle] : styles.icon;\n\n const colorStyle = pick(this.props, 'color');\n const blockStyle = pick(this.props, 'backgroundColor', 'borderRadius');\n\n return (\n \n \n \n {typeof children === 'string' ? (\n \n {children}\n \n ) : (\n children\n )}\n \n \n );\n }\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\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\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 = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\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'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\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 };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\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'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"activeOpacity\", \"children\", \"delayPressIn\", \"delayPressOut\", \"delayLongPress\", \"disabled\", \"focusable\", \"onHideUnderlay\", \"onLongPress\", \"onPress\", \"onPressIn\", \"onPressOut\", \"onShowUnderlay\", \"rejectResponderTermination\", \"style\", \"testOnly_pressed\", \"underlayColor\"];\nimport * as React from 'react';\nimport { useCallback, useMemo, useState, useRef } from 'react';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePressEvents from '../../modules/usePressEvents';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nimport { warnOnce } from '../../modules/warnOnce';\nfunction createExtraStyles(activeOpacity, underlayColor) {\n return {\n child: {\n opacity: activeOpacity !== null && activeOpacity !== void 0 ? activeOpacity : 0.85\n },\n underlay: {\n backgroundColor: underlayColor === undefined ? 'black' : underlayColor\n }\n };\n}\nfunction hasPressHandler(props) {\n return props.onPress != null || props.onPressIn != null || props.onPressOut != null || props.onLongPress != null;\n}\n\n/**\n * A wrapper for making views respond properly to touches.\n * On press down, the opacity of the wrapped view is decreased, which allows\n * the underlay color to show through, darkening or tinting the view.\n *\n * The underlay comes from wrapping the child in a new View, which can affect\n * layout, and sometimes cause unwanted visual artifacts if not used correctly,\n * for example if the backgroundColor of the wrapped view isn't explicitly set\n * to an opaque color.\n *\n * TouchableHighlight must have one child (not zero or more than one).\n * If you wish to have several child components, wrap them in a View.\n */\nfunction TouchableHighlight(props, forwardedRef) {\n warnOnce('TouchableHighlight', 'TouchableHighlight is deprecated. Please use Pressable.');\n var activeOpacity = props.activeOpacity,\n children = props.children,\n delayPressIn = props.delayPressIn,\n delayPressOut = props.delayPressOut,\n delayLongPress = props.delayLongPress,\n disabled = props.disabled,\n focusable = props.focusable,\n onHideUnderlay = props.onHideUnderlay,\n onLongPress = props.onLongPress,\n onPress = props.onPress,\n onPressIn = props.onPressIn,\n onPressOut = props.onPressOut,\n onShowUnderlay = props.onShowUnderlay,\n rejectResponderTermination = props.rejectResponderTermination,\n style = props.style,\n testOnly_pressed = props.testOnly_pressed,\n underlayColor = props.underlayColor,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n var hostRef = useRef(null);\n var setRef = useMergeRefs(forwardedRef, hostRef);\n var _useState = useState(testOnly_pressed === true ? createExtraStyles(activeOpacity, underlayColor) : null),\n extraStyles = _useState[0],\n setExtraStyles = _useState[1];\n var showUnderlay = useCallback(() => {\n if (!hasPressHandler(props)) {\n return;\n }\n setExtraStyles(createExtraStyles(activeOpacity, underlayColor));\n if (onShowUnderlay != null) {\n onShowUnderlay();\n }\n }, [activeOpacity, onShowUnderlay, props, underlayColor]);\n var hideUnderlay = useCallback(() => {\n if (testOnly_pressed === true) {\n return;\n }\n if (hasPressHandler(props)) {\n setExtraStyles(null);\n if (onHideUnderlay != null) {\n onHideUnderlay();\n }\n }\n }, [onHideUnderlay, props, testOnly_pressed]);\n var pressConfig = useMemo(() => ({\n cancelable: !rejectResponderTermination,\n disabled,\n delayLongPress,\n delayPressStart: delayPressIn,\n delayPressEnd: delayPressOut,\n onLongPress,\n onPress,\n onPressStart(event) {\n showUnderlay();\n if (onPressIn != null) {\n onPressIn(event);\n }\n },\n onPressEnd(event) {\n hideUnderlay();\n if (onPressOut != null) {\n onPressOut(event);\n }\n }\n }), [delayLongPress, delayPressIn, delayPressOut, disabled, onLongPress, onPress, onPressIn, onPressOut, rejectResponderTermination, showUnderlay, hideUnderlay]);\n var pressEventHandlers = usePressEvents(hostRef, pressConfig);\n var child = React.Children.only(children);\n return /*#__PURE__*/React.createElement(View, _extends({}, rest, pressEventHandlers, {\n accessibilityDisabled: disabled,\n focusable: !disabled && focusable !== false,\n pointerEvents: disabled ? 'box-none' : undefined,\n ref: setRef,\n style: [styles.root, style, !disabled && styles.actionable, extraStyles && extraStyles.underlay]\n }), /*#__PURE__*/React.cloneElement(child, {\n style: [child.props.style, extraStyles && extraStyles.child]\n }));\n}\nvar styles = StyleSheet.create({\n root: {\n userSelect: 'none'\n },\n actionable: {\n cursor: 'pointer',\n touchAction: 'manipulation'\n }\n});\nvar MemoedTouchableHighlight = /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef(TouchableHighlight));\nMemoedTouchableHighlight.displayName = 'TouchableHighlight';\nexport default MemoedTouchableHighlight;","const pick = (obj, ...keys) =>\n keys\n .flat()\n .filter(key => Object.prototype.hasOwnProperty.call(obj, key))\n .reduce((acc, key) => {\n acc[key] = obj[key];\n return acc;\n }, {});\n\nconst omit = (obj, ...keysToOmit) => {\n const keysToOmitSet = new Set(keysToOmit.flat());\n return Object.getOwnPropertyNames(obj)\n .filter(key => !keysToOmitSet.has(key))\n .reduce((acc, key) => {\n acc[key] = obj[key];\n return acc;\n }, {});\n};\n\nmodule.exports = { pick, omit };\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","","{\n \"ab-testing\": 983497,\n \"abacus\": 988896,\n \"abjad-arabic\": 987944,\n \"abjad-hebrew\": 987945,\n \"abugida-devanagari\": 987946,\n \"abugida-thai\": 987947,\n \"access-point\": 983043,\n \"access-point-check\": 988472,\n \"access-point-minus\": 988473,\n \"access-point-network\": 983042,\n \"access-point-network-off\": 986081,\n \"access-point-off\": 988433,\n \"access-point-plus\": 988474,\n \"access-point-remove\": 988475,\n \"account\": 983044,\n \"account-alert\": 983045,\n \"account-alert-outline\": 985936,\n \"account-arrow-down\": 989288,\n \"account-arrow-down-outline\": 989289,\n \"account-arrow-left\": 985937,\n \"account-arrow-left-outline\": 985938,\n \"account-arrow-right\": 985939,\n \"account-arrow-right-outline\": 985940,\n \"account-arrow-up\": 989287,\n \"account-arrow-up-outline\": 989290,\n \"account-box\": 983046,\n \"account-box-multiple\": 985396,\n \"account-box-multiple-outline\": 987146,\n \"account-box-outline\": 983047,\n \"account-cancel\": 987871,\n \"account-cancel-outline\": 987872,\n \"account-cash\": 987287,\n \"account-cash-outline\": 987288,\n \"account-check\": 983048,\n \"account-check-outline\": 986082,\n \"account-child\": 985737,\n \"account-child-circle\": 985738,\n \"account-child-outline\": 987336,\n \"account-circle\": 983049,\n \"account-circle-outline\": 985941,\n \"account-clock\": 985942,\n \"account-clock-outline\": 985943,\n \"account-cog\": 988016,\n \"account-cog-outline\": 988017,\n \"account-convert\": 983050,\n \"account-convert-outline\": 987905,\n \"account-cowboy-hat\": 986779,\n \"account-cowboy-hat-outline\": 989171,\n \"account-details\": 984625,\n \"account-details-outline\": 988018,\n \"account-edit\": 984764,\n \"account-edit-outline\": 987131,\n \"account-eye\": 984096,\n \"account-eye-outline\": 987771,\n \"account-filter\": 985398,\n \"account-filter-outline\": 987037,\n \"account-group\": 985161,\n \"account-group-outline\": 985944,\n \"account-hard-hat\": 984501,\n \"account-heart\": 985241,\n \"account-heart-outline\": 986083,\n \"account-injury\": 989205,\n \"account-injury-outline\": 989206,\n \"account-key\": 983051,\n \"account-key-outline\": 986084,\n \"account-lock\": 987486,\n \"account-lock-open\": 989536,\n \"account-lock-open-outline\": 989537,\n \"account-lock-outline\": 987487,\n \"account-minus\": 983053,\n \"account-minus-outline\": 985836,\n \"account-multiple\": 983054,\n \"account-multiple-check\": 985285,\n \"account-multiple-check-outline\": 987646,\n \"account-multiple-minus\": 984531,\n \"account-multiple-minus-outline\": 986085,\n \"account-multiple-outline\": 983055,\n \"account-multiple-plus\": 983056,\n \"account-multiple-plus-outline\": 985088,\n \"account-multiple-remove\": 987658,\n \"account-multiple-remove-outline\": 987659,\n \"account-music\": 985091,\n \"account-music-outline\": 986345,\n \"account-network\": 983057,\n \"account-network-outline\": 986086,\n \"account-off\": 983058,\n \"account-off-outline\": 986087,\n \"account-outline\": 983059,\n \"account-plus\": 983060,\n \"account-plus-outline\": 985089,\n \"account-question\": 985945,\n \"account-question-outline\": 985946,\n \"account-reactivate\": 988459,\n \"account-reactivate-outline\": 988460,\n \"account-remove\": 983061,\n \"account-remove-outline\": 985837,\n \"account-search\": 983062,\n \"account-search-outline\": 985397,\n \"account-settings\": 984624,\n \"account-settings-outline\": 987337,\n \"account-star\": 983063,\n \"account-star-outline\": 986088,\n \"account-supervisor\": 985739,\n \"account-supervisor-circle\": 985740,\n \"account-supervisor-circle-outline\": 988396,\n \"account-supervisor-outline\": 987437,\n \"account-switch\": 983065,\n \"account-switch-outline\": 984267,\n \"account-sync\": 989467,\n \"account-sync-outline\": 989468,\n \"account-tie\": 986339,\n \"account-tie-hat\": 989336,\n \"account-tie-hat-outline\": 989337,\n \"account-tie-outline\": 987338,\n \"account-tie-voice\": 987912,\n \"account-tie-voice-off\": 987914,\n \"account-tie-voice-off-outline\": 987915,\n \"account-tie-voice-outline\": 987913,\n \"account-voice\": 984523,\n \"account-voice-off\": 986836,\n \"account-wrench\": 989338,\n \"account-wrench-outline\": 989339,\n \"adjust\": 983066,\n \"advertisements\": 989482,\n \"advertisements-off\": 989483,\n \"air-conditioner\": 983067,\n \"air-filter\": 986435,\n \"air-horn\": 986540,\n \"air-humidifier\": 987289,\n \"air-humidifier-off\": 988262,\n \"air-purifier\": 986436,\n \"airbag\": 986089,\n \"airballoon\": 983068,\n \"airballoon-outline\": 987147,\n \"airplane\": 983069,\n \"airplane-alert\": 989306,\n \"airplane-check\": 989307,\n \"airplane-clock\": 989308,\n \"airplane-cog\": 989309,\n \"airplane-edit\": 989310,\n \"airplane-landing\": 984532,\n \"airplane-marker\": 989311,\n \"airplane-minus\": 989312,\n \"airplane-off\": 983070,\n \"airplane-plus\": 989313,\n \"airplane-remove\": 989314,\n \"airplane-search\": 989315,\n \"airplane-settings\": 989316,\n \"airplane-takeoff\": 984533,\n \"airport\": 985163,\n \"alarm\": 983072,\n \"alarm-bell\": 984974,\n \"alarm-check\": 983073,\n \"alarm-light\": 984975,\n \"alarm-light-off\": 988958,\n \"alarm-light-off-outline\": 988959,\n \"alarm-light-outline\": 986090,\n \"alarm-multiple\": 983074,\n \"alarm-note\": 986737,\n \"alarm-note-off\": 986738,\n \"alarm-off\": 983075,\n \"alarm-panel\": 988612,\n \"alarm-panel-outline\": 988613,\n \"alarm-plus\": 983076,\n \"alarm-snooze\": 984718,\n \"album\": 983077,\n \"alert\": 983078,\n \"alert-box\": 983079,\n \"alert-box-outline\": 986340,\n \"alert-circle\": 983080,\n \"alert-circle-check\": 987629,\n \"alert-circle-check-outline\": 987630,\n \"alert-circle-outline\": 984534,\n \"alert-decagram\": 984765,\n \"alert-decagram-outline\": 986341,\n \"alert-minus\": 988347,\n \"alert-minus-outline\": 988350,\n \"alert-octagon\": 983081,\n \"alert-octagon-outline\": 986342,\n \"alert-octagram\": 984935,\n \"alert-octagram-outline\": 986343,\n \"alert-outline\": 983082,\n \"alert-plus\": 988346,\n \"alert-plus-outline\": 988349,\n \"alert-remove\": 988348,\n \"alert-remove-outline\": 988351,\n \"alert-rhombus\": 987598,\n \"alert-rhombus-outline\": 987599,\n \"alien\": 985242,\n \"alien-outline\": 987339,\n \"align-horizontal-center\": 987587,\n \"align-horizontal-distribute\": 989538,\n \"align-horizontal-left\": 987586,\n \"align-horizontal-right\": 987588,\n \"align-vertical-bottom\": 987589,\n \"align-vertical-center\": 987590,\n \"align-vertical-distribute\": 989539,\n \"align-vertical-top\": 987591,\n \"all-inclusive\": 984766,\n \"all-inclusive-box\": 989325,\n \"all-inclusive-box-outline\": 989326,\n \"allergy\": 987736,\n \"alpha\": 983083,\n \"alpha-a\": 985838,\n \"alpha-a-box\": 985864,\n \"alpha-a-box-outline\": 986091,\n \"alpha-a-circle\": 986092,\n \"alpha-a-circle-outline\": 986093,\n \"alpha-b\": 985839,\n \"alpha-b-box\": 985865,\n \"alpha-b-box-outline\": 986094,\n \"alpha-b-circle\": 986095,\n \"alpha-b-circle-outline\": 986096,\n \"alpha-c\": 985840,\n \"alpha-c-box\": 985866,\n \"alpha-c-box-outline\": 986097,\n \"alpha-c-circle\": 986098,\n \"alpha-c-circle-outline\": 986099,\n \"alpha-d\": 985841,\n \"alpha-d-box\": 985867,\n \"alpha-d-box-outline\": 986100,\n \"alpha-d-circle\": 986101,\n \"alpha-d-circle-outline\": 986102,\n \"alpha-e\": 985842,\n \"alpha-e-box\": 985868,\n \"alpha-e-box-outline\": 986103,\n \"alpha-e-circle\": 986104,\n \"alpha-e-circle-outline\": 986105,\n \"alpha-f\": 985843,\n \"alpha-f-box\": 985869,\n \"alpha-f-box-outline\": 986106,\n \"alpha-f-circle\": 986107,\n \"alpha-f-circle-outline\": 986108,\n \"alpha-g\": 985844,\n \"alpha-g-box\": 985870,\n \"alpha-g-box-outline\": 986109,\n \"alpha-g-circle\": 986110,\n \"alpha-g-circle-outline\": 986111,\n \"alpha-h\": 985845,\n \"alpha-h-box\": 985871,\n \"alpha-h-box-outline\": 986112,\n \"alpha-h-circle\": 986113,\n \"alpha-h-circle-outline\": 986114,\n \"alpha-i\": 985846,\n \"alpha-i-box\": 985872,\n \"alpha-i-box-outline\": 986115,\n \"alpha-i-circle\": 986116,\n \"alpha-i-circle-outline\": 986117,\n \"alpha-j\": 985847,\n \"alpha-j-box\": 985873,\n \"alpha-j-box-outline\": 986118,\n \"alpha-j-circle\": 986119,\n \"alpha-j-circle-outline\": 986120,\n \"alpha-k\": 985848,\n \"alpha-k-box\": 985874,\n \"alpha-k-box-outline\": 986121,\n \"alpha-k-circle\": 986122,\n \"alpha-k-circle-outline\": 986123,\n \"alpha-l\": 985849,\n \"alpha-l-box\": 985875,\n \"alpha-l-box-outline\": 986124,\n \"alpha-l-circle\": 986125,\n \"alpha-l-circle-outline\": 986126,\n \"alpha-m\": 985850,\n \"alpha-m-box\": 985876,\n \"alpha-m-box-outline\": 986127,\n \"alpha-m-circle\": 986128,\n \"alpha-m-circle-outline\": 986129,\n \"alpha-n\": 985851,\n \"alpha-n-box\": 985877,\n \"alpha-n-box-outline\": 986130,\n \"alpha-n-circle\": 986131,\n \"alpha-n-circle-outline\": 986132,\n \"alpha-o\": 985852,\n \"alpha-o-box\": 985878,\n \"alpha-o-box-outline\": 986133,\n \"alpha-o-circle\": 986134,\n \"alpha-o-circle-outline\": 986135,\n \"alpha-p\": 985853,\n \"alpha-p-box\": 985879,\n \"alpha-p-box-outline\": 986136,\n \"alpha-p-circle\": 986137,\n \"alpha-p-circle-outline\": 986138,\n \"alpha-q\": 985854,\n \"alpha-q-box\": 985880,\n \"alpha-q-box-outline\": 986139,\n \"alpha-q-circle\": 986140,\n \"alpha-q-circle-outline\": 986141,\n \"alpha-r\": 985855,\n \"alpha-r-box\": 985881,\n \"alpha-r-box-outline\": 986142,\n \"alpha-r-circle\": 986143,\n \"alpha-r-circle-outline\": 986144,\n \"alpha-s\": 985856,\n \"alpha-s-box\": 985882,\n \"alpha-s-box-outline\": 986145,\n \"alpha-s-circle\": 986146,\n \"alpha-s-circle-outline\": 986147,\n \"alpha-t\": 985857,\n \"alpha-t-box\": 985883,\n \"alpha-t-box-outline\": 986148,\n \"alpha-t-circle\": 986149,\n \"alpha-t-circle-outline\": 986150,\n \"alpha-u\": 985858,\n \"alpha-u-box\": 985884,\n \"alpha-u-box-outline\": 986151,\n \"alpha-u-circle\": 986152,\n \"alpha-u-circle-outline\": 986153,\n \"alpha-v\": 985859,\n \"alpha-v-box\": 985885,\n \"alpha-v-box-outline\": 986154,\n \"alpha-v-circle\": 986155,\n \"alpha-v-circle-outline\": 986156,\n \"alpha-w\": 985860,\n \"alpha-w-box\": 985886,\n \"alpha-w-box-outline\": 986157,\n \"alpha-w-circle\": 986158,\n \"alpha-w-circle-outline\": 986159,\n \"alpha-x\": 985861,\n \"alpha-x-box\": 985887,\n \"alpha-x-box-outline\": 986160,\n \"alpha-x-circle\": 986161,\n \"alpha-x-circle-outline\": 986162,\n \"alpha-y\": 985862,\n \"alpha-y-box\": 985888,\n \"alpha-y-box-outline\": 986163,\n \"alpha-y-circle\": 986164,\n \"alpha-y-circle-outline\": 986165,\n \"alpha-z\": 985863,\n \"alpha-z-box\": 985889,\n \"alpha-z-box-outline\": 986166,\n \"alpha-z-circle\": 986167,\n \"alpha-z-circle-outline\": 986168,\n \"alphabet-aurebesh\": 987948,\n \"alphabet-cyrillic\": 987949,\n \"alphabet-greek\": 987950,\n \"alphabet-latin\": 987951,\n \"alphabet-piqad\": 987952,\n \"alphabet-tengwar\": 987959,\n \"alphabetical\": 983084,\n \"alphabetical-off\": 987148,\n \"alphabetical-variant\": 987149,\n \"alphabetical-variant-off\": 987150,\n \"altimeter\": 984535,\n \"ambulance\": 983087,\n \"ammunition\": 986344,\n \"ampersand\": 985741,\n \"amplifier\": 983088,\n \"amplifier-off\": 987573,\n \"anchor\": 983089,\n \"android\": 983090,\n \"android-messages\": 986437,\n \"android-studio\": 983092,\n \"angle-acute\": 985399,\n \"angle-obtuse\": 985400,\n \"angle-right\": 985401,\n \"angular\": 984754,\n \"angularjs\": 984767,\n \"animation\": 984536,\n \"animation-outline\": 985743,\n \"animation-play\": 985402,\n \"animation-play-outline\": 985744,\n \"ansible\": 987290,\n \"antenna\": 987417,\n \"anvil\": 985243,\n \"apache-kafka\": 987151,\n \"api\": 987291,\n \"api-off\": 987735,\n \"apple\": 983093,\n \"apple-finder\": 983094,\n \"apple-icloud\": 983096,\n \"apple-ios\": 983095,\n \"apple-keyboard-caps\": 984626,\n \"apple-keyboard-command\": 984627,\n \"apple-keyboard-control\": 984628,\n \"apple-keyboard-option\": 984629,\n \"apple-keyboard-shift\": 984630,\n \"apple-safari\": 983097,\n \"application\": 985286,\n \"application-array\": 987381,\n \"application-array-outline\": 987382,\n \"application-braces\": 987383,\n \"application-braces-outline\": 987384,\n \"application-brackets\": 986251,\n \"application-brackets-outline\": 986252,\n \"application-cog\": 984693,\n \"application-cog-outline\": 988535,\n \"application-edit\": 983214,\n \"application-edit-outline\": 984601,\n \"application-export\": 986541,\n \"application-import\": 986542,\n \"application-outline\": 984596,\n \"application-parentheses\": 987385,\n \"application-parentheses-outline\": 987386,\n \"application-settings\": 985952,\n \"application-settings-outline\": 988501,\n \"application-variable\": 987387,\n \"application-variable-outline\": 987388,\n \"approximately-equal\": 987038,\n \"approximately-equal-box\": 987039,\n \"apps\": 983099,\n \"apps-box\": 986438,\n \"arch\": 985287,\n \"archive\": 983100,\n \"archive-alert\": 988413,\n \"archive-alert-outline\": 988414,\n \"archive-arrow-down\": 987737,\n \"archive-arrow-down-outline\": 987738,\n \"archive-arrow-up\": 987739,\n \"archive-arrow-up-outline\": 987740,\n \"archive-cancel\": 989003,\n \"archive-cancel-outline\": 989004,\n \"archive-check\": 989005,\n \"archive-check-outline\": 989006,\n \"archive-clock\": 989007,\n \"archive-clock-outline\": 989008,\n \"archive-cog\": 989009,\n \"archive-cog-outline\": 989010,\n \"archive-edit\": 989011,\n \"archive-edit-outline\": 989012,\n \"archive-eye\": 989013,\n \"archive-eye-outline\": 989014,\n \"archive-lock\": 989015,\n \"archive-lock-open\": 989016,\n \"archive-lock-open-outline\": 989017,\n \"archive-lock-outline\": 989018,\n \"archive-marker\": 989019,\n \"archive-marker-outline\": 989020,\n \"archive-minus\": 989021,\n \"archive-minus-outline\": 989022,\n \"archive-music\": 989023,\n \"archive-music-outline\": 989024,\n \"archive-off\": 989025,\n \"archive-off-outline\": 989026,\n \"archive-outline\": 987662,\n \"archive-plus\": 989027,\n \"archive-plus-outline\": 989028,\n \"archive-refresh\": 989029,\n \"archive-refresh-outline\": 989030,\n \"archive-remove\": 989031,\n \"archive-remove-outline\": 989032,\n \"archive-search\": 989033,\n \"archive-search-outline\": 989034,\n \"archive-settings\": 989035,\n \"archive-settings-outline\": 989036,\n \"archive-star\": 989037,\n \"archive-star-outline\": 989038,\n \"archive-sync\": 989039,\n \"archive-sync-outline\": 989040,\n \"arm-flex\": 987095,\n \"arm-flex-outline\": 987094,\n \"arrange-bring-forward\": 983101,\n \"arrange-bring-to-front\": 983102,\n \"arrange-send-backward\": 983103,\n \"arrange-send-to-back\": 983104,\n \"arrow-all\": 983105,\n \"arrow-bottom-left\": 983106,\n \"arrow-bottom-left-bold-box\": 989540,\n \"arrow-bottom-left-bold-box-outline\": 989541,\n \"arrow-bottom-left-bold-outline\": 985527,\n \"arrow-bottom-left-thick\": 985528,\n \"arrow-bottom-left-thin\": 989622,\n \"arrow-bottom-left-thin-circle-outline\": 988566,\n \"arrow-bottom-right\": 983107,\n \"arrow-bottom-right-bold-box\": 989542,\n \"arrow-bottom-right-bold-box-outline\": 989543,\n \"arrow-bottom-right-bold-outline\": 985529,\n \"arrow-bottom-right-thick\": 985530,\n \"arrow-bottom-right-thin\": 989623,\n \"arrow-bottom-right-thin-circle-outline\": 988565,\n \"arrow-collapse\": 984597,\n \"arrow-collapse-all\": 983108,\n \"arrow-collapse-down\": 984978,\n \"arrow-collapse-horizontal\": 985164,\n \"arrow-collapse-left\": 984979,\n \"arrow-collapse-right\": 984980,\n \"arrow-collapse-up\": 984981,\n \"arrow-collapse-vertical\": 985165,\n \"arrow-decision\": 985531,\n \"arrow-decision-auto\": 985532,\n \"arrow-decision-auto-outline\": 985533,\n \"arrow-decision-outline\": 985534,\n \"arrow-down\": 983109,\n \"arrow-down-bold\": 984878,\n \"arrow-down-bold-box\": 984879,\n \"arrow-down-bold-box-outline\": 984880,\n \"arrow-down-bold-circle\": 983111,\n \"arrow-down-bold-circle-outline\": 983112,\n \"arrow-down-bold-hexagon-outline\": 983113,\n \"arrow-down-bold-outline\": 985535,\n \"arrow-down-box\": 984768,\n \"arrow-down-circle\": 986331,\n \"arrow-down-circle-outline\": 986332,\n \"arrow-down-drop-circle\": 983114,\n \"arrow-down-drop-circle-outline\": 983115,\n \"arrow-down-left\": 989089,\n \"arrow-down-left-bold\": 989090,\n \"arrow-down-right\": 989091,\n \"arrow-down-right-bold\": 989092,\n \"arrow-down-thick\": 983110,\n \"arrow-down-thin\": 989619,\n \"arrow-down-thin-circle-outline\": 988569,\n \"arrow-expand\": 984598,\n \"arrow-expand-all\": 983116,\n \"arrow-expand-down\": 984982,\n \"arrow-expand-horizontal\": 985166,\n \"arrow-expand-left\": 984983,\n \"arrow-expand-right\": 984984,\n \"arrow-expand-up\": 984985,\n \"arrow-expand-vertical\": 985167,\n \"arrow-horizontal-lock\": 987483,\n \"arrow-left\": 983117,\n \"arrow-left-bold\": 984881,\n \"arrow-left-bold-box\": 984882,\n \"arrow-left-bold-box-outline\": 984883,\n \"arrow-left-bold-circle\": 983119,\n \"arrow-left-bold-circle-outline\": 983120,\n \"arrow-left-bold-hexagon-outline\": 983121,\n \"arrow-left-bold-outline\": 985536,\n \"arrow-left-bottom\": 989093,\n \"arrow-left-bottom-bold\": 989094,\n \"arrow-left-box\": 984769,\n \"arrow-left-circle\": 986333,\n \"arrow-left-circle-outline\": 986334,\n \"arrow-left-drop-circle\": 983122,\n \"arrow-left-drop-circle-outline\": 983123,\n \"arrow-left-right\": 986739,\n \"arrow-left-right-bold\": 986740,\n \"arrow-left-right-bold-outline\": 985537,\n \"arrow-left-thick\": 983118,\n \"arrow-left-thin\": 989617,\n \"arrow-left-thin-circle-outline\": 988570,\n \"arrow-left-top\": 989095,\n \"arrow-left-top-bold\": 989096,\n \"arrow-projectile\": 989248,\n \"arrow-projectile-multiple\": 989247,\n \"arrow-right\": 983124,\n \"arrow-right-bold\": 984884,\n \"arrow-right-bold-box\": 984885,\n \"arrow-right-bold-box-outline\": 984886,\n \"arrow-right-bold-circle\": 983126,\n \"arrow-right-bold-circle-outline\": 983127,\n \"arrow-right-bold-hexagon-outline\": 983128,\n \"arrow-right-bold-outline\": 985538,\n \"arrow-right-bottom\": 989097,\n \"arrow-right-bottom-bold\": 989098,\n \"arrow-right-box\": 984770,\n \"arrow-right-circle\": 986335,\n \"arrow-right-circle-outline\": 986336,\n \"arrow-right-drop-circle\": 983129,\n \"arrow-right-drop-circle-outline\": 983130,\n \"arrow-right-thick\": 983125,\n \"arrow-right-thin\": 989616,\n \"arrow-right-thin-circle-outline\": 988568,\n \"arrow-right-top\": 989099,\n \"arrow-right-top-bold\": 989100,\n \"arrow-split-horizontal\": 985403,\n \"arrow-split-vertical\": 985404,\n \"arrow-top-left\": 983131,\n \"arrow-top-left-bold-box\": 989544,\n \"arrow-top-left-bold-box-outline\": 989545,\n \"arrow-top-left-bold-outline\": 985539,\n \"arrow-top-left-bottom-right\": 986741,\n \"arrow-top-left-bottom-right-bold\": 986742,\n \"arrow-top-left-thick\": 985540,\n \"arrow-top-left-thin\": 989621,\n \"arrow-top-left-thin-circle-outline\": 988563,\n \"arrow-top-right\": 983132,\n \"arrow-top-right-bold-box\": 989546,\n \"arrow-top-right-bold-box-outline\": 989547,\n \"arrow-top-right-bold-outline\": 985541,\n \"arrow-top-right-bottom-left\": 986743,\n \"arrow-top-right-bottom-left-bold\": 986744,\n \"arrow-top-right-thick\": 985542,\n \"arrow-top-right-thin\": 989620,\n \"arrow-top-right-thin-circle-outline\": 988564,\n \"arrow-u-down-left\": 989101,\n \"arrow-u-down-left-bold\": 989102,\n \"arrow-u-down-right\": 989103,\n \"arrow-u-down-right-bold\": 989104,\n \"arrow-u-left-bottom\": 989105,\n \"arrow-u-left-bottom-bold\": 989106,\n \"arrow-u-left-top\": 989107,\n \"arrow-u-left-top-bold\": 989108,\n \"arrow-u-right-bottom\": 989109,\n \"arrow-u-right-bottom-bold\": 989110,\n \"arrow-u-right-top\": 989111,\n \"arrow-u-right-top-bold\": 989112,\n \"arrow-u-up-left\": 989113,\n \"arrow-u-up-left-bold\": 989114,\n \"arrow-u-up-right\": 989115,\n \"arrow-u-up-right-bold\": 989116,\n \"arrow-up\": 983133,\n \"arrow-up-bold\": 984887,\n \"arrow-up-bold-box\": 984888,\n \"arrow-up-bold-box-outline\": 984889,\n \"arrow-up-bold-circle\": 983135,\n \"arrow-up-bold-circle-outline\": 983136,\n \"arrow-up-bold-hexagon-outline\": 983137,\n \"arrow-up-bold-outline\": 985543,\n \"arrow-up-box\": 984771,\n \"arrow-up-circle\": 986337,\n \"arrow-up-circle-outline\": 986338,\n \"arrow-up-down\": 986745,\n \"arrow-up-down-bold\": 986746,\n \"arrow-up-down-bold-outline\": 985544,\n \"arrow-up-drop-circle\": 983138,\n \"arrow-up-drop-circle-outline\": 983139,\n \"arrow-up-left\": 989117,\n \"arrow-up-left-bold\": 989118,\n \"arrow-up-right\": 989119,\n \"arrow-up-right-bold\": 989120,\n \"arrow-up-thick\": 983134,\n \"arrow-up-thin\": 989618,\n \"arrow-up-thin-circle-outline\": 988567,\n \"arrow-vertical-lock\": 987484,\n \"artstation\": 985947,\n \"aspect-ratio\": 985636,\n \"assistant\": 983140,\n \"asterisk\": 984772,\n \"at\": 983141,\n \"atlassian\": 985092,\n \"atm\": 986439,\n \"atom\": 984936,\n \"atom-variant\": 986747,\n \"attachment\": 983142,\n \"audio-input-rca\": 989291,\n \"audio-input-stereo-minijack\": 989292,\n \"audio-input-xlr\": 989293,\n \"audio-video\": 985405,\n \"audio-video-off\": 987574,\n \"augmented-reality\": 985168,\n \"auto-download\": 988030,\n \"auto-fix\": 983144,\n \"auto-upload\": 983145,\n \"autorenew\": 983146,\n \"av-timer\": 983147,\n \"aws\": 986639,\n \"axe\": 985288,\n \"axe-battle\": 989250,\n \"axis\": 986440,\n \"axis-arrow\": 986441,\n \"axis-arrow-info\": 988174,\n \"axis-arrow-lock\": 986442,\n \"axis-lock\": 986443,\n \"axis-x-arrow\": 986444,\n \"axis-x-arrow-lock\": 986445,\n \"axis-x-rotate-clockwise\": 986446,\n \"axis-x-rotate-counterclockwise\": 986447,\n \"axis-x-y-arrow-lock\": 986448,\n \"axis-y-arrow\": 986449,\n \"axis-y-arrow-lock\": 986450,\n \"axis-y-rotate-clockwise\": 986451,\n \"axis-y-rotate-counterclockwise\": 986452,\n \"axis-z-arrow\": 986453,\n \"axis-z-arrow-lock\": 986454,\n \"axis-z-rotate-clockwise\": 986455,\n \"axis-z-rotate-counterclockwise\": 986456,\n \"babel\": 985637,\n \"baby\": 983148,\n \"baby-bottle\": 986937,\n \"baby-bottle-outline\": 986938,\n \"baby-buggy\": 988128,\n \"baby-carriage\": 984719,\n \"baby-carriage-off\": 987040,\n \"baby-face\": 986748,\n \"baby-face-outline\": 986749,\n \"backburger\": 983149,\n \"backspace\": 983150,\n \"backspace-outline\": 985948,\n \"backspace-reverse\": 986750,\n \"backspace-reverse-outline\": 986751,\n \"backup-restore\": 983151,\n \"bacteria\": 986837,\n \"bacteria-outline\": 986838,\n \"badge-account\": 986535,\n \"badge-account-alert\": 986536,\n \"badge-account-alert-outline\": 986537,\n \"badge-account-horizontal\": 986637,\n \"badge-account-horizontal-outline\": 986638,\n \"badge-account-outline\": 986538,\n \"badminton\": 985169,\n \"bag-carry-on\": 986939,\n \"bag-carry-on-check\": 986469,\n \"bag-carry-on-off\": 986940,\n \"bag-checked\": 986941,\n \"bag-personal\": 986640,\n \"bag-personal-off\": 986641,\n \"bag-personal-off-outline\": 986642,\n \"bag-personal-outline\": 986643,\n \"bag-suitcase\": 988555,\n \"bag-suitcase-off\": 988557,\n \"bag-suitcase-off-outline\": 988558,\n \"bag-suitcase-outline\": 988556,\n \"baguette\": 986942,\n \"balcony\": 989207,\n \"balloon\": 985638,\n \"ballot\": 985545,\n \"ballot-outline\": 985546,\n \"ballot-recount\": 986169,\n \"ballot-recount-outline\": 986170,\n \"bandage\": 986543,\n \"bank\": 983152,\n \"bank-check\": 988757,\n \"bank-minus\": 986544,\n \"bank-off\": 988758,\n \"bank-off-outline\": 988759,\n \"bank-outline\": 986752,\n \"bank-plus\": 986545,\n \"bank-remove\": 986546,\n \"bank-transfer\": 985639,\n \"bank-transfer-in\": 985640,\n \"bank-transfer-out\": 985641,\n \"barcode\": 983153,\n \"barcode-off\": 987702,\n \"barcode-scan\": 983154,\n \"barley\": 983155,\n \"barley-off\": 985949,\n \"barn\": 985950,\n \"barrel\": 983156,\n \"baseball\": 985170,\n \"baseball-bat\": 985171,\n \"baseball-diamond\": 988652,\n \"baseball-diamond-outline\": 988653,\n \"bash\": 987523,\n \"basket\": 983158,\n \"basket-check\": 989413,\n \"basket-check-outline\": 989414,\n \"basket-fill\": 983159,\n \"basket-minus\": 988451,\n \"basket-minus-outline\": 988452,\n \"basket-off\": 988453,\n \"basket-off-outline\": 988454,\n \"basket-outline\": 987521,\n \"basket-plus\": 988455,\n \"basket-plus-outline\": 988456,\n \"basket-remove\": 988457,\n \"basket-remove-outline\": 988458,\n \"basket-unfill\": 983160,\n \"basketball\": 985094,\n \"basketball-hoop\": 986171,\n \"basketball-hoop-outline\": 986172,\n \"bat\": 985951,\n \"bathtub\": 989208,\n \"bathtub-outline\": 989209,\n \"battery\": 983161,\n \"battery-10\": 983162,\n \"battery-10-bluetooth\": 985406,\n \"battery-20\": 983163,\n \"battery-20-bluetooth\": 985407,\n \"battery-30\": 983164,\n \"battery-30-bluetooth\": 985408,\n \"battery-40\": 983165,\n \"battery-40-bluetooth\": 985409,\n \"battery-50\": 983166,\n \"battery-50-bluetooth\": 985410,\n \"battery-60\": 983167,\n \"battery-60-bluetooth\": 985411,\n \"battery-70\": 983168,\n \"battery-70-bluetooth\": 985412,\n \"battery-80\": 983169,\n \"battery-80-bluetooth\": 985413,\n \"battery-90\": 983170,\n \"battery-90-bluetooth\": 985414,\n \"battery-alert\": 983171,\n \"battery-alert-bluetooth\": 985415,\n \"battery-alert-variant\": 987340,\n \"battery-alert-variant-outline\": 987341,\n \"battery-arrow-down\": 989150,\n \"battery-arrow-down-outline\": 989151,\n \"battery-arrow-up\": 989152,\n \"battery-arrow-up-outline\": 989153,\n \"battery-bluetooth\": 985416,\n \"battery-bluetooth-variant\": 985417,\n \"battery-charging\": 983172,\n \"battery-charging-10\": 985244,\n \"battery-charging-100\": 983173,\n \"battery-charging-20\": 983174,\n \"battery-charging-30\": 983175,\n \"battery-charging-40\": 983176,\n \"battery-charging-50\": 985245,\n \"battery-charging-60\": 983177,\n \"battery-charging-70\": 985246,\n \"battery-charging-80\": 983178,\n \"battery-charging-90\": 983179,\n \"battery-charging-high\": 987814,\n \"battery-charging-low\": 987812,\n \"battery-charging-medium\": 987813,\n \"battery-charging-outline\": 985247,\n \"battery-charging-wireless\": 985095,\n \"battery-charging-wireless-10\": 985096,\n \"battery-charging-wireless-20\": 985097,\n \"battery-charging-wireless-30\": 985098,\n \"battery-charging-wireless-40\": 985099,\n \"battery-charging-wireless-50\": 985100,\n \"battery-charging-wireless-60\": 985101,\n \"battery-charging-wireless-70\": 985102,\n \"battery-charging-wireless-80\": 985103,\n \"battery-charging-wireless-90\": 985104,\n \"battery-charging-wireless-alert\": 985105,\n \"battery-charging-wireless-outline\": 985106,\n \"battery-check\": 989154,\n \"battery-check-outline\": 989155,\n \"battery-heart\": 987663,\n \"battery-heart-outline\": 987664,\n \"battery-heart-variant\": 987665,\n \"battery-high\": 987811,\n \"battery-lock\": 989084,\n \"battery-lock-open\": 989085,\n \"battery-low\": 987809,\n \"battery-medium\": 987810,\n \"battery-minus\": 989156,\n \"battery-minus-outline\": 989157,\n \"battery-minus-variant\": 983180,\n \"battery-negative\": 983181,\n \"battery-off\": 987741,\n \"battery-off-outline\": 987742,\n \"battery-outline\": 983182,\n \"battery-plus\": 989158,\n \"battery-plus-outline\": 989159,\n \"battery-plus-variant\": 983183,\n \"battery-positive\": 983184,\n \"battery-remove\": 989160,\n \"battery-remove-outline\": 989161,\n \"battery-sync\": 989236,\n \"battery-sync-outline\": 989237,\n \"battery-unknown\": 983185,\n \"battery-unknown-bluetooth\": 985418,\n \"beach\": 983186,\n \"beaker\": 986346,\n \"beaker-alert\": 987689,\n \"beaker-alert-outline\": 987690,\n \"beaker-check\": 987691,\n \"beaker-check-outline\": 987692,\n \"beaker-minus\": 987693,\n \"beaker-minus-outline\": 987694,\n \"beaker-outline\": 984720,\n \"beaker-plus\": 987695,\n \"beaker-plus-outline\": 987696,\n \"beaker-question\": 987697,\n \"beaker-question-outline\": 987698,\n \"beaker-remove\": 987699,\n \"beaker-remove-outline\": 987700,\n \"bed\": 983779,\n \"bed-double\": 987092,\n \"bed-double-outline\": 987091,\n \"bed-empty\": 985248,\n \"bed-king\": 987090,\n \"bed-king-outline\": 987089,\n \"bed-outline\": 983193,\n \"bed-queen\": 987088,\n \"bed-queen-outline\": 987099,\n \"bed-single\": 987245,\n \"bed-single-outline\": 987246,\n \"bee\": 987041,\n \"bee-flower\": 987042,\n \"beehive-off-outline\": 988141,\n \"beehive-outline\": 987342,\n \"beekeeper\": 988386,\n \"beer\": 983192,\n \"beer-outline\": 987916,\n \"bell\": 983194,\n \"bell-alert\": 986457,\n \"bell-alert-outline\": 986753,\n \"bell-badge\": 987499,\n \"bell-badge-outline\": 983416,\n \"bell-cancel\": 988135,\n \"bell-cancel-outline\": 988136,\n \"bell-check\": 987621,\n \"bell-check-outline\": 987622,\n \"bell-circle\": 986458,\n \"bell-circle-outline\": 986459,\n \"bell-minus\": 988137,\n \"bell-minus-outline\": 988138,\n \"bell-off\": 983195,\n \"bell-off-outline\": 985745,\n \"bell-outline\": 983196,\n \"bell-plus\": 983197,\n \"bell-plus-outline\": 985746,\n \"bell-remove\": 988139,\n \"bell-remove-outline\": 988140,\n \"bell-ring\": 983198,\n \"bell-ring-outline\": 983199,\n \"bell-sleep\": 983200,\n \"bell-sleep-outline\": 985747,\n \"beta\": 983201,\n \"betamax\": 985547,\n \"biathlon\": 986644,\n \"bicycle\": 987292,\n \"bicycle-basket\": 987701,\n \"bicycle-cargo\": 989340,\n \"bicycle-electric\": 988596,\n \"bicycle-penny-farthing\": 988649,\n \"bike\": 983203,\n \"bike-fast\": 987423,\n \"billboard\": 987152,\n \"billiards\": 985953,\n \"billiards-rack\": 985954,\n \"binoculars\": 983205,\n \"bio\": 983206,\n \"biohazard\": 983207,\n \"bird\": 988614,\n \"bitbucket\": 983208,\n \"bitcoin\": 985107,\n \"black-mesa\": 983209,\n \"blender\": 986347,\n \"blender-outline\": 989210,\n \"blender-software\": 983211,\n \"blinds\": 983212,\n \"blinds-open\": 987153,\n \"block-helper\": 983213,\n \"blood-bag\": 986348,\n \"bluetooth\": 983215,\n \"bluetooth-audio\": 983216,\n \"bluetooth-connect\": 983217,\n \"bluetooth-off\": 983218,\n \"bluetooth-settings\": 983219,\n \"bluetooth-transfer\": 983220,\n \"blur\": 983221,\n \"blur-linear\": 983222,\n \"blur-off\": 983223,\n \"blur-radial\": 983224,\n \"bolt\": 986547,\n \"bomb\": 984721,\n \"bomb-off\": 984773,\n \"bone\": 983225,\n \"book\": 983226,\n \"book-account\": 988077,\n \"book-account-outline\": 988078,\n \"book-alert\": 988796,\n \"book-alert-outline\": 988797,\n \"book-alphabet\": 984605,\n \"book-arrow-down\": 988798,\n \"book-arrow-down-outline\": 988799,\n \"book-arrow-left\": 988800,\n \"book-arrow-left-outline\": 988801,\n \"book-arrow-right\": 988802,\n \"book-arrow-right-outline\": 988803,\n \"book-arrow-up\": 988804,\n \"book-arrow-up-outline\": 988805,\n \"book-cancel\": 988806,\n \"book-cancel-outline\": 988807,\n \"book-check\": 988403,\n \"book-check-outline\": 988404,\n \"book-clock\": 988808,\n \"book-clock-outline\": 988809,\n \"book-cog\": 988810,\n \"book-cog-outline\": 988811,\n \"book-cross\": 983202,\n \"book-edit\": 988812,\n \"book-edit-outline\": 988813,\n \"book-education\": 988873,\n \"book-education-outline\": 988874,\n \"book-information-variant\": 987247,\n \"book-lock\": 984986,\n \"book-lock-open\": 984987,\n \"book-lock-open-outline\": 988814,\n \"book-lock-outline\": 988815,\n \"book-marker\": 988816,\n \"book-marker-outline\": 988817,\n \"book-minus\": 984537,\n \"book-minus-multiple\": 985748,\n \"book-minus-multiple-outline\": 985355,\n \"book-minus-outline\": 988818,\n \"book-multiple\": 983227,\n \"book-multiple-outline\": 984118,\n \"book-music\": 983143,\n \"book-music-outline\": 988819,\n \"book-off\": 988820,\n \"book-off-outline\": 988821,\n \"book-open\": 983229,\n \"book-open-blank-variant\": 983230,\n \"book-open-outline\": 985955,\n \"book-open-page-variant\": 984538,\n \"book-open-page-variant-outline\": 988630,\n \"book-open-variant\": 988407,\n \"book-outline\": 985956,\n \"book-play\": 986754,\n \"book-play-outline\": 986755,\n \"book-plus\": 984539,\n \"book-plus-multiple\": 985749,\n \"book-plus-multiple-outline\": 985822,\n \"book-plus-outline\": 988822,\n \"book-refresh\": 988823,\n \"book-refresh-outline\": 988824,\n \"book-remove\": 985751,\n \"book-remove-multiple\": 985750,\n \"book-remove-multiple-outline\": 984266,\n \"book-remove-outline\": 988825,\n \"book-search\": 986756,\n \"book-search-outline\": 986757,\n \"book-settings\": 988826,\n \"book-settings-outline\": 988827,\n \"book-sync\": 988828,\n \"book-sync-outline\": 988872,\n \"book-variant\": 983231,\n \"book-variant-multiple\": 983228,\n \"bookmark\": 983232,\n \"bookmark-box-multiple\": 989548,\n \"bookmark-box-multiple-outline\": 989549,\n \"bookmark-check\": 983233,\n \"bookmark-check-outline\": 988027,\n \"bookmark-minus\": 985548,\n \"bookmark-minus-outline\": 985549,\n \"bookmark-multiple\": 986645,\n \"bookmark-multiple-outline\": 986646,\n \"bookmark-music\": 983234,\n \"bookmark-music-outline\": 988025,\n \"bookmark-off\": 985550,\n \"bookmark-off-outline\": 985551,\n \"bookmark-outline\": 983235,\n \"bookmark-plus\": 983237,\n \"bookmark-plus-outline\": 983236,\n \"bookmark-remove\": 983238,\n \"bookmark-remove-outline\": 988026,\n \"bookshelf\": 987743,\n \"boom-gate\": 986758,\n \"boom-gate-alert\": 986759,\n \"boom-gate-alert-outline\": 986760,\n \"boom-gate-arrow-down\": 986761,\n \"boom-gate-arrow-down-outline\": 986762,\n \"boom-gate-arrow-up\": 986764,\n \"boom-gate-arrow-up-outline\": 986765,\n \"boom-gate-outline\": 986763,\n \"boom-gate-up\": 989177,\n \"boom-gate-up-outline\": 989178,\n \"boombox\": 984540,\n \"boomerang\": 987343,\n \"bootstrap\": 984774,\n \"border-all\": 983239,\n \"border-all-variant\": 985249,\n \"border-bottom\": 983240,\n \"border-bottom-variant\": 985250,\n \"border-color\": 983241,\n \"border-horizontal\": 983242,\n \"border-inside\": 983243,\n \"border-left\": 983244,\n \"border-left-variant\": 985251,\n \"border-none\": 983245,\n \"border-none-variant\": 985252,\n \"border-outside\": 983246,\n \"border-right\": 983247,\n \"border-right-variant\": 985253,\n \"border-style\": 983248,\n \"border-top\": 983249,\n \"border-top-variant\": 985254,\n \"border-vertical\": 983250,\n \"bottle-soda\": 987248,\n \"bottle-soda-classic\": 987249,\n \"bottle-soda-classic-outline\": 988003,\n \"bottle-soda-outline\": 987250,\n \"bottle-tonic\": 987438,\n \"bottle-tonic-outline\": 987439,\n \"bottle-tonic-plus\": 987440,\n \"bottle-tonic-plus-outline\": 987441,\n \"bottle-tonic-skull\": 987442,\n \"bottle-tonic-skull-outline\": 987443,\n \"bottle-wine\": 985172,\n \"bottle-wine-outline\": 987920,\n \"bow-arrow\": 989249,\n \"bow-tie\": 984696,\n \"bowl\": 983694,\n \"bowl-mix\": 984599,\n \"bowl-mix-outline\": 983780,\n \"bowl-outline\": 983721,\n \"bowling\": 983251,\n \"box\": 983252,\n \"box-cutter\": 983253,\n \"box-cutter-off\": 985930,\n \"box-shadow\": 984631,\n \"boxing-glove\": 985957,\n \"braille\": 985552,\n \"brain\": 985553,\n \"bread-slice\": 986350,\n \"bread-slice-outline\": 986351,\n \"bridge\": 984600,\n \"briefcase\": 983254,\n \"briefcase-account\": 986352,\n \"briefcase-account-outline\": 986353,\n \"briefcase-check\": 983255,\n \"briefcase-check-outline\": 987934,\n \"briefcase-clock\": 987344,\n \"briefcase-clock-outline\": 987345,\n \"briefcase-download\": 983256,\n \"briefcase-download-outline\": 986173,\n \"briefcase-edit\": 985752,\n \"briefcase-edit-outline\": 986174,\n \"briefcase-eye\": 989145,\n \"briefcase-eye-outline\": 989146,\n \"briefcase-minus\": 985642,\n \"briefcase-minus-outline\": 986175,\n \"briefcase-off\": 988760,\n \"briefcase-off-outline\": 988761,\n \"briefcase-outline\": 985108,\n \"briefcase-plus\": 985643,\n \"briefcase-plus-outline\": 986176,\n \"briefcase-remove\": 985644,\n \"briefcase-remove-outline\": 986177,\n \"briefcase-search\": 985645,\n \"briefcase-search-outline\": 986178,\n \"briefcase-upload\": 983257,\n \"briefcase-upload-outline\": 986179,\n \"briefcase-variant\": 988308,\n \"briefcase-variant-off\": 988762,\n \"briefcase-variant-off-outline\": 988763,\n \"briefcase-variant-outline\": 988309,\n \"brightness-1\": 983258,\n \"brightness-2\": 983259,\n \"brightness-3\": 983260,\n \"brightness-4\": 983261,\n \"brightness-5\": 983262,\n \"brightness-6\": 983263,\n \"brightness-7\": 983264,\n \"brightness-auto\": 983265,\n \"brightness-percent\": 986354,\n \"broadcast\": 988960,\n \"broadcast-off\": 988961,\n \"broom\": 983266,\n \"brush\": 983267,\n \"brush-off\": 989041,\n \"brush-variant\": 989203,\n \"bucket\": 988181,\n \"bucket-outline\": 988182,\n \"buffet\": 984440,\n \"bug\": 983268,\n \"bug-check\": 985646,\n \"bug-check-outline\": 985647,\n \"bug-outline\": 985648,\n \"bugle\": 986548,\n \"bulldozer\": 985890,\n \"bullet\": 986355,\n \"bulletin-board\": 983269,\n \"bullhorn\": 983270,\n \"bullhorn-outline\": 985891,\n \"bullhorn-variant\": 989550,\n \"bullhorn-variant-outline\": 989551,\n \"bullseye\": 984541,\n \"bullseye-arrow\": 985289,\n \"bulma\": 987879,\n \"bunk-bed\": 987906,\n \"bunk-bed-outline\": 983191,\n \"bus\": 983271,\n \"bus-alert\": 985753,\n \"bus-articulated-end\": 984988,\n \"bus-articulated-front\": 984989,\n \"bus-clock\": 985290,\n \"bus-double-decker\": 984990,\n \"bus-electric\": 989469,\n \"bus-marker\": 987666,\n \"bus-multiple\": 986943,\n \"bus-school\": 984991,\n \"bus-side\": 984992,\n \"bus-stop\": 987154,\n \"bus-stop-covered\": 987155,\n \"bus-stop-uncovered\": 987156,\n \"butterfly\": 988553,\n \"butterfly-outline\": 988554,\n \"cabin-a-frame\": 989324,\n \"cable-data\": 988052,\n \"cached\": 983272,\n \"cactus\": 986549,\n \"cake\": 983273,\n \"cake-layered\": 983274,\n \"cake-variant\": 983275,\n \"cake-variant-outline\": 989168,\n \"calculator\": 983276,\n \"calculator-variant\": 985754,\n \"calculator-variant-outline\": 988582,\n \"calendar\": 983277,\n \"calendar-account\": 986839,\n \"calendar-account-outline\": 986840,\n \"calendar-alert\": 985649,\n \"calendar-arrow-left\": 987444,\n \"calendar-arrow-right\": 987445,\n \"calendar-blank\": 983278,\n \"calendar-blank-multiple\": 987251,\n \"calendar-blank-outline\": 985958,\n \"calendar-check\": 983279,\n \"calendar-check-outline\": 986180,\n \"calendar-clock\": 983280,\n \"calendar-clock-outline\": 988897,\n \"calendar-collapse-horizontal\": 989341,\n \"calendar-cursor\": 988539,\n \"calendar-edit\": 985255,\n \"calendar-end\": 988780,\n \"calendar-expand-horizontal\": 989342,\n \"calendar-export\": 985892,\n \"calendar-heart\": 985554,\n \"calendar-import\": 985893,\n \"calendar-lock\": 988737,\n \"calendar-lock-outline\": 988738,\n \"calendar-minus\": 986460,\n \"calendar-month\": 986647,\n \"calendar-month-outline\": 986648,\n \"calendar-multiple\": 983281,\n \"calendar-multiple-check\": 983282,\n \"calendar-multiselect\": 985650,\n \"calendar-outline\": 985959,\n \"calendar-plus\": 983283,\n \"calendar-question\": 984722,\n \"calendar-range\": 984697,\n \"calendar-range-outline\": 985960,\n \"calendar-refresh\": 983521,\n \"calendar-refresh-outline\": 983555,\n \"calendar-remove\": 983284,\n \"calendar-remove-outline\": 986181,\n \"calendar-search\": 985420,\n \"calendar-star\": 985555,\n \"calendar-start\": 988781,\n \"calendar-sync\": 986766,\n \"calendar-sync-outline\": 986767,\n \"calendar-text\": 983285,\n \"calendar-text-outline\": 986182,\n \"calendar-today\": 983286,\n \"calendar-week\": 985651,\n \"calendar-week-begin\": 985652,\n \"calendar-weekend\": 986841,\n \"calendar-weekend-outline\": 986842,\n \"call-made\": 983287,\n \"call-merge\": 983288,\n \"call-missed\": 983289,\n \"call-received\": 983290,\n \"call-split\": 983291,\n \"camcorder\": 983292,\n \"camcorder-off\": 983295,\n \"camera\": 983296,\n \"camera-account\": 985291,\n \"camera-burst\": 984723,\n \"camera-control\": 985961,\n \"camera-document\": 989297,\n \"camera-document-off\": 989298,\n \"camera-enhance\": 983297,\n \"camera-enhance-outline\": 985962,\n \"camera-flip\": 988633,\n \"camera-flip-outline\": 988634,\n \"camera-front\": 983298,\n \"camera-front-variant\": 983299,\n \"camera-gopro\": 984993,\n \"camera-image\": 985292,\n \"camera-iris\": 983300,\n \"camera-marker\": 989607,\n \"camera-marker-outline\": 989608,\n \"camera-metering-center\": 984994,\n \"camera-metering-matrix\": 984995,\n \"camera-metering-partial\": 984996,\n \"camera-metering-spot\": 984997,\n \"camera-off\": 984543,\n \"camera-off-outline\": 989631,\n \"camera-outline\": 986461,\n \"camera-party-mode\": 983301,\n \"camera-plus\": 986843,\n \"camera-plus-outline\": 986844,\n \"camera-rear\": 983302,\n \"camera-rear-variant\": 983303,\n \"camera-retake\": 986649,\n \"camera-retake-outline\": 986650,\n \"camera-switch\": 983304,\n \"camera-switch-outline\": 985162,\n \"camera-timer\": 983305,\n \"camera-wireless\": 986550,\n \"camera-wireless-outline\": 986551,\n \"campfire\": 986845,\n \"cancel\": 984890,\n \"candelabra\": 989138,\n \"candelabra-fire\": 989139,\n \"candle\": 984546,\n \"candy\": 989552,\n \"candy-off\": 989553,\n \"candy-off-outline\": 989554,\n \"candy-outline\": 989555,\n \"candycane\": 983306,\n \"cannabis\": 984998,\n \"cannabis-off\": 988782,\n \"caps-lock\": 985755,\n \"car\": 983307,\n \"car-2-plus\": 987157,\n \"car-3-plus\": 987158,\n \"car-arrow-left\": 988082,\n \"car-arrow-right\": 988083,\n \"car-back\": 986651,\n \"car-battery\": 983308,\n \"car-brake-abs\": 986183,\n \"car-brake-alert\": 986184,\n \"car-brake-fluid-level\": 989449,\n \"car-brake-hold\": 986462,\n \"car-brake-low-pressure\": 989450,\n \"car-brake-parking\": 986463,\n \"car-brake-retarder\": 987159,\n \"car-brake-temperature\": 989451,\n \"car-brake-worn-linings\": 989452,\n \"car-child-seat\": 987043,\n \"car-clock\": 989556,\n \"car-clutch\": 987160,\n \"car-cog\": 988108,\n \"car-connected\": 983309,\n \"car-convertible\": 984999,\n \"car-coolant-level\": 987161,\n \"car-cruise-control\": 986464,\n \"car-defrost-front\": 986465,\n \"car-defrost-rear\": 986466,\n \"car-door\": 985963,\n \"car-door-lock\": 987293,\n \"car-electric\": 985964,\n \"car-electric-outline\": 988597,\n \"car-emergency\": 988687,\n \"car-esp\": 986185,\n \"car-estate\": 985000,\n \"car-hatchback\": 985001,\n \"car-info\": 987582,\n \"car-key\": 985965,\n \"car-lifted-pickup\": 988461,\n \"car-light-alert\": 989453,\n \"car-light-dimmed\": 986186,\n \"car-light-fog\": 986187,\n \"car-light-high\": 986188,\n \"car-limousine\": 985293,\n \"car-multiple\": 985966,\n \"car-off\": 986652,\n \"car-outline\": 988397,\n \"car-parking-lights\": 986467,\n \"car-pickup\": 985002,\n \"car-seat\": 987044,\n \"car-seat-cooler\": 987045,\n \"car-seat-heater\": 987046,\n \"car-select\": 989305,\n \"car-settings\": 988109,\n \"car-shift-pattern\": 986944,\n \"car-side\": 985003,\n \"car-speed-limiter\": 989454,\n \"car-sports\": 985004,\n \"car-tire-alert\": 986189,\n \"car-traction-control\": 986468,\n \"car-turbocharger\": 987162,\n \"car-wash\": 983310,\n \"car-windshield\": 987163,\n \"car-windshield-outline\": 987164,\n \"car-wireless\": 989304,\n \"car-wrench\": 989204,\n \"carabiner\": 988352,\n \"caravan\": 985005,\n \"card\": 985967,\n \"card-account-details\": 984530,\n \"card-account-details-outline\": 986539,\n \"card-account-details-star\": 983715,\n \"card-account-details-star-outline\": 984795,\n \"card-account-mail\": 983438,\n \"card-account-mail-outline\": 986776,\n \"card-account-phone\": 986777,\n \"card-account-phone-outline\": 986778,\n \"card-bulleted\": 985968,\n \"card-bulleted-off\": 985969,\n \"card-bulleted-off-outline\": 985970,\n \"card-bulleted-outline\": 985971,\n \"card-bulleted-settings\": 985972,\n \"card-bulleted-settings-outline\": 985973,\n \"card-minus\": 988672,\n \"card-minus-outline\": 988673,\n \"card-multiple\": 989169,\n \"card-multiple-outline\": 989170,\n \"card-off\": 988674,\n \"card-off-outline\": 988675,\n \"card-outline\": 985974,\n \"card-plus\": 987647,\n \"card-plus-outline\": 987648,\n \"card-remove\": 988676,\n \"card-remove-outline\": 988677,\n \"card-search\": 987252,\n \"card-search-outline\": 987253,\n \"card-text\": 985975,\n \"card-text-outline\": 985976,\n \"cards\": 984632,\n \"cards-club\": 985294,\n \"cards-club-outline\": 989343,\n \"cards-diamond\": 985295,\n \"cards-diamond-outline\": 987165,\n \"cards-heart\": 985296,\n \"cards-heart-outline\": 989344,\n \"cards-outline\": 984633,\n \"cards-playing\": 989345,\n \"cards-playing-club\": 989346,\n \"cards-playing-club-multiple\": 989347,\n \"cards-playing-club-multiple-outline\": 989348,\n \"cards-playing-club-outline\": 989349,\n \"cards-playing-diamond\": 989350,\n \"cards-playing-diamond-multiple\": 989351,\n \"cards-playing-diamond-multiple-outline\": 989352,\n \"cards-playing-diamond-outline\": 989353,\n \"cards-playing-heart\": 989354,\n \"cards-playing-heart-multiple\": 989355,\n \"cards-playing-heart-multiple-outline\": 989356,\n \"cards-playing-heart-outline\": 989357,\n \"cards-playing-outline\": 984634,\n \"cards-playing-spade\": 989358,\n \"cards-playing-spade-multiple\": 989359,\n \"cards-playing-spade-multiple-outline\": 989360,\n \"cards-playing-spade-outline\": 989361,\n \"cards-spade\": 985297,\n \"cards-spade-outline\": 989362,\n \"cards-variant\": 984775,\n \"carrot\": 983311,\n \"cart\": 983312,\n \"cart-arrow-down\": 986470,\n \"cart-arrow-right\": 986190,\n \"cart-arrow-up\": 986471,\n \"cart-check\": 988650,\n \"cart-heart\": 989408,\n \"cart-minus\": 986472,\n \"cart-off\": 984683,\n \"cart-outline\": 983313,\n \"cart-plus\": 983314,\n \"cart-remove\": 986473,\n \"cart-variant\": 988651,\n \"case-sensitive-alt\": 983315,\n \"cash\": 983316,\n \"cash-100\": 983317,\n \"cash-check\": 988398,\n \"cash-fast\": 989276,\n \"cash-lock\": 988394,\n \"cash-lock-open\": 988395,\n \"cash-marker\": 986552,\n \"cash-minus\": 987744,\n \"cash-multiple\": 983318,\n \"cash-plus\": 987745,\n \"cash-refund\": 985756,\n \"cash-register\": 986356,\n \"cash-remove\": 987746,\n \"cassette\": 985556,\n \"cast\": 983320,\n \"cast-audio\": 987166,\n \"cast-audio-variant\": 989001,\n \"cast-connected\": 983321,\n \"cast-education\": 986653,\n \"cast-off\": 984970,\n \"cast-variant\": 983071,\n \"castle\": 983322,\n \"cat\": 983323,\n \"cctv\": 985006,\n \"cctv-off\": 989279,\n \"ceiling-fan\": 989079,\n \"ceiling-fan-light\": 989080,\n \"ceiling-light\": 984937,\n \"ceiling-light-multiple\": 989405,\n \"ceiling-light-multiple-outline\": 989406,\n \"ceiling-light-outline\": 989127,\n \"cellphone\": 983324,\n \"cellphone-arrow-down\": 985557,\n \"cellphone-basic\": 983326,\n \"cellphone-charging\": 988055,\n \"cellphone-check\": 989181,\n \"cellphone-cog\": 985425,\n \"cellphone-dock\": 983327,\n \"cellphone-information\": 986945,\n \"cellphone-key\": 985422,\n \"cellphone-link\": 983329,\n \"cellphone-link-off\": 983330,\n \"cellphone-lock\": 985423,\n \"cellphone-marker\": 989242,\n \"cellphone-message\": 985299,\n \"cellphone-message-off\": 987346,\n \"cellphone-nfc\": 986768,\n \"cellphone-nfc-off\": 987864,\n \"cellphone-off\": 985424,\n \"cellphone-play\": 987167,\n \"cellphone-remove\": 985421,\n \"cellphone-screenshot\": 985653,\n \"cellphone-settings\": 983331,\n \"cellphone-sound\": 985426,\n \"cellphone-text\": 985298,\n \"cellphone-wireless\": 985109,\n \"centos\": 987418,\n \"certificate\": 983332,\n \"certificate-outline\": 987528,\n \"chair-rolling\": 986952,\n \"chair-school\": 983333,\n \"chandelier\": 989075,\n \"charity\": 986191,\n \"chart-arc\": 983334,\n \"chart-areaspline\": 983335,\n \"chart-areaspline-variant\": 986769,\n \"chart-bar\": 983336,\n \"chart-bar-stacked\": 984938,\n \"chart-bell-curve\": 986192,\n \"chart-bell-curve-cumulative\": 987047,\n \"chart-box\": 988493,\n \"chart-box-outline\": 988494,\n \"chart-box-plus-outline\": 988495,\n \"chart-bubble\": 984547,\n \"chart-donut\": 985007,\n \"chart-donut-variant\": 985008,\n \"chart-gantt\": 984684,\n \"chart-histogram\": 983337,\n \"chart-line\": 983338,\n \"chart-line-stacked\": 984939,\n \"chart-line-variant\": 985009,\n \"chart-multiline\": 985300,\n \"chart-multiple\": 987667,\n \"chart-pie\": 983339,\n \"chart-ppf\": 988032,\n \"chart-sankey\": 987615,\n \"chart-sankey-variant\": 987616,\n \"chart-scatter-plot\": 986770,\n \"chart-scatter-plot-hexbin\": 984685,\n \"chart-timeline\": 984686,\n \"chart-timeline-variant\": 986771,\n \"chart-timeline-variant-shimmer\": 988598,\n \"chart-tree\": 986772,\n \"chart-waterfall\": 989464,\n \"chat\": 985977,\n \"chat-alert\": 985978,\n \"chat-alert-outline\": 987849,\n \"chat-minus\": 988176,\n \"chat-minus-outline\": 988179,\n \"chat-outline\": 986846,\n \"chat-plus\": 988175,\n \"chat-plus-outline\": 988178,\n \"chat-processing\": 985979,\n \"chat-processing-outline\": 987850,\n \"chat-question\": 988984,\n \"chat-question-outline\": 988985,\n \"chat-remove\": 988177,\n \"chat-remove-outline\": 988180,\n \"chat-sleep\": 987857,\n \"chat-sleep-outline\": 987858,\n \"check\": 983340,\n \"check-all\": 983341,\n \"check-bold\": 986654,\n \"check-circle\": 984544,\n \"check-circle-outline\": 984545,\n \"check-decagram\": 984977,\n \"check-decagram-outline\": 988992,\n \"check-network\": 986195,\n \"check-network-outline\": 986196,\n \"check-outline\": 985173,\n \"check-underline\": 986655,\n \"check-underline-circle\": 986656,\n \"check-underline-circle-outline\": 986657,\n \"checkbook\": 985757,\n \"checkbox-blank\": 983342,\n \"checkbox-blank-badge\": 987510,\n \"checkbox-blank-badge-outline\": 983319,\n \"checkbox-blank-circle\": 983343,\n \"checkbox-blank-circle-outline\": 983344,\n \"checkbox-blank-off\": 987884,\n \"checkbox-blank-off-outline\": 987885,\n \"checkbox-blank-outline\": 983345,\n \"checkbox-intermediate\": 985174,\n \"checkbox-marked\": 983346,\n \"checkbox-marked-circle\": 983347,\n \"checkbox-marked-circle-outline\": 983348,\n \"checkbox-marked-circle-plus-outline\": 989479,\n \"checkbox-marked-outline\": 983349,\n \"checkbox-multiple-blank\": 983350,\n \"checkbox-multiple-blank-circle\": 984635,\n \"checkbox-multiple-blank-circle-outline\": 984636,\n \"checkbox-multiple-blank-outline\": 983351,\n \"checkbox-multiple-marked\": 983352,\n \"checkbox-multiple-marked-circle\": 984637,\n \"checkbox-multiple-marked-circle-outline\": 984638,\n \"checkbox-multiple-marked-outline\": 983353,\n \"checkbox-multiple-outline\": 986193,\n \"checkbox-outline\": 986194,\n \"checkerboard\": 983354,\n \"checkerboard-minus\": 987650,\n \"checkerboard-plus\": 987649,\n \"checkerboard-remove\": 987651,\n \"cheese\": 987833,\n \"cheese-off\": 988142,\n \"chef-hat\": 985980,\n \"chemical-weapon\": 983355,\n \"chess-bishop\": 985180,\n \"chess-king\": 985175,\n \"chess-knight\": 985176,\n \"chess-pawn\": 985177,\n \"chess-queen\": 985178,\n \"chess-rook\": 985179,\n \"chevron-double-down\": 983356,\n \"chevron-double-left\": 983357,\n \"chevron-double-right\": 983358,\n \"chevron-double-up\": 983359,\n \"chevron-down\": 983360,\n \"chevron-down-box\": 985558,\n \"chevron-down-box-outline\": 985559,\n \"chevron-down-circle\": 985894,\n \"chevron-down-circle-outline\": 985895,\n \"chevron-left\": 983361,\n \"chevron-left-box\": 985560,\n \"chevron-left-box-outline\": 985561,\n \"chevron-left-circle\": 985896,\n \"chevron-left-circle-outline\": 985897,\n \"chevron-right\": 983362,\n \"chevron-right-box\": 985562,\n \"chevron-right-box-outline\": 985563,\n \"chevron-right-circle\": 985898,\n \"chevron-right-circle-outline\": 985899,\n \"chevron-triple-down\": 986553,\n \"chevron-triple-left\": 986554,\n \"chevron-triple-right\": 986555,\n \"chevron-triple-up\": 986556,\n \"chevron-up\": 983363,\n \"chevron-up-box\": 985564,\n \"chevron-up-box-outline\": 985565,\n \"chevron-up-circle\": 985900,\n \"chevron-up-circle-outline\": 985901,\n \"chili-alert\": 989162,\n \"chili-alert-outline\": 989163,\n \"chili-hot\": 985010,\n \"chili-hot-outline\": 989164,\n \"chili-medium\": 985011,\n \"chili-medium-outline\": 989165,\n \"chili-mild\": 985012,\n \"chili-mild-outline\": 989166,\n \"chili-off\": 988263,\n \"chili-off-outline\": 989167,\n \"chip\": 984602,\n \"church\": 983364,\n \"cigar\": 987529,\n \"cigar-off\": 988187,\n \"circle\": 984933,\n \"circle-box\": 988636,\n \"circle-box-outline\": 988637,\n \"circle-double\": 986773,\n \"circle-edit-outline\": 985301,\n \"circle-expand\": 986774,\n \"circle-half\": 988053,\n \"circle-half-full\": 988054,\n \"circle-medium\": 985566,\n \"circle-multiple\": 985912,\n \"circle-multiple-outline\": 984725,\n \"circle-off-outline\": 987347,\n \"circle-opacity\": 989267,\n \"circle-outline\": 984934,\n \"circle-slice-1\": 985758,\n \"circle-slice-2\": 985759,\n \"circle-slice-3\": 985760,\n \"circle-slice-4\": 985761,\n \"circle-slice-5\": 985762,\n \"circle-slice-6\": 985763,\n \"circle-slice-7\": 985764,\n \"circle-slice-8\": 985765,\n \"circle-small\": 985567,\n \"circular-saw\": 986658,\n \"city\": 983366,\n \"city-variant\": 985654,\n \"city-variant-outline\": 985655,\n \"clipboard\": 983367,\n \"clipboard-account\": 983368,\n \"clipboard-account-outline\": 986197,\n \"clipboard-alert\": 983369,\n \"clipboard-alert-outline\": 986359,\n \"clipboard-arrow-down\": 983370,\n \"clipboard-arrow-down-outline\": 986198,\n \"clipboard-arrow-left\": 983371,\n \"clipboard-arrow-left-outline\": 986360,\n \"clipboard-arrow-right\": 986361,\n \"clipboard-arrow-right-outline\": 986362,\n \"clipboard-arrow-up\": 986199,\n \"clipboard-arrow-up-outline\": 986200,\n \"clipboard-check\": 983374,\n \"clipboard-check-multiple\": 987747,\n \"clipboard-check-multiple-outline\": 987748,\n \"clipboard-check-outline\": 985256,\n \"clipboard-clock\": 988898,\n \"clipboard-clock-outline\": 988899,\n \"clipboard-edit\": 988389,\n \"clipboard-edit-outline\": 988390,\n \"clipboard-file\": 987749,\n \"clipboard-file-outline\": 987750,\n \"clipboard-flow\": 984776,\n \"clipboard-flow-outline\": 987415,\n \"clipboard-list\": 987348,\n \"clipboard-list-outline\": 987349,\n \"clipboard-minus\": 988696,\n \"clipboard-minus-outline\": 988697,\n \"clipboard-multiple\": 987751,\n \"clipboard-multiple-outline\": 987752,\n \"clipboard-off\": 988698,\n \"clipboard-off-outline\": 988699,\n \"clipboard-outline\": 983372,\n \"clipboard-play\": 986201,\n \"clipboard-play-multiple\": 987753,\n \"clipboard-play-multiple-outline\": 987754,\n \"clipboard-play-outline\": 986202,\n \"clipboard-plus\": 984913,\n \"clipboard-plus-outline\": 987935,\n \"clipboard-pulse\": 985181,\n \"clipboard-pulse-outline\": 985182,\n \"clipboard-remove\": 988700,\n \"clipboard-remove-outline\": 988701,\n \"clipboard-search\": 988702,\n \"clipboard-search-outline\": 988703,\n \"clipboard-text\": 983373,\n \"clipboard-text-clock\": 989433,\n \"clipboard-text-clock-outline\": 989434,\n \"clipboard-text-multiple\": 987755,\n \"clipboard-text-multiple-outline\": 987756,\n \"clipboard-text-off\": 988704,\n \"clipboard-text-off-outline\": 988705,\n \"clipboard-text-outline\": 985656,\n \"clipboard-text-play\": 986203,\n \"clipboard-text-play-outline\": 986204,\n \"clipboard-text-search\": 988706,\n \"clipboard-text-search-outline\": 988707,\n \"clippy\": 983375,\n \"clock\": 985428,\n \"clock-alert\": 985429,\n \"clock-alert-outline\": 984526,\n \"clock-check\": 987048,\n \"clock-check-outline\": 987049,\n \"clock-digital\": 986775,\n \"clock-edit\": 989626,\n \"clock-edit-outline\": 989627,\n \"clock-end\": 983377,\n \"clock-fast\": 983378,\n \"clock-in\": 983379,\n \"clock-minus\": 989283,\n \"clock-minus-outline\": 989284,\n \"clock-out\": 983380,\n \"clock-outline\": 983376,\n \"clock-plus\": 989281,\n \"clock-plus-outline\": 989282,\n \"clock-remove\": 989285,\n \"clock-remove-outline\": 989286,\n \"clock-start\": 983381,\n \"clock-time-eight\": 988230,\n \"clock-time-eight-outline\": 988242,\n \"clock-time-eleven\": 988233,\n \"clock-time-eleven-outline\": 988245,\n \"clock-time-five\": 988227,\n \"clock-time-five-outline\": 988239,\n \"clock-time-four\": 988226,\n \"clock-time-four-outline\": 988238,\n \"clock-time-nine\": 988231,\n \"clock-time-nine-outline\": 988243,\n \"clock-time-one\": 988223,\n \"clock-time-one-outline\": 988235,\n \"clock-time-seven\": 988229,\n \"clock-time-seven-outline\": 988241,\n \"clock-time-six\": 988228,\n \"clock-time-six-outline\": 988240,\n \"clock-time-ten\": 988232,\n \"clock-time-ten-outline\": 988244,\n \"clock-time-three\": 988225,\n \"clock-time-three-outline\": 988237,\n \"clock-time-twelve\": 988234,\n \"clock-time-twelve-outline\": 988246,\n \"clock-time-two\": 988224,\n \"clock-time-two-outline\": 988236,\n \"close\": 983382,\n \"close-box\": 983383,\n \"close-box-multiple\": 986205,\n \"close-box-multiple-outline\": 986206,\n \"close-box-outline\": 983384,\n \"close-circle\": 983385,\n \"close-circle-multiple\": 984618,\n \"close-circle-multiple-outline\": 985219,\n \"close-circle-outline\": 983386,\n \"close-network\": 983387,\n \"close-network-outline\": 986207,\n \"close-octagon\": 983388,\n \"close-octagon-outline\": 983389,\n \"close-outline\": 984777,\n \"close-thick\": 988056,\n \"closed-caption\": 983390,\n \"closed-caption-outline\": 986557,\n \"cloud\": 983391,\n \"cloud-alert\": 985568,\n \"cloud-braces\": 985013,\n \"cloud-check\": 983392,\n \"cloud-check-outline\": 987852,\n \"cloud-circle\": 983393,\n \"cloud-download\": 983394,\n \"cloud-download-outline\": 985981,\n \"cloud-lock\": 987633,\n \"cloud-lock-outline\": 987634,\n \"cloud-off-outline\": 983396,\n \"cloud-outline\": 983395,\n \"cloud-print\": 983397,\n \"cloud-print-outline\": 983398,\n \"cloud-question\": 985657,\n \"cloud-refresh\": 984362,\n \"cloud-search\": 985430,\n \"cloud-search-outline\": 985431,\n \"cloud-sync\": 984639,\n \"cloud-sync-outline\": 987862,\n \"cloud-tags\": 985014,\n \"cloud-upload\": 983399,\n \"cloud-upload-outline\": 985982,\n \"clover\": 985110,\n \"coach-lamp\": 987168,\n \"coat-rack\": 987294,\n \"code-array\": 983400,\n \"code-braces\": 983401,\n \"code-braces-box\": 987350,\n \"code-brackets\": 983402,\n \"code-equal\": 983403,\n \"code-greater-than\": 983404,\n \"code-greater-than-or-equal\": 983405,\n \"code-json\": 984614,\n \"code-less-than\": 983406,\n \"code-less-than-or-equal\": 983407,\n \"code-not-equal\": 983408,\n \"code-not-equal-variant\": 983409,\n \"code-parentheses\": 983410,\n \"code-parentheses-box\": 987351,\n \"code-string\": 983411,\n \"code-tags\": 983412,\n \"code-tags-check\": 984724,\n \"codepen\": 983413,\n \"coffee\": 983414,\n \"coffee-maker\": 987295,\n \"coffee-maker-check\": 989489,\n \"coffee-maker-check-outline\": 989490,\n \"coffee-maker-outline\": 989211,\n \"coffee-off\": 987050,\n \"coffee-off-outline\": 987051,\n \"coffee-outline\": 984778,\n \"coffee-to-go\": 983415,\n \"coffee-to-go-outline\": 987918,\n \"coffin\": 985983,\n \"cog\": 984211,\n \"cog-box\": 984212,\n \"cog-clockwise\": 987613,\n \"cog-counterclockwise\": 987614,\n \"cog-off\": 988110,\n \"cog-off-outline\": 988111,\n \"cog-outline\": 985275,\n \"cog-pause\": 989491,\n \"cog-pause-outline\": 989492,\n \"cog-play\": 989493,\n \"cog-play-outline\": 989494,\n \"cog-refresh\": 988254,\n \"cog-refresh-outline\": 988255,\n \"cog-stop\": 989495,\n \"cog-stop-outline\": 989496,\n \"cog-sync\": 988256,\n \"cog-sync-outline\": 988257,\n \"cog-transfer\": 987227,\n \"cog-transfer-outline\": 987228,\n \"cogs\": 985302,\n \"collage\": 984640,\n \"collapse-all\": 985766,\n \"collapse-all-outline\": 985767,\n \"color-helper\": 983417,\n \"comma\": 986659,\n \"comma-box\": 986667,\n \"comma-box-outline\": 986660,\n \"comma-circle\": 986661,\n \"comma-circle-outline\": 986662,\n \"comment\": 983418,\n \"comment-account\": 983419,\n \"comment-account-outline\": 983420,\n \"comment-alert\": 983421,\n \"comment-alert-outline\": 983422,\n \"comment-arrow-left\": 985569,\n \"comment-arrow-left-outline\": 985570,\n \"comment-arrow-right\": 985571,\n \"comment-arrow-right-outline\": 985572,\n \"comment-bookmark\": 988590,\n \"comment-bookmark-outline\": 988591,\n \"comment-check\": 983423,\n \"comment-check-outline\": 983424,\n \"comment-edit\": 987583,\n \"comment-edit-outline\": 987844,\n \"comment-eye\": 985658,\n \"comment-eye-outline\": 985659,\n \"comment-flash\": 988592,\n \"comment-flash-outline\": 988593,\n \"comment-minus\": 988639,\n \"comment-minus-outline\": 988640,\n \"comment-multiple\": 985183,\n \"comment-multiple-outline\": 983425,\n \"comment-off\": 988641,\n \"comment-off-outline\": 988642,\n \"comment-outline\": 983426,\n \"comment-plus\": 985573,\n \"comment-plus-outline\": 983427,\n \"comment-processing\": 983428,\n \"comment-processing-outline\": 983429,\n \"comment-question\": 985111,\n \"comment-question-outline\": 983430,\n \"comment-quote\": 987169,\n \"comment-quote-outline\": 987170,\n \"comment-remove\": 984542,\n \"comment-remove-outline\": 983431,\n \"comment-search\": 985660,\n \"comment-search-outline\": 985661,\n \"comment-text\": 983432,\n \"comment-text-multiple\": 985184,\n \"comment-text-multiple-outline\": 985185,\n \"comment-text-outline\": 983433,\n \"compare\": 983434,\n \"compare-horizontal\": 988306,\n \"compare-remove\": 989363,\n \"compare-vertical\": 988307,\n \"compass\": 983435,\n \"compass-off\": 985984,\n \"compass-off-outline\": 985985,\n \"compass-outline\": 983436,\n \"compass-rose\": 988034,\n \"cone\": 989516,\n \"cone-off\": 989517,\n \"connection\": 988694,\n \"console\": 983437,\n \"console-line\": 985015,\n \"console-network\": 985257,\n \"console-network-outline\": 986208,\n \"consolidate\": 987352,\n \"contactless-payment\": 986474,\n \"contactless-payment-circle\": 983841,\n \"contactless-payment-circle-outline\": 984072,\n \"contacts\": 984779,\n \"contacts-outline\": 984504,\n \"contain\": 985662,\n \"contain-end\": 985663,\n \"contain-start\": 985664,\n \"content-copy\": 983439,\n \"content-cut\": 983440,\n \"content-duplicate\": 983441,\n \"content-paste\": 983442,\n \"content-save\": 983443,\n \"content-save-alert\": 986946,\n \"content-save-alert-outline\": 986947,\n \"content-save-all\": 983444,\n \"content-save-all-outline\": 986948,\n \"content-save-check\": 989418,\n \"content-save-check-outline\": 989419,\n \"content-save-cog\": 988251,\n \"content-save-cog-outline\": 988252,\n \"content-save-edit\": 986363,\n \"content-save-edit-outline\": 986364,\n \"content-save-move\": 986663,\n \"content-save-move-outline\": 986664,\n \"content-save-off\": 988739,\n \"content-save-off-outline\": 988740,\n \"content-save-outline\": 985112,\n \"content-save-settings\": 984603,\n \"content-save-settings-outline\": 985902,\n \"contrast\": 983445,\n \"contrast-box\": 983446,\n \"contrast-circle\": 983447,\n \"controller-classic\": 985986,\n \"controller-classic-outline\": 985987,\n \"cookie\": 983448,\n \"cookie-alert\": 988880,\n \"cookie-alert-outline\": 988881,\n \"cookie-check\": 988882,\n \"cookie-check-outline\": 988883,\n \"cookie-clock\": 988900,\n \"cookie-clock-outline\": 988901,\n \"cookie-cog\": 988884,\n \"cookie-cog-outline\": 988885,\n \"cookie-edit\": 988902,\n \"cookie-edit-outline\": 988903,\n \"cookie-lock\": 988904,\n \"cookie-lock-outline\": 988905,\n \"cookie-minus\": 988890,\n \"cookie-minus-outline\": 988891,\n \"cookie-off\": 988906,\n \"cookie-off-outline\": 988907,\n \"cookie-outline\": 988894,\n \"cookie-plus\": 988886,\n \"cookie-plus-outline\": 988887,\n \"cookie-refresh\": 988908,\n \"cookie-refresh-outline\": 988909,\n \"cookie-remove\": 988888,\n \"cookie-remove-outline\": 988889,\n \"cookie-settings\": 988892,\n \"cookie-settings-outline\": 988893,\n \"coolant-temperature\": 984008,\n \"copyleft\": 989497,\n \"copyright\": 984550,\n \"cordova\": 985432,\n \"corn\": 985016,\n \"corn-off\": 988143,\n \"cosine-wave\": 988281,\n \"counter\": 983449,\n \"countertop\": 989212,\n \"countertop-outline\": 989213,\n \"cow\": 983450,\n \"cow-off\": 989436,\n \"cpu-32-bit\": 986847,\n \"cpu-64-bit\": 986848,\n \"cradle\": 989579,\n \"cradle-outline\": 989585,\n \"crane\": 985186,\n \"creation\": 984692,\n \"creative-commons\": 986475,\n \"credit-card\": 987119,\n \"credit-card-check\": 988112,\n \"credit-card-check-outline\": 988113,\n \"credit-card-chip\": 989455,\n \"credit-card-chip-outline\": 989456,\n \"credit-card-clock\": 986849,\n \"credit-card-clock-outline\": 986850,\n \"credit-card-edit\": 989143,\n \"credit-card-edit-outline\": 989144,\n \"credit-card-fast\": 989457,\n \"credit-card-fast-outline\": 989458,\n \"credit-card-lock\": 989415,\n \"credit-card-lock-outline\": 989416,\n \"credit-card-marker\": 984744,\n \"credit-card-marker-outline\": 986558,\n \"credit-card-minus\": 987052,\n \"credit-card-minus-outline\": 987053,\n \"credit-card-multiple\": 987120,\n \"credit-card-multiple-outline\": 983452,\n \"credit-card-off\": 987121,\n \"credit-card-off-outline\": 984548,\n \"credit-card-outline\": 983451,\n \"credit-card-plus\": 987122,\n \"credit-card-plus-outline\": 984694,\n \"credit-card-refresh\": 988741,\n \"credit-card-refresh-outline\": 988742,\n \"credit-card-refund\": 987123,\n \"credit-card-refund-outline\": 985768,\n \"credit-card-remove\": 987054,\n \"credit-card-remove-outline\": 987055,\n \"credit-card-scan\": 987124,\n \"credit-card-scan-outline\": 983453,\n \"credit-card-search\": 988743,\n \"credit-card-search-outline\": 988744,\n \"credit-card-settings\": 987125,\n \"credit-card-settings-outline\": 985303,\n \"credit-card-sync\": 988745,\n \"credit-card-sync-outline\": 988746,\n \"credit-card-wireless\": 985090,\n \"credit-card-wireless-off\": 984442,\n \"credit-card-wireless-off-outline\": 984443,\n \"credit-card-wireless-outline\": 986476,\n \"cricket\": 986477,\n \"crop\": 983454,\n \"crop-free\": 983455,\n \"crop-landscape\": 983456,\n \"crop-portrait\": 983457,\n \"crop-rotate\": 984726,\n \"crop-square\": 983458,\n \"cross\": 985427,\n \"cross-bolnisi\": 986349,\n \"cross-celtic\": 986357,\n \"cross-outline\": 986358,\n \"crosshairs\": 983459,\n \"crosshairs-gps\": 983460,\n \"crosshairs-off\": 986949,\n \"crosshairs-question\": 987446,\n \"crowd\": 989557,\n \"crown\": 983461,\n \"crown-circle\": 989148,\n \"crown-circle-outline\": 989149,\n \"crown-outline\": 987600,\n \"cryengine\": 985433,\n \"crystal-ball\": 985903,\n \"cube\": 983462,\n \"cube-off\": 988188,\n \"cube-off-outline\": 988189,\n \"cube-outline\": 983463,\n \"cube-scan\": 985988,\n \"cube-send\": 983464,\n \"cube-unfolded\": 983465,\n \"cup\": 983466,\n \"cup-off\": 984549,\n \"cup-off-outline\": 988029,\n \"cup-outline\": 987919,\n \"cup-water\": 983467,\n \"cupboard\": 986950,\n \"cupboard-outline\": 986951,\n \"cupcake\": 985434,\n \"curling\": 985187,\n \"currency-bdt\": 985188,\n \"currency-brl\": 985989,\n \"currency-btc\": 983468,\n \"currency-cny\": 985018,\n \"currency-eth\": 985019,\n \"currency-eur\": 983469,\n \"currency-eur-off\": 987925,\n \"currency-gbp\": 983470,\n \"currency-ils\": 986209,\n \"currency-inr\": 983471,\n \"currency-jpy\": 985020,\n \"currency-krw\": 985021,\n \"currency-kzt\": 985189,\n \"currency-mnt\": 988434,\n \"currency-ngn\": 983472,\n \"currency-php\": 985574,\n \"currency-rial\": 986780,\n \"currency-rub\": 983473,\n \"currency-rupee\": 989558,\n \"currency-sign\": 985022,\n \"currency-try\": 983474,\n \"currency-twd\": 985023,\n \"currency-usd\": 983489,\n \"currency-usd-off\": 984698,\n \"current-ac\": 988288,\n \"current-dc\": 985436,\n \"cursor-default\": 983488,\n \"cursor-default-click\": 986365,\n \"cursor-default-click-outline\": 986366,\n \"cursor-default-gesture\": 987431,\n \"cursor-default-gesture-outline\": 987432,\n \"cursor-default-outline\": 983487,\n \"cursor-move\": 983486,\n \"cursor-pointer\": 983485,\n \"cursor-text\": 984551,\n \"curtains\": 989254,\n \"curtains-closed\": 989255,\n \"cylinder\": 989518,\n \"cylinder-off\": 989519,\n \"dance-ballroom\": 988667,\n \"dance-pole\": 988536,\n \"data-matrix\": 988476,\n \"data-matrix-edit\": 988477,\n \"data-matrix-minus\": 988478,\n \"data-matrix-plus\": 988479,\n \"data-matrix-remove\": 988480,\n \"data-matrix-scan\": 988481,\n \"database\": 983484,\n \"database-alert\": 988730,\n \"database-alert-outline\": 988708,\n \"database-arrow-down\": 988731,\n \"database-arrow-down-outline\": 988709,\n \"database-arrow-left\": 988732,\n \"database-arrow-left-outline\": 988710,\n \"database-arrow-right\": 988733,\n \"database-arrow-right-outline\": 988711,\n \"database-arrow-up\": 988734,\n \"database-arrow-up-outline\": 988712,\n \"database-check\": 985769,\n \"database-check-outline\": 988713,\n \"database-clock\": 988735,\n \"database-clock-outline\": 988714,\n \"database-cog\": 988747,\n \"database-cog-outline\": 988748,\n \"database-edit\": 985990,\n \"database-edit-outline\": 988715,\n \"database-export\": 985438,\n \"database-export-outline\": 988716,\n \"database-eye\": 989471,\n \"database-eye-off\": 989472,\n \"database-eye-off-outline\": 989473,\n \"database-eye-outline\": 989474,\n \"database-import\": 985437,\n \"database-import-outline\": 988717,\n \"database-lock\": 985770,\n \"database-lock-outline\": 988718,\n \"database-marker\": 987894,\n \"database-marker-outline\": 988719,\n \"database-minus\": 983483,\n \"database-minus-outline\": 988720,\n \"database-off\": 988736,\n \"database-off-outline\": 988721,\n \"database-outline\": 988722,\n \"database-plus\": 983482,\n \"database-plus-outline\": 988723,\n \"database-refresh\": 984514,\n \"database-refresh-outline\": 988724,\n \"database-remove\": 986368,\n \"database-remove-outline\": 988725,\n \"database-search\": 985190,\n \"database-search-outline\": 988726,\n \"database-settings\": 986369,\n \"database-settings-outline\": 988727,\n \"database-sync\": 986367,\n \"database-sync-outline\": 988728,\n \"death-star\": 985304,\n \"death-star-variant\": 985305,\n \"deathly-hallows\": 985991,\n \"debian\": 985306,\n \"debug-step-into\": 983481,\n \"debug-step-out\": 983480,\n \"debug-step-over\": 983479,\n \"decagram\": 984940,\n \"decagram-outline\": 984941,\n \"decimal\": 987297,\n \"decimal-comma\": 987298,\n \"decimal-comma-decrease\": 987299,\n \"decimal-comma-increase\": 987300,\n \"decimal-decrease\": 983478,\n \"decimal-increase\": 983477,\n \"delete\": 983476,\n \"delete-alert\": 987301,\n \"delete-alert-outline\": 987302,\n \"delete-circle\": 984707,\n \"delete-circle-outline\": 985992,\n \"delete-clock\": 988502,\n \"delete-clock-outline\": 988503,\n \"delete-empty\": 984780,\n \"delete-empty-outline\": 986781,\n \"delete-forever\": 984552,\n \"delete-forever-outline\": 985993,\n \"delete-off\": 987303,\n \"delete-off-outline\": 987304,\n \"delete-outline\": 985575,\n \"delete-restore\": 985113,\n \"delete-sweep\": 984553,\n \"delete-sweep-outline\": 986210,\n \"delete-variant\": 983475,\n \"delta\": 983490,\n \"desk\": 987705,\n \"desk-lamp\": 985439,\n \"deskphone\": 983491,\n \"desktop-classic\": 985024,\n \"desktop-mac\": 983492,\n \"desktop-mac-dashboard\": 985576,\n \"desktop-tower\": 983493,\n \"desktop-tower-monitor\": 985771,\n \"details\": 983494,\n \"dev-to\": 986478,\n \"developer-board\": 984727,\n \"deviantart\": 983495,\n \"devices\": 987056,\n \"dharmachakra\": 985419,\n \"diabetes\": 987430,\n \"dialpad\": 984604,\n \"diameter\": 986211,\n \"diameter-outline\": 986212,\n \"diameter-variant\": 986213,\n \"diamond\": 985994,\n \"diamond-outline\": 985995,\n \"diamond-stone\": 983496,\n \"dice-1\": 983498,\n \"dice-1-outline\": 987466,\n \"dice-2\": 983499,\n \"dice-2-outline\": 987467,\n \"dice-3\": 983500,\n \"dice-3-outline\": 987468,\n \"dice-4\": 983501,\n \"dice-4-outline\": 987469,\n \"dice-5\": 983502,\n \"dice-5-outline\": 987470,\n \"dice-6\": 983503,\n \"dice-6-outline\": 987471,\n \"dice-d10\": 987475,\n \"dice-d10-outline\": 984943,\n \"dice-d12\": 987476,\n \"dice-d12-outline\": 985191,\n \"dice-d20\": 987477,\n \"dice-d20-outline\": 984554,\n \"dice-d4\": 987472,\n \"dice-d4-outline\": 984555,\n \"dice-d6\": 987473,\n \"dice-d6-outline\": 984557,\n \"dice-d8\": 987474,\n \"dice-d8-outline\": 984556,\n \"dice-multiple\": 984942,\n \"dice-multiple-outline\": 987478,\n \"digital-ocean\": 987703,\n \"dip-switch\": 985025,\n \"directions\": 983504,\n \"directions-fork\": 984641,\n \"disc\": 984558,\n \"disc-alert\": 983505,\n \"disc-player\": 985440,\n \"discord\": 984687,\n \"dishwasher\": 985772,\n \"dishwasher-alert\": 987576,\n \"dishwasher-off\": 987577,\n \"disqus\": 983506,\n \"distribute-horizontal-center\": 987593,\n \"distribute-horizontal-left\": 987592,\n \"distribute-horizontal-right\": 987594,\n \"distribute-vertical-bottom\": 987595,\n \"distribute-vertical-center\": 987596,\n \"distribute-vertical-top\": 987597,\n \"diversify\": 989303,\n \"diving\": 989559,\n \"diving-flippers\": 986559,\n \"diving-helmet\": 986560,\n \"diving-scuba\": 986561,\n \"diving-scuba-flag\": 986562,\n \"diving-scuba-tank\": 986563,\n \"diving-scuba-tank-multiple\": 986564,\n \"diving-snorkel\": 986565,\n \"division\": 983508,\n \"division-box\": 983509,\n \"dlna\": 985665,\n \"dna\": 984708,\n \"dns\": 983510,\n \"dns-outline\": 985996,\n \"dock-bottom\": 987305,\n \"dock-left\": 987306,\n \"dock-right\": 987307,\n \"dock-top\": 988435,\n \"dock-window\": 987308,\n \"docker\": 985192,\n \"doctor\": 985666,\n \"dog\": 985667,\n \"dog-service\": 985773,\n \"dog-side\": 985668,\n \"dog-side-off\": 988910,\n \"dolby\": 984755,\n \"dolly\": 986782,\n \"dolphin\": 989364,\n \"domain\": 983511,\n \"domain-off\": 986479,\n \"domain-plus\": 987309,\n \"domain-remove\": 987310,\n \"dome-light\": 988190,\n \"domino-mask\": 987171,\n \"donkey\": 985026,\n \"door\": 985114,\n \"door-closed\": 985115,\n \"door-closed-lock\": 987311,\n \"door-open\": 985116,\n \"door-sliding\": 989214,\n \"door-sliding-lock\": 989215,\n \"door-sliding-open\": 989216,\n \"doorbell\": 987878,\n \"doorbell-video\": 985193,\n \"dot-net\": 985774,\n \"dots-circle\": 989560,\n \"dots-grid\": 988668,\n \"dots-hexagon\": 988671,\n \"dots-horizontal\": 983512,\n \"dots-horizontal-circle\": 985027,\n \"dots-horizontal-circle-outline\": 985997,\n \"dots-square\": 988669,\n \"dots-triangle\": 988670,\n \"dots-vertical\": 983513,\n \"dots-vertical-circle\": 985028,\n \"dots-vertical-circle-outline\": 985998,\n \"download\": 983514,\n \"download-box\": 988258,\n \"download-box-outline\": 988259,\n \"download-circle\": 988260,\n \"download-circle-outline\": 988261,\n \"download-lock\": 987936,\n \"download-lock-outline\": 987937,\n \"download-multiple\": 985577,\n \"download-network\": 984820,\n \"download-network-outline\": 986214,\n \"download-off\": 987312,\n \"download-off-outline\": 987313,\n \"download-outline\": 985999,\n \"drag\": 983515,\n \"drag-horizontal\": 983516,\n \"drag-horizontal-variant\": 987888,\n \"drag-variant\": 986000,\n \"drag-vertical\": 983517,\n \"drag-vertical-variant\": 987889,\n \"drama-masks\": 986370,\n \"draw\": 986953,\n \"draw-pen\": 989625,\n \"drawing\": 983518,\n \"drawing-box\": 983519,\n \"dresser\": 986954,\n \"dresser-outline\": 986955,\n \"drone\": 983522,\n \"dropbox\": 983523,\n \"drupal\": 983524,\n \"duck\": 983525,\n \"dumbbell\": 983526,\n \"dump-truck\": 986215,\n \"ear-hearing\": 985029,\n \"ear-hearing-off\": 985669,\n \"earbuds\": 989263,\n \"earbuds-off\": 989264,\n \"earbuds-off-outline\": 989265,\n \"earbuds-outline\": 989266,\n \"earth\": 983527,\n \"earth-arrow-right\": 987921,\n \"earth-box\": 984781,\n \"earth-box-minus\": 988167,\n \"earth-box-off\": 984782,\n \"earth-box-plus\": 988166,\n \"earth-box-remove\": 988168,\n \"earth-minus\": 988164,\n \"earth-off\": 983528,\n \"earth-plus\": 988163,\n \"earth-remove\": 988165,\n \"egg\": 985775,\n \"egg-easter\": 985776,\n \"egg-fried\": 989258,\n \"egg-off\": 988144,\n \"egg-off-outline\": 988145,\n \"egg-outline\": 988146,\n \"eiffel-tower\": 988523,\n \"eight-track\": 985578,\n \"eject\": 983530,\n \"eject-outline\": 986001,\n \"electric-switch\": 986783,\n \"electric-switch-closed\": 987353,\n \"electron-framework\": 987172,\n \"elephant\": 985030,\n \"elevation-decline\": 983531,\n \"elevation-rise\": 983532,\n \"elevator\": 983533,\n \"elevator-down\": 987842,\n \"elevator-passenger\": 988033,\n \"elevator-passenger-off\": 989561,\n \"elevator-passenger-off-outline\": 989562,\n \"elevator-passenger-outline\": 989563,\n \"elevator-up\": 987841,\n \"ellipse\": 986784,\n \"ellipse-outline\": 986785,\n \"email\": 983534,\n \"email-alert\": 984783,\n \"email-alert-outline\": 986434,\n \"email-box\": 986371,\n \"email-check\": 985777,\n \"email-check-outline\": 985778,\n \"email-edit\": 986851,\n \"email-edit-outline\": 986852,\n \"email-fast\": 989295,\n \"email-fast-outline\": 989296,\n \"email-lock\": 983537,\n \"email-mark-as-unread\": 986002,\n \"email-minus\": 986853,\n \"email-minus-outline\": 986854,\n \"email-multiple\": 986855,\n \"email-multiple-outline\": 986856,\n \"email-newsletter\": 987057,\n \"email-off\": 988131,\n \"email-off-outline\": 988132,\n \"email-open\": 983535,\n \"email-open-multiple\": 986857,\n \"email-open-multiple-outline\": 986858,\n \"email-open-outline\": 984559,\n \"email-outline\": 983536,\n \"email-plus\": 985579,\n \"email-plus-outline\": 985580,\n \"email-receive\": 987354,\n \"email-receive-outline\": 987355,\n \"email-remove\": 988769,\n \"email-remove-outline\": 988770,\n \"email-seal\": 989531,\n \"email-seal-outline\": 989532,\n \"email-search\": 985441,\n \"email-search-outline\": 985442,\n \"email-send\": 987356,\n \"email-send-outline\": 987357,\n \"email-sync\": 987847,\n \"email-sync-outline\": 987848,\n \"email-variant\": 984560,\n \"ember\": 985904,\n \"emby\": 984756,\n \"emoticon\": 986216,\n \"emoticon-angry\": 986217,\n \"emoticon-angry-outline\": 986218,\n \"emoticon-confused\": 987358,\n \"emoticon-confused-outline\": 987359,\n \"emoticon-cool\": 986219,\n \"emoticon-cool-outline\": 983539,\n \"emoticon-cry\": 986220,\n \"emoticon-cry-outline\": 986221,\n \"emoticon-dead\": 986222,\n \"emoticon-dead-outline\": 984731,\n \"emoticon-devil\": 986223,\n \"emoticon-devil-outline\": 983540,\n \"emoticon-excited\": 986224,\n \"emoticon-excited-outline\": 984732,\n \"emoticon-frown\": 986956,\n \"emoticon-frown-outline\": 986957,\n \"emoticon-happy\": 986225,\n \"emoticon-happy-outline\": 983541,\n \"emoticon-kiss\": 986226,\n \"emoticon-kiss-outline\": 986227,\n \"emoticon-lol\": 987668,\n \"emoticon-lol-outline\": 987669,\n \"emoticon-neutral\": 986228,\n \"emoticon-neutral-outline\": 983542,\n \"emoticon-outline\": 983538,\n \"emoticon-poop\": 983543,\n \"emoticon-poop-outline\": 986229,\n \"emoticon-sad\": 986230,\n \"emoticon-sad-outline\": 983544,\n \"emoticon-sick\": 988540,\n \"emoticon-sick-outline\": 988541,\n \"emoticon-tongue\": 983545,\n \"emoticon-tongue-outline\": 986231,\n \"emoticon-wink\": 986232,\n \"emoticon-wink-outline\": 986233,\n \"engine\": 983546,\n \"engine-off\": 985670,\n \"engine-off-outline\": 985671,\n \"engine-outline\": 983547,\n \"epsilon\": 987360,\n \"equal\": 983548,\n \"equal-box\": 983549,\n \"equalizer\": 986786,\n \"equalizer-outline\": 986787,\n \"eraser\": 983550,\n \"eraser-variant\": 984642,\n \"escalator\": 983551,\n \"escalator-box\": 988057,\n \"escalator-down\": 987840,\n \"escalator-up\": 987839,\n \"eslint\": 986234,\n \"et\": 985779,\n \"ethereum\": 985194,\n \"ethernet\": 983552,\n \"ethernet-cable\": 983553,\n \"ethernet-cable-off\": 983554,\n \"ev-plug-ccs1\": 988441,\n \"ev-plug-ccs2\": 988442,\n \"ev-plug-chademo\": 988443,\n \"ev-plug-tesla\": 988444,\n \"ev-plug-type1\": 988445,\n \"ev-plug-type2\": 988446,\n \"ev-station\": 984561,\n \"evernote\": 983556,\n \"excavator\": 987173,\n \"exclamation\": 983557,\n \"exclamation-thick\": 987704,\n \"exit-run\": 985672,\n \"exit-to-app\": 983558,\n \"expand-all\": 985780,\n \"expand-all-outline\": 985781,\n \"expansion-card\": 985262,\n \"expansion-card-variant\": 987058,\n \"exponent\": 985443,\n \"exponent-box\": 985444,\n \"export\": 983559,\n \"export-variant\": 986003,\n \"eye\": 983560,\n \"eye-arrow-left\": 989437,\n \"eye-arrow-left-outline\": 989438,\n \"eye-arrow-right\": 989439,\n \"eye-arrow-right-outline\": 989440,\n \"eye-check\": 986372,\n \"eye-check-outline\": 986373,\n \"eye-circle\": 986004,\n \"eye-circle-outline\": 986005,\n \"eye-minus\": 987174,\n \"eye-minus-outline\": 987175,\n \"eye-off\": 983561,\n \"eye-off-outline\": 984785,\n \"eye-outline\": 984784,\n \"eye-plus\": 985195,\n \"eye-plus-outline\": 985196,\n \"eye-refresh\": 989564,\n \"eye-refresh-outline\": 989565,\n \"eye-remove\": 988643,\n \"eye-remove-outline\": 988644,\n \"eye-settings\": 985197,\n \"eye-settings-outline\": 985198,\n \"eyedropper\": 983562,\n \"eyedropper-minus\": 988125,\n \"eyedropper-off\": 988127,\n \"eyedropper-plus\": 988124,\n \"eyedropper-remove\": 988126,\n \"eyedropper-variant\": 983563,\n \"face-agent\": 986480,\n \"face-man\": 984643,\n \"face-man-outline\": 986006,\n \"face-man-profile\": 984644,\n \"face-man-shimmer\": 988620,\n \"face-man-shimmer-outline\": 988621,\n \"face-mask\": 988550,\n \"face-mask-outline\": 988551,\n \"face-recognition\": 986235,\n \"face-woman\": 987255,\n \"face-woman-outline\": 987256,\n \"face-woman-profile\": 987254,\n \"face-woman-shimmer\": 988622,\n \"face-woman-shimmer-outline\": 988623,\n \"facebook\": 983564,\n \"facebook-gaming\": 985053,\n \"facebook-messenger\": 983566,\n \"facebook-workplace\": 985905,\n \"factory\": 983567,\n \"family-tree\": 988686,\n \"fan\": 983568,\n \"fan-alert\": 988268,\n \"fan-auto\": 988957,\n \"fan-chevron-down\": 988269,\n \"fan-chevron-up\": 988270,\n \"fan-minus\": 988272,\n \"fan-off\": 985117,\n \"fan-plus\": 988271,\n \"fan-remove\": 988273,\n \"fan-speed-1\": 988274,\n \"fan-speed-2\": 988275,\n \"fan-speed-3\": 988276,\n \"fast-forward\": 983569,\n \"fast-forward-10\": 986481,\n \"fast-forward-15\": 989498,\n \"fast-forward-30\": 986374,\n \"fast-forward-5\": 987640,\n \"fast-forward-60\": 988683,\n \"fast-forward-outline\": 984786,\n \"fax\": 983570,\n \"feather\": 984787,\n \"feature-search\": 985673,\n \"feature-search-outline\": 985674,\n \"fedora\": 985307,\n \"fence\": 989082,\n \"fence-electric\": 989174,\n \"fencing\": 988353,\n \"ferris-wheel\": 986788,\n \"ferry\": 983571,\n \"file\": 983572,\n \"file-account\": 984891,\n \"file-account-outline\": 987176,\n \"file-alert\": 985675,\n \"file-alert-outline\": 985676,\n \"file-cabinet\": 985782,\n \"file-cad\": 986859,\n \"file-cad-box\": 986860,\n \"file-cancel\": 986566,\n \"file-cancel-outline\": 986567,\n \"file-certificate\": 987526,\n \"file-certificate-outline\": 987527,\n \"file-chart\": 983573,\n \"file-chart-outline\": 987177,\n \"file-check\": 983574,\n \"file-check-outline\": 986665,\n \"file-clock\": 987873,\n \"file-clock-outline\": 987874,\n \"file-cloud\": 983575,\n \"file-cloud-outline\": 987178,\n \"file-code\": 983598,\n \"file-code-outline\": 987179,\n \"file-cog\": 987259,\n \"file-cog-outline\": 987260,\n \"file-compare\": 985258,\n \"file-delimited\": 983576,\n \"file-delimited-outline\": 986789,\n \"file-document\": 983577,\n \"file-document-edit\": 986568,\n \"file-document-edit-outline\": 986569,\n \"file-document-multiple\": 988439,\n \"file-document-multiple-outline\": 988440,\n \"file-document-outline\": 985582,\n \"file-download\": 985445,\n \"file-download-outline\": 985446,\n \"file-edit\": 987623,\n \"file-edit-outline\": 987624,\n \"file-excel\": 983579,\n \"file-excel-box\": 983580,\n \"file-excel-box-outline\": 987180,\n \"file-excel-outline\": 987181,\n \"file-export\": 983581,\n \"file-export-outline\": 987182,\n \"file-eye\": 986570,\n \"file-eye-outline\": 986571,\n \"file-find\": 983582,\n \"file-find-outline\": 986007,\n \"file-gif-box\": 986488,\n \"file-hidden\": 984595,\n \"file-image\": 983583,\n \"file-image-marker\": 989042,\n \"file-image-marker-outline\": 989043,\n \"file-image-minus\": 989499,\n \"file-image-minus-outline\": 989500,\n \"file-image-outline\": 986800,\n \"file-image-plus\": 989501,\n \"file-image-plus-outline\": 989502,\n \"file-image-remove\": 989503,\n \"file-image-remove-outline\": 989504,\n \"file-import\": 983584,\n \"file-import-outline\": 987183,\n \"file-jpg-box\": 983589,\n \"file-key\": 987524,\n \"file-key-outline\": 987525,\n \"file-link\": 987511,\n \"file-link-outline\": 987512,\n \"file-lock\": 983585,\n \"file-lock-outline\": 987184,\n \"file-marker\": 989044,\n \"file-marker-outline\": 989045,\n \"file-move\": 985785,\n \"file-move-outline\": 987185,\n \"file-multiple\": 983586,\n \"file-multiple-outline\": 987186,\n \"file-music\": 983587,\n \"file-music-outline\": 986666,\n \"file-outline\": 983588,\n \"file-pdf-box\": 983590,\n \"file-percent\": 985118,\n \"file-percent-outline\": 987187,\n \"file-phone\": 987513,\n \"file-phone-outline\": 987514,\n \"file-plus\": 984914,\n \"file-plus-outline\": 986861,\n \"file-png-box\": 986669,\n \"file-powerpoint\": 983591,\n \"file-powerpoint-box\": 983592,\n \"file-powerpoint-box-outline\": 987188,\n \"file-powerpoint-outline\": 987189,\n \"file-presentation-box\": 983593,\n \"file-question\": 985199,\n \"file-question-outline\": 987190,\n \"file-refresh\": 985368,\n \"file-refresh-outline\": 984385,\n \"file-remove\": 986008,\n \"file-remove-outline\": 987191,\n \"file-replace\": 985906,\n \"file-replace-outline\": 985907,\n \"file-restore\": 984688,\n \"file-restore-outline\": 987192,\n \"file-search\": 986236,\n \"file-search-outline\": 986237,\n \"file-send\": 983594,\n \"file-send-outline\": 987193,\n \"file-settings\": 987257,\n \"file-settings-outline\": 987258,\n \"file-sign\": 989635,\n \"file-star\": 987194,\n \"file-star-outline\": 987195,\n \"file-swap\": 987060,\n \"file-swap-outline\": 987061,\n \"file-sync\": 987670,\n \"file-sync-outline\": 987671,\n \"file-table\": 986238,\n \"file-table-box\": 987361,\n \"file-table-box-multiple\": 987362,\n \"file-table-box-multiple-outline\": 987363,\n \"file-table-box-outline\": 987364,\n \"file-table-outline\": 986239,\n \"file-tree\": 984645,\n \"file-tree-outline\": 988114,\n \"file-undo\": 985308,\n \"file-undo-outline\": 987196,\n \"file-upload\": 985677,\n \"file-upload-outline\": 985678,\n \"file-video\": 983595,\n \"file-video-outline\": 986668,\n \"file-word\": 983596,\n \"file-word-box\": 983597,\n \"file-word-box-outline\": 987197,\n \"file-word-outline\": 987198,\n \"film\": 983599,\n \"filmstrip\": 983600,\n \"filmstrip-box\": 983858,\n \"filmstrip-box-multiple\": 986392,\n \"filmstrip-off\": 983601,\n \"filter\": 983602,\n \"filter-check\": 989420,\n \"filter-check-outline\": 989421,\n \"filter-menu\": 987365,\n \"filter-menu-outline\": 987366,\n \"filter-minus\": 986862,\n \"filter-minus-outline\": 986863,\n \"filter-off\": 988399,\n \"filter-off-outline\": 988400,\n \"filter-outline\": 983603,\n \"filter-plus\": 986864,\n \"filter-plus-outline\": 986865,\n \"filter-remove\": 983604,\n \"filter-remove-outline\": 983605,\n \"filter-variant\": 983606,\n \"filter-variant-minus\": 987410,\n \"filter-variant-plus\": 987411,\n \"filter-variant-remove\": 987199,\n \"finance\": 985119,\n \"find-replace\": 984788,\n \"fingerprint\": 983607,\n \"fingerprint-off\": 986801,\n \"fire\": 983608,\n \"fire-alert\": 988631,\n \"fire-circle\": 989191,\n \"fire-extinguisher\": 986866,\n \"fire-hydrant\": 987447,\n \"fire-hydrant-alert\": 987448,\n \"fire-hydrant-off\": 987449,\n \"fire-off\": 988962,\n \"fire-truck\": 985259,\n \"firebase\": 985447,\n \"firefox\": 983609,\n \"fireplace\": 986670,\n \"fireplace-off\": 986671,\n \"firewire\": 984510,\n \"firework\": 986672,\n \"firework-off\": 988963,\n \"fish\": 983610,\n \"fish-off\": 988147,\n \"fishbowl\": 986867,\n \"fishbowl-outline\": 986868,\n \"fit-to-page\": 986869,\n \"fit-to-page-outline\": 986870,\n \"fit-to-screen\": 989428,\n \"fit-to-screen-outline\": 989429,\n \"flag\": 983611,\n \"flag-checkered\": 983612,\n \"flag-minus\": 986009,\n \"flag-minus-outline\": 987314,\n \"flag-off\": 989422,\n \"flag-off-outline\": 989423,\n \"flag-outline\": 983613,\n \"flag-plus\": 986010,\n \"flag-plus-outline\": 987315,\n \"flag-remove\": 986011,\n \"flag-remove-outline\": 987316,\n \"flag-triangle\": 983615,\n \"flag-variant\": 983616,\n \"flag-variant-outline\": 983614,\n \"flare\": 986482,\n \"flash\": 983617,\n \"flash-alert\": 986871,\n \"flash-alert-outline\": 986872,\n \"flash-auto\": 983618,\n \"flash-off\": 983619,\n \"flash-outline\": 984789,\n \"flash-red-eye\": 984699,\n \"flashlight\": 983620,\n \"flashlight-off\": 983621,\n \"flask\": 983187,\n \"flask-empty\": 983188,\n \"flask-empty-minus\": 987706,\n \"flask-empty-minus-outline\": 987707,\n \"flask-empty-off\": 988148,\n \"flask-empty-off-outline\": 988149,\n \"flask-empty-outline\": 983189,\n \"flask-empty-plus\": 987708,\n \"flask-empty-plus-outline\": 987709,\n \"flask-empty-remove\": 987710,\n \"flask-empty-remove-outline\": 987711,\n \"flask-minus\": 987712,\n \"flask-minus-outline\": 987713,\n \"flask-off\": 988150,\n \"flask-off-outline\": 988151,\n \"flask-outline\": 983190,\n \"flask-plus\": 987714,\n \"flask-plus-outline\": 987715,\n \"flask-remove\": 987716,\n \"flask-remove-outline\": 987717,\n \"flask-round-bottom\": 987723,\n \"flask-round-bottom-empty\": 987724,\n \"flask-round-bottom-empty-outline\": 987725,\n \"flask-round-bottom-outline\": 987726,\n \"fleur-de-lis\": 987907,\n \"flip-horizontal\": 987367,\n \"flip-to-back\": 983623,\n \"flip-to-front\": 983624,\n \"flip-vertical\": 987368,\n \"floor-lamp\": 985309,\n \"floor-lamp-dual\": 987200,\n \"floor-lamp-dual-outline\": 989134,\n \"floor-lamp-outline\": 989128,\n \"floor-lamp-torchiere\": 988999,\n \"floor-lamp-torchiere-outline\": 989142,\n \"floor-lamp-torchiere-variant\": 987201,\n \"floor-lamp-torchiere-variant-outline\": 989135,\n \"floor-plan\": 985121,\n \"floppy\": 983625,\n \"floppy-variant\": 985583,\n \"flower\": 983626,\n \"flower-outline\": 985584,\n \"flower-pollen\": 989317,\n \"flower-pollen-outline\": 989318,\n \"flower-poppy\": 986376,\n \"flower-tulip\": 985585,\n \"flower-tulip-outline\": 985586,\n \"focus-auto\": 986958,\n \"focus-field\": 986959,\n \"focus-field-horizontal\": 986960,\n \"focus-field-vertical\": 986961,\n \"folder\": 983627,\n \"folder-account\": 983628,\n \"folder-account-outline\": 986012,\n \"folder-alert\": 986572,\n \"folder-alert-outline\": 986573,\n \"folder-check\": 989566,\n \"folder-check-outline\": 989567,\n \"folder-clock\": 985786,\n \"folder-clock-outline\": 985787,\n \"folder-cog\": 987263,\n \"folder-cog-outline\": 987264,\n \"folder-download\": 983629,\n \"folder-download-outline\": 987369,\n \"folder-edit\": 985310,\n \"folder-edit-outline\": 986574,\n \"folder-eye\": 989066,\n \"folder-eye-outline\": 989067,\n \"folder-google-drive\": 983630,\n \"folder-heart\": 987370,\n \"folder-heart-outline\": 987371,\n \"folder-hidden\": 989086,\n \"folder-home\": 987317,\n \"folder-home-outline\": 987318,\n \"folder-image\": 983631,\n \"folder-information\": 987319,\n \"folder-information-outline\": 987320,\n \"folder-key\": 985260,\n \"folder-key-network\": 985261,\n \"folder-key-network-outline\": 986240,\n \"folder-key-outline\": 987372,\n \"folder-lock\": 983632,\n \"folder-lock-open\": 983633,\n \"folder-marker\": 987757,\n \"folder-marker-outline\": 987758,\n \"folder-move\": 983634,\n \"folder-move-outline\": 987718,\n \"folder-multiple\": 983635,\n \"folder-multiple-image\": 983636,\n \"folder-multiple-outline\": 983637,\n \"folder-multiple-plus\": 988286,\n \"folder-multiple-plus-outline\": 988287,\n \"folder-music\": 987993,\n \"folder-music-outline\": 987994,\n \"folder-network\": 985200,\n \"folder-network-outline\": 986241,\n \"folder-open\": 984944,\n \"folder-open-outline\": 986575,\n \"folder-outline\": 983638,\n \"folder-plus\": 983639,\n \"folder-plus-outline\": 986013,\n \"folder-pound\": 986377,\n \"folder-pound-outline\": 986378,\n \"folder-refresh\": 984905,\n \"folder-refresh-outline\": 984386,\n \"folder-remove\": 983640,\n \"folder-remove-outline\": 986014,\n \"folder-search\": 985448,\n \"folder-search-outline\": 985449,\n \"folder-settings\": 987261,\n \"folder-settings-outline\": 987262,\n \"folder-star\": 984733,\n \"folder-star-multiple\": 988115,\n \"folder-star-multiple-outline\": 988116,\n \"folder-star-outline\": 986015,\n \"folder-swap\": 987062,\n \"folder-swap-outline\": 987063,\n \"folder-sync\": 986379,\n \"folder-sync-outline\": 986380,\n \"folder-table\": 987875,\n \"folder-table-outline\": 987876,\n \"folder-text\": 986242,\n \"folder-text-outline\": 986243,\n \"folder-upload\": 983641,\n \"folder-upload-outline\": 987373,\n \"folder-zip\": 984811,\n \"folder-zip-outline\": 985017,\n \"font-awesome\": 983098,\n \"food\": 983642,\n \"food-apple\": 983643,\n \"food-apple-outline\": 986244,\n \"food-croissant\": 985032,\n \"food-drumstick\": 988191,\n \"food-drumstick-off\": 988264,\n \"food-drumstick-off-outline\": 988265,\n \"food-drumstick-outline\": 988192,\n \"food-fork-drink\": 984562,\n \"food-halal\": 988530,\n \"food-hot-dog\": 989259,\n \"food-kosher\": 988531,\n \"food-off\": 984563,\n \"food-off-outline\": 989461,\n \"food-outline\": 989462,\n \"food-steak\": 988266,\n \"food-steak-off\": 988267,\n \"food-takeout-box\": 989238,\n \"food-takeout-box-outline\": 989239,\n \"food-turkey\": 988956,\n \"food-variant\": 983644,\n \"food-variant-off\": 988133,\n \"foot-print\": 986962,\n \"football\": 983645,\n \"football-australian\": 983646,\n \"football-helmet\": 983647,\n \"forest\": 989335,\n \"forklift\": 985033,\n \"form-dropdown\": 988160,\n \"form-select\": 988161,\n \"form-textarea\": 987285,\n \"form-textbox\": 984590,\n \"form-textbox-lock\": 987997,\n \"form-textbox-password\": 985077,\n \"format-align-bottom\": 984915,\n \"format-align-center\": 983648,\n \"format-align-justify\": 983649,\n \"format-align-left\": 983650,\n \"format-align-middle\": 984916,\n \"format-align-right\": 983651,\n \"format-align-top\": 984917,\n \"format-annotation-minus\": 985788,\n \"format-annotation-plus\": 984646,\n \"format-bold\": 983652,\n \"format-clear\": 983653,\n \"format-color-fill\": 983654,\n \"format-color-highlight\": 986673,\n \"format-color-marker-cancel\": 987923,\n \"format-color-text\": 984734,\n \"format-columns\": 985311,\n \"format-float-center\": 983655,\n \"format-float-left\": 983656,\n \"format-float-none\": 983657,\n \"format-float-right\": 983658,\n \"format-font\": 984790,\n \"format-font-size-decrease\": 985587,\n \"format-font-size-increase\": 985588,\n \"format-header-1\": 983659,\n \"format-header-2\": 983660,\n \"format-header-3\": 983661,\n \"format-header-4\": 983662,\n \"format-header-5\": 983663,\n \"format-header-6\": 983664,\n \"format-header-decrease\": 983665,\n \"format-header-equal\": 983666,\n \"format-header-increase\": 983667,\n \"format-header-pound\": 983668,\n \"format-horizontal-align-center\": 984606,\n \"format-horizontal-align-left\": 984607,\n \"format-horizontal-align-right\": 984608,\n \"format-indent-decrease\": 983669,\n \"format-indent-increase\": 983670,\n \"format-italic\": 983671,\n \"format-letter-case\": 985908,\n \"format-letter-case-lower\": 985909,\n \"format-letter-case-upper\": 985910,\n \"format-letter-ends-with\": 987064,\n \"format-letter-matches\": 987065,\n \"format-letter-spacing\": 989526,\n \"format-letter-starts-with\": 987066,\n \"format-line-spacing\": 983672,\n \"format-line-style\": 984520,\n \"format-line-weight\": 984521,\n \"format-list-bulleted\": 983673,\n \"format-list-bulleted-square\": 986576,\n \"format-list-bulleted-triangle\": 986802,\n \"format-list-bulleted-type\": 983674,\n \"format-list-checkbox\": 985450,\n \"format-list-checks\": 984918,\n \"format-list-group\": 989280,\n \"format-list-numbered\": 983675,\n \"format-list-numbered-rtl\": 986381,\n \"format-list-text\": 987759,\n \"format-overline\": 986803,\n \"format-page-break\": 984791,\n \"format-page-split\": 989463,\n \"format-paint\": 983676,\n \"format-paragraph\": 983677,\n \"format-pilcrow\": 984792,\n \"format-quote-close\": 983678,\n \"format-quote-close-outline\": 987560,\n \"format-quote-open\": 984919,\n \"format-quote-open-outline\": 987559,\n \"format-rotate-90\": 984746,\n \"format-section\": 984735,\n \"format-size\": 983679,\n \"format-strikethrough\": 983680,\n \"format-strikethrough-variant\": 983681,\n \"format-subscript\": 983682,\n \"format-superscript\": 983683,\n \"format-text\": 983684,\n \"format-text-rotation-angle-down\": 987067,\n \"format-text-rotation-angle-up\": 987068,\n \"format-text-rotation-down\": 986483,\n \"format-text-rotation-down-vertical\": 987069,\n \"format-text-rotation-none\": 986484,\n \"format-text-rotation-up\": 987070,\n \"format-text-rotation-vertical\": 987071,\n \"format-text-variant\": 986674,\n \"format-text-variant-outline\": 988431,\n \"format-text-wrapping-clip\": 986382,\n \"format-text-wrapping-overflow\": 986383,\n \"format-text-wrapping-wrap\": 986384,\n \"format-textbox\": 986385,\n \"format-textdirection-l-to-r\": 983685,\n \"format-textdirection-r-to-l\": 983686,\n \"format-title\": 984564,\n \"format-underline\": 983687,\n \"format-underline-wavy\": 989417,\n \"format-vertical-align-bottom\": 984609,\n \"format-vertical-align-center\": 984610,\n \"format-vertical-align-top\": 984611,\n \"format-wrap-inline\": 983688,\n \"format-wrap-square\": 983689,\n \"format-wrap-tight\": 983690,\n \"format-wrap-top-bottom\": 983691,\n \"forum\": 983692,\n \"forum-outline\": 985122,\n \"forward\": 983693,\n \"forwardburger\": 986485,\n \"fountain\": 985451,\n \"fountain-pen\": 986386,\n \"fountain-pen-tip\": 986387,\n \"fraction-one-half\": 989586,\n \"freebsd\": 985312,\n \"french-fries\": 989527,\n \"frequently-asked-questions\": 986804,\n \"fridge\": 983696,\n \"fridge-alert\": 987569,\n \"fridge-alert-outline\": 987570,\n \"fridge-bottom\": 983698,\n \"fridge-industrial\": 988654,\n \"fridge-industrial-alert\": 988655,\n \"fridge-industrial-alert-outline\": 988656,\n \"fridge-industrial-off\": 988657,\n \"fridge-industrial-off-outline\": 988658,\n \"fridge-industrial-outline\": 988659,\n \"fridge-off\": 987567,\n \"fridge-off-outline\": 987568,\n \"fridge-outline\": 983695,\n \"fridge-top\": 983697,\n \"fridge-variant\": 988660,\n \"fridge-variant-alert\": 988661,\n \"fridge-variant-alert-outline\": 988662,\n \"fridge-variant-off\": 988663,\n \"fridge-variant-off-outline\": 988664,\n \"fridge-variant-outline\": 988665,\n \"fruit-cherries\": 987202,\n \"fruit-cherries-off\": 988152,\n \"fruit-citrus\": 987203,\n \"fruit-citrus-off\": 988153,\n \"fruit-grapes\": 987204,\n \"fruit-grapes-outline\": 987205,\n \"fruit-pineapple\": 987206,\n \"fruit-watermelon\": 987207,\n \"fuel\": 985034,\n \"fuel-cell\": 989365,\n \"fullscreen\": 983699,\n \"fullscreen-exit\": 983700,\n \"function\": 983701,\n \"function-variant\": 985201,\n \"furigana-horizontal\": 987265,\n \"furigana-vertical\": 987266,\n \"fuse\": 986245,\n \"fuse-alert\": 988205,\n \"fuse-blade\": 986246,\n \"fuse-off\": 988204,\n \"gamepad\": 983702,\n \"gamepad-circle\": 986675,\n \"gamepad-circle-down\": 986676,\n \"gamepad-circle-left\": 986677,\n \"gamepad-circle-outline\": 986678,\n \"gamepad-circle-right\": 986679,\n \"gamepad-circle-up\": 986680,\n \"gamepad-down\": 986681,\n \"gamepad-left\": 986682,\n \"gamepad-outline\": 989465,\n \"gamepad-right\": 986683,\n \"gamepad-round\": 986684,\n \"gamepad-round-down\": 986685,\n \"gamepad-round-left\": 986686,\n \"gamepad-round-outline\": 986687,\n \"gamepad-round-right\": 986688,\n \"gamepad-round-up\": 986689,\n \"gamepad-square\": 986805,\n \"gamepad-square-outline\": 986806,\n \"gamepad-up\": 986690,\n \"gamepad-variant\": 983703,\n \"gamepad-variant-outline\": 986807,\n \"gamma\": 987374,\n \"gantry-crane\": 986577,\n \"garage\": 984793,\n \"garage-alert\": 985202,\n \"garage-alert-variant\": 987861,\n \"garage-lock\": 989179,\n \"garage-open\": 984794,\n \"garage-open-variant\": 987860,\n \"garage-variant\": 987859,\n \"garage-variant-lock\": 989180,\n \"gas-cylinder\": 984647,\n \"gas-station\": 983704,\n \"gas-station-off\": 988169,\n \"gas-station-off-outline\": 988170,\n \"gas-station-outline\": 986808,\n \"gate\": 983705,\n \"gate-alert\": 989176,\n \"gate-and\": 985313,\n \"gate-arrow-left\": 989175,\n \"gate-arrow-right\": 987497,\n \"gate-nand\": 985314,\n \"gate-nor\": 985315,\n \"gate-not\": 985316,\n \"gate-open\": 987498,\n \"gate-or\": 985317,\n \"gate-xnor\": 985318,\n \"gate-xor\": 985319,\n \"gatsby\": 986691,\n \"gauge\": 983706,\n \"gauge-empty\": 985203,\n \"gauge-full\": 985204,\n \"gauge-low\": 985205,\n \"gavel\": 983707,\n \"gender-female\": 983708,\n \"gender-male\": 983709,\n \"gender-male-female\": 983710,\n \"gender-male-female-variant\": 987455,\n \"gender-non-binary\": 987456,\n \"gender-transgender\": 983711,\n \"gentoo\": 985320,\n \"gesture\": 985035,\n \"gesture-double-tap\": 984892,\n \"gesture-pinch\": 985789,\n \"gesture-spread\": 985790,\n \"gesture-swipe\": 986486,\n \"gesture-swipe-down\": 984893,\n \"gesture-swipe-horizontal\": 985791,\n \"gesture-swipe-left\": 984894,\n \"gesture-swipe-right\": 984895,\n \"gesture-swipe-up\": 984896,\n \"gesture-swipe-vertical\": 985792,\n \"gesture-tap\": 984897,\n \"gesture-tap-box\": 987817,\n \"gesture-tap-button\": 987816,\n \"gesture-tap-hold\": 986487,\n \"gesture-two-double-tap\": 984898,\n \"gesture-two-tap\": 984899,\n \"ghost\": 983712,\n \"ghost-off\": 985589,\n \"ghost-off-outline\": 988764,\n \"ghost-outline\": 988765,\n \"gift\": 986692,\n \"gift-off\": 988911,\n \"gift-off-outline\": 988912,\n \"gift-open\": 988913,\n \"gift-open-outline\": 988914,\n \"gift-outline\": 983713,\n \"git\": 983714,\n \"github\": 983716,\n \"gitlab\": 986016,\n \"glass-cocktail\": 983894,\n \"glass-cocktail-off\": 988646,\n \"glass-flute\": 983717,\n \"glass-fragile\": 989299,\n \"glass-mug\": 983718,\n \"glass-mug-off\": 988647,\n \"glass-mug-variant\": 987414,\n \"glass-mug-variant-off\": 988648,\n \"glass-pint-outline\": 987917,\n \"glass-stange\": 983719,\n \"glass-tulip\": 983720,\n \"glass-wine\": 985206,\n \"glasses\": 983722,\n \"globe-light\": 987863,\n \"globe-model\": 985321,\n \"gmail\": 983723,\n \"gnome\": 983724,\n \"go-kart\": 986489,\n \"go-kart-track\": 986490,\n \"gog\": 986017,\n \"gold\": 987727,\n \"golf\": 985123,\n \"golf-cart\": 987556,\n \"golf-tee\": 987267,\n \"gondola\": 984710,\n \"goodreads\": 986491,\n \"google\": 983725,\n \"google-ads\": 986247,\n \"google-analytics\": 985036,\n \"google-assistant\": 985037,\n \"google-cardboard\": 983726,\n \"google-chrome\": 983727,\n \"google-circles\": 983728,\n \"google-circles-communities\": 983729,\n \"google-circles-extended\": 983730,\n \"google-circles-group\": 983731,\n \"google-classroom\": 983744,\n \"google-cloud\": 987638,\n \"google-controller\": 983732,\n \"google-controller-off\": 983733,\n \"google-downasaur\": 988002,\n \"google-drive\": 983734,\n \"google-earth\": 983735,\n \"google-fit\": 985452,\n \"google-glass\": 983736,\n \"google-hangouts\": 983753,\n \"google-home\": 985124,\n \"google-keep\": 984796,\n \"google-lens\": 985590,\n \"google-maps\": 984565,\n \"google-my-business\": 987208,\n \"google-nearby\": 983737,\n \"google-play\": 983740,\n \"google-plus\": 983741,\n \"google-podcast\": 986809,\n \"google-spreadsheet\": 985591,\n \"google-street-view\": 986248,\n \"google-translate\": 983743,\n \"gradient-horizontal\": 989002,\n \"gradient-vertical\": 984736,\n \"grain\": 986492,\n \"graph\": 987209,\n \"graph-outline\": 987210,\n \"graphql\": 985207,\n \"grass\": 988432,\n \"grave-stone\": 986018,\n \"grease-pencil\": 984648,\n \"greater-than\": 985453,\n \"greater-than-or-equal\": 985454,\n \"greenhouse\": 983085,\n \"grid\": 983745,\n \"grid-large\": 984920,\n \"grid-off\": 983746,\n \"grill\": 986693,\n \"grill-outline\": 987530,\n \"group\": 983747,\n \"guitar-acoustic\": 984945,\n \"guitar-electric\": 983748,\n \"guitar-pick\": 983749,\n \"guitar-pick-outline\": 983750,\n \"guy-fawkes-mask\": 985125,\n \"hail\": 985793,\n \"hair-dryer\": 987375,\n \"hair-dryer-outline\": 987376,\n \"halloween\": 986019,\n \"hamburger\": 984709,\n \"hamburger-check\": 989046,\n \"hamburger-minus\": 989047,\n \"hamburger-off\": 989048,\n \"hamburger-plus\": 989049,\n \"hamburger-remove\": 989050,\n \"hammer\": 985322,\n \"hammer-screwdriver\": 987938,\n \"hammer-sickle\": 989319,\n \"hammer-wrench\": 987939,\n \"hand-back-left\": 986694,\n \"hand-back-left-off\": 989232,\n \"hand-back-left-off-outline\": 989234,\n \"hand-back-left-outline\": 989228,\n \"hand-back-right\": 986695,\n \"hand-back-right-off\": 989233,\n \"hand-back-right-off-outline\": 989235,\n \"hand-back-right-outline\": 989229,\n \"hand-clap\": 989515,\n \"hand-coin\": 989327,\n \"hand-coin-outline\": 989328,\n \"hand-extended\": 989366,\n \"hand-extended-outline\": 989367,\n \"hand-front-left\": 989227,\n \"hand-front-left-outline\": 989230,\n \"hand-front-right\": 985679,\n \"hand-front-right-outline\": 989231,\n \"hand-heart\": 987377,\n \"hand-heart-outline\": 988542,\n \"hand-okay\": 985680,\n \"hand-peace\": 985681,\n \"hand-peace-variant\": 985682,\n \"hand-pointing-down\": 985683,\n \"hand-pointing-left\": 985684,\n \"hand-pointing-right\": 983751,\n \"hand-pointing-up\": 985685,\n \"hand-saw\": 986696,\n \"hand-wash\": 988543,\n \"hand-wash-outline\": 988544,\n \"hand-water\": 988063,\n \"hand-wave\": 989217,\n \"hand-wave-outline\": 989218,\n \"handball\": 986963,\n \"handcuffs\": 987454,\n \"hands-pray\": 984441,\n \"handshake\": 987672,\n \"handshake-outline\": 988577,\n \"hanger\": 983752,\n \"hard-hat\": 985455,\n \"harddisk\": 983754,\n \"harddisk-plus\": 987211,\n \"harddisk-remove\": 987212,\n \"hat-fedora\": 986020,\n \"hazard-lights\": 986249,\n \"hdr\": 986493,\n \"hdr-off\": 986494,\n \"head\": 987998,\n \"head-alert\": 987960,\n \"head-alert-outline\": 987961,\n \"head-check\": 987962,\n \"head-check-outline\": 987963,\n \"head-cog\": 987964,\n \"head-cog-outline\": 987965,\n \"head-dots-horizontal\": 987966,\n \"head-dots-horizontal-outline\": 987967,\n \"head-flash\": 987968,\n \"head-flash-outline\": 987969,\n \"head-heart\": 987970,\n \"head-heart-outline\": 987971,\n \"head-lightbulb\": 987972,\n \"head-lightbulb-outline\": 987973,\n \"head-minus\": 987974,\n \"head-minus-outline\": 987975,\n \"head-outline\": 987999,\n \"head-plus\": 987976,\n \"head-plus-outline\": 987977,\n \"head-question\": 987978,\n \"head-question-outline\": 987979,\n \"head-remove\": 987980,\n \"head-remove-outline\": 987981,\n \"head-snowflake\": 987982,\n \"head-snowflake-outline\": 987983,\n \"head-sync\": 987984,\n \"head-sync-outline\": 987985,\n \"headphones\": 983755,\n \"headphones-bluetooth\": 985456,\n \"headphones-box\": 983756,\n \"headphones-off\": 985038,\n \"headphones-settings\": 983757,\n \"headset\": 983758,\n \"headset-dock\": 983759,\n \"headset-off\": 983760,\n \"heart\": 983761,\n \"heart-box\": 983762,\n \"heart-box-outline\": 983763,\n \"heart-broken\": 983764,\n \"heart-broken-outline\": 986388,\n \"heart-circle\": 985457,\n \"heart-circle-outline\": 985458,\n \"heart-cog\": 988771,\n \"heart-cog-outline\": 988772,\n \"heart-flash\": 986873,\n \"heart-half\": 984799,\n \"heart-half-full\": 984798,\n \"heart-half-outline\": 984800,\n \"heart-minus\": 988207,\n \"heart-minus-outline\": 988210,\n \"heart-multiple\": 985686,\n \"heart-multiple-outline\": 985687,\n \"heart-off\": 984921,\n \"heart-off-outline\": 988212,\n \"heart-outline\": 983765,\n \"heart-plus\": 988206,\n \"heart-plus-outline\": 988209,\n \"heart-pulse\": 984566,\n \"heart-remove\": 988208,\n \"heart-remove-outline\": 988211,\n \"heart-settings\": 988773,\n \"heart-settings-outline\": 988774,\n \"helicopter\": 985794,\n \"help\": 983766,\n \"help-box\": 984971,\n \"help-circle\": 983767,\n \"help-circle-outline\": 984613,\n \"help-network\": 984821,\n \"help-network-outline\": 986250,\n \"help-rhombus\": 986021,\n \"help-rhombus-outline\": 986022,\n \"hexadecimal\": 987815,\n \"hexagon\": 983768,\n \"hexagon-multiple\": 984801,\n \"hexagon-multiple-outline\": 987378,\n \"hexagon-outline\": 983769,\n \"hexagon-slice-1\": 985795,\n \"hexagon-slice-2\": 985796,\n \"hexagon-slice-3\": 985797,\n \"hexagon-slice-4\": 985798,\n \"hexagon-slice-5\": 985799,\n \"hexagon-slice-6\": 985800,\n \"hexagram\": 985801,\n \"hexagram-outline\": 985802,\n \"high-definition\": 985039,\n \"high-definition-box\": 985208,\n \"highway\": 984567,\n \"hiking\": 986495,\n \"history\": 983770,\n \"hockey-puck\": 985209,\n \"hockey-sticks\": 985210,\n \"hololens\": 983771,\n \"home\": 983772,\n \"home-account\": 985126,\n \"home-alert\": 985211,\n \"home-alert-outline\": 988624,\n \"home-analytics\": 986810,\n \"home-assistant\": 985040,\n \"home-automation\": 985041,\n \"home-battery\": 989441,\n \"home-battery-outline\": 989442,\n \"home-circle\": 985042,\n \"home-circle-outline\": 987213,\n \"home-city\": 986389,\n \"home-city-outline\": 986390,\n \"home-edit\": 987481,\n \"home-edit-outline\": 987482,\n \"home-export-outline\": 987035,\n \"home-flood\": 986874,\n \"home-floor-0\": 986578,\n \"home-floor-1\": 986496,\n \"home-floor-2\": 986497,\n \"home-floor-3\": 986498,\n \"home-floor-a\": 986499,\n \"home-floor-b\": 986500,\n \"home-floor-g\": 986501,\n \"home-floor-l\": 986502,\n \"home-floor-negative-1\": 986579,\n \"home-group\": 986580,\n \"home-group-minus\": 989633,\n \"home-group-plus\": 989632,\n \"home-group-remove\": 989634,\n \"home-heart\": 985127,\n \"home-import-outline\": 987036,\n \"home-lightbulb\": 987729,\n \"home-lightbulb-outline\": 987730,\n \"home-lightning-bolt\": 989443,\n \"home-lightning-bolt-outline\": 989444,\n \"home-lock\": 985323,\n \"home-lock-open\": 985324,\n \"home-map-marker\": 984568,\n \"home-minus\": 985460,\n \"home-minus-outline\": 988117,\n \"home-modern\": 983773,\n \"home-outline\": 984737,\n \"home-plus\": 985461,\n \"home-plus-outline\": 988118,\n \"home-remove\": 987719,\n \"home-remove-outline\": 988119,\n \"home-roof\": 987435,\n \"home-search\": 988080,\n \"home-search-outline\": 988081,\n \"home-switch\": 989076,\n \"home-switch-outline\": 989077,\n \"home-thermometer\": 986964,\n \"home-thermometer-outline\": 986965,\n \"home-variant\": 983774,\n \"home-variant-outline\": 986023,\n \"hook\": 984802,\n \"hook-off\": 984803,\n \"hoop-house\": 986710,\n \"hops\": 983775,\n \"horizontal-rotate-clockwise\": 987379,\n \"horizontal-rotate-counterclockwise\": 987380,\n \"horse\": 988607,\n \"horse-human\": 988608,\n \"horse-variant\": 988609,\n \"horse-variant-fast\": 989294,\n \"horseshoe\": 985688,\n \"hospital\": 987126,\n \"hospital-box\": 983776,\n \"hospital-box-outline\": 987127,\n \"hospital-building\": 983777,\n \"hospital-marker\": 983778,\n \"hot-tub\": 985128,\n \"hours-24\": 988280,\n \"hubspot\": 986391,\n \"hulu\": 985129,\n \"human\": 983782,\n \"human-baby-changing-table\": 988043,\n \"human-cane\": 988545,\n \"human-capacity-decrease\": 988571,\n \"human-capacity-increase\": 988572,\n \"human-child\": 983783,\n \"human-dolly\": 989568,\n \"human-edit\": 988392,\n \"human-female\": 984649,\n \"human-female-boy\": 985689,\n \"human-female-dance\": 988617,\n \"human-female-female\": 985690,\n \"human-female-girl\": 985691,\n \"human-greeting\": 989124,\n \"human-greeting-proximity\": 988573,\n \"human-greeting-variant\": 984650,\n \"human-handsdown\": 984651,\n \"human-handsup\": 984652,\n \"human-male\": 984653,\n \"human-male-board\": 985232,\n \"human-male-board-poll\": 985158,\n \"human-male-boy\": 985692,\n \"human-male-child\": 988044,\n \"human-male-female\": 983784,\n \"human-male-female-child\": 989219,\n \"human-male-girl\": 985693,\n \"human-male-height\": 986875,\n \"human-male-height-variant\": 986876,\n \"human-male-male\": 985694,\n \"human-non-binary\": 989256,\n \"human-pregnant\": 984527,\n \"human-queue\": 988529,\n \"human-scooter\": 987625,\n \"human-wheelchair\": 988045,\n \"human-white-cane\": 989569,\n \"humble-bundle\": 984900,\n \"hvac\": 987986,\n \"hvac-off\": 988574,\n \"hydraulic-oil-level\": 987940,\n \"hydraulic-oil-temperature\": 987941,\n \"hydro-power\": 987877,\n \"hydrogen-station\": 989332,\n \"ice-cream\": 985130,\n \"ice-cream-off\": 986706,\n \"ice-pop\": 986877,\n \"id-card\": 987072,\n \"identifier\": 986878,\n \"ideogram-cjk\": 987953,\n \"ideogram-cjk-variant\": 987954,\n \"image\": 983785,\n \"image-album\": 983786,\n \"image-area\": 983787,\n \"image-area-close\": 983788,\n \"image-auto-adjust\": 987073,\n \"image-broken\": 983789,\n \"image-broken-variant\": 983790,\n \"image-edit\": 987619,\n \"image-edit-outline\": 987620,\n \"image-filter-black-white\": 983792,\n \"image-filter-center-focus\": 983793,\n \"image-filter-center-focus-strong\": 986879,\n \"image-filter-center-focus-strong-outline\": 986880,\n \"image-filter-center-focus-weak\": 983794,\n \"image-filter-drama\": 983795,\n \"image-filter-frames\": 983796,\n \"image-filter-hdr\": 983797,\n \"image-filter-none\": 983798,\n \"image-filter-tilt-shift\": 983799,\n \"image-filter-vintage\": 983800,\n \"image-frame\": 986697,\n \"image-marker\": 989051,\n \"image-marker-outline\": 989052,\n \"image-minus\": 988185,\n \"image-move\": 985592,\n \"image-multiple\": 983801,\n \"image-multiple-outline\": 983791,\n \"image-off\": 985131,\n \"image-off-outline\": 987601,\n \"image-outline\": 985462,\n \"image-plus\": 985212,\n \"image-remove\": 988184,\n \"image-search\": 985463,\n \"image-search-outline\": 985464,\n \"image-size-select-actual\": 986253,\n \"image-size-select-large\": 986254,\n \"image-size-select-small\": 986255,\n \"image-text\": 988685,\n \"import\": 983802,\n \"inbox\": 984711,\n \"inbox-arrow-down\": 983803,\n \"inbox-arrow-down-outline\": 987760,\n \"inbox-arrow-up\": 984017,\n \"inbox-arrow-up-outline\": 987761,\n \"inbox-full\": 987762,\n \"inbox-full-outline\": 987763,\n \"inbox-multiple\": 985264,\n \"inbox-multiple-outline\": 986024,\n \"inbox-outline\": 987764,\n \"inbox-remove\": 988575,\n \"inbox-remove-outline\": 988576,\n \"incognito\": 984569,\n \"incognito-circle\": 988193,\n \"incognito-circle-off\": 988194,\n \"incognito-off\": 983157,\n \"induction\": 989260,\n \"infinity\": 984804,\n \"information\": 983804,\n \"information-off\": 989068,\n \"information-off-outline\": 989069,\n \"information-outline\": 983805,\n \"information-variant\": 984654,\n \"instagram\": 983806,\n \"instrument-triangle\": 987214,\n \"integrated-circuit-chip\": 989459,\n \"invert-colors\": 983809,\n \"invert-colors-off\": 986698,\n \"iobroker\": 987880,\n \"ip\": 985695,\n \"ip-network\": 985696,\n \"ip-network-outline\": 986256,\n \"ip-outline\": 989570,\n \"ipod\": 986257,\n \"iron\": 989220,\n \"iron-board\": 989240,\n \"iron-outline\": 989221,\n \"island\": 987215,\n \"iv-bag\": 987321,\n \"jabber\": 986581,\n \"jeepney\": 983810,\n \"jellyfish\": 986881,\n \"jellyfish-outline\": 986882,\n \"jira\": 983811,\n \"jquery\": 985213,\n \"jsfiddle\": 983812,\n \"jump-rope\": 987903,\n \"kabaddi\": 986503,\n \"kangaroo\": 988504,\n \"karate\": 985132,\n \"kayaking\": 985263,\n \"keg\": 983813,\n \"kettle\": 984570,\n \"kettle-alert\": 987927,\n \"kettle-alert-outline\": 987928,\n \"kettle-off\": 987931,\n \"kettle-off-outline\": 987932,\n \"kettle-outline\": 986966,\n \"kettle-pour-over\": 988988,\n \"kettle-steam\": 987929,\n \"kettle-steam-outline\": 987930,\n \"kettlebell\": 987904,\n \"key\": 983814,\n \"key-alert\": 989571,\n \"key-alert-outline\": 989572,\n \"key-arrow-right\": 987922,\n \"key-chain\": 988532,\n \"key-chain-variant\": 988533,\n \"key-change\": 983815,\n \"key-link\": 987551,\n \"key-minus\": 983816,\n \"key-outline\": 986582,\n \"key-plus\": 983817,\n \"key-remove\": 983818,\n \"key-star\": 987550,\n \"key-variant\": 983819,\n \"key-wireless\": 987074,\n \"keyboard\": 983820,\n \"keyboard-backspace\": 983821,\n \"keyboard-caps\": 983822,\n \"keyboard-close\": 983823,\n \"keyboard-esc\": 987831,\n \"keyboard-f1\": 987819,\n \"keyboard-f10\": 987828,\n \"keyboard-f11\": 987829,\n \"keyboard-f12\": 987830,\n \"keyboard-f2\": 987820,\n \"keyboard-f3\": 987821,\n \"keyboard-f4\": 987822,\n \"keyboard-f5\": 987823,\n \"keyboard-f6\": 987824,\n \"keyboard-f7\": 987825,\n \"keyboard-f8\": 987826,\n \"keyboard-f9\": 987827,\n \"keyboard-off\": 983824,\n \"keyboard-off-outline\": 986699,\n \"keyboard-outline\": 985467,\n \"keyboard-return\": 983825,\n \"keyboard-settings\": 985593,\n \"keyboard-settings-outline\": 985594,\n \"keyboard-space\": 987216,\n \"keyboard-tab\": 983826,\n \"keyboard-tab-reverse\": 983845,\n \"keyboard-variant\": 983827,\n \"khanda\": 987389,\n \"kickstarter\": 984901,\n \"kite\": 989573,\n \"kite-outline\": 989574,\n \"kitesurfing\": 988996,\n \"klingon\": 987995,\n \"knife\": 985595,\n \"knife-military\": 985596,\n \"koala\": 988991,\n \"kodi\": 983828,\n \"kubernetes\": 987390,\n \"label\": 983829,\n \"label-multiple\": 988021,\n \"label-multiple-outline\": 988022,\n \"label-off\": 985803,\n \"label-off-outline\": 985804,\n \"label-outline\": 983830,\n \"label-percent\": 987882,\n \"label-percent-outline\": 987883,\n \"label-variant\": 985805,\n \"label-variant-outline\": 985806,\n \"ladder\": 988578,\n \"ladybug\": 985133,\n \"lambda\": 984615,\n \"lamp\": 984757,\n \"lamp-outline\": 989136,\n \"lamps\": 988534,\n \"lamps-outline\": 989137,\n \"lan\": 983831,\n \"lan-check\": 987818,\n \"lan-connect\": 983832,\n \"lan-disconnect\": 983833,\n \"lan-pending\": 983834,\n \"language-c\": 984689,\n \"language-cpp\": 984690,\n \"language-csharp\": 983835,\n \"language-css3\": 983836,\n \"language-fortran\": 987674,\n \"language-go\": 985043,\n \"language-haskell\": 986258,\n \"language-html5\": 983837,\n \"language-java\": 985911,\n \"language-javascript\": 983838,\n \"language-kotlin\": 987673,\n \"language-lua\": 985265,\n \"language-markdown\": 983892,\n \"language-markdown-outline\": 986971,\n \"language-php\": 983839,\n \"language-python\": 983840,\n \"language-r\": 985044,\n \"language-ruby\": 986413,\n \"language-ruby-on-rails\": 985807,\n \"language-rust\": 988695,\n \"language-swift\": 984805,\n \"language-typescript\": 984806,\n \"language-xaml\": 984691,\n \"laptop\": 983842,\n \"laptop-off\": 984807,\n \"laravel\": 985808,\n \"laser-pointer\": 988292,\n \"lasso\": 986883,\n \"lastpass\": 984134,\n \"latitude\": 986967,\n \"launch\": 983847,\n \"lava-lamp\": 985045,\n \"layers\": 983848,\n \"layers-edit\": 989330,\n \"layers-minus\": 986700,\n \"layers-off\": 983849,\n \"layers-off-outline\": 985597,\n \"layers-outline\": 985598,\n \"layers-plus\": 986701,\n \"layers-remove\": 986702,\n \"layers-search\": 987654,\n \"layers-search-outline\": 987655,\n \"layers-triple\": 986968,\n \"layers-triple-outline\": 986969,\n \"lead-pencil\": 984655,\n \"leaf\": 983850,\n \"leaf-circle\": 989445,\n \"leaf-circle-outline\": 989446,\n \"leaf-maple\": 986259,\n \"leaf-maple-off\": 987866,\n \"leaf-off\": 987865,\n \"leak\": 986583,\n \"leak-off\": 986584,\n \"led-off\": 983851,\n \"led-on\": 983852,\n \"led-outline\": 983853,\n \"led-strip\": 985046,\n \"led-strip-variant\": 987217,\n \"led-variant-off\": 983854,\n \"led-variant-on\": 983855,\n \"led-variant-outline\": 983856,\n \"leek\": 987517,\n \"less-than\": 985468,\n \"less-than-or-equal\": 985469,\n \"library\": 983857,\n \"library-shelves\": 986025,\n \"license\": 987075,\n \"lifebuoy\": 985214,\n \"light-flood-down\": 989575,\n \"light-flood-up\": 989576,\n \"light-recessed\": 989083,\n \"light-switch\": 985470,\n \"lightbulb\": 983861,\n \"lightbulb-auto\": 989184,\n \"lightbulb-auto-outline\": 989185,\n \"lightbulb-cfl\": 987656,\n \"lightbulb-cfl-off\": 987657,\n \"lightbulb-cfl-spiral\": 987765,\n \"lightbulb-cfl-spiral-off\": 987843,\n \"lightbulb-fluorescent-tube\": 989188,\n \"lightbulb-fluorescent-tube-outline\": 989189,\n \"lightbulb-group\": 987731,\n \"lightbulb-group-off\": 987853,\n \"lightbulb-group-off-outline\": 987854,\n \"lightbulb-group-outline\": 987732,\n \"lightbulb-multiple\": 987733,\n \"lightbulb-multiple-off\": 987855,\n \"lightbulb-multiple-off-outline\": 987856,\n \"lightbulb-multiple-outline\": 987734,\n \"lightbulb-off\": 986703,\n \"lightbulb-off-outline\": 986704,\n \"lightbulb-on\": 984808,\n \"lightbulb-on-outline\": 984809,\n \"lightbulb-outline\": 983862,\n \"lightbulb-spot\": 989172,\n \"lightbulb-spot-off\": 989173,\n \"lightbulb-variant\": 989186,\n \"lightbulb-variant-outline\": 989187,\n \"lighthouse\": 985599,\n \"lighthouse-on\": 985600,\n \"lightning-bolt\": 988171,\n \"lightning-bolt-circle\": 985120,\n \"lightning-bolt-outline\": 988172,\n \"line-scan\": 984612,\n \"lingerie\": 988278,\n \"link\": 983863,\n \"link-box\": 986394,\n \"link-box-outline\": 986395,\n \"link-box-variant\": 986396,\n \"link-box-variant-outline\": 986397,\n \"link-lock\": 987322,\n \"link-off\": 983864,\n \"link-plus\": 986260,\n \"link-variant\": 983865,\n \"link-variant-minus\": 987391,\n \"link-variant-off\": 983866,\n \"link-variant-plus\": 987392,\n \"link-variant-remove\": 987393,\n \"linkedin\": 983867,\n \"linux\": 983869,\n \"linux-mint\": 985325,\n \"lipstick\": 988085,\n \"liquid-spot\": 989222,\n \"liquor\": 989470,\n \"list-status\": 988587,\n \"litecoin\": 985697,\n \"loading\": 984946,\n \"location-enter\": 987076,\n \"location-exit\": 987077,\n \"lock\": 983870,\n \"lock-alert\": 985326,\n \"lock-alert-outline\": 988625,\n \"lock-check\": 988058,\n \"lock-check-outline\": 988840,\n \"lock-clock\": 985471,\n \"lock-minus\": 988841,\n \"lock-minus-outline\": 988842,\n \"lock-off\": 988785,\n \"lock-off-outline\": 988786,\n \"lock-open\": 983871,\n \"lock-open-alert\": 988059,\n \"lock-open-alert-outline\": 988626,\n \"lock-open-check\": 988060,\n \"lock-open-check-outline\": 988843,\n \"lock-open-minus\": 988844,\n \"lock-open-minus-outline\": 988845,\n \"lock-open-outline\": 983872,\n \"lock-open-plus\": 988846,\n \"lock-open-plus-outline\": 988847,\n \"lock-open-remove\": 988848,\n \"lock-open-remove-outline\": 988849,\n \"lock-open-variant\": 987078,\n \"lock-open-variant-outline\": 987079,\n \"lock-outline\": 983873,\n \"lock-pattern\": 984810,\n \"lock-plus\": 984571,\n \"lock-plus-outline\": 988850,\n \"lock-question\": 985327,\n \"lock-remove\": 988851,\n \"lock-remove-outline\": 988852,\n \"lock-reset\": 984947,\n \"lock-smart\": 985266,\n \"locker\": 985047,\n \"locker-multiple\": 985048,\n \"login\": 983874,\n \"login-variant\": 984572,\n \"logout\": 983875,\n \"logout-variant\": 984573,\n \"longitude\": 986970,\n \"looks\": 983876,\n \"lotion\": 988546,\n \"lotion-outline\": 988547,\n \"lotion-plus\": 988548,\n \"lotion-plus-outline\": 988549,\n \"loupe\": 983877,\n \"lumx\": 983878,\n \"lungs\": 987268,\n \"mace\": 989251,\n \"magazine-pistol\": 983844,\n \"magazine-rifle\": 983843,\n \"magic-staff\": 989252,\n \"magnet\": 983879,\n \"magnet-on\": 983880,\n \"magnify\": 983881,\n \"magnify-close\": 985472,\n \"magnify-expand\": 989300,\n \"magnify-minus\": 983882,\n \"magnify-minus-cursor\": 985698,\n \"magnify-minus-outline\": 984812,\n \"magnify-plus\": 983883,\n \"magnify-plus-cursor\": 985699,\n \"magnify-plus-outline\": 984813,\n \"magnify-remove-cursor\": 987660,\n \"magnify-remove-outline\": 987661,\n \"magnify-scan\": 987766,\n \"mail\": 986811,\n \"mailbox\": 984814,\n \"mailbox-open\": 986504,\n \"mailbox-open-outline\": 986505,\n \"mailbox-open-up\": 986506,\n \"mailbox-open-up-outline\": 986507,\n \"mailbox-outline\": 986508,\n \"mailbox-up\": 986509,\n \"mailbox-up-outline\": 986510,\n \"manjaro\": 988682,\n \"map\": 983885,\n \"map-check\": 986812,\n \"map-check-outline\": 986813,\n \"map-clock\": 986398,\n \"map-clock-outline\": 986399,\n \"map-legend\": 985601,\n \"map-marker\": 983886,\n \"map-marker-account\": 989411,\n \"map-marker-account-outline\": 989412,\n \"map-marker-alert\": 986885,\n \"map-marker-alert-outline\": 986886,\n \"map-marker-check\": 986261,\n \"map-marker-check-outline\": 987899,\n \"map-marker-circle\": 983887,\n \"map-marker-distance\": 985328,\n \"map-marker-down\": 987394,\n \"map-marker-left\": 987867,\n \"map-marker-left-outline\": 987869,\n \"map-marker-minus\": 984656,\n \"map-marker-minus-outline\": 987897,\n \"map-marker-multiple\": 983888,\n \"map-marker-multiple-outline\": 987767,\n \"map-marker-off\": 983889,\n \"map-marker-off-outline\": 987901,\n \"map-marker-outline\": 985049,\n \"map-marker-path\": 986400,\n \"map-marker-plus\": 984657,\n \"map-marker-plus-outline\": 987896,\n \"map-marker-question\": 986887,\n \"map-marker-question-outline\": 986888,\n \"map-marker-radius\": 983890,\n \"map-marker-radius-outline\": 987900,\n \"map-marker-remove\": 986889,\n \"map-marker-remove-outline\": 987898,\n \"map-marker-remove-variant\": 986890,\n \"map-marker-right\": 987868,\n \"map-marker-right-outline\": 987870,\n \"map-marker-star\": 988680,\n \"map-marker-star-outline\": 988681,\n \"map-marker-up\": 987395,\n \"map-minus\": 985473,\n \"map-outline\": 985474,\n \"map-plus\": 985475,\n \"map-search\": 985476,\n \"map-search-outline\": 985477,\n \"mapbox\": 986026,\n \"margin\": 983891,\n \"marker\": 984658,\n \"marker-cancel\": 986585,\n \"marker-check\": 983893,\n \"mastodon\": 985809,\n \"material-design\": 985478,\n \"material-ui\": 983895,\n \"math-compass\": 983896,\n \"math-cos\": 986262,\n \"math-integral\": 987080,\n \"math-integral-box\": 987081,\n \"math-log\": 987269,\n \"math-norm\": 987082,\n \"math-norm-box\": 987083,\n \"math-sin\": 986263,\n \"math-tan\": 986264,\n \"matrix\": 984616,\n \"medal\": 985479,\n \"medal-outline\": 987942,\n \"medical-bag\": 984815,\n \"meditation\": 987515,\n \"memory\": 983899,\n \"menorah\": 989140,\n \"menorah-fire\": 989141,\n \"menu\": 983900,\n \"menu-down\": 983901,\n \"menu-down-outline\": 984758,\n \"menu-left\": 983902,\n \"menu-left-outline\": 985602,\n \"menu-open\": 986027,\n \"menu-right\": 983903,\n \"menu-right-outline\": 985603,\n \"menu-swap\": 985700,\n \"menu-swap-outline\": 985701,\n \"menu-up\": 983904,\n \"menu-up-outline\": 984759,\n \"merge\": 986972,\n \"message\": 983905,\n \"message-alert\": 983906,\n \"message-alert-outline\": 985604,\n \"message-arrow-left\": 987890,\n \"message-arrow-left-outline\": 987891,\n \"message-arrow-right\": 987892,\n \"message-arrow-right-outline\": 987893,\n \"message-badge\": 989505,\n \"message-badge-outline\": 989506,\n \"message-bookmark\": 988588,\n \"message-bookmark-outline\": 988589,\n \"message-bulleted\": 984738,\n \"message-bulleted-off\": 984739,\n \"message-cog\": 984817,\n \"message-cog-outline\": 987506,\n \"message-draw\": 983907,\n \"message-flash\": 988585,\n \"message-flash-outline\": 988586,\n \"message-image\": 983908,\n \"message-image-outline\": 987500,\n \"message-lock\": 987084,\n \"message-lock-outline\": 987501,\n \"message-minus\": 987502,\n \"message-minus-outline\": 987503,\n \"message-off\": 988749,\n \"message-off-outline\": 988750,\n \"message-outline\": 983909,\n \"message-plus\": 984659,\n \"message-plus-outline\": 987323,\n \"message-processing\": 983910,\n \"message-processing-outline\": 987504,\n \"message-question\": 988986,\n \"message-question-outline\": 988987,\n \"message-reply\": 983911,\n \"message-reply-outline\": 988989,\n \"message-reply-text\": 983912,\n \"message-reply-text-outline\": 988990,\n \"message-settings\": 984816,\n \"message-settings-outline\": 987505,\n \"message-star\": 984730,\n \"message-star-outline\": 987728,\n \"message-text\": 983913,\n \"message-text-clock\": 987507,\n \"message-text-clock-outline\": 987508,\n \"message-text-lock\": 987085,\n \"message-text-lock-outline\": 987509,\n \"message-text-outline\": 983914,\n \"message-video\": 983915,\n \"meteor\": 984617,\n \"metronome\": 985050,\n \"metronome-tick\": 985051,\n \"micro-sd\": 985052,\n \"microphone\": 983916,\n \"microphone-minus\": 985267,\n \"microphone-off\": 983917,\n \"microphone-outline\": 983918,\n \"microphone-plus\": 985268,\n \"microphone-question\": 989577,\n \"microphone-question-outline\": 989578,\n \"microphone-settings\": 983919,\n \"microphone-variant\": 983920,\n \"microphone-variant-off\": 983921,\n \"microscope\": 984660,\n \"microsoft\": 983922,\n \"microsoft-access\": 988046,\n \"microsoft-azure\": 985093,\n \"microsoft-azure-devops\": 987093,\n \"microsoft-bing\": 983204,\n \"microsoft-dynamics-365\": 985480,\n \"microsoft-edge\": 983529,\n \"microsoft-excel\": 988047,\n \"microsoft-internet-explorer\": 983808,\n \"microsoft-office\": 984006,\n \"microsoft-onedrive\": 984010,\n \"microsoft-onenote\": 984903,\n \"microsoft-outlook\": 986402,\n \"microsoft-powerpoint\": 988048,\n \"microsoft-sharepoint\": 988049,\n \"microsoft-teams\": 983739,\n \"microsoft-visual-studio\": 984592,\n \"microsoft-visual-studio-code\": 985630,\n \"microsoft-windows\": 984499,\n \"microsoft-windows-classic\": 985633,\n \"microsoft-word\": 988050,\n \"microsoft-xbox\": 984505,\n \"microsoft-xbox-controller\": 984506,\n \"microsoft-xbox-controller-battery-alert\": 984907,\n \"microsoft-xbox-controller-battery-charging\": 985634,\n \"microsoft-xbox-controller-battery-empty\": 984908,\n \"microsoft-xbox-controller-battery-full\": 984909,\n \"microsoft-xbox-controller-battery-low\": 984910,\n \"microsoft-xbox-controller-battery-medium\": 984911,\n \"microsoft-xbox-controller-battery-unknown\": 984912,\n \"microsoft-xbox-controller-menu\": 986735,\n \"microsoft-xbox-controller-off\": 984507,\n \"microsoft-xbox-controller-view\": 986736,\n \"microwave\": 986265,\n \"microwave-off\": 988195,\n \"middleware\": 986973,\n \"middleware-outline\": 986974,\n \"midi\": 985329,\n \"midi-port\": 985330,\n \"mine\": 986586,\n \"minecraft\": 983923,\n \"mini-sd\": 985605,\n \"minidisc\": 985606,\n \"minus\": 983924,\n \"minus-box\": 983925,\n \"minus-box-multiple\": 987457,\n \"minus-box-multiple-outline\": 987458,\n \"minus-box-outline\": 984818,\n \"minus-circle\": 983926,\n \"minus-circle-multiple\": 983898,\n \"minus-circle-multiple-outline\": 985811,\n \"minus-circle-off\": 988249,\n \"minus-circle-off-outline\": 988250,\n \"minus-circle-outline\": 983927,\n \"minus-network\": 983928,\n \"minus-network-outline\": 986266,\n \"minus-thick\": 988729,\n \"mirror\": 987645,\n \"mirror-rectangle\": 989087,\n \"mirror-variant\": 989088,\n \"mixed-martial-arts\": 986511,\n \"mixed-reality\": 985215,\n \"molecule\": 986028,\n \"molecule-co\": 987902,\n \"molecule-co2\": 985060,\n \"monitor\": 983929,\n \"monitor-cellphone\": 985481,\n \"monitor-cellphone-star\": 985482,\n \"monitor-dashboard\": 985607,\n \"monitor-edit\": 987846,\n \"monitor-eye\": 988084,\n \"monitor-lock\": 986587,\n \"monitor-multiple\": 983930,\n \"monitor-off\": 986512,\n \"monitor-screenshot\": 986705,\n \"monitor-share\": 988291,\n \"monitor-shimmer\": 987396,\n \"monitor-small\": 989302,\n \"monitor-speaker\": 986975,\n \"monitor-speaker-off\": 986976,\n \"monitor-star\": 986588,\n \"moon-first-quarter\": 986977,\n \"moon-full\": 986978,\n \"moon-last-quarter\": 986979,\n \"moon-new\": 986980,\n \"moon-waning-crescent\": 986981,\n \"moon-waning-gibbous\": 986982,\n \"moon-waxing-crescent\": 986983,\n \"moon-waxing-gibbous\": 986984,\n \"moped\": 987270,\n \"moped-electric\": 988599,\n \"moped-electric-outline\": 988600,\n \"moped-outline\": 988601,\n \"more\": 983931,\n \"mortar-pestle\": 989000,\n \"mortar-pestle-plus\": 984049,\n \"mosque\": 989223,\n \"mother-heart\": 987924,\n \"mother-nurse\": 986401,\n \"motion\": 988594,\n \"motion-outline\": 988595,\n \"motion-pause\": 988560,\n \"motion-pause-outline\": 988562,\n \"motion-play\": 988559,\n \"motion-play-outline\": 988561,\n \"motion-sensor\": 986513,\n \"motion-sensor-off\": 988213,\n \"motorbike\": 983932,\n \"motorbike-electric\": 988602,\n \"mouse\": 983933,\n \"mouse-bluetooth\": 985483,\n \"mouse-move-down\": 988496,\n \"mouse-move-up\": 988497,\n \"mouse-move-vertical\": 988498,\n \"mouse-off\": 983934,\n \"mouse-variant\": 983935,\n \"mouse-variant-off\": 983936,\n \"move-resize\": 984661,\n \"move-resize-variant\": 984662,\n \"movie\": 983937,\n \"movie-check\": 988915,\n \"movie-check-outline\": 988916,\n \"movie-cog\": 988917,\n \"movie-cog-outline\": 988918,\n \"movie-edit\": 987426,\n \"movie-edit-outline\": 987427,\n \"movie-filter\": 987428,\n \"movie-filter-outline\": 987429,\n \"movie-minus\": 988919,\n \"movie-minus-outline\": 988920,\n \"movie-off\": 988921,\n \"movie-off-outline\": 988922,\n \"movie-open\": 987086,\n \"movie-open-check\": 988923,\n \"movie-open-check-outline\": 988924,\n \"movie-open-cog\": 988925,\n \"movie-open-cog-outline\": 988926,\n \"movie-open-edit\": 988927,\n \"movie-open-edit-outline\": 988928,\n \"movie-open-minus\": 988929,\n \"movie-open-minus-outline\": 988930,\n \"movie-open-off\": 988931,\n \"movie-open-off-outline\": 988932,\n \"movie-open-outline\": 987087,\n \"movie-open-play\": 988933,\n \"movie-open-play-outline\": 988934,\n \"movie-open-plus\": 988935,\n \"movie-open-plus-outline\": 988936,\n \"movie-open-remove\": 988937,\n \"movie-open-remove-outline\": 988938,\n \"movie-open-settings\": 988939,\n \"movie-open-settings-outline\": 988940,\n \"movie-open-star\": 988941,\n \"movie-open-star-outline\": 988942,\n \"movie-outline\": 986589,\n \"movie-play\": 988943,\n \"movie-play-outline\": 988944,\n \"movie-plus\": 988945,\n \"movie-plus-outline\": 988946,\n \"movie-remove\": 988947,\n \"movie-remove-outline\": 988948,\n \"movie-roll\": 985054,\n \"movie-search\": 987602,\n \"movie-search-outline\": 987603,\n \"movie-settings\": 988949,\n \"movie-settings-outline\": 988950,\n \"movie-star\": 988951,\n \"movie-star-outline\": 988952,\n \"mower\": 988783,\n \"mower-bag\": 988784,\n \"muffin\": 985484,\n \"multicast\": 989331,\n \"multiplication\": 983938,\n \"multiplication-box\": 983939,\n \"mushroom\": 985055,\n \"mushroom-off\": 988154,\n \"mushroom-off-outline\": 988155,\n \"mushroom-outline\": 985056,\n \"music\": 984922,\n \"music-accidental-double-flat\": 986985,\n \"music-accidental-double-sharp\": 986986,\n \"music-accidental-flat\": 986987,\n \"music-accidental-natural\": 986988,\n \"music-accidental-sharp\": 986989,\n \"music-box\": 983940,\n \"music-box-multiple\": 983859,\n \"music-box-multiple-outline\": 986884,\n \"music-box-outline\": 983941,\n \"music-circle\": 983942,\n \"music-circle-outline\": 985812,\n \"music-clef-alto\": 986990,\n \"music-clef-bass\": 986991,\n \"music-clef-treble\": 986992,\n \"music-note\": 983943,\n \"music-note-bluetooth\": 984574,\n \"music-note-bluetooth-off\": 984575,\n \"music-note-eighth\": 983944,\n \"music-note-eighth-dotted\": 986993,\n \"music-note-half\": 983945,\n \"music-note-half-dotted\": 986994,\n \"music-note-off\": 983946,\n \"music-note-off-outline\": 986995,\n \"music-note-outline\": 986996,\n \"music-note-plus\": 986590,\n \"music-note-quarter\": 983947,\n \"music-note-quarter-dotted\": 986997,\n \"music-note-sixteenth\": 983948,\n \"music-note-sixteenth-dotted\": 986998,\n \"music-note-whole\": 983949,\n \"music-note-whole-dotted\": 986999,\n \"music-off\": 984923,\n \"music-rest-eighth\": 987000,\n \"music-rest-half\": 987001,\n \"music-rest-quarter\": 987002,\n \"music-rest-sixteenth\": 987003,\n \"music-rest-whole\": 987004,\n \"mustache\": 988638,\n \"nail\": 986591,\n \"nas\": 985331,\n \"nativescript\": 985216,\n \"nature\": 983950,\n \"nature-people\": 983951,\n \"navigation\": 983952,\n \"navigation-outline\": 988679,\n \"navigation-variant\": 989424,\n \"navigation-variant-outline\": 989425,\n \"near-me\": 984525,\n \"necklace\": 986891,\n \"needle\": 983953,\n \"netflix\": 984902,\n \"network\": 984819,\n \"network-off\": 986267,\n \"network-off-outline\": 986268,\n \"network-outline\": 986269,\n \"network-strength-1\": 985332,\n \"network-strength-1-alert\": 985333,\n \"network-strength-2\": 985334,\n \"network-strength-2-alert\": 985335,\n \"network-strength-3\": 985336,\n \"network-strength-3-alert\": 985337,\n \"network-strength-4\": 985338,\n \"network-strength-4-alert\": 985339,\n \"network-strength-4-cog\": 989466,\n \"network-strength-off\": 985340,\n \"network-strength-off-outline\": 985341,\n \"network-strength-outline\": 985342,\n \"new-box\": 983956,\n \"newspaper\": 983957,\n \"newspaper-check\": 989507,\n \"newspaper-minus\": 986892,\n \"newspaper-plus\": 986893,\n \"newspaper-remove\": 989508,\n \"newspaper-variant\": 987137,\n \"newspaper-variant-multiple\": 987138,\n \"newspaper-variant-multiple-outline\": 987139,\n \"newspaper-variant-outline\": 987140,\n \"nfc\": 983958,\n \"nfc-search-variant\": 986707,\n \"nfc-tap\": 983959,\n \"nfc-variant\": 983960,\n \"nfc-variant-off\": 986708,\n \"ninja\": 984948,\n \"nintendo-game-boy\": 988051,\n \"nintendo-switch\": 985057,\n \"nintendo-wii\": 984491,\n \"nintendo-wiiu\": 984877,\n \"nix\": 987397,\n \"nodejs\": 983961,\n \"noodles\": 987518,\n \"not-equal\": 985485,\n \"not-equal-variant\": 985486,\n \"note\": 983962,\n \"note-alert\": 989053,\n \"note-alert-outline\": 989054,\n \"note-check\": 989055,\n \"note-check-outline\": 989056,\n \"note-edit\": 989057,\n \"note-edit-outline\": 989058,\n \"note-minus\": 988751,\n \"note-minus-outline\": 988752,\n \"note-multiple\": 984760,\n \"note-multiple-outline\": 984761,\n \"note-off\": 989059,\n \"note-off-outline\": 989060,\n \"note-outline\": 983963,\n \"note-plus\": 983964,\n \"note-plus-outline\": 983965,\n \"note-remove\": 988753,\n \"note-remove-outline\": 988754,\n \"note-search\": 988755,\n \"note-search-outline\": 988756,\n \"note-text\": 983966,\n \"note-text-outline\": 987607,\n \"notebook\": 985134,\n \"notebook-check\": 988405,\n \"notebook-check-outline\": 988406,\n \"notebook-edit\": 988391,\n \"notebook-edit-outline\": 988393,\n \"notebook-minus\": 988688,\n \"notebook-minus-outline\": 988689,\n \"notebook-multiple\": 986709,\n \"notebook-outline\": 986815,\n \"notebook-plus\": 988690,\n \"notebook-plus-outline\": 988691,\n \"notebook-remove\": 988692,\n \"notebook-remove-outline\": 988693,\n \"notification-clear-all\": 983967,\n \"npm\": 984823,\n \"nuke\": 984740,\n \"null\": 985058,\n \"numeric\": 983968,\n \"numeric-0\": 985913,\n \"numeric-0-box\": 983969,\n \"numeric-0-box-multiple\": 986894,\n \"numeric-0-box-multiple-outline\": 983970,\n \"numeric-0-box-outline\": 983971,\n \"numeric-0-circle\": 986270,\n \"numeric-0-circle-outline\": 986271,\n \"numeric-1\": 985914,\n \"numeric-1-box\": 983972,\n \"numeric-1-box-multiple\": 986895,\n \"numeric-1-box-multiple-outline\": 983973,\n \"numeric-1-box-outline\": 983974,\n \"numeric-1-circle\": 986272,\n \"numeric-1-circle-outline\": 986273,\n \"numeric-10\": 987113,\n \"numeric-10-box\": 987005,\n \"numeric-10-box-multiple\": 987114,\n \"numeric-10-box-multiple-outline\": 987115,\n \"numeric-10-box-outline\": 987006,\n \"numeric-10-circle\": 987116,\n \"numeric-10-circle-outline\": 987117,\n \"numeric-2\": 985915,\n \"numeric-2-box\": 983975,\n \"numeric-2-box-multiple\": 986896,\n \"numeric-2-box-multiple-outline\": 983976,\n \"numeric-2-box-outline\": 983977,\n \"numeric-2-circle\": 986274,\n \"numeric-2-circle-outline\": 986275,\n \"numeric-3\": 985916,\n \"numeric-3-box\": 983978,\n \"numeric-3-box-multiple\": 986897,\n \"numeric-3-box-multiple-outline\": 983979,\n \"numeric-3-box-outline\": 983980,\n \"numeric-3-circle\": 986276,\n \"numeric-3-circle-outline\": 986277,\n \"numeric-4\": 985917,\n \"numeric-4-box\": 983981,\n \"numeric-4-box-multiple\": 986898,\n \"numeric-4-box-multiple-outline\": 983986,\n \"numeric-4-box-outline\": 983982,\n \"numeric-4-circle\": 986278,\n \"numeric-4-circle-outline\": 986279,\n \"numeric-5\": 985918,\n \"numeric-5-box\": 983985,\n \"numeric-5-box-multiple\": 986899,\n \"numeric-5-box-multiple-outline\": 983983,\n \"numeric-5-box-outline\": 983984,\n \"numeric-5-circle\": 986280,\n \"numeric-5-circle-outline\": 986281,\n \"numeric-6\": 985919,\n \"numeric-6-box\": 983987,\n \"numeric-6-box-multiple\": 986900,\n \"numeric-6-box-multiple-outline\": 983988,\n \"numeric-6-box-outline\": 983989,\n \"numeric-6-circle\": 986282,\n \"numeric-6-circle-outline\": 986283,\n \"numeric-7\": 985920,\n \"numeric-7-box\": 983990,\n \"numeric-7-box-multiple\": 986901,\n \"numeric-7-box-multiple-outline\": 983991,\n \"numeric-7-box-outline\": 983992,\n \"numeric-7-circle\": 986284,\n \"numeric-7-circle-outline\": 986285,\n \"numeric-8\": 985921,\n \"numeric-8-box\": 983993,\n \"numeric-8-box-multiple\": 986902,\n \"numeric-8-box-multiple-outline\": 983994,\n \"numeric-8-box-outline\": 983995,\n \"numeric-8-circle\": 986286,\n \"numeric-8-circle-outline\": 986287,\n \"numeric-9\": 985922,\n \"numeric-9-box\": 983996,\n \"numeric-9-box-multiple\": 986903,\n \"numeric-9-box-multiple-outline\": 983997,\n \"numeric-9-box-outline\": 983998,\n \"numeric-9-circle\": 986288,\n \"numeric-9-circle-outline\": 986289,\n \"numeric-9-plus\": 987118,\n \"numeric-9-plus-box\": 983999,\n \"numeric-9-plus-box-multiple\": 986904,\n \"numeric-9-plus-box-multiple-outline\": 984000,\n \"numeric-9-plus-box-outline\": 984001,\n \"numeric-9-plus-circle\": 986290,\n \"numeric-9-plus-circle-outline\": 986291,\n \"numeric-negative-1\": 987218,\n \"numeric-positive-1\": 988619,\n \"nut\": 984824,\n \"nutrition\": 984002,\n \"nuxt\": 987398,\n \"oar\": 984700,\n \"ocarina\": 986592,\n \"oci\": 987881,\n \"ocr\": 987450,\n \"octagon\": 984003,\n \"octagon-outline\": 984004,\n \"octagram\": 984825,\n \"octagram-outline\": 984949,\n \"octahedron\": 989520,\n \"octahedron-off\": 989521,\n \"odnoklassniki\": 984005,\n \"offer\": 987675,\n \"office-building\": 985489,\n \"office-building-cog\": 989513,\n \"office-building-cog-outline\": 989514,\n \"office-building-marker\": 988448,\n \"office-building-marker-outline\": 988449,\n \"office-building-outline\": 988447,\n \"oil\": 984007,\n \"oil-lamp\": 986905,\n \"oil-level\": 987219,\n \"oil-temperature\": 987128,\n \"om\": 985459,\n \"omega\": 984009,\n \"one-up\": 986029,\n \"onepassword\": 985217,\n \"opacity\": 984524,\n \"open-in-app\": 984011,\n \"open-in-new\": 984012,\n \"open-source-initiative\": 986030,\n \"openid\": 984013,\n \"opera\": 984014,\n \"orbit\": 983064,\n \"orbit-variant\": 988635,\n \"order-alphabetical-ascending\": 983565,\n \"order-alphabetical-descending\": 986375,\n \"order-bool-ascending\": 983742,\n \"order-bool-ascending-variant\": 985487,\n \"order-bool-descending\": 988036,\n \"order-bool-descending-variant\": 985488,\n \"order-numeric-ascending\": 984389,\n \"order-numeric-descending\": 984390,\n \"origin\": 985923,\n \"ornament\": 984015,\n \"ornament-variant\": 984016,\n \"outdoor-lamp\": 987220,\n \"overscan\": 987141,\n \"owl\": 984018,\n \"pac-man\": 986031,\n \"package\": 984019,\n \"package-down\": 984020,\n \"package-up\": 984021,\n \"package-variant\": 984022,\n \"package-variant-closed\": 984023,\n \"page-first\": 984576,\n \"page-last\": 984577,\n \"page-layout-body\": 984826,\n \"page-layout-footer\": 984827,\n \"page-layout-header\": 984828,\n \"page-layout-header-footer\": 987007,\n \"page-layout-sidebar-left\": 984829,\n \"page-layout-sidebar-right\": 984830,\n \"page-next\": 986032,\n \"page-next-outline\": 986033,\n \"page-previous\": 986034,\n \"page-previous-outline\": 986035,\n \"pail\": 988183,\n \"pail-minus\": 988215,\n \"pail-minus-outline\": 988220,\n \"pail-off\": 988217,\n \"pail-off-outline\": 988222,\n \"pail-outline\": 988218,\n \"pail-plus\": 988214,\n \"pail-plus-outline\": 988219,\n \"pail-remove\": 988216,\n \"pail-remove-outline\": 988221,\n \"palette\": 984024,\n \"palette-advanced\": 984025,\n \"palette-outline\": 986636,\n \"palette-swatch\": 985269,\n \"palette-swatch-outline\": 987996,\n \"palette-swatch-variant\": 989530,\n \"palm-tree\": 987221,\n \"pan\": 986036,\n \"pan-bottom-left\": 986037,\n \"pan-bottom-right\": 986038,\n \"pan-down\": 986039,\n \"pan-horizontal\": 986040,\n \"pan-left\": 986041,\n \"pan-right\": 986042,\n \"pan-top-left\": 986043,\n \"pan-top-right\": 986044,\n \"pan-up\": 986045,\n \"pan-vertical\": 986046,\n \"panda\": 984026,\n \"pandora\": 984027,\n \"panorama\": 984028,\n \"panorama-fisheye\": 984029,\n \"panorama-horizontal\": 989480,\n \"panorama-horizontal-outline\": 984030,\n \"panorama-outline\": 989580,\n \"panorama-sphere\": 989581,\n \"panorama-sphere-outline\": 989582,\n \"panorama-variant\": 989583,\n \"panorama-variant-outline\": 989584,\n \"panorama-vertical\": 989481,\n \"panorama-vertical-outline\": 984031,\n \"panorama-wide-angle\": 989535,\n \"panorama-wide-angle-outline\": 984032,\n \"paper-cut-vertical\": 984033,\n \"paper-roll\": 987479,\n \"paper-roll-outline\": 987480,\n \"paperclip\": 984034,\n \"parachute\": 986292,\n \"parachute-outline\": 986293,\n \"paragliding\": 988997,\n \"parking\": 984035,\n \"party-popper\": 987222,\n \"passport\": 985059,\n \"passport-biometric\": 986593,\n \"pasta\": 987488,\n \"patio-heater\": 987008,\n \"patreon\": 985218,\n \"pause\": 984036,\n \"pause-circle\": 984037,\n \"pause-circle-outline\": 984038,\n \"pause-octagon\": 984039,\n \"pause-octagon-outline\": 984040,\n \"paw\": 984041,\n \"paw-off\": 984663,\n \"paw-off-outline\": 988790,\n \"paw-outline\": 988789,\n \"peace\": 985220,\n \"peanut\": 987132,\n \"peanut-off\": 987133,\n \"peanut-off-outline\": 987135,\n \"peanut-outline\": 987134,\n \"pen\": 984042,\n \"pen-lock\": 986594,\n \"pen-minus\": 986595,\n \"pen-off\": 986596,\n \"pen-plus\": 986597,\n \"pen-remove\": 986598,\n \"pencil\": 984043,\n \"pencil-box\": 984044,\n \"pencil-box-multiple\": 987460,\n \"pencil-box-multiple-outline\": 987461,\n \"pencil-box-outline\": 984045,\n \"pencil-circle\": 984831,\n \"pencil-circle-outline\": 984950,\n \"pencil-lock\": 984046,\n \"pencil-lock-outline\": 986599,\n \"pencil-minus\": 986600,\n \"pencil-minus-outline\": 986601,\n \"pencil-off\": 984047,\n \"pencil-off-outline\": 986602,\n \"pencil-outline\": 986294,\n \"pencil-plus\": 986603,\n \"pencil-plus-outline\": 986604,\n \"pencil-remove\": 986605,\n \"pencil-remove-outline\": 986606,\n \"pencil-ruler\": 987987,\n \"penguin\": 986816,\n \"pentagon\": 984833,\n \"pentagon-outline\": 984832,\n \"pentagram\": 988775,\n \"percent\": 984048,\n \"percent-outline\": 987768,\n \"periodic-table\": 985270,\n \"perspective-less\": 986403,\n \"perspective-more\": 986404,\n \"ph\": 989125,\n \"phone\": 984050,\n \"phone-alert\": 986906,\n \"phone-alert-outline\": 987534,\n \"phone-bluetooth\": 984051,\n \"phone-bluetooth-outline\": 987535,\n \"phone-cancel\": 987324,\n \"phone-cancel-outline\": 987536,\n \"phone-check\": 987561,\n \"phone-check-outline\": 987562,\n \"phone-classic\": 984578,\n \"phone-classic-off\": 987769,\n \"phone-dial\": 988505,\n \"phone-dial-outline\": 988506,\n \"phone-forward\": 984052,\n \"phone-forward-outline\": 987537,\n \"phone-hangup\": 984053,\n \"phone-hangup-outline\": 987538,\n \"phone-in-talk\": 984054,\n \"phone-in-talk-outline\": 987522,\n \"phone-incoming\": 984055,\n \"phone-incoming-outline\": 987539,\n \"phone-lock\": 984056,\n \"phone-lock-outline\": 987540,\n \"phone-log\": 984057,\n \"phone-log-outline\": 987541,\n \"phone-message\": 987542,\n \"phone-message-outline\": 987543,\n \"phone-minus\": 984664,\n \"phone-minus-outline\": 987544,\n \"phone-missed\": 984058,\n \"phone-missed-outline\": 987557,\n \"phone-off\": 986607,\n \"phone-off-outline\": 987558,\n \"phone-outgoing\": 984059,\n \"phone-outgoing-outline\": 987545,\n \"phone-outline\": 986608,\n \"phone-paused\": 984060,\n \"phone-paused-outline\": 987546,\n \"phone-plus\": 984665,\n \"phone-plus-outline\": 987547,\n \"phone-refresh\": 989587,\n \"phone-refresh-outline\": 989588,\n \"phone-remove\": 988463,\n \"phone-remove-outline\": 988464,\n \"phone-return\": 985135,\n \"phone-return-outline\": 987548,\n \"phone-ring\": 987563,\n \"phone-ring-outline\": 987564,\n \"phone-rotate-landscape\": 985221,\n \"phone-rotate-portrait\": 985222,\n \"phone-settings\": 984061,\n \"phone-settings-outline\": 987549,\n \"phone-sync\": 989589,\n \"phone-sync-outline\": 989590,\n \"phone-voip\": 984062,\n \"pi\": 984063,\n \"pi-box\": 984064,\n \"pi-hole\": 986609,\n \"piano\": 984701,\n \"piano-off\": 984728,\n \"pickaxe\": 985271,\n \"picture-in-picture-bottom-right\": 986711,\n \"picture-in-picture-bottom-right-outline\": 986712,\n \"picture-in-picture-top-right\": 986713,\n \"picture-in-picture-top-right-outline\": 986714,\n \"pier\": 985223,\n \"pier-crane\": 985224,\n \"pig\": 984065,\n \"pig-variant\": 987142,\n \"pig-variant-outline\": 988792,\n \"piggy-bank\": 987143,\n \"piggy-bank-outline\": 988793,\n \"pill\": 984066,\n \"pillar\": 984834,\n \"pin\": 984067,\n \"pin-off\": 984068,\n \"pin-off-outline\": 985392,\n \"pin-outline\": 985393,\n \"pine-tree\": 984069,\n \"pine-tree-box\": 984070,\n \"pine-tree-fire\": 988186,\n \"pinterest\": 984071,\n \"pinwheel\": 985813,\n \"pinwheel-outline\": 985814,\n \"pipe\": 985061,\n \"pipe-disconnected\": 985062,\n \"pipe-leak\": 985225,\n \"pipe-valve\": 989261,\n \"pipe-wrench\": 987988,\n \"pirate\": 985608,\n \"pistol\": 984835,\n \"piston\": 985226,\n \"pitchfork\": 988499,\n \"pizza\": 984073,\n \"play\": 984074,\n \"play-box\": 987770,\n \"play-box-multiple\": 986393,\n \"play-box-multiple-outline\": 988134,\n \"play-box-outline\": 984075,\n \"play-circle\": 984076,\n \"play-circle-outline\": 984077,\n \"play-network\": 985227,\n \"play-network-outline\": 986295,\n \"play-outline\": 986907,\n \"play-pause\": 984078,\n \"play-protected-content\": 984079,\n \"play-speed\": 985343,\n \"playlist-check\": 984519,\n \"playlist-edit\": 985344,\n \"playlist-minus\": 984080,\n \"playlist-music\": 986296,\n \"playlist-music-outline\": 986297,\n \"playlist-play\": 984081,\n \"playlist-plus\": 984082,\n \"playlist-remove\": 984083,\n \"playlist-star\": 986610,\n \"plex\": 984762,\n \"pliers\": 989604,\n \"plus\": 984085,\n \"plus-box\": 984086,\n \"plus-box-multiple\": 983860,\n \"plus-box-multiple-outline\": 987459,\n \"plus-box-outline\": 984836,\n \"plus-circle\": 984087,\n \"plus-circle-multiple\": 983884,\n \"plus-circle-multiple-outline\": 984088,\n \"plus-circle-outline\": 984089,\n \"plus-minus\": 985490,\n \"plus-minus-box\": 985491,\n \"plus-minus-variant\": 988361,\n \"plus-network\": 984090,\n \"plus-network-outline\": 986298,\n \"plus-outline\": 984837,\n \"plus-thick\": 987628,\n \"podcast\": 985492,\n \"podium\": 986405,\n \"podium-bronze\": 986406,\n \"podium-gold\": 986407,\n \"podium-silver\": 986408,\n \"point-of-sale\": 986514,\n \"pokeball\": 984093,\n \"pokemon-go\": 985609,\n \"poker-chip\": 985136,\n \"polaroid\": 984094,\n \"police-badge\": 987495,\n \"police-badge-outline\": 987496,\n \"police-station\": 989241,\n \"poll\": 984095,\n \"polo\": 988355,\n \"polymer\": 984097,\n \"pool\": 984582,\n \"popcorn\": 984098,\n \"post\": 987144,\n \"post-outline\": 987145,\n \"postage-stamp\": 986299,\n \"pot\": 983781,\n \"pot-mix\": 984667,\n \"pot-mix-outline\": 984695,\n \"pot-outline\": 983807,\n \"pot-steam\": 984666,\n \"pot-steam-outline\": 983846,\n \"pound\": 984099,\n \"pound-box\": 984100,\n \"pound-box-outline\": 987519,\n \"power\": 984101,\n \"power-cycle\": 985345,\n \"power-off\": 985346,\n \"power-on\": 985347,\n \"power-plug\": 984741,\n \"power-plug-off\": 984742,\n \"power-plug-off-outline\": 988196,\n \"power-plug-outline\": 988197,\n \"power-settings\": 984102,\n \"power-sleep\": 985348,\n \"power-socket\": 984103,\n \"power-socket-au\": 985349,\n \"power-socket-ch\": 987059,\n \"power-socket-de\": 987399,\n \"power-socket-eu\": 985063,\n \"power-socket-fr\": 987400,\n \"power-socket-it\": 988415,\n \"power-socket-jp\": 987401,\n \"power-socket-uk\": 985064,\n \"power-socket-us\": 985065,\n \"power-standby\": 985350,\n \"powershell\": 985610,\n \"prescription\": 984838,\n \"presentation\": 984104,\n \"presentation-play\": 984105,\n \"pretzel\": 988514,\n \"printer\": 984106,\n \"printer-3d\": 984107,\n \"printer-3d-nozzle\": 986715,\n \"printer-3d-nozzle-alert\": 987584,\n \"printer-3d-nozzle-alert-outline\": 987585,\n \"printer-3d-nozzle-heat\": 989368,\n \"printer-3d-nozzle-heat-outline\": 989369,\n \"printer-3d-nozzle-outline\": 986716,\n \"printer-alert\": 984108,\n \"printer-check\": 987462,\n \"printer-eye\": 988248,\n \"printer-off\": 986717,\n \"printer-off-outline\": 989061,\n \"printer-outline\": 989062,\n \"printer-pos\": 987223,\n \"printer-search\": 988247,\n \"printer-settings\": 984839,\n \"printer-wireless\": 985611,\n \"priority-high\": 984579,\n \"priority-low\": 984580,\n \"professional-hexagon\": 984109,\n \"progress-alert\": 986300,\n \"progress-check\": 985493,\n \"progress-clock\": 985494,\n \"progress-close\": 987402,\n \"progress-download\": 985495,\n \"progress-pencil\": 989063,\n \"progress-question\": 988450,\n \"progress-star\": 989064,\n \"progress-upload\": 985496,\n \"progress-wrench\": 986301,\n \"projector\": 984110,\n \"projector-screen\": 984111,\n \"projector-screen-off\": 989197,\n \"projector-screen-off-outline\": 989198,\n \"projector-screen-outline\": 988964,\n \"projector-screen-variant\": 989199,\n \"projector-screen-variant-off\": 989200,\n \"projector-screen-variant-off-outline\": 989201,\n \"projector-screen-variant-outline\": 989202,\n \"propane-tank\": 987991,\n \"propane-tank-outline\": 987992,\n \"protocol\": 987096,\n \"publish\": 984743,\n \"publish-off\": 989509,\n \"pulse\": 984112,\n \"pump\": 988162,\n \"pumpkin\": 986047,\n \"purse\": 986908,\n \"purse-outline\": 986909,\n \"puzzle\": 984113,\n \"puzzle-check\": 988198,\n \"puzzle-check-outline\": 988199,\n \"puzzle-edit\": 988371,\n \"puzzle-edit-outline\": 988377,\n \"puzzle-heart\": 988372,\n \"puzzle-heart-outline\": 988378,\n \"puzzle-minus\": 988369,\n \"puzzle-minus-outline\": 988375,\n \"puzzle-outline\": 985702,\n \"puzzle-plus\": 988368,\n \"puzzle-plus-outline\": 988374,\n \"puzzle-remove\": 988370,\n \"puzzle-remove-outline\": 988376,\n \"puzzle-star\": 988373,\n \"puzzle-star-outline\": 988379,\n \"pyramid\": 989522,\n \"pyramid-off\": 989523,\n \"qi\": 985497,\n \"qqchat\": 984581,\n \"qrcode\": 984114,\n \"qrcode-edit\": 985272,\n \"qrcode-minus\": 987532,\n \"qrcode-plus\": 987531,\n \"qrcode-remove\": 987533,\n \"qrcode-scan\": 984115,\n \"quadcopter\": 984116,\n \"quality-high\": 984117,\n \"quality-low\": 985612,\n \"quality-medium\": 985613,\n \"quora\": 986409,\n \"rabbit\": 985351,\n \"racing-helmet\": 986515,\n \"racquetball\": 986516,\n \"radar\": 984119,\n \"radiator\": 984120,\n \"radiator-disabled\": 985815,\n \"radiator-off\": 985816,\n \"radio\": 984121,\n \"radio-am\": 986302,\n \"radio-fm\": 986303,\n \"radio-handheld\": 984122,\n \"radio-off\": 987676,\n \"radio-tower\": 984123,\n \"radioactive\": 984124,\n \"radioactive-circle\": 989277,\n \"radioactive-circle-outline\": 989278,\n \"radioactive-off\": 986817,\n \"radiobox-blank\": 984125,\n \"radiobox-marked\": 984126,\n \"radiology-box\": 988357,\n \"radiology-box-outline\": 988358,\n \"radius\": 986304,\n \"radius-outline\": 986305,\n \"railroad-light\": 986910,\n \"rake\": 988484,\n \"raspberry-pi\": 984127,\n \"ray-end\": 984128,\n \"ray-end-arrow\": 984129,\n \"ray-start\": 984130,\n \"ray-start-arrow\": 984131,\n \"ray-start-end\": 984132,\n \"ray-start-vertex-end\": 988632,\n \"ray-vertex\": 984133,\n \"razor-double-edge\": 989591,\n \"razor-single-edge\": 989592,\n \"react\": 984840,\n \"read\": 984135,\n \"receipt\": 984137,\n \"record\": 984138,\n \"record-circle\": 986818,\n \"record-circle-outline\": 986819,\n \"record-player\": 985498,\n \"record-rec\": 984139,\n \"rectangle\": 986718,\n \"rectangle-outline\": 986719,\n \"recycle\": 984140,\n \"recycle-variant\": 988061,\n \"reddit\": 984141,\n \"redhat\": 987419,\n \"redo\": 984142,\n \"redo-variant\": 984143,\n \"reflect-horizontal\": 985614,\n \"reflect-vertical\": 985615,\n \"refresh\": 984144,\n \"refresh-auto\": 989426,\n \"refresh-circle\": 988023,\n \"regex\": 984145,\n \"registered-trademark\": 985703,\n \"reiterate\": 988552,\n \"relation-many-to-many\": 988310,\n \"relation-many-to-one\": 988311,\n \"relation-many-to-one-or-many\": 988312,\n \"relation-many-to-only-one\": 988313,\n \"relation-many-to-zero-or-many\": 988314,\n \"relation-many-to-zero-or-one\": 988315,\n \"relation-one-or-many-to-many\": 988316,\n \"relation-one-or-many-to-one\": 988317,\n \"relation-one-or-many-to-one-or-many\": 988318,\n \"relation-one-or-many-to-only-one\": 988319,\n \"relation-one-or-many-to-zero-or-many\": 988320,\n \"relation-one-or-many-to-zero-or-one\": 988321,\n \"relation-one-to-many\": 988322,\n \"relation-one-to-one\": 988323,\n \"relation-one-to-one-or-many\": 988324,\n \"relation-one-to-only-one\": 988325,\n \"relation-one-to-zero-or-many\": 988326,\n \"relation-one-to-zero-or-one\": 988327,\n \"relation-only-one-to-many\": 988328,\n \"relation-only-one-to-one\": 988329,\n \"relation-only-one-to-one-or-many\": 988330,\n \"relation-only-one-to-only-one\": 988331,\n \"relation-only-one-to-zero-or-many\": 988332,\n \"relation-only-one-to-zero-or-one\": 988333,\n \"relation-zero-or-many-to-many\": 988334,\n \"relation-zero-or-many-to-one\": 988335,\n \"relation-zero-or-many-to-one-or-many\": 988336,\n \"relation-zero-or-many-to-only-one\": 988337,\n \"relation-zero-or-many-to-zero-or-many\": 988338,\n \"relation-zero-or-many-to-zero-or-one\": 988339,\n \"relation-zero-or-one-to-many\": 988340,\n \"relation-zero-or-one-to-one\": 988341,\n \"relation-zero-or-one-to-one-or-many\": 988342,\n \"relation-zero-or-one-to-only-one\": 988343,\n \"relation-zero-or-one-to-zero-or-many\": 988344,\n \"relation-zero-or-one-to-zero-or-one\": 988345,\n \"relative-scale\": 984146,\n \"reload\": 984147,\n \"reload-alert\": 987403,\n \"reminder\": 985228,\n \"remote\": 984148,\n \"remote-desktop\": 985273,\n \"remote-off\": 986820,\n \"remote-tv\": 986821,\n \"remote-tv-off\": 986822,\n \"rename-box\": 984149,\n \"reorder-horizontal\": 984712,\n \"reorder-vertical\": 984713,\n \"repeat\": 984150,\n \"repeat-off\": 984151,\n \"repeat-once\": 984152,\n \"repeat-variant\": 984391,\n \"replay\": 984153,\n \"reply\": 984154,\n \"reply-all\": 984155,\n \"reply-all-outline\": 986911,\n \"reply-circle\": 987566,\n \"reply-outline\": 986912,\n \"reproduction\": 984156,\n \"resistor\": 985924,\n \"resistor-nodes\": 985925,\n \"resize\": 985704,\n \"resize-bottom-right\": 984157,\n \"responsive\": 984158,\n \"restart\": 984841,\n \"restart-alert\": 987404,\n \"restart-off\": 986517,\n \"restore\": 985499,\n \"restore-alert\": 987405,\n \"rewind\": 984159,\n \"rewind-10\": 986410,\n \"rewind-15\": 989510,\n \"rewind-30\": 986518,\n \"rewind-5\": 987641,\n \"rewind-60\": 988684,\n \"rewind-outline\": 984842,\n \"rhombus\": 984843,\n \"rhombus-medium\": 985616,\n \"rhombus-medium-outline\": 988380,\n \"rhombus-outline\": 984844,\n \"rhombus-split\": 985617,\n \"rhombus-split-outline\": 988381,\n \"ribbon\": 984160,\n \"rice\": 985066,\n \"rickshaw\": 988603,\n \"rickshaw-electric\": 988604,\n \"ring\": 985067,\n \"rivet\": 986720,\n \"road\": 984161,\n \"road-variant\": 984162,\n \"robber\": 987224,\n \"robot\": 984745,\n \"robot-angry\": 988829,\n \"robot-angry-outline\": 988830,\n \"robot-confused\": 988831,\n \"robot-confused-outline\": 988832,\n \"robot-dead\": 988833,\n \"robot-dead-outline\": 988834,\n \"robot-excited\": 988835,\n \"robot-excited-outline\": 988836,\n \"robot-happy\": 988953,\n \"robot-happy-outline\": 988954,\n \"robot-industrial\": 985926,\n \"robot-love\": 988837,\n \"robot-love-outline\": 988838,\n \"robot-mower\": 987639,\n \"robot-mower-outline\": 987635,\n \"robot-off\": 988839,\n \"robot-off-outline\": 988795,\n \"robot-outline\": 988794,\n \"robot-vacuum\": 984845,\n \"robot-vacuum-variant\": 985352,\n \"rocket\": 984163,\n \"rocket-launch\": 988382,\n \"rocket-launch-outline\": 988383,\n \"rocket-outline\": 988079,\n \"rodent\": 987943,\n \"roller-skate\": 986411,\n \"roller-skate-off\": 983365,\n \"rollerblade\": 986412,\n \"rollerblade-off\": 983086,\n \"rollupjs\": 986048,\n \"roman-numeral-1\": 987272,\n \"roman-numeral-10\": 987281,\n \"roman-numeral-2\": 987273,\n \"roman-numeral-3\": 987274,\n \"roman-numeral-4\": 987275,\n \"roman-numeral-5\": 987276,\n \"roman-numeral-6\": 987277,\n \"roman-numeral-7\": 987278,\n \"roman-numeral-8\": 987279,\n \"roman-numeral-9\": 987280,\n \"room-service\": 985229,\n \"room-service-outline\": 986519,\n \"rotate-360\": 989593,\n \"rotate-3d\": 986823,\n \"rotate-3d-variant\": 984164,\n \"rotate-left\": 984165,\n \"rotate-left-variant\": 984166,\n \"rotate-orbit\": 986520,\n \"rotate-right\": 984167,\n \"rotate-right-variant\": 984168,\n \"rounded-corner\": 984583,\n \"router\": 987618,\n \"router-network\": 987271,\n \"router-wireless\": 984169,\n \"router-wireless-off\": 988579,\n \"router-wireless-settings\": 985705,\n \"routes\": 984170,\n \"routes-clock\": 987225,\n \"rowing\": 984584,\n \"rss\": 984171,\n \"rss-box\": 984172,\n \"rss-off\": 986913,\n \"rug\": 988277,\n \"rugby\": 986521,\n \"ruler\": 984173,\n \"ruler-square\": 986306,\n \"ruler-square-compass\": 986814,\n \"run\": 984846,\n \"run-fast\": 984174,\n \"rv-truck\": 987604,\n \"sack\": 986414,\n \"sack-percent\": 986415,\n \"safe\": 985706,\n \"safe-square\": 987772,\n \"safe-square-outline\": 987773,\n \"safety-goggles\": 986416,\n \"sail-boat\": 986824,\n \"sale\": 984175,\n \"salesforce\": 985230,\n \"sass\": 985068,\n \"satellite\": 984176,\n \"satellite-uplink\": 985353,\n \"satellite-variant\": 984177,\n \"sausage\": 985274,\n \"sausage-off\": 989065,\n \"saw-blade\": 986721,\n \"sawtooth-wave\": 988282,\n \"saxophone\": 984585,\n \"scale\": 984178,\n \"scale-balance\": 984529,\n \"scale-bathroom\": 984179,\n \"scale-off\": 987226,\n \"scale-unbalanced\": 989624,\n \"scan-helper\": 988120,\n \"scanner\": 984747,\n \"scanner-off\": 985354,\n \"scatter-plot\": 986825,\n \"scatter-plot-outline\": 986826,\n \"scent\": 989528,\n \"scent-off\": 989529,\n \"school\": 984180,\n \"school-outline\": 987520,\n \"scissors-cutting\": 985707,\n \"scooter\": 988605,\n \"scooter-electric\": 988606,\n \"scoreboard\": 987774,\n \"scoreboard-outline\": 987775,\n \"screen-rotation\": 984181,\n \"screen-rotation-lock\": 984184,\n \"screw-flat-top\": 986611,\n \"screw-lag\": 986612,\n \"screw-machine-flat-top\": 986613,\n \"screw-machine-round-top\": 986614,\n \"screw-round-top\": 986615,\n \"screwdriver\": 984182,\n \"script\": 986049,\n \"script-outline\": 984183,\n \"script-text\": 986050,\n \"script-text-key\": 988965,\n \"script-text-key-outline\": 988966,\n \"script-text-outline\": 986051,\n \"script-text-play\": 988967,\n \"script-text-play-outline\": 988968,\n \"sd\": 984185,\n \"seal\": 984186,\n \"seal-variant\": 987097,\n \"search-web\": 984847,\n \"seat\": 986307,\n \"seat-flat\": 984187,\n \"seat-flat-angled\": 984188,\n \"seat-individual-suite\": 984189,\n \"seat-legroom-extra\": 984190,\n \"seat-legroom-normal\": 984191,\n \"seat-legroom-reduced\": 984192,\n \"seat-outline\": 986308,\n \"seat-passenger\": 987721,\n \"seat-recline-extra\": 984193,\n \"seat-recline-normal\": 984194,\n \"seatbelt\": 986309,\n \"security\": 984195,\n \"security-network\": 984196,\n \"seed\": 986722,\n \"seed-off\": 988157,\n \"seed-off-outline\": 988158,\n \"seed-outline\": 986723,\n \"seesaw\": 988580,\n \"segment\": 986827,\n \"select\": 984197,\n \"select-all\": 984198,\n \"select-color\": 986417,\n \"select-compare\": 985817,\n \"select-drag\": 985708,\n \"select-group\": 987010,\n \"select-inverse\": 984199,\n \"select-marker\": 987776,\n \"select-multiple\": 987777,\n \"select-multiple-marker\": 987778,\n \"select-off\": 984200,\n \"select-place\": 987098,\n \"select-remove\": 989121,\n \"select-search\": 987652,\n \"selection\": 984201,\n \"selection-drag\": 985709,\n \"selection-ellipse\": 986418,\n \"selection-ellipse-arrow-inside\": 986914,\n \"selection-ellipse-remove\": 989122,\n \"selection-marker\": 987779,\n \"selection-multiple\": 987781,\n \"selection-multiple-marker\": 987780,\n \"selection-off\": 984951,\n \"selection-remove\": 989123,\n \"selection-search\": 987653,\n \"semantic-web\": 987926,\n \"send\": 984202,\n \"send-check\": 987489,\n \"send-check-outline\": 987490,\n \"send-circle\": 986616,\n \"send-circle-outline\": 986617,\n \"send-clock\": 987491,\n \"send-clock-outline\": 987492,\n \"send-lock\": 985069,\n \"send-lock-outline\": 987494,\n \"send-outline\": 987493,\n \"serial-port\": 984668,\n \"server\": 984203,\n \"server-minus\": 984204,\n \"server-network\": 984205,\n \"server-network-off\": 984206,\n \"server-off\": 984207,\n \"server-plus\": 984208,\n \"server-remove\": 984209,\n \"server-security\": 984210,\n \"set-all\": 984952,\n \"set-center\": 984953,\n \"set-center-right\": 984954,\n \"set-left\": 984955,\n \"set-left-center\": 984956,\n \"set-left-right\": 984957,\n \"set-merge\": 988384,\n \"set-none\": 984958,\n \"set-right\": 984959,\n \"set-split\": 988385,\n \"set-square\": 988253,\n \"set-top-box\": 985503,\n \"settings-helper\": 985710,\n \"shaker\": 987406,\n \"shaker-outline\": 987407,\n \"shape\": 985137,\n \"shape-circle-plus\": 984669,\n \"shape-outline\": 985138,\n \"shape-oval-plus\": 987642,\n \"shape-plus\": 984213,\n \"shape-polygon-plus\": 984670,\n \"shape-rectangle-plus\": 984671,\n \"shape-square-plus\": 984672,\n \"shape-square-rounded-plus\": 988410,\n \"share\": 984214,\n \"share-all\": 987636,\n \"share-all-outline\": 987637,\n \"share-circle\": 987565,\n \"share-off\": 986915,\n \"share-off-outline\": 986916,\n \"share-outline\": 985394,\n \"share-variant\": 984215,\n \"share-variant-outline\": 988436,\n \"shark\": 989370,\n \"shark-fin\": 988787,\n \"shark-fin-outline\": 988788,\n \"shark-off\": 989371,\n \"sheep\": 986310,\n \"shield\": 984216,\n \"shield-account\": 985231,\n \"shield-account-outline\": 985618,\n \"shield-account-variant\": 988583,\n \"shield-account-variant-outline\": 988584,\n \"shield-airplane\": 984763,\n \"shield-airplane-outline\": 986311,\n \"shield-alert\": 986828,\n \"shield-alert-outline\": 986829,\n \"shield-bug\": 988122,\n \"shield-bug-outline\": 988123,\n \"shield-car\": 987011,\n \"shield-check\": 984421,\n \"shield-check-outline\": 986312,\n \"shield-cross\": 986313,\n \"shield-cross-outline\": 986314,\n \"shield-crown\": 989372,\n \"shield-crown-outline\": 989373,\n \"shield-edit\": 987552,\n \"shield-edit-outline\": 987553,\n \"shield-half\": 988000,\n \"shield-half-full\": 984960,\n \"shield-home\": 984714,\n \"shield-home-outline\": 986315,\n \"shield-key\": 986052,\n \"shield-key-outline\": 986053,\n \"shield-link-variant\": 986419,\n \"shield-link-variant-outline\": 986420,\n \"shield-lock\": 985501,\n \"shield-lock-open\": 989594,\n \"shield-lock-open-outline\": 989595,\n \"shield-lock-outline\": 986316,\n \"shield-moon\": 989224,\n \"shield-moon-outline\": 989225,\n \"shield-off\": 985502,\n \"shield-off-outline\": 985500,\n \"shield-outline\": 984217,\n \"shield-plus\": 985818,\n \"shield-plus-outline\": 985819,\n \"shield-refresh\": 983210,\n \"shield-refresh-outline\": 983520,\n \"shield-remove\": 985820,\n \"shield-remove-outline\": 985821,\n \"shield-search\": 986522,\n \"shield-star\": 987451,\n \"shield-star-outline\": 987452,\n \"shield-sun\": 987229,\n \"shield-sun-outline\": 987230,\n \"shield-sword\": 989374,\n \"shield-sword-outline\": 989375,\n \"shield-sync\": 987554,\n \"shield-sync-outline\": 987555,\n \"shimmer\": 988485,\n \"ship-wheel\": 985139,\n \"shipping-pallet\": 989262,\n \"shoe-ballet\": 988618,\n \"shoe-cleat\": 988615,\n \"shoe-formal\": 985927,\n \"shoe-heel\": 985928,\n \"shoe-print\": 986618,\n \"shoe-sneaker\": 988616,\n \"shopping\": 984218,\n \"shopping-music\": 984219,\n \"shopping-outline\": 987605,\n \"shopping-search\": 987012,\n \"shore\": 988409,\n \"shovel\": 984848,\n \"shovel-off\": 984849,\n \"shower\": 985504,\n \"shower-head\": 985505,\n \"shredder\": 984220,\n \"shuffle\": 984221,\n \"shuffle-disabled\": 984222,\n \"shuffle-variant\": 984223,\n \"shuriken\": 988031,\n \"sickle\": 989376,\n \"sigma\": 984224,\n \"sigma-lower\": 984619,\n \"sign-caution\": 984225,\n \"sign-direction\": 984961,\n \"sign-direction-minus\": 987136,\n \"sign-direction-plus\": 987100,\n \"sign-direction-remove\": 987101,\n \"sign-pole\": 988408,\n \"sign-real-estate\": 987416,\n \"sign-text\": 984962,\n \"signal\": 984226,\n \"signal-2g\": 984850,\n \"signal-3g\": 984851,\n \"signal-4g\": 984852,\n \"signal-5g\": 985711,\n \"signal-cellular-1\": 985276,\n \"signal-cellular-2\": 985277,\n \"signal-cellular-3\": 985278,\n \"signal-cellular-outline\": 985279,\n \"signal-distance-variant\": 986724,\n \"signal-hspa\": 984853,\n \"signal-hspa-plus\": 984854,\n \"signal-off\": 984963,\n \"signal-variant\": 984586,\n \"signature\": 986619,\n \"signature-freehand\": 986620,\n \"signature-image\": 986621,\n \"signature-text\": 986622,\n \"silo\": 985929,\n \"silverware\": 984227,\n \"silverware-clean\": 987102,\n \"silverware-fork\": 984228,\n \"silverware-fork-knife\": 985712,\n \"silverware-spoon\": 984229,\n \"silverware-variant\": 984230,\n \"sim\": 984231,\n \"sim-alert\": 984232,\n \"sim-alert-outline\": 988627,\n \"sim-off\": 984233,\n \"sim-off-outline\": 988628,\n \"sim-outline\": 988629,\n \"simple-icons\": 987933,\n \"sina-weibo\": 985823,\n \"sine-wave\": 985435,\n \"sitemap\": 984234,\n \"sitemap-outline\": 989596,\n \"size-l\": 988070,\n \"size-m\": 988069,\n \"size-s\": 988068,\n \"size-xl\": 988071,\n \"size-xs\": 988067,\n \"size-xxl\": 988072,\n \"size-xxs\": 988066,\n \"size-xxxl\": 988073,\n \"skate\": 986421,\n \"skate-off\": 984729,\n \"skateboard\": 988354,\n \"skateboarding\": 984321,\n \"skew-less\": 986422,\n \"skew-more\": 986423,\n \"ski\": 987908,\n \"ski-cross-country\": 987909,\n \"ski-water\": 987910,\n \"skip-backward\": 984235,\n \"skip-backward-outline\": 986917,\n \"skip-forward\": 984236,\n \"skip-forward-outline\": 986918,\n \"skip-next\": 984237,\n \"skip-next-circle\": 984673,\n \"skip-next-circle-outline\": 984674,\n \"skip-next-outline\": 986919,\n \"skip-previous\": 984238,\n \"skip-previous-circle\": 984675,\n \"skip-previous-circle-outline\": 984676,\n \"skip-previous-outline\": 986920,\n \"skull\": 984716,\n \"skull-crossbones\": 986054,\n \"skull-crossbones-outline\": 986055,\n \"skull-outline\": 986056,\n \"skull-scan\": 988359,\n \"skull-scan-outline\": 988360,\n \"skype\": 984239,\n \"skype-business\": 984240,\n \"slack\": 984241,\n \"slash-forward\": 987103,\n \"slash-forward-box\": 987104,\n \"sledding\": 984091,\n \"sleep\": 984242,\n \"sleep-off\": 984243,\n \"slide\": 988581,\n \"slope-downhill\": 986623,\n \"slope-uphill\": 986624,\n \"slot-machine\": 987412,\n \"slot-machine-outline\": 987413,\n \"smart-card\": 987325,\n \"smart-card-off\": 989431,\n \"smart-card-off-outline\": 989432,\n \"smart-card-outline\": 987326,\n \"smart-card-reader\": 987327,\n \"smart-card-reader-outline\": 987328,\n \"smog\": 985713,\n \"smoke\": 989081,\n \"smoke-detector\": 983954,\n \"smoke-detector-alert\": 989486,\n \"smoke-detector-alert-outline\": 989487,\n \"smoke-detector-off\": 989193,\n \"smoke-detector-off-outline\": 989194,\n \"smoke-detector-outline\": 989192,\n \"smoke-detector-variant\": 989195,\n \"smoke-detector-variant-alert\": 989488,\n \"smoke-detector-variant-off\": 989196,\n \"smoking\": 984244,\n \"smoking-off\": 984245,\n \"smoking-pipe\": 988173,\n \"smoking-pipe-off\": 988200,\n \"snail\": 988791,\n \"snake\": 988430,\n \"snapchat\": 984246,\n \"snowboard\": 987911,\n \"snowflake\": 984855,\n \"snowflake-alert\": 986921,\n \"snowflake-melt\": 987851,\n \"snowflake-off\": 988387,\n \"snowflake-variant\": 986922,\n \"snowman\": 984247,\n \"snowmobile\": 984797,\n \"soccer\": 984248,\n \"soccer-field\": 985140,\n \"social-distance-2-meters\": 988537,\n \"social-distance-6-feet\": 988538,\n \"sofa\": 984249,\n \"sofa-outline\": 988525,\n \"sofa-single\": 988526,\n \"sofa-single-outline\": 988527,\n \"solar-panel\": 986523,\n \"solar-panel-large\": 986524,\n \"solar-power\": 985714,\n \"soldering-iron\": 987282,\n \"solid\": 984717,\n \"sony-playstation\": 984084,\n \"sort\": 984250,\n \"sort-alphabetical-ascending\": 984509,\n \"sort-alphabetical-ascending-variant\": 987464,\n \"sort-alphabetical-descending\": 984511,\n \"sort-alphabetical-descending-variant\": 987465,\n \"sort-alphabetical-variant\": 984251,\n \"sort-ascending\": 984252,\n \"sort-bool-ascending\": 988037,\n \"sort-bool-ascending-variant\": 988038,\n \"sort-bool-descending\": 988039,\n \"sort-bool-descending-variant\": 988040,\n \"sort-calendar-ascending\": 988487,\n \"sort-calendar-descending\": 988488,\n \"sort-clock-ascending\": 988489,\n \"sort-clock-ascending-outline\": 988490,\n \"sort-clock-descending\": 988491,\n \"sort-clock-descending-outline\": 988492,\n \"sort-descending\": 984253,\n \"sort-numeric-ascending\": 988041,\n \"sort-numeric-ascending-variant\": 985357,\n \"sort-numeric-descending\": 988042,\n \"sort-numeric-descending-variant\": 985810,\n \"sort-numeric-variant\": 984254,\n \"sort-reverse-variant\": 983868,\n \"sort-variant\": 984255,\n \"sort-variant-lock\": 986317,\n \"sort-variant-lock-open\": 986318,\n \"sort-variant-remove\": 987463,\n \"soundbar\": 989147,\n \"soundcloud\": 984256,\n \"source-branch\": 984620,\n \"source-branch-check\": 988367,\n \"source-branch-minus\": 988363,\n \"source-branch-plus\": 988362,\n \"source-branch-refresh\": 988365,\n \"source-branch-remove\": 988364,\n \"source-branch-sync\": 988366,\n \"source-commit\": 984856,\n \"source-commit-end\": 984857,\n \"source-commit-end-local\": 984858,\n \"source-commit-local\": 984859,\n \"source-commit-next-local\": 984860,\n \"source-commit-start\": 984861,\n \"source-commit-start-next-local\": 984862,\n \"source-fork\": 984257,\n \"source-merge\": 984621,\n \"source-pull\": 984258,\n \"source-repository\": 986319,\n \"source-repository-multiple\": 986320,\n \"soy-sauce\": 985070,\n \"soy-sauce-off\": 988156,\n \"spa\": 986321,\n \"spa-outline\": 986322,\n \"space-invaders\": 986057,\n \"space-station\": 988035,\n \"spade\": 986725,\n \"speaker\": 984259,\n \"speaker-bluetooth\": 985506,\n \"speaker-multiple\": 986424,\n \"speaker-off\": 984260,\n \"speaker-wireless\": 984863,\n \"spear\": 989253,\n \"speedometer\": 984261,\n \"speedometer-medium\": 987013,\n \"speedometer-slow\": 987014,\n \"spellcheck\": 984262,\n \"sphere\": 989524,\n \"sphere-off\": 989525,\n \"spider\": 987626,\n \"spider-thread\": 987627,\n \"spider-web\": 986058,\n \"spirit-level\": 988401,\n \"spoon-sugar\": 988201,\n \"spotify\": 984263,\n \"spotlight\": 984264,\n \"spotlight-beam\": 984265,\n \"spray\": 984677,\n \"spray-bottle\": 985824,\n \"sprinkler\": 987231,\n \"sprinkler-fire\": 989597,\n \"sprinkler-variant\": 987232,\n \"sprout\": 986726,\n \"sprout-outline\": 986727,\n \"square\": 984932,\n \"square-circle\": 988416,\n \"square-edit-outline\": 985356,\n \"square-medium\": 985619,\n \"square-medium-outline\": 985620,\n \"square-off\": 987886,\n \"square-off-outline\": 987887,\n \"square-opacity\": 989268,\n \"square-outline\": 984931,\n \"square-root\": 984964,\n \"square-root-box\": 985507,\n \"square-rounded\": 988411,\n \"square-rounded-outline\": 988412,\n \"square-small\": 985621,\n \"square-wave\": 988283,\n \"squeegee\": 985825,\n \"ssh\": 985280,\n \"stack-exchange\": 984587,\n \"stack-overflow\": 984268,\n \"stackpath\": 983897,\n \"stadium\": 987129,\n \"stadium-variant\": 984864,\n \"stairs\": 984269,\n \"stairs-box\": 988062,\n \"stairs-down\": 987838,\n \"stairs-up\": 987837,\n \"stamper\": 986425,\n \"standard-definition\": 985071,\n \"star\": 984270,\n \"star-box\": 985715,\n \"star-box-multiple\": 987782,\n \"star-box-multiple-outline\": 987783,\n \"star-box-outline\": 985716,\n \"star-check\": 988518,\n \"star-check-outline\": 988522,\n \"star-circle\": 984271,\n \"star-circle-outline\": 985508,\n \"star-cog\": 988776,\n \"star-cog-outline\": 988777,\n \"star-crescent\": 985465,\n \"star-david\": 985466,\n \"star-face\": 985509,\n \"star-four-points\": 985826,\n \"star-four-points-outline\": 985827,\n \"star-half\": 983622,\n \"star-half-full\": 984272,\n \"star-minus\": 988516,\n \"star-minus-outline\": 988520,\n \"star-off\": 984273,\n \"star-off-outline\": 988507,\n \"star-outline\": 984274,\n \"star-plus\": 988515,\n \"star-plus-outline\": 988519,\n \"star-remove\": 988517,\n \"star-remove-outline\": 988521,\n \"star-settings\": 988778,\n \"star-settings-outline\": 988779,\n \"star-shooting\": 988993,\n \"star-shooting-outline\": 988994,\n \"star-three-points\": 985828,\n \"star-three-points-outline\": 985829,\n \"state-machine\": 987631,\n \"steam\": 984275,\n \"steering\": 984276,\n \"steering-off\": 985358,\n \"step-backward\": 984277,\n \"step-backward-2\": 984278,\n \"step-forward\": 984279,\n \"step-forward-2\": 984280,\n \"stethoscope\": 984281,\n \"sticker\": 988004,\n \"sticker-alert\": 988005,\n \"sticker-alert-outline\": 988006,\n \"sticker-check\": 988007,\n \"sticker-check-outline\": 988008,\n \"sticker-circle-outline\": 984528,\n \"sticker-emoji\": 984965,\n \"sticker-minus\": 988009,\n \"sticker-minus-outline\": 988010,\n \"sticker-outline\": 988011,\n \"sticker-plus\": 988012,\n \"sticker-plus-outline\": 988013,\n \"sticker-remove\": 988014,\n \"sticker-remove-outline\": 988015,\n \"sticker-text\": 989070,\n \"sticker-text-outline\": 989071,\n \"stocking\": 984282,\n \"stomach\": 987283,\n \"stool\": 989533,\n \"stool-outline\": 989534,\n \"stop\": 984283,\n \"stop-circle\": 984678,\n \"stop-circle-outline\": 984679,\n \"store\": 984284,\n \"store-24-hour\": 984285,\n \"store-alert\": 989377,\n \"store-alert-outline\": 989378,\n \"store-check\": 989379,\n \"store-check-outline\": 989380,\n \"store-clock\": 989381,\n \"store-clock-outline\": 989382,\n \"store-cog\": 989383,\n \"store-cog-outline\": 989384,\n \"store-edit\": 989385,\n \"store-edit-outline\": 989386,\n \"store-marker\": 989387,\n \"store-marker-outline\": 989388,\n \"store-minus\": 988766,\n \"store-minus-outline\": 989389,\n \"store-off\": 989390,\n \"store-off-outline\": 989391,\n \"store-outline\": 988001,\n \"store-plus\": 988767,\n \"store-plus-outline\": 989392,\n \"store-remove\": 988768,\n \"store-remove-outline\": 989393,\n \"store-search\": 989394,\n \"store-search-outline\": 989395,\n \"store-settings\": 989396,\n \"store-settings-outline\": 989397,\n \"storefront\": 985031,\n \"storefront-outline\": 987329,\n \"stove\": 984286,\n \"strategy\": 987606,\n \"stretch-to-page\": 986923,\n \"stretch-to-page-outline\": 986924,\n \"string-lights\": 987834,\n \"string-lights-off\": 987835,\n \"subdirectory-arrow-left\": 984588,\n \"subdirectory-arrow-right\": 984589,\n \"submarine\": 988524,\n \"subtitles\": 985622,\n \"subtitles-outline\": 985623,\n \"subway\": 984748,\n \"subway-alert-variant\": 986525,\n \"subway-variant\": 984287,\n \"summit\": 984966,\n \"sun-compass\": 989605,\n \"sun-snowflake\": 989078,\n \"sun-thermometer\": 989398,\n \"sun-thermometer-outline\": 989399,\n \"sun-wireless\": 989182,\n \"sun-wireless-outline\": 989183,\n \"sunglasses\": 984288,\n \"surfing\": 988998,\n \"surround-sound\": 984517,\n \"surround-sound-2-0\": 985072,\n \"surround-sound-2-1\": 988969,\n \"surround-sound-3-1\": 985073,\n \"surround-sound-5-1\": 985074,\n \"surround-sound-5-1-2\": 988970,\n \"surround-sound-7-1\": 985075,\n \"svg\": 984865,\n \"swap-horizontal\": 984289,\n \"swap-horizontal-bold\": 986061,\n \"swap-horizontal-circle\": 987105,\n \"swap-horizontal-circle-outline\": 987106,\n \"swap-horizontal-variant\": 985281,\n \"swap-vertical\": 984290,\n \"swap-vertical-bold\": 986062,\n \"swap-vertical-circle\": 987107,\n \"swap-vertical-circle-outline\": 987108,\n \"swap-vertical-variant\": 985282,\n \"swim\": 984291,\n \"switch\": 984292,\n \"sword\": 984293,\n \"sword-cross\": 984967,\n \"syllabary-hangul\": 987955,\n \"syllabary-hiragana\": 987956,\n \"syllabary-katakana\": 987957,\n \"syllabary-katakana-halfwidth\": 987958,\n \"symbol\": 988417,\n \"symfony\": 985830,\n \"sync\": 984294,\n \"sync-alert\": 984295,\n \"sync-circle\": 988024,\n \"sync-off\": 984296,\n \"tab\": 984297,\n \"tab-minus\": 985931,\n \"tab-plus\": 984924,\n \"tab-remove\": 985932,\n \"tab-search\": 989598,\n \"tab-unselected\": 984298,\n \"table\": 984299,\n \"table-account\": 988089,\n \"table-alert\": 988090,\n \"table-arrow-down\": 988091,\n \"table-arrow-left\": 988092,\n \"table-arrow-right\": 988093,\n \"table-arrow-up\": 988094,\n \"table-border\": 985624,\n \"table-cancel\": 988095,\n \"table-chair\": 987233,\n \"table-check\": 988096,\n \"table-clock\": 988097,\n \"table-cog\": 988098,\n \"table-column\": 985141,\n \"table-column-plus-after\": 984300,\n \"table-column-plus-before\": 984301,\n \"table-column-remove\": 984302,\n \"table-column-width\": 984303,\n \"table-edit\": 984304,\n \"table-eye\": 987284,\n \"table-eye-off\": 988099,\n \"table-furniture\": 984508,\n \"table-headers-eye\": 987677,\n \"table-headers-eye-off\": 987678,\n \"table-heart\": 988100,\n \"table-key\": 988101,\n \"table-large\": 984305,\n \"table-large-plus\": 987015,\n \"table-large-remove\": 987016,\n \"table-lock\": 988102,\n \"table-merge-cells\": 985510,\n \"table-minus\": 988103,\n \"table-multiple\": 988104,\n \"table-network\": 988105,\n \"table-of-contents\": 985142,\n \"table-off\": 988106,\n \"table-picnic\": 988995,\n \"table-pivot\": 989244,\n \"table-plus\": 985717,\n \"table-refresh\": 988064,\n \"table-remove\": 985718,\n \"table-row\": 985143,\n \"table-row-height\": 984306,\n \"table-row-plus-after\": 984307,\n \"table-row-plus-before\": 984308,\n \"table-row-remove\": 984309,\n \"table-search\": 985359,\n \"table-settings\": 985144,\n \"table-split-cell\": 988202,\n \"table-star\": 988107,\n \"table-sync\": 988065,\n \"table-tennis\": 986728,\n \"tablet\": 984310,\n \"tablet-android\": 984311,\n \"tablet-cellphone\": 985511,\n \"tablet-dashboard\": 986830,\n \"taco\": 984930,\n \"tag\": 984313,\n \"tag-arrow-down\": 988971,\n \"tag-arrow-down-outline\": 988972,\n \"tag-arrow-left\": 988973,\n \"tag-arrow-left-outline\": 988974,\n \"tag-arrow-right\": 988975,\n \"tag-arrow-right-outline\": 988976,\n \"tag-arrow-up\": 988977,\n \"tag-arrow-up-outline\": 988978,\n \"tag-faces\": 984314,\n \"tag-heart\": 984715,\n \"tag-heart-outline\": 986063,\n \"tag-minus\": 985360,\n \"tag-minus-outline\": 987679,\n \"tag-multiple\": 984315,\n \"tag-multiple-outline\": 987895,\n \"tag-off\": 987680,\n \"tag-off-outline\": 987681,\n \"tag-outline\": 984316,\n \"tag-plus\": 984866,\n \"tag-plus-outline\": 987682,\n \"tag-remove\": 984867,\n \"tag-remove-outline\": 987683,\n \"tag-search\": 989447,\n \"tag-search-outline\": 989448,\n \"tag-text\": 987684,\n \"tag-text-outline\": 984317,\n \"tailwind\": 988159,\n \"tangram\": 984312,\n \"tank\": 986426,\n \"tanker-truck\": 987109,\n \"tape-drive\": 988895,\n \"tape-measure\": 985933,\n \"target\": 984318,\n \"target-account\": 986064,\n \"target-variant\": 985719,\n \"taxi\": 984319,\n \"tea\": 986526,\n \"tea-outline\": 986527,\n \"teamviewer\": 984320,\n \"teddy-bear\": 989435,\n \"telescope\": 985934,\n \"television\": 984322,\n \"television-ambient-light\": 987990,\n \"television-box\": 985145,\n \"television-classic\": 985076,\n \"television-classic-off\": 985146,\n \"television-guide\": 984323,\n \"television-off\": 985147,\n \"television-pause\": 987017,\n \"television-play\": 986831,\n \"television-shimmer\": 987408,\n \"television-stop\": 987018,\n \"temperature-celsius\": 984324,\n \"temperature-fahrenheit\": 984325,\n \"temperature-kelvin\": 984326,\n \"tennis\": 986528,\n \"tennis-ball\": 984327,\n \"tent\": 984328,\n \"terraform\": 987234,\n \"terrain\": 984329,\n \"test-tube\": 984680,\n \"test-tube-empty\": 985361,\n \"test-tube-off\": 985362,\n \"text\": 985512,\n \"text-account\": 988528,\n \"text-box\": 983578,\n \"text-box-check\": 986790,\n \"text-box-check-outline\": 986791,\n \"text-box-minus\": 986792,\n \"text-box-minus-outline\": 986793,\n \"text-box-multiple\": 985783,\n \"text-box-multiple-outline\": 985784,\n \"text-box-outline\": 985581,\n \"text-box-plus\": 986794,\n \"text-box-plus-outline\": 986795,\n \"text-box-remove\": 986796,\n \"text-box-remove-outline\": 986797,\n \"text-box-search\": 986798,\n \"text-box-search-outline\": 986799,\n \"text-long\": 985514,\n \"text-recognition\": 987453,\n \"text-search\": 988088,\n \"text-shadow\": 984681,\n \"text-short\": 985513,\n \"text-to-speech\": 984330,\n \"text-to-speech-off\": 984331,\n \"texture\": 984332,\n \"texture-box\": 987110,\n \"theater\": 984333,\n \"theme-light-dark\": 984334,\n \"thermometer\": 984335,\n \"thermometer-alert\": 986625,\n \"thermometer-bluetooth\": 989333,\n \"thermometer-chevron-down\": 986626,\n \"thermometer-chevron-up\": 986627,\n \"thermometer-high\": 987330,\n \"thermometer-lines\": 984336,\n \"thermometer-low\": 987331,\n \"thermometer-minus\": 986628,\n \"thermometer-off\": 988465,\n \"thermometer-plus\": 986629,\n \"thermostat\": 983955,\n \"thermostat-box\": 985233,\n \"thought-bubble\": 985078,\n \"thought-bubble-outline\": 985079,\n \"thumb-down\": 984337,\n \"thumb-down-outline\": 984338,\n \"thumb-up\": 984339,\n \"thumb-up-outline\": 984340,\n \"thumbs-up-down\": 984341,\n \"thumbs-up-down-outline\": 989460,\n \"ticket\": 984342,\n \"ticket-account\": 984343,\n \"ticket-confirmation\": 984344,\n \"ticket-confirmation-outline\": 988074,\n \"ticket-outline\": 985363,\n \"ticket-percent\": 984868,\n \"ticket-percent-outline\": 988203,\n \"tie\": 984345,\n \"tilde\": 984869,\n \"tilde-off\": 989427,\n \"timelapse\": 984346,\n \"timeline\": 986065,\n \"timeline-alert\": 987029,\n \"timeline-alert-outline\": 987032,\n \"timeline-check\": 988466,\n \"timeline-check-outline\": 988467,\n \"timeline-clock\": 987643,\n \"timeline-clock-outline\": 987644,\n \"timeline-help\": 987033,\n \"timeline-help-outline\": 987034,\n \"timeline-minus\": 988468,\n \"timeline-minus-outline\": 988469,\n \"timeline-outline\": 986066,\n \"timeline-plus\": 987030,\n \"timeline-plus-outline\": 987031,\n \"timeline-remove\": 988470,\n \"timeline-remove-outline\": 988471,\n \"timeline-text\": 986067,\n \"timeline-text-outline\": 986068,\n \"timer\": 988075,\n \"timer-10\": 984348,\n \"timer-3\": 984349,\n \"timer-cog\": 989477,\n \"timer-cog-outline\": 989478,\n \"timer-off\": 988076,\n \"timer-off-outline\": 984350,\n \"timer-outline\": 984347,\n \"timer-sand\": 984351,\n \"timer-sand-complete\": 989599,\n \"timer-sand-empty\": 984749,\n \"timer-sand-full\": 984972,\n \"timer-sand-paused\": 989600,\n \"timer-settings\": 989475,\n \"timer-settings-outline\": 989476,\n \"timetable\": 984352,\n \"tire\": 989334,\n \"toaster\": 987235,\n \"toaster-off\": 987575,\n \"toaster-oven\": 986323,\n \"toggle-switch\": 984353,\n \"toggle-switch-off\": 984354,\n \"toggle-switch-off-outline\": 985625,\n \"toggle-switch-outline\": 985626,\n \"toilet\": 985515,\n \"toolbox\": 985516,\n \"toolbox-outline\": 985517,\n \"tools\": 987236,\n \"tooltip\": 984355,\n \"tooltip-account\": 983052,\n \"tooltip-cellphone\": 989243,\n \"tooltip-check\": 988508,\n \"tooltip-check-outline\": 988509,\n \"tooltip-edit\": 984356,\n \"tooltip-edit-outline\": 987845,\n \"tooltip-image\": 984357,\n \"tooltip-image-outline\": 986069,\n \"tooltip-minus\": 988510,\n \"tooltip-minus-outline\": 988511,\n \"tooltip-outline\": 984358,\n \"tooltip-plus\": 986070,\n \"tooltip-plus-outline\": 984359,\n \"tooltip-remove\": 988512,\n \"tooltip-remove-outline\": 988513,\n \"tooltip-text\": 984360,\n \"tooltip-text-outline\": 986071,\n \"tooth\": 985283,\n \"tooth-outline\": 984361,\n \"toothbrush\": 987433,\n \"toothbrush-electric\": 987436,\n \"toothbrush-paste\": 987434,\n \"torch\": 988678,\n \"tortoise\": 986427,\n \"toslink\": 987832,\n \"tournament\": 985518,\n \"tow-truck\": 985148,\n \"tower-beach\": 984705,\n \"tower-fire\": 984706,\n \"town-hall\": 989301,\n \"toy-brick\": 987784,\n \"toy-brick-marker\": 987785,\n \"toy-brick-marker-outline\": 987786,\n \"toy-brick-minus\": 987787,\n \"toy-brick-minus-outline\": 987788,\n \"toy-brick-outline\": 987789,\n \"toy-brick-plus\": 987790,\n \"toy-brick-plus-outline\": 987791,\n \"toy-brick-remove\": 987792,\n \"toy-brick-remove-outline\": 987793,\n \"toy-brick-search\": 987794,\n \"toy-brick-search-outline\": 987795,\n \"track-light\": 985364,\n \"trackpad\": 985080,\n \"trackpad-lock\": 985395,\n \"tractor\": 985234,\n \"tractor-variant\": 988356,\n \"trademark\": 985720,\n \"traffic-cone\": 988028,\n \"traffic-light\": 984363,\n \"traffic-light-outline\": 989226,\n \"train\": 984364,\n \"train-car\": 986072,\n \"train-car-passenger\": 988979,\n \"train-car-passenger-door\": 988980,\n \"train-car-passenger-door-open\": 988981,\n \"train-car-passenger-variant\": 988982,\n \"train-variant\": 985284,\n \"tram\": 984365,\n \"tram-side\": 987111,\n \"transcribe\": 984366,\n \"transcribe-close\": 984367,\n \"transfer\": 987237,\n \"transfer-down\": 986529,\n \"transfer-left\": 986530,\n \"transfer-right\": 984368,\n \"transfer-up\": 986531,\n \"transit-connection\": 986428,\n \"transit-connection-horizontal\": 988486,\n \"transit-connection-variant\": 986429,\n \"transit-detour\": 987019,\n \"transit-skip\": 988437,\n \"transit-transfer\": 984750,\n \"transition\": 985365,\n \"transition-masked\": 985366,\n \"translate\": 984522,\n \"translate-off\": 986630,\n \"transmission-tower\": 986430,\n \"transmission-tower-export\": 989484,\n \"transmission-tower-import\": 989485,\n \"trash-can\": 985721,\n \"trash-can-outline\": 985722,\n \"tray\": 987796,\n \"tray-alert\": 987797,\n \"tray-arrow-down\": 983328,\n \"tray-arrow-up\": 983325,\n \"tray-full\": 987798,\n \"tray-minus\": 987799,\n \"tray-plus\": 987800,\n \"tray-remove\": 987801,\n \"treasure-chest\": 984870,\n \"tree\": 984369,\n \"tree-outline\": 986729,\n \"trello\": 984370,\n \"trending-down\": 984371,\n \"trending-neutral\": 984372,\n \"trending-up\": 984373,\n \"triangle\": 984374,\n \"triangle-outline\": 984375,\n \"triangle-wave\": 988284,\n \"triforce\": 986073,\n \"trophy\": 984376,\n \"trophy-award\": 984377,\n \"trophy-broken\": 986532,\n \"trophy-outline\": 984378,\n \"trophy-variant\": 984379,\n \"trophy-variant-outline\": 984380,\n \"truck\": 984381,\n \"truck-cargo-container\": 989400,\n \"truck-check\": 986324,\n \"truck-check-outline\": 987802,\n \"truck-delivery\": 984382,\n \"truck-delivery-outline\": 987803,\n \"truck-fast\": 984968,\n \"truck-fast-outline\": 987804,\n \"truck-flatbed\": 989329,\n \"truck-minus\": 989614,\n \"truck-minus-outline\": 989629,\n \"truck-outline\": 987805,\n \"truck-plus\": 989613,\n \"truck-plus-outline\": 989628,\n \"truck-remove\": 989615,\n \"truck-remove-outline\": 989630,\n \"truck-snowflake\": 989606,\n \"truck-trailer\": 984871,\n \"trumpet\": 987286,\n \"tshirt-crew\": 985723,\n \"tshirt-crew-outline\": 984383,\n \"tshirt-v\": 985724,\n \"tshirt-v-outline\": 984384,\n \"tumble-dryer\": 985367,\n \"tumble-dryer-alert\": 987578,\n \"tumble-dryer-off\": 987579,\n \"tune\": 984622,\n \"tune-variant\": 988482,\n \"tune-vertical\": 984682,\n \"tune-vertical-variant\": 988483,\n \"tunnel\": 989245,\n \"tunnel-outline\": 989246,\n \"turkey\": 988955,\n \"turnstile\": 986325,\n \"turnstile-outline\": 986326,\n \"turtle\": 986327,\n \"twitch\": 984387,\n \"twitter\": 984388,\n \"two-factor-authentication\": 985519,\n \"typewriter\": 986925,\n \"ubisoft\": 986074,\n \"ubuntu\": 984392,\n \"ufo\": 987332,\n \"ufo-outline\": 987333,\n \"ultra-high-definition\": 985081,\n \"umbraco\": 984393,\n \"umbrella\": 984394,\n \"umbrella-beach\": 989322,\n \"umbrella-beach-outline\": 989323,\n \"umbrella-closed\": 985520,\n \"umbrella-closed-outline\": 988130,\n \"umbrella-closed-variant\": 988129,\n \"umbrella-outline\": 984395,\n \"undo\": 984396,\n \"undo-variant\": 984397,\n \"unfold-less-horizontal\": 984398,\n \"unfold-less-vertical\": 984928,\n \"unfold-more-horizontal\": 984399,\n \"unfold-more-vertical\": 984929,\n \"ungroup\": 984400,\n \"unicode\": 986832,\n \"unicorn\": 988610,\n \"unicorn-variant\": 988611,\n \"unicycle\": 988645,\n \"unity\": 984751,\n \"unreal\": 985521,\n \"update\": 984752,\n \"upload\": 984402,\n \"upload-lock\": 988019,\n \"upload-lock-outline\": 988020,\n \"upload-multiple\": 985149,\n \"upload-network\": 984822,\n \"upload-network-outline\": 986328,\n \"upload-off\": 987334,\n \"upload-off-outline\": 987335,\n \"upload-outline\": 986631,\n \"usb\": 984403,\n \"usb-flash-drive\": 987806,\n \"usb-flash-drive-outline\": 987807,\n \"usb-port\": 987632,\n \"vacuum\": 989601,\n \"vacuum-outline\": 989602,\n \"valve\": 987238,\n \"valve-closed\": 987239,\n \"valve-open\": 987240,\n \"van-passenger\": 985082,\n \"van-utility\": 985083,\n \"vanish\": 985084,\n \"vanish-quarter\": 988500,\n \"vanity-light\": 987617,\n \"variable\": 985831,\n \"variable-box\": 987409,\n \"vector-arrange-above\": 984404,\n \"vector-arrange-below\": 984405,\n \"vector-bezier\": 985832,\n \"vector-circle\": 984406,\n \"vector-circle-variant\": 984407,\n \"vector-combine\": 984408,\n \"vector-curve\": 984409,\n \"vector-difference\": 984410,\n \"vector-difference-ab\": 984411,\n \"vector-difference-ba\": 984412,\n \"vector-ellipse\": 985235,\n \"vector-intersection\": 984413,\n \"vector-line\": 984414,\n \"vector-link\": 987112,\n \"vector-point\": 984415,\n \"vector-polygon\": 984416,\n \"vector-polygon-variant\": 989270,\n \"vector-polyline\": 984417,\n \"vector-polyline-edit\": 987685,\n \"vector-polyline-minus\": 987686,\n \"vector-polyline-plus\": 987687,\n \"vector-polyline-remove\": 987688,\n \"vector-radius\": 984906,\n \"vector-rectangle\": 984518,\n \"vector-selection\": 984418,\n \"vector-square\": 983041,\n \"vector-square-close\": 989271,\n \"vector-square-edit\": 989401,\n \"vector-square-minus\": 989402,\n \"vector-square-open\": 989272,\n \"vector-square-plus\": 989403,\n \"vector-square-remove\": 989404,\n \"vector-triangle\": 984419,\n \"vector-union\": 984420,\n \"vhs\": 985627,\n \"vibrate\": 984422,\n \"vibrate-off\": 986329,\n \"video\": 984423,\n \"video-3d\": 985085,\n \"video-3d-off\": 988121,\n \"video-3d-variant\": 986833,\n \"video-4k-box\": 985150,\n \"video-account\": 985369,\n \"video-box\": 983293,\n \"video-box-off\": 983294,\n \"video-check\": 987241,\n \"video-check-outline\": 987242,\n \"video-high-definition\": 988462,\n \"video-image\": 985370,\n \"video-input-antenna\": 985151,\n \"video-input-component\": 985152,\n \"video-input-hdmi\": 985153,\n \"video-input-scart\": 987020,\n \"video-input-svideo\": 985154,\n \"video-marker\": 989609,\n \"video-marker-outline\": 989610,\n \"video-minus\": 985522,\n \"video-minus-outline\": 983738,\n \"video-off\": 984424,\n \"video-off-outline\": 986075,\n \"video-outline\": 986076,\n \"video-plus\": 985523,\n \"video-plus-outline\": 983507,\n \"video-stabilization\": 985371,\n \"video-switch\": 984425,\n \"video-switch-outline\": 984976,\n \"video-vintage\": 985628,\n \"video-wireless\": 986834,\n \"video-wireless-outline\": 986835,\n \"view-agenda\": 984426,\n \"view-agenda-outline\": 987608,\n \"view-array\": 984427,\n \"view-array-outline\": 988293,\n \"view-carousel\": 984428,\n \"view-carousel-outline\": 988294,\n \"view-column\": 984429,\n \"view-column-outline\": 988295,\n \"view-comfy\": 986730,\n \"view-comfy-outline\": 988296,\n \"view-compact\": 986731,\n \"view-compact-outline\": 986732,\n \"view-dashboard\": 984430,\n \"view-dashboard-edit\": 989511,\n \"view-dashboard-edit-outline\": 989512,\n \"view-dashboard-outline\": 985629,\n \"view-dashboard-variant\": 985155,\n \"view-dashboard-variant-outline\": 988297,\n \"view-day\": 984431,\n \"view-day-outline\": 988298,\n \"view-gallery\": 989320,\n \"view-gallery-outline\": 989321,\n \"view-grid\": 984432,\n \"view-grid-outline\": 987609,\n \"view-grid-plus\": 987021,\n \"view-grid-plus-outline\": 987610,\n \"view-headline\": 984433,\n \"view-list\": 984434,\n \"view-list-outline\": 988299,\n \"view-module\": 984435,\n \"view-module-outline\": 988300,\n \"view-parallel\": 984872,\n \"view-parallel-outline\": 988301,\n \"view-quilt\": 984436,\n \"view-quilt-outline\": 988302,\n \"view-sequential\": 984873,\n \"view-sequential-outline\": 988303,\n \"view-split-horizontal\": 986059,\n \"view-split-vertical\": 986060,\n \"view-stream\": 984437,\n \"view-stream-outline\": 988304,\n \"view-week\": 984438,\n \"view-week-outline\": 988305,\n \"vimeo\": 984439,\n \"violin\": 984591,\n \"virtual-reality\": 985236,\n \"virus\": 988086,\n \"virus-off\": 989409,\n \"virus-off-outline\": 989410,\n \"virus-outline\": 988087,\n \"vlc\": 984444,\n \"voicemail\": 984445,\n \"volleyball\": 985524,\n \"volume-high\": 984446,\n \"volume-low\": 984447,\n \"volume-medium\": 984448,\n \"volume-minus\": 984926,\n \"volume-mute\": 984927,\n \"volume-off\": 984449,\n \"volume-plus\": 984925,\n \"volume-source\": 987424,\n \"volume-variant-off\": 986632,\n \"volume-vibrate\": 987425,\n \"vote\": 985631,\n \"vote-outline\": 985632,\n \"vpn\": 984450,\n \"vuejs\": 985156,\n \"vuetify\": 986733,\n \"walk\": 984451,\n \"wall\": 985086,\n \"wall-sconce\": 985372,\n \"wall-sconce-flat\": 985373,\n \"wall-sconce-flat-outline\": 989129,\n \"wall-sconce-flat-variant\": 984092,\n \"wall-sconce-flat-variant-outline\": 989130,\n \"wall-sconce-outline\": 989131,\n \"wall-sconce-round\": 984904,\n \"wall-sconce-round-outline\": 989132,\n \"wall-sconce-round-variant\": 985374,\n \"wall-sconce-round-variant-outline\": 989133,\n \"wallet\": 984452,\n \"wallet-giftcard\": 984453,\n \"wallet-membership\": 984454,\n \"wallet-outline\": 986077,\n \"wallet-plus\": 987022,\n \"wallet-plus-outline\": 987023,\n \"wallet-travel\": 984455,\n \"wallpaper\": 986633,\n \"wan\": 984456,\n \"wardrobe\": 987024,\n \"wardrobe-outline\": 987025,\n \"warehouse\": 987009,\n \"washing-machine\": 984874,\n \"washing-machine-alert\": 987580,\n \"washing-machine-off\": 987581,\n \"watch\": 984457,\n \"watch-export\": 984458,\n \"watch-export-variant\": 985237,\n \"watch-import\": 984459,\n \"watch-import-variant\": 985238,\n \"watch-variant\": 985239,\n \"watch-vibrate\": 984753,\n \"watch-vibrate-off\": 986330,\n \"water\": 984460,\n \"water-alert\": 988418,\n \"water-alert-outline\": 988419,\n \"water-boiler\": 987026,\n \"water-boiler-alert\": 987571,\n \"water-boiler-off\": 987572,\n \"water-check\": 988420,\n \"water-check-outline\": 988421,\n \"water-circle\": 989190,\n \"water-minus\": 988422,\n \"water-minus-outline\": 988423,\n \"water-off\": 984461,\n \"water-off-outline\": 988424,\n \"water-opacity\": 989269,\n \"water-outline\": 986634,\n \"water-percent\": 984462,\n \"water-percent-alert\": 988425,\n \"water-plus\": 988426,\n \"water-plus-outline\": 988427,\n \"water-polo\": 987808,\n \"water-pump\": 984463,\n \"water-pump-off\": 987027,\n \"water-remove\": 988428,\n \"water-remove-outline\": 988429,\n \"water-sync\": 989126,\n \"water-well\": 987243,\n \"water-well-outline\": 987244,\n \"waterfall\": 989257,\n \"watering-can\": 988289,\n \"watering-can-outline\": 988290,\n \"watermark\": 984594,\n \"wave\": 986926,\n \"waveform\": 988285,\n \"waves\": 984973,\n \"waves-arrow-left\": 989273,\n \"waves-arrow-right\": 989274,\n \"waves-arrow-up\": 989275,\n \"waze\": 986078,\n \"weather-cloudy\": 984464,\n \"weather-cloudy-alert\": 986927,\n \"weather-cloudy-arrow-right\": 986734,\n \"weather-cloudy-clock\": 989430,\n \"weather-fog\": 984465,\n \"weather-hail\": 984466,\n \"weather-hazy\": 986928,\n \"weather-hurricane\": 985240,\n \"weather-lightning\": 984467,\n \"weather-lightning-rainy\": 984702,\n \"weather-night\": 984468,\n \"weather-night-partly-cloudy\": 986929,\n \"weather-partly-cloudy\": 984469,\n \"weather-partly-lightning\": 986930,\n \"weather-partly-rainy\": 986931,\n \"weather-partly-snowy\": 986932,\n \"weather-partly-snowy-rainy\": 986933,\n \"weather-pouring\": 984470,\n \"weather-rainy\": 984471,\n \"weather-snowy\": 984472,\n \"weather-snowy-heavy\": 986934,\n \"weather-snowy-rainy\": 984703,\n \"weather-sunny\": 984473,\n \"weather-sunny-alert\": 986935,\n \"weather-sunny-off\": 988388,\n \"weather-sunset\": 984474,\n \"weather-sunset-down\": 984475,\n \"weather-sunset-up\": 984476,\n \"weather-tornado\": 986936,\n \"weather-windy\": 984477,\n \"weather-windy-variant\": 984478,\n \"web\": 984479,\n \"web-box\": 987028,\n \"web-cancel\": 989072,\n \"web-check\": 984969,\n \"web-clock\": 987722,\n \"web-minus\": 987296,\n \"web-off\": 985742,\n \"web-plus\": 983091,\n \"web-refresh\": 989073,\n \"web-remove\": 984401,\n \"web-sync\": 989074,\n \"webcam\": 984480,\n \"webcam-off\": 988983,\n \"webhook\": 984623,\n \"webpack\": 984875,\n \"webrtc\": 987720,\n \"wechat\": 984593,\n \"weight\": 984481,\n \"weight-gram\": 986431,\n \"weight-kilogram\": 984482,\n \"weight-lifter\": 987485,\n \"weight-pound\": 985525,\n \"whatsapp\": 984483,\n \"wheel-barrow\": 988402,\n \"wheelchair-accessibility\": 984484,\n \"whistle\": 985526,\n \"whistle-outline\": 987836,\n \"white-balance-auto\": 984485,\n \"white-balance-incandescent\": 984486,\n \"white-balance-iridescent\": 984487,\n \"white-balance-sunny\": 984488,\n \"widgets\": 984876,\n \"widgets-outline\": 987989,\n \"wifi\": 984489,\n \"wifi-alert\": 988853,\n \"wifi-arrow-down\": 988854,\n \"wifi-arrow-left\": 988855,\n \"wifi-arrow-left-right\": 988856,\n \"wifi-arrow-right\": 988857,\n \"wifi-arrow-up\": 988858,\n \"wifi-arrow-up-down\": 988859,\n \"wifi-cancel\": 988860,\n \"wifi-check\": 988861,\n \"wifi-cog\": 988862,\n \"wifi-lock\": 988863,\n \"wifi-lock-open\": 988864,\n \"wifi-marker\": 988865,\n \"wifi-minus\": 988866,\n \"wifi-off\": 984490,\n \"wifi-plus\": 988867,\n \"wifi-refresh\": 988868,\n \"wifi-remove\": 988869,\n \"wifi-settings\": 988870,\n \"wifi-star\": 986635,\n \"wifi-strength-1\": 985375,\n \"wifi-strength-1-alert\": 985376,\n \"wifi-strength-1-lock\": 985377,\n \"wifi-strength-1-lock-open\": 988875,\n \"wifi-strength-2\": 985378,\n \"wifi-strength-2-alert\": 985379,\n \"wifi-strength-2-lock\": 985380,\n \"wifi-strength-2-lock-open\": 988876,\n \"wifi-strength-3\": 985381,\n \"wifi-strength-3-alert\": 985382,\n \"wifi-strength-3-lock\": 985383,\n \"wifi-strength-3-lock-open\": 988877,\n \"wifi-strength-4\": 985384,\n \"wifi-strength-4-alert\": 985385,\n \"wifi-strength-4-lock\": 985386,\n \"wifi-strength-4-lock-open\": 988878,\n \"wifi-strength-alert-outline\": 985387,\n \"wifi-strength-lock-open-outline\": 988879,\n \"wifi-strength-lock-outline\": 985388,\n \"wifi-strength-off\": 985389,\n \"wifi-strength-off-outline\": 985390,\n \"wifi-strength-outline\": 985391,\n \"wifi-sync\": 988871,\n \"wikipedia\": 984492,\n \"wind-turbine\": 986533,\n \"wind-turbine-alert\": 989611,\n \"wind-turbine-check\": 989612,\n \"window-close\": 984493,\n \"window-closed\": 984494,\n \"window-closed-variant\": 987611,\n \"window-maximize\": 984495,\n \"window-minimize\": 984496,\n \"window-open\": 984497,\n \"window-open-variant\": 987612,\n \"window-restore\": 984498,\n \"window-shutter\": 987420,\n \"window-shutter-alert\": 987421,\n \"window-shutter-open\": 987422,\n \"windsock\": 988666,\n \"wiper\": 985833,\n \"wiper-wash\": 986534,\n \"wiper-wash-alert\": 989407,\n \"wizard-hat\": 988279,\n \"wordpress\": 984500,\n \"wrap\": 984502,\n \"wrap-disabled\": 986079,\n \"wrench\": 984503,\n \"wrench-clock\": 989603,\n \"wrench-outline\": 986080,\n \"xamarin\": 985157,\n \"xml\": 984512,\n \"xmpp\": 985087,\n \"yahoo\": 985935,\n \"yeast\": 984513,\n \"yin-yang\": 984704,\n \"yoga\": 987516,\n \"youtube\": 984515,\n \"youtube-gaming\": 985160,\n \"youtube-studio\": 985159,\n \"youtube-subscription\": 986432,\n \"youtube-tv\": 984136,\n \"yurt\": 988438,\n \"z-wave\": 985834,\n \"zend\": 985835,\n \"zigbee\": 986433,\n \"zip-box\": 984516,\n \"zip-box-outline\": 987130,\n \"zip-disk\": 985635,\n \"zodiac-aquarius\": 985725,\n \"zodiac-aries\": 985726,\n \"zodiac-cancer\": 985727,\n \"zodiac-capricorn\": 985728,\n \"zodiac-gemini\": 985729,\n \"zodiac-leo\": 985730,\n \"zodiac-libra\": 985731,\n \"zodiac-pisces\": 985732,\n \"zodiac-sagittarius\": 985733,\n \"zodiac-scorpio\": 985734,\n \"zodiac-taurus\": 985735,\n \"zodiac-virgo\": 985736,\n \"blank\": 63116\n}","import * as React from 'react';\nimport { View, StyleSheet } from 'react-native';\nimport PortalManager from './PortalManager';\nexport const PortalContext = /*#__PURE__*/React.createContext(null);\n\n/**\n * Portal host renders all of its children `Portal` elements.\n * For example, you can wrap a screen in `Portal.Host` to render items above the screen.\n * If you're using the `Provider` component, it already includes `Portal.Host`.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Text } from 'react-native';\n * import { Portal } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * Content of the app\n * \n * );\n *\n * export default MyComponent;\n * ```\n *\n * Here any `Portal` elements under `` are rendered alongside `` and will appear above `` like a `Modal`.\n */\nexport default class PortalHost extends React.Component {\n static displayName = 'Portal.Host';\n componentDidMount() {\n const manager = this.manager;\n const queue = this.queue;\n while (queue.length && manager) {\n const action = queue.pop();\n if (action) {\n // eslint-disable-next-line default-case\n switch (action.type) {\n case 'mount':\n manager.mount(action.key, action.children);\n break;\n case 'update':\n manager.update(action.key, action.children);\n break;\n case 'unmount':\n manager.unmount(action.key);\n break;\n }\n }\n }\n }\n setManager = manager => {\n this.manager = manager;\n };\n mount = children => {\n const key = this.nextKey++;\n if (this.manager) {\n this.manager.mount(key, children);\n } else {\n this.queue.push({\n type: 'mount',\n key,\n children\n });\n }\n return key;\n };\n update = (key, children) => {\n if (this.manager) {\n this.manager.update(key, children);\n } else {\n const op = {\n type: 'mount',\n key,\n children\n };\n const index = this.queue.findIndex(o => o.type === 'mount' || o.type === 'update' && o.key === key);\n if (index > -1) {\n this.queue[index] = op;\n } else {\n this.queue.push(op);\n }\n }\n };\n unmount = key => {\n if (this.manager) {\n this.manager.unmount(key);\n } else {\n this.queue.push({\n type: 'unmount',\n key\n });\n }\n };\n nextKey = 0;\n queue = [];\n render() {\n return /*#__PURE__*/React.createElement(PortalContext.Provider, {\n value: {\n mount: this.mount,\n update: this.update,\n unmount: this.unmount\n }\n }, /*#__PURE__*/React.createElement(View, {\n style: styles.container,\n collapsable: false,\n pointerEvents: \"box-none\"\n }, this.props.children), /*#__PURE__*/React.createElement(PortalManager, {\n ref: this.setManager\n }));\n }\n}\nconst styles = StyleSheet.create({\n container: {\n flex: 1\n }\n});\n//# sourceMappingURL=PortalHost.js.map","import * as React from 'react';\nimport { View, StyleSheet } from 'react-native';\n/**\n * Portal host is the component which actually renders all Portals.\n */\nexport default class PortalManager extends React.PureComponent {\n state = {\n portals: []\n };\n mount = (key, children) => {\n this.setState(state => ({\n portals: [...state.portals, {\n key,\n children\n }]\n }));\n };\n update = (key, children) => this.setState(state => ({\n portals: state.portals.map(item => {\n if (item.key === key) {\n return {\n ...item,\n children\n };\n }\n return item;\n })\n }));\n unmount = key => this.setState(state => ({\n portals: state.portals.filter(item => item.key !== key)\n }));\n render() {\n return this.state.portals.map(_ref => {\n let {\n key,\n children\n } = _ref;\n return /*#__PURE__*/React.createElement(View, {\n key: key,\n collapsable: false /* Need collapsable=false here to clip the elevations, otherwise they appear above sibling components */,\n\n pointerEvents: \"box-none\",\n style: StyleSheet.absoluteFill\n }, children);\n });\n }\n}\n//# sourceMappingURL=PortalManager.js.map","export function addEventListener(Module) {\n for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n rest[_key - 1] = arguments[_key];\n }\n const [eventName, handler] = rest;\n let removed = false;\n const subscription = Module.addEventListener(eventName, handler) ?? {\n remove: () => {\n var _Module$removeEventLi, _Module$remove;\n if (removed) {\n return;\n }\n (_Module$removeEventLi = Module.removeEventListener) === null || _Module$removeEventLi === void 0 ? void 0 : _Module$removeEventLi.call(Module, eventName, handler);\n (_Module$remove = Module.remove) === null || _Module$remove === void 0 ? void 0 : _Module$remove.call(Module, eventName, handler);\n removed = true;\n }\n };\n return subscription;\n}\nexport function addListener(Module) {\n for (var _len2 = arguments.length, rest = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n rest[_key2 - 1] = arguments[_key2];\n }\n const [eventName, handler] = rest;\n let removed = false;\n const subscription = Module.addListener(eventName, handler) ?? {\n remove: () => {\n if (removed) {\n return;\n }\n Module.removeEventListener(eventName, handler);\n removed = true;\n }\n };\n return subscription;\n}\n//# sourceMappingURL=addEventListener.js.map","import { Animated } from 'react-native';\nimport * as MD2Colors from './themes/v2/colors';\nimport { MD3Colors } from './themes/v3/tokens';\nconst SHADOW_COLOR = MD2Colors.black;\nconst SHADOW_OPACITY = 0.24;\nconst MD3_SHADOW_OPACITY = 0.3;\nconst MD3_SHADOW_COLOR = MD3Colors.primary0;\nexport default function shadow() {\n let elevation = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let isV3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n return isV3 ? v3Shadow(elevation) : v2Shadow(elevation);\n}\nfunction v2Shadow() {\n let elevation = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n if (elevation instanceof Animated.Value) {\n const inputRange = [0, 1, 2, 3, 8, 24];\n return {\n shadowColor: SHADOW_COLOR,\n shadowOffset: {\n width: new Animated.Value(0),\n height: elevation.interpolate({\n inputRange,\n outputRange: [0, 0.5, 0.75, 2, 7, 23]\n })\n },\n shadowOpacity: elevation.interpolate({\n inputRange: [0, 1],\n outputRange: [0, SHADOW_OPACITY],\n extrapolate: 'clamp'\n }),\n shadowRadius: elevation.interpolate({\n inputRange,\n outputRange: [0, 0.75, 1.5, 3, 8, 24]\n })\n };\n } else {\n if (elevation === 0) {\n return {};\n }\n let height, radius;\n switch (elevation) {\n case 1:\n height = 0.5;\n radius = 0.75;\n break;\n case 2:\n height = 0.75;\n radius = 1.5;\n break;\n default:\n height = elevation - 1;\n radius = elevation;\n }\n return {\n shadowColor: SHADOW_COLOR,\n shadowOffset: {\n width: 0,\n height\n },\n shadowOpacity: SHADOW_OPACITY,\n shadowRadius: radius\n };\n }\n}\nfunction v3Shadow() {\n let elevation = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n const inputRange = [0, 1, 2, 3, 4, 5];\n const shadowHeight = [0, 1, 2, 4, 6, 8];\n const shadowRadius = [0, 3, 6, 8, 10, 12];\n if (elevation instanceof Animated.Value) {\n return {\n shadowColor: MD3_SHADOW_COLOR,\n shadowOffset: {\n width: new Animated.Value(0),\n height: elevation.interpolate({\n inputRange,\n outputRange: shadowHeight\n })\n },\n shadowOpacity: elevation.interpolate({\n inputRange: [0, 1],\n outputRange: [0, MD3_SHADOW_OPACITY],\n extrapolate: 'clamp'\n }),\n shadowRadius: elevation.interpolate({\n inputRange,\n outputRange: shadowRadius\n })\n };\n } else {\n return {\n shadowColor: MD3_SHADOW_COLOR,\n shadowOpacity: elevation ? MD3_SHADOW_OPACITY : 0,\n shadowOffset: {\n width: 0,\n height: shadowHeight[elevation]\n },\n shadowRadius: shadowRadius[elevation]\n };\n }\n}\n//# sourceMappingURL=shadow.js.map","import { Animated } from 'react-native';\nimport color from 'color';\nimport { MD2DarkTheme } from './themes/v2/DarkTheme';\nexport const isAnimatedValue = it => it instanceof Animated.Value;\nexport default function overlay(elevation) {\n var _MD2DarkTheme$colors;\n let surfaceColor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (_MD2DarkTheme$colors = MD2DarkTheme.colors) === null || _MD2DarkTheme$colors === void 0 ? void 0 : _MD2DarkTheme$colors.surface;\n if (isAnimatedValue(elevation)) {\n const inputRange = [0, 1, 2, 3, 8, 24];\n\n // @ts-expect-error: TS doesn't seem to refine the type correctly\n return elevation.interpolate({\n inputRange,\n outputRange: inputRange.map(elevation => {\n return calculateColor(surfaceColor, elevation);\n })\n });\n }\n\n // @ts-expect-error: TS doesn't seem to refine the type correctly\n return calculateColor(surfaceColor, elevation);\n}\nfunction calculateColor(surfaceColor) {\n let elevation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n let overlayTransparency;\n if (elevation >= 1 && elevation <= 24) {\n overlayTransparency = elevationOverlayTransparency[elevation];\n } else if (elevation > 24) {\n overlayTransparency = elevationOverlayTransparency[24];\n } else {\n overlayTransparency = elevationOverlayTransparency[1];\n }\n return color(surfaceColor).mix(color('white'), overlayTransparency * 0.01).hex();\n}\nconst elevationOverlayTransparency = {\n 1: 5,\n 2: 7,\n 3: 8,\n 4: 9,\n 5: 10,\n 6: 11,\n 7: 11.5,\n 8: 12,\n 9: 12.5,\n 10: 13,\n 11: 13.5,\n 12: 14,\n 13: 14.25,\n 14: 14.5,\n 15: 14.75,\n 16: 15,\n 17: 15.12,\n 18: 15.24,\n 19: 15.36,\n 20: 15.48,\n 21: 15.6,\n 22: 15.72,\n 23: 15.84,\n 24: 16\n};\n//# sourceMappingURL=overlay.js.map","// @component ./AvatarIcon.tsx\nexport { default as Icon } from './AvatarIcon';\n\n// @component ./AvatarImage.tsx\nexport { default as Image } from './AvatarImage';\n\n// @component ./AvatarText.tsx\nexport { default as Text } from './AvatarText';\n//# sourceMappingURL=Avatar.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport { useInternalTheme } from '../../core/theming';\nimport { white } from '../../styles/themes/v2/colors';\nimport getContrastingColor from '../../utils/getContrastingColor';\nimport Icon from '../Icon';\nconst defaultSize = 64;\n/**\n * Avatars can be used to represent people in a graphical way.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Avatar } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * );\n * ```\n */\nconst Avatar = _ref => {\n var _theme$colors;\n let {\n icon,\n size = defaultSize,\n style,\n theme: themeOverrides,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const {\n backgroundColor = (_theme$colors = theme.colors) === null || _theme$colors === void 0 ? void 0 : _theme$colors.primary,\n ...restStyle\n } = StyleSheet.flatten(style) || {};\n const textColor = rest.color ?? getContrastingColor(backgroundColor, white, 'rgba(0, 0, 0, .54)');\n return /*#__PURE__*/React.createElement(View, _extends({\n style: [{\n width: size,\n height: size,\n borderRadius: size / 2,\n backgroundColor\n }, styles.container, restStyle]\n }, rest), /*#__PURE__*/React.createElement(Icon, {\n source: icon,\n color: textColor,\n size: size * 0.6\n }));\n};\nAvatar.displayName = 'Avatar.Icon';\nconst styles = StyleSheet.create({\n container: {\n justifyContent: 'center',\n alignItems: 'center'\n }\n});\nexport default Avatar;\n//# sourceMappingURL=AvatarIcon.js.map","import color from 'color';\nexport default function getContrastingColor(input, light, dark) {\n if (typeof input === 'string') {\n return color(input).isLight() ? dark : light;\n }\n return light;\n}\n//# sourceMappingURL=getContrastingColor.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { I18nManager, Image, Platform } from 'react-native';\nimport { accessibilityProps } from './MaterialCommunityIcon';\nimport { Consumer as SettingsConsumer } from '../core/settings';\nimport { useInternalTheme } from '../core/theming';\nconst isImageSource = source =>\n// source is an object with uri\ntypeof source === 'object' && source !== null && Object.prototype.hasOwnProperty.call(source, 'uri') && typeof source.uri === 'string' ||\n// source is a module, e.g. - require('image')\ntypeof source === 'number' ||\n// image url on web\nPlatform.OS === 'web' && typeof source === 'string' && (source.startsWith('data:image') || /\\.(bmp|jpg|jpeg|png|gif|svg)$/.test(source));\nconst getIconId = source => {\n if (typeof source === 'object' && source !== null && Object.prototype.hasOwnProperty.call(source, 'uri') && typeof source.uri === 'string') {\n return source.uri;\n }\n return source;\n};\nexport const isValidIcon = source => typeof source === 'string' || typeof source === 'function' || isImageSource(source);\nexport const isEqualIcon = (a, b) => a === b || getIconId(a) === getIconId(b);\n/**\n * An icon component which renders icon from vector library.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Icon, MD3Colors } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * );\n *\n * export default MyComponent;\n * ```\n */\n\nconst Icon = _ref => {\n let {\n source,\n color,\n size,\n theme: themeOverrides,\n testID,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const direction = typeof source === 'object' && source.direction && source.source ? source.direction === 'auto' ? I18nManager.getConstants().isRTL ? 'rtl' : 'ltr' : source.direction : null;\n const s = typeof source === 'object' && source.direction && source.source ? source.source : source;\n const iconColor = color || (theme.isV3 ? theme.colors.onSurface : theme.colors.text);\n if (isImageSource(s)) {\n return /*#__PURE__*/React.createElement(Image, _extends({}, rest, {\n testID: testID,\n source: s,\n style: [{\n transform: [{\n scaleX: direction === 'rtl' ? -1 : 1\n }]\n }, {\n width: size,\n height: size,\n tintColor: color,\n resizeMode: `contain`\n }]\n }, accessibilityProps, {\n accessibilityIgnoresInvertColors: true\n }));\n } else if (typeof s === 'string') {\n return /*#__PURE__*/React.createElement(SettingsConsumer, null, _ref2 => {\n let {\n icon\n } = _ref2;\n return icon === null || icon === void 0 ? void 0 : icon({\n name: s,\n color: iconColor,\n size,\n direction,\n testID\n });\n });\n } else if (typeof s === 'function') {\n return s({\n color: iconColor,\n size,\n direction,\n testID\n });\n }\n return null;\n};\nexport default Icon;\n//# sourceMappingURL=Icon.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Image, StyleSheet, View } from 'react-native';\nimport { useInternalTheme } from '../../core/theming';\nconst defaultSize = 64;\n/**\n * Avatars can be used to represent people in a graphical way.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Avatar } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * );\n * export default MyComponent\n * ```\n */\nconst AvatarImage = _ref => {\n let {\n size = defaultSize,\n source,\n style,\n onError,\n onLayout,\n onLoad,\n onLoadEnd,\n onLoadStart,\n onProgress,\n theme: themeOverrides,\n testID,\n ...rest\n } = _ref;\n const {\n colors\n } = useInternalTheme(themeOverrides);\n const {\n backgroundColor = colors === null || colors === void 0 ? void 0 : colors.primary\n } = StyleSheet.flatten(style) || {};\n return /*#__PURE__*/React.createElement(View, _extends({\n style: [{\n width: size,\n height: size,\n borderRadius: size / 2,\n backgroundColor\n }, style]\n }, rest), typeof source === 'function' && source({\n size\n }), typeof source !== 'function' && /*#__PURE__*/React.createElement(Image, {\n testID: testID,\n source: source,\n style: {\n width: size,\n height: size,\n borderRadius: size / 2\n },\n onError: onError,\n onLayout: onLayout,\n onLoad: onLoad,\n onLoadEnd: onLoadEnd,\n onLoadStart: onLoadStart,\n onProgress: onProgress,\n accessibilityIgnoresInvertColors: true\n }));\n};\nAvatarImage.displayName = 'Avatar.Image';\nexport default AvatarImage;\n//# sourceMappingURL=AvatarImage.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet, useWindowDimensions, View } from 'react-native';\nimport { useInternalTheme } from '../../core/theming';\nimport { white } from '../../styles/themes/v2/colors';\nimport getContrastingColor from '../../utils/getContrastingColor';\nimport Text from '../Typography/Text';\nconst defaultSize = 64;\n/**\n * Avatars can be used to represent people in a graphical way.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Avatar } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * );\n * ```\n */\nconst AvatarText = _ref => {\n var _theme$colors;\n let {\n label,\n size = defaultSize,\n style,\n labelStyle,\n color: customColor,\n theme: themeOverrides,\n maxFontSizeMultiplier,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const {\n backgroundColor = (_theme$colors = theme.colors) === null || _theme$colors === void 0 ? void 0 : _theme$colors.primary,\n ...restStyle\n } = StyleSheet.flatten(style) || {};\n const textColor = customColor ?? getContrastingColor(backgroundColor, white, 'rgba(0, 0, 0, .54)');\n const {\n fontScale\n } = useWindowDimensions();\n return /*#__PURE__*/React.createElement(View, _extends({\n style: [{\n width: size,\n height: size,\n borderRadius: size / 2,\n backgroundColor\n }, styles.container, restStyle]\n }, rest), /*#__PURE__*/React.createElement(Text, {\n style: [styles.text, {\n color: textColor,\n fontSize: size / 2,\n lineHeight: size / fontScale\n }, labelStyle],\n numberOfLines: 1,\n maxFontSizeMultiplier: maxFontSizeMultiplier\n }, label));\n};\nAvatarText.displayName = 'Avatar.Text';\nconst styles = StyleSheet.create({\n container: {\n justifyContent: 'center',\n alignItems: 'center'\n },\n text: {\n textAlign: 'center',\n textAlignVertical: 'center'\n }\n});\nexport default AvatarText;\n//# sourceMappingURL=AvatarText.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { I18nManager, StyleSheet, Text as NativeText } from 'react-native';\nimport AnimatedText from './AnimatedText';\nimport StyledText from './v2/StyledText';\nimport { useInternalTheme } from '../../core/theming';\nimport { forwardRef } from '../../utils/forwardRef';\n// @component-group Typography\n/**\n * Typography component showing styles complied with passed `variant` prop and supported by the type system.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Text } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * <>\n * Display Large\n * Display Medium\n * Display small\n *\n * Headline Large\n * Headline Medium\n * Headline Small\n *\n * Title Large\n * Title Medium\n * Title Small\n *\n * Body Large\n * Body Medium\n * Body Small\n *\n * Label Large\n * Label Medium\n * Label Small\n * \n * );\n *\n * export default MyComponent;\n * ```\n *\n * @extends Text props https://reactnative.dev/docs/text#props\n */\nconst Text = (_ref, ref) => {\n let {\n style,\n variant,\n theme: initialTheme,\n ...rest\n } = _ref;\n const root = React.useRef(null);\n // FIXME: destructure it in TS 4.6+\n const theme = useInternalTheme(initialTheme);\n const writingDirection = I18nManager.getConstants().isRTL ? 'rtl' : 'ltr';\n React.useImperativeHandle(ref, () => ({\n setNativeProps: args => {\n var _root$current;\n return (_root$current = root.current) === null || _root$current === void 0 ? void 0 : _root$current.setNativeProps(args);\n }\n }));\n if (theme.isV3 && variant) {\n let font = theme.fonts[variant];\n let textStyle = [font, style];\n if ( /*#__PURE__*/React.isValidElement(rest.children) && (rest.children.type === Component || rest.children.type === AnimatedText || rest.children.type === StyledText)) {\n const {\n props\n } = rest.children;\n\n // Context: Some components have the built-in `Text` component with a predefined variant,\n // that also accepts `children` as a `React.Node`. This can result in a situation,\n // where another `Text` component is rendered within the built-in `Text` component.\n // By doing that, we assume that user doesn't want to consume pre-defined font properties.\n // Case one: Nested `Text` has different `variant` that specified in parent. For example:\n // \n // Nested\n // \n // Solution: To address the following scenario, the code below overrides the `variant`\n // specified in a parent in favor of children's variant:\n if (props.variant) {\n font = theme.fonts[props.variant];\n textStyle = [style, font];\n }\n\n // Case two: Nested `Text` has specified `styles` which intefere\n // with font properties, from the parent's `variant`. For example:\n // \n // Nested\n // \n // Solution: To address the following scenario, the code below overrides the\n // parent's style with children's style:\n if (!props.variant) {\n textStyle = [style, props.style];\n }\n }\n if (typeof font !== 'object') {\n throw new Error(`Variant ${variant} was not provided properly. Valid variants are ${Object.keys(theme.fonts).join(', ')}.`);\n }\n return /*#__PURE__*/React.createElement(NativeText, _extends({\n ref: root,\n style: [styles.text, {\n writingDirection,\n color: theme.colors.onSurface\n }, textStyle]\n }, rest));\n } else {\n var _theme$fonts, _theme$colors;\n const font = theme.isV3 ? theme.fonts.default : (_theme$fonts = theme.fonts) === null || _theme$fonts === void 0 ? void 0 : _theme$fonts.regular;\n const textStyle = {\n ...font,\n color: theme.isV3 ? (_theme$colors = theme.colors) === null || _theme$colors === void 0 ? void 0 : _theme$colors.onSurface : theme.colors.text\n };\n return /*#__PURE__*/React.createElement(NativeText, _extends({}, rest, {\n ref: root,\n style: [styles.text, textStyle, {\n writingDirection\n }, style]\n }));\n }\n};\nconst styles = StyleSheet.create({\n text: {\n textAlign: 'left'\n }\n});\nconst Component = forwardRef(Text);\nexport const customText = () => Component;\nexport default Component;\n//# sourceMappingURL=Text.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Animated, I18nManager, StyleSheet } from 'react-native';\nimport { useInternalTheme } from '../../core/theming';\n/**\n * Animated text component which follows styles from the theme.\n *\n * @extends Text props https://reactnative.dev/docs/text#props\n */\nfunction AnimatedText(_ref) {\n let {\n style,\n theme: themeOverrides,\n variant,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const writingDirection = I18nManager.getConstants().isRTL ? 'rtl' : 'ltr';\n if (theme.isV3 && variant) {\n const font = theme.fonts[variant];\n if (typeof font !== 'object') {\n throw new Error(`Variant ${variant} was not provided properly. Valid variants are ${Object.keys(theme.fonts).join(', ')}.`);\n }\n return /*#__PURE__*/React.createElement(Animated.Text, _extends({}, rest, {\n style: [font, styles.text, {\n writingDirection,\n color: theme.colors.onSurface\n }, style]\n }));\n } else {\n const font = !theme.isV3 ? theme.fonts.regular : theme.fonts.bodyMedium;\n const textStyle = {\n ...font,\n color: theme.isV3 ? theme.colors.onSurface : theme.colors.text\n };\n return /*#__PURE__*/React.createElement(Animated.Text, _extends({}, rest, {\n style: [styles.text, textStyle, {\n writingDirection\n }, style]\n }));\n }\n}\nconst styles = StyleSheet.create({\n text: {\n textAlign: 'left'\n }\n});\nexport const customAnimatedText = () => AnimatedText;\nexport default AnimatedText;\n//# sourceMappingURL=AnimatedText.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { I18nManager, StyleSheet } from 'react-native';\nimport color from 'color';\nimport Text from './Text';\nimport { useInternalTheme } from '../../../core/theming';\nconst StyledText = _ref => {\n var _theme$colors, _theme$fonts;\n let {\n alpha = 1,\n family,\n style,\n theme: themeOverrides,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const textColor = color(theme.isV3 ? theme.colors.onSurface : (_theme$colors = theme.colors) === null || _theme$colors === void 0 ? void 0 : _theme$colors.text).alpha(alpha).rgb().string();\n const writingDirection = I18nManager.getConstants().isRTL ? 'rtl' : 'ltr';\n return /*#__PURE__*/React.createElement(Text, _extends({}, rest, {\n style: [styles.text, {\n color: textColor,\n ...(!theme.isV3 && ((_theme$fonts = theme.fonts) === null || _theme$fonts === void 0 ? void 0 : _theme$fonts[family])),\n writingDirection\n }, style]\n }));\n};\nconst styles = StyleSheet.create({\n text: {\n textAlign: 'left'\n }\n});\nexport default StyledText;\n//# sourceMappingURL=StyledText.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet, Text as NativeText } from 'react-native';\nimport { useInternalTheme } from '../../../core/theming';\nimport { forwardRef } from '../../../utils/forwardRef';\n// @component-group Typography\n/**\n * Text component which follows styles from the theme.\n *\n * @extends Text props https://reactnative.dev/docs/text#props\n */\nconst Text = (_ref, ref) => {\n var _theme$fonts, _theme$colors;\n let {\n style,\n theme: overrideTheme,\n ...rest\n } = _ref;\n const root = React.useRef(null);\n const theme = useInternalTheme(overrideTheme);\n React.useImperativeHandle(ref, () => ({\n setNativeProps: args => {\n var _root$current;\n return (_root$current = root.current) === null || _root$current === void 0 ? void 0 : _root$current.setNativeProps(args);\n }\n }));\n return /*#__PURE__*/React.createElement(NativeText, _extends({}, rest, {\n ref: root,\n style: [{\n ...(!theme.isV3 && ((_theme$fonts = theme.fonts) === null || _theme$fonts === void 0 ? void 0 : _theme$fonts.regular)),\n color: theme.isV3 ? (_theme$colors = theme.colors) === null || _theme$colors === void 0 ? void 0 : _theme$colors.onSurface : theme.colors.text\n }, styles.text, style]\n }));\n};\nconst styles = StyleSheet.create({\n text: {\n textAlign: 'left'\n }\n});\nexport default forwardRef(Text);\n//# sourceMappingURL=Text.js.map","import * as React from 'react';\n/**\n * TypeScript generated a large union of props from `ViewProps` in\n * `d.ts` files when using `React.forwardRef`. To prevent this\n * `ForwardRefComponent` was created and exported. Use this\n * `forwardRef` instead of `React.forwardRef` so you don't have to\n * import `ForwardRefComponent`.\n * More info: https://github.com/callstack/react-native-paper/pull/3603\n */\nexport const forwardRef = React.forwardRef;\n//# sourceMappingURL=forwardRef.js.map","// @component ./DrawerItem.tsx\nexport { default as Item } from './DrawerItem';\n\n// @component ./DrawerCollapsedItem.tsx\nexport { default as CollapsedItem } from './DrawerCollapsedItem';\n\n// @component ./DrawerSection.tsx\nexport { default as Section } from './DrawerSection';\n//# sourceMappingURL=Drawer.js.map","import * as React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport color from 'color';\nimport { useInternalTheme } from '../../core/theming';\nimport Icon from '../Icon';\nimport TouchableRipple from '../TouchableRipple/TouchableRipple';\nimport Text from '../Typography/Text';\n/**\n * A component used to show an action item with an icon and a label in a navigation drawer.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Drawer } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * );\n *\n * export default MyComponent;\n * ```\n */\nconst DrawerItem = _ref => {\n let {\n icon,\n label,\n active,\n disabled,\n theme: themeOverrides,\n rippleColor: customRippleColor,\n style,\n onPress,\n background,\n accessibilityLabel,\n right,\n labelMaxFontSizeMultiplier,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const {\n roundness,\n isV3\n } = theme;\n const backgroundColor = active ? isV3 ? theme.colors.secondaryContainer : color(theme.colors.primary).alpha(0.12).rgb().string() : 'transparent';\n const contentColor = active ? isV3 ? theme.colors.onSecondaryContainer : theme.colors.primary : isV3 ? theme.colors.onSurfaceVariant : color(theme.colors.text).alpha(0.68).rgb().string();\n const labelMargin = icon ? isV3 ? 12 : 32 : 0;\n const borderRadius = (isV3 ? 7 : 1) * roundness;\n const rippleColor = isV3 ? color(contentColor).alpha(0.12).rgb().string() : undefined;\n const font = isV3 ? theme.fonts.labelLarge : theme.fonts.medium;\n return /*#__PURE__*/React.createElement(View, rest, /*#__PURE__*/React.createElement(TouchableRipple, {\n borderless: true,\n disabled: disabled,\n background: background,\n onPress: onPress,\n style: [styles.container, {\n backgroundColor,\n borderRadius\n }, isV3 && styles.v3Container, style],\n accessibilityRole: \"button\",\n accessibilityState: {\n selected: active\n },\n accessibilityLabel: accessibilityLabel,\n rippleColor: customRippleColor || rippleColor,\n theme: theme\n }, /*#__PURE__*/React.createElement(View, {\n style: [styles.wrapper, isV3 && styles.v3Wrapper]\n }, /*#__PURE__*/React.createElement(View, {\n style: styles.content\n }, icon ? /*#__PURE__*/React.createElement(Icon, {\n source: icon,\n size: 24,\n color: contentColor\n }) : null, /*#__PURE__*/React.createElement(Text, {\n variant: \"labelLarge\",\n selectable: false,\n numberOfLines: 1,\n style: [styles.label, {\n color: contentColor,\n marginLeft: labelMargin,\n ...font\n }],\n maxFontSizeMultiplier: labelMaxFontSizeMultiplier\n }, label)), right === null || right === void 0 ? void 0 : right({\n color: contentColor\n }))));\n};\nDrawerItem.displayName = 'Drawer.Item';\nconst styles = StyleSheet.create({\n container: {\n marginHorizontal: 10,\n marginVertical: 4\n },\n v3Container: {\n justifyContent: 'center',\n height: 56,\n marginLeft: 12,\n marginRight: 12,\n marginVertical: 0\n },\n wrapper: {\n flexDirection: 'row',\n alignItems: 'center',\n padding: 8\n },\n v3Wrapper: {\n marginLeft: 16,\n marginRight: 24,\n padding: 0\n },\n content: {\n flex: 1,\n flexDirection: 'row',\n alignItems: 'center'\n },\n label: {\n marginRight: 32\n }\n});\nexport default DrawerItem;\n//# sourceMappingURL=DrawerItem.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Platform, StyleSheet } from 'react-native';\nimport color from 'color';\nimport { Pressable } from './Pressable';\nimport { getTouchableRippleColors } from './utils';\nimport { SettingsContext } from '../../core/settings';\nimport { useInternalTheme } from '../../core/theming';\nimport { forwardRef } from '../../utils/forwardRef';\nimport hasTouchHandler from '../../utils/hasTouchHandler';\n/**\n * A wrapper for views that should respond to touches.\n * Provides a material \"ink ripple\" interaction effect for supported platforms (>= Android Lollipop).\n * On unsupported platforms, it falls back to a highlight effect.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { View } from 'react-native';\n * import { Text, TouchableRipple } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * console.log('Pressed')}\n * rippleColor=\"rgba(0, 0, 0, .32)\"\n * >\n * Press anywhere\n * \n * );\n *\n * export default MyComponent;\n * ```\n *\n * @extends Pressable props https://reactnative.dev/docs/Pressable#props\n */\nconst TouchableRipple = (_ref, ref) => {\n let {\n style,\n background: _background,\n borderless = false,\n disabled: disabledProp,\n rippleColor,\n underlayColor: _underlayColor,\n children,\n theme: themeOverrides,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const {\n calculatedRippleColor\n } = getTouchableRippleColors({\n theme,\n rippleColor\n });\n const hoverColor = color(calculatedRippleColor).fade(0.5).rgb().string();\n const {\n rippleEffectEnabled\n } = React.useContext(SettingsContext);\n const {\n onPress,\n onLongPress,\n onPressIn,\n onPressOut\n } = rest;\n const handlePressIn = React.useCallback(e => {\n onPressIn === null || onPressIn === void 0 ? void 0 : onPressIn(e);\n if (rippleEffectEnabled) {\n const {\n centered\n } = rest;\n const button = e.currentTarget;\n const style = window.getComputedStyle(button);\n const dimensions = button.getBoundingClientRect();\n let touchX;\n let touchY;\n const {\n changedTouches,\n touches\n } = e.nativeEvent;\n const touch = (touches === null || touches === void 0 ? void 0 : touches[0]) ?? (changedTouches === null || changedTouches === void 0 ? void 0 : changedTouches[0]);\n\n // If centered or it was pressed using keyboard - enter or space\n if (centered || !touch) {\n touchX = dimensions.width / 2;\n touchY = dimensions.height / 2;\n } else {\n touchX = touch.locationX ?? e.pageX;\n touchY = touch.locationY ?? e.pageY;\n }\n\n // Get the size of the button to determine how big the ripple should be\n const size = centered ?\n // If ripple is always centered, we don't need to make it too big\n Math.min(dimensions.width, dimensions.height) * 1.25 :\n // Otherwise make it twice as big so clicking on one end spreads ripple to other\n Math.max(dimensions.width, dimensions.height) * 2;\n\n // Create a container for our ripple effect so we don't need to change the parent's style\n const container = document.createElement('span');\n container.setAttribute('data-paper-ripple', '');\n Object.assign(container.style, {\n position: 'absolute',\n pointerEvents: 'none',\n top: '0',\n left: '0',\n right: '0',\n bottom: '0',\n borderTopLeftRadius: style.borderTopLeftRadius,\n borderTopRightRadius: style.borderTopRightRadius,\n borderBottomRightRadius: style.borderBottomRightRadius,\n borderBottomLeftRadius: style.borderBottomLeftRadius,\n overflow: centered ? 'visible' : 'hidden'\n });\n\n // Create span to show the ripple effect\n const ripple = document.createElement('span');\n Object.assign(ripple.style, {\n position: 'absolute',\n pointerEvents: 'none',\n backgroundColor: calculatedRippleColor,\n borderRadius: '50%',\n /* Transition configuration */\n transitionProperty: 'transform opacity',\n transitionDuration: `${Math.min(size * 1.5, 350)}ms`,\n transitionTimingFunction: 'linear',\n transformOrigin: 'center',\n /* We'll animate these properties */\n transform: 'translate3d(-50%, -50%, 0) scale3d(0.1, 0.1, 0.1)',\n opacity: '0.5',\n // Position the ripple where cursor was\n left: `${touchX}px`,\n top: `${touchY}px`,\n width: `${size}px`,\n height: `${size}px`\n });\n\n // Finally, append it to DOM\n container.appendChild(ripple);\n button.appendChild(container);\n\n // rAF runs in the same frame as the event handler\n // Use double rAF to ensure the transition class is added in next frame\n // This will make sure that the transition animation is triggered\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n Object.assign(ripple.style, {\n transform: 'translate3d(-50%, -50%, 0) scale3d(1, 1, 1)',\n opacity: '1'\n });\n });\n });\n }\n }, [onPressIn, rest, rippleEffectEnabled, calculatedRippleColor]);\n const handlePressOut = React.useCallback(e => {\n onPressOut === null || onPressOut === void 0 ? void 0 : onPressOut(e);\n if (rippleEffectEnabled) {\n const containers = e.currentTarget.querySelectorAll('[data-paper-ripple]');\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n containers.forEach(container => {\n const ripple = container.firstChild;\n Object.assign(ripple.style, {\n transitionDuration: '250ms',\n opacity: 0\n });\n\n // Finally remove the span after the transition\n setTimeout(() => {\n const {\n parentNode\n } = container;\n if (parentNode) {\n parentNode.removeChild(container);\n }\n }, 500);\n });\n });\n });\n }\n }, [onPressOut, rippleEffectEnabled]);\n const hasPassedTouchHandler = hasTouchHandler({\n onPress,\n onLongPress,\n onPressIn,\n onPressOut\n });\n const disabled = disabledProp || !hasPassedTouchHandler;\n return /*#__PURE__*/React.createElement(Pressable, _extends({}, rest, {\n ref: ref,\n onPressIn: handlePressIn,\n onPressOut: handlePressOut,\n disabled: disabled,\n style: state => [styles.touchable, borderless && styles.borderless,\n // focused state is not ready yet: https://github.com/necolas/react-native-web/issues/1849\n // state.focused && { backgroundColor: ___ },\n state.hovered && {\n backgroundColor: hoverColor\n }, typeof style === 'function' ? style(state) : style]\n }), state => React.Children.only(typeof children === 'function' ? children(state) : children));\n};\n\n/**\n * Whether ripple effect is supported.\n */\nTouchableRipple.supported = true;\nconst styles = StyleSheet.create({\n touchable: {\n position: 'relative',\n ...(Platform.OS === 'web' && {\n cursor: 'pointer',\n transition: '150ms background-color'\n })\n },\n borderless: {\n overflow: 'hidden'\n }\n});\nconst Component = forwardRef(TouchableRipple);\nexport default Component;\n//# sourceMappingURL=TouchableRipple.js.map","import { Pressable as PressableNative } from 'react-native';\n\n// This component is added to support type-safe hover and focus states on web\n// https://necolas.github.io/react-native-web/docs/pressable/\nexport const Pressable = PressableNative;\n//# sourceMappingURL=Pressable.js.map","import color from 'color';\nconst getUnderlayColor = _ref => {\n let {\n theme,\n calculatedRippleColor,\n underlayColor\n } = _ref;\n if (underlayColor != null) {\n return underlayColor;\n }\n if (theme.isV3) {\n return color(calculatedRippleColor).rgb().string();\n }\n return color(calculatedRippleColor).fade(0.5).rgb().string();\n};\nconst getRippleColor = _ref2 => {\n let {\n theme,\n rippleColor\n } = _ref2;\n if (rippleColor) {\n return rippleColor;\n }\n if (theme.isV3) {\n return color(theme.colors.onSurface).alpha(0.12).rgb().string();\n }\n if (theme.dark) {\n return color(theme.colors.text).alpha(0.32).rgb().string();\n }\n return color(theme.colors.text).alpha(0.2).rgb().string();\n};\nexport const getTouchableRippleColors = _ref3 => {\n let {\n theme,\n rippleColor,\n underlayColor\n } = _ref3;\n const calculatedRippleColor = getRippleColor({\n theme,\n rippleColor\n });\n return {\n calculatedRippleColor,\n calculatedUnderlayColor: getUnderlayColor({\n theme,\n calculatedRippleColor,\n underlayColor\n })\n };\n};\n//# sourceMappingURL=utils.js.map","const touchableEvents = ['onPress', 'onLongPress', 'onPressIn', 'onPressOut'];\nexport default function hasTouchHandler(touchableEventObject) {\n return touchableEvents.some(event => {\n return Boolean(touchableEventObject[event]);\n });\n}\n//# sourceMappingURL=hasTouchHandler.js.map","import * as React from 'react';\nimport { Animated, Platform, Pressable, StyleSheet, View } from 'react-native';\nimport { useInternalTheme } from '../../core/theming';\nimport Badge from '../Badge';\nimport Icon from '../Icon';\nimport Text from '../Typography/Text';\nconst badgeSize = 8;\nconst iconSize = 24;\nconst itemSize = 56;\nconst outlineHeight = 32;\n\n/**\n * Note: Available in v5.x with theme version 3\n *\n * Collapsed component used to show an action item with an icon and optionally label in a navigation drawer.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Drawer } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * );\n *\n * export default MyComponent;\n * ```\n */\nconst DrawerCollapsedItem = _ref => {\n let {\n focusedIcon,\n unfocusedIcon,\n label,\n active,\n theme: themeOverrides,\n style,\n onPress,\n disabled,\n accessibilityLabel,\n badge = false,\n testID = 'drawer-collapsed-item',\n labelMaxFontSizeMultiplier,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const {\n isV3\n } = theme;\n const {\n scale\n } = theme.animation;\n const [numOfLines, setNumOfLines] = React.useState(1);\n const {\n current: animScale\n } = React.useRef(new Animated.Value(active ? 1 : 0.5));\n React.useEffect(() => {\n if (!active) {\n animScale.setValue(0.5);\n }\n }, [animScale, active]);\n if (!isV3) {\n return null;\n }\n const handlePressOut = () => {\n Animated.timing(animScale, {\n toValue: 1,\n duration: 150 * scale,\n useNativeDriver: true\n }).start();\n };\n const iconPadding = ((!label ? itemSize : outlineHeight) - iconSize) / 2;\n const backgroundColor = active ? theme.colors.secondaryContainer : 'transparent';\n const labelColor = active ? theme.colors.onSurface : theme.colors.onSurfaceVariant;\n const iconColor = active ? theme.colors.onSecondaryContainer : theme.colors.onSurfaceVariant;\n const onTextLayout = _ref2 => {\n let {\n nativeEvent\n } = _ref2;\n setNumOfLines(nativeEvent.lines.length);\n };\n\n // Label is cut off on Android, when centered \"labelMedium\" text\n // has more than 4 lines, so there is a need to decrease the letter spacing.\n const androidLetterSpacingStyle = Platform.OS === 'android' && numOfLines > 4 && styles.letterSpacing;\n const labelTextStyle = {\n color: labelColor,\n ...(isV3 ? theme.fonts.labelMedium : {})\n };\n const icon = !active && unfocusedIcon !== undefined ? unfocusedIcon : focusedIcon;\n return /*#__PURE__*/React.createElement(View, rest, /*#__PURE__*/React.createElement(Pressable, {\n onPress: onPress,\n onPressOut: onPress ? handlePressOut : undefined,\n disabled: disabled\n // @ts-expect-error We keep old a11y props for backwards compat with old RN versions\n ,\n accessibilityTraits: active ? ['button', 'selected'] : 'button',\n accessibilityComponentType: \"button\",\n accessibilityRole: \"button\",\n accessibilityState: {\n selected: active\n },\n accessibilityLabel: accessibilityLabel,\n testID: testID\n }, /*#__PURE__*/React.createElement(View, {\n style: styles.wrapper\n }, /*#__PURE__*/React.createElement(Animated.View, {\n style: [styles.outline, !label && styles.roundedOutline, {\n transform: [label ? {\n scaleX: animScale\n } : {\n scale: animScale\n }],\n backgroundColor\n }, style],\n testID: `${testID}-outline`\n }), /*#__PURE__*/React.createElement(View, {\n style: [styles.icon, {\n top: iconPadding\n }],\n testID: `${testID}-container`\n }, badge && /*#__PURE__*/React.createElement(View, {\n style: styles.badgeContainer\n }, typeof badge === 'boolean' ? /*#__PURE__*/React.createElement(Badge, {\n visible: badge,\n size: badgeSize\n }) : /*#__PURE__*/React.createElement(Badge, {\n visible: badge != null,\n size: 2 * badgeSize\n }, badge)), /*#__PURE__*/React.createElement(Icon, {\n source: icon,\n size: iconSize,\n color: iconColor\n })), label ? /*#__PURE__*/React.createElement(Text, {\n variant: \"labelMedium\",\n selectable: false,\n numberOfLines: 2,\n onTextLayout: onTextLayout,\n style: [styles.label, androidLetterSpacingStyle, labelTextStyle],\n maxFontSizeMultiplier: labelMaxFontSizeMultiplier\n }, label) : null)));\n};\nDrawerCollapsedItem.displayName = 'Drawer.CollapsedItem';\nconst styles = StyleSheet.create({\n wrapper: {\n width: 80,\n marginBottom: 12,\n minHeight: itemSize,\n alignItems: 'center'\n },\n outline: {\n width: itemSize,\n height: outlineHeight,\n borderRadius: itemSize / 2,\n alignItems: 'center',\n justifyContent: 'center'\n },\n roundedOutline: {\n height: itemSize\n },\n icon: {\n position: 'absolute'\n },\n letterSpacing: {\n letterSpacing: 0.3,\n alignSelf: 'stretch'\n },\n label: {\n marginHorizontal: 12,\n marginTop: 4,\n textAlign: 'center'\n },\n badgeContainer: {\n position: 'absolute',\n left: 20,\n bottom: 20,\n zIndex: 2\n }\n});\nexport default DrawerCollapsedItem;\n//# sourceMappingURL=DrawerCollapsedItem.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Animated, StyleSheet, useWindowDimensions } from 'react-native';\nimport { useInternalTheme } from '../core/theming';\nimport { black, white } from '../styles/themes/v2/colors';\nimport getContrastingColor from '../utils/getContrastingColor';\nconst defaultSize = 20;\n/**\n * Badges are small status descriptors for UI elements.\n * A badge consists of a small circle, typically containing a number or other short set of characters, that appears in proximity to another object.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Badge } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * 3\n * );\n *\n * export default MyComponent;\n * ```\n */\nconst Badge = _ref => {\n var _theme$colors;\n let {\n children,\n size = defaultSize,\n style,\n theme: themeOverrides,\n visible = true,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const {\n current: opacity\n } = React.useRef(new Animated.Value(visible ? 1 : 0));\n const {\n fontScale\n } = useWindowDimensions();\n const isFirstRendering = React.useRef(true);\n const {\n animation: {\n scale\n }\n } = theme;\n React.useEffect(() => {\n // Do not run animation on very first rendering\n if (isFirstRendering.current) {\n isFirstRendering.current = false;\n return;\n }\n Animated.timing(opacity, {\n toValue: visible ? 1 : 0,\n duration: 150 * scale,\n useNativeDriver: true\n }).start();\n }, [visible, opacity, scale]);\n const {\n backgroundColor = theme.isV3 ? theme.colors.error : (_theme$colors = theme.colors) === null || _theme$colors === void 0 ? void 0 : _theme$colors.notification,\n ...restStyle\n } = StyleSheet.flatten(style) || {};\n const textColor = theme.isV3 ? theme.colors.onError : getContrastingColor(backgroundColor, white, black);\n const borderRadius = size / 2;\n const paddingHorizontal = theme.isV3 ? 3 : 4;\n return /*#__PURE__*/React.createElement(Animated.Text, _extends({\n numberOfLines: 1,\n style: [{\n opacity,\n backgroundColor,\n color: textColor,\n fontSize: size * 0.5,\n ...(!theme.isV3 && theme.fonts.regular),\n lineHeight: size / fontScale,\n height: size,\n minWidth: size,\n borderRadius,\n paddingHorizontal\n }, styles.container, restStyle]\n }, rest), children);\n};\nexport default Badge;\nconst styles = StyleSheet.create({\n container: {\n alignSelf: 'flex-end',\n textAlign: 'center',\n textAlignVertical: 'center',\n overflow: 'hidden'\n }\n});\n//# sourceMappingURL=Badge.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport color from 'color';\nimport { useInternalTheme } from '../../core/theming';\nimport { MD3Colors } from '../../styles/themes/v3/tokens';\nimport Divider from '../Divider';\nimport Text from '../Typography/Text';\n/**\n * A component to group content inside a navigation drawer.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Drawer } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [active, setActive] = React.useState('');\n *\n * return (\n * \n * setActive('first')}\n * />\n * setActive('second')}\n * />\n * \n * );\n * };\n *\n * export default MyComponent;\n * ```\n */\nconst DrawerSection = _ref => {\n let {\n children,\n title,\n theme: themeOverrides,\n style,\n showDivider = true,\n titleMaxFontSizeMultiplier,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const {\n isV3\n } = theme;\n const titleColor = isV3 ? theme.colors.onSurfaceVariant : color(theme.colors.text).alpha(0.54).rgb().string();\n const titleMargin = isV3 ? 28 : 16;\n const font = isV3 ? theme.fonts.titleSmall : theme.fonts.medium;\n return /*#__PURE__*/React.createElement(View, _extends({\n style: [styles.container, style]\n }, rest), title && /*#__PURE__*/React.createElement(View, {\n style: [styles.titleContainer, isV3 && styles.v3TitleContainer]\n }, title && /*#__PURE__*/React.createElement(Text, {\n variant: \"titleSmall\",\n numberOfLines: 1,\n style: [{\n color: titleColor,\n marginLeft: titleMargin,\n ...font\n }],\n maxFontSizeMultiplier: titleMaxFontSizeMultiplier\n }, title)), children, showDivider && /*#__PURE__*/React.createElement(Divider, _extends({}, isV3 && {\n horizontalInset: true,\n bold: true\n }, {\n style: [styles.divider, isV3 && styles.v3Divider],\n theme: theme\n })));\n};\nDrawerSection.displayName = 'Drawer.Section';\nconst styles = StyleSheet.create({\n container: {\n marginBottom: 4\n },\n titleContainer: {\n height: 40,\n justifyContent: 'center'\n },\n v3TitleContainer: {\n height: 56\n },\n divider: {\n marginTop: 4\n },\n v3Divider: {\n backgroundColor: MD3Colors.neutralVariant50\n }\n});\nexport default DrawerSection;\n//# sourceMappingURL=DrawerSection.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport color from 'color';\nimport { useInternalTheme } from '../core/theming';\nimport { black, white } from '../styles/themes/v2/colors';\n/**\n * A divider is a thin, lightweight separator that groups content in lists and page layouts.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { View } from 'react-native';\n * import { Divider, Text } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * Lemon\n * \n * Mango\n * \n * \n * );\n *\n * export default MyComponent;\n * ```\n */\nconst Divider = _ref => {\n let {\n leftInset,\n horizontalInset = false,\n style,\n theme: themeOverrides,\n bold = false,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const {\n dark: isDarkTheme,\n isV3\n } = theme;\n const dividerColor = isV3 ? theme.colors.outlineVariant : color(isDarkTheme ? white : black).alpha(0.12).rgb().string();\n return /*#__PURE__*/React.createElement(View, _extends({}, rest, {\n style: [{\n height: StyleSheet.hairlineWidth,\n backgroundColor: dividerColor\n }, leftInset && (isV3 ? styles.v3LeftInset : styles.leftInset), isV3 && horizontalInset && styles.horizontalInset, isV3 && bold && styles.bold, style]\n }));\n};\nconst styles = StyleSheet.create({\n leftInset: {\n marginLeft: 72\n },\n v3LeftInset: {\n marginLeft: 16\n },\n horizontalInset: {\n marginLeft: 16,\n marginRight: 16\n },\n bold: {\n height: 1\n }\n});\nexport default Divider;\n//# sourceMappingURL=Divider.js.map","// @component ./ListAccordion.tsx\nexport { default as Accordion } from './ListAccordion';\n\n// @component ./ListAccordionGroup.tsx\nexport { default as AccordionGroup } from './ListAccordionGroup';\n\n// @component ./ListIcon.tsx\nexport { default as Icon } from './ListIcon';\n\n// @component ./ListItem.tsx\nexport { default as Item } from './ListItem';\n\n// @component ./ListSection.tsx\nexport { default as Section } from './ListSection';\n\n// @component ./ListSubheader.tsx\nexport { default as Subheader } from './ListSubheader';\n\n// @component ./ListImage.tsx\nexport { default as Image } from './ListImage';\n//# sourceMappingURL=List.js.map","import * as React from 'react';\nimport { I18nManager, StyleSheet, View } from 'react-native';\nimport { ListAccordionGroupContext } from './ListAccordionGroup';\nimport { getAccordionColors, getLeftStyles } from './utils';\nimport { useInternalTheme } from '../../core/theming';\nimport MaterialCommunityIcon from '../MaterialCommunityIcon';\nimport TouchableRipple from '../TouchableRipple/TouchableRipple';\nimport Text from '../Typography/Text';\n/**\n * A component used to display an expandable list item.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { List } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [expanded, setExpanded] = React.useState(true);\n *\n * const handlePress = () => setExpanded(!expanded);\n *\n * return (\n * \n * }>\n * \n * \n * \n *\n * }\n * expanded={expanded}\n * onPress={handlePress}>\n * \n * \n * \n * \n * );\n * };\n *\n * export default MyComponent;\n * ```\n */\nconst ListAccordion = _ref => {\n var _theme$colors, _theme$colors2;\n let {\n left,\n right,\n title,\n description,\n children,\n theme: themeOverrides,\n titleStyle,\n descriptionStyle,\n titleNumberOfLines = 1,\n descriptionNumberOfLines = 2,\n rippleColor: customRippleColor,\n style,\n id,\n testID,\n background,\n onPress,\n onLongPress,\n delayLongPress,\n expanded: expandedProp,\n accessibilityLabel,\n pointerEvents = 'none',\n titleMaxFontSizeMultiplier,\n descriptionMaxFontSizeMultiplier\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const [expanded, setExpanded] = React.useState(expandedProp || false);\n const [alignToTop, setAlignToTop] = React.useState(false);\n const onDescriptionTextLayout = event => {\n if (!theme.isV3) {\n return;\n }\n const {\n nativeEvent\n } = event;\n setAlignToTop(nativeEvent.lines.length >= 2);\n };\n const handlePressAction = e => {\n onPress === null || onPress === void 0 ? void 0 : onPress(e);\n if (expandedProp === undefined) {\n // Only update state of the `expanded` prop was not passed\n // If it was passed, the component will act as a controlled component\n setExpanded(expanded => !expanded);\n }\n };\n const expandedInternal = expandedProp !== undefined ? expandedProp : expanded;\n const groupContext = React.useContext(ListAccordionGroupContext);\n if (groupContext !== null && (id === undefined || id === null || id === '')) {\n throw new Error('List.Accordion is used inside a List.AccordionGroup without specifying an id prop.');\n }\n const isExpanded = groupContext ? groupContext.expandedId === id : expandedInternal;\n const {\n titleColor,\n descriptionColor,\n titleTextColor,\n rippleColor\n } = getAccordionColors({\n theme,\n isExpanded,\n customRippleColor\n });\n const handlePress = groupContext && id !== undefined ? () => groupContext.onAccordionPress(id) : handlePressAction;\n return /*#__PURE__*/React.createElement(View, null, /*#__PURE__*/React.createElement(View, {\n style: {\n backgroundColor: theme === null || theme === void 0 || (_theme$colors = theme.colors) === null || _theme$colors === void 0 ? void 0 : _theme$colors.background\n }\n }, /*#__PURE__*/React.createElement(TouchableRipple, {\n style: [theme.isV3 ? styles.containerV3 : styles.container, style],\n onPress: handlePress,\n onLongPress: onLongPress,\n delayLongPress: delayLongPress,\n rippleColor: rippleColor,\n accessibilityRole: \"button\",\n accessibilityState: {\n expanded: isExpanded\n },\n accessibilityLabel: accessibilityLabel,\n testID: testID,\n theme: theme,\n background: background,\n borderless: true\n }, /*#__PURE__*/React.createElement(View, {\n style: theme.isV3 ? styles.rowV3 : styles.row,\n pointerEvents: pointerEvents\n }, left ? left({\n color: isExpanded ? (_theme$colors2 = theme.colors) === null || _theme$colors2 === void 0 ? void 0 : _theme$colors2.primary : descriptionColor,\n style: getLeftStyles(alignToTop, description, theme.isV3)\n }) : null, /*#__PURE__*/React.createElement(View, {\n style: [theme.isV3 ? styles.itemV3 : styles.item, styles.content]\n }, /*#__PURE__*/React.createElement(Text, {\n selectable: false,\n numberOfLines: titleNumberOfLines,\n style: [styles.title, {\n color: titleTextColor\n }, titleStyle],\n maxFontSizeMultiplier: titleMaxFontSizeMultiplier\n }, title), description ? /*#__PURE__*/React.createElement(Text, {\n selectable: false,\n numberOfLines: descriptionNumberOfLines,\n style: [styles.description, {\n color: descriptionColor\n }, descriptionStyle],\n onTextLayout: onDescriptionTextLayout,\n maxFontSizeMultiplier: descriptionMaxFontSizeMultiplier\n }, description) : null), /*#__PURE__*/React.createElement(View, {\n style: [styles.item, description ? styles.multiline : undefined]\n }, right ? right({\n isExpanded: isExpanded\n }) : /*#__PURE__*/React.createElement(MaterialCommunityIcon, {\n name: isExpanded ? 'chevron-up' : 'chevron-down',\n color: theme.isV3 ? descriptionColor : titleColor,\n size: 24,\n direction: I18nManager.getConstants().isRTL ? 'rtl' : 'ltr'\n }))))), isExpanded ? React.Children.map(children, child => {\n if (left && /*#__PURE__*/React.isValidElement(child) && !child.props.left && !child.props.right) {\n return /*#__PURE__*/React.cloneElement(child, {\n style: [theme.isV3 ? styles.childV3 : styles.child, child.props.style],\n theme\n });\n }\n return child;\n }) : null);\n};\nListAccordion.displayName = 'List.Accordion';\nconst styles = StyleSheet.create({\n container: {\n padding: 8\n },\n containerV3: {\n paddingVertical: 8,\n paddingRight: 24\n },\n row: {\n flexDirection: 'row',\n alignItems: 'center'\n },\n rowV3: {\n flexDirection: 'row',\n marginVertical: 6\n },\n multiline: {\n height: 40,\n alignItems: 'center',\n justifyContent: 'center'\n },\n title: {\n fontSize: 16\n },\n description: {\n fontSize: 14\n },\n item: {\n marginVertical: 6,\n paddingLeft: 8\n },\n itemV3: {\n paddingLeft: 16\n },\n child: {\n paddingLeft: 64\n },\n childV3: {\n paddingLeft: 40\n },\n content: {\n flex: 1,\n justifyContent: 'center'\n }\n});\nexport default ListAccordion;\n//# sourceMappingURL=ListAccordion.js.map","import * as React from 'react';\nexport const ListAccordionGroupContext = /*#__PURE__*/React.createContext(null);\n\n/**\n * List.AccordionGroup allows to control a group of List Accordions. `id` prop for List.Accordion is required in order for group to work.\n * List.AccordionGroup can be a controlled or uncontrolled component. The example shows the uncontrolled version.\n * At most one Accordion can be expanded at a given time.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { View, Text } from 'react-native';\n * import { List } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * List.Accordion can be wrapped because implementation uses React.Context.\n * \n * \n * \n * \n * \n * \n * );\n *\n * export default MyComponent;\n *```\n */\nconst ListAccordionGroup = _ref => {\n let {\n expandedId: expandedIdProp,\n onAccordionPress,\n children\n } = _ref;\n const [expandedId, setExpandedId] = React.useState(undefined);\n const onAccordionPressDefault = newExpandedId => {\n setExpandedId(currentExpandedId => currentExpandedId === newExpandedId ? undefined : newExpandedId);\n };\n return /*#__PURE__*/React.createElement(ListAccordionGroupContext.Provider, {\n value: {\n expandedId: expandedIdProp || expandedId,\n // component can be controlled or uncontrolled\n onAccordionPress: onAccordionPress || onAccordionPressDefault\n }\n }, children);\n};\nListAccordionGroup.displayName = 'List.AccordionGroup';\nexport default ListAccordionGroup;\n//# sourceMappingURL=ListAccordionGroup.js.map","import { StyleSheet } from 'react-native';\nimport color from 'color';\nexport const getLeftStyles = (alignToTop, description, isV3) => {\n const stylesV3 = {\n marginRight: 0,\n marginLeft: 16,\n alignSelf: alignToTop ? 'flex-start' : 'center'\n };\n if (!description) {\n return {\n ...styles.iconMarginLeft,\n ...styles.marginVerticalNone,\n ...(isV3 && {\n ...stylesV3\n })\n };\n }\n if (!isV3) {\n return styles.iconMarginLeft;\n }\n return {\n ...styles.iconMarginLeft,\n ...stylesV3\n };\n};\nexport const getRightStyles = (alignToTop, description, isV3) => {\n const stylesV3 = {\n marginLeft: 16,\n alignSelf: alignToTop ? 'flex-start' : 'center'\n };\n if (!description) {\n return {\n ...styles.iconMarginRight,\n ...styles.marginVerticalNone,\n ...(isV3 && {\n ...stylesV3\n })\n };\n }\n if (!isV3) {\n return styles.iconMarginRight;\n }\n return {\n ...styles.iconMarginRight,\n ...stylesV3\n };\n};\nconst styles = StyleSheet.create({\n marginVerticalNone: {\n marginVertical: 0\n },\n iconMarginLeft: {\n marginLeft: 0,\n marginRight: 16\n },\n iconMarginRight: {\n marginRight: 0\n }\n});\nexport const getAccordionColors = _ref => {\n var _theme$colors;\n let {\n theme,\n isExpanded,\n customRippleColor\n } = _ref;\n const titleColor = theme.isV3 ? theme.colors.onSurface : color(theme.colors.text).alpha(0.87).rgb().string();\n const descriptionColor = theme.isV3 ? theme.colors.onSurfaceVariant : color(theme.colors.text).alpha(0.54).rgb().string();\n const titleTextColor = isExpanded ? (_theme$colors = theme.colors) === null || _theme$colors === void 0 ? void 0 : _theme$colors.primary : titleColor;\n const rippleColor = customRippleColor || color(titleTextColor).alpha(0.12).rgb().string();\n return {\n titleColor,\n descriptionColor,\n titleTextColor,\n rippleColor\n };\n};\n//# sourceMappingURL=utils.js.map","import * as React from 'react';\nimport { View, StyleSheet } from 'react-native';\nimport { useInternalTheme } from '../../core/theming';\nimport Icon from '../Icon';\nconst ICON_SIZE = 24;\n\n/**\n * A component to show an icon in a list item.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { List, MD3Colors } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * <>\n * \n * \n * \n * \n * );\n *\n * export default MyComponent;\n * ```\n */\nconst ListIcon = _ref => {\n let {\n icon,\n color: iconColor,\n style,\n theme: themeOverrides\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n return /*#__PURE__*/React.createElement(View, {\n style: [theme.isV3 ? styles.itemV3 : styles.item, style],\n pointerEvents: \"box-none\"\n }, /*#__PURE__*/React.createElement(Icon, {\n source: icon,\n size: ICON_SIZE,\n color: iconColor,\n theme: theme\n }));\n};\nconst styles = StyleSheet.create({\n item: {\n margin: 8,\n height: 40,\n width: 40,\n alignItems: 'center',\n justifyContent: 'center'\n },\n itemV3: {\n alignItems: 'center',\n justifyContent: 'center'\n }\n});\nListIcon.displayName = 'List.Icon';\nexport default ListIcon;\n//# sourceMappingURL=ListIcon.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport color from 'color';\nimport { getLeftStyles, getRightStyles } from './utils';\nimport { useInternalTheme } from '../../core/theming';\nimport { forwardRef } from '../../utils/forwardRef';\nimport TouchableRipple from '../TouchableRipple/TouchableRipple';\nimport Text from '../Typography/Text';\n/**\n * A component to show tiles inside a List.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { List } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * }\n * />\n * );\n *\n * export default MyComponent;\n * ```\n *\n * @extends TouchableRipple props https://callstack.github.io/react-native-paper/docs/components/TouchableRipple\n */\nconst ListItem = (_ref, ref) => {\n let {\n left,\n right,\n title,\n description,\n onPress,\n theme: themeOverrides,\n style,\n contentStyle,\n titleStyle,\n titleNumberOfLines = 1,\n descriptionNumberOfLines = 2,\n titleEllipsizeMode,\n descriptionEllipsizeMode,\n descriptionStyle,\n descriptionMaxFontSizeMultiplier,\n titleMaxFontSizeMultiplier,\n testID,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const [alignToTop, setAlignToTop] = React.useState(false);\n const onDescriptionTextLayout = event => {\n if (!theme.isV3) {\n return;\n }\n const {\n nativeEvent\n } = event;\n setAlignToTop(nativeEvent.lines.length >= 2);\n };\n const renderDescription = (descriptionColor, description) => {\n return typeof description === 'function' ? description({\n selectable: false,\n ellipsizeMode: descriptionEllipsizeMode,\n color: descriptionColor,\n fontSize: styles.description.fontSize\n }) : /*#__PURE__*/React.createElement(Text, {\n selectable: false,\n numberOfLines: descriptionNumberOfLines,\n ellipsizeMode: descriptionEllipsizeMode,\n style: [styles.description, {\n color: descriptionColor\n }, descriptionStyle],\n onTextLayout: onDescriptionTextLayout,\n maxFontSizeMultiplier: descriptionMaxFontSizeMultiplier\n }, description);\n };\n const renderTitle = () => {\n const titleColor = theme.isV3 ? theme.colors.onSurface : color(theme.colors.text).alpha(0.87).rgb().string();\n return typeof title === 'function' ? title({\n selectable: false,\n ellipsizeMode: titleEllipsizeMode,\n color: titleColor,\n fontSize: styles.title.fontSize\n }) : /*#__PURE__*/React.createElement(Text, {\n selectable: false,\n ellipsizeMode: titleEllipsizeMode,\n numberOfLines: titleNumberOfLines,\n style: [styles.title, {\n color: titleColor\n }, titleStyle],\n maxFontSizeMultiplier: titleMaxFontSizeMultiplier\n }, title);\n };\n const descriptionColor = theme.isV3 ? theme.colors.onSurfaceVariant : color(theme.colors.text).alpha(0.54).rgb().string();\n return /*#__PURE__*/React.createElement(TouchableRipple, _extends({}, rest, {\n ref: ref,\n style: [theme.isV3 ? styles.containerV3 : styles.container, style],\n onPress: onPress,\n theme: theme,\n testID: testID\n }), /*#__PURE__*/React.createElement(View, {\n style: theme.isV3 ? styles.rowV3 : styles.row\n }, left ? left({\n color: descriptionColor,\n style: getLeftStyles(alignToTop, description, theme.isV3)\n }) : null, /*#__PURE__*/React.createElement(View, {\n style: [theme.isV3 ? styles.itemV3 : styles.item, styles.content, contentStyle],\n testID: `${testID}-content`\n }, renderTitle(), description ? renderDescription(descriptionColor, description) : null), right ? right({\n color: descriptionColor,\n style: getRightStyles(alignToTop, description, theme.isV3)\n }) : null));\n};\nconst Component = forwardRef(ListItem);\nComponent.displayName = 'List.Item';\nconst styles = StyleSheet.create({\n container: {\n padding: 8\n },\n containerV3: {\n paddingVertical: 8,\n paddingRight: 24\n },\n row: {\n width: '100%',\n flexDirection: 'row'\n },\n rowV3: {\n width: '100%',\n flexDirection: 'row',\n marginVertical: 6\n },\n title: {\n fontSize: 16\n },\n description: {\n fontSize: 14\n },\n item: {\n marginVertical: 6,\n paddingLeft: 8\n },\n itemV3: {\n paddingLeft: 16\n },\n content: {\n flexShrink: 1,\n flexGrow: 1,\n justifyContent: 'center'\n }\n});\nexport default Component;\n//# sourceMappingURL=ListItem.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport ListSubheader from './ListSubheader';\nimport { useInternalTheme } from '../../core/theming';\n/**\n * A component used to group list items.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { List, MD3Colors } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * Some title\n * } />\n * }\n * />\n * \n * );\n *\n * export default MyComponent;\n * ```\n */\nconst ListSection = _ref => {\n let {\n children,\n title,\n titleStyle,\n style,\n theme: themeOverrides,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const viewProps = {\n ...rest,\n theme\n };\n return /*#__PURE__*/React.createElement(View, _extends({}, viewProps, {\n style: [styles.container, style]\n }), title ? /*#__PURE__*/React.createElement(ListSubheader, {\n style: titleStyle,\n theme: theme\n }, title) : null, children);\n};\nListSection.displayName = 'List.Section';\nconst styles = StyleSheet.create({\n container: {\n marginVertical: 8\n }\n});\nexport default ListSection;\n//# sourceMappingURL=ListSection.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet } from 'react-native';\nimport color from 'color';\nimport { useInternalTheme } from '../../core/theming';\nimport Text from '../Typography/Text';\n/**\n * A component used to display a header in lists.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { List } from 'react-native-paper';\n *\n * const MyComponent = () => My List Title;\n *\n * export default MyComponent;\n * ```\n */\nconst ListSubheader = _ref => {\n let {\n style,\n theme: overrideTheme,\n maxFontSizeMultiplier,\n ...rest\n } = _ref;\n const theme = useInternalTheme(overrideTheme);\n const textColor = theme.isV3 ? theme.colors.onSurfaceVariant : color(theme.colors.text).alpha(0.54).rgb().string();\n const font = theme.isV3 ? theme.fonts.bodyMedium : theme.fonts.medium;\n return /*#__PURE__*/React.createElement(Text, _extends({\n variant: \"bodyMedium\",\n numberOfLines: 1,\n maxFontSizeMultiplier: maxFontSizeMultiplier\n }, rest, {\n style: [styles.container, {\n color: textColor,\n ...font\n }, style]\n }));\n};\nListSubheader.displayName = 'List.Subheader';\nconst styles = StyleSheet.create({\n container: {\n paddingHorizontal: 16,\n paddingVertical: 13\n }\n});\nexport default ListSubheader;\n//# sourceMappingURL=ListSubheader.js.map","import * as React from 'react';\nimport { StyleSheet, Image } from 'react-native';\nimport { useInternalTheme } from '../../core/theming';\n/**\n * A component to show image in a list item.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { List, MD3Colors } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * <>\n * \n * \n * \n * );\n *\n * export default MyComponent;\n * ```\n */\nconst ListImage = _ref => {\n let {\n style,\n source,\n variant = 'image',\n theme: themeOverrides\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const getStyles = () => {\n if (variant === 'video') {\n if (!theme.isV3) {\n return [style, styles.video];\n }\n return [style, styles.videoV3];\n }\n return [style, styles.image];\n };\n return /*#__PURE__*/React.createElement(Image, {\n style: getStyles(),\n source: source,\n accessibilityIgnoresInvertColors: true,\n testID: \"list-image\"\n });\n};\nconst styles = StyleSheet.create({\n image: {\n width: 56,\n height: 56\n },\n video: {\n width: 100,\n height: 64,\n marginLeft: 0\n },\n videoV3: {\n width: 114,\n height: 64,\n marginLeft: 0\n }\n});\nListImage.displayName = 'List.Image';\nexport default ListImage;\n//# sourceMappingURL=ListImage.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Animated, Easing, I18nManager, Platform, ScrollView, StyleSheet, View } from 'react-native';\nimport color from 'color';\nimport { getCombinedStyles, getFABColors } from './utils';\nimport { useInternalTheme } from '../../core/theming';\nimport Icon from '../Icon';\nimport Surface from '../Surface';\nimport TouchableRipple from '../TouchableRipple/TouchableRipple';\nimport AnimatedText from '../Typography/AnimatedText';\nconst SIZE = 56;\nconst SCALE = 0.9;\n\n/**\n * An animated, extending horizontally floating action button represents the primary action in an application.\n *\n * ## Usage\n * ```js\n * import React from 'react';\n * import {\n * StyleProp,\n * ViewStyle,\n * Animated,\n * StyleSheet,\n * Platform,\n * ScrollView,\n * Text,\n * SafeAreaView,\n * I18nManager,\n * } from 'react-native';\n * import { AnimatedFAB } from 'react-native-paper';\n *\n * const MyComponent = ({\n * animatedValue,\n * visible,\n * extended,\n * label,\n * animateFrom,\n * style,\n * iconMode,\n * }) => {\n * const [isExtended, setIsExtended] = React.useState(true);\n *\n * const isIOS = Platform.OS === 'ios';\n *\n * const onScroll = ({ nativeEvent }) => {\n * const currentScrollPosition =\n * Math.floor(nativeEvent?.contentOffset?.y) ?? 0;\n *\n * setIsExtended(currentScrollPosition <= 0);\n * };\n *\n * const fabStyle = { [animateFrom]: 16 };\n *\n * return (\n * \n * \n * {[...new Array(100).keys()].map((_, i) => (\n * {i}\n * ))}\n * \n * console.log('Pressed')}\n * visible={visible}\n * animateFrom={'right'}\n * iconMode={'static'}\n * style={[styles.fabStyle, style, fabStyle]}\n * />\n * \n * );\n * };\n *\n * export default MyComponent;\n *\n * const styles = StyleSheet.create({\n * container: {\n * flexGrow: 1,\n * },\n * fabStyle: {\n * bottom: 16,\n * right: 16,\n * position: 'absolute',\n * },\n * });\n * ```\n */\nconst AnimatedFAB = _ref => {\n let {\n icon,\n label,\n background,\n accessibilityLabel = label,\n accessibilityState,\n color: customColor,\n rippleColor: customRippleColor,\n disabled,\n onPress,\n onLongPress,\n delayLongPress,\n theme: themeOverrides,\n style,\n visible = true,\n uppercase: uppercaseProp,\n testID = 'animated-fab',\n animateFrom = 'right',\n extended = false,\n iconMode = 'dynamic',\n variant = 'primary',\n labelMaxFontSizeMultiplier,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const uppercase = uppercaseProp ?? !theme.isV3;\n const isIOS = Platform.OS === 'ios';\n const isAnimatedFromRight = animateFrom === 'right';\n const isIconStatic = iconMode === 'static';\n const {\n isRTL\n } = I18nManager;\n const {\n current: visibility\n } = React.useRef(new Animated.Value(visible ? 1 : 0));\n const {\n current: animFAB\n } = React.useRef(new Animated.Value(0));\n const {\n isV3,\n animation\n } = theme;\n const {\n scale\n } = animation;\n const [textWidth, setTextWidth] = React.useState(0);\n const [textHeight, setTextHeight] = React.useState(0);\n const borderRadius = SIZE / (isV3 ? 3.5 : 2);\n React.useEffect(() => {\n if (visible) {\n Animated.timing(visibility, {\n toValue: 1,\n duration: 200 * scale,\n useNativeDriver: true\n }).start();\n } else {\n Animated.timing(visibility, {\n toValue: 0,\n duration: 150 * scale,\n useNativeDriver: true\n }).start();\n }\n }, [visible, scale, visibility]);\n const {\n backgroundColor: customBackgroundColor,\n ...restStyle\n } = StyleSheet.flatten(style) || {};\n const {\n backgroundColor,\n foregroundColor\n } = getFABColors({\n theme,\n variant,\n disabled,\n customColor,\n customBackgroundColor\n });\n const rippleColor = customRippleColor || color(foregroundColor).alpha(0.12).rgb().string();\n const extendedWidth = textWidth + SIZE + borderRadius;\n const distance = isAnimatedFromRight ? -textWidth - borderRadius : textWidth + borderRadius;\n React.useEffect(() => {\n Animated.timing(animFAB, {\n toValue: !extended ? 0 : distance,\n duration: 150 * scale,\n useNativeDriver: true,\n easing: Easing.linear\n }).start();\n }, [animFAB, scale, distance, extended]);\n const onTextLayout = _ref2 => {\n let {\n nativeEvent\n } = _ref2;\n const currentWidth = Math.ceil(nativeEvent.lines[0].width);\n const currentHeight = Math.ceil(nativeEvent.lines[0].height);\n if (currentWidth !== textWidth || currentHeight !== textHeight) {\n setTextHeight(currentHeight);\n if (isIOS) {\n return setTextWidth(currentWidth - 12);\n }\n setTextWidth(currentWidth);\n }\n };\n const propForDirection = right => {\n if (isAnimatedFromRight) {\n return right;\n }\n return right.reverse();\n };\n const combinedStyles = getCombinedStyles({\n isAnimatedFromRight,\n isIconStatic,\n distance,\n animFAB\n });\n const font = isV3 ? theme.fonts.labelLarge : theme.fonts.medium;\n const textStyle = {\n color: foregroundColor,\n ...font\n };\n const md2Elevation = disabled || !isIOS ? 0 : 6;\n const md3Elevation = disabled || !isIOS ? 0 : 3;\n const shadowStyle = isV3 ? styles.v3Shadow : styles.shadow;\n const baseStyle = [StyleSheet.absoluteFill, disabled ? styles.disabled : shadowStyle];\n const newAccessibilityState = {\n ...accessibilityState,\n disabled\n };\n return /*#__PURE__*/React.createElement(Surface, _extends({}, rest, {\n testID: `${testID}-container`,\n style: [{\n opacity: visibility,\n transform: [{\n scale: visibility\n }],\n borderRadius\n }, !isV3 && {\n elevation: md2Elevation\n }, styles.container, restStyle]\n }, isV3 && {\n elevation: md3Elevation\n }, {\n theme: theme\n }), /*#__PURE__*/React.createElement(Animated.View, {\n style: [!isV3 && {\n transform: [{\n scaleY: animFAB.interpolate({\n inputRange: propForDirection([distance, 0]),\n outputRange: propForDirection([SCALE, 1])\n })\n }]\n }, styles.standard, {\n borderRadius\n }]\n }, /*#__PURE__*/React.createElement(View, {\n style: [StyleSheet.absoluteFill, styles.shadowWrapper]\n }, /*#__PURE__*/React.createElement(Animated.View, {\n pointerEvents: \"none\",\n style: [baseStyle, {\n width: extendedWidth,\n opacity: animFAB.interpolate({\n inputRange: propForDirection([distance, 0.9 * distance, 0]),\n outputRange: propForDirection([1, 0.15, 0])\n }),\n borderRadius\n }],\n testID: `${testID}-extended-shadow`\n }), /*#__PURE__*/React.createElement(Animated.View, {\n pointerEvents: \"none\",\n style: [baseStyle, {\n opacity: animFAB.interpolate({\n inputRange: propForDirection([distance, 0.9 * distance, 0]),\n outputRange: propForDirection([0, 0.85, 1])\n }),\n width: SIZE,\n borderRadius: animFAB.interpolate({\n inputRange: propForDirection([distance, 0]),\n outputRange: propForDirection([SIZE / (extendedWidth / SIZE), borderRadius])\n })\n }, combinedStyles.absoluteFill],\n testID: `${testID}-shadow`\n })), /*#__PURE__*/React.createElement(Animated.View, {\n pointerEvents: \"box-none\",\n style: [styles.innerWrapper, {\n borderRadius\n }]\n }, /*#__PURE__*/React.createElement(Animated.View, {\n style: [styles.standard, {\n width: extendedWidth,\n backgroundColor,\n borderRadius\n }, combinedStyles.innerWrapper]\n }, /*#__PURE__*/React.createElement(TouchableRipple, {\n borderless: true,\n background: background,\n onPress: onPress,\n onLongPress: onLongPress,\n delayLongPress: delayLongPress,\n rippleColor: rippleColor,\n disabled: disabled,\n accessibilityLabel: accessibilityLabel,\n accessibilityRole: \"button\",\n accessibilityState: newAccessibilityState,\n testID: testID,\n style: {\n borderRadius\n },\n theme: theme\n }, /*#__PURE__*/React.createElement(View, {\n style: [styles.standard, {\n width: extendedWidth,\n borderRadius\n }]\n }))))), /*#__PURE__*/React.createElement(Animated.View, {\n style: [styles.iconWrapper, combinedStyles.iconWrapper],\n pointerEvents: \"none\"\n }, /*#__PURE__*/React.createElement(Icon, {\n source: icon,\n size: 24,\n color: foregroundColor,\n theme: theme\n })), /*#__PURE__*/React.createElement(View, {\n pointerEvents: \"none\"\n }, /*#__PURE__*/React.createElement(AnimatedText, {\n variant: \"labelLarge\",\n numberOfLines: 1,\n onTextLayout: isIOS ? onTextLayout : undefined,\n ellipsizeMode: 'tail',\n style: [{\n [isAnimatedFromRight || isRTL ? 'right' : 'left']: isIconStatic ? textWidth - SIZE + borderRadius / (isV3 ? 1 : 2) : borderRadius\n }, {\n minWidth: textWidth,\n top: -SIZE / 2 - textHeight / 2,\n opacity: animFAB.interpolate({\n inputRange: propForDirection([distance, 0.7 * distance, 0]),\n outputRange: propForDirection([1, 0, 0])\n }),\n // TODO: check\n transform: [{\n translateX: animFAB.interpolate({\n inputRange: propForDirection([distance, 0]),\n outputRange: propForDirection([0, SIZE])\n })\n }]\n }, styles.label, uppercase && styles.uppercaseLabel, textStyle],\n theme: theme,\n testID: `${testID}-text`,\n maxFontSizeMultiplier: labelMaxFontSizeMultiplier\n }, label)), !isIOS &&\n /*#__PURE__*/\n // Method `onTextLayout` on Android returns sizes of text visible on the screen,\n // however during render the text in `FAB` isn't fully visible. In order to get\n // proper text measurements there is a need to additionaly render that text, but\n // wrapped in absolutely positioned `ScrollView` which height is 0.\n React.createElement(ScrollView, {\n style: styles.textPlaceholderContainer\n }, /*#__PURE__*/React.createElement(AnimatedText, {\n variant: \"labelLarge\",\n numberOfLines: 1,\n onTextLayout: onTextLayout,\n ellipsizeMode: 'tail',\n style: [styles.label, uppercase && styles.uppercaseLabel, textStyle],\n theme: theme\n }, label)));\n};\nconst styles = StyleSheet.create({\n standard: {\n height: SIZE\n },\n disabled: {\n elevation: 0\n },\n // eslint-disable-next-line react-native/no-color-literals\n container: {\n position: 'absolute',\n backgroundColor: 'transparent'\n },\n innerWrapper: {\n flexDirection: 'row',\n overflow: 'hidden'\n },\n shadowWrapper: {\n elevation: 0\n },\n shadow: {\n elevation: 6\n },\n v3Shadow: {\n elevation: 3\n },\n iconWrapper: {\n alignItems: 'center',\n justifyContent: 'center',\n position: 'absolute',\n height: SIZE,\n width: SIZE\n },\n label: {\n position: 'absolute'\n },\n uppercaseLabel: {\n textTransform: 'uppercase'\n },\n textPlaceholderContainer: {\n height: 0,\n position: 'absolute'\n }\n});\nexport default AnimatedFAB;\n//# sourceMappingURL=AnimatedFAB.js.map","import { I18nManager } from 'react-native';\nimport color from 'color';\nimport { black, white } from '../../styles/themes/v2/colors';\nimport getContrastingColor from '../../utils/getContrastingColor';\nexport const getCombinedStyles = _ref => {\n let {\n isAnimatedFromRight,\n isIconStatic,\n distance,\n animFAB\n } = _ref;\n const {\n isRTL\n } = I18nManager;\n const defaultPositionStyles = {\n left: -distance,\n right: undefined\n };\n const combinedStyles = {\n innerWrapper: {\n ...defaultPositionStyles\n },\n iconWrapper: {\n ...defaultPositionStyles\n },\n absoluteFill: {}\n };\n const animatedFromRight = isAnimatedFromRight && !isRTL;\n const animatedFromRightRTL = isAnimatedFromRight && isRTL;\n const animatedFromLeft = !isAnimatedFromRight && !isRTL;\n const animatedFromLeftRTL = !isAnimatedFromRight && isRTL;\n if (animatedFromRight) {\n combinedStyles.innerWrapper.transform = [{\n translateX: animFAB.interpolate({\n inputRange: [distance, 0],\n outputRange: [distance, 0]\n })\n }];\n combinedStyles.iconWrapper.transform = [{\n translateX: isIconStatic ? 0 : animFAB\n }];\n combinedStyles.absoluteFill.transform = [{\n translateX: animFAB.interpolate({\n inputRange: [distance, 0],\n outputRange: [Math.abs(distance) / 2, Math.abs(distance)]\n })\n }];\n } else if (animatedFromRightRTL) {\n combinedStyles.iconWrapper.transform = [{\n translateX: isIconStatic ? 0 : animFAB.interpolate({\n inputRange: [distance, 0],\n outputRange: [-distance, 0]\n })\n }];\n combinedStyles.innerWrapper.transform = [{\n translateX: animFAB.interpolate({\n inputRange: [distance, 0],\n outputRange: [-distance, 0]\n })\n }];\n combinedStyles.absoluteFill.transform = [{\n translateX: animFAB.interpolate({\n inputRange: [distance, 0],\n outputRange: [0, distance]\n })\n }];\n } else if (animatedFromLeft) {\n combinedStyles.iconWrapper.transform = [{\n translateX: isIconStatic ? distance : animFAB.interpolate({\n inputRange: [0, distance],\n outputRange: [distance, distance * 2]\n })\n }];\n combinedStyles.innerWrapper.transform = [{\n translateX: animFAB\n }];\n combinedStyles.absoluteFill.transform = [{\n translateX: animFAB.interpolate({\n inputRange: [0, distance],\n outputRange: [0, Math.abs(distance) / 2]\n })\n }];\n } else if (animatedFromLeftRTL) {\n combinedStyles.iconWrapper.transform = [{\n translateX: isIconStatic ? animFAB.interpolate({\n inputRange: [0, distance],\n outputRange: [-distance, -distance * 2]\n }) : -distance\n }];\n combinedStyles.innerWrapper.transform = [{\n translateX: animFAB.interpolate({\n inputRange: [0, distance],\n outputRange: [0, -distance]\n })\n }];\n combinedStyles.absoluteFill.transform = [{\n translateX: animFAB.interpolate({\n inputRange: [0, distance],\n outputRange: [0, -distance]\n })\n }];\n }\n return combinedStyles;\n};\nconst getBackgroundColor = _ref2 => {\n var _theme$colors;\n let {\n theme,\n isVariant,\n disabled,\n customBackgroundColor\n } = _ref2;\n if (customBackgroundColor && !disabled) {\n return customBackgroundColor;\n }\n if (theme.isV3) {\n if (disabled) {\n return theme.colors.surfaceDisabled;\n }\n if (isVariant('primary')) {\n return theme.colors.primaryContainer;\n }\n if (isVariant('secondary')) {\n return theme.colors.secondaryContainer;\n }\n if (isVariant('tertiary')) {\n return theme.colors.tertiaryContainer;\n }\n if (isVariant('surface')) {\n return theme.colors.elevation.level3;\n }\n }\n if (disabled) {\n if (theme.dark) {\n return color(white).alpha(0.12).rgb().string();\n }\n return color(black).alpha(0.12).rgb().string();\n }\n\n //@ts-ignore\n return (_theme$colors = theme.colors) === null || _theme$colors === void 0 ? void 0 : _theme$colors.accent;\n};\nconst getForegroundColor = _ref3 => {\n let {\n theme,\n isVariant,\n disabled,\n backgroundColor,\n customColor\n } = _ref3;\n if (typeof customColor !== 'undefined' && !disabled) {\n return customColor;\n }\n if (theme.isV3) {\n if (disabled) {\n return theme.colors.onSurfaceDisabled;\n }\n if (isVariant('primary')) {\n return theme.colors.onPrimaryContainer;\n }\n if (isVariant('secondary')) {\n return theme.colors.onSecondaryContainer;\n }\n if (isVariant('tertiary')) {\n return theme.colors.onTertiaryContainer;\n }\n if (isVariant('surface')) {\n return theme.colors.primary;\n }\n }\n if (disabled) {\n if (theme.dark) {\n return color(white).alpha(0.32).rgb().string();\n }\n return color(black).alpha(0.32).rgb().string();\n }\n if (backgroundColor) {\n return getContrastingColor(backgroundColor || white, white, 'rgba(0, 0, 0, .54)');\n }\n return getContrastingColor(white, white, 'rgba(0, 0, 0, .54)');\n};\nexport const getFABColors = _ref4 => {\n let {\n theme,\n variant,\n disabled,\n customColor,\n customBackgroundColor,\n customRippleColor\n } = _ref4;\n const isVariant = variantToCompare => {\n return variant === variantToCompare;\n };\n const baseFABColorProps = {\n theme,\n isVariant,\n disabled\n };\n const backgroundColor = getBackgroundColor({\n ...baseFABColorProps,\n customBackgroundColor\n });\n const foregroundColor = getForegroundColor({\n ...baseFABColorProps,\n customColor,\n backgroundColor\n });\n return {\n backgroundColor,\n foregroundColor,\n rippleColor: customRippleColor || color(foregroundColor).alpha(0.12).rgb().string()\n };\n};\nconst getLabelColor = _ref5 => {\n let {\n theme\n } = _ref5;\n if (theme.isV3) {\n return theme.colors.onSurface;\n }\n if (theme.dark) {\n return theme.colors.text;\n }\n return color(theme.colors.text).fade(0.54).rgb().string();\n};\nconst getBackdropColor = _ref6 => {\n var _theme$colors2;\n let {\n theme,\n customBackdropColor\n } = _ref6;\n if (customBackdropColor) {\n return customBackdropColor;\n }\n if (theme.isV3) {\n return color(theme.colors.background).alpha(0.95).rgb().string();\n }\n return (_theme$colors2 = theme.colors) === null || _theme$colors2 === void 0 ? void 0 : _theme$colors2.backdrop;\n};\nconst getStackedFABBackgroundColor = _ref7 => {\n let {\n theme\n } = _ref7;\n if (theme.isV3) {\n return theme.colors.elevation.level3;\n }\n return theme.colors.surface;\n};\nexport const getFABGroupColors = _ref8 => {\n let {\n theme,\n customBackdropColor\n } = _ref8;\n return {\n labelColor: getLabelColor({\n theme\n }),\n backdropColor: getBackdropColor({\n theme,\n customBackdropColor\n }),\n stackedFABBackgroundColor: getStackedFABBackgroundColor({\n theme\n })\n };\n};\nconst standardSize = {\n height: 56,\n width: 56,\n borderRadius: 28\n};\nconst smallSize = {\n height: 40,\n width: 40,\n borderRadius: 28\n};\nconst v3SmallSize = {\n height: 40,\n width: 40\n};\nconst v3MediumSize = {\n height: 56,\n width: 56\n};\nconst v3LargeSize = {\n height: 96,\n width: 96\n};\nconst getCustomFabSize = (customSize, roundness) => ({\n height: customSize,\n width: customSize,\n borderRadius: roundness === 0 ? 0 : customSize / roundness\n});\nexport const getFabStyle = _ref9 => {\n let {\n size,\n theme,\n customSize\n } = _ref9;\n const {\n isV3,\n roundness\n } = theme;\n if (customSize) return getCustomFabSize(customSize, roundness);\n if (isV3) {\n switch (size) {\n case 'small':\n return {\n ...v3SmallSize,\n borderRadius: 3 * roundness\n };\n case 'medium':\n return {\n ...v3MediumSize,\n borderRadius: 4 * roundness\n };\n case 'large':\n return {\n ...v3LargeSize,\n borderRadius: 7 * roundness\n };\n }\n }\n if (size === 'small') {\n return smallSize;\n }\n return standardSize;\n};\nconst extended = {\n height: 48,\n paddingHorizontal: 16\n};\nconst v3Extended = {\n height: 56,\n borderRadius: 16,\n paddingHorizontal: 16\n};\nconst getExtendedFabDimensions = customSize => ({\n height: customSize,\n paddingHorizontal: 16\n});\nexport const getExtendedFabStyle = _ref10 => {\n let {\n customSize,\n theme\n } = _ref10;\n if (customSize) return getExtendedFabDimensions(customSize);\n const {\n isV3\n } = theme;\n return isV3 ? v3Extended : extended;\n};\n//# sourceMappingURL=utils.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Animated, Platform, StyleSheet } from 'react-native';\nimport { useInternalTheme } from '../core/theming';\nimport overlay, { isAnimatedValue } from '../styles/overlay';\nimport shadow from '../styles/shadow';\nimport { forwardRef } from '../utils/forwardRef';\nimport { splitStyles } from '../utils/splitStyles';\nconst MD2Surface = forwardRef((_ref, ref) => {\n let {\n style,\n theme: overrideTheme,\n ...rest\n } = _ref;\n const {\n elevation = 4\n } = StyleSheet.flatten(style) || {};\n const {\n dark: isDarkTheme,\n mode,\n colors\n } = useInternalTheme(overrideTheme);\n return /*#__PURE__*/React.createElement(Animated.View, _extends({\n ref: ref\n }, rest, {\n style: [{\n backgroundColor: isDarkTheme && mode === 'adaptive' ? overlay(elevation, colors === null || colors === void 0 ? void 0 : colors.surface) : colors === null || colors === void 0 ? void 0 : colors.surface\n }, elevation ? shadow(elevation) : null, style]\n }));\n});\nconst outerLayerStyleProperties = ['position', 'alignSelf', 'top', 'right', 'bottom', 'left', 'start', 'end', 'flex', 'flexShrink', 'flexGrow', 'width', 'height', 'transform', 'opacity'];\nconst shadowColor = '#000';\nconst iOSShadowOutputRanges = [{\n shadowOpacity: 0.15,\n height: [0, 1, 2, 4, 6, 8],\n shadowRadius: [0, 3, 6, 8, 10, 12]\n}, {\n shadowOpacity: 0.3,\n height: [0, 1, 1, 1, 2, 4],\n shadowRadius: [0, 1, 2, 3, 3, 4]\n}];\nconst inputRange = [0, 1, 2, 3, 4, 5];\nfunction getStyleForShadowLayer(elevation, layer) {\n if (isAnimatedValue(elevation)) {\n return {\n shadowColor,\n shadowOpacity: elevation.interpolate({\n inputRange: [0, 1],\n outputRange: [0, iOSShadowOutputRanges[layer].shadowOpacity],\n extrapolate: 'clamp'\n }),\n shadowOffset: {\n width: 0,\n height: elevation.interpolate({\n inputRange,\n outputRange: iOSShadowOutputRanges[layer].height\n })\n },\n shadowRadius: elevation.interpolate({\n inputRange,\n outputRange: iOSShadowOutputRanges[layer].shadowRadius\n })\n };\n }\n return {\n shadowColor,\n shadowOpacity: elevation ? iOSShadowOutputRanges[layer].shadowOpacity : 0,\n shadowOffset: {\n width: 0,\n height: iOSShadowOutputRanges[layer].height[elevation]\n },\n shadowRadius: iOSShadowOutputRanges[layer].shadowRadius[elevation]\n };\n}\nconst SurfaceIOS = forwardRef((_ref2, ref) => {\n let {\n elevation,\n style,\n backgroundColor,\n testID,\n children,\n mode = 'elevated',\n ...props\n } = _ref2;\n const [outerLayerViewStyles, innerLayerViewStyles] = React.useMemo(() => {\n const flattenedStyles = StyleSheet.flatten(style) || {};\n const [filteredStyles, outerLayerStyles, borderRadiusStyles] = splitStyles(flattenedStyles, style => outerLayerStyleProperties.includes(style) || style.startsWith('margin'), style => style.startsWith('border') && style.endsWith('Radius'));\n if (process.env.NODE_ENV !== 'production' && filteredStyles.overflow === 'hidden' && elevation !== 0) {\n console.warn('When setting overflow to hidden on Surface the shadow will not be displayed correctly. Wrap the content of your component in a separate View with the overflow style.');\n }\n const bgColor = flattenedStyles.backgroundColor || backgroundColor;\n const isElevated = mode === 'elevated';\n const outerLayerViewStyles = {\n ...(isElevated && getStyleForShadowLayer(elevation, 0)),\n ...outerLayerStyles,\n ...borderRadiusStyles,\n backgroundColor: bgColor\n };\n const innerLayerViewStyles = {\n ...(isElevated && getStyleForShadowLayer(elevation, 1)),\n ...filteredStyles,\n ...borderRadiusStyles,\n flex: flattenedStyles.height ? 1 : undefined,\n backgroundColor: bgColor\n };\n return [outerLayerViewStyles, innerLayerViewStyles];\n }, [style, elevation, backgroundColor, mode]);\n return /*#__PURE__*/React.createElement(Animated.View, {\n ref: ref,\n style: outerLayerViewStyles,\n testID: `${testID}-outer-layer`\n }, /*#__PURE__*/React.createElement(Animated.View, _extends({}, props, {\n style: innerLayerViewStyles,\n testID: testID\n }), children));\n});\n\n/**\n * Surface is a basic container that can give depth to an element with elevation shadow.\n * On dark theme with `adaptive` mode, surface is constructed by also placing a semi-transparent white overlay over a component surface.\n * See [Dark Theme](https://callstack.github.io/react-native-paper/docs/guides/theming#dark-theme) for more information.\n * Overlay and shadow can be applied by specifying the `elevation` property both on Android and iOS.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Surface, Text } from 'react-native-paper';\n * import { StyleSheet } from 'react-native';\n *\n * const MyComponent = () => (\n * \n * Surface\n * \n * );\n *\n * export default MyComponent;\n *\n * const styles = StyleSheet.create({\n * surface: {\n * padding: 8,\n * height: 80,\n * width: 80,\n * alignItems: 'center',\n * justifyContent: 'center',\n * },\n * });\n * ```\n */\nconst Surface = forwardRef((_ref3, ref) => {\n let {\n elevation = 1,\n children,\n theme: overridenTheme,\n style,\n testID = 'surface',\n mode = 'elevated',\n ...props\n } = _ref3;\n const theme = useInternalTheme(overridenTheme);\n if (!theme.isV3) return /*#__PURE__*/React.createElement(MD2Surface, _extends({}, props, {\n theme: theme,\n style: style,\n ref: ref\n }), children);\n const {\n colors\n } = theme;\n const inputRange = [0, 1, 2, 3, 4, 5];\n const backgroundColor = (_colors$elevation2 => {\n if (isAnimatedValue(elevation)) {\n return elevation.interpolate({\n inputRange,\n outputRange: inputRange.map(elevation => {\n var _colors$elevation;\n return (_colors$elevation = colors.elevation) === null || _colors$elevation === void 0 ? void 0 : _colors$elevation[`level${elevation}`];\n })\n });\n }\n return (_colors$elevation2 = colors.elevation) === null || _colors$elevation2 === void 0 ? void 0 : _colors$elevation2[`level${elevation}`];\n })();\n const isElevated = mode === 'elevated';\n if (Platform.OS === 'web') {\n const {\n pointerEvents = 'auto'\n } = props;\n return /*#__PURE__*/React.createElement(Animated.View, _extends({}, props, {\n pointerEvents: pointerEvents,\n ref: ref,\n testID: testID,\n style: [{\n backgroundColor\n }, elevation && isElevated ? shadow(elevation, theme.isV3) : null, style]\n }), children);\n }\n if (Platform.OS === 'android') {\n const elevationLevel = [0, 3, 6, 9, 12, 15];\n const getElevationAndroid = () => {\n if (isAnimatedValue(elevation)) {\n return elevation.interpolate({\n inputRange,\n outputRange: elevationLevel\n });\n }\n return elevationLevel[elevation];\n };\n const {\n margin,\n padding,\n transform,\n borderRadius\n } = StyleSheet.flatten(style) || {};\n const outerLayerStyles = {\n margin,\n padding,\n transform,\n borderRadius\n };\n const sharedStyle = [{\n backgroundColor\n }, style];\n return /*#__PURE__*/React.createElement(Animated.View, _extends({}, props, {\n testID: testID,\n ref: ref,\n style: [{\n backgroundColor,\n transform\n }, outerLayerStyles, sharedStyle, isElevated && {\n elevation: getElevationAndroid()\n }]\n }), children);\n }\n return /*#__PURE__*/React.createElement(SurfaceIOS, _extends({}, props, {\n ref: ref,\n elevation: elevation,\n backgroundColor: backgroundColor,\n style: style,\n testID: testID,\n mode: mode\n }), children);\n});\nexport default Surface;\n//# sourceMappingURL=Surface.js.map","/**\n * Utility function to extract styles in separate objects\n *\n * @param styles The style object you want to filter\n * @param filters The filters by which you want to split the styles\n * @returns An array of filtered style objects:\n * - The first style object contains the properties that didn't match any filter\n * - After that there will be a style object for each filter you passed in the same order as the matching filters\n * - A style property will exist in a single style object, the first filter it matched\n */\nexport function splitStyles(styles) {\n for (var _len = arguments.length, filters = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n filters[_key - 1] = arguments[_key];\n }\n if (process.env.NODE_ENV !== 'production' && filters.length === 0) {\n console.error('No filters were passed when calling splitStyles');\n }\n\n // `Object.entries` will be used to iterate over the styles and `Object.fromEntries` will be called before returning\n // Entries which match the given filters will be temporarily stored in `newStyles`\n const newStyles = filters.map(() => []);\n\n // Entries which match no filter\n const rest = [];\n\n // Iterate every style property\n outer: for (const item of Object.entries(styles)) {\n // Check each filter\n for (let i = 0; i < filters.length; i++) {\n // Check if filter matches\n if (filters[i](item[0])) {\n newStyles[i].push(item); // Push to temporary filtered entries array\n continue outer; // Skip to checking next style property\n }\n }\n\n // Adds to rest styles if not filtered\n rest.push(item);\n }\n\n // Put unmatched styles in the beginning\n newStyles.unshift(rest);\n\n // Convert arrays of entries into objects\n return newStyles.map(styles => Object.fromEntries(styles));\n}\n//# sourceMappingURL=splitStyles.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Animated, Easing, Platform, StyleSheet, View } from 'react-native';\nimport { useInternalTheme } from '../core/theming';\nconst DURATION = 2400;\n\n/**\n * Activity indicator is used to present progress of some activity in the app.\n * It can be used as a drop-in for the ActivityIndicator shipped with React Native.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { ActivityIndicator, MD2Colors } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * );\n *\n * export default MyComponent;\n * ```\n */\nconst ActivityIndicator = _ref => {\n var _theme$colors;\n let {\n animating = true,\n color: indicatorColor,\n hidesWhenStopped = true,\n size: indicatorSize = 'small',\n style,\n theme: themeOverrides,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const {\n current: timer\n } = React.useRef(new Animated.Value(0));\n const {\n current: fade\n } = React.useRef(new Animated.Value(!animating && hidesWhenStopped ? 0 : 1));\n const rotation = React.useRef(undefined);\n const {\n animation: {\n scale\n }\n } = theme;\n const startRotation = React.useCallback(() => {\n // Show indicator\n Animated.timing(fade, {\n duration: 200 * scale,\n toValue: 1,\n isInteraction: false,\n useNativeDriver: true\n }).start();\n\n // Circular animation in loop\n if (rotation.current) {\n timer.setValue(0);\n // $FlowFixMe\n Animated.loop(rotation.current).start();\n }\n }, [scale, fade, timer]);\n const stopRotation = () => {\n if (rotation.current) {\n rotation.current.stop();\n }\n };\n React.useEffect(() => {\n if (rotation.current === undefined) {\n // Circular animation in loop\n rotation.current = Animated.timing(timer, {\n duration: DURATION,\n easing: Easing.linear,\n // Animated.loop does not work if useNativeDriver is true on web\n useNativeDriver: Platform.OS !== 'web',\n toValue: 1,\n isInteraction: false\n });\n }\n if (animating) {\n startRotation();\n } else if (hidesWhenStopped) {\n // Hide indicator first and then stop rotation\n Animated.timing(fade, {\n duration: 200 * scale,\n toValue: 0,\n useNativeDriver: true,\n isInteraction: false\n }).start(stopRotation);\n } else {\n stopRotation();\n }\n }, [animating, fade, hidesWhenStopped, startRotation, scale, timer]);\n const color = indicatorColor || ((_theme$colors = theme.colors) === null || _theme$colors === void 0 ? void 0 : _theme$colors.primary);\n const size = typeof indicatorSize === 'string' ? indicatorSize === 'small' ? 24 : 48 : indicatorSize ? indicatorSize : 24;\n const frames = 60 * DURATION / 1000;\n const easing = Easing.bezier(0.4, 0.0, 0.7, 1.0);\n const containerStyle = {\n width: size,\n height: size / 2,\n overflow: 'hidden'\n };\n return /*#__PURE__*/React.createElement(View, _extends({\n style: [styles.container, style]\n }, rest, {\n accessible: true,\n accessibilityRole: \"progressbar\",\n accessibilityState: {\n busy: animating\n }\n }), /*#__PURE__*/React.createElement(Animated.View, {\n style: [{\n width: size,\n height: size,\n opacity: fade\n }],\n collapsable: false\n }, [0, 1].map(index => {\n // Thanks to https://github.com/n4kz/react-native-indicators for the great work\n const inputRange = Array.from(new Array(frames), (_, frameIndex) => frameIndex / (frames - 1));\n const outputRange = Array.from(new Array(frames), (_, frameIndex) => {\n let progress = 2 * frameIndex / (frames - 1);\n const rotation = index ? +(360 - 15) : -(180 - 15);\n if (progress > 1.0) {\n progress = 2.0 - progress;\n }\n const direction = index ? -1 : +1;\n return `${direction * (180 - 30) * easing(progress) + rotation}deg`;\n });\n const layerStyle = {\n width: size,\n height: size,\n transform: [{\n rotate: timer.interpolate({\n inputRange: [0, 1],\n outputRange: [`${0 + 30 + 15}deg`, `${2 * 360 + 30 + 15}deg`]\n })\n }]\n };\n const viewportStyle = {\n width: size,\n height: size,\n transform: [{\n translateY: index ? -size / 2 : 0\n }, {\n rotate: timer.interpolate({\n inputRange,\n outputRange\n })\n }]\n };\n const offsetStyle = index ? {\n top: size / 2\n } : null;\n const lineStyle = {\n width: size,\n height: size,\n borderColor: color,\n borderWidth: size / 10,\n borderRadius: size / 2\n };\n return /*#__PURE__*/React.createElement(Animated.View, {\n key: index,\n style: [styles.layer]\n }, /*#__PURE__*/React.createElement(Animated.View, {\n style: layerStyle\n }, /*#__PURE__*/React.createElement(Animated.View, {\n style: [containerStyle, offsetStyle],\n collapsable: false\n }, /*#__PURE__*/React.createElement(Animated.View, {\n style: viewportStyle\n }, /*#__PURE__*/React.createElement(Animated.View, {\n style: containerStyle,\n collapsable: false\n }, /*#__PURE__*/React.createElement(Animated.View, {\n style: lineStyle\n }))))));\n })));\n};\nconst styles = StyleSheet.create({\n container: {\n justifyContent: 'center',\n alignItems: 'center'\n },\n layer: {\n ...StyleSheet.absoluteFillObject,\n justifyContent: 'center',\n alignItems: 'center'\n }\n});\nexport default ActivityIndicator;\n//# sourceMappingURL=ActivityIndicator.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Animated, StyleSheet, View } from 'react-native';\nimport useLatestCallback from 'use-latest-callback';\nimport Button from './Button/Button';\nimport Icon from './Icon';\nimport Surface from './Surface';\nimport Text from './Typography/Text';\nimport { useInternalTheme } from '../core/theming';\nconst DEFAULT_MAX_WIDTH = 960;\n/**\n * Banner displays a prominent message and related actions.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Image } from 'react-native';\n * import { Banner } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [visible, setVisible] = React.useState(true);\n *\n * return (\n * setVisible(false),\n * },\n * {\n * label: 'Learn more',\n * onPress: () => setVisible(false),\n * },\n * ]}\n * icon={({size}) => (\n * \n * )}>\n * There was a problem processing a transaction on your credit card.\n * \n * );\n * };\n *\n * export default MyComponent;\n * ```\n */\nconst Banner = _ref => {\n let {\n visible,\n icon,\n children,\n actions = [],\n contentStyle,\n elevation = 1,\n style,\n theme: themeOverrides,\n onShowAnimationFinished = () => {},\n onHideAnimationFinished = () => {},\n maxFontSizeMultiplier,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const {\n current: position\n } = React.useRef(new Animated.Value(visible ? 1 : 0));\n const [layout, setLayout] = React.useState({\n height: 0,\n measured: false\n });\n const showCallback = useLatestCallback(onShowAnimationFinished);\n const hideCallback = useLatestCallback(onHideAnimationFinished);\n const {\n scale\n } = theme.animation;\n const opacity = position.interpolate({\n inputRange: [0, 0.1, 1],\n outputRange: [0, 1, 1]\n });\n React.useEffect(() => {\n if (visible) {\n // show\n Animated.timing(position, {\n duration: 250 * scale,\n toValue: 1,\n useNativeDriver: false\n }).start(showCallback);\n } else {\n // hide\n Animated.timing(position, {\n duration: 200 * scale,\n toValue: 0,\n useNativeDriver: false\n }).start(hideCallback);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [visible, position, scale]);\n const handleLayout = _ref2 => {\n let {\n nativeEvent\n } = _ref2;\n const {\n height\n } = nativeEvent.layout;\n setLayout({\n height,\n measured: true\n });\n };\n\n // The banner animation has 2 parts:\n // 1. Blank spacer element which animates its height to move the content\n // 2. Actual banner which animates its translateY\n // In initial render, we position everything normally and measure the height of the banner\n // Once we have the height, we apply the height to the spacer and switch the banner to position: absolute\n // We need this because we need to move the content below as if banner's height was being animated\n // However we can't animated banner's height directly as it'll also resize the content inside\n const height = Animated.multiply(position, layout.height);\n const translateY = Animated.multiply(Animated.add(position, -1), layout.height);\n return /*#__PURE__*/React.createElement(Surface, _extends({}, rest, {\n style: [!theme.isV3 && styles.elevation, {\n opacity\n }, style],\n theme: theme\n }, theme.isV3 && {\n elevation\n }), /*#__PURE__*/React.createElement(View, {\n style: [styles.wrapper, contentStyle]\n }, /*#__PURE__*/React.createElement(Animated.View, {\n style: {\n height\n }\n }), /*#__PURE__*/React.createElement(Animated.View, {\n onLayout: handleLayout,\n style: [layout.measured || !visible ?\n // If we have measured banner's height or it's invisible,\n // Position it absolutely, the layout will be taken care of the spacer\n [styles.absolute, {\n transform: [{\n translateY\n }]\n }] :\n // Otherwise position it normally\n null, !layout.measured && !visible ?\n // If we haven't measured banner's height yet and it's invisible,\n // hide it with opacity: 0 so user doesn't see it\n styles.transparent : null]\n }, /*#__PURE__*/React.createElement(View, {\n style: styles.content\n }, icon ? /*#__PURE__*/React.createElement(View, {\n style: styles.icon\n }, /*#__PURE__*/React.createElement(Icon, {\n source: icon,\n size: 40\n })) : null, /*#__PURE__*/React.createElement(Text, {\n style: [styles.message, {\n color: theme.isV3 ? theme.colors.onSurface : theme.colors.text\n }],\n accessibilityLiveRegion: visible ? 'polite' : 'none',\n accessibilityRole: \"alert\",\n maxFontSizeMultiplier: maxFontSizeMultiplier\n }, children)), /*#__PURE__*/React.createElement(View, {\n style: styles.actions\n }, actions.map((_ref3, i) => {\n var _theme$colors;\n let {\n label,\n ...others\n } = _ref3;\n return /*#__PURE__*/React.createElement(Button, _extends({\n key: /* eslint-disable-line react/no-array-index-key */i,\n compact: true,\n mode: \"text\",\n style: styles.button,\n textColor: (_theme$colors = theme.colors) === null || _theme$colors === void 0 ? void 0 : _theme$colors.primary,\n theme: theme\n }, others), label);\n })))));\n};\nconst styles = StyleSheet.create({\n wrapper: {\n overflow: 'hidden',\n alignSelf: 'center',\n width: '100%',\n maxWidth: DEFAULT_MAX_WIDTH\n },\n absolute: {\n position: 'absolute',\n top: 0,\n width: '100%'\n },\n content: {\n flexDirection: 'row',\n justifyContent: 'flex-start',\n marginHorizontal: 8,\n marginTop: 16,\n marginBottom: 0\n },\n icon: {\n margin: 8\n },\n message: {\n flex: 1,\n margin: 8\n },\n actions: {\n flexDirection: 'row',\n justifyContent: 'flex-end',\n margin: 4\n },\n button: {\n margin: 4\n },\n elevation: {\n elevation: 1\n },\n transparent: {\n opacity: 0\n }\n});\nexport default Banner;\n//# sourceMappingURL=Banner.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Animated, Platform, StyleSheet, View } from 'react-native';\nimport color from 'color';\nimport { getButtonColors } from './utils';\nimport { useInternalTheme } from '../../core/theming';\nimport { forwardRef } from '../../utils/forwardRef';\nimport hasTouchHandler from '../../utils/hasTouchHandler';\nimport { splitStyles } from '../../utils/splitStyles';\nimport ActivityIndicator from '../ActivityIndicator';\nimport Icon from '../Icon';\nimport Surface from '../Surface';\nimport TouchableRipple from '../TouchableRipple/TouchableRipple';\nimport Text from '../Typography/Text';\n/**\n * A button is component that the user can press to trigger an action.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Button } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * );\n *\n * export default MyComponent;\n * ```\n */\nconst Button = (_ref, ref) => {\n var _StyleSheet$flatten;\n let {\n disabled,\n compact,\n mode = 'text',\n dark,\n loading,\n icon,\n buttonColor: customButtonColor,\n textColor: customTextColor,\n rippleColor: customRippleColor,\n children,\n accessibilityLabel,\n accessibilityHint,\n accessibilityRole = 'button',\n onPress,\n onPressIn,\n onPressOut,\n onLongPress,\n delayLongPress,\n style,\n theme: themeOverrides,\n uppercase: uppercaseProp,\n contentStyle,\n labelStyle,\n testID = 'button',\n accessible,\n background,\n maxFontSizeMultiplier,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const isMode = React.useCallback(modeToCompare => {\n return mode === modeToCompare;\n }, [mode]);\n const {\n roundness,\n isV3,\n animation\n } = theme;\n const uppercase = uppercaseProp ?? !theme.isV3;\n const hasPassedTouchHandler = hasTouchHandler({\n onPress,\n onPressIn,\n onPressOut,\n onLongPress\n });\n const isElevationEntitled = !disabled && (isV3 ? isMode('elevated') : isMode('contained'));\n const initialElevation = isV3 ? 1 : 2;\n const activeElevation = isV3 ? 2 : 8;\n const {\n current: elevation\n } = React.useRef(new Animated.Value(isElevationEntitled ? initialElevation : 0));\n React.useEffect(() => {\n elevation.setValue(isElevationEntitled ? initialElevation : 0);\n }, [isElevationEntitled, elevation, initialElevation]);\n const handlePressIn = e => {\n onPressIn === null || onPressIn === void 0 ? void 0 : onPressIn(e);\n if (isV3 ? isMode('elevated') : isMode('contained')) {\n const {\n scale\n } = animation;\n Animated.timing(elevation, {\n toValue: activeElevation,\n duration: 200 * scale,\n useNativeDriver: Platform.OS === 'web' || Platform.constants.reactNativeVersion.minor <= 72\n }).start();\n }\n };\n const handlePressOut = e => {\n onPressOut === null || onPressOut === void 0 ? void 0 : onPressOut(e);\n if (isV3 ? isMode('elevated') : isMode('contained')) {\n const {\n scale\n } = animation;\n Animated.timing(elevation, {\n toValue: initialElevation,\n duration: 150 * scale,\n useNativeDriver: Platform.OS === 'web' || Platform.constants.reactNativeVersion.minor <= 72\n }).start();\n }\n };\n const flattenedStyles = StyleSheet.flatten(style) || {};\n const [, borderRadiusStyles] = splitStyles(flattenedStyles, style => style.startsWith('border') && style.endsWith('Radius'));\n const borderRadius = (isV3 ? 5 : 1) * roundness;\n const iconSize = isV3 ? 18 : 16;\n const {\n backgroundColor,\n borderColor,\n textColor,\n borderWidth\n } = getButtonColors({\n customButtonColor,\n customTextColor,\n theme,\n mode,\n disabled,\n dark\n });\n const rippleColor = customRippleColor || color(textColor).alpha(0.12).rgb().string();\n const touchableStyle = {\n ...borderRadiusStyles,\n borderRadius: borderRadiusStyles.borderRadius ?? borderRadius\n };\n const buttonStyle = {\n backgroundColor,\n borderColor,\n borderWidth,\n ...touchableStyle\n };\n const {\n color: customLabelColor,\n fontSize: customLabelSize\n } = StyleSheet.flatten(labelStyle) || {};\n const font = isV3 ? theme.fonts.labelLarge : theme.fonts.medium;\n const textStyle = {\n color: textColor,\n ...font\n };\n const iconStyle = ((_StyleSheet$flatten = StyleSheet.flatten(contentStyle)) === null || _StyleSheet$flatten === void 0 ? void 0 : _StyleSheet$flatten.flexDirection) === 'row-reverse' ? [styles.iconReverse, isV3 && styles[`md3IconReverse${compact ? 'Compact' : ''}`], isV3 && isMode('text') && styles[`md3IconReverseTextMode${compact ? 'Compact' : ''}`]] : [styles.icon, isV3 && styles[`md3Icon${compact ? 'Compact' : ''}`], isV3 && isMode('text') && styles[`md3IconTextMode${compact ? 'Compact' : ''}`]];\n return /*#__PURE__*/React.createElement(Surface, _extends({}, rest, {\n ref: ref,\n testID: `${testID}-container`,\n style: [styles.button, compact && styles.compact, buttonStyle, style, !isV3 && !disabled && {\n elevation\n }]\n }, isV3 && {\n elevation: elevation\n }), /*#__PURE__*/React.createElement(TouchableRipple, {\n borderless: true,\n background: background,\n onPress: onPress,\n onLongPress: onLongPress,\n onPressIn: hasPassedTouchHandler ? handlePressIn : undefined,\n onPressOut: hasPassedTouchHandler ? handlePressOut : undefined,\n delayLongPress: delayLongPress,\n accessibilityLabel: accessibilityLabel,\n accessibilityHint: accessibilityHint,\n accessibilityRole: accessibilityRole,\n accessibilityState: {\n disabled\n },\n accessible: accessible,\n disabled: disabled,\n rippleColor: rippleColor,\n style: touchableStyle,\n testID: testID,\n theme: theme\n }, /*#__PURE__*/React.createElement(View, {\n style: [styles.content, contentStyle]\n }, icon && loading !== true ? /*#__PURE__*/React.createElement(View, {\n style: iconStyle,\n testID: `${testID}-icon-container`\n }, /*#__PURE__*/React.createElement(Icon, {\n source: icon,\n size: customLabelSize ?? iconSize,\n color: typeof customLabelColor === 'string' ? customLabelColor : textColor\n })) : null, loading ? /*#__PURE__*/React.createElement(ActivityIndicator, {\n size: customLabelSize ?? iconSize,\n color: typeof customLabelColor === 'string' ? customLabelColor : textColor,\n style: iconStyle\n }) : null, /*#__PURE__*/React.createElement(Text, {\n variant: \"labelLarge\",\n selectable: false,\n numberOfLines: 1,\n testID: `${testID}-text`,\n style: [styles.label, !isV3 && styles.md2Label, isV3 && (isMode('text') ? icon || loading ? styles.md3LabelTextAddons : styles.md3LabelText : styles.md3Label), compact && styles.compactLabel, uppercase && styles.uppercaseLabel, textStyle, labelStyle],\n maxFontSizeMultiplier: maxFontSizeMultiplier\n }, children))));\n};\nconst styles = StyleSheet.create({\n button: {\n minWidth: 64,\n borderStyle: 'solid'\n },\n compact: {\n minWidth: 'auto'\n },\n content: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center'\n },\n icon: {\n marginLeft: 12,\n marginRight: -4\n },\n iconReverse: {\n marginRight: 12,\n marginLeft: -4\n },\n /* eslint-disable react-native/no-unused-styles */\n md3Icon: {\n marginLeft: 16,\n marginRight: -16\n },\n md3IconCompact: {\n marginLeft: 8,\n marginRight: 0\n },\n md3IconReverse: {\n marginLeft: -16,\n marginRight: 16\n },\n md3IconReverseCompact: {\n marginLeft: 0,\n marginRight: 8\n },\n md3IconTextMode: {\n marginLeft: 12,\n marginRight: -8\n },\n md3IconTextModeCompact: {\n marginLeft: 6,\n marginRight: 0\n },\n md3IconReverseTextMode: {\n marginLeft: -8,\n marginRight: 12\n },\n md3IconReverseTextModeCompact: {\n marginLeft: 0,\n marginRight: 6\n },\n /* eslint-enable react-native/no-unused-styles */\n label: {\n textAlign: 'center',\n marginVertical: 9,\n marginHorizontal: 16\n },\n md2Label: {\n letterSpacing: 1\n },\n compactLabel: {\n marginHorizontal: 8\n },\n uppercaseLabel: {\n textTransform: 'uppercase'\n },\n md3Label: {\n marginVertical: 10,\n marginHorizontal: 24\n },\n md3LabelText: {\n marginHorizontal: 12\n },\n md3LabelTextAddons: {\n marginHorizontal: 16\n }\n});\nexport default forwardRef(Button);\n//# sourceMappingURL=Button.js.map","import { StyleSheet } from 'react-native';\nimport color from 'color';\nimport { black, white } from '../../styles/themes/v2/colors';\nconst isDark = _ref => {\n let {\n dark,\n backgroundColor\n } = _ref;\n if (typeof dark === 'boolean') {\n return dark;\n }\n if (backgroundColor === 'transparent') {\n return false;\n }\n if (backgroundColor !== 'transparent') {\n return !color(backgroundColor).isLight();\n }\n return false;\n};\nconst getButtonBackgroundColor = _ref2 => {\n let {\n isMode,\n theme,\n disabled,\n customButtonColor\n } = _ref2;\n if (customButtonColor && !disabled) {\n return customButtonColor;\n }\n if (theme.isV3) {\n if (disabled) {\n if (isMode('outlined') || isMode('text')) {\n return 'transparent';\n }\n return theme.colors.surfaceDisabled;\n }\n if (isMode('elevated')) {\n return theme.colors.elevation.level1;\n }\n if (isMode('contained')) {\n return theme.colors.primary;\n }\n if (isMode('contained-tonal')) {\n return theme.colors.secondaryContainer;\n }\n }\n if (isMode('contained')) {\n if (disabled) {\n return color(theme.dark ? white : black).alpha(0.12).rgb().string();\n }\n return theme.colors.primary;\n }\n return 'transparent';\n};\nconst getButtonTextColor = _ref3 => {\n let {\n isMode,\n theme,\n disabled,\n customTextColor,\n backgroundColor,\n dark\n } = _ref3;\n if (customTextColor && !disabled) {\n return customTextColor;\n }\n if (theme.isV3) {\n if (disabled) {\n return theme.colors.onSurfaceDisabled;\n }\n if (typeof dark === 'boolean') {\n if (isMode('contained') || isMode('contained-tonal') || isMode('elevated')) {\n return isDark({\n dark,\n backgroundColor\n }) ? white : black;\n }\n }\n if (isMode('outlined') || isMode('text') || isMode('elevated')) {\n return theme.colors.primary;\n }\n if (isMode('contained')) {\n return theme.colors.onPrimary;\n }\n if (isMode('contained-tonal')) {\n return theme.colors.onSecondaryContainer;\n }\n }\n if (disabled) {\n return color(theme.dark ? white : black).alpha(0.32).rgb().string();\n }\n if (isMode('contained')) {\n return isDark({\n dark,\n backgroundColor\n }) ? white : black;\n }\n return theme.colors.primary;\n};\nconst getButtonBorderColor = _ref4 => {\n let {\n isMode,\n disabled,\n theme\n } = _ref4;\n if (theme.isV3) {\n if (disabled && isMode('outlined')) {\n return theme.colors.surfaceDisabled;\n }\n if (isMode('outlined')) {\n return theme.colors.outline;\n }\n }\n if (isMode('outlined')) {\n return color(theme.dark ? white : black).alpha(0.29).rgb().string();\n }\n return 'transparent';\n};\nconst getButtonBorderWidth = _ref5 => {\n let {\n isMode,\n theme\n } = _ref5;\n if (theme.isV3) {\n if (isMode('outlined')) {\n return 1;\n }\n }\n if (isMode('outlined')) {\n return StyleSheet.hairlineWidth;\n }\n return 0;\n};\nexport const getButtonColors = _ref6 => {\n let {\n theme,\n mode,\n customButtonColor,\n customTextColor,\n disabled,\n dark\n } = _ref6;\n const isMode = modeToCompare => {\n return mode === modeToCompare;\n };\n const backgroundColor = getButtonBackgroundColor({\n isMode,\n theme,\n disabled,\n customButtonColor\n });\n const textColor = getButtonTextColor({\n isMode,\n theme,\n disabled,\n customTextColor,\n backgroundColor,\n dark\n });\n const borderColor = getButtonBorderColor({\n isMode,\n theme,\n disabled\n });\n const borderWidth = getButtonBorderWidth({\n isMode,\n theme\n });\n return {\n backgroundColor,\n borderColor,\n textColor,\n borderWidth\n };\n};\n//# sourceMappingURL=utils.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Animated, Platform, StyleSheet, View } from 'react-native';\nimport useLatestCallback from 'use-latest-callback';\nimport BottomNavigationBar from './BottomNavigationBar';\nimport BottomNavigationRouteScreen from './BottomNavigationRouteScreen';\nimport { useInternalTheme } from '../../core/theming';\nimport useAnimatedValueArray from '../../utils/useAnimatedValueArray';\nconst FAR_FAR_AWAY = Platform.OS === 'web' ? 0 : 9999;\nconst SceneComponent = /*#__PURE__*/React.memo(_ref => {\n let {\n component,\n ...rest\n } = _ref;\n return /*#__PURE__*/React.createElement(component, rest);\n});\n\n/**\n * BottomNavigation provides quick navigation between top-level views of an app with a bottom navigation bar.\n * It is primarily designed for use on mobile. If you want to use the navigation bar only see [`BottomNavigation.Bar`](BottomNavigationBar).\n *\n * By default BottomNavigation uses primary color as a background, in dark theme with `adaptive` mode it will use surface colour instead.\n * See [Dark Theme](https://callstack.github.io/react-native-paper/docs/guides/theming#dark-theme) for more information.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { BottomNavigation, Text } from 'react-native-paper';\n *\n * const MusicRoute = () => Music;\n *\n * const AlbumsRoute = () => Albums;\n *\n * const RecentsRoute = () => Recents;\n *\n * const NotificationsRoute = () => Notifications;\n *\n * const MyComponent = () => {\n * const [index, setIndex] = React.useState(0);\n * const [routes] = React.useState([\n * { key: 'music', title: 'Favorites', focusedIcon: 'heart', unfocusedIcon: 'heart-outline'},\n * { key: 'albums', title: 'Albums', focusedIcon: 'album' },\n * { key: 'recents', title: 'Recents', focusedIcon: 'history' },\n * { key: 'notifications', title: 'Notifications', focusedIcon: 'bell', unfocusedIcon: 'bell-outline' },\n * ]);\n *\n * const renderScene = BottomNavigation.SceneMap({\n * music: MusicRoute,\n * albums: AlbumsRoute,\n * recents: RecentsRoute,\n * notifications: NotificationsRoute,\n * });\n *\n * return (\n * \n * );\n * };\n *\n * export default MyComponent;\n * ```\n */\nconst BottomNavigation = _ref2 => {\n let {\n navigationState,\n renderScene,\n renderIcon,\n renderLabel,\n renderTouchable,\n getLabelText,\n getBadge,\n getColor,\n getAccessibilityLabel,\n getTestID,\n activeColor,\n inactiveColor,\n keyboardHidesNavigationBar = Platform.OS === 'android',\n barStyle,\n labeled = true,\n style,\n activeIndicatorStyle,\n sceneAnimationEnabled = false,\n sceneAnimationType = 'opacity',\n sceneAnimationEasing,\n onTabPress,\n onTabLongPress,\n onIndexChange,\n shifting: shiftingProp,\n safeAreaInsets,\n labelMaxFontSizeMultiplier = 1,\n compact: compactProp,\n testID = 'bottom-navigation',\n theme: themeOverrides,\n getLazy = _ref3 => {\n let {\n route\n } = _ref3;\n return route.lazy;\n }\n } = _ref2;\n const theme = useInternalTheme(themeOverrides);\n const {\n scale\n } = theme.animation;\n const compact = compactProp ?? !theme.isV3;\n let shifting = shiftingProp ?? (theme.isV3 ? false : navigationState.routes.length > 3);\n if (shifting && navigationState.routes.length < 2) {\n shifting = false;\n console.warn('BottomNavigation needs at least 2 tabs to run shifting animation');\n }\n const focusedKey = navigationState.routes[navigationState.index].key;\n\n /**\n * Active state of individual tab item positions:\n * -1 if they're before the active tab, 0 if they're active, 1 if they're after the active tab\n */\n const tabsPositionAnims = useAnimatedValueArray(navigationState.routes.map((_, i) => i === navigationState.index ? 0 : i >= navigationState.index ? 1 : -1));\n\n /**\n * The top offset for each tab item to position it offscreen.\n * Placing items offscreen helps to save memory usage for inactive screens with removeClippedSubviews.\n * We use animated values for this to prevent unnecessary re-renders.\n */\n const offsetsAnims = useAnimatedValueArray(navigationState.routes.map(\n // offscreen === 1, normal === 0\n (_, i) => i === navigationState.index ? 0 : 1));\n\n /**\n * List of loaded tabs, tabs will be loaded when navigated to.\n */\n const [loaded, setLoaded] = React.useState([focusedKey]);\n if (!loaded.includes(focusedKey)) {\n // Set the current tab to be loaded if it was not loaded before\n setLoaded(loaded => [...loaded, focusedKey]);\n }\n const animateToIndex = React.useCallback(index => {\n Animated.parallel([...navigationState.routes.map((_, i) => Animated.timing(tabsPositionAnims[i], {\n toValue: i === index ? 0 : i >= index ? 1 : -1,\n duration: theme.isV3 || shifting ? 150 * scale : 0,\n useNativeDriver: true,\n easing: sceneAnimationEasing\n }))]).start(_ref4 => {\n let {\n finished\n } = _ref4;\n if (finished) {\n // Position all inactive screens offscreen to save memory usage\n // Only do it when animation has finished to avoid glitches mid-transition if switching fast\n offsetsAnims.forEach((offset, i) => {\n if (i === index) {\n offset.setValue(0);\n } else {\n offset.setValue(1);\n }\n });\n }\n });\n }, [shifting, navigationState.routes, offsetsAnims, scale, tabsPositionAnims, sceneAnimationEasing, theme]);\n React.useEffect(() => {\n // Workaround for native animated bug in react-native@^0.57\n // Context: https://github.com/callstack/react-native-paper/pull/637\n animateToIndex(navigationState.index);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n const prevNavigationState = React.useRef();\n React.useEffect(() => {\n // Reset offsets of previous and current tabs before animation\n offsetsAnims.forEach((offset, i) => {\n var _prevNavigationState$;\n if (i === navigationState.index || i === ((_prevNavigationState$ = prevNavigationState.current) === null || _prevNavigationState$ === void 0 ? void 0 : _prevNavigationState$.index)) {\n offset.setValue(0);\n }\n });\n animateToIndex(navigationState.index);\n }, [navigationState.index, animateToIndex, offsetsAnims]);\n const handleTabPress = useLatestCallback(event => {\n onTabPress === null || onTabPress === void 0 ? void 0 : onTabPress(event);\n if (event.defaultPrevented) {\n return;\n }\n const index = navigationState.routes.findIndex(route => event.route.key === route.key);\n if (index !== navigationState.index) {\n prevNavigationState.current = navigationState;\n onIndexChange(index);\n }\n });\n const jumpTo = useLatestCallback(key => {\n const index = navigationState.routes.findIndex(route => route.key === key);\n prevNavigationState.current = navigationState;\n onIndexChange(index);\n });\n const {\n routes\n } = navigationState;\n const {\n colors\n } = theme;\n return /*#__PURE__*/React.createElement(View, {\n style: [styles.container, style],\n testID: testID\n }, /*#__PURE__*/React.createElement(View, {\n style: [styles.content, {\n backgroundColor: colors === null || colors === void 0 ? void 0 : colors.background\n }]\n }, routes.map((route, index) => {\n var _prevNavigationState$2;\n if (getLazy({\n route\n }) !== false && !loaded.includes(route.key)) {\n // Don't render a screen if we've never navigated to it\n return null;\n }\n const focused = navigationState.index === index;\n const previouslyFocused = ((_prevNavigationState$2 = prevNavigationState.current) === null || _prevNavigationState$2 === void 0 ? void 0 : _prevNavigationState$2.index) === index;\n const countAlphaOffscreen = sceneAnimationEnabled && (focused || previouslyFocused);\n const renderToHardwareTextureAndroid = sceneAnimationEnabled && focused;\n const opacity = sceneAnimationEnabled ? tabsPositionAnims[index].interpolate({\n inputRange: [-1, 0, 1],\n outputRange: [0, 1, 0]\n }) : focused ? 1 : 0;\n const offsetTarget = focused ? 0 : FAR_FAR_AWAY;\n const top = sceneAnimationEnabled ? offsetsAnims[index].interpolate({\n inputRange: [0, 1],\n outputRange: [0, offsetTarget]\n }) : offsetTarget;\n const left = sceneAnimationType === 'shifting' ? tabsPositionAnims[index].interpolate({\n inputRange: [-1, 0, 1],\n outputRange: [-50, 0, 50]\n }) : 0;\n const zIndex = focused ? 1 : 0;\n return /*#__PURE__*/React.createElement(BottomNavigationRouteScreen, {\n key: route.key,\n pointerEvents: focused ? 'auto' : 'none',\n accessibilityElementsHidden: !focused,\n importantForAccessibility: focused ? 'auto' : 'no-hide-descendants',\n index: index,\n visibility: opacity,\n style: [StyleSheet.absoluteFill, {\n zIndex\n }],\n collapsable: false,\n removeClippedSubviews:\n // On iOS, set removeClippedSubviews to true only when not focused\n // This is an workaround for a bug where the clipped view never re-appears\n Platform.OS === 'ios' ? navigationState.index !== index : true\n }, /*#__PURE__*/React.createElement(Animated.View, _extends({}, Platform.OS === 'android' && {\n needsOffscreenAlphaCompositing: countAlphaOffscreen\n }, {\n renderToHardwareTextureAndroid: renderToHardwareTextureAndroid,\n style: [styles.content, {\n opacity,\n transform: [{\n translateX: left\n }, {\n translateY: top\n }]\n }]\n }), renderScene({\n route,\n jumpTo\n })));\n })), /*#__PURE__*/React.createElement(BottomNavigationBar, {\n navigationState: navigationState,\n renderIcon: renderIcon,\n renderLabel: renderLabel,\n renderTouchable: renderTouchable,\n getLabelText: getLabelText,\n getBadge: getBadge,\n getColor: getColor,\n getAccessibilityLabel: getAccessibilityLabel,\n getTestID: getTestID,\n activeColor: activeColor,\n inactiveColor: inactiveColor,\n keyboardHidesNavigationBar: keyboardHidesNavigationBar,\n style: barStyle,\n activeIndicatorStyle: activeIndicatorStyle,\n labeled: labeled,\n animationEasing: sceneAnimationEasing,\n onTabPress: handleTabPress,\n onTabLongPress: onTabLongPress,\n shifting: shifting,\n safeAreaInsets: safeAreaInsets,\n labelMaxFontSizeMultiplier: labelMaxFontSizeMultiplier,\n compact: compact,\n testID: `${testID}-bar`,\n theme: theme\n }));\n};\n\n/**\n * Function which takes a map of route keys to components.\n * Pure components are used to minimize re-rendering of the pages.\n * This drastically improves the animation performance.\n */\nBottomNavigation.SceneMap = scenes => {\n return _ref5 => {\n let {\n route,\n jumpTo\n } = _ref5;\n return /*#__PURE__*/React.createElement(SceneComponent, {\n key: route.key,\n component: scenes[route.key ? route.key : ''],\n route: route,\n jumpTo: jumpTo\n });\n };\n};\n\n// @component ./BottomNavigationBar.tsx\nBottomNavigation.Bar = BottomNavigationBar;\nexport default BottomNavigation;\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n overflow: 'hidden'\n },\n content: {\n flex: 1\n }\n});\n//# sourceMappingURL=BottomNavigation.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Animated, Platform, StyleSheet, Pressable, View } from 'react-native';\nimport color from 'color';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { getActiveTintColor, getInactiveTintColor, getLabelColor } from './utils';\nimport { useInternalTheme } from '../../core/theming';\nimport overlay from '../../styles/overlay';\nimport { black, white } from '../../styles/themes/v2/colors';\nimport useAnimatedValue from '../../utils/useAnimatedValue';\nimport useAnimatedValueArray from '../../utils/useAnimatedValueArray';\nimport useIsKeyboardShown from '../../utils/useIsKeyboardShown';\nimport useLayout from '../../utils/useLayout';\nimport Badge from '../Badge';\nimport Icon from '../Icon';\nimport Surface from '../Surface';\nimport TouchableRipple from '../TouchableRipple/TouchableRipple';\nimport Text from '../Typography/Text';\nconst MIN_RIPPLE_SCALE = 0.001; // Minimum scale is not 0 due to bug with animation\nconst MIN_TAB_WIDTH = 96;\nconst MAX_TAB_WIDTH = 168;\nconst BAR_HEIGHT = 56;\nconst OUTLINE_WIDTH = 64;\nconst Touchable = _ref => {\n let {\n route: _0,\n style,\n children,\n borderless,\n centered,\n rippleColor,\n ...rest\n } = _ref;\n return TouchableRipple.supported ? /*#__PURE__*/React.createElement(TouchableRipple, _extends({}, rest, {\n disabled: rest.disabled || undefined,\n borderless: borderless,\n centered: centered,\n rippleColor: rippleColor,\n style: style\n }), children) : /*#__PURE__*/React.createElement(Pressable, _extends({\n style: style\n }, rest), children);\n};\n\n/**\n * A navigation bar which can easily be integrated with [React Navigation's Bottom Tabs Navigator](https://reactnavigation.org/docs/bottom-tab-navigator/).\n *\n * ## Usage\n * ```js\n * import React from 'react';\n * import { View, StyleSheet } from 'react-native';\n *\n * import { CommonActions } from '@react-navigation/native';\n * import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';\n * import { Text, BottomNavigation } from 'react-native-paper';\n * import Icon from 'react-native-vector-icons/MaterialCommunityIcons';\n *\n * const Tab = createBottomTabNavigator();\n *\n * export default function MyComponent() {\n * return (\n * (\n * {\n * const event = navigation.emit({\n * type: 'tabPress',\n * target: route.key,\n * canPreventDefault: true,\n * });\n *\n * if (event.defaultPrevented) {\n * preventDefault();\n * } else {\n * navigation.dispatch({\n * ...CommonActions.navigate(route.name, route.params),\n * target: state.key,\n * });\n * }\n * }}\n * renderIcon={({ route, focused, color }) => {\n * const { options } = descriptors[route.key];\n * if (options.tabBarIcon) {\n * return options.tabBarIcon({ focused, color, size: 24 });\n * }\n *\n * return null;\n * }}\n * getLabelText={({ route }) => {\n * const { options } = descriptors[route.key];\n * const label =\n * options.tabBarLabel !== undefined\n * ? options.tabBarLabel\n * : options.title !== undefined\n * ? options.title\n * : route.title;\n *\n * return label;\n * }}\n * />\n * )}\n * >\n * {\n * return ;\n * },\n * }}\n * />\n * {\n * return ;\n * },\n * }}\n * />\n * \n * );\n * }\n *\n * function HomeScreen() {\n * return (\n * \n * Home!\n * \n * );\n * }\n *\n * function SettingsScreen() {\n * return (\n * \n * Settings!\n * \n * );\n * }\n *\n * const styles = StyleSheet.create({\n * container: {\n * flex: 1,\n * justifyContent: 'center',\n * alignItems: 'center',\n * },\n * });\n * ```\n */\nconst BottomNavigationBar = _ref2 => {\n let {\n navigationState,\n renderIcon,\n renderLabel,\n renderTouchable = props => /*#__PURE__*/React.createElement(Touchable, props),\n getLabelText = _ref3 => {\n let {\n route\n } = _ref3;\n return route.title;\n },\n getBadge = _ref4 => {\n let {\n route\n } = _ref4;\n return route.badge;\n },\n getColor = _ref5 => {\n let {\n route\n } = _ref5;\n return route.color;\n },\n getAccessibilityLabel = _ref6 => {\n let {\n route\n } = _ref6;\n return route.accessibilityLabel;\n },\n getTestID = _ref7 => {\n let {\n route\n } = _ref7;\n return route.testID;\n },\n activeColor,\n inactiveColor,\n keyboardHidesNavigationBar = Platform.OS === 'android',\n style,\n activeIndicatorStyle,\n labeled = true,\n animationEasing,\n onTabPress,\n onTabLongPress,\n shifting: shiftingProp,\n safeAreaInsets,\n labelMaxFontSizeMultiplier = 1,\n compact: compactProp,\n testID = 'bottom-navigation-bar',\n theme: themeOverrides\n } = _ref2;\n const theme = useInternalTheme(themeOverrides);\n const {\n bottom,\n left,\n right\n } = useSafeAreaInsets();\n const {\n scale\n } = theme.animation;\n const compact = compactProp ?? !theme.isV3;\n let shifting = shiftingProp ?? (theme.isV3 ? false : navigationState.routes.length > 3);\n if (shifting && navigationState.routes.length < 2) {\n shifting = false;\n console.warn('BottomNavigation.Bar needs at least 2 tabs to run shifting animation');\n }\n\n /**\n * Visibility of the navigation bar, visible state is 1 and invisible is 0.\n */\n const visibleAnim = useAnimatedValue(1);\n\n /**\n * Active state of individual tab items, active state is 1 and inactive state is 0.\n */\n const tabsAnims = useAnimatedValueArray(navigationState.routes.map(\n // focused === 1, unfocused === 0\n (_, i) => i === navigationState.index ? 1 : 0));\n\n /**\n * Index of the currently active tab. Used for setting the background color.\n * We don't use the color as an animated value directly, because `setValue` seems to be buggy with colors?.\n */\n const indexAnim = useAnimatedValue(navigationState.index);\n\n /**\n * Animation for the background color ripple, used to determine it's scale and opacity.\n */\n const rippleAnim = useAnimatedValue(MIN_RIPPLE_SCALE);\n\n /**\n * Layout of the navigation bar. The width is used to determine the size and position of the ripple.\n */\n const [layout, onLayout] = useLayout();\n\n /**\n * Track whether the keyboard is visible to show and hide the navigation bar.\n */\n const [keyboardVisible, setKeyboardVisible] = React.useState(false);\n const handleKeyboardShow = React.useCallback(() => {\n setKeyboardVisible(true);\n Animated.timing(visibleAnim, {\n toValue: 0,\n duration: 150 * scale,\n useNativeDriver: true\n }).start();\n }, [scale, visibleAnim]);\n const handleKeyboardHide = React.useCallback(() => {\n Animated.timing(visibleAnim, {\n toValue: 1,\n duration: 100 * scale,\n useNativeDriver: true\n }).start(() => {\n setKeyboardVisible(false);\n });\n }, [scale, visibleAnim]);\n const animateToIndex = React.useCallback(index => {\n // Reset the ripple to avoid glitch if it's currently animating\n rippleAnim.setValue(MIN_RIPPLE_SCALE);\n Animated.parallel([Animated.timing(rippleAnim, {\n toValue: 1,\n duration: theme.isV3 || shifting ? 400 * scale : 0,\n useNativeDriver: true\n }), ...navigationState.routes.map((_, i) => Animated.timing(tabsAnims[i], {\n toValue: i === index ? 1 : 0,\n duration: theme.isV3 || shifting ? 150 * scale : 0,\n useNativeDriver: true,\n easing: animationEasing\n }))]).start(() => {\n // Workaround a bug in native animations where this is reset after first animation\n tabsAnims.map((tab, i) => tab.setValue(i === index ? 1 : 0));\n\n // Update the index to change bar's background color and then hide the ripple\n indexAnim.setValue(index);\n rippleAnim.setValue(MIN_RIPPLE_SCALE);\n });\n }, [rippleAnim, theme.isV3, shifting, scale, navigationState.routes, tabsAnims, animationEasing, indexAnim]);\n React.useEffect(() => {\n // Workaround for native animated bug in react-native@^0.57\n // Context: https://github.com/callstack/react-native-paper/pull/637\n animateToIndex(navigationState.index);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n useIsKeyboardShown({\n onShow: handleKeyboardShow,\n onHide: handleKeyboardHide\n });\n React.useEffect(() => {\n animateToIndex(navigationState.index);\n }, [navigationState.index, animateToIndex]);\n const eventForIndex = index => {\n const event = {\n route: navigationState.routes[index],\n defaultPrevented: false,\n preventDefault: () => {\n event.defaultPrevented = true;\n }\n };\n return event;\n };\n const {\n routes\n } = navigationState;\n const {\n colors,\n dark: isDarkTheme,\n mode,\n isV3\n } = theme;\n const {\n backgroundColor: customBackground,\n elevation = 4\n } = StyleSheet.flatten(style) || {};\n const approxBackgroundColor = customBackground ? customBackground : isDarkTheme && mode === 'adaptive' ? overlay(elevation, colors === null || colors === void 0 ? void 0 : colors.surface) : colors === null || colors === void 0 ? void 0 : colors.primary;\n const v2BackgroundColorInterpolation = shifting ? indexAnim.interpolate({\n inputRange: routes.map((_, i) => i),\n // FIXME: does outputRange support ColorValue or just strings?\n // @ts-expect-error\n outputRange: routes.map(route => getColor({\n route\n }) || approxBackgroundColor)\n }) : approxBackgroundColor;\n const backgroundColor = isV3 ? customBackground || theme.colors.elevation.level2 : shifting ? v2BackgroundColorInterpolation : approxBackgroundColor;\n const isDark = typeof approxBackgroundColor === 'string' ? !color(approxBackgroundColor).isLight() : true;\n const textColor = isDark ? white : black;\n const activeTintColor = getActiveTintColor({\n activeColor,\n defaultColor: textColor,\n theme\n });\n const inactiveTintColor = getInactiveTintColor({\n inactiveColor,\n defaultColor: textColor,\n theme\n });\n const touchColor = color(activeTintColor).alpha(0.12).rgb().string();\n const maxTabWidth = routes.length > 3 ? MIN_TAB_WIDTH : MAX_TAB_WIDTH;\n const maxTabBarWidth = maxTabWidth * routes.length;\n const rippleSize = layout.width / 4;\n const insets = {\n left: (safeAreaInsets === null || safeAreaInsets === void 0 ? void 0 : safeAreaInsets.left) ?? left,\n right: (safeAreaInsets === null || safeAreaInsets === void 0 ? void 0 : safeAreaInsets.right) ?? right,\n bottom: (safeAreaInsets === null || safeAreaInsets === void 0 ? void 0 : safeAreaInsets.bottom) ?? bottom\n };\n return /*#__PURE__*/React.createElement(Surface, _extends({}, theme.isV3 && {\n elevation: 0\n }, {\n testID: testID,\n style: [!theme.isV3 && styles.elevation, styles.bar, keyboardHidesNavigationBar // eslint-disable-next-line react-native/no-inline-styles\n ? {\n // When the keyboard is shown, slide down the navigation bar\n transform: [{\n translateY: visibleAnim.interpolate({\n inputRange: [0, 1],\n outputRange: [layout.height, 0]\n })\n }],\n // Absolutely position the navigation bar so that the content is below it\n // This is needed to avoid gap at bottom when the navigation bar is hidden\n position: keyboardVisible ? 'absolute' : undefined\n } : null, style],\n pointerEvents: layout.measured ? keyboardHidesNavigationBar && keyboardVisible ? 'none' : 'auto' : 'none',\n onLayout: onLayout\n }), /*#__PURE__*/React.createElement(Animated.View, {\n style: [styles.barContent, {\n backgroundColor\n }],\n testID: `${testID}-content`\n }, /*#__PURE__*/React.createElement(View, {\n style: [styles.items, {\n marginBottom: insets.bottom,\n marginHorizontal: Math.max(insets.left, insets.right)\n }, compact && {\n maxWidth: maxTabBarWidth\n }],\n accessibilityRole: 'tablist',\n testID: `${testID}-content-wrapper`\n }, shifting && !isV3 ? /*#__PURE__*/React.createElement(Animated.View, {\n pointerEvents: \"none\",\n style: [styles.ripple, {\n // Since we have a single ripple, we have to reposition it so that it appears to expand from active tab.\n // We need to move it from the top to center of the navigation bar and from the left to the active tab.\n top: (BAR_HEIGHT - rippleSize) / 2,\n left: Math.min(layout.width, maxTabBarWidth) / routes.length * (navigationState.index + 0.5) - rippleSize / 2,\n height: rippleSize,\n width: rippleSize,\n borderRadius: rippleSize / 2,\n backgroundColor: getColor({\n route: routes[navigationState.index]\n }),\n transform: [{\n // Scale to twice the size to ensure it covers the whole navigation bar\n scale: rippleAnim.interpolate({\n inputRange: [0, 1],\n outputRange: [0, 8]\n })\n }],\n opacity: rippleAnim.interpolate({\n inputRange: [0, MIN_RIPPLE_SCALE, 0.3, 1],\n outputRange: [0, 0, 1, 1]\n })\n }],\n testID: `${testID}-content-ripple`\n }) : null, routes.map((route, index) => {\n const focused = navigationState.index === index;\n const active = tabsAnims[index];\n\n // Scale the label up\n const scale = labeled && shifting ? active.interpolate({\n inputRange: [0, 1],\n outputRange: [0.5, 1]\n }) : 1;\n\n // Move down the icon to account for no-label in shifting and smaller label in non-shifting.\n const translateY = labeled ? shifting ? active.interpolate({\n inputRange: [0, 1],\n outputRange: [7, 0]\n }) : 0 : 7;\n\n // We render the active icon and label on top of inactive ones and cross-fade them on change.\n // This trick gives the illusion that we are animating between active and inactive colors.\n // This is to ensure that we can use native driver, as colors cannot be animated with native driver.\n const activeOpacity = active;\n const inactiveOpacity = active.interpolate({\n inputRange: [0, 1],\n outputRange: [1, 0]\n });\n const v3ActiveOpacity = focused ? 1 : 0;\n const v3InactiveOpacity = shifting ? inactiveOpacity : focused ? 0 : 1;\n\n // Scale horizontally the outline pill\n const outlineScale = focused ? active.interpolate({\n inputRange: [0, 1],\n outputRange: [0.5, 1]\n }) : 0;\n const badge = getBadge({\n route\n });\n const activeLabelColor = getLabelColor({\n tintColor: activeTintColor,\n hasColor: Boolean(activeColor),\n focused,\n defaultColor: textColor,\n theme\n });\n const inactiveLabelColor = getLabelColor({\n tintColor: inactiveTintColor,\n hasColor: Boolean(inactiveColor),\n focused,\n defaultColor: textColor,\n theme\n });\n const badgeStyle = {\n top: !isV3 ? -2 : typeof badge === 'boolean' ? 4 : 2,\n right: (badge != null && typeof badge !== 'boolean' ? String(badge).length * -2 : 0) - (!isV3 ? 2 : 0)\n };\n const isV3Shifting = isV3 && shifting && labeled;\n const font = isV3 ? theme.fonts.labelMedium : {};\n return renderTouchable({\n key: route.key,\n route,\n borderless: true,\n centered: true,\n rippleColor: isV3 ? 'transparent' : touchColor,\n onPress: () => onTabPress(eventForIndex(index)),\n onLongPress: () => onTabLongPress === null || onTabLongPress === void 0 ? void 0 : onTabLongPress(eventForIndex(index)),\n testID: getTestID({\n route\n }),\n accessibilityLabel: getAccessibilityLabel({\n route\n }),\n accessibilityRole: Platform.OS === 'ios' ? 'button' : 'tab',\n accessibilityState: {\n selected: focused\n },\n style: [styles.item, isV3 && styles.v3Item],\n children: /*#__PURE__*/React.createElement(View, {\n pointerEvents: \"none\",\n style: isV3 && (labeled ? styles.v3TouchableContainer : styles.v3NoLabelContainer)\n }, /*#__PURE__*/React.createElement(Animated.View, {\n style: [styles.iconContainer, isV3 && styles.v3IconContainer, (!isV3 || isV3Shifting) && {\n transform: [{\n translateY\n }]\n }]\n }, isV3 && focused && /*#__PURE__*/React.createElement(Animated.View, {\n style: [styles.outline, {\n transform: [{\n scaleX: outlineScale\n }],\n backgroundColor: theme.colors.secondaryContainer\n }, activeIndicatorStyle]\n }), /*#__PURE__*/React.createElement(Animated.View, {\n style: [styles.iconWrapper, isV3 && styles.v3IconWrapper, {\n opacity: isV3 ? v3ActiveOpacity : activeOpacity\n }]\n }, renderIcon ? renderIcon({\n route,\n focused: true,\n color: activeTintColor\n }) : /*#__PURE__*/React.createElement(Icon, {\n source: route.focusedIcon,\n color: activeTintColor,\n size: 24\n })), /*#__PURE__*/React.createElement(Animated.View, {\n style: [styles.iconWrapper, isV3 && styles.v3IconWrapper, {\n opacity: isV3 ? v3InactiveOpacity : inactiveOpacity\n }]\n }, renderIcon ? renderIcon({\n route,\n focused: false,\n color: inactiveTintColor\n }) : /*#__PURE__*/React.createElement(Icon, {\n source: theme.isV3 && route.unfocusedIcon !== undefined ? route.unfocusedIcon : route.focusedIcon,\n color: inactiveTintColor,\n size: 24\n })), /*#__PURE__*/React.createElement(View, {\n style: [styles.badgeContainer, badgeStyle]\n }, typeof badge === 'boolean' ? /*#__PURE__*/React.createElement(Badge, {\n visible: badge,\n size: isV3 ? 6 : 8\n }) : /*#__PURE__*/React.createElement(Badge, {\n visible: badge != null,\n size: 16\n }, badge))), labeled ? /*#__PURE__*/React.createElement(Animated.View, {\n style: [styles.labelContainer, !isV3 && {\n transform: [{\n scale\n }]\n }]\n }, /*#__PURE__*/React.createElement(Animated.View, {\n style: [styles.labelWrapper, (!isV3 || isV3Shifting) && {\n opacity: activeOpacity\n }]\n }, renderLabel ? renderLabel({\n route,\n focused: true,\n color: activeLabelColor\n }) : /*#__PURE__*/React.createElement(Text, {\n maxFontSizeMultiplier: labelMaxFontSizeMultiplier,\n variant: \"labelMedium\",\n style: [styles.label, {\n color: activeLabelColor,\n ...font\n }]\n }, getLabelText({\n route\n }))), shifting ? null : /*#__PURE__*/React.createElement(Animated.View, {\n style: [styles.labelWrapper, {\n opacity: inactiveOpacity\n }]\n }, renderLabel ? renderLabel({\n route,\n focused: false,\n color: inactiveLabelColor\n }) : /*#__PURE__*/React.createElement(Text, {\n maxFontSizeMultiplier: labelMaxFontSizeMultiplier,\n variant: \"labelMedium\",\n selectable: false,\n style: [styles.label, {\n color: inactiveLabelColor,\n ...font\n }]\n }, getLabelText({\n route\n })))) : !isV3 && /*#__PURE__*/React.createElement(View, {\n style: styles.labelContainer\n }))\n });\n }))));\n};\nBottomNavigationBar.displayName = 'BottomNavigation.Bar';\nexport default BottomNavigationBar;\nconst styles = StyleSheet.create({\n bar: {\n left: 0,\n right: 0,\n bottom: 0\n },\n barContent: {\n alignItems: 'center',\n overflow: 'hidden'\n },\n items: {\n flexDirection: 'row',\n ...(Platform.OS === 'web' ? {\n width: '100%'\n } : null)\n },\n item: {\n flex: 1,\n // Top padding is 6 and bottom padding is 10\n // The extra 4dp bottom padding is offset by label's height\n paddingVertical: 6\n },\n v3Item: {\n paddingVertical: 0\n },\n ripple: {\n position: 'absolute'\n },\n iconContainer: {\n height: 24,\n width: 24,\n marginTop: 2,\n marginHorizontal: 12,\n alignSelf: 'center'\n },\n v3IconContainer: {\n height: 32,\n width: 32,\n marginBottom: 4,\n marginTop: 0,\n justifyContent: 'center'\n },\n iconWrapper: {\n ...StyleSheet.absoluteFillObject,\n alignItems: 'center'\n },\n v3IconWrapper: {\n top: 4\n },\n labelContainer: {\n height: 16,\n paddingBottom: 2\n },\n labelWrapper: {\n ...StyleSheet.absoluteFillObject\n },\n // eslint-disable-next-line react-native/no-color-literals\n label: {\n fontSize: 12,\n height: BAR_HEIGHT,\n textAlign: 'center',\n backgroundColor: 'transparent',\n ...(Platform.OS === 'web' ? {\n whiteSpace: 'nowrap',\n alignSelf: 'center'\n } : null)\n },\n badgeContainer: {\n position: 'absolute',\n left: 0\n },\n v3TouchableContainer: {\n paddingTop: 12,\n paddingBottom: 16\n },\n v3NoLabelContainer: {\n height: 80,\n justifyContent: 'center',\n alignItems: 'center'\n },\n outline: {\n width: OUTLINE_WIDTH,\n height: OUTLINE_WIDTH / 2,\n borderRadius: OUTLINE_WIDTH / 4,\n alignSelf: 'center'\n },\n elevation: {\n elevation: 4\n }\n});\n//# sourceMappingURL=BottomNavigationBar.js.map","import color from 'color';\nexport const getActiveTintColor = _ref => {\n let {\n activeColor,\n defaultColor,\n theme\n } = _ref;\n if (typeof activeColor === 'string') {\n return activeColor;\n }\n if (theme.isV3) {\n return theme.colors.onSecondaryContainer;\n }\n return defaultColor;\n};\nexport const getInactiveTintColor = _ref2 => {\n let {\n inactiveColor,\n defaultColor,\n theme\n } = _ref2;\n if (typeof inactiveColor === 'string') {\n return inactiveColor;\n }\n if (theme.isV3) {\n return theme.colors.onSurfaceVariant;\n }\n return color(defaultColor).alpha(0.5).rgb().string();\n};\nexport const getLabelColor = _ref3 => {\n let {\n tintColor,\n hasColor,\n focused,\n defaultColor,\n theme\n } = _ref3;\n if (hasColor) {\n return tintColor;\n }\n if (theme.isV3) {\n if (focused) {\n return theme.colors.onSurface;\n }\n return theme.colors.onSurfaceVariant;\n }\n return defaultColor;\n};\n//# sourceMappingURL=utils.js.map","import { Animated } from 'react-native';\nimport useLazyRef from './useLazyRef';\nexport default function useAnimatedValue(initialValue) {\n const {\n current\n } = useLazyRef(() => new Animated.Value(initialValue));\n return current;\n}\n//# sourceMappingURL=useAnimatedValue.js.map","import * as React from 'react';\nexport default function useLazyRef(callback) {\n const lazyRef = React.useRef();\n if (lazyRef.current === undefined) {\n lazyRef.current = callback();\n }\n return lazyRef;\n}\n//# sourceMappingURL=useLazyRef.js.map","import * as React from 'react';\nimport { Animated } from 'react-native';\nexport default function useAnimatedValueArray(initialValues) {\n const refs = React.useRef([]);\n refs.current.length = initialValues.length;\n initialValues.forEach((initialValue, i) => {\n refs.current[i] = refs.current[i] ?? new Animated.Value(initialValue);\n });\n return refs.current;\n}\n//# sourceMappingURL=useAnimatedValueArray.js.map","import * as React from 'react';\nimport { Keyboard, Platform } from 'react-native';\nexport default function useIsKeyboardShown(_ref) {\n let {\n onShow,\n onHide\n } = _ref;\n React.useEffect(() => {\n let willShowSubscription;\n let willHideSubscription;\n let didShowSubscription;\n let didHideSubscription;\n if (Platform.OS === 'ios') {\n willShowSubscription = Keyboard.addListener('keyboardWillShow', onShow);\n willHideSubscription = Keyboard.addListener('keyboardWillHide', onHide);\n } else {\n didShowSubscription = Keyboard.addListener('keyboardDidShow', onShow);\n didHideSubscription = Keyboard.addListener('keyboardDidHide', onHide);\n }\n return () => {\n if (Platform.OS === 'ios') {\n var _willShowSubscription, _willHideSubscription;\n if ((_willShowSubscription = willShowSubscription) !== null && _willShowSubscription !== void 0 && _willShowSubscription.remove) {\n willShowSubscription.remove();\n } else {\n // @ts-expect-error: We keep deprecated listener remove method for backwards compat with old RN versions\n Keyboard.removeListener('keyboardWillShow', onShow);\n }\n if ((_willHideSubscription = willHideSubscription) !== null && _willHideSubscription !== void 0 && _willHideSubscription.remove) {\n willHideSubscription.remove();\n } else {\n // @ts-expect-error: We keep deprecated listener remove method for backwards compat with old RN versions\n Keyboard.removeListener('keyboardWillHide', onHide);\n }\n } else {\n var _didShowSubscription, _didHideSubscription;\n if ((_didShowSubscription = didShowSubscription) !== null && _didShowSubscription !== void 0 && _didShowSubscription.remove) {\n didShowSubscription.remove();\n } else {\n // @ts-expect-error: We keep deprecated listener remove method for backwards compat with old RN versions\n Keyboard.removeListener('keyboardDidShow', onShow);\n }\n if ((_didHideSubscription = didHideSubscription) !== null && _didHideSubscription !== void 0 && _didHideSubscription.remove) {\n didHideSubscription.remove();\n } else {\n // @ts-expect-error: We keep deprecated listener remove method for backwards compat with old RN versions\n Keyboard.removeListener('keyboardDidHide', onHide);\n }\n }\n };\n }, [onHide, onShow]);\n}\n//# sourceMappingURL=useIsKeyboardShown.js.map","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport dismissKeyboard from '../../modules/dismissKeyboard';\nvar Keyboard = {\n addListener() {\n return {\n remove: () => {}\n };\n },\n dismiss() {\n dismissKeyboard();\n },\n removeAllListeners() {},\n removeListener() {}\n};\nexport default Keyboard;","import * as React from 'react';\nexport default function useLayout() {\n const [layout, setLayout] = React.useState({\n height: 0,\n width: 0,\n measured: false\n });\n const onLayout = React.useCallback(e => {\n const {\n height,\n width\n } = e.nativeEvent.layout;\n if (height === layout.height && width === layout.width) {\n return;\n }\n setLayout({\n height,\n width,\n measured: true\n });\n }, [layout.height, layout.width]);\n return [layout, onLayout];\n}\n//# sourceMappingURL=useLayout.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from 'react';\nimport { Animated, Platform, View } from 'react-native';\nclass BottomNavigationRouteScreen extends React.Component {\n render() {\n const {\n style,\n index,\n children,\n visibility,\n ...rest\n } = this.props;\n\n // On Web, the unfocused tab screens can still be clicked since they are transparent, but still there\n // Hiding them with `display: none` makes sure that they won't receive clicks\n // We only set it on Web since on native, react-native-pager-view's breaks due to layout changing\n const display = Platform.OS === 'web' ? visibility === 0 ? 'none' : 'flex' : undefined;\n return /*#__PURE__*/React.createElement(View, _extends({\n testID: `RouteScreen: ${index}`,\n style: [style, {\n display\n }]\n }, rest), children);\n }\n}\nexport default Animated.createAnimatedComponent(BottomNavigationRouteScreen);\n//# sourceMappingURL=BottomNavigationRouteScreen.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Animated, StyleSheet, Pressable, View } from 'react-native';\nimport useLatestCallback from 'use-latest-callback';\nimport CardActions from './CardActions';\nimport CardContent from './CardContent';\nimport CardCover from './CardCover';\nimport CardTitle from './CardTitle';\nimport { getCardColors } from './utils';\nimport { useInternalTheme } from '../../core/theming';\nimport hasTouchHandler from '../../utils/hasTouchHandler';\nimport { splitStyles } from '../../utils/splitStyles';\nimport Surface from '../Surface';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\n/**\n * A card is a sheet of material that serves as an entry point to more detailed information.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Avatar, Button, Card, Text } from 'react-native-paper';\n *\n * const LeftContent = props => \n *\n * const MyComponent = () => (\n * \n * \n * \n * Card title\n * Card content\n * \n * \n * \n * \n * \n * \n * \n * );\n *\n * export default MyComponent;\n * ```\n */\nconst Card = _ref => {\n let {\n elevation: cardElevation = 1,\n delayLongPress,\n onPress,\n onLongPress,\n onPressOut,\n onPressIn,\n mode: cardMode = 'elevated',\n children,\n style,\n contentStyle,\n theme: themeOverrides,\n testID = 'card',\n accessible,\n disabled,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const isMode = React.useCallback(modeToCompare => {\n return cardMode === modeToCompare;\n }, [cardMode]);\n const hasPassedTouchHandler = hasTouchHandler({\n onPress,\n onLongPress,\n onPressIn,\n onPressOut\n });\n\n // Default animated value\n const {\n current: elevation\n } = React.useRef(new Animated.Value(cardElevation));\n // Dark adaptive animated value, used in case of toggling the theme,\n // it prevents animating the background with native drivers inside Surface\n const {\n current: elevationDarkAdaptive\n } = React.useRef(new Animated.Value(cardElevation));\n const {\n animation,\n dark,\n mode,\n roundness,\n isV3\n } = theme;\n const prevDarkRef = React.useRef(dark);\n React.useEffect(() => {\n prevDarkRef.current = dark;\n });\n const prevDark = prevDarkRef.current;\n const isAdaptiveMode = mode === 'adaptive';\n const animationDuration = 150 * animation.scale;\n React.useEffect(() => {\n /**\n * Resets animations values if updating to dark adaptive mode,\n * otherwise, any card that is in the middle of animation while\n * toggling the theme will stay at that animated value until\n * the next press-in\n */\n if (dark && isAdaptiveMode && !prevDark) {\n elevation.setValue(cardElevation);\n elevationDarkAdaptive.setValue(cardElevation);\n }\n }, [prevDark, dark, isAdaptiveMode, cardElevation, elevation, elevationDarkAdaptive]);\n const runElevationAnimation = pressType => {\n const isPressTypeIn = pressType === 'in';\n if (dark && isAdaptiveMode) {\n Animated.timing(elevationDarkAdaptive, {\n toValue: isPressTypeIn ? isV3 ? 2 : 8 : cardElevation,\n duration: animationDuration,\n useNativeDriver: false\n }).start();\n } else {\n Animated.timing(elevation, {\n toValue: isPressTypeIn ? isV3 ? 2 : 8 : cardElevation,\n duration: animationDuration,\n useNativeDriver: false\n }).start();\n }\n };\n const handlePressIn = useLatestCallback(e => {\n onPressIn === null || onPressIn === void 0 ? void 0 : onPressIn(e);\n runElevationAnimation('in');\n });\n const handlePressOut = useLatestCallback(e => {\n onPressOut === null || onPressOut === void 0 ? void 0 : onPressOut(e);\n runElevationAnimation('out');\n });\n const total = React.Children.count(children);\n const siblings = React.Children.map(children, child => /*#__PURE__*/React.isValidElement(child) && child.type ? child.type.displayName : null);\n const computedElevation = dark && isAdaptiveMode ? elevationDarkAdaptive : elevation;\n const {\n backgroundColor,\n borderColor: themedBorderColor\n } = getCardColors({\n theme,\n mode: cardMode\n });\n const flattenedStyles = StyleSheet.flatten(style) || {};\n const {\n borderColor = themedBorderColor\n } = flattenedStyles;\n const [, borderRadiusStyles] = splitStyles(flattenedStyles, style => style.startsWith('border') && style.endsWith('Radius'));\n const borderRadiusCombinedStyles = {\n borderRadius: (isV3 ? 3 : 1) * roundness,\n ...borderRadiusStyles\n };\n const content = /*#__PURE__*/React.createElement(View, {\n style: [styles.innerContainer, contentStyle],\n testID: testID\n }, React.Children.map(children, (child, index) => /*#__PURE__*/React.isValidElement(child) ? /*#__PURE__*/React.cloneElement(child, {\n index,\n total,\n siblings,\n borderRadiusStyles\n }) : child));\n return /*#__PURE__*/React.createElement(Surface, _extends({\n style: [isV3 && !isMode('elevated') && {\n backgroundColor\n }, !isV3 && isMode('outlined') ? styles.resetElevation : {\n elevation: computedElevation\n }, borderRadiusCombinedStyles, style],\n theme: theme\n }, isV3 && {\n elevation: isMode('elevated') ? computedElevation : 0\n }, {\n testID: `${testID}-container`\n }, rest), isMode('outlined') && /*#__PURE__*/React.createElement(View, {\n pointerEvents: \"none\",\n testID: `${testID}-outline`,\n style: [{\n borderColor\n }, styles.outline, borderRadiusCombinedStyles]\n }), hasPassedTouchHandler ? /*#__PURE__*/React.createElement(Pressable, {\n accessible: accessible,\n unstable_pressDelay: 0,\n disabled: disabled,\n delayLongPress: delayLongPress,\n onLongPress: onLongPress,\n onPress: onPress,\n onPressIn: handlePressIn,\n onPressOut: handlePressOut\n }, content) : content);\n};\n\n// @component ./CardContent.tsx\nCard.Content = CardContent;\n// @component ./CardActions.tsx\nCard.Actions = CardActions;\n// @component ./CardCover.tsx\nCard.Cover = CardCover;\n// @component ./CardTitle.tsx\nCard.Title = CardTitle;\nconst styles = StyleSheet.create({\n innerContainer: {\n flexShrink: 1\n },\n outline: {\n borderWidth: 1,\n position: 'absolute',\n width: '100%',\n height: '100%',\n zIndex: 2\n },\n resetElevation: {\n elevation: 0\n }\n});\nexport default Card;\n//# sourceMappingURL=Card.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport { useInternalTheme } from '../../core/theming';\n/**\n * A component to show a list of actions inside a Card.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Card, Button } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * \n * \n * \n * \n * \n * );\n *\n * export default MyComponent;\n * ```\n */\nconst CardActions = props => {\n const {\n isV3\n } = useInternalTheme(props.theme);\n const justifyContent = isV3 ? 'flex-end' : 'flex-start';\n return /*#__PURE__*/React.createElement(View, _extends({}, props, {\n style: [styles.container, props.style, {\n justifyContent\n }]\n }), React.Children.map(props.children, (child, i) => {\n return /*#__PURE__*/React.isValidElement(child) ? /*#__PURE__*/React.cloneElement(child, {\n compact: !isV3 && child.props.compact !== false,\n mode: child.props.mode || isV3 && (i === 0 ? 'outlined' : 'contained'),\n style: [isV3 && styles.button, child.props.style]\n }) : child;\n }));\n};\nCardActions.displayName = 'Card.Actions';\nconst styles = StyleSheet.create({\n container: {\n flexDirection: 'row',\n alignItems: 'center',\n padding: 8\n },\n button: {\n marginLeft: 8\n }\n});\nexport default CardActions;\n//# sourceMappingURL=CardActions.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet, View } from 'react-native';\n/**\n * A component to show content inside a Card.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Card, Text } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * \n * Card title\n * Card content\n * \n * \n * );\n *\n * export default MyComponent;\n * ```\n */\nconst CardContent = _ref => {\n let {\n index,\n total,\n siblings,\n style,\n ...rest\n } = _ref;\n const cover = 'withInternalTheme(CardCover)';\n const title = 'withInternalTheme(CardTitle)';\n let contentStyle, prev, next;\n if (typeof index === 'number' && siblings) {\n prev = siblings[index - 1];\n next = siblings[index + 1];\n }\n if (prev === cover && next === cover || prev === title && next === title || total === 1) {\n contentStyle = styles.only;\n } else if (index === 0) {\n if (next === cover || next === title) {\n contentStyle = styles.only;\n } else {\n contentStyle = styles.first;\n }\n } else if (typeof total === 'number' && index === total - 1) {\n if (prev === cover || prev === title) {\n contentStyle = styles.only;\n } else {\n contentStyle = styles.last;\n }\n } else if (prev === cover || prev === title) {\n contentStyle = styles.first;\n } else if (next === cover || next === title) {\n contentStyle = styles.last;\n }\n return /*#__PURE__*/React.createElement(View, _extends({}, rest, {\n style: [styles.container, contentStyle, style]\n }));\n};\nCardContent.displayName = 'Card.Content';\nconst styles = StyleSheet.create({\n container: {\n paddingHorizontal: 16\n },\n first: {\n paddingTop: 16\n },\n last: {\n paddingBottom: 16\n },\n only: {\n paddingVertical: 16\n }\n});\nexport default CardContent;\n//# sourceMappingURL=CardContent.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Image, StyleSheet, View } from 'react-native';\nimport { getCardCoverStyle } from './utils';\nimport { useInternalTheme } from '../../core/theming';\nimport { grey200 } from '../../styles/themes/v2/colors';\nimport { splitStyles } from '../../utils/splitStyles';\n/**\n * A component to show a cover image inside a Card.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Card } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * \n * \n * );\n *\n * export default MyComponent;\n * ```\n *\n * @extends Image props https://reactnative.dev/docs/image#props\n */\nconst CardCover = _ref => {\n let {\n index,\n total,\n style,\n theme: themeOverrides,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const flattenedStyles = StyleSheet.flatten(style) || {};\n const [, borderRadiusStyles] = splitStyles(flattenedStyles, style => style.startsWith('border') && style.endsWith('Radius'));\n const coverStyle = getCardCoverStyle({\n theme,\n index,\n total,\n borderRadiusStyles\n });\n return /*#__PURE__*/React.createElement(View, {\n style: [styles.container, coverStyle, style]\n }, /*#__PURE__*/React.createElement(Image, _extends({}, rest, {\n style: [styles.image, coverStyle],\n accessibilityIgnoresInvertColors: true\n })));\n};\nCardCover.displayName = 'Card.Cover';\nconst styles = StyleSheet.create({\n container: {\n height: 195,\n backgroundColor: grey200,\n overflow: 'hidden'\n },\n image: {\n flex: 1,\n height: undefined,\n width: undefined,\n padding: 16,\n justifyContent: 'flex-end'\n }\n});\nexport default CardCover;\n\n// @component-docs ignore-next-line\nexport { CardCover };\n//# sourceMappingURL=CardCover.js.map","import color from 'color';\nimport { black, white } from '../../styles/themes/v2/colors';\nexport const getCardCoverStyle = _ref => {\n let {\n theme,\n index,\n total,\n borderRadiusStyles\n } = _ref;\n const {\n isV3,\n roundness\n } = theme;\n if (Object.keys(borderRadiusStyles).length > 0) {\n return {\n borderRadius: 3 * roundness,\n ...borderRadiusStyles\n };\n }\n if (isV3) {\n return {\n borderRadius: 3 * roundness\n };\n }\n if (index === 0) {\n if (total === 1) {\n return {\n borderRadius: roundness\n };\n }\n return {\n borderTopLeftRadius: roundness,\n borderTopRightRadius: roundness\n };\n }\n if (typeof total === 'number' && index === total - 1) {\n return {\n borderBottomLeftRadius: roundness\n };\n }\n return undefined;\n};\nconst getBorderColor = _ref2 => {\n let {\n theme\n } = _ref2;\n if (theme.isV3) {\n return theme.colors.outline;\n }\n if (theme.dark) {\n return color(white).alpha(0.12).rgb().string();\n }\n return color(black).alpha(0.12).rgb().string();\n};\nconst getBackgroundColor = _ref3 => {\n let {\n theme,\n isMode\n } = _ref3;\n if (theme.isV3) {\n if (isMode('contained')) {\n return theme.colors.surfaceVariant;\n }\n if (isMode('outlined')) {\n return theme.colors.surface;\n }\n }\n return undefined;\n};\nexport const getCardColors = _ref4 => {\n let {\n theme,\n mode\n } = _ref4;\n const isMode = modeToCompare => {\n return mode === modeToCompare;\n };\n return {\n backgroundColor: getBackgroundColor({\n theme,\n isMode\n }),\n borderColor: getBorderColor({\n theme\n })\n };\n};\n//# sourceMappingURL=utils.js.map","import * as React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport { useInternalTheme } from '../../core/theming';\nimport Text from '../Typography/Text';\nimport Caption from '../Typography/v2/Caption';\nimport Title from '../Typography/v2/Title';\nconst LEFT_SIZE = 40;\n\n/**\n * A component to show a title, subtitle and an avatar inside a Card.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Avatar, Card, IconButton } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * }\n * right={(props) => {}} />}\n * />\n * );\n *\n * export default MyComponent;\n * ```\n */\nconst CardTitle = _ref => {\n let {\n title,\n titleStyle,\n titleNumberOfLines = 1,\n titleVariant = 'bodyLarge',\n titleMaxFontSizeMultiplier,\n subtitle,\n subtitleStyle,\n subtitleNumberOfLines = 1,\n subtitleVariant = 'bodyMedium',\n subtitleMaxFontSizeMultiplier,\n left,\n leftStyle,\n right,\n rightStyle,\n style,\n theme: themeOverrides\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const TitleComponent = theme.isV3 ? Text : Title;\n const SubtitleComponent = theme.isV3 ? Text : Caption;\n const minHeight = subtitle || left || right ? 72 : 50;\n const marginBottom = subtitle ? 0 : 2;\n return /*#__PURE__*/React.createElement(View, {\n style: [styles.container, {\n minHeight\n }, style]\n }, left ? /*#__PURE__*/React.createElement(View, {\n style: [styles.left, leftStyle]\n }, left({\n size: LEFT_SIZE\n })) : null, /*#__PURE__*/React.createElement(View, {\n style: [styles.titles]\n }, title && /*#__PURE__*/React.createElement(TitleComponent, {\n style: [styles.title, {\n marginBottom\n }, titleStyle],\n numberOfLines: titleNumberOfLines,\n variant: titleVariant,\n maxFontSizeMultiplier: titleMaxFontSizeMultiplier\n }, title), subtitle && /*#__PURE__*/React.createElement(SubtitleComponent, {\n style: [styles.subtitle, subtitleStyle],\n numberOfLines: subtitleNumberOfLines,\n variant: subtitleVariant,\n maxFontSizeMultiplier: subtitleMaxFontSizeMultiplier\n }, subtitle)), /*#__PURE__*/React.createElement(View, {\n style: rightStyle\n }, right ? right({\n size: 24\n }) : null));\n};\nCardTitle.displayName = 'Card.Title';\nconst styles = StyleSheet.create({\n container: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingLeft: 16\n },\n left: {\n justifyContent: 'center',\n marginRight: 16,\n height: LEFT_SIZE,\n width: LEFT_SIZE\n },\n titles: {\n flex: 1,\n flexDirection: 'column',\n justifyContent: 'center'\n },\n title: {\n minHeight: 30,\n paddingRight: 16\n },\n subtitle: {\n minHeight: 20,\n marginVertical: 0,\n paddingRight: 16\n }\n});\nexport default CardTitle;\n\n// @component-docs ignore-next-line\nexport { CardTitle };\n//# sourceMappingURL=CardTitle.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet } from 'react-native';\nimport StyledText from './StyledText';\n// @component-group Typography\n/**\n * Typography component for showing a caption.\n *\n *
\n * \n *
\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Caption } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * Caption\n * );\n *\n * export default MyComponent;\n * ```\n */\nconst Caption = props => /*#__PURE__*/React.createElement(StyledText, _extends({}, props, {\n alpha: 0.54,\n family: \"regular\",\n style: [styles.text, props.style]\n}));\nexport default Caption;\nconst styles = StyleSheet.create({\n text: {\n fontSize: 12,\n lineHeight: 20,\n marginVertical: 2,\n letterSpacing: 0.4\n }\n});\n//# sourceMappingURL=Caption.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet } from 'react-native';\nimport StyledText from './StyledText';\n// @component-group Typography\n/**\n * Typography component for showing a title.\n *\n *
\n * \n *
\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Title } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * Title\n * );\n *\n * export default MyComponent;\n * ```\n */\nconst Title = props => /*#__PURE__*/React.createElement(StyledText, _extends({}, props, {\n alpha: 0.87,\n family: \"medium\",\n style: [styles.text, props.style]\n}));\nexport default Title;\nconst styles = StyleSheet.create({\n text: {\n fontSize: 20,\n lineHeight: 30,\n marginVertical: 2,\n letterSpacing: 0.15\n }\n});\n//# sourceMappingURL=Title.js.map","import CheckboxComponent from './Checkbox';\nimport CheckboxAndroid from './CheckboxAndroid';\nimport CheckboxIOS from './CheckboxIOS';\nimport CheckboxItem from './CheckboxItem';\nconst Checkbox = Object.assign(\n// @component ./Checkbox.tsx\nCheckboxComponent, {\n // @component ./CheckboxItem.tsx\n Item: CheckboxItem,\n // @component ./CheckboxAndroid.tsx\n Android: CheckboxAndroid,\n // @component ./CheckboxIOS.tsx\n IOS: CheckboxIOS\n});\nexport default Checkbox;\n//# sourceMappingURL=index.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Platform } from 'react-native';\nimport CheckboxAndroid from './CheckboxAndroid';\nimport CheckboxIOS from './CheckboxIOS';\nimport { useInternalTheme } from '../../core/theming';\n/**\n * Checkboxes allow the selection of multiple options from a set.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Checkbox } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [checked, setChecked] = React.useState(false);\n *\n * return (\n * {\n * setChecked(!checked);\n * }}\n * />\n * );\n * };\n *\n * export default MyComponent;\n * ```\n */\nconst Checkbox = _ref => {\n let {\n theme: themeOverrides,\n ...props\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n return Platform.OS === 'ios' ? /*#__PURE__*/React.createElement(CheckboxIOS, _extends({}, props, {\n theme: theme\n })) : /*#__PURE__*/React.createElement(CheckboxAndroid, _extends({}, props, {\n theme: theme\n }));\n};\nexport default Checkbox;\n\n// @component-docs ignore-next-line\nconst CheckboxWithTheme = Checkbox;\n// @component-docs ignore-next-line\nexport { CheckboxWithTheme as Checkbox };\n//# sourceMappingURL=Checkbox.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Animated, StyleSheet, View } from 'react-native';\nimport { getAndroidSelectionControlColor } from './utils';\nimport { useInternalTheme } from '../../core/theming';\nimport MaterialCommunityIcon from '../MaterialCommunityIcon';\nimport TouchableRipple from '../TouchableRipple/TouchableRipple';\n// From https://material.io/design/motion/speed.html#duration\nconst ANIMATION_DURATION = 100;\n\n/**\n * Checkboxes allow the selection of multiple options from a set.\n * This component follows platform guidelines for Android, but can be used\n * on any platform.\n *\n * @extends TouchableRipple props https://callstack.github.io/react-native-paper/docs/components/TouchableRipple\n */\nconst CheckboxAndroid = _ref => {\n let {\n status,\n theme: themeOverrides,\n disabled,\n onPress,\n testID,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const {\n current: scaleAnim\n } = React.useRef(new Animated.Value(1));\n const isFirstRendering = React.useRef(true);\n const {\n animation: {\n scale\n }\n } = theme;\n React.useEffect(() => {\n // Do not run animation on very first rendering\n if (isFirstRendering.current) {\n isFirstRendering.current = false;\n return;\n }\n const checked = status === 'checked';\n Animated.sequence([Animated.timing(scaleAnim, {\n toValue: 0.85,\n duration: checked ? ANIMATION_DURATION * scale : 0,\n useNativeDriver: false\n }), Animated.timing(scaleAnim, {\n toValue: 1,\n duration: checked ? ANIMATION_DURATION * scale : ANIMATION_DURATION * scale * 1.75,\n useNativeDriver: false\n })]).start();\n }, [status, scaleAnim, scale]);\n const checked = status === 'checked';\n const indeterminate = status === 'indeterminate';\n const {\n rippleColor,\n selectionControlColor\n } = getAndroidSelectionControlColor({\n theme,\n disabled,\n checked,\n customColor: rest.color,\n customUncheckedColor: rest.uncheckedColor\n });\n const borderWidth = scaleAnim.interpolate({\n inputRange: [0.8, 1],\n outputRange: [7, 0]\n });\n const icon = indeterminate ? 'minus-box' : checked ? 'checkbox-marked' : 'checkbox-blank-outline';\n return /*#__PURE__*/React.createElement(TouchableRipple, _extends({}, rest, {\n borderless: true,\n rippleColor: rippleColor,\n onPress: onPress,\n disabled: disabled,\n accessibilityRole: \"checkbox\",\n accessibilityState: {\n disabled,\n checked\n },\n accessibilityLiveRegion: \"polite\",\n style: styles.container,\n testID: testID,\n theme: theme\n }), /*#__PURE__*/React.createElement(Animated.View, {\n style: {\n transform: [{\n scale: scaleAnim\n }]\n }\n }, /*#__PURE__*/React.createElement(MaterialCommunityIcon, {\n allowFontScaling: false,\n name: icon,\n size: 24,\n color: selectionControlColor,\n direction: \"ltr\"\n }), /*#__PURE__*/React.createElement(View, {\n style: [StyleSheet.absoluteFill, styles.fillContainer]\n }, /*#__PURE__*/React.createElement(Animated.View, {\n style: [styles.fill, {\n borderColor: selectionControlColor\n }, {\n borderWidth\n }]\n }))));\n};\nCheckboxAndroid.displayName = 'Checkbox.Android';\nconst styles = StyleSheet.create({\n container: {\n borderRadius: 18,\n width: 36,\n height: 36,\n padding: 6\n },\n fillContainer: {\n alignItems: 'center',\n justifyContent: 'center'\n },\n fill: {\n height: 14,\n width: 14\n }\n});\nexport default CheckboxAndroid;\n\n// @component-docs ignore-next-line\nexport { CheckboxAndroid };\n//# sourceMappingURL=CheckboxAndroid.js.map","import color from 'color';\nconst getAndroidCheckedColor = _ref => {\n let {\n theme,\n customColor\n } = _ref;\n if (customColor) {\n return customColor;\n }\n if (theme.isV3) {\n return theme.colors.primary;\n }\n return theme.colors.accent;\n};\nconst getAndroidUncheckedColor = _ref2 => {\n let {\n theme,\n customUncheckedColor\n } = _ref2;\n if (customUncheckedColor) {\n return customUncheckedColor;\n }\n if (theme.isV3) {\n return theme.colors.onSurfaceVariant;\n }\n if (theme.dark) {\n return color(theme.colors.text).alpha(0.7).rgb().string();\n }\n return color(theme.colors.text).alpha(0.54).rgb().string();\n};\nconst getAndroidRippleColor = _ref3 => {\n let {\n theme,\n checkedColor,\n disabled\n } = _ref3;\n if (disabled) {\n if (theme.isV3) {\n return color(theme.colors.onSurface).alpha(0.16).rgb().string();\n }\n return color(theme.colors.text).alpha(0.16).rgb().string();\n }\n return color(checkedColor).fade(0.32).rgb().string();\n};\nconst getAndroidControlColor = _ref4 => {\n let {\n theme,\n checked,\n disabled,\n checkedColor,\n uncheckedColor\n } = _ref4;\n if (disabled) {\n if (theme.isV3) {\n return theme.colors.onSurfaceDisabled;\n }\n return theme.colors.disabled;\n }\n if (checked) {\n return checkedColor;\n }\n return uncheckedColor;\n};\nexport const getAndroidSelectionControlColor = _ref5 => {\n let {\n theme,\n disabled,\n checked,\n customColor,\n customUncheckedColor\n } = _ref5;\n const checkedColor = getAndroidCheckedColor({\n theme,\n customColor\n });\n const uncheckedColor = getAndroidUncheckedColor({\n theme,\n customUncheckedColor\n });\n return {\n rippleColor: getAndroidRippleColor({\n theme,\n checkedColor,\n disabled\n }),\n selectionControlColor: getAndroidControlColor({\n theme,\n disabled,\n checked,\n checkedColor,\n uncheckedColor\n })\n };\n};\nconst getIOSCheckedColor = _ref6 => {\n let {\n theme,\n disabled,\n customColor\n } = _ref6;\n if (disabled) {\n if (theme.isV3) {\n return theme.colors.onSurfaceDisabled;\n }\n return theme.colors.disabled;\n }\n if (customColor) {\n return customColor;\n }\n if (theme.isV3) {\n return theme.colors.primary;\n }\n return theme.colors.accent;\n};\nconst getIOSRippleColor = _ref7 => {\n let {\n theme,\n checkedColor,\n disabled\n } = _ref7;\n if (disabled) {\n if (theme.isV3) {\n return color(theme.colors.onSurface).alpha(0.16).rgb().string();\n }\n return color(theme.colors.text).alpha(0.16).rgb().string();\n }\n return color(checkedColor).fade(0.32).rgb().string();\n};\nexport const getSelectionControlIOSColor = _ref8 => {\n let {\n theme,\n disabled,\n customColor\n } = _ref8;\n const checkedColor = getIOSCheckedColor({\n theme,\n disabled,\n customColor\n });\n return {\n checkedColor,\n rippleColor: getIOSRippleColor({\n theme,\n checkedColor,\n disabled\n })\n };\n};\n//# sourceMappingURL=utils.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport { getSelectionControlIOSColor } from './utils';\nimport { useInternalTheme } from '../../core/theming';\nimport MaterialCommunityIcon from '../MaterialCommunityIcon';\nimport TouchableRipple from '../TouchableRipple/TouchableRipple';\n/**\n * Checkboxes allow the selection of multiple options from a set.\n * This component follows platform guidelines for iOS, but can be used\n * on any platform.\n *\n * @extends TouchableRipple props https://callstack.github.io/react-native-paper/docs/components/TouchableRipple\n */\nconst CheckboxIOS = _ref => {\n let {\n status,\n disabled,\n onPress,\n theme: themeOverrides,\n testID,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const checked = status === 'checked';\n const indeterminate = status === 'indeterminate';\n const {\n checkedColor,\n rippleColor\n } = getSelectionControlIOSColor({\n theme,\n disabled,\n customColor: rest.color\n });\n const icon = indeterminate ? 'minus' : 'check';\n const opacity = indeterminate || checked ? 1 : 0;\n return /*#__PURE__*/React.createElement(TouchableRipple, _extends({}, rest, {\n borderless: true,\n rippleColor: rippleColor,\n onPress: onPress,\n disabled: disabled,\n accessibilityRole: \"checkbox\",\n accessibilityState: {\n disabled,\n checked\n },\n accessibilityLiveRegion: \"polite\",\n style: styles.container,\n testID: testID,\n theme: theme\n }), /*#__PURE__*/React.createElement(View, {\n style: {\n opacity\n }\n }, /*#__PURE__*/React.createElement(MaterialCommunityIcon, {\n allowFontScaling: false,\n name: icon,\n size: 24,\n color: checkedColor,\n direction: \"ltr\"\n })));\n};\nCheckboxIOS.displayName = 'Checkbox.IOS';\nconst styles = StyleSheet.create({\n container: {\n borderRadius: 18,\n padding: 6\n }\n});\nexport default CheckboxIOS;\n\n// @component-docs ignore-next-line\nexport { CheckboxIOS };\n//# sourceMappingURL=CheckboxIOS.js.map","import * as React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport Checkbox from './Checkbox';\nimport CheckboxAndroid from './CheckboxAndroid';\nimport CheckboxIOS from './CheckboxIOS';\nimport { useInternalTheme } from '../../core/theming';\nimport TouchableRipple from '../TouchableRipple/TouchableRipple';\nimport Text from '../Typography/Text';\n/**\n * Checkbox.Item allows you to press the whole row (item) instead of only the Checkbox.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { View } from 'react-native';\n * import { Checkbox } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * \n * \n * );\n *\n * export default MyComponent;\n *```\n */\n\nconst CheckboxItem = _ref => {\n let {\n style,\n status,\n label,\n onPress,\n onLongPress,\n labelStyle,\n theme: themeOverrides,\n testID,\n mode,\n position = 'trailing',\n accessibilityLabel = label,\n disabled,\n labelVariant = 'bodyLarge',\n labelMaxFontSizeMultiplier = 1.5,\n rippleColor,\n background,\n ...props\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const checkboxProps = {\n ...props,\n status,\n theme,\n disabled\n };\n const isLeading = position === 'leading';\n let checkbox;\n if (mode === 'android') {\n checkbox = /*#__PURE__*/React.createElement(CheckboxAndroid, checkboxProps);\n } else if (mode === 'ios') {\n checkbox = /*#__PURE__*/React.createElement(CheckboxIOS, checkboxProps);\n } else {\n checkbox = /*#__PURE__*/React.createElement(Checkbox, checkboxProps);\n }\n const textColor = theme.isV3 ? theme.colors.onSurface : theme.colors.text;\n const disabledTextColor = theme.isV3 ? theme.colors.onSurfaceDisabled : theme.colors.disabled;\n const textAlign = isLeading ? 'right' : 'left';\n const computedStyle = {\n color: disabled ? disabledTextColor : textColor,\n textAlign\n };\n return /*#__PURE__*/React.createElement(TouchableRipple, {\n accessibilityLabel: accessibilityLabel,\n accessibilityRole: \"checkbox\",\n accessibilityState: {\n checked: status === 'checked',\n disabled\n },\n onPress: onPress,\n onLongPress: onLongPress,\n testID: testID,\n disabled: disabled,\n rippleColor: rippleColor,\n theme: theme,\n background: background\n }, /*#__PURE__*/React.createElement(View, {\n style: [styles.container, style],\n pointerEvents: \"none\",\n importantForAccessibility: \"no-hide-descendants\"\n }, isLeading && checkbox, /*#__PURE__*/React.createElement(Text, {\n variant: labelVariant,\n testID: `${testID}-text`,\n maxFontSizeMultiplier: labelMaxFontSizeMultiplier,\n style: [styles.label, !theme.isV3 && styles.font, computedStyle, labelStyle]\n }, label), !isLeading && checkbox));\n};\nCheckboxItem.displayName = 'Checkbox.Item';\nexport default CheckboxItem;\n\n// @component-docs ignore-next-line\nexport { CheckboxItem };\nconst styles = StyleSheet.create({\n container: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingVertical: 8,\n paddingHorizontal: 16\n },\n label: {\n flexShrink: 1,\n flexGrow: 1\n },\n font: {\n fontSize: 16\n }\n});\n//# sourceMappingURL=CheckboxItem.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Animated, Platform, StyleSheet, Pressable, View } from 'react-native';\nimport useLatestCallback from 'use-latest-callback';\nimport { getChipColors } from './helpers';\nimport { useInternalTheme } from '../../core/theming';\nimport { white } from '../../styles/themes/v2/colors';\nimport hasTouchHandler from '../../utils/hasTouchHandler';\nimport Icon from '../Icon';\nimport MaterialCommunityIcon from '../MaterialCommunityIcon';\nimport Surface from '../Surface';\nimport TouchableRipple from '../TouchableRipple/TouchableRipple';\nimport Text from '../Typography/Text';\n/**\n * Chips are compact elements that can represent inputs, attributes, or actions.\n * They can have an icon or avatar on the left, and a close button icon on the right.\n * They are typically used to:\n *
    \n *
  • Present multiple options
  • \n *
  • Represent attributes active or chosen
  • \n *
  • Present filter options
  • \n *
  • Trigger actions related to primary content
  • \n *
\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Chip } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * console.log('Pressed')}>Example Chip\n * );\n *\n * export default MyComponent;\n * ```\n */\nconst Chip = _ref => {\n let {\n mode = 'flat',\n children,\n icon,\n avatar,\n selected = false,\n disabled = false,\n background,\n accessibilityLabel,\n closeIconAccessibilityLabel = 'Close',\n onPress,\n onLongPress,\n onPressOut,\n onPressIn,\n delayLongPress,\n onClose,\n closeIcon,\n textStyle,\n style,\n theme: themeOverrides,\n testID = 'chip',\n selectedColor,\n rippleColor: customRippleColor,\n showSelectedOverlay = false,\n showSelectedCheck = true,\n ellipsizeMode,\n compact,\n elevated = false,\n maxFontSizeMultiplier,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const {\n isV3,\n roundness\n } = theme;\n const {\n current: elevation\n } = React.useRef(new Animated.Value(isV3 && elevated ? 1 : 0));\n const hasPassedTouchHandler = hasTouchHandler({\n onPress,\n onLongPress,\n onPressIn,\n onPressOut\n });\n const isOutlined = mode === 'outlined';\n const handlePressIn = useLatestCallback(e => {\n const {\n scale\n } = theme.animation;\n onPressIn === null || onPressIn === void 0 ? void 0 : onPressIn(e);\n Animated.timing(elevation, {\n toValue: isV3 ? elevated ? 2 : 0 : 4,\n duration: 200 * scale,\n useNativeDriver: Platform.OS === 'web' || Platform.constants.reactNativeVersion.minor <= 72\n }).start();\n });\n const handlePressOut = useLatestCallback(e => {\n const {\n scale\n } = theme.animation;\n onPressOut === null || onPressOut === void 0 ? void 0 : onPressOut(e);\n Animated.timing(elevation, {\n toValue: isV3 && elevated ? 1 : 0,\n duration: 150 * scale,\n useNativeDriver: Platform.OS === 'web' || Platform.constants.reactNativeVersion.minor <= 72\n }).start();\n });\n const opacity = isV3 ? 0.38 : 0.26;\n const defaultBorderRadius = roundness * (isV3 ? 2 : 4);\n const iconSize = isV3 ? 18 : 16;\n const {\n backgroundColor: customBackgroundColor,\n borderRadius = defaultBorderRadius\n } = StyleSheet.flatten(style) || {};\n const {\n borderColor,\n textColor,\n iconColor,\n rippleColor,\n selectedBackgroundColor,\n backgroundColor\n } = getChipColors({\n isOutlined,\n theme,\n selectedColor,\n showSelectedOverlay,\n customBackgroundColor,\n disabled,\n customRippleColor\n });\n const accessibilityState = {\n selected,\n disabled\n };\n const elevationStyle = isV3 || Platform.OS === 'android' ? elevation : 0;\n const multiplier = isV3 ? compact ? 1.5 : 2 : 1;\n const labelSpacings = {\n marginRight: onClose ? 0 : 8 * multiplier,\n marginLeft: avatar || icon || selected && showSelectedCheck ? 4 * multiplier : 8 * multiplier\n };\n const contentSpacings = {\n paddingRight: isV3 ? onClose ? 34 : 0 : onClose ? 32 : 4\n };\n const labelTextStyle = {\n color: textColor,\n ...(isV3 ? theme.fonts.labelLarge : theme.fonts.regular)\n };\n return /*#__PURE__*/React.createElement(Surface, _extends({\n style: [styles.container, isV3 && (isOutlined ? styles.md3OutlineContainer : styles.md3FlatContainer), !theme.isV3 && {\n elevation: elevationStyle\n }, {\n backgroundColor: selected ? selectedBackgroundColor : backgroundColor,\n borderColor,\n borderRadius\n }, style]\n }, theme.isV3 && {\n elevation: elevationStyle\n }, rest, {\n testID: `${testID}-container`,\n theme: theme\n }), /*#__PURE__*/React.createElement(TouchableRipple, {\n borderless: true,\n background: background,\n style: [{\n borderRadius\n }, styles.touchable],\n onPress: onPress,\n onLongPress: onLongPress,\n onPressIn: hasPassedTouchHandler ? handlePressIn : undefined,\n onPressOut: hasPassedTouchHandler ? handlePressOut : undefined,\n delayLongPress: delayLongPress,\n rippleColor: rippleColor,\n disabled: disabled,\n accessibilityLabel: accessibilityLabel,\n accessibilityRole: \"button\",\n accessibilityState: accessibilityState,\n testID: testID,\n theme: theme\n }, /*#__PURE__*/React.createElement(View, {\n style: [styles.content, isV3 && styles.md3Content, contentSpacings]\n }, avatar && !icon ? /*#__PURE__*/React.createElement(View, {\n style: [styles.avatarWrapper, isV3 && styles.md3AvatarWrapper, disabled && {\n opacity\n }]\n }, /*#__PURE__*/React.isValidElement(avatar) ? /*#__PURE__*/React.cloneElement(avatar, {\n style: [styles.avatar, avatar.props.style]\n }) : avatar) : null, icon || selected && showSelectedCheck ? /*#__PURE__*/React.createElement(View, {\n style: [styles.icon, isV3 && styles.md3Icon, avatar ? [styles.avatar, styles.avatarSelected, isV3 && selected && styles.md3SelectedIcon] : null]\n }, icon ? /*#__PURE__*/React.createElement(Icon, {\n source: icon,\n color: avatar ? white : !disabled && theme.isV3 ? theme.colors.primary : iconColor,\n size: 18,\n theme: theme\n }) : /*#__PURE__*/React.createElement(MaterialCommunityIcon, {\n name: \"check\",\n color: avatar ? white : iconColor,\n size: 18,\n direction: \"ltr\"\n })) : null, /*#__PURE__*/React.createElement(Text, {\n variant: \"labelLarge\",\n selectable: false,\n numberOfLines: 1,\n style: [isV3 ? styles.md3LabelText : styles.labelText, labelTextStyle, labelSpacings, textStyle],\n ellipsizeMode: ellipsizeMode,\n maxFontSizeMultiplier: maxFontSizeMultiplier\n }, children))), onClose ? /*#__PURE__*/React.createElement(View, {\n style: styles.closeButtonStyle\n }, /*#__PURE__*/React.createElement(Pressable, {\n onPress: onClose,\n disabled: disabled,\n accessibilityRole: \"button\",\n accessibilityLabel: closeIconAccessibilityLabel\n }, /*#__PURE__*/React.createElement(View, {\n style: [styles.icon, styles.closeIcon, isV3 && styles.md3CloseIcon]\n }, closeIcon ? /*#__PURE__*/React.createElement(Icon, {\n source: closeIcon,\n color: iconColor,\n size: iconSize\n }) : /*#__PURE__*/React.createElement(MaterialCommunityIcon, {\n name: isV3 ? 'close' : 'close-circle',\n size: iconSize,\n color: iconColor,\n direction: \"ltr\"\n })))) : null);\n};\nconst styles = StyleSheet.create({\n container: {\n borderWidth: StyleSheet.hairlineWidth,\n borderStyle: 'solid',\n flexDirection: Platform.select({\n default: 'column',\n web: 'row'\n })\n },\n md3OutlineContainer: {\n borderWidth: 1\n },\n md3FlatContainer: {\n borderWidth: 0\n },\n content: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingLeft: 4,\n position: 'relative'\n },\n md3Content: {\n paddingLeft: 0\n },\n icon: {\n padding: 4,\n alignSelf: 'center'\n },\n md3Icon: {\n paddingLeft: 8,\n paddingRight: 0\n },\n closeIcon: {\n marginRight: 4\n },\n md3CloseIcon: {\n marginRight: 8,\n padding: 0\n },\n labelText: {\n minHeight: 24,\n lineHeight: 24,\n textAlignVertical: 'center',\n marginVertical: 4\n },\n md3LabelText: {\n textAlignVertical: 'center',\n marginVertical: 6\n },\n avatar: {\n width: 24,\n height: 24,\n borderRadius: 12\n },\n avatarWrapper: {\n marginRight: 4\n },\n md3AvatarWrapper: {\n marginLeft: 4,\n marginRight: 0\n },\n md3SelectedIcon: {\n paddingLeft: 4\n },\n // eslint-disable-next-line react-native/no-color-literals\n avatarSelected: {\n position: 'absolute',\n top: 4,\n left: 4,\n backgroundColor: 'rgba(0, 0, 0, .29)'\n },\n closeButtonStyle: {\n position: 'absolute',\n right: 0,\n height: '100%',\n justifyContent: 'center',\n alignItems: 'center'\n },\n touchable: {\n width: '100%'\n }\n});\nexport default Chip;\n//# sourceMappingURL=Chip.js.map","import color from 'color';\nimport { black, white } from '../../styles/themes/v2/colors';\nconst getBorderColor = _ref => {\n let {\n theme,\n isOutlined,\n disabled,\n selectedColor,\n backgroundColor\n } = _ref;\n const isSelectedColor = selectedColor !== undefined;\n if (theme.isV3) {\n if (disabled) {\n return color(theme.colors.onSurfaceVariant).alpha(0.12).rgb().string();\n }\n if (isSelectedColor) {\n return color(selectedColor).alpha(0.29).rgb().string();\n }\n return theme.colors.outline;\n }\n if (isOutlined) {\n if (isSelectedColor) {\n return color(selectedColor).alpha(0.29).rgb().string();\n }\n if (theme.dark) {\n return color(white).alpha(0.29).rgb().string();\n }\n return color(black).alpha(0.29).rgb().string();\n }\n return backgroundColor;\n};\nconst getTextColor = _ref2 => {\n let {\n theme,\n isOutlined,\n disabled,\n selectedColor\n } = _ref2;\n const isSelectedColor = selectedColor !== undefined;\n if (theme.isV3) {\n if (disabled) {\n return theme.colors.onSurfaceDisabled;\n }\n if (isSelectedColor) {\n return selectedColor;\n }\n if (isOutlined) {\n return theme.colors.onSurfaceVariant;\n }\n return theme.colors.onSecondaryContainer;\n }\n if (disabled) {\n return theme.colors.disabled;\n }\n if (isSelectedColor) {\n return color(selectedColor).alpha(0.87).rgb().string();\n }\n return color(theme.colors.text).alpha(0.87).rgb().string();\n};\nconst getDefaultBackgroundColor = _ref3 => {\n let {\n theme,\n isOutlined\n } = _ref3;\n if (theme.isV3) {\n if (isOutlined) {\n return theme.colors.surface;\n }\n return theme.colors.secondaryContainer;\n }\n if (isOutlined) {\n var _theme$colors;\n return (_theme$colors = theme.colors) === null || _theme$colors === void 0 ? void 0 : _theme$colors.surface;\n }\n if (theme.dark) {\n return '#383838';\n }\n return '#ebebeb';\n};\nconst getBackgroundColor = _ref4 => {\n let {\n theme,\n isOutlined,\n disabled,\n customBackgroundColor\n } = _ref4;\n if (typeof customBackgroundColor === 'string') {\n return customBackgroundColor;\n }\n if (theme.isV3) {\n if (disabled) {\n if (isOutlined) {\n return 'transparent';\n }\n return color(theme.colors.onSurfaceVariant).alpha(0.12).rgb().string();\n }\n }\n return getDefaultBackgroundColor({\n theme,\n isOutlined\n });\n};\nconst getSelectedBackgroundColor = _ref5 => {\n let {\n theme,\n isOutlined,\n disabled,\n customBackgroundColor,\n showSelectedOverlay\n } = _ref5;\n const backgroundColor = getBackgroundColor({\n theme,\n disabled,\n isOutlined,\n customBackgroundColor\n });\n if (theme.isV3) {\n if (isOutlined) {\n if (showSelectedOverlay) {\n return color(backgroundColor).mix(color(theme.colors.onSurfaceVariant), 0.12).rgb().string();\n }\n return color(backgroundColor).mix(color(theme.colors.onSurfaceVariant), 0).rgb().string();\n }\n if (showSelectedOverlay) {\n return color(backgroundColor).mix(color(theme.colors.onSecondaryContainer), 0.12).rgb().string();\n }\n return color(backgroundColor).mix(color(theme.colors.onSecondaryContainer), 0).rgb().string();\n }\n if (theme.dark) {\n if (isOutlined) {\n return color(backgroundColor).lighten(0.2).rgb().string();\n }\n return color(backgroundColor).lighten(0.4).rgb().string();\n }\n if (isOutlined) {\n return color(backgroundColor).darken(0.08).rgb().string();\n }\n return color(backgroundColor).darken(0.2).rgb().string();\n};\nconst getIconColor = _ref6 => {\n let {\n theme,\n isOutlined,\n disabled,\n selectedColor\n } = _ref6;\n const isSelectedColor = selectedColor !== undefined;\n if (theme.isV3) {\n if (disabled) {\n return theme.colors.onSurfaceDisabled;\n }\n if (isSelectedColor) {\n return selectedColor;\n }\n if (isOutlined) {\n return theme.colors.onSurfaceVariant;\n }\n return theme.colors.onSecondaryContainer;\n }\n if (disabled) {\n return theme.colors.disabled;\n }\n if (isSelectedColor) {\n return color(selectedColor).alpha(0.54).rgb().string();\n }\n return color(theme.colors.text).alpha(0.54).rgb().string();\n};\nconst getRippleColor = _ref7 => {\n let {\n theme,\n isOutlined,\n disabled,\n selectedColor,\n selectedBackgroundColor,\n customRippleColor\n } = _ref7;\n if (customRippleColor) {\n return customRippleColor;\n }\n const isSelectedColor = selectedColor !== undefined;\n const textColor = getTextColor({\n theme,\n disabled,\n selectedColor,\n isOutlined\n });\n if (theme.isV3) {\n if (isSelectedColor) {\n return color(selectedColor).alpha(0.12).rgb().string();\n }\n return color(textColor).alpha(0.12).rgb().string();\n }\n if (isSelectedColor) {\n return color(selectedColor).fade(0.5).rgb().string();\n }\n return selectedBackgroundColor;\n};\nexport const getChipColors = _ref8 => {\n let {\n isOutlined,\n theme,\n selectedColor,\n showSelectedOverlay,\n customBackgroundColor,\n disabled,\n customRippleColor\n } = _ref8;\n const baseChipColorProps = {\n theme,\n isOutlined,\n disabled\n };\n const backgroundColor = getBackgroundColor({\n ...baseChipColorProps,\n customBackgroundColor\n });\n const selectedBackgroundColor = getSelectedBackgroundColor({\n ...baseChipColorProps,\n customBackgroundColor,\n showSelectedOverlay\n });\n return {\n borderColor: getBorderColor({\n ...baseChipColorProps,\n selectedColor,\n backgroundColor\n }),\n textColor: getTextColor({\n ...baseChipColorProps,\n selectedColor\n }),\n iconColor: getIconColor({\n ...baseChipColorProps,\n selectedColor\n }),\n rippleColor: getRippleColor({\n ...baseChipColorProps,\n selectedColor,\n selectedBackgroundColor,\n customRippleColor\n }),\n backgroundColor,\n selectedBackgroundColor\n };\n};\n//# sourceMappingURL=helpers.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport DataTableCell from './DataTableCell';\nimport DataTableHeader\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfrom './DataTableHeader';\nimport DataTablePagination\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfrom './DataTablePagination';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport DataTableRow from './DataTableRow';\nimport DataTableTitle\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfrom './DataTableTitle';\n/**\n * Data tables allow displaying sets of data.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { DataTable } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [page, setPage] = React.useState(0);\n * const [numberOfItemsPerPageList] = React.useState([2, 3, 4]);\n * const [itemsPerPage, onItemsPerPageChange] = React.useState(\n * numberOfItemsPerPageList[0]\n * );\n *\n * const [items] = React.useState([\n * {\n * key: 1,\n * name: 'Cupcake',\n * calories: 356,\n * fat: 16,\n * },\n * {\n * key: 2,\n * name: 'Eclair',\n * calories: 262,\n * fat: 16,\n * },\n * {\n * key: 3,\n * name: 'Frozen yogurt',\n * calories: 159,\n * fat: 6,\n * },\n * {\n * key: 4,\n * name: 'Gingerbread',\n * calories: 305,\n * fat: 3.7,\n * },\n * ]);\n *\n * const from = page * itemsPerPage;\n * const to = Math.min((page + 1) * itemsPerPage, items.length);\n *\n * React.useEffect(() => {\n * setPage(0);\n * }, [itemsPerPage]);\n *\n * return (\n * \n * \n * Dessert\n * Calories\n * Fat\n * \n *\n * {items.slice(from, to).map((item) => (\n * \n * {item.name}\n * {item.calories}\n * {item.fat}\n * \n * ))}\n *\n * setPage(page)}\n * label={`${from + 1}-${to} of ${items.length}`}\n * numberOfItemsPerPageList={numberOfItemsPerPageList}\n * numberOfItemsPerPage={itemsPerPage}\n * onItemsPerPageChange={onItemsPerPageChange}\n * showFastPaginationControls\n * selectPageDropdownLabel={'Rows per page'}\n * />\n * \n * );\n * };\n *\n * export default MyComponent;\n * ```\n */\nconst DataTable = _ref => {\n let {\n children,\n style,\n ...rest\n } = _ref;\n return /*#__PURE__*/React.createElement(View, _extends({}, rest, {\n style: [styles.container, style]\n }), children);\n};\n\n// @component ./DataTableHeader.tsx\nDataTable.Header = DataTableHeader;\n\n// @component ./DataTableTitle.tsx\nDataTable.Title = DataTableTitle;\n\n// @component ./DataTableRow.tsx\nDataTable.Row = DataTableRow;\n\n// @component ./DataTableCell.tsx\nDataTable.Cell = DataTableCell;\n\n// @component ./DataTablePagination.tsx\nDataTable.Pagination = DataTablePagination;\nconst styles = StyleSheet.create({\n container: {\n width: '100%'\n }\n});\nexport default DataTable;\n//# sourceMappingURL=DataTable.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet } from 'react-native';\nimport TouchableRipple from '../TouchableRipple/TouchableRipple';\nimport Text from '../Typography/Text';\n/**\n * A component to show a single cell inside of a table.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { DataTable } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * 1\n * 2\n * 3\n * 4\n * \n * );\n *\n * export default MyComponent;\n * ```\n *\n * If you want to support multiline text, please use View instead, as multiline text doesn't comply with\n * MD Guidelines (https://github.com/callstack/react-native-paper/issues/2381).\n *\n * @extends TouchableRipple props https://callstack.github.io/react-native-paper/docs/components/TouchableRipple\n */\nconst DataTableCell = _ref => {\n let {\n children,\n textStyle,\n style,\n numeric,\n maxFontSizeMultiplier,\n testID,\n ...rest\n } = _ref;\n return /*#__PURE__*/React.createElement(TouchableRipple, _extends({}, rest, {\n testID: testID,\n style: [styles.container, numeric && styles.right, style]\n }), /*#__PURE__*/React.createElement(CellContent, {\n textStyle: textStyle,\n testID: testID,\n maxFontSizeMultiplier: maxFontSizeMultiplier\n }, children));\n};\nconst CellContent = _ref2 => {\n let {\n children,\n textStyle,\n maxFontSizeMultiplier,\n testID\n } = _ref2;\n if ( /*#__PURE__*/React.isValidElement(children)) {\n return children;\n }\n return /*#__PURE__*/React.createElement(Text, {\n style: textStyle,\n numberOfLines: 1,\n maxFontSizeMultiplier: maxFontSizeMultiplier,\n testID: `${testID}-text-container`\n }, children);\n};\nDataTableCell.displayName = 'DataTable.Cell';\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n flexDirection: 'row',\n alignItems: 'center'\n },\n right: {\n justifyContent: 'flex-end'\n }\n});\nexport default DataTableCell;\n//# sourceMappingURL=DataTableCell.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport color from 'color';\nimport { useInternalTheme } from '../../core/theming';\nimport { black, white } from '../../styles/themes/v2/colors';\n/**\n * A component to display title in table header.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { DataTable } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * \n * \n * Dessert\n * \n * Calories\n * Fat (g)\n * \n * \n * );\n *\n * export default MyComponent;\n * ```\n */\n\nconst DataTableHeader = _ref => {\n let {\n children,\n style,\n theme: themeOverrides,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const borderBottomColor = theme.isV3 ? theme.colors.surfaceVariant : color(theme.dark ? white : black).alpha(0.12).rgb().string();\n return /*#__PURE__*/React.createElement(View, _extends({}, rest, {\n style: [styles.header, {\n borderBottomColor\n }, style]\n }), children);\n};\nDataTableHeader.displayName = 'DataTable.Header';\nconst styles = StyleSheet.create({\n header: {\n flexDirection: 'row',\n paddingHorizontal: 16,\n borderBottomWidth: StyleSheet.hairlineWidth * 2\n }\n});\nexport default DataTableHeader;\n\n// @component-docs ignore-next-line\nexport { DataTableHeader };\n//# sourceMappingURL=DataTableHeader.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { I18nManager, StyleSheet, View } from 'react-native';\nimport color from 'color';\nimport { useInternalTheme } from '../../core/theming';\nimport Button from '../Button/Button';\nimport IconButton from '../IconButton/IconButton';\nimport MaterialCommunityIcon from '../MaterialCommunityIcon';\nimport Menu from '../Menu/Menu';\nimport Text from '../Typography/Text';\nconst PaginationControls = _ref => {\n let {\n page,\n numberOfPages,\n onPageChange,\n showFastPaginationControls,\n theme: themeOverrides,\n paginationControlRippleColor\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const textColor = theme.isV3 ? theme.colors.onSurface : theme.colors.text;\n return /*#__PURE__*/React.createElement(React.Fragment, null, showFastPaginationControls ? /*#__PURE__*/React.createElement(IconButton, {\n icon: _ref2 => {\n let {\n size,\n color\n } = _ref2;\n return /*#__PURE__*/React.createElement(MaterialCommunityIcon, {\n name: \"page-first\",\n color: color,\n size: size,\n direction: I18nManager.getConstants().isRTL ? 'rtl' : 'ltr'\n });\n },\n iconColor: textColor,\n rippleColor: paginationControlRippleColor,\n disabled: page === 0,\n onPress: () => onPageChange(0),\n accessibilityLabel: \"page-first\",\n theme: theme\n }) : null, /*#__PURE__*/React.createElement(IconButton, {\n icon: _ref3 => {\n let {\n size,\n color\n } = _ref3;\n return /*#__PURE__*/React.createElement(MaterialCommunityIcon, {\n name: \"chevron-left\",\n color: color,\n size: size,\n direction: I18nManager.getConstants().isRTL ? 'rtl' : 'ltr'\n });\n },\n iconColor: textColor,\n rippleColor: paginationControlRippleColor,\n disabled: page === 0,\n onPress: () => onPageChange(page - 1),\n accessibilityLabel: \"chevron-left\",\n theme: theme\n }), /*#__PURE__*/React.createElement(IconButton, {\n icon: _ref4 => {\n let {\n size,\n color\n } = _ref4;\n return /*#__PURE__*/React.createElement(MaterialCommunityIcon, {\n name: \"chevron-right\",\n color: color,\n size: size,\n direction: I18nManager.getConstants().isRTL ? 'rtl' : 'ltr'\n });\n },\n iconColor: textColor,\n rippleColor: paginationControlRippleColor,\n disabled: numberOfPages === 0 || page === numberOfPages - 1,\n onPress: () => onPageChange(page + 1),\n accessibilityLabel: \"chevron-right\",\n theme: theme\n }), showFastPaginationControls ? /*#__PURE__*/React.createElement(IconButton, {\n icon: _ref5 => {\n let {\n size,\n color\n } = _ref5;\n return /*#__PURE__*/React.createElement(MaterialCommunityIcon, {\n name: \"page-last\",\n color: color,\n size: size,\n direction: I18nManager.getConstants().isRTL ? 'rtl' : 'ltr'\n });\n },\n iconColor: textColor,\n rippleColor: paginationControlRippleColor,\n disabled: numberOfPages === 0 || page === numberOfPages - 1,\n onPress: () => onPageChange(numberOfPages - 1),\n accessibilityLabel: \"page-last\",\n theme: theme\n }) : null);\n};\nconst PaginationDropdown = _ref6 => {\n let {\n numberOfItemsPerPageList,\n numberOfItemsPerPage,\n onItemsPerPageChange,\n theme: themeOverrides,\n selectPageDropdownRippleColor,\n dropdownItemRippleColor\n } = _ref6;\n const theme = useInternalTheme(themeOverrides);\n const {\n colors\n } = theme;\n const [showSelect, toggleSelect] = React.useState(false);\n return /*#__PURE__*/React.createElement(Menu, {\n visible: showSelect,\n onDismiss: () => toggleSelect(!showSelect),\n theme: theme,\n anchor: /*#__PURE__*/React.createElement(Button, {\n mode: \"outlined\",\n onPress: () => toggleSelect(true),\n style: styles.button,\n icon: \"menu-down\",\n contentStyle: styles.contentStyle,\n theme: theme,\n rippleColor: selectPageDropdownRippleColor\n }, `${numberOfItemsPerPage}`)\n }, numberOfItemsPerPageList === null || numberOfItemsPerPageList === void 0 ? void 0 : numberOfItemsPerPageList.map(option => /*#__PURE__*/React.createElement(Menu.Item, {\n key: option,\n titleStyle: option === numberOfItemsPerPage && {\n color: colors === null || colors === void 0 ? void 0 : colors.primary\n },\n onPress: () => {\n onItemsPerPageChange === null || onItemsPerPageChange === void 0 ? void 0 : onItemsPerPageChange(option);\n toggleSelect(false);\n },\n rippleColor: dropdownItemRippleColor,\n title: option,\n theme: theme\n })));\n};\n\n/**\n * A component to show pagination for data table.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { DataTable } from 'react-native-paper';\n *\n * const numberOfItemsPerPageList = [2, 3, 4];\n *\n * const items = [\n * {\n * key: 1,\n * name: 'Page 1',\n * },\n * {\n * key: 2,\n * name: 'Page 2',\n * },\n * {\n * key: 3,\n * name: 'Page 3',\n * },\n * ];\n *\n * const MyComponent = () => {\n * const [page, setPage] = React.useState(0);\n * const [numberOfItemsPerPage, onItemsPerPageChange] = React.useState(numberOfItemsPerPageList[0]);\n * const from = page * numberOfItemsPerPage;\n * const to = Math.min((page + 1) * numberOfItemsPerPage, items.length);\n *\n * React.useEffect(() => {\n * setPage(0);\n * }, [numberOfItemsPerPage]);\n *\n * return (\n * \n * setPage(page)}\n * label={`${from + 1}-${to} of ${items.length}`}\n * showFastPaginationControls\n * numberOfItemsPerPageList={numberOfItemsPerPageList}\n * numberOfItemsPerPage={numberOfItemsPerPage}\n * onItemsPerPageChange={onItemsPerPageChange}\n * selectPageDropdownLabel={'Rows per page'}\n * />\n * \n * );\n * };\n *\n * export default MyComponent;\n * ```\n */\nconst DataTablePagination = _ref7 => {\n let {\n label,\n accessibilityLabel,\n page,\n numberOfPages,\n onPageChange,\n style,\n showFastPaginationControls = false,\n numberOfItemsPerPageList,\n numberOfItemsPerPage,\n onItemsPerPageChange,\n selectPageDropdownLabel,\n selectPageDropdownAccessibilityLabel,\n selectPageDropdownRippleColor,\n dropdownItemRippleColor,\n theme: themeOverrides,\n ...rest\n } = _ref7;\n const theme = useInternalTheme(themeOverrides);\n const labelColor = color(theme.isV3 ? theme.colors.onSurface : theme === null || theme === void 0 ? void 0 : theme.colors.text).alpha(0.6).rgb().string();\n return /*#__PURE__*/React.createElement(View, _extends({}, rest, {\n style: [styles.container, style],\n accessibilityLabel: \"pagination-container\"\n }), numberOfItemsPerPageList && numberOfItemsPerPage && onItemsPerPageChange && /*#__PURE__*/React.createElement(View, {\n accessibilityLabel: \"Options Select\",\n style: styles.optionsContainer\n }, /*#__PURE__*/React.createElement(Text, {\n style: [styles.label, {\n color: labelColor\n }],\n numberOfLines: 3,\n accessibilityLabel: selectPageDropdownAccessibilityLabel || 'selectPageDropdownLabel'\n }, selectPageDropdownLabel), /*#__PURE__*/React.createElement(PaginationDropdown, {\n numberOfItemsPerPageList: numberOfItemsPerPageList,\n numberOfItemsPerPage: numberOfItemsPerPage,\n onItemsPerPageChange: onItemsPerPageChange,\n selectPageDropdownRippleColor: selectPageDropdownRippleColor,\n dropdownItemRippleColor: dropdownItemRippleColor,\n theme: theme\n })), /*#__PURE__*/React.createElement(Text, {\n style: [styles.label, {\n color: labelColor\n }],\n numberOfLines: 3,\n accessibilityLabel: accessibilityLabel || 'label'\n }, label), /*#__PURE__*/React.createElement(View, {\n style: styles.iconsContainer\n }, /*#__PURE__*/React.createElement(PaginationControls, {\n showFastPaginationControls: showFastPaginationControls,\n onPageChange: onPageChange,\n page: page,\n numberOfPages: numberOfPages,\n theme: theme\n })));\n};\nDataTablePagination.displayName = 'DataTable.Pagination';\nconst styles = StyleSheet.create({\n container: {\n justifyContent: 'flex-end',\n flexDirection: 'row',\n alignItems: 'center',\n paddingLeft: 16,\n flexWrap: 'wrap'\n },\n optionsContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n marginVertical: 6\n },\n label: {\n fontSize: 12,\n marginRight: 16\n },\n button: {\n textAlign: 'center',\n marginRight: 16\n },\n iconsContainer: {\n flexDirection: 'row'\n },\n contentStyle: {\n flexDirection: 'row-reverse'\n }\n});\nexport default DataTablePagination;\n\n// @component-docs ignore-next-line\nexport { DataTablePagination };\n//# sourceMappingURL=DataTablePagination.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet } from 'react-native';\nimport { getIconButtonColor } from './utils';\nimport { useInternalTheme } from '../../core/theming';\nimport { forwardRef } from '../../utils/forwardRef';\nimport ActivityIndicator from '../ActivityIndicator';\nimport CrossFadeIcon from '../CrossFadeIcon';\nimport Icon from '../Icon';\nimport Surface from '../Surface';\nimport TouchableRipple from '../TouchableRipple/TouchableRipple';\nconst PADDING = 8;\n/**\n * An icon button is a button which displays only an icon without a label.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { IconButton, MD3Colors } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * console.log('Pressed')}\n * />\n * );\n *\n * export default MyComponent;\n * ```\n *\n * @extends TouchableRipple props https://callstack.github.io/react-native-paper/docs/components/TouchableRipple\n */\nconst IconButton = forwardRef((_ref, ref) => {\n let {\n icon,\n iconColor: customIconColor,\n containerColor: customContainerColor,\n rippleColor: customRippleColor,\n size = 24,\n accessibilityLabel,\n disabled,\n onPress,\n selected = false,\n animated = false,\n mode,\n style,\n theme: themeOverrides,\n testID = 'icon-button',\n loading = false,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const {\n isV3\n } = theme;\n const IconComponent = animated ? CrossFadeIcon : Icon;\n const {\n iconColor,\n rippleColor,\n backgroundColor,\n borderColor\n } = getIconButtonColor({\n theme,\n disabled,\n selected,\n mode,\n customIconColor,\n customContainerColor,\n customRippleColor\n });\n const buttonSize = isV3 ? size + 2 * PADDING : size * 1.5;\n const {\n borderWidth = isV3 && mode === 'outlined' && !selected ? 1 : 0,\n borderRadius = buttonSize / 2\n } = StyleSheet.flatten(style) || {};\n const borderStyles = {\n borderWidth,\n borderRadius,\n borderColor\n };\n return /*#__PURE__*/React.createElement(Surface, _extends({\n ref: ref,\n testID: `${testID}-container`,\n style: [{\n backgroundColor,\n width: buttonSize,\n height: buttonSize\n }, styles.container, borderStyles, !isV3 && disabled && styles.disabled, style]\n }, isV3 && {\n elevation: 0\n }), /*#__PURE__*/React.createElement(TouchableRipple, _extends({\n borderless: true,\n centered: true,\n onPress: onPress,\n rippleColor: rippleColor,\n accessibilityLabel: accessibilityLabel,\n style: [styles.touchable, {\n borderRadius\n }]\n // @ts-expect-error We keep old a11y props for backwards compat with old RN versions\n ,\n accessibilityTraits: disabled ? ['button', 'disabled'] : 'button',\n accessibilityComponentType: \"button\",\n accessibilityRole: \"button\",\n accessibilityState: {\n disabled\n },\n disabled: disabled,\n hitSlop: TouchableRipple.supported ? {\n top: 10,\n left: 10,\n bottom: 10,\n right: 10\n } : {\n top: 6,\n left: 6,\n bottom: 6,\n right: 6\n },\n testID: testID\n }, rest), loading ? /*#__PURE__*/React.createElement(ActivityIndicator, {\n size: size,\n color: iconColor\n }) : /*#__PURE__*/React.createElement(IconComponent, {\n color: iconColor,\n source: icon,\n size: size\n })));\n});\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n margin: 6,\n elevation: 0\n },\n touchable: {\n flexGrow: 1,\n justifyContent: 'center',\n alignItems: 'center'\n },\n disabled: {\n opacity: 0.32\n }\n});\nexport default IconButton;\n//# sourceMappingURL=IconButton.js.map","import color from 'color';\nconst getBorderColor = _ref => {\n let {\n theme,\n disabled\n } = _ref;\n if (theme.isV3) {\n if (disabled) {\n return theme.colors.surfaceDisabled;\n }\n return theme.colors.outline;\n }\n return undefined;\n};\nconst getBackgroundColor = _ref2 => {\n let {\n theme,\n isMode,\n disabled,\n selected,\n customContainerColor\n } = _ref2;\n if (theme.isV3) {\n if (disabled) {\n if (isMode('contained') || isMode('contained-tonal')) {\n return theme.colors.surfaceDisabled;\n }\n }\n if (typeof customContainerColor !== 'undefined') {\n return customContainerColor;\n }\n if (isMode('contained')) {\n if (selected) {\n return theme.colors.primary;\n }\n return theme.colors.surfaceVariant;\n }\n if (isMode('contained-tonal')) {\n if (selected) {\n return theme.colors.secondaryContainer;\n }\n return theme.colors.surfaceVariant;\n }\n if (isMode('outlined')) {\n if (selected) {\n return theme.colors.inverseSurface;\n }\n }\n }\n if (typeof customContainerColor !== 'undefined') {\n return customContainerColor;\n }\n return undefined;\n};\nconst getIconColor = _ref3 => {\n let {\n theme,\n isMode,\n disabled,\n selected,\n customIconColor\n } = _ref3;\n if (theme.isV3) {\n if (disabled) {\n return theme.colors.onSurfaceDisabled;\n }\n if (typeof customIconColor !== 'undefined') {\n return customIconColor;\n }\n if (isMode('contained')) {\n if (selected) {\n return theme.colors.onPrimary;\n }\n return theme.colors.primary;\n }\n if (isMode('contained-tonal')) {\n if (selected) {\n return theme.colors.onSecondaryContainer;\n }\n return theme.colors.onSurfaceVariant;\n }\n if (isMode('outlined')) {\n if (selected) {\n return theme.colors.inverseOnSurface;\n }\n return theme.colors.onSurfaceVariant;\n }\n if (selected) {\n return theme.colors.primary;\n }\n return theme.colors.onSurfaceVariant;\n }\n if (typeof customIconColor !== 'undefined') {\n return customIconColor;\n }\n return theme.colors.text;\n};\nconst getRippleColor = _ref4 => {\n let {\n theme,\n iconColor,\n customRippleColor\n } = _ref4;\n if (customRippleColor) {\n return customRippleColor;\n }\n if (theme.isV3) {\n return color(iconColor).alpha(0.12).rgb().string();\n }\n return color(iconColor).alpha(0.32).rgb().string();\n};\nexport const getIconButtonColor = _ref5 => {\n let {\n theme,\n disabled,\n mode,\n selected,\n customIconColor,\n customContainerColor,\n customRippleColor\n } = _ref5;\n const isMode = modeToCompare => {\n return mode === modeToCompare;\n };\n const baseIconColorProps = {\n theme,\n isMode,\n disabled,\n selected\n };\n const iconColor = getIconColor({\n ...baseIconColorProps,\n customIconColor\n });\n return {\n iconColor,\n backgroundColor: getBackgroundColor({\n ...baseIconColorProps,\n customContainerColor\n }),\n rippleColor: getRippleColor({\n theme,\n iconColor,\n customRippleColor\n }),\n borderColor: getBorderColor({\n theme,\n disabled\n })\n };\n};\n//# sourceMappingURL=utils.js.map","import * as React from 'react';\nimport { Animated, StyleSheet, View } from 'react-native';\nimport Icon, { isEqualIcon, isValidIcon } from './Icon';\nimport { useInternalTheme } from '../core/theming';\nconst CrossFadeIcon = _ref => {\n let {\n color,\n size,\n source,\n theme: themeOverrides,\n testID = 'cross-fade-icon'\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const [currentIcon, setCurrentIcon] = React.useState(() => source);\n const [previousIcon, setPreviousIcon] = React.useState(null);\n const {\n current: fade\n } = React.useRef(new Animated.Value(1));\n const {\n scale\n } = theme.animation;\n if (currentIcon !== source) {\n setPreviousIcon(() => currentIcon);\n setCurrentIcon(() => source);\n }\n React.useEffect(() => {\n if (isValidIcon(previousIcon) && !isEqualIcon(previousIcon, currentIcon)) {\n fade.setValue(1);\n Animated.timing(fade, {\n duration: scale * 200,\n toValue: 0,\n useNativeDriver: true\n }).start();\n }\n }, [currentIcon, previousIcon, fade, scale]);\n const opacityPrev = fade;\n const opacityNext = previousIcon ? fade.interpolate({\n inputRange: [0, 1],\n outputRange: [1, 0]\n }) : 1;\n const rotatePrev = fade.interpolate({\n inputRange: [0, 1],\n outputRange: ['-90deg', '0deg']\n });\n const rotateNext = previousIcon ? fade.interpolate({\n inputRange: [0, 1],\n outputRange: ['0deg', '-180deg']\n }) : '0deg';\n return /*#__PURE__*/React.createElement(View, {\n style: [styles.content, {\n height: size,\n width: size\n }]\n }, previousIcon ? /*#__PURE__*/React.createElement(Animated.View, {\n style: [styles.icon, {\n opacity: opacityPrev,\n transform: [{\n rotate: rotatePrev\n }]\n }],\n testID: `${testID}-previous`\n }, /*#__PURE__*/React.createElement(Icon, {\n source: previousIcon,\n size: size,\n color: color,\n theme: theme\n })) : null, /*#__PURE__*/React.createElement(Animated.View, {\n style: [styles.icon, {\n opacity: opacityNext,\n transform: [{\n rotate: rotateNext\n }]\n }],\n testID: `${testID}-current`\n }, /*#__PURE__*/React.createElement(Icon, {\n source: currentIcon,\n size: size,\n color: color,\n theme: theme\n })));\n};\nexport default CrossFadeIcon;\nconst styles = StyleSheet.create({\n content: {\n alignItems: 'center',\n justifyContent: 'center'\n },\n icon: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0\n }\n});\n//# sourceMappingURL=CrossFadeIcon.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Animated, Dimensions, Easing, findNodeHandle, I18nManager, Keyboard, Platform, ScrollView, StyleSheet, View, Pressable } from 'react-native';\nimport MenuItem from './MenuItem';\nimport { APPROX_STATUSBAR_HEIGHT } from '../../constants';\nimport { withInternalTheme } from '../../core/theming';\nimport { ElevationLevels } from '../../types';\nimport { addEventListener } from '../../utils/addEventListener';\nimport { BackHandler } from '../../utils/BackHandler/BackHandler';\nimport Portal from '../Portal/Portal';\nimport Surface from '../Surface';\n// Minimum padding between the edge of the screen and the menu\nconst SCREEN_INDENT = 8;\n// From https://material.io/design/motion/speed.html#duration\nconst ANIMATION_DURATION = 250;\n// From the 'Standard easing' section of https://material.io/design/motion/speed.html#easing\nconst EASING = Easing.bezier(0.4, 0, 0.2, 1);\nconst WINDOW_LAYOUT = Dimensions.get('window');\nconst DEFAULT_ELEVATION = 2;\nexport const ELEVATION_LEVELS_MAP = Object.values(ElevationLevels);\n\n/**\n * Menus display a list of choices on temporary elevated surfaces. Their placement varies based on the element that opens them.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { View } from 'react-native';\n * import { Button, Menu, Divider, PaperProvider } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [visible, setVisible] = React.useState(false);\n *\n * const openMenu = () => setVisible(true);\n *\n * const closeMenu = () => setVisible(false);\n *\n * return (\n * \n * \n * Show menu}>\n * {}} title=\"Item 1\" />\n * {}} title=\"Item 2\" />\n * \n * {}} title=\"Item 3\" />\n * \n *
\n * \n * );\n * };\n *\n * export default MyComponent;\n * ```\n *\n * ### Note\n * When using `Menu` within a React Native's `Modal` component, you need to wrap all\n * `Modal` contents within a `PaperProvider` in order for the menu to show. This\n * wrapping is not necessary if you use Paper's `Modal` instead.\n */\nclass Menu extends React.Component {\n // @component ./MenuItem.tsx\n static Item = MenuItem;\n static defaultProps = {\n statusBarHeight: APPROX_STATUSBAR_HEIGHT,\n overlayAccessibilityLabel: 'Close menu',\n testID: 'menu'\n };\n static getDerivedStateFromProps(nextProps, prevState) {\n if (nextProps.visible && !prevState.rendered) {\n return {\n rendered: true\n };\n }\n return null;\n }\n state = {\n rendered: this.props.visible,\n top: 0,\n left: 0,\n menuLayout: {\n width: 0,\n height: 0\n },\n anchorLayout: {\n width: 0,\n height: 0\n },\n opacityAnimation: new Animated.Value(0),\n scaleAnimation: new Animated.ValueXY({\n x: 0,\n y: 0\n }),\n windowLayout: {\n width: WINDOW_LAYOUT.width,\n height: WINDOW_LAYOUT.height\n }\n };\n componentDidMount() {\n this.keyboardDidShowListener = Keyboard.addListener('keyboardDidShow', this.keyboardDidShow);\n this.keyboardDidHideListener = Keyboard.addListener('keyboardDidHide', this.keyboardDidHide);\n }\n componentDidUpdate(prevProps) {\n if (prevProps.visible !== this.props.visible) {\n this.updateVisibility();\n }\n }\n componentWillUnmount() {\n var _this$keyboardDidShow, _this$keyboardDidHide;\n this.removeListeners();\n (_this$keyboardDidShow = this.keyboardDidShowListener) === null || _this$keyboardDidShow === void 0 ? void 0 : _this$keyboardDidShow.remove();\n (_this$keyboardDidHide = this.keyboardDidHideListener) === null || _this$keyboardDidHide === void 0 ? void 0 : _this$keyboardDidHide.remove();\n }\n anchor = null;\n menu = null;\n keyboardHeight = 0;\n isCoordinate = anchor => ! /*#__PURE__*/React.isValidElement(anchor) && typeof (anchor === null || anchor === void 0 ? void 0 : anchor.x) === 'number' && typeof (anchor === null || anchor === void 0 ? void 0 : anchor.y) === 'number';\n measureMenuLayout = () => new Promise(resolve => {\n if (this.menu) {\n this.menu.measureInWindow((x, y, width, height) => {\n resolve({\n x,\n y,\n width,\n height\n });\n });\n }\n });\n measureAnchorLayout = () => new Promise(resolve => {\n const {\n anchor\n } = this.props;\n if (this.isCoordinate(anchor)) {\n resolve({\n x: anchor.x,\n y: anchor.y,\n width: 0,\n height: 0\n });\n return;\n }\n if (this.anchor) {\n this.anchor.measureInWindow((x, y, width, height) => {\n resolve({\n x,\n y,\n width,\n height\n });\n });\n }\n });\n updateVisibility = async () => {\n // Menu is rendered in Portal, which updates items asynchronously\n // We need to do the same here so that the ref is up-to-date\n await Promise.resolve();\n if (this.props.visible) {\n this.show();\n } else {\n this.hide();\n }\n };\n isBrowser = () => Platform.OS === 'web' && 'document' in global;\n focusFirstDOMNode = el => {\n if (el && this.isBrowser()) {\n // When in the browser, we want to focus the first focusable item on toggle\n // For example, when menu is shown, focus the first item in the menu\n // And when menu is dismissed, send focus back to the button to resume tabbing\n const node = findNodeHandle(el);\n const focusableNode = node.querySelector(\n // This is a rough list of selectors that can be focused\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])');\n focusableNode === null || focusableNode === void 0 ? void 0 : focusableNode.focus();\n }\n };\n handleDismiss = () => {\n if (this.props.visible) {\n var _this$props$onDismiss, _this$props;\n (_this$props$onDismiss = (_this$props = this.props).onDismiss) === null || _this$props$onDismiss === void 0 ? void 0 : _this$props$onDismiss.call(_this$props);\n }\n return true;\n };\n handleKeypress = e => {\n if (e.key === 'Escape') {\n var _this$props$onDismiss2, _this$props2;\n (_this$props$onDismiss2 = (_this$props2 = this.props).onDismiss) === null || _this$props$onDismiss2 === void 0 ? void 0 : _this$props$onDismiss2.call(_this$props2);\n }\n };\n attachListeners = () => {\n this.backHandlerSubscription = addEventListener(BackHandler, 'hardwareBackPress', this.handleDismiss);\n this.dimensionsSubscription = addEventListener(Dimensions, 'change', this.handleDismiss);\n this.isBrowser() && document.addEventListener('keyup', this.handleKeypress);\n };\n removeListeners = () => {\n var _this$backHandlerSubs, _this$dimensionsSubsc;\n (_this$backHandlerSubs = this.backHandlerSubscription) === null || _this$backHandlerSubs === void 0 ? void 0 : _this$backHandlerSubs.remove();\n (_this$dimensionsSubsc = this.dimensionsSubscription) === null || _this$dimensionsSubsc === void 0 ? void 0 : _this$dimensionsSubsc.remove();\n this.isBrowser() && document.removeEventListener('keyup', this.handleKeypress);\n };\n show = async () => {\n const windowLayout = Dimensions.get('window');\n const [menuLayout, anchorLayout] = await Promise.all([this.measureMenuLayout(), this.measureAnchorLayout()]);\n\n // When visible is true for first render\n // native views can be still not rendered and\n // measureMenuLayout/measureAnchorLayout functions\n // return wrong values e.g { x:0, y: 0, width: 0, height: 0 }\n // so we have to wait until views are ready\n // and rerun this function to show menu\n if (!windowLayout.width || !windowLayout.height || !menuLayout.width || !menuLayout.height || !anchorLayout.width && !this.isCoordinate(this.props.anchor) || !anchorLayout.height && !this.isCoordinate(this.props.anchor)) {\n requestAnimationFrame(this.show);\n return;\n }\n this.setState(() => ({\n left: anchorLayout.x,\n top: anchorLayout.y,\n anchorLayout: {\n height: anchorLayout.height,\n width: anchorLayout.width\n },\n menuLayout: {\n width: menuLayout.width,\n height: menuLayout.height\n },\n windowLayout: {\n height: windowLayout.height - this.keyboardHeight,\n width: windowLayout.width\n }\n }), () => {\n this.attachListeners();\n const {\n animation\n } = this.props.theme;\n Animated.parallel([Animated.timing(this.state.scaleAnimation, {\n toValue: {\n x: menuLayout.width,\n y: menuLayout.height\n },\n duration: ANIMATION_DURATION * animation.scale,\n easing: EASING,\n useNativeDriver: true\n }), Animated.timing(this.state.opacityAnimation, {\n toValue: 1,\n duration: ANIMATION_DURATION * animation.scale,\n easing: EASING,\n useNativeDriver: true\n })]).start(_ref => {\n let {\n finished\n } = _ref;\n if (finished) {\n this.focusFirstDOMNode(this.menu);\n }\n });\n });\n };\n hide = () => {\n this.removeListeners();\n const {\n animation\n } = this.props.theme;\n Animated.timing(this.state.opacityAnimation, {\n toValue: 0,\n duration: ANIMATION_DURATION * animation.scale,\n easing: EASING,\n useNativeDriver: true\n }).start(_ref2 => {\n let {\n finished\n } = _ref2;\n if (finished) {\n this.setState({\n menuLayout: {\n width: 0,\n height: 0\n },\n rendered: false\n });\n this.state.scaleAnimation.setValue({\n x: 0,\n y: 0\n });\n this.focusFirstDOMNode(this.anchor);\n }\n });\n };\n keyboardDidShow = e => {\n const keyboardHeight = e.endCoordinates.height;\n this.keyboardHeight = keyboardHeight;\n };\n keyboardDidHide = () => {\n this.keyboardHeight = 0;\n };\n render() {\n const {\n visible,\n anchor,\n anchorPosition,\n contentStyle,\n style,\n elevation = DEFAULT_ELEVATION,\n children,\n theme,\n statusBarHeight,\n onDismiss,\n overlayAccessibilityLabel,\n keyboardShouldPersistTaps,\n testID\n } = this.props;\n const {\n rendered,\n menuLayout,\n anchorLayout,\n opacityAnimation,\n scaleAnimation,\n windowLayout\n } = this.state;\n let {\n left,\n top\n } = this.state;\n if (!this.isCoordinate(this.anchor) && anchorPosition === 'bottom') {\n top += anchorLayout.height;\n }\n\n // I don't know why but on Android measure function is wrong by 24\n const additionalVerticalValue = Platform.select({\n android: statusBarHeight,\n default: 0\n });\n const scaleTransforms = [{\n scaleX: scaleAnimation.x.interpolate({\n inputRange: [0, menuLayout.width],\n outputRange: [0, 1]\n })\n }, {\n scaleY: scaleAnimation.y.interpolate({\n inputRange: [0, menuLayout.height],\n outputRange: [0, 1]\n })\n }];\n\n // We need to translate menu while animating scale to imitate transform origin for scale animation\n const positionTransforms = [];\n\n // Check if menu fits horizontally and if not align it to right.\n if (left <= windowLayout.width - menuLayout.width - SCREEN_INDENT) {\n positionTransforms.push({\n translateX: scaleAnimation.x.interpolate({\n inputRange: [0, menuLayout.width],\n outputRange: [-(menuLayout.width / 2), 0]\n })\n });\n\n // Check if menu position has enough space from left side\n if (left < SCREEN_INDENT) {\n left = SCREEN_INDENT;\n }\n } else {\n positionTransforms.push({\n translateX: scaleAnimation.x.interpolate({\n inputRange: [0, menuLayout.width],\n outputRange: [menuLayout.width / 2, 0]\n })\n });\n left += anchorLayout.width - menuLayout.width;\n const right = left + menuLayout.width;\n // Check if menu position has enough space from right side\n if (right > windowLayout.width - SCREEN_INDENT) {\n left = windowLayout.width - SCREEN_INDENT - menuLayout.width;\n }\n }\n\n // If the menu is larger than available vertical space,\n // calculate the height of scrollable view\n let scrollableMenuHeight = 0;\n\n // Check if the menu should be scrollable\n if (\n // Check if the menu overflows from bottom side\n top >= windowLayout.height - menuLayout.height - SCREEN_INDENT - additionalVerticalValue &&\n // And bottom side of the screen has more space than top side\n top <= windowLayout.height - top) {\n // Scrollable menu should be below the anchor (expands downwards)\n scrollableMenuHeight = windowLayout.height - top - SCREEN_INDENT - additionalVerticalValue;\n } else if (\n // Check if the menu overflows from bottom side\n top >= windowLayout.height - menuLayout.height - SCREEN_INDENT - additionalVerticalValue &&\n // And top side of the screen has more space than bottom side\n top >= windowLayout.height - top &&\n // And menu overflows from top side\n top <= menuLayout.height - anchorLayout.height + SCREEN_INDENT - additionalVerticalValue) {\n // Scrollable menu should be above the anchor (expands upwards)\n scrollableMenuHeight = top + anchorLayout.height - SCREEN_INDENT + additionalVerticalValue;\n }\n\n // Scrollable menu max height\n scrollableMenuHeight = scrollableMenuHeight > windowLayout.height - 2 * SCREEN_INDENT ? windowLayout.height - 2 * SCREEN_INDENT : scrollableMenuHeight;\n\n // Menu is typically positioned below the element that generates it\n // So first check if it fits below the anchor (expands downwards)\n if (\n // Check if menu fits vertically\n top <= windowLayout.height - menuLayout.height - SCREEN_INDENT - additionalVerticalValue ||\n // Or if the menu overflows from bottom side\n top >= windowLayout.height - menuLayout.height - SCREEN_INDENT - additionalVerticalValue &&\n // And bottom side of the screen has more space than top side\n top <= windowLayout.height - top) {\n positionTransforms.push({\n translateY: scaleAnimation.y.interpolate({\n inputRange: [0, menuLayout.height],\n outputRange: [-((scrollableMenuHeight || menuLayout.height) / 2), 0]\n })\n });\n\n // Check if menu position has enough space from top side\n if (top < SCREEN_INDENT) {\n top = SCREEN_INDENT;\n }\n } else {\n positionTransforms.push({\n translateY: scaleAnimation.y.interpolate({\n inputRange: [0, menuLayout.height],\n outputRange: [(scrollableMenuHeight || menuLayout.height) / 2, 0]\n })\n });\n top += anchorLayout.height - (scrollableMenuHeight || menuLayout.height);\n const bottom = top + (scrollableMenuHeight || menuLayout.height) + additionalVerticalValue;\n\n // Check if menu position has enough space from bottom side\n if (bottom > windowLayout.height - SCREEN_INDENT) {\n top = scrollableMenuHeight === windowLayout.height - 2 * SCREEN_INDENT ? -SCREEN_INDENT * 2 : windowLayout.height - menuLayout.height - SCREEN_INDENT - additionalVerticalValue;\n }\n }\n const shadowMenuContainerStyle = {\n opacity: opacityAnimation,\n transform: scaleTransforms,\n borderRadius: theme.roundness,\n ...(!theme.isV3 && {\n elevation: 8\n }),\n ...(scrollableMenuHeight ? {\n height: scrollableMenuHeight\n } : {})\n };\n const positionStyle = {\n top: this.isCoordinate(anchor) ? top : top + additionalVerticalValue,\n ...(I18nManager.getConstants().isRTL ? {\n right: left\n } : {\n left\n })\n };\n const pointerEvents = visible ? 'box-none' : 'none';\n return /*#__PURE__*/React.createElement(View, {\n ref: ref => {\n this.anchor = ref;\n },\n collapsable: false\n }, this.isCoordinate(anchor) ? null : anchor, rendered ? /*#__PURE__*/React.createElement(Portal, null, /*#__PURE__*/React.createElement(Pressable, {\n accessibilityLabel: overlayAccessibilityLabel,\n accessibilityRole: \"button\",\n onPress: onDismiss,\n style: styles.pressableOverlay\n }), /*#__PURE__*/React.createElement(View, {\n ref: ref => {\n this.menu = ref;\n },\n collapsable: false,\n accessibilityViewIsModal: visible,\n style: [styles.wrapper, positionStyle, style],\n pointerEvents: pointerEvents,\n onAccessibilityEscape: onDismiss,\n testID: `${testID}-view`\n }, /*#__PURE__*/React.createElement(Animated.View, {\n pointerEvents: pointerEvents,\n style: {\n transform: positionTransforms\n }\n }, /*#__PURE__*/React.createElement(Surface, _extends({\n pointerEvents: pointerEvents,\n style: [styles.shadowMenuContainer, shadowMenuContainerStyle, theme.isV3 && {\n backgroundColor: theme.colors.elevation[ELEVATION_LEVELS_MAP[elevation]]\n }, contentStyle]\n }, theme.isV3 && {\n elevation\n }, {\n testID: `${testID}-surface`,\n theme: theme\n }), scrollableMenuHeight && /*#__PURE__*/React.createElement(ScrollView, {\n keyboardShouldPersistTaps: keyboardShouldPersistTaps\n }, children) || /*#__PURE__*/React.createElement(React.Fragment, null, children))))) : null);\n }\n}\nconst styles = StyleSheet.create({\n wrapper: {\n position: 'absolute'\n },\n shadowMenuContainer: {\n opacity: 0,\n paddingVertical: 8\n },\n pressableOverlay: {\n ...StyleSheet.absoluteFillObject,\n ...(Platform.OS === 'web' && {\n cursor: 'default'\n }),\n width: '100%'\n }\n});\nexport default withInternalTheme(Menu);\n//# sourceMappingURL=Menu.js.map","import * as React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport { getContentMaxWidth, getMenuItemColor, MAX_WIDTH, MIN_WIDTH } from './utils';\nimport { useInternalTheme } from '../../core/theming';\nimport Icon from '../Icon';\nimport TouchableRipple from '../TouchableRipple/TouchableRipple';\nimport Text from '../Typography/Text';\n/**\n * A component to show a single list item inside a Menu.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { View } from 'react-native';\n * import { Menu } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * {}} title=\"Redo\" />\n * {}} title=\"Undo\" />\n * {}} title=\"Cut\" disabled />\n * {}} title=\"Copy\" disabled />\n * {}} title=\"Paste\" />\n * \n * );\n *\n * export default MyComponent;\n * ```\n */\nconst MenuItem = _ref => {\n let {\n leadingIcon,\n trailingIcon,\n dense,\n title,\n disabled,\n background,\n onPress,\n style,\n contentStyle,\n titleStyle,\n rippleColor: customRippleColor,\n testID = 'menu-item',\n accessibilityLabel,\n accessibilityState,\n theme: themeOverrides,\n titleMaxFontSizeMultiplier = 1.5\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const {\n titleColor,\n iconColor,\n rippleColor\n } = getMenuItemColor({\n theme,\n disabled,\n customRippleColor\n });\n const {\n isV3\n } = theme;\n const containerPadding = isV3 ? 12 : 8;\n const iconWidth = isV3 ? 24 : 40;\n const minWidth = MIN_WIDTH - (isV3 ? 12 : 16);\n const maxWidth = getContentMaxWidth({\n isV3,\n iconWidth,\n leadingIcon,\n trailingIcon\n });\n const titleTextStyle = {\n color: titleColor,\n ...(isV3 ? theme.fonts.bodyLarge : {})\n };\n const newAccessibilityState = {\n ...accessibilityState,\n disabled\n };\n return /*#__PURE__*/React.createElement(TouchableRipple, {\n style: [styles.container, {\n paddingHorizontal: containerPadding\n }, dense && styles.md3DenseContainer, style],\n onPress: onPress,\n disabled: disabled,\n testID: testID,\n background: background,\n accessibilityLabel: accessibilityLabel,\n accessibilityRole: \"menuitem\",\n accessibilityState: newAccessibilityState,\n rippleColor: rippleColor\n }, /*#__PURE__*/React.createElement(View, {\n style: styles.row\n }, leadingIcon ? /*#__PURE__*/React.createElement(View, {\n style: [!isV3 && styles.item, {\n width: iconWidth\n }],\n pointerEvents: \"box-none\"\n }, /*#__PURE__*/React.createElement(Icon, {\n source: leadingIcon,\n size: 24,\n color: iconColor\n })) : null, /*#__PURE__*/React.createElement(View, {\n style: [!isV3 && styles.item, styles.content, {\n minWidth,\n maxWidth\n }, isV3 && (leadingIcon ? styles.md3LeadingIcon : styles.md3WithoutLeadingIcon), contentStyle],\n pointerEvents: \"none\"\n }, /*#__PURE__*/React.createElement(Text, {\n variant: \"bodyLarge\",\n selectable: false,\n numberOfLines: 1,\n testID: `${testID}-title`,\n style: [!isV3 && styles.title, titleTextStyle, titleStyle],\n maxFontSizeMultiplier: titleMaxFontSizeMultiplier\n }, title)), isV3 && trailingIcon ? /*#__PURE__*/React.createElement(View, {\n style: [!isV3 && styles.item, {\n width: iconWidth\n }],\n pointerEvents: \"box-none\"\n }, /*#__PURE__*/React.createElement(Icon, {\n source: trailingIcon,\n size: 24,\n color: iconColor\n })) : null));\n};\nMenuItem.displayName = 'Menu.Item';\nconst styles = StyleSheet.create({\n container: {\n minWidth: MIN_WIDTH,\n maxWidth: MAX_WIDTH,\n height: 48,\n justifyContent: 'center'\n },\n md3DenseContainer: {\n height: 32\n },\n row: {\n flexDirection: 'row'\n },\n title: {\n fontSize: 16\n },\n item: {\n marginHorizontal: 8\n },\n content: {\n justifyContent: 'center'\n },\n md3LeadingIcon: {\n marginLeft: 12\n },\n md3WithoutLeadingIcon: {\n marginLeft: 4\n }\n});\nexport default MenuItem;\n//# sourceMappingURL=MenuItem.js.map","import color from 'color';\nimport { black, white } from '../../styles/themes/v2/colors';\nexport const MIN_WIDTH = 112;\nexport const MAX_WIDTH = 280;\nconst getDisabledColor = theme => {\n if (theme.isV3) {\n return theme.colors.onSurfaceDisabled;\n }\n return color(theme.dark ? white : black).alpha(0.32).rgb().string();\n};\nconst getTitleColor = _ref => {\n let {\n theme,\n disabled\n } = _ref;\n if (disabled) {\n return getDisabledColor(theme);\n }\n if (theme.isV3) {\n return theme.colors.onSurface;\n }\n return color(theme.colors.text).alpha(0.87).rgb().string();\n};\nconst getIconColor = _ref2 => {\n let {\n theme,\n disabled\n } = _ref2;\n if (disabled) {\n return getDisabledColor(theme);\n }\n if (theme.isV3) {\n return theme.colors.onSurfaceVariant;\n }\n return color(theme.colors.text).alpha(0.54).rgb().string();\n};\nconst getRippleColor = _ref3 => {\n let {\n theme,\n customRippleColor\n } = _ref3;\n if (customRippleColor) {\n return customRippleColor;\n }\n if (theme.isV3) {\n return color(theme.colors.onSurfaceVariant).alpha(0.12).rgb().string();\n }\n return undefined;\n};\nexport const getMenuItemColor = _ref4 => {\n let {\n theme,\n disabled,\n customRippleColor\n } = _ref4;\n return {\n titleColor: getTitleColor({\n theme,\n disabled\n }),\n iconColor: getIconColor({\n theme,\n disabled\n }),\n rippleColor: getRippleColor({\n theme,\n customRippleColor\n })\n };\n};\nexport const getContentMaxWidth = _ref5 => {\n let {\n isV3,\n iconWidth,\n leadingIcon,\n trailingIcon\n } = _ref5;\n if (isV3) {\n if (leadingIcon && trailingIcon) {\n return MAX_WIDTH - (2 * iconWidth + 24);\n }\n if (leadingIcon || trailingIcon) {\n return MAX_WIDTH - (iconWidth + 24);\n }\n return MAX_WIDTH - 12;\n }\n if (leadingIcon) {\n return MAX_WIDTH - (iconWidth + 48);\n }\n return MAX_WIDTH - 16;\n};\n//# sourceMappingURL=utils.js.map","var _NativeModules$Native;\nimport { NativeModules, Platform } from 'react-native';\n\n// Use the existence of expo-constants as a heuristic for determining if the\n// status bar is translucent on Android. This should be replaced in the future\n// with react-native-safe-area-context.\nconst estimatedStatusBarHeight = ((_NativeModules$Native = NativeModules.NativeUnimoduleProxy) === null || _NativeModules$Native === void 0 || (_NativeModules$Native = _NativeModules$Native.modulesConstants) === null || _NativeModules$Native === void 0 || (_NativeModules$Native = _NativeModules$Native.ExponentConstants) === null || _NativeModules$Native === void 0 ? void 0 : _NativeModules$Native.statusBarHeight) ?? 0;\nexport const APPROX_STATUSBAR_HEIGHT = Platform.select({\n android: estimatedStatusBarHeight,\n ios: Platform.Version < 11 ? estimatedStatusBarHeight : 0\n});\n//# sourceMappingURL=constants.js.map","// MD3 types\nexport let MD3TypescaleKey = /*#__PURE__*/function (MD3TypescaleKey) {\n MD3TypescaleKey[\"displayLarge\"] = \"displayLarge\";\n MD3TypescaleKey[\"displayMedium\"] = \"displayMedium\";\n MD3TypescaleKey[\"displaySmall\"] = \"displaySmall\";\n MD3TypescaleKey[\"headlineLarge\"] = \"headlineLarge\";\n MD3TypescaleKey[\"headlineMedium\"] = \"headlineMedium\";\n MD3TypescaleKey[\"headlineSmall\"] = \"headlineSmall\";\n MD3TypescaleKey[\"titleLarge\"] = \"titleLarge\";\n MD3TypescaleKey[\"titleMedium\"] = \"titleMedium\";\n MD3TypescaleKey[\"titleSmall\"] = \"titleSmall\";\n MD3TypescaleKey[\"labelLarge\"] = \"labelLarge\";\n MD3TypescaleKey[\"labelMedium\"] = \"labelMedium\";\n MD3TypescaleKey[\"labelSmall\"] = \"labelSmall\";\n MD3TypescaleKey[\"bodyLarge\"] = \"bodyLarge\";\n MD3TypescaleKey[\"bodyMedium\"] = \"bodyMedium\";\n MD3TypescaleKey[\"bodySmall\"] = \"bodySmall\";\n return MD3TypescaleKey;\n}({});\nexport let ElevationLevels = /*#__PURE__*/function (ElevationLevels) {\n ElevationLevels[ElevationLevels[\"level0\"] = 0] = \"level0\";\n ElevationLevels[ElevationLevels[\"level1\"] = 1] = \"level1\";\n ElevationLevels[ElevationLevels[\"level2\"] = 2] = \"level2\";\n ElevationLevels[ElevationLevels[\"level3\"] = 3] = \"level3\";\n ElevationLevels[ElevationLevels[\"level4\"] = 4] = \"level4\";\n ElevationLevels[ElevationLevels[\"level5\"] = 5] = \"level5\";\n return ElevationLevels;\n}({});\n//# sourceMappingURL=types.js.map","function emptyFunction() {}\nexport const BackHandler = {\n exitApp: emptyFunction,\n addEventListener() {\n return {\n remove: emptyFunction\n };\n },\n removeEventListener: emptyFunction\n};\n//# sourceMappingURL=BackHandler.js.map","import * as React from 'react';\nimport PortalConsumer from './PortalConsumer';\nimport PortalHost, { PortalContext } from './PortalHost';\nimport { Consumer as SettingsConsumer, Provider as SettingsProvider } from '../../core/settings';\nimport { ThemeProvider, withInternalTheme } from '../../core/theming';\n/**\n * Portal allows rendering a component at a different place in the parent tree.\n * You can use it to render content which should appear above other elements, similar to `Modal`.\n * It requires a [`Portal.Host`](PortalHost) component to be rendered somewhere in the parent tree.\n * Note that if you're using the `Provider` component, this already includes a `Portal.Host`.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Portal, Text } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * This is rendered at a different place\n * \n * );\n *\n * export default MyComponent;\n * ```\n */\nclass Portal extends React.Component {\n // @component ./PortalHost.tsx\n static Host = PortalHost;\n render() {\n const {\n children,\n theme\n } = this.props;\n return /*#__PURE__*/React.createElement(SettingsConsumer, null, settings => /*#__PURE__*/React.createElement(PortalContext.Consumer, null, manager => /*#__PURE__*/React.createElement(PortalConsumer, {\n manager: manager\n }, /*#__PURE__*/React.createElement(SettingsProvider, {\n value: settings\n }, /*#__PURE__*/React.createElement(ThemeProvider, {\n theme: theme\n }, children)))));\n }\n}\nexport default withInternalTheme(Portal);\n//# sourceMappingURL=Portal.js.map","import * as React from 'react';\nexport default class PortalConsumer extends React.Component {\n componentDidMount() {\n this.checkManager();\n this.key = this.props.manager.mount(this.props.children);\n }\n componentDidUpdate() {\n this.checkManager();\n this.props.manager.update(this.key, this.props.children);\n }\n componentWillUnmount() {\n this.checkManager();\n this.props.manager.unmount(this.key);\n }\n checkManager() {\n if (!this.props.manager) {\n throw new Error('Looks like you forgot to wrap your root component with `Provider` component from `react-native-paper`.\\n\\n' + \"Please read our getting-started guide and make sure you've followed all the required steps.\\n\\n\" + 'https://callstack.github.io/react-native-paper/docs/guides/getting-started');\n }\n }\n render() {\n return null;\n }\n}\n//# sourceMappingURL=PortalConsumer.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport color from 'color';\nimport { useInternalTheme } from '../../core/theming';\nimport { black, white } from '../../styles/themes/v2/colors';\nimport TouchableRipple from '../TouchableRipple/TouchableRipple';\n/**\n * A component to show a single row inside of a table.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { DataTable } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * 1\n * 2\n * 3\n * 4\n * \n * );\n *\n * export default MyComponent;\n * ```\n *\n * @extends TouchableRipple props https://callstack.github.io/react-native-paper/docs/components/TouchableRipple\n */\nconst DataTableRow = _ref => {\n let {\n onPress,\n style,\n children,\n pointerEvents,\n theme: themeOverrides,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const borderBottomColor = theme.isV3 ? theme.colors.surfaceVariant : color(theme.dark ? white : black).alpha(0.12).rgb().string();\n return /*#__PURE__*/React.createElement(TouchableRipple, _extends({}, rest, {\n onPress: onPress,\n style: [styles.container, {\n borderBottomColor\n }, style]\n }), /*#__PURE__*/React.createElement(View, {\n style: styles.content,\n pointerEvents: pointerEvents\n }, children));\n};\nDataTableRow.displayName = 'DataTable.Row';\nconst styles = StyleSheet.create({\n container: {\n borderStyle: 'solid',\n borderBottomWidth: StyleSheet.hairlineWidth,\n minHeight: 48,\n paddingHorizontal: 16\n },\n content: {\n flex: 1,\n flexDirection: 'row'\n }\n});\nexport default DataTableRow;\n\n// @component-docs ignore-next-line\nexport { DataTableRow };\n//# sourceMappingURL=DataTableRow.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Animated, I18nManager, Pressable, StyleSheet } from 'react-native';\nimport color from 'color';\nimport { useInternalTheme } from '../../core/theming';\nimport MaterialCommunityIcon from '../MaterialCommunityIcon';\nimport Text from '../Typography/Text';\n/**\n * A component to display title in table header.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { DataTable } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * \n * \n * Dessert\n * \n * Calories\n * Fat (g)\n * \n * \n * );\n *\n * export default MyComponent;\n * ```\n */\n\nconst DataTableTitle = _ref => {\n var _theme$colors;\n let {\n numeric,\n children,\n onPress,\n sortDirection,\n textStyle,\n style,\n theme: themeOverrides,\n numberOfLines = 1,\n maxFontSizeMultiplier,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const {\n current: spinAnim\n } = React.useRef(new Animated.Value(sortDirection === 'ascending' ? 0 : 1));\n React.useEffect(() => {\n Animated.timing(spinAnim, {\n toValue: sortDirection === 'ascending' ? 0 : 1,\n duration: 150,\n useNativeDriver: true\n }).start();\n }, [sortDirection, spinAnim]);\n const textColor = theme.isV3 ? theme.colors.onSurface : theme === null || theme === void 0 || (_theme$colors = theme.colors) === null || _theme$colors === void 0 ? void 0 : _theme$colors.text;\n const alphaTextColor = color(textColor).alpha(0.6).rgb().string();\n const spin = spinAnim.interpolate({\n inputRange: [0, 1],\n outputRange: ['0deg', '180deg']\n });\n const icon = sortDirection ? /*#__PURE__*/React.createElement(Animated.View, {\n style: [styles.icon, {\n transform: [{\n rotate: spin\n }]\n }]\n }, /*#__PURE__*/React.createElement(MaterialCommunityIcon, {\n name: \"arrow-up\",\n size: 16,\n color: textColor,\n direction: I18nManager.getConstants().isRTL ? 'rtl' : 'ltr'\n })) : null;\n return /*#__PURE__*/React.createElement(Pressable, _extends({\n disabled: !onPress,\n onPress: onPress\n }, rest, {\n style: [styles.container, numeric && styles.right, style]\n }), icon, /*#__PURE__*/React.createElement(Text, {\n style: [styles.cell,\n // height must scale with numberOfLines\n {\n maxHeight: 24 * numberOfLines\n },\n // if numberOfLines causes wrap, center is lost. Align directly, sensitive to numeric and RTL\n numberOfLines > 1 ? numeric ? I18nManager.getConstants().isRTL ? styles.leftText : styles.rightText : styles.centerText : {}, sortDirection ? styles.sorted : {\n color: alphaTextColor\n }, textStyle],\n numberOfLines: numberOfLines,\n maxFontSizeMultiplier: maxFontSizeMultiplier\n }, children));\n};\nDataTableTitle.displayName = 'DataTable.Title';\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n flexDirection: 'row',\n alignContent: 'center',\n paddingVertical: 12\n },\n rightText: {\n textAlign: 'right'\n },\n leftText: {\n textAlign: 'left'\n },\n centerText: {\n textAlign: 'center'\n },\n right: {\n justifyContent: 'flex-end'\n },\n cell: {\n lineHeight: 24,\n fontSize: 12,\n fontWeight: '500',\n alignItems: 'center'\n },\n sorted: {\n marginLeft: 8\n },\n icon: {\n height: 24,\n justifyContent: 'center'\n }\n});\nexport default DataTableTitle;\n\n// @component-docs ignore-next-line\nexport { DataTableTitle };\n//# sourceMappingURL=DataTableTitle.js.map","import * as React from 'react';\nimport { Platform, StyleSheet } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport DialogActions from './DialogActions';\nimport DialogContent from './DialogContent';\nimport DialogIcon from './DialogIcon';\nimport DialogScrollArea from './DialogScrollArea';\nimport DialogTitle from './DialogTitle';\nimport { useInternalTheme } from '../../core/theming';\nimport overlay from '../../styles/overlay';\nimport Modal from '../Modal';\nconst DIALOG_ELEVATION = 24;\n\n/**\n * Dialogs inform users about a specific task and may contain critical information, require decisions, or involve multiple tasks.\n * To render the `Dialog` above other components, you'll need to wrap it with the [`Portal`](../../Portal) component.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { View } from 'react-native';\n * import { Button, Dialog, Portal, PaperProvider, Text } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [visible, setVisible] = React.useState(false);\n *\n * const showDialog = () => setVisible(true);\n *\n * const hideDialog = () => setVisible(false);\n *\n * return (\n * \n * \n * \n * \n * \n * Alert\n * \n * This is simple dialog\n * \n * \n * \n * \n * \n * \n * \n * \n * );\n * };\n *\n * export default MyComponent;\n * ```\n */\nconst Dialog = _ref => {\n let {\n children,\n dismissable = true,\n dismissableBackButton = dismissable,\n onDismiss,\n visible = false,\n style,\n theme: themeOverrides,\n testID\n } = _ref;\n const {\n right,\n left\n } = useSafeAreaInsets();\n const theme = useInternalTheme(themeOverrides);\n const {\n isV3,\n dark,\n mode,\n colors,\n roundness\n } = theme;\n const borderRadius = (isV3 ? 7 : 1) * roundness;\n const backgroundColorV2 = dark && mode === 'adaptive' ? overlay(DIALOG_ELEVATION, colors === null || colors === void 0 ? void 0 : colors.surface) : colors === null || colors === void 0 ? void 0 : colors.surface;\n const backgroundColor = isV3 ? theme.colors.elevation.level3 : backgroundColorV2;\n return /*#__PURE__*/React.createElement(Modal, {\n dismissable: dismissable,\n dismissableBackButton: dismissableBackButton,\n onDismiss: onDismiss,\n visible: visible,\n contentContainerStyle: [{\n borderRadius,\n backgroundColor,\n marginHorizontal: Math.max(left, right, 26)\n }, styles.container, style],\n theme: theme,\n testID: testID\n }, React.Children.toArray(children).filter(child => child != null && typeof child !== 'boolean').map((child, i) => {\n if (isV3) {\n if (i === 0 && /*#__PURE__*/React.isValidElement(child)) {\n return /*#__PURE__*/React.cloneElement(child, {\n style: [{\n marginTop: 24\n }, child.props.style]\n });\n }\n }\n if (i === 0 && /*#__PURE__*/React.isValidElement(child) && child.type === DialogContent) {\n // Dialog content is the first item, so we add a top padding\n return /*#__PURE__*/React.cloneElement(child, {\n style: [{\n paddingTop: 24\n }, child.props.style]\n });\n }\n return child;\n }));\n};\n\n// @component ./DialogContent.tsx\nDialog.Content = DialogContent;\n// @component ./DialogActions.tsx\nDialog.Actions = DialogActions;\n// @component ./DialogTitle.tsx\nDialog.Title = DialogTitle;\n// @component ./DialogScrollArea.tsx\nDialog.ScrollArea = DialogScrollArea;\n// @component ./DialogIcon.tsx\nDialog.Icon = DialogIcon;\nconst styles = StyleSheet.create({\n container: {\n /**\n * This prevents the shadow from being clipped on Android since Android\n * doesn't support `overflow: visible`.\n * One downside for this fix is that it will disable clicks on the area\n * of the shadow around the dialog, consequently, if you click around the\n * dialog (44 pixel from the top and bottom) it won't be dismissed.\n */\n marginVertical: Platform.OS === 'android' ? 44 : 0,\n elevation: DIALOG_ELEVATION,\n justifyContent: 'flex-start'\n }\n});\nexport default Dialog;\n//# sourceMappingURL=Dialog.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport { useInternalTheme } from '../../core/theming';\n/**\n * A component to show a list of actions in a Dialog.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Button, Dialog, Portal } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [visible, setVisible] = React.useState(false);\n *\n * const hideDialog = () => setVisible(false);\n *\n * return (\n * \n * \n * \n * \n * \n * \n * \n * \n * );\n * };\n *\n * export default MyComponent;\n * ```\n */\nconst DialogActions = props => {\n const {\n isV3\n } = useInternalTheme(props.theme);\n const actionsLength = React.Children.toArray(props.children).length;\n return /*#__PURE__*/React.createElement(View, _extends({}, props, {\n style: [isV3 ? styles.v3Container : styles.container, props.style]\n }), React.Children.map(props.children, (child, i) => /*#__PURE__*/React.isValidElement(child) ? /*#__PURE__*/React.cloneElement(child, {\n compact: true,\n uppercase: !isV3,\n style: [isV3 && {\n marginRight: i + 1 === actionsLength ? 0 : 8\n }, child.props.style]\n }) : child));\n};\nDialogActions.displayName = 'Dialog.Actions';\nconst styles = StyleSheet.create({\n container: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-end',\n padding: 8\n },\n v3Container: {\n flexDirection: 'row',\n flexGrow: 1,\n alignItems: 'center',\n justifyContent: 'flex-end',\n paddingBottom: 24,\n paddingHorizontal: 24\n }\n});\nexport default DialogActions;\n//# sourceMappingURL=DialogActions.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { View, StyleSheet } from 'react-native';\n/**\n * A component to show content in a Dialog.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Dialog, Portal, Text } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [visible, setVisible] = React.useState(false);\n *\n * const hideDialog = () => setVisible(false);\n *\n * return (\n * \n * \n * \n * This is simple dialog\n * \n * \n * \n * );\n * };\n *\n * export default MyComponent;\n * ```\n */\nconst DialogContent = props => /*#__PURE__*/React.createElement(View, _extends({}, props, {\n style: [styles.container, props.style]\n}), props.children);\nDialogContent.displayName = 'Dialog.Content';\nconst styles = StyleSheet.create({\n container: {\n paddingBottom: 24,\n paddingHorizontal: 24\n }\n});\nexport default DialogContent;\n//# sourceMappingURL=DialogContent.js.map","import * as React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport { useInternalTheme } from '../../core/theming';\nimport Icon from '../Icon';\n/**\n * @supported Available in v5.x with theme version 3\n * A component to show an icon in a Dialog.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { StyleSheet } from 'react-native';\n * import { Dialog, Portal, Text } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [visible, setVisible] = React.useState(false);\n *\n * const hideDialog = () => setVisible(false);\n *\n * return (\n * \n * \n * \n * This is a title\n * \n * This is simple dialog\n * \n * \n * \n * );\n * };\n *\n * const styles = StyleSheet.create({\n * title: {\n * textAlign: 'center',\n * },\n * })\n *\n * export default MyComponent;\n * ```\n */\nconst DialogIcon = _ref => {\n let {\n size = 24,\n color,\n icon,\n theme: themeOverrides\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n if (!theme.isV3) {\n return null;\n }\n\n //@ts-ignore\n const iconColor = color || theme.colors.secondary;\n return /*#__PURE__*/React.createElement(View, {\n style: styles.wrapper\n }, /*#__PURE__*/React.createElement(Icon, {\n source: icon,\n color: iconColor,\n size: size\n }));\n};\nDialogIcon.displayName = 'Dialog.Icon';\nconst styles = StyleSheet.create({\n wrapper: {\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: 24\n }\n});\nexport default DialogIcon;\n\n// @component-docs ignore-next-line\nexport { DialogIcon };\n//# sourceMappingURL=DialogIcon.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport { useInternalTheme } from '../../core/theming';\n/**\n * A component to show a scrollable content in a Dialog. The component only provides appropriate styling.\n * For the scrollable content you can use `ScrollView`, `FlatList` etc. depending on your requirement.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { ScrollView } from 'react-native';\n * import { Dialog, Portal, Text } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [visible, setVisible] = React.useState(false);\n *\n * const hideDialog = () => setVisible(false);\n *\n * return (\n * \n * \n * \n * \n * This is a scrollable area\n * \n * \n * \n * \n * );\n * };\n *\n * export default MyComponent;\n * ```\n */\nconst DialogScrollArea = props => {\n const theme = useInternalTheme(props.theme);\n const borderStyles = {\n borderColor: theme.isV3 ? theme.colors.surfaceVariant : 'rgba(0, 0, 0, .12)',\n borderTopWidth: theme.isV3 ? 1 : StyleSheet.hairlineWidth,\n borderBottomWidth: theme.isV3 ? 1 : StyleSheet.hairlineWidth\n };\n return /*#__PURE__*/React.createElement(View, _extends({}, props, {\n style: [styles.container, borderStyles, theme.isV3 && styles.v3Container, props.style]\n }), props.children);\n};\nDialogScrollArea.displayName = 'Dialog.ScrollArea';\nconst styles = StyleSheet.create({\n container: {\n paddingHorizontal: 24,\n flexGrow: 1,\n flexShrink: 1\n },\n v3Container: {\n marginBottom: 24\n }\n});\nexport default DialogScrollArea;\n//# sourceMappingURL=DialogScrollArea.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet } from 'react-native';\nimport { useInternalTheme } from '../../core/theming';\nimport Text from '../Typography/Text';\nimport Title from '../Typography/v2/Title';\n/**\n * A component to show a title in a Dialog.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Dialog, Portal, Text } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [visible, setVisible] = React.useState(false);\n *\n * const hideDialog = () => setVisible(false);\n *\n * return (\n * \n * \n * This is a title\n * \n * This is simple dialog\n * \n * \n * \n * );\n * };\n *\n * export default MyComponent;\n * ```\n */\nconst DialogTitle = _ref => {\n let {\n children,\n theme: themeOverrides,\n style,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const {\n isV3,\n colors,\n fonts\n } = theme;\n const TextComponent = isV3 ? Text : Title;\n const headerTextStyle = {\n color: isV3 ? colors.onSurface : colors === null || colors === void 0 ? void 0 : colors.text,\n ...(isV3 ? fonts.headlineSmall : {})\n };\n return /*#__PURE__*/React.createElement(TextComponent, _extends({\n variant: \"headlineSmall\",\n accessibilityRole: \"header\",\n style: [styles.text, isV3 && styles.v3Text, headerTextStyle, style]\n }, rest), children);\n};\nDialogTitle.displayName = 'Dialog.Title';\nconst styles = StyleSheet.create({\n text: {\n marginTop: 22,\n marginBottom: 18,\n marginHorizontal: 24\n },\n v3Text: {\n marginTop: 16,\n marginBottom: 16\n }\n});\nexport default DialogTitle;\n\n// @component-docs ignore-next-line\nexport { DialogTitle };\n//# sourceMappingURL=DialogTitle.js.map","import * as React from 'react';\nimport { Animated, Easing, StyleSheet, Pressable, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport useLatestCallback from 'use-latest-callback';\nimport Surface from './Surface';\nimport { useInternalTheme } from '../core/theming';\nimport { addEventListener } from '../utils/addEventListener';\nimport { BackHandler } from '../utils/BackHandler/BackHandler';\nimport useAnimatedValue from '../utils/useAnimatedValue';\nconst DEFAULT_DURATION = 220;\nconst AnimatedPressable = Animated.createAnimatedComponent(Pressable);\n\n/**\n * The Modal component is a simple way to present content above an enclosing view.\n * To render the `Modal` above other components, you'll need to wrap it with the [`Portal`](./Portal) component.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Modal, Portal, Text, Button, PaperProvider } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [visible, setVisible] = React.useState(false);\n *\n * const showModal = () => setVisible(true);\n * const hideModal = () => setVisible(false);\n * const containerStyle = {backgroundColor: 'white', padding: 20};\n *\n * return (\n * \n * \n * \n * Example Modal. Click outside this area to dismiss.\n * \n * \n * \n * \n * );\n * };\n *\n * export default MyComponent;\n * ```\n */\nfunction Modal(_ref) {\n var _theme$colors;\n let {\n dismissable = true,\n dismissableBackButton = dismissable,\n visible = false,\n overlayAccessibilityLabel = 'Close modal',\n onDismiss = () => {},\n children,\n contentContainerStyle,\n style,\n theme: themeOverrides,\n testID = 'modal'\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const visibleRef = React.useRef(visible);\n React.useEffect(() => {\n visibleRef.current = visible;\n });\n const onDismissCallback = useLatestCallback(onDismiss);\n const {\n scale\n } = theme.animation;\n const {\n top,\n bottom\n } = useSafeAreaInsets();\n const opacity = useAnimatedValue(visible ? 1 : 0);\n const [rendered, setRendered] = React.useState(visible);\n if (visible && !rendered) {\n setRendered(true);\n }\n const showModal = React.useCallback(() => {\n Animated.timing(opacity, {\n toValue: 1,\n duration: scale * DEFAULT_DURATION,\n easing: Easing.out(Easing.cubic),\n useNativeDriver: true\n }).start();\n }, [opacity, scale]);\n const hideModal = React.useCallback(() => {\n Animated.timing(opacity, {\n toValue: 0,\n duration: scale * DEFAULT_DURATION,\n easing: Easing.out(Easing.cubic),\n useNativeDriver: true\n }).start(_ref2 => {\n let {\n finished\n } = _ref2;\n if (!finished) {\n return;\n }\n if (visible) {\n onDismissCallback();\n }\n if (visibleRef.current) {\n showModal();\n } else {\n setRendered(false);\n }\n });\n }, [onDismissCallback, opacity, scale, showModal, visible]);\n React.useEffect(() => {\n if (!visible) {\n return undefined;\n }\n const onHardwareBackPress = () => {\n if (dismissable || dismissableBackButton) {\n hideModal();\n }\n return true;\n };\n const subscription = addEventListener(BackHandler, 'hardwareBackPress', onHardwareBackPress);\n return () => subscription.remove();\n }, [dismissable, dismissableBackButton, hideModal, visible]);\n const prevVisible = React.useRef(null);\n React.useEffect(() => {\n if (prevVisible.current !== visible) {\n if (visible) {\n showModal();\n } else {\n hideModal();\n }\n }\n prevVisible.current = visible;\n });\n if (!rendered) return null;\n return /*#__PURE__*/React.createElement(Animated.View, {\n pointerEvents: visible ? 'auto' : 'none',\n accessibilityViewIsModal: true,\n accessibilityLiveRegion: \"polite\",\n style: StyleSheet.absoluteFill,\n onAccessibilityEscape: hideModal,\n testID: testID\n }, /*#__PURE__*/React.createElement(AnimatedPressable, {\n accessibilityLabel: overlayAccessibilityLabel,\n accessibilityRole: \"button\",\n disabled: !dismissable,\n onPress: dismissable ? hideModal : undefined,\n importantForAccessibility: \"no\",\n style: [styles.backdrop, {\n backgroundColor: (_theme$colors = theme.colors) === null || _theme$colors === void 0 ? void 0 : _theme$colors.backdrop,\n opacity\n }],\n testID: `${testID}-backdrop`\n }), /*#__PURE__*/React.createElement(View, {\n style: [styles.wrapper, {\n marginTop: top,\n marginBottom: bottom\n }, style],\n pointerEvents: \"box-none\",\n testID: `${testID}-wrapper`\n }, /*#__PURE__*/React.createElement(Surface, {\n testID: `${testID}-surface`,\n theme: theme,\n style: [{\n opacity\n }, styles.content, contentContainerStyle]\n }, children)));\n}\nexport default Modal;\nconst styles = StyleSheet.create({\n backdrop: {\n flex: 1\n },\n wrapper: {\n ...StyleSheet.absoluteFillObject,\n justifyContent: 'center'\n },\n // eslint-disable-next-line react-native/no-color-literals\n content: {\n backgroundColor: 'transparent',\n justifyContent: 'center'\n }\n});\n//# sourceMappingURL=Modal.js.map","import FABComponent from './FAB';\nimport FABGroup from './FABGroup';\nconst FAB = Object.assign(\n// @component ./FAB.tsx\nFABComponent, {\n // @component ./FABGroup.tsx\n Group: FABGroup\n});\nexport default FAB;\n//# sourceMappingURL=index.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Animated, StyleSheet, View } from 'react-native';\nimport { getExtendedFabStyle, getFABColors, getFabStyle } from './utils';\nimport { useInternalTheme } from '../../core/theming';\nimport { forwardRef } from '../../utils/forwardRef';\nimport ActivityIndicator from '../ActivityIndicator';\nimport CrossFadeIcon from '../CrossFadeIcon';\nimport Icon from '../Icon';\nimport Surface from '../Surface';\nimport TouchableRipple from '../TouchableRipple/TouchableRipple';\nimport Text from '../Typography/Text';\n/**\n * A floating action button represents the primary action on a screen. It appears in front of all screen content.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { StyleSheet } from 'react-native';\n * import { FAB } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * console.log('Pressed')}\n * />\n * );\n *\n * const styles = StyleSheet.create({\n * fab: {\n * position: 'absolute',\n * margin: 16,\n * right: 0,\n * bottom: 0,\n * },\n * })\n *\n * export default MyComponent;\n * ```\n */\nconst FAB = forwardRef((_ref, ref) => {\n let {\n icon,\n label,\n background,\n accessibilityLabel = label,\n accessibilityState,\n animated = true,\n color: customColor,\n rippleColor: customRippleColor,\n disabled,\n onPress,\n onLongPress,\n delayLongPress,\n theme: themeOverrides,\n style,\n visible = true,\n uppercase: uppercaseProp,\n loading,\n testID = 'fab',\n size = 'medium',\n customSize,\n mode = 'elevated',\n variant = 'primary',\n labelMaxFontSizeMultiplier,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const uppercase = uppercaseProp ?? !theme.isV3;\n const {\n current: visibility\n } = React.useRef(new Animated.Value(visible ? 1 : 0));\n const {\n isV3,\n animation\n } = theme;\n const {\n scale\n } = animation;\n React.useEffect(() => {\n if (visible) {\n Animated.timing(visibility, {\n toValue: 1,\n duration: 200 * scale,\n useNativeDriver: true\n }).start();\n } else {\n Animated.timing(visibility, {\n toValue: 0,\n duration: 150 * scale,\n useNativeDriver: true\n }).start();\n }\n }, [visible, scale, visibility]);\n const IconComponent = animated ? CrossFadeIcon : Icon;\n const fabStyle = getFabStyle({\n customSize,\n size,\n theme\n });\n const {\n borderRadius = fabStyle.borderRadius,\n backgroundColor: customBackgroundColor\n } = StyleSheet.flatten(style) || {};\n const {\n backgroundColor,\n foregroundColor,\n rippleColor\n } = getFABColors({\n theme,\n variant,\n disabled,\n customColor,\n customBackgroundColor,\n customRippleColor\n });\n const isLargeSize = size === 'large';\n const isFlatMode = mode === 'flat';\n const iconSize = isLargeSize ? 36 : 24;\n const loadingIndicatorSize = isLargeSize ? 24 : 18;\n const font = isV3 ? theme.fonts.labelLarge : theme.fonts.medium;\n const extendedStyle = getExtendedFabStyle({\n customSize,\n theme\n });\n const textStyle = {\n color: foregroundColor,\n ...font\n };\n const md3Elevation = isFlatMode || disabled ? 0 : 3;\n const newAccessibilityState = {\n ...accessibilityState,\n disabled\n };\n return /*#__PURE__*/React.createElement(Surface, _extends({\n ref: ref\n }, rest, {\n style: [{\n borderRadius,\n backgroundColor,\n opacity: visibility,\n transform: [{\n scale: visibility\n }]\n }, !isV3 && styles.elevated, !isV3 && disabled && styles.disabled, style],\n pointerEvents: visible ? 'auto' : 'none',\n testID: `${testID}-container`\n }, isV3 && {\n elevation: md3Elevation\n }), /*#__PURE__*/React.createElement(TouchableRipple, _extends({\n borderless: true,\n background: background,\n onPress: onPress,\n onLongPress: onLongPress,\n delayLongPress: delayLongPress,\n rippleColor: rippleColor,\n disabled: disabled,\n accessibilityLabel: accessibilityLabel,\n accessibilityRole: \"button\",\n accessibilityState: newAccessibilityState,\n testID: testID,\n style: {\n borderRadius\n }\n }, rest), /*#__PURE__*/React.createElement(View, {\n style: [styles.content, label ? extendedStyle : fabStyle],\n testID: `${testID}-content`,\n pointerEvents: \"none\"\n }, icon && loading !== true ? /*#__PURE__*/React.createElement(IconComponent, {\n source: icon,\n size: customSize ? customSize / 2 : iconSize,\n color: foregroundColor\n }) : null, loading ? /*#__PURE__*/React.createElement(ActivityIndicator, {\n size: customSize ? customSize / 2 : loadingIndicatorSize,\n color: foregroundColor\n }) : null, label ? /*#__PURE__*/React.createElement(Text, {\n variant: \"labelLarge\",\n selectable: false,\n testID: `${testID}-text`,\n style: [styles.label, uppercase && styles.uppercaseLabel, textStyle],\n maxFontSizeMultiplier: labelMaxFontSizeMultiplier\n }, label) : null)));\n});\nconst styles = StyleSheet.create({\n elevated: {\n elevation: 6\n },\n content: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center'\n },\n label: {\n marginHorizontal: 8\n },\n uppercaseLabel: {\n textTransform: 'uppercase'\n },\n disabled: {\n elevation: 0\n }\n});\nexport default FAB;\n\n// @component-docs ignore-next-line\nexport { FAB };\n//# sourceMappingURL=FAB.js.map","import * as React from 'react';\nimport { Animated, Pressable, StyleSheet, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport FAB from './FAB';\nimport { getFABGroupColors } from './utils';\nimport { useInternalTheme } from '../../core/theming';\nimport Card from '../Card/Card';\nimport Text from '../Typography/Text';\nconst AnimatedPressable = Animated.createAnimatedComponent(Pressable);\n/**\n * A component to display a stack of FABs with related actions in a speed dial.\n * To render the group above other components, you'll need to wrap it with the [`Portal`](../Portal) component.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { FAB, Portal, PaperProvider } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [state, setState] = React.useState({ open: false });\n *\n * const onStateChange = ({ open }) => setState({ open });\n *\n * const { open } = state;\n *\n * return (\n * \n * \n * console.log('Pressed add') },\n * {\n * icon: 'star',\n * label: 'Star',\n * onPress: () => console.log('Pressed star'),\n * },\n * {\n * icon: 'email',\n * label: 'Email',\n * onPress: () => console.log('Pressed email'),\n * },\n * {\n * icon: 'bell',\n * label: 'Remind',\n * onPress: () => console.log('Pressed notifications'),\n * },\n * ]}\n * onStateChange={onStateChange}\n * onPress={() => {\n * if (open) {\n * // do something if the speed dial is open\n * }\n * }}\n * />\n * \n * \n * );\n * };\n *\n * export default MyComponent;\n * ```\n */\nconst FABGroup = _ref => {\n let {\n actions,\n icon,\n open,\n onPress,\n onLongPress,\n toggleStackOnLongPress,\n accessibilityLabel,\n theme: themeOverrides,\n style,\n fabStyle,\n visible,\n label,\n testID,\n onStateChange,\n color: colorProp,\n delayLongPress = 200,\n variant = 'primary',\n enableLongPressWhenStackOpened = false,\n backdropColor: customBackdropColor,\n rippleColor\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const {\n current: backdrop\n } = React.useRef(new Animated.Value(0));\n const animations = React.useRef(actions.map(() => new Animated.Value(open ? 1 : 0)));\n const [prevActions, setPrevActions] = React.useState(null);\n const {\n scale\n } = theme.animation;\n const {\n isV3\n } = theme;\n React.useEffect(() => {\n if (open) {\n Animated.parallel([Animated.timing(backdrop, {\n toValue: 1,\n duration: 250 * scale,\n useNativeDriver: true\n }), Animated.stagger(isV3 ? 15 : 50 * scale, animations.current.map(animation => Animated.timing(animation, {\n toValue: 1,\n duration: 150 * scale,\n useNativeDriver: true\n })).reverse())]).start();\n } else {\n Animated.parallel([Animated.timing(backdrop, {\n toValue: 0,\n duration: 200 * scale,\n useNativeDriver: true\n }), ...animations.current.map(animation => Animated.timing(animation, {\n toValue: 0,\n duration: 150 * scale,\n useNativeDriver: true\n }))]).start();\n }\n }, [open, actions, backdrop, scale, isV3]);\n const close = () => onStateChange({\n open: false\n });\n const toggle = () => onStateChange({\n open: !open\n });\n const {\n labelColor,\n backdropColor,\n stackedFABBackgroundColor\n } = getFABGroupColors({\n theme,\n customBackdropColor\n });\n const backdropOpacity = open ? backdrop.interpolate({\n inputRange: [0, 0.5, 1],\n outputRange: [0, 1, 1]\n }) : backdrop;\n const opacities = animations.current;\n const scales = opacities.map(opacity => open ? opacity.interpolate({\n inputRange: [0, 1],\n outputRange: [0.5, 1]\n }) : 1);\n const translations = opacities.map(opacity => open ? opacity.interpolate({\n inputRange: [0, 1],\n outputRange: [24, -8]\n }) : -8);\n const labelTranslations = opacities.map(opacity => open ? opacity.interpolate({\n inputRange: [0, 1],\n outputRange: [8, -8]\n }) : -8);\n const {\n top,\n bottom,\n right,\n left\n } = useSafeAreaInsets();\n const containerPaddings = {\n paddingBottom: bottom,\n paddingRight: right,\n paddingLeft: left,\n paddingTop: top\n };\n if (actions.length !== (prevActions === null || prevActions === void 0 ? void 0 : prevActions.length)) {\n animations.current = actions.map((_, i) => animations.current[i] || new Animated.Value(open ? 1 : 0));\n setPrevActions(actions);\n }\n return /*#__PURE__*/React.createElement(View, {\n pointerEvents: \"box-none\",\n style: [styles.container, containerPaddings, style]\n }, /*#__PURE__*/React.createElement(AnimatedPressable, {\n accessibilityRole: \"button\",\n onPress: close,\n pointerEvents: open ? 'auto' : 'none',\n style: [styles.backdrop, {\n opacity: backdropOpacity,\n backgroundColor: backdropColor\n }]\n }), /*#__PURE__*/React.createElement(View, {\n pointerEvents: \"box-none\",\n style: styles.safeArea\n }, /*#__PURE__*/React.createElement(View, {\n pointerEvents: open ? 'box-none' : 'none'\n }, actions.map((it, i) => {\n const labelTextStyle = {\n color: it.labelTextColor ?? labelColor,\n ...(isV3 ? theme.fonts.titleMedium : {})\n };\n const marginHorizontal = typeof it.size === 'undefined' || it.size === 'small' ? 24 : 16;\n const accessibilityLabel = typeof it.accessibilityLabel !== 'undefined' ? it.accessibilityLabel : it.label;\n const size = typeof it.size !== 'undefined' ? it.size : 'small';\n return /*#__PURE__*/React.createElement(View, {\n key: i // eslint-disable-line react/no-array-index-key\n ,\n style: [styles.item, {\n marginHorizontal\n }],\n pointerEvents: open ? 'box-none' : 'none',\n accessibilityRole: \"button\",\n importantForAccessibility: \"yes\",\n accessible: true,\n accessibilityLabel: accessibilityLabel\n }, it.label && /*#__PURE__*/React.createElement(View, null, /*#__PURE__*/React.createElement(Card, {\n mode: isV3 ? 'contained' : 'elevated',\n onPress: e => {\n it.onPress(e);\n close();\n },\n accessibilityHint: it.accessibilityHint,\n importantForAccessibility: \"no-hide-descendants\",\n accessibilityElementsHidden: true,\n style: [styles.containerStyle, {\n transform: [isV3 ? {\n translateY: labelTranslations[i]\n } : {\n scale: scales[i]\n }],\n opacity: opacities[i]\n }, isV3 && styles.v3ContainerStyle, it.containerStyle]\n }, /*#__PURE__*/React.createElement(Text, {\n variant: \"titleMedium\",\n importantForAccessibility: \"no-hide-descendants\",\n accessibilityElementsHidden: true,\n style: [labelTextStyle, it.labelStyle],\n maxFontSizeMultiplier: it.labelMaxFontSizeMultiplier\n }, it.label))), /*#__PURE__*/React.createElement(FAB, {\n size: size,\n icon: it.icon,\n color: it.color,\n style: [{\n transform: [{\n scale: scales[i]\n }],\n opacity: opacities[i],\n backgroundColor: stackedFABBackgroundColor\n }, isV3 && {\n transform: [{\n translateY: translations[i]\n }]\n }, it.style],\n accessibilityElementsHidden: true,\n theme: theme,\n onPress: e => {\n it.onPress(e);\n close();\n },\n importantForAccessibility: \"no-hide-descendants\",\n testID: it.testID,\n visible: open,\n rippleColor: it.rippleColor\n }));\n })), /*#__PURE__*/React.createElement(FAB, {\n onPress: e => {\n onPress === null || onPress === void 0 ? void 0 : onPress(e);\n if (!toggleStackOnLongPress || open) {\n toggle();\n }\n },\n onLongPress: e => {\n if (!open || enableLongPressWhenStackOpened) {\n onLongPress === null || onLongPress === void 0 ? void 0 : onLongPress(e);\n if (toggleStackOnLongPress) {\n toggle();\n }\n }\n },\n delayLongPress: delayLongPress,\n icon: icon,\n color: colorProp,\n accessibilityLabel: accessibilityLabel,\n accessibilityRole: \"button\",\n accessibilityState: {\n expanded: open\n },\n style: [styles.fab, fabStyle],\n theme: theme,\n visible: visible,\n label: label,\n testID: testID,\n variant: variant,\n rippleColor: rippleColor\n })));\n};\nFABGroup.displayName = 'FAB.Group';\nexport default FABGroup;\n\n// @component-docs ignore-next-line\nexport { FABGroup };\nconst styles = StyleSheet.create({\n safeArea: {\n alignItems: 'flex-end'\n },\n container: {\n ...StyleSheet.absoluteFillObject,\n justifyContent: 'flex-end'\n },\n fab: {\n marginHorizontal: 16,\n marginBottom: 16,\n marginTop: 0\n },\n backdrop: {\n ...StyleSheet.absoluteFillObject\n },\n containerStyle: {\n borderRadius: 5,\n paddingHorizontal: 12,\n paddingVertical: 6,\n marginVertical: 8,\n marginHorizontal: 16,\n elevation: 2\n },\n item: {\n marginBottom: 16,\n flexDirection: 'row',\n justifyContent: 'flex-end',\n alignItems: 'center'\n },\n // eslint-disable-next-line react-native/no-color-literals\n v3ContainerStyle: {\n backgroundColor: 'transparent',\n elevation: 0\n }\n});\n//# sourceMappingURL=FABGroup.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Animated, StyleSheet } from 'react-native';\nimport { getTextColor } from './utils';\nimport { useInternalTheme } from '../../core/theming';\nimport AnimatedText from '../Typography/AnimatedText';\n/**\n * Helper text is used in conjuction with input elements to provide additional hints for the user.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { View } from 'react-native';\n * import { HelperText, TextInput } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [text, setText] = React.useState('');\n *\n * const onChangeText = text => setText(text);\n *\n * const hasErrors = () => {\n * return !text.includes('@');\n * };\n *\n * return (\n * \n * \n * \n * Email address is invalid!\n * \n * \n * );\n * };\n *\n * export default MyComponent;\n * ```\n */\nconst HelperText = _ref => {\n let {\n style,\n type = 'info',\n visible = true,\n theme: themeOverrides,\n onLayout,\n padding = 'normal',\n disabled,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const {\n current: shown\n } = React.useRef(new Animated.Value(visible ? 1 : 0));\n let {\n current: textHeight\n } = React.useRef(0);\n const {\n scale\n } = theme.animation;\n const {\n maxFontSizeMultiplier = 1.5\n } = rest;\n React.useEffect(() => {\n if (visible) {\n // show text\n Animated.timing(shown, {\n toValue: 1,\n duration: 150 * scale,\n useNativeDriver: true\n }).start();\n } else {\n // hide text\n Animated.timing(shown, {\n toValue: 0,\n duration: 180 * scale,\n useNativeDriver: true\n }).start();\n }\n }, [visible, scale, shown]);\n const handleTextLayout = e => {\n onLayout === null || onLayout === void 0 ? void 0 : onLayout(e);\n textHeight = e.nativeEvent.layout.height;\n };\n const textColor = getTextColor({\n theme,\n disabled,\n type\n });\n return /*#__PURE__*/React.createElement(AnimatedText, _extends({\n onLayout: handleTextLayout,\n style: [styles.text, padding !== 'none' ? styles.padding : {}, {\n color: textColor,\n opacity: shown,\n transform: visible && type === 'error' ? [{\n translateY: shown.interpolate({\n inputRange: [0, 1],\n outputRange: [-textHeight / 2, 0]\n })\n }] : []\n }, style],\n maxFontSizeMultiplier: maxFontSizeMultiplier\n }, rest), rest.children);\n};\nconst styles = StyleSheet.create({\n text: {\n fontSize: 12,\n paddingVertical: 4\n },\n padding: {\n paddingHorizontal: 12\n }\n});\nexport default HelperText;\n//# sourceMappingURL=HelperText.js.map","import color from 'color';\nexport function getTextColor(_ref) {\n var _theme$colors;\n let {\n theme,\n disabled,\n type\n } = _ref;\n const {\n colors,\n dark\n } = theme;\n if (type === 'error') {\n return colors === null || colors === void 0 ? void 0 : colors.error;\n }\n if (theme.isV3) {\n if (disabled) {\n return theme.colors.onSurfaceDisabled;\n } else {\n return theme.colors.onSurfaceVariant;\n }\n }\n return color(theme === null || theme === void 0 || (_theme$colors = theme.colors) === null || _theme$colors === void 0 ? void 0 : _theme$colors.text).alpha(dark ? 0.7 : 0.54).rgb().string();\n}\n//# sourceMappingURL=utils.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Animated, I18nManager, Platform, StyleSheet, View } from 'react-native';\nimport setColor from 'color';\nimport { useInternalTheme } from '../core/theming';\nconst INDETERMINATE_DURATION = 2000;\nconst INDETERMINATE_MAX_WIDTH = 0.6;\nconst {\n isRTL\n} = I18nManager;\n\n/**\n * Progress bar is an indicator used to present progress of some activity in the app.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { ProgressBar, MD3Colors } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * );\n *\n * export default MyComponent;\n * ```\n */\nconst ProgressBar = _ref => {\n var _theme$colors;\n let {\n color,\n indeterminate,\n progress = 0,\n visible = true,\n theme: themeOverrides,\n animatedValue,\n style,\n fillStyle,\n testID = 'progress-bar',\n ...rest\n } = _ref;\n const isWeb = Platform.OS === 'web';\n const theme = useInternalTheme(themeOverrides);\n const {\n current: timer\n } = React.useRef(new Animated.Value(0));\n const {\n current: fade\n } = React.useRef(new Animated.Value(0));\n const passedAnimatedValue = React.useRef(animatedValue);\n const [width, setWidth] = React.useState(0);\n const [prevWidth, setPrevWidth] = React.useState(0);\n const indeterminateAnimation = React.useRef(null);\n const {\n scale\n } = theme.animation;\n React.useEffect(() => {\n passedAnimatedValue.current = animatedValue;\n });\n const startAnimation = React.useCallback(() => {\n // Show progress bar\n Animated.timing(fade, {\n duration: 200 * scale,\n toValue: 1,\n useNativeDriver: true,\n isInteraction: false\n }).start();\n\n /**\n * We shouldn't add @param animatedValue to the\n * deps array, to avoid the unnecessary loop.\n * We can only check if the prop is passed initially,\n * and we do early return.\n */\n const externalAnimation = typeof passedAnimatedValue.current !== 'undefined' && passedAnimatedValue.current >= 0;\n if (externalAnimation) {\n return;\n }\n\n // Animate progress bar\n if (indeterminate) {\n if (!indeterminateAnimation.current) {\n indeterminateAnimation.current = Animated.timing(timer, {\n duration: INDETERMINATE_DURATION,\n toValue: 1,\n // Animated.loop does not work if useNativeDriver is true on web\n useNativeDriver: !isWeb,\n isInteraction: false\n });\n }\n\n // Reset timer to the beginning\n timer.setValue(0);\n Animated.loop(indeterminateAnimation.current).start();\n } else {\n Animated.timing(timer, {\n duration: 200 * scale,\n toValue: progress ? progress : 0,\n useNativeDriver: true,\n isInteraction: false\n }).start();\n }\n }, [fade, scale, indeterminate, timer, progress, isWeb]);\n const stopAnimation = React.useCallback(() => {\n // Stop indeterminate animation\n if (indeterminateAnimation.current) {\n indeterminateAnimation.current.stop();\n }\n Animated.timing(fade, {\n duration: 200 * scale,\n toValue: 0,\n useNativeDriver: true,\n isInteraction: false\n }).start();\n }, [fade, scale]);\n React.useEffect(() => {\n if (visible) startAnimation();else stopAnimation();\n }, [visible, startAnimation, stopAnimation]);\n React.useEffect(() => {\n if (animatedValue && animatedValue >= 0) {\n timer.setValue(animatedValue);\n }\n }, [animatedValue, timer]);\n React.useEffect(() => {\n // Start animation the very first time when previously the width was unclear\n if (visible && prevWidth === 0) {\n startAnimation();\n }\n }, [prevWidth, startAnimation, visible]);\n const onLayout = event => {\n setPrevWidth(width);\n setWidth(event.nativeEvent.layout.width);\n };\n const tintColor = color || ((_theme$colors = theme.colors) === null || _theme$colors === void 0 ? void 0 : _theme$colors.primary);\n const trackTintColor = theme.isV3 ? theme.colors.surfaceVariant : setColor(tintColor).alpha(0.38).rgb().string();\n return /*#__PURE__*/React.createElement(View, _extends({\n onLayout: onLayout\n }, rest, {\n accessible: true,\n accessibilityRole: \"progressbar\",\n accessibilityState: {\n busy: visible\n },\n accessibilityValue: indeterminate ? {} : {\n min: 0,\n max: 100,\n now: progress * 100\n },\n style: isWeb && styles.webContainer,\n testID: testID\n }), /*#__PURE__*/React.createElement(Animated.View, {\n style: [styles.container, {\n backgroundColor: trackTintColor,\n opacity: fade\n }, style]\n }, width ? /*#__PURE__*/React.createElement(Animated.View, {\n testID: `${testID}-fill`,\n style: [styles.progressBar, {\n width,\n backgroundColor: tintColor,\n transform: [{\n translateX: timer.interpolate(indeterminate ? {\n inputRange: [0, 0.5, 1],\n outputRange: [(isRTL ? 1 : -1) * 0.5 * width, (isRTL ? 1 : -1) * 0.5 * INDETERMINATE_MAX_WIDTH * width, (isRTL ? -1 : 1) * 0.7 * width]\n } : {\n inputRange: [0, 1],\n outputRange: [(isRTL ? 1 : -1) * 0.5 * width, 0]\n })\n }, {\n // Workaround for workaround for https://github.com/facebook/react-native/issues/6278\n scaleX: timer.interpolate(indeterminate ? {\n inputRange: [0, 0.5, 1],\n outputRange: [0.0001, INDETERMINATE_MAX_WIDTH, 0.0001]\n } : {\n inputRange: [0, 1],\n outputRange: [0.0001, 1]\n })\n }]\n }, fillStyle]\n }) : null));\n};\nconst styles = StyleSheet.create({\n container: {\n height: 4,\n overflow: 'hidden'\n },\n webContainer: {\n width: '100%',\n height: '100%'\n },\n progressBar: {\n flex: 1\n }\n});\nexport default ProgressBar;\n//# sourceMappingURL=ProgressBar.js.map","import RadioButtonComponent from './RadioButton';\nimport RadioButtonAndroid from './RadioButtonAndroid';\nimport RadioButtonGroup from './RadioButtonGroup';\nimport RadioButtonIOS from './RadioButtonIOS';\nimport RadioButtonItem from './RadioButtonItem';\nconst RadioButton = Object.assign(\n// @component ./RadioButton.tsx\nRadioButtonComponent, {\n // @component ./RadioButtonGroup.tsx\n Group: RadioButtonGroup,\n // @component ./RadioButtonAndroid.tsx\n Android: RadioButtonAndroid,\n // @component ./RadioButtonIOS.tsx\n IOS: RadioButtonIOS,\n // @component ./RadioButtonItem.tsx\n Item: RadioButtonItem\n});\nexport default RadioButton;\n//# sourceMappingURL=index.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Platform } from 'react-native';\nimport RadioButtonAndroid from './RadioButtonAndroid';\nimport RadioButtonIOS from './RadioButtonIOS';\nimport { useInternalTheme } from '../../core/theming';\n/**\n * Radio buttons allow the selection a single option from a set.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { View } from 'react-native';\n * import { RadioButton } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [checked, setChecked] = React.useState('first');\n *\n * return (\n * \n * setChecked('first')}\n * />\n * setChecked('second')}\n * />\n * \n * );\n * };\n *\n * export default MyComponent;\n * ```\n */\nconst RadioButton = _ref => {\n let {\n theme: themeOverrides,\n ...props\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const Button = Platform.select({\n default: RadioButtonAndroid,\n ios: RadioButtonIOS\n });\n return /*#__PURE__*/React.createElement(Button, _extends({}, props, {\n theme: theme\n }));\n};\nexport default RadioButton;\n//# sourceMappingURL=RadioButton.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Animated, StyleSheet, View } from 'react-native';\nimport { RadioButtonContext } from './RadioButtonGroup';\nimport { handlePress, isChecked } from './utils';\nimport { useInternalTheme } from '../../core/theming';\nimport { getAndroidSelectionControlColor } from '../Checkbox/utils';\nimport TouchableRipple from '../TouchableRipple/TouchableRipple';\nconst BORDER_WIDTH = 2;\n\n/**\n * Radio buttons allow the selection a single option from a set.\n * This component follows platform guidelines for Android, but can be used\n * on any platform.\n *\n * @extends TouchableRipple props https://callstack.github.io/react-native-paper/docs/components/TouchableRipple\n */\nconst RadioButtonAndroid = _ref => {\n let {\n disabled,\n onPress,\n theme: themeOverrides,\n value,\n status,\n testID,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const {\n current: borderAnim\n } = React.useRef(new Animated.Value(BORDER_WIDTH));\n const {\n current: radioAnim\n } = React.useRef(new Animated.Value(1));\n const isFirstRendering = React.useRef(true);\n const {\n scale\n } = theme.animation;\n React.useEffect(() => {\n // Do not run animation on very first rendering\n if (isFirstRendering.current) {\n isFirstRendering.current = false;\n return;\n }\n if (status === 'checked') {\n radioAnim.setValue(1.2);\n Animated.timing(radioAnim, {\n toValue: 1,\n duration: 150 * scale,\n useNativeDriver: true\n }).start();\n } else {\n borderAnim.setValue(10);\n Animated.timing(borderAnim, {\n toValue: BORDER_WIDTH,\n duration: 150 * scale,\n useNativeDriver: false\n }).start();\n }\n }, [status, borderAnim, radioAnim, scale]);\n return /*#__PURE__*/React.createElement(RadioButtonContext.Consumer, null, context => {\n const checked = isChecked({\n contextValue: context === null || context === void 0 ? void 0 : context.value,\n status,\n value\n }) === 'checked';\n const {\n rippleColor,\n selectionControlColor\n } = getAndroidSelectionControlColor({\n theme,\n disabled,\n checked,\n customColor: rest.color,\n customUncheckedColor: rest.uncheckedColor\n });\n return /*#__PURE__*/React.createElement(TouchableRipple, _extends({}, rest, {\n borderless: true,\n rippleColor: rippleColor,\n onPress: disabled ? undefined : event => {\n handlePress({\n onPress,\n onValueChange: context === null || context === void 0 ? void 0 : context.onValueChange,\n value,\n event\n });\n },\n accessibilityRole: \"radio\",\n accessibilityState: {\n disabled,\n checked\n },\n accessibilityLiveRegion: \"polite\",\n style: styles.container,\n testID: testID,\n theme: theme\n }), /*#__PURE__*/React.createElement(Animated.View, {\n style: [styles.radio, {\n borderColor: selectionControlColor,\n borderWidth: borderAnim\n }]\n }, checked ? /*#__PURE__*/React.createElement(View, {\n style: [StyleSheet.absoluteFill, styles.radioContainer]\n }, /*#__PURE__*/React.createElement(Animated.View, {\n style: [styles.dot, {\n backgroundColor: selectionControlColor,\n transform: [{\n scale: radioAnim\n }]\n }]\n })) : null));\n });\n};\nRadioButtonAndroid.displayName = 'RadioButton.Android';\nconst styles = StyleSheet.create({\n container: {\n borderRadius: 18\n },\n radioContainer: {\n alignItems: 'center',\n justifyContent: 'center'\n },\n radio: {\n height: 20,\n width: 20,\n borderRadius: 10,\n margin: 8\n },\n dot: {\n height: 10,\n width: 10,\n borderRadius: 5\n }\n});\nexport default RadioButtonAndroid;\n\n// @component-docs ignore-next-line\nexport { RadioButtonAndroid };\n//# sourceMappingURL=RadioButtonAndroid.js.map","import * as React from 'react';\nimport { View } from 'react-native';\nexport const RadioButtonContext = /*#__PURE__*/React.createContext(null);\n\n/**\n * Radio button group allows to control a group of radio buttons.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { View } from 'react-native';\n * import { RadioButton, Text } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [value, setValue] = React.useState('first');\n *\n * return (\n * setValue(newValue)} value={value}>\n * \n * First\n * \n * \n * \n * Second\n * \n * \n * \n * );\n * };\n *\n * export default MyComponent;\n *```\n */\nconst RadioButtonGroup = _ref => {\n let {\n value,\n onValueChange,\n children\n } = _ref;\n return /*#__PURE__*/React.createElement(RadioButtonContext.Provider, {\n value: {\n value,\n onValueChange\n }\n }, /*#__PURE__*/React.createElement(View, {\n accessibilityRole: \"radiogroup\"\n }, children));\n};\nRadioButtonGroup.displayName = 'RadioButton.Group';\nexport default RadioButtonGroup;\n\n// @component-docs ignore-next-line\nexport { RadioButtonGroup };\n//# sourceMappingURL=RadioButtonGroup.js.map","export const handlePress = _ref => {\n let {\n onPress,\n value,\n onValueChange,\n event\n } = _ref;\n if (onPress && onValueChange) {\n console.warn(`onPress in the scope of RadioButtonGroup will not be executed, use onValueChange instead`);\n }\n onValueChange ? onValueChange(value) : onPress === null || onPress === void 0 ? void 0 : onPress(event);\n};\nexport const isChecked = _ref2 => {\n let {\n value,\n status,\n contextValue\n } = _ref2;\n if (contextValue !== undefined && contextValue !== null) {\n return contextValue === value ? 'checked' : 'unchecked';\n } else {\n return status;\n }\n};\n//# sourceMappingURL=utils.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport { RadioButtonContext } from './RadioButtonGroup';\nimport { handlePress, isChecked } from './utils';\nimport { useInternalTheme } from '../../core/theming';\nimport { getSelectionControlIOSColor } from '../Checkbox/utils';\nimport MaterialCommunityIcon from '../MaterialCommunityIcon';\nimport TouchableRipple from '../TouchableRipple/TouchableRipple';\n/**\n * Radio buttons allow the selection a single option from a set.\n * This component follows platform guidelines for iOS, but can be used\n * on any platform.\n *\n * @extends TouchableRipple props https://callstack.github.io/react-native-paper/docs/components/TouchableRipple\n */\nconst RadioButtonIOS = _ref => {\n let {\n disabled,\n onPress,\n theme: themeOverrides,\n status,\n value,\n testID,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n return /*#__PURE__*/React.createElement(RadioButtonContext.Consumer, null, context => {\n const checked = isChecked({\n contextValue: context === null || context === void 0 ? void 0 : context.value,\n status,\n value\n }) === 'checked';\n const {\n checkedColor,\n rippleColor\n } = getSelectionControlIOSColor({\n theme,\n disabled,\n customColor: rest.color\n });\n const opacity = checked ? 1 : 0;\n return /*#__PURE__*/React.createElement(TouchableRipple, _extends({}, rest, {\n borderless: true,\n rippleColor: rippleColor,\n onPress: disabled ? undefined : event => {\n handlePress({\n onPress,\n value,\n onValueChange: context === null || context === void 0 ? void 0 : context.onValueChange,\n event\n });\n },\n accessibilityRole: \"radio\",\n accessibilityState: {\n disabled,\n checked\n },\n accessibilityLiveRegion: \"polite\",\n style: styles.container,\n testID: testID,\n theme: theme\n }), /*#__PURE__*/React.createElement(View, {\n style: {\n opacity\n }\n }, /*#__PURE__*/React.createElement(MaterialCommunityIcon, {\n allowFontScaling: false,\n name: \"check\",\n size: 24,\n color: checkedColor,\n direction: \"ltr\"\n })));\n });\n};\nRadioButtonIOS.displayName = 'RadioButton.IOS';\nconst styles = StyleSheet.create({\n container: {\n borderRadius: 18,\n padding: 6\n }\n});\nexport default RadioButtonIOS;\n\n// @component-docs ignore-next-line\nexport { RadioButtonIOS };\n//# sourceMappingURL=RadioButtonIOS.js.map","import * as React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport RadioButton from './RadioButton';\nimport RadioButtonAndroid from './RadioButtonAndroid';\nimport { RadioButtonContext } from './RadioButtonGroup';\nimport RadioButtonIOS from './RadioButtonIOS';\nimport { handlePress, isChecked } from './utils';\nimport { useInternalTheme } from '../../core/theming';\nimport TouchableRipple from '../TouchableRipple/TouchableRipple';\nimport Text from '../Typography/Text';\n/**\n * RadioButton.Item allows you to press the whole row (item) instead of only the RadioButton.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { RadioButton } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [value, setValue] = React.useState('first');\n *\n * return (\n * setValue(value)} value={value}>\n * \n * \n * \n * );\n * };\n *\n * export default MyComponent;\n *```\n */\nconst RadioButtonItem = _ref => {\n let {\n value,\n label,\n style,\n labelStyle,\n onPress,\n onLongPress,\n disabled,\n color,\n uncheckedColor,\n rippleColor,\n status,\n theme: themeOverrides,\n background,\n accessibilityLabel = label,\n testID,\n mode,\n position = 'trailing',\n labelVariant = 'bodyLarge',\n labelMaxFontSizeMultiplier\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const radioButtonProps = {\n value,\n disabled,\n status,\n color,\n theme,\n uncheckedColor\n };\n const isLeading = position === 'leading';\n let radioButton;\n if (mode === 'android') {\n radioButton = /*#__PURE__*/React.createElement(RadioButtonAndroid, radioButtonProps);\n } else if (mode === 'ios') {\n radioButton = /*#__PURE__*/React.createElement(RadioButtonIOS, radioButtonProps);\n } else {\n radioButton = /*#__PURE__*/React.createElement(RadioButton, radioButtonProps);\n }\n const textColor = theme.isV3 ? theme.colors.onSurface : theme.colors.text;\n const disabledTextColor = theme.isV3 ? theme.colors.onSurfaceDisabled : theme.colors.disabled;\n const textAlign = isLeading ? 'right' : 'left';\n const computedStyle = {\n color: disabled ? disabledTextColor : textColor,\n textAlign\n };\n return /*#__PURE__*/React.createElement(RadioButtonContext.Consumer, null, context => {\n const checked = isChecked({\n contextValue: context === null || context === void 0 ? void 0 : context.value,\n status,\n value\n }) === 'checked';\n return /*#__PURE__*/React.createElement(TouchableRipple, {\n onPress: event => handlePress({\n onPress: onPress,\n onValueChange: context === null || context === void 0 ? void 0 : context.onValueChange,\n value,\n event\n }),\n onLongPress: onLongPress,\n accessibilityLabel: accessibilityLabel,\n accessibilityRole: \"radio\",\n accessibilityState: {\n checked,\n disabled\n },\n testID: testID,\n disabled: disabled,\n background: background,\n theme: theme,\n rippleColor: rippleColor\n }, /*#__PURE__*/React.createElement(View, {\n style: [styles.container, style],\n pointerEvents: \"none\"\n }, isLeading && radioButton, /*#__PURE__*/React.createElement(Text, {\n variant: labelVariant,\n style: [styles.label, !theme.isV3 && styles.font, computedStyle, labelStyle],\n maxFontSizeMultiplier: labelMaxFontSizeMultiplier\n }, label), !isLeading && radioButton));\n });\n};\nRadioButtonItem.displayName = 'RadioButton.Item';\nexport default RadioButtonItem;\n\n// @component-docs ignore-next-line\nexport { RadioButtonItem };\nconst styles = StyleSheet.create({\n container: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingVertical: 8,\n paddingHorizontal: 16\n },\n label: {\n flexShrink: 1,\n flexGrow: 1\n },\n font: {\n fontSize: 16\n }\n});\n//# sourceMappingURL=RadioButtonItem.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { I18nManager, Platform, StyleSheet, TextInput, View } from 'react-native';\nimport color from 'color';\nimport ActivityIndicator from './ActivityIndicator';\nimport Divider from './Divider';\nimport IconButton from './IconButton/IconButton';\nimport MaterialCommunityIcon from './MaterialCommunityIcon';\nimport Surface from './Surface';\nimport { useInternalTheme } from '../core/theming';\nimport { forwardRef } from '../utils/forwardRef';\n/**\n * Searchbar is a simple input box where users can type search queries.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Searchbar } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [searchQuery, setSearchQuery] = React.useState('');\n *\n * return (\n * \n * );\n * };\n *\n * export default MyComponent;\n\n * ```\n */\nconst Searchbar = forwardRef((_ref, ref) => {\n var _theme$colors, _theme$colors2;\n let {\n icon,\n iconColor: customIconColor,\n rippleColor: customRippleColor,\n onIconPress,\n searchAccessibilityLabel = 'search',\n clearIcon,\n clearAccessibilityLabel = 'clear',\n onClearIconPress,\n traileringIcon,\n traileringIconColor,\n traileringIconAccessibilityLabel,\n traileringRippleColor: customTraileringRippleColor,\n onTraileringIconPress,\n right,\n mode = 'bar',\n showDivider = true,\n inputStyle,\n placeholder,\n elevation = 0,\n style,\n theme: themeOverrides,\n value,\n loading = false,\n testID = 'search-bar',\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const root = React.useRef(null);\n React.useImperativeHandle(ref, () => {\n const input = root.current;\n if (input) {\n return {\n focus: () => input.focus(),\n clear: () => input.clear(),\n setNativeProps: args => input.setNativeProps(args),\n isFocused: () => input.isFocused(),\n blur: () => input.blur()\n };\n }\n const noop = () => {\n throw new Error('TextInput is not available');\n };\n return {\n focus: noop,\n clear: noop,\n setNativeProps: noop,\n isFocused: noop,\n blur: noop\n };\n });\n const handleClearPress = e => {\n var _root$current, _rest$onChangeText;\n (_root$current = root.current) === null || _root$current === void 0 ? void 0 : _root$current.clear();\n (_rest$onChangeText = rest.onChangeText) === null || _rest$onChangeText === void 0 ? void 0 : _rest$onChangeText.call(rest, '');\n onClearIconPress === null || onClearIconPress === void 0 ? void 0 : onClearIconPress(e);\n };\n const {\n roundness,\n dark,\n isV3,\n fonts\n } = theme;\n const placeholderTextColor = isV3 ? theme.colors.onSurface : (_theme$colors = theme.colors) === null || _theme$colors === void 0 ? void 0 : _theme$colors.placeholder;\n const textColor = isV3 ? theme.colors.onSurfaceVariant : theme.colors.text;\n const md2IconColor = dark ? textColor : color(textColor).alpha(0.54).rgb().string();\n const iconColor = customIconColor || (isV3 ? theme.colors.onSurfaceVariant : md2IconColor);\n const rippleColor = customRippleColor || color(textColor).alpha(0.32).rgb().string();\n const traileringRippleColor = customTraileringRippleColor || color(textColor).alpha(0.32).rgb().string();\n const font = isV3 ? {\n ...fonts.bodyLarge,\n lineHeight: Platform.select({\n ios: 0,\n default: fonts.bodyLarge.lineHeight\n })\n } : theme.fonts.regular;\n const isBarMode = isV3 && mode === 'bar';\n const shouldRenderTraileringIcon = isBarMode && traileringIcon && !loading && (!value || right !== undefined);\n return /*#__PURE__*/React.createElement(Surface, _extends({\n style: [{\n borderRadius: roundness\n }, !isV3 && styles.elevation, isV3 && {\n backgroundColor: theme.colors.elevation.level3,\n borderRadius: roundness * (isBarMode ? 7 : 0)\n }, styles.container, style],\n testID: `${testID}-container`\n }, theme.isV3 && {\n elevation\n }, {\n theme: theme\n }), /*#__PURE__*/React.createElement(IconButton, {\n accessibilityRole: \"button\",\n borderless: true,\n rippleColor: rippleColor,\n onPress: onIconPress,\n iconColor: iconColor,\n icon: icon || (_ref2 => {\n let {\n size,\n color\n } = _ref2;\n return /*#__PURE__*/React.createElement(MaterialCommunityIcon, {\n name: \"magnify\",\n color: color,\n size: size,\n direction: I18nManager.getConstants().isRTL ? 'rtl' : 'ltr'\n });\n }),\n theme: theme,\n accessibilityLabel: searchAccessibilityLabel,\n testID: `${testID}-icon`\n }), /*#__PURE__*/React.createElement(TextInput, _extends({\n style: [styles.input, {\n color: textColor,\n ...font,\n ...Platform.select({\n web: {\n outline: 'none'\n }\n })\n }, isV3 && (isBarMode ? styles.barModeInput : styles.viewModeInput), inputStyle],\n placeholder: placeholder || '',\n placeholderTextColor: placeholderTextColor,\n selectionColor: (_theme$colors2 = theme.colors) === null || _theme$colors2 === void 0 ? void 0 : _theme$colors2.primary,\n underlineColorAndroid: \"transparent\",\n returnKeyType: \"search\",\n keyboardAppearance: dark ? 'dark' : 'light',\n accessibilityRole: \"search\",\n ref: root,\n value: value,\n testID: testID\n }, rest)), loading ? /*#__PURE__*/React.createElement(ActivityIndicator, {\n testID: \"activity-indicator\",\n style: isV3 ? styles.v3Loader : styles.loader\n }) :\n /*#__PURE__*/\n // Clear icon should be always rendered within Searchbar – it's transparent,\n // without touch events, when there is no value. It's done to avoid issues\n // with the abruptly stopping ripple effect and changing bar width on web,\n // when clearing the value.\n React.createElement(View, {\n pointerEvents: value ? 'auto' : 'none',\n testID: `${testID}-icon-wrapper`,\n style: [isV3 && !value && styles.v3ClearIcon, isV3 && right !== undefined && styles.v3ClearIconHidden]\n }, /*#__PURE__*/React.createElement(IconButton, {\n borderless: true,\n accessibilityLabel: clearAccessibilityLabel,\n iconColor: value ? iconColor : 'rgba(255, 255, 255, 0)',\n rippleColor: rippleColor,\n onPress: handleClearPress,\n icon: clearIcon || (_ref3 => {\n let {\n size,\n color\n } = _ref3;\n return /*#__PURE__*/React.createElement(MaterialCommunityIcon, {\n name: isV3 ? 'close' : 'close-circle-outline',\n color: color,\n size: size,\n direction: I18nManager.getConstants().isRTL ? 'rtl' : 'ltr'\n });\n }),\n testID: `${testID}-clear-icon`,\n accessibilityRole: \"button\",\n theme: theme\n })), shouldRenderTraileringIcon ? /*#__PURE__*/React.createElement(IconButton, {\n accessibilityRole: \"button\",\n borderless: true,\n onPress: onTraileringIconPress,\n iconColor: traileringIconColor || theme.colors.onSurfaceVariant,\n rippleColor: traileringRippleColor,\n icon: traileringIcon,\n accessibilityLabel: traileringIconAccessibilityLabel,\n testID: `${testID}-trailering-icon`\n }) : null, isBarMode && (right === null || right === void 0 ? void 0 : right({\n color: textColor,\n style: styles.rightStyle,\n testID\n })), isV3 && !isBarMode && showDivider && /*#__PURE__*/React.createElement(Divider, {\n bold: true,\n style: [styles.divider, {\n backgroundColor: theme.colors.outline\n }],\n testID: `${testID}-divider`\n }));\n});\nconst styles = StyleSheet.create({\n container: {\n flexDirection: 'row',\n alignItems: 'center'\n },\n input: {\n flex: 1,\n fontSize: 18,\n paddingLeft: 8,\n alignSelf: 'stretch',\n textAlign: I18nManager.getConstants().isRTL ? 'right' : 'left',\n minWidth: 0\n },\n barModeInput: {\n paddingLeft: 0,\n minHeight: 56\n },\n viewModeInput: {\n paddingLeft: 0,\n minHeight: 72\n },\n elevation: {\n elevation: 4\n },\n loader: {\n margin: 10\n },\n v3Loader: {\n marginHorizontal: 16\n },\n rightStyle: {\n marginRight: 16\n },\n v3ClearIcon: {\n position: 'absolute',\n right: 0,\n marginLeft: 16\n },\n v3ClearIconHidden: {\n display: 'none'\n },\n divider: {\n position: 'absolute',\n bottom: 0,\n width: '100%'\n }\n});\nexport default Searchbar;\n//# sourceMappingURL=Searchbar.js.map","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport * as forwardedProps from '../../modules/forwardedProps';\nimport pick from '../../modules/pick';\nimport useElementLayout from '../../modules/useElementLayout';\nimport useLayoutEffect from '../../modules/useLayoutEffect';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePlatformMethods from '../../modules/usePlatformMethods';\nimport useResponderEvents from '../../modules/useResponderEvents';\nimport { getLocaleDirection, useLocaleContext } from '../../modules/useLocale';\nimport StyleSheet from '../StyleSheet';\nimport TextInputState from '../../modules/TextInputState';\nimport { warnOnce } from '../../modules/warnOnce';\n\n/**\n * Determines whether a 'selection' prop differs from a node's existing\n * selection state.\n */\nvar isSelectionStale = (node, selection) => {\n var selectionEnd = node.selectionEnd,\n selectionStart = node.selectionStart;\n var start = selection.start,\n end = selection.end;\n return start !== selectionStart || end !== selectionEnd;\n};\n\n/**\n * Certain input types do no support 'selectSelectionRange' and will throw an\n * error.\n */\nvar setSelection = (node, selection) => {\n if (isSelectionStale(node, selection)) {\n var start = selection.start,\n end = selection.end;\n try {\n node.setSelectionRange(start, end || start);\n } catch (e) {}\n }\n};\nvar forwardPropsList = Object.assign({}, forwardedProps.defaultProps, forwardedProps.accessibilityProps, forwardedProps.clickProps, forwardedProps.focusProps, forwardedProps.keyboardProps, forwardedProps.mouseProps, forwardedProps.touchProps, forwardedProps.styleProps, {\n autoCapitalize: true,\n autoComplete: true,\n autoCorrect: true,\n autoFocus: true,\n defaultValue: true,\n disabled: true,\n lang: true,\n maxLength: true,\n onChange: true,\n onScroll: true,\n placeholder: true,\n pointerEvents: true,\n readOnly: true,\n rows: true,\n spellCheck: true,\n value: true,\n type: true\n});\nvar pickProps = props => pick(props, forwardPropsList);\n\n// If an Input Method Editor is processing key input, the 'keyCode' is 229.\n// https://www.w3.org/TR/uievents/#determine-keydown-keyup-keyCode\nfunction isEventComposing(nativeEvent) {\n return nativeEvent.isComposing || nativeEvent.keyCode === 229;\n}\nvar focusTimeout = null;\nvar TextInput = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n var _props$autoCapitalize = props.autoCapitalize,\n autoCapitalize = _props$autoCapitalize === void 0 ? 'sentences' : _props$autoCapitalize,\n autoComplete = props.autoComplete,\n autoCompleteType = props.autoCompleteType,\n _props$autoCorrect = props.autoCorrect,\n autoCorrect = _props$autoCorrect === void 0 ? true : _props$autoCorrect,\n blurOnSubmit = props.blurOnSubmit,\n caretHidden = props.caretHidden,\n clearTextOnFocus = props.clearTextOnFocus,\n dir = props.dir,\n editable = props.editable,\n enterKeyHint = props.enterKeyHint,\n inputMode = props.inputMode,\n keyboardType = props.keyboardType,\n _props$multiline = props.multiline,\n multiline = _props$multiline === void 0 ? false : _props$multiline,\n numberOfLines = props.numberOfLines,\n onBlur = props.onBlur,\n onChange = props.onChange,\n onChangeText = props.onChangeText,\n onContentSizeChange = props.onContentSizeChange,\n onFocus = props.onFocus,\n onKeyPress = props.onKeyPress,\n onLayout = props.onLayout,\n onMoveShouldSetResponder = props.onMoveShouldSetResponder,\n onMoveShouldSetResponderCapture = props.onMoveShouldSetResponderCapture,\n onResponderEnd = props.onResponderEnd,\n onResponderGrant = props.onResponderGrant,\n onResponderMove = props.onResponderMove,\n onResponderReject = props.onResponderReject,\n onResponderRelease = props.onResponderRelease,\n onResponderStart = props.onResponderStart,\n onResponderTerminate = props.onResponderTerminate,\n onResponderTerminationRequest = props.onResponderTerminationRequest,\n onScrollShouldSetResponder = props.onScrollShouldSetResponder,\n onScrollShouldSetResponderCapture = props.onScrollShouldSetResponderCapture,\n onSelectionChange = props.onSelectionChange,\n onSelectionChangeShouldSetResponder = props.onSelectionChangeShouldSetResponder,\n onSelectionChangeShouldSetResponderCapture = props.onSelectionChangeShouldSetResponderCapture,\n onStartShouldSetResponder = props.onStartShouldSetResponder,\n onStartShouldSetResponderCapture = props.onStartShouldSetResponderCapture,\n onSubmitEditing = props.onSubmitEditing,\n placeholderTextColor = props.placeholderTextColor,\n _props$readOnly = props.readOnly,\n readOnly = _props$readOnly === void 0 ? false : _props$readOnly,\n returnKeyType = props.returnKeyType,\n rows = props.rows,\n _props$secureTextEntr = props.secureTextEntry,\n secureTextEntry = _props$secureTextEntr === void 0 ? false : _props$secureTextEntr,\n selection = props.selection,\n selectTextOnFocus = props.selectTextOnFocus,\n spellCheck = props.spellCheck;\n var type;\n var _inputMode;\n if (inputMode != null) {\n _inputMode = inputMode;\n if (inputMode === 'email') {\n type = 'email';\n } else if (inputMode === 'tel') {\n type = 'tel';\n } else if (inputMode === 'search') {\n type = 'search';\n } else if (inputMode === 'url') {\n type = 'url';\n } else {\n type = 'text';\n }\n } else if (keyboardType != null) {\n warnOnce('keyboardType', 'keyboardType is deprecated. Use inputMode.');\n switch (keyboardType) {\n case 'email-address':\n type = 'email';\n break;\n case 'number-pad':\n case 'numeric':\n _inputMode = 'numeric';\n break;\n case 'decimal-pad':\n _inputMode = 'decimal';\n break;\n case 'phone-pad':\n type = 'tel';\n break;\n case 'search':\n case 'web-search':\n type = 'search';\n break;\n case 'url':\n type = 'url';\n break;\n default:\n type = 'text';\n }\n }\n if (secureTextEntry) {\n type = 'password';\n }\n var dimensions = React.useRef({\n height: null,\n width: null\n });\n var hostRef = React.useRef(null);\n var prevSelection = React.useRef(null);\n var prevSecureTextEntry = React.useRef(false);\n React.useEffect(() => {\n if (hostRef.current && prevSelection.current) {\n setSelection(hostRef.current, prevSelection.current);\n }\n prevSecureTextEntry.current = secureTextEntry;\n }, [secureTextEntry]);\n var handleContentSizeChange = React.useCallback(hostNode => {\n if (multiline && onContentSizeChange && hostNode != null) {\n var newHeight = hostNode.scrollHeight;\n var newWidth = hostNode.scrollWidth;\n if (newHeight !== dimensions.current.height || newWidth !== dimensions.current.width) {\n dimensions.current.height = newHeight;\n dimensions.current.width = newWidth;\n onContentSizeChange({\n nativeEvent: {\n contentSize: {\n height: dimensions.current.height,\n width: dimensions.current.width\n }\n }\n });\n }\n }\n }, [multiline, onContentSizeChange]);\n var imperativeRef = React.useMemo(() => hostNode => {\n // TextInput needs to add more methods to the hostNode in addition to those\n // added by `usePlatformMethods`. This is temporarily until an API like\n // `TextInput.clear(hostRef)` is added to React Native.\n if (hostNode != null) {\n hostNode.clear = function () {\n if (hostNode != null) {\n hostNode.value = '';\n }\n };\n hostNode.isFocused = function () {\n return hostNode != null && TextInputState.currentlyFocusedField() === hostNode;\n };\n handleContentSizeChange(hostNode);\n }\n }, [handleContentSizeChange]);\n function handleBlur(e) {\n TextInputState._currentlyFocusedNode = null;\n if (onBlur) {\n e.nativeEvent.text = e.target.value;\n onBlur(e);\n }\n }\n function handleChange(e) {\n var hostNode = e.target;\n var text = hostNode.value;\n e.nativeEvent.text = text;\n handleContentSizeChange(hostNode);\n if (onChange) {\n onChange(e);\n }\n if (onChangeText) {\n onChangeText(text);\n }\n }\n function handleFocus(e) {\n var hostNode = e.target;\n if (onFocus) {\n e.nativeEvent.text = hostNode.value;\n onFocus(e);\n }\n if (hostNode != null) {\n TextInputState._currentlyFocusedNode = hostNode;\n if (clearTextOnFocus) {\n hostNode.value = '';\n }\n if (selectTextOnFocus) {\n // Safari requires selection to occur in a setTimeout\n if (focusTimeout != null) {\n clearTimeout(focusTimeout);\n }\n focusTimeout = setTimeout(() => {\n if (hostNode != null) {\n hostNode.select();\n }\n }, 0);\n }\n }\n }\n function handleKeyDown(e) {\n var hostNode = e.target;\n // Prevent key events bubbling (see #612)\n e.stopPropagation();\n var blurOnSubmitDefault = !multiline;\n var shouldBlurOnSubmit = blurOnSubmit == null ? blurOnSubmitDefault : blurOnSubmit;\n var nativeEvent = e.nativeEvent;\n var isComposing = isEventComposing(nativeEvent);\n if (onKeyPress) {\n onKeyPress(e);\n }\n if (e.key === 'Enter' && !e.shiftKey &&\n // Do not call submit if composition is occuring.\n !isComposing && !e.isDefaultPrevented()) {\n if ((blurOnSubmit || !multiline) && onSubmitEditing) {\n // prevent \"Enter\" from inserting a newline or submitting a form\n e.preventDefault();\n nativeEvent.text = e.target.value;\n onSubmitEditing(e);\n }\n if (shouldBlurOnSubmit && hostNode != null) {\n setTimeout(() => hostNode.blur(), 0);\n }\n }\n }\n function handleSelectionChange(e) {\n try {\n var _e$target = e.target,\n selectionStart = _e$target.selectionStart,\n selectionEnd = _e$target.selectionEnd;\n var _selection = {\n start: selectionStart,\n end: selectionEnd\n };\n if (onSelectionChange) {\n e.nativeEvent.selection = _selection;\n e.nativeEvent.text = e.target.value;\n onSelectionChange(e);\n }\n if (prevSecureTextEntry.current === secureTextEntry) {\n prevSelection.current = _selection;\n }\n } catch (e) {}\n }\n useLayoutEffect(() => {\n var node = hostRef.current;\n if (node != null && selection != null) {\n setSelection(node, selection);\n }\n if (document.activeElement === node) {\n TextInputState._currentlyFocusedNode = node;\n }\n }, [hostRef, selection]);\n var component = multiline ? 'textarea' : 'input';\n useElementLayout(hostRef, onLayout);\n useResponderEvents(hostRef, {\n onMoveShouldSetResponder,\n onMoveShouldSetResponderCapture,\n onResponderEnd,\n onResponderGrant,\n onResponderMove,\n onResponderReject,\n onResponderRelease,\n onResponderStart,\n onResponderTerminate,\n onResponderTerminationRequest,\n onScrollShouldSetResponder,\n onScrollShouldSetResponderCapture,\n onSelectionChangeShouldSetResponder,\n onSelectionChangeShouldSetResponderCapture,\n onStartShouldSetResponder,\n onStartShouldSetResponderCapture\n });\n var _useLocaleContext = useLocaleContext(),\n contextDirection = _useLocaleContext.direction;\n var supportedProps = pickProps(props);\n supportedProps.autoCapitalize = autoCapitalize;\n supportedProps.autoComplete = autoComplete || autoCompleteType || 'on';\n supportedProps.autoCorrect = autoCorrect ? 'on' : 'off';\n // 'auto' by default allows browsers to infer writing direction\n supportedProps.dir = dir !== undefined ? dir : 'auto';\n if (returnKeyType != null) {\n warnOnce('returnKeyType', 'returnKeyType is deprecated. Use enterKeyHint.');\n }\n supportedProps.enterKeyHint = enterKeyHint || returnKeyType;\n supportedProps.inputMode = _inputMode;\n supportedProps.onBlur = handleBlur;\n supportedProps.onChange = handleChange;\n supportedProps.onFocus = handleFocus;\n supportedProps.onKeyDown = handleKeyDown;\n supportedProps.onSelect = handleSelectionChange;\n if (editable != null) {\n warnOnce('editable', 'editable is deprecated. Use readOnly.');\n }\n supportedProps.readOnly = readOnly === true || editable === false;\n if (numberOfLines != null) {\n warnOnce('numberOfLines', 'TextInput numberOfLines is deprecated. Use rows.');\n }\n supportedProps.rows = multiline ? rows != null ? rows : numberOfLines : 1;\n supportedProps.spellCheck = spellCheck != null ? spellCheck : autoCorrect;\n supportedProps.style = [{\n '--placeholderTextColor': placeholderTextColor\n }, styles.textinput$raw, styles.placeholder, props.style, caretHidden && styles.caretHidden];\n supportedProps.type = multiline ? undefined : type;\n var platformMethodsRef = usePlatformMethods(supportedProps);\n var setRef = useMergeRefs(hostRef, platformMethodsRef, imperativeRef, forwardedRef);\n supportedProps.ref = setRef;\n var langDirection = props.lang != null ? getLocaleDirection(props.lang) : null;\n var componentDirection = props.dir || langDirection;\n var writingDirection = componentDirection || contextDirection;\n var element = createElement(component, supportedProps, {\n writingDirection\n });\n return element;\n});\nTextInput.displayName = 'TextInput';\n// $FlowFixMe\nTextInput.State = TextInputState;\nvar styles = StyleSheet.create({\n textinput$raw: {\n MozAppearance: 'textfield',\n WebkitAppearance: 'none',\n backgroundColor: 'transparent',\n border: '0 solid black',\n borderRadius: 0,\n boxSizing: 'border-box',\n font: '14px System',\n margin: 0,\n padding: 0,\n resize: 'none'\n },\n placeholder: {\n placeholderTextColor: 'var(--placeholderTextColor)'\n },\n caretHidden: {\n caretColor: 'transparent'\n }\n});\nexport default TextInput;","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Animated, Easing, I18nManager, StyleSheet, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport useLatestCallback from 'use-latest-callback';\nimport Button from './Button/Button';\nimport IconButton from './IconButton/IconButton';\nimport MaterialCommunityIcon from './MaterialCommunityIcon';\nimport Surface from './Surface';\nimport Text from './Typography/Text';\nimport { useInternalTheme } from '../core/theming';\nconst DURATION_SHORT = 4000;\nconst DURATION_MEDIUM = 7000;\nconst DURATION_LONG = 10000;\n\n/**\n * Snackbars provide brief feedback about an operation through a message rendered at the bottom of the container in which it's wrapped.\n *\n * Note: To display it as a popup, regardless of the parent's position, wrap it with a `Portal` component – refer to the example in the \"More Examples` section.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { View, StyleSheet } from 'react-native';\n * import { Button, Snackbar } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [visible, setVisible] = React.useState(false);\n *\n * const onToggleSnackBar = () => setVisible(!visible);\n *\n * const onDismissSnackBar = () => setVisible(false);\n *\n * return (\n * \n * \n * {\n * // Do something\n * },\n * }}>\n * Hey there! I'm a Snackbar.\n * \n * \n * );\n * };\n *\n * const styles = StyleSheet.create({\n * container: {\n * flex: 1,\n * justifyContent: 'space-between',\n * },\n * });\n *\n * export default MyComponent;\n * ```\n */\nconst Snackbar = _ref => {\n let {\n visible,\n action,\n icon,\n onIconPress,\n iconAccessibilityLabel = 'Close icon',\n duration = DURATION_MEDIUM,\n onDismiss,\n children,\n elevation = 2,\n wrapperStyle,\n style,\n theme: themeOverrides,\n maxFontSizeMultiplier,\n rippleColor,\n testID,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const {\n bottom,\n right,\n left\n } = useSafeAreaInsets();\n const {\n current: opacity\n } = React.useRef(new Animated.Value(0.0));\n const hideTimeout = React.useRef(undefined);\n const [hidden, setHidden] = React.useState(!visible);\n const {\n scale\n } = theme.animation;\n const handleOnVisible = useLatestCallback(() => {\n // show\n if (hideTimeout.current) clearTimeout(hideTimeout.current);\n setHidden(false);\n Animated.timing(opacity, {\n toValue: 1,\n duration: 200 * scale,\n easing: Easing.out(Easing.ease),\n useNativeDriver: true\n }).start(_ref2 => {\n let {\n finished\n } = _ref2;\n if (finished) {\n const isInfinity = duration === Number.POSITIVE_INFINITY || duration === Number.NEGATIVE_INFINITY;\n if (!isInfinity) {\n hideTimeout.current = setTimeout(onDismiss, duration);\n }\n }\n });\n });\n const handleOnHidden = useLatestCallback(() => {\n // hide\n if (hideTimeout.current) {\n clearTimeout(hideTimeout.current);\n }\n Animated.timing(opacity, {\n toValue: 0,\n duration: 100 * scale,\n useNativeDriver: true\n }).start(_ref3 => {\n let {\n finished\n } = _ref3;\n if (finished) {\n setHidden(true);\n }\n });\n });\n React.useEffect(() => {\n return () => {\n if (hideTimeout.current) clearTimeout(hideTimeout.current);\n };\n }, []);\n React.useLayoutEffect(() => {\n if (visible) {\n handleOnVisible();\n } else {\n handleOnHidden();\n }\n }, [visible, handleOnVisible, handleOnHidden]);\n const {\n colors,\n roundness,\n isV3\n } = theme;\n if (hidden) {\n return null;\n }\n const {\n style: actionStyle,\n label: actionLabel,\n onPress: onPressAction,\n rippleColor: actionRippleColor,\n ...actionProps\n } = action || {};\n const buttonTextColor = isV3 ? colors.inversePrimary : colors.accent;\n const textColor = isV3 ? colors.inverseOnSurface : colors === null || colors === void 0 ? void 0 : colors.surface;\n const backgroundColor = isV3 ? colors.inverseSurface : colors === null || colors === void 0 ? void 0 : colors.onSurface;\n const isIconButton = isV3 && onIconPress;\n const marginLeft = action ? -12 : -16;\n const wrapperPaddings = {\n paddingBottom: bottom,\n paddingHorizontal: Math.max(left, right)\n };\n const renderChildrenWithWrapper = () => {\n if (typeof children === 'string') {\n return /*#__PURE__*/React.createElement(Text, {\n variant: \"bodyMedium\",\n style: [styles.content, {\n color: textColor\n }],\n maxFontSizeMultiplier: maxFontSizeMultiplier\n }, children);\n }\n return /*#__PURE__*/React.createElement(View, {\n style: styles.content\n }, /*#__PURE__*/React.createElement(View, null, children));\n };\n return /*#__PURE__*/React.createElement(View, {\n pointerEvents: \"box-none\",\n style: [styles.wrapper, wrapperPaddings, wrapperStyle]\n }, /*#__PURE__*/React.createElement(Surface, _extends({\n pointerEvents: \"box-none\",\n accessibilityLiveRegion: \"polite\",\n theme: theme,\n style: [!isV3 && styles.elevation, styles.container, {\n backgroundColor,\n borderRadius: roundness,\n opacity: opacity,\n transform: [{\n scale: visible ? opacity.interpolate({\n inputRange: [0, 1],\n outputRange: [0.9, 1]\n }) : 1\n }]\n }, style],\n testID: testID\n }, isV3 && {\n elevation\n }, rest), renderChildrenWithWrapper(), (action || isIconButton) && /*#__PURE__*/React.createElement(View, {\n style: [styles.actionsContainer, {\n marginLeft\n }]\n }, action ? /*#__PURE__*/React.createElement(Button, _extends({\n onPress: event => {\n onPressAction === null || onPressAction === void 0 ? void 0 : onPressAction(event);\n onDismiss();\n },\n style: [styles.button, actionStyle],\n textColor: buttonTextColor,\n compact: !isV3,\n mode: \"text\",\n theme: theme,\n rippleColor: actionRippleColor\n }, actionProps), actionLabel) : null, isIconButton ? /*#__PURE__*/React.createElement(IconButton, {\n accessibilityRole: \"button\",\n borderless: true,\n onPress: onIconPress,\n iconColor: theme.colors.inverseOnSurface,\n rippleColor: rippleColor,\n theme: theme,\n icon: icon || (_ref4 => {\n let {\n size,\n color\n } = _ref4;\n return /*#__PURE__*/React.createElement(MaterialCommunityIcon, {\n name: \"close\",\n color: color,\n size: size,\n direction: I18nManager.getConstants().isRTL ? 'rtl' : 'ltr'\n });\n }),\n accessibilityLabel: iconAccessibilityLabel,\n style: styles.icon,\n testID: `${testID}-icon`\n }) : null)));\n};\n\n/**\n * Show the Snackbar for a short duration.\n */\nSnackbar.DURATION_SHORT = DURATION_SHORT;\n\n/**\n * Show the Snackbar for a medium duration.\n */\nSnackbar.DURATION_MEDIUM = DURATION_MEDIUM;\n\n/**\n * Show the Snackbar for a long duration.\n */\nSnackbar.DURATION_LONG = DURATION_LONG;\nconst styles = StyleSheet.create({\n wrapper: {\n position: 'absolute',\n bottom: 0,\n width: '100%'\n },\n container: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n margin: 8,\n borderRadius: 4,\n minHeight: 48\n },\n content: {\n marginHorizontal: 16,\n marginVertical: 14,\n flex: 1\n },\n actionsContainer: {\n flexDirection: 'row',\n justifyContent: 'flex-end',\n alignItems: 'center',\n minHeight: 48\n },\n button: {\n marginRight: 8,\n marginLeft: 4\n },\n elevation: {\n elevation: 6\n },\n icon: {\n width: 40,\n height: 40,\n margin: 0\n }\n});\nexport default Snackbar;\n//# sourceMappingURL=Snackbar.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { NativeModules, Platform, Switch as NativeSwitch } from 'react-native';\nimport { getSwitchColor } from './utils';\nimport { useInternalTheme } from '../../core/theming';\nconst version = NativeModules.PlatformConstants ? NativeModules.PlatformConstants.reactNativeVersion : undefined;\n/**\n * Switch is a visual toggle between two mutually exclusive states — on and off.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Switch } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [isSwitchOn, setIsSwitchOn] = React.useState(false);\n *\n * const onToggleSwitch = () => setIsSwitchOn(!isSwitchOn);\n *\n * return ;\n * };\n *\n * export default MyComponent;\n * ```\n */\nconst Switch = _ref => {\n let {\n value,\n disabled,\n onValueChange,\n color,\n theme: themeOverrides,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const {\n checkedColor,\n onTintColor,\n thumbTintColor\n } = getSwitchColor({\n theme,\n disabled,\n value,\n color\n });\n const props = version && version.major === 0 && version.minor <= 56 ? {\n onTintColor,\n thumbTintColor\n } : Platform.OS === 'web' ? {\n activeTrackColor: onTintColor,\n thumbColor: thumbTintColor,\n activeThumbColor: checkedColor\n } : {\n thumbColor: thumbTintColor,\n trackColor: {\n true: onTintColor,\n false: onTintColor\n }\n };\n return /*#__PURE__*/React.createElement(NativeSwitch, _extends({\n value: value,\n disabled: disabled,\n onValueChange: disabled ? undefined : onValueChange\n }, props, rest));\n};\nexport default Switch;\n//# sourceMappingURL=Switch.js.map","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"aria-label\", \"accessibilityLabel\", \"activeThumbColor\", \"activeTrackColor\", \"disabled\", \"onValueChange\", \"style\", \"thumbColor\", \"trackColor\", \"value\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport multiplyStyleLengthValue from '../../modules/multiplyStyleLengthValue';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nvar emptyObject = {};\nvar thumbDefaultBoxShadow = '0px 1px 3px rgba(0,0,0,0.5)';\nvar thumbFocusedBoxShadow = thumbDefaultBoxShadow + \", 0 0 0 10px rgba(0,0,0,0.1)\";\nvar defaultActiveTrackColor = '#A3D3CF';\nvar defaultTrackColor = '#939393';\nvar defaultDisabledTrackColor = '#D5D5D5';\nvar defaultActiveThumbColor = '#009688';\nvar defaultThumbColor = '#FAFAFA';\nvar defaultDisabledThumbColor = '#BDBDBD';\nvar Switch = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n var ariaLabel = props['aria-label'],\n accessibilityLabel = props.accessibilityLabel,\n activeThumbColor = props.activeThumbColor,\n activeTrackColor = props.activeTrackColor,\n _props$disabled = props.disabled,\n disabled = _props$disabled === void 0 ? false : _props$disabled,\n onValueChange = props.onValueChange,\n _props$style = props.style,\n style = _props$style === void 0 ? emptyObject : _props$style,\n thumbColor = props.thumbColor,\n trackColor = props.trackColor,\n _props$value = props.value,\n value = _props$value === void 0 ? false : _props$value,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var thumbRef = React.useRef(null);\n function handleChange(event) {\n if (onValueChange != null) {\n onValueChange(event.nativeEvent.target.checked);\n }\n }\n function handleFocusState(event) {\n var isFocused = event.nativeEvent.type === 'focus';\n var boxShadow = isFocused ? thumbFocusedBoxShadow : thumbDefaultBoxShadow;\n if (thumbRef.current != null) {\n thumbRef.current.style.boxShadow = boxShadow;\n }\n }\n var _StyleSheet$flatten = StyleSheet.flatten(style),\n styleHeight = _StyleSheet$flatten.height,\n styleWidth = _StyleSheet$flatten.width;\n var height = styleHeight || '20px';\n var minWidth = multiplyStyleLengthValue(height, 2);\n var width = styleWidth > minWidth ? styleWidth : minWidth;\n var trackBorderRadius = multiplyStyleLengthValue(height, 0.5);\n var trackCurrentColor = function () {\n if (value === true) {\n if (trackColor != null && typeof trackColor === 'object') {\n return trackColor.true;\n } else {\n return activeTrackColor !== null && activeTrackColor !== void 0 ? activeTrackColor : defaultActiveTrackColor;\n }\n } else {\n if (trackColor != null && typeof trackColor === 'object') {\n return trackColor.false;\n } else {\n return trackColor !== null && trackColor !== void 0 ? trackColor : defaultTrackColor;\n }\n }\n }();\n var thumbCurrentColor = value ? activeThumbColor !== null && activeThumbColor !== void 0 ? activeThumbColor : defaultActiveThumbColor : thumbColor !== null && thumbColor !== void 0 ? thumbColor : defaultThumbColor;\n var thumbHeight = height;\n var thumbWidth = thumbHeight;\n var rootStyle = [styles.root, style, disabled && styles.cursorDefault, {\n height,\n width\n }];\n var disabledTrackColor = function () {\n if (value === true) {\n if (typeof activeTrackColor === 'string' && activeTrackColor != null || typeof trackColor === 'object' && trackColor != null && trackColor.true) {\n return trackCurrentColor;\n } else {\n return defaultDisabledTrackColor;\n }\n } else {\n if (typeof trackColor === 'string' && trackColor != null || typeof trackColor === 'object' && trackColor != null && trackColor.false) {\n return trackCurrentColor;\n } else {\n return defaultDisabledTrackColor;\n }\n }\n }();\n var disabledThumbColor = function () {\n if (value === true) {\n if (activeThumbColor == null) {\n return defaultDisabledThumbColor;\n } else {\n return thumbCurrentColor;\n }\n } else {\n if (thumbColor == null) {\n return defaultDisabledThumbColor;\n } else {\n return thumbCurrentColor;\n }\n }\n }();\n var trackStyle = [styles.track, {\n backgroundColor: disabled ? disabledTrackColor : trackCurrentColor,\n borderRadius: trackBorderRadius\n }];\n var thumbStyle = [styles.thumb, value && styles.thumbActive, {\n backgroundColor: disabled ? disabledThumbColor : thumbCurrentColor,\n height: thumbHeight,\n marginStart: value ? multiplyStyleLengthValue(thumbWidth, -1) : 0,\n width: thumbWidth\n }];\n var nativeControl = createElement('input', {\n 'aria-label': ariaLabel || accessibilityLabel,\n checked: value,\n disabled: disabled,\n onBlur: handleFocusState,\n onChange: handleChange,\n onFocus: handleFocusState,\n ref: forwardedRef,\n style: [styles.nativeControl, styles.cursorInherit],\n type: 'checkbox',\n role: 'switch'\n });\n return /*#__PURE__*/React.createElement(View, _extends({}, other, {\n style: rootStyle\n }), /*#__PURE__*/React.createElement(View, {\n style: trackStyle\n }), /*#__PURE__*/React.createElement(View, {\n ref: thumbRef,\n style: thumbStyle\n }), nativeControl);\n});\nSwitch.displayName = 'Switch';\nvar styles = StyleSheet.create({\n root: {\n cursor: 'pointer',\n userSelect: 'none'\n },\n cursorDefault: {\n cursor: 'default'\n },\n cursorInherit: {\n cursor: 'inherit'\n },\n track: _objectSpread(_objectSpread({\n forcedColorAdjust: 'none'\n }, StyleSheet.absoluteFillObject), {}, {\n height: '70%',\n margin: 'auto',\n transitionDuration: '0.1s',\n width: '100%'\n }),\n thumb: {\n forcedColorAdjust: 'none',\n alignSelf: 'flex-start',\n borderRadius: '100%',\n boxShadow: thumbDefaultBoxShadow,\n start: '0%',\n transform: 'translateZ(0)',\n transitionDuration: '0.1s'\n },\n thumbActive: {\n insetInlineStart: '100%'\n },\n nativeControl: _objectSpread(_objectSpread({}, StyleSheet.absoluteFillObject), {}, {\n height: '100%',\n margin: 0,\n appearance: 'none',\n padding: 0,\n width: '100%'\n })\n});\nexport default Switch;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar CSS_UNIT_RE = /^[+-]?\\d*(?:\\.\\d+)?(?:[Ee][+-]?\\d+)?(%|\\w*)/;\nvar getUnit = str => str.match(CSS_UNIT_RE)[1];\nvar isNumeric = n => {\n return !isNaN(parseFloat(n)) && isFinite(n);\n};\nvar multiplyStyleLengthValue = (value, multiple) => {\n if (typeof value === 'string') {\n var number = parseFloat(value) * multiple;\n var unit = getUnit(value);\n return \"\" + number + unit;\n } else if (isNumeric(value)) {\n return value * multiple;\n }\n};\nexport default multiplyStyleLengthValue;","import { Platform } from 'react-native';\nimport setColor from 'color';\nimport { grey400, grey800, grey50, grey700, white, black } from '../../styles/themes/v2/colors';\nconst getCheckedColor = _ref => {\n let {\n theme,\n color\n } = _ref;\n if (color) {\n return color;\n }\n if (theme.isV3) {\n return theme.colors.primary;\n }\n return theme.colors.accent;\n};\nconst getThumbTintColor = _ref2 => {\n let {\n theme,\n disabled,\n value,\n checkedColor\n } = _ref2;\n const isIOS = Platform.OS === 'ios';\n if (isIOS) {\n return undefined;\n }\n if (disabled) {\n if (theme.dark) {\n return grey800;\n }\n return grey400;\n }\n if (value) {\n return checkedColor;\n }\n if (theme.dark) {\n return grey400;\n }\n return grey50;\n};\nconst getOnTintColor = _ref3 => {\n let {\n theme,\n disabled,\n value,\n checkedColor\n } = _ref3;\n const isIOS = Platform.OS === 'ios';\n if (isIOS) {\n return checkedColor;\n }\n if (disabled) {\n if (theme.dark) {\n if (theme.isV3) {\n return setColor(white).alpha(0.06).rgb().string();\n }\n return setColor(white).alpha(0.1).rgb().string();\n }\n return setColor(black).alpha(0.12).rgb().string();\n }\n if (value) {\n return setColor(checkedColor).alpha(0.5).rgb().string();\n }\n if (theme.dark) {\n return grey700;\n }\n return 'rgb(178, 175, 177)';\n};\nexport const getSwitchColor = _ref4 => {\n let {\n theme,\n disabled,\n value,\n color\n } = _ref4;\n const checkedColor = getCheckedColor({\n theme,\n color\n });\n return {\n onTintColor: getOnTintColor({\n theme,\n disabled,\n value,\n checkedColor\n }),\n thumbTintColor: getThumbTintColor({\n theme,\n disabled,\n value,\n checkedColor\n }),\n checkedColor\n };\n};\n//# sourceMappingURL=utils.js.map","import AppbarComponent from './Appbar';\nimport AppbarAction from './AppbarAction';\nimport AppbarBackAction from './AppbarBackAction';\nimport AppbarContent from './AppbarContent';\nimport AppbarHeader from './AppbarHeader';\nconst Appbar = Object.assign(\n// @component ./Appbar.tsx\nAppbarComponent, {\n // @component ./AppbarContent.tsx\n Content: AppbarContent,\n // @component ./AppbarAction.tsx\n Action: AppbarAction,\n // @component ./AppbarBackAction.tsx\n BackAction: AppbarBackAction,\n // @component ./AppbarHeader.tsx\n Header: AppbarHeader\n});\nexport default Appbar;\n//# sourceMappingURL=index.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Platform, StyleSheet, View } from 'react-native';\nimport color from 'color';\nimport AppbarContent from './AppbarContent';\nimport { DEFAULT_APPBAR_HEIGHT, getAppbarBackgroundColor, modeAppbarHeight, renderAppbarContent } from './utils';\nimport { useInternalTheme } from '../../core/theming';\nimport Surface from '../Surface';\n/**\n * A component to display action items in a bar. It can be placed at the top or bottom.\n * The top bar usually contains the screen title, controls such as navigation buttons, menu button etc.\n * The bottom bar usually provides access to a drawer and up to four actions.\n *\n * By default Appbar uses primary color as a background, in dark theme with `adaptive` mode it will use surface colour instead.\n * See [Dark Theme](https://callstack.github.io/react-native-paper/docs/guides/theming#dark-theme) for more informations\n *\n * ## Usage\n * ### Top bar\n * ```js\n * import * as React from 'react';\n * import { Appbar } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * {}} />\n * \n * {}} />\n * {}} />\n * \n * );\n *\n * export default MyComponent;\n * ```\n *\n * ### Bottom bar\n * ```js\n * import * as React from 'react';\n * import { StyleSheet } from 'react-native';\n * import { Appbar, FAB, useTheme } from 'react-native-paper';\n * import { useSafeAreaInsets } from 'react-native-safe-area-context';\n *\n * const BOTTOM_APPBAR_HEIGHT = 80;\n * const MEDIUM_FAB_HEIGHT = 56;\n *\n * const MyComponent = () => {\n * const { bottom } = useSafeAreaInsets();\n * const theme = useTheme();\n *\n * return (\n * \n * {}} />\n * {}} />\n * {}} />\n * {}} />\n * {}}\n * style={[\n * styles.fab,\n * { top: (BOTTOM_APPBAR_HEIGHT - MEDIUM_FAB_HEIGHT) / 2 },\n * ]}\n * />\n * \n * );\n * };\n *\n * const styles = StyleSheet.create({\n * bottom: {\n * backgroundColor: 'aquamarine',\n * position: 'absolute',\n * left: 0,\n * right: 0,\n * bottom: 0,\n * },\n * fab: {\n * position: 'absolute',\n * right: 16,\n * },\n * });\n *\n * export default MyComponent;\n * ```\n */\nconst Appbar = _ref => {\n let {\n children,\n dark,\n style,\n mode = 'small',\n elevated,\n safeAreaInsets,\n theme: themeOverrides,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const {\n isV3\n } = theme;\n const flattenedStyle = StyleSheet.flatten(style);\n const {\n backgroundColor: customBackground,\n elevation = isV3 ? elevated ? 2 : 0 : 4,\n ...restStyle\n } = flattenedStyle || {};\n const backgroundColor = getAppbarBackgroundColor(theme, elevation, customBackground, elevated);\n const isMode = modeToCompare => {\n return isV3 && mode === modeToCompare;\n };\n let isDark = false;\n if (typeof dark === 'boolean') {\n isDark = dark;\n } else if (!isV3) {\n isDark = backgroundColor === 'transparent' ? false : typeof backgroundColor === 'string' ? !color(backgroundColor).isLight() : true;\n }\n const isV3CenterAlignedMode = isV3 && isMode('center-aligned');\n let shouldCenterContent = false;\n let shouldAddLeftSpacing = false;\n let shouldAddRightSpacing = false;\n if (!isV3 && Platform.OS === 'ios' || isV3CenterAlignedMode) {\n let hasAppbarContent = false;\n let leftItemsCount = 0;\n let rightItemsCount = 0;\n React.Children.forEach(children, child => {\n if ( /*#__PURE__*/React.isValidElement(child)) {\n if (child.type === AppbarContent) {\n hasAppbarContent = true;\n } else if (hasAppbarContent) {\n rightItemsCount++;\n } else {\n leftItemsCount++;\n }\n }\n });\n shouldCenterContent = hasAppbarContent && leftItemsCount < 2 && rightItemsCount < (isV3 ? 3 : 2);\n shouldAddLeftSpacing = shouldCenterContent && leftItemsCount === 0;\n shouldAddRightSpacing = shouldCenterContent && rightItemsCount === 0;\n }\n const filterAppbarActions = React.useCallback(function () {\n let isLeading = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n return React.Children.toArray(children).filter(child =>\n // @ts-expect-error: TypeScript complains about the type of type but it doesn't matter\n isLeading ? child.props.isLeading : !child.props.isLeading);\n }, [children]);\n const spacingStyle = isV3 ? styles.v3Spacing : styles.spacing;\n const insets = {\n paddingBottom: safeAreaInsets === null || safeAreaInsets === void 0 ? void 0 : safeAreaInsets.bottom,\n paddingTop: safeAreaInsets === null || safeAreaInsets === void 0 ? void 0 : safeAreaInsets.top,\n paddingLeft: safeAreaInsets === null || safeAreaInsets === void 0 ? void 0 : safeAreaInsets.left,\n paddingRight: safeAreaInsets === null || safeAreaInsets === void 0 ? void 0 : safeAreaInsets.right\n };\n return /*#__PURE__*/React.createElement(Surface, _extends({\n style: [{\n backgroundColor\n }, styles.appbar, {\n height: isV3 ? modeAppbarHeight[mode] : DEFAULT_APPBAR_HEIGHT\n }, insets, restStyle, !theme.isV3 && {\n elevation\n }],\n elevation: elevation\n }, rest), shouldAddLeftSpacing ? /*#__PURE__*/React.createElement(View, {\n style: spacingStyle\n }) : null, (!isV3 || isMode('small') || isMode('center-aligned')) && renderAppbarContent({\n children,\n isDark,\n theme,\n isV3,\n shouldCenterContent: isV3CenterAlignedMode || shouldCenterContent\n }), (isMode('medium') || isMode('large')) && /*#__PURE__*/React.createElement(View, {\n style: [styles.columnContainer, isMode('center-aligned') && styles.centerAlignedContainer]\n }, /*#__PURE__*/React.createElement(View, {\n style: styles.controlsRow\n }, renderAppbarContent({\n children,\n isDark,\n isV3,\n renderOnly: ['Appbar.BackAction'],\n mode\n }), renderAppbarContent({\n children: filterAppbarActions(true),\n isDark,\n isV3,\n renderOnly: ['Appbar.Action'],\n mode\n }), /*#__PURE__*/React.createElement(View, {\n style: styles.rightActionControls\n }, renderAppbarContent({\n children: filterAppbarActions(false),\n isDark,\n isV3,\n renderExcept: ['Appbar', 'Appbar.BackAction', 'Appbar.Content', 'Appbar.Header'],\n mode\n }))), renderAppbarContent({\n children,\n isDark,\n isV3,\n renderOnly: ['Appbar.Content'],\n mode\n })), shouldAddRightSpacing ? /*#__PURE__*/React.createElement(View, {\n style: spacingStyle\n }) : null);\n};\nconst styles = StyleSheet.create({\n appbar: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 4\n },\n spacing: {\n width: 48\n },\n v3Spacing: {\n width: 52\n },\n controlsRow: {\n flex: 1,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between'\n },\n rightActionControls: {\n flexDirection: 'row',\n flex: 1,\n justifyContent: 'flex-end'\n },\n columnContainer: {\n flexDirection: 'column',\n flex: 1,\n paddingTop: 8\n },\n centerAlignedContainer: {\n paddingTop: 0\n }\n});\nexport default Appbar;\n\n// @component-docs ignore-next-line\nexport { Appbar };\n//# sourceMappingURL=Appbar.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Platform, StyleSheet, Pressable, View } from 'react-native';\nimport color from 'color';\nimport { modeTextVariant } from './utils';\nimport { useInternalTheme } from '../../core/theming';\nimport { white } from '../../styles/themes/v2/colors';\nimport Text from '../Typography/Text';\n/**\n * A component used to display a title and optional subtitle in an appbar.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Appbar } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * \n * \n * );\n *\n * export default MyComponent;\n * ```\n */\nconst AppbarContent = _ref => {\n let {\n color: titleColor,\n subtitle,\n subtitleStyle,\n onPress,\n disabled,\n style,\n titleRef,\n titleStyle,\n title,\n titleMaxFontSizeMultiplier,\n mode = 'small',\n theme: themeOverrides,\n testID = 'appbar-content',\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const {\n isV3,\n colors\n } = theme;\n const titleTextColor = titleColor ? titleColor : isV3 ? colors.onSurface : white;\n const subtitleColor = color(titleTextColor).alpha(0.7).rgb().string();\n const modeContainerStyles = {\n small: styles.v3DefaultContainer,\n medium: styles.v3MediumContainer,\n large: styles.v3LargeContainer,\n 'center-aligned': styles.v3DefaultContainer\n };\n const variant = modeTextVariant[mode];\n const contentWrapperProps = {\n pointerEvents: 'box-none',\n style: [styles.container, isV3 && modeContainerStyles[mode], style],\n testID,\n ...rest\n };\n const content = /*#__PURE__*/React.createElement(React.Fragment, null, typeof title === 'string' ? /*#__PURE__*/React.createElement(Text, _extends({}, isV3 && {\n variant\n }, {\n ref: titleRef,\n style: [{\n color: titleTextColor,\n ...(isV3 ? theme.fonts[variant] : Platform.OS === 'ios' ? theme.fonts.regular : theme.fonts.medium)\n }, !isV3 && styles.title, titleStyle],\n numberOfLines: 1,\n accessible: true,\n accessibilityRole: onPress ? 'none' : Platform.OS === 'web' ? 'heading' : 'header'\n // @ts-expect-error We keep old a11y props for backwards compat with old RN versions\n ,\n accessibilityTraits: \"header\",\n testID: `${testID}-title-text`,\n maxFontSizeMultiplier: titleMaxFontSizeMultiplier\n }), title) : title, !isV3 && subtitle ? /*#__PURE__*/React.createElement(Text, {\n style: [styles.subtitle, {\n color: subtitleColor\n }, subtitleStyle],\n numberOfLines: 1\n }, subtitle) : null);\n if (onPress) {\n return (\n /*#__PURE__*/\n // eslint-disable-next-line react-native-a11y/has-accessibility-props\n React.createElement(Pressable, _extends({\n accessibilityRole: touchableRole\n // @ts-expect-error We keep old a11y props for backwards compat with old RN versions\n ,\n accessibilityTraits: touchableRole,\n accessibilityComponentType: \"button\",\n onPress: onPress,\n disabled: disabled\n }, contentWrapperProps), content)\n );\n }\n return /*#__PURE__*/React.createElement(View, contentWrapperProps, content);\n};\nAppbarContent.displayName = 'Appbar.Content';\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n paddingHorizontal: 12\n },\n v3DefaultContainer: {\n paddingHorizontal: 0\n },\n v3MediumContainer: {\n paddingHorizontal: 0,\n justifyContent: 'flex-end',\n paddingBottom: 24\n },\n v3LargeContainer: {\n paddingHorizontal: 0,\n paddingTop: 36,\n justifyContent: 'flex-end',\n paddingBottom: 28\n },\n title: {\n fontSize: Platform.OS === 'ios' ? 17 : 20\n },\n subtitle: {\n fontSize: Platform.OS === 'ios' ? 11 : 14\n }\n});\nconst iosTouchableRole = ['button', 'header'];\nconst touchableRole = Platform.select({\n ios: iosTouchableRole,\n default: iosTouchableRole[0]\n});\nexport default AppbarContent;\n\n// @component-docs ignore-next-line\nexport { AppbarContent };\n//# sourceMappingURL=AppbarContent.js.map","import React from 'react';\nimport { StyleSheet } from 'react-native';\nimport overlay from '../../styles/overlay';\nimport { black, white } from '../../styles/themes/v2/colors';\nconst borderStyleProperties = ['borderRadius', 'borderTopLeftRadius', 'borderTopRightRadius', 'borderBottomRightRadius', 'borderBottomLeftRadius'];\nexport const getAppbarBackgroundColor = (theme, elevation, customBackground, elevated) => {\n const {\n isV3,\n dark: isDarkTheme,\n mode,\n colors\n } = theme;\n const isAdaptiveMode = mode === 'adaptive';\n if (customBackground) {\n return customBackground;\n }\n if (!isV3) {\n if (isDarkTheme && isAdaptiveMode) {\n return overlay(elevation, colors === null || colors === void 0 ? void 0 : colors.surface);\n }\n return colors.primary;\n }\n if (elevated) {\n return theme.colors.elevation.level2;\n }\n return colors.surface;\n};\nexport const getAppbarColor = _ref => {\n let {\n color,\n isDark,\n isV3\n } = _ref;\n if (typeof color !== 'undefined') {\n return color;\n }\n if (isDark) {\n return white;\n }\n if (isV3) {\n return undefined;\n }\n return black;\n};\nexport const getAppbarBorders = style => {\n const borders = {};\n for (const property of borderStyleProperties) {\n const value = style[property];\n if (value) {\n borders[property] = value;\n }\n }\n return borders;\n};\nexport const DEFAULT_APPBAR_HEIGHT = 56;\nconst MD3_DEFAULT_APPBAR_HEIGHT = 64;\nexport const modeAppbarHeight = {\n small: MD3_DEFAULT_APPBAR_HEIGHT,\n medium: 112,\n large: 152,\n 'center-aligned': MD3_DEFAULT_APPBAR_HEIGHT\n};\nexport const modeTextVariant = {\n small: 'titleLarge',\n medium: 'headlineSmall',\n large: 'headlineMedium',\n 'center-aligned': 'titleLarge'\n};\nexport const renderAppbarContent = _ref2 => {\n let {\n children,\n isDark,\n shouldCenterContent = false,\n isV3,\n renderOnly,\n renderExcept,\n mode = 'small',\n theme\n } = _ref2;\n return React.Children.toArray(children).filter(child => child != null && typeof child !== 'boolean').filter(child =>\n // @ts-expect-error: TypeScript complains about the type of type but it doesn't matter\n renderExcept ? !renderExcept.includes(child.type.displayName) : child).filter(child =>\n // @ts-expect-error: TypeScript complains about the type of type but it doesn't matter\n renderOnly ? renderOnly.includes(child.type.displayName) : child).map((child, i) => {\n if (! /*#__PURE__*/React.isValidElement(child) || !['Appbar.Content', 'Appbar.Action', 'Appbar.BackAction', 'Tooltip'].includes(\n // @ts-expect-error: TypeScript complains about the type of type but it doesn't matter\n child.type.displayName)) {\n return child;\n }\n const props = {\n theme,\n color: getAppbarColor({\n color: child.props.color,\n isDark,\n isV3\n })\n };\n\n // @ts-expect-error: TypeScript complains about the type of type but it doesn't matter\n if (child.type.displayName === 'Appbar.Content') {\n props.mode = mode;\n props.style = [isV3 ? i === 0 && !shouldCenterContent && styles.v3Spacing : i !== 0 && styles.v2Spacing, shouldCenterContent && styles.centerAlignedContent, child.props.style];\n props.color;\n }\n return /*#__PURE__*/React.cloneElement(child, props);\n });\n};\nconst styles = StyleSheet.create({\n centerAlignedContent: {\n alignItems: 'center'\n },\n v2Spacing: {\n marginLeft: 8\n },\n v3Spacing: {\n marginLeft: 12\n }\n});\n//# sourceMappingURL=utils.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport color from 'color';\nimport { useInternalTheme } from '../../core/theming';\nimport { black } from '../../styles/themes/v2/colors';\nimport { forwardRef } from '../../utils/forwardRef';\nimport IconButton from '../IconButton/IconButton';\n/**\n * A component used to display an action item in the appbar.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Appbar } from 'react-native-paper';\n * import { Platform } from 'react-native';\n *\n * const MORE_ICON = Platform.OS === 'ios' ? 'dots-horizontal' : 'dots-vertical';\n *\n * const MyComponent = () => (\n * \n * \n * {}} />\n * {}} />\n * \n * );\n *\n * export default MyComponent;\n * ```\n */\nconst AppbarAction = forwardRef((_ref, ref) => {\n let {\n size = 24,\n color: iconColor,\n icon,\n disabled,\n onPress,\n accessibilityLabel,\n isLeading,\n theme: themeOverrides,\n rippleColor,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const actionIconColor = iconColor ? iconColor : theme.isV3 ? isLeading ? theme.colors.onSurface : theme.colors.onSurfaceVariant : color(black).alpha(0.54).rgb().string();\n return /*#__PURE__*/React.createElement(IconButton, _extends({\n size: size,\n onPress: onPress,\n iconColor: actionIconColor,\n icon: icon,\n disabled: disabled,\n accessibilityLabel: accessibilityLabel,\n animated: true,\n ref: ref,\n rippleColor: rippleColor\n }, rest));\n});\nAppbarAction.displayName = 'Appbar.Action';\nexport default AppbarAction;\n\n// @component-docs ignore-next-line\nexport { AppbarAction };\n//# sourceMappingURL=AppbarAction.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport AppbarAction from './AppbarAction';\nimport AppbarBackIcon from './AppbarBackIcon';\nimport { forwardRef } from '../../utils/forwardRef';\n/**\n * A component used to display a back button in the appbar.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Appbar } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * {}} />\n * \n * );\n *\n * export default MyComponent;\n * ```\n */\nconst AppbarBackAction = forwardRef((_ref, ref) => {\n let {\n accessibilityLabel = 'Back',\n ...rest\n } = _ref;\n return /*#__PURE__*/React.createElement(AppbarAction, _extends({\n accessibilityLabel: accessibilityLabel\n }, rest, {\n icon: AppbarBackIcon,\n isLeading: true,\n ref: ref\n }));\n});\nAppbarBackAction.displayName = 'Appbar.BackAction';\nexport default AppbarBackAction;\n\n// @component-docs ignore-next-line\nexport { AppbarBackAction };\n//# sourceMappingURL=AppbarBackAction.js.map","import * as React from 'react';\nimport { Platform, I18nManager, View, Image, StyleSheet } from 'react-native';\nimport MaterialCommunityIcon from '../MaterialCommunityIcon';\nconst AppbarBackIcon = _ref => {\n let {\n size,\n color\n } = _ref;\n const iosIconSize = size - 3;\n return Platform.OS === 'ios' ? /*#__PURE__*/React.createElement(View, {\n style: [styles.wrapper, {\n width: size,\n height: size,\n transform: [{\n scaleX: I18nManager.getConstants().isRTL ? -1 : 1\n }]\n }]\n }, /*#__PURE__*/React.createElement(Image, {\n source: require('../../assets/back-chevron.png'),\n style: [styles.icon, {\n tintColor: color,\n width: iosIconSize,\n height: iosIconSize\n }],\n accessibilityIgnoresInvertColors: true\n })) : /*#__PURE__*/React.createElement(MaterialCommunityIcon, {\n name: \"arrow-left\",\n color: color,\n size: size,\n direction: I18nManager.getConstants().isRTL ? 'rtl' : 'ltr'\n });\n};\nconst styles = StyleSheet.create({\n wrapper: {\n alignItems: 'center',\n justifyContent: 'center'\n },\n icon: {\n resizeMode: 'contain'\n }\n});\nexport default AppbarBackIcon;\n\n// @component-docs ignore-next-line\nexport { AppbarBackIcon };\n//# sourceMappingURL=AppbarBackIcon.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Platform, StyleSheet, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { Appbar } from './Appbar';\nimport { DEFAULT_APPBAR_HEIGHT, getAppbarBackgroundColor, modeAppbarHeight, getAppbarBorders } from './utils';\nimport { useInternalTheme } from '../../core/theming';\nimport shadow from '../../styles/shadow';\n/**\n * A component to use as a header at the top of the screen.\n * It can contain the screen title, controls such as navigation buttons, menu button etc.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Appbar } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const _goBack = () => console.log('Went back');\n *\n * const _handleSearch = () => console.log('Searching');\n *\n * const _handleMore = () => console.log('Shown more');\n *\n * return (\n * \n * \n * \n * \n * \n * \n * );\n * };\n *\n * export default MyComponent;\n * ```\n */\nconst AppbarHeader = _ref => {\n let {\n // Don't use default props since we check it to know whether we should use SafeAreaView\n statusBarHeight,\n style,\n dark,\n mode = Platform.OS === 'ios' ? 'center-aligned' : 'small',\n elevated = false,\n theme: themeOverrides,\n testID = 'appbar-header',\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const {\n isV3\n } = theme;\n const flattenedStyle = StyleSheet.flatten(style);\n const {\n height = isV3 ? modeAppbarHeight[mode] : DEFAULT_APPBAR_HEIGHT,\n elevation = isV3 ? elevated ? 2 : 0 : 4,\n backgroundColor: customBackground,\n zIndex = isV3 && elevated ? 1 : 0,\n ...restStyle\n } = flattenedStyle || {};\n const borderRadius = getAppbarBorders(restStyle);\n const backgroundColor = getAppbarBackgroundColor(theme, elevation, customBackground, elevated);\n const {\n top,\n left,\n right\n } = useSafeAreaInsets();\n return /*#__PURE__*/React.createElement(View, {\n testID: `${testID}-root-layer`,\n style: [{\n backgroundColor,\n zIndex,\n elevation,\n paddingTop: statusBarHeight ?? top,\n paddingHorizontal: Math.max(left, right)\n }, borderRadius, shadow(elevation)]\n }, /*#__PURE__*/React.createElement(Appbar, _extends({\n testID: testID,\n style: [{\n height,\n backgroundColor\n }, styles.appbar, restStyle],\n dark: dark\n }, isV3 && {\n mode\n }, rest, {\n theme: theme\n })));\n};\nAppbarHeader.displayName = 'Appbar.Header';\nconst styles = StyleSheet.create({\n appbar: {\n elevation: 0\n }\n});\nexport default AppbarHeader;\n\n// @component-docs ignore-next-line\nexport { AppbarHeader };\n//# sourceMappingURL=AppbarHeader.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Animated, TextInput as NativeTextInput } from 'react-native';\nimport TextInputAffix from './Adornment/TextInputAffix';\nimport TextInputIcon from './Adornment/TextInputIcon';\nimport TextInputFlat from './TextInputFlat';\nimport TextInputOutlined from './TextInputOutlined';\nimport { useInternalTheme } from '../../core/theming';\nimport { forwardRef } from '../../utils/forwardRef';\nimport { roundLayoutSize } from '../../utils/roundLayoutSize';\nconst BLUR_ANIMATION_DURATION = 180;\nconst FOCUS_ANIMATION_DURATION = 150;\nconst DefaultRenderer = props => /*#__PURE__*/React.createElement(NativeTextInput, props);\n\n/**\n * A component to allow users to input text.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { TextInput } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [text, setText] = React.useState(\"\");\n *\n * return (\n * setText(text)}\n * />\n * );\n * };\n *\n * export default MyComponent;\n * ```\n *\n * @extends TextInput props https://reactnative.dev/docs/textinput#props\n */\nconst TextInput = forwardRef((_ref, ref) => {\n let {\n mode = 'flat',\n dense = false,\n disabled = false,\n error: errorProp = false,\n multiline = false,\n editable = true,\n contentStyle,\n render = DefaultRenderer,\n theme: themeOverrides,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const isControlled = rest.value !== undefined;\n const validInputValue = isControlled ? rest.value : rest.defaultValue;\n const {\n current: labeled\n } = React.useRef(new Animated.Value(validInputValue ? 0 : 1));\n const {\n current: error\n } = React.useRef(new Animated.Value(errorProp ? 1 : 0));\n const [focused, setFocused] = React.useState(false);\n const [placeholder, setPlaceholder] = React.useState(' ');\n const [uncontrolledValue, setUncontrolledValue] = React.useState(validInputValue);\n // Use value from props instead of local state when input is controlled\n const value = isControlled ? rest.value : uncontrolledValue;\n const [labelTextLayout, setLabelTextLayout] = React.useState({\n width: 33\n });\n const [inputContainerLayout, setInputContainerLayout] = React.useState({\n width: 65\n });\n const [labelLayout, setLabelLayout] = React.useState({\n measured: false,\n width: 0,\n height: 0\n });\n const [leftLayout, setLeftLayout] = React.useState({\n width: null,\n height: null\n });\n const [rightLayout, setRightLayout] = React.useState({\n width: null,\n height: null\n });\n const timer = React.useRef();\n const root = React.useRef();\n const {\n scale\n } = theme.animation;\n React.useImperativeHandle(ref, () => ({\n focus: () => {\n var _root$current;\n return (_root$current = root.current) === null || _root$current === void 0 ? void 0 : _root$current.focus();\n },\n clear: () => {\n var _root$current2;\n return (_root$current2 = root.current) === null || _root$current2 === void 0 ? void 0 : _root$current2.clear();\n },\n setNativeProps: args => {\n var _root$current3;\n return (_root$current3 = root.current) === null || _root$current3 === void 0 ? void 0 : _root$current3.setNativeProps(args);\n },\n isFocused: () => {\n var _root$current4;\n return ((_root$current4 = root.current) === null || _root$current4 === void 0 ? void 0 : _root$current4.isFocused()) || false;\n },\n blur: () => {\n var _root$current5;\n return (_root$current5 = root.current) === null || _root$current5 === void 0 ? void 0 : _root$current5.blur();\n },\n forceFocus: () => {\n var _root$current6;\n return (_root$current6 = root.current) === null || _root$current6 === void 0 ? void 0 : _root$current6.focus();\n }\n }));\n React.useEffect(() => {\n // When the input has an error, we wiggle the label and apply error styles\n if (errorProp) {\n // show error\n Animated.timing(error, {\n toValue: 1,\n duration: FOCUS_ANIMATION_DURATION * scale,\n // To prevent this - https://github.com/callstack/react-native-paper/issues/941\n useNativeDriver: true\n }).start();\n } else {\n // hide error\n {\n Animated.timing(error, {\n toValue: 0,\n duration: BLUR_ANIMATION_DURATION * scale,\n // To prevent this - https://github.com/callstack/react-native-paper/issues/941\n useNativeDriver: true\n }).start();\n }\n }\n }, [errorProp, scale, error]);\n React.useEffect(() => {\n // Show placeholder text only if the input is focused, or there's no label\n // We don't show placeholder if there's a label because the label acts as placeholder\n // When focused, the label moves up, so we can show a placeholder\n if (focused || !rest.label) {\n // If the user wants to use the contextMenu, when changing the placeholder, the contextMenu is closed\n // This is a workaround to mitigate this behavior in scenarios where the placeholder is not specified.\n if (rest.placeholder) {\n // Set the placeholder in a delay to offset the label animation\n // If we show it immediately, they'll overlap and look ugly\n timer.current = setTimeout(() => setPlaceholder(rest.placeholder), 50);\n }\n } else {\n // hidePlaceholder\n\n // Issue: https://github.com/callstack/react-native-paper/issues/3138\n // Description: Changing the placeholder text value dynamically,\n // within multiline input on iOS, doesn't work properly –\n // the placeholder is not displayed initially.\n // Root cause: Placeholder initial value, which has length 0.\n // More context: The issue was also reproduced in react-native, using its own TextInput.\n // Workaround: Set an empty space character in the default value.\n setPlaceholder(' ');\n }\n return () => {\n if (timer.current) {\n clearTimeout(timer.current);\n }\n };\n }, [focused, rest.label, rest.placeholder]);\n React.useEffect(() => {\n labeled.stopAnimation();\n // The label should be minimized if the text input is focused, or has text\n // In minimized mode, the label moves up and becomes small\n // workaround for animated regression for react native > 0.61\n // https://github.com/callstack/react-native-paper/pull/1440\n if (value || focused) {\n // minimize label\n Animated.timing(labeled, {\n toValue: 0,\n duration: BLUR_ANIMATION_DURATION * scale,\n // To prevent this - https://github.com/callstack/react-native-paper/issues/941\n useNativeDriver: true\n }).start();\n } else {\n // restore label\n Animated.timing(labeled, {\n toValue: 1,\n duration: FOCUS_ANIMATION_DURATION * scale,\n // To prevent this - https://github.com/callstack/react-native-paper/issues/941\n useNativeDriver: true\n }).start();\n }\n }, [focused, value, labeled, scale]);\n const onLeftAffixLayoutChange = React.useCallback(event => {\n const height = roundLayoutSize(event.nativeEvent.layout.height);\n const width = roundLayoutSize(event.nativeEvent.layout.width);\n if (width !== leftLayout.width || height !== leftLayout.height) {\n setLeftLayout({\n width,\n height\n });\n }\n }, [leftLayout.height, leftLayout.width]);\n const onRightAffixLayoutChange = React.useCallback(event => {\n const width = roundLayoutSize(event.nativeEvent.layout.width);\n const height = roundLayoutSize(event.nativeEvent.layout.height);\n if (width !== rightLayout.width || height !== rightLayout.height) {\n setRightLayout({\n width,\n height\n });\n }\n }, [rightLayout.height, rightLayout.width]);\n const handleFocus = args => {\n var _rest$onFocus;\n if (disabled || !editable) {\n return;\n }\n setFocused(true);\n (_rest$onFocus = rest.onFocus) === null || _rest$onFocus === void 0 ? void 0 : _rest$onFocus.call(rest, args);\n };\n const handleBlur = args => {\n var _rest$onBlur;\n if (!editable) {\n return;\n }\n setFocused(false);\n (_rest$onBlur = rest.onBlur) === null || _rest$onBlur === void 0 ? void 0 : _rest$onBlur.call(rest, args);\n };\n const handleChangeText = value => {\n var _rest$onChangeText;\n if (!editable || disabled) {\n return;\n }\n if (!isControlled) {\n // Keep track of value in local state when input is not controlled\n setUncontrolledValue(value);\n }\n (_rest$onChangeText = rest.onChangeText) === null || _rest$onChangeText === void 0 ? void 0 : _rest$onChangeText.call(rest, value);\n };\n const handleLayoutAnimatedText = React.useCallback(e => {\n const width = roundLayoutSize(e.nativeEvent.layout.width);\n const height = roundLayoutSize(e.nativeEvent.layout.height);\n if (width !== labelLayout.width || height !== labelLayout.height) {\n setLabelLayout({\n width,\n height,\n measured: true\n });\n }\n }, [labelLayout.height, labelLayout.width]);\n const handleLabelTextLayout = React.useCallback(_ref2 => {\n let {\n nativeEvent\n } = _ref2;\n setLabelTextLayout({\n width: nativeEvent.lines.reduce((acc, line) => acc + Math.ceil(line.width), 0)\n });\n }, []);\n const handleInputContainerLayout = React.useCallback(_ref3 => {\n let {\n nativeEvent: {\n layout\n }\n } = _ref3;\n setInputContainerLayout({\n width: layout.width\n });\n }, []);\n const forceFocus = React.useCallback(() => {\n var _root$current7;\n return (_root$current7 = root.current) === null || _root$current7 === void 0 ? void 0 : _root$current7.focus();\n }, []);\n const {\n maxFontSizeMultiplier = 1.5\n } = rest;\n if (mode === 'outlined') {\n return /*#__PURE__*/React.createElement(TextInputOutlined, _extends({\n dense: dense,\n disabled: disabled,\n error: errorProp,\n multiline: multiline,\n editable: editable,\n render: render\n }, rest, {\n theme: theme,\n value: value,\n parentState: {\n labeled,\n error,\n focused,\n placeholder,\n value,\n labelTextLayout,\n labelLayout,\n leftLayout,\n rightLayout,\n inputContainerLayout\n },\n innerRef: ref => {\n root.current = ref;\n },\n onFocus: handleFocus,\n forceFocus: forceFocus,\n onBlur: handleBlur,\n onChangeText: handleChangeText,\n onLayoutAnimatedText: handleLayoutAnimatedText,\n onInputLayout: handleInputContainerLayout,\n onLabelTextLayout: handleLabelTextLayout,\n onLeftAffixLayoutChange: onLeftAffixLayoutChange,\n onRightAffixLayoutChange: onRightAffixLayoutChange,\n maxFontSizeMultiplier: maxFontSizeMultiplier,\n contentStyle: contentStyle\n }));\n }\n return /*#__PURE__*/React.createElement(TextInputFlat, _extends({\n dense: dense,\n disabled: disabled,\n error: errorProp,\n multiline: multiline,\n editable: editable,\n render: render\n }, rest, {\n theme: theme,\n value: value,\n parentState: {\n labeled,\n error,\n focused,\n placeholder,\n value,\n labelTextLayout,\n labelLayout,\n leftLayout,\n rightLayout,\n inputContainerLayout\n },\n innerRef: ref => {\n root.current = ref;\n },\n onFocus: handleFocus,\n forceFocus: forceFocus,\n onBlur: handleBlur,\n onInputLayout: handleInputContainerLayout,\n onChangeText: handleChangeText,\n onLayoutAnimatedText: handleLayoutAnimatedText,\n onLabelTextLayout: handleLabelTextLayout,\n onLeftAffixLayoutChange: onLeftAffixLayoutChange,\n onRightAffixLayoutChange: onRightAffixLayoutChange,\n maxFontSizeMultiplier: maxFontSizeMultiplier,\n contentStyle: contentStyle\n }));\n});\n// @component ./Adornment/TextInputIcon.tsx\nTextInput.Icon = TextInputIcon;\n\n// @component ./Adornment/TextInputAffix.tsx\n// @ts-ignore Types of property 'theme' are incompatible.\nTextInput.Affix = TextInputAffix;\nexport default TextInput;\n//# sourceMappingURL=TextInput.js.map","import React from 'react';\nimport { Animated, Pressable, StyleSheet, Text } from 'react-native';\nimport { AdornmentSide } from './enums';\nimport { getTextColor } from './utils';\nimport { useInternalTheme } from '../../../core/theming';\nimport { getConstants } from '../helpers';\nconst AffixContext = /*#__PURE__*/React.createContext({\n textStyle: {\n fontFamily: '',\n color: ''\n },\n topPosition: null,\n side: AdornmentSide.Left\n});\nconst AffixAdornment = _ref => {\n let {\n affix,\n side,\n textStyle,\n topPosition,\n onLayout,\n visible,\n paddingHorizontal,\n maxFontSizeMultiplier,\n testID,\n disabled\n } = _ref;\n return /*#__PURE__*/React.createElement(AffixContext.Provider, {\n value: {\n side,\n textStyle,\n topPosition,\n onLayout,\n visible,\n paddingHorizontal,\n maxFontSizeMultiplier,\n testID,\n disabled\n }\n }, affix);\n};\n\n/**\n * A component to render a leading / trailing text in the TextInput\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { TextInput } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [text, setText] = React.useState('');\n *\n * return (\n * }\n * />\n * );\n * };\n *\n * export default MyComponent;\n * ```\n */\n\nconst TextInputAffix = _ref2 => {\n let {\n text,\n textStyle: labelStyle,\n theme: themeOverrides,\n onLayout: onTextLayout,\n onPress,\n accessibilityLabel = text\n } = _ref2;\n const theme = useInternalTheme(themeOverrides);\n const {\n AFFIX_OFFSET\n } = getConstants(theme.isV3);\n const {\n textStyle,\n onLayout,\n topPosition,\n side,\n visible,\n paddingHorizontal,\n maxFontSizeMultiplier,\n testID,\n disabled\n } = React.useContext(AffixContext);\n const offset = typeof paddingHorizontal === 'number' ? paddingHorizontal : AFFIX_OFFSET;\n const style = {\n top: topPosition,\n [side]: offset\n };\n const textColor = getTextColor({\n theme,\n disabled\n });\n const affix = /*#__PURE__*/React.createElement(Animated.View, {\n style: [styles.container, style, {\n opacity: (visible === null || visible === void 0 ? void 0 : visible.interpolate({\n inputRange: [0, 1],\n outputRange: [1, 0]\n })) || 1\n }],\n onLayout: onLayout,\n testID: testID\n }, /*#__PURE__*/React.createElement(Text, {\n maxFontSizeMultiplier: maxFontSizeMultiplier,\n style: [{\n color: textColor\n }, textStyle, labelStyle],\n onLayout: onTextLayout,\n testID: `${testID}-text`\n }, text));\n if (onPress) {\n return /*#__PURE__*/React.createElement(Pressable, {\n onPress: onPress,\n accessibilityRole: \"button\",\n accessibilityLabel: accessibilityLabel,\n style: styles.container\n }, affix);\n }\n return affix;\n};\nTextInputAffix.displayName = 'TextInput.Affix';\nconst styles = StyleSheet.create({\n container: {\n position: 'absolute',\n justifyContent: 'center',\n alignItems: 'center'\n }\n});\nexport default TextInputAffix;\n\n// @component-docs ignore-next-line\nexport { TextInputAffix, AffixAdornment };\n//# sourceMappingURL=TextInputAffix.js.map","export let AdornmentType = /*#__PURE__*/function (AdornmentType) {\n AdornmentType[\"Icon\"] = \"icon\";\n AdornmentType[\"Affix\"] = \"affix\";\n return AdornmentType;\n}({});\nexport let AdornmentSide = /*#__PURE__*/function (AdornmentSide) {\n AdornmentSide[\"Right\"] = \"right\";\n AdornmentSide[\"Left\"] = \"left\";\n return AdornmentSide;\n}({});\nexport let InputMode = /*#__PURE__*/function (InputMode) {\n InputMode[\"Outlined\"] = \"outlined\";\n InputMode[\"Flat\"] = \"flat\";\n return InputMode;\n}({});\n//# sourceMappingURL=enums.js.map","import color from 'color';\nexport function getTextColor(_ref) {\n var _theme$colors;\n let {\n theme,\n disabled\n } = _ref;\n if (theme.isV3) {\n if (disabled) {\n return theme.colors.onSurfaceDisabled;\n }\n return theme.colors.onSurfaceVariant;\n }\n return color((_theme$colors = theme.colors) === null || _theme$colors === void 0 ? void 0 : _theme$colors.text).alpha(theme.dark ? 0.7 : 0.54).rgb().string();\n}\nexport function getIconColor(_ref2) {\n let {\n theme,\n isTextInputFocused,\n disabled,\n customColor\n } = _ref2;\n if (typeof customColor === 'function') {\n return customColor(isTextInputFocused);\n }\n if (customColor) {\n return customColor;\n }\n if (!theme.isV3) {\n return theme.colors.text;\n }\n if (disabled) {\n return theme.colors.onSurfaceDisabled;\n }\n return theme.colors.onSurfaceVariant;\n}\n//# sourceMappingURL=utils.js.map","import { Platform } from 'react-native';\nimport color from 'color';\nimport { AdornmentSide, AdornmentType } from './Adornment/enums';\nimport { MIN_WIDTH, ADORNMENT_SIZE, MD2_ADORNMENT_OFFSET, MD2_AFFIX_OFFSET, MD2_FLAT_INPUT_OFFSET, MD2_ICON_OFFSET, MD2_INPUT_PADDING_HORIZONTAL, MD2_LABEL_PADDING_HORIZONTAL, MD2_LABEL_PADDING_TOP, MD2_MIN_HEIGHT, MD2_OUTLINED_INPUT_OFFSET, MD3_ADORNMENT_OFFSET, MD3_AFFIX_OFFSET, MD3_FLAT_INPUT_OFFSET, MD3_ICON_OFFSET, MD3_INPUT_PADDING_HORIZONTAL, MD3_LABEL_PADDING_HORIZONTAL, MD3_LABEL_PADDING_TOP, MD3_MIN_HEIGHT, MD3_OUTLINED_INPUT_OFFSET } from './constants';\nexport const calculateLabelTopPosition = function (labelHeight) {\n let height = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n let optionalPadding = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n const customHeight = height > 0 ? height : 0;\n return Math.floor((customHeight - labelHeight) / 2 + optionalPadding);\n};\nexport const calculateInputHeight = function (labelHeight) {\n let height = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n let minHeight = arguments.length > 2 ? arguments[2] : undefined;\n const finalHeight = height > 0 ? height : labelHeight;\n if (height > 0) return height;\n return finalHeight < minHeight ? minHeight : finalHeight;\n};\nexport const calculatePadding = props => {\n const {\n height,\n multiline = false\n } = props;\n let result = 0;\n if (multiline) {\n if (height && multiline) {\n result = calculateTextAreaPadding(props);\n } else {\n result = calculateInputPadding(props);\n }\n }\n return Math.max(0, result);\n};\nconst calculateTextAreaPadding = props => {\n const {\n dense\n } = props;\n return dense ? 10 : 20;\n};\nconst calculateInputPadding = _ref => {\n let {\n topPosition,\n fontSize,\n multiline,\n scale,\n dense,\n offset,\n isAndroid\n } = _ref;\n const refFontSize = scale * fontSize;\n let result = Math.floor(topPosition / 2);\n result = result + Math.floor((refFontSize - fontSize) / 2) - (scale < 1 ? offset / 2 : 0);\n if (multiline && isAndroid) result = Math.min(dense ? offset / 2 : offset, result);\n return result;\n};\nexport const adjustPaddingOut = _ref2 => {\n let {\n pad,\n multiline,\n label,\n scale,\n height,\n fontSize,\n lineHeight,\n dense,\n offset,\n isAndroid\n } = _ref2;\n const fontHeight = lineHeight ?? fontSize;\n const refFontHeight = scale * fontSize;\n let result = pad;\n if (height && !multiline) {\n return {\n paddingTop: Math.max(0, (height - fontHeight) / 2),\n paddingBottom: Math.max(0, (height - fontHeight) / 2)\n };\n }\n if (!isAndroid && multiline) {\n if (dense) {\n if (label) {\n result += scale < 1 ? Math.min(offset, refFontHeight / 2 * scale) : 0;\n } else {\n result += 0;\n }\n }\n if (!dense) {\n if (label) {\n result += scale < 1 ? Math.min(offset, refFontHeight * scale) : Math.min(offset / 2, refFontHeight * scale);\n } else {\n result += scale < 1 ? Math.min(offset / 2, refFontHeight * scale) : 0;\n }\n }\n result = Math.floor(result);\n }\n return {\n paddingTop: result,\n paddingBottom: result\n };\n};\nexport const adjustPaddingFlat = _ref3 => {\n let {\n pad,\n scale,\n multiline,\n label,\n height,\n offset,\n dense,\n fontSize,\n isAndroid,\n styles\n } = _ref3;\n let result = pad;\n let topResult = result;\n let bottomResult = result;\n const {\n paddingTop,\n paddingBottom\n } = styles;\n const refFontSize = scale * fontSize;\n if (!multiline) {\n // do not modify padding if input is not multiline\n if (label) {\n // return const style for flat input with label\n return {\n paddingTop,\n paddingBottom\n };\n }\n // return pad for flat input without label\n return {\n paddingTop: result,\n paddingBottom: result\n };\n }\n if (label) {\n // add paddings passed from styles\n topResult = paddingTop;\n bottomResult = paddingBottom;\n\n // adjust top padding for iOS\n if (!isAndroid) {\n if (dense) {\n topResult += scale < 1 ? Math.min(result, refFontSize * scale) - result / 2 : Math.min(result, refFontSize * scale) - result / 2;\n }\n if (!dense) {\n topResult += scale < 1 ? Math.min(offset / 2, refFontSize * scale) : Math.min(result, refFontSize * scale) - offset / 2;\n }\n }\n topResult = Math.floor(topResult);\n } else {\n if (height) {\n // center text when height is passed\n return {\n paddingTop: Math.max(0, (height - fontSize) / 2),\n paddingBottom: Math.max(0, (height - fontSize) / 2)\n };\n }\n // adjust paddings for iOS if no label\n if (!isAndroid) {\n if (dense) {\n result += scale < 1 ? Math.min(offset / 2, fontSize / 2 * scale) : Math.min(offset / 2, scale);\n }\n if (!dense) {\n result += scale < 1 ? Math.min(offset, fontSize * scale) : Math.min(fontSize, offset / 2 * scale);\n }\n result = Math.floor(result);\n topResult = result;\n bottomResult = result;\n }\n }\n return {\n paddingTop: Math.max(0, topResult),\n paddingBottom: Math.max(0, bottomResult)\n };\n};\nexport function calculateFlatAffixTopPosition(_ref4) {\n let {\n height,\n paddingTop,\n paddingBottom,\n affixHeight\n } = _ref4;\n const inputHeightWithoutPadding = height - paddingTop - paddingBottom;\n const halfOfTheInputHeightDecreasedByAffixHeight = (inputHeightWithoutPadding - affixHeight) / 2;\n return paddingTop + halfOfTheInputHeightDecreasedByAffixHeight;\n}\nexport function calculateOutlinedIconAndAffixTopPosition(_ref5) {\n let {\n height,\n affixHeight,\n labelYOffset\n } = _ref5;\n return (height - affixHeight + labelYOffset) / 2;\n}\nexport const calculateFlatInputHorizontalPadding = _ref6 => {\n let {\n adornmentConfig,\n isV3\n } = _ref6;\n const {\n LABEL_PADDING_HORIZONTAL,\n ADORNMENT_OFFSET,\n FLAT_INPUT_OFFSET\n } = getConstants(isV3);\n let paddingLeft = LABEL_PADDING_HORIZONTAL;\n let paddingRight = LABEL_PADDING_HORIZONTAL;\n adornmentConfig.forEach(_ref7 => {\n let {\n type,\n side\n } = _ref7;\n if (type === AdornmentType.Icon && side === AdornmentSide.Left) {\n paddingLeft = ADORNMENT_SIZE + ADORNMENT_OFFSET + FLAT_INPUT_OFFSET;\n } else if (side === AdornmentSide.Right) {\n if (type === AdornmentType.Affix) {\n paddingRight = ADORNMENT_SIZE + ADORNMENT_OFFSET + FLAT_INPUT_OFFSET;\n } else if (type === AdornmentType.Icon) {\n paddingRight = ADORNMENT_SIZE + ADORNMENT_OFFSET + FLAT_INPUT_OFFSET;\n }\n }\n });\n return {\n paddingLeft,\n paddingRight\n };\n};\nconst getInputTextColor = _ref8 => {\n let {\n theme,\n textColor,\n disabled\n } = _ref8;\n if (textColor) {\n return textColor;\n }\n if (theme.isV3) {\n if (disabled) {\n return theme.colors.onSurfaceDisabled;\n }\n return theme.colors.onSurface;\n }\n if (disabled) {\n return color(theme.colors.text).alpha(0.54).rgb().string();\n }\n return theme.colors.text;\n};\nconst getActiveColor = _ref9 => {\n let {\n theme,\n disabled,\n error,\n activeUnderlineColor,\n activeOutlineColor,\n mode\n } = _ref9;\n const isFlat = mode === 'flat';\n const modeColor = isFlat ? activeUnderlineColor : activeOutlineColor;\n if (error) {\n return theme.colors.error;\n }\n if (modeColor) {\n return modeColor;\n }\n if (disabled) {\n if (theme.isV3) {\n return theme.colors.onSurfaceDisabled;\n }\n return color(theme.colors.text).alpha(0.54).rgb().string();\n }\n return theme.colors.primary;\n};\nconst getPlaceholderColor = _ref10 => {\n let {\n theme,\n disabled\n } = _ref10;\n if (theme.isV3) {\n if (disabled) {\n return theme.colors.onSurfaceDisabled;\n }\n return theme.colors.onSurfaceVariant;\n }\n if (disabled) {\n return theme.colors.disabled;\n }\n return theme.colors.placeholder;\n};\nconst getSelectionColor = _ref11 => {\n let {\n activeColor,\n customSelectionColor\n } = _ref11;\n if (typeof customSelectionColor !== 'undefined') {\n return customSelectionColor;\n }\n if (Platform.OS === 'android') {\n return color(activeColor).alpha(0.54).rgb().string();\n }\n return activeColor;\n};\nconst getFlatBackgroundColor = _ref12 => {\n var _theme$colors, _theme$colors2;\n let {\n theme,\n disabled\n } = _ref12;\n if (theme.isV3) {\n if (disabled) {\n return color(theme.colors.onSurface).alpha(0.04).rgb().string();\n } else {\n return theme.colors.surfaceVariant;\n }\n }\n if (disabled) {\n return undefined;\n }\n return theme.dark ? color((_theme$colors = theme.colors) === null || _theme$colors === void 0 ? void 0 : _theme$colors.background).lighten(0.24).rgb().string() : color((_theme$colors2 = theme.colors) === null || _theme$colors2 === void 0 ? void 0 : _theme$colors2.background).darken(0.06).rgb().string();\n};\nconst getFlatUnderlineColor = _ref13 => {\n let {\n theme,\n disabled,\n underlineColor\n } = _ref13;\n if (!disabled && underlineColor) {\n return underlineColor;\n }\n if (theme.isV3) {\n if (disabled) {\n return theme.colors.onSurfaceDisabled;\n }\n return theme.colors.onSurfaceVariant;\n }\n if (disabled) {\n return 'transparent';\n }\n return theme.colors.disabled;\n};\nconst getOutlinedOutlineInputColor = _ref14 => {\n let {\n theme,\n disabled,\n customOutlineColor\n } = _ref14;\n const isTransparent = color(customOutlineColor).alpha() === 0;\n if (!disabled && customOutlineColor) {\n return customOutlineColor;\n }\n if (theme.isV3) {\n if (disabled) {\n if (theme.dark) {\n return 'transparent';\n }\n return theme.colors.surfaceDisabled;\n }\n return theme.colors.outline;\n }\n if (disabled) {\n if (isTransparent) {\n return customOutlineColor;\n }\n return theme.colors.disabled;\n }\n return theme.colors.placeholder;\n};\nexport const getFlatInputColors = _ref15 => {\n let {\n underlineColor,\n activeUnderlineColor,\n customSelectionColor,\n textColor,\n disabled,\n error,\n theme\n } = _ref15;\n const baseFlatColorProps = {\n theme,\n disabled\n };\n const activeColor = getActiveColor({\n ...baseFlatColorProps,\n error,\n activeUnderlineColor,\n mode: 'flat'\n });\n return {\n inputTextColor: getInputTextColor({\n ...baseFlatColorProps,\n textColor\n }),\n activeColor,\n underlineColorCustom: getFlatUnderlineColor({\n ...baseFlatColorProps,\n underlineColor\n }),\n placeholderColor: getPlaceholderColor(baseFlatColorProps),\n selectionColor: getSelectionColor({\n activeColor,\n customSelectionColor\n }),\n errorColor: theme.colors.error,\n backgroundColor: getFlatBackgroundColor(baseFlatColorProps)\n };\n};\nexport const getOutlinedInputColors = _ref16 => {\n let {\n activeOutlineColor,\n customOutlineColor,\n customSelectionColor,\n textColor,\n disabled,\n error,\n theme\n } = _ref16;\n const baseOutlinedColorProps = {\n theme,\n disabled\n };\n const activeColor = getActiveColor({\n ...baseOutlinedColorProps,\n error,\n activeOutlineColor,\n mode: 'outlined'\n });\n return {\n inputTextColor: getInputTextColor({\n ...baseOutlinedColorProps,\n textColor\n }),\n activeColor,\n outlineColor: getOutlinedOutlineInputColor({\n ...baseOutlinedColorProps,\n customOutlineColor\n }),\n placeholderColor: getPlaceholderColor(baseOutlinedColorProps),\n selectionColor: getSelectionColor({\n activeColor,\n customSelectionColor\n }),\n errorColor: theme.colors.error\n };\n};\nexport const getConstants = isV3 => {\n // Text input affix\n let AFFIX_OFFSET;\n // Text input icon\n let ICON_OFFSET;\n //Text input flat\n let LABEL_PADDING_TOP;\n let LABEL_PADDING_HORIZONTAL;\n let FLAT_INPUT_OFFSET;\n let MIN_HEIGHT;\n // Text input outlined;\n let INPUT_PADDING_HORIZONTAL;\n let ADORNMENT_OFFSET;\n let OUTLINED_INPUT_OFFSET;\n if (isV3) {\n AFFIX_OFFSET = MD3_AFFIX_OFFSET;\n ICON_OFFSET = MD3_ICON_OFFSET;\n LABEL_PADDING_TOP = MD3_LABEL_PADDING_TOP;\n LABEL_PADDING_HORIZONTAL = MD3_LABEL_PADDING_HORIZONTAL;\n FLAT_INPUT_OFFSET = MD3_FLAT_INPUT_OFFSET;\n MIN_HEIGHT = MD3_MIN_HEIGHT;\n INPUT_PADDING_HORIZONTAL = MD3_INPUT_PADDING_HORIZONTAL;\n ADORNMENT_OFFSET = MD3_ADORNMENT_OFFSET;\n OUTLINED_INPUT_OFFSET = MD3_OUTLINED_INPUT_OFFSET;\n } else {\n AFFIX_OFFSET = MD2_AFFIX_OFFSET;\n ICON_OFFSET = MD2_ICON_OFFSET;\n LABEL_PADDING_TOP = MD2_LABEL_PADDING_TOP;\n LABEL_PADDING_HORIZONTAL = MD2_LABEL_PADDING_HORIZONTAL;\n FLAT_INPUT_OFFSET = MD2_FLAT_INPUT_OFFSET;\n MIN_HEIGHT = MD2_MIN_HEIGHT;\n INPUT_PADDING_HORIZONTAL = MD2_INPUT_PADDING_HORIZONTAL;\n ADORNMENT_OFFSET = MD2_ADORNMENT_OFFSET;\n OUTLINED_INPUT_OFFSET = MD2_OUTLINED_INPUT_OFFSET;\n }\n return {\n AFFIX_OFFSET,\n ICON_OFFSET,\n LABEL_PADDING_TOP,\n LABEL_PADDING_HORIZONTAL,\n FLAT_INPUT_OFFSET,\n MIN_HEIGHT,\n INPUT_PADDING_HORIZONTAL,\n ADORNMENT_OFFSET,\n OUTLINED_INPUT_OFFSET,\n MIN_WIDTH\n };\n};\n//# sourceMappingURL=helpers.js.map","export const MAXIMIZED_LABEL_FONT_SIZE = 16;\nexport const MINIMIZED_LABEL_FONT_SIZE = 12;\nexport const LABEL_WIGGLE_X_OFFSET = 4;\nexport const ADORNMENT_SIZE = 24;\nexport const MIN_WIDTH = 100;\n\n//Text input affix offset\nexport const MD2_AFFIX_OFFSET = 12;\nexport const MD3_AFFIX_OFFSET = 16;\n\n// Text input icon\nexport const ICON_SIZE = 24;\nexport const MD2_ICON_OFFSET = 12;\nexport const MD3_ICON_OFFSET = 16;\n\n// Text input common\nexport const MD2_MIN_HEIGHT = 64;\nexport const MD3_MIN_HEIGHT = 56;\nexport const MD3_ADORNMENT_OFFSET = 16;\nexport const MD2_ADORNMENT_OFFSET = 12;\nexport const LABEL_PADDING_TOP_DENSE = 24;\nexport const LABEL_PADDING_TOP = 8;\n\n// Text input flat\nexport const MD2_LABEL_PADDING_TOP = 30;\nexport const MD3_LABEL_PADDING_TOP = 26;\nexport const MD2_LABEL_PADDING_HORIZONTAL = 12;\nexport const MD3_LABEL_PADDING_HORIZONTAL = 16;\nexport const MD2_FLAT_INPUT_OFFSET = 8;\nexport const MD3_FLAT_INPUT_OFFSET = 16;\nexport const MINIMIZED_LABEL_Y_OFFSET = -18;\nexport const MIN_DENSE_HEIGHT_WL = 52;\nexport const MIN_DENSE_HEIGHT = 40;\n\n// Text input outlined\nexport const MD2_INPUT_PADDING_HORIZONTAL = 14;\nexport const MD3_INPUT_PADDING_HORIZONTAL = 16;\n\n// extra space to avoid overlapping input's text and icon\nexport const MD2_OUTLINED_INPUT_OFFSET = 8;\nexport const MD3_OUTLINED_INPUT_OFFSET = 16;\nexport const OUTLINE_MINIMIZED_LABEL_Y_OFFSET = -6;\nexport const MIN_DENSE_HEIGHT_OUTLINED = 48;\n//# sourceMappingURL=constants.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport { getIconColor } from './utils';\nimport { useInternalTheme } from '../../../core/theming';\nimport IconButton from '../../IconButton/IconButton';\nimport { ICON_SIZE } from '../constants';\nimport { getConstants } from '../helpers';\nconst StyleContext = /*#__PURE__*/React.createContext({\n style: {},\n isTextInputFocused: false,\n forceFocus: () => {},\n testID: ''\n});\nconst IconAdornment = _ref => {\n let {\n icon,\n topPosition,\n side,\n isTextInputFocused,\n forceFocus,\n testID,\n theme: themeOverrides,\n disabled\n } = _ref;\n const {\n isV3\n } = useInternalTheme(themeOverrides);\n const {\n ICON_OFFSET\n } = getConstants(isV3);\n const style = {\n top: topPosition,\n [side]: ICON_OFFSET\n };\n const contextState = {\n style,\n isTextInputFocused,\n forceFocus,\n testID,\n disabled\n };\n return /*#__PURE__*/React.createElement(StyleContext.Provider, {\n value: contextState\n }, icon);\n};\n\n/**\n * A component to render a leading / trailing icon in the TextInput\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { TextInput } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [text, setText] = React.useState('');\n *\n * return (\n * }\n * />\n * );\n * };\n *\n * export default MyComponent;\n * ```\n */\n\nconst TextInputIcon = _ref2 => {\n let {\n icon,\n onPress,\n forceTextInputFocus,\n color: customColor,\n theme: themeOverrides,\n rippleColor,\n ...rest\n } = _ref2;\n const {\n style,\n isTextInputFocused,\n forceFocus,\n testID,\n disabled\n } = React.useContext(StyleContext);\n const onPressWithFocusControl = React.useCallback(e => {\n if (forceTextInputFocus && !isTextInputFocused) {\n forceFocus();\n }\n onPress === null || onPress === void 0 ? void 0 : onPress(e);\n }, [forceTextInputFocus, forceFocus, isTextInputFocused, onPress]);\n const theme = useInternalTheme(themeOverrides);\n const iconColor = getIconColor({\n theme,\n disabled,\n isTextInputFocused,\n customColor\n });\n return /*#__PURE__*/React.createElement(View, {\n style: [styles.container, style]\n }, /*#__PURE__*/React.createElement(IconButton, _extends({\n icon: icon,\n style: styles.iconButton,\n size: ICON_SIZE,\n onPress: onPressWithFocusControl,\n iconColor: iconColor,\n testID: testID,\n theme: themeOverrides,\n rippleColor: rippleColor\n }, rest)));\n};\nTextInputIcon.displayName = 'TextInput.Icon';\nTextInputIcon.defaultProps = {\n forceTextInputFocus: true\n};\nconst styles = StyleSheet.create({\n container: {\n position: 'absolute',\n width: ICON_SIZE,\n height: ICON_SIZE,\n justifyContent: 'center',\n alignItems: 'center'\n },\n iconButton: {\n margin: 0\n }\n});\nexport default TextInputIcon;\n\n// @component-docs ignore-next-line\nexport { IconAdornment };\n//# sourceMappingURL=TextInputIcon.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { I18nManager, Platform, StyleSheet, TextInput as NativeTextInput, View, Animated } from 'react-native';\nimport { Underline } from './Addons/Underline';\nimport { AdornmentSide, AdornmentType, InputMode } from './Adornment/enums';\nimport TextInputAdornment from './Adornment/TextInputAdornment';\nimport { getAdornmentConfig, getAdornmentStyleAdjustmentForNativeInput } from './Adornment/TextInputAdornment';\nimport { ADORNMENT_SIZE, LABEL_PADDING_TOP_DENSE, LABEL_WIGGLE_X_OFFSET, MAXIMIZED_LABEL_FONT_SIZE, MINIMIZED_LABEL_FONT_SIZE, MINIMIZED_LABEL_Y_OFFSET, MIN_DENSE_HEIGHT, MIN_DENSE_HEIGHT_WL } from './constants';\nimport { adjustPaddingFlat, calculateFlatAffixTopPosition, calculateFlatInputHorizontalPadding, calculateInputHeight, calculateLabelTopPosition, calculatePadding, getConstants, getFlatInputColors } from './helpers';\nimport InputLabel from './Label/InputLabel';\nconst TextInputFlat = _ref => {\n let {\n disabled = false,\n editable = true,\n label,\n error = false,\n selectionColor: customSelectionColor,\n cursorColor,\n underlineColor,\n underlineStyle,\n activeUnderlineColor,\n textColor,\n dense,\n style,\n theme,\n render = props => /*#__PURE__*/React.createElement(NativeTextInput, props),\n multiline = false,\n parentState,\n innerRef,\n onFocus,\n forceFocus,\n onBlur,\n onChangeText,\n onLayoutAnimatedText,\n onLabelTextLayout,\n onLeftAffixLayoutChange,\n onRightAffixLayoutChange,\n onInputLayout,\n left,\n right,\n placeholderTextColor,\n testID = 'text-input-flat',\n contentStyle,\n ...rest\n } = _ref;\n const isAndroid = Platform.OS === 'android';\n const {\n colors,\n isV3,\n roundness\n } = theme;\n const font = isV3 ? theme.fonts.bodyLarge : theme.fonts.regular;\n const hasActiveOutline = parentState.focused || error;\n const {\n LABEL_PADDING_TOP,\n FLAT_INPUT_OFFSET,\n MIN_HEIGHT,\n MIN_WIDTH\n } = getConstants(isV3);\n const {\n fontSize: fontSizeStyle,\n lineHeight: lineHeightStyle,\n fontWeight,\n height,\n paddingHorizontal,\n textAlign,\n ...viewStyle\n } = StyleSheet.flatten(style) || {};\n const fontSize = fontSizeStyle || MAXIMIZED_LABEL_FONT_SIZE;\n const lineHeight = lineHeightStyle || (Platform.OS === 'web' ? fontSize * 1.2 : undefined);\n const isPaddingHorizontalPassed = paddingHorizontal !== undefined && typeof paddingHorizontal === 'number';\n const adornmentConfig = getAdornmentConfig({\n left,\n right\n });\n let {\n paddingLeft,\n paddingRight\n } = calculateFlatInputHorizontalPadding({\n adornmentConfig,\n isV3\n });\n if (isPaddingHorizontalPassed) {\n paddingLeft = paddingHorizontal;\n paddingRight = paddingHorizontal;\n }\n const {\n leftLayout,\n rightLayout\n } = parentState;\n const rightAffixWidth = right ? rightLayout.width || ADORNMENT_SIZE : ADORNMENT_SIZE;\n const leftAffixWidth = left ? leftLayout.width || ADORNMENT_SIZE : ADORNMENT_SIZE;\n const adornmentStyleAdjustmentForNativeInput = getAdornmentStyleAdjustmentForNativeInput({\n adornmentConfig,\n rightAffixWidth,\n leftAffixWidth,\n paddingHorizontal,\n inputOffset: FLAT_INPUT_OFFSET,\n mode: InputMode.Flat,\n isV3\n });\n const {\n inputTextColor,\n activeColor,\n underlineColorCustom,\n placeholderColor,\n errorColor,\n backgroundColor,\n selectionColor\n } = getFlatInputColors({\n underlineColor,\n activeUnderlineColor,\n customSelectionColor,\n textColor,\n disabled,\n error,\n theme\n });\n const containerStyle = {\n backgroundColor,\n borderTopLeftRadius: theme.roundness,\n borderTopRightRadius: theme.roundness\n };\n const labelScale = MINIMIZED_LABEL_FONT_SIZE / fontSize;\n const fontScale = MAXIMIZED_LABEL_FONT_SIZE / fontSize;\n const labelWidth = parentState.labelLayout.width;\n const labelHeight = parentState.labelLayout.height;\n const labelHalfWidth = labelWidth / 2;\n const labelHalfHeight = labelHeight / 2;\n const baseLabelTranslateX = (I18nManager.getConstants().isRTL ? 1 : -1) * (labelHalfWidth - labelScale * labelWidth / 2) + (1 - labelScale) * (I18nManager.getConstants().isRTL ? -1 : 1) * paddingLeft;\n const minInputHeight = dense ? (label ? MIN_DENSE_HEIGHT_WL : MIN_DENSE_HEIGHT) - LABEL_PADDING_TOP_DENSE : MIN_HEIGHT - LABEL_PADDING_TOP;\n const inputHeight = calculateInputHeight(labelHeight, height, minInputHeight);\n const topPosition = calculateLabelTopPosition(labelHeight, inputHeight, multiline && height ? 0 : !height ? minInputHeight / 2 : 0);\n if (height && typeof height !== 'number') {\n // eslint-disable-next-line\n console.warn('Currently we support only numbers in height prop');\n }\n const paddingSettings = {\n height: height ? +height : null,\n labelHalfHeight,\n offset: FLAT_INPUT_OFFSET,\n multiline: multiline ? multiline : null,\n dense: dense ? dense : null,\n topPosition,\n fontSize,\n lineHeight,\n label,\n scale: fontScale,\n isAndroid,\n styles: StyleSheet.flatten(dense ? styles.inputFlatDense : styles.inputFlat)\n };\n const pad = calculatePadding(paddingSettings);\n const paddingFlat = adjustPaddingFlat({\n ...paddingSettings,\n pad\n });\n const baseLabelTranslateY = -labelHalfHeight - (topPosition + MINIMIZED_LABEL_Y_OFFSET);\n const {\n current: placeholderOpacityAnims\n } = React.useRef([new Animated.Value(0), new Animated.Value(1)]);\n const placeholderOpacity = hasActiveOutline ? parentState.labeled : placeholderOpacityAnims[parentState.labelLayout.measured ? 1 : 0];\n const minHeight = height || (dense ? label ? MIN_DENSE_HEIGHT_WL : MIN_DENSE_HEIGHT : MIN_HEIGHT);\n const flatHeight = inputHeight + (!height ? dense ? LABEL_PADDING_TOP_DENSE : LABEL_PADDING_TOP : 0);\n const iconTopPosition = (flatHeight - ADORNMENT_SIZE) / 2;\n const leftAffixTopPosition = leftLayout.height ? calculateFlatAffixTopPosition({\n height: flatHeight,\n ...paddingFlat,\n affixHeight: leftLayout.height\n }) : null;\n const rightAffixTopPosition = rightLayout.height ? calculateFlatAffixTopPosition({\n height: flatHeight,\n ...paddingFlat,\n affixHeight: rightLayout.height\n }) : null;\n const labelProps = {\n label,\n onLayoutAnimatedText,\n onLabelTextLayout,\n placeholderOpacity,\n labelError: error,\n placeholderStyle: styles.placeholder,\n baseLabelTranslateY,\n baseLabelTranslateX,\n font,\n fontSize,\n lineHeight,\n fontWeight,\n labelScale,\n wiggleOffsetX: LABEL_WIGGLE_X_OFFSET,\n topPosition,\n paddingLeft: isAndroid ? I18nManager.isRTL ? paddingRight : paddingLeft : paddingLeft,\n paddingRight: isAndroid ? I18nManager.isRTL ? paddingLeft : paddingRight : paddingRight,\n hasActiveOutline,\n activeColor,\n placeholderColor,\n errorColor,\n roundness,\n maxFontSizeMultiplier: rest.maxFontSizeMultiplier,\n testID,\n contentStyle,\n inputContainerLayout: parentState.inputContainerLayout,\n labelTextLayout: parentState.labelTextLayout,\n opacity: parentState.value || parentState.focused ? parentState.labelLayout.measured ? 1 : 0 : 1,\n isV3\n };\n const affixTopPosition = {\n [AdornmentSide.Left]: leftAffixTopPosition,\n [AdornmentSide.Right]: rightAffixTopPosition\n };\n const onAffixChange = {\n [AdornmentSide.Left]: onLeftAffixLayoutChange,\n [AdornmentSide.Right]: onRightAffixLayoutChange\n };\n let adornmentProps = {\n paddingHorizontal,\n adornmentConfig,\n forceFocus,\n topPosition: {\n [AdornmentType.Affix]: affixTopPosition,\n [AdornmentType.Icon]: iconTopPosition\n },\n onAffixChange,\n isTextInputFocused: parentState.focused,\n maxFontSizeMultiplier: rest.maxFontSizeMultiplier,\n disabled\n };\n if (adornmentConfig.length) {\n adornmentProps = {\n ...adornmentProps,\n left,\n right,\n textStyle: {\n ...font,\n fontSize,\n lineHeight,\n fontWeight\n },\n visible: parentState.labeled\n };\n }\n return /*#__PURE__*/React.createElement(View, {\n style: [containerStyle, viewStyle]\n }, /*#__PURE__*/React.createElement(Underline, {\n style: underlineStyle,\n hasActiveOutline: hasActiveOutline,\n parentState: parentState,\n underlineColorCustom: underlineColorCustom,\n error: error,\n colors: colors,\n activeColor: activeColor,\n theme: theme\n }), /*#__PURE__*/React.createElement(View, {\n onLayout: onInputLayout,\n style: [styles.labelContainer, {\n minHeight\n }]\n }, !isAndroid && multiline && !!label && !disabled &&\n /*#__PURE__*/\n // Workaround for: https://github.com/callstack/react-native-paper/issues/2799\n // Patch for a multiline TextInput with fixed height, which allow to avoid covering input label with its value.\n React.createElement(View, {\n testID: \"patch-container\",\n pointerEvents: \"none\",\n style: [StyleSheet.absoluteFill, dense ? styles.densePatchContainer : styles.patchContainer, {\n backgroundColor: viewStyle.backgroundColor || containerStyle.backgroundColor,\n left: paddingLeft,\n right: paddingRight\n }]\n }), label ? /*#__PURE__*/React.createElement(InputLabel, _extends({\n labeled: parentState.labeled,\n error: parentState.error,\n focused: parentState.focused,\n wiggle: Boolean(parentState.value && labelProps.labelError),\n labelLayoutMeasured: parentState.labelLayout.measured,\n labelLayoutWidth: parentState.labelLayout.width\n }, labelProps)) : null, render === null || render === void 0 ? void 0 : render({\n ...rest,\n ref: innerRef,\n onChangeText,\n placeholder: label ? parentState.placeholder : rest.placeholder,\n editable: !disabled && editable,\n selectionColor,\n cursorColor: typeof cursorColor === 'undefined' ? activeColor : cursorColor,\n placeholderTextColor: placeholderTextColor ?? placeholderColor,\n onFocus,\n onBlur,\n underlineColorAndroid: 'transparent',\n multiline,\n style: [styles.input, !multiline || multiline && height ? {\n height: flatHeight\n } : {}, paddingFlat, {\n paddingLeft,\n paddingRight,\n ...font,\n fontSize,\n lineHeight,\n fontWeight,\n color: inputTextColor,\n textAlignVertical: multiline ? 'top' : 'center',\n textAlign: textAlign ? textAlign : I18nManager.getConstants().isRTL ? 'right' : 'left',\n minWidth: Math.min(parentState.labelTextLayout.width + 2 * FLAT_INPUT_OFFSET, MIN_WIDTH)\n }, Platform.OS === 'web' && {\n outline: 'none'\n }, adornmentStyleAdjustmentForNativeInput, contentStyle],\n testID\n })), /*#__PURE__*/React.createElement(TextInputAdornment, adornmentProps));\n};\nexport default TextInputFlat;\nconst styles = StyleSheet.create({\n placeholder: {\n position: 'absolute',\n left: 0\n },\n labelContainer: {\n paddingTop: 0,\n paddingBottom: 0\n },\n input: {\n margin: 0\n },\n inputFlat: {\n paddingTop: 24,\n paddingBottom: 4\n },\n inputFlatDense: {\n paddingTop: 22,\n paddingBottom: 2\n },\n patchContainer: {\n height: 24,\n zIndex: 2\n },\n densePatchContainer: {\n height: 22,\n zIndex: 2\n }\n});\n//# sourceMappingURL=TextInputFlat.js.map","import * as React from 'react';\nimport { Animated, StyleSheet } from 'react-native';\nimport { useInternalTheme } from '../../../core/theming';\nexport const Underline = _ref => {\n let {\n parentState,\n error,\n colors,\n activeColor,\n underlineColorCustom,\n hasActiveOutline,\n style,\n theme: themeOverrides\n } = _ref;\n const {\n isV3\n } = useInternalTheme(themeOverrides);\n let backgroundColor = parentState.focused ? activeColor : underlineColorCustom;\n if (error) backgroundColor = colors === null || colors === void 0 ? void 0 : colors.error;\n const activeScale = isV3 ? 2 : 1;\n return /*#__PURE__*/React.createElement(Animated.View, {\n testID: \"text-input-underline\",\n style: [styles.underline, isV3 && styles.md3Underline, {\n backgroundColor,\n // Underlines is thinner when input is not focused\n transform: [{\n scaleY: (isV3 ? hasActiveOutline : parentState.focused) ? activeScale : 0.5\n }]\n }, style]\n });\n};\nconst styles = StyleSheet.create({\n underline: {\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n height: 2,\n zIndex: 1\n },\n md3Underline: {\n height: 1\n }\n});\n//# sourceMappingURL=Underline.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from 'react';\nimport { AdornmentSide, AdornmentType, InputMode } from './enums';\nimport TextInputAffix, { AffixAdornment } from './TextInputAffix';\nimport TextInputIcon, { IconAdornment } from './TextInputIcon';\nimport { getConstants } from '../helpers';\nexport function getAdornmentConfig(_ref) {\n let {\n left,\n right\n } = _ref;\n let adornmentConfig = [];\n if (left || right) {\n [{\n side: AdornmentSide.Left,\n adornment: left\n }, {\n side: AdornmentSide.Right,\n adornment: right\n }].forEach(_ref2 => {\n let {\n side,\n adornment\n } = _ref2;\n if (adornment && /*#__PURE__*/React.isValidElement(adornment)) {\n let type;\n if (adornment.type === TextInputAffix) {\n type = AdornmentType.Affix;\n } else if (adornment.type === TextInputIcon) {\n type = AdornmentType.Icon;\n }\n adornmentConfig.push({\n side,\n type\n });\n }\n });\n }\n return adornmentConfig;\n}\nexport function getAdornmentStyleAdjustmentForNativeInput(_ref3) {\n let {\n adornmentConfig,\n leftAffixWidth,\n rightAffixWidth,\n paddingHorizontal,\n inputOffset = 0,\n mode,\n isV3\n } = _ref3;\n const {\n OUTLINED_INPUT_OFFSET,\n ADORNMENT_OFFSET\n } = getConstants(isV3);\n if (adornmentConfig.length) {\n const adornmentStyleAdjustmentForNativeInput = adornmentConfig.map(_ref4 => {\n let {\n type,\n side\n } = _ref4;\n const isLeftSide = side === AdornmentSide.Left;\n const inputModeAdornemntOffset = mode === InputMode.Outlined ? ADORNMENT_OFFSET + OUTLINED_INPUT_OFFSET : ADORNMENT_OFFSET;\n const paddingKey = `padding${captalize(side)}`;\n const affixWidth = isLeftSide ? leftAffixWidth : rightAffixWidth;\n const padding = typeof paddingHorizontal === 'number' ? paddingHorizontal : inputModeAdornemntOffset;\n const offset = affixWidth + padding;\n const isAffix = type === AdornmentType.Affix;\n const marginKey = `margin${captalize(side)}`;\n return {\n [marginKey]: isAffix ? 0 : offset,\n [paddingKey]: isAffix ? offset : inputOffset\n };\n });\n const allStyleAdjustmentsMerged = adornmentStyleAdjustmentForNativeInput.reduce((mergedStyles, currentStyle) => {\n return {\n ...mergedStyles,\n ...currentStyle\n };\n }, {});\n return allStyleAdjustmentsMerged;\n } else {\n return [{}];\n }\n}\nconst captalize = text => text.charAt(0).toUpperCase() + text.slice(1);\nconst TextInputAdornment = _ref5 => {\n let {\n adornmentConfig,\n left,\n right,\n onAffixChange,\n textStyle,\n visible,\n topPosition,\n isTextInputFocused,\n forceFocus,\n paddingHorizontal,\n maxFontSizeMultiplier,\n theme,\n disabled\n } = _ref5;\n if (adornmentConfig.length) {\n return /*#__PURE__*/React.createElement(React.Fragment, null, adornmentConfig.map(_ref6 => {\n let {\n type,\n side\n } = _ref6;\n let inputAdornmentComponent;\n if (side === AdornmentSide.Left) {\n inputAdornmentComponent = left;\n } else if (side === AdornmentSide.Right) {\n inputAdornmentComponent = right;\n }\n const commonProps = {\n side: side,\n testID: `${side}-${type}-adornment`,\n isTextInputFocused,\n paddingHorizontal,\n disabled\n };\n if (type === AdornmentType.Icon) {\n return /*#__PURE__*/React.createElement(IconAdornment, _extends({}, commonProps, {\n theme: theme,\n key: side,\n icon: inputAdornmentComponent,\n topPosition: topPosition[AdornmentType.Icon],\n forceFocus: forceFocus\n }));\n } else if (type === AdornmentType.Affix) {\n return /*#__PURE__*/React.createElement(AffixAdornment, _extends({}, commonProps, {\n key: side,\n topPosition: topPosition[AdornmentType.Affix][side],\n affix: inputAdornmentComponent,\n textStyle: textStyle,\n onLayout: onAffixChange[side],\n visible: visible,\n maxFontSizeMultiplier: maxFontSizeMultiplier\n }));\n } else {\n return null;\n }\n }));\n } else {\n return null;\n }\n};\nexport default TextInputAdornment;\n//# sourceMappingURL=TextInputAdornment.js.map","import React from 'react';\nimport { Animated, Platform, StyleSheet, useWindowDimensions } from 'react-native';\nimport AnimatedText from '../../Typography/AnimatedText';\nimport { getConstants } from '../helpers';\nconst InputLabel = props => {\n const {\n labeled,\n wiggle,\n error,\n focused,\n opacity,\n labelLayoutWidth,\n labelBackground,\n label,\n labelError,\n onLayoutAnimatedText,\n onLabelTextLayout,\n hasActiveOutline,\n activeColor,\n placeholderStyle,\n baseLabelTranslateX,\n baseLabelTranslateY,\n font,\n fontSize,\n lineHeight,\n fontWeight,\n placeholderOpacity,\n wiggleOffsetX,\n labelScale,\n topPosition,\n paddingLeft,\n paddingRight,\n backgroundColor,\n roundness,\n placeholderColor,\n errorColor,\n labelTranslationXOffset,\n maxFontSizeMultiplier,\n testID,\n isV3,\n inputContainerLayout\n } = props;\n const {\n INPUT_PADDING_HORIZONTAL\n } = getConstants(isV3);\n const {\n width\n } = useWindowDimensions();\n const paddingOffset = paddingLeft && paddingRight ? {\n paddingLeft,\n paddingRight\n } : {};\n const labelTranslationX = {\n transform: [{\n // Offset label scale since RN doesn't support transform origin\n translateX: labeled.interpolate({\n inputRange: [0, 1],\n outputRange: [baseLabelTranslateX, labelTranslationXOffset || 0]\n })\n }]\n };\n const labelStyle = {\n ...font,\n fontSize,\n lineHeight,\n fontWeight,\n opacity: labeled.interpolate({\n inputRange: [0, 1],\n outputRange: [hasActiveOutline ? 1 : 0, 0]\n }),\n transform: [{\n // Wiggle the label when there's an error\n translateX: wiggle ? error.interpolate({\n inputRange: [0, 0.5, 1],\n outputRange: [0, wiggleOffsetX, 0]\n }) : 0\n }, {\n // Move label to top\n translateY: baseLabelTranslateY !== 0 ? labeled.interpolate({\n inputRange: [0, 1],\n outputRange: [baseLabelTranslateY, 0]\n }) : 0\n }, {\n // Make label smaller\n scale: labelScale !== 0 ? labeled.interpolate({\n inputRange: [0, 1],\n outputRange: [labelScale, 1]\n }) : labeled\n }]\n };\n const commonStyles = [placeholderStyle, {\n top: topPosition,\n maxWidth: inputContainerLayout.width + INPUT_PADDING_HORIZONTAL / 2\n }, labelStyle, paddingOffset || {}];\n const textColor = labelError && errorColor ? errorColor : placeholderColor;\n return (\n /*#__PURE__*/\n // Position colored placeholder and gray placeholder on top of each other and crossfade them\n // This gives the effect of animating the color, but allows us to use native driver\n React.createElement(Animated.View, {\n pointerEvents: \"none\",\n style: [StyleSheet.absoluteFill, styles.labelContainer, Platform.OS !== 'web' && {\n width\n }, {\n opacity\n }, labelTranslationX]\n }, labelBackground === null || labelBackground === void 0 ? void 0 : labelBackground({\n labeled,\n labelLayoutWidth,\n labelStyle,\n placeholderStyle,\n baseLabelTranslateX,\n topPosition,\n label,\n backgroundColor,\n roundness,\n maxFontSizeMultiplier: maxFontSizeMultiplier,\n testID\n }), /*#__PURE__*/React.createElement(AnimatedText, {\n variant: \"bodySmall\",\n onLayout: onLayoutAnimatedText,\n onTextLayout: onLabelTextLayout,\n style: [commonStyles, {\n color: activeColor\n }],\n numberOfLines: 1,\n maxFontSizeMultiplier: maxFontSizeMultiplier,\n testID: `${testID}-label-active`\n }, label), /*#__PURE__*/React.createElement(AnimatedText, {\n variant: focused ? 'bodyLarge' : 'bodySmall',\n style: [commonStyles, {\n color: textColor,\n opacity: placeholderOpacity\n }],\n numberOfLines: 1,\n maxFontSizeMultiplier: maxFontSizeMultiplier,\n testID: `${testID}-label-inactive`\n }, label))\n );\n};\nconst styles = StyleSheet.create({\n labelContainer: {\n zIndex: 3\n }\n});\nexport default /*#__PURE__*/React.memo(InputLabel);\n//# sourceMappingURL=InputLabel.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Animated, View, TextInput as NativeTextInput, StyleSheet, I18nManager, Platform } from 'react-native';\nimport { Outline } from './Addons/Outline';\nimport { AdornmentType, AdornmentSide } from './Adornment/enums';\nimport TextInputAdornment, { getAdornmentConfig, getAdornmentStyleAdjustmentForNativeInput } from './Adornment/TextInputAdornment';\nimport { MAXIMIZED_LABEL_FONT_SIZE, MINIMIZED_LABEL_FONT_SIZE, LABEL_WIGGLE_X_OFFSET, ADORNMENT_SIZE, OUTLINE_MINIMIZED_LABEL_Y_OFFSET, LABEL_PADDING_TOP, MIN_DENSE_HEIGHT_OUTLINED, LABEL_PADDING_TOP_DENSE } from './constants';\nimport { calculateLabelTopPosition, calculateInputHeight, calculatePadding, adjustPaddingOut, calculateOutlinedIconAndAffixTopPosition, getOutlinedInputColors, getConstants } from './helpers';\nimport InputLabel from './Label/InputLabel';\nimport LabelBackground from './Label/LabelBackground';\nconst TextInputOutlined = _ref => {\n let {\n disabled = false,\n editable = true,\n label,\n error = false,\n selectionColor: customSelectionColor,\n cursorColor,\n underlineColor: _underlineColor,\n outlineColor: customOutlineColor,\n activeOutlineColor,\n outlineStyle,\n textColor,\n dense,\n style,\n theme,\n render = props => /*#__PURE__*/React.createElement(NativeTextInput, props),\n multiline = false,\n parentState,\n innerRef,\n onFocus,\n forceFocus,\n onBlur,\n onChangeText,\n onLayoutAnimatedText,\n onLabelTextLayout,\n onLeftAffixLayoutChange,\n onRightAffixLayoutChange,\n onInputLayout,\n onLayout,\n left,\n right,\n placeholderTextColor,\n testID = 'text-input-outlined',\n contentStyle,\n ...rest\n } = _ref;\n const adornmentConfig = getAdornmentConfig({\n left,\n right\n });\n const {\n colors,\n isV3,\n roundness\n } = theme;\n const font = isV3 ? theme.fonts.bodyLarge : theme.fonts.regular;\n const hasActiveOutline = parentState.focused || error;\n const {\n INPUT_PADDING_HORIZONTAL,\n MIN_HEIGHT,\n ADORNMENT_OFFSET,\n MIN_WIDTH\n } = getConstants(isV3);\n const {\n fontSize: fontSizeStyle,\n fontWeight,\n lineHeight: lineHeightStyle,\n height,\n backgroundColor = colors === null || colors === void 0 ? void 0 : colors.background,\n textAlign,\n ...viewStyle\n } = StyleSheet.flatten(style) || {};\n const fontSize = fontSizeStyle || MAXIMIZED_LABEL_FONT_SIZE;\n const lineHeight = lineHeightStyle || (Platform.OS === 'web' ? fontSize * 1.2 : undefined);\n const {\n inputTextColor,\n activeColor,\n outlineColor,\n placeholderColor,\n errorColor,\n selectionColor\n } = getOutlinedInputColors({\n activeOutlineColor,\n customOutlineColor,\n customSelectionColor,\n textColor,\n disabled,\n error,\n theme\n });\n const densePaddingTop = label ? LABEL_PADDING_TOP_DENSE : 0;\n const paddingTop = label ? LABEL_PADDING_TOP : 0;\n const yOffset = label ? OUTLINE_MINIMIZED_LABEL_Y_OFFSET : 0;\n const labelScale = MINIMIZED_LABEL_FONT_SIZE / fontSize;\n const fontScale = MAXIMIZED_LABEL_FONT_SIZE / fontSize;\n const labelWidth = parentState.labelLayout.width;\n const labelHeight = parentState.labelLayout.height;\n const labelHalfWidth = labelWidth / 2;\n const labelHalfHeight = labelHeight / 2;\n const baseLabelTranslateX = (I18nManager.getConstants().isRTL ? 1 : -1) * (labelHalfWidth - labelScale * labelWidth / 2 - (fontSize - MINIMIZED_LABEL_FONT_SIZE) * labelScale);\n let labelTranslationXOffset = 0;\n const isAdornmentLeftIcon = adornmentConfig.some(_ref2 => {\n let {\n side,\n type\n } = _ref2;\n return side === AdornmentSide.Left && type === AdornmentType.Icon;\n });\n const isAdornmentRightIcon = adornmentConfig.some(_ref3 => {\n let {\n side,\n type\n } = _ref3;\n return side === AdornmentSide.Right && type === AdornmentType.Icon;\n });\n if (isAdornmentLeftIcon) {\n labelTranslationXOffset = (I18nManager.getConstants().isRTL ? -1 : 1) * (ADORNMENT_SIZE + ADORNMENT_OFFSET - (isV3 ? 0 : 8));\n }\n const minInputHeight = (dense ? MIN_DENSE_HEIGHT_OUTLINED : MIN_HEIGHT) - paddingTop;\n const inputHeight = calculateInputHeight(labelHeight, height, minInputHeight);\n const topPosition = calculateLabelTopPosition(labelHeight, inputHeight, paddingTop);\n if (height && typeof height !== 'number') {\n // eslint-disable-next-line\n console.warn('Currently we support only numbers in height prop');\n }\n const paddingSettings = {\n height: height ? +height : null,\n labelHalfHeight,\n offset: paddingTop,\n multiline: multiline ? multiline : null,\n dense: dense ? dense : null,\n topPosition,\n fontSize,\n lineHeight,\n label,\n scale: fontScale,\n isAndroid: Platform.OS === 'android',\n styles: StyleSheet.flatten(dense ? styles.inputOutlinedDense : styles.inputOutlined)\n };\n const pad = calculatePadding(paddingSettings);\n const paddingOut = adjustPaddingOut({\n ...paddingSettings,\n pad\n });\n const baseLabelTranslateY = -labelHalfHeight - (topPosition + yOffset);\n const {\n current: placeholderOpacityAnims\n } = React.useRef([new Animated.Value(0), new Animated.Value(1)]);\n const placeholderOpacity = hasActiveOutline ? parentState.labeled : placeholderOpacityAnims[parentState.labelLayout.measured ? 1 : 0];\n const placeholderStyle = {\n position: 'absolute',\n left: 0,\n paddingHorizontal: INPUT_PADDING_HORIZONTAL\n };\n const labelBackgroundColor = backgroundColor === 'transparent' ? theme.colors.background : backgroundColor;\n const labelProps = {\n label,\n onLayoutAnimatedText,\n onLabelTextLayout,\n placeholderOpacity,\n labelError: error,\n placeholderStyle,\n baseLabelTranslateY,\n baseLabelTranslateX,\n font,\n fontSize,\n lineHeight,\n fontWeight,\n labelScale,\n wiggleOffsetX: LABEL_WIGGLE_X_OFFSET,\n topPosition,\n hasActiveOutline,\n activeColor,\n placeholderColor,\n backgroundColor: labelBackgroundColor,\n errorColor,\n labelTranslationXOffset,\n roundness,\n maxFontSizeMultiplier: rest.maxFontSizeMultiplier,\n testID,\n contentStyle,\n inputContainerLayout: {\n width: parentState.inputContainerLayout.width + (isAdornmentRightIcon || isAdornmentLeftIcon ? INPUT_PADDING_HORIZONTAL : 0)\n },\n opacity: parentState.value || parentState.focused ? parentState.labelLayout.measured ? 1 : 0 : 1,\n isV3\n };\n const onLayoutChange = React.useCallback(e => {\n onInputLayout(e);\n onLayout === null || onLayout === void 0 ? void 0 : onLayout(e);\n }, [onLayout, onInputLayout]);\n const minHeight = height || (dense ? MIN_DENSE_HEIGHT_OUTLINED : MIN_HEIGHT);\n const outlinedHeight = inputHeight + (!height ? dense ? densePaddingTop / 2 : paddingTop : 0);\n const {\n leftLayout,\n rightLayout\n } = parentState;\n const leftAffixTopPosition = calculateOutlinedIconAndAffixTopPosition({\n height: outlinedHeight,\n affixHeight: leftLayout.height || 0,\n labelYOffset: -yOffset\n });\n const rightAffixTopPosition = calculateOutlinedIconAndAffixTopPosition({\n height: outlinedHeight,\n affixHeight: rightLayout.height || 0,\n labelYOffset: -yOffset\n });\n const iconTopPosition = calculateOutlinedIconAndAffixTopPosition({\n height: outlinedHeight,\n affixHeight: ADORNMENT_SIZE,\n labelYOffset: -yOffset\n });\n const rightAffixWidth = right ? rightLayout.width || ADORNMENT_SIZE : ADORNMENT_SIZE;\n const leftAffixWidth = left ? leftLayout.width || ADORNMENT_SIZE : ADORNMENT_SIZE;\n const adornmentStyleAdjustmentForNativeInput = getAdornmentStyleAdjustmentForNativeInput({\n adornmentConfig,\n rightAffixWidth,\n leftAffixWidth,\n mode: 'outlined',\n isV3\n });\n const affixTopPosition = {\n [AdornmentSide.Left]: leftAffixTopPosition,\n [AdornmentSide.Right]: rightAffixTopPosition\n };\n const onAffixChange = {\n [AdornmentSide.Left]: onLeftAffixLayoutChange,\n [AdornmentSide.Right]: onRightAffixLayoutChange\n };\n let adornmentProps = {\n adornmentConfig,\n forceFocus,\n topPosition: {\n [AdornmentType.Icon]: iconTopPosition,\n [AdornmentType.Affix]: affixTopPosition\n },\n onAffixChange,\n isTextInputFocused: parentState.focused,\n maxFontSizeMultiplier: rest.maxFontSizeMultiplier,\n disabled\n };\n if (adornmentConfig.length) {\n adornmentProps = {\n ...adornmentProps,\n left,\n right,\n textStyle: {\n ...font,\n fontSize,\n lineHeight,\n fontWeight\n },\n visible: parentState.labeled\n };\n }\n return /*#__PURE__*/React.createElement(View, {\n style: viewStyle\n }, /*#__PURE__*/React.createElement(Outline, {\n isV3: isV3,\n style: outlineStyle,\n label: label,\n roundness: roundness,\n hasActiveOutline: hasActiveOutline,\n focused: parentState.focused,\n activeColor: activeColor,\n outlineColor: outlineColor,\n backgroundColor: backgroundColor\n }), /*#__PURE__*/React.createElement(View, {\n style: [styles.labelContainer, {\n paddingTop,\n minHeight\n }]\n }, label ? /*#__PURE__*/React.createElement(InputLabel, _extends({\n labeled: parentState.labeled,\n error: parentState.error,\n focused: parentState.focused,\n wiggle: Boolean(parentState.value && labelProps.labelError),\n labelLayoutMeasured: parentState.labelLayout.measured,\n labelLayoutWidth: parentState.labelLayout.width\n }, labelProps, {\n labelBackground: LabelBackground,\n maxFontSizeMultiplier: rest.maxFontSizeMultiplier\n })) : null, render === null || render === void 0 ? void 0 : render({\n ...rest,\n ref: innerRef,\n onLayout: onLayoutChange,\n onChangeText,\n placeholder: label ? parentState.placeholder : rest.placeholder,\n editable: !disabled && editable,\n selectionColor,\n cursorColor: typeof cursorColor === 'undefined' ? activeColor : cursorColor,\n placeholderTextColor: placeholderTextColor || placeholderColor,\n onFocus,\n onBlur,\n underlineColorAndroid: 'transparent',\n multiline,\n style: [styles.input, !multiline || multiline && height ? {\n height: inputHeight\n } : {}, paddingOut, {\n ...font,\n fontSize,\n lineHeight,\n fontWeight,\n color: inputTextColor,\n textAlignVertical: multiline ? 'top' : 'center',\n textAlign: textAlign ? textAlign : I18nManager.getConstants().isRTL ? 'right' : 'left',\n paddingHorizontal: INPUT_PADDING_HORIZONTAL,\n minWidth: Math.min(parentState.labelTextLayout.width + 2 * INPUT_PADDING_HORIZONTAL, MIN_WIDTH)\n }, Platform.OS === 'web' && {\n outline: 'none'\n }, adornmentStyleAdjustmentForNativeInput, contentStyle],\n testID\n })), /*#__PURE__*/React.createElement(TextInputAdornment, adornmentProps));\n};\nexport default TextInputOutlined;\nconst styles = StyleSheet.create({\n labelContainer: {\n paddingBottom: 0\n },\n input: {\n margin: 0\n },\n inputOutlined: {\n paddingTop: 8,\n paddingBottom: 8\n },\n inputOutlinedDense: {\n paddingTop: 4,\n paddingBottom: 4\n }\n});\n//# sourceMappingURL=TextInputOutlined.js.map","import * as React from 'react';\nimport { StyleSheet, View } from 'react-native';\nexport const Outline = _ref => {\n let {\n isV3,\n label,\n activeColor,\n backgroundColor,\n hasActiveOutline,\n focused,\n outlineColor,\n roundness,\n style\n } = _ref;\n return /*#__PURE__*/React.createElement(View, {\n testID: \"text-input-outline\",\n pointerEvents: \"none\",\n style: [styles.outline, !label && styles.noLabelOutline,\n // eslint-disable-next-line react-native/no-inline-styles\n {\n backgroundColor,\n borderRadius: roundness,\n borderWidth: (isV3 ? hasActiveOutline : focused) ? 2 : 1,\n borderColor: hasActiveOutline ? activeColor : outlineColor\n }, style]\n });\n};\nconst styles = StyleSheet.create({\n outline: {\n position: 'absolute',\n left: 0,\n right: 0,\n top: 6,\n bottom: 0\n },\n noLabelOutline: {\n top: 0\n }\n});\n//# sourceMappingURL=Outline.js.map","import * as React from 'react';\nimport { Animated, StyleSheet } from 'react-native';\nimport AnimatedText from '../../Typography/AnimatedText';\nconst LabelBackground = _ref => {\n let {\n labeled,\n labelLayoutWidth,\n placeholderStyle,\n baseLabelTranslateX,\n topPosition,\n label,\n backgroundColor,\n roundness,\n labelStyle,\n maxFontSizeMultiplier,\n testID\n } = _ref;\n const opacity = labeled.interpolate({\n inputRange: [0, 0.6],\n outputRange: [1, 0]\n });\n const labelTranslationX = {\n translateX: labeled.interpolate({\n inputRange: [0, 1],\n outputRange: [-baseLabelTranslateX, 0]\n })\n };\n const labelTextScaleY = {\n scaleY: labeled.interpolate({\n inputRange: [0, 1],\n outputRange: [0.2, 1]\n })\n };\n const labelTextTransform = [...labelStyle.transform, labelTextScaleY];\n const isRounded = roundness > 6;\n const roundedEdgeCover = isRounded ? /*#__PURE__*/React.createElement(Animated.View, {\n key: \"labelBackground-view\",\n pointerEvents: \"none\",\n style: [StyleSheet.absoluteFill, styles.view, {\n backgroundColor,\n maxHeight: Math.max(roundness / 3, 2),\n bottom: Math.max(roundness, 2),\n transform: [labelTranslationX],\n opacity\n }]\n }) : null;\n return [roundedEdgeCover, /*#__PURE__*/React.createElement(AnimatedText, {\n key: \"labelBackground-text\",\n testID: `${testID}-label-background`,\n style: [placeholderStyle, labelStyle, styles.outlinedLabel, {\n top: topPosition + 1,\n width: labelLayoutWidth - placeholderStyle.paddingHorizontal,\n backgroundColor,\n opacity,\n transform: labelTextTransform\n }],\n numberOfLines: 1,\n maxFontSizeMultiplier: maxFontSizeMultiplier\n }, typeof label === 'string' ? label : label === null || label === void 0 ? void 0 : label.props.children)];\n};\nexport default LabelBackground;\nconst styles = StyleSheet.create({\n view: {\n position: 'absolute',\n top: 6,\n left: 10,\n width: 12\n },\n // eslint-disable-next-line react-native/no-color-literals\n outlinedLabel: {\n position: 'absolute',\n left: 8,\n paddingHorizontal: 0,\n color: 'transparent'\n }\n});\n//# sourceMappingURL=LabelBackground.js.map","export const roundLayoutSize = size => Math.round(size * 1000) / 1000;\n//# sourceMappingURL=roundLayoutSize.js.map","import ToggleButtonComponent from './ToggleButton';\nimport ToggleButtonGroup from './ToggleButtonGroup';\nimport ToggleButtonRow from './ToggleButtonRow';\nconst ToggleButton = Object.assign(\n// @component ./ToggleButton.tsx\nToggleButtonComponent, {\n // @component ./ToggleButtonGroup.tsx\n Group: ToggleButtonGroup,\n // @component ./ToggleButtonRow.tsx\n Row: ToggleButtonRow\n});\nexport default ToggleButton;\n//# sourceMappingURL=index.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet } from 'react-native';\nimport color from 'color';\nimport { ToggleButtonGroupContext } from './ToggleButtonGroup';\nimport { getToggleButtonColor } from './utils';\nimport { useInternalTheme } from '../../core/theming';\nimport { black, white } from '../../styles/themes/v2/colors';\nimport { forwardRef } from '../../utils/forwardRef';\nimport IconButton from '../IconButton/IconButton';\n/**\n * Toggle buttons can be used to group related options. To emphasize groups of related toggle buttons,\n * a group should share a common container.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { ToggleButton } from 'react-native-paper';\n *\n * const ToggleButtonExample = () => {\n * const [status, setStatus] = React.useState('checked');\n *\n * const onButtonToggle = value => {\n * setStatus(status === 'checked' ? 'unchecked' : 'checked');\n * };\n *\n * return (\n * \n * );\n * };\n *\n * export default ToggleButtonExample;\n *\n * ```\n */\nconst ToggleButton = forwardRef((_ref, ref) => {\n let {\n icon,\n size,\n theme: themeOverrides,\n accessibilityLabel,\n disabled,\n style,\n value,\n status,\n onPress,\n rippleColor,\n ...rest\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const borderRadius = theme.roundness;\n return /*#__PURE__*/React.createElement(ToggleButtonGroupContext.Consumer, null, context => {\n const checked = context && context.value === value || status === 'checked';\n const backgroundColor = getToggleButtonColor({\n theme,\n checked\n });\n const borderColor = theme.isV3 ? theme.colors.outline : color(theme.dark ? white : black).alpha(0.29).rgb().string();\n return /*#__PURE__*/React.createElement(IconButton, _extends({\n borderless: false,\n icon: icon,\n onPress: e => {\n if (onPress) {\n onPress(e);\n }\n if (context) {\n context.onValueChange(!checked ? value : null);\n }\n },\n size: size,\n accessibilityLabel: accessibilityLabel,\n accessibilityState: {\n disabled,\n selected: checked\n },\n disabled: disabled,\n style: [styles.content, {\n backgroundColor,\n borderRadius,\n borderColor\n }, style],\n ref: ref,\n theme: theme,\n rippleColor: rippleColor\n }, rest));\n });\n});\nconst styles = StyleSheet.create({\n content: {\n width: 42,\n height: 42,\n margin: 0\n }\n});\nexport default ToggleButton;\n\n// @component-docs ignore-next-line\nexport { ToggleButton };\n//# sourceMappingURL=ToggleButton.js.map","import * as React from 'react';\nexport const ToggleButtonGroupContext =\n/*#__PURE__*/\n//@ts-expect-error: TS can't ensure the type from Group to children\nReact.createContext(null);\n\n/**\n * Toggle group allows to control a group of toggle buttons.
\n * It doesn't change the appearance of the toggle buttons. If you want to group them in a row, check out [ToggleButton.Row](ToggleButtonRow).\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { ToggleButton } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [value, setValue] = React.useState('left');\n *\n * return (\n * setValue(value)}\n * value={value}>\n * \n * \n * \n * );\n * };\n *\n * export default MyComponent;\n *```\n */\nconst ToggleButtonGroup = _ref => {\n let {\n value,\n onValueChange,\n children\n } = _ref;\n return /*#__PURE__*/React.createElement(ToggleButtonGroupContext.Provider, {\n value: {\n value,\n onValueChange\n }\n }, children);\n};\nToggleButtonGroup.displayName = 'ToggleButton.Group';\nexport default ToggleButtonGroup;\n\n// @component-docs ignore-next-line\nexport { ToggleButtonGroup };\n//# sourceMappingURL=ToggleButtonGroup.js.map","import color from 'color';\nimport { tokens } from '../../styles/themes/v3/tokens';\nexport const getToggleButtonColor = _ref => {\n let {\n theme,\n checked\n } = _ref;\n if (checked) {\n if (theme.isV3) {\n return color(theme.colors.onSecondaryContainer).alpha(tokens.md.ref.opacity.level2).rgb().string();\n }\n if (theme.dark) {\n return 'rgba(255, 255, 255, .12)';\n }\n return 'rgba(0, 0, 0, .08)';\n }\n return 'transparent';\n};\n//# sourceMappingURL=utils.js.map","import * as React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport ToggleButton from './ToggleButton';\nimport ToggleButtonGroup from './ToggleButtonGroup';\n/**\n * Toggle button row renders a group of toggle buttons in a row.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { ToggleButton } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [value, setValue] = React.useState('left');\n *\n * return (\n * setValue(value)} value={value}>\n * \n * \n * \n * );\n * };\n *\n * export default MyComponent;\n *\n *```\n */\nconst ToggleButtonRow = _ref => {\n let {\n value,\n onValueChange,\n children,\n style\n } = _ref;\n const count = React.Children.count(children);\n return /*#__PURE__*/React.createElement(ToggleButtonGroup, {\n value: value,\n onValueChange: onValueChange\n }, /*#__PURE__*/React.createElement(View, {\n style: [styles.row, style]\n }, React.Children.map(children, (child, i) => {\n // @ts-expect-error: TypeScript complains about child.type but it doesn't matter\n if (child && child.type === ToggleButton) {\n // @ts-expect-error: We're sure that child is a React Element\n return /*#__PURE__*/React.cloneElement(child, {\n style: [styles.button, i === 0 ? styles.first : i === count - 1 ? styles.last : styles.middle,\n // @ts-expect-error: We're sure that child is a React Element\n child.props.style]\n });\n }\n return child;\n })));\n};\nToggleButtonRow.displayName = 'ToggleButton.Row';\nconst styles = StyleSheet.create({\n row: {\n flexDirection: 'row'\n },\n button: {\n borderWidth: StyleSheet.hairlineWidth\n },\n first: {\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0\n },\n middle: {\n borderRadius: 0,\n borderLeftWidth: 0\n },\n last: {\n borderLeftWidth: 0,\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0\n }\n});\nexport default ToggleButtonRow;\n\n// @component-docs ignore-next-line\nexport { ToggleButtonRow };\n//# sourceMappingURL=ToggleButtonRow.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport SegmentedButtonItem from './SegmentedButtonItem';\nimport { getDisabledSegmentedButtonStyle } from './utils';\nimport { useInternalTheme } from '../../core/theming';\n/**\n * Segmented buttons can be used to select options, switch views or sort elements.
\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { SafeAreaView, StyleSheet } from 'react-native';\n * import { SegmentedButtons } from 'react-native-paper';\n *\n * const MyComponent = () => {\n * const [value, setValue] = React.useState('');\n *\n * return (\n * \n * \n * \n * );\n * };\n *\n * const styles = StyleSheet.create({\n * container: {\n * flex: 1,\n * alignItems: 'center',\n * },\n * });\n *\n * export default MyComponent;\n *```\n */\nconst SegmentedButtons = _ref => {\n let {\n value,\n onValueChange,\n buttons,\n multiSelect,\n density,\n style,\n theme: themeOverrides\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n return /*#__PURE__*/React.createElement(View, {\n style: [styles.row, style]\n }, buttons.map((item, i) => {\n const disabledChildStyle = getDisabledSegmentedButtonStyle({\n theme,\n buttons,\n index: i\n });\n const segment = i === 0 ? 'first' : i === buttons.length - 1 ? 'last' : undefined;\n const checked = multiSelect && Array.isArray(value) ? value.includes(item.value) : value === item.value;\n const onPress = e => {\n var _item$onPress;\n (_item$onPress = item.onPress) === null || _item$onPress === void 0 ? void 0 : _item$onPress.call(item, e);\n const nextValue = multiSelect && Array.isArray(value) ? checked ? value.filter(val => item.value !== val) : [...value, item.value] : item.value;\n\n // @ts-expect-error: TS doesn't preserve types after destructuring, so the type isn't inferred correctly\n onValueChange(nextValue);\n };\n return /*#__PURE__*/React.createElement(SegmentedButtonItem, _extends({}, item, {\n key: i,\n checked: checked,\n segment: segment,\n density: density,\n onPress: onPress,\n style: [item.style, disabledChildStyle],\n labelStyle: item.labelStyle,\n theme: theme\n }));\n }));\n};\nconst styles = StyleSheet.create({\n row: {\n flexDirection: 'row'\n }\n});\nexport default SegmentedButtons;\n\n// @component-docs ignore-next-line\nexport { SegmentedButtons };\n//# sourceMappingURL=SegmentedButtons.js.map","import * as React from 'react';\nimport { Animated, StyleSheet, View } from 'react-native';\nimport color from 'color';\nimport { getSegmentedButtonBorderRadius, getSegmentedButtonColors, getSegmentedButtonDensityPadding } from './utils';\nimport { useInternalTheme } from '../../core/theming';\nimport Icon from '../Icon';\nimport TouchableRipple from '../TouchableRipple/TouchableRipple';\nimport Text from '../Typography/Text';\nconst SegmentedButtonItem = _ref => {\n let {\n checked,\n accessibilityLabel,\n disabled,\n style,\n labelStyle,\n showSelectedCheck,\n checkedColor,\n uncheckedColor,\n rippleColor: customRippleColor,\n background,\n icon,\n testID,\n label,\n onPress,\n segment,\n density = 'regular',\n theme: themeOverrides,\n labelMaxFontSizeMultiplier\n } = _ref;\n const theme = useInternalTheme(themeOverrides);\n const checkScale = React.useRef(new Animated.Value(0)).current;\n React.useEffect(() => {\n if (!showSelectedCheck) {\n return;\n }\n if (checked) {\n Animated.spring(checkScale, {\n toValue: 1,\n useNativeDriver: true\n }).start();\n } else {\n Animated.spring(checkScale, {\n toValue: 0,\n useNativeDriver: true\n }).start();\n }\n }, [checked, checkScale, showSelectedCheck]);\n const {\n roundness,\n isV3\n } = theme;\n const {\n borderColor,\n textColor,\n borderWidth,\n backgroundColor\n } = getSegmentedButtonColors({\n checked,\n theme,\n disabled,\n checkedColor,\n uncheckedColor\n });\n const borderRadius = (isV3 ? 5 : 1) * roundness;\n const segmentBorderRadius = getSegmentedButtonBorderRadius({\n theme,\n segment\n });\n const rippleColor = customRippleColor || color(textColor).alpha(0.12).rgb().string();\n const showIcon = !icon ? false : label && checked ? !showSelectedCheck : true;\n const showCheckedIcon = checked && showSelectedCheck;\n const iconSize = isV3 ? 18 : 16;\n const iconStyle = {\n marginRight: label ? 5 : showCheckedIcon ? 3 : 0,\n ...(label && {\n transform: [{\n scale: checkScale.interpolate({\n inputRange: [0, 1],\n outputRange: [1, 0]\n })\n }]\n })\n };\n const buttonStyle = {\n backgroundColor,\n borderColor,\n borderWidth,\n borderRadius,\n ...segmentBorderRadius\n };\n const paddingVertical = getSegmentedButtonDensityPadding({\n density\n });\n const rippleStyle = {\n borderRadius,\n ...segmentBorderRadius\n };\n const labelTextStyle = {\n ...(!isV3 ? {\n textTransform: 'uppercase',\n fontWeight: '500'\n } : theme.fonts.labelLarge),\n color: textColor\n };\n return /*#__PURE__*/React.createElement(View, {\n style: [buttonStyle, styles.button, style]\n }, /*#__PURE__*/React.createElement(TouchableRipple, {\n borderless: true,\n onPress: onPress,\n accessibilityLabel: accessibilityLabel,\n accessibilityState: {\n disabled,\n checked\n },\n accessibilityRole: \"button\",\n disabled: disabled,\n rippleColor: rippleColor,\n testID: testID,\n style: rippleStyle,\n background: background,\n theme: theme\n }, /*#__PURE__*/React.createElement(View, {\n style: [styles.content, {\n paddingVertical\n }]\n }, showCheckedIcon ? /*#__PURE__*/React.createElement(Animated.View, {\n testID: `${testID}-check-icon`,\n style: [iconStyle, {\n transform: [{\n scale: checkScale\n }]\n }]\n }, /*#__PURE__*/React.createElement(Icon, {\n source: 'check',\n size: iconSize,\n color: textColor\n })) : null, showIcon ? /*#__PURE__*/React.createElement(Animated.View, {\n testID: `${testID}-icon`,\n style: iconStyle\n }, /*#__PURE__*/React.createElement(Icon, {\n source: icon,\n size: iconSize,\n color: textColor\n })) : null, /*#__PURE__*/React.createElement(Text, {\n variant: \"labelLarge\",\n style: [styles.label, labelTextStyle, labelStyle],\n selectable: false,\n numberOfLines: 1,\n maxFontSizeMultiplier: labelMaxFontSizeMultiplier,\n testID: `${testID}-label`\n }, label))));\n};\nconst styles = StyleSheet.create({\n button: {\n flex: 1,\n minWidth: 76,\n borderStyle: 'solid'\n },\n label: {\n textAlign: 'center'\n },\n content: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n paddingVertical: 9,\n paddingHorizontal: 16\n }\n});\nexport default SegmentedButtonItem;\nexport { SegmentedButtonItem as SegmentedButton };\n//# sourceMappingURL=SegmentedButtonItem.js.map","import { StyleSheet } from 'react-native';\nimport color from 'color';\nimport { black, white } from '../../styles/themes/v2/colors';\nconst DEFAULT_PADDING = 9;\nexport const getSegmentedButtonDensityPadding = _ref => {\n let {\n density\n } = _ref;\n let padding = DEFAULT_PADDING;\n switch (density) {\n case 'small':\n return padding - 2;\n case 'medium':\n return padding - 4;\n case 'high':\n return padding - 8;\n default:\n return padding;\n }\n};\nexport const getDisabledSegmentedButtonStyle = _ref2 => {\n var _buttons$index, _buttons;\n let {\n theme,\n index,\n buttons\n } = _ref2;\n const width = getSegmentedButtonBorderWidth({\n theme\n });\n const isDisabled = (_buttons$index = buttons[index]) === null || _buttons$index === void 0 ? void 0 : _buttons$index.disabled;\n const isNextDisabled = (_buttons = buttons[index + 1]) === null || _buttons === void 0 ? void 0 : _buttons.disabled;\n if (!isDisabled && isNextDisabled) {\n return {\n borderRightWidth: width\n };\n }\n return {};\n};\nexport const getSegmentedButtonBorderRadius = _ref3 => {\n let {\n segment,\n theme\n } = _ref3;\n if (segment === 'first') {\n return {\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n ...(theme.isV3 && {\n borderRightWidth: 0\n })\n };\n } else if (segment === 'last') {\n return {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0\n };\n } else {\n return {\n borderRadius: 0,\n ...(theme.isV3 && {\n borderRightWidth: 0\n })\n };\n }\n};\nconst getSegmentedButtonBackgroundColor = _ref4 => {\n let {\n checked,\n theme\n } = _ref4;\n if (checked) {\n if (theme.isV3) {\n return theme.colors.secondaryContainer;\n } else {\n return color(theme.colors.primary).alpha(0.12).rgb().string();\n }\n }\n return 'transparent';\n};\nconst getSegmentedButtonBorderColor = _ref5 => {\n let {\n theme,\n disabled,\n checked\n } = _ref5;\n if (theme.isV3) {\n if (disabled) {\n return theme.colors.surfaceDisabled;\n }\n return theme.colors.outline;\n }\n if (checked) {\n return theme.colors.primary;\n }\n return color(theme.dark ? white : black).alpha(0.29).rgb().string();\n};\nconst getSegmentedButtonBorderWidth = _ref6 => {\n let {\n theme\n } = _ref6;\n if (theme.isV3) {\n return 1;\n }\n return StyleSheet.hairlineWidth;\n};\nconst getSegmentedButtonTextColor = _ref7 => {\n let {\n theme,\n disabled,\n checked,\n checkedColor,\n uncheckedColor\n } = _ref7;\n if (theme.isV3) {\n if (disabled) {\n return theme.colors.onSurfaceDisabled;\n }\n if (checked) {\n return checkedColor ?? theme.colors.onSecondaryContainer;\n }\n return uncheckedColor ?? theme.colors.onSurface;\n }\n if (disabled) {\n return theme.colors.disabled;\n }\n // Primary color is used for checked state too.\n return theme.colors.primary;\n};\nexport const getSegmentedButtonColors = _ref8 => {\n let {\n theme,\n disabled,\n checked,\n checkedColor,\n uncheckedColor\n } = _ref8;\n const backgroundColor = getSegmentedButtonBackgroundColor({\n theme,\n checked\n });\n const borderColor = getSegmentedButtonBorderColor({\n theme,\n disabled,\n checked\n });\n const textColor = getSegmentedButtonTextColor({\n theme,\n disabled,\n checked,\n checkedColor,\n uncheckedColor\n });\n const borderWidth = getSegmentedButtonBorderWidth({\n theme\n });\n return {\n backgroundColor,\n borderColor,\n textColor,\n borderWidth\n };\n};\n//# sourceMappingURL=utils.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { Dimensions, View, StyleSheet, Platform, Pressable } from 'react-native';\nimport { getTooltipPosition } from './utils';\nimport { useInternalTheme } from '../../core/theming';\nimport { addEventListener } from '../../utils/addEventListener';\nimport Portal from '../Portal/Portal';\nimport Text from '../Typography/Text';\n/**\n * Tooltips display informative text when users hover over, focus on, or tap an element.\n *\n * Plain tooltips, when activated, display a text label identifying an element, such as a description of its function. Tooltips should include only short, descriptive text and avoid restating visible UI text.\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { IconButton, Tooltip } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * \n * {}} />\n * \n * );\n *\n * export default MyComponent;\n * ```\n */\nconst Tooltip = _ref => {\n let {\n children,\n enterTouchDelay = 500,\n leaveTouchDelay = 1500,\n title,\n theme: themeOverrides,\n titleMaxFontSizeMultiplier,\n ...rest\n } = _ref;\n const isWeb = Platform.OS === 'web';\n const theme = useInternalTheme(themeOverrides);\n const [visible, setVisible] = React.useState(false);\n const [measurement, setMeasurement] = React.useState({\n children: {},\n tooltip: {},\n measured: false\n });\n const showTooltipTimer = React.useRef([]);\n const hideTooltipTimer = React.useRef([]);\n const childrenWrapperRef = React.useRef();\n const touched = React.useRef(false);\n React.useEffect(() => {\n return () => {\n if (showTooltipTimer.current.length) {\n showTooltipTimer.current.forEach(t => clearTimeout(t));\n showTooltipTimer.current = [];\n }\n if (hideTooltipTimer.current.length) {\n hideTooltipTimer.current.forEach(t => clearTimeout(t));\n hideTooltipTimer.current = [];\n }\n };\n }, []);\n React.useEffect(() => {\n const subscription = addEventListener(Dimensions, 'change', () => setVisible(false));\n return () => subscription.remove();\n }, []);\n const handleOnLayout = _ref2 => {\n let {\n nativeEvent: {\n layout\n }\n } = _ref2;\n childrenWrapperRef.current.measure((_x, _y, width, height, pageX, pageY) => {\n setMeasurement({\n children: {\n pageX,\n pageY,\n height,\n width\n },\n tooltip: {\n ...layout\n },\n measured: true\n });\n });\n };\n const handleTouchStart = () => {\n if (hideTooltipTimer.current.length) {\n hideTooltipTimer.current.forEach(t => clearTimeout(t));\n hideTooltipTimer.current = [];\n }\n if (isWeb) {\n let id = setTimeout(() => {\n touched.current = true;\n setVisible(true);\n }, enterTouchDelay);\n showTooltipTimer.current.push(id);\n } else {\n touched.current = true;\n setVisible(true);\n }\n };\n const handleTouchEnd = () => {\n touched.current = false;\n if (showTooltipTimer.current.length) {\n showTooltipTimer.current.forEach(t => clearTimeout(t));\n showTooltipTimer.current = [];\n }\n let id = setTimeout(() => {\n setVisible(false);\n setMeasurement({\n children: {},\n tooltip: {},\n measured: false\n });\n }, leaveTouchDelay);\n hideTooltipTimer.current.push(id);\n };\n const mobilePressProps = {\n onPress: React.useCallback(() => {\n if (touched.current) {\n return null;\n } else {\n var _children$props$onPre, _children$props;\n if (children.props.disabled) return null;\n return (_children$props$onPre = (_children$props = children.props).onPress) === null || _children$props$onPre === void 0 ? void 0 : _children$props$onPre.call(_children$props);\n }\n }, [children.props]),\n onLongPress: () => handleTouchStart(),\n onPressOut: () => handleTouchEnd(),\n delayLongPress: enterTouchDelay\n };\n const webPressProps = {\n onHoverIn: () => {\n var _children$props$onHov, _children$props2;\n handleTouchStart();\n (_children$props$onHov = (_children$props2 = children.props).onHoverIn) === null || _children$props$onHov === void 0 ? void 0 : _children$props$onHov.call(_children$props2);\n },\n onHoverOut: () => {\n var _children$props$onHov2, _children$props3;\n handleTouchEnd();\n (_children$props$onHov2 = (_children$props3 = children.props).onHoverOut) === null || _children$props$onHov2 === void 0 ? void 0 : _children$props$onHov2.call(_children$props3);\n }\n };\n return /*#__PURE__*/React.createElement(React.Fragment, null, visible && /*#__PURE__*/React.createElement(Portal, null, /*#__PURE__*/React.createElement(View, {\n onLayout: handleOnLayout,\n style: [styles.tooltip, {\n backgroundColor: theme.isV3 ? theme.colors.onSurface : theme.colors.tooltip,\n ...getTooltipPosition(measurement, children),\n borderRadius: theme.roundness,\n ...(measurement.measured ? styles.visible : styles.hidden)\n }],\n testID: \"tooltip-container\"\n }, /*#__PURE__*/React.createElement(Text, {\n accessibilityLiveRegion: \"polite\",\n numberOfLines: 1,\n selectable: false,\n variant: \"labelLarge\",\n style: {\n color: theme.colors.surface\n },\n maxFontSizeMultiplier: titleMaxFontSizeMultiplier\n }, title))), /*#__PURE__*/React.createElement(Pressable, _extends({\n ref: childrenWrapperRef,\n style: styles.pressContainer\n }, isWeb ? webPressProps : mobilePressProps), /*#__PURE__*/React.cloneElement(children, {\n ...rest,\n ...(isWeb ? webPressProps : mobilePressProps)\n })));\n};\nTooltip.displayName = 'Tooltip';\nconst styles = StyleSheet.create({\n tooltip: {\n alignSelf: 'flex-start',\n justifyContent: 'center',\n paddingHorizontal: 16,\n height: 32,\n maxHeight: 32\n },\n visible: {\n opacity: 1\n },\n hidden: {\n opacity: 0\n },\n pressContainer: {\n ...(Platform.OS === 'web' && {\n cursor: 'default'\n })\n }\n});\nexport default Tooltip;\n//# sourceMappingURL=Tooltip.js.map","import { Dimensions } from 'react-native';\n/**\n * Return true when the tooltip center x-coordinate relative to the wrapped element is negative.\n * The tooltip will be placed at the starting x-coordinate from the wrapped element.\n */\nconst overflowLeft = center => {\n return center < 0;\n};\n\n/**\n * Return true when the tooltip center x-coordinate + tooltip width is greater than the layout width\n * The tooltip width will grow from right to left relative to the wrapped element.\n */\nconst overflowRight = (center, tooltipWidth) => {\n const {\n width: layoutWidth\n } = Dimensions.get('window');\n return center + tooltipWidth > layoutWidth;\n};\n\n/**\n * Return true when the children y-coordinate + its height + tooltip height is greater than the layout height.\n * The tooltip will be placed at the top of the wrapped element.\n */\nconst overflowBottom = (childrenY, childrenHeight, tooltipHeight) => {\n const {\n height: layoutHeight\n } = Dimensions.get('window');\n return childrenY + childrenHeight + tooltipHeight > layoutHeight;\n};\nconst getTooltipXPosition = (_ref, _ref2) => {\n let {\n pageX: childrenX,\n width: childrenWidth\n } = _ref;\n let {\n width: tooltipWidth\n } = _ref2;\n // when the children use position absolute the childrenWidth is measured as 0,\n // so it's best to anchor the tooltip at the start of the children\n const center = childrenWidth > 0 ? childrenX + (childrenWidth - tooltipWidth) / 2 : childrenX;\n if (overflowLeft(center)) return childrenX;\n if (overflowRight(center, tooltipWidth)) return childrenX + childrenWidth - tooltipWidth;\n return center;\n};\nconst getTooltipYPosition = (_ref3, _ref4) => {\n let {\n pageY: childrenY,\n height: childrenHeight\n } = _ref3;\n let {\n height: tooltipHeight\n } = _ref4;\n if (overflowBottom(childrenY, childrenHeight, tooltipHeight)) return childrenY - tooltipHeight;\n return childrenY + childrenHeight;\n};\nconst getChildrenMeasures = (style, measures) => {\n const {\n position,\n top,\n bottom,\n left,\n right\n } = Array.isArray(style) ? style.reduce((acc, current) => ({\n ...acc,\n ...current\n })) : style;\n if (position === 'absolute') {\n let pageX = 0;\n let pageY = measures.pageY;\n let height = 0;\n let width = 0;\n if (typeof left === 'number') {\n pageX = left;\n width = 0;\n }\n if (typeof right === 'number') {\n pageX = measures.width - right;\n width = 0;\n }\n if (typeof top === 'number') {\n pageY = pageY + top;\n }\n if (typeof bottom === 'number') {\n pageY = pageY - bottom;\n }\n return {\n pageX,\n pageY,\n width,\n height\n };\n }\n return measures;\n};\nexport const getTooltipPosition = (_ref5, component) => {\n let {\n children,\n tooltip,\n measured\n } = _ref5;\n if (!measured) return {};\n let measures = children;\n if (component.props.style) {\n measures = getChildrenMeasures(component.props.style, children);\n }\n return {\n left: getTooltipXPosition(measures, tooltip),\n top: getTooltipYPosition(measures, tooltip)\n };\n};\n//# sourceMappingURL=utils.js.map","export { default as Caption } from './Caption';\nexport { default as Headline } from './Headline';\nexport { default as Paragraph } from './Paragraph';\nexport { default as Subheading } from './Subheading';\nexport { default as Title } from './Title';\n//# sourceMappingURL=index.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet } from 'react-native';\nimport StyledText from './StyledText';\n// @component-group Typography\n/**\n * Typography component for showing a headline.\n *\n *
\n * \n *
\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Headline } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * Headline\n * );\n *\n * export default MyComponent;\n * ```\n */\nconst Headline = props => {\n return /*#__PURE__*/React.createElement(StyledText, _extends({}, props, {\n alpha: 0.87,\n family: \"regular\",\n style: [styles.text, props.style]\n }));\n};\nexport default Headline;\nconst styles = StyleSheet.create({\n text: {\n fontSize: 24,\n lineHeight: 32,\n marginVertical: 2,\n letterSpacing: 0\n }\n});\n//# sourceMappingURL=Headline.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet } from 'react-native';\nimport StyledText from './StyledText';\n// @component-group Typography\n/**\n * Typography component for showing a paragraph.\n *\n *
\n * \n *
\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Paragraph } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * Paragraph\n * );\n *\n * export default MyComponent;\n * ```\n */\nconst Paragraph = props => /*#__PURE__*/React.createElement(StyledText, _extends({}, props, {\n alpha: 0.87,\n family: \"regular\",\n style: [styles.text, props.style]\n}));\nexport default Paragraph;\nconst styles = StyleSheet.create({\n text: {\n fontSize: 14,\n lineHeight: 20,\n marginVertical: 2,\n letterSpacing: 0.25\n }\n});\n//# sourceMappingURL=Paragraph.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { StyleSheet } from 'react-native';\nimport StyledText from './StyledText';\n// @component-group Typography\n/**\n * Typography component for showing a subheading.\n *\n *
\n * \n *
\n *\n * ## Usage\n * ```js\n * import * as React from 'react';\n * import { Subheading } from 'react-native-paper';\n *\n * const MyComponent = () => (\n * Subheading\n * );\n *\n * export default MyComponent;\n * ```\n */\nconst Subheading = props => /*#__PURE__*/React.createElement(StyledText, _extends({}, props, {\n alpha: 0.87,\n family: \"regular\",\n style: [styles.text, props.style]\n}));\nexport default Subheading;\nconst styles = StyleSheet.create({\n text: {\n fontSize: 16,\n lineHeight: 24,\n marginVertical: 2,\n letterSpacing: 0.5\n }\n});\n//# sourceMappingURL=Subheading.js.map","export { default as v1 } from './v1.js';\nexport { default as v3 } from './v3.js';\nexport { default as v4 } from './v4.js';\nexport { default as v5 } from './v5.js';\nexport { default as NIL } from './nil.js';\nexport { default as version } from './version.js';\nexport { default as validate } from './validate.js';\nexport { default as stringify } from './stringify.js';\nexport { default as parse } from './parse.js';","import rng from './rng.js';\nimport stringify from './stringify.js'; // **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\n\nvar _clockseq; // Previous uuid creation time\n\n\nvar _lastMSecs = 0;\nvar _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || new Array(16);\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n var seedBytes = options.random || (options.rng || rng)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n var msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || stringify(b);\n}\n\nexport default v1;","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import v35 from './v35.js';\nimport md5 from './md5.js';\nvar v3 = v35('v3', 0x30, md5);\nexport default v3;","import stringify from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n var bytes = [];\n\n for (var i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nexport var DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport var URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function (name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = parse(namespace);\n }\n\n if (namespace.length !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n var bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return stringify(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}","import validate from './validate.js';\n\nfunction parse(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n var v;\n var arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nexport default parse;","/*\n * Browser-compatible JavaScript MD5\n *\n * Modification of JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\nfunction md5(bytes) {\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = new Uint8Array(msg.length);\n\n for (var i = 0; i < msg.length; ++i) {\n bytes[i] = msg.charCodeAt(i);\n }\n }\n\n return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));\n}\n/*\n * Convert an array of little-endian words to an array of bytes\n */\n\n\nfunction md5ToHexEncodedArray(input) {\n var output = [];\n var length32 = input.length * 32;\n var hexTab = '0123456789abcdef';\n\n for (var i = 0; i < length32; i += 8) {\n var x = input[i >> 5] >>> i % 32 & 0xff;\n var hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);\n output.push(hex);\n }\n\n return output;\n}\n/**\n * Calculate output length with padding and bit length\n */\n\n\nfunction getOutputLength(inputLength8) {\n return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;\n}\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n\n\nfunction wordsToMd5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << len % 32;\n x[getOutputLength(len) - 1] = len;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (var i = 0; i < x.length; i += 16) {\n var olda = a;\n var oldb = b;\n var oldc = c;\n var oldd = d;\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n\n return [a, b, c, d];\n}\n/*\n * Convert an array bytes to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n\n\nfunction bytesToWords(input) {\n if (input.length === 0) {\n return [];\n }\n\n var length8 = input.length * 8;\n var output = new Uint32Array(getOutputLength(length8));\n\n for (var i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;\n }\n\n return output;\n}\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n\n\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return msw << 16 | lsw & 0xffff;\n}\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\n\n\nfunction bitRotateLeft(num, cnt) {\n return num << cnt | num >>> 32 - cnt;\n}\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\n\n\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\n\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nexport default md5;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nvar v5 = v35('v5', 0x50, sha1);\nexport default v5;","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return x & y ^ ~x & z;\n\n case 1:\n return x ^ y ^ z;\n\n case 2:\n return x & y ^ x & z ^ y & z;\n\n case 3:\n return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = [];\n\n for (var i = 0; i < msg.length; ++i) {\n bytes.push(msg.charCodeAt(i));\n }\n } else if (!Array.isArray(bytes)) {\n // Convert Array-like to Array\n bytes = Array.prototype.slice.call(bytes);\n }\n\n bytes.push(0x80);\n var l = bytes.length / 4 + 2;\n var N = Math.ceil(l / 16);\n var M = new Array(N);\n\n for (var _i = 0; _i < N; ++_i) {\n var arr = new Uint32Array(16);\n\n for (var j = 0; j < 16; ++j) {\n arr[j] = bytes[_i * 64 + j * 4] << 24 | bytes[_i * 64 + j * 4 + 1] << 16 | bytes[_i * 64 + j * 4 + 2] << 8 | bytes[_i * 64 + j * 4 + 3];\n }\n\n M[_i] = arr;\n }\n\n M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n for (var _i2 = 0; _i2 < N; ++_i2) {\n var W = new Uint32Array(80);\n\n for (var t = 0; t < 16; ++t) {\n W[t] = M[_i2][t];\n }\n\n for (var _t = 16; _t < 80; ++_t) {\n W[_t] = ROTL(W[_t - 3] ^ W[_t - 8] ^ W[_t - 14] ^ W[_t - 16], 1);\n }\n\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n var e = H[4];\n\n for (var _t2 = 0; _t2 < 80; ++_t2) {\n var s = Math.floor(_t2 / 20);\n var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[_t2] >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n }\n\n return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nexport default sha1;","export default '00000000-0000-0000-0000-000000000000';","import validate from './validate.js';\n\nfunction version(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n return parseInt(uuid.substr(14, 1), 16);\n}\n\nexport default version;","import { UnavailabilityError } from 'expo-modules-core';\nimport { useEffect, useState } from 'react';\nimport { Platform } from 'react-native';\nimport NativeLinking from './ExpoLinking';\nimport { parse } from './createURL';\nimport { validateURL } from './validateURL';\n// @needsAudit\n/**\n * Add a handler to `Linking` changes by listening to the `url` event type and providing the handler.\n * It is recommended to use the [`useURL()`](#useurl) hook instead.\n * @param type The only valid type is `'url'`.\n * @param handler An [`URLListener`](#urllistener) function that takes an `event` object of the type\n * [`EventType`](#eventype).\n * @return An EmitterSubscription that has the remove method from EventSubscription\n * @see [React Native Docs Linking page](https://reactnative.dev/docs/linking#addeventlistener).\n */\nexport function addEventListener(type, handler) {\n return NativeLinking.addEventListener(type, handler);\n}\n// @needsAudit\n/**\n * Helper method which wraps React Native's `Linking.getInitialURL()` in `Linking.parse()`.\n * Parses the deep link information out of the URL used to open the experience initially.\n * If no link opened the app, all the fields will be `null`.\n * > On the web it parses the current window URL.\n * @return A promise that resolves with `ParsedURL` object.\n */\nexport async function parseInitialURLAsync() {\n const initialUrl = await NativeLinking.getInitialURL();\n if (!initialUrl) {\n return {\n scheme: null,\n hostname: null,\n path: null,\n queryParams: null,\n };\n }\n return parse(initialUrl);\n}\n// @needsAudit\n/**\n * Launch an Android intent with extras.\n * > Use [IntentLauncher](./intent-launcher) instead, `sendIntent` is only included in\n * > `Linking` for API compatibility with React Native's Linking API.\n * @platform android\n */\nexport async function sendIntent(action, extras) {\n if (Platform.OS === 'android') {\n return await NativeLinking.sendIntent(action, extras);\n }\n throw new UnavailabilityError('Linking', 'sendIntent');\n}\n// @needsAudit\n/**\n * Open the operating system settings app and displays the app’s custom settings, if it has any.\n */\nexport async function openSettings() {\n if (Platform.OS === 'web') {\n throw new UnavailabilityError('Linking', 'openSettings');\n }\n if (NativeLinking.openSettings) {\n return await NativeLinking.openSettings();\n }\n await openURL('app-settings:');\n}\n// @needsAudit\n/**\n * Get the URL that was used to launch the app if it was launched by a link.\n * @return The URL string that launched your app, or `null`.\n */\nexport async function getInitialURL() {\n return (await NativeLinking.getInitialURL()) ?? null;\n}\n// @needsAudit\n/**\n * Attempt to open the given URL with an installed app. See the [Linking guide](/guides/linking)\n * for more information.\n * @param url A URL for the operating system to open, eg: `tel:5555555`, `exp://`.\n * @return A `Promise` that is fulfilled with `true` if the link is opened operating system\n * automatically or the user confirms the prompt to open the link. The `Promise` rejects if there\n * are no applications registered for the URL or the user cancels the dialog.\n */\nexport async function openURL(url) {\n validateURL(url);\n return await NativeLinking.openURL(url);\n}\n// @needsAudit\n/**\n * Determine whether or not an installed app can handle a given URL.\n * On web this always returns `true` because there is no API for detecting what URLs can be opened.\n * @param url The URL that you want to test can be opened.\n * @return A `Promise` object that is fulfilled with `true` if the URL can be handled, otherwise it\n * `false` if not.\n *\n * The `Promise` will reject on Android if it was impossible to check if the URL can be opened, and\n * on iOS if you didn't [add the specific scheme in the `LSApplicationQueriesSchemes` key inside **Info.plist**](/guides/linking#linking-from-your-app).\n */\nexport async function canOpenURL(url) {\n validateURL(url);\n return await NativeLinking.canOpenURL(url);\n}\n// @needsAudit\n/**\n * Returns the initial URL followed by any subsequent changes to the URL.\n * @return Returns the initial URL or `null`.\n */\nexport function useURL() {\n const [url, setLink] = useState(null);\n function onChange(event) {\n setLink(event.url);\n }\n useEffect(() => {\n getInitialURL().then((url) => setLink(url));\n const subscription = addEventListener('url', onChange);\n return () => subscription.remove();\n }, []);\n return url;\n}\nexport * from './Linking.types';\nexport * from './Schemes';\nexport { parse, createURL } from './createURL';\n//# sourceMappingURL=Linking.js.map","import invariant from 'invariant';\nconst listeners = [];\nexport default {\n addEventListener(type, listener) {\n // Do nothing in Node.js environments\n if (typeof window === 'undefined') {\n return { remove() { } };\n }\n invariant(type === 'url', `Linking.addEventListener(): ${type} is not a valid event`);\n const nativeListener = (nativeEvent) => listener({ url: window.location.href, nativeEvent });\n listeners.push({ listener, nativeListener });\n window.addEventListener('message', nativeListener, false);\n return {\n remove: () => {\n this.removeEventListener(type, listener);\n },\n };\n },\n removeEventListener(type, listener) {\n // Do nothing in Node.js environments\n if (typeof window === 'undefined') {\n return;\n }\n invariant(type === 'url', `Linking.addEventListener(): ${type} is not a valid event`);\n const listenerIndex = listeners.findIndex((pair) => pair.listener === listener);\n invariant(listenerIndex !== -1, 'Linking.removeEventListener(): cannot remove an unregistered event listener.');\n const nativeListener = listeners[listenerIndex].nativeListener;\n window.removeEventListener('message', nativeListener, false);\n listeners.splice(listenerIndex, 1);\n },\n async canOpenURL() {\n // In reality this should be able to return false for links like `chrome://` on chrome.\n return true;\n },\n async getInitialURL() {\n if (typeof window === 'undefined')\n return '';\n return window.location.href;\n },\n async openURL(url) {\n if (typeof window !== 'undefined') {\n // @ts-ignore\n window.location = new URL(url, window.location).toString();\n }\n },\n};\n//# sourceMappingURL=ExpoLinking.web.js.map","export function createURL(path, { queryParams = {} } = {}) {\n if (typeof window === 'undefined')\n return '';\n const url = new URL(path, window.location.origin);\n Object.entries(queryParams).forEach(([key, value]) => {\n if (typeof value === 'string') {\n url.searchParams.set(key, encodeURIComponent(value));\n }\n else if (value != null) {\n url.searchParams.set(key, \n // @ts-expect-error: browser supports using array\n value);\n }\n });\n return url.toString().replace(/\\/$/, '');\n}\nexport function parse(url) {\n let parsed;\n try {\n parsed = new URL(url);\n }\n catch {\n if (typeof window === 'undefined') {\n return {\n hostname: null,\n path: url,\n queryParams: {},\n scheme: null,\n };\n }\n return {\n hostname: 'localhost',\n path: url,\n queryParams: {},\n scheme: 'http',\n };\n }\n const queryParams = {};\n parsed.searchParams.forEach((value, key) => {\n queryParams[key] = decodeURIComponent(value);\n });\n return {\n hostname: parsed.hostname || null,\n // TODO: We should probably update native to follow the default URL behavior closer.\n path: !parsed.hostname && !parsed.pathname\n ? null\n : parsed.pathname === ''\n ? null\n : parsed.pathname.replace(/^\\//, ''),\n queryParams,\n scheme: parsed.protocol.replace(/:$/, ''),\n };\n}\n//# sourceMappingURL=createURL.web.js.map","import invariant from 'invariant';\nexport function validateURL(url) {\n invariant(typeof url === 'string', 'Invalid URL: should be a string. Was: ' + url);\n invariant(url, 'Invalid URL: cannot be empty');\n}\n//# sourceMappingURL=validateURL.js.map","export {};\n//# sourceMappingURL=Linking.types.js.map","export function hasCustomScheme() {\n return true;\n}\nexport function collectManifestSchemes() {\n return [];\n}\nexport function hasConstantsManifest() {\n return false;\n}\nexport function resolveScheme() {\n return 'https';\n}\n//# sourceMappingURL=Schemes.web.js.map","/////////////////////////////////////////////////////////////////////////////////\n/* UAParser.js v1.0.37\n Copyright © 2012-2021 Faisal Salman \n MIT License *//*\n Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n Supports browser & node.js environment. \n Demo : https://faisalman.github.io/ua-parser-js\n Source : https://github.com/faisalman/ua-parser-js */\n/////////////////////////////////////////////////////////////////////////////////\n\n(function (window, undefined) {\n\n 'use strict';\n\n //////////////\n // Constants\n /////////////\n\n\n var LIBVERSION = '1.0.37',\n EMPTY = '',\n UNKNOWN = '?',\n FUNC_TYPE = 'function',\n UNDEF_TYPE = 'undefined',\n OBJ_TYPE = 'object',\n STR_TYPE = 'string',\n MAJOR = 'major',\n MODEL = 'model',\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n EMBEDDED = 'embedded',\n UA_MAX_LENGTH = 500;\n\n var AMAZON = 'Amazon',\n APPLE = 'Apple',\n ASUS = 'ASUS',\n BLACKBERRY = 'BlackBerry',\n BROWSER = 'Browser',\n CHROME = 'Chrome',\n EDGE = 'Edge',\n FIREFOX = 'Firefox',\n GOOGLE = 'Google',\n HUAWEI = 'Huawei',\n LG = 'LG',\n MICROSOFT = 'Microsoft',\n MOTOROLA = 'Motorola',\n OPERA = 'Opera',\n SAMSUNG = 'Samsung',\n SHARP = 'Sharp',\n SONY = 'Sony',\n XIAOMI = 'Xiaomi',\n ZEBRA = 'Zebra',\n FACEBOOK = 'Facebook',\n CHROMIUM_OS = 'Chromium OS',\n MAC_OS = 'Mac OS';\n\n ///////////\n // Helper\n //////////\n\n var extend = function (regexes, extensions) {\n var mergedRegexes = {};\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n mergedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n mergedRegexes[i] = regexes[i];\n }\n }\n return mergedRegexes;\n },\n enumerize = function (arr) {\n var enums = {};\n for (var i=0; i 0) {\n if (q.length === 2) {\n if (typeof q[1] == FUNC_TYPE) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length === 3) {\n // check whether function or regex\n if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length === 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n },\n\n strMapper = function (str, map) {\n\n for (var i in map) {\n // check if current value is array\n if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return str;\n };\n\n ///////////////\n // String map\n //////////////\n\n // Safari < 3.0\n var oldSafariMap = {\n '1.0' : '/8',\n '1.2' : '/1',\n '1.3' : '/3',\n '2.0' : '/412',\n '2.0.2' : '/416',\n '2.0.3' : '/417',\n '2.0.4' : '/419',\n '?' : '/'\n },\n windowsVersionMap = {\n 'ME' : '4.90',\n 'NT 3.11' : 'NT3.51',\n 'NT 4.0' : 'NT4.0',\n '2000' : 'NT 5.0',\n 'XP' : ['NT 5.1', 'NT 5.2'],\n 'Vista' : 'NT 6.0',\n '7' : 'NT 6.1',\n '8' : 'NT 6.2',\n '8.1' : 'NT 6.3',\n '10' : ['NT 6.4', 'NT 10.0'],\n 'RT' : 'ARM'\n };\n\n //////////////\n // Regex map\n /////////////\n\n var regexes = {\n\n browser : [[\n\n /\\b(?:crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [VERSION, [NAME, 'Chrome']], [\n /edg(?:e|ios|a)?\\/([\\w\\.]+)/i // Microsoft Edge\n ], [VERSION, [NAME, 'Edge']], [\n\n // Presto based\n /(opera mini)\\/([-\\w\\.]+)/i, // Opera Mini\n /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i, // Opera Mobi/Tablet\n /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i // Opera\n ], [NAME, VERSION], [\n /opios[\\/ ]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [VERSION, [NAME, OPERA+' Mini']], [\n /\\bopr\\/([\\w\\.]+)/i // Opera Webkit\n ], [VERSION, [NAME, OPERA]], [\n\n // Mixed\n /\\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\\/ ]?([\\w\\.]+)/i // Baidu\n ], [VERSION, [NAME, 'Baidu']], [\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer)[\\/ ]?([\\w\\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n // Trident based\n /(avant|iemobile|slim)\\s?(?:browser)?[\\/ ]?([\\w\\.]*)/i, // Avant/IEMobile/SlimBrowser\n /(?:ms|\\()(ie) ([\\w\\.]+)/i, // Internet Explorer\n\n // Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n /(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\\/([-\\w\\.]+)/i,\n // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ\n /(heytap|ovi)browser\\/([\\d\\.]+)/i, // Heytap/Ovi\n /(weibo)__([\\d\\.]+)/i // Weibo\n ], [NAME, VERSION], [\n /(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i // UCBrowser\n ], [VERSION, [NAME, 'UC'+BROWSER]], [\n /microm.+\\bqbcore\\/([\\w\\.]+)/i, // WeChat Desktop for Windows Built-in Browser\n /\\bqbcore\\/([\\w\\.]+).+microm/i,\n /micromessenger\\/([\\w\\.]+)/i // WeChat\n ], [VERSION, [NAME, 'WeChat']], [\n /konqueror\\/([\\w\\.]+)/i // Konqueror\n ], [VERSION, [NAME, 'Konqueror']], [\n /trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i // IE11\n ], [VERSION, [NAME, 'IE']], [\n /ya(?:search)?browser\\/([\\w\\.]+)/i // Yandex\n ], [VERSION, [NAME, 'Yandex']], [\n /slbrowser\\/([\\w\\.]+)/i // Smart Lenovo Browser\n ], [VERSION, [NAME, 'Smart Lenovo '+BROWSER]], [\n /(avast|avg)\\/([\\w\\.]+)/i // Avast/AVG Secure Browser\n ], [[NAME, /(.+)/, '$1 Secure '+BROWSER], VERSION], [\n /\\bfocus\\/([\\w\\.]+)/i // Firefox Focus\n ], [VERSION, [NAME, FIREFOX+' Focus']], [\n /\\bopt\\/([\\w\\.]+)/i // Opera Touch\n ], [VERSION, [NAME, OPERA+' Touch']], [\n /coc_coc\\w+\\/([\\w\\.]+)/i // Coc Coc Browser\n ], [VERSION, [NAME, 'Coc Coc']], [\n /dolfin\\/([\\w\\.]+)/i // Dolphin\n ], [VERSION, [NAME, 'Dolphin']], [\n /coast\\/([\\w\\.]+)/i // Opera Coast\n ], [VERSION, [NAME, OPERA+' Coast']], [\n /miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI '+BROWSER]], [\n /fxios\\/([-\\w\\.]+)/i // Firefox for iOS\n ], [VERSION, [NAME, FIREFOX]], [\n /\\bqihu|(qi?ho?o?|360)browser/i // 360\n ], [[NAME, '360 ' + BROWSER]], [\n /(oculus|sailfish|huawei|vivo)browser\\/([\\w\\.]+)/i\n ], [[NAME, /(.+)/, '$1 ' + BROWSER], VERSION], [ // Oculus/Sailfish/HuaweiBrowser/VivoBrowser\n /samsungbrowser\\/([\\w\\.]+)/i // Samsung Internet\n ], [VERSION, [NAME, SAMSUNG + ' Internet']], [\n /(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n ], [[NAME, /_/g, ' '], VERSION], [\n /metasr[\\/ ]?([\\d\\.]+)/i // Sogou Explorer\n ], [VERSION, [NAME, 'Sogou Explorer']], [\n /(sogou)mo\\w+\\/([\\d\\.]+)/i // Sogou Mobile\n ], [[NAME, 'Sogou Mobile'], VERSION], [\n /(electron)\\/([\\w\\.]+) safari/i, // Electron-based App\n /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i, // Tesla\n /m?(qqbrowser|2345Explorer)[\\/ ]?([\\w\\.]+)/i // QQBrowser/2345 Browser\n ], [NAME, VERSION], [\n /(lbbrowser)/i, // LieBao Browser\n /\\[(linkedin)app\\]/i // LinkedIn App for iOS & Android\n ], [NAME], [\n\n // WebView\n /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i // Facebook App for iOS & Android\n ], [[NAME, FACEBOOK], VERSION], [\n /(Klarna)\\/([\\w\\.]+)/i, // Klarna Shopping Browser for iOS & Android\n /(kakao(?:talk|story))[\\/ ]([\\w\\.]+)/i, // Kakao App\n /(naver)\\(.*?(\\d+\\.[\\w\\.]+).*\\)/i, // Naver InApp\n /safari (line)\\/([\\w\\.]+)/i, // Line App for iOS\n /\\b(line)\\/([\\w\\.]+)\\/iab/i, // Line App for Android\n /(alipay)client\\/([\\w\\.]+)/i, // Alipay\n /(chromium|instagram|snapchat)[\\/ ]([-\\w\\.]+)/i // Chromium/Instagram/Snapchat\n ], [NAME, VERSION], [\n /\\bgsa\\/([\\w\\.]+) .*safari\\//i // Google Search Appliance on iOS\n ], [VERSION, [NAME, 'GSA']], [\n /musical_ly(?:.+app_?version\\/|_)([\\w\\.]+)/i // TikTok\n ], [VERSION, [NAME, 'TikTok']], [\n\n /headlesschrome(?:\\/([\\w\\.]+)| )/i // Chrome Headless\n ], [VERSION, [NAME, CHROME+' Headless']], [\n\n / wv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, CHROME+' WebView'], VERSION], [\n\n /droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i // Android Browser\n ], [VERSION, [NAME, 'Android '+BROWSER]], [\n\n /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /version\\/([\\w\\.\\,]+) .*mobile\\/\\w+ (safari)/i // Mobile Safari\n ], [VERSION, [NAME, 'Mobile Safari']], [\n /version\\/([\\w(\\.|\\,)]+) .*(mobile ?safari|safari)/i // Safari & Safari Mobile\n ], [VERSION, NAME], [\n /webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, strMapper, oldSafariMap]], [\n\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /mobile vr; rv:([\\w\\.]+)\\).+firefox/i // Firefox Reality\n ], [VERSION, [NAME, FIREFOX+' Reality']], [\n /ekiohf.+(flow)\\/([\\w\\.]+)/i, // Flow\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\\/ ]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar\n /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(firefox)\\/([\\w\\.]+)/i, // Other Firefox-based\n /(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i, // Mozilla\n\n // Other\n /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser\n /(links) \\(([\\w\\.]+)/i, // Links\n /panasonic;(viera)/i // Panasonic Viera\n ], [NAME, VERSION], [\n \n /(cobalt)\\/([\\w\\.]+)/i // Cobalt\n ], [NAME, [VERSION, /master.|lts./, \"\"]]\n ],\n\n cpu : [[\n\n /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\\)]/i // AMD64 (x64)\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i // IA32 (quicktime)\n ], [[ARCHITECTURE, lowerize]], [\n\n /((?:i[346]|x)86)[;\\)]/i // IA32 (x86)\n ], [[ARCHITECTURE, 'ia32']], [\n\n /\\b(aarch64|arm(v?8e?l?|_?64))\\b/i // ARM64\n ], [[ARCHITECTURE, 'arm64']], [\n\n /\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i // ARMHF\n ], [[ARCHITECTURE, 'armhf']], [\n\n // PocketPC mistakenly identified as PowerPC\n /windows (ce|mobile); ppc;/i\n ], [[ARCHITECTURE, 'arm']], [\n\n /((?:ppc|powerpc)(?:64)?)(?: mac|;|\\))/i // PowerPC\n ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [\n\n /(sun4\\w)[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n\n /((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n ], [[ARCHITECTURE, lowerize]]\n ],\n\n device : [[\n\n //////////////////////////\n // MOBILES & TABLETS\n /////////////////////////\n\n // Samsung\n /\\b(sch-i[89]0\\d|shw-m380s|sm-[ptx]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [\n /\\b((?:s[cgp]h|gt|sm)-\\w+|sc[g-]?[\\d]+a?|galaxy nexus)/i,\n /samsung[- ]([-\\w]+)/i,\n /sec-(sgh\\w+)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [\n\n // Apple\n /(?:\\/|\\()(ip(?:hone|od)[\\w, ]*)(?:\\/|;)/i // iPod/iPhone\n ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [\n /\\((ipad);[-\\w\\),; ]+apple/i, // iPad\n /applecoremedia\\/[\\w\\.]+ \\((ipad)/i,\n /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i\n ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [\n /(macintosh);/i\n ], [MODEL, [VENDOR, APPLE]], [\n\n // Sharp\n /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i\n ], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [\n\n // Huawei\n /\\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\\d{2})\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [\n /(?:huawei|honor)([-\\w ]+)[;\\)]/i,\n /\\b(nexus 6p|\\w{2,4}e?-[atu]?[ln][\\dx][012359c][adn]?)\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [\n\n // Xiaomi\n /\\b(poco[\\w ]+|m2\\d{3}j\\d\\d[a-z]{2})(?: bui|\\))/i, // Xiaomi POCO\n /\\b; (\\w+) build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i, // Xiaomi Hongmi\n /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i, // Xiaomi Redmi\n /oid[^\\)]+; (m?[12][0-389][01]\\w{3,6}[c-y])( bui|; wv|\\))/i, // Xiaomi Redmi 'numeric' models\n /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\\))/i // Xiaomi Mi\n ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [\n /oid[^\\)]+; (2\\d{4}(283|rpbf)[cgl])( bui|\\))/i, // Redmi Pad\n /\\b(mi[-_ ]?(?:pad)(?:[\\w_ ]+))(?: bui|\\))/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [\n\n // OPPO\n /; (\\w+) bui.+ oppo/i,\n /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i\n ], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [\n\n // Vivo\n /vivo (\\w+)(?: bui|\\))/i,\n /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i\n ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [\n\n // Realme\n /\\b(rmx[1-3]\\d{3})(?: bui|;|\\))/i\n ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [\n\n // Motorola\n /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,\n /\\bmot(?:orola)?[- ](\\w*)/i,\n /((?:moto[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [\n /\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [\n\n // LG\n /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i\n ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [\n /(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,\n /\\blg[-e;\\/ ]+((?!browser|netcast|android tv)\\w+)/i,\n /\\blg-?([\\d\\w]+) bui/i\n ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [\n\n // Lenovo\n /(ideatab[-\\w ]+)/i,\n /lenovo ?(s[56]000[-\\w]+|tab(?:[\\w ]+)|yt[-\\d\\w]{6}|tb[-\\d\\w]{6})/i\n ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n\n // Nokia\n /(?:maemo|nokia).*(n900|lumia \\d+)/i,\n /nokia[-_ ]?([-\\w\\.]*)/i\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [\n\n // Google\n /(pixel c)\\b/i // Google Pixel C\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [\n /droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i // Google Pixel\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [\n\n // Sony\n /droid.+ (a?\\d[0-2]{2}so|[c-g]\\d{4}|so[-gl]\\w+|xq-a\\w[4-7][12])(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [\n /sony tablet [ps]/i,\n /\\b(?:sony)?sgp\\w+(?: bui|\\))/i\n ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [\n\n // OnePlus\n / (kb2005|in20[12]5|be20[12][59])\\b/i,\n /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i\n ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n // Amazon\n /(alexa)webm/i,\n /(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\\))/i, // Kindle Fire without Silk / Echo Show\n /(kf[a-z]+)( bui|\\)).+silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [\n /((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i // Fire Phone\n ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [\n\n // BlackBerry\n /(playbook);[-\\w\\),; ]+(rim)/i // BlackBerry PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n /\\b((?:bb[a-f]|st[hv])100-\\d)/i,\n /\\(bb10; (\\w+)/i // BlackBerry 10\n ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [\n\n // Asus\n /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [\n / (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [\n\n // HTC\n /(nexus 9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n /(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i, // HTC\n\n // ZTE\n /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,\n /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\\.))|sony(?!-bra))[-_ ]?([-\\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n // Acer\n /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n // Meizu\n /droid.+; (m[1-5] note) bui/i,\n /\\bmz-([-\\w]{2,})/i\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n \n // Ulefone\n /; ((?:power )?armor(?:[\\w ]{0,8}))(?: bui|\\))/i\n ], [MODEL, [VENDOR, 'Ulefone'], [TYPE, MOBILE]], [\n\n // MIXED\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno)[-_ ]?([-\\w]*)/i,\n // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n /(hp) ([\\w ]+\\w)/i, // HP iPAQ\n /(asus)-?(\\w+)/i, // Asus\n /(microsoft); (lumia[\\w ]+)/i, // Microsoft Lumia\n /(lenovo)[-_ ]?([-\\w]+)/i, // Lenovo\n /(jolla)/i, // Jolla\n /(oppo) ?([\\w ]+) bui/i // OPPO\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /(kobo)\\s(ereader|touch)/i, // Kobo\n /(archos) (gamepad2?)/i, // Archos\n /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(nook)[\\w ]+build\\/(\\w+)/i, // Nook\n /(dell) (strea[kpr\\d ]*[\\dko])/i, // Dell Streak\n /(le[- ]+pan)[- ]+(\\w{1,9}) bui/i, // Le Pan Tablets\n /(trinity)[- ]*(t\\d{3}) bui/i, // Trinity Tablets\n /(gigaset)[- ]+(q\\w{1,9}) bui/i, // Gigaset Tablets\n /(vodafone) ([\\w ]+)(?:\\)| bui)/i // Vodafone\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(surface duo)/i // Surface Duo\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [\n /droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i // Fairphone\n ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [\n /(u304aa)/i // AT&T\n ], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [\n /\\bsie-(\\w*)/i // Siemens\n ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n /\\b(rct\\w+) b/i // RCA Tablets\n ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n /\\b(venue[\\d ]{2,7}) b/i // Dell Venue Tablets\n ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n /\\b(q(?:mv|ta)\\w+) b/i // Verizon Tablet\n ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n /\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i // Barnes & Noble Tablet\n ], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [\n /\\b(tm\\d{3}\\w+) b/i\n ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n /\\b(k88) b/i // ZTE K Series Tablet\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [\n /\\b(nx\\d{3}j) b/i // ZTE Nubia\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [\n /\\b(gen\\d{3}) b.+49h/i // Swiss GEN Mobile\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n /\\b(zur\\d{3}) b/i // Swiss ZUR Tablet\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n /\\b((zeki)?tb.*\\b) b/i // Zeki Tablets\n ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n /\\b([yr]\\d{2}) b/i,\n /\\b(dragon[- ]+touch |dt)(\\w{5}) b/i // Dragon Touch Tablet\n ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n /\\b(ns-?\\w{0,9}) b/i // Insignia Tablets\n ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n /\\b((nxa|next)-?\\w{0,9}) b/i // NextBook Tablets\n ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n /\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i // Voice Xtreme Phones\n ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [\n /\\b(lvtel\\-)?(v1[12]) b/i // LvTel Phones\n ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n /\\b(ph-1) /i // Essential PH-1\n ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [\n /\\b(v(100md|700na|7011|917g).*\\b) b/i // Envizen Tablets\n ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n /\\b(trio[-\\w\\. ]+) b/i // MachSpeed Tablets\n ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n /\\btu_(1491) b/i // Rotor Tablets\n ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n /(shield[\\w ]+) b/i // Nvidia Shield Tablets\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [\n /(sprint) (\\w+)/i // Sprint Phones\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [\n /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i // Zebra\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [\n /droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [\n\n ///////////////////\n // SMARTTVS\n ///////////////////\n\n /smart-tv.+(samsung)/i // Samsung\n ], [VENDOR, [TYPE, SMARTTV]], [\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [\n /(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i // LG SmartTV\n ], [[VENDOR, LG], [TYPE, SMARTTV]], [\n /(apple) ?tv/i // Apple TV\n ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [\n /crkey/i // Google Chromecast\n ], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /droid.+aft(\\w+)( bui|\\))/i // Fire TV\n ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [\n /\\(dtv[\\);].+(aquos)/i,\n /(aquos-tv[\\w ]+)\\)/i // Sharp\n ], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[\n /(bravia[\\w ]+)( bui|\\))/i // Sony\n ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [\n /(mitv-\\w{5}) bui/i // Xiaomi\n ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [\n /Hbbtv.*(technisat) (.*);/i // TechniSAT\n ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n /\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i, // Roku\n /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w\\+ ]*; *([\\w\\d][^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [\n /\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i // SmartTV from Unidentified Vendors\n ], [[TYPE, SMARTTV]], [\n\n ///////////////////\n // CONSOLES\n ///////////////////\n\n /(ouya)/i, // Ouya\n /(nintendo) ([wids3utch]+)/i // Nintendo\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n /droid.+; (shield) bui/i // Nvidia\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n /(playstation [345portablevi]+)/i // Playstation\n ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [\n /\\b(xbox(?: one)?(?!; xbox))[\\); ]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [\n\n ///////////////////\n // WEARABLES\n ///////////////////\n\n /((pebble))app/i // Pebble\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n /(watch)(?: ?os[,\\/]|\\d,\\d\\/)[\\d\\.]+/i // Apple Watch\n ], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [\n /droid.+; (glass) \\d/i // Google Glass\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [\n /droid.+; (wt63?0{2,3})\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [\n /(quest( 2| pro)?)/i // Oculus Quest\n ], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [\n\n ///////////////////\n // EMBEDDED\n ///////////////////\n\n /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i // Tesla\n ], [VENDOR, [TYPE, EMBEDDED]], [\n /(aeobc)\\b/i // Echo Dot\n ], [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]], [\n\n ////////////////////\n // MIXED (GENERIC)\n ///////////////////\n\n /droid .+?; ([^;]+?)(?: bui|; wv\\)|\\) applew).+? mobile safari/i // Android Phones from Unidentified Vendors\n ], [MODEL, [TYPE, MOBILE]], [\n /droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors\n ], [MODEL, [TYPE, TABLET]], [\n /\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i // Unidentifiable Tablet\n ], [[TYPE, TABLET]], [\n /(phone|mobile(?:[;\\/]| [ \\w\\/\\.]*safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile\n ], [[TYPE, MOBILE]], [\n /(android[-\\w\\. ]{0,9});.+buil/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']]\n ],\n\n engine : [[\n\n /windows.+ edge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, EDGE+'HTML']], [\n\n /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n ], [VERSION, [NAME, 'Blink']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n /ekioh(flow)\\/([\\w\\.]+)/i, // Flow\n /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i, // iCab\n /\\b(libweb)/i\n ], [NAME, VERSION], [\n\n /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows\n /microsoft (windows) (vista|xp)/i // Windows (iTunes)\n ], [NAME, VERSION], [\n /(windows (?:phone(?: os)?|mobile))[\\/ ]?([\\d\\.\\w ]*)/i // Windows Phone\n ], [NAME, [VERSION, strMapper, windowsVersionMap]], [\n /windows nt 6\\.2; (arm)/i, // Windows RT\n /windows[\\/ ]?([ntce\\d\\. ]+\\w)(?!.+xbox)/i,\n /(?:win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i\n ], [[VERSION, strMapper, windowsVersionMap], [NAME, 'Windows']], [\n\n // iOS/macOS\n /ip[honead]{2,4}\\b(?:.*os ([\\w]+) like mac|; opera)/i, // iOS\n /(?:ios;fbsv\\/|iphone.+ios[\\/ ])([\\d\\.]+)/i,\n /cfnetwork\\/.+darwin/i\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n /(mac os x) ?([\\w\\. ]*)/i,\n /(macintosh|mac_powerpc\\b)(?!.+haiku)/i // Mac OS\n ], [[NAME, MAC_OS], [VERSION, /_/g, '.']], [\n\n // Mobile OSes\n /droid ([\\w\\.]+)\\b.+(android[- ]x86|harmonyos)/i // Android-x86/HarmonyOS\n ], [VERSION, NAME], [ // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS\n /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\\/ ]?([\\w\\.]*)/i,\n /(blackberry)\\w*\\/([\\w\\.]*)/i, // Blackberry\n /(tizen|kaios)[\\/ ]([\\w\\.]+)/i, // Tizen/KaiOS\n /\\((series40);/i // Series 40\n ], [NAME, VERSION], [\n /\\(bb(10);/i // BlackBerry 10\n ], [VERSION, [NAME, BLACKBERRY]], [\n /(?:symbian ?os|symbos|s60(?=;)|series60)[-\\/ ]?([\\w\\.]*)/i // Symbian\n ], [VERSION, [NAME, 'Symbian']], [\n /mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n ], [VERSION, [NAME, FIREFOX+' OS']], [\n /web0s;.+rt(tv)/i,\n /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i // WebOS\n ], [VERSION, [NAME, 'webOS']], [\n /watch(?: ?os[,\\/]|\\d,\\d\\/)([\\d\\.]+)/i // watchOS\n ], [VERSION, [NAME, 'watchOS']], [\n\n // Google Chromecast\n /crkey\\/([\\d\\.]+)/i // Google Chromecast\n ], [VERSION, [NAME, CHROME+'cast']], [\n /(cros) [\\w]+(?:\\)| ([\\w\\.]+)\\b)/i // Chromium OS\n ], [[NAME, CHROMIUM_OS], VERSION],[\n\n // Smart TVs\n /panasonic;(viera)/i, // Panasonic Viera\n /(netrange)mmh/i, // Netrange\n /(nettv)\\/(\\d+\\.[\\w\\.]+)/i, // NetTV\n\n // Console\n /(nintendo|playstation) ([wids345portablevuch]+)/i, // Nintendo/Playstation\n /(xbox); +xbox ([^\\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)\n\n // Other\n /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i, // Joli/Palm\n /(mint)[\\/\\(\\) ]?(\\w*)/i, // Mint\n /(mageia|vectorlinux)[; ]/i, // Mageia/VectorLinux\n /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,\n // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire\n /(hurd|linux) ?([\\w\\.]*)/i, // Hurd/Linux\n /(gnu) ?([\\w\\.]*)/i, // GNU\n /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n /(haiku) (\\w+)/i // Haiku\n ], [NAME, VERSION], [\n /(sunos) ?([\\w\\.\\d]*)/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n /((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i, // Solaris\n /(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i, // AIX\n /\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i, // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX/SerenityOS\n /(unix) ?([\\w\\.]*)/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n /////////////////\n // Constructor\n ////////////////\n\n var UAParser = function (ua, extensions) {\n\n if (typeof ua === OBJ_TYPE) {\n extensions = ua;\n ua = undefined;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(ua, extensions).getResult();\n }\n\n var _navigator = (typeof window !== UNDEF_TYPE && window.navigator) ? window.navigator : undefined;\n var _ua = ua || ((_navigator && _navigator.userAgent) ? _navigator.userAgent : EMPTY);\n var _uach = (_navigator && _navigator.userAgentData) ? _navigator.userAgentData : undefined;\n var _rgxmap = extensions ? extend(regexes, extensions) : regexes;\n var _isSelfNav = _navigator && _navigator.userAgent == _ua;\n\n this.getBrowser = function () {\n var _browser = {};\n _browser[NAME] = undefined;\n _browser[VERSION] = undefined;\n rgxMapper.call(_browser, _ua, _rgxmap.browser);\n _browser[MAJOR] = majorize(_browser[VERSION]);\n // Brave-specific detection\n if (_isSelfNav && _navigator && _navigator.brave && typeof _navigator.brave.isBrave == FUNC_TYPE) {\n _browser[NAME] = 'Brave';\n }\n return _browser;\n };\n this.getCPU = function () {\n var _cpu = {};\n _cpu[ARCHITECTURE] = undefined;\n rgxMapper.call(_cpu, _ua, _rgxmap.cpu);\n return _cpu;\n };\n this.getDevice = function () {\n var _device = {};\n _device[VENDOR] = undefined;\n _device[MODEL] = undefined;\n _device[TYPE] = undefined;\n rgxMapper.call(_device, _ua, _rgxmap.device);\n if (_isSelfNav && !_device[TYPE] && _uach && _uach.mobile) {\n _device[TYPE] = MOBILE;\n }\n // iPadOS-specific detection: identified as Mac, but has some iOS-only properties\n if (_isSelfNav && _device[MODEL] == 'Macintosh' && _navigator && typeof _navigator.standalone !== UNDEF_TYPE && _navigator.maxTouchPoints && _navigator.maxTouchPoints > 2) {\n _device[MODEL] = 'iPad';\n _device[TYPE] = TABLET;\n }\n return _device;\n };\n this.getEngine = function () {\n var _engine = {};\n _engine[NAME] = undefined;\n _engine[VERSION] = undefined;\n rgxMapper.call(_engine, _ua, _rgxmap.engine);\n return _engine;\n };\n this.getOS = function () {\n var _os = {};\n _os[NAME] = undefined;\n _os[VERSION] = undefined;\n rgxMapper.call(_os, _ua, _rgxmap.os);\n if (_isSelfNav && !_os[NAME] && _uach && _uach.platform != 'Unknown') {\n _os[NAME] = _uach.platform \n .replace(/chrome os/i, CHROMIUM_OS)\n .replace(/macos/i, MAC_OS); // backward compatibility\n }\n return _os;\n };\n this.getResult = function () {\n return {\n ua : this.getUA(),\n browser : this.getBrowser(),\n engine : this.getEngine(),\n os : this.getOS(),\n device : this.getDevice(),\n cpu : this.getCPU()\n };\n };\n this.getUA = function () {\n return _ua;\n };\n this.setUA = function (ua) {\n _ua = (typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH) ? trim(ua, UA_MAX_LENGTH) : ua;\n return this;\n };\n this.setUA(_ua);\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR]);\n UAParser.CPU = enumerize([ARCHITECTURE]);\n UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);\n UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n ///////////\n // Export\n //////////\n\n // check js environment\n if (typeof(exports) !== UNDEF_TYPE) {\n // nodejs env\n if (typeof module !== UNDEF_TYPE && module.exports) {\n exports = module.exports = UAParser;\n }\n exports.UAParser = UAParser;\n } else {\n // requirejs env (optional)\n if (typeof(define) === FUNC_TYPE && define.amd) {\n define(function () {\n return UAParser;\n });\n } else if (typeof window !== UNDEF_TYPE) {\n // browser env\n window.UAParser = UAParser;\n }\n }\n\n // jQuery/Zepto specific (optional)\n // Note:\n // In AMD env the global scope should be kept clean, but jQuery is an exception.\n // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n // and we should catch that.\n var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto);\n if ($ && !$.ua) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n $.ua.get = function () {\n return parser.getUA();\n };\n $.ua.set = function (ua) {\n parser.setUA(ua);\n var result = parser.getResult();\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n\n})(typeof window === 'object' ? window : this);\n","import { useCallback, useEffect, useState } from 'react';\nimport { Dimensions, NativeEventEmitter, NativeModules, Platform } from 'react-native';\nimport { useOnEvent, useOnMount } from './internal/asyncHookWrappers';\nimport devicesWithDynamicIsland from \"./internal/devicesWithDynamicIsland\";\nimport devicesWithNotch from './internal/devicesWithNotch';\nimport RNDeviceInfo from './internal/nativeInterface';\nimport { getSupportedPlatformInfoAsync, getSupportedPlatformInfoFunctions, getSupportedPlatformInfoSync } from './internal/supported-platform-info';\nexport const [getUniqueId, getUniqueIdSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'uniqueId',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getUniqueId(),\n syncGetter: () => RNDeviceInfo.getUniqueIdSync(),\n defaultValue: 'unknown'\n});\nlet uniqueId;\nexport async function syncUniqueId() {\n if (Platform.OS === 'ios') {\n uniqueId = await RNDeviceInfo.syncUniqueId();\n } else {\n uniqueId = await getUniqueId();\n }\n\n return uniqueId;\n}\nexport const [getInstanceId, getInstanceIdSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'instanceId',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getInstanceId(),\n syncGetter: () => RNDeviceInfo.getInstanceIdSync(),\n defaultValue: 'unknown'\n});\nexport const [getSerialNumber, getSerialNumberSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'serialNumber',\n supportedPlatforms: ['android', 'windows'],\n getter: () => RNDeviceInfo.getSerialNumber(),\n syncGetter: () => RNDeviceInfo.getSerialNumberSync(),\n defaultValue: 'unknown'\n});\nexport const [getAndroidId, getAndroidIdSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'androidId',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getAndroidId(),\n syncGetter: () => RNDeviceInfo.getAndroidIdSync(),\n defaultValue: 'unknown'\n});\nexport const [getIpAddress, getIpAddressSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getIpAddress(),\n syncGetter: () => RNDeviceInfo.getIpAddressSync(),\n defaultValue: 'unknown'\n});\nexport const [isCameraPresent, isCameraPresentSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'windows', 'web'],\n getter: () => RNDeviceInfo.isCameraPresent(),\n syncGetter: () => RNDeviceInfo.isCameraPresentSync(),\n defaultValue: false\n});\nexport async function getMacAddress() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getMacAddress();\n } else if (Platform.OS === 'ios') {\n return '02:00:00:00:00:00';\n }\n\n return 'unknown';\n}\nexport function getMacAddressSync() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getMacAddressSync();\n } else if (Platform.OS === 'ios') {\n return '02:00:00:00:00:00';\n }\n\n return 'unknown';\n}\nexport const getDeviceId = () => getSupportedPlatformInfoSync({\n defaultValue: 'unknown',\n memoKey: 'deviceId',\n getter: () => RNDeviceInfo.deviceId,\n supportedPlatforms: ['android', 'ios', 'windows']\n});\nexport const [getManufacturer, getManufacturerSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'manufacturer',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => Platform.OS == 'ios' ? Promise.resolve('Apple') : RNDeviceInfo.getSystemManufacturer(),\n syncGetter: () => Platform.OS == 'ios' ? 'Apple' : RNDeviceInfo.getSystemManufacturerSync(),\n defaultValue: 'unknown'\n});\nexport const getModel = () => getSupportedPlatformInfoSync({\n memoKey: 'model',\n defaultValue: 'unknown',\n supportedPlatforms: ['ios', 'android', 'windows'],\n getter: () => RNDeviceInfo.model\n});\nexport const getBrand = () => getSupportedPlatformInfoSync({\n memoKey: 'brand',\n supportedPlatforms: ['android', 'ios', 'windows'],\n defaultValue: 'unknown',\n getter: () => RNDeviceInfo.brand\n});\nexport const getSystemName = () => getSupportedPlatformInfoSync({\n defaultValue: 'unknown',\n supportedPlatforms: ['ios', 'android', 'windows'],\n memoKey: 'systemName',\n getter: () => Platform.select({\n ios: RNDeviceInfo.systemName,\n android: 'Android',\n windows: 'Windows',\n default: 'unknown'\n })\n});\nexport const getSystemVersion = () => getSupportedPlatformInfoSync({\n defaultValue: 'unknown',\n getter: () => RNDeviceInfo.systemVersion,\n supportedPlatforms: ['android', 'ios', 'windows'],\n memoKey: 'systemVersion'\n});\nexport const [getBuildId, getBuildIdSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'buildId',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getBuildId(),\n syncGetter: () => RNDeviceInfo.getBuildIdSync(),\n defaultValue: 'unknown'\n});\nexport const [getApiLevel, getApiLevelSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'apiLevel',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getApiLevel(),\n syncGetter: () => RNDeviceInfo.getApiLevelSync(),\n defaultValue: -1\n});\nexport const getBundleId = () => getSupportedPlatformInfoSync({\n memoKey: 'bundleId',\n supportedPlatforms: ['android', 'ios', 'windows'],\n defaultValue: 'unknown',\n getter: () => RNDeviceInfo.bundleId\n});\nexport const [getInstallerPackageName, getInstallerPackageNameSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'installerPackageName',\n supportedPlatforms: ['android', 'windows', 'ios'],\n getter: () => RNDeviceInfo.getInstallerPackageName(),\n syncGetter: () => RNDeviceInfo.getInstallerPackageNameSync(),\n defaultValue: 'unknown'\n});\nexport const getApplicationName = () => getSupportedPlatformInfoSync({\n memoKey: 'appName',\n defaultValue: 'unknown',\n getter: () => RNDeviceInfo.appName,\n supportedPlatforms: ['android', 'ios', 'windows']\n});\nexport const getBuildNumber = () => getSupportedPlatformInfoSync({\n memoKey: 'buildNumber',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.buildNumber,\n defaultValue: 'unknown'\n});\nexport const getVersion = () => getSupportedPlatformInfoSync({\n memoKey: 'version',\n defaultValue: 'unknown',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.appVersion\n});\nexport function getReadableVersion() {\n return getVersion() + '.' + getBuildNumber();\n}\nexport const [getDeviceName, getDeviceNameSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getDeviceName(),\n syncGetter: () => RNDeviceInfo.getDeviceNameSync(),\n defaultValue: 'unknown'\n});\nexport const [getUsedMemory, getUsedMemorySync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getUsedMemory(),\n syncGetter: () => RNDeviceInfo.getUsedMemorySync(),\n defaultValue: -1\n});\nexport const getUserAgent = () => getSupportedPlatformInfoAsync({\n memoKey: 'userAgent',\n defaultValue: 'unknown',\n supportedPlatforms: ['android', 'ios', 'web'],\n getter: () => RNDeviceInfo.getUserAgent()\n});\nexport const getUserAgentSync = () => getSupportedPlatformInfoSync({\n memoKey: 'userAgentSync',\n defaultValue: 'unknown',\n supportedPlatforms: ['android', 'web'],\n getter: () => RNDeviceInfo.getUserAgentSync()\n});\nexport const [getFontScale, getFontScaleSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getFontScale(),\n syncGetter: () => RNDeviceInfo.getFontScaleSync(),\n defaultValue: -1\n});\nexport const [getBootloader, getBootloaderSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'bootloader',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getBootloader(),\n syncGetter: () => RNDeviceInfo.getBootloaderSync(),\n defaultValue: 'unknown'\n});\nexport const [getDevice, getDeviceSync] = getSupportedPlatformInfoFunctions({\n getter: () => RNDeviceInfo.getDevice(),\n syncGetter: () => RNDeviceInfo.getDeviceSync(),\n defaultValue: 'unknown',\n memoKey: 'device',\n supportedPlatforms: ['android']\n});\nexport const [getDisplay, getDisplaySync] = getSupportedPlatformInfoFunctions({\n memoKey: 'display',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getDisplay(),\n syncGetter: () => RNDeviceInfo.getDisplaySync(),\n defaultValue: 'unknown'\n});\nexport const [getFingerprint, getFingerprintSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'fingerprint',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getFingerprint(),\n syncGetter: () => RNDeviceInfo.getFingerprintSync(),\n defaultValue: 'unknown'\n});\nexport const [getHardware, getHardwareSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'hardware',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getHardware(),\n syncGetter: () => RNDeviceInfo.getHardwareSync(),\n defaultValue: 'unknown'\n});\nexport const [getHost, getHostSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'host',\n supportedPlatforms: ['android', 'windows'],\n getter: () => RNDeviceInfo.getHost(),\n syncGetter: () => RNDeviceInfo.getHostSync(),\n defaultValue: 'unknown'\n});\nexport const [getHostNames, getHostNamesSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'hostNames',\n supportedPlatforms: ['windows'],\n getter: () => RNDeviceInfo.getHostNames(),\n syncGetter: () => RNDeviceInfo.getHostNamesSync(),\n defaultValue: []\n});\nexport const [getProduct, getProductSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'product',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getProduct(),\n syncGetter: () => RNDeviceInfo.getProductSync(),\n defaultValue: 'unknown'\n});\nexport const [getTags, getTagsSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'tags',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getTags(),\n syncGetter: () => RNDeviceInfo.getTagsSync(),\n defaultValue: 'unknown'\n});\nexport const [getType, getTypeSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'type',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getType(),\n syncGetter: () => RNDeviceInfo.getTypeSync(),\n defaultValue: 'unknown'\n});\nexport const [getBaseOs, getBaseOsSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'baseOs',\n supportedPlatforms: ['android', 'web', 'windows'],\n getter: () => RNDeviceInfo.getBaseOs(),\n syncGetter: () => RNDeviceInfo.getBaseOsSync(),\n defaultValue: 'unknown'\n});\nexport const [getPreviewSdkInt, getPreviewSdkIntSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'previewSdkInt',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getPreviewSdkInt(),\n syncGetter: () => RNDeviceInfo.getPreviewSdkIntSync(),\n defaultValue: -1\n});\nexport const [getSecurityPatch, getSecurityPatchSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'securityPatch',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getSecurityPatch(),\n syncGetter: () => RNDeviceInfo.getSecurityPatchSync(),\n defaultValue: 'unknown'\n});\nexport const [getCodename, getCodenameSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'codeName',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getCodename(),\n syncGetter: () => RNDeviceInfo.getCodenameSync(),\n defaultValue: 'unknown'\n});\nexport const [getIncremental, getIncrementalSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'incremental',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getIncremental(),\n syncGetter: () => RNDeviceInfo.getIncrementalSync(),\n defaultValue: 'unknown'\n});\nexport const [isEmulator, isEmulatorSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'emulator',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.isEmulator(),\n syncGetter: () => RNDeviceInfo.isEmulatorSync(),\n defaultValue: false\n});\nexport const isTablet = () => getSupportedPlatformInfoSync({\n defaultValue: false,\n supportedPlatforms: ['android', 'ios', 'windows'],\n memoKey: 'tablet',\n getter: () => RNDeviceInfo.isTablet\n});\nexport const isLowRamDevice = () => getSupportedPlatformInfoSync({\n defaultValue: false,\n supportedPlatforms: ['android'],\n memoKey: 'lowRam',\n getter: () => RNDeviceInfo.isLowRamDevice\n});\nexport const isDisplayZoomed = () => getSupportedPlatformInfoSync({\n defaultValue: false,\n supportedPlatforms: ['ios'],\n memoKey: 'zoomed',\n getter: () => RNDeviceInfo.isDisplayZoomed\n});\nexport const [isPinOrFingerprintSet, isPinOrFingerprintSetSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.isPinOrFingerprintSet(),\n syncGetter: () => RNDeviceInfo.isPinOrFingerprintSetSync(),\n defaultValue: false\n});\nlet notch;\nexport function hasNotch() {\n if (notch === undefined) {\n let _brand = getBrand();\n\n let _model = getModel();\n\n notch = devicesWithNotch.findIndex(item => item.brand.toLowerCase() === _brand.toLowerCase() && item.model.toLowerCase() === _model.toLowerCase()) !== -1;\n }\n\n return notch;\n}\nlet dynamicIsland;\nexport function hasDynamicIsland() {\n if (dynamicIsland === undefined) {\n let _brand = getBrand();\n\n let _model = getModel();\n\n dynamicIsland = devicesWithDynamicIsland.findIndex(item => item.brand.toLowerCase() === _brand.toLowerCase() && item.model.toLowerCase() === _model.toLowerCase()) !== -1;\n }\n\n return dynamicIsland;\n}\nexport const [hasGms, hasGmsSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.hasGms(),\n syncGetter: () => RNDeviceInfo.hasGmsSync(),\n defaultValue: false\n});\nexport const [hasHms, hasHmsSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.hasHms(),\n syncGetter: () => RNDeviceInfo.hasHmsSync(),\n defaultValue: false\n});\nexport const [getFirstInstallTime, getFirstInstallTimeSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'firstInstallTime',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getFirstInstallTime(),\n syncGetter: () => RNDeviceInfo.getFirstInstallTimeSync(),\n defaultValue: -1\n});\nexport const [getInstallReferrer, getInstallReferrerSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'installReferrer',\n supportedPlatforms: ['android', 'windows', 'web'],\n getter: () => RNDeviceInfo.getInstallReferrer(),\n syncGetter: () => RNDeviceInfo.getInstallReferrerSync(),\n defaultValue: 'unknown'\n});\nexport const [getLastUpdateTime, getLastUpdateTimeSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'lastUpdateTime',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getLastUpdateTime(),\n syncGetter: () => RNDeviceInfo.getLastUpdateTimeSync(),\n defaultValue: -1\n});\nexport const [getPhoneNumber, getPhoneNumberSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getPhoneNumber(),\n syncGetter: () => RNDeviceInfo.getPhoneNumberSync(),\n defaultValue: 'unknown'\n});\nexport const [getCarrier, getCarrierSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios'],\n getter: () => RNDeviceInfo.getCarrier(),\n syncGetter: () => RNDeviceInfo.getCarrierSync(),\n defaultValue: 'unknown'\n});\nexport const [getTotalMemory, getTotalMemorySync] = getSupportedPlatformInfoFunctions({\n memoKey: 'totalMemory',\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getTotalMemory(),\n syncGetter: () => RNDeviceInfo.getTotalMemorySync(),\n defaultValue: -1\n});\nexport const [getMaxMemory, getMaxMemorySync] = getSupportedPlatformInfoFunctions({\n memoKey: 'maxMemory',\n supportedPlatforms: ['android', 'windows', 'web'],\n getter: () => RNDeviceInfo.getMaxMemory(),\n syncGetter: () => RNDeviceInfo.getMaxMemorySync(),\n defaultValue: -1\n});\nexport const [getTotalDiskCapacity, getTotalDiskCapacitySync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getTotalDiskCapacity(),\n syncGetter: () => RNDeviceInfo.getTotalDiskCapacitySync(),\n defaultValue: -1\n});\nexport async function getTotalDiskCapacityOld() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getTotalDiskCapacityOld();\n }\n\n if (Platform.OS === 'ios' || Platform.OS === 'windows' || Platform.OS === 'web') {\n return getTotalDiskCapacity();\n }\n\n return -1;\n}\nexport function getTotalDiskCapacityOldSync() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getTotalDiskCapacityOldSync();\n }\n\n if (Platform.OS === 'ios' || Platform.OS === 'windows' || Platform.OS === 'web') {\n return getTotalDiskCapacitySync();\n }\n\n return -1;\n}\nexport const [getFreeDiskStorage, getFreeDiskStorageSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getFreeDiskStorage(),\n syncGetter: () => RNDeviceInfo.getFreeDiskStorageSync(),\n defaultValue: -1\n});\nexport async function getFreeDiskStorageOld() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getFreeDiskStorageOld();\n }\n\n if (Platform.OS === 'ios' || Platform.OS === 'windows' || Platform.OS === 'web') {\n return getFreeDiskStorage();\n }\n\n return -1;\n}\nexport function getFreeDiskStorageOldSync() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getFreeDiskStorageOldSync();\n }\n\n if (Platform.OS === 'ios' || Platform.OS === 'windows' || Platform.OS === 'web') {\n return getFreeDiskStorageSync();\n }\n\n return -1;\n}\nexport const [getBatteryLevel, getBatteryLevelSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getBatteryLevel(),\n syncGetter: () => RNDeviceInfo.getBatteryLevelSync(),\n defaultValue: -1\n});\nexport const [getPowerState, getPowerStateSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['ios', 'android', 'windows', 'web'],\n getter: () => RNDeviceInfo.getPowerState(),\n syncGetter: () => RNDeviceInfo.getPowerStateSync(),\n defaultValue: {}\n});\nexport const [isBatteryCharging, isBatteryChargingSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.isBatteryCharging(),\n syncGetter: () => RNDeviceInfo.isBatteryChargingSync(),\n defaultValue: false\n});\nexport async function isLandscape() {\n return Promise.resolve(isLandscapeSync());\n}\nexport function isLandscapeSync() {\n const {\n height,\n width\n } = Dimensions.get('window');\n return width >= height;\n}\nexport const [isAirplaneMode, isAirplaneModeSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'web'],\n getter: () => RNDeviceInfo.isAirplaneMode(),\n syncGetter: () => RNDeviceInfo.isAirplaneModeSync(),\n defaultValue: false\n});\nexport const getDeviceType = () => {\n return getSupportedPlatformInfoSync({\n memoKey: 'deviceType',\n supportedPlatforms: ['android', 'ios', 'windows'],\n defaultValue: 'unknown',\n getter: () => RNDeviceInfo.deviceType\n });\n};\nexport const getDeviceTypeSync = () => {\n return getSupportedPlatformInfoSync({\n memoKey: 'deviceType',\n supportedPlatforms: ['android', 'ios', 'windows'],\n defaultValue: 'unknown',\n getter: () => RNDeviceInfo.deviceType\n });\n};\nexport const [supportedAbis, supportedAbisSync] = getSupportedPlatformInfoFunctions({\n memoKey: '_supportedAbis',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getSupportedAbis(),\n syncGetter: () => RNDeviceInfo.getSupportedAbisSync(),\n defaultValue: []\n});\nexport const [supported32BitAbis, supported32BitAbisSync] = getSupportedPlatformInfoFunctions({\n memoKey: '_supported32BitAbis',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getSupported32BitAbis(),\n syncGetter: () => RNDeviceInfo.getSupported32BitAbisSync(),\n defaultValue: []\n});\nexport const [supported64BitAbis, supported64BitAbisSync] = getSupportedPlatformInfoFunctions({\n memoKey: '_supported64BitAbis',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getSupported64BitAbis(),\n syncGetter: () => RNDeviceInfo.getSupported64BitAbisSync(),\n defaultValue: []\n});\nexport async function hasSystemFeature(feature) {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.hasSystemFeature(feature);\n }\n\n return false;\n}\nexport function hasSystemFeatureSync(feature) {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.hasSystemFeatureSync(feature);\n }\n\n return false;\n}\nexport function isLowBatteryLevel(level) {\n if (Platform.OS === 'android') {\n return level < 0.15;\n }\n\n return level < 0.2;\n}\nexport const [getSystemAvailableFeatures, getSystemAvailableFeaturesSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getSystemAvailableFeatures(),\n syncGetter: () => RNDeviceInfo.getSystemAvailableFeaturesSync(),\n defaultValue: []\n});\nexport const [isLocationEnabled, isLocationEnabledSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'web'],\n getter: () => RNDeviceInfo.isLocationEnabled(),\n syncGetter: () => RNDeviceInfo.isLocationEnabledSync(),\n defaultValue: false\n});\nexport const [isHeadphonesConnected, isHeadphonesConnectedSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios'],\n getter: () => RNDeviceInfo.isHeadphonesConnected(),\n syncGetter: () => RNDeviceInfo.isHeadphonesConnectedSync(),\n defaultValue: false\n});\nexport const [isMouseConnected, isMouseConnectedSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['windows'],\n getter: () => RNDeviceInfo.isMouseConnected(),\n syncGetter: () => RNDeviceInfo.isMouseConnectedSync(),\n defaultValue: false\n});\nexport const [isKeyboardConnected, isKeyboardConnectedSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['windows'],\n getter: () => RNDeviceInfo.isKeyboardConnected(),\n syncGetter: () => RNDeviceInfo.isKeyboardConnectedSync(),\n defaultValue: false\n});\nexport const [getSupportedMediaTypeList, getSupportedMediaTypeListSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getSupportedMediaTypeList(),\n syncGetter: () => RNDeviceInfo.getSupportedMediaTypeListSync(),\n defaultValue: []\n});\nexport const isTabletMode = () => getSupportedPlatformInfoAsync({\n supportedPlatforms: ['windows'],\n getter: () => RNDeviceInfo.isTabletMode(),\n defaultValue: false\n});\nexport const [getAvailableLocationProviders, getAvailableLocationProvidersSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios'],\n getter: () => RNDeviceInfo.getAvailableLocationProviders(),\n syncGetter: () => RNDeviceInfo.getAvailableLocationProvidersSync(),\n defaultValue: {}\n});\nexport const [getBrightness, getBrightnessSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['ios'],\n getter: () => RNDeviceInfo.getBrightness(),\n syncGetter: () => RNDeviceInfo.getBrightnessSync(),\n defaultValue: -1\n});\nexport async function getDeviceToken() {\n if (Platform.OS === 'ios') {\n return RNDeviceInfo.getDeviceToken();\n }\n\n return 'unknown';\n}\nconst deviceInfoEmitter = new NativeEventEmitter(NativeModules.RNDeviceInfo);\nexport function useBatteryLevel() {\n const [batteryLevel, setBatteryLevel] = useState(null);\n useEffect(() => {\n const setInitialValue = async () => {\n const initialValue = await getBatteryLevel();\n setBatteryLevel(initialValue);\n };\n\n const onChange = level => {\n setBatteryLevel(level);\n };\n\n setInitialValue();\n const subscription = deviceInfoEmitter.addListener('RNDeviceInfo_batteryLevelDidChange', onChange);\n return () => subscription.remove();\n }, []);\n return batteryLevel;\n}\nexport function useBatteryLevelIsLow() {\n const [batteryLevelIsLow, setBatteryLevelIsLow] = useState(null);\n useEffect(() => {\n const setInitialValue = async () => {\n const initialValue = await getBatteryLevel();\n isLowBatteryLevel(initialValue) && setBatteryLevelIsLow(initialValue);\n };\n\n setInitialValue();\n\n const onChange = level => {\n setBatteryLevelIsLow(level);\n };\n\n const subscription = deviceInfoEmitter.addListener('RNDeviceInfo_batteryLevelIsLow', onChange);\n return () => subscription.remove();\n }, []);\n return batteryLevelIsLow;\n}\nexport function usePowerState() {\n const [powerState, setPowerState] = useState({});\n useEffect(() => {\n const setInitialValue = async () => {\n const initialValue = await getPowerState();\n setPowerState(initialValue);\n };\n\n const onChange = state => {\n setPowerState(state);\n };\n\n setInitialValue();\n const subscription = deviceInfoEmitter.addListener('RNDeviceInfo_powerStateDidChange', onChange);\n return () => subscription.remove();\n }, []);\n return powerState;\n}\nexport function useIsHeadphonesConnected() {\n return useOnEvent('RNDeviceInfo_headphoneConnectionDidChange', isHeadphonesConnected, false);\n}\nexport function useFirstInstallTime() {\n return useOnMount(getFirstInstallTime, -1);\n}\nexport function useDeviceName() {\n return useOnMount(getDeviceName, 'unknown');\n}\nexport function useHasSystemFeature(feature) {\n const asyncGetter = useCallback(() => hasSystemFeature(feature), [feature]);\n return useOnMount(asyncGetter, false);\n}\nexport function useIsEmulator() {\n return useOnMount(isEmulator, false);\n}\nexport function useManufacturer() {\n return useOnMount(getManufacturer, 'unknown');\n}\nexport function useBrightness() {\n const [brightness, setBrightness] = useState(null);\n useEffect(() => {\n const setInitialValue = async () => {\n const initialValue = await getBrightness();\n setBrightness(initialValue);\n };\n\n const onChange = value => {\n setBrightness(value);\n };\n\n setInitialValue();\n const subscription = deviceInfoEmitter.addListener('RNDeviceInfo_brightnessDidChange', onChange);\n return () => subscription.remove();\n }, []);\n return brightness;\n}\nconst DeviceInfo = {\n getAndroidId,\n getAndroidIdSync,\n getApiLevel,\n getApiLevelSync,\n getApplicationName,\n getAvailableLocationProviders,\n getAvailableLocationProvidersSync,\n getBaseOs,\n getBaseOsSync,\n getBatteryLevel,\n getBatteryLevelSync,\n getBootloader,\n getBootloaderSync,\n getBrand,\n getBuildId,\n getBuildIdSync,\n getBuildNumber,\n getBundleId,\n getCarrier,\n getCarrierSync,\n getCodename,\n getCodenameSync,\n getDevice,\n getDeviceId,\n getDeviceName,\n getDeviceNameSync,\n getDeviceSync,\n getDeviceToken,\n getDeviceType,\n getDisplay,\n getDisplaySync,\n getFingerprint,\n getFingerprintSync,\n getFirstInstallTime,\n getFirstInstallTimeSync,\n getFontScale,\n getFontScaleSync,\n getFreeDiskStorage,\n getFreeDiskStorageOld,\n getFreeDiskStorageSync,\n getFreeDiskStorageOldSync,\n getHardware,\n getHardwareSync,\n getHost,\n getHostSync,\n getHostNames,\n getHostNamesSync,\n getIncremental,\n getIncrementalSync,\n getInstallerPackageName,\n getInstallerPackageNameSync,\n getInstallReferrer,\n getInstallReferrerSync,\n getInstanceId,\n getInstanceIdSync,\n getIpAddress,\n getIpAddressSync,\n getLastUpdateTime,\n getLastUpdateTimeSync,\n getMacAddress,\n getMacAddressSync,\n getManufacturer,\n getManufacturerSync,\n getMaxMemory,\n getMaxMemorySync,\n getModel,\n getPhoneNumber,\n getPhoneNumberSync,\n getPowerState,\n getPowerStateSync,\n getPreviewSdkInt,\n getPreviewSdkIntSync,\n getProduct,\n getProductSync,\n getReadableVersion,\n getSecurityPatch,\n getSecurityPatchSync,\n getSerialNumber,\n getSerialNumberSync,\n getSystemAvailableFeatures,\n getSystemAvailableFeaturesSync,\n getSystemName,\n getSystemVersion,\n getTags,\n getTagsSync,\n getTotalDiskCapacity,\n getTotalDiskCapacityOld,\n getTotalDiskCapacitySync,\n getTotalDiskCapacityOldSync,\n getTotalMemory,\n getTotalMemorySync,\n getType,\n getTypeSync,\n getUniqueId,\n getUniqueIdSync,\n getUsedMemory,\n getUsedMemorySync,\n getUserAgent,\n getUserAgentSync,\n getVersion,\n getBrightness,\n getBrightnessSync,\n hasGms,\n hasGmsSync,\n hasHms,\n hasHmsSync,\n hasNotch,\n hasDynamicIsland,\n hasSystemFeature,\n hasSystemFeatureSync,\n isAirplaneMode,\n isAirplaneModeSync,\n isBatteryCharging,\n isBatteryChargingSync,\n isCameraPresent,\n isCameraPresentSync,\n isEmulator,\n isEmulatorSync,\n isHeadphonesConnected,\n isHeadphonesConnectedSync,\n isLandscape,\n isLandscapeSync,\n isLocationEnabled,\n isLocationEnabledSync,\n isPinOrFingerprintSet,\n isPinOrFingerprintSetSync,\n isMouseConnected,\n isMouseConnectedSync,\n isKeyboardConnected,\n isKeyboardConnectedSync,\n isTabletMode,\n isTablet,\n isLowRamDevice,\n isDisplayZoomed,\n supported32BitAbis,\n supported32BitAbisSync,\n supported64BitAbis,\n supported64BitAbisSync,\n supportedAbis,\n supportedAbisSync,\n syncUniqueId,\n useBatteryLevel,\n useBatteryLevelIsLow,\n useDeviceName,\n useFirstInstallTime,\n useHasSystemFeature,\n useIsEmulator,\n usePowerState,\n useManufacturer,\n useIsHeadphonesConnected,\n useBrightness,\n getSupportedMediaTypeList,\n getSupportedMediaTypeListSync\n};\nexport default DeviceInfo;\n//# sourceMappingURL=index.js.map","import { useState, useEffect, useMemo } from 'react';\nimport { NativeEventEmitter, NativeModules } from 'react-native';\n\n/**\n * simple hook wrapper for async functions for 'on-mount / componentDidMount' that only need to fired once\n * @param asyncGetter async function that 'gets' something\n * @param initialResult -1 | false | 'unknown'\n */\nexport function useOnMount(asyncGetter, initialResult) {\n const [response, setResponse] = useState({\n loading: true,\n result: initialResult\n });\n useEffect(() => {\n // async function cuz react complains if useEffect's effect param is an async function\n const getAsync = async () => {\n const result = await asyncGetter();\n setResponse({\n loading: false,\n result\n });\n };\n\n getAsync();\n }, [asyncGetter]);\n return response;\n}\nexport const deviceInfoEmitter = new NativeEventEmitter(NativeModules.RNDeviceInfo);\n/**\n * simple hook wrapper for handling events\n * @param eventName\n * @param initialValueAsyncGetter\n * @param defaultValue\n */\n\nexport function useOnEvent(eventName, initialValueAsyncGetter, defaultValue) {\n const {\n loading,\n result: initialResult\n } = useOnMount(initialValueAsyncGetter, defaultValue);\n const [result, setResult] = useState(defaultValue); // sets the result to what the intial value is on mount\n\n useEffect(() => {\n setResult(initialResult);\n }, [initialResult]); // - set up the event listener to set the result\n // - set up the clean up function to remove subscription on unmount\n\n useEffect(() => {\n const subscription = deviceInfoEmitter.addListener(eventName, setResult);\n return () => subscription.remove();\n }, [eventName]); // loading will only be true while getting the inital value. After that, it will always be false, but a new result may occur\n\n return useMemo(() => ({\n loading,\n result\n }), [loading, result]);\n}\n//# sourceMappingURL=asyncHookWrappers.js.map","const devicesWithDynamicIsland = [{\n brand: 'Apple',\n model: 'iPhone 15'\n}, {\n brand: 'Apple',\n model: 'iPhone 15 Plus'\n}, {\n brand: 'Apple',\n model: 'iPhone 15 Pro'\n}, {\n brand: 'Apple',\n model: 'iPhone 15 Pro Max'\n}, {\n brand: 'Apple',\n model: 'iPhone 14 Pro'\n}, {\n brand: 'Apple',\n model: 'iPhone 14 Pro Max'\n}];\nexport default devicesWithDynamicIsland;\n//# sourceMappingURL=devicesWithDynamicIsland.js.map","const devicesWithNotch = [{\n brand: 'Apple',\n model: 'iPhone 15'\n}, {\n brand: 'Apple',\n model: 'iPhone 15 Plus'\n}, {\n brand: 'Apple',\n model: 'iPhone 15 Pro'\n}, {\n brand: 'Apple',\n model: 'iPhone 15 Pro Max'\n}, {\n brand: 'Apple',\n model: 'iPhone 14'\n}, {\n brand: 'Apple',\n model: 'iPhone 14 Plus'\n}, {\n brand: 'Apple',\n model: 'iPhone 14 Pro'\n}, {\n brand: 'Apple',\n model: 'iPhone 14 Pro Max'\n}, {\n brand: 'Apple',\n model: 'iPhone 13 mini'\n}, {\n brand: 'Apple',\n model: 'iPhone 13'\n}, {\n brand: 'Apple',\n model: 'iPhone 13 Pro'\n}, {\n brand: 'Apple',\n model: 'iPhone 13 Pro Max'\n}, {\n brand: 'Apple',\n model: 'iPhone 12 mini'\n}, {\n brand: 'Apple',\n model: 'iPhone 12'\n}, {\n brand: 'Apple',\n model: 'iPhone 12 Pro'\n}, {\n brand: 'Apple',\n model: 'iPhone 12 Pro Max'\n}, {\n brand: 'Apple',\n model: 'iPhone 11'\n}, {\n brand: 'Apple',\n model: 'iPhone 11 Pro'\n}, {\n brand: 'Apple',\n model: 'iPhone 11 Pro Max'\n}, {\n brand: 'Apple',\n model: 'iPhone X'\n}, {\n brand: 'Apple',\n model: 'iPhone XS'\n}, {\n brand: 'Apple',\n model: 'iPhone XS Max'\n}, {\n brand: 'Apple',\n model: 'iPhone XR'\n}, {\n brand: 'Asus',\n model: 'ZenFone 5'\n}, {\n brand: 'Asus',\n model: 'ZenFone 5z'\n}, {\n brand: 'google',\n model: 'Pixel 3 XL'\n}, {\n brand: 'google',\n model: 'Pixel 4a'\n}, {\n brand: 'Huawei',\n model: 'P20'\n}, {\n brand: 'Huawei',\n model: 'P20 Plus'\n}, {\n brand: 'Huawei',\n model: 'P20 Lite'\n}, {\n brand: 'Huawei',\n model: 'ANE-LX1'\n}, {\n brand: 'Huawei',\n model: 'INE-LX1'\n}, {\n brand: 'Huawei',\n model: 'POT-LX1'\n}, {\n brand: 'Huawei',\n model: 'Honor Play'\n}, {\n brand: 'Huawei',\n model: 'Honor 10'\n}, {\n brand: 'Huawei',\n model: 'Mate 20 Lite'\n}, {\n brand: 'Huawei',\n model: 'Mate 20 Pro'\n}, {\n brand: 'Huawei',\n model: 'ELE-L29' // P30\n\n}, {\n brand: 'Huawei',\n model: 'P30 Lite'\n}, {\n brand: 'Huawei',\n model: 'P30 Pro'\n}, {\n brand: 'Huawei',\n model: 'JNY-LX1' // P40 Lite\n\n}, {\n brand: 'Huawei',\n model: 'Nova 3'\n}, {\n brand: 'Huawei',\n model: 'Nova 3i'\n}, {\n brand: 'Leagoo',\n model: 'S9'\n}, {\n brand: 'LG',\n model: 'G7'\n}, {\n brand: 'LG',\n model: 'G7 ThinQ'\n}, {\n brand: 'LG',\n model: 'G7+ ThinQ'\n}, {\n brand: 'LG',\n model: 'LM-Q910' //G7 One\n\n}, {\n brand: 'LG',\n model: 'LM-G710' //G7 ThinQ\n\n}, {\n brand: 'LG',\n model: 'LM-V405' //V40 ThinQ\n\n}, {\n brand: 'Motorola',\n model: 'Moto g7 Play'\n}, {\n brand: 'Motorola',\n model: 'Moto g7 Power'\n}, {\n brand: 'Motorola',\n model: 'One'\n}, {\n brand: 'Motorola',\n model: 'Motorola One Vision'\n}, {\n brand: 'Nokia',\n model: '5.1 Plus'\n}, {\n brand: 'Nokia',\n model: 'Nokia 6.1 Plus'\n}, {\n brand: 'Nokia',\n model: '7.1'\n}, {\n brand: 'Nokia',\n model: '8.1'\n}, {\n brand: 'OnePlus',\n model: '6'\n}, {\n brand: 'OnePlus',\n model: 'A6003'\n}, {\n brand: 'ONEPLUS',\n model: 'A6000'\n}, {\n brand: 'OnePlus',\n model: 'OnePlus A6003'\n}, {\n brand: 'OnePlus',\n model: 'ONEPLUS A6010'\n}, {\n brand: 'OnePlus',\n model: 'ONEPLUS A6013'\n}, {\n brand: 'OnePlus',\n model: 'ONEPLUS A6000'\n}, {\n brand: 'Oppo',\n model: 'R15'\n}, {\n brand: 'Oppo',\n model: 'R15 Pro'\n}, {\n brand: 'Oppo',\n model: 'F7'\n}, {\n brand: 'Oukitel',\n model: 'U18'\n}, {\n brand: 'Redmi',\n model: 'M2004J19C'\n}, {\n brand: 'Sharp',\n model: 'Aquos S3'\n}, {\n brand: 'Vivo',\n model: 'V9'\n}, {\n brand: 'Vivo',\n model: 'X21'\n}, {\n brand: 'Vivo',\n model: 'X21 UD'\n}, {\n brand: 'xiaomi',\n model: 'MI 8'\n}, {\n brand: 'xiaomi',\n model: 'MI 8 Explorer Edition'\n}, {\n brand: 'xiaomi',\n model: 'MI 8 SE'\n}, {\n brand: 'xiaomi',\n model: 'MI 8 UD'\n}, {\n brand: 'xiaomi',\n model: 'MI 8 Lite'\n}, {\n brand: 'xiaomi',\n model: 'Mi 9'\n}, {\n brand: 'xiaomi',\n model: 'POCO F1'\n}, {\n brand: 'xiaomi',\n model: 'POCOPHONE F1'\n}, {\n brand: 'xiaomi',\n model: 'Redmi 6 Pro'\n}, {\n brand: 'xiaomi',\n model: 'Redmi Note 7'\n}, {\n brand: 'xiaomi',\n model: 'Redmi 7'\n}, {\n brand: 'xiaomi',\n model: 'Redmi Note 8'\n}, {\n brand: 'xiaomi',\n model: 'Redmi Note 8 Pro'\n}, {\n brand: 'xiaomi',\n model: 'Mi A2 Lite'\n}, {\n brand: 'Blackview',\n model: 'A30'\n}, {\n brand: 'Samsung',\n model: 'SM-A202F'\n}, {\n brand: 'Samsung',\n model: 'SM-A217F'\n}, {\n brand: 'Samsung',\n model: 'SM-A715F'\n}];\nexport default devicesWithNotch;\n//# sourceMappingURL=devicesWithNotch.js.map","import { Platform, NativeModules } from 'react-native';\nlet RNDeviceInfo = NativeModules.RNDeviceInfo; // @ts-ignore\n\nif (Platform.OS === 'web' || Platform.OS === 'dom') {\n RNDeviceInfo = require('../web');\n}\n\nif (!RNDeviceInfo) {\n // Produce an error if we don't have the native module\n if (Platform.OS === 'android' || Platform.OS === 'ios' || Platform.OS === 'web' || // @ts-ignore\n Platform.OS === 'dom') {\n throw new Error(`react-native-device-info: NativeModule.RNDeviceInfo is null. To fix this issue try these steps:\n • For react-native <= 0.59: Run \\`react-native link react-native-device-info\\` in the project root.\n • Rebuild and re-run the app.\n • If you are using CocoaPods on iOS, run \\`pod install\\` in the \\`ios\\` directory and then rebuild and re-run the app. You may also need to re-open Xcode to get the new pods.\n If none of these fix the issue, please open an issue on the Github repository: https://github.com/react-native-device-info/react-native-device-info`);\n }\n}\n\nexport default RNDeviceInfo;\n//# sourceMappingURL=nativeInterface.js.map","import { NativeEventEmitter, NativeModules } from 'react-native';\nconst deviceInfoEmitter = new NativeEventEmitter(NativeModules.RNDeviceInfo);\nlet batteryCharging = false,\n batteryLevel = -1,\n powerState = {};\n\nconst _readPowerState = battery => {\n const {\n level,\n charging,\n chargingtime,\n dischargingtime\n } = battery;\n return {\n batteryLevel: level,\n lowPowerMode: false,\n batteryState: level === 1 ? 'full' : charging ? 'charging' : 'unplugged',\n chargingtime,\n dischargingtime\n };\n};\n\nexport const getMaxMemorySync = () => {\n if (window.performance && window.performance.memory) {\n return window.performance.memory.jsHeapSizeLimit;\n }\n\n return -1;\n};\nexport const getInstallReferrerSync = () => {\n return document.referrer;\n};\nexport const isAirplaneModeSync = () => {\n return !!navigator.onLine;\n};\nexport const getUserAgentSync = () => {\n return window.navigator.userAgent;\n};\nexport const isLocationEnabledSync = () => {\n return !!navigator.geolocation;\n};\nexport const getTotalMemorySync = () => {\n if (navigator.deviceMemory) {\n return navigator.deviceMemory * 1000000000;\n }\n\n return -1;\n};\nexport const getUsedMemorySync = () => {\n if (window.performance && window.performance.memory) {\n return window.performance.memory.usedJSHeapSize;\n }\n\n return -1;\n};\n\nconst init = () => {\n if (typeof navigator === 'undefined' || !navigator.getBattery) return;\n navigator.getBattery().then(battery => {\n batteryCharging = battery.charging;\n battery.addEventListener('chargingchange', () => {\n const {\n charging\n } = battery;\n batteryCharging = charging;\n powerState = _readPowerState(battery);\n deviceInfoEmitter.emit('RNDeviceInfo_powerStateDidChange', powerState);\n });\n battery.addEventListener('levelchange', () => {\n const {\n level\n } = battery;\n batteryLevel = level;\n powerState = _readPowerState(battery);\n deviceInfoEmitter.emit('RNDeviceInfo_batteryLevelDidChange', level);\n\n if (level < 0.2) {\n deviceInfoEmitter.emit('RNDeviceInfo_batteryLevelIsLow', level);\n }\n });\n });\n};\n\nconst getBaseOsSync = () => {\n const userAgent = window.navigator.userAgent,\n platform = window.navigator.platform,\n macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'],\n windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'],\n iosPlatforms = ['iPhone', 'iPad', 'iPod'];\n let os = platform;\n\n if (macosPlatforms.indexOf(platform) !== -1) {\n os = 'Mac OS';\n } else if (iosPlatforms.indexOf(platform) !== -1) {\n os = 'iOS';\n } else if (windowsPlatforms.indexOf(platform) !== -1) {\n os = 'Windows';\n } else if (/Android/.test(userAgent)) {\n os = 'Android';\n } else if (!os && /Linux/.test(platform)) {\n os = 'Linux';\n }\n\n return os;\n};\n\ninit();\n/**\n * react-native-web empty polyfill.\n */\n\nexport const getInstallReferrer = async () => {\n return getInstallReferrerSync();\n};\nexport const getUserAgent = async () => {\n return getUserAgentSync();\n};\nexport const isBatteryCharging = async () => {\n if (navigator.getBattery) {\n return navigator.getBattery().then(battery => battery.charging);\n }\n\n return false;\n};\nexport const isBatteryChargingSync = () => {\n return batteryCharging;\n};\nexport const isCameraPresent = async () => {\n if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n return navigator.mediaDevices.enumerateDevices().then(devices => {\n return !!devices.find(d => d.kind === 'videoinput');\n });\n }\n\n return false;\n};\nexport const isCameraPresentSync = () => {\n console.log('[react-native-device-info] isCameraPresentSync not supported - please use isCameraPresent');\n return false;\n};\nexport const getBatteryLevel = async () => {\n if (navigator.getBattery) {\n return navigator.getBattery().then(battery => battery.level);\n }\n\n return -1;\n};\nexport const getBatteryLevelSync = () => {\n return batteryLevel;\n};\nexport const isLocationEnabled = async () => {\n return isLocationEnabledSync();\n};\nexport const isAirplaneMode = async () => {\n return isAirplaneModeSync();\n};\nexport const getBaseOs = async () => {\n return getBaseOsSync();\n};\nexport const getTotalDiskCapacity = async () => {\n if (navigator.storage && navigator.storage.estimate) {\n return navigator.storage.estimate().then(({\n quota\n }) => quota);\n }\n\n return -1;\n};\nexport const getTotalDiskCapacitySync = () => {\n console.log('[react-native-device-info] getTotalDiskCapacitySync not supported - please use getTotalDiskCapacity');\n return -1;\n};\nexport const getFreeDiskStorage = async () => {\n if (navigator.storage && navigator.storage.estimate) {\n return navigator.storage.estimate().then(({\n quota,\n usage\n }) => quota - usage);\n }\n\n return -1;\n};\nexport const getFreeDiskStorageSync = () => {\n console.log('[react-native-device-info] getFreeDiskStorageSync not supported - please use getFreeDiskStorage');\n return -1;\n};\nexport const getMaxMemory = async () => {\n return getMaxMemorySync();\n};\nexport const getUsedMemory = async () => {\n return getUsedMemorySync();\n};\nexport const getTotalMemory = async () => {\n return getTotalMemorySync();\n};\nexport const getPowerState = async () => {\n if (navigator.getBattery) {\n return navigator.getBattery().then(battery => _readPowerState(battery));\n }\n\n return {};\n};\nexport const getPowerStateSync = () => {\n return powerState;\n};\n//# sourceMappingURL=index.js.map","import { Platform } from 'react-native';\n// centralized memo object\nlet memo = {};\nexport function clearMemo() {\n memo = {};\n}\n/**\n * function returns the proper getter based current platform X supported platforms\n * @param supportedPlatforms array of supported platforms (OS)\n * @param getter desired function used to get info\n * @param defaultGetter getter that returns a default value if desired getter is not supported by current platform\n */\n\nfunction getSupportedFunction(supportedPlatforms, getter, defaultGetter) {\n let supportedMap = {};\n supportedPlatforms.filter(key => Platform.OS == key).forEach(key => supportedMap[key] = getter);\n return Platform.select({ ...supportedMap,\n default: defaultGetter\n });\n}\n/**\n * function used to get desired info synchronously — with optional memoization\n * @param param0\n */\n\n\nexport function getSupportedPlatformInfoSync({\n getter,\n supportedPlatforms,\n defaultValue,\n memoKey\n}) {\n if (memoKey && memo[memoKey] != undefined) {\n return memo[memoKey];\n } else {\n const output = getSupportedFunction(supportedPlatforms, getter, () => defaultValue)();\n\n if (memoKey) {\n memo[memoKey] = output;\n }\n\n return output;\n }\n}\n/**\n * function used to get desired info asynchronously — with optional memoization\n * @param param0\n */\n\nexport async function getSupportedPlatformInfoAsync({\n getter,\n supportedPlatforms,\n defaultValue,\n memoKey\n}) {\n if (memoKey && memo[memoKey] != undefined) {\n return memo[memoKey];\n } else {\n const output = await getSupportedFunction(supportedPlatforms, getter, () => Promise.resolve(defaultValue))();\n\n if (memoKey) {\n memo[memoKey] = output;\n }\n\n return output;\n }\n}\n/**\n * function that returns array of getter functions [async, sync]\n * @param param0\n */\n\nexport function getSupportedPlatformInfoFunctions({\n syncGetter,\n ...asyncParams\n}) {\n return [() => getSupportedPlatformInfoAsync(asyncParams), () => getSupportedPlatformInfoSync({ ...asyncParams,\n getter: syncGetter\n })];\n}\n//# sourceMappingURL=supported-platform-info.js.map","import { UnavailabilityError } from 'expo-modules-core';\nimport ExpoNetwork from './ExpoNetwork';\nimport { NetworkStateType } from './Network.types';\nexport { NetworkStateType };\n// @needsAudit\n/**\n * Gets the device's current network connection state.\n *\n * On web, `navigator.connection.type` is not available on browsers. So if there is an active\n * network connection, the field `type` returns `NetworkStateType.UNKNOWN`. Otherwise, it returns\n * `NetworkStateType.NONE`.\n * @return A `Promise` that fulfils with a `NetworkState` object.\n *\n * @example\n * ```ts\n * await Network.getNetworkStateAsync();\n * // {\n * // type: NetworkStateType.CELLULAR,\n * // isConnected: true,\n * // isInternetReachable: true,\n * // }\n * ```\n */\nexport async function getNetworkStateAsync() {\n if (!ExpoNetwork.getNetworkStateAsync) {\n throw new UnavailabilityError('expo-network', 'getNetworkStateAsync');\n }\n return await ExpoNetwork.getNetworkStateAsync();\n}\n// @needsAudit\n/**\n * Gets the device's current IPv4 address. Returns `0.0.0.0` if the IP address could not be retrieved.\n *\n * On web, this method uses the third-party [`ipify service`](https://www.ipify.org/) to get the\n * public IP address of the current device.\n * @return A `Promise` that fulfils with a `string` of the current IP address of the device's main\n * network interface. Can only be IPv4 address.\n *\n * @example\n * ```ts\n * await Network.getIpAddressAsync();\n * // \"92.168.32.44\"\n * ```\n */\nexport async function getIpAddressAsync() {\n if (!ExpoNetwork.getIpAddressAsync) {\n throw new UnavailabilityError('expo-network', 'getIpAddressAsync');\n }\n return await ExpoNetwork.getIpAddressAsync();\n}\n// @needsAudit\n/**\n * Tells if the device is in airplane mode.\n * @return Returns a `Promise` that fulfils with a `boolean` value for whether the device is in\n * airplane mode or not.\n * @platform android\n *\n * @example\n * ```ts\n * await Network.isAirplaneModeEnabledAsync();\n * // false\n * ```\n */\nexport async function isAirplaneModeEnabledAsync() {\n if (!ExpoNetwork.isAirplaneModeEnabledAsync) {\n throw new UnavailabilityError('expo-network', 'isAirplaneModeEnabledAsync');\n }\n return await ExpoNetwork.isAirplaneModeEnabledAsync();\n}\n//# sourceMappingURL=Network.js.map","import { NetworkStateType } from './Network.types';\nexport default {\n async getIpAddressAsync() {\n try {\n const resp = await fetch('https://api.ipify.org?format=json');\n const data = await resp.json();\n return data.ip;\n }\n catch (e) {\n throw e;\n }\n },\n async getNetworkStateAsync() {\n const isOnline = typeof navigator !== 'undefined' && navigator.onLine;\n return {\n type: isOnline ? NetworkStateType.UNKNOWN : NetworkStateType.NONE,\n isConnected: isOnline,\n isInternetReachable: isOnline,\n };\n },\n};\n//# sourceMappingURL=ExpoNetwork.web.js.map","// @needsAudit\n/**\n * An enum of the different types of devices supported by Expo.\n */\nexport var NetworkStateType;\n(function (NetworkStateType) {\n /**\n * No active network connection detected.\n */\n NetworkStateType[\"NONE\"] = \"NONE\";\n /**\n * The connection type could not be determined.\n */\n NetworkStateType[\"UNKNOWN\"] = \"UNKNOWN\";\n /**\n * Active network connection over mobile data or [`DUN-specific`](https://developer.android.com/reference/android/net/ConnectivityManager#TYPE_MOBILE_DUN)\n * mobile connection when setting an upstream connection for tethering.\n */\n NetworkStateType[\"CELLULAR\"] = \"CELLULAR\";\n /**\n * Active network connection over WiFi.\n */\n NetworkStateType[\"WIFI\"] = \"WIFI\";\n /**\n * Active network connection over Bluetooth.\n */\n NetworkStateType[\"BLUETOOTH\"] = \"BLUETOOTH\";\n /**\n * Active network connection over Ethernet.\n */\n NetworkStateType[\"ETHERNET\"] = \"ETHERNET\";\n /**\n * Active network connection over Wimax.\n */\n NetworkStateType[\"WIMAX\"] = \"WIMAX\";\n /**\n * Active network connection over VPN.\n */\n NetworkStateType[\"VPN\"] = \"VPN\";\n /**\n * Active network connection over other network connection types.\n */\n NetworkStateType[\"OTHER\"] = \"OTHER\";\n})(NetworkStateType || (NetworkStateType = {}));\n//# sourceMappingURL=Network.types.js.map","","","","","","","","","","","","","","","","","","","","","","","","","","","","","import { configureStore } from '@reduxjs/toolkit';\nimport * as AppConstants from './AppConstants';\nimport * as AppUtilities from \"../context/AppUtilities\";\nimport { v4 as uuidv4 } from 'uuid';\n\nlet store = null;\n\n// Try not to use this global state too much\nconst simpleGlobalState = {};\nsimpleGlobalState[AppConstants.SIMPLE_GLOBAL_STATE.DEFAULT_SHOW_DEBUG] = AppConstants.IS_DEVELOPMENT;\n\nfunction updateState(action, payload) {\n store.dispatch(createDispatch(action, payload));\n}\n\nfunction createDispatch(action, payload) {\n return {\n type: action,\n payload: payload,\n };\n}\n\nfunction createStore(savedState) {\n if (!savedState) {\n savedState = {};\n }\n const defaultState = Object.assign({}, AppConstants.DEFAULT_STATE, savedState);\n\n if (AppUtilities.DEBUGLEVEL.state) {\n AppUtilities.debug(\"createStore initial state:\");\n AppUtilities.dir(defaultState);\n }\n\n store = configureStore({\n reducer: (state = defaultState, action) => {\n switch (action.type) {\n case AppConstants.DISPATCH.RESET_STATE:\n return defaultState;\n case AppConstants.DISPATCH.SET_INITIAL_DATA:\n return {\n ...state,\n locations: action.payload.locations,\n locations_online: action.payload.locations_online,\n ads: action.payload.ads,\n };\n case AppConstants.DISPATCH.LIGHT_MODE:\n return {\n ...state,\n lightMode: action.payload,\n };\n case AppConstants.DISPATCH.EXTRA_DEBUG:\n if (action.payload) {\n AppUtilities.setExtraDebug(true);\n }\n return {\n ...state,\n extraDebug: action.payload,\n };\n case AppConstants.DISPATCH.SET_LAST_MAIN_VIEW:\n return {\n ...state,\n lastMainView: action.payload,\n };\n case AppConstants.DISPATCH.SET_DELIVERY_LOCATION_FILTER:\n return {\n ...state,\n deliveryLocationFilter: action.payload,\n };\n case AppConstants.DISPATCH.SET_MAP_CENTER:\n return {\n ...state,\n mapCenter: action.payload,\n };\n case AppConstants.DISPATCH.MOVE_MAP:\n return {\n ...state,\n moveMap: action.payload,\n };\n case AppConstants.DISPATCH.UPDATE_DATA_FILTER:\n action.payload[AppConstants.SYNTHESIZED_TYPES.QUERY_ID[AppConstants.TYPE_KEYS.URL_KEY]] = uuidv4();\n return {\n ...state,\n dataFilter: action.payload,\n shouldAskToMoveToCurrentLocation: false,\n };\n case AppConstants.DISPATCH.UPDATE_LAST_GPS_LOCATION:\n return {\n ...state,\n lastGPSLocation: action.payload,\n };\n default:\n return state;\n }\n },\n middleware: (getDefaultMiddleware) => getDefaultMiddleware({ immutableCheck: false, serializableCheck: false }),\n });\n return store;\n}\n\nfunction setGlobalState(key, value) {\n simpleGlobalState[key] = value;\n}\n\nfunction getGlobalState(key) {\n return simpleGlobalState[key];\n}\n\nfunction getAndSetGlobalState(key, value) {\n const result = getGlobalState(key);\n setGlobalState(key, value);\n return result;\n}\n\nfunction getAllGlobalState() {\n return simpleGlobalState;\n}\n\nasync function checkAndHandleInitialLoad(showTemporarySnack, learnMore) {\n if (AppUtilities.isWeb()) {\n const usedAppBefore = AppUtilities.getLocalData(AppConstants.LOCAL_DATA_KEYS.USED_APP_BEFORE, false);\n if (!usedAppBefore) {\n await AppUtilities.updateLocalData(AppConstants.LOCAL_DATA_KEYS.USED_APP_BEFORE, true);\n /*showTemporarySnack(\n \"Welcome to Find Humane which helps find humanely raised animal products.\\n\\nUse the Map to find local products or the Delivery tab for frozen delivery services.\",\n null, //\"Learn More\",\n null, //learnMore,\n 30000,\n );*/\n }\n }\n}\n\nasync function shouldPopUpSubscribe() {\n const seenSubscribePopup = AppUtilities.getLocalData(AppConstants.LOCAL_DATA_KEYS.SEEN_SUBSCRIBE_POPUP, false);\n if (seenSubscribePopup) {\n return false;\n } else {\n await AppUtilities.updateLocalData(AppConstants.LOCAL_DATA_KEYS.SEEN_SUBSCRIBE_POPUP, true);\n return true;\n }\n}\n\nfunction changeCertificationGroup(currentFilter, newGroup, dispatcher) {\n AppUtilities.info(\"AppState.changeCertificationGroup newGroup: \" + newGroup);\n const newFilter = Object.assign({}, currentFilter);\n delete newFilter[AppConstants.GROUP_TYPES.PASTURE[AppConstants.TYPE_KEYS.URL_KEY]];\n delete newFilter[AppConstants.GROUP_TYPES.OUTDOORS[AppConstants.TYPE_KEYS.URL_KEY]];\n delete newFilter[AppConstants.GROUP_TYPES.INDOORS[AppConstants.TYPE_KEYS.URL_KEY]];\n newFilter[newGroup] = \"y\";\n dispatcher(createDispatch(AppConstants.DISPATCH.UPDATE_DATA_FILTER, newFilter));\n}\n\nexport {\n createStore,\n updateState,\n createDispatch,\n setGlobalState,\n getGlobalState,\n getAndSetGlobalState,\n checkAndHandleInitialLoad,\n getAllGlobalState,\n shouldPopUpSubscribe,\n changeCertificationGroup,\n}\n","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nvar __spreadArray = (this && this.__spreadArray) || function (to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n};\r\nvar __defProp = Object.defineProperty;\r\nvar __defProps = Object.defineProperties;\r\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\r\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\r\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\r\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\r\nvar __defNormalProp = function (obj, key, value) { return key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value: value }) : obj[key] = value; };\r\nvar __spreadValues = function (a, b) {\r\n for (var prop in b || (b = {}))\r\n if (__hasOwnProp.call(b, prop))\r\n __defNormalProp(a, prop, b[prop]);\r\n if (__getOwnPropSymbols)\r\n for (var _i = 0, _c = __getOwnPropSymbols(b); _i < _c.length; _i++) {\r\n var prop = _c[_i];\r\n if (__propIsEnum.call(b, prop))\r\n __defNormalProp(a, prop, b[prop]);\r\n }\r\n return a;\r\n};\r\nvar __spreadProps = function (a, b) { return __defProps(a, __getOwnPropDescs(b)); };\r\nvar __async = function (__this, __arguments, generator) {\r\n return new Promise(function (resolve, reject) {\r\n var fulfilled = function (value) {\r\n try {\r\n step(generator.next(value));\r\n }\r\n catch (e) {\r\n reject(e);\r\n }\r\n };\r\n var rejected = function (value) {\r\n try {\r\n step(generator.throw(value));\r\n }\r\n catch (e) {\r\n reject(e);\r\n }\r\n };\r\n var step = function (x) { return x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); };\r\n step((generator = generator.apply(__this, __arguments)).next());\r\n });\r\n};\r\n// src/index.ts\r\nimport { enableES5 } from \"immer\";\r\nexport * from \"redux\";\r\nimport { default as default2, current as current2, freeze, original, isDraft as isDraft4 } from \"immer\";\r\nimport { createSelector as createSelector2 } from \"reselect\";\r\n// src/createDraftSafeSelector.ts\r\nimport { current, isDraft } from \"immer\";\r\nimport { createSelector } from \"reselect\";\r\nvar createDraftSafeSelector = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var selector = createSelector.apply(void 0, args);\r\n var wrappedSelector = function (value) {\r\n var rest = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n rest[_i - 1] = arguments[_i];\r\n }\r\n return selector.apply(void 0, __spreadArray([isDraft(value) ? current(value) : value], rest));\r\n };\r\n return wrappedSelector;\r\n};\r\n// src/configureStore.ts\r\nimport { createStore, compose as compose2, applyMiddleware, combineReducers } from \"redux\";\r\n// src/devtoolsExtension.ts\r\nimport { compose } from \"redux\";\r\nvar composeWithDevTools = typeof window !== \"undefined\" && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : function () {\r\n if (arguments.length === 0)\r\n return void 0;\r\n if (typeof arguments[0] === \"object\")\r\n return compose;\r\n return compose.apply(null, arguments);\r\n};\r\nvar devToolsEnhancer = typeof window !== \"undefined\" && window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__ : function () {\r\n return function (noop2) {\r\n return noop2;\r\n };\r\n};\r\n// src/isPlainObject.ts\r\nfunction isPlainObject(value) {\r\n if (typeof value !== \"object\" || value === null)\r\n return false;\r\n var proto = Object.getPrototypeOf(value);\r\n if (proto === null)\r\n return true;\r\n var baseProto = proto;\r\n while (Object.getPrototypeOf(baseProto) !== null) {\r\n baseProto = Object.getPrototypeOf(baseProto);\r\n }\r\n return proto === baseProto;\r\n}\r\n// src/getDefaultMiddleware.ts\r\nimport thunkMiddleware from \"redux-thunk\";\r\n// src/tsHelpers.ts\r\nvar hasMatchFunction = function (v) {\r\n return v && typeof v.match === \"function\";\r\n};\r\n// src/createAction.ts\r\nfunction createAction(type, prepareAction) {\r\n function actionCreator() {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n if (prepareAction) {\r\n var prepared = prepareAction.apply(void 0, args);\r\n if (!prepared) {\r\n throw new Error(\"prepareAction did not return an object\");\r\n }\r\n return __spreadValues(__spreadValues({\r\n type: type,\r\n payload: prepared.payload\r\n }, \"meta\" in prepared && { meta: prepared.meta }), \"error\" in prepared && { error: prepared.error });\r\n }\r\n return { type: type, payload: args[0] };\r\n }\r\n actionCreator.toString = function () { return \"\" + type; };\r\n actionCreator.type = type;\r\n actionCreator.match = function (action) { return action.type === type; };\r\n return actionCreator;\r\n}\r\nfunction isAction(action) {\r\n return isPlainObject(action) && \"type\" in action;\r\n}\r\nfunction isActionCreator(action) {\r\n return typeof action === \"function\" && \"type\" in action && hasMatchFunction(action);\r\n}\r\nfunction isFSA(action) {\r\n return isAction(action) && typeof action.type === \"string\" && Object.keys(action).every(isValidKey);\r\n}\r\nfunction isValidKey(key) {\r\n return [\"type\", \"payload\", \"error\", \"meta\"].indexOf(key) > -1;\r\n}\r\nfunction getType(actionCreator) {\r\n return \"\" + actionCreator;\r\n}\r\n// src/actionCreatorInvariantMiddleware.ts\r\nfunction getMessage(type) {\r\n var splitType = type ? (\"\" + type).split(\"/\") : [];\r\n var actionName = splitType[splitType.length - 1] || \"actionCreator\";\r\n return \"Detected an action creator with type \\\"\" + (type || \"unknown\") + \"\\\" being dispatched. \\nMake sure you're calling the action creator before dispatching, i.e. `dispatch(\" + actionName + \"())` instead of `dispatch(\" + actionName + \")`. This is necessary even if the action has no payload.\";\r\n}\r\nfunction createActionCreatorInvariantMiddleware(options) {\r\n if (options === void 0) { options = {}; }\r\n if (process.env.NODE_ENV === \"production\") {\r\n return function () { return function (next) { return function (action) { return next(action); }; }; };\r\n }\r\n var _c = options.isActionCreator, isActionCreator2 = _c === void 0 ? isActionCreator : _c;\r\n return function () { return function (next) { return function (action) {\r\n if (isActionCreator2(action)) {\r\n console.warn(getMessage(action.type));\r\n }\r\n return next(action);\r\n }; }; };\r\n}\r\n// src/utils.ts\r\nimport createNextState, { isDraftable } from \"immer\";\r\nfunction getTimeMeasureUtils(maxDelay, fnName) {\r\n var elapsed = 0;\r\n return {\r\n measureTime: function (fn) {\r\n var started = Date.now();\r\n try {\r\n return fn();\r\n }\r\n finally {\r\n var finished = Date.now();\r\n elapsed += finished - started;\r\n }\r\n },\r\n warnIfExceeded: function () {\r\n if (elapsed > maxDelay) {\r\n console.warn(fnName + \" took \" + elapsed + \"ms, which is more than the warning threshold of \" + maxDelay + \"ms. \\nIf your state or actions are very large, you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.\\nIt is disabled in production builds, so you don't need to worry about that.\");\r\n }\r\n }\r\n };\r\n}\r\nvar MiddlewareArray = /** @class */ (function (_super) {\r\n __extends(MiddlewareArray, _super);\r\n function MiddlewareArray() {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var _this = _super.apply(this, args) || this;\r\n Object.setPrototypeOf(_this, MiddlewareArray.prototype);\r\n return _this;\r\n }\r\n Object.defineProperty(MiddlewareArray, Symbol.species, {\r\n get: function () {\r\n return MiddlewareArray;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n MiddlewareArray.prototype.concat = function () {\r\n var arr = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n arr[_i] = arguments[_i];\r\n }\r\n return _super.prototype.concat.apply(this, arr);\r\n };\r\n MiddlewareArray.prototype.prepend = function () {\r\n var arr = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n arr[_i] = arguments[_i];\r\n }\r\n if (arr.length === 1 && Array.isArray(arr[0])) {\r\n return new (MiddlewareArray.bind.apply(MiddlewareArray, __spreadArray([void 0], arr[0].concat(this))))();\r\n }\r\n return new (MiddlewareArray.bind.apply(MiddlewareArray, __spreadArray([void 0], arr.concat(this))))();\r\n };\r\n return MiddlewareArray;\r\n}(Array));\r\nvar EnhancerArray = /** @class */ (function (_super) {\r\n __extends(EnhancerArray, _super);\r\n function EnhancerArray() {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var _this = _super.apply(this, args) || this;\r\n Object.setPrototypeOf(_this, EnhancerArray.prototype);\r\n return _this;\r\n }\r\n Object.defineProperty(EnhancerArray, Symbol.species, {\r\n get: function () {\r\n return EnhancerArray;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n EnhancerArray.prototype.concat = function () {\r\n var arr = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n arr[_i] = arguments[_i];\r\n }\r\n return _super.prototype.concat.apply(this, arr);\r\n };\r\n EnhancerArray.prototype.prepend = function () {\r\n var arr = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n arr[_i] = arguments[_i];\r\n }\r\n if (arr.length === 1 && Array.isArray(arr[0])) {\r\n return new (EnhancerArray.bind.apply(EnhancerArray, __spreadArray([void 0], arr[0].concat(this))))();\r\n }\r\n return new (EnhancerArray.bind.apply(EnhancerArray, __spreadArray([void 0], arr.concat(this))))();\r\n };\r\n return EnhancerArray;\r\n}(Array));\r\nfunction freezeDraftable(val) {\r\n return isDraftable(val) ? createNextState(val, function () {\r\n }) : val;\r\n}\r\n// src/immutableStateInvariantMiddleware.ts\r\nvar isProduction = process.env.NODE_ENV === \"production\";\r\nvar prefix = \"Invariant failed\";\r\nfunction invariant(condition, message) {\r\n if (condition) {\r\n return;\r\n }\r\n if (isProduction) {\r\n throw new Error(prefix);\r\n }\r\n throw new Error(prefix + \": \" + (message || \"\"));\r\n}\r\nfunction stringify(obj, serializer, indent, decycler) {\r\n return JSON.stringify(obj, getSerialize(serializer, decycler), indent);\r\n}\r\nfunction getSerialize(serializer, decycler) {\r\n var stack = [], keys = [];\r\n if (!decycler)\r\n decycler = function (_, value) {\r\n if (stack[0] === value)\r\n return \"[Circular ~]\";\r\n return \"[Circular ~.\" + keys.slice(0, stack.indexOf(value)).join(\".\") + \"]\";\r\n };\r\n return function (key, value) {\r\n if (stack.length > 0) {\r\n var thisPos = stack.indexOf(this);\r\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\r\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\r\n if (~stack.indexOf(value))\r\n value = decycler.call(this, key, value);\r\n }\r\n else\r\n stack.push(value);\r\n return serializer == null ? value : serializer.call(this, key, value);\r\n };\r\n}\r\nfunction isImmutableDefault(value) {\r\n return typeof value !== \"object\" || value == null || Object.isFrozen(value);\r\n}\r\nfunction trackForMutations(isImmutable, ignorePaths, obj) {\r\n var trackedProperties = trackProperties(isImmutable, ignorePaths, obj);\r\n return {\r\n detectMutations: function () {\r\n return detectMutations(isImmutable, ignorePaths, trackedProperties, obj);\r\n }\r\n };\r\n}\r\nfunction trackProperties(isImmutable, ignorePaths, obj, path, checkedObjects) {\r\n if (ignorePaths === void 0) { ignorePaths = []; }\r\n if (path === void 0) { path = \"\"; }\r\n if (checkedObjects === void 0) { checkedObjects = new Set(); }\r\n var tracked = { value: obj };\r\n if (!isImmutable(obj) && !checkedObjects.has(obj)) {\r\n checkedObjects.add(obj);\r\n tracked.children = {};\r\n for (var key in obj) {\r\n var childPath = path ? path + \".\" + key : key;\r\n if (ignorePaths.length && ignorePaths.indexOf(childPath) !== -1) {\r\n continue;\r\n }\r\n tracked.children[key] = trackProperties(isImmutable, ignorePaths, obj[key], childPath);\r\n }\r\n }\r\n return tracked;\r\n}\r\nfunction detectMutations(isImmutable, ignoredPaths, trackedProperty, obj, sameParentRef, path) {\r\n if (ignoredPaths === void 0) { ignoredPaths = []; }\r\n if (sameParentRef === void 0) { sameParentRef = false; }\r\n if (path === void 0) { path = \"\"; }\r\n var prevObj = trackedProperty ? trackedProperty.value : void 0;\r\n var sameRef = prevObj === obj;\r\n if (sameParentRef && !sameRef && !Number.isNaN(obj)) {\r\n return { wasMutated: true, path: path };\r\n }\r\n if (isImmutable(prevObj) || isImmutable(obj)) {\r\n return { wasMutated: false };\r\n }\r\n var keysToDetect = {};\r\n for (var key in trackedProperty.children) {\r\n keysToDetect[key] = true;\r\n }\r\n for (var key in obj) {\r\n keysToDetect[key] = true;\r\n }\r\n var hasIgnoredPaths = ignoredPaths.length > 0;\r\n var _loop_1 = function (key) {\r\n var nestedPath = path ? path + \".\" + key : key;\r\n if (hasIgnoredPaths) {\r\n var hasMatches = ignoredPaths.some(function (ignored) {\r\n if (ignored instanceof RegExp) {\r\n return ignored.test(nestedPath);\r\n }\r\n return nestedPath === ignored;\r\n });\r\n if (hasMatches) {\r\n return \"continue\";\r\n }\r\n }\r\n var result = detectMutations(isImmutable, ignoredPaths, trackedProperty.children[key], obj[key], sameRef, nestedPath);\r\n if (result.wasMutated) {\r\n return { value: result };\r\n }\r\n };\r\n for (var key in keysToDetect) {\r\n var state_1 = _loop_1(key);\r\n if (typeof state_1 === \"object\")\r\n return state_1.value;\r\n }\r\n return { wasMutated: false };\r\n}\r\nfunction createImmutableStateInvariantMiddleware(options) {\r\n if (options === void 0) { options = {}; }\r\n if (process.env.NODE_ENV === \"production\") {\r\n return function () { return function (next) { return function (action) { return next(action); }; }; };\r\n }\r\n var _c = options.isImmutable, isImmutable = _c === void 0 ? isImmutableDefault : _c, ignoredPaths = options.ignoredPaths, _d = options.warnAfter, warnAfter = _d === void 0 ? 32 : _d, ignore = options.ignore;\r\n ignoredPaths = ignoredPaths || ignore;\r\n var track = trackForMutations.bind(null, isImmutable, ignoredPaths);\r\n return function (_c) {\r\n var getState = _c.getState;\r\n var state = getState();\r\n var tracker = track(state);\r\n var result;\r\n return function (next) { return function (action) {\r\n var measureUtils = getTimeMeasureUtils(warnAfter, \"ImmutableStateInvariantMiddleware\");\r\n measureUtils.measureTime(function () {\r\n state = getState();\r\n result = tracker.detectMutations();\r\n tracker = track(state);\r\n invariant(!result.wasMutated, \"A state mutation was detected between dispatches, in the path '\" + (result.path || \"\") + \"'. This may cause incorrect behavior. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)\");\r\n });\r\n var dispatchedAction = next(action);\r\n measureUtils.measureTime(function () {\r\n state = getState();\r\n result = tracker.detectMutations();\r\n tracker = track(state);\r\n result.wasMutated && invariant(!result.wasMutated, \"A state mutation was detected inside a dispatch, in the path: \" + (result.path || \"\") + \". Take a look at the reducer(s) handling the action \" + stringify(action) + \". (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)\");\r\n });\r\n measureUtils.warnIfExceeded();\r\n return dispatchedAction;\r\n }; };\r\n };\r\n}\r\n// src/serializableStateInvariantMiddleware.ts\r\nfunction isPlain(val) {\r\n var type = typeof val;\r\n return val == null || type === \"string\" || type === \"boolean\" || type === \"number\" || Array.isArray(val) || isPlainObject(val);\r\n}\r\nfunction findNonSerializableValue(value, path, isSerializable, getEntries, ignoredPaths, cache) {\r\n if (path === void 0) { path = \"\"; }\r\n if (isSerializable === void 0) { isSerializable = isPlain; }\r\n if (ignoredPaths === void 0) { ignoredPaths = []; }\r\n var foundNestedSerializable;\r\n if (!isSerializable(value)) {\r\n return {\r\n keyPath: path || \"\",\r\n value: value\r\n };\r\n }\r\n if (typeof value !== \"object\" || value === null) {\r\n return false;\r\n }\r\n if (cache == null ? void 0 : cache.has(value))\r\n return false;\r\n var entries = getEntries != null ? getEntries(value) : Object.entries(value);\r\n var hasIgnoredPaths = ignoredPaths.length > 0;\r\n var _loop_2 = function (key, nestedValue) {\r\n var nestedPath = path ? path + \".\" + key : key;\r\n if (hasIgnoredPaths) {\r\n var hasMatches = ignoredPaths.some(function (ignored) {\r\n if (ignored instanceof RegExp) {\r\n return ignored.test(nestedPath);\r\n }\r\n return nestedPath === ignored;\r\n });\r\n if (hasMatches) {\r\n return \"continue\";\r\n }\r\n }\r\n if (!isSerializable(nestedValue)) {\r\n return { value: {\r\n keyPath: nestedPath,\r\n value: nestedValue\r\n } };\r\n }\r\n if (typeof nestedValue === \"object\") {\r\n foundNestedSerializable = findNonSerializableValue(nestedValue, nestedPath, isSerializable, getEntries, ignoredPaths, cache);\r\n if (foundNestedSerializable) {\r\n return { value: foundNestedSerializable };\r\n }\r\n }\r\n };\r\n for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\r\n var _c = entries_1[_i], key = _c[0], nestedValue = _c[1];\r\n var state_2 = _loop_2(key, nestedValue);\r\n if (typeof state_2 === \"object\")\r\n return state_2.value;\r\n }\r\n if (cache && isNestedFrozen(value))\r\n cache.add(value);\r\n return false;\r\n}\r\nfunction isNestedFrozen(value) {\r\n if (!Object.isFrozen(value))\r\n return false;\r\n for (var _i = 0, _c = Object.values(value); _i < _c.length; _i++) {\r\n var nestedValue = _c[_i];\r\n if (typeof nestedValue !== \"object\" || nestedValue === null)\r\n continue;\r\n if (!isNestedFrozen(nestedValue))\r\n return false;\r\n }\r\n return true;\r\n}\r\nfunction createSerializableStateInvariantMiddleware(options) {\r\n if (options === void 0) { options = {}; }\r\n if (process.env.NODE_ENV === \"production\") {\r\n return function () { return function (next) { return function (action) { return next(action); }; }; };\r\n }\r\n var _c = options.isSerializable, isSerializable = _c === void 0 ? isPlain : _c, getEntries = options.getEntries, _d = options.ignoredActions, ignoredActions = _d === void 0 ? [] : _d, _e = options.ignoredActionPaths, ignoredActionPaths = _e === void 0 ? [\"meta.arg\", \"meta.baseQueryMeta\"] : _e, _f = options.ignoredPaths, ignoredPaths = _f === void 0 ? [] : _f, _g = options.warnAfter, warnAfter = _g === void 0 ? 32 : _g, _h = options.ignoreState, ignoreState = _h === void 0 ? false : _h, _j = options.ignoreActions, ignoreActions = _j === void 0 ? false : _j, _k = options.disableCache, disableCache = _k === void 0 ? false : _k;\r\n var cache = !disableCache && WeakSet ? new WeakSet() : void 0;\r\n return function (storeAPI) { return function (next) { return function (action) {\r\n var result = next(action);\r\n var measureUtils = getTimeMeasureUtils(warnAfter, \"SerializableStateInvariantMiddleware\");\r\n if (!ignoreActions && !(ignoredActions.length && ignoredActions.indexOf(action.type) !== -1)) {\r\n measureUtils.measureTime(function () {\r\n var foundActionNonSerializableValue = findNonSerializableValue(action, \"\", isSerializable, getEntries, ignoredActionPaths, cache);\r\n if (foundActionNonSerializableValue) {\r\n var keyPath = foundActionNonSerializableValue.keyPath, value = foundActionNonSerializableValue.value;\r\n console.error(\"A non-serializable value was detected in an action, in the path: `\" + keyPath + \"`. Value:\", value, \"\\nTake a look at the logic that dispatched this action: \", action, \"\\n(See https://redux.js.org/faq/actions#why-should-type-be-a-string-or-at-least-serializable-why-should-my-action-types-be-constants)\", \"\\n(To allow non-serializable values see: https://redux-toolkit.js.org/usage/usage-guide#working-with-non-serializable-data)\");\r\n }\r\n });\r\n }\r\n if (!ignoreState) {\r\n measureUtils.measureTime(function () {\r\n var state = storeAPI.getState();\r\n var foundStateNonSerializableValue = findNonSerializableValue(state, \"\", isSerializable, getEntries, ignoredPaths, cache);\r\n if (foundStateNonSerializableValue) {\r\n var keyPath = foundStateNonSerializableValue.keyPath, value = foundStateNonSerializableValue.value;\r\n console.error(\"A non-serializable value was detected in the state, in the path: `\" + keyPath + \"`. Value:\", value, \"\\nTake a look at the reducer(s) handling this action type: \" + action.type + \".\\n(See https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state)\");\r\n }\r\n });\r\n measureUtils.warnIfExceeded();\r\n }\r\n return result;\r\n }; }; };\r\n}\r\n// src/getDefaultMiddleware.ts\r\nfunction isBoolean(x) {\r\n return typeof x === \"boolean\";\r\n}\r\nfunction curryGetDefaultMiddleware() {\r\n return function curriedGetDefaultMiddleware(options) {\r\n return getDefaultMiddleware(options);\r\n };\r\n}\r\nfunction getDefaultMiddleware(options) {\r\n if (options === void 0) { options = {}; }\r\n var _c = options.thunk, thunk = _c === void 0 ? true : _c, _d = options.immutableCheck, immutableCheck = _d === void 0 ? true : _d, _e = options.serializableCheck, serializableCheck = _e === void 0 ? true : _e, _f = options.actionCreatorCheck, actionCreatorCheck = _f === void 0 ? true : _f;\r\n var middlewareArray = new MiddlewareArray();\r\n if (thunk) {\r\n if (isBoolean(thunk)) {\r\n middlewareArray.push(thunkMiddleware);\r\n }\r\n else {\r\n middlewareArray.push(thunkMiddleware.withExtraArgument(thunk.extraArgument));\r\n }\r\n }\r\n if (process.env.NODE_ENV !== \"production\") {\r\n if (immutableCheck) {\r\n var immutableOptions = {};\r\n if (!isBoolean(immutableCheck)) {\r\n immutableOptions = immutableCheck;\r\n }\r\n middlewareArray.unshift(createImmutableStateInvariantMiddleware(immutableOptions));\r\n }\r\n if (serializableCheck) {\r\n var serializableOptions = {};\r\n if (!isBoolean(serializableCheck)) {\r\n serializableOptions = serializableCheck;\r\n }\r\n middlewareArray.push(createSerializableStateInvariantMiddleware(serializableOptions));\r\n }\r\n if (actionCreatorCheck) {\r\n var actionCreatorOptions = {};\r\n if (!isBoolean(actionCreatorCheck)) {\r\n actionCreatorOptions = actionCreatorCheck;\r\n }\r\n middlewareArray.unshift(createActionCreatorInvariantMiddleware(actionCreatorOptions));\r\n }\r\n }\r\n return middlewareArray;\r\n}\r\n// src/configureStore.ts\r\nvar IS_PRODUCTION = process.env.NODE_ENV === \"production\";\r\nfunction configureStore(options) {\r\n var curriedGetDefaultMiddleware = curryGetDefaultMiddleware();\r\n var _c = options || {}, _d = _c.reducer, reducer = _d === void 0 ? void 0 : _d, _e = _c.middleware, middleware = _e === void 0 ? curriedGetDefaultMiddleware() : _e, _f = _c.devTools, devTools = _f === void 0 ? true : _f, _g = _c.preloadedState, preloadedState = _g === void 0 ? void 0 : _g, _h = _c.enhancers, enhancers = _h === void 0 ? void 0 : _h;\r\n var rootReducer;\r\n if (typeof reducer === \"function\") {\r\n rootReducer = reducer;\r\n }\r\n else if (isPlainObject(reducer)) {\r\n rootReducer = combineReducers(reducer);\r\n }\r\n else {\r\n throw new Error('\"reducer\" is a required argument, and must be a function or an object of functions that can be passed to combineReducers');\r\n }\r\n var finalMiddleware = middleware;\r\n if (typeof finalMiddleware === \"function\") {\r\n finalMiddleware = finalMiddleware(curriedGetDefaultMiddleware);\r\n if (!IS_PRODUCTION && !Array.isArray(finalMiddleware)) {\r\n throw new Error(\"when using a middleware builder function, an array of middleware must be returned\");\r\n }\r\n }\r\n if (!IS_PRODUCTION && finalMiddleware.some(function (item) { return typeof item !== \"function\"; })) {\r\n throw new Error(\"each middleware provided to configureStore must be a function\");\r\n }\r\n var middlewareEnhancer = applyMiddleware.apply(void 0, finalMiddleware);\r\n var finalCompose = compose2;\r\n if (devTools) {\r\n finalCompose = composeWithDevTools(__spreadValues({\r\n trace: !IS_PRODUCTION\r\n }, typeof devTools === \"object\" && devTools));\r\n }\r\n var defaultEnhancers = new EnhancerArray(middlewareEnhancer);\r\n var storeEnhancers = defaultEnhancers;\r\n if (Array.isArray(enhancers)) {\r\n storeEnhancers = __spreadArray([middlewareEnhancer], enhancers);\r\n }\r\n else if (typeof enhancers === \"function\") {\r\n storeEnhancers = enhancers(defaultEnhancers);\r\n }\r\n var composedEnhancer = finalCompose.apply(void 0, storeEnhancers);\r\n return createStore(rootReducer, preloadedState, composedEnhancer);\r\n}\r\n// src/createReducer.ts\r\nimport createNextState2, { isDraft as isDraft2, isDraftable as isDraftable2 } from \"immer\";\r\n// src/mapBuilders.ts\r\nfunction executeReducerBuilderCallback(builderCallback) {\r\n var actionsMap = {};\r\n var actionMatchers = [];\r\n var defaultCaseReducer;\r\n var builder = {\r\n addCase: function (typeOrActionCreator, reducer) {\r\n if (process.env.NODE_ENV !== \"production\") {\r\n if (actionMatchers.length > 0) {\r\n throw new Error(\"`builder.addCase` should only be called before calling `builder.addMatcher`\");\r\n }\r\n if (defaultCaseReducer) {\r\n throw new Error(\"`builder.addCase` should only be called before calling `builder.addDefaultCase`\");\r\n }\r\n }\r\n var type = typeof typeOrActionCreator === \"string\" ? typeOrActionCreator : typeOrActionCreator.type;\r\n if (!type) {\r\n throw new Error(\"`builder.addCase` cannot be called with an empty action type\");\r\n }\r\n if (type in actionsMap) {\r\n throw new Error(\"`builder.addCase` cannot be called with two reducers for the same action type\");\r\n }\r\n actionsMap[type] = reducer;\r\n return builder;\r\n },\r\n addMatcher: function (matcher, reducer) {\r\n if (process.env.NODE_ENV !== \"production\") {\r\n if (defaultCaseReducer) {\r\n throw new Error(\"`builder.addMatcher` should only be called before calling `builder.addDefaultCase`\");\r\n }\r\n }\r\n actionMatchers.push({ matcher: matcher, reducer: reducer });\r\n return builder;\r\n },\r\n addDefaultCase: function (reducer) {\r\n if (process.env.NODE_ENV !== \"production\") {\r\n if (defaultCaseReducer) {\r\n throw new Error(\"`builder.addDefaultCase` can only be called once\");\r\n }\r\n }\r\n defaultCaseReducer = reducer;\r\n return builder;\r\n }\r\n };\r\n builderCallback(builder);\r\n return [actionsMap, actionMatchers, defaultCaseReducer];\r\n}\r\n// src/createReducer.ts\r\nfunction isStateFunction(x) {\r\n return typeof x === \"function\";\r\n}\r\nvar hasWarnedAboutObjectNotation = false;\r\nfunction createReducer(initialState, mapOrBuilderCallback, actionMatchers, defaultCaseReducer) {\r\n if (actionMatchers === void 0) { actionMatchers = []; }\r\n if (process.env.NODE_ENV !== \"production\") {\r\n if (typeof mapOrBuilderCallback === \"object\") {\r\n if (!hasWarnedAboutObjectNotation) {\r\n hasWarnedAboutObjectNotation = true;\r\n console.warn(\"The object notation for `createReducer` is deprecated, and will be removed in RTK 2.0. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createReducer\");\r\n }\r\n }\r\n }\r\n var _c = typeof mapOrBuilderCallback === \"function\" ? executeReducerBuilderCallback(mapOrBuilderCallback) : [mapOrBuilderCallback, actionMatchers, defaultCaseReducer], actionsMap = _c[0], finalActionMatchers = _c[1], finalDefaultCaseReducer = _c[2];\r\n var getInitialState;\r\n if (isStateFunction(initialState)) {\r\n getInitialState = function () { return freezeDraftable(initialState()); };\r\n }\r\n else {\r\n var frozenInitialState_1 = freezeDraftable(initialState);\r\n getInitialState = function () { return frozenInitialState_1; };\r\n }\r\n function reducer(state, action) {\r\n if (state === void 0) { state = getInitialState(); }\r\n var caseReducers = __spreadArray([\r\n actionsMap[action.type]\r\n ], finalActionMatchers.filter(function (_c) {\r\n var matcher = _c.matcher;\r\n return matcher(action);\r\n }).map(function (_c) {\r\n var reducer2 = _c.reducer;\r\n return reducer2;\r\n }));\r\n if (caseReducers.filter(function (cr) { return !!cr; }).length === 0) {\r\n caseReducers = [finalDefaultCaseReducer];\r\n }\r\n return caseReducers.reduce(function (previousState, caseReducer) {\r\n if (caseReducer) {\r\n if (isDraft2(previousState)) {\r\n var draft = previousState;\r\n var result = caseReducer(draft, action);\r\n if (result === void 0) {\r\n return previousState;\r\n }\r\n return result;\r\n }\r\n else if (!isDraftable2(previousState)) {\r\n var result = caseReducer(previousState, action);\r\n if (result === void 0) {\r\n if (previousState === null) {\r\n return previousState;\r\n }\r\n throw Error(\"A case reducer on a non-draftable value must not return undefined\");\r\n }\r\n return result;\r\n }\r\n else {\r\n return createNextState2(previousState, function (draft) {\r\n return caseReducer(draft, action);\r\n });\r\n }\r\n }\r\n return previousState;\r\n }, state);\r\n }\r\n reducer.getInitialState = getInitialState;\r\n return reducer;\r\n}\r\n// src/createSlice.ts\r\nvar hasWarnedAboutObjectNotation2 = false;\r\nfunction getType2(slice, actionKey) {\r\n return slice + \"/\" + actionKey;\r\n}\r\nfunction createSlice(options) {\r\n var name = options.name;\r\n if (!name) {\r\n throw new Error(\"`name` is a required option for createSlice\");\r\n }\r\n if (typeof process !== \"undefined\" && process.env.NODE_ENV === \"development\") {\r\n if (options.initialState === void 0) {\r\n console.error(\"You must provide an `initialState` value that is not `undefined`. You may have misspelled `initialState`\");\r\n }\r\n }\r\n var initialState = typeof options.initialState == \"function\" ? options.initialState : freezeDraftable(options.initialState);\r\n var reducers = options.reducers || {};\r\n var reducerNames = Object.keys(reducers);\r\n var sliceCaseReducersByName = {};\r\n var sliceCaseReducersByType = {};\r\n var actionCreators = {};\r\n reducerNames.forEach(function (reducerName) {\r\n var maybeReducerWithPrepare = reducers[reducerName];\r\n var type = getType2(name, reducerName);\r\n var caseReducer;\r\n var prepareCallback;\r\n if (\"reducer\" in maybeReducerWithPrepare) {\r\n caseReducer = maybeReducerWithPrepare.reducer;\r\n prepareCallback = maybeReducerWithPrepare.prepare;\r\n }\r\n else {\r\n caseReducer = maybeReducerWithPrepare;\r\n }\r\n sliceCaseReducersByName[reducerName] = caseReducer;\r\n sliceCaseReducersByType[type] = caseReducer;\r\n actionCreators[reducerName] = prepareCallback ? createAction(type, prepareCallback) : createAction(type);\r\n });\r\n function buildReducer() {\r\n if (process.env.NODE_ENV !== \"production\") {\r\n if (typeof options.extraReducers === \"object\") {\r\n if (!hasWarnedAboutObjectNotation2) {\r\n hasWarnedAboutObjectNotation2 = true;\r\n console.warn(\"The object notation for `createSlice.extraReducers` is deprecated, and will be removed in RTK 2.0. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createSlice\");\r\n }\r\n }\r\n }\r\n var _c = typeof options.extraReducers === \"function\" ? executeReducerBuilderCallback(options.extraReducers) : [options.extraReducers], _d = _c[0], extraReducers = _d === void 0 ? {} : _d, _e = _c[1], actionMatchers = _e === void 0 ? [] : _e, _f = _c[2], defaultCaseReducer = _f === void 0 ? void 0 : _f;\r\n var finalCaseReducers = __spreadValues(__spreadValues({}, extraReducers), sliceCaseReducersByType);\r\n return createReducer(initialState, function (builder) {\r\n for (var key in finalCaseReducers) {\r\n builder.addCase(key, finalCaseReducers[key]);\r\n }\r\n for (var _i = 0, actionMatchers_1 = actionMatchers; _i < actionMatchers_1.length; _i++) {\r\n var m = actionMatchers_1[_i];\r\n builder.addMatcher(m.matcher, m.reducer);\r\n }\r\n if (defaultCaseReducer) {\r\n builder.addDefaultCase(defaultCaseReducer);\r\n }\r\n });\r\n }\r\n var _reducer;\r\n return {\r\n name: name,\r\n reducer: function (state, action) {\r\n if (!_reducer)\r\n _reducer = buildReducer();\r\n return _reducer(state, action);\r\n },\r\n actions: actionCreators,\r\n caseReducers: sliceCaseReducersByName,\r\n getInitialState: function () {\r\n if (!_reducer)\r\n _reducer = buildReducer();\r\n return _reducer.getInitialState();\r\n }\r\n };\r\n}\r\n// src/entities/entity_state.ts\r\nfunction getInitialEntityState() {\r\n return {\r\n ids: [],\r\n entities: {}\r\n };\r\n}\r\nfunction createInitialStateFactory() {\r\n function getInitialState(additionalState) {\r\n if (additionalState === void 0) { additionalState = {}; }\r\n return Object.assign(getInitialEntityState(), additionalState);\r\n }\r\n return { getInitialState: getInitialState };\r\n}\r\n// src/entities/state_selectors.ts\r\nfunction createSelectorsFactory() {\r\n function getSelectors(selectState) {\r\n var selectIds = function (state) { return state.ids; };\r\n var selectEntities = function (state) { return state.entities; };\r\n var selectAll = createDraftSafeSelector(selectIds, selectEntities, function (ids, entities) { return ids.map(function (id) { return entities[id]; }); });\r\n var selectId = function (_, id) { return id; };\r\n var selectById = function (entities, id) { return entities[id]; };\r\n var selectTotal = createDraftSafeSelector(selectIds, function (ids) { return ids.length; });\r\n if (!selectState) {\r\n return {\r\n selectIds: selectIds,\r\n selectEntities: selectEntities,\r\n selectAll: selectAll,\r\n selectTotal: selectTotal,\r\n selectById: createDraftSafeSelector(selectEntities, selectId, selectById)\r\n };\r\n }\r\n var selectGlobalizedEntities = createDraftSafeSelector(selectState, selectEntities);\r\n return {\r\n selectIds: createDraftSafeSelector(selectState, selectIds),\r\n selectEntities: selectGlobalizedEntities,\r\n selectAll: createDraftSafeSelector(selectState, selectAll),\r\n selectTotal: createDraftSafeSelector(selectState, selectTotal),\r\n selectById: createDraftSafeSelector(selectGlobalizedEntities, selectId, selectById)\r\n };\r\n }\r\n return { getSelectors: getSelectors };\r\n}\r\n// src/entities/state_adapter.ts\r\nimport createNextState3, { isDraft as isDraft3 } from \"immer\";\r\nfunction createSingleArgumentStateOperator(mutator) {\r\n var operator = createStateOperator(function (_, state) { return mutator(state); });\r\n return function operation(state) {\r\n return operator(state, void 0);\r\n };\r\n}\r\nfunction createStateOperator(mutator) {\r\n return function operation(state, arg) {\r\n function isPayloadActionArgument(arg2) {\r\n return isFSA(arg2);\r\n }\r\n var runMutator = function (draft) {\r\n if (isPayloadActionArgument(arg)) {\r\n mutator(arg.payload, draft);\r\n }\r\n else {\r\n mutator(arg, draft);\r\n }\r\n };\r\n if (isDraft3(state)) {\r\n runMutator(state);\r\n return state;\r\n }\r\n else {\r\n return createNextState3(state, runMutator);\r\n }\r\n };\r\n}\r\n// src/entities/utils.ts\r\nfunction selectIdValue(entity, selectId) {\r\n var key = selectId(entity);\r\n if (process.env.NODE_ENV !== \"production\" && key === void 0) {\r\n console.warn(\"The entity passed to the `selectId` implementation returned undefined.\", \"You should probably provide your own `selectId` implementation.\", \"The entity that was passed:\", entity, \"The `selectId` implementation:\", selectId.toString());\r\n }\r\n return key;\r\n}\r\nfunction ensureEntitiesArray(entities) {\r\n if (!Array.isArray(entities)) {\r\n entities = Object.values(entities);\r\n }\r\n return entities;\r\n}\r\nfunction splitAddedUpdatedEntities(newEntities, selectId, state) {\r\n newEntities = ensureEntitiesArray(newEntities);\r\n var added = [];\r\n var updated = [];\r\n for (var _i = 0, newEntities_1 = newEntities; _i < newEntities_1.length; _i++) {\r\n var entity = newEntities_1[_i];\r\n var id = selectIdValue(entity, selectId);\r\n if (id in state.entities) {\r\n updated.push({ id: id, changes: entity });\r\n }\r\n else {\r\n added.push(entity);\r\n }\r\n }\r\n return [added, updated];\r\n}\r\n// src/entities/unsorted_state_adapter.ts\r\nfunction createUnsortedStateAdapter(selectId) {\r\n function addOneMutably(entity, state) {\r\n var key = selectIdValue(entity, selectId);\r\n if (key in state.entities) {\r\n return;\r\n }\r\n state.ids.push(key);\r\n state.entities[key] = entity;\r\n }\r\n function addManyMutably(newEntities, state) {\r\n newEntities = ensureEntitiesArray(newEntities);\r\n for (var _i = 0, newEntities_2 = newEntities; _i < newEntities_2.length; _i++) {\r\n var entity = newEntities_2[_i];\r\n addOneMutably(entity, state);\r\n }\r\n }\r\n function setOneMutably(entity, state) {\r\n var key = selectIdValue(entity, selectId);\r\n if (!(key in state.entities)) {\r\n state.ids.push(key);\r\n }\r\n state.entities[key] = entity;\r\n }\r\n function setManyMutably(newEntities, state) {\r\n newEntities = ensureEntitiesArray(newEntities);\r\n for (var _i = 0, newEntities_3 = newEntities; _i < newEntities_3.length; _i++) {\r\n var entity = newEntities_3[_i];\r\n setOneMutably(entity, state);\r\n }\r\n }\r\n function setAllMutably(newEntities, state) {\r\n newEntities = ensureEntitiesArray(newEntities);\r\n state.ids = [];\r\n state.entities = {};\r\n addManyMutably(newEntities, state);\r\n }\r\n function removeOneMutably(key, state) {\r\n return removeManyMutably([key], state);\r\n }\r\n function removeManyMutably(keys, state) {\r\n var didMutate = false;\r\n keys.forEach(function (key) {\r\n if (key in state.entities) {\r\n delete state.entities[key];\r\n didMutate = true;\r\n }\r\n });\r\n if (didMutate) {\r\n state.ids = state.ids.filter(function (id) { return id in state.entities; });\r\n }\r\n }\r\n function removeAllMutably(state) {\r\n Object.assign(state, {\r\n ids: [],\r\n entities: {}\r\n });\r\n }\r\n function takeNewKey(keys, update, state) {\r\n var original2 = state.entities[update.id];\r\n var updated = Object.assign({}, original2, update.changes);\r\n var newKey = selectIdValue(updated, selectId);\r\n var hasNewKey = newKey !== update.id;\r\n if (hasNewKey) {\r\n keys[update.id] = newKey;\r\n delete state.entities[update.id];\r\n }\r\n state.entities[newKey] = updated;\r\n return hasNewKey;\r\n }\r\n function updateOneMutably(update, state) {\r\n return updateManyMutably([update], state);\r\n }\r\n function updateManyMutably(updates, state) {\r\n var newKeys = {};\r\n var updatesPerEntity = {};\r\n updates.forEach(function (update) {\r\n if (update.id in state.entities) {\r\n updatesPerEntity[update.id] = {\r\n id: update.id,\r\n changes: __spreadValues(__spreadValues({}, updatesPerEntity[update.id] ? updatesPerEntity[update.id].changes : null), update.changes)\r\n };\r\n }\r\n });\r\n updates = Object.values(updatesPerEntity);\r\n var didMutateEntities = updates.length > 0;\r\n if (didMutateEntities) {\r\n var didMutateIds = updates.filter(function (update) { return takeNewKey(newKeys, update, state); }).length > 0;\r\n if (didMutateIds) {\r\n state.ids = Object.keys(state.entities);\r\n }\r\n }\r\n }\r\n function upsertOneMutably(entity, state) {\r\n return upsertManyMutably([entity], state);\r\n }\r\n function upsertManyMutably(newEntities, state) {\r\n var _c = splitAddedUpdatedEntities(newEntities, selectId, state), added = _c[0], updated = _c[1];\r\n updateManyMutably(updated, state);\r\n addManyMutably(added, state);\r\n }\r\n return {\r\n removeAll: createSingleArgumentStateOperator(removeAllMutably),\r\n addOne: createStateOperator(addOneMutably),\r\n addMany: createStateOperator(addManyMutably),\r\n setOne: createStateOperator(setOneMutably),\r\n setMany: createStateOperator(setManyMutably),\r\n setAll: createStateOperator(setAllMutably),\r\n updateOne: createStateOperator(updateOneMutably),\r\n updateMany: createStateOperator(updateManyMutably),\r\n upsertOne: createStateOperator(upsertOneMutably),\r\n upsertMany: createStateOperator(upsertManyMutably),\r\n removeOne: createStateOperator(removeOneMutably),\r\n removeMany: createStateOperator(removeManyMutably)\r\n };\r\n}\r\n// src/entities/sorted_state_adapter.ts\r\nfunction createSortedStateAdapter(selectId, sort) {\r\n var _c = createUnsortedStateAdapter(selectId), removeOne = _c.removeOne, removeMany = _c.removeMany, removeAll = _c.removeAll;\r\n function addOneMutably(entity, state) {\r\n return addManyMutably([entity], state);\r\n }\r\n function addManyMutably(newEntities, state) {\r\n newEntities = ensureEntitiesArray(newEntities);\r\n var models = newEntities.filter(function (model) { return !(selectIdValue(model, selectId) in state.entities); });\r\n if (models.length !== 0) {\r\n merge(models, state);\r\n }\r\n }\r\n function setOneMutably(entity, state) {\r\n return setManyMutably([entity], state);\r\n }\r\n function setManyMutably(newEntities, state) {\r\n newEntities = ensureEntitiesArray(newEntities);\r\n if (newEntities.length !== 0) {\r\n merge(newEntities, state);\r\n }\r\n }\r\n function setAllMutably(newEntities, state) {\r\n newEntities = ensureEntitiesArray(newEntities);\r\n state.entities = {};\r\n state.ids = [];\r\n addManyMutably(newEntities, state);\r\n }\r\n function updateOneMutably(update, state) {\r\n return updateManyMutably([update], state);\r\n }\r\n function updateManyMutably(updates, state) {\r\n var appliedUpdates = false;\r\n for (var _i = 0, updates_1 = updates; _i < updates_1.length; _i++) {\r\n var update = updates_1[_i];\r\n var entity = state.entities[update.id];\r\n if (!entity) {\r\n continue;\r\n }\r\n appliedUpdates = true;\r\n Object.assign(entity, update.changes);\r\n var newId = selectId(entity);\r\n if (update.id !== newId) {\r\n delete state.entities[update.id];\r\n state.entities[newId] = entity;\r\n }\r\n }\r\n if (appliedUpdates) {\r\n resortEntities(state);\r\n }\r\n }\r\n function upsertOneMutably(entity, state) {\r\n return upsertManyMutably([entity], state);\r\n }\r\n function upsertManyMutably(newEntities, state) {\r\n var _c = splitAddedUpdatedEntities(newEntities, selectId, state), added = _c[0], updated = _c[1];\r\n updateManyMutably(updated, state);\r\n addManyMutably(added, state);\r\n }\r\n function areArraysEqual(a, b) {\r\n if (a.length !== b.length) {\r\n return false;\r\n }\r\n for (var i = 0; i < a.length && i < b.length; i++) {\r\n if (a[i] === b[i]) {\r\n continue;\r\n }\r\n return false;\r\n }\r\n return true;\r\n }\r\n function merge(models, state) {\r\n models.forEach(function (model) {\r\n state.entities[selectId(model)] = model;\r\n });\r\n resortEntities(state);\r\n }\r\n function resortEntities(state) {\r\n var allEntities = Object.values(state.entities);\r\n allEntities.sort(sort);\r\n var newSortedIds = allEntities.map(selectId);\r\n var ids = state.ids;\r\n if (!areArraysEqual(ids, newSortedIds)) {\r\n state.ids = newSortedIds;\r\n }\r\n }\r\n return {\r\n removeOne: removeOne,\r\n removeMany: removeMany,\r\n removeAll: removeAll,\r\n addOne: createStateOperator(addOneMutably),\r\n updateOne: createStateOperator(updateOneMutably),\r\n upsertOne: createStateOperator(upsertOneMutably),\r\n setOne: createStateOperator(setOneMutably),\r\n setMany: createStateOperator(setManyMutably),\r\n setAll: createStateOperator(setAllMutably),\r\n addMany: createStateOperator(addManyMutably),\r\n updateMany: createStateOperator(updateManyMutably),\r\n upsertMany: createStateOperator(upsertManyMutably)\r\n };\r\n}\r\n// src/entities/create_adapter.ts\r\nfunction createEntityAdapter(options) {\r\n if (options === void 0) { options = {}; }\r\n var _c = __spreadValues({\r\n sortComparer: false,\r\n selectId: function (instance) { return instance.id; }\r\n }, options), selectId = _c.selectId, sortComparer = _c.sortComparer;\r\n var stateFactory = createInitialStateFactory();\r\n var selectorsFactory = createSelectorsFactory();\r\n var stateAdapter = sortComparer ? createSortedStateAdapter(selectId, sortComparer) : createUnsortedStateAdapter(selectId);\r\n return __spreadValues(__spreadValues(__spreadValues({\r\n selectId: selectId,\r\n sortComparer: sortComparer\r\n }, stateFactory), selectorsFactory), stateAdapter);\r\n}\r\n// src/nanoid.ts\r\nvar urlAlphabet = \"ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW\";\r\nvar nanoid = function (size) {\r\n if (size === void 0) { size = 21; }\r\n var id = \"\";\r\n var i = size;\r\n while (i--) {\r\n id += urlAlphabet[Math.random() * 64 | 0];\r\n }\r\n return id;\r\n};\r\n// src/createAsyncThunk.ts\r\nvar commonProperties = [\r\n \"name\",\r\n \"message\",\r\n \"stack\",\r\n \"code\"\r\n];\r\nvar RejectWithValue = /** @class */ (function () {\r\n function RejectWithValue(payload, meta) {\r\n this.payload = payload;\r\n this.meta = meta;\r\n }\r\n return RejectWithValue;\r\n}());\r\nvar FulfillWithMeta = /** @class */ (function () {\r\n function FulfillWithMeta(payload, meta) {\r\n this.payload = payload;\r\n this.meta = meta;\r\n }\r\n return FulfillWithMeta;\r\n}());\r\nvar miniSerializeError = function (value) {\r\n if (typeof value === \"object\" && value !== null) {\r\n var simpleError = {};\r\n for (var _i = 0, commonProperties_1 = commonProperties; _i < commonProperties_1.length; _i++) {\r\n var property = commonProperties_1[_i];\r\n if (typeof value[property] === \"string\") {\r\n simpleError[property] = value[property];\r\n }\r\n }\r\n return simpleError;\r\n }\r\n return { message: String(value) };\r\n};\r\nvar createAsyncThunk = (function () {\r\n function createAsyncThunk2(typePrefix, payloadCreator, options) {\r\n var fulfilled = createAction(typePrefix + \"/fulfilled\", function (payload, requestId, arg, meta) { return ({\r\n payload: payload,\r\n meta: __spreadProps(__spreadValues({}, meta || {}), {\r\n arg: arg,\r\n requestId: requestId,\r\n requestStatus: \"fulfilled\"\r\n })\r\n }); });\r\n var pending = createAction(typePrefix + \"/pending\", function (requestId, arg, meta) { return ({\r\n payload: void 0,\r\n meta: __spreadProps(__spreadValues({}, meta || {}), {\r\n arg: arg,\r\n requestId: requestId,\r\n requestStatus: \"pending\"\r\n })\r\n }); });\r\n var rejected = createAction(typePrefix + \"/rejected\", function (error, requestId, arg, payload, meta) { return ({\r\n payload: payload,\r\n error: (options && options.serializeError || miniSerializeError)(error || \"Rejected\"),\r\n meta: __spreadProps(__spreadValues({}, meta || {}), {\r\n arg: arg,\r\n requestId: requestId,\r\n rejectedWithValue: !!payload,\r\n requestStatus: \"rejected\",\r\n aborted: (error == null ? void 0 : error.name) === \"AbortError\",\r\n condition: (error == null ? void 0 : error.name) === \"ConditionError\"\r\n })\r\n }); });\r\n var displayedWarning = false;\r\n var AC = typeof AbortController !== \"undefined\" ? AbortController : /** @class */ (function () {\r\n function class_1() {\r\n this.signal = {\r\n aborted: false,\r\n addEventListener: function () {\r\n },\r\n dispatchEvent: function () {\r\n return false;\r\n },\r\n onabort: function () {\r\n },\r\n removeEventListener: function () {\r\n },\r\n reason: void 0,\r\n throwIfAborted: function () {\r\n }\r\n };\r\n }\r\n class_1.prototype.abort = function () {\r\n if (process.env.NODE_ENV !== \"production\") {\r\n if (!displayedWarning) {\r\n displayedWarning = true;\r\n console.info(\"This platform does not implement AbortController. \\nIf you want to use the AbortController to react to `abort` events, please consider importing a polyfill like 'abortcontroller-polyfill/dist/abortcontroller-polyfill-only'.\");\r\n }\r\n }\r\n };\r\n return class_1;\r\n }());\r\n function actionCreator(arg) {\r\n return function (dispatch, getState, extra) {\r\n var requestId = (options == null ? void 0 : options.idGenerator) ? options.idGenerator(arg) : nanoid();\r\n var abortController = new AC();\r\n var abortReason;\r\n var started = false;\r\n function abort(reason) {\r\n abortReason = reason;\r\n abortController.abort();\r\n }\r\n var promise2 = function () {\r\n return __async(this, null, function () {\r\n var _a, _b, finalAction, conditionResult, abortedPromise, err_1, skipDispatch;\r\n return __generator(this, function (_c) {\r\n switch (_c.label) {\r\n case 0:\r\n _c.trys.push([0, 4, , 5]);\r\n conditionResult = (_a = options == null ? void 0 : options.condition) == null ? void 0 : _a.call(options, arg, { getState: getState, extra: extra });\r\n if (!isThenable(conditionResult)) return [3 /*break*/, 2];\r\n return [4 /*yield*/, conditionResult];\r\n case 1:\r\n conditionResult = _c.sent();\r\n _c.label = 2;\r\n case 2:\r\n if (conditionResult === false || abortController.signal.aborted) {\r\n throw {\r\n name: \"ConditionError\",\r\n message: \"Aborted due to condition callback returning false.\"\r\n };\r\n }\r\n started = true;\r\n abortedPromise = new Promise(function (_, reject) { return abortController.signal.addEventListener(\"abort\", function () { return reject({\r\n name: \"AbortError\",\r\n message: abortReason || \"Aborted\"\r\n }); }); });\r\n dispatch(pending(requestId, arg, (_b = options == null ? void 0 : options.getPendingMeta) == null ? void 0 : _b.call(options, { requestId: requestId, arg: arg }, { getState: getState, extra: extra })));\r\n return [4 /*yield*/, Promise.race([\r\n abortedPromise,\r\n Promise.resolve(payloadCreator(arg, {\r\n dispatch: dispatch,\r\n getState: getState,\r\n extra: extra,\r\n requestId: requestId,\r\n signal: abortController.signal,\r\n abort: abort,\r\n rejectWithValue: function (value, meta) {\r\n return new RejectWithValue(value, meta);\r\n },\r\n fulfillWithValue: function (value, meta) {\r\n return new FulfillWithMeta(value, meta);\r\n }\r\n })).then(function (result) {\r\n if (result instanceof RejectWithValue) {\r\n throw result;\r\n }\r\n if (result instanceof FulfillWithMeta) {\r\n return fulfilled(result.payload, requestId, arg, result.meta);\r\n }\r\n return fulfilled(result, requestId, arg);\r\n })\r\n ])];\r\n case 3:\r\n finalAction = _c.sent();\r\n return [3 /*break*/, 5];\r\n case 4:\r\n err_1 = _c.sent();\r\n finalAction = err_1 instanceof RejectWithValue ? rejected(null, requestId, arg, err_1.payload, err_1.meta) : rejected(err_1, requestId, arg);\r\n return [3 /*break*/, 5];\r\n case 5:\r\n skipDispatch = options && !options.dispatchConditionRejection && rejected.match(finalAction) && finalAction.meta.condition;\r\n if (!skipDispatch) {\r\n dispatch(finalAction);\r\n }\r\n return [2 /*return*/, finalAction];\r\n }\r\n });\r\n });\r\n }();\r\n return Object.assign(promise2, {\r\n abort: abort,\r\n requestId: requestId,\r\n arg: arg,\r\n unwrap: function () {\r\n return promise2.then(unwrapResult);\r\n }\r\n });\r\n };\r\n }\r\n return Object.assign(actionCreator, {\r\n pending: pending,\r\n rejected: rejected,\r\n fulfilled: fulfilled,\r\n typePrefix: typePrefix\r\n });\r\n }\r\n createAsyncThunk2.withTypes = function () { return createAsyncThunk2; };\r\n return createAsyncThunk2;\r\n})();\r\nfunction unwrapResult(action) {\r\n if (action.meta && action.meta.rejectedWithValue) {\r\n throw action.payload;\r\n }\r\n if (action.error) {\r\n throw action.error;\r\n }\r\n return action.payload;\r\n}\r\nfunction isThenable(value) {\r\n return value !== null && typeof value === \"object\" && typeof value.then === \"function\";\r\n}\r\n// src/matchers.ts\r\nvar matches = function (matcher, action) {\r\n if (hasMatchFunction(matcher)) {\r\n return matcher.match(action);\r\n }\r\n else {\r\n return matcher(action);\r\n }\r\n};\r\nfunction isAnyOf() {\r\n var matchers = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n matchers[_i] = arguments[_i];\r\n }\r\n return function (action) {\r\n return matchers.some(function (matcher) { return matches(matcher, action); });\r\n };\r\n}\r\nfunction isAllOf() {\r\n var matchers = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n matchers[_i] = arguments[_i];\r\n }\r\n return function (action) {\r\n return matchers.every(function (matcher) { return matches(matcher, action); });\r\n };\r\n}\r\nfunction hasExpectedRequestMetadata(action, validStatus) {\r\n if (!action || !action.meta)\r\n return false;\r\n var hasValidRequestId = typeof action.meta.requestId === \"string\";\r\n var hasValidRequestStatus = validStatus.indexOf(action.meta.requestStatus) > -1;\r\n return hasValidRequestId && hasValidRequestStatus;\r\n}\r\nfunction isAsyncThunkArray(a) {\r\n return typeof a[0] === \"function\" && \"pending\" in a[0] && \"fulfilled\" in a[0] && \"rejected\" in a[0];\r\n}\r\nfunction isPending() {\r\n var asyncThunks = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n asyncThunks[_i] = arguments[_i];\r\n }\r\n if (asyncThunks.length === 0) {\r\n return function (action) { return hasExpectedRequestMetadata(action, [\"pending\"]); };\r\n }\r\n if (!isAsyncThunkArray(asyncThunks)) {\r\n return isPending()(asyncThunks[0]);\r\n }\r\n return function (action) {\r\n var matchers = asyncThunks.map(function (asyncThunk) { return asyncThunk.pending; });\r\n var combinedMatcher = isAnyOf.apply(void 0, matchers);\r\n return combinedMatcher(action);\r\n };\r\n}\r\nfunction isRejected() {\r\n var asyncThunks = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n asyncThunks[_i] = arguments[_i];\r\n }\r\n if (asyncThunks.length === 0) {\r\n return function (action) { return hasExpectedRequestMetadata(action, [\"rejected\"]); };\r\n }\r\n if (!isAsyncThunkArray(asyncThunks)) {\r\n return isRejected()(asyncThunks[0]);\r\n }\r\n return function (action) {\r\n var matchers = asyncThunks.map(function (asyncThunk) { return asyncThunk.rejected; });\r\n var combinedMatcher = isAnyOf.apply(void 0, matchers);\r\n return combinedMatcher(action);\r\n };\r\n}\r\nfunction isRejectedWithValue() {\r\n var asyncThunks = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n asyncThunks[_i] = arguments[_i];\r\n }\r\n var hasFlag = function (action) {\r\n return action && action.meta && action.meta.rejectedWithValue;\r\n };\r\n if (asyncThunks.length === 0) {\r\n return function (action) {\r\n var combinedMatcher = isAllOf(isRejected.apply(void 0, asyncThunks), hasFlag);\r\n return combinedMatcher(action);\r\n };\r\n }\r\n if (!isAsyncThunkArray(asyncThunks)) {\r\n return isRejectedWithValue()(asyncThunks[0]);\r\n }\r\n return function (action) {\r\n var combinedMatcher = isAllOf(isRejected.apply(void 0, asyncThunks), hasFlag);\r\n return combinedMatcher(action);\r\n };\r\n}\r\nfunction isFulfilled() {\r\n var asyncThunks = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n asyncThunks[_i] = arguments[_i];\r\n }\r\n if (asyncThunks.length === 0) {\r\n return function (action) { return hasExpectedRequestMetadata(action, [\"fulfilled\"]); };\r\n }\r\n if (!isAsyncThunkArray(asyncThunks)) {\r\n return isFulfilled()(asyncThunks[0]);\r\n }\r\n return function (action) {\r\n var matchers = asyncThunks.map(function (asyncThunk) { return asyncThunk.fulfilled; });\r\n var combinedMatcher = isAnyOf.apply(void 0, matchers);\r\n return combinedMatcher(action);\r\n };\r\n}\r\nfunction isAsyncThunkAction() {\r\n var asyncThunks = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n asyncThunks[_i] = arguments[_i];\r\n }\r\n if (asyncThunks.length === 0) {\r\n return function (action) { return hasExpectedRequestMetadata(action, [\"pending\", \"fulfilled\", \"rejected\"]); };\r\n }\r\n if (!isAsyncThunkArray(asyncThunks)) {\r\n return isAsyncThunkAction()(asyncThunks[0]);\r\n }\r\n return function (action) {\r\n var matchers = [];\r\n for (var _i = 0, asyncThunks_1 = asyncThunks; _i < asyncThunks_1.length; _i++) {\r\n var asyncThunk = asyncThunks_1[_i];\r\n matchers.push(asyncThunk.pending, asyncThunk.rejected, asyncThunk.fulfilled);\r\n }\r\n var combinedMatcher = isAnyOf.apply(void 0, matchers);\r\n return combinedMatcher(action);\r\n };\r\n}\r\n// src/listenerMiddleware/utils.ts\r\nvar assertFunction = function (func, expected) {\r\n if (typeof func !== \"function\") {\r\n throw new TypeError(expected + \" is not a function\");\r\n }\r\n};\r\nvar noop = function () {\r\n};\r\nvar catchRejection = function (promise2, onError) {\r\n if (onError === void 0) { onError = noop; }\r\n promise2.catch(onError);\r\n return promise2;\r\n};\r\nvar addAbortSignalListener = function (abortSignal, callback) {\r\n abortSignal.addEventListener(\"abort\", callback, { once: true });\r\n return function () { return abortSignal.removeEventListener(\"abort\", callback); };\r\n};\r\nvar abortControllerWithReason = function (abortController, reason) {\r\n var signal = abortController.signal;\r\n if (signal.aborted) {\r\n return;\r\n }\r\n if (!(\"reason\" in signal)) {\r\n Object.defineProperty(signal, \"reason\", {\r\n enumerable: true,\r\n value: reason,\r\n configurable: true,\r\n writable: true\r\n });\r\n }\r\n ;\r\n abortController.abort(reason);\r\n};\r\n// src/listenerMiddleware/exceptions.ts\r\nvar task = \"task\";\r\nvar listener = \"listener\";\r\nvar completed = \"completed\";\r\nvar cancelled = \"cancelled\";\r\nvar taskCancelled = \"task-\" + cancelled;\r\nvar taskCompleted = \"task-\" + completed;\r\nvar listenerCancelled = listener + \"-\" + cancelled;\r\nvar listenerCompleted = listener + \"-\" + completed;\r\nvar TaskAbortError = /** @class */ (function () {\r\n function TaskAbortError(code) {\r\n this.code = code;\r\n this.name = \"TaskAbortError\";\r\n this.message = task + \" \" + cancelled + \" (reason: \" + code + \")\";\r\n }\r\n return TaskAbortError;\r\n}());\r\n// src/listenerMiddleware/task.ts\r\nvar validateActive = function (signal) {\r\n if (signal.aborted) {\r\n throw new TaskAbortError(signal.reason);\r\n }\r\n};\r\nfunction raceWithSignal(signal, promise2) {\r\n var cleanup = noop;\r\n return new Promise(function (resolve, reject) {\r\n var notifyRejection = function () { return reject(new TaskAbortError(signal.reason)); };\r\n if (signal.aborted) {\r\n notifyRejection();\r\n return;\r\n }\r\n cleanup = addAbortSignalListener(signal, notifyRejection);\r\n promise2.finally(function () { return cleanup(); }).then(resolve, reject);\r\n }).finally(function () {\r\n cleanup = noop;\r\n });\r\n}\r\nvar runTask = function (task2, cleanUp) { return __async(void 0, null, function () {\r\n var value, error_1;\r\n return __generator(this, function (_c) {\r\n switch (_c.label) {\r\n case 0:\r\n _c.trys.push([0, 3, 4, 5]);\r\n return [4 /*yield*/, Promise.resolve()];\r\n case 1:\r\n _c.sent();\r\n return [4 /*yield*/, task2()];\r\n case 2:\r\n value = _c.sent();\r\n return [2 /*return*/, {\r\n status: \"ok\",\r\n value: value\r\n }];\r\n case 3:\r\n error_1 = _c.sent();\r\n return [2 /*return*/, {\r\n status: error_1 instanceof TaskAbortError ? \"cancelled\" : \"rejected\",\r\n error: error_1\r\n }];\r\n case 4:\r\n cleanUp == null ? void 0 : cleanUp();\r\n return [7 /*endfinally*/];\r\n case 5: return [2 /*return*/];\r\n }\r\n });\r\n}); };\r\nvar createPause = function (signal) {\r\n return function (promise2) {\r\n return catchRejection(raceWithSignal(signal, promise2).then(function (output) {\r\n validateActive(signal);\r\n return output;\r\n }));\r\n };\r\n};\r\nvar createDelay = function (signal) {\r\n var pause = createPause(signal);\r\n return function (timeoutMs) {\r\n return pause(new Promise(function (resolve) { return setTimeout(resolve, timeoutMs); }));\r\n };\r\n};\r\n// src/listenerMiddleware/index.ts\r\nvar assign = Object.assign;\r\nvar INTERNAL_NIL_TOKEN = {};\r\nvar alm = \"listenerMiddleware\";\r\nvar createFork = function (parentAbortSignal, parentBlockingPromises) {\r\n var linkControllers = function (controller) { return addAbortSignalListener(parentAbortSignal, function () { return abortControllerWithReason(controller, parentAbortSignal.reason); }); };\r\n return function (taskExecutor, opts) {\r\n assertFunction(taskExecutor, \"taskExecutor\");\r\n var childAbortController = new AbortController();\r\n linkControllers(childAbortController);\r\n var result = runTask(function () { return __async(void 0, null, function () {\r\n var result2;\r\n return __generator(this, function (_c) {\r\n switch (_c.label) {\r\n case 0:\r\n validateActive(parentAbortSignal);\r\n validateActive(childAbortController.signal);\r\n return [4 /*yield*/, taskExecutor({\r\n pause: createPause(childAbortController.signal),\r\n delay: createDelay(childAbortController.signal),\r\n signal: childAbortController.signal\r\n })];\r\n case 1:\r\n result2 = _c.sent();\r\n validateActive(childAbortController.signal);\r\n return [2 /*return*/, result2];\r\n }\r\n });\r\n }); }, function () { return abortControllerWithReason(childAbortController, taskCompleted); });\r\n if (opts == null ? void 0 : opts.autoJoin) {\r\n parentBlockingPromises.push(result);\r\n }\r\n return {\r\n result: createPause(parentAbortSignal)(result),\r\n cancel: function () {\r\n abortControllerWithReason(childAbortController, taskCancelled);\r\n }\r\n };\r\n };\r\n};\r\nvar createTakePattern = function (startListening, signal) {\r\n var take = function (predicate, timeout) { return __async(void 0, null, function () {\r\n var unsubscribe, tuplePromise, promises, output;\r\n return __generator(this, function (_c) {\r\n switch (_c.label) {\r\n case 0:\r\n validateActive(signal);\r\n unsubscribe = function () {\r\n };\r\n tuplePromise = new Promise(function (resolve, reject) {\r\n var stopListening = startListening({\r\n predicate: predicate,\r\n effect: function (action, listenerApi) {\r\n listenerApi.unsubscribe();\r\n resolve([\r\n action,\r\n listenerApi.getState(),\r\n listenerApi.getOriginalState()\r\n ]);\r\n }\r\n });\r\n unsubscribe = function () {\r\n stopListening();\r\n reject();\r\n };\r\n });\r\n promises = [\r\n tuplePromise\r\n ];\r\n if (timeout != null) {\r\n promises.push(new Promise(function (resolve) { return setTimeout(resolve, timeout, null); }));\r\n }\r\n _c.label = 1;\r\n case 1:\r\n _c.trys.push([1, , 3, 4]);\r\n return [4 /*yield*/, raceWithSignal(signal, Promise.race(promises))];\r\n case 2:\r\n output = _c.sent();\r\n validateActive(signal);\r\n return [2 /*return*/, output];\r\n case 3:\r\n unsubscribe();\r\n return [7 /*endfinally*/];\r\n case 4: return [2 /*return*/];\r\n }\r\n });\r\n }); };\r\n return function (predicate, timeout) { return catchRejection(take(predicate, timeout)); };\r\n};\r\nvar getListenerEntryPropsFrom = function (options) {\r\n var type = options.type, actionCreator = options.actionCreator, matcher = options.matcher, predicate = options.predicate, effect = options.effect;\r\n if (type) {\r\n predicate = createAction(type).match;\r\n }\r\n else if (actionCreator) {\r\n type = actionCreator.type;\r\n predicate = actionCreator.match;\r\n }\r\n else if (matcher) {\r\n predicate = matcher;\r\n }\r\n else if (predicate) {\r\n }\r\n else {\r\n throw new Error(\"Creating or removing a listener requires one of the known fields for matching an action\");\r\n }\r\n assertFunction(effect, \"options.listener\");\r\n return { predicate: predicate, type: type, effect: effect };\r\n};\r\nvar createListenerEntry = function (options) {\r\n var _c = getListenerEntryPropsFrom(options), type = _c.type, predicate = _c.predicate, effect = _c.effect;\r\n var id = nanoid();\r\n var entry = {\r\n id: id,\r\n effect: effect,\r\n type: type,\r\n predicate: predicate,\r\n pending: new Set(),\r\n unsubscribe: function () {\r\n throw new Error(\"Unsubscribe not initialized\");\r\n }\r\n };\r\n return entry;\r\n};\r\nvar cancelActiveListeners = function (entry) {\r\n entry.pending.forEach(function (controller) {\r\n abortControllerWithReason(controller, listenerCancelled);\r\n });\r\n};\r\nvar createClearListenerMiddleware = function (listenerMap) {\r\n return function () {\r\n listenerMap.forEach(cancelActiveListeners);\r\n listenerMap.clear();\r\n };\r\n};\r\nvar safelyNotifyError = function (errorHandler, errorToNotify, errorInfo) {\r\n try {\r\n errorHandler(errorToNotify, errorInfo);\r\n }\r\n catch (errorHandlerError) {\r\n setTimeout(function () {\r\n throw errorHandlerError;\r\n }, 0);\r\n }\r\n};\r\nvar addListener = createAction(alm + \"/add\");\r\nvar clearAllListeners = createAction(alm + \"/removeAll\");\r\nvar removeListener = createAction(alm + \"/remove\");\r\nvar defaultErrorHandler = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n console.error.apply(console, __spreadArray([alm + \"/error\"], args));\r\n};\r\nfunction createListenerMiddleware(middlewareOptions) {\r\n var _this = this;\r\n if (middlewareOptions === void 0) { middlewareOptions = {}; }\r\n var listenerMap = new Map();\r\n var extra = middlewareOptions.extra, _c = middlewareOptions.onError, onError = _c === void 0 ? defaultErrorHandler : _c;\r\n assertFunction(onError, \"onError\");\r\n var insertEntry = function (entry) {\r\n entry.unsubscribe = function () { return listenerMap.delete(entry.id); };\r\n listenerMap.set(entry.id, entry);\r\n return function (cancelOptions) {\r\n entry.unsubscribe();\r\n if (cancelOptions == null ? void 0 : cancelOptions.cancelActive) {\r\n cancelActiveListeners(entry);\r\n }\r\n };\r\n };\r\n var findListenerEntry = function (comparator) {\r\n for (var _i = 0, _c = Array.from(listenerMap.values()); _i < _c.length; _i++) {\r\n var entry = _c[_i];\r\n if (comparator(entry)) {\r\n return entry;\r\n }\r\n }\r\n return void 0;\r\n };\r\n var startListening = function (options) {\r\n var entry = findListenerEntry(function (existingEntry) { return existingEntry.effect === options.effect; });\r\n if (!entry) {\r\n entry = createListenerEntry(options);\r\n }\r\n return insertEntry(entry);\r\n };\r\n var stopListening = function (options) {\r\n var _c = getListenerEntryPropsFrom(options), type = _c.type, effect = _c.effect, predicate = _c.predicate;\r\n var entry = findListenerEntry(function (entry2) {\r\n var matchPredicateOrType = typeof type === \"string\" ? entry2.type === type : entry2.predicate === predicate;\r\n return matchPredicateOrType && entry2.effect === effect;\r\n });\r\n if (entry) {\r\n entry.unsubscribe();\r\n if (options.cancelActive) {\r\n cancelActiveListeners(entry);\r\n }\r\n }\r\n return !!entry;\r\n };\r\n var notifyListener = function (entry, action, api, getOriginalState) { return __async(_this, null, function () {\r\n var internalTaskController, take, autoJoinPromises, listenerError_1;\r\n return __generator(this, function (_c) {\r\n switch (_c.label) {\r\n case 0:\r\n internalTaskController = new AbortController();\r\n take = createTakePattern(startListening, internalTaskController.signal);\r\n autoJoinPromises = [];\r\n _c.label = 1;\r\n case 1:\r\n _c.trys.push([1, 3, 4, 6]);\r\n entry.pending.add(internalTaskController);\r\n return [4 /*yield*/, Promise.resolve(entry.effect(action, assign({}, api, {\r\n getOriginalState: getOriginalState,\r\n condition: function (predicate, timeout) { return take(predicate, timeout).then(Boolean); },\r\n take: take,\r\n delay: createDelay(internalTaskController.signal),\r\n pause: createPause(internalTaskController.signal),\r\n extra: extra,\r\n signal: internalTaskController.signal,\r\n fork: createFork(internalTaskController.signal, autoJoinPromises),\r\n unsubscribe: entry.unsubscribe,\r\n subscribe: function () {\r\n listenerMap.set(entry.id, entry);\r\n },\r\n cancelActiveListeners: function () {\r\n entry.pending.forEach(function (controller, _, set) {\r\n if (controller !== internalTaskController) {\r\n abortControllerWithReason(controller, listenerCancelled);\r\n set.delete(controller);\r\n }\r\n });\r\n }\r\n })))];\r\n case 2:\r\n _c.sent();\r\n return [3 /*break*/, 6];\r\n case 3:\r\n listenerError_1 = _c.sent();\r\n if (!(listenerError_1 instanceof TaskAbortError)) {\r\n safelyNotifyError(onError, listenerError_1, {\r\n raisedBy: \"effect\"\r\n });\r\n }\r\n return [3 /*break*/, 6];\r\n case 4: return [4 /*yield*/, Promise.allSettled(autoJoinPromises)];\r\n case 5:\r\n _c.sent();\r\n abortControllerWithReason(internalTaskController, listenerCompleted);\r\n entry.pending.delete(internalTaskController);\r\n return [7 /*endfinally*/];\r\n case 6: return [2 /*return*/];\r\n }\r\n });\r\n }); };\r\n var clearListenerMiddleware = createClearListenerMiddleware(listenerMap);\r\n var middleware = function (api) { return function (next) { return function (action) {\r\n if (!isAction(action)) {\r\n return next(action);\r\n }\r\n if (addListener.match(action)) {\r\n return startListening(action.payload);\r\n }\r\n if (clearAllListeners.match(action)) {\r\n clearListenerMiddleware();\r\n return;\r\n }\r\n if (removeListener.match(action)) {\r\n return stopListening(action.payload);\r\n }\r\n var originalState = api.getState();\r\n var getOriginalState = function () {\r\n if (originalState === INTERNAL_NIL_TOKEN) {\r\n throw new Error(alm + \": getOriginalState can only be called synchronously\");\r\n }\r\n return originalState;\r\n };\r\n var result;\r\n try {\r\n result = next(action);\r\n if (listenerMap.size > 0) {\r\n var currentState = api.getState();\r\n var listenerEntries = Array.from(listenerMap.values());\r\n for (var _i = 0, listenerEntries_1 = listenerEntries; _i < listenerEntries_1.length; _i++) {\r\n var entry = listenerEntries_1[_i];\r\n var runListener = false;\r\n try {\r\n runListener = entry.predicate(action, currentState, originalState);\r\n }\r\n catch (predicateError) {\r\n runListener = false;\r\n safelyNotifyError(onError, predicateError, {\r\n raisedBy: \"predicate\"\r\n });\r\n }\r\n if (!runListener) {\r\n continue;\r\n }\r\n notifyListener(entry, action, api, getOriginalState);\r\n }\r\n }\r\n }\r\n finally {\r\n originalState = INTERNAL_NIL_TOKEN;\r\n }\r\n return result;\r\n }; }; };\r\n return {\r\n middleware: middleware,\r\n startListening: startListening,\r\n stopListening: stopListening,\r\n clearListeners: clearListenerMiddleware\r\n };\r\n}\r\n// src/autoBatchEnhancer.ts\r\nvar SHOULD_AUTOBATCH = \"RTK_autoBatch\";\r\nvar prepareAutoBatched = function () { return function (payload) {\r\n var _c;\r\n return ({\r\n payload: payload,\r\n meta: (_c = {}, _c[SHOULD_AUTOBATCH] = true, _c)\r\n });\r\n}; };\r\nvar promise;\r\nvar queueMicrotaskShim = typeof queueMicrotask === \"function\" ? queueMicrotask.bind(typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : globalThis) : function (cb) { return (promise || (promise = Promise.resolve())).then(cb).catch(function (err) { return setTimeout(function () {\r\n throw err;\r\n}, 0); }); };\r\nvar createQueueWithTimer = function (timeout) {\r\n return function (notify) {\r\n setTimeout(notify, timeout);\r\n };\r\n};\r\nvar rAF = typeof window !== \"undefined\" && window.requestAnimationFrame ? window.requestAnimationFrame : createQueueWithTimer(10);\r\nvar autoBatchEnhancer = function (options) {\r\n if (options === void 0) { options = { type: \"raf\" }; }\r\n return function (next) { return function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var store = next.apply(void 0, args);\r\n var notifying = true;\r\n var shouldNotifyAtEndOfTick = false;\r\n var notificationQueued = false;\r\n var listeners = new Set();\r\n var queueCallback = options.type === \"tick\" ? queueMicrotaskShim : options.type === \"raf\" ? rAF : options.type === \"callback\" ? options.queueNotification : createQueueWithTimer(options.timeout);\r\n var notifyListeners = function () {\r\n notificationQueued = false;\r\n if (shouldNotifyAtEndOfTick) {\r\n shouldNotifyAtEndOfTick = false;\r\n listeners.forEach(function (l) { return l(); });\r\n }\r\n };\r\n return Object.assign({}, store, {\r\n subscribe: function (listener2) {\r\n var wrappedListener = function () { return notifying && listener2(); };\r\n var unsubscribe = store.subscribe(wrappedListener);\r\n listeners.add(listener2);\r\n return function () {\r\n unsubscribe();\r\n listeners.delete(listener2);\r\n };\r\n },\r\n dispatch: function (action) {\r\n var _a;\r\n try {\r\n notifying = !((_a = action == null ? void 0 : action.meta) == null ? void 0 : _a[SHOULD_AUTOBATCH]);\r\n shouldNotifyAtEndOfTick = !notifying;\r\n if (shouldNotifyAtEndOfTick) {\r\n if (!notificationQueued) {\r\n notificationQueued = true;\r\n queueCallback(notifyListeners);\r\n }\r\n }\r\n return store.dispatch(action);\r\n }\r\n finally {\r\n notifying = true;\r\n }\r\n }\r\n });\r\n }; };\r\n};\r\n// src/index.ts\r\nenableES5();\r\nexport { EnhancerArray, MiddlewareArray, SHOULD_AUTOBATCH, TaskAbortError, addListener, autoBatchEnhancer, clearAllListeners, configureStore, createAction, createActionCreatorInvariantMiddleware, createAsyncThunk, createDraftSafeSelector, createEntityAdapter, createImmutableStateInvariantMiddleware, createListenerMiddleware, default2 as createNextState, createReducer, createSelector2 as createSelector, createSerializableStateInvariantMiddleware, createSlice, current2 as current, findNonSerializableValue, freeze, getDefaultMiddleware, getType, isAction, isActionCreator, isAllOf, isAnyOf, isAsyncThunkAction, isDraft4 as isDraft, isFSA as isFluxStandardAction, isFulfilled, isImmutableDefault, isPending, isPlain, isPlainObject, isRejected, isRejectedWithValue, miniSerializeError, nanoid, original, prepareAutoBatched, removeListener, unwrapResult };\r\n//# sourceMappingURL=redux-toolkit.esm.js.map","function n(n){for(var r=arguments.length,t=Array(r>1?r-1:0),e=1;e3?r.i-4:r.i:Array.isArray(n)?1:s(n)?2:v(n)?3:0}function u(n,r){return 2===o(n)?n.has(r):Object.prototype.hasOwnProperty.call(n,r)}function a(n,r){return 2===o(n)?n.get(r):n[r]}function f(n,r,t){var e=o(n);2===e?n.set(r,t):3===e?n.add(t):n[r]=t}function c(n,r){return n===r?0!==n||1/n==1/r:n!=n&&r!=r}function s(n){return X&&n instanceof Map}function v(n){return q&&n instanceof Set}function p(n){return n.o||n.t}function l(n){if(Array.isArray(n))return Array.prototype.slice.call(n);var r=rn(n);delete r[Q];for(var t=nn(r),e=0;e1&&(n.set=n.add=n.clear=n.delete=h),Object.freeze(n),e&&i(n,(function(n,r){return d(r,!0)}),!0)),n}function h(){n(2)}function y(n){return null==n||\"object\"!=typeof n||Object.isFrozen(n)}function b(r){var t=tn[r];return t||n(18,r),t}function m(n,r){tn[n]||(tn[n]=r)}function _(){return\"production\"===process.env.NODE_ENV||U||n(0),U}function j(n,r){r&&(b(\"Patches\"),n.u=[],n.s=[],n.v=r)}function g(n){O(n),n.p.forEach(S),n.p=null}function O(n){n===U&&(U=n.l)}function w(n){return U={p:[],l:U,h:n,m:!0,_:0}}function S(n){var r=n[Q];0===r.i||1===r.i?r.j():r.g=!0}function P(r,e){e._=e.p.length;var i=e.p[0],o=void 0!==r&&r!==i;return e.h.O||b(\"ES5\").S(e,r,o),o?(i[Q].P&&(g(e),n(4)),t(r)&&(r=M(e,r),e.l||x(e,r)),e.u&&b(\"Patches\").M(i[Q].t,r,e.u,e.s)):r=M(e,i,[]),g(e),e.u&&e.v(e.u,e.s),r!==H?r:void 0}function M(n,r,t){if(y(r))return r;var e=r[Q];if(!e)return i(r,(function(i,o){return A(n,e,r,i,o,t)}),!0),r;if(e.A!==n)return r;if(!e.P)return x(n,e.t,!0),e.t;if(!e.I){e.I=!0,e.A._--;var o=4===e.i||5===e.i?e.o=l(e.k):e.o,u=o,a=!1;3===e.i&&(u=new Set(o),o.clear(),a=!0),i(u,(function(r,i){return A(n,e,o,r,i,t,a)})),x(n,o,!1),t&&n.u&&b(\"Patches\").N(e,t,n.u,n.s)}return e.o}function A(e,i,o,a,c,s,v){if(\"production\"!==process.env.NODE_ENV&&c===o&&n(5),r(c)){var p=M(e,c,s&&i&&3!==i.i&&!u(i.R,a)?s.concat(a):void 0);if(f(o,a,p),!r(p))return;e.m=!1}else v&&o.add(c);if(t(c)&&!y(c)){if(!e.h.D&&e._<1)return;M(e,c),i&&i.A.l||x(e,c)}}function x(n,r,t){void 0===t&&(t=!1),!n.l&&n.h.D&&n.m&&d(r,t)}function z(n,r){var t=n[Q];return(t?p(t):n)[r]}function I(n,r){if(r in n)for(var t=Object.getPrototypeOf(n);t;){var e=Object.getOwnPropertyDescriptor(t,r);if(e)return e;t=Object.getPrototypeOf(t)}}function k(n){n.P||(n.P=!0,n.l&&k(n.l))}function E(n){n.o||(n.o=l(n.t))}function N(n,r,t){var e=s(r)?b(\"MapSet\").F(r,t):v(r)?b(\"MapSet\").T(r,t):n.O?function(n,r){var t=Array.isArray(n),e={i:t?1:0,A:r?r.A:_(),P:!1,I:!1,R:{},l:r,t:n,k:null,o:null,j:null,C:!1},i=e,o=en;t&&(i=[e],o=on);var u=Proxy.revocable(i,o),a=u.revoke,f=u.proxy;return e.k=f,e.j=a,f}(r,t):b(\"ES5\").J(r,t);return(t?t.A:_()).p.push(e),e}function R(e){return r(e)||n(22,e),function n(r){if(!t(r))return r;var e,u=r[Q],c=o(r);if(u){if(!u.P&&(u.i<4||!b(\"ES5\").K(u)))return u.t;u.I=!0,e=D(r,c),u.I=!1}else e=D(r,c);return i(e,(function(r,t){u&&a(u.t,r)===t||f(e,r,n(t))})),3===c?new Set(e):e}(e)}function D(n,r){switch(r){case 2:return new Map(n);case 3:return Array.from(n)}return l(n)}function F(){function t(n,r){var t=s[n];return t?t.enumerable=r:s[n]=t={configurable:!0,enumerable:r,get:function(){var r=this[Q];return\"production\"!==process.env.NODE_ENV&&f(r),en.get(r,n)},set:function(r){var t=this[Q];\"production\"!==process.env.NODE_ENV&&f(t),en.set(t,n,r)}},t}function e(n){for(var r=n.length-1;r>=0;r--){var t=n[r][Q];if(!t.P)switch(t.i){case 5:a(t)&&k(t);break;case 4:o(t)&&k(t)}}}function o(n){for(var r=n.t,t=n.k,e=nn(t),i=e.length-1;i>=0;i--){var o=e[i];if(o!==Q){var a=r[o];if(void 0===a&&!u(r,o))return!0;var f=t[o],s=f&&f[Q];if(s?s.t!==a:!c(f,a))return!0}}var v=!!r[Q];return e.length!==nn(r).length+(v?0:1)}function a(n){var r=n.k;if(r.length!==n.t.length)return!0;var t=Object.getOwnPropertyDescriptor(r,r.length-1);if(t&&!t.get)return!0;for(var e=0;e1?t-1:0),o=1;o1?t-1:0),o=1;o=0;e--){var i=t[e];if(0===i.path.length&&\"replace\"===i.op){n=i.value;break}}e>-1&&(t=t.slice(e+1));var o=b(\"Patches\").$;return r(n)?o(n,t):this.produce(n,(function(n){return o(n,t)}))},e}(),an=new un,fn=an.produce,cn=an.produceWithPatches.bind(an),sn=an.setAutoFreeze.bind(an),vn=an.setUseProxies.bind(an),pn=an.applyPatches.bind(an),ln=an.createDraft.bind(an),dn=an.finishDraft.bind(an);export default fn;export{un as Immer,pn as applyPatches,K as castDraft,$ as castImmutable,ln as createDraft,R as current,J as enableAllPlugins,F as enableES5,C as enableMapSet,T as enablePatches,dn as finishDraft,d as freeze,L as immerable,r as isDraft,t as isDraftable,H as nothing,e as original,fn as produce,cn as produceWithPatches,sn as setAutoFreeze,vn as setUseProxies};\n//# sourceMappingURL=immer.esm.js.map\n","import _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';\n\n/**\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\n *\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\n * during build.\n * @param {number} code\n */\nfunction formatProdErrorMessage(code) {\n return \"Minified Redux error #\" + code + \"; visit https://redux.js.org/Errors?code=\" + code + \" for the full message or \" + 'use the non-minified dev environment for full errors. ';\n}\n\n// Inlined version of the `symbol-observable` polyfill\nvar $$observable = (function () {\n return typeof Symbol === 'function' && Symbol.observable || '@@observable';\n})();\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar randomString = function randomString() {\n return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n INIT: \"@@redux/INIT\" + randomString(),\n REPLACE: \"@@redux/REPLACE\" + randomString(),\n PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n }\n};\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nfunction isPlainObject(obj) {\n if (typeof obj !== 'object' || obj === null) return false;\n var proto = obj;\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(obj) === proto;\n}\n\n// Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of\nfunction miniKindOf(val) {\n if (val === void 0) return 'undefined';\n if (val === null) return 'null';\n var type = typeof val;\n\n switch (type) {\n case 'boolean':\n case 'string':\n case 'number':\n case 'symbol':\n case 'function':\n {\n return type;\n }\n }\n\n if (Array.isArray(val)) return 'array';\n if (isDate(val)) return 'date';\n if (isError(val)) return 'error';\n var constructorName = ctorName(val);\n\n switch (constructorName) {\n case 'Symbol':\n case 'Promise':\n case 'WeakMap':\n case 'WeakSet':\n case 'Map':\n case 'Set':\n return constructorName;\n } // other\n\n\n return type.slice(8, -1).toLowerCase().replace(/\\s/g, '');\n}\n\nfunction ctorName(val) {\n return typeof val.constructor === 'function' ? val.constructor.name : null;\n}\n\nfunction isError(val) {\n return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number';\n}\n\nfunction isDate(val) {\n if (val instanceof Date) return true;\n return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function';\n}\n\nfunction kindOf(val) {\n var typeOfVal = typeof val;\n\n if (process.env.NODE_ENV !== 'production') {\n typeOfVal = miniKindOf(val);\n }\n\n return typeOfVal;\n}\n\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\n\nfunction createStore(reducer, preloadedState, enhancer) {\n var _ref2;\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : 'It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.');\n }\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = preloadedState;\n preloadedState = undefined;\n }\n\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : \"Expected the enhancer to be a function. Instead, received: '\" + kindOf(enhancer) + \"'\");\n }\n\n return enhancer(createStore)(reducer, preloadedState);\n }\n\n if (typeof reducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : \"Expected the root reducer to be a function. Instead, received: '\" + kindOf(reducer) + \"'\");\n }\n\n var currentReducer = reducer;\n var currentState = preloadedState;\n var currentListeners = [];\n var nextListeners = currentListeners;\n var isDispatching = false;\n /**\n * This makes a shallow copy of currentListeners so we can use\n * nextListeners as a temporary list while dispatching.\n *\n * This prevents any bugs around consumers calling\n * subscribe/unsubscribe in the middle of a dispatch.\n */\n\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\n }\n /**\n * Reads the state tree managed by the store.\n *\n * @returns {any} The current state tree of your application.\n */\n\n\n function getState() {\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : 'You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n }\n\n return currentState;\n }\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param {Function} listener A callback to be invoked on every dispatch.\n * @returns {Function} A function to remove this change listener.\n */\n\n\n function subscribe(listener) {\n if (typeof listener !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : \"Expected the listener to be a function. Instead, received: '\" + kindOf(listener) + \"'\");\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : 'You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n\n var isSubscribed = true;\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : 'You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n\n isSubscribed = false;\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n currentListeners = null;\n };\n }\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param {Object} action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns {Object} For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n\n\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : \"Actions must be plain objects. Instead, the actual type was: '\" + kindOf(action) + \"'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.\");\n }\n\n if (typeof action.type === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(9) : 'Reducers may not dispatch actions.');\n }\n\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n\n var listeners = currentListeners = nextListeners;\n\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n listener();\n }\n\n return action;\n }\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param {Function} nextReducer The reducer for the store to use instead.\n * @returns {void}\n */\n\n\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(10) : \"Expected the nextReducer to be a function. Instead, received: '\" + kindOf(nextReducer));\n }\n\n currentReducer = nextReducer; // This action has a similiar effect to ActionTypes.INIT.\n // Any reducers that existed in both the new and old rootReducer\n // will receive the previous state. This effectively populates\n // the new state tree with any relevant data from the old one.\n\n dispatch({\n type: ActionTypes.REPLACE\n });\n }\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns {observable} A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n\n\n function observable() {\n var _ref;\n\n var outerSubscribe = subscribe;\n return _ref = {\n /**\n * The minimal observable subscription method.\n * @param {Object} observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns {subscription} An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe: function subscribe(observer) {\n if (typeof observer !== 'object' || observer === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : \"Expected the observer to be an object. Instead, received: '\" + kindOf(observer) + \"'\");\n }\n\n function observeState() {\n if (observer.next) {\n observer.next(getState());\n }\n }\n\n observeState();\n var unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe: unsubscribe\n };\n }\n }, _ref[$$observable] = function () {\n return this;\n }, _ref;\n } // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n\n\n dispatch({\n type: ActionTypes.INIT\n });\n return _ref2 = {\n dispatch: dispatch,\n subscribe: subscribe,\n getState: getState,\n replaceReducer: replaceReducer\n }, _ref2[$$observable] = observable, _ref2;\n}\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\nvar legacy_createStore = createStore;\n\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n\n\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n var reducerKeys = Object.keys(reducers);\n var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n if (reducerKeys.length === 0) {\n return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n }\n\n if (!isPlainObject(inputState)) {\n return \"The \" + argumentName + \" has unexpected type of \\\"\" + kindOf(inputState) + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n }\n\n var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n });\n unexpectedKeys.forEach(function (key) {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === ActionTypes.REPLACE) return;\n\n if (unexpectedKeys.length > 0) {\n return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n }\n}\n\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach(function (key) {\n var reducer = reducers[key];\n var initialState = reducer(undefined, {\n type: ActionTypes.INIT\n });\n\n if (typeof initialState === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined during initialization. \" + \"If the state passed to the reducer is undefined, you must \" + \"explicitly return the initial state. The initial state may \" + \"not be undefined. If you don't want to set a value for this reducer, \" + \"you can use null instead of undefined.\");\n }\n\n if (typeof reducer(undefined, {\n type: ActionTypes.PROBE_UNKNOWN_ACTION()\n }) === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined when probed with a random type. \" + (\"Don't try to handle '\" + ActionTypes.INIT + \"' or other actions in \\\"redux/*\\\" \") + \"namespace. They are considered private. Instead, you must return the \" + \"current state for any unknown actions, unless it is undefined, \" + \"in which case you must return the initial state, regardless of the \" + \"action type. The initial state may not be undefined, but can be null.\");\n }\n });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n var reducerKeys = Object.keys(reducers);\n var finalReducers = {};\n\n for (var i = 0; i < reducerKeys.length; i++) {\n var key = reducerKeys[i];\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof reducers[key] === 'undefined') {\n warning(\"No reducer provided for key \\\"\" + key + \"\\\"\");\n }\n }\n\n if (typeof reducers[key] === 'function') {\n finalReducers[key] = reducers[key];\n }\n }\n\n var finalReducerKeys = Object.keys(finalReducers); // This is used to make sure we don't warn about the same\n // keys multiple times.\n\n var unexpectedKeyCache;\n\n if (process.env.NODE_ENV !== 'production') {\n unexpectedKeyCache = {};\n }\n\n var shapeAssertionError;\n\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n\n return function combination(state, action) {\n if (state === void 0) {\n state = {};\n }\n\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n\n var hasChanged = false;\n var nextState = {};\n\n for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n var _key = finalReducerKeys[_i];\n var reducer = finalReducers[_key];\n var previousStateForKey = state[_key];\n var nextStateForKey = reducer(previousStateForKey, action);\n\n if (typeof nextStateForKey === 'undefined') {\n var actionType = action && action.type;\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : \"When called with an action of type \" + (actionType ? \"\\\"\" + String(actionType) + \"\\\"\" : '(unknown type)') + \", the slice reducer for key \\\"\" + _key + \"\\\" returned undefined. \" + \"To ignore an action, you must explicitly return the previous state. \" + \"If you want this reducer to hold no value, you can return null instead of undefined.\");\n }\n\n nextState[_key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n\n hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n return hasChanged ? nextState : state;\n };\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n return function () {\n return dispatch(actionCreator.apply(this, arguments));\n };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === 'function') {\n return bindActionCreator(actionCreators, dispatch);\n }\n\n if (typeof actionCreators !== 'object' || actionCreators === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : \"bindActionCreators expected an object or a function, but instead received: '\" + kindOf(actionCreators) + \"'. \" + \"Did you write \\\"import ActionCreators from\\\" instead of \\\"import * as ActionCreators from\\\"?\");\n }\n\n var boundActionCreators = {};\n\n for (var key in actionCreators) {\n var actionCreator = actionCreators[key];\n\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n\n return boundActionCreators;\n}\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\nfunction compose() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n if (funcs.length === 0) {\n return function (arg) {\n return arg;\n };\n }\n\n if (funcs.length === 1) {\n return funcs[0];\n }\n\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(void 0, arguments));\n };\n });\n}\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\nfunction applyMiddleware() {\n for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {\n middlewares[_key] = arguments[_key];\n }\n\n return function (createStore) {\n return function () {\n var store = createStore.apply(void 0, arguments);\n\n var _dispatch = function dispatch() {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : 'Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n };\n\n var middlewareAPI = {\n getState: store.getState,\n dispatch: function dispatch() {\n return _dispatch.apply(void 0, arguments);\n }\n };\n var chain = middlewares.map(function (middleware) {\n return middleware(middlewareAPI);\n });\n _dispatch = compose.apply(void 0, chain)(store.dispatch);\n return _objectSpread(_objectSpread({}, store), {}, {\n dispatch: _dispatch\n });\n };\n };\n}\n\nexport { ActionTypes as __DO_NOT_USE__ActionTypes, applyMiddleware, bindActionCreators, combineReducers, compose, createStore, legacy_createStore };\n","import defineProperty from \"./defineProperty.js\";\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\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 return keys;\n}\nexport default 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 return target;\n}","export default 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 return obj;\n}","import { defaultMemoize, defaultEqualityCheck } from './defaultMemoize';\nexport { defaultMemoize, defaultEqualityCheck };\n\nfunction getDependencies(funcs) {\n var dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs;\n\n if (!dependencies.every(function (dep) {\n return typeof dep === 'function';\n })) {\n var dependencyTypes = dependencies.map(function (dep) {\n return typeof dep === 'function' ? \"function \" + (dep.name || 'unnamed') + \"()\" : typeof dep;\n }).join(', ');\n throw new Error(\"createSelector expects all input-selectors to be functions, but received the following types: [\" + dependencyTypes + \"]\");\n }\n\n return dependencies;\n}\n\nexport function createSelectorCreator(memoize) {\n for (var _len = arguments.length, memoizeOptionsFromArgs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n memoizeOptionsFromArgs[_key - 1] = arguments[_key];\n }\n\n var createSelector = function createSelector() {\n for (var _len2 = arguments.length, funcs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n funcs[_key2] = arguments[_key2];\n }\n\n var _recomputations = 0;\n\n var _lastResult; // Due to the intricacies of rest params, we can't do an optional arg after `...funcs`.\n // So, start by declaring the default value here.\n // (And yes, the words 'memoize' and 'options' appear too many times in this next sequence.)\n\n\n var directlyPassedOptions = {\n memoizeOptions: undefined\n }; // Normally, the result func or \"output selector\" is the last arg\n\n var resultFunc = funcs.pop(); // If the result func is actually an _object_, assume it's our options object\n\n if (typeof resultFunc === 'object') {\n directlyPassedOptions = resultFunc; // and pop the real result func off\n\n resultFunc = funcs.pop();\n }\n\n if (typeof resultFunc !== 'function') {\n throw new Error(\"createSelector expects an output function after the inputs, but received: [\" + typeof resultFunc + \"]\");\n } // Determine which set of options we're using. Prefer options passed directly,\n // but fall back to options given to createSelectorCreator.\n\n\n var _directlyPassedOption = directlyPassedOptions,\n _directlyPassedOption2 = _directlyPassedOption.memoizeOptions,\n memoizeOptions = _directlyPassedOption2 === void 0 ? memoizeOptionsFromArgs : _directlyPassedOption2; // Simplifying assumption: it's unlikely that the first options arg of the provided memoizer\n // is an array. In most libs I've looked at, it's an equality function or options object.\n // Based on that, if `memoizeOptions` _is_ an array, we assume it's a full\n // user-provided array of options. Otherwise, it must be just the _first_ arg, and so\n // we wrap it in an array so we can apply it.\n\n var finalMemoizeOptions = Array.isArray(memoizeOptions) ? memoizeOptions : [memoizeOptions];\n var dependencies = getDependencies(funcs);\n var memoizedResultFunc = memoize.apply(void 0, [function recomputationWrapper() {\n _recomputations++; // apply arguments instead of spreading for performance.\n\n return resultFunc.apply(null, arguments);\n }].concat(finalMemoizeOptions)); // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.\n\n var selector = memoize(function dependenciesChecker() {\n var params = [];\n var length = dependencies.length;\n\n for (var i = 0; i < length; i++) {\n // apply arguments instead of spreading and mutate a local list of params for performance.\n // @ts-ignore\n params.push(dependencies[i].apply(null, arguments));\n } // apply arguments instead of spreading for performance.\n\n\n _lastResult = memoizedResultFunc.apply(null, params);\n return _lastResult;\n });\n Object.assign(selector, {\n resultFunc: resultFunc,\n memoizedResultFunc: memoizedResultFunc,\n dependencies: dependencies,\n lastResult: function lastResult() {\n return _lastResult;\n },\n recomputations: function recomputations() {\n return _recomputations;\n },\n resetRecomputations: function resetRecomputations() {\n return _recomputations = 0;\n }\n });\n return selector;\n }; // @ts-ignore\n\n\n return createSelector;\n}\nexport var createSelector = /* #__PURE__ */createSelectorCreator(defaultMemoize);\n// Manual definition of state and output arguments\nexport var createStructuredSelector = function createStructuredSelector(selectors, selectorCreator) {\n if (selectorCreator === void 0) {\n selectorCreator = createSelector;\n }\n\n if (typeof selectors !== 'object') {\n throw new Error('createStructuredSelector expects first argument to be an object ' + (\"where each property is a selector, instead received a \" + typeof selectors));\n }\n\n var objectKeys = Object.keys(selectors);\n var resultSelector = selectorCreator( // @ts-ignore\n objectKeys.map(function (key) {\n return selectors[key];\n }), function () {\n for (var _len3 = arguments.length, values = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n values[_key3] = arguments[_key3];\n }\n\n return values.reduce(function (composition, value, index) {\n composition[objectKeys[index]] = value;\n return composition;\n }, {});\n });\n return resultSelector;\n};","// Cache implementation based on Erik Rasmussen's `lru-memoize`:\n// https://github.com/erikras/lru-memoize\nvar NOT_FOUND = 'NOT_FOUND';\n\nfunction createSingletonCache(equals) {\n var entry;\n return {\n get: function get(key) {\n if (entry && equals(entry.key, key)) {\n return entry.value;\n }\n\n return NOT_FOUND;\n },\n put: function put(key, value) {\n entry = {\n key: key,\n value: value\n };\n },\n getEntries: function getEntries() {\n return entry ? [entry] : [];\n },\n clear: function clear() {\n entry = undefined;\n }\n };\n}\n\nfunction createLruCache(maxSize, equals) {\n var entries = [];\n\n function get(key) {\n var cacheIndex = entries.findIndex(function (entry) {\n return equals(key, entry.key);\n }); // We found a cached entry\n\n if (cacheIndex > -1) {\n var entry = entries[cacheIndex]; // Cached entry not at top of cache, move it to the top\n\n if (cacheIndex > 0) {\n entries.splice(cacheIndex, 1);\n entries.unshift(entry);\n }\n\n return entry.value;\n } // No entry found in cache, return sentinel\n\n\n return NOT_FOUND;\n }\n\n function put(key, value) {\n if (get(key) === NOT_FOUND) {\n // TODO Is unshift slow?\n entries.unshift({\n key: key,\n value: value\n });\n\n if (entries.length > maxSize) {\n entries.pop();\n }\n }\n }\n\n function getEntries() {\n return entries;\n }\n\n function clear() {\n entries = [];\n }\n\n return {\n get: get,\n put: put,\n getEntries: getEntries,\n clear: clear\n };\n}\n\nexport var defaultEqualityCheck = function defaultEqualityCheck(a, b) {\n return a === b;\n};\nexport function createCacheKeyComparator(equalityCheck) {\n return function areArgumentsShallowlyEqual(prev, next) {\n if (prev === null || next === null || prev.length !== next.length) {\n return false;\n } // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.\n\n\n var length = prev.length;\n\n for (var i = 0; i < length; i++) {\n if (!equalityCheck(prev[i], next[i])) {\n return false;\n }\n }\n\n return true;\n };\n}\n// defaultMemoize now supports a configurable cache size with LRU behavior,\n// and optional comparison of the result value with existing values\nexport function defaultMemoize(func, equalityCheckOrOptions) {\n var providedOptions = typeof equalityCheckOrOptions === 'object' ? equalityCheckOrOptions : {\n equalityCheck: equalityCheckOrOptions\n };\n var _providedOptions$equa = providedOptions.equalityCheck,\n equalityCheck = _providedOptions$equa === void 0 ? defaultEqualityCheck : _providedOptions$equa,\n _providedOptions$maxS = providedOptions.maxSize,\n maxSize = _providedOptions$maxS === void 0 ? 1 : _providedOptions$maxS,\n resultEqualityCheck = providedOptions.resultEqualityCheck;\n var comparator = createCacheKeyComparator(equalityCheck);\n var cache = maxSize === 1 ? createSingletonCache(comparator) : createLruCache(maxSize, comparator); // we reference arguments instead of spreading them for performance reasons\n\n function memoized() {\n var value = cache.get(arguments);\n\n if (value === NOT_FOUND) {\n // @ts-ignore\n value = func.apply(null, arguments);\n\n if (resultEqualityCheck) {\n var entries = cache.getEntries();\n var matchingEntry = entries.find(function (entry) {\n return resultEqualityCheck(entry.value, value);\n });\n\n if (matchingEntry) {\n value = matchingEntry.value;\n }\n }\n\n cache.put(arguments, value);\n }\n\n return value;\n }\n\n memoized.clearCache = function () {\n return cache.clear();\n };\n\n return memoized;\n}","/** A function that accepts a potential \"extra argument\" value to be injected later,\r\n * and returns an instance of the thunk middleware that uses that value\r\n */\nfunction createThunkMiddleware(extraArgument) {\n // Standard Redux middleware definition pattern:\n // See: https://redux.js.org/tutorials/fundamentals/part-4-store#writing-custom-middleware\n var middleware = function middleware(_ref) {\n var dispatch = _ref.dispatch,\n getState = _ref.getState;\n return function (next) {\n return function (action) {\n // The thunk middleware looks for any functions that were passed to `store.dispatch`.\n // If this \"action\" is really a function, call it and return the result.\n if (typeof action === 'function') {\n // Inject the store's `dispatch` and `getState` methods, as well as any \"extra arg\"\n return action(dispatch, getState, extraArgument);\n } // Otherwise, pass the action down the middleware chain as usual\n\n\n return next(action);\n };\n };\n };\n\n return middleware;\n}\n\nvar thunk = createThunkMiddleware(); // Attach the factory function so users can create a customized version\n// with whatever \"extra arg\" they want to inject into their thunks\n\nthunk.withExtraArgument = createThunkMiddleware;\nexport default thunk;","/**\n * Navigators\n */\nexport { default as createBottomTabNavigator } from './navigators/createBottomTabNavigator';\n\n/**\n * Views\n */\nexport { default as BottomTabBar } from './views/BottomTabBar';\nexport { default as BottomTabView } from './views/BottomTabView';\n\n/**\n * Utilities\n */\nexport { default as BottomTabBarHeightCallbackContext } from './utils/BottomTabBarHeightCallbackContext';\nexport { default as BottomTabBarHeightContext } from './utils/BottomTabBarHeightContext';\nexport { default as useBottomTabBarHeight } from './utils/useBottomTabBarHeight';\n\n/**\n * Types\n */\n//# sourceMappingURL=index.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport { createNavigatorFactory, TabRouter, useNavigationBuilder } from '@react-navigation/native';\nimport * as React from 'react';\nimport warnOnce from 'warn-once';\nimport BottomTabView from '../views/BottomTabView';\nfunction BottomTabNavigator(_ref) {\n let {\n id,\n initialRouteName,\n backBehavior,\n children,\n screenListeners,\n screenOptions,\n sceneContainerStyle,\n ...restWithDeprecated\n } = _ref;\n const {\n // @ts-expect-error: lazy is deprecated\n lazy,\n // @ts-expect-error: tabBarOptions is deprecated\n tabBarOptions,\n ...rest\n } = restWithDeprecated;\n let defaultScreenOptions = {};\n if (tabBarOptions) {\n Object.assign(defaultScreenOptions, {\n tabBarHideOnKeyboard: tabBarOptions.keyboardHidesTabBar,\n tabBarActiveTintColor: tabBarOptions.activeTintColor,\n tabBarInactiveTintColor: tabBarOptions.inactiveTintColor,\n tabBarActiveBackgroundColor: tabBarOptions.activeBackgroundColor,\n tabBarInactiveBackgroundColor: tabBarOptions.inactiveBackgroundColor,\n tabBarAllowFontScaling: tabBarOptions.allowFontScaling,\n tabBarShowLabel: tabBarOptions.showLabel,\n tabBarLabelStyle: tabBarOptions.labelStyle,\n tabBarIconStyle: tabBarOptions.iconStyle,\n tabBarItemStyle: tabBarOptions.tabStyle,\n tabBarLabelPosition: tabBarOptions.labelPosition ?? (tabBarOptions.adaptive === false ? 'below-icon' : undefined),\n tabBarStyle: [{\n display: tabBarOptions.tabBarVisible ? 'none' : 'flex'\n }, defaultScreenOptions.tabBarStyle]\n });\n Object.keys(defaultScreenOptions).forEach(key => {\n if (defaultScreenOptions[key] === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete defaultScreenOptions[key];\n }\n });\n warnOnce(tabBarOptions, `Bottom Tab Navigator: 'tabBarOptions' is deprecated. Migrate the options to 'screenOptions' instead.\\n\\nPlace the following in 'screenOptions' in your code to keep current behavior:\\n\\n${JSON.stringify(defaultScreenOptions, null, 2)}\\n\\nSee https://reactnavigation.org/docs/bottom-tab-navigator#options for more details.`);\n }\n if (typeof lazy === 'boolean') {\n defaultScreenOptions.lazy = lazy;\n warnOnce(true, `Bottom Tab Navigator: 'lazy' in props is deprecated. Move it to 'screenOptions' instead.\\n\\nSee https://reactnavigation.org/docs/bottom-tab-navigator/#lazy for more details.`);\n }\n const {\n state,\n descriptors,\n navigation,\n NavigationContent\n } = useNavigationBuilder(TabRouter, {\n id,\n initialRouteName,\n backBehavior,\n children,\n screenListeners,\n screenOptions,\n defaultScreenOptions\n });\n return /*#__PURE__*/React.createElement(NavigationContent, null, /*#__PURE__*/React.createElement(BottomTabView, _extends({}, rest, {\n state: state,\n navigation: navigation,\n descriptors: descriptors,\n sceneContainerStyle: sceneContainerStyle\n })));\n}\nexport default createNavigatorFactory(BottomTabNavigator);\n//# sourceMappingURL=createBottomTabNavigator.js.map","const DEV = process.env.NODE_ENV !== \"production\";\n\nconst warnings = new Set();\n\nfunction warnOnce(condition, ...rest) {\n if (DEV && condition) {\n const key = rest.join(\" \");\n\n if (warnings.has(key)) {\n return;\n }\n\n warnings.add(key);\n console.warn(...rest);\n }\n}\n\nmodule.exports = warnOnce;\n","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport { getHeaderTitle, Header, SafeAreaProviderCompat, Screen } from '@react-navigation/elements';\nimport * as React from 'react';\nimport { Platform, StyleSheet } from 'react-native';\nimport { SafeAreaInsetsContext } from 'react-native-safe-area-context';\nimport BottomTabBarHeightCallbackContext from '../utils/BottomTabBarHeightCallbackContext';\nimport BottomTabBarHeightContext from '../utils/BottomTabBarHeightContext';\nimport BottomTabBar, { getTabBarHeight } from './BottomTabBar';\nimport { MaybeScreen, MaybeScreenContainer } from './ScreenFallback';\nexport default function BottomTabView(props) {\n const {\n tabBar = props => /*#__PURE__*/React.createElement(BottomTabBar, props),\n state,\n navigation,\n descriptors,\n safeAreaInsets,\n detachInactiveScreens = Platform.OS === 'web' || Platform.OS === 'android' || Platform.OS === 'ios',\n sceneContainerStyle\n } = props;\n const focusedRouteKey = state.routes[state.index].key;\n const [loaded, setLoaded] = React.useState([focusedRouteKey]);\n if (!loaded.includes(focusedRouteKey)) {\n setLoaded([...loaded, focusedRouteKey]);\n }\n const dimensions = SafeAreaProviderCompat.initialMetrics.frame;\n const [tabBarHeight, setTabBarHeight] = React.useState(() => getTabBarHeight({\n state,\n descriptors,\n dimensions,\n layout: {\n width: dimensions.width,\n height: 0\n },\n insets: {\n ...SafeAreaProviderCompat.initialMetrics.insets,\n ...props.safeAreaInsets\n },\n style: descriptors[state.routes[state.index].key].options.tabBarStyle\n }));\n const renderTabBar = () => {\n return /*#__PURE__*/React.createElement(SafeAreaInsetsContext.Consumer, null, insets => tabBar({\n state: state,\n descriptors: descriptors,\n navigation: navigation,\n insets: {\n top: (safeAreaInsets === null || safeAreaInsets === void 0 ? void 0 : safeAreaInsets.top) ?? (insets === null || insets === void 0 ? void 0 : insets.top) ?? 0,\n right: (safeAreaInsets === null || safeAreaInsets === void 0 ? void 0 : safeAreaInsets.right) ?? (insets === null || insets === void 0 ? void 0 : insets.right) ?? 0,\n bottom: (safeAreaInsets === null || safeAreaInsets === void 0 ? void 0 : safeAreaInsets.bottom) ?? (insets === null || insets === void 0 ? void 0 : insets.bottom) ?? 0,\n left: (safeAreaInsets === null || safeAreaInsets === void 0 ? void 0 : safeAreaInsets.left) ?? (insets === null || insets === void 0 ? void 0 : insets.left) ?? 0\n }\n }));\n };\n const {\n routes\n } = state;\n return /*#__PURE__*/React.createElement(SafeAreaProviderCompat, null, /*#__PURE__*/React.createElement(MaybeScreenContainer, {\n enabled: detachInactiveScreens,\n hasTwoStates: true,\n style: styles.container\n }, routes.map((route, index) => {\n const descriptor = descriptors[route.key];\n const {\n lazy = true,\n unmountOnBlur\n } = descriptor.options;\n const isFocused = state.index === index;\n if (unmountOnBlur && !isFocused) {\n return null;\n }\n if (lazy && !loaded.includes(route.key) && !isFocused) {\n // Don't render a lazy screen if we've never navigated to it\n return null;\n }\n const {\n freezeOnBlur,\n header = _ref => {\n let {\n layout,\n options\n } = _ref;\n return /*#__PURE__*/React.createElement(Header, _extends({}, options, {\n layout: layout,\n title: getHeaderTitle(options, route.name)\n }));\n },\n headerShown,\n headerStatusBarHeight,\n headerTransparent\n } = descriptor.options;\n return /*#__PURE__*/React.createElement(MaybeScreen, {\n key: route.key,\n style: [StyleSheet.absoluteFill, {\n zIndex: isFocused ? 0 : -1\n }],\n visible: isFocused,\n enabled: detachInactiveScreens,\n freezeOnBlur: freezeOnBlur\n }, /*#__PURE__*/React.createElement(BottomTabBarHeightContext.Provider, {\n value: tabBarHeight\n }, /*#__PURE__*/React.createElement(Screen, {\n focused: isFocused,\n route: descriptor.route,\n navigation: descriptor.navigation,\n headerShown: headerShown,\n headerStatusBarHeight: headerStatusBarHeight,\n headerTransparent: headerTransparent,\n header: header({\n layout: dimensions,\n route: descriptor.route,\n navigation: descriptor.navigation,\n options: descriptor.options\n }),\n style: sceneContainerStyle\n }, descriptor.render())));\n })), /*#__PURE__*/React.createElement(BottomTabBarHeightCallbackContext.Provider, {\n value: setTabBarHeight\n }, renderTabBar()));\n}\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n overflow: 'hidden'\n }\n});\n//# sourceMappingURL=BottomTabView.js.map","import * as React from 'react';\nexport default /*#__PURE__*/React.createContext(undefined);\n//# sourceMappingURL=BottomTabBarHeightCallbackContext.js.map","import * as React from 'react';\nexport default /*#__PURE__*/React.createContext(undefined);\n//# sourceMappingURL=BottomTabBarHeightContext.js.map","import { MissingIcon } from '@react-navigation/elements';\nimport { CommonActions, NavigationContext, NavigationRouteContext, useLinkBuilder, useTheme } from '@react-navigation/native';\nimport React from 'react';\nimport { Animated, Platform, StyleSheet, View } from 'react-native';\nimport { useSafeAreaFrame } from 'react-native-safe-area-context';\nimport BottomTabBarHeightCallbackContext from '../utils/BottomTabBarHeightCallbackContext';\nimport useIsKeyboardShown from '../utils/useIsKeyboardShown';\nimport BottomTabItem from './BottomTabItem';\nconst DEFAULT_TABBAR_HEIGHT = 49;\nconst COMPACT_TABBAR_HEIGHT = 32;\nconst DEFAULT_MAX_TAB_ITEM_WIDTH = 125;\nconst useNativeDriver = Platform.OS !== 'web';\nconst shouldUseHorizontalLabels = _ref => {\n let {\n state,\n descriptors,\n layout,\n dimensions\n } = _ref;\n const {\n tabBarLabelPosition\n } = descriptors[state.routes[state.index].key].options;\n if (tabBarLabelPosition) {\n switch (tabBarLabelPosition) {\n case 'beside-icon':\n return true;\n case 'below-icon':\n return false;\n }\n }\n if (layout.width >= 768) {\n // Screen size matches a tablet\n const maxTabWidth = state.routes.reduce((acc, route) => {\n const {\n tabBarItemStyle\n } = descriptors[route.key].options;\n const flattenedStyle = StyleSheet.flatten(tabBarItemStyle);\n if (flattenedStyle) {\n if (typeof flattenedStyle.width === 'number') {\n return acc + flattenedStyle.width;\n } else if (typeof flattenedStyle.maxWidth === 'number') {\n return acc + flattenedStyle.maxWidth;\n }\n }\n return acc + DEFAULT_MAX_TAB_ITEM_WIDTH;\n }, 0);\n return maxTabWidth <= layout.width;\n } else {\n return dimensions.width > dimensions.height;\n }\n};\nconst getPaddingBottom = insets => Math.max(insets.bottom - Platform.select({\n ios: 4,\n default: 0\n}), 0);\nexport const getTabBarHeight = _ref2 => {\n var _StyleSheet$flatten;\n let {\n state,\n descriptors,\n dimensions,\n insets,\n style,\n ...rest\n } = _ref2;\n // @ts-ignore\n const customHeight = (_StyleSheet$flatten = StyleSheet.flatten(style)) === null || _StyleSheet$flatten === void 0 ? void 0 : _StyleSheet$flatten.height;\n if (typeof customHeight === 'number') {\n return customHeight;\n }\n const isLandscape = dimensions.width > dimensions.height;\n const horizontalLabels = shouldUseHorizontalLabels({\n state,\n descriptors,\n dimensions,\n ...rest\n });\n const paddingBottom = getPaddingBottom(insets);\n if (Platform.OS === 'ios' && !Platform.isPad && isLandscape && horizontalLabels) {\n return COMPACT_TABBAR_HEIGHT + paddingBottom;\n }\n return DEFAULT_TABBAR_HEIGHT + paddingBottom;\n};\nexport default function BottomTabBar(_ref3) {\n let {\n state,\n navigation,\n descriptors,\n insets,\n style\n } = _ref3;\n const {\n colors\n } = useTheme();\n const buildLink = useLinkBuilder();\n const focusedRoute = state.routes[state.index];\n const focusedDescriptor = descriptors[focusedRoute.key];\n const focusedOptions = focusedDescriptor.options;\n const {\n tabBarShowLabel,\n tabBarHideOnKeyboard = false,\n tabBarVisibilityAnimationConfig,\n tabBarStyle,\n tabBarBackground,\n tabBarActiveTintColor,\n tabBarInactiveTintColor,\n tabBarActiveBackgroundColor,\n tabBarInactiveBackgroundColor\n } = focusedOptions;\n const dimensions = useSafeAreaFrame();\n const isKeyboardShown = useIsKeyboardShown();\n const onHeightChange = React.useContext(BottomTabBarHeightCallbackContext);\n const shouldShowTabBar = !(tabBarHideOnKeyboard && isKeyboardShown);\n const visibilityAnimationConfigRef = React.useRef(tabBarVisibilityAnimationConfig);\n React.useEffect(() => {\n visibilityAnimationConfigRef.current = tabBarVisibilityAnimationConfig;\n });\n const [isTabBarHidden, setIsTabBarHidden] = React.useState(!shouldShowTabBar);\n const [visible] = React.useState(() => new Animated.Value(shouldShowTabBar ? 1 : 0));\n React.useEffect(() => {\n const visibilityAnimationConfig = visibilityAnimationConfigRef.current;\n if (shouldShowTabBar) {\n var _visibilityAnimationC, _visibilityAnimationC2;\n const animation = (visibilityAnimationConfig === null || visibilityAnimationConfig === void 0 ? void 0 : (_visibilityAnimationC = visibilityAnimationConfig.show) === null || _visibilityAnimationC === void 0 ? void 0 : _visibilityAnimationC.animation) === 'spring' ? Animated.spring : Animated.timing;\n animation(visible, {\n toValue: 1,\n useNativeDriver,\n duration: 250,\n ...(visibilityAnimationConfig === null || visibilityAnimationConfig === void 0 ? void 0 : (_visibilityAnimationC2 = visibilityAnimationConfig.show) === null || _visibilityAnimationC2 === void 0 ? void 0 : _visibilityAnimationC2.config)\n }).start(_ref4 => {\n let {\n finished\n } = _ref4;\n if (finished) {\n setIsTabBarHidden(false);\n }\n });\n } else {\n var _visibilityAnimationC3, _visibilityAnimationC4;\n setIsTabBarHidden(true);\n const animation = (visibilityAnimationConfig === null || visibilityAnimationConfig === void 0 ? void 0 : (_visibilityAnimationC3 = visibilityAnimationConfig.hide) === null || _visibilityAnimationC3 === void 0 ? void 0 : _visibilityAnimationC3.animation) === 'spring' ? Animated.spring : Animated.timing;\n animation(visible, {\n toValue: 0,\n useNativeDriver,\n duration: 200,\n ...(visibilityAnimationConfig === null || visibilityAnimationConfig === void 0 ? void 0 : (_visibilityAnimationC4 = visibilityAnimationConfig.hide) === null || _visibilityAnimationC4 === void 0 ? void 0 : _visibilityAnimationC4.config)\n }).start();\n }\n return () => visible.stopAnimation();\n }, [visible, shouldShowTabBar]);\n const [layout, setLayout] = React.useState({\n height: 0,\n width: dimensions.width\n });\n const handleLayout = e => {\n const {\n height,\n width\n } = e.nativeEvent.layout;\n onHeightChange === null || onHeightChange === void 0 ? void 0 : onHeightChange(height);\n setLayout(layout => {\n if (height === layout.height && width === layout.width) {\n return layout;\n } else {\n return {\n height,\n width\n };\n }\n });\n };\n const {\n routes\n } = state;\n const paddingBottom = getPaddingBottom(insets);\n const tabBarHeight = getTabBarHeight({\n state,\n descriptors,\n insets,\n dimensions,\n layout,\n style: [tabBarStyle, style]\n });\n const hasHorizontalLabels = shouldUseHorizontalLabels({\n state,\n descriptors,\n dimensions,\n layout\n });\n const tabBarBackgroundElement = tabBarBackground === null || tabBarBackground === void 0 ? void 0 : tabBarBackground();\n return /*#__PURE__*/React.createElement(Animated.View, {\n style: [styles.tabBar, {\n backgroundColor: tabBarBackgroundElement != null ? 'transparent' : colors.card,\n borderTopColor: colors.border\n }, {\n transform: [{\n translateY: visible.interpolate({\n inputRange: [0, 1],\n outputRange: [layout.height + paddingBottom + StyleSheet.hairlineWidth, 0]\n })\n }],\n // Absolutely position the tab bar so that the content is below it\n // This is needed to avoid gap at bottom when the tab bar is hidden\n position: isTabBarHidden ? 'absolute' : null\n }, {\n height: tabBarHeight,\n paddingBottom,\n paddingHorizontal: Math.max(insets.left, insets.right)\n }, tabBarStyle],\n pointerEvents: isTabBarHidden ? 'none' : 'auto',\n onLayout: handleLayout\n }, /*#__PURE__*/React.createElement(View, {\n pointerEvents: \"none\",\n style: StyleSheet.absoluteFill\n }, tabBarBackgroundElement), /*#__PURE__*/React.createElement(View, {\n accessibilityRole: \"tablist\",\n style: styles.content\n }, routes.map((route, index) => {\n const focused = index === state.index;\n const {\n options\n } = descriptors[route.key];\n const onPress = () => {\n const event = navigation.emit({\n type: 'tabPress',\n target: route.key,\n canPreventDefault: true\n });\n if (!focused && !event.defaultPrevented) {\n navigation.dispatch({\n ...CommonActions.navigate({\n name: route.name,\n merge: true\n }),\n target: state.key\n });\n }\n };\n const onLongPress = () => {\n navigation.emit({\n type: 'tabLongPress',\n target: route.key\n });\n };\n const label = options.tabBarLabel !== undefined ? options.tabBarLabel : options.title !== undefined ? options.title : route.name;\n const accessibilityLabel = options.tabBarAccessibilityLabel !== undefined ? options.tabBarAccessibilityLabel : typeof label === 'string' && Platform.OS === 'ios' ? `${label}, tab, ${index + 1} of ${routes.length}` : undefined;\n return /*#__PURE__*/React.createElement(NavigationContext.Provider, {\n key: route.key,\n value: descriptors[route.key].navigation\n }, /*#__PURE__*/React.createElement(NavigationRouteContext.Provider, {\n value: route\n }, /*#__PURE__*/React.createElement(BottomTabItem, {\n route: route,\n descriptor: descriptors[route.key],\n focused: focused,\n horizontal: hasHorizontalLabels,\n onPress: onPress,\n onLongPress: onLongPress,\n accessibilityLabel: accessibilityLabel,\n to: buildLink(route.name, route.params),\n testID: options.tabBarTestID,\n allowFontScaling: options.tabBarAllowFontScaling,\n activeTintColor: tabBarActiveTintColor,\n inactiveTintColor: tabBarInactiveTintColor,\n activeBackgroundColor: tabBarActiveBackgroundColor,\n inactiveBackgroundColor: tabBarInactiveBackgroundColor,\n button: options.tabBarButton,\n icon: options.tabBarIcon ?? (_ref5 => {\n let {\n color,\n size\n } = _ref5;\n return /*#__PURE__*/React.createElement(MissingIcon, {\n color: color,\n size: size\n });\n }),\n badge: options.tabBarBadge,\n badgeStyle: options.tabBarBadgeStyle,\n label: label,\n showLabel: tabBarShowLabel,\n labelStyle: options.tabBarLabelStyle,\n iconStyle: options.tabBarIconStyle,\n style: options.tabBarItemStyle\n })));\n })));\n}\nconst styles = StyleSheet.create({\n tabBar: {\n left: 0,\n right: 0,\n bottom: 0,\n borderTopWidth: StyleSheet.hairlineWidth,\n elevation: 8\n },\n content: {\n flex: 1,\n flexDirection: 'row'\n }\n});\n//# sourceMappingURL=BottomTabBar.js.map","import * as React from 'react';\nimport { Keyboard, Platform } from 'react-native';\nexport default function useIsKeyboardShown() {\n const [isKeyboardShown, setIsKeyboardShown] = React.useState(false);\n React.useEffect(() => {\n const handleKeyboardShow = () => setIsKeyboardShown(true);\n const handleKeyboardHide = () => setIsKeyboardShown(false);\n let subscriptions;\n if (Platform.OS === 'ios') {\n subscriptions = [Keyboard.addListener('keyboardWillShow', handleKeyboardShow), Keyboard.addListener('keyboardWillHide', handleKeyboardHide)];\n } else {\n subscriptions = [Keyboard.addListener('keyboardDidShow', handleKeyboardShow), Keyboard.addListener('keyboardDidHide', handleKeyboardHide)];\n }\n return () => {\n subscriptions.forEach(s => s.remove());\n };\n }, []);\n return isKeyboardShown;\n}\n//# sourceMappingURL=useIsKeyboardShown.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport { Link, useTheme } from '@react-navigation/native';\nimport Color from 'color';\nimport React from 'react';\nimport { Platform, Pressable, StyleSheet, Text } from 'react-native';\nimport TabBarIcon from './TabBarIcon';\nexport default function BottomTabBarItem(_ref) {\n let {\n focused,\n route,\n descriptor,\n label,\n icon,\n badge,\n badgeStyle,\n to,\n button = _ref2 => {\n let {\n children,\n style,\n onPress,\n to,\n accessibilityRole,\n ...rest\n } = _ref2;\n if (Platform.OS === 'web' && to) {\n // React Native Web doesn't forward `onClick` if we use `TouchableWithoutFeedback`.\n // We need to use `onClick` to be able to prevent default browser handling of links.\n return /*#__PURE__*/React.createElement(Link, _extends({}, rest, {\n to: to,\n style: [styles.button, style],\n onPress: e => {\n if (!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) && (\n // ignore clicks with modifier keys\n e.button == null || e.button === 0) // ignore everything but left clicks\n ) {\n e.preventDefault();\n onPress === null || onPress === void 0 ? void 0 : onPress(e);\n }\n }\n }), children);\n } else {\n return /*#__PURE__*/React.createElement(Pressable, _extends({}, rest, {\n accessibilityRole: accessibilityRole,\n onPress: onPress,\n style: style\n }), children);\n }\n },\n accessibilityLabel,\n testID,\n onPress,\n onLongPress,\n horizontal,\n activeTintColor: customActiveTintColor,\n inactiveTintColor: customInactiveTintColor,\n activeBackgroundColor = 'transparent',\n inactiveBackgroundColor = 'transparent',\n showLabel = true,\n allowFontScaling,\n labelStyle,\n iconStyle,\n style\n } = _ref;\n const {\n colors\n } = useTheme();\n const activeTintColor = customActiveTintColor === undefined ? colors.primary : customActiveTintColor;\n const inactiveTintColor = customInactiveTintColor === undefined ? Color(colors.text).mix(Color(colors.card), 0.5).hex() : customInactiveTintColor;\n const renderLabel = _ref3 => {\n let {\n focused\n } = _ref3;\n if (showLabel === false) {\n return null;\n }\n const color = focused ? activeTintColor : inactiveTintColor;\n if (typeof label === 'string') {\n return /*#__PURE__*/React.createElement(Text, {\n numberOfLines: 1,\n style: [styles.label, {\n color\n }, horizontal ? styles.labelBeside : styles.labelBeneath, labelStyle],\n allowFontScaling: allowFontScaling\n }, label);\n }\n const {\n options\n } = descriptor;\n const children = typeof options.tabBarLabel === 'string' ? options.tabBarLabel : options.title !== undefined ? options.title : route.name;\n return label({\n focused,\n color,\n position: horizontal ? 'beside-icon' : 'below-icon',\n children\n });\n };\n const renderIcon = _ref4 => {\n let {\n focused\n } = _ref4;\n if (icon === undefined) {\n return null;\n }\n const activeOpacity = focused ? 1 : 0;\n const inactiveOpacity = focused ? 0 : 1;\n return /*#__PURE__*/React.createElement(TabBarIcon, {\n route: route,\n horizontal: horizontal,\n badge: badge,\n badgeStyle: badgeStyle,\n activeOpacity: activeOpacity,\n inactiveOpacity: inactiveOpacity,\n activeTintColor: activeTintColor,\n inactiveTintColor: inactiveTintColor,\n renderIcon: icon,\n style: iconStyle\n });\n };\n const scene = {\n route,\n focused\n };\n const backgroundColor = focused ? activeBackgroundColor : inactiveBackgroundColor;\n return button({\n to,\n onPress,\n onLongPress,\n testID,\n accessibilityLabel,\n // FIXME: accessibilityRole: 'tab' doesn't seem to work as expected on iOS\n accessibilityRole: Platform.select({\n ios: 'button',\n default: 'tab'\n }),\n accessibilityState: {\n selected: focused\n },\n // @ts-expect-error: keep for compatibility with older React Native versions\n accessibilityStates: focused ? ['selected'] : [],\n style: [styles.tab, {\n backgroundColor\n }, horizontal ? styles.tabLandscape : styles.tabPortrait, style],\n children: /*#__PURE__*/React.createElement(React.Fragment, null, renderIcon(scene), renderLabel(scene))\n });\n}\nconst styles = StyleSheet.create({\n tab: {\n flex: 1,\n alignItems: 'center'\n },\n tabPortrait: {\n justifyContent: 'flex-end',\n flexDirection: 'column'\n },\n tabLandscape: {\n justifyContent: 'center',\n flexDirection: 'row'\n },\n label: {\n textAlign: 'center',\n backgroundColor: 'transparent'\n },\n labelBeneath: {\n fontSize: 10\n },\n labelBeside: {\n fontSize: 13,\n marginLeft: 20,\n marginTop: 3\n },\n button: {\n display: 'flex'\n }\n});\n//# sourceMappingURL=BottomTabItem.js.map","const colorString = require('color-string');\nconst convert = require('color-convert');\n\nconst skippedModels = [\n\t// To be honest, I don't really feel like keyword belongs in color convert, but eh.\n\t'keyword',\n\n\t// Gray conflicts with some method names, and has its own method defined.\n\t'gray',\n\n\t// Shouldn't really be in color-convert either...\n\t'hex',\n];\n\nconst hashedModelKeys = {};\nfor (const model of Object.keys(convert)) {\n\thashedModelKeys[[...convert[model].labels].sort().join('')] = model;\n}\n\nconst limiters = {};\n\nfunction Color(object, model) {\n\tif (!(this instanceof Color)) {\n\t\treturn new Color(object, model);\n\t}\n\n\tif (model && model in skippedModels) {\n\t\tmodel = null;\n\t}\n\n\tif (model && !(model in convert)) {\n\t\tthrow new Error('Unknown model: ' + model);\n\t}\n\n\tlet i;\n\tlet channels;\n\n\tif (object == null) { // eslint-disable-line no-eq-null,eqeqeq\n\t\tthis.model = 'rgb';\n\t\tthis.color = [0, 0, 0];\n\t\tthis.valpha = 1;\n\t} else if (object instanceof Color) {\n\t\tthis.model = object.model;\n\t\tthis.color = [...object.color];\n\t\tthis.valpha = object.valpha;\n\t} else if (typeof object === 'string') {\n\t\tconst result = colorString.get(object);\n\t\tif (result === null) {\n\t\t\tthrow new Error('Unable to parse color from string: ' + object);\n\t\t}\n\n\t\tthis.model = result.model;\n\t\tchannels = convert[this.model].channels;\n\t\tthis.color = result.value.slice(0, channels);\n\t\tthis.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1;\n\t} else if (object.length > 0) {\n\t\tthis.model = model || 'rgb';\n\t\tchannels = convert[this.model].channels;\n\t\tconst newArray = Array.prototype.slice.call(object, 0, channels);\n\t\tthis.color = zeroArray(newArray, channels);\n\t\tthis.valpha = typeof object[channels] === 'number' ? object[channels] : 1;\n\t} else if (typeof object === 'number') {\n\t\t// This is always RGB - can be converted later on.\n\t\tthis.model = 'rgb';\n\t\tthis.color = [\n\t\t\t(object >> 16) & 0xFF,\n\t\t\t(object >> 8) & 0xFF,\n\t\t\tobject & 0xFF,\n\t\t];\n\t\tthis.valpha = 1;\n\t} else {\n\t\tthis.valpha = 1;\n\n\t\tconst keys = Object.keys(object);\n\t\tif ('alpha' in object) {\n\t\t\tkeys.splice(keys.indexOf('alpha'), 1);\n\t\t\tthis.valpha = typeof object.alpha === 'number' ? object.alpha : 0;\n\t\t}\n\n\t\tconst hashedKeys = keys.sort().join('');\n\t\tif (!(hashedKeys in hashedModelKeys)) {\n\t\t\tthrow new Error('Unable to parse color from object: ' + JSON.stringify(object));\n\t\t}\n\n\t\tthis.model = hashedModelKeys[hashedKeys];\n\n\t\tconst {labels} = convert[this.model];\n\t\tconst color = [];\n\t\tfor (i = 0; i < labels.length; i++) {\n\t\t\tcolor.push(object[labels[i]]);\n\t\t}\n\n\t\tthis.color = zeroArray(color);\n\t}\n\n\t// Perform limitations (clamping, etc.)\n\tif (limiters[this.model]) {\n\t\tchannels = convert[this.model].channels;\n\t\tfor (i = 0; i < channels; i++) {\n\t\t\tconst limit = limiters[this.model][i];\n\t\t\tif (limit) {\n\t\t\t\tthis.color[i] = limit(this.color[i]);\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.valpha = Math.max(0, Math.min(1, this.valpha));\n\n\tif (Object.freeze) {\n\t\tObject.freeze(this);\n\t}\n}\n\nColor.prototype = {\n\ttoString() {\n\t\treturn this.string();\n\t},\n\n\ttoJSON() {\n\t\treturn this[this.model]();\n\t},\n\n\tstring(places) {\n\t\tlet self = this.model in colorString.to ? this : this.rgb();\n\t\tself = self.round(typeof places === 'number' ? places : 1);\n\t\tconst args = self.valpha === 1 ? self.color : [...self.color, this.valpha];\n\t\treturn colorString.to[self.model](args);\n\t},\n\n\tpercentString(places) {\n\t\tconst self = this.rgb().round(typeof places === 'number' ? places : 1);\n\t\tconst args = self.valpha === 1 ? self.color : [...self.color, this.valpha];\n\t\treturn colorString.to.rgb.percent(args);\n\t},\n\n\tarray() {\n\t\treturn this.valpha === 1 ? [...this.color] : [...this.color, this.valpha];\n\t},\n\n\tobject() {\n\t\tconst result = {};\n\t\tconst {channels} = convert[this.model];\n\t\tconst {labels} = convert[this.model];\n\n\t\tfor (let i = 0; i < channels; i++) {\n\t\t\tresult[labels[i]] = this.color[i];\n\t\t}\n\n\t\tif (this.valpha !== 1) {\n\t\t\tresult.alpha = this.valpha;\n\t\t}\n\n\t\treturn result;\n\t},\n\n\tunitArray() {\n\t\tconst rgb = this.rgb().color;\n\t\trgb[0] /= 255;\n\t\trgb[1] /= 255;\n\t\trgb[2] /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.push(this.valpha);\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tunitObject() {\n\t\tconst rgb = this.rgb().object();\n\t\trgb.r /= 255;\n\t\trgb.g /= 255;\n\t\trgb.b /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.alpha = this.valpha;\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tround(places) {\n\t\tplaces = Math.max(places || 0, 0);\n\t\treturn new Color([...this.color.map(roundToPlace(places)), this.valpha], this.model);\n\t},\n\n\talpha(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color([...this.color, Math.max(0, Math.min(1, value))], this.model);\n\t\t}\n\n\t\treturn this.valpha;\n\t},\n\n\t// Rgb\n\tred: getset('rgb', 0, maxfn(255)),\n\tgreen: getset('rgb', 1, maxfn(255)),\n\tblue: getset('rgb', 2, maxfn(255)),\n\n\thue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, value => ((value % 360) + 360) % 360),\n\n\tsaturationl: getset('hsl', 1, maxfn(100)),\n\tlightness: getset('hsl', 2, maxfn(100)),\n\n\tsaturationv: getset('hsv', 1, maxfn(100)),\n\tvalue: getset('hsv', 2, maxfn(100)),\n\n\tchroma: getset('hcg', 1, maxfn(100)),\n\tgray: getset('hcg', 2, maxfn(100)),\n\n\twhite: getset('hwb', 1, maxfn(100)),\n\twblack: getset('hwb', 2, maxfn(100)),\n\n\tcyan: getset('cmyk', 0, maxfn(100)),\n\tmagenta: getset('cmyk', 1, maxfn(100)),\n\tyellow: getset('cmyk', 2, maxfn(100)),\n\tblack: getset('cmyk', 3, maxfn(100)),\n\n\tx: getset('xyz', 0, maxfn(95.047)),\n\ty: getset('xyz', 1, maxfn(100)),\n\tz: getset('xyz', 2, maxfn(108.833)),\n\n\tl: getset('lab', 0, maxfn(100)),\n\ta: getset('lab', 1),\n\tb: getset('lab', 2),\n\n\tkeyword(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\treturn convert[this.model].keyword(this.color);\n\t},\n\n\thex(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\treturn colorString.to.hex(this.rgb().round().color);\n\t},\n\n\thexa(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\tconst rgbArray = this.rgb().round().color;\n\n\t\tlet alphaHex = Math.round(this.valpha * 255).toString(16).toUpperCase();\n\t\tif (alphaHex.length === 1) {\n\t\t\talphaHex = '0' + alphaHex;\n\t\t}\n\n\t\treturn colorString.to.hex(rgbArray) + alphaHex;\n\t},\n\n\trgbNumber() {\n\t\tconst rgb = this.rgb().color;\n\t\treturn ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF);\n\t},\n\n\tluminosity() {\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\tconst rgb = this.rgb().color;\n\n\t\tconst lum = [];\n\t\tfor (const [i, element] of rgb.entries()) {\n\t\t\tconst chan = element / 255;\n\t\t\tlum[i] = (chan <= 0.04045) ? chan / 12.92 : ((chan + 0.055) / 1.055) ** 2.4;\n\t\t}\n\n\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t},\n\n\tcontrast(color2) {\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\tconst lum1 = this.luminosity();\n\t\tconst lum2 = color2.luminosity();\n\n\t\tif (lum1 > lum2) {\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t}\n\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t},\n\n\tlevel(color2) {\n\t\t// https://www.w3.org/TR/WCAG/#contrast-enhanced\n\t\tconst contrastRatio = this.contrast(color2);\n\t\tif (contrastRatio >= 7) {\n\t\t\treturn 'AAA';\n\t\t}\n\n\t\treturn (contrastRatio >= 4.5) ? 'AA' : '';\n\t},\n\n\tisDark() {\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\tconst rgb = this.rgb().color;\n\t\tconst yiq = (rgb[0] * 2126 + rgb[1] * 7152 + rgb[2] * 722) / 10000;\n\t\treturn yiq < 128;\n\t},\n\n\tisLight() {\n\t\treturn !this.isDark();\n\t},\n\n\tnegate() {\n\t\tconst rgb = this.rgb();\n\t\tfor (let i = 0; i < 3; i++) {\n\t\t\trgb.color[i] = 255 - rgb.color[i];\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tlighten(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[2] += hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdarken(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[2] -= hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tsaturate(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[1] += hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdesaturate(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[1] -= hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\twhiten(ratio) {\n\t\tconst hwb = this.hwb();\n\t\thwb.color[1] += hwb.color[1] * ratio;\n\t\treturn hwb;\n\t},\n\n\tblacken(ratio) {\n\t\tconst hwb = this.hwb();\n\t\thwb.color[2] += hwb.color[2] * ratio;\n\t\treturn hwb;\n\t},\n\n\tgrayscale() {\n\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n\t\tconst rgb = this.rgb().color;\n\t\tconst value = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\treturn Color.rgb(value, value, value);\n\t},\n\n\tfade(ratio) {\n\t\treturn this.alpha(this.valpha - (this.valpha * ratio));\n\t},\n\n\topaquer(ratio) {\n\t\treturn this.alpha(this.valpha + (this.valpha * ratio));\n\t},\n\n\trotate(degrees) {\n\t\tconst hsl = this.hsl();\n\t\tlet hue = hsl.color[0];\n\t\thue = (hue + degrees) % 360;\n\t\thue = hue < 0 ? 360 + hue : hue;\n\t\thsl.color[0] = hue;\n\t\treturn hsl;\n\t},\n\n\tmix(mixinColor, weight) {\n\t\t// Ported from sass implementation in C\n\t\t// https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n\t\tif (!mixinColor || !mixinColor.rgb) {\n\t\t\tthrow new Error('Argument to \"mix\" was not a Color instance, but rather an instance of ' + typeof mixinColor);\n\t\t}\n\n\t\tconst color1 = mixinColor.rgb();\n\t\tconst color2 = this.rgb();\n\t\tconst p = weight === undefined ? 0.5 : weight;\n\n\t\tconst w = 2 * p - 1;\n\t\tconst a = color1.alpha() - color2.alpha();\n\n\t\tconst w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2;\n\t\tconst w2 = 1 - w1;\n\n\t\treturn Color.rgb(\n\t\t\tw1 * color1.red() + w2 * color2.red(),\n\t\t\tw1 * color1.green() + w2 * color2.green(),\n\t\t\tw1 * color1.blue() + w2 * color2.blue(),\n\t\t\tcolor1.alpha() * p + color2.alpha() * (1 - p));\n\t},\n};\n\n// Model conversion methods and static constructors\nfor (const model of Object.keys(convert)) {\n\tif (skippedModels.includes(model)) {\n\t\tcontinue;\n\t}\n\n\tconst {channels} = convert[model];\n\n\t// Conversion methods\n\tColor.prototype[model] = function (...args) {\n\t\tif (this.model === model) {\n\t\t\treturn new Color(this);\n\t\t}\n\n\t\tif (args.length > 0) {\n\t\t\treturn new Color(args, model);\n\t\t}\n\n\t\treturn new Color([...assertArray(convert[this.model][model].raw(this.color)), this.valpha], model);\n\t};\n\n\t// 'static' construction methods\n\tColor[model] = function (...args) {\n\t\tlet color = args[0];\n\t\tif (typeof color === 'number') {\n\t\t\tcolor = zeroArray(args, channels);\n\t\t}\n\n\t\treturn new Color(color, model);\n\t};\n}\n\nfunction roundTo(number, places) {\n\treturn Number(number.toFixed(places));\n}\n\nfunction roundToPlace(places) {\n\treturn function (number) {\n\t\treturn roundTo(number, places);\n\t};\n}\n\nfunction getset(model, channel, modifier) {\n\tmodel = Array.isArray(model) ? model : [model];\n\n\tfor (const m of model) {\n\t\t(limiters[m] || (limiters[m] = []))[channel] = modifier;\n\t}\n\n\tmodel = model[0];\n\n\treturn function (value) {\n\t\tlet result;\n\n\t\tif (value !== undefined) {\n\t\t\tif (modifier) {\n\t\t\t\tvalue = modifier(value);\n\t\t\t}\n\n\t\t\tresult = this[model]();\n\t\t\tresult.color[channel] = value;\n\t\t\treturn result;\n\t\t}\n\n\t\tresult = this[model]().color[channel];\n\t\tif (modifier) {\n\t\t\tresult = modifier(result);\n\t\t}\n\n\t\treturn result;\n\t};\n}\n\nfunction maxfn(max) {\n\treturn function (v) {\n\t\treturn Math.max(0, Math.min(max, v));\n\t};\n}\n\nfunction assertArray(value) {\n\treturn Array.isArray(value) ? value : [value];\n}\n\nfunction zeroArray(array, length) {\n\tfor (let i = 0; i < length; i++) {\n\t\tif (typeof array[i] !== 'number') {\n\t\t\tarray[i] = 0;\n\t\t}\n\t}\n\n\treturn array;\n}\n\nmodule.exports = Color;\n","const conversions = require('./conversions');\nconst route = require('./route');\n\nconst convert = {};\n\nconst models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\tconst result = fn(args);\n\n\t\t// We're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (let len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(fromModel => {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tconst routes = route(fromModel);\n\tconst routeModels = Object.keys(routes);\n\n\trouteModels.forEach(toModel => {\n\t\tconst fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nmodule.exports = convert;\n","/* MIT license */\n/* eslint-disable no-mixed-operators */\nconst cssKeywords = require('color-name');\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `typeof` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nconst reverseKeywords = {};\nfor (const key of Object.keys(cssKeywords)) {\n\treverseKeywords[cssKeywords[key]] = key;\n}\n\nconst convert = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\nmodule.exports = convert;\n\n// Hide .channels and .labels properties\nfor (const model of Object.keys(convert)) {\n\tif (!('channels' in convert[model])) {\n\t\tthrow new Error('missing channels property: ' + model);\n\t}\n\n\tif (!('labels' in convert[model])) {\n\t\tthrow new Error('missing channel labels property: ' + model);\n\t}\n\n\tif (convert[model].labels.length !== convert[model].channels) {\n\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t}\n\n\tconst {channels, labels} = convert[model];\n\tdelete convert[model].channels;\n\tdelete convert[model].labels;\n\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\tObject.defineProperty(convert[model], 'labels', {value: labels});\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst min = Math.min(r, g, b);\n\tconst max = Math.max(r, g, b);\n\tconst delta = max - min;\n\tlet h;\n\tlet s;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst l = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tlet rdif;\n\tlet gdif;\n\tlet bdif;\n\tlet h;\n\tlet s;\n\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst v = Math.max(r, g, b);\n\tconst diff = v - Math.min(r, g, b);\n\tconst diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = 0;\n\t\ts = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tconst r = rgb[0];\n\tconst g = rgb[1];\n\tlet b = rgb[2];\n\tconst h = convert.rgb.hsl(rgb)[0];\n\tconst w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\n\tconst k = Math.min(1 - r, 1 - g, 1 - b);\n\tconst c = (1 - r - k) / (1 - k) || 0;\n\tconst m = (1 - g - k) / (1 - k) || 0;\n\tconst y = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\nfunction comparativeDistance(x, y) {\n\t/*\n\t\tSee https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n\t*/\n\treturn (\n\t\t((x[0] - y[0]) ** 2) +\n\t\t((x[1] - y[1]) ** 2) +\n\t\t((x[2] - y[2]) ** 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tconst reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tlet currentClosestDistance = Infinity;\n\tlet currentClosestKeyword;\n\n\tfor (const keyword of Object.keys(cssKeywords)) {\n\t\tconst value = cssKeywords[keyword];\n\n\t\t// Compute comparative distance\n\t\tconst distance = comparativeDistance(rgb, value);\n\n\t\t// Check if its less, if so set as closest\n\t\tif (distance < currentClosestDistance) {\n\t\t\tcurrentClosestDistance = distance;\n\t\t\tcurrentClosestKeyword = keyword;\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tlet r = rgb[0] / 255;\n\tlet g = rgb[1] / 255;\n\tlet b = rgb[2] / 255;\n\n\t// Assume sRGB\n\tr = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92);\n\n\tconst x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tconst y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tconst z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tconst xyz = convert.rgb.xyz(rgb);\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tconst h = hsl[0] / 360;\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\tlet t2;\n\tlet t3;\n\tlet val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tconst t1 = 2 * l - t2;\n\n\tconst rgb = [0, 0, 0];\n\tfor (let i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tconst h = hsl[0];\n\tlet s = hsl[1] / 100;\n\tlet l = hsl[2] / 100;\n\tlet smin = s;\n\tconst lmin = Math.max(l, 0.01);\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tconst v = (l + s) / 2;\n\tconst sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tconst h = hsv[0] / 60;\n\tconst s = hsv[1] / 100;\n\tlet v = hsv[2] / 100;\n\tconst hi = Math.floor(h) % 6;\n\n\tconst f = h - Math.floor(h);\n\tconst p = 255 * v * (1 - s);\n\tconst q = 255 * v * (1 - (s * f));\n\tconst t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tconst h = hsv[0];\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\tconst vmin = Math.max(v, 0.01);\n\tlet sl;\n\tlet l;\n\n\tl = (2 - s) * v;\n\tconst lmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tconst h = hwb[0] / 360;\n\tlet wh = hwb[1] / 100;\n\tlet bl = hwb[2] / 100;\n\tconst ratio = wh + bl;\n\tlet f;\n\n\t// Wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\tconst i = Math.floor(6 * h);\n\tconst v = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tconst n = wh + f * (v - wh); // Linear interpolation\n\n\tlet r;\n\tlet g;\n\tlet b;\n\t/* eslint-disable max-statements-per-line,no-multi-spaces */\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\t/* eslint-enable max-statements-per-line,no-multi-spaces */\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tconst c = cmyk[0] / 100;\n\tconst m = cmyk[1] / 100;\n\tconst y = cmyk[2] / 100;\n\tconst k = cmyk[3] / 100;\n\n\tconst r = 1 - Math.min(1, c * (1 - k) + k);\n\tconst g = 1 - Math.min(1, m * (1 - k) + k);\n\tconst b = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tconst x = xyz[0] / 100;\n\tconst y = xyz[1] / 100;\n\tconst z = xyz[2] / 100;\n\tlet r;\n\tlet g;\n\tlet b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// Assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * (r ** (1.0 / 2.4))) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * (g ** (1.0 / 2.4))) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * (b ** (1.0 / 2.4))) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet x;\n\tlet y;\n\tlet z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tconst y2 = y ** 3;\n\tconst x2 = x ** 3;\n\tconst z2 = z ** 3;\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet h;\n\n\tconst hr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst c = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tconst l = lch[0];\n\tconst c = lch[1];\n\tconst h = lch[2];\n\n\tconst hr = h / 360 * 2 * Math.PI;\n\tconst a = c * Math.cos(hr);\n\tconst b = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args, saturation = null) {\n\tconst [r, g, b] = args;\n\tlet value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tlet ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// Optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tconst r = args[0];\n\tconst g = args[1];\n\tconst b = args[2];\n\n\t// We use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tconst ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tlet color = args % 10;\n\n\t// Handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tconst mult = (~~(args > 50) + 1) * 0.5;\n\tconst r = ((color & 1) * mult) * 255;\n\tconst g = (((color >> 1) & 1) * mult) * 255;\n\tconst b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// Handle greyscale\n\tif (args >= 232) {\n\t\tconst c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tlet rem;\n\tconst r = Math.floor(args / 36) / 5 * 255;\n\tconst g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tconst b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tconst integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tconst match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tlet colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(char => {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tconst integer = parseInt(colorString, 16);\n\tconst r = (integer >> 16) & 0xFF;\n\tconst g = (integer >> 8) & 0xFF;\n\tconst b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst max = Math.max(Math.max(r, g), b);\n\tconst min = Math.min(Math.min(r, g), b);\n\tconst chroma = (max - min);\n\tlet grayscale;\n\tlet hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\n\tconst c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));\n\n\tlet f = 0;\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\n\tconst c = s * v;\n\tlet f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tconst h = hcg[0] / 360;\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tconst pure = [0, 0, 0];\n\tconst hi = (h % 1) * 6;\n\tconst v = hi % 1;\n\tconst w = 1 - v;\n\tlet mg = 0;\n\n\t/* eslint-disable max-statements-per-line */\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\t/* eslint-enable max-statements-per-line */\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst v = c + g * (1.0 - c);\n\tlet f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst l = g * (1.0 - c) + 0.5 * c;\n\tlet s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\tconst v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tconst w = hwb[1] / 100;\n\tconst b = hwb[2] / 100;\n\tconst v = 1 - b;\n\tconst c = v - w;\n\tlet g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hsv = convert.gray.hsl;\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tconst val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tconst integer = (val << 16) + (val << 8) + val;\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tconst val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","const conversions = require('./conversions');\n\n/*\n\tThis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tconst graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tconst models = Object.keys(conversions);\n\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tconst graph = buildGraph();\n\tconst queue = [fromModel]; // Unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tconst current = queue.pop();\n\t\tconst adjacents = Object.keys(conversions[current]);\n\n\t\tfor (let len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tconst adjacent = adjacents[i];\n\t\t\tconst node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tconst path = [graph[toModel].parent, toModel];\n\tlet fn = conversions[graph[toModel].parent][toModel];\n\n\tlet cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nmodule.exports = function (fromModel) {\n\tconst graph = deriveBFS(fromModel);\n\tconst conversion = {};\n\n\tconst models = Object.keys(graph);\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tconst toModel = models[i];\n\t\tconst node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// No possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\n","import React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport Badge from './Badge';\nexport default function TabBarIcon(_ref) {\n let {\n route: _,\n horizontal,\n badge,\n badgeStyle,\n activeOpacity,\n inactiveOpacity,\n activeTintColor,\n inactiveTintColor,\n renderIcon,\n style\n } = _ref;\n const size = 25;\n\n // We render the icon twice at the same position on top of each other:\n // active and inactive one, so we can fade between them.\n return /*#__PURE__*/React.createElement(View, {\n style: [horizontal ? styles.iconHorizontal : styles.iconVertical, style]\n }, /*#__PURE__*/React.createElement(View, {\n style: [styles.icon, {\n opacity: activeOpacity\n }]\n }, renderIcon({\n focused: true,\n size,\n color: activeTintColor\n })), /*#__PURE__*/React.createElement(View, {\n style: [styles.icon, {\n opacity: inactiveOpacity\n }]\n }, renderIcon({\n focused: false,\n size,\n color: inactiveTintColor\n })), /*#__PURE__*/React.createElement(Badge, {\n visible: badge != null,\n style: [styles.badge, horizontal ? styles.badgeHorizontal : styles.badgeVertical, badgeStyle],\n size: size * 3 / 4\n }, badge));\n}\nconst styles = StyleSheet.create({\n icon: {\n // We render the icon twice at the same position on top of each other:\n // active and inactive one, so we can fade between them:\n // Cover the whole iconContainer:\n position: 'absolute',\n alignSelf: 'center',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n width: '100%',\n // Workaround for react-native >= 0.54 layout bug\n minWidth: 25\n },\n iconVertical: {\n flex: 1\n },\n iconHorizontal: {\n height: '100%',\n marginTop: 3\n },\n badge: {\n position: 'absolute',\n left: 3\n },\n badgeVertical: {\n top: 3\n },\n badgeHorizontal: {\n top: 7\n }\n});\n//# sourceMappingURL=TabBarIcon.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport { useTheme } from '@react-navigation/native';\nimport color from 'color';\nimport * as React from 'react';\nimport { Animated, StyleSheet } from 'react-native';\nexport default function Badge(_ref) {\n let {\n children,\n style,\n visible = true,\n size = 18,\n ...rest\n } = _ref;\n const [opacity] = React.useState(() => new Animated.Value(visible ? 1 : 0));\n const [rendered, setRendered] = React.useState(visible);\n const theme = useTheme();\n React.useEffect(() => {\n if (!rendered) {\n return;\n }\n Animated.timing(opacity, {\n toValue: visible ? 1 : 0,\n duration: 150,\n useNativeDriver: true\n }).start(_ref2 => {\n let {\n finished\n } = _ref2;\n if (finished && !visible) {\n setRendered(false);\n }\n });\n return () => opacity.stopAnimation();\n }, [opacity, rendered, visible]);\n if (!rendered) {\n if (visible) {\n setRendered(true);\n } else {\n return null;\n }\n }\n\n // @ts-expect-error: backgroundColor definitely exists\n const {\n backgroundColor = theme.colors.notification,\n ...restStyle\n } = StyleSheet.flatten(style) || {};\n const textColor = color(backgroundColor).isLight() ? 'black' : 'white';\n const borderRadius = size / 2;\n const fontSize = Math.floor(size * 3 / 4);\n return /*#__PURE__*/React.createElement(Animated.Text, _extends({\n numberOfLines: 1,\n style: [{\n transform: [{\n scale: opacity.interpolate({\n inputRange: [0, 1],\n outputRange: [0.5, 1]\n })\n }],\n color: textColor,\n lineHeight: size - 1,\n height: size,\n minWidth: size,\n opacity,\n backgroundColor,\n fontSize,\n borderRadius\n }, styles.container, restStyle]\n }, rest), children);\n}\nconst styles = StyleSheet.create({\n container: {\n alignSelf: 'flex-end',\n textAlign: 'center',\n paddingHorizontal: 4,\n overflow: 'hidden'\n }\n});\n//# sourceMappingURL=Badge.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport { ResourceSavingView } from '@react-navigation/elements';\nimport * as React from 'react';\nimport { View } from 'react-native';\nlet Screens;\ntry {\n Screens = require('react-native-screens');\n} catch (e) {\n // Ignore\n}\nexport const MaybeScreenContainer = _ref => {\n var _Screens, _Screens$screensEnabl;\n let {\n enabled,\n ...rest\n } = _ref;\n if ((_Screens = Screens) !== null && _Screens !== void 0 && (_Screens$screensEnabl = _Screens.screensEnabled) !== null && _Screens$screensEnabl !== void 0 && _Screens$screensEnabl.call(_Screens)) {\n return /*#__PURE__*/React.createElement(Screens.ScreenContainer, _extends({\n enabled: enabled\n }, rest));\n }\n return /*#__PURE__*/React.createElement(View, rest);\n};\nexport function MaybeScreen(_ref2) {\n var _Screens2, _Screens2$screensEnab;\n let {\n visible,\n children,\n ...rest\n } = _ref2;\n if ((_Screens2 = Screens) !== null && _Screens2 !== void 0 && (_Screens2$screensEnab = _Screens2.screensEnabled) !== null && _Screens2$screensEnab !== void 0 && _Screens2$screensEnab.call(_Screens2)) {\n return /*#__PURE__*/React.createElement(Screens.Screen, _extends({\n activityState: visible ? 2 : 0\n }, rest), children);\n }\n return /*#__PURE__*/React.createElement(ResourceSavingView, _extends({\n visible: visible\n }, rest), children);\n}\n//# sourceMappingURL=ScreenFallback.js.map","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from 'react';\nimport { Animated, View, Image } from 'react-native';\nexport * from './types';\nexport { default as useTransitionProgress } from './useTransitionProgress';\nexport { isSearchBarAvailableForCurrentPlatform, isNewBackTitleImplementation, executeNativeBackPress } from './utils';\nlet ENABLE_SCREENS = true;\nexport function enableScreens() {\n let shouldEnableScreens = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n ENABLE_SCREENS = shouldEnableScreens;\n}\nexport function screensEnabled() {\n return ENABLE_SCREENS;\n}\n\n// @ts-ignore function stub, freezing logic is located in index.native.tsx\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function enableFreeze() {\n let shouldEnableReactFreeze = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n} // noop\n\nexport class NativeScreen extends React.Component {\n render() {\n let {\n active,\n activityState,\n style,\n enabled = ENABLE_SCREENS,\n ...rest\n } = this.props;\n if (enabled) {\n if (active !== undefined && activityState === undefined) {\n activityState = active !== 0 ? 2 : 0; // change taken from index.native.tsx\n }\n\n return /*#__PURE__*/React.createElement(View\n // @ts-expect-error: hidden exists on web, but not in React Native\n , _extends({\n hidden: activityState === 0,\n style: [style, {\n display: activityState !== 0 ? 'flex' : 'none'\n }]\n }, rest));\n }\n return /*#__PURE__*/React.createElement(View, rest);\n }\n}\nexport const Screen = Animated.createAnimatedComponent(NativeScreen);\nexport const InnerScreen = View;\nexport const ScreenContext = /*#__PURE__*/React.createContext(Screen);\nexport const ScreenContainer = View;\nexport const NativeScreenContainer = View;\nexport const NativeScreenNavigationContainer = View;\nexport const ScreenStack = View;\nexport const FullWindowOverlay = View;\nexport const ScreenStackHeaderBackButtonImage = props => /*#__PURE__*/React.createElement(View, null, /*#__PURE__*/React.createElement(Image, _extends({\n resizeMode: \"center\",\n fadeDuration: 0\n}, props)));\nexport const ScreenStackHeaderRightView = props => /*#__PURE__*/React.createElement(View, props);\nexport const ScreenStackHeaderLeftView = props => /*#__PURE__*/React.createElement(View, props);\nexport const ScreenStackHeaderCenterView = props => /*#__PURE__*/React.createElement(View, props);\nexport const ScreenStackHeaderSearchBarView = props => /*#__PURE__*/React.createElement(View, props);\nexport const ScreenStackHeaderConfig = props => /*#__PURE__*/React.createElement(View, props);\n\n// @ts-expect-error: search bar props have no common props with View\nexport const SearchBar = View;\nexport const ScreenStackHeaderSubview = View;\nexport const shouldUseActivityState = true;\n//# sourceMappingURL=index.js.map","export {};\n//# sourceMappingURL=types.js.map","import * as React from 'react';\nimport TransitionProgressContext from './TransitionProgressContext';\nexport default function useTransitionProgress() {\n const progress = React.useContext(TransitionProgressContext);\n if (progress === undefined) {\n throw new Error(\"Couldn't find values for transition progress. Are you inside a screen in Native Stack?\");\n }\n return progress;\n}\n//# sourceMappingURL=useTransitionProgress.js.map","import * as React from 'react';\nexport default /*#__PURE__*/React.createContext(undefined);\n//# sourceMappingURL=TransitionProgressContext.js.map","import { BackHandler, Platform } from 'react-native';\nexport const isSearchBarAvailableForCurrentPlatform = ['ios', 'android'].includes(Platform.OS);\nexport function executeNativeBackPress() {\n // This function invokes the native back press event\n BackHandler.exitApp();\n return true;\n}\n\n// Because of a bug introduced in https://github.com/software-mansion/react-native-screens/pull/1646\n// react-native-screens v3.21 changed how header's backTitle handles whitespace strings in https://github.com/software-mansion/react-native-screens/pull/1726\n// To allow for backwards compatibility in @react-navigation/native-stack we need a way to check if this version or newer is used.\n// See https://github.com/react-navigation/react-navigation/pull/11423 for more context.\nexport const isNewBackTitleImplementation = true;\n//# sourceMappingURL=utils.js.map","function emptyFunction() {}\nvar BackHandler = {\n exitApp: emptyFunction,\n addEventListener: () => ({ remove: emptyFunction }),\n removeEventListener: emptyFunction,\n};\nexport default BackHandler;\n","import * as React from 'react';\nimport BottomTabBarHeightContext from './BottomTabBarHeightContext';\nexport default function useBottomTabBarHeight() {\n const height = React.useContext(BottomTabBarHeightContext);\n if (height === undefined) {\n throw new Error(\"Couldn't find the bottom tab bar height. Are you inside a screen in Bottom Tab Navigator?\");\n }\n return height;\n}\n//# sourceMappingURL=useBottomTabBarHeight.js.map","import * as React from 'react';\nimport { Image, StyleSheet, Text, Pressable } from 'react-native';\nimport { createNativeStackNavigator } from '@react-navigation/native-stack';\nimport { Map } from \"./Map\";\nimport { LocationDetails } from \"./LocationDetails\";\nimport { ProductDetails } from \"./ProductDetails\";\nimport * as AppConstants from \"../context/AppConstants\";\nimport * as AppUtilities from \"../context/AppUtilities\";\nimport { useSelector, useDispatch } from 'react-redux';\nimport { FilterSlider } from '../components/FilterSlider';\nimport { HeaderLeft } from '../components/HeaderLeft';\nimport { Filter } from \"./Filter\";\n\nconst Stack = createNativeStackNavigator();\n\nconst styles = StyleSheet.create({\n mainImage: {\n width: 224,\n height: 38,\n },\n appleStoreImage: {\n width: 102,\n height: 30,\n marginRight: 20,\n },\n androidStoreImage: {\n width: 101,\n height: 30,\n marginRight: 20,\n },\n});\n\nexport function MapStack() {\n const showHeader = useSelector((state) => state.showHeader);\n const showFilterSlider = useSelector((state) => state.showFilterSlider);\n\n let mainImage = ;\n if (AppUtilities.isWeb()) {\n mainImage = {mainImage};\n }\n\n return (\n ({\n headerRight: AppUtilities.getHeaderRight(navigation),\n headerTitle: (props) => <>,\n detachPreviousScreen: false,\n animationEnabled: false,\n headerShown: showHeader,\n headerBackVisible: false,\n headerBackTitleVisible: false,\n })}\n >\n ({\n headerLeft: (props) => {mainImage},\n headerRight: () => (\n AppUtilities.isWeb() ?\n AppUtilities.isWebiOS() ?\n AppUtilities.openLink(AppConstants.APPLE_STORE_LINK)}>\n \n \n :\n AppUtilities.isWebAndroid() ?\n AppUtilities.openLink(AppConstants.ANDROID_STORE_LINK)}>\n \n \n :\n null\n :\n null\n ),\n })}\n />\n ({\n headerLeft: (props) => ,\n headerRight: () => showFilterSlider ? : null,\n })}\n />\n ({\n headerLeft: (props) => ,\n })}\n />\n ({\n headerLeft: (props) => ,\n })}\n />\n \n );\n}\n","import * as React from 'react';\nimport { View, StyleSheet } from 'react-native';\nimport { MapView } from '../components/MapView';\nimport { MapAds } from './MapAds';\nimport { FilterSlider } from '../components/FilterSlider';\nimport { useSelector, useDispatch } from 'react-redux';\nimport * as AppUtilities from \"../context/AppUtilities\";\nimport * as AppConstants from \"../context/AppConstants\";\nimport { useAssets } from \"expo-asset\";\n\nconst styles = StyleSheet.create({\n wrapper: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n },\n ads: {\n position: \"absolute\",\n bottom: 10,\n },\n filters: {\n position: \"absolute\",\n left: 10,\n backgroundColor: \"white\",\n borderRadius: 2,\n shadowColor: \"rgba(0, 0, 0, 0.3)\",\n shadowOffset: {width: 1, height: 1},\n },\n});\n\nconst mapPinOffsets = {\n [AppConstants.MAP_PIN_NAMES.GENERIC]: 4,\n [AppConstants.MAP_PIN_NAMES.CART]: 5,\n [AppConstants.MAP_PIN_NAMES.DINING]: 6,\n [AppConstants.MAP_PIN_NAMES.COFFEE_SHOP]: 7,\n [AppConstants.MAP_PIN_NAMES.FARMERS_MARKET]: 8,\n [AppConstants.MAP_PIN_NAMES.FARM]: 9,\n [AppConstants.MAP_PIN_NAMES.SEARCH]: 10,\n}\n\nexport function Map({ navigation }) {\n const showFilterSlider = useSelector((state) => state.showFilterSlider);\n const [isFocused, setIsFocused] = React.useState(false);\n const [assets, assetsErrors] = useAssets([\n require('../../assets/crosshairs-gps-grey-25.png'),\n require('../../assets/plus-minus-variant-grey-25.png'),\n require('../../assets/truck-outline-grey-25.png'),\n require('../../assets/filter-outline-darkgrey.png'),\n require('../../assets/pins/pin_filled.png'),\n require('../../assets/pins/pin_cart.png'),\n require('../../assets/pins/pin_cutlery.png'),\n require('../../assets/pins/pin_coffee.png'),\n require('../../assets/pins/pin_farmersmarket.png'),\n require('../../assets/pins/pin_farm.png'),\n require('../../assets/pins/pin_grey_search.png'),\n ]);\n\n React.useEffect(() => {\n if (navigation) {\n return navigation.addListener(\"focus\", () => {\n AppUtilities.info(\"Map focus\");\n setIsFocused(true);\n });\n }\n }, [navigation]);\n\n React.useEffect(() => {\n if (navigation) {\n return navigation.addListener(\"blur\", () => {\n AppUtilities.info(\"Map blur\");\n setIsFocused(false);\n });\n }\n }, [navigation]);\n\n if (!assets) return null;\n\n return (\n \n {\n assets ?\n \n :\n null\n }\n \n \n \n {\n showFilterSlider ?\n \n \n \n :\n null\n }\n \n );\n}\n","// MapView for web/browser\n\nimport * as React from 'react';\nimport { InteractionManager, StyleSheet } from 'react-native';\nimport Constants from 'expo-constants';\nimport { Wrapper, Status } from \"@googlemaps/react-wrapper\";\n\n// https://github.com/googlemaps/js-markerclusterer/pull/570\n// https://github.com/googlemaps/js-markerclusterer/pull/640\nimport { MarkerClusterer, SuperClusterViewportAlgorithm } from \"@googlemaps/markerclusterer\";\n//import { DefaultRenderer, MarkerClusterer, NoopAlgorithm, GridAlgorithm, SuperClusterAlgorithm, SuperClusterViewportAlgorithm } from \"@googlemaps/markerclusterer\";\n//import { DefaultRenderer, MarkerClusterer, NoopAlgorithm, GridAlgorithm, SuperClusterAlgorithm } from \"markerclustererfh\";\n\n//import { interpolateRgb } from \"d3-interpolate\";\nimport * as AppUtilities from \"../context/AppUtilities\";\nimport * as AppConstants from \"../context/AppConstants\";\nimport * as Location from 'expo-location';\nimport { useNavigation } from '@react-navigation/native';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { AppContext } from \"../context/AppContext\";\nimport * as AppState from \"../context/AppState\";\nimport { MapSearch } from './MapSearch';\nimport { CustomActivityIndicator } from './CustomActivityIndicator';\n\n// https://googlemaps.github.io/js-markerclusterer/public/renderers/\n\n// DefaultRenderer\n\n/*\nclass PinRenderer {\n render({ count, position }, stats) {\n return new google.maps.Marker({\n label: { text: String(count), color: \"white\", fontSize: \"10px\" },\n position,\n // adjust zIndex to be above other markers\n zIndex: Number(google.maps.Marker.MAX_ZINDEX) + count,\n });\n }\n}\n*/\n\n// Based on https://github.com/googlemaps/js-markerclusterer/blob/main/src/renderer.ts#L107\n/*class CircleRenderer {\n constructor() {\n this.palette = interpolateRgb(\"red\", \"blue\");\n }\n render({ count, position }, stats) {\n // use d3-interpolateRgb to interpolate between red and blue\n const color = this.palette(count / stats.clusters.markers.max);\n // create svg url with fill color\n const svg = window.btoa(`\n \n \n `);\n // create marker using svg icon\n return new google.maps.Marker({\n position,\n icon: {\n url: `data:image/svg+xml;base64,${svg}`,\n scaledSize: new google.maps.Size(45, 45),\n },\n label: {\n text: String(count),\n color: \"rgba(255,255,255,0.9)\",\n fontSize: \"12px\",\n },\n // adjust zIndex to be above other markers\n zIndex: Number(google.maps.Marker.MAX_ZINDEX) + count,\n });\n }\n}*/\n\n/*class CircleRendererCustomized {\n render({ count, position }, stats) {\n return new google.maps.Marker({\n position,\n // https://developers.google.com/maps/documentation/javascript/symbols#properties\n icon: {\n path: google.maps.SymbolPath.CIRCLE,\n fillColor: '#ff0000',\n strokeColor: '#ff0000',\n fillOpacity: 1,\n scale: 10, // width/height = 22*scale\n },\n label: {\n text: String(count),\n color: \"#ffffff\",\n fontSize: \"12px\",\n fontWeight: \"bold\",\n },\n // adjust zIndex to be above other markers\n zIndex: google.maps.Marker.MAX_ZINDEX + count,\n optimized: true,\n });\n }\n}*/\n\n/*\nconst RED_CIRCLE_ICON = {\n url: \"data:image/svg+xml;base64,\" + window.btoa(`\n \n \n \n `),\n};\n*/\n\nconst RED_CIRCLE_ICON = {\n url: \"data:image/svg+xml;base64,\" + window.btoa(`\n \n \n \n `),\n};\n\nconst ICON_TEXT_COLOR = \"#ffffff\";\nconst ICON_TEXT_FONT_SIZE = \"12px\";\nconst ICON_TEXT_FONT_WEIGHT = \"bold\";\n\n// Might be called multiple times so check the status\n// This is used because otherwise APIs like google.maps aren't loaded yet in the global scope\nfunction googleMapsLoaderCallback(status, loader) {\n if (status == \"SUCCESS\") {\n if (!RED_CIRCLE_ICON.scaledSize) {\n RED_CIRCLE_ICON.scaledSize = new google.maps.Size(50, 50);\n }\n }\n}\n\nclass CircleRendererCustomized2 {\n render({ count, position }, stats) {\n return new google.maps.Marker({\n position,\n icon: RED_CIRCLE_ICON,\n label: {\n text: String(count),\n color: ICON_TEXT_COLOR,\n fontSize: ICON_TEXT_FONT_SIZE,\n fontWeight: ICON_TEXT_FONT_WEIGHT,\n },\n // markers with a larger count should be on top\n zIndex: google.maps.Marker.MAX_ZINDEX + count,\n\n // https://developers.google.com/maps/documentation/javascript/markers#optimize\n // Unclear exactly how this works, no perceivable performance difference, and the\n // docs state that the API will try to optimize when possible\n //optimized: true,\n });\n }\n}\n\n/*\n// Based on https://github.com/googlemaps/js-markerclusterer/blob/main/src/renderer.ts#L107\nclass OrbedCircleRenderer {\n render({ count, position }, stats) {\n // create svg url with fill color\n\n // #ff0000 creates red; #0000ff creates blue\n\n const svg = window.btoa(`\n \n \n \n \n `);\n\n // create marker using svg icon\n return new google.maps.Marker({\n position,\n icon: {\n url: `data:image/svg+xml;base64,${svg}`,\n scaledSize: new google.maps.Size(45, 45),\n },\n label: {\n text: String(count),\n color: \"rgba(255,255,255,0.9)\",\n fontSize: \"12px\",\n },\n title: `Cluster of ${count} locations`,\n // adjust zIndex to be above other markers\n zIndex: Number(google.maps.Marker.MAX_ZINDEX) + count,\n });\n }\n}\n*/\n\nfunction MyMapComponent({ icons, mapPinOffsets, isFocused }) {\n const navigation = useNavigation();\n const mapDiv = React.useRef(null);\n const map = React.useRef(null);\n const infoWindowPopup = React.useRef(null);\n const deliveryImageWrapper = React.useRef(null);\n const locationButton = React.useRef(null);\n const { showPermanentSnack, showTemporarySnack, hideSnack, getLoginState, showSpinner, hideSpinner } = React.useContext(AppContext);\n const dispatch = useDispatch();\n const [clusterer, setClusterer] = React.useState();\n const locations = useSelector((state) => state.locations);\n const firstZoom = useSelector((state) => state.firstZoom);\n const detailedZoom = useSelector((state) => state.detailedZoom);\n const lightMode = useSelector((state) => state.lightMode);\n const extraDebug = useSelector((state) => state.extraDebug);\n const initialCenter = useSelector((state) => state.initialCenter);\n const initialZoom = useSelector((state) => state.initialZoom);\n const showZoomControls = useSelector((state) => state.showZoomControls);\n const shouldAskToMoveToCurrentLocation = useSelector((state) => state.shouldAskToMoveToCurrentLocation);\n const shouldShowSearch = useSelector((state) => state.shouldShowSearch);\n const moveMap = useSelector((state) => state.moveMap);\n const dataFilter = useSelector((state) => state.dataFilter);\n const lastProcessedDataFilterID = React.useRef(null);\n const [mapFullyLoaded, setMapFullyLoaded] = React.useState(false);\n const isFirstMapLoad = React.useRef(true);\n const lastGPSLocation = useSelector((state) => state.lastGPSLocation);\n const lastGPSMarker = React.useRef(null);\n const lastSearchMarker = React.useRef(null);\n\n // Once the div is ready, initialize the map\n React.useEffect(() => {\n if (mapDiv.current) {\n\n const rightIconsPosition = google.maps.ControlPosition.RIGHT_BOTTOM;\n\n // https://developers.google.com/maps/documentation/javascript/reference/map\n // https://developers.google.com/maps/documentation/javascript/reference/map#MapOptions\n\n const mapOptions = {\n center: initialCenter,\n zoom: initialZoom,\n styles: AppConstants.MAP_FEATURES,\n streetViewControl: false,\n mapTypeControl: false, // Hide top left Map/Satellite buttons\n fullscreenControl: false,\n zoomControlOptions: {\n position: rightIconsPosition,\n },\n };\n\n if (!showZoomControls) {\n mapOptions.zoomControl = false;\n }\n\n map.current = new google.maps.Map(mapDiv.current, mapOptions);\n\n // GPS button\n locationButton.current = document.createElement(\"img\");\n locationButton.current.src = icons[0].uri;\n locationButton.current.classList.add(\"custom-map-control-button\");\n locationButton.current.style = \"background-color: #fff; border: 0; border-radius: 2px; box-shadow: 0 1px 4px -1px rgba(0, 0, 0, 0.3); margin: 10px; padding: 8px; overflow: hidden; cursor: pointer;\";\n locationButton.current.addEventListener(\"click\", moveToGPSZoomed);\n map.current.controls[rightIconsPosition].push(locationButton.current);\n\n // Filter button\n /*const moreButton1 = document.createElement(\"img\");\n moreButton1.src = icons[3].uri;\n moreButton1.classList.add(\"custom-map-control-button\");\n moreButton1.style = \"background-color: #fff; border: 0; border-radius: 2px; box-shadow: 0 1px 4px -1px rgba(0, 0, 0, 0.3); margin: 10px; padding: 8px; overflow: hidden; cursor: pointer;\";\n moreButton1.addEventListener(\"click\", async () => {\n navigation.navigate(AppConstants.SCREENS.FILTER);\n });\n map.current.controls[google.maps.ControlPosition.LEFT_CENTER].push(moreButton1);*/\n\n // Delivery truck button\n\n /*\n deliveryImageWrapper.current = document.createElement(\"div\");\n deliveryImageWrapper.current.style = \"cursor: pointer;\";\n deliveryImageWrapper.current.addEventListener(\"click\", async () => {\n navigation.navigate(AppConstants.SCREENS.DELIVERY_STACK);\n });\n const moreButton2 = document.createElement(\"img\");\n moreButton2.src = icons[2].uri;\n moreButton2.classList.add(\"custom-map-control-button\");\n moreButton2.style = \"background-color: #fff; border: 0; border-radius: 2px; box-shadow: 0 1px 4px -1px rgba(0, 0, 0, 0.3); margin: 10px; padding: 8px; overflow: hidden; cursor: pointer;\";\n deliveryImageWrapper.current.appendChild(moreButton2);\n deliveryCount.current = document.createElement(\"span\");\n deliveryCount.current.textContent = \"\";\n deliveryCount.current.style = \"\";\n deliveryImageWrapper.current.appendChild(deliveryCount.current);\n map.current.controls[google.maps.ControlPosition.LEFT_TOP].push(deliveryImageWrapper.current);\n */\n\n // https://developers.google.com/maps/documentation/javascript/reference/info-window\n infoWindowPopup.current = new google.maps.InfoWindow({\n content: \"\",\n //disableAutoPan: true,\n });\n map.current.addListener(\"click\", closeInfoPopup);\n map.current.addListener(\"idle\", onMoveMapIdle);\n\n google.maps.event.addListenerOnce(map.current, 'tilesloaded', onTilesLoaded);\n }\n }, [mapDiv]);\n\n // Update the little badge on the delivery truck button\n /*\n React.useEffect(() => {\n if (deliveryCount.current && locations_online) {\n if (locations_online.length > 0) {\n deliveryCount.current.textContent = \"\" + locations_online.length;\n deliveryCount.current.style = \"font-size: 13px; position: absolute; top: 5px; right: 5px; color: white; background-color: red; padding: 2px; border: 0; border-radius: 10px; min-width: 15px; text-align: center; font-weight: bold;\";\n } else {\n deliveryCount.current.textContent = \"\";\n deliveryCount.current.style = \"\";\n }\n }\n }, [locations_online]);\n */\n\n React.useEffect(() => {\n AppUtilities.info(\"MapView lightMode status: \" + lightMode);\n if (lightMode) {\n if (deliveryImageWrapper.current) {\n deliveryImageWrapper.current.style.setProperty(\"display\", \"none\");\n }\n locationButton.current.style.setProperty(\"display\", \"none\");\n const builtInImages = document.getElementsByClassName(\"gm-control-active\");\n if (builtInImages && builtInImages.length > 0) {\n builtInImages[0].parentNode.style.setProperty(\"display\", \"none\");\n }\n } else {\n if (deliveryImageWrapper.current) {\n deliveryImageWrapper.current.style.setProperty(\"display\", \"block\");\n }\n locationButton.current.style.setProperty(\"display\", \"inline\");\n const builtInImages = document.getElementsByClassName(\"gm-control-active\");\n if (builtInImages && builtInImages.length > 0) {\n builtInImages[0].parentNode.style.setProperty(\"display\", \"inline\");\n }\n }\n }, [lightMode]);\n\n async function moveToGPSZoomed() {\n moveToGPS(false);\n }\n\n async function moveToGPS(initialZoom) {\n AppUtilities.info(\"MapView.moveToGPS: initialMove: \" + (initialZoom ? \"true\" : \"false\"));\n try {\n const location = await Location.getCurrentPositionAsync({});\n AppUtilities.info(\"MapView.moveToGPS: received location: \" + AppUtilities.toJSONPretty(location));\n closeInfoPopup();\n map.current.panTo({ lat: location.coords.latitude, lng: location.coords.longitude });\n if (initialZoom) {\n map.current.setZoom(firstZoom);\n } else {\n map.current.setZoom(detailedZoom);\n }\n dispatch(AppState.createDispatch(AppConstants.DISPATCH.UPDATE_LAST_GPS_LOCATION, {\n lat: location.coords.latitude,\n lng: location.coords.longitude,\n }));\n } catch (e) {\n // User may have simply blocked the operation\n AppUtilities.info(\"MapView.moveToGPS: Error doing geolocation: \" + AppUtilities.getErrors(e));\n try {\n if (!initialZoom) {\n if (e instanceof GeolocationPositionError) {\n // https://developer.mozilla.org/en-US/docs/Web/API/GeolocationPositionError\n if (e.code == 1) {\n showTemporarySnack(\"Permission denied. Check your browser to enable geolocation permissions for this page and try again.\");\n } else if (e.code == 2) {\n showTemporarySnack(\"Geolocation failed because your device's source of position returned an internal error.\");\n } else if (e.code == 3) {\n showTemporarySnack(\"Geolocation failed because your device's source of position timed out.\");\n }\n }\n }\n } catch (innerException) {\n AppUtilities.handleException(innerException, \"MapView.moveToGPS inner\");\n }\n }\n\n if (initialZoom) {\n await AppState.checkAndHandleInitialLoad(showTemporarySnack, () => navigation.navigate(AppConstants.SCREENS.LEARN));\n }\n }\n\n function closeInfoPopup() {\n if (infoWindowPopup.current) {\n try {\n infoWindowPopup.current.close();\n } catch (e) {\n AppUtilities.info(\"MapView.closeInfoPopup: Error closing popup: \" + AppUtilities.getErrors(e));\n }\n } else {\n AppUtilities.info(\"MapView.closeInfoPopup: Error closing popup: \" + AppUtilities.getErrors(e));\n }\n }\n\n function onMoveMapIdle() {\n if (map.current) {\n var center = map.current.getCenter();\n if (center) {\n const lat = center.lat();\n const lng = center.lng();\n //console.log(\"onMoveMapIdle \" + lat + \",\" + lng);\n // https://developers.google.com/maps/documentation/javascript/reference/map#Map.getCenter\n dispatch(AppState.createDispatch(AppConstants.DISPATCH.SET_MAP_CENTER, {\n lat: lat,\n lng: lng,\n }));\n }\n }\n }\n\n async function onTilesLoaded() {\n AppUtilities.info(\"MapView.onTilesLoaded map finished loading tiles\");\n setMapFullyLoaded(true);\n }\n\n // Once the tiles are loaded, then we can load the actual locations\n // Also used by search\n async function updateMapLocations() {\n try {\n showSpinner();\n hideSnack();\n\n AppUtilities.info(\"MapView.updateMapLocations fetching data\");\n\n if (getLoginState() == AppConstants.LOGIN_STATE.LOGGED_IN_LOCALLY ||\n getLoginState() == AppConstants.LOGIN_STATE.LOGGED_IN_REMOTELY) {\n\n let response = await AppUtilities.fetchUnauthorized(\n \"MapView.updateMapLocations\",\n AppUtilities.getMainDataLink(dataFilter),\n \"GET\",\n );\n\n if (response.body) {\n hideSpinner();\n lastProcessedDataFilterID.current = dataFilter[AppConstants.SYNTHESIZED_TYPES.QUERY_ID[AppConstants.TYPE_KEYS.URL_KEY]];\n\n const locs = AppUtilities.postProcessResultsLocations(response.body);\n const locationsCount = Object.keys(locs).length;\n\n AppUtilities.info(\"MapView.updateMapLocations locations: \" + locationsCount + \", online: \" + response.body.locations_online.length);\n\n dispatch(AppState.createDispatch(AppConstants.DISPATCH.SET_INITIAL_DATA, {\n locations: locs,\n locations_online: response.body.locations_online,\n ads: response.body.ads,\n }));\n\n AppUtilities.checkSearchResults(locationsCount, showTemporarySnack);\n } else {\n throw new Error(\"Result body not found\");\n }\n\n if (isFirstMapLoad.current) {\n isFirstMapLoad.current = false;\n\n if (shouldAskToMoveToCurrentLocation) {\n moveToGPS(true);\n }\n InteractionManager.runAfterInteractions(() => {\n AppUtilities.onFirstInitializedMap();\n }); \n }\n }\n } catch (e) {\n showPermanentSnack(AppUtilities.getErrors(e), \"Retry\", updateMapLocations);\n hideSpinner();\n AppUtilities.handleException(e, \"MapView.updateMapLocations\");\n }\n }\n\n React.useEffect(() => {\n if (map.current && locations) {\n\n const actualMarkers = [];\n\n /*\n google.maps.event.addListener(map.current, 'idle', function() {\n // https://developers.google.com/maps/documentation/javascript/reference/map#Map.getBounds\n // https://developers.google.com/maps/documentation/javascript/reference/coordinates#LatLngBounds\n var bounds = map.current.getBounds();\n console.log(\"MapView Google Maps idled\");\n //console.dir(bounds);\n //returns an object with the NorthEast and SouthWest LatLng points of the bounds\n // remove the current markers from the map and the cluster object, \n // and add the new ones along with their event handlers and re-add to the cluster object as well\n });\n */\n\n for (const [key, marker] of Object.entries(locations)) {\n const actualMarker = new google.maps.Marker({\n position: {\n lat: marker.l,\n lng: marker.g,\n },\n icon: icons[mapPinOffsets[marker.p ? AppConstants.MAP_PIN_TYPES[marker.p] : AppConstants.MAP_PIN_NAMES.GENERIC]].uri,\n title: marker.t,\n });\n //actualMarker.addListener(\"click\", clickHandler);\n\n actualMarker.addListener(\"click\", () => {\n infoWindowPopup.current.setContent(`\n \n

${AppUtilities.escapeHTML(marker.t)}${extraDebug ? \" (\" + marker.i + \")\" : \"\"}

\n

List certified products

\n
\n `);\n\n // https://developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.open\n // https://developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindowOpenOptions\n infoWindowPopup.current.open({\n map: map.current,\n anchor: actualMarker,\n // Otherwise the close button gets focus and a blue border\n shouldFocus: false,\n });\n map.current.panTo(actualMarker.getPosition());\n });\n\n actualMarkers.push(actualMarker);\n }\n\n if (lastSearchMarker.current) {\n actualMarkers.push(lastSearchMarker.current);\n }\n if (lastGPSMarker.current) {\n actualMarkers.push(lastGPSMarker.current);\n }\n\n // https://googlemaps.github.io/js-markerclusterer/interfaces/MarkerClustererOptions.html\n if (!clusterer) {\n let newClusterer = new MarkerClusterer({\n map: map.current,\n markers: actualMarkers,\n //renderer: new DefaultRenderer(),\n renderer: new CircleRendererCustomized2(),\n //renderer: new OrbedCircleRenderer(),\n //algorithm: new NoopAlgorithm(),\n //algorithm: new GridAlgorithm({}),\n //algorithm: new SuperClusterAlgorithm({}),\n algorithm: new SuperClusterViewportAlgorithm({\n maxZoom: 17, // In case pins overlap\n viewportPadding: 60,\n }),\n });\n\n google.maps.event.addListener(newClusterer, 'click', function(cluster) {\n // If the info window is open, we have to close it first before\n // the clusterer can zoom in\n closeInfoPopup();\n });\n\n setClusterer(newClusterer);\n } else {\n clusterer.clearMarkers();\n clusterer.addMarkers(actualMarkers);\n }\n }\n }, [locations]);\n\n React.useEffect(() => {\n if (locations) {\n\n const mapInfoClick = (e) => {\n const marker = locations[e.detail];\n if (marker && marker.i && !marker.i.toString().startsWith(\"cluster\")) {\n navigation.navigate(AppConstants.SCREENS.LOCATION_DETAILS, { locationid: marker.i });\n }\n };\n\n const keydownHandler = (e) => {\n if(e.keyCode == 27) {\n // ESC pressed\n closeInfoPopup();\n }\n };\n\n document.addEventListener(\"map-info-click\", mapInfoClick);\n document.addEventListener(\"keydown\", keydownHandler);\n\n return () => {\n document.removeEventListener(\"map-info-click\", mapInfoClick);\n document.removeEventListener(\"keydown\", keydownHandler);\n };\n }\n }, [locations]);\n\n React.useEffect(() => {\n if (moveMap && map.current) {\n map.current.panTo({ lat: moveMap.latitude, lng: moveMap.longitude });\n map.current.setZoom(moveMap.zoom);\n\n if (clusterer) {\n if (lastSearchMarker.current) {\n clusterer.removeMarker(lastSearchMarker.current);\n }\n lastSearchMarker.current = new google.maps.Marker({\n position: {\n lat: moveMap.latitude,\n lng: moveMap.longitude,\n },\n icon: icons[mapPinOffsets[AppConstants.MAP_PIN_NAMES.SEARCH]].uri,\n title: moveMap.description,\n cursor: \"help\",\n });\n clusterer.addMarker(lastSearchMarker.current);\n }\n }\n }, [moveMap, clusterer]);\n\n React.useEffect(() => {\n if (dataFilter && mapFullyLoaded && isFocused && lastProcessedDataFilterID.current != dataFilter[AppConstants.SYNTHESIZED_TYPES.QUERY_ID[AppConstants.TYPE_KEYS.URL_KEY]]) {\n updateMapLocations();\n }\n }, [dataFilter, mapFullyLoaded, isFocused]);\n\n React.useEffect(() => {\n if (lastGPSLocation && clusterer) {\n if (lastGPSMarker.current) {\n clusterer.removeMarker(lastGPSMarker.current);\n }\n lastGPSMarker.current = new google.maps.Marker({\n position: {\n lat: lastGPSLocation.lat,\n lng: lastGPSLocation.lng,\n },\n //icon: icons[mapPinOffsets[AppConstants.MAP_PIN_NAMES.GPS]].uri,\n icon: icons[0].uri,\n clickable: false,\n });\n clusterer.addMarker(lastGPSMarker.current);\n }\n }, [lastGPSLocation, clusterer]);\n\n return (\n <>\n
\n {\n shouldShowSearch ?\n \n :\n null\n }\n \n );\n}\n\nexport function MapView({ icons, isFocused, mapPinOffsets }) {\n const renderNonMap = (status) => {\n if (status == Status.LOADING) {\n //return

Loading...

;\n return ;\n }\n\n // Return null on Status.SUCCESS and no need to handle Status.FAILURE as Google Maps will render:\n // Oops! Somethin went wrong.\n // This page didn't load Google Maps correctly. See the JavaScript console for technical details.\n return null;\n };\n\n return (\n \n \n \n );\n}\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@googlemaps/js-api-loader'), require('react')) :\n typeof define === 'function' && define.amd ? define(['exports', '@googlemaps/js-api-loader', 'react'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Loader = {}, global.jsApiLoader, global.React));\n})(this, (function (exports, jsApiLoader, React) { 'use strict';\n\n function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\n var React__default = /*#__PURE__*/_interopDefaultLegacy(React);\n\n /**\n * Copyright 2021 Google LLC. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at.\n *\n * Http://www.apache.org/licenses/LICENSE-2.0.\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n exports.Status = void 0;\n (function (Status) {\n Status[\"LOADING\"] = \"LOADING\";\n Status[\"FAILURE\"] = \"FAILURE\";\n Status[\"SUCCESS\"] = \"SUCCESS\";\n })(exports.Status || (exports.Status = {}));\n /**\n * A component to wrap the loading of the Google Maps JavaScript API.\n *\n * ```\n * import { Wrapper } from '@googlemaps/react-wrapper';\n *\n * const MyApp = () => (\n * \t\n * \t\t\n * \t\n * );\n * ```\n *\n * @param props\n */\n const Wrapper = ({ children, render, callback, ...options }) => {\n const [status, setStatus] = React.useState(exports.Status.LOADING);\n React.useEffect(() => {\n const loader = new jsApiLoader.Loader(options);\n const setStatusAndExecuteCallback = (status) => {\n if (callback)\n callback(status, loader);\n setStatus(status);\n };\n setStatusAndExecuteCallback(exports.Status.LOADING);\n loader.load().then(() => setStatusAndExecuteCallback(exports.Status.SUCCESS), () => setStatusAndExecuteCallback(exports.Status.FAILURE));\n }, []);\n if (status === exports.Status.SUCCESS && children)\n return React__default[\"default\"].createElement(React__default[\"default\"].Fragment, null, children);\n if (render)\n return render(status);\n return React__default[\"default\"].createElement(React__default[\"default\"].Fragment, null);\n };\n\n exports.Wrapper = Wrapper;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nvar fastDeepEqual = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n\nvar isEqual = /*@__PURE__*/getDefaultExportFromCjs(fastDeepEqual);\n\n/**\n * Copyright 2019 Google LLC. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at.\n *\n * Http://www.apache.org/licenses/LICENSE-2.0.\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEFAULT_ID = \"__googleMapsScriptId\";\n/**\n * The status of the [[Loader]].\n */\nvar LoaderStatus;\n(function (LoaderStatus) {\n LoaderStatus[LoaderStatus[\"INITIALIZED\"] = 0] = \"INITIALIZED\";\n LoaderStatus[LoaderStatus[\"LOADING\"] = 1] = \"LOADING\";\n LoaderStatus[LoaderStatus[\"SUCCESS\"] = 2] = \"SUCCESS\";\n LoaderStatus[LoaderStatus[\"FAILURE\"] = 3] = \"FAILURE\";\n})(LoaderStatus || (LoaderStatus = {}));\n/**\n * [[Loader]] makes it easier to add Google Maps JavaScript API to your application\n * dynamically using\n * [Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n * It works by dynamically creating and appending a script node to the the\n * document head and wrapping the callback function so as to return a promise.\n *\n * ```\n * const loader = new Loader({\n * apiKey: \"\",\n * version: \"weekly\",\n * libraries: [\"places\"]\n * });\n *\n * loader.load().then((google) => {\n * const map = new google.maps.Map(...)\n * })\n * ```\n */\nclass Loader {\n /**\n * Creates an instance of Loader using [[LoaderOptions]]. No defaults are set\n * using this library, instead the defaults are set by the Google Maps\n * JavaScript API server.\n *\n * ```\n * const loader = Loader({apiKey, version: 'weekly', libraries: ['places']});\n * ```\n */\n constructor({ apiKey, authReferrerPolicy, channel, client, id = DEFAULT_ID, language, libraries = [], mapIds, nonce, region, retries = 3, url = \"https://maps.googleapis.com/maps/api/js\", version, }) {\n this.callbacks = [];\n this.done = false;\n this.loading = false;\n this.errors = [];\n this.apiKey = apiKey;\n this.authReferrerPolicy = authReferrerPolicy;\n this.channel = channel;\n this.client = client;\n this.id = id || DEFAULT_ID; // Do not allow empty string\n this.language = language;\n this.libraries = libraries;\n this.mapIds = mapIds;\n this.nonce = nonce;\n this.region = region;\n this.retries = retries;\n this.url = url;\n this.version = version;\n if (Loader.instance) {\n if (!isEqual(this.options, Loader.instance.options)) {\n throw new Error(`Loader must not be called again with different options. ${JSON.stringify(this.options)} !== ${JSON.stringify(Loader.instance.options)}`);\n }\n return Loader.instance;\n }\n Loader.instance = this;\n }\n get options() {\n return {\n version: this.version,\n apiKey: this.apiKey,\n channel: this.channel,\n client: this.client,\n id: this.id,\n libraries: this.libraries,\n language: this.language,\n region: this.region,\n mapIds: this.mapIds,\n nonce: this.nonce,\n url: this.url,\n authReferrerPolicy: this.authReferrerPolicy,\n };\n }\n get status() {\n if (this.errors.length) {\n return LoaderStatus.FAILURE;\n }\n if (this.done) {\n return LoaderStatus.SUCCESS;\n }\n if (this.loading) {\n return LoaderStatus.LOADING;\n }\n return LoaderStatus.INITIALIZED;\n }\n get failed() {\n return this.done && !this.loading && this.errors.length >= this.retries + 1;\n }\n /**\n * CreateUrl returns the Google Maps JavaScript API script url given the [[LoaderOptions]].\n *\n * @ignore\n * @deprecated\n */\n createUrl() {\n let url = this.url;\n url += `?callback=__googleMapsCallback&loading=async`;\n if (this.apiKey) {\n url += `&key=${this.apiKey}`;\n }\n if (this.channel) {\n url += `&channel=${this.channel}`;\n }\n if (this.client) {\n url += `&client=${this.client}`;\n }\n if (this.libraries.length > 0) {\n url += `&libraries=${this.libraries.join(\",\")}`;\n }\n if (this.language) {\n url += `&language=${this.language}`;\n }\n if (this.region) {\n url += `®ion=${this.region}`;\n }\n if (this.version) {\n url += `&v=${this.version}`;\n }\n if (this.mapIds) {\n url += `&map_ids=${this.mapIds.join(\",\")}`;\n }\n if (this.authReferrerPolicy) {\n url += `&auth_referrer_policy=${this.authReferrerPolicy}`;\n }\n return url;\n }\n deleteScript() {\n const script = document.getElementById(this.id);\n if (script) {\n script.remove();\n }\n }\n /**\n * Load the Google Maps JavaScript API script and return a Promise.\n * @deprecated, use importLibrary() instead.\n */\n load() {\n return this.loadPromise();\n }\n /**\n * Load the Google Maps JavaScript API script and return a Promise.\n *\n * @ignore\n * @deprecated, use importLibrary() instead.\n */\n loadPromise() {\n return new Promise((resolve, reject) => {\n this.loadCallback((err) => {\n if (!err) {\n resolve(window.google);\n }\n else {\n reject(err.error);\n }\n });\n });\n }\n importLibrary(name) {\n this.execute();\n return google.maps.importLibrary(name);\n }\n /**\n * Load the Google Maps JavaScript API script with a callback.\n * @deprecated, use importLibrary() instead.\n */\n loadCallback(fn) {\n this.callbacks.push(fn);\n this.execute();\n }\n /**\n * Set the script on document.\n */\n setScript() {\n var _a, _b;\n if (document.getElementById(this.id)) {\n // TODO wrap onerror callback for cases where the script was loaded elsewhere\n this.callback();\n return;\n }\n const params = {\n key: this.apiKey,\n channel: this.channel,\n client: this.client,\n libraries: this.libraries.length && this.libraries,\n v: this.version,\n mapIds: this.mapIds,\n language: this.language,\n region: this.region,\n authReferrerPolicy: this.authReferrerPolicy,\n };\n // keep the URL minimal:\n Object.keys(params).forEach(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (key) => !params[key] && delete params[key]);\n if (!((_b = (_a = window === null || window === void 0 ? void 0 : window.google) === null || _a === void 0 ? void 0 : _a.maps) === null || _b === void 0 ? void 0 : _b.importLibrary)) {\n // tweaked copy of https://developers.google.com/maps/documentation/javascript/load-maps-js-api#dynamic-library-import\n // which also sets the base url, the id, and the nonce\n /* eslint-disable */\n ((g) => {\n // @ts-ignore\n let h, a, k, p = \"The Google Maps JavaScript API\", c = \"google\", l = \"importLibrary\", q = \"__ib__\", m = document, b = window;\n // @ts-ignore\n b = b[c] || (b[c] = {});\n // @ts-ignore\n const d = b.maps || (b.maps = {}), r = new Set(), e = new URLSearchParams(), u = () => \n // @ts-ignore\n h || (h = new Promise((f, n) => __awaiter(this, void 0, void 0, function* () {\n var _a;\n yield (a = m.createElement(\"script\"));\n a.id = this.id;\n e.set(\"libraries\", [...r] + \"\");\n // @ts-ignore\n for (k in g)\n e.set(k.replace(/[A-Z]/g, (t) => \"_\" + t[0].toLowerCase()), g[k]);\n e.set(\"callback\", c + \".maps.\" + q);\n a.src = this.url + `?` + e;\n d[q] = f;\n a.onerror = () => (h = n(Error(p + \" could not load.\")));\n // @ts-ignore\n a.nonce = this.nonce || ((_a = m.querySelector(\"script[nonce]\")) === null || _a === void 0 ? void 0 : _a.nonce) || \"\";\n m.head.append(a);\n })));\n // @ts-ignore\n d[l] ? console.warn(p + \" only loads once. Ignoring:\", g) : (d[l] = (f, ...n) => r.add(f) && u().then(() => d[l](f, ...n)));\n })(params);\n /* eslint-enable */\n }\n // While most libraries populate the global namespace when loaded via bootstrap params,\n // this is not the case for \"marker\" when used with the inline bootstrap loader\n // (and maybe others in the future). So ensure there is an importLibrary for each:\n const libraryPromises = this.libraries.map((library) => this.importLibrary(library));\n // ensure at least one library, to kick off loading...\n if (!libraryPromises.length) {\n libraryPromises.push(this.importLibrary(\"core\"));\n }\n Promise.all(libraryPromises).then(() => this.callback(), (error) => {\n const event = new ErrorEvent(\"error\", { error }); // for backwards compat\n this.loadErrorCallback(event);\n });\n }\n /**\n * Reset the loader state.\n */\n reset() {\n this.deleteScript();\n this.done = false;\n this.loading = false;\n this.errors = [];\n this.onerrorEvent = null;\n }\n resetIfRetryingFailed() {\n if (this.failed) {\n this.reset();\n }\n }\n loadErrorCallback(e) {\n this.errors.push(e);\n if (this.errors.length <= this.retries) {\n const delay = this.errors.length * Math.pow(2, this.errors.length);\n console.error(`Failed to load Google Maps script, retrying in ${delay} ms.`);\n setTimeout(() => {\n this.deleteScript();\n this.setScript();\n }, delay);\n }\n else {\n this.onerrorEvent = e;\n this.callback();\n }\n }\n callback() {\n this.done = true;\n this.loading = false;\n this.callbacks.forEach((cb) => {\n cb(this.onerrorEvent);\n });\n this.callbacks = [];\n }\n execute() {\n this.resetIfRetryingFailed();\n if (this.done) {\n this.callback();\n }\n else {\n // short circuit and warn if google.maps is already loaded\n if (window.google && window.google.maps && window.google.maps.version) {\n console.warn(\"Google Maps already loaded outside @googlemaps/js-api-loader.\" +\n \"This may result in undesirable behavior as options and script parameters may not match.\");\n this.callback();\n return;\n }\n if (this.loading) ;\n else {\n this.loading = true;\n this.setScript();\n }\n }\n }\n}\n\nexport { DEFAULT_ID, Loader, LoaderStatus };\n//# sourceMappingURL=index.mjs.map\n","import equal from 'fast-deep-equal';\nimport SuperCluster from 'supercluster';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\n\n/**\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * util class that creates a common set of convenience functions to wrap\n * shared behavior of Advanced Markers and Markers.\n */\nclass MarkerUtils {\n static isAdvancedMarkerAvailable(map) {\n return (google.maps.marker &&\n map.getMapCapabilities().isAdvancedMarkersAvailable === true);\n }\n static isAdvancedMarker(marker) {\n return (google.maps.marker &&\n marker instanceof google.maps.marker.AdvancedMarkerElement);\n }\n static setMap(marker, map) {\n if (this.isAdvancedMarker(marker)) {\n marker.map = map;\n }\n else {\n marker.setMap(map);\n }\n }\n static getPosition(marker) {\n // SuperClusterAlgorithm.calculate expects a LatLng instance so we fake it for Adv Markers\n if (this.isAdvancedMarker(marker)) {\n if (marker.position) {\n if (marker.position instanceof google.maps.LatLng) {\n return marker.position;\n }\n // since we can't cast to LatLngLiteral for reasons =(\n if (marker.position.lat && marker.position.lng) {\n return new google.maps.LatLng(marker.position.lat, marker.position.lng);\n }\n }\n return new google.maps.LatLng(null);\n }\n return marker.getPosition();\n }\n static getVisible(marker) {\n if (this.isAdvancedMarker(marker)) {\n /**\n * Always return true for Advanced Markers because the clusterer\n * uses getVisible as a way to count legacy markers not as an actual\n * indicator of visibility for some reason. Even when markers are hidden\n * Marker.getVisible returns `true` and this is used to set the marker count\n * on the cluster. See the behavior of Cluster.count\n */\n return true;\n }\n return marker.getVisible();\n }\n}\n\n/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass Cluster {\n constructor({ markers, position }) {\n this.markers = markers;\n if (position) {\n if (position instanceof google.maps.LatLng) {\n this._position = position;\n }\n else {\n this._position = new google.maps.LatLng(position);\n }\n }\n }\n get bounds() {\n if (this.markers.length === 0 && !this._position) {\n return;\n }\n const bounds = new google.maps.LatLngBounds(this._position, this._position);\n for (const marker of this.markers) {\n bounds.extend(MarkerUtils.getPosition(marker));\n }\n return bounds;\n }\n get position() {\n return this._position || this.bounds.getCenter();\n }\n /**\n * Get the count of **visible** markers.\n */\n get count() {\n return this.markers.filter((m) => MarkerUtils.getVisible(m)).length;\n }\n /**\n * Add a marker to the cluster.\n */\n push(marker) {\n this.markers.push(marker);\n }\n /**\n * Cleanup references and remove marker from map.\n */\n delete() {\n if (this.marker) {\n MarkerUtils.setMap(this.marker, null);\n this.marker = undefined;\n }\n this.markers.length = 0;\n }\n}\n\n/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Returns the markers visible in a padded map viewport\n *\n * @param map\n * @param mapCanvasProjection\n * @param markers The list of marker to filter\n * @param viewportPaddingPixels The padding in pixel\n * @returns The list of markers in the padded viewport\n */\nconst filterMarkersToPaddedViewport = (map, mapCanvasProjection, markers, viewportPaddingPixels) => {\n const extendedMapBounds = extendBoundsToPaddedViewport(map.getBounds(), mapCanvasProjection, viewportPaddingPixels);\n return markers.filter((marker) => extendedMapBounds.contains(MarkerUtils.getPosition(marker)));\n};\n/**\n * Extends a bounds by a number of pixels in each direction\n */\nconst extendBoundsToPaddedViewport = (bounds, projection, numPixels) => {\n const { northEast, southWest } = latLngBoundsToPixelBounds(bounds, projection);\n const extendedPixelBounds = extendPixelBounds({ northEast, southWest }, numPixels);\n return pixelBoundsToLatLngBounds(extendedPixelBounds, projection);\n};\n/**\n * Gets the extended bounds as a bbox [westLng, southLat, eastLng, northLat]\n */\nconst getPaddedViewport = (bounds, projection, pixels) => {\n const extended = extendBoundsToPaddedViewport(bounds, projection, pixels);\n const ne = extended.getNorthEast();\n const sw = extended.getSouthWest();\n return [sw.lng(), sw.lat(), ne.lng(), ne.lat()];\n};\n/**\n * Returns the distance between 2 positions.\n *\n * @hidden\n */\nconst distanceBetweenPoints = (p1, p2) => {\n const R = 6371; // Radius of the Earth in km\n const dLat = ((p2.lat - p1.lat) * Math.PI) / 180;\n const dLon = ((p2.lng - p1.lng) * Math.PI) / 180;\n const sinDLat = Math.sin(dLat / 2);\n const sinDLon = Math.sin(dLon / 2);\n const a = sinDLat * sinDLat +\n Math.cos((p1.lat * Math.PI) / 180) *\n Math.cos((p2.lat * Math.PI) / 180) *\n sinDLon *\n sinDLon;\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n return R * c;\n};\n/**\n * Converts a LatLng bound to pixels.\n *\n * @hidden\n */\nconst latLngBoundsToPixelBounds = (bounds, projection) => {\n return {\n northEast: projection.fromLatLngToDivPixel(bounds.getNorthEast()),\n southWest: projection.fromLatLngToDivPixel(bounds.getSouthWest()),\n };\n};\n/**\n * Extends a pixel bounds by numPixels in all directions.\n *\n * @hidden\n */\nconst extendPixelBounds = ({ northEast, southWest }, numPixels) => {\n northEast.x += numPixels;\n northEast.y -= numPixels;\n southWest.x -= numPixels;\n southWest.y += numPixels;\n return { northEast, southWest };\n};\n/**\n * @hidden\n */\nconst pixelBoundsToLatLngBounds = ({ northEast, southWest }, projection) => {\n const sw = projection.fromDivPixelToLatLng(southWest);\n const ne = projection.fromDivPixelToLatLng(northEast);\n return new google.maps.LatLngBounds(sw, ne);\n};\n\n/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @hidden\n */\nclass AbstractAlgorithm {\n constructor({ maxZoom = 16 }) {\n this.maxZoom = maxZoom;\n }\n /**\n * Helper function to bypass clustering based upon some map state such as\n * zoom, number of markers, etc.\n *\n * ```typescript\n * cluster({markers, map}: AlgorithmInput): Cluster[] {\n * if (shouldBypassClustering(map)) {\n * return this.noop({markers})\n * }\n * }\n * ```\n */\n noop({ markers, }) {\n return noop(markers);\n }\n}\n/**\n * Abstract viewport algorithm proves a class to filter markers by a padded\n * viewport. This is a common optimization.\n *\n * @hidden\n */\nclass AbstractViewportAlgorithm extends AbstractAlgorithm {\n constructor(_a) {\n var { viewportPadding = 60 } = _a, options = __rest(_a, [\"viewportPadding\"]);\n super(options);\n this.viewportPadding = 60;\n this.viewportPadding = viewportPadding;\n }\n calculate({ markers, map, mapCanvasProjection, }) {\n if (map.getZoom() >= this.maxZoom) {\n return {\n clusters: this.noop({\n markers,\n }),\n changed: false,\n };\n }\n return {\n clusters: this.cluster({\n markers: filterMarkersToPaddedViewport(map, mapCanvasProjection, markers, this.viewportPadding),\n map,\n mapCanvasProjection,\n }),\n };\n }\n}\n/**\n * @hidden\n */\nconst noop = (markers) => {\n const clusters = markers.map((marker) => new Cluster({\n position: MarkerUtils.getPosition(marker),\n markers: [marker],\n }));\n return clusters;\n};\n\n/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * The default Grid algorithm historically used in Google Maps marker\n * clustering.\n *\n * The Grid algorithm does not implement caching and markers may flash as the\n * viewport changes. Instead use {@link SuperClusterAlgorithm}.\n */\nclass GridAlgorithm extends AbstractViewportAlgorithm {\n constructor(_a) {\n var { maxDistance = 40000, gridSize = 40 } = _a, options = __rest(_a, [\"maxDistance\", \"gridSize\"]);\n super(options);\n this.clusters = [];\n this.state = { zoom: -1 };\n this.maxDistance = maxDistance;\n this.gridSize = gridSize;\n }\n calculate({ markers, map, mapCanvasProjection, }) {\n const state = { zoom: map.getZoom() };\n let changed = false;\n if (this.state.zoom >= this.maxZoom && state.zoom >= this.maxZoom) ;\n else {\n changed = !equal(this.state, state);\n }\n this.state = state;\n if (map.getZoom() >= this.maxZoom) {\n return {\n clusters: this.noop({\n markers,\n }),\n changed,\n };\n }\n return {\n clusters: this.cluster({\n markers: filterMarkersToPaddedViewport(map, mapCanvasProjection, markers, this.viewportPadding),\n map,\n mapCanvasProjection,\n }),\n };\n }\n cluster({ markers, map, mapCanvasProjection, }) {\n this.clusters = [];\n markers.forEach((marker) => {\n this.addToClosestCluster(marker, map, mapCanvasProjection);\n });\n return this.clusters;\n }\n addToClosestCluster(marker, map, projection) {\n let maxDistance = this.maxDistance; // Some large number\n let cluster = null;\n for (let i = 0; i < this.clusters.length; i++) {\n const candidate = this.clusters[i];\n const distance = distanceBetweenPoints(candidate.bounds.getCenter().toJSON(), MarkerUtils.getPosition(marker).toJSON());\n if (distance < maxDistance) {\n maxDistance = distance;\n cluster = candidate;\n }\n }\n if (cluster &&\n extendBoundsToPaddedViewport(cluster.bounds, projection, this.gridSize).contains(MarkerUtils.getPosition(marker))) {\n cluster.push(marker);\n }\n else {\n const cluster = new Cluster({ markers: [marker] });\n this.clusters.push(cluster);\n }\n }\n}\n\n/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Noop algorithm does not generate any clusters or filter markers by the an extended viewport.\n */\nclass NoopAlgorithm extends AbstractAlgorithm {\n constructor(_a) {\n var options = __rest(_a, []);\n super(options);\n }\n calculate({ markers, map, mapCanvasProjection, }) {\n return {\n clusters: this.cluster({ markers, map, mapCanvasProjection }),\n changed: false,\n };\n }\n cluster(input) {\n return this.noop(input);\n }\n}\n\n/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * A very fast JavaScript algorithm for geospatial point clustering using KD trees.\n *\n * @see https://www.npmjs.com/package/supercluster for more information on options.\n */\nclass SuperClusterAlgorithm extends AbstractAlgorithm {\n constructor(_a) {\n var { maxZoom, radius = 60 } = _a, options = __rest(_a, [\"maxZoom\", \"radius\"]);\n super({ maxZoom });\n this.state = { zoom: -1 };\n this.superCluster = new SuperCluster(Object.assign({ maxZoom: this.maxZoom, radius }, options));\n }\n calculate(input) {\n let changed = false;\n const state = { zoom: input.map.getZoom() };\n if (!equal(input.markers, this.markers)) {\n changed = true;\n // TODO use proxy to avoid copy?\n this.markers = [...input.markers];\n const points = this.markers.map((marker) => {\n const position = MarkerUtils.getPosition(marker);\n const coordinates = [position.lng(), position.lat()];\n return {\n type: \"Feature\",\n geometry: {\n type: \"Point\",\n coordinates,\n },\n properties: { marker },\n };\n });\n this.superCluster.load(points);\n }\n if (!changed) {\n if (this.state.zoom <= this.maxZoom || state.zoom <= this.maxZoom) {\n changed = !equal(this.state, state);\n }\n }\n this.state = state;\n if (changed) {\n this.clusters = this.cluster(input);\n }\n return { clusters: this.clusters, changed };\n }\n cluster({ map }) {\n return this.superCluster\n .getClusters([-180, -90, 180, 90], Math.round(map.getZoom()))\n .map((feature) => this.transformCluster(feature));\n }\n transformCluster({ geometry: { coordinates: [lng, lat], }, properties, }) {\n if (properties.cluster) {\n return new Cluster({\n markers: this.superCluster\n .getLeaves(properties.cluster_id, Infinity)\n .map((leaf) => leaf.properties.marker),\n position: { lat, lng },\n });\n }\n const marker = properties.marker;\n return new Cluster({\n markers: [marker],\n position: MarkerUtils.getPosition(marker),\n });\n }\n}\n\n/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * A very fast JavaScript algorithm for geospatial point clustering using KD trees.\n *\n * @see https://www.npmjs.com/package/supercluster for more information on options.\n */\nclass SuperClusterViewportAlgorithm extends AbstractViewportAlgorithm {\n constructor(_a) {\n var { maxZoom, radius = 60, viewportPadding = 60 } = _a, options = __rest(_a, [\"maxZoom\", \"radius\", \"viewportPadding\"]);\n super({ maxZoom, viewportPadding });\n this.superCluster = new SuperCluster(Object.assign({ maxZoom: this.maxZoom, radius }, options));\n this.state = { zoom: -1, view: [0, 0, 0, 0] };\n }\n calculate(input) {\n const state = {\n zoom: Math.round(input.map.getZoom()),\n view: getPaddedViewport(input.map.getBounds(), input.mapCanvasProjection, this.viewportPadding),\n };\n let changed = !equal(this.state, state);\n if (!equal(input.markers, this.markers)) {\n changed = true;\n // TODO use proxy to avoid copy?\n this.markers = [...input.markers];\n const points = this.markers.map((marker) => {\n const position = MarkerUtils.getPosition(marker);\n const coordinates = [position.lng(), position.lat()];\n return {\n type: \"Feature\",\n geometry: {\n type: \"Point\",\n coordinates,\n },\n properties: { marker },\n };\n });\n this.superCluster.load(points);\n }\n if (changed) {\n this.clusters = this.cluster(input);\n this.state = state;\n }\n return { clusters: this.clusters, changed };\n }\n cluster({ map, mapCanvasProjection }) {\n /* recalculate new state because we can't use the cached version. */\n const state = {\n zoom: Math.round(map.getZoom()),\n view: getPaddedViewport(map.getBounds(), mapCanvasProjection, this.viewportPadding),\n };\n return this.superCluster\n .getClusters(state.view, state.zoom)\n .map((feature) => this.transformCluster(feature));\n }\n transformCluster({ geometry: { coordinates: [lng, lat], }, properties, }) {\n if (properties.cluster) {\n return new Cluster({\n markers: this.superCluster\n .getLeaves(properties.cluster_id, Infinity)\n .map((leaf) => leaf.properties.marker),\n position: { lat, lng },\n });\n }\n const marker = properties.marker;\n return new Cluster({\n markers: [marker],\n position: MarkerUtils.getPosition(marker),\n });\n }\n}\n\n/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Provides statistics on all clusters in the current render cycle for use in {@link Renderer.render}.\n */\nclass ClusterStats {\n constructor(markers, clusters) {\n this.markers = { sum: markers.length };\n const clusterMarkerCounts = clusters.map((a) => a.count);\n const clusterMarkerSum = clusterMarkerCounts.reduce((a, b) => a + b, 0);\n this.clusters = {\n count: clusters.length,\n markers: {\n mean: clusterMarkerSum / clusters.length,\n sum: clusterMarkerSum,\n min: Math.min(...clusterMarkerCounts),\n max: Math.max(...clusterMarkerCounts),\n },\n };\n }\n}\nclass DefaultRenderer {\n /**\n * The default render function for the library used by {@link MarkerClusterer}.\n *\n * Currently set to use the following:\n *\n * ```typescript\n * // change color if this cluster has more markers than the mean cluster\n * const color =\n * count > Math.max(10, stats.clusters.markers.mean)\n * ? \"#ff0000\"\n * : \"#0000ff\";\n *\n * // create svg url with fill color\n * const svg = window.btoa(`\n * \n * \n * \n * \n * \n * `);\n *\n * // create marker using svg icon\n * return new google.maps.Marker({\n * position,\n * icon: {\n * url: `data:image/svg+xml;base64,${svg}`,\n * scaledSize: new google.maps.Size(45, 45),\n * },\n * label: {\n * text: String(count),\n * color: \"rgba(255,255,255,0.9)\",\n * fontSize: \"12px\",\n * },\n * // adjust zIndex to be above other markers\n * zIndex: 1000 + count,\n * });\n * ```\n */\n render({ count, position }, stats, map) {\n // change color if this cluster has more markers than the mean cluster\n const color = count > Math.max(10, stats.clusters.markers.mean) ? \"#ff0000\" : \"#0000ff\";\n // create svg literal with fill color\n const svg = `\n\n\n\n${count}\n`;\n const title = `Cluster of ${count} markers`, \n // adjust zIndex to be above other markers\n zIndex = Number(google.maps.Marker.MAX_ZINDEX) + count;\n if (MarkerUtils.isAdvancedMarkerAvailable(map)) {\n // create cluster SVG element\n const parser = new DOMParser();\n const svgEl = parser.parseFromString(svg, \"image/svg+xml\").documentElement;\n svgEl.setAttribute(\"transform\", \"translate(0 25)\");\n const clusterOptions = {\n map,\n position,\n zIndex,\n title,\n content: svgEl,\n };\n return new google.maps.marker.AdvancedMarkerElement(clusterOptions);\n }\n const clusterOptions = {\n position,\n zIndex,\n title,\n icon: {\n url: `data:image/svg+xml;base64,${btoa(svg)}`,\n anchor: new google.maps.Point(25, 25),\n },\n };\n return new google.maps.Marker(clusterOptions);\n }\n}\n\n/**\n * Copyright 2019 Google LLC. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Extends an object's prototype by another's.\n *\n * @param type1 The Type to be extended.\n * @param type2 The Type to extend with.\n * @ignore\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction extend(type1, type2) {\n /* istanbul ignore next */\n // eslint-disable-next-line prefer-const\n for (let property in type2.prototype) {\n type1.prototype[property] = type2.prototype[property];\n }\n}\n/**\n * @ignore\n */\nclass OverlayViewSafe {\n constructor() {\n // MarkerClusterer implements google.maps.OverlayView interface. We use the\n // extend function to extend MarkerClusterer with google.maps.OverlayView\n // because it might not always be available when the code is defined so we\n // look for it at the last possible moment. If it doesn't exist now then\n // there is no point going ahead :)\n extend(OverlayViewSafe, google.maps.OverlayView);\n }\n}\n\n/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar MarkerClustererEvents;\n(function (MarkerClustererEvents) {\n MarkerClustererEvents[\"CLUSTERING_BEGIN\"] = \"clusteringbegin\";\n MarkerClustererEvents[\"CLUSTERING_END\"] = \"clusteringend\";\n MarkerClustererEvents[\"CLUSTER_CLICK\"] = \"click\";\n})(MarkerClustererEvents || (MarkerClustererEvents = {}));\nconst defaultOnClusterClickHandler = (_, cluster, map) => {\n map.fitBounds(cluster.bounds);\n};\n/**\n * MarkerClusterer creates and manages per-zoom-level clusters for large amounts\n * of markers. See {@link MarkerClustererOptions} for more details.\n *\n */\nclass MarkerClusterer extends OverlayViewSafe {\n constructor({ map, markers = [], algorithmOptions = {}, algorithm = new SuperClusterAlgorithm(algorithmOptions), renderer = new DefaultRenderer(), onClusterClick = defaultOnClusterClickHandler, }) {\n super();\n this.markers = [...markers];\n this.clusters = [];\n this.algorithm = algorithm;\n this.renderer = renderer;\n this.onClusterClick = onClusterClick;\n if (map) {\n this.setMap(map);\n }\n }\n addMarker(marker, noDraw) {\n if (this.markers.includes(marker)) {\n return;\n }\n this.markers.push(marker);\n if (!noDraw) {\n this.render();\n }\n }\n addMarkers(markers, noDraw) {\n markers.forEach((marker) => {\n this.addMarker(marker, true);\n });\n if (!noDraw) {\n this.render();\n }\n }\n removeMarker(marker, noDraw) {\n const index = this.markers.indexOf(marker);\n if (index === -1) {\n // Marker is not in our list of markers, so do nothing:\n return false;\n }\n MarkerUtils.setMap(marker, null);\n this.markers.splice(index, 1); // Remove the marker from the list of managed markers\n if (!noDraw) {\n this.render();\n }\n return true;\n }\n removeMarkers(markers, noDraw) {\n let removed = false;\n markers.forEach((marker) => {\n removed = this.removeMarker(marker, true) || removed;\n });\n if (removed && !noDraw) {\n this.render();\n }\n return removed;\n }\n clearMarkers(noDraw) {\n this.markers.length = 0;\n if (!noDraw) {\n this.render();\n }\n }\n /**\n * Recalculates and draws all the marker clusters.\n */\n render() {\n const map = this.getMap();\n if (map instanceof google.maps.Map && map.getProjection()) {\n google.maps.event.trigger(this, MarkerClustererEvents.CLUSTERING_BEGIN, this);\n const { clusters, changed } = this.algorithm.calculate({\n markers: this.markers,\n map,\n mapCanvasProjection: this.getProjection(),\n });\n // Allow algorithms to return flag on whether the clusters/markers have changed.\n if (changed || changed == undefined) {\n // Accumulate the markers of the clusters composed of a single marker.\n // Those clusters directly use the marker.\n // Clusters with more than one markers use a group marker generated by a renderer.\n const singleMarker = new Set();\n for (const cluster of clusters) {\n if (cluster.markers.length == 1) {\n singleMarker.add(cluster.markers[0]);\n }\n }\n const groupMarkers = [];\n // Iterate the clusters that are currently rendered.\n for (const cluster of this.clusters) {\n if (cluster.marker == null) {\n continue;\n }\n if (cluster.markers.length == 1) {\n if (!singleMarker.has(cluster.marker)) {\n // The marker:\n // - was previously rendered because it is from a cluster with 1 marker,\n // - should no more be rendered as it is not in singleMarker.\n MarkerUtils.setMap(cluster.marker, null);\n }\n }\n else {\n // Delay the removal of old group markers to avoid flickering.\n groupMarkers.push(cluster.marker);\n }\n }\n this.clusters = clusters;\n this.renderClusters();\n // Delayed removal of the markers of the former groups.\n requestAnimationFrame(() => groupMarkers.forEach((marker) => MarkerUtils.setMap(marker, null)));\n }\n google.maps.event.trigger(this, MarkerClustererEvents.CLUSTERING_END, this);\n }\n }\n onAdd() {\n this.idleListener = this.getMap().addListener(\"idle\", this.render.bind(this));\n this.render();\n }\n onRemove() {\n google.maps.event.removeListener(this.idleListener);\n this.reset();\n }\n reset() {\n this.markers.forEach((marker) => MarkerUtils.setMap(marker, null));\n this.clusters.forEach((cluster) => cluster.delete());\n this.clusters = [];\n }\n renderClusters() {\n // Generate stats to pass to renderers.\n const stats = new ClusterStats(this.markers, this.clusters);\n const map = this.getMap();\n this.clusters.forEach((cluster) => {\n if (cluster.markers.length === 1) {\n cluster.marker = cluster.markers[0];\n }\n else {\n // Generate the marker to represent the group.\n cluster.marker = this.renderer.render(cluster, stats, map);\n // Make sure all individual markers are removed from the map.\n cluster.markers.forEach((marker) => MarkerUtils.setMap(marker, null));\n if (this.onClusterClick) {\n cluster.marker.addListener(\"click\", \n /* istanbul ignore next */\n (event) => {\n google.maps.event.trigger(this, MarkerClustererEvents.CLUSTER_CLICK, cluster);\n this.onClusterClick(event, cluster, map);\n });\n }\n }\n MarkerUtils.setMap(cluster.marker, map);\n });\n }\n}\n\nexport { AbstractAlgorithm, AbstractViewportAlgorithm, Cluster, ClusterStats, DefaultRenderer, GridAlgorithm, MarkerClusterer, MarkerClustererEvents, MarkerUtils, NoopAlgorithm, SuperClusterAlgorithm, SuperClusterViewportAlgorithm, defaultOnClusterClickHandler, distanceBetweenPoints, extendBoundsToPaddedViewport, extendPixelBounds, filterMarkersToPaddedViewport, getPaddedViewport, noop, pixelBoundsToLatLngBounds };\n//# sourceMappingURL=index.esm.js.map\n","\nimport KDBush from 'kdbush';\n\nconst defaultOptions = {\n minZoom: 0, // min zoom to generate clusters on\n maxZoom: 16, // max zoom level to cluster the points on\n minPoints: 2, // minimum points to form a cluster\n radius: 40, // cluster radius in pixels\n extent: 512, // tile extent (radius is calculated relative to it)\n nodeSize: 64, // size of the KD-tree leaf node, affects performance\n log: false, // whether to log timing info\n\n // whether to generate numeric ids for input features (in vector tiles)\n generateId: false,\n\n // a reduce function for calculating custom cluster properties\n reduce: null, // (accumulated, props) => { accumulated.sum += props.sum; }\n\n // properties to use for individual points when running the reducer\n map: props => props // props => ({sum: props.my_value})\n};\n\nconst fround = Math.fround || (tmp => ((x) => { tmp[0] = +x; return tmp[0]; }))(new Float32Array(1));\n\nconst OFFSET_ZOOM = 2;\nconst OFFSET_ID = 3;\nconst OFFSET_PARENT = 4;\nconst OFFSET_NUM = 5;\nconst OFFSET_PROP = 6;\n\nexport default class Supercluster {\n constructor(options) {\n this.options = Object.assign(Object.create(defaultOptions), options);\n this.trees = new Array(this.options.maxZoom + 1);\n this.stride = this.options.reduce ? 7 : 6;\n this.clusterProps = [];\n }\n\n load(points) {\n const {log, minZoom, maxZoom} = this.options;\n\n if (log) console.time('total time');\n\n const timerId = `prepare ${ points.length } points`;\n if (log) console.time(timerId);\n\n this.points = points;\n\n // generate a cluster object for each point and index input points into a KD-tree\n const data = [];\n\n for (let i = 0; i < points.length; i++) {\n const p = points[i];\n if (!p.geometry) continue;\n\n const [lng, lat] = p.geometry.coordinates;\n const x = fround(lngX(lng));\n const y = fround(latY(lat));\n // store internal point/cluster data in flat numeric arrays for performance\n data.push(\n x, y, // projected point coordinates\n Infinity, // the last zoom the point was processed at\n i, // index of the source feature in the original input array\n -1, // parent cluster id\n 1 // number of points in a cluster\n );\n if (this.options.reduce) data.push(0); // noop\n }\n let tree = this.trees[maxZoom + 1] = this._createTree(data);\n\n if (log) console.timeEnd(timerId);\n\n // cluster points on max zoom, then cluster the results on previous zoom, etc.;\n // results in a cluster hierarchy across zoom levels\n for (let z = maxZoom; z >= minZoom; z--) {\n const now = +Date.now();\n\n // create a new set of clusters for the zoom and index them with a KD-tree\n tree = this.trees[z] = this._createTree(this._cluster(tree, z));\n\n if (log) console.log('z%d: %d clusters in %dms', z, tree.numItems, +Date.now() - now);\n }\n\n if (log) console.timeEnd('total time');\n\n return this;\n }\n\n getClusters(bbox, zoom) {\n let minLng = ((bbox[0] + 180) % 360 + 360) % 360 - 180;\n const minLat = Math.max(-90, Math.min(90, bbox[1]));\n let maxLng = bbox[2] === 180 ? 180 : ((bbox[2] + 180) % 360 + 360) % 360 - 180;\n const maxLat = Math.max(-90, Math.min(90, bbox[3]));\n\n if (bbox[2] - bbox[0] >= 360) {\n minLng = -180;\n maxLng = 180;\n } else if (minLng > maxLng) {\n const easternHem = this.getClusters([minLng, minLat, 180, maxLat], zoom);\n const westernHem = this.getClusters([-180, minLat, maxLng, maxLat], zoom);\n return easternHem.concat(westernHem);\n }\n\n const tree = this.trees[this._limitZoom(zoom)];\n const ids = tree.range(lngX(minLng), latY(maxLat), lngX(maxLng), latY(minLat));\n const data = tree.data;\n const clusters = [];\n for (const id of ids) {\n const k = this.stride * id;\n clusters.push(data[k + OFFSET_NUM] > 1 ? getClusterJSON(data, k, this.clusterProps) : this.points[data[k + OFFSET_ID]]);\n }\n return clusters;\n }\n\n getChildren(clusterId) {\n const originId = this._getOriginId(clusterId);\n const originZoom = this._getOriginZoom(clusterId);\n const errorMsg = 'No cluster with the specified id.';\n\n const tree = this.trees[originZoom];\n if (!tree) throw new Error(errorMsg);\n\n const data = tree.data;\n if (originId * this.stride >= data.length) throw new Error(errorMsg);\n\n const r = this.options.radius / (this.options.extent * Math.pow(2, originZoom - 1));\n const x = data[originId * this.stride];\n const y = data[originId * this.stride + 1];\n const ids = tree.within(x, y, r);\n const children = [];\n for (const id of ids) {\n const k = id * this.stride;\n if (data[k + OFFSET_PARENT] === clusterId) {\n children.push(data[k + OFFSET_NUM] > 1 ? getClusterJSON(data, k, this.clusterProps) : this.points[data[k + OFFSET_ID]]);\n }\n }\n\n if (children.length === 0) throw new Error(errorMsg);\n\n return children;\n }\n\n getLeaves(clusterId, limit, offset) {\n limit = limit || 10;\n offset = offset || 0;\n\n const leaves = [];\n this._appendLeaves(leaves, clusterId, limit, offset, 0);\n\n return leaves;\n }\n\n getTile(z, x, y) {\n const tree = this.trees[this._limitZoom(z)];\n const z2 = Math.pow(2, z);\n const {extent, radius} = this.options;\n const p = radius / extent;\n const top = (y - p) / z2;\n const bottom = (y + 1 + p) / z2;\n\n const tile = {\n features: []\n };\n\n this._addTileFeatures(\n tree.range((x - p) / z2, top, (x + 1 + p) / z2, bottom),\n tree.data, x, y, z2, tile);\n\n if (x === 0) {\n this._addTileFeatures(\n tree.range(1 - p / z2, top, 1, bottom),\n tree.data, z2, y, z2, tile);\n }\n if (x === z2 - 1) {\n this._addTileFeatures(\n tree.range(0, top, p / z2, bottom),\n tree.data, -1, y, z2, tile);\n }\n\n return tile.features.length ? tile : null;\n }\n\n getClusterExpansionZoom(clusterId) {\n let expansionZoom = this._getOriginZoom(clusterId) - 1;\n while (expansionZoom <= this.options.maxZoom) {\n const children = this.getChildren(clusterId);\n expansionZoom++;\n if (children.length !== 1) break;\n clusterId = children[0].properties.cluster_id;\n }\n return expansionZoom;\n }\n\n _appendLeaves(result, clusterId, limit, offset, skipped) {\n const children = this.getChildren(clusterId);\n\n for (const child of children) {\n const props = child.properties;\n\n if (props && props.cluster) {\n if (skipped + props.point_count <= offset) {\n // skip the whole cluster\n skipped += props.point_count;\n } else {\n // enter the cluster\n skipped = this._appendLeaves(result, props.cluster_id, limit, offset, skipped);\n // exit the cluster\n }\n } else if (skipped < offset) {\n // skip a single point\n skipped++;\n } else {\n // add a single point\n result.push(child);\n }\n if (result.length === limit) break;\n }\n\n return skipped;\n }\n\n _createTree(data) {\n const tree = new KDBush(data.length / this.stride | 0, this.options.nodeSize, Float32Array);\n for (let i = 0; i < data.length; i += this.stride) tree.add(data[i], data[i + 1]);\n tree.finish();\n tree.data = data;\n return tree;\n }\n\n _addTileFeatures(ids, data, x, y, z2, tile) {\n for (const i of ids) {\n const k = i * this.stride;\n const isCluster = data[k + OFFSET_NUM] > 1;\n\n let tags, px, py;\n if (isCluster) {\n tags = getClusterProperties(data, k, this.clusterProps);\n px = data[k];\n py = data[k + 1];\n } else {\n const p = this.points[data[k + OFFSET_ID]];\n tags = p.properties;\n const [lng, lat] = p.geometry.coordinates;\n px = lngX(lng);\n py = latY(lat);\n }\n\n const f = {\n type: 1,\n geometry: [[\n Math.round(this.options.extent * (px * z2 - x)),\n Math.round(this.options.extent * (py * z2 - y))\n ]],\n tags\n };\n\n // assign id\n let id;\n if (isCluster || this.options.generateId) {\n // optionally generate id for points\n id = data[k + OFFSET_ID];\n } else {\n // keep id if already assigned\n id = this.points[data[k + OFFSET_ID]].id;\n }\n\n if (id !== undefined) f.id = id;\n\n tile.features.push(f);\n }\n }\n\n _limitZoom(z) {\n return Math.max(this.options.minZoom, Math.min(Math.floor(+z), this.options.maxZoom + 1));\n }\n\n _cluster(tree, zoom) {\n const {radius, extent, reduce, minPoints} = this.options;\n const r = radius / (extent * Math.pow(2, zoom));\n const data = tree.data;\n const nextData = [];\n const stride = this.stride;\n\n // loop through each point\n for (let i = 0; i < data.length; i += stride) {\n // if we've already visited the point at this zoom level, skip it\n if (data[i + OFFSET_ZOOM] <= zoom) continue;\n data[i + OFFSET_ZOOM] = zoom;\n\n // find all nearby points\n const x = data[i];\n const y = data[i + 1];\n const neighborIds = tree.within(data[i], data[i + 1], r);\n\n const numPointsOrigin = data[i + OFFSET_NUM];\n let numPoints = numPointsOrigin;\n\n // count the number of points in a potential cluster\n for (const neighborId of neighborIds) {\n const k = neighborId * stride;\n // filter out neighbors that are already processed\n if (data[k + OFFSET_ZOOM] > zoom) numPoints += data[k + OFFSET_NUM];\n }\n\n // if there were neighbors to merge, and there are enough points to form a cluster\n if (numPoints > numPointsOrigin && numPoints >= minPoints) {\n let wx = x * numPointsOrigin;\n let wy = y * numPointsOrigin;\n\n let clusterProperties;\n let clusterPropIndex = -1;\n\n // encode both zoom and point index on which the cluster originated -- offset by total length of features\n const id = ((i / stride | 0) << 5) + (zoom + 1) + this.points.length;\n\n for (const neighborId of neighborIds) {\n const k = neighborId * stride;\n\n if (data[k + OFFSET_ZOOM] <= zoom) continue;\n data[k + OFFSET_ZOOM] = zoom; // save the zoom (so it doesn't get processed twice)\n\n const numPoints2 = data[k + OFFSET_NUM];\n wx += data[k] * numPoints2; // accumulate coordinates for calculating weighted center\n wy += data[k + 1] * numPoints2;\n\n data[k + OFFSET_PARENT] = id;\n\n if (reduce) {\n if (!clusterProperties) {\n clusterProperties = this._map(data, i, true);\n clusterPropIndex = this.clusterProps.length;\n this.clusterProps.push(clusterProperties);\n }\n reduce(clusterProperties, this._map(data, k));\n }\n }\n\n data[i + OFFSET_PARENT] = id;\n nextData.push(wx / numPoints, wy / numPoints, Infinity, id, -1, numPoints);\n if (reduce) nextData.push(clusterPropIndex);\n\n } else { // left points as unclustered\n for (let j = 0; j < stride; j++) nextData.push(data[i + j]);\n\n if (numPoints > 1) {\n for (const neighborId of neighborIds) {\n const k = neighborId * stride;\n if (data[k + OFFSET_ZOOM] <= zoom) continue;\n data[k + OFFSET_ZOOM] = zoom;\n for (let j = 0; j < stride; j++) nextData.push(data[k + j]);\n }\n }\n }\n }\n\n return nextData;\n }\n\n // get index of the point from which the cluster originated\n _getOriginId(clusterId) {\n return (clusterId - this.points.length) >> 5;\n }\n\n // get zoom of the point from which the cluster originated\n _getOriginZoom(clusterId) {\n return (clusterId - this.points.length) % 32;\n }\n\n _map(data, i, clone) {\n if (data[i + OFFSET_NUM] > 1) {\n const props = this.clusterProps[data[i + OFFSET_PROP]];\n return clone ? Object.assign({}, props) : props;\n }\n const original = this.points[data[i + OFFSET_ID]].properties;\n const result = this.options.map(original);\n return clone && result === original ? Object.assign({}, result) : result;\n }\n}\n\nfunction getClusterJSON(data, i, clusterProps) {\n return {\n type: 'Feature',\n id: data[i + OFFSET_ID],\n properties: getClusterProperties(data, i, clusterProps),\n geometry: {\n type: 'Point',\n coordinates: [xLng(data[i]), yLat(data[i + 1])]\n }\n };\n}\n\nfunction getClusterProperties(data, i, clusterProps) {\n const count = data[i + OFFSET_NUM];\n const abbrev =\n count >= 10000 ? `${Math.round(count / 1000) }k` :\n count >= 1000 ? `${Math.round(count / 100) / 10 }k` : count;\n const propIndex = data[i + OFFSET_PROP];\n const properties = propIndex === -1 ? {} : Object.assign({}, clusterProps[propIndex]);\n return Object.assign(properties, {\n cluster: true,\n cluster_id: data[i + OFFSET_ID],\n point_count: count,\n point_count_abbreviated: abbrev\n });\n}\n\n// longitude/latitude to spherical mercator in [0..1] range\nfunction lngX(lng) {\n return lng / 360 + 0.5;\n}\nfunction latY(lat) {\n const sin = Math.sin(lat * Math.PI / 180);\n const y = (0.5 - 0.25 * Math.log((1 + sin) / (1 - sin)) / Math.PI);\n return y < 0 ? 0 : y > 1 ? 1 : y;\n}\n\n// spherical mercator to longitude/latitude\nfunction xLng(x) {\n return (x - 0.5) * 360;\n}\nfunction yLat(y) {\n const y2 = (180 - y * 360) * Math.PI / 180;\n return 360 * Math.atan(Math.exp(y2)) / Math.PI - 90;\n}\n","\nconst ARRAY_TYPES = [\n Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array,\n Int32Array, Uint32Array, Float32Array, Float64Array\n];\n\n/** @typedef {Int8ArrayConstructor | Uint8ArrayConstructor | Uint8ClampedArrayConstructor | Int16ArrayConstructor | Uint16ArrayConstructor | Int32ArrayConstructor | Uint32ArrayConstructor | Float32ArrayConstructor | Float64ArrayConstructor} TypedArrayConstructor */\n\nconst VERSION = 1; // serialized format version\nconst HEADER_SIZE = 8;\n\nexport default class KDBush {\n\n /**\n * Creates an index from raw `ArrayBuffer` data.\n * @param {ArrayBuffer} data\n */\n static from(data) {\n if (!(data instanceof ArrayBuffer)) {\n throw new Error('Data must be an instance of ArrayBuffer.');\n }\n const [magic, versionAndType] = new Uint8Array(data, 0, 2);\n if (magic !== 0xdb) {\n throw new Error('Data does not appear to be in a KDBush format.');\n }\n const version = versionAndType >> 4;\n if (version !== VERSION) {\n throw new Error(`Got v${version} data when expected v${VERSION}.`);\n }\n const ArrayType = ARRAY_TYPES[versionAndType & 0x0f];\n if (!ArrayType) {\n throw new Error('Unrecognized array type.');\n }\n const [nodeSize] = new Uint16Array(data, 2, 1);\n const [numItems] = new Uint32Array(data, 4, 1);\n\n return new KDBush(numItems, nodeSize, ArrayType, data);\n }\n\n /**\n * Creates an index that will hold a given number of items.\n * @param {number} numItems\n * @param {number} [nodeSize=64] Size of the KD-tree node (64 by default).\n * @param {TypedArrayConstructor} [ArrayType=Float64Array] The array type used for coordinates storage (`Float64Array` by default).\n * @param {ArrayBuffer} [data] (For internal use only)\n */\n constructor(numItems, nodeSize = 64, ArrayType = Float64Array, data) {\n if (isNaN(numItems) || numItems < 0) throw new Error(`Unpexpected numItems value: ${numItems}.`);\n\n this.numItems = +numItems;\n this.nodeSize = Math.min(Math.max(+nodeSize, 2), 65535);\n this.ArrayType = ArrayType;\n this.IndexArrayType = numItems < 65536 ? Uint16Array : Uint32Array;\n\n const arrayTypeIndex = ARRAY_TYPES.indexOf(this.ArrayType);\n const coordsByteSize = numItems * 2 * this.ArrayType.BYTES_PER_ELEMENT;\n const idsByteSize = numItems * this.IndexArrayType.BYTES_PER_ELEMENT;\n const padCoords = (8 - idsByteSize % 8) % 8;\n\n if (arrayTypeIndex < 0) {\n throw new Error(`Unexpected typed array class: ${ArrayType}.`);\n }\n\n if (data && (data instanceof ArrayBuffer)) { // reconstruct an index from a buffer\n this.data = data;\n this.ids = new this.IndexArrayType(this.data, HEADER_SIZE, numItems);\n this.coords = new this.ArrayType(this.data, HEADER_SIZE + idsByteSize + padCoords, numItems * 2);\n this._pos = numItems * 2;\n this._finished = true;\n } else { // initialize a new index\n this.data = new ArrayBuffer(HEADER_SIZE + coordsByteSize + idsByteSize + padCoords);\n this.ids = new this.IndexArrayType(this.data, HEADER_SIZE, numItems);\n this.coords = new this.ArrayType(this.data, HEADER_SIZE + idsByteSize + padCoords, numItems * 2);\n this._pos = 0;\n this._finished = false;\n\n // set header\n new Uint8Array(this.data, 0, 2).set([0xdb, (VERSION << 4) + arrayTypeIndex]);\n new Uint16Array(this.data, 2, 1)[0] = nodeSize;\n new Uint32Array(this.data, 4, 1)[0] = numItems;\n }\n }\n\n /**\n * Add a point to the index.\n * @param {number} x\n * @param {number} y\n * @returns {number} An incremental index associated with the added item (starting from `0`).\n */\n add(x, y) {\n const index = this._pos >> 1;\n this.ids[index] = index;\n this.coords[this._pos++] = x;\n this.coords[this._pos++] = y;\n return index;\n }\n\n /**\n * Perform indexing of the added points.\n */\n finish() {\n const numAdded = this._pos >> 1;\n if (numAdded !== this.numItems) {\n throw new Error(`Added ${numAdded} items when expected ${this.numItems}.`);\n }\n // kd-sort both arrays for efficient search\n sort(this.ids, this.coords, this.nodeSize, 0, this.numItems - 1, 0);\n\n this._finished = true;\n return this;\n }\n\n /**\n * Search the index for items within a given bounding box.\n * @param {number} minX\n * @param {number} minY\n * @param {number} maxX\n * @param {number} maxY\n * @returns {number[]} An array of indices correponding to the found items.\n */\n range(minX, minY, maxX, maxY) {\n if (!this._finished) throw new Error('Data not yet indexed - call index.finish().');\n\n const {ids, coords, nodeSize} = this;\n const stack = [0, ids.length - 1, 0];\n const result = [];\n\n // recursively search for items in range in the kd-sorted arrays\n while (stack.length) {\n const axis = stack.pop() || 0;\n const right = stack.pop() || 0;\n const left = stack.pop() || 0;\n\n // if we reached \"tree node\", search linearly\n if (right - left <= nodeSize) {\n for (let i = left; i <= right; i++) {\n const x = coords[2 * i];\n const y = coords[2 * i + 1];\n if (x >= minX && x <= maxX && y >= minY && y <= maxY) result.push(ids[i]);\n }\n continue;\n }\n\n // otherwise find the middle index\n const m = (left + right) >> 1;\n\n // include the middle item if it's in range\n const x = coords[2 * m];\n const y = coords[2 * m + 1];\n if (x >= minX && x <= maxX && y >= minY && y <= maxY) result.push(ids[m]);\n\n // queue search in halves that intersect the query\n if (axis === 0 ? minX <= x : minY <= y) {\n stack.push(left);\n stack.push(m - 1);\n stack.push(1 - axis);\n }\n if (axis === 0 ? maxX >= x : maxY >= y) {\n stack.push(m + 1);\n stack.push(right);\n stack.push(1 - axis);\n }\n }\n\n return result;\n }\n\n /**\n * Search the index for items within a given radius.\n * @param {number} qx\n * @param {number} qy\n * @param {number} r Query radius.\n * @returns {number[]} An array of indices correponding to the found items.\n */\n within(qx, qy, r) {\n if (!this._finished) throw new Error('Data not yet indexed - call index.finish().');\n\n const {ids, coords, nodeSize} = this;\n const stack = [0, ids.length - 1, 0];\n const result = [];\n const r2 = r * r;\n\n // recursively search for items within radius in the kd-sorted arrays\n while (stack.length) {\n const axis = stack.pop() || 0;\n const right = stack.pop() || 0;\n const left = stack.pop() || 0;\n\n // if we reached \"tree node\", search linearly\n if (right - left <= nodeSize) {\n for (let i = left; i <= right; i++) {\n if (sqDist(coords[2 * i], coords[2 * i + 1], qx, qy) <= r2) result.push(ids[i]);\n }\n continue;\n }\n\n // otherwise find the middle index\n const m = (left + right) >> 1;\n\n // include the middle item if it's in range\n const x = coords[2 * m];\n const y = coords[2 * m + 1];\n if (sqDist(x, y, qx, qy) <= r2) result.push(ids[m]);\n\n // queue search in halves that intersect the query\n if (axis === 0 ? qx - r <= x : qy - r <= y) {\n stack.push(left);\n stack.push(m - 1);\n stack.push(1 - axis);\n }\n if (axis === 0 ? qx + r >= x : qy + r >= y) {\n stack.push(m + 1);\n stack.push(right);\n stack.push(1 - axis);\n }\n }\n\n return result;\n }\n}\n\n/**\n * @param {Uint16Array | Uint32Array} ids\n * @param {InstanceType} coords\n * @param {number} nodeSize\n * @param {number} left\n * @param {number} right\n * @param {number} axis\n */\nfunction sort(ids, coords, nodeSize, left, right, axis) {\n if (right - left <= nodeSize) return;\n\n const m = (left + right) >> 1; // middle index\n\n // sort ids and coords around the middle index so that the halves lie\n // either left/right or top/bottom correspondingly (taking turns)\n select(ids, coords, m, left, right, axis);\n\n // recursively kd-sort first half and second half on the opposite axis\n sort(ids, coords, nodeSize, left, m - 1, 1 - axis);\n sort(ids, coords, nodeSize, m + 1, right, 1 - axis);\n}\n\n/**\n * Custom Floyd-Rivest selection algorithm: sort ids and coords so that\n * [left..k-1] items are smaller than k-th item (on either x or y axis)\n * @param {Uint16Array | Uint32Array} ids\n * @param {InstanceType} coords\n * @param {number} k\n * @param {number} left\n * @param {number} right\n * @param {number} axis\n */\nfunction select(ids, coords, k, left, right, axis) {\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n select(ids, coords, k, newLeft, newRight, axis);\n }\n\n const t = coords[2 * k + axis];\n let i = left;\n let j = right;\n\n swapItem(ids, coords, left, k);\n if (coords[2 * right + axis] > t) swapItem(ids, coords, left, right);\n\n while (i < j) {\n swapItem(ids, coords, i, j);\n i++;\n j--;\n while (coords[2 * i + axis] < t) i++;\n while (coords[2 * j + axis] > t) j--;\n }\n\n if (coords[2 * left + axis] === t) swapItem(ids, coords, left, j);\n else {\n j++;\n swapItem(ids, coords, j, right);\n }\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n}\n\n/**\n * @param {Uint16Array | Uint32Array} ids\n * @param {InstanceType} coords\n * @param {number} i\n * @param {number} j\n */\nfunction swapItem(ids, coords, i, j) {\n swap(ids, i, j);\n swap(coords, 2 * i, 2 * j);\n swap(coords, 2 * i + 1, 2 * j + 1);\n}\n\n/**\n * @param {InstanceType} arr\n * @param {number} i\n * @param {number} j\n */\nfunction swap(arr, i, j) {\n const tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\n/**\n * @param {number} ax\n * @param {number} ay\n * @param {number} bx\n * @param {number} by\n */\nfunction sqDist(ax, ay, bx, by) {\n const dx = ax - bx;\n const dy = ay - by;\n return dx * dx + dy * dy;\n}\n","import { PermissionStatus, createPermissionHook, Platform, } from 'expo-modules-core';\nimport ExpoLocation from './ExpoLocation';\nimport { LocationAccuracy, LocationActivityType, LocationGeofencingEventType, LocationGeofencingRegionState, } from './Location.types';\nimport { LocationEventEmitter } from './LocationEventEmitter';\nimport { LocationSubscriber, HeadingSubscriber, _getCurrentWatchId } from './LocationSubscribers';\n// @needsAudit\n/**\n * @deprecated The Geocoding web api is no longer available from SDK 49 onwards. Use [Place Autocomplete](https://developers.google.com/maps/documentation/places/web-service/autocomplete) instead.\n * @param apiKey Google API key obtained from Google API Console. This API key must have `Geocoding API`\n * enabled, otherwise your geocoding requests will be denied.\n */\nfunction setGoogleApiKey(_apiKey) { }\n// @needsAudit\n/**\n * Check status of location providers.\n * @return A promise which fulfills with an object of type [LocationProviderStatus](#locationproviderstatus).\n */\nexport async function getProviderStatusAsync() {\n return ExpoLocation.getProviderStatusAsync();\n}\n// @needsAudit\n/**\n * Asks the user to turn on high accuracy location mode which enables network provider that uses\n * Google Play services to improve location accuracy and location-based services.\n * @return A promise resolving as soon as the user accepts the dialog. Rejects if denied.\n */\nexport async function enableNetworkProviderAsync() {\n // If network provider is disabled (user's location mode is set to \"Device only\"),\n // Android's location provider may not give you any results. Use this method in order to ask the user\n // to change the location mode to \"High accuracy\" which uses Google Play services and enables network provider.\n // `getCurrentPositionAsync` and `watchPositionAsync` are doing it automatically anyway.\n if (Platform.OS === 'android') {\n return ExpoLocation.enableNetworkProviderAsync();\n }\n}\n// @needsAudit\n/**\n * Requests for one-time delivery of the user's current location.\n * Depending on given `accuracy` option it may take some time to resolve,\n * especially when you're inside a building.\n * > __Note:__ Calling it causes the location manager to obtain a location fix which may take several\n * > seconds. Consider using [`Location.getLastKnownPositionAsync`](#locationgetlastknownpositionasyncoptions)\n * > if you expect to get a quick response and high accuracy is not required.\n * @param options\n * @return A promise which fulfills with an object of type [`LocationObject`](#locationobject).\n */\nexport async function getCurrentPositionAsync(options = {}) {\n return ExpoLocation.getCurrentPositionAsync(options);\n}\n// @needsAudit\n/**\n * Gets the last known position of the device or `null` if it's not available or doesn't match given\n * requirements such as maximum age or required accuracy.\n * It's considered to be faster than `getCurrentPositionAsync` as it doesn't request for the current\n * location, but keep in mind the returned location may not be up-to-date.\n * @param options\n * @return A promise which fulfills with an object of type [LocationObject](#locationobject) or\n * `null` if it's not available or doesn't match given requirements such as maximum age or required\n * accuracy.\n */\nexport async function getLastKnownPositionAsync(options = {}) {\n return ExpoLocation.getLastKnownPositionAsync(options);\n}\n// @needsAudit\n/**\n * Subscribe to location updates from the device. Please note that updates will only occur while the\n * application is in the foreground. To get location updates while in background you'll need to use\n * [Location.startLocationUpdatesAsync](#locationstartlocationupdatesasynctaskname-options).\n * @param options\n * @param callback This function is called on each location update. It receives an object of type\n * [`LocationObject`](#locationobject) as the first argument.\n * @return A promise which fulfills with a [`LocationSubscription`](#locationsubscription) object.\n */\nexport async function watchPositionAsync(options, callback) {\n const watchId = LocationSubscriber.registerCallback(callback);\n await ExpoLocation.watchPositionImplAsync(watchId, options);\n return {\n remove() {\n LocationSubscriber.unregisterCallback(watchId);\n },\n };\n}\n// @needsAudit\n/**\n * Gets the current heading information from the device. To simplify, it calls `watchHeadingAsync`\n * and waits for a couple of updates, and then returns the one that is accurate enough.\n * @return A promise which fulfills with an object of type [LocationHeadingObject](#locationheadingobject).\n */\nexport async function getHeadingAsync() {\n return new Promise(async (resolve) => {\n let tries = 0;\n const subscription = await watchHeadingAsync((heading) => {\n if (heading.accuracy > 1 || tries > 5) {\n subscription.remove();\n resolve(heading);\n }\n else {\n tries += 1;\n }\n });\n });\n}\n// @needsAudit\n/**\n * Subscribe to compass updates from the device.\n * @param callback This function is called on each compass update. It receives an object of type\n * [LocationHeadingObject](#locationheadingobject) as the first argument.\n * @return A promise which fulfills with a [`LocationSubscription`](#locationsubscription) object.\n */\nexport async function watchHeadingAsync(callback) {\n const watchId = HeadingSubscriber.registerCallback(callback);\n await ExpoLocation.watchDeviceHeading(watchId);\n return {\n remove() {\n HeadingSubscriber.unregisterCallback(watchId);\n },\n };\n}\n// @needsAudit\n/**\n * Geocode an address string to latitude-longitude location.\n * > **Note**: Using the Geocoding web api is no longer supported. Use [Place Autocomplete](https://developers.google.com/maps/documentation/places/web-service/autocomplete) instead.\n *\n * > **Note**: Geocoding is resource consuming and has to be used reasonably. Creating too many\n * > requests at a time can result in an error, so they have to be managed properly.\n * > It's also discouraged to use geocoding while the app is in the background and its results won't\n * > be shown to the user immediately.\n *\n * > On Android, you must request a location permission (`Permissions.LOCATION`) from the user\n * > before geocoding can be used.\n * @param address A string representing address, eg. `\"Baker Street London\"`.\n * @param options\n * @return A promise which fulfills with an array (in most cases its size is 1) of [`LocationGeocodedLocation`](#locationgeocodedlocation) objects.\n */\nexport async function geocodeAsync(address, options) {\n if (typeof address !== 'string') {\n throw new TypeError(`Address to geocode must be a string. Got ${address} instead.`);\n }\n if (options?.useGoogleMaps || Platform.OS === 'web') {\n if (__DEV__) {\n console.warn('The Geocoding API has been removed in SDK 49, use Place Autocomplete service instead' +\n '(https://developers.google.com/maps/documentation/places/web-service/autocomplete)');\n }\n return [];\n }\n return await ExpoLocation.geocodeAsync(address);\n}\n// @needsAudit\n/**\n * Reverse geocode a location to postal address.\n * > **Note**: Using the Geocoding web api is no longer supported. Use [Place Autocomplete](https://developers.google.com/maps/documentation/places/web-service/autocomplete) instead.\n *\n * > **Note**: Geocoding is resource consuming and has to be used reasonably. Creating too many\n * > requests at a time can result in an error, so they have to be managed properly.\n * > It's also discouraged to use geocoding while the app is in the background and its results won't\n * > be shown to the user immediately.\n *\n * > On Android, you must request a location permission (`Permissions.LOCATION`) from the user\n * > before geocoding can be used.\n * @param location An object representing a location.\n * @param options\n * @return A promise which fulfills with an array (in most cases its size is 1) of [`LocationGeocodedAddress`](#locationgeocodedaddress) objects.\n */\nexport async function reverseGeocodeAsync(location, options) {\n if (typeof location.latitude !== 'number' || typeof location.longitude !== 'number') {\n throw new TypeError('Location to reverse-geocode must be an object with number properties `latitude` and `longitude`.');\n }\n if (options?.useGoogleMaps || Platform.OS === 'web') {\n if (__DEV__) {\n console.warn('The Geocoding API has been removed in SDK 49, use Place Autocomplete service instead' +\n '(https://developers.google.com/maps/documentation/places/web-service/autocomplete)');\n }\n return [];\n }\n return await ExpoLocation.reverseGeocodeAsync(location);\n}\n// @needsAudit\n/**\n * Checks user's permissions for accessing location.\n * @return A promise that fulfills with an object of type [LocationPermissionResponse](#locationpermissionresponse).\n * @deprecated Use [`getForegroundPermissionsAsync`](#locationgetforegroundpermissionsasync) or [`getBackgroundPermissionsAsync`](#locationgetbackgroundpermissionsasync) instead.\n */\nexport async function getPermissionsAsync() {\n console.warn(`\"getPermissionsAsync()\" is now deprecated. Please use \"getForegroundPermissionsAsync()\" or \"getBackgroundPermissionsAsync()\" instead.`);\n return await ExpoLocation.getPermissionsAsync();\n}\n// @needsAudit\n/**\n * Asks the user to grant permissions for location.\n * @return A promise that fulfills with an object of type [LocationPermissionResponse](#locationpermissionresponse).\n * @deprecated Use [`requestForegroundPermissionsAsync`](#locationrequestforegroundpermissionsasync) or [`requestBackgroundPermissionsAsync`](#locationrequestbackgroundpermissionsasync) instead.\n */\nexport async function requestPermissionsAsync() {\n console.warn(`\"requestPermissionsAsync()\" is now deprecated. Please use \"requestForegroundPermissionsAsync()\" or \"requestBackgroundPermissionsAsync()\" instead.`);\n return await ExpoLocation.requestPermissionsAsync();\n}\n// @needsAudit\n/**\n * Checks user's permissions for accessing location while the app is in the foreground.\n * @return A promise that fulfills with an object of type [PermissionResponse](#permissionresponse).\n */\nexport async function getForegroundPermissionsAsync() {\n return await ExpoLocation.getForegroundPermissionsAsync();\n}\n// @needsAudit\n/**\n * Asks the user to grant permissions for location while the app is in the foreground.\n * @return A promise that fulfills with an object of type [PermissionResponse](#permissionresponse).\n */\nexport async function requestForegroundPermissionsAsync() {\n return await ExpoLocation.requestForegroundPermissionsAsync();\n}\n// @needsAudit\n/**\n * Check or request permissions for the foreground location.\n * This uses both `requestForegroundPermissionsAsync` and `getForegroundPermissionsAsync` to interact with the permissions.\n *\n * @example\n * ```ts\n * const [status, requestPermission] = Location.useForegroundPermissions();\n * ```\n */\nexport const useForegroundPermissions = createPermissionHook({\n getMethod: getForegroundPermissionsAsync,\n requestMethod: requestForegroundPermissionsAsync,\n});\n// @needsAudit\n/**\n * Checks user's permissions for accessing location while the app is in the background.\n * @return A promise that fulfills with an object of type [PermissionResponse](#permissionresponse).\n */\nexport async function getBackgroundPermissionsAsync() {\n return await ExpoLocation.getBackgroundPermissionsAsync();\n}\n// @needsAudit\n/**\n * Asks the user to grant permissions for location while the app is in the background.\n * On __Android 11 or higher__: this method will open the system settings page - before that happens\n * you should explain to the user why your application needs background location permission.\n * For example, you can use `Modal` component from `react-native` to do that.\n * > __Note__: Foreground permissions should be granted before asking for the background permissions\n * (your app can't obtain background permission without foreground permission).\n * @return A promise that fulfills with an object of type [PermissionResponse](#permissionresponse).\n */\nexport async function requestBackgroundPermissionsAsync() {\n return await ExpoLocation.requestBackgroundPermissionsAsync();\n}\n// @needsAudit\n/**\n * Check or request permissions for the background location.\n * This uses both `requestBackgroundPermissionsAsync` and `getBackgroundPermissionsAsync` to\n * interact with the permissions.\n *\n * @example\n * ```ts\n * const [status, requestPermission] = Location.useBackgroundPermissions();\n * ```\n */\nexport const useBackgroundPermissions = createPermissionHook({\n getMethod: getBackgroundPermissionsAsync,\n requestMethod: requestBackgroundPermissionsAsync,\n});\n// --- Location service\n// @needsAudit\n/**\n * Checks whether location services are enabled by the user.\n * @return A promise which fulfills to `true` if location services are enabled on the device,\n * or `false` if not.\n */\nexport async function hasServicesEnabledAsync() {\n return await ExpoLocation.hasServicesEnabledAsync();\n}\n// --- Background location updates\nfunction _validateTaskName(taskName) {\n if (!taskName || typeof taskName !== 'string') {\n throw new Error(`\\`taskName\\` must be a non-empty string. Got ${taskName} instead.`);\n }\n}\n// @docsMissing\nexport async function isBackgroundLocationAvailableAsync() {\n const providerStatus = await getProviderStatusAsync();\n return providerStatus.backgroundModeEnabled;\n}\n// @needsAudit\n/**\n * Registers for receiving location updates that can also come when the app is in the background.\n *\n * # Task parameters\n *\n * Background location task will be receiving following data:\n * - `locations` - An array of the new locations.\n *\n * ```ts\n * import * as TaskManager from 'expo-task-manager';\n *\n * TaskManager.defineTask(YOUR_TASK_NAME, ({ data: { locations }, error }) => {\n * if (error) {\n * // check `error.message` for more details.\n * return;\n * }\n * console.log('Received new locations', locations);\n * });\n * ```\n *\n * @param taskName Name of the task receiving location updates.\n * @param options An object of options passed to the location manager.\n *\n * @return A promise resolving once the task with location updates is registered.\n */\nexport async function startLocationUpdatesAsync(taskName, options = { accuracy: LocationAccuracy.Balanced }) {\n _validateTaskName(taskName);\n await ExpoLocation.startLocationUpdatesAsync(taskName, options);\n}\n// @needsAudit\n/**\n * Stops geofencing for specified task.\n * @param taskName Name of the background location task to stop.\n * @return A promise resolving as soon as the task is unregistered.\n */\nexport async function stopLocationUpdatesAsync(taskName) {\n _validateTaskName(taskName);\n await ExpoLocation.stopLocationUpdatesAsync(taskName);\n}\n// @needsAudit\n/**\n * @param taskName Name of the location task to check.\n * @return A promise which fulfills with boolean value indicating whether the location task is\n * started or not.\n */\nexport async function hasStartedLocationUpdatesAsync(taskName) {\n _validateTaskName(taskName);\n return ExpoLocation.hasStartedLocationUpdatesAsync(taskName);\n}\n// --- Geofencing\nfunction _validateRegions(regions) {\n if (!regions || regions.length === 0) {\n throw new Error('Regions array cannot be empty. Use `stopGeofencingAsync` if you want to stop geofencing all regions');\n }\n for (const region of regions) {\n if (typeof region.latitude !== 'number') {\n throw new TypeError(`Region's latitude must be a number. Got '${region.latitude}' instead.`);\n }\n if (typeof region.longitude !== 'number') {\n throw new TypeError(`Region's longitude must be a number. Got '${region.longitude}' instead.`);\n }\n if (typeof region.radius !== 'number') {\n throw new TypeError(`Region's radius must be a number. Got '${region.radius}' instead.`);\n }\n }\n}\n// @needsAudit\n/**\n * Starts geofencing for given regions. When the new event comes, the task with specified name will\n * be called with the region that the device enter to or exit from.\n * If you want to add or remove regions from already running geofencing task, you can just call\n * `startGeofencingAsync` again with the new array of regions.\n *\n * # Task parameters\n *\n * Geofencing task will be receiving following data:\n * - `eventType` - Indicates the reason for calling the task, which can be triggered by entering or exiting the region.\n * See [GeofencingEventType](#geofencingeventtype).\n * - `region` - Object containing details about updated region. See [LocationRegion](#locationregion) for more details.\n *\n * @param taskName Name of the task that will be called when the device enters or exits from specified regions.\n * @param regions Array of region objects to be geofenced.\n *\n * @return A promise resolving as soon as the task is registered.\n *\n * @example\n * ```ts\n * import { GeofencingEventType } from 'expo-location';\n * import * as TaskManager from 'expo-task-manager';\n *\n * TaskManager.defineTask(YOUR_TASK_NAME, ({ data: { eventType, region }, error }) => {\n * if (error) {\n * // check `error.message` for more details.\n * return;\n * }\n * if (eventType === GeofencingEventType.Enter) {\n * console.log(\"You've entered region:\", region);\n * } else if (eventType === GeofencingEventType.Exit) {\n * console.log(\"You've left region:\", region);\n * }\n * });\n * ```\n */\nexport async function startGeofencingAsync(taskName, regions = []) {\n _validateTaskName(taskName);\n _validateRegions(regions);\n await ExpoLocation.startGeofencingAsync(taskName, { regions });\n}\n// @needsAudit\n/**\n * Stops geofencing for specified task. It unregisters the background task so the app will not be\n * receiving any updates, especially in the background.\n * @param taskName Name of the task to unregister.\n * @return A promise resolving as soon as the task is unregistered.\n */\nexport async function stopGeofencingAsync(taskName) {\n _validateTaskName(taskName);\n await ExpoLocation.stopGeofencingAsync(taskName);\n}\n// @needsAudit\n/**\n * @param taskName Name of the geofencing task to check.\n * @return A promise which fulfills with boolean value indicating whether the geofencing task is\n * started or not.\n */\nexport async function hasStartedGeofencingAsync(taskName) {\n _validateTaskName(taskName);\n return ExpoLocation.hasStartedGeofencingAsync(taskName);\n}\nexport { LocationEventEmitter as EventEmitter, _getCurrentWatchId };\nexport { LocationAccuracy as Accuracy, LocationActivityType as ActivityType, LocationGeofencingEventType as GeofencingEventType, LocationGeofencingRegionState as GeofencingRegionState, PermissionStatus, setGoogleApiKey, };\nexport { installWebGeolocationPolyfill } from './GeolocationPolyfill';\nexport * from './Location.types';\n//# sourceMappingURL=Location.js.map","import { PermissionStatus } from 'expo-modules-core';\nimport { LocationAccuracy, } from './Location.types';\nimport { LocationEventEmitter } from './LocationEventEmitter';\nclass GeocoderError extends Error {\n code;\n constructor() {\n super('Geocoder service is not available for this device.');\n this.code = 'E_NO_GEOCODER';\n }\n}\n/**\n * Converts `GeolocationPosition` to JavaScript object.\n */\nfunction geolocationPositionToJSON(position) {\n const { coords, timestamp } = position;\n return {\n coords: {\n latitude: coords.latitude,\n longitude: coords.longitude,\n altitude: coords.altitude,\n accuracy: coords.accuracy,\n altitudeAccuracy: coords.altitudeAccuracy,\n heading: coords.heading,\n speed: coords.speed,\n },\n timestamp,\n };\n}\n/**\n * Checks whether given location didn't exceed given `maxAge` and fits in the required accuracy.\n */\nfunction isLocationValid(location, options) {\n const maxAge = typeof options.maxAge === 'number' ? options.maxAge : Infinity;\n const requiredAccuracy = typeof options.requiredAccuracy === 'number' ? options.requiredAccuracy : Infinity;\n const locationAccuracy = location.coords.accuracy ?? Infinity;\n return Date.now() - location.timestamp <= maxAge && locationAccuracy <= requiredAccuracy;\n}\n/**\n * Gets the permission details. The implementation is not very good as it actually requests\n * for the current location, but there is no better way on web so far :(\n */\nasync function getPermissionsAsync() {\n return new Promise((resolve) => {\n const resolveWithStatus = (status) => resolve({\n status,\n granted: status === PermissionStatus.GRANTED,\n canAskAgain: true,\n expires: 0,\n });\n navigator.geolocation.getCurrentPosition(() => resolveWithStatus(PermissionStatus.GRANTED), ({ code }) => {\n if (code === 1 /* PERMISSION_DENIED */) {\n resolveWithStatus(PermissionStatus.DENIED);\n }\n else {\n resolveWithStatus(PermissionStatus.UNDETERMINED);\n }\n }, { enableHighAccuracy: false, maximumAge: Infinity });\n });\n}\nlet lastKnownPosition = null;\nexport default {\n get name() {\n return 'ExpoLocation';\n },\n async getProviderStatusAsync() {\n return {\n locationServicesEnabled: 'geolocation' in navigator,\n };\n },\n async getLastKnownPositionAsync(options = {}) {\n if (lastKnownPosition && isLocationValid(lastKnownPosition, options)) {\n return lastKnownPosition;\n }\n return null;\n },\n async getCurrentPositionAsync(options) {\n return new Promise((resolve, reject) => {\n const resolver = (position) => {\n lastKnownPosition = geolocationPositionToJSON(position);\n resolve(lastKnownPosition);\n };\n navigator.geolocation.getCurrentPosition(resolver, reject, {\n maximumAge: Infinity,\n enableHighAccuracy: (options.accuracy ?? 0) > LocationAccuracy.Balanced,\n ...options,\n });\n });\n },\n async removeWatchAsync(watchId) {\n navigator.geolocation.clearWatch(watchId);\n },\n async watchDeviceHeading(headingId) {\n console.warn('Location.watchDeviceHeading: is not supported on web');\n },\n async hasServicesEnabledAsync() {\n return 'geolocation' in navigator;\n },\n async geocodeAsync() {\n throw new GeocoderError();\n },\n async reverseGeocodeAsync() {\n throw new GeocoderError();\n },\n async watchPositionImplAsync(watchId, options) {\n return new Promise((resolve) => {\n // @ts-ignore: the types here need to be fixed\n watchId = global.navigator.geolocation.watchPosition((position) => {\n lastKnownPosition = geolocationPositionToJSON(position);\n LocationEventEmitter.emit('Expo.locationChanged', {\n watchId,\n location: lastKnownPosition,\n });\n }, undefined, \n // @ts-ignore: the options object needs to be fixed\n options);\n resolve(watchId);\n });\n },\n getPermissionsAsync,\n async requestPermissionsAsync() {\n return getPermissionsAsync();\n },\n async requestForegroundPermissionsAsync() {\n return getPermissionsAsync();\n },\n async requestBackgroundPermissionsAsync() {\n return getPermissionsAsync();\n },\n async getForegroundPermissionsAsync() {\n return getPermissionsAsync();\n },\n async getBackgroundPermissionsAsync() {\n return getPermissionsAsync();\n },\n // no-op\n startObserving() { },\n stopObserving() { },\n};\n//# sourceMappingURL=ExpoLocation.web.js.map","// @needsAudit\n/**\n * Enum with available location accuracies.\n */\nexport var LocationAccuracy;\n(function (LocationAccuracy) {\n /**\n * Accurate to the nearest three kilometers.\n */\n LocationAccuracy[LocationAccuracy[\"Lowest\"] = 1] = \"Lowest\";\n /**\n * Accurate to the nearest kilometer.\n */\n LocationAccuracy[LocationAccuracy[\"Low\"] = 2] = \"Low\";\n /**\n * Accurate to within one hundred meters.\n */\n LocationAccuracy[LocationAccuracy[\"Balanced\"] = 3] = \"Balanced\";\n /**\n * Accurate to within ten meters of the desired target.\n */\n LocationAccuracy[LocationAccuracy[\"High\"] = 4] = \"High\";\n /**\n * The best level of accuracy available.\n */\n LocationAccuracy[LocationAccuracy[\"Highest\"] = 5] = \"Highest\";\n /**\n * The highest possible accuracy that uses additional sensor data to facilitate navigation apps.\n */\n LocationAccuracy[LocationAccuracy[\"BestForNavigation\"] = 6] = \"BestForNavigation\";\n})(LocationAccuracy || (LocationAccuracy = {}));\n// @needsAudit\n/**\n * Enum with available activity types of background location tracking.\n */\nexport var LocationActivityType;\n(function (LocationActivityType) {\n /**\n * Default activity type. Use it if there is no other type that matches the activity you track.\n */\n LocationActivityType[LocationActivityType[\"Other\"] = 1] = \"Other\";\n /**\n * Location updates are being used specifically during vehicular navigation to track location\n * changes to the automobile.\n */\n LocationActivityType[LocationActivityType[\"AutomotiveNavigation\"] = 2] = \"AutomotiveNavigation\";\n /**\n * Use this activity type if you track fitness activities such as walking, running, cycling,\n * and so on.\n */\n LocationActivityType[LocationActivityType[\"Fitness\"] = 3] = \"Fitness\";\n /**\n * Activity type for movements for other types of vehicular navigation that are not automobile\n * related.\n */\n LocationActivityType[LocationActivityType[\"OtherNavigation\"] = 4] = \"OtherNavigation\";\n /**\n * Intended for airborne activities. Fall backs to `ActivityType.Other` if\n * unsupported.\n * @platform ios 12+\n */\n LocationActivityType[LocationActivityType[\"Airborne\"] = 5] = \"Airborne\";\n})(LocationActivityType || (LocationActivityType = {}));\n// @needsAudit\n/**\n * A type of the event that geofencing task can receive.\n */\nexport var LocationGeofencingEventType;\n(function (LocationGeofencingEventType) {\n /**\n * Emitted when the device entered observed region.\n */\n LocationGeofencingEventType[LocationGeofencingEventType[\"Enter\"] = 1] = \"Enter\";\n /**\n * Occurs as soon as the device left observed region\n */\n LocationGeofencingEventType[LocationGeofencingEventType[\"Exit\"] = 2] = \"Exit\";\n})(LocationGeofencingEventType || (LocationGeofencingEventType = {}));\n// @needsAudit\n/**\n * State of the geofencing region that you receive through the geofencing task.\n */\nexport var LocationGeofencingRegionState;\n(function (LocationGeofencingRegionState) {\n /**\n * Indicates that the device position related to the region is unknown.\n */\n LocationGeofencingRegionState[LocationGeofencingRegionState[\"Unknown\"] = 0] = \"Unknown\";\n /**\n * Indicates that the device is inside the region.\n */\n LocationGeofencingRegionState[LocationGeofencingRegionState[\"Inside\"] = 1] = \"Inside\";\n /**\n * Inverse of inside state.\n */\n LocationGeofencingRegionState[LocationGeofencingRegionState[\"Outside\"] = 2] = \"Outside\";\n})(LocationGeofencingRegionState || (LocationGeofencingRegionState = {}));\n//# sourceMappingURL=Location.types.js.map","import { EventEmitter } from 'expo-modules-core';\nexport const LocationEventEmitter = new EventEmitter({});\n//# sourceMappingURL=LocationEventEmitter.web.js.map","import ExpoLocation from './ExpoLocation';\nimport { LocationEventEmitter } from './LocationEventEmitter';\nlet nextWatchId = 0;\nclass Subscriber {\n eventName;\n eventDataField;\n callbacks = {};\n eventSubscription = null;\n constructor(eventName, eventDataField) {\n this.eventName = eventName;\n this.eventDataField = eventDataField;\n }\n maybeInitializeSubscription() {\n if (this.eventSubscription) {\n return;\n }\n this.eventSubscription = LocationEventEmitter.addListener(this.eventName, (event) => this.trigger(event));\n }\n /**\n * Registers given callback under new id which is then returned.\n */\n registerCallback(callback) {\n this.maybeInitializeSubscription();\n const id = ++nextWatchId;\n this.callbacks[id] = callback;\n return id;\n }\n /**\n * Unregisters a callback with given id and revokes the subscription if possible.\n */\n unregisterCallback(id) {\n // Do nothing if we have already unregistered the callback.\n if (!this.callbacks[id]) {\n return;\n }\n delete this.callbacks[id];\n ExpoLocation.removeWatchAsync(id);\n if (Object.keys(this.callbacks).length === 0 && this.eventSubscription) {\n LocationEventEmitter.removeSubscription(this.eventSubscription);\n this.eventSubscription = null;\n }\n }\n trigger(event) {\n const watchId = event.watchId;\n const callback = this.callbacks[watchId];\n if (callback) {\n callback(event[this.eventDataField]);\n }\n else {\n ExpoLocation.removeWatchAsync(watchId);\n }\n }\n}\nexport const LocationSubscriber = new Subscriber('Expo.locationChanged', 'location');\nexport const HeadingSubscriber = new Subscriber('Expo.headingChanged', 'heading');\n/**\n * @private Necessary for some unit tests.\n */\nexport function _getCurrentWatchId() {\n return nextWatchId;\n}\n//# sourceMappingURL=LocationSubscribers.js.map","import { Platform } from 'expo-modules-core';\nimport ExpoLocation from './ExpoLocation';\nimport { LocationAccuracy } from './Location.types';\nimport { LocationSubscriber } from './LocationSubscribers';\n// @needsAudit\n/**\n * Polyfills `navigator.geolocation` for interop with the core React Native and Web API approach to geolocation.\n */\nexport function installWebGeolocationPolyfill() {\n if (Platform.OS !== 'web') {\n // Make sure `window.navigator` is defined in the global scope.\n if (!('window' in global)) {\n global.window = global;\n }\n if (!('navigator' in global.window)) {\n global.window.navigator = {};\n }\n // @ts-ignore\n window.navigator.geolocation = {\n getCurrentPosition,\n watchPosition,\n clearWatch,\n // We don't polyfill stopObserving, this is an internal method that probably should not even exist\n // in react-native docs\n stopObserving: () => { },\n };\n }\n}\nfunction convertGeolocationOptions(options) {\n return {\n accuracy: options.enableHighAccuracy ? LocationAccuracy.High : LocationAccuracy.Balanced,\n };\n}\nfunction getCurrentPosition(success, error = () => { }, options = {}) {\n _getCurrentPositionAsyncWrapper(success, error, options);\n}\n// This function exists to let us continue to return undefined from getCurrentPosition, while still\n// using async/await for the internal implementation of it\nasync function _getCurrentPositionAsyncWrapper(success, error, options) {\n try {\n await ExpoLocation.requestPermissionsAsync();\n const result = await ExpoLocation.getCurrentPositionAsync(convertGeolocationOptions(options));\n success(result);\n }\n catch (e) {\n error(e);\n }\n}\n// Polyfill: navigator.geolocation.watchPosition\nfunction watchPosition(success, error, options) {\n const watchId = LocationSubscriber.registerCallback(success);\n ExpoLocation.watchPositionImplAsync(watchId, options).catch((err) => {\n LocationSubscriber.unregisterCallback(watchId);\n error({ watchId, message: err.message, code: err.code });\n });\n return watchId;\n}\n// Polyfill: navigator.geolocation.clearWatch\nfunction clearWatch(watchId) {\n LocationSubscriber.unregisterCallback(watchId);\n}\n//# sourceMappingURL=GeolocationPolyfill.js.map","// The primary entry point assumes we're working with standard ReactDOM/RN, but\n// older versions that do not include `useSyncExternalStore` (React 16.9 - 17.x).\n// Because of that, the useSyncExternalStore compat shim is needed.\nimport { useSyncExternalStore } from 'use-sync-external-store/shim';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';\nimport { unstable_batchedUpdates as batch } from './utils/reactBatchedUpdates';\nimport { setBatch } from './utils/batch';\nimport { initializeUseSelector } from './hooks/useSelector';\nimport { initializeConnect } from './components/connect';\ninitializeUseSelector(useSyncExternalStoreWithSelector);\ninitializeConnect(useSyncExternalStore); // Enable batched updates in our subscriptions for use\n// with standard React renderers (ReactDOM, React Native)\n\nsetBatch(batch);\nexport { batch };\nexport * from './exports';","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"react\");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}\nfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var h=require(\"react\"),n=require(\"use-sync-external-store/shim\");function p(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var q=\"function\"===typeof Object.is?Object.is:p,r=n.useSyncExternalStore,t=h.useRef,u=h.useEffect,v=h.useMemo,w=h.useDebugValue;\nexports.useSyncExternalStoreWithSelector=function(a,b,e,l,g){var c=t(null);if(null===c.current){var f={hasValue:!1,value:null};c.current=f}else f=c.current;c=v(function(){function a(a){if(!c){c=!0;d=a;a=l(a);if(void 0!==g&&f.hasValue){var b=f.value;if(g(b,a))return k=b}return k=a}b=k;if(q(d,a))return b;var e=l(a);if(void 0!==g&&g(b,e))return b;d=a;return k=e}var c=!1,d,k,m=void 0===e?null:e;return[function(){return a(b())},null===m?void 0:function(){return a(m())}]},[b,e,l,g]);var d=r(a,c[0],c[1]);\nu(function(){f.hasValue=!0;f.value=d},[d]);w(d);return d};\n","export { unstable_batchedUpdates } from 'react-dom';","// Default to a dummy \"batch\" implementation that just runs the callback\nfunction defaultNoopBatch(callback) {\n callback();\n}\n\nlet batch = defaultNoopBatch; // Allow injecting another batching function later\n\nexport const setBatch = newBatch => batch = newBatch; // Supply a getter just to skip dealing with ESM bindings\n\nexport const getBatch = () => batch;","import { useCallback, useDebugValue, useRef } from 'react';\nimport { createReduxContextHook, useReduxContext as useDefaultReduxContext } from './useReduxContext';\nimport { ReactReduxContext } from '../components/Context';\nimport { notInitialized } from '../utils/useSyncExternalStore';\nlet useSyncExternalStoreWithSelector = notInitialized;\nexport const initializeUseSelector = fn => {\n useSyncExternalStoreWithSelector = fn;\n};\n\nconst refEquality = (a, b) => a === b;\n/**\r\n * Hook factory, which creates a `useSelector` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your ``.\r\n * @returns {Function} A `useSelector` hook bound to the specified context.\r\n */\n\n\nexport function createSelectorHook(context = ReactReduxContext) {\n const useReduxContext = context === ReactReduxContext ? useDefaultReduxContext : createReduxContextHook(context);\n return function useSelector(selector, equalityFnOrOptions = {}) {\n const {\n equalityFn = refEquality,\n stabilityCheck = undefined,\n noopCheck = undefined\n } = typeof equalityFnOrOptions === 'function' ? {\n equalityFn: equalityFnOrOptions\n } : equalityFnOrOptions;\n\n if (process.env.NODE_ENV !== 'production') {\n if (!selector) {\n throw new Error(`You must pass a selector to useSelector`);\n }\n\n if (typeof selector !== 'function') {\n throw new Error(`You must pass a function as a selector to useSelector`);\n }\n\n if (typeof equalityFn !== 'function') {\n throw new Error(`You must pass a function as an equality function to useSelector`);\n }\n }\n\n const {\n store,\n subscription,\n getServerState,\n stabilityCheck: globalStabilityCheck,\n noopCheck: globalNoopCheck\n } = useReduxContext();\n const firstRun = useRef(true);\n const wrappedSelector = useCallback({\n [selector.name](state) {\n const selected = selector(state);\n\n if (process.env.NODE_ENV !== 'production') {\n const finalStabilityCheck = typeof stabilityCheck === 'undefined' ? globalStabilityCheck : stabilityCheck;\n\n if (finalStabilityCheck === 'always' || finalStabilityCheck === 'once' && firstRun.current) {\n const toCompare = selector(state);\n\n if (!equalityFn(selected, toCompare)) {\n let stack = undefined;\n\n try {\n throw new Error();\n } catch (e) {\n ;\n ({\n stack\n } = e);\n }\n\n console.warn('Selector ' + (selector.name || 'unknown') + ' returned a different result when called with the same parameters. This can lead to unnecessary rerenders.' + '\\nSelectors that return a new reference (such as an object or an array) should be memoized: https://redux.js.org/usage/deriving-data-selectors#optimizing-selectors-with-memoization', {\n state,\n selected,\n selected2: toCompare,\n stack\n });\n }\n }\n\n const finalNoopCheck = typeof noopCheck === 'undefined' ? globalNoopCheck : noopCheck;\n\n if (finalNoopCheck === 'always' || finalNoopCheck === 'once' && firstRun.current) {\n // @ts-ignore\n if (selected === state) {\n let stack = undefined;\n\n try {\n throw new Error();\n } catch (e) {\n ;\n ({\n stack\n } = e);\n }\n\n console.warn('Selector ' + (selector.name || 'unknown') + ' returned the root state when called. This can lead to unnecessary rerenders.' + '\\nSelectors that return the entire state are almost certainly a mistake, as they will cause a rerender whenever *anything* in state changes.', {\n stack\n });\n }\n }\n\n if (firstRun.current) firstRun.current = false;\n }\n\n return selected;\n }\n\n }[selector.name], [selector, globalStabilityCheck, stabilityCheck]);\n const selectedState = useSyncExternalStoreWithSelector(subscription.addNestedSub, store.getState, getServerState || store.getState, wrappedSelector, equalityFn);\n useDebugValue(selectedState);\n return selectedState;\n };\n}\n/**\r\n * A hook to access the redux store's state. This hook takes a selector function\r\n * as an argument. The selector is called with the store state.\r\n *\r\n * This hook takes an optional equality comparison function as the second parameter\r\n * that allows you to customize the way the selected state is compared to determine\r\n * whether the component needs to be re-rendered.\r\n *\r\n * @param {Function} selector the selector function\r\n * @param {Function=} equalityFn the function that will be used to determine equality\r\n *\r\n * @returns {any} the selected state\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useSelector } from 'react-redux'\r\n *\r\n * export const CounterComponent = () => {\r\n * const counter = useSelector(state => state.counter)\r\n * return
{counter}
\r\n * }\r\n */\n\nexport const useSelector = /*#__PURE__*/createSelectorHook();","import { useContext } from 'react';\nimport { ReactReduxContext } from '../components/Context';\n\n/**\r\n * Hook factory, which creates a `useReduxContext` hook bound to a given context. This is a low-level\r\n * hook that you should usually not need to call directly.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your ``.\r\n * @returns {Function} A `useReduxContext` hook bound to the specified context.\r\n */\nexport function createReduxContextHook(context = ReactReduxContext) {\n return function useReduxContext() {\n const contextValue = useContext(context);\n\n if (process.env.NODE_ENV !== 'production' && !contextValue) {\n throw new Error('could not find react-redux context value; please ensure the component is wrapped in a ');\n }\n\n return contextValue;\n };\n}\n/**\r\n * A hook to access the value of the `ReactReduxContext`. This is a low-level\r\n * hook that you should usually not need to call directly.\r\n *\r\n * @returns {any} the value of the `ReactReduxContext`\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useReduxContext } from 'react-redux'\r\n *\r\n * export const CounterComponent = () => {\r\n * const { store } = useReduxContext()\r\n * return
{store.getState()}
\r\n * }\r\n */\n\nexport const useReduxContext = /*#__PURE__*/createReduxContextHook();","import * as React from 'react';\nconst ContextKey = Symbol.for(`react-redux-context`);\nconst gT = typeof globalThis !== \"undefined\" ? globalThis :\n/* fall back to a per-module scope (pre-8.1 behaviour) if `globalThis` is not available */\n{};\n\nfunction getContext() {\n var _gT$ContextKey;\n\n if (!React.createContext) return {};\n const contextMap = (_gT$ContextKey = gT[ContextKey]) != null ? _gT$ContextKey : gT[ContextKey] = new Map();\n let realContext = contextMap.get(React.createContext);\n\n if (!realContext) {\n realContext = React.createContext(null);\n\n if (process.env.NODE_ENV !== 'production') {\n realContext.displayName = 'ReactRedux';\n }\n\n contextMap.set(React.createContext, realContext);\n }\n\n return realContext;\n}\n\nexport const ReactReduxContext = /*#__PURE__*/getContext();\nexport default ReactReduxContext;","export const notInitialized = () => {\n throw new Error('uSES not initialized!');\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"reactReduxForwardedRef\"];\n\n/* eslint-disable valid-jsdoc, @typescript-eslint/no-unused-vars */\nimport hoistStatics from 'hoist-non-react-statics';\nimport * as React from 'react';\nimport { isValidElementType, isContextConsumer } from 'react-is';\nimport defaultSelectorFactory from '../connect/selectorFactory';\nimport { mapDispatchToPropsFactory } from '../connect/mapDispatchToProps';\nimport { mapStateToPropsFactory } from '../connect/mapStateToProps';\nimport { mergePropsFactory } from '../connect/mergeProps';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\nimport shallowEqual from '../utils/shallowEqual';\nimport warning from '../utils/warning';\nimport { ReactReduxContext } from './Context';\nimport { notInitialized } from '../utils/useSyncExternalStore';\nlet useSyncExternalStore = notInitialized;\nexport const initializeConnect = fn => {\n useSyncExternalStore = fn;\n}; // Define some constant arrays just to avoid re-creating these\n\nconst EMPTY_ARRAY = [null, 0];\nconst NO_SUBSCRIPTION_ARRAY = [null, null]; // Attempts to stringify whatever not-really-a-component value we were given\n// for logging in an error message\n\nconst stringifyComponent = Comp => {\n try {\n return JSON.stringify(Comp);\n } catch (err) {\n return String(Comp);\n }\n};\n\n// This is \"just\" a `useLayoutEffect`, but with two modifications:\n// - we need to fall back to `useEffect` in SSR to avoid annoying warnings\n// - we extract this to a separate function to avoid closing over values\n// and causing memory leaks\nfunction useIsomorphicLayoutEffectWithArgs(effectFunc, effectArgs, dependencies) {\n useIsomorphicLayoutEffect(() => effectFunc(...effectArgs), dependencies);\n} // Effect callback, extracted: assign the latest props values to refs for later usage\n\n\nfunction captureWrapperProps(lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, // actualChildProps: unknown,\nchildPropsFromStoreUpdate, notifyNestedSubs) {\n // We want to capture the wrapper props and child props we used for later comparisons\n lastWrapperProps.current = wrapperProps;\n renderIsScheduled.current = false; // If the render was from a store update, clear out that reference and cascade the subscriber update\n\n if (childPropsFromStoreUpdate.current) {\n childPropsFromStoreUpdate.current = null;\n notifyNestedSubs();\n }\n} // Effect callback, extracted: subscribe to the Redux store or nearest connected ancestor,\n// check for updates after dispatched actions, and trigger re-renders.\n\n\nfunction subscribeUpdates(shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, isMounted, childPropsFromStoreUpdate, notifyNestedSubs, // forceComponentUpdateDispatch: React.Dispatch,\nadditionalSubscribeListener) {\n // If we're not subscribed to the store, nothing to do here\n if (!shouldHandleStateChanges) return () => {}; // Capture values for checking if and when this component unmounts\n\n let didUnsubscribe = false;\n let lastThrownError = null; // We'll run this callback every time a store subscription update propagates to this component\n\n const checkForUpdates = () => {\n if (didUnsubscribe || !isMounted.current) {\n // Don't run stale listeners.\n // Redux doesn't guarantee unsubscriptions happen until next dispatch.\n return;\n } // TODO We're currently calling getState ourselves here, rather than letting `uSES` do it\n\n\n const latestStoreState = store.getState();\n let newChildProps, error;\n\n try {\n // Actually run the selector with the most recent store state and wrapper props\n // to determine what the child props should be\n newChildProps = childPropsSelector(latestStoreState, lastWrapperProps.current);\n } catch (e) {\n error = e;\n lastThrownError = e;\n }\n\n if (!error) {\n lastThrownError = null;\n } // If the child props haven't changed, nothing to do here - cascade the subscription update\n\n\n if (newChildProps === lastChildProps.current) {\n if (!renderIsScheduled.current) {\n notifyNestedSubs();\n }\n } else {\n // Save references to the new child props. Note that we track the \"child props from store update\"\n // as a ref instead of a useState/useReducer because we need a way to determine if that value has\n // been processed. If this went into useState/useReducer, we couldn't clear out the value without\n // forcing another re-render, which we don't want.\n lastChildProps.current = newChildProps;\n childPropsFromStoreUpdate.current = newChildProps;\n renderIsScheduled.current = true; // TODO This is hacky and not how `uSES` is meant to be used\n // Trigger the React `useSyncExternalStore` subscriber\n\n additionalSubscribeListener();\n }\n }; // Actually subscribe to the nearest connected ancestor (or store)\n\n\n subscription.onStateChange = checkForUpdates;\n subscription.trySubscribe(); // Pull data from the store after first render in case the store has\n // changed since we began.\n\n checkForUpdates();\n\n const unsubscribeWrapper = () => {\n didUnsubscribe = true;\n subscription.tryUnsubscribe();\n subscription.onStateChange = null;\n\n if (lastThrownError) {\n // It's possible that we caught an error due to a bad mapState function, but the\n // parent re-rendered without this component and we're about to unmount.\n // This shouldn't happen as long as we do top-down subscriptions correctly, but\n // if we ever do those wrong, this throw will surface the error in our tests.\n // In that case, throw the error from here so it doesn't get lost.\n throw lastThrownError;\n }\n };\n\n return unsubscribeWrapper;\n} // Reducer initial state creation for our update reducer\n\n\nconst initStateUpdates = () => EMPTY_ARRAY;\n\nfunction strictEqual(a, b) {\n return a === b;\n}\n/**\r\n * Infers the type of props that a connector will inject into a component.\r\n */\n\n\nlet hasWarnedAboutDeprecatedPureOption = false;\n/**\r\n * Connects a React component to a Redux store.\r\n *\r\n * - Without arguments, just wraps the component, without changing the behavior / props\r\n *\r\n * - If 2 params are passed (3rd param, mergeProps, is skipped), default behavior\r\n * is to override ownProps (as stated in the docs), so what remains is everything that's\r\n * not a state or dispatch prop\r\n *\r\n * - When 3rd param is passed, we don't know if ownProps propagate and whether they\r\n * should be valid component props, because it depends on mergeProps implementation.\r\n * As such, it is the user's responsibility to extend ownProps interface from state or\r\n * dispatch props or both when applicable\r\n *\r\n * @param mapStateToProps A function that extracts values from state\r\n * @param mapDispatchToProps Setup for dispatching actions\r\n * @param mergeProps Optional callback to merge state and dispatch props together\r\n * @param options Options for configuring the connection\r\n *\r\n */\n\nfunction connect(mapStateToProps, mapDispatchToProps, mergeProps, {\n // The `pure` option has been removed, so TS doesn't like us destructuring this to check its existence.\n // @ts-ignore\n pure,\n areStatesEqual = strictEqual,\n areOwnPropsEqual = shallowEqual,\n areStatePropsEqual = shallowEqual,\n areMergedPropsEqual = shallowEqual,\n // use React's forwardRef to expose a ref of the wrapped component\n forwardRef = false,\n // the context consumer to use\n context = ReactReduxContext\n} = {}) {\n if (process.env.NODE_ENV !== 'production') {\n if (pure !== undefined && !hasWarnedAboutDeprecatedPureOption) {\n hasWarnedAboutDeprecatedPureOption = true;\n warning('The `pure` option has been removed. `connect` is now always a \"pure/memoized\" component');\n }\n }\n\n const Context = context;\n const initMapStateToProps = mapStateToPropsFactory(mapStateToProps);\n const initMapDispatchToProps = mapDispatchToPropsFactory(mapDispatchToProps);\n const initMergeProps = mergePropsFactory(mergeProps);\n const shouldHandleStateChanges = Boolean(mapStateToProps);\n\n const wrapWithConnect = WrappedComponent => {\n if (process.env.NODE_ENV !== 'production' && !isValidElementType(WrappedComponent)) {\n throw new Error(`You must pass a component to the function returned by connect. Instead received ${stringifyComponent(WrappedComponent)}`);\n }\n\n const wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\n const displayName = `Connect(${wrappedComponentName})`;\n const selectorFactoryOptions = {\n shouldHandleStateChanges,\n displayName,\n wrappedComponentName,\n WrappedComponent,\n // @ts-ignore\n initMapStateToProps,\n // @ts-ignore\n initMapDispatchToProps,\n initMergeProps,\n areStatesEqual,\n areStatePropsEqual,\n areOwnPropsEqual,\n areMergedPropsEqual\n };\n\n function ConnectFunction(props) {\n const [propsContext, reactReduxForwardedRef, wrapperProps] = React.useMemo(() => {\n // Distinguish between actual \"data\" props that were passed to the wrapper component,\n // and values needed to control behavior (forwarded refs, alternate context instances).\n // To maintain the wrapperProps object reference, memoize this destructuring.\n const {\n reactReduxForwardedRef\n } = props,\n wrapperProps = _objectWithoutPropertiesLoose(props, _excluded);\n\n return [props.context, reactReduxForwardedRef, wrapperProps];\n }, [props]);\n const ContextToUse = React.useMemo(() => {\n // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext.\n // Memoize the check that determines which context instance we should use.\n return propsContext && propsContext.Consumer && // @ts-ignore\n isContextConsumer( /*#__PURE__*/React.createElement(propsContext.Consumer, null)) ? propsContext : Context;\n }, [propsContext, Context]); // Retrieve the store and ancestor subscription via context, if available\n\n const contextValue = React.useContext(ContextToUse); // The store _must_ exist as either a prop or in context.\n // We'll check to see if it _looks_ like a Redux store first.\n // This allows us to pass through a `store` prop that is just a plain value.\n\n const didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch);\n const didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store);\n\n if (process.env.NODE_ENV !== 'production' && !didStoreComeFromProps && !didStoreComeFromContext) {\n throw new Error(`Could not find \"store\" in the context of ` + `\"${displayName}\". Either wrap the root component in a , ` + `or pass a custom React context provider to and the corresponding ` + `React context consumer to ${displayName} in connect options.`);\n } // Based on the previous check, one of these must be true\n\n\n const store = didStoreComeFromProps ? props.store : contextValue.store;\n const getServerState = didStoreComeFromContext ? contextValue.getServerState : store.getState;\n const childPropsSelector = React.useMemo(() => {\n // The child props selector needs the store reference as an input.\n // Re-create this selector whenever the store changes.\n return defaultSelectorFactory(store.dispatch, selectorFactoryOptions);\n }, [store]);\n const [subscription, notifyNestedSubs] = React.useMemo(() => {\n if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY; // This Subscription's source should match where store came from: props vs. context. A component\n // connected to the store via props shouldn't use subscription from context, or vice versa.\n\n const subscription = createSubscription(store, didStoreComeFromProps ? undefined : contextValue.subscription); // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n // the middle of the notification loop, where `subscription` will then be null. This can\n // probably be avoided if Subscription's listeners logic is changed to not call listeners\n // that have been unsubscribed in the middle of the notification loop.\n\n const notifyNestedSubs = subscription.notifyNestedSubs.bind(subscription);\n return [subscription, notifyNestedSubs];\n }, [store, didStoreComeFromProps, contextValue]); // Determine what {store, subscription} value should be put into nested context, if necessary,\n // and memoize that value to avoid unnecessary context updates.\n\n const overriddenContextValue = React.useMemo(() => {\n if (didStoreComeFromProps) {\n // This component is directly subscribed to a store from props.\n // We don't want descendants reading from this store - pass down whatever\n // the existing context value is from the nearest connected ancestor.\n return contextValue;\n } // Otherwise, put this component's subscription instance into context, so that\n // connected descendants won't update until after this component is done\n\n\n return _extends({}, contextValue, {\n subscription\n });\n }, [didStoreComeFromProps, contextValue, subscription]); // Set up refs to coordinate values between the subscription effect and the render logic\n\n const lastChildProps = React.useRef();\n const lastWrapperProps = React.useRef(wrapperProps);\n const childPropsFromStoreUpdate = React.useRef();\n const renderIsScheduled = React.useRef(false);\n const isProcessingDispatch = React.useRef(false);\n const isMounted = React.useRef(false);\n const latestSubscriptionCallbackError = React.useRef();\n useIsomorphicLayoutEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n const actualChildPropsSelector = React.useMemo(() => {\n const selector = () => {\n // Tricky logic here:\n // - This render may have been triggered by a Redux store update that produced new child props\n // - However, we may have gotten new wrapper props after that\n // If we have new child props, and the same wrapper props, we know we should use the new child props as-is.\n // But, if we have new wrapper props, those might change the child props, so we have to recalculate things.\n // So, we'll use the child props from store update only if the wrapper props are the same as last time.\n if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) {\n return childPropsFromStoreUpdate.current;\n } // TODO We're reading the store directly in render() here. Bad idea?\n // This will likely cause Bad Things (TM) to happen in Concurrent Mode.\n // Note that we do this because on renders _not_ caused by store updates, we need the latest store state\n // to determine what the child props should be.\n\n\n return childPropsSelector(store.getState(), wrapperProps);\n };\n\n return selector;\n }, [store, wrapperProps]); // We need this to execute synchronously every time we re-render. However, React warns\n // about useLayoutEffect in SSR, so we try to detect environment and fall back to\n // just useEffect instead to avoid the warning, since neither will run anyway.\n\n const subscribeForReact = React.useMemo(() => {\n const subscribe = reactListener => {\n if (!subscription) {\n return () => {};\n }\n\n return subscribeUpdates(shouldHandleStateChanges, store, subscription, // @ts-ignore\n childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, isMounted, childPropsFromStoreUpdate, notifyNestedSubs, reactListener);\n };\n\n return subscribe;\n }, [subscription]);\n useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, childPropsFromStoreUpdate, notifyNestedSubs]);\n let actualChildProps;\n\n try {\n actualChildProps = useSyncExternalStore( // TODO We're passing through a big wrapper that does a bunch of extra side effects besides subscribing\n subscribeForReact, // TODO This is incredibly hacky. We've already processed the store update and calculated new child props,\n // TODO and we're just passing that through so it triggers a re-render for us rather than relying on `uSES`.\n actualChildPropsSelector, getServerState ? () => childPropsSelector(getServerState(), wrapperProps) : actualChildPropsSelector);\n } catch (err) {\n if (latestSubscriptionCallbackError.current) {\n ;\n err.message += `\\nThe error may be correlated with this previous error:\\n${latestSubscriptionCallbackError.current.stack}\\n\\n`;\n }\n\n throw err;\n }\n\n useIsomorphicLayoutEffect(() => {\n latestSubscriptionCallbackError.current = undefined;\n childPropsFromStoreUpdate.current = undefined;\n lastChildProps.current = actualChildProps;\n }); // Now that all that's done, we can finally try to actually render the child component.\n // We memoize the elements for the rendered child component as an optimization.\n\n const renderedWrappedComponent = React.useMemo(() => {\n return (\n /*#__PURE__*/\n // @ts-ignore\n React.createElement(WrappedComponent, _extends({}, actualChildProps, {\n ref: reactReduxForwardedRef\n }))\n );\n }, [reactReduxForwardedRef, WrappedComponent, actualChildProps]); // If React sees the exact same element reference as last time, it bails out of re-rendering\n // that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate.\n\n const renderedChild = React.useMemo(() => {\n if (shouldHandleStateChanges) {\n // If this component is subscribed to store updates, we need to pass its own\n // subscription instance down to our descendants. That means rendering the same\n // Context instance, and putting a different value into the context.\n return /*#__PURE__*/React.createElement(ContextToUse.Provider, {\n value: overriddenContextValue\n }, renderedWrappedComponent);\n }\n\n return renderedWrappedComponent;\n }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]);\n return renderedChild;\n }\n\n const _Connect = React.memo(ConnectFunction);\n\n // Add a hacky cast to get the right output type\n const Connect = _Connect;\n Connect.WrappedComponent = WrappedComponent;\n Connect.displayName = ConnectFunction.displayName = displayName;\n\n if (forwardRef) {\n const _forwarded = React.forwardRef(function forwardConnectRef(props, ref) {\n // @ts-ignore\n return /*#__PURE__*/React.createElement(Connect, _extends({}, props, {\n reactReduxForwardedRef: ref\n }));\n });\n\n const forwarded = _forwarded;\n forwarded.displayName = displayName;\n forwarded.WrappedComponent = WrappedComponent;\n return hoistStatics(forwarded, WrappedComponent);\n }\n\n return hoistStatics(Connect, WrappedComponent);\n };\n\n return wrapWithConnect;\n}\n\nexport default connect;","export default 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 for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\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 return target;\n}","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/**\n * @license React\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=Symbol.for(\"react.element\"),c=Symbol.for(\"react.portal\"),d=Symbol.for(\"react.fragment\"),e=Symbol.for(\"react.strict_mode\"),f=Symbol.for(\"react.profiler\"),g=Symbol.for(\"react.provider\"),h=Symbol.for(\"react.context\"),k=Symbol.for(\"react.server_context\"),l=Symbol.for(\"react.forward_ref\"),m=Symbol.for(\"react.suspense\"),n=Symbol.for(\"react.suspense_list\"),p=Symbol.for(\"react.memo\"),q=Symbol.for(\"react.lazy\"),t=Symbol.for(\"react.offscreen\"),u;u=Symbol.for(\"react.module.reference\");\nfunction v(a){if(\"object\"===typeof a&&null!==a){var r=a.$$typeof;switch(r){case b:switch(a=a.type,a){case d:case f:case e:case m:case n:return a;default:switch(a=a&&a.$$typeof,a){case k:case h:case l:case q:case p:case g:return a;default:return r}}case c:return r}}}exports.ContextConsumer=h;exports.ContextProvider=g;exports.Element=b;exports.ForwardRef=l;exports.Fragment=d;exports.Lazy=q;exports.Memo=p;exports.Portal=c;exports.Profiler=f;exports.StrictMode=e;exports.Suspense=m;\nexports.SuspenseList=n;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return v(a)===h};exports.isContextProvider=function(a){return v(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return v(a)===l};exports.isFragment=function(a){return v(a)===d};exports.isLazy=function(a){return v(a)===q};exports.isMemo=function(a){return v(a)===p};\nexports.isPortal=function(a){return v(a)===c};exports.isProfiler=function(a){return v(a)===f};exports.isStrictMode=function(a){return v(a)===e};exports.isSuspense=function(a){return v(a)===m};exports.isSuspenseList=function(a){return v(a)===n};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===e||a===m||a===n||a===t||\"object\"===typeof a&&null!==a&&(a.$$typeof===q||a.$$typeof===p||a.$$typeof===g||a.$$typeof===h||a.$$typeof===l||a.$$typeof===u||void 0!==a.getModuleId)?!0:!1};exports.typeOf=v;\n","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"initMapStateToProps\", \"initMapDispatchToProps\", \"initMergeProps\"];\nimport verifySubselectors from './verifySubselectors';\nexport function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, {\n areStatesEqual,\n areOwnPropsEqual,\n areStatePropsEqual\n}) {\n let hasRunAtLeastOnce = false;\n let state;\n let ownProps;\n let stateProps;\n let dispatchProps;\n let mergedProps;\n\n function handleFirstCall(firstState, firstOwnProps) {\n state = firstState;\n ownProps = firstOwnProps;\n stateProps = mapStateToProps(state, ownProps);\n dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n hasRunAtLeastOnce = true;\n return mergedProps;\n }\n\n function handleNewPropsAndNewState() {\n stateProps = mapStateToProps(state, ownProps);\n if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleNewProps() {\n if (mapStateToProps.dependsOnOwnProps) stateProps = mapStateToProps(state, ownProps);\n if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleNewState() {\n const nextStateProps = mapStateToProps(state, ownProps);\n const statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps);\n stateProps = nextStateProps;\n if (statePropsChanged) mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleSubsequentCalls(nextState, nextOwnProps) {\n const propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps);\n const stateChanged = !areStatesEqual(nextState, state, nextOwnProps, ownProps);\n state = nextState;\n ownProps = nextOwnProps;\n if (propsChanged && stateChanged) return handleNewPropsAndNewState();\n if (propsChanged) return handleNewProps();\n if (stateChanged) return handleNewState();\n return mergedProps;\n }\n\n return function pureFinalPropsSelector(nextState, nextOwnProps) {\n return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps);\n };\n}\n// TODO: Add more comments\n// The selector returned by selectorFactory will memoize its results,\n// allowing connect's shouldComponentUpdate to return false if final\n// props have not changed.\nexport default function finalPropsSelectorFactory(dispatch, _ref) {\n let {\n initMapStateToProps,\n initMapDispatchToProps,\n initMergeProps\n } = _ref,\n options = _objectWithoutPropertiesLoose(_ref, _excluded);\n\n const mapStateToProps = initMapStateToProps(dispatch, options);\n const mapDispatchToProps = initMapDispatchToProps(dispatch, options);\n const mergeProps = initMergeProps(dispatch, options);\n\n if (process.env.NODE_ENV !== 'production') {\n verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps);\n }\n\n return pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);\n}","import warning from '../utils/warning';\n\nfunction verify(selector, methodName) {\n if (!selector) {\n throw new Error(`Unexpected value for ${methodName} in connect.`);\n } else if (methodName === 'mapStateToProps' || methodName === 'mapDispatchToProps') {\n if (!Object.prototype.hasOwnProperty.call(selector, 'dependsOnOwnProps')) {\n warning(`The selector for ${methodName} of connect did not specify a value for dependsOnOwnProps.`);\n }\n }\n}\n\nexport default function verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps) {\n verify(mapStateToProps, 'mapStateToProps');\n verify(mapDispatchToProps, 'mapDispatchToProps');\n verify(mergeProps, 'mergeProps');\n}","/**\r\n * Prints a warning in the console if it exists.\r\n *\r\n * @param {String} message The warning message.\r\n * @returns {void}\r\n */\nexport default function warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n\n\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n /* eslint-disable no-empty */\n } catch (e) {}\n /* eslint-enable no-empty */\n\n}","import bindActionCreators from '../utils/bindActionCreators';\nimport { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nimport { createInvalidArgFactory } from './invalidArgFactory';\nexport function mapDispatchToPropsFactory(mapDispatchToProps) {\n return mapDispatchToProps && typeof mapDispatchToProps === 'object' ? wrapMapToPropsConstant(dispatch => // @ts-ignore\n bindActionCreators(mapDispatchToProps, dispatch)) : !mapDispatchToProps ? wrapMapToPropsConstant(dispatch => ({\n dispatch\n })) : typeof mapDispatchToProps === 'function' ? // @ts-ignore\n wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps') : createInvalidArgFactory(mapDispatchToProps, 'mapDispatchToProps');\n}","export default function bindActionCreators(actionCreators, dispatch) {\n const boundActionCreators = {};\n\n for (const key in actionCreators) {\n const actionCreator = actionCreators[key];\n\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = (...args) => dispatch(actionCreator(...args));\n }\n }\n\n return boundActionCreators;\n}","import verifyPlainObject from '../utils/verifyPlainObject';\nexport function wrapMapToPropsConstant( // * Note:\n// It seems that the dispatch argument\n// could be a dispatch function in some cases (ex: whenMapDispatchToPropsIsMissing)\n// and a state object in some others (ex: whenMapStateToPropsIsMissing)\n// eslint-disable-next-line no-unused-vars\ngetConstant) {\n return function initConstantSelector(dispatch) {\n const constant = getConstant(dispatch);\n\n function constantSelector() {\n return constant;\n }\n\n constantSelector.dependsOnOwnProps = false;\n return constantSelector;\n };\n} // dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args\n// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine\n// whether mapToProps needs to be invoked when props have changed.\n//\n// A length of one signals that mapToProps does not depend on props from the parent component.\n// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and\n// therefore not reporting its length accurately..\n// TODO Can this get pulled out so that we can subscribe directly to the store if we don't need ownProps?\n\nexport function getDependsOnOwnProps(mapToProps) {\n return mapToProps.dependsOnOwnProps ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;\n} // Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction,\n// this function wraps mapToProps in a proxy function which does several things:\n//\n// * Detects whether the mapToProps function being called depends on props, which\n// is used by selectorFactory to decide if it should reinvoke on props changes.\n//\n// * On first call, handles mapToProps if returns another function, and treats that\n// new function as the true mapToProps for subsequent calls.\n//\n// * On first call, verifies the first result is a plain object, in order to warn\n// the developer that their mapToProps function is not returning a valid result.\n//\n\nexport function wrapMapToPropsFunc(mapToProps, methodName) {\n return function initProxySelector(dispatch, {\n displayName\n }) {\n const proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {\n return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch, undefined);\n }; // allow detectFactoryAndVerify to get ownProps\n\n\n proxy.dependsOnOwnProps = true;\n\n proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {\n proxy.mapToProps = mapToProps;\n proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);\n let props = proxy(stateOrDispatch, ownProps);\n\n if (typeof props === 'function') {\n proxy.mapToProps = props;\n proxy.dependsOnOwnProps = getDependsOnOwnProps(props);\n props = proxy(stateOrDispatch, ownProps);\n }\n\n if (process.env.NODE_ENV !== 'production') verifyPlainObject(props, displayName, methodName);\n return props;\n };\n\n return proxy;\n };\n}","import isPlainObject from './isPlainObject';\nimport warning from './warning';\nexport default function verifyPlainObject(value, displayName, methodName) {\n if (!isPlainObject(value)) {\n warning(`${methodName}() in ${displayName} must return a plain object. Instead received ${value}.`);\n }\n}","/**\r\n * @param {any} obj The object to inspect.\r\n * @returns {boolean} True if the argument appears to be a plain object.\r\n */\nexport default function isPlainObject(obj) {\n if (typeof obj !== 'object' || obj === null) return false;\n let proto = Object.getPrototypeOf(obj);\n if (proto === null) return true;\n let baseProto = proto;\n\n while (Object.getPrototypeOf(baseProto) !== null) {\n baseProto = Object.getPrototypeOf(baseProto);\n }\n\n return proto === baseProto;\n}","export function createInvalidArgFactory(arg, name) {\n return (dispatch, options) => {\n throw new Error(`Invalid value of type ${typeof arg} for ${name} argument when connecting component ${options.wrappedComponentName}.`);\n };\n}","import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nimport { createInvalidArgFactory } from './invalidArgFactory';\nexport function mapStateToPropsFactory(mapStateToProps) {\n return !mapStateToProps ? wrapMapToPropsConstant(() => ({})) : typeof mapStateToProps === 'function' ? // @ts-ignore\n wrapMapToPropsFunc(mapStateToProps, 'mapStateToProps') : createInvalidArgFactory(mapStateToProps, 'mapStateToProps');\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport verifyPlainObject from '../utils/verifyPlainObject';\nimport { createInvalidArgFactory } from './invalidArgFactory';\nexport function defaultMergeProps(stateProps, dispatchProps, ownProps) {\n // @ts-ignore\n return _extends({}, ownProps, stateProps, dispatchProps);\n}\nexport function wrapMergePropsFunc(mergeProps) {\n return function initMergePropsProxy(dispatch, {\n displayName,\n areMergedPropsEqual\n }) {\n let hasRunOnce = false;\n let mergedProps;\n return function mergePropsProxy(stateProps, dispatchProps, ownProps) {\n const nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n\n if (hasRunOnce) {\n if (!areMergedPropsEqual(nextMergedProps, mergedProps)) mergedProps = nextMergedProps;\n } else {\n hasRunOnce = true;\n mergedProps = nextMergedProps;\n if (process.env.NODE_ENV !== 'production') verifyPlainObject(mergedProps, displayName, 'mergeProps');\n }\n\n return mergedProps;\n };\n };\n}\nexport function mergePropsFactory(mergeProps) {\n return !mergeProps ? () => defaultMergeProps : typeof mergeProps === 'function' ? wrapMergePropsFunc(mergeProps) : createInvalidArgFactory(mergeProps, 'mergeProps');\n}","import { getBatch } from './batch'; // encapsulates the subscription logic for connecting a component to the redux store, as\n// well as nesting subscriptions of descendant components, so that we can ensure the\n// ancestor components re-render before descendants\n\nfunction createListenerCollection() {\n const batch = getBatch();\n let first = null;\n let last = null;\n return {\n clear() {\n first = null;\n last = null;\n },\n\n notify() {\n batch(() => {\n let listener = first;\n\n while (listener) {\n listener.callback();\n listener = listener.next;\n }\n });\n },\n\n get() {\n let listeners = [];\n let listener = first;\n\n while (listener) {\n listeners.push(listener);\n listener = listener.next;\n }\n\n return listeners;\n },\n\n subscribe(callback) {\n let isSubscribed = true;\n let listener = last = {\n callback,\n next: null,\n prev: last\n };\n\n if (listener.prev) {\n listener.prev.next = listener;\n } else {\n first = listener;\n }\n\n return function unsubscribe() {\n if (!isSubscribed || first === null) return;\n isSubscribed = false;\n\n if (listener.next) {\n listener.next.prev = listener.prev;\n } else {\n last = listener.prev;\n }\n\n if (listener.prev) {\n listener.prev.next = listener.next;\n } else {\n first = listener.next;\n }\n };\n }\n\n };\n}\n\nconst nullListeners = {\n notify() {},\n\n get: () => []\n};\nexport function createSubscription(store, parentSub) {\n let unsubscribe;\n let listeners = nullListeners; // Reasons to keep the subscription active\n\n let subscriptionsAmount = 0; // Is this specific subscription subscribed (or only nested ones?)\n\n let selfSubscribed = false;\n\n function addNestedSub(listener) {\n trySubscribe();\n const cleanupListener = listeners.subscribe(listener); // cleanup nested sub\n\n let removed = false;\n return () => {\n if (!removed) {\n removed = true;\n cleanupListener();\n tryUnsubscribe();\n }\n };\n }\n\n function notifyNestedSubs() {\n listeners.notify();\n }\n\n function handleChangeWrapper() {\n if (subscription.onStateChange) {\n subscription.onStateChange();\n }\n }\n\n function isSubscribed() {\n return selfSubscribed;\n }\n\n function trySubscribe() {\n subscriptionsAmount++;\n\n if (!unsubscribe) {\n unsubscribe = parentSub ? parentSub.addNestedSub(handleChangeWrapper) : store.subscribe(handleChangeWrapper);\n listeners = createListenerCollection();\n }\n }\n\n function tryUnsubscribe() {\n subscriptionsAmount--;\n\n if (unsubscribe && subscriptionsAmount === 0) {\n unsubscribe();\n unsubscribe = undefined;\n listeners.clear();\n listeners = nullListeners;\n }\n }\n\n function trySubscribeSelf() {\n if (!selfSubscribed) {\n selfSubscribed = true;\n trySubscribe();\n }\n }\n\n function tryUnsubscribeSelf() {\n if (selfSubscribed) {\n selfSubscribed = false;\n tryUnsubscribe();\n }\n }\n\n const subscription = {\n addNestedSub,\n notifyNestedSubs,\n handleChangeWrapper,\n isSubscribed,\n trySubscribe: trySubscribeSelf,\n tryUnsubscribe: tryUnsubscribeSelf,\n getListeners: () => listeners\n };\n return subscription;\n}","import * as React from 'react'; // React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store\n// subscription callback always has the selector from the latest render commit\n// available, otherwise a store update may happen between render and the effect,\n// which may cause missed updates; we also must ensure the store subscription\n// is created synchronously, otherwise a store update may occur before the\n// subscription is created and an inconsistent state may be observed\n// Matches logic in React's `shared/ExecutionEnvironment` file\n\nexport const canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\nexport const useIsomorphicLayoutEffect = canUseDOM ? React.useLayoutEffect : React.useEffect;","function is(x, y) {\n if (x === y) {\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\n\nexport default function shallowEqual(objA, objB) {\n if (is(objA, objB)) return true;\n\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n\n const keysA = Object.keys(objA);\n const keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return false;\n\n for (let i = 0; i < keysA.length; i++) {\n if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n\n return true;\n}","import Provider from './components/Provider';\nimport connect from './components/connect';\nimport { ReactReduxContext } from './components/Context';\nimport { useDispatch, createDispatchHook } from './hooks/useDispatch';\nimport { useSelector, createSelectorHook } from './hooks/useSelector';\nimport { useStore, createStoreHook } from './hooks/useStore';\nimport shallowEqual from './utils/shallowEqual';\nexport * from './types';\nexport { Provider, ReactReduxContext, connect, useDispatch, createDispatchHook, useSelector, createSelectorHook, useStore, createStoreHook, shallowEqual };","import * as React from 'react';\nimport { ReactReduxContext } from './Context';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\n\nfunction Provider({\n store,\n context,\n children,\n serverState,\n stabilityCheck = 'once',\n noopCheck = 'once'\n}) {\n const contextValue = React.useMemo(() => {\n const subscription = createSubscription(store);\n return {\n store,\n subscription,\n getServerState: serverState ? () => serverState : undefined,\n stabilityCheck,\n noopCheck\n };\n }, [store, serverState, stabilityCheck, noopCheck]);\n const previousState = React.useMemo(() => store.getState(), [store]);\n useIsomorphicLayoutEffect(() => {\n const {\n subscription\n } = contextValue;\n subscription.onStateChange = subscription.notifyNestedSubs;\n subscription.trySubscribe();\n\n if (previousState !== store.getState()) {\n subscription.notifyNestedSubs();\n }\n\n return () => {\n subscription.tryUnsubscribe();\n subscription.onStateChange = undefined;\n };\n }, [contextValue, previousState]);\n const Context = context || ReactReduxContext; // @ts-ignore 'AnyAction' is assignable to the constraint of type 'A', but 'A' could be instantiated with a different subtype\n\n return /*#__PURE__*/React.createElement(Context.Provider, {\n value: contextValue\n }, children);\n}\n\nexport default Provider;","import { ReactReduxContext } from '../components/Context';\nimport { useStore as useDefaultStore, createStoreHook } from './useStore';\n/**\r\n * Hook factory, which creates a `useDispatch` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your ``.\r\n * @returns {Function} A `useDispatch` hook bound to the specified context.\r\n */\n\nexport function createDispatchHook(context = ReactReduxContext) {\n const useStore = // @ts-ignore\n context === ReactReduxContext ? useDefaultStore : createStoreHook(context);\n return function useDispatch() {\n const store = useStore(); // @ts-ignore\n\n return store.dispatch;\n };\n}\n/**\r\n * A hook to access the redux `dispatch` function.\r\n *\r\n * @returns {any|function} redux store's `dispatch` function\r\n *\r\n * @example\r\n *\r\n * import React, { useCallback } from 'react'\r\n * import { useDispatch } from 'react-redux'\r\n *\r\n * export const CounterComponent = ({ value }) => {\r\n * const dispatch = useDispatch()\r\n * const increaseCounter = useCallback(() => dispatch({ type: 'increase-counter' }), [])\r\n * return (\r\n *
\r\n * {value}\r\n * \r\n *
\r\n * )\r\n * }\r\n */\n\nexport const useDispatch = /*#__PURE__*/createDispatchHook();","import { ReactReduxContext } from '../components/Context';\nimport { useReduxContext as useDefaultReduxContext, createReduxContextHook } from './useReduxContext';\n/**\r\n * Hook factory, which creates a `useStore` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your ``.\r\n * @returns {Function} A `useStore` hook bound to the specified context.\r\n */\n\nexport function createStoreHook(context = ReactReduxContext) {\n const useReduxContext = // @ts-ignore\n context === ReactReduxContext ? useDefaultReduxContext : // @ts-ignore\n createReduxContextHook(context);\n return function useStore() {\n const {\n store\n } = useReduxContext(); // @ts-ignore\n\n return store;\n };\n}\n/**\r\n * A hook to access the redux store.\r\n *\r\n * @returns {any} the redux store\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useStore } from 'react-redux'\r\n *\r\n * export const ExampleComponent = () => {\r\n * const store = useStore()\r\n * return
{store.getState()}
\r\n * }\r\n */\n\nexport const useStore = /*#__PURE__*/createStoreHook();","export {};","import * as React from 'react';\n\nexport const AppContext = React.createContext();\n","import * as React from 'react';\nimport { SearchLauncher } from '../components/SearchLauncher';\n\nexport function MapSearch({ floatPaddingLeft, floatPaddingRight }) {\n return (\n \n );\n};\n","import * as React from 'react';\nimport { \n Image,\n Platform,\n Pressable,\n ScrollView,\n StyleSheet,\n Text,\n useWindowDimensions,\n View,\n} from 'react-native';\nimport * as AppUtilities from \"../context/AppUtilities\";\nimport * as AppConstants from \"../context/AppConstants\";\nimport * as AppState from \"../context/AppState\";\nimport { AppContext } from \"../context/AppContext\";\nimport { useSelector, useDispatch } from 'react-redux';\n\nconst styles = StyleSheet.create({\n containerFloating: {\n position: \"absolute\",\n width: \"100%\",\n top: 10,\n },\n containerNonFloating: {\n width: \"100%\",\n },\n searchFloating: {\n width: \"100%\",\n flexDirection: \"row\",\n alignItems: \"center\",\n borderWidth: 1,\n borderColor: \"#777777\",\n borderRadius: 10,\n height: 40,\n paddingLeft: 10,\n paddingRight: 10,\n backgroundColor: \"#ffffff\",\n opacity: 0.8\n },\n searchNormal: {\n width: \"100%\",\n flexDirection: \"row\",\n alignItems: \"center\",\n borderWidth: 1,\n borderColor: \"#777777\",\n borderRadius: 10,\n height: 40,\n padding: 10,\n backgroundColor: \"#ffffff\",\n },\n searchWithQuickLinks: {\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n borderBottomWidth: 0,\n },\n textBoxNormal: {\n paddingLeft: 10,\n color: \"#777777\",\n flex: 1,\n ...Platform.select({ web: {\n cursor: 'text',\n }}),\n },\n textBoxFloating: {\n paddingLeft: 10,\n color: \"#222222\",\n flex: 1,\n ...Platform.select({ web: {\n cursor: 'text',\n }}),\n },\n quickLinksFloating: {\n width: \"100%\",\n backgroundColor: \"#ffffff\",\n opacity: 0.8,\n padding: 5,\n borderWidth: 1,\n borderColor: \"#777777\",\n borderBottomLeftRadius: 10,\n borderBottomRightRadius: 10,\n paddingLeft: 14,\n },\n quickLinksNormal: {\n width: \"100%\",\n backgroundColor: \"#ffffff\",\n padding: 5,\n borderWidth: 1,\n borderColor: \"#777777\",\n borderBottomLeftRadius: 10,\n borderBottomRightRadius: 10,\n paddingLeft: 14,\n },\n quickLinksContentContainer: {\n justifyContent: \"center\",\n },\n quickLinkButton: {\n paddingRight: 20,\n flexDirection: \"row\",\n alignItems: \"center\",\n },\n quickLinkIcon: {\n marginRight: 5,\n width: 24,\n height: 24,\n },\n quickLinkText: {\n color: \"#222222\",\n fontSize: 12,\n },\n quickLinkTextSelected: {\n color: \"#222222\",\n fontSize: 12,\n fontWeight: \"bold\",\n },\n});\n\nfunction doesSearchInclude(search, q) {\n return search && search.toLowerCase().includes(q.toLowerCase());\n}\n\nconst MORE_FILTERS = \"More Filters\";\n\n// When adding here, also consider adding to ALLOW_SUBSTRING_SEARCHES in utilities.rb\nconst SEARCHES = [\n [\"Grocery Stores\", require('../../assets/cart-grey.png')],\n [\"Dining\", require('../../assets/restaurant-grey.png')],\n [\"Coffee Shops\", require('../../assets/coffee-grey.png')],\n [\"Farmers Markets\", require('../../assets/farmers-market-booth.png')],\n [\"Regenerative\", require('../../assets/agriculture-grey.png')],\n [MORE_FILTERS, require('../../assets/filter-circle-grey.png')],\n];\n\nexport function SearchLauncher({\n floating,\n floatPaddingLeft,\n floatPaddingRight,\n hideSearchLocation,\n showQuickLinks,\n }) {\n const { showSearch } = React.useContext(AppContext);\n const { width } = useWindowDimensions();\n const dataFilter = useSelector((state) => state.dataFilter);\n const globalDispatch = useDispatch();\n const generalSearch = useSelector((state) => state.dataFilter[AppConstants.SYNTHESIZED_TYPES.GENERAL_SEARCH[AppConstants.TYPE_KEYS.URL_KEY]]);\n const producer = useSelector((state) => state.dataFilter[AppConstants.SYNTHESIZED_TYPES.PRODUCER[AppConstants.TYPE_KEYS.URL_KEY]]);\n\n const onClear = React.useCallback(() => {\n let newFilter = Object.assign({}, dataFilter);\n delete newFilter[AppConstants.SYNTHESIZED_TYPES.GENERAL_SEARCH[AppConstants.TYPE_KEYS.URL_KEY]];\n delete newFilter[AppConstants.SYNTHESIZED_TYPES.PRODUCER[AppConstants.TYPE_KEYS.URL_KEY]];\n globalDispatch(AppState.createDispatch(AppConstants.DISPATCH.UPDATE_DATA_FILTER, newFilter));\n }, [dataFilter]);\n\n // The last number is effectively the minimum size (e.g. on web)\n const maxWidth = Math.max(width - floatPaddingLeft - floatPaddingRight, 200);\n let textboxStyle = null;\n if (floating && showQuickLinks) {\n textboxStyle = [ styles.searchFloating, styles.searchWithQuickLinks, { maxWidth: maxWidth }];\n } else if (floating) {\n textboxStyle = [ styles.searchFloating, { maxWidth: maxWidth }];\n } else if (showQuickLinks) {\n textboxStyle = [ styles.searchNormal, styles.searchWithQuickLinks ];\n } else {\n textboxStyle = styles.searchNormal;\n }\n\n const renderButton = React.useCallback((q, icon) => {\n return (\n {\n if (q == MORE_FILTERS) {\n showSearch(hideSearchLocation);\n } else {\n const newFilter = Object.assign({}, dataFilter);\n\n // If search already includes this button text then that\n // means we're toggling it off\n if (doesSearchInclude(generalSearch, q)) {\n let newSearch = generalSearch.replace(new RegExp(q, \"i\"), \"\");\n if (newSearch && newSearch.length > 0) {\n newFilter[AppConstants.SYNTHESIZED_TYPES.GENERAL_SEARCH[AppConstants.TYPE_KEYS.URL_KEY]] = newSearch;\n } else {\n delete newFilter[AppConstants.SYNTHESIZED_TYPES.GENERAL_SEARCH[AppConstants.TYPE_KEYS.URL_KEY]];\n }\n } else {\n // The search isn't already there, so we want to add it.\n // If one of the other button's texts are already there,\n // then we want to remove that. Then we'll always append our new search.\n let newSearch = generalSearch;\n for (let i = 0; i < SEARCHES.length; i++) {\n if (doesSearchInclude(generalSearch, SEARCHES[i][0])) {\n newSearch = newSearch.replace(new RegExp(SEARCHES[i][0], \"i\"), \"\");\n }\n }\n\n if (newSearch && newSearch.length > 0) {\n newSearch += \" \" + q;\n } else {\n newSearch = q;\n }\n newFilter[AppConstants.SYNTHESIZED_TYPES.GENERAL_SEARCH[AppConstants.TYPE_KEYS.URL_KEY]] = newSearch;\n }\n globalDispatch(AppState.createDispatch(AppConstants.DISPATCH.UPDATE_DATA_FILTER, newFilter));\n }\n }}\n >\n \n {q}\n \n );\n }, [dataFilter, generalSearch]);\n\n let finalText = null;\n if (!AppUtilities.isBlank(generalSearch)) {\n finalText = generalSearch;\n }\n if (!AppUtilities.isBlank(producer)) {\n if (finalText) {\n finalText += \" producer:\";\n } else {\n finalText = \"\";\n }\n finalText += producer;\n }\n\n return (\n \n showSearch(hideSearchLocation)}\n >\n \n \n {\n finalText ? finalText : \"Search\"\n }\n \n {\n finalText ?\n \n \n \n :\n \n }\n \n {\n showQuickLinks ?\n \n {SEARCHES.map(searchItem => renderButton(searchItem[0], searchItem[1]))}\n \n :\n null\n }\n \n );\n}\n","","","","","","","","","import { ActivityIndicator, Image, View } from 'react-native';\nimport * as AppUtilities from \"../context/AppUtilities\";\n\nconst USE_GIF = true;\n\nexport function CustomActivityIndicator(props) {\n if (props.hide) {\n return null;\n } else {\n let style = {};\n\n if (props.absoluteBottom) {\n style = {\n position: \"absolute\",\n bottom: 0,\n padding: 15,\n left: 0,\n right: 0,\n marginLeft: \"auto\",\n marginRight: \"auto\",\n };\n } else if (props.absoluteCenter) {\n style = {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0, \n justifyContent: 'center',\n alignItems: 'center',\n padding: 15,\n };\n }\n\n if (USE_GIF) {\n return (\n \n \n \n );\n } else {\n\n // https://reactnative.dev/docs/activityindicator\n // https://github.com/facebook/react-native/blob/master/Libraries/Components/ActivityIndicator/ActivityIndicator.js\n\n return (\n \n \n \n \n {\n props.percent ?\n \n {props.percent}%\n \n : null\n }\n \n );\n }\n }\n}\n","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"animating\", \"color\", \"hidesWhenStopped\", \"size\", \"style\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nvar createSvgCircle = style => /*#__PURE__*/React.createElement(\"circle\", {\n cx: \"16\",\n cy: \"16\",\n fill: \"none\",\n r: \"14\",\n strokeWidth: \"4\",\n style: style\n});\nvar ActivityIndicator = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n var _props$animating = props.animating,\n animating = _props$animating === void 0 ? true : _props$animating,\n _props$color = props.color,\n color = _props$color === void 0 ? '#1976D2' : _props$color,\n _props$hidesWhenStopp = props.hidesWhenStopped,\n hidesWhenStopped = _props$hidesWhenStopp === void 0 ? true : _props$hidesWhenStopp,\n _props$size = props.size,\n size = _props$size === void 0 ? 'small' : _props$size,\n style = props.style,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var svg = /*#__PURE__*/React.createElement(\"svg\", {\n height: \"100%\",\n viewBox: \"0 0 32 32\",\n width: \"100%\"\n }, createSvgCircle({\n stroke: color,\n opacity: 0.2\n }), createSvgCircle({\n stroke: color,\n strokeDasharray: 80,\n strokeDashoffset: 60\n }));\n return /*#__PURE__*/React.createElement(View, _extends({}, other, {\n \"aria-valuemax\": 1,\n \"aria-valuemin\": 0,\n ref: forwardedRef,\n role: \"progressbar\",\n style: [styles.container, style]\n }), /*#__PURE__*/React.createElement(View, {\n children: svg,\n style: [typeof size === 'number' ? {\n height: size,\n width: size\n } : indicatorSizes[size], styles.animation, !animating && styles.animationPause, !animating && hidesWhenStopped && styles.hidesWhenStopped]\n }));\n});\nActivityIndicator.displayName = 'ActivityIndicator';\nvar styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n justifyContent: 'center'\n },\n hidesWhenStopped: {\n visibility: 'hidden'\n },\n animation: {\n animationDuration: '0.75s',\n animationKeyframes: [{\n '0%': {\n transform: 'rotate(0deg)'\n },\n '100%': {\n transform: 'rotate(360deg)'\n }\n }],\n animationTimingFunction: 'linear',\n animationIterationCount: 'infinite'\n },\n animationPause: {\n animationPlayState: 'paused'\n }\n});\nvar indicatorSizes = StyleSheet.create({\n small: {\n width: 20,\n height: 20\n },\n large: {\n width: 36,\n height: 36\n }\n});\nexport default ActivityIndicator;","","import * as React from 'react';\nimport { Image, View, StyleSheet, Text, Pressable, PixelRatio } from 'react-native';\nimport * as AppUtilities from \"../context/AppUtilities\";\nimport * as AppConstants from \"../context/AppConstants\";\nimport * as AppState from \"../context/AppState\";\nimport { AppContext } from \"../context/AppContext\";\nimport { useSelector, useDispatch } from 'react-redux';\n\nconst AD_WIDTH = 320;\nconst AD_HEIGHT = 50;\n\nconst styles = StyleSheet.create({\n adWrapper: {\n //padding: 2,\n backgroundColor: \"white\",\n borderWidth: 1,\n justifyContent: \"center\",\n },\n adHeader: {\n fontSize: 10,\n paddingBottom: 2,\n alignSelf: \"center\",\n },\n adImage: {\n cursor: 'pointer',\n width: AD_WIDTH,\n height: AD_HEIGHT,\n },\n adImage2: {\n width: AD_WIDTH,\n height: AD_HEIGHT,\n },\n pointer: {\n cursor: 'pointer',\n },\n currentViewWrapper: {\n justifyContent: \"center\",\n width: AD_WIDTH + 2,\n backgroundColor: \"white\",\n borderWidth: 1,\n //borderBottomWidth: 0,\n padding: 2,\n marginBottom: 2,\n },\n currentViewText: {\n fontSize: 10,\n alignSelf: \"center\",\n },\n});\n\n// Equatorial radius of Earth (in KM)\nconst R = 6378.137;\nconst ONE_KM_IN_MILES = 0.621371;\n\nfunction squared(x) {\n return x * x;\n}\n\nfunction toRad(x) {\n return (x * Math.PI) / 180.0;\n}\n\nfunction hav(x) {\n return squared(Math.sin(x / 2));\n}\n\nfunction haversineDistanceMiles(aLatitude, aLongitude, bLatitude, bLongitude) {\n const aLat = toRad(aLatitude);\n const bLat = toRad(bLatitude);\n const aLng = toRad(aLongitude);\n const bLng = toRad(bLongitude);\n\n const ht = hav(bLat - aLat) + Math.cos(aLat) * Math.cos(bLat) * hav(bLng - aLng);\n const distanceKm = 2 * R * Math.asin(Math.sqrt(ht));\n return distanceKm * ONE_KM_IN_MILES;\n}\n\nfunction isAdVisible(ad, viewportCenterLatitude, viewportCenterLongitude) {\n let result = false;\n if (!ad.geofence_center_latitude) {\n // If there's no geofencing, then the ad is visible by default\n result = true;\n } else {\n if (viewportCenterLatitude) {\n const distanceMiles = haversineDistanceMiles(\n ad.geofence_center_latitude,\n ad.geofence_center_longitude,\n viewportCenterLatitude,\n viewportCenterLongitude\n );\n if (distanceMiles < ad.geofence_distance) {\n result = true;\n }\n /*\n console.log({\n aLat: ad.geofence_center_latitude,\n aLng: ad.geofence_center_longitude,\n bLat: viewportCenterLatitude,\n bLng: viewportCenterLongitude,\n distanceMiles: distanceMiles,\n result: result,\n });\n */\n }\n }\n return result;\n}\n\nfunction getFirstGeofencedAd(ads, mapCenter) {\n const viewportCenterLatitude = mapCenter ? mapCenter.lat : null;\n const viewportCenterLongitude = mapCenter ? mapCenter.lng : null;\n for (let i = 0; i < ads.length; i++) {\n const ad = ads[i];\n if (ad.geofence_center_latitude &&\n isAdVisible(ad, viewportCenterLatitude, viewportCenterLongitude))\n {\n return i;\n }\n }\n return null;\n}\n\nfunction getNextAdIndex(ads, currentIndex, mapCenter) {\n let result = null;\n const viewportCenterLatitude = mapCenter ? mapCenter.lat : null;\n const viewportCenterLongitude = mapCenter ? mapCenter.lng : null;\n\n for (let i = currentIndex + 1; i < ads.length; i++) {\n if (isAdVisible(ads[i], viewportCenterLatitude, viewportCenterLongitude)) {\n result = i;\n break;\n }\n }\n\n if (!result) {\n // Nothing to the end of the list, so now start from the beginning up until\n // where we were\n for (let j = 0; j <= currentIndex; j++) {\n if (isAdVisible(ads[j], viewportCenterLatitude, viewportCenterLongitude)) {\n result = j;\n break;\n }\n }\n }\n\n return result;\n}\n\nexport function MapAds({ navigation }) {\n const ads = useSelector((state) => state.ads);\n const adRefreshInterval = useSelector((state) => state.adRefreshInterval);\n const hideAds = useSelector((state) => state.hideAds);\n const lightMode = useSelector((state) => state.lightMode);\n const [adIndex, setAdIndex] = React.useState(-1);\n const dispatch = useDispatch();\n const mapCenter = useSelector((state) => state.mapCenter);\n\n React.useEffect(() => {\n const id = setTimeout(\n () => {\n if (ads && ads.length > 0) {\n const newIndex = getNextAdIndex(ads, adIndex, mapCenter);\n //console.log(\"Setting adIndex \" + newIndex + \" from timer\");\n setAdIndex(newIndex);\n }\n },\n adRefreshInterval\n );\n return () => {\n clearTimeout(id);\n };\n }, [adIndex, mapCenter]);\n\n React.useEffect(() => {\n if (ads && ads.length > 0) {\n\n if (AppUtilities.DEBUGLEVEL.ads) {\n AppUtilities.debug(\"MapAds.useEffect(ads) with mapCenter: \" + AppUtilities.toJSONPretty(mapCenter));\n AppUtilities.dir(ads);\n }\n\n // NOTE: This function only calculates the starting index any\n // time the ads list or map center change. Ad rolling happens in a subsequent useEffect.\n \n // If there's an ad geofenced to our mapCenter, then\n // explicitly start there first\n let newIndex = null;\n if (mapCenter) {\n newIndex = getFirstGeofencedAd(ads, mapCenter);\n if (AppUtilities.DEBUGLEVEL.ads) {\n AppUtilities.debug(\"MapAds.useEffect(ads) getFirstGeofencedAd returned: \" + newIndex);\n }\n }\n\n if (AppUtilities.isNullOrUndefined(newIndex)) {\n // Otherwise, start somewhere random\n const randomStart = AppUtilities.randomInt(0, ads.length - 1);\n newIndex = getNextAdIndex(ads, randomStart, mapCenter);\n\n if (AppUtilities.DEBUGLEVEL.ads) {\n AppUtilities.debug(\"MapAds.useEffect(ads) non-geofenced index: \" + newIndex);\n }\n }\n\n setAdIndex(newIndex);\n }\n }, [ads, mapCenter]);\n\n if (hideAds || lightMode || !ads || ads.length == 0 || adIndex >= ads.length || adIndex < 0) {\n return null;\n }\n\n const clickAd = () => {\n const ad = ads[adIndex];\n //AppUtilities.debug(\"clickAd: \" + AppUtilities.toJSONPretty(ad));\n if (ad.delivery) {\n dispatch(AppState.createDispatch(\n AppConstants.DISPATCH.SET_DELIVERY_LOCATION_FILTER,\n ad.name,\n ));\n\n navigation.navigate(AppConstants.SCREENS.DELIVERY_STACK);\n } else {\n // The link already has UTM on it\n AppUtilities.openLink(ad.link);\n }\n };\n\n if (AppUtilities.DEBUGLEVEL.ads) {\n AppUtilities.debug(\"MapAds.render index: \" + adIndex + \", ad: \" + AppUtilities.toJSONPretty(ads[adIndex]));\n }\n\n let imagesrc = ads[adIndex].img;\n if (ads[adIndex].srcset && ads[adIndex].srcset.length > 0) {\n const srcset = ads[adIndex].srcset.replaceAll(\",https://\", \", https://\");\n imagesrc = AppUtilities.selectImageFromSrcSet(srcset);\n }\n\n return (\n \n {/*\n \n Viewing: {AppUtilities.createInternalLink(navigation, shortDescription, shortDescriptionLink)}\n \n */}\n \n {/*\n \n Can't find something local? Check out humane delivery options:\n \n */}\n\n \n {\n AppUtilities.isWeb() ?\n \n :\n AppUtilities.handleException(error, \"MapAds render Image\")}\n />\n }\n \n \n \n );\n}\n","import * as React from 'react';\nimport { Image, Pressable, View, StyleSheet } from 'react-native';\nimport * as AppUtilities from \"../context/AppUtilities\";\nimport * as AppConstants from \"../context/AppConstants\";\nimport * as AppState from \"../context/AppState\";\nimport { AppContext } from \"../context/AppContext\";\nimport { useSelector, useDispatch } from 'react-redux';\n\nconst styles = StyleSheet.create({\n image: {\n width: 32,\n height: 32,\n alignSelf: \"center\",\n },\n imageSimple: {\n width: 32,\n height: 32,\n },\n labelWrapper: {\n backgroundColor: \"white\",\n flex: 1,\n alignItems: \"center\",\n },\n label: {\n fontSize: 10,\n },\n checkImage: {\n width: 16,\n height: 16\n },\n verticalView: {\n flexDirection: \"column\",\n gap: 10,\n padding: 2,\n },\n horizontalView: {\n flexDirection: \"row\",\n gap: 10,\n padding: 2,\n },\n});\n\nexport function FilterSlider({ vertical }) {\n const { toggleModal } = React.useContext(AppContext);\n const [selectedValue, setSelectedValue] = React.useState(null);\n const dataFilter = useSelector((state) => state.dataFilter);\n const globalDispatch = useDispatch();\n\n React.useEffect(() => {\n if (dataFilter) {\n if (dataFilter[AppConstants.GROUP_TYPES.OUTDOORS[AppConstants.TYPE_KEYS.URL_KEY]] == \"y\") {\n setSelectedValue(AppConstants.GROUP_TYPES.OUTDOORS[AppConstants.TYPE_KEYS.URL_KEY]);\n } else if (dataFilter[AppConstants.GROUP_TYPES.PASTURE[AppConstants.TYPE_KEYS.URL_KEY]] == \"y\") {\n setSelectedValue(AppConstants.GROUP_TYPES.PASTURE[AppConstants.TYPE_KEYS.URL_KEY]);\n } else if (dataFilter[AppConstants.GROUP_TYPES.INDOORS[AppConstants.TYPE_KEYS.URL_KEY]] == \"y\") {\n setSelectedValue(AppConstants.GROUP_TYPES.INDOORS[AppConstants.TYPE_KEYS.URL_KEY]);\n }\n }\n }, [dataFilter]);\n\n function toggle(pendingNewValue, pendingNewIndex) {\n const usedQuickFilterBefore = AppUtilities.getLocalData(AppConstants.LOCAL_DATA_KEYS.USED_QUICK_FILTER_BEFORE, false);\n if (!usedQuickFilterBefore) {\n AppUtilities.updateLocalData(AppConstants.LOCAL_DATA_KEYS.USED_QUICK_FILTER_BEFORE, true);\n toggleModal(pendingNewIndex);\n } else {\n setSelectedValue(pendingNewValue);\n AppState.changeCertificationGroup(dataFilter, pendingNewValue, globalDispatch);\n }\n }\n\n function togglePasture() {\n toggle(AppConstants.GROUP_TYPES.PASTURE[AppConstants.TYPE_KEYS.URL_KEY], 0);\n }\n\n function toggleOutdoors() {\n toggle(AppConstants.GROUP_TYPES.OUTDOORS[AppConstants.TYPE_KEYS.URL_KEY], 1);\n }\n\n function toggleIndoors() {\n toggle(AppConstants.GROUP_TYPES.INDOORS[AppConstants.TYPE_KEYS.URL_KEY], 2);\n }\n\n const viewStyle = vertical ? styles.verticalView : styles.horizontalView;\n\n return (\n \n \n {\n // https://iconduck.com/emojis/36073/sunrise-over-mountains\n // https://iconduck.com/icons/71745/sign-check\n selectedValue == AppConstants.GROUP_TYPES.PASTURE[AppConstants.TYPE_KEYS.URL_KEY] ?\n \n :\n \n }\n \n \n {\n // https://iconduck.com/emojis/17299/black-sun-with-rays\n // https://iconduck.com/icons/71745/sign-check\n selectedValue == AppConstants.GROUP_TYPES.OUTDOORS[AppConstants.TYPE_KEYS.URL_KEY] ?\n \n :\n \n }\n \n \n {\n // https://iconduck.com/icons/254794/shopping-store-factory\n // https://iconduck.com/icons/71745/sign-check\n selectedValue == AppConstants.GROUP_TYPES.INDOORS[AppConstants.TYPE_KEYS.URL_KEY] ?\n \n :\n \n }\n \n \n );\n}\n","","","","","","","","","","","","","","","","","","import * as React from 'react';\nimport { Image, FlatList, Text, View, StyleSheet, Platform, Pressable, useWindowDimensions } from 'react-native';\nimport * as AppUtilities from \"../context/AppUtilities\";\nimport * as AppConstants from \"../context/AppConstants\";\nimport * as AppState from \"../context/AppState\";\nimport { AppContext } from \"../context/AppContext\";\nimport { Collapsible } from '../components/Collapsible';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Divider } from 'react-native-paper';\nimport * as Linking from 'expo-linking';\nimport { useForm, Controller } from \"react-hook-form\";\nimport { CustomButton } from '../components/CustomButton';\nimport { TextInput } from 'react-native-paper';\nimport Markdown from 'react-native-markdown-display-fh';\nimport { HeaderLeft } from '../components/HeaderLeft';\nimport { SearchLauncher } from '../components/SearchLauncher';\n\nconst styles = StyleSheet.create({\n wrapper: {\n flex: 1,\n padding: 20,\n },\n heading: {\n fontSize: 18,\n fontWeight: \"bold\",\n },\n label: {\n fontSize: 14,\n fontWeight: \"bold\",\n paddingRight: 5,\n flexWrap: \"wrap\",\n },\n labelPadLeft: {\n fontSize: 18,\n fontWeight: \"bold\",\n paddingLeft: 10,\n paddingTop: 5,\n },\n normal: {\n fontSize: 14,\n paddingRight: 10,\n flexWrap: \"wrap\",\n flex: 1,\n },\n divider: {\n marginVertical: 15,\n },\n line: {\n flexDirection: \"row\",\n marginBottom: 15,\n flexShrink: 1,\n },\n line2: {\n flexDirection: \"row\",\n marginBottom: 25,\n marginTop: 10,\n flexShrink: 1,\n },\n line3: {\n flexDirection: \"row\",\n marginBottom: 15,\n flexShrink: 1,\n paddingLeft: 10,\n },\n listItemStyle: {\n paddingLeft: 5,\n },\n listItemLeftIcon: {\n marginRight: 0,\n },\n mainList: {\n flexGrow: 0,\n },\n kittemListItem: {\n backgroundColor: \"transparent\",\n },\n link: {\n color: \"#0000EE\",\n textDecorationLine: \"underline\",\n },\n subtitle: {\n marginVertical: 20,\n fontWeight: \"600\",\n color: \"#6f6f6f\",\n },\n subtitle2: {\n marginTop: 20,\n fontWeight: \"600\",\n color: \"#6f6f6f\",\n },\n legendWrapper: {\n flexDirection: \"row\",\n alignItems: \"center\",\n },\n legendTitle: {\n fontWeight: \"bold\",\n paddingLeft: 5,\n paddingBottom: 2,\n },\n legendSubtitle: {\n paddingLeft: 5,\n },\n listWrapper: {\n flexGrow: 1,\n padding: 10,\n },\n searchWrapper: {\n padding: 10,\n paddingTop: 0,\n minHeight: 75,\n //maxHeight: 300,\n },\n descriptionWrapper: {\n paddingHorizontal: 10,\n },\n errorView: {\n padding: 20,\n }\n});\n\nconst markdownRules = {\n text: (node, children, parent, styles, inheritedStyles = {}) => (\n \n {node.content}\n \n ),\n};\n\nconst markdownStyles = StyleSheet.create({\n heading1: {\n paddingBottom: 10,\n },\n heading2: {\n paddingVertical: 10,\n },\n});\n\nfunction getYoutubeEmbedURL(link) {\n let result = \"\";\n if (link) {\n const v = link.indexOf(\"v=\");\n if (v != -1) {\n link = link.substring(v + 2);\n result = \"https://www.youtube.com/embed/\" + link;\n }\n }\n return result;\n}\n\nfunction getVideoEmbed(link) {\n if (link) {\n if (link.indexOf(\"youtube.com\") != -1) {\n if (AppUtilities.isWeb()) {\n return (\n \n \n \n );\n }\n }\n }\n return null;\n}\n\nexport function LocationDetails({ route, navigation }) {\n const { showPermanentSnack, showTemporarySnack, hideSnack, getLoginState, showSpinner, hideSpinner } = React.useContext(AppContext);\n const globalSearch = useSelector((state) => state.searchLocation);\n const [filteredProducts, setFilteredProducts] = React.useState(null);\n const [anyPartial, setAnyPartial] = React.useState(false);\n const [details, setDetails] = React.useState({});\n const [loading, setLoading] = React.useState(true);\n const [errorText, setErrorText] = React.useState(null);\n const { width, height } = useWindowDimensions();\n const dataFilter = useSelector((state) => state.dataFilter);\n\n async function loadLocationDetails(useFilter) {\n try {\n showSpinner();\n hideSnack();\n setLoading(true);\n\n AppUtilities.info(\"LocationDetails.loadLocationDetails fetching location details\");\n\n const customizedDataFilter = Object.assign({}, dataFilter);\n customizedDataFilter[AppConstants.SYNTHESIZED_TYPES.LOCATION_ID[AppConstants.TYPE_KEYS.URL_KEY]] = route.params.locationid;\n const url = \"/find_humane/api/get_location_details?\" + AppUtilities.convertFilterHashToQueryParametersSorted(customizedDataFilter);\n const response = await AppUtilities.fetchUnauthorized(\n \"LocationDetails.loadLocationDetails\",\n url,\n \"GET\",\n null,\n null,\n false,\n true,\n );\n\n if (AppUtilities.isStatusSuccess(response.status)) {\n if (response.body) {\n hideSpinner();\n\n //AppUtilities.info(\"LocationDetails.loadLocationDetails received: \" + AppUtilities.toJSONPretty(response.body.details));\n\n navigation.setOptions({\n headerLeft: (props) => ,\n title: response.body.details.title,\n });\n if (response.body.products.find(product => product.partiallyhumane)) {\n setAnyPartial(true);\n }\n setDetails(response.body.details);\n //AppUtilities.dir(response.body.details);\n\n // If we're in the context of delivery services, then filter out products that\n // aren't available for delivery\n let products = response.body.products;\n if (route.params.online) {\n products = products.filter((product) => !product.notonline);\n }\n\n setFilteredProducts(products);\n setLoading(false);\n AppUtilities.info(\"LocationDetails.loadLocationDetails finished getting location details\");\n } else {\n throw new Error(\"Result body not found\");\n }\n } else {\n if (response.status == 404) {\n hideSpinner();\n const title = \"404 Not Found\";\n navigation.setOptions({\n headerLeft: (props) => ,\n title: title,\n });\n setLoading(false);\n setErrorText(\"Location no longer has certified products\");\n } else {\n AppUtilities.handleErrorStatus(response.status, response.responseText);\n }\n }\n } catch (e) {\n showPermanentSnack(AppUtilities.getErrors(e), \"Retry\", () => loadLocationDetails(useFilter));\n hideSpinner();\n AppUtilities.handleException(e, \"LocationDetails.loadLocationDetails\");\n }\n }\n\n React.useEffect(() => {\n if (dataFilter) {\n loadLocationDetails();\n }\n }, [dataFilter]);\n\n function getNavigationAddress() {\n if (details.address_navigate &&\n details.address_navigate.length > 0 &&\n details.address_navigate != details.address\n )\n {\n return details.address_navigate;\n } else {\n return details.title + \", \" + details.address;\n }\n }\n\n async function openMaps() {\n try {\n AppUtilities.info(\"LocationDetails.openMaps: \" + AppUtilities.toJSONPretty(details));\n if (AppUtilities.isWeb()) {\n window.open(\"https://maps.google.com/?q=\" + encodeURIComponent(getNavigationAddress()), \"_blank\");\n } else if (AppUtilities.isIOS()) {\n Linking.openURL(\"maps:0,0?q=\" + getNavigationAddress());\n } else {\n Linking.openURL(\"geo:0,0?q=\" + getNavigationAddress());\n }\n } catch (e) {\n AppUtilities.handleException(e, \"LocationDetails.openMaps\");\n }\n }\n\n async function openNavigation() {\n try {\n AppUtilities.info(\"LocationDetails.openNavigation: \" + AppUtilities.toJSONPretty(details));\n if (AppUtilities.isWeb()) {\n window.open(\"https://maps.google.com/maps?daddr=\" + encodeURIComponent(getNavigationAddress()), \"_blank\");\n } else if (AppUtilities.isIOS()) {\n Linking.openURL(\"maps://app?daddr=\" + getNavigationAddress());\n } else {\n Linking.openURL(\"google.navigation:q=\" + getNavigationAddress());\n }\n } catch (e) {\n AppUtilities.handleException(e, \"LocationDetails.openNavigation\");\n }\n }\n\n function getWebsiteLink() {\n let link = details.website_underlying ? details.website_underlying : details.website;\n if (!details.linknoutm) {\n link = AppUtilities.getLinkWithUTM(link, AppConstants.UTM_CAMPAIGNS.LOCATION_DETAILS);\n }\n return link;\n }\n\n async function openWebsite() {\n try {\n AppUtilities.info(\"LocationDetails.openWebsite: \" + AppUtilities.toJSONPretty(details));\n AppUtilities.openLink(getWebsiteLink());\n } catch (e) {\n AppUtilities.handleException(e, \"LocationDetails.openWebsite\");\n }\n }\n\n const { control, handleSubmit, reset, formState: { errors } } = useForm({\n defaultValues: {\n email: \"\",\n details: \"\",\n }\n });\n\n const { control: control2, handleSubmit: handleSubmit2, reset: reset2, formState: { errors: errors2 } } = useForm({\n defaultValues: {\n email: \"\",\n details: \"\",\n }\n });\n\n async function onSubmit(data) {\n try {\n showSpinner();\n hideSnack();\n\n await AppUtilities.fetchUnauthorized(\n \"LocationDetails.onSubmit\",\n \"/find_humane/api/contact\",\n \"POST\",\n {\n email: data.email,\n data: data.details,\n subject: \"Report for \" + details.title + \" (\" + details.id + \")\",\n }\n );\n\n showTemporarySnack(\"Thanks! We'll review soon.\");\n\n reset();\n\n } catch (e) {\n showPermanentSnack(AppUtilities.getErrors(e), \"Retry\", () => onSubmit(data));\n AppUtilities.handleException(e, \"LocationDetails.onSubmit\");\n } finally {\n hideSpinner();\n }\n }\n\n async function onSubmit2(data) {\n try {\n showSpinner();\n hideSnack();\n\n await AppUtilities.fetchUnauthorized(\n \"LocationDetails.onSubmit2\",\n \"/find_humane/api/contact\",\n \"POST\",\n {\n email: data.email,\n data: data.details,\n subject: \"Add to \" + details.title + \" (\" + details.id + \")\",\n }\n );\n\n showTemporarySnack(\"Thanks! We'll review soon.\");\n\n reset2();\n\n } catch (e) {\n showPermanentSnack(AppUtilities.getErrors(e), \"Retry\", () => onSubmit(data));\n AppUtilities.handleException(e, \"LocationDetails.onSubmit2\");\n } finally {\n hideSpinner();\n }\n }\n\n async function onValidationErrors(errors) {\n showTemporarySnack(\"There are some errors in the form\");\n }\n\n function getGeneric(name, val, hideIfFalse, details) {\n if (hideIfFalse && !val) {\n return null;\n }\n return (\n \n {name}:\n {val}\n \n );\n }\n\n function getBoolean(name, val, hideIfFalse) {\n if (hideIfFalse && !val) {\n return null;\n }\n return (\n \n {name}:\n {val ? \"Yes\" : \"No\"}\n \n );\n }\n\n const renderItem = ({ item, index }) => {\n return AppUtilities.renderProductRow(item, index, width);\n };\n\n const renderOnline = () => {\n let descriptionMarkdown = details.onlinedescription;\n\n if (details.deliversto) {\n descriptionMarkdown += \"\\n\\n**Delivers to:** \" + details.deliversto;\n }\n\n if (descriptionMarkdown && descriptionMarkdown.length > 0) {\n return (\n <>\n \n \n \n {\n descriptionMarkdown\n }\n \n \n {\n details.website && !AppUtilities.isNullOrUndefined(details.website) ?\n AppUtilities.openLink(getWebsiteLink())}\n >\n More Information / Buy\n \n :\n null\n }\n \n );\n } else {\n return null;\n }\n };\n\n if (loading) {\n return null;\n }\n\n if (errorText) {\n return (\n \n {errorText}\n \n );\n }\n\n return (\n 0 ?\n filteredProducts.map((product) => (\n AppUtilities.createItemRow(\n product,\n () => {\n navigation.navigate(\n route.params.online ?\n AppConstants.SCREENS.PRODUCT_ONLINE_DETAILS :\n AppConstants.SCREENS.PRODUCT_DETAILS,\n {\n productid: product.id\n }\n );\n },\n (props) => (product.partiallyhumane ? : null),\n )\n ))\n :\n [ { i: \"-1\", title: filteredProducts ? \"No matches\" : \"Loading...\" } ]\n }\n ItemSeparatorComponent={Divider}\n renderItem={renderItem}\n ListHeaderComponent={(\n <>\n {\n details.title && details.title.length > AppConstants.HEADER_TEXT_OVERFLOW_LENGTH ?\n getGeneric(\"Name\", details.title ? details.title : \"Loading...\")\n :\n null\n }\n {\n !details.onlineonly && !AppUtilities.isNullOrUndefined(details.address) ?\n <>\n { getGeneric(\"Address\", details.address) }\n \n \n \n \n Open map\n \n \n \n \n \n Navigate\n \n \n :\n null\n }\n {/*\n details.website && !AppUtilities.isNullOrUndefined(details.website) ?\n \n \n \n \n Open website\n \n :\n null\n */\n }\n {\n details.website && !AppUtilities.isNullOrUndefined(details.website) ?\n renderOnline(details)\n :\n null\n }\n \n \n Humane Products (availability & prices may vary{details.online_shopping ? null : *})\n {\n filteredProducts && (filteredProducts.length >= 0 || !AppUtilities.isBlank(globalSearch) || AppConstants.IS_DEVELOPMENT) ?\n \n \n \n :\n null\n }\n \n )}\n ListFooterComponent={(\n <>\n 0 ? 20 : 0 }}>\n {filteredProducts && filteredProducts.length > 0 ? \"Results: \" + filteredProducts.length : \"\"}\n \n {\n !details.online_shopping ? \n <>\n \n \n * \n Availability & prices may vary.{\n Call ahead to confirm availability.\n }\n \n \n :\n null\n }\n \n {\n anyPartial ?\n <>\n \n Legend\n \n \n \n Partially humane\n Not all animal ingredients in the product are humanely certified\n \n \n \n :\n null\n }\n\n {\n details.supermarket ||\n details.restaurant ||\n details.foodtruck ||\n details.coffeeshop ||\n details.bakery ||\n details.bar ||\n details.dinein ||\n details.servesalcohol ||\n details.wifi ||\n details.wifipassword ||\n details.farm_store ||\n details.farm ||\n details.farmers_market ||\n details.csa ||\n details.farm_stay_bnb ||\n details.online_shopping ||\n details.onlineonly ||\n details.private_events ||\n details.workonlaptop ?\n <>\n \n Location details\n \n :\n null\n }\n { getBoolean(\"Farm\", details.farm, true) }\n { getBoolean(\"Farm Store\", details.farm_store, true) }\n { getBoolean(\"Farmers Market\", details.farmers_market, true) }\n { getBoolean(\"Farm Stay & BnB\", details.farm_stay_bnb, true) }\n { getBoolean(\"Grocery Store\", details.supermarket, true) }\n { getBoolean(\"Restaurant\", details.restaurant, true) }\n { getBoolean(\"Food Truck\", details.foodtruck, true) }\n { getBoolean(\"Coffee Shop\", details.coffeeshop, true) }\n { getBoolean(\"Bar\", details.bar, true) }\n { getBoolean(\"Bakery\", details.bakery, true) }\n { getBoolean(\"Dine-in\", details.dinein, true) }\n { getBoolean(\"WiFi\", details.wifi, true) }\n { getGeneric(\"WiFi Password\", details.wifipassword, true, true) }\n { getBoolean(\"Place to work on laptop\", details.workonlaptop, true) }\n { getBoolean(\"Serves alcohol\", details.servesalcohol, true) }\n { getBoolean(\"Community-Supported Agriculture (CSA)\", details.csa, true) }\n { getBoolean(\"Online Shopping\", details.online_shopping, true) }\n { getBoolean(\"Only Online\", details.onlineonly, true) }\n { getBoolean(\"Rentable for Private Events\", details.private_events, true) }\n \n {\n details.video_link ?\n <>\n \n Video\n \n {\n AppUtilities.createLink(details.video_link, details.video_link, AppConstants.UTM_CAMPAIGNS.LOCATION_DETAILS)\n }\n {\n getVideoEmbed(details.video_link)\n }\n \n \n :\n null\n }\n\n \n \n \n (\n \n )}\n />\n {errors2.email && Email is required.}\n \n (\n \n )}\n />\n {errors2.details && Suggested product required.}\n \n Submit\n \n \n \n (\n \n )}\n />\n {errors.email && Email is required.}\n \n (\n \n )}\n />\n {errors.details && Report required.}\n \n Submit\n \n \n )}\n />\n );\n}\n","import * as React from 'react';\nimport { Image, Text, View, StyleSheet, Platform, Pressable } from 'react-native';\nimport * as AppConstants from \"../context/AppConstants\";\n\nconst styles = StyleSheet.create({\n wrapper: {\n margin: 10,\n },\n titleWrapper: {\n flexDirection: \"row\",\n alignItems: \"center\",\n },\n titleText: {\n fontWeight: \"bold\",\n paddingLeft: 10,\n },\n contentWrapper: {\n padding: 20,\n }\n});\n\nexport function Collapsible({ title, expanded, children, expandedBackref }) {\n const [collapsed, setCollapsed] = React.useState(expanded ? false : true);\n\n const onTitlePress = () => {\n const newCollapsed = !collapsed;\n if (expandedBackref) {\n expandedBackref(!newCollapsed);\n } else {\n setCollapsed(newCollapsed);\n }\n }\n\n const isCollapsed = expandedBackref ? !expanded : collapsed;\n\n return (\n \n \n {\n isCollapsed ?\n \n :\n \n }\n {title}\n \n {\n isCollapsed ? null :\n \n { children }\n \n }\n \n );\n}\n","","","import React from 'react';\n\nvar isCheckBoxInput = (element) => element.type === 'checkbox';\n\nvar isDateObject = (value) => value instanceof Date;\n\nvar isNullOrUndefined = (value) => value == null;\n\nconst isObjectType = (value) => typeof value === 'object';\nvar isObject = (value) => !isNullOrUndefined(value) &&\n !Array.isArray(value) &&\n isObjectType(value) &&\n !isDateObject(value);\n\nvar getEventValue = (event) => isObject(event) && event.target\n ? isCheckBoxInput(event.target)\n ? event.target.checked\n : event.target.value\n : event;\n\nvar getNodeParentName = (name) => name.substring(0, name.search(/\\.\\d+(\\.|$)/)) || name;\n\nvar isNameInFieldArray = (names, name) => names.has(getNodeParentName(name));\n\nvar isPlainObject = (tempObject) => {\n const prototypeCopy = tempObject.constructor && tempObject.constructor.prototype;\n return (isObject(prototypeCopy) && prototypeCopy.hasOwnProperty('isPrototypeOf'));\n};\n\nvar isWeb = typeof window !== 'undefined' &&\n typeof window.HTMLElement !== 'undefined' &&\n typeof document !== 'undefined';\n\nfunction cloneObject(data) {\n let copy;\n const isArray = Array.isArray(data);\n if (data instanceof Date) {\n copy = new Date(data);\n }\n else if (data instanceof Set) {\n copy = new Set(data);\n }\n else if (!(isWeb && (data instanceof Blob || data instanceof FileList)) &&\n (isArray || isObject(data))) {\n copy = isArray ? [] : {};\n if (!isArray && !isPlainObject(data)) {\n copy = data;\n }\n else {\n for (const key in data) {\n if (data.hasOwnProperty(key)) {\n copy[key] = cloneObject(data[key]);\n }\n }\n }\n }\n else {\n return data;\n }\n return copy;\n}\n\nvar compact = (value) => Array.isArray(value) ? value.filter(Boolean) : [];\n\nvar isUndefined = (val) => val === undefined;\n\nvar get = (object, path, defaultValue) => {\n if (!path || !isObject(object)) {\n return defaultValue;\n }\n const result = compact(path.split(/[,[\\].]+?/)).reduce((result, key) => isNullOrUndefined(result) ? result : result[key], object);\n return isUndefined(result) || result === object\n ? isUndefined(object[path])\n ? defaultValue\n : object[path]\n : result;\n};\n\nvar isBoolean = (value) => typeof value === 'boolean';\n\nconst EVENTS = {\n BLUR: 'blur',\n FOCUS_OUT: 'focusout',\n CHANGE: 'change',\n};\nconst VALIDATION_MODE = {\n onBlur: 'onBlur',\n onChange: 'onChange',\n onSubmit: 'onSubmit',\n onTouched: 'onTouched',\n all: 'all',\n};\nconst INPUT_VALIDATION_RULES = {\n max: 'max',\n min: 'min',\n maxLength: 'maxLength',\n minLength: 'minLength',\n pattern: 'pattern',\n required: 'required',\n validate: 'validate',\n};\n\nconst HookFormContext = React.createContext(null);\n/**\n * This custom hook allows you to access the form context. useFormContext is intended to be used in deeply nested structures, where it would become inconvenient to pass the context as a prop. To be used with {@link FormProvider}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @returns return all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n * const methods = useForm();\n * const onSubmit = data => console.log(data);\n *\n * return (\n * \n *
\n * \n * \n * \n *
\n * );\n * }\n *\n * function NestedInput() {\n * const { register } = useFormContext(); // retrieve all hook methods\n * return ;\n * }\n * ```\n */\nconst useFormContext = () => React.useContext(HookFormContext);\n/**\n * A provider component that propagates the `useForm` methods to all children components via [React Context](https://reactjs.org/docs/context.html) API. To be used with {@link useFormContext}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @param props - all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n * const methods = useForm();\n * const onSubmit = data => console.log(data);\n *\n * return (\n * \n *
\n * \n * \n * \n *
\n * );\n * }\n *\n * function NestedInput() {\n * const { register } = useFormContext(); // retrieve all hook methods\n * return ;\n * }\n * ```\n */\nconst FormProvider = (props) => {\n const { children, ...data } = props;\n return (React.createElement(HookFormContext.Provider, { value: data }, children));\n};\n\nvar getProxyFormState = (formState, control, localProxyFormState, isRoot = true) => {\n const result = {\n defaultValues: control._defaultValues,\n };\n for (const key in formState) {\n Object.defineProperty(result, key, {\n get: () => {\n const _key = key;\n if (control._proxyFormState[_key] !== VALIDATION_MODE.all) {\n control._proxyFormState[_key] = !isRoot || VALIDATION_MODE.all;\n }\n localProxyFormState && (localProxyFormState[_key] = true);\n return formState[_key];\n },\n });\n }\n return result;\n};\n\nvar isEmptyObject = (value) => isObject(value) && !Object.keys(value).length;\n\nvar shouldRenderFormState = (formStateData, _proxyFormState, updateFormState, isRoot) => {\n updateFormState(formStateData);\n const { name, ...formState } = formStateData;\n return (isEmptyObject(formState) ||\n Object.keys(formState).length >= Object.keys(_proxyFormState).length ||\n Object.keys(formState).find((key) => _proxyFormState[key] ===\n (!isRoot || VALIDATION_MODE.all)));\n};\n\nvar convertToArrayPayload = (value) => (Array.isArray(value) ? value : [value]);\n\nvar shouldSubscribeByName = (name, signalName, exact) => !name ||\n !signalName ||\n name === signalName ||\n convertToArrayPayload(name).some((currentName) => currentName &&\n (exact\n ? currentName === signalName\n : currentName.startsWith(signalName) ||\n signalName.startsWith(currentName)));\n\nfunction useSubscribe(props) {\n const _props = React.useRef(props);\n _props.current = props;\n React.useEffect(() => {\n const subscription = !props.disabled &&\n _props.current.subject &&\n _props.current.subject.subscribe({\n next: _props.current.next,\n });\n return () => {\n subscription && subscription.unsubscribe();\n };\n }, [props.disabled]);\n}\n\n/**\n * This custom hook allows you to subscribe to each form state, and isolate the re-render at the custom hook level. It has its scope in terms of form state subscription, so it would not affect other useFormState and useForm. Using this hook can reduce the re-render impact on large and complex form application.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformstate) • [Demo](https://codesandbox.io/s/useformstate-75xly)\n *\n * @param props - include options on specify fields to subscribe. {@link UseFormStateReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, handleSubmit, control } = useForm({\n * defaultValues: {\n * firstName: \"firstName\"\n * }});\n * const { dirtyFields } = useFormState({\n * control\n * });\n * const onSubmit = (data) => console.log(data);\n *\n * return (\n *
\n * \n * {dirtyFields.firstName &&

Field is dirty.

}\n * \n *
\n * );\n * }\n * ```\n */\nfunction useFormState(props) {\n const methods = useFormContext();\n const { control = methods.control, disabled, name, exact } = props || {};\n const [formState, updateFormState] = React.useState(control._formState);\n const _mounted = React.useRef(true);\n const _localProxyFormState = React.useRef({\n isDirty: false,\n isLoading: false,\n dirtyFields: false,\n touchedFields: false,\n validatingFields: false,\n isValidating: false,\n isValid: false,\n errors: false,\n });\n const _name = React.useRef(name);\n _name.current = name;\n useSubscribe({\n disabled,\n next: (value) => _mounted.current &&\n shouldSubscribeByName(_name.current, value.name, exact) &&\n shouldRenderFormState(value, _localProxyFormState.current, control._updateFormState) &&\n updateFormState({\n ...control._formState,\n ...value,\n }),\n subject: control._subjects.state,\n });\n React.useEffect(() => {\n _mounted.current = true;\n _localProxyFormState.current.isValid && control._updateValid(true);\n return () => {\n _mounted.current = false;\n };\n }, [control]);\n return getProxyFormState(formState, control, _localProxyFormState.current, false);\n}\n\nvar isString = (value) => typeof value === 'string';\n\nvar generateWatchOutput = (names, _names, formValues, isGlobal, defaultValue) => {\n if (isString(names)) {\n isGlobal && _names.watch.add(names);\n return get(formValues, names, defaultValue);\n }\n if (Array.isArray(names)) {\n return names.map((fieldName) => (isGlobal && _names.watch.add(fieldName), get(formValues, fieldName)));\n }\n isGlobal && (_names.watchAll = true);\n return formValues;\n};\n\n/**\n * Custom hook to subscribe to field change and isolate re-rendering at the component level.\n *\n * @remarks\n *\n * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\n *\n * @example\n * ```tsx\n * const { control } = useForm();\n * const values = useWatch({\n * name: \"fieldName\"\n * control,\n * })\n * ```\n */\nfunction useWatch(props) {\n const methods = useFormContext();\n const { control = methods.control, name, defaultValue, disabled, exact, } = props || {};\n const _name = React.useRef(name);\n _name.current = name;\n useSubscribe({\n disabled,\n subject: control._subjects.values,\n next: (formState) => {\n if (shouldSubscribeByName(_name.current, formState.name, exact)) {\n updateValue(cloneObject(generateWatchOutput(_name.current, control._names, formState.values || control._formValues, false, defaultValue)));\n }\n },\n });\n const [value, updateValue] = React.useState(control._getWatch(name, defaultValue));\n React.useEffect(() => control._removeUnmounted());\n return value;\n}\n\nvar isKey = (value) => /^\\w*$/.test(value);\n\nvar stringToPath = (input) => compact(input.replace(/[\"|']|\\]/g, '').split(/\\.|\\[/));\n\nvar set = (object, path, value) => {\n let index = -1;\n const tempPath = isKey(path) ? [path] : stringToPath(path);\n const length = tempPath.length;\n const lastIndex = length - 1;\n while (++index < length) {\n const key = tempPath[index];\n let newValue = value;\n if (index !== lastIndex) {\n const objValue = object[key];\n newValue =\n isObject(objValue) || Array.isArray(objValue)\n ? objValue\n : !isNaN(+tempPath[index + 1])\n ? []\n : {};\n }\n object[key] = newValue;\n object = object[key];\n }\n return object;\n};\n\n/**\n * Custom hook to work with controlled component, this function provide you with both form and field level state. Re-render is isolated at the hook level.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller) • [Demo](https://codesandbox.io/s/usecontroller-0o8px)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns field properties, field and form state. {@link UseControllerReturn}\n *\n * @example\n * ```tsx\n * function Input(props) {\n * const { field, fieldState, formState } = useController(props);\n * return (\n *
\n * \n *

{fieldState.isTouched && \"Touched\"}

\n *

{formState.isSubmitted ? \"submitted\" : \"\"}

\n *
\n * );\n * }\n * ```\n */\nfunction useController(props) {\n const methods = useFormContext();\n const { name, disabled, control = methods.control, shouldUnregister } = props;\n const isArrayField = isNameInFieldArray(control._names.array, name);\n const value = useWatch({\n control,\n name,\n defaultValue: get(control._formValues, name, get(control._defaultValues, name, props.defaultValue)),\n exact: true,\n });\n const formState = useFormState({\n control,\n name,\n });\n const _registerProps = React.useRef(control.register(name, {\n ...props.rules,\n value,\n ...(isBoolean(props.disabled) ? { disabled: props.disabled } : {}),\n }));\n React.useEffect(() => {\n const _shouldUnregisterField = control._options.shouldUnregister || shouldUnregister;\n const updateMounted = (name, value) => {\n const field = get(control._fields, name);\n if (field) {\n field._f.mount = value;\n }\n };\n updateMounted(name, true);\n if (_shouldUnregisterField) {\n const value = cloneObject(get(control._options.defaultValues, name));\n set(control._defaultValues, name, value);\n if (isUndefined(get(control._formValues, name))) {\n set(control._formValues, name, value);\n }\n }\n return () => {\n (isArrayField\n ? _shouldUnregisterField && !control._state.action\n : _shouldUnregisterField)\n ? control.unregister(name)\n : updateMounted(name, false);\n };\n }, [name, control, isArrayField, shouldUnregister]);\n React.useEffect(() => {\n if (get(control._fields, name)) {\n control._updateDisabledField({\n disabled,\n fields: control._fields,\n name,\n value: get(control._fields, name)._f.value,\n });\n }\n }, [disabled, name, control]);\n return {\n field: {\n name,\n value,\n ...(isBoolean(disabled) || formState.disabled\n ? { disabled: formState.disabled || disabled }\n : {}),\n onChange: React.useCallback((event) => _registerProps.current.onChange({\n target: {\n value: getEventValue(event),\n name: name,\n },\n type: EVENTS.CHANGE,\n }), [name]),\n onBlur: React.useCallback(() => _registerProps.current.onBlur({\n target: {\n value: get(control._formValues, name),\n name: name,\n },\n type: EVENTS.BLUR,\n }), [name, control]),\n ref: (elm) => {\n const field = get(control._fields, name);\n if (field && elm) {\n field._f.ref = {\n focus: () => elm.focus(),\n select: () => elm.select(),\n setCustomValidity: (message) => elm.setCustomValidity(message),\n reportValidity: () => elm.reportValidity(),\n };\n }\n },\n },\n formState,\n fieldState: Object.defineProperties({}, {\n invalid: {\n enumerable: true,\n get: () => !!get(formState.errors, name),\n },\n isDirty: {\n enumerable: true,\n get: () => !!get(formState.dirtyFields, name),\n },\n isTouched: {\n enumerable: true,\n get: () => !!get(formState.touchedFields, name),\n },\n isValidating: {\n enumerable: true,\n get: () => !!get(formState.validatingFields, name),\n },\n error: {\n enumerable: true,\n get: () => get(formState.errors, name),\n },\n }),\n };\n}\n\n/**\n * Component based on `useController` hook to work with controlled component.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller/controller) • [Demo](https://codesandbox.io/s/react-hook-form-v6-controller-ts-jwyzw) • [Video](https://www.youtube.com/watch?v=N2UNk_UCVyA)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns provide field handler functions, field and form state.\n *\n * @example\n * ```tsx\n * function App() {\n * const { control } = useForm({\n * defaultValues: {\n * test: \"\"\n * }\n * });\n *\n * return (\n *
\n * (\n * <>\n * \n *

{formState.isSubmitted ? \"submitted\" : \"\"}

\n *

{fieldState.isTouched ? \"touched\" : \"\"}

\n * \n * )}\n * />\n * \n * );\n * }\n * ```\n */\nconst Controller = (props) => props.render(useController(props));\n\nconst POST_REQUEST = 'post';\n/**\n * Form component to manage submission.\n *\n * @param props - to setup submission detail. {@link FormProps}\n *\n * @returns form component or headless render prop.\n *\n * @example\n * ```tsx\n * function App() {\n * const { control, formState: { errors } } = useForm();\n *\n * return (\n *
\n * \n *

{errors?.root?.server && 'Server error'}

\n * \n *
\n * );\n * }\n * ```\n */\nfunction Form(props) {\n const methods = useFormContext();\n const [mounted, setMounted] = React.useState(false);\n const { control = methods.control, onSubmit, children, action, method = POST_REQUEST, headers, encType, onError, render, onSuccess, validateStatus, ...rest } = props;\n const submit = async (event) => {\n let hasError = false;\n let type = '';\n await control.handleSubmit(async (data) => {\n const formData = new FormData();\n let formDataJson = '';\n try {\n formDataJson = JSON.stringify(data);\n }\n catch (_a) { }\n for (const name of control._names.mount) {\n formData.append(name, get(data, name));\n }\n if (onSubmit) {\n await onSubmit({\n data,\n event,\n method,\n formData,\n formDataJson,\n });\n }\n if (action) {\n try {\n const shouldStringifySubmissionData = [\n headers && headers['Content-Type'],\n encType,\n ].some((value) => value && value.includes('json'));\n const response = await fetch(action, {\n method,\n headers: {\n ...headers,\n ...(encType ? { 'Content-Type': encType } : {}),\n },\n body: shouldStringifySubmissionData ? formDataJson : formData,\n });\n if (response &&\n (validateStatus\n ? !validateStatus(response.status)\n : response.status < 200 || response.status >= 300)) {\n hasError = true;\n onError && onError({ response });\n type = String(response.status);\n }\n else {\n onSuccess && onSuccess({ response });\n }\n }\n catch (error) {\n hasError = true;\n onError && onError({ error });\n }\n }\n })(event);\n if (hasError && props.control) {\n props.control._subjects.state.next({\n isSubmitSuccessful: false,\n });\n props.control.setError('root.server', {\n type,\n });\n }\n };\n React.useEffect(() => {\n setMounted(true);\n }, []);\n return render ? (React.createElement(React.Fragment, null, render({\n submit,\n }))) : (React.createElement(\"form\", { noValidate: mounted, action: action, method: method, encType: encType, onSubmit: submit, ...rest }, children));\n}\n\nvar appendErrors = (name, validateAllFieldCriteria, errors, type, message) => validateAllFieldCriteria\n ? {\n ...errors[name],\n types: {\n ...(errors[name] && errors[name].types ? errors[name].types : {}),\n [type]: message || true,\n },\n }\n : {};\n\nvar generateId = () => {\n const d = typeof performance === 'undefined' ? Date.now() : performance.now() * 1000;\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16 + d) % 16 | 0;\n return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);\n });\n};\n\nvar getFocusFieldName = (name, index, options = {}) => options.shouldFocus || isUndefined(options.shouldFocus)\n ? options.focusName ||\n `${name}.${isUndefined(options.focusIndex) ? index : options.focusIndex}.`\n : '';\n\nvar getValidationModes = (mode) => ({\n isOnSubmit: !mode || mode === VALIDATION_MODE.onSubmit,\n isOnBlur: mode === VALIDATION_MODE.onBlur,\n isOnChange: mode === VALIDATION_MODE.onChange,\n isOnAll: mode === VALIDATION_MODE.all,\n isOnTouch: mode === VALIDATION_MODE.onTouched,\n});\n\nvar isWatched = (name, _names, isBlurEvent) => !isBlurEvent &&\n (_names.watchAll ||\n _names.watch.has(name) ||\n [..._names.watch].some((watchName) => name.startsWith(watchName) &&\n /^\\.\\w+/.test(name.slice(watchName.length))));\n\nconst iterateFieldsByAction = (fields, action, fieldsNames, abortEarly) => {\n for (const key of fieldsNames || Object.keys(fields)) {\n const field = get(fields, key);\n if (field) {\n const { _f, ...currentField } = field;\n if (_f) {\n if (_f.refs && _f.refs[0] && action(_f.refs[0], key) && !abortEarly) {\n break;\n }\n else if (_f.ref && action(_f.ref, _f.name) && !abortEarly) {\n break;\n }\n else {\n iterateFieldsByAction(currentField, action);\n }\n }\n else if (isObject(currentField)) {\n iterateFieldsByAction(currentField, action);\n }\n }\n }\n};\n\nvar updateFieldArrayRootError = (errors, error, name) => {\n const fieldArrayErrors = compact(get(errors, name));\n set(fieldArrayErrors, 'root', error[name]);\n set(errors, name, fieldArrayErrors);\n return errors;\n};\n\nvar isFileInput = (element) => element.type === 'file';\n\nvar isFunction = (value) => typeof value === 'function';\n\nvar isHTMLElement = (value) => {\n if (!isWeb) {\n return false;\n }\n const owner = value ? value.ownerDocument : 0;\n return (value instanceof\n (owner && owner.defaultView ? owner.defaultView.HTMLElement : HTMLElement));\n};\n\nvar isMessage = (value) => isString(value);\n\nvar isRadioInput = (element) => element.type === 'radio';\n\nvar isRegex = (value) => value instanceof RegExp;\n\nconst defaultResult = {\n value: false,\n isValid: false,\n};\nconst validResult = { value: true, isValid: true };\nvar getCheckboxValue = (options) => {\n if (Array.isArray(options)) {\n if (options.length > 1) {\n const values = options\n .filter((option) => option && option.checked && !option.disabled)\n .map((option) => option.value);\n return { value: values, isValid: !!values.length };\n }\n return options[0].checked && !options[0].disabled\n ? // @ts-expect-error expected to work in the browser\n options[0].attributes && !isUndefined(options[0].attributes.value)\n ? isUndefined(options[0].value) || options[0].value === ''\n ? validResult\n : { value: options[0].value, isValid: true }\n : validResult\n : defaultResult;\n }\n return defaultResult;\n};\n\nconst defaultReturn = {\n isValid: false,\n value: null,\n};\nvar getRadioValue = (options) => Array.isArray(options)\n ? options.reduce((previous, option) => option && option.checked && !option.disabled\n ? {\n isValid: true,\n value: option.value,\n }\n : previous, defaultReturn)\n : defaultReturn;\n\nfunction getValidateError(result, ref, type = 'validate') {\n if (isMessage(result) ||\n (Array.isArray(result) && result.every(isMessage)) ||\n (isBoolean(result) && !result)) {\n return {\n type,\n message: isMessage(result) ? result : '',\n ref,\n };\n }\n}\n\nvar getValueAndMessage = (validationData) => isObject(validationData) && !isRegex(validationData)\n ? validationData\n : {\n value: validationData,\n message: '',\n };\n\nvar validateField = async (field, formValues, validateAllFieldCriteria, shouldUseNativeValidation, isFieldArray) => {\n const { ref, refs, required, maxLength, minLength, min, max, pattern, validate, name, valueAsNumber, mount, disabled, } = field._f;\n const inputValue = get(formValues, name);\n if (!mount || disabled) {\n return {};\n }\n const inputRef = refs ? refs[0] : ref;\n const setCustomValidity = (message) => {\n if (shouldUseNativeValidation && inputRef.reportValidity) {\n inputRef.setCustomValidity(isBoolean(message) ? '' : message || '');\n inputRef.reportValidity();\n }\n };\n const error = {};\n const isRadio = isRadioInput(ref);\n const isCheckBox = isCheckBoxInput(ref);\n const isRadioOrCheckbox = isRadio || isCheckBox;\n const isEmpty = ((valueAsNumber || isFileInput(ref)) &&\n isUndefined(ref.value) &&\n isUndefined(inputValue)) ||\n (isHTMLElement(ref) && ref.value === '') ||\n inputValue === '' ||\n (Array.isArray(inputValue) && !inputValue.length);\n const appendErrorsCurry = appendErrors.bind(null, name, validateAllFieldCriteria, error);\n const getMinMaxMessage = (exceedMax, maxLengthMessage, minLengthMessage, maxType = INPUT_VALIDATION_RULES.maxLength, minType = INPUT_VALIDATION_RULES.minLength) => {\n const message = exceedMax ? maxLengthMessage : minLengthMessage;\n error[name] = {\n type: exceedMax ? maxType : minType,\n message,\n ref,\n ...appendErrorsCurry(exceedMax ? maxType : minType, message),\n };\n };\n if (isFieldArray\n ? !Array.isArray(inputValue) || !inputValue.length\n : required &&\n ((!isRadioOrCheckbox && (isEmpty || isNullOrUndefined(inputValue))) ||\n (isBoolean(inputValue) && !inputValue) ||\n (isCheckBox && !getCheckboxValue(refs).isValid) ||\n (isRadio && !getRadioValue(refs).isValid))) {\n const { value, message } = isMessage(required)\n ? { value: !!required, message: required }\n : getValueAndMessage(required);\n if (value) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.required,\n message,\n ref: inputRef,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.required, message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(message);\n return error;\n }\n }\n }\n if (!isEmpty && (!isNullOrUndefined(min) || !isNullOrUndefined(max))) {\n let exceedMax;\n let exceedMin;\n const maxOutput = getValueAndMessage(max);\n const minOutput = getValueAndMessage(min);\n if (!isNullOrUndefined(inputValue) && !isNaN(inputValue)) {\n const valueNumber = ref.valueAsNumber ||\n (inputValue ? +inputValue : inputValue);\n if (!isNullOrUndefined(maxOutput.value)) {\n exceedMax = valueNumber > maxOutput.value;\n }\n if (!isNullOrUndefined(minOutput.value)) {\n exceedMin = valueNumber < minOutput.value;\n }\n }\n else {\n const valueDate = ref.valueAsDate || new Date(inputValue);\n const convertTimeToDate = (time) => new Date(new Date().toDateString() + ' ' + time);\n const isTime = ref.type == 'time';\n const isWeek = ref.type == 'week';\n if (isString(maxOutput.value) && inputValue) {\n exceedMax = isTime\n ? convertTimeToDate(inputValue) > convertTimeToDate(maxOutput.value)\n : isWeek\n ? inputValue > maxOutput.value\n : valueDate > new Date(maxOutput.value);\n }\n if (isString(minOutput.value) && inputValue) {\n exceedMin = isTime\n ? convertTimeToDate(inputValue) < convertTimeToDate(minOutput.value)\n : isWeek\n ? inputValue < minOutput.value\n : valueDate < new Date(minOutput.value);\n }\n }\n if (exceedMax || exceedMin) {\n getMinMaxMessage(!!exceedMax, maxOutput.message, minOutput.message, INPUT_VALIDATION_RULES.max, INPUT_VALIDATION_RULES.min);\n if (!validateAllFieldCriteria) {\n setCustomValidity(error[name].message);\n return error;\n }\n }\n }\n if ((maxLength || minLength) &&\n !isEmpty &&\n (isString(inputValue) || (isFieldArray && Array.isArray(inputValue)))) {\n const maxLengthOutput = getValueAndMessage(maxLength);\n const minLengthOutput = getValueAndMessage(minLength);\n const exceedMax = !isNullOrUndefined(maxLengthOutput.value) &&\n inputValue.length > +maxLengthOutput.value;\n const exceedMin = !isNullOrUndefined(minLengthOutput.value) &&\n inputValue.length < +minLengthOutput.value;\n if (exceedMax || exceedMin) {\n getMinMaxMessage(exceedMax, maxLengthOutput.message, minLengthOutput.message);\n if (!validateAllFieldCriteria) {\n setCustomValidity(error[name].message);\n return error;\n }\n }\n }\n if (pattern && !isEmpty && isString(inputValue)) {\n const { value: patternValue, message } = getValueAndMessage(pattern);\n if (isRegex(patternValue) && !inputValue.match(patternValue)) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.pattern,\n message,\n ref,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.pattern, message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(message);\n return error;\n }\n }\n }\n if (validate) {\n if (isFunction(validate)) {\n const result = await validate(inputValue, formValues);\n const validateError = getValidateError(result, inputRef);\n if (validateError) {\n error[name] = {\n ...validateError,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.validate, validateError.message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(validateError.message);\n return error;\n }\n }\n }\n else if (isObject(validate)) {\n let validationResult = {};\n for (const key in validate) {\n if (!isEmptyObject(validationResult) && !validateAllFieldCriteria) {\n break;\n }\n const validateError = getValidateError(await validate[key](inputValue, formValues), inputRef, key);\n if (validateError) {\n validationResult = {\n ...validateError,\n ...appendErrorsCurry(key, validateError.message),\n };\n setCustomValidity(validateError.message);\n if (validateAllFieldCriteria) {\n error[name] = validationResult;\n }\n }\n }\n if (!isEmptyObject(validationResult)) {\n error[name] = {\n ref: inputRef,\n ...validationResult,\n };\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n }\n }\n setCustomValidity(true);\n return error;\n};\n\nvar appendAt = (data, value) => [\n ...data,\n ...convertToArrayPayload(value),\n];\n\nvar fillEmptyArray = (value) => Array.isArray(value) ? value.map(() => undefined) : undefined;\n\nfunction insert(data, index, value) {\n return [\n ...data.slice(0, index),\n ...convertToArrayPayload(value),\n ...data.slice(index),\n ];\n}\n\nvar moveArrayAt = (data, from, to) => {\n if (!Array.isArray(data)) {\n return [];\n }\n if (isUndefined(data[to])) {\n data[to] = undefined;\n }\n data.splice(to, 0, data.splice(from, 1)[0]);\n return data;\n};\n\nvar prependAt = (data, value) => [\n ...convertToArrayPayload(value),\n ...convertToArrayPayload(data),\n];\n\nfunction removeAtIndexes(data, indexes) {\n let i = 0;\n const temp = [...data];\n for (const index of indexes) {\n temp.splice(index - i, 1);\n i++;\n }\n return compact(temp).length ? temp : [];\n}\nvar removeArrayAt = (data, index) => isUndefined(index)\n ? []\n : removeAtIndexes(data, convertToArrayPayload(index).sort((a, b) => a - b));\n\nvar swapArrayAt = (data, indexA, indexB) => {\n [data[indexA], data[indexB]] = [data[indexB], data[indexA]];\n};\n\nfunction baseGet(object, updatePath) {\n const length = updatePath.slice(0, -1).length;\n let index = 0;\n while (index < length) {\n object = isUndefined(object) ? index++ : object[updatePath[index++]];\n }\n return object;\n}\nfunction isEmptyArray(obj) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key) && !isUndefined(obj[key])) {\n return false;\n }\n }\n return true;\n}\nfunction unset(object, path) {\n const paths = Array.isArray(path)\n ? path\n : isKey(path)\n ? [path]\n : stringToPath(path);\n const childObject = paths.length === 1 ? object : baseGet(object, paths);\n const index = paths.length - 1;\n const key = paths[index];\n if (childObject) {\n delete childObject[key];\n }\n if (index !== 0 &&\n ((isObject(childObject) && isEmptyObject(childObject)) ||\n (Array.isArray(childObject) && isEmptyArray(childObject)))) {\n unset(object, paths.slice(0, -1));\n }\n return object;\n}\n\nvar updateAt = (fieldValues, index, value) => {\n fieldValues[index] = value;\n return fieldValues;\n};\n\n/**\n * A custom hook that exposes convenient methods to perform operations with a list of dynamic inputs that need to be appended, updated, removed etc. • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn) • [Video](https://youtu.be/4MrbfGSFY2A)\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usefieldarray) • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn)\n *\n * @param props - useFieldArray props\n *\n * @returns methods - functions to manipulate with the Field Arrays (dynamic inputs) {@link UseFieldArrayReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, control, handleSubmit, reset, trigger, setError } = useForm({\n * defaultValues: {\n * test: []\n * }\n * });\n * const { fields, append } = useFieldArray({\n * control,\n * name: \"test\"\n * });\n *\n * return (\n *
console.log(data))}>\n * {fields.map((item, index) => (\n * \n * ))}\n * \n * \n *
\n * );\n * }\n * ```\n */\nfunction useFieldArray(props) {\n const methods = useFormContext();\n const { control = methods.control, name, keyName = 'id', shouldUnregister, } = props;\n const [fields, setFields] = React.useState(control._getFieldArray(name));\n const ids = React.useRef(control._getFieldArray(name).map(generateId));\n const _fieldIds = React.useRef(fields);\n const _name = React.useRef(name);\n const _actioned = React.useRef(false);\n _name.current = name;\n _fieldIds.current = fields;\n control._names.array.add(name);\n props.rules &&\n control.register(name, props.rules);\n useSubscribe({\n next: ({ values, name: fieldArrayName, }) => {\n if (fieldArrayName === _name.current || !fieldArrayName) {\n const fieldValues = get(values, _name.current);\n if (Array.isArray(fieldValues)) {\n setFields(fieldValues);\n ids.current = fieldValues.map(generateId);\n }\n }\n },\n subject: control._subjects.array,\n });\n const updateValues = React.useCallback((updatedFieldArrayValues) => {\n _actioned.current = true;\n control._updateFieldArray(name, updatedFieldArrayValues);\n }, [control, name]);\n const append = (value, options) => {\n const appendValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = appendAt(control._getFieldArray(name), appendValue);\n control._names.focus = getFocusFieldName(name, updatedFieldArrayValues.length - 1, options);\n ids.current = appendAt(ids.current, appendValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._updateFieldArray(name, updatedFieldArrayValues, appendAt, {\n argA: fillEmptyArray(value),\n });\n };\n const prepend = (value, options) => {\n const prependValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = prependAt(control._getFieldArray(name), prependValue);\n control._names.focus = getFocusFieldName(name, 0, options);\n ids.current = prependAt(ids.current, prependValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._updateFieldArray(name, updatedFieldArrayValues, prependAt, {\n argA: fillEmptyArray(value),\n });\n };\n const remove = (index) => {\n const updatedFieldArrayValues = removeArrayAt(control._getFieldArray(name), index);\n ids.current = removeArrayAt(ids.current, index);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._updateFieldArray(name, updatedFieldArrayValues, removeArrayAt, {\n argA: index,\n });\n };\n const insert$1 = (index, value, options) => {\n const insertValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = insert(control._getFieldArray(name), index, insertValue);\n control._names.focus = getFocusFieldName(name, index, options);\n ids.current = insert(ids.current, index, insertValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._updateFieldArray(name, updatedFieldArrayValues, insert, {\n argA: index,\n argB: fillEmptyArray(value),\n });\n };\n const swap = (indexA, indexB) => {\n const updatedFieldArrayValues = control._getFieldArray(name);\n swapArrayAt(updatedFieldArrayValues, indexA, indexB);\n swapArrayAt(ids.current, indexA, indexB);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._updateFieldArray(name, updatedFieldArrayValues, swapArrayAt, {\n argA: indexA,\n argB: indexB,\n }, false);\n };\n const move = (from, to) => {\n const updatedFieldArrayValues = control._getFieldArray(name);\n moveArrayAt(updatedFieldArrayValues, from, to);\n moveArrayAt(ids.current, from, to);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._updateFieldArray(name, updatedFieldArrayValues, moveArrayAt, {\n argA: from,\n argB: to,\n }, false);\n };\n const update = (index, value) => {\n const updateValue = cloneObject(value);\n const updatedFieldArrayValues = updateAt(control._getFieldArray(name), index, updateValue);\n ids.current = [...updatedFieldArrayValues].map((item, i) => !item || i === index ? generateId() : ids.current[i]);\n updateValues(updatedFieldArrayValues);\n setFields([...updatedFieldArrayValues]);\n control._updateFieldArray(name, updatedFieldArrayValues, updateAt, {\n argA: index,\n argB: updateValue,\n }, true, false);\n };\n const replace = (value) => {\n const updatedFieldArrayValues = convertToArrayPayload(cloneObject(value));\n ids.current = updatedFieldArrayValues.map(generateId);\n updateValues([...updatedFieldArrayValues]);\n setFields([...updatedFieldArrayValues]);\n control._updateFieldArray(name, [...updatedFieldArrayValues], (data) => data, {}, true, false);\n };\n React.useEffect(() => {\n control._state.action = false;\n isWatched(name, control._names) &&\n control._subjects.state.next({\n ...control._formState,\n });\n if (_actioned.current &&\n (!getValidationModes(control._options.mode).isOnSubmit ||\n control._formState.isSubmitted)) {\n if (control._options.resolver) {\n control._executeSchema([name]).then((result) => {\n const error = get(result.errors, name);\n const existingError = get(control._formState.errors, name);\n if (existingError\n ? (!error && existingError.type) ||\n (error &&\n (existingError.type !== error.type ||\n existingError.message !== error.message))\n : error && error.type) {\n error\n ? set(control._formState.errors, name, error)\n : unset(control._formState.errors, name);\n control._subjects.state.next({\n errors: control._formState.errors,\n });\n }\n });\n }\n else {\n const field = get(control._fields, name);\n if (field &&\n field._f &&\n !(getValidationModes(control._options.reValidateMode).isOnSubmit &&\n getValidationModes(control._options.mode).isOnSubmit)) {\n validateField(field, control._formValues, control._options.criteriaMode === VALIDATION_MODE.all, control._options.shouldUseNativeValidation, true).then((error) => !isEmptyObject(error) &&\n control._subjects.state.next({\n errors: updateFieldArrayRootError(control._formState.errors, error, name),\n }));\n }\n }\n }\n control._subjects.values.next({\n name,\n values: { ...control._formValues },\n });\n control._names.focus &&\n iterateFieldsByAction(control._fields, (ref, key) => {\n if (control._names.focus &&\n key.startsWith(control._names.focus) &&\n ref.focus) {\n ref.focus();\n return 1;\n }\n return;\n });\n control._names.focus = '';\n control._updateValid();\n _actioned.current = false;\n }, [fields, name, control]);\n React.useEffect(() => {\n !get(control._formValues, name) && control._updateFieldArray(name);\n return () => {\n (control._options.shouldUnregister || shouldUnregister) &&\n control.unregister(name);\n };\n }, [name, control, keyName, shouldUnregister]);\n return {\n swap: React.useCallback(swap, [updateValues, name, control]),\n move: React.useCallback(move, [updateValues, name, control]),\n prepend: React.useCallback(prepend, [updateValues, name, control]),\n append: React.useCallback(append, [updateValues, name, control]),\n remove: React.useCallback(remove, [updateValues, name, control]),\n insert: React.useCallback(insert$1, [updateValues, name, control]),\n update: React.useCallback(update, [updateValues, name, control]),\n replace: React.useCallback(replace, [updateValues, name, control]),\n fields: React.useMemo(() => fields.map((field, index) => ({\n ...field,\n [keyName]: ids.current[index] || generateId(),\n })), [fields, keyName]),\n };\n}\n\nvar createSubject = () => {\n let _observers = [];\n const next = (value) => {\n for (const observer of _observers) {\n observer.next && observer.next(value);\n }\n };\n const subscribe = (observer) => {\n _observers.push(observer);\n return {\n unsubscribe: () => {\n _observers = _observers.filter((o) => o !== observer);\n },\n };\n };\n const unsubscribe = () => {\n _observers = [];\n };\n return {\n get observers() {\n return _observers;\n },\n next,\n subscribe,\n unsubscribe,\n };\n};\n\nvar isPrimitive = (value) => isNullOrUndefined(value) || !isObjectType(value);\n\nfunction deepEqual(object1, object2) {\n if (isPrimitive(object1) || isPrimitive(object2)) {\n return object1 === object2;\n }\n if (isDateObject(object1) && isDateObject(object2)) {\n return object1.getTime() === object2.getTime();\n }\n const keys1 = Object.keys(object1);\n const keys2 = Object.keys(object2);\n if (keys1.length !== keys2.length) {\n return false;\n }\n for (const key of keys1) {\n const val1 = object1[key];\n if (!keys2.includes(key)) {\n return false;\n }\n if (key !== 'ref') {\n const val2 = object2[key];\n if ((isDateObject(val1) && isDateObject(val2)) ||\n (isObject(val1) && isObject(val2)) ||\n (Array.isArray(val1) && Array.isArray(val2))\n ? !deepEqual(val1, val2)\n : val1 !== val2) {\n return false;\n }\n }\n }\n return true;\n}\n\nvar isMultipleSelect = (element) => element.type === `select-multiple`;\n\nvar isRadioOrCheckbox = (ref) => isRadioInput(ref) || isCheckBoxInput(ref);\n\nvar live = (ref) => isHTMLElement(ref) && ref.isConnected;\n\nvar objectHasFunction = (data) => {\n for (const key in data) {\n if (isFunction(data[key])) {\n return true;\n }\n }\n return false;\n};\n\nfunction markFieldsDirty(data, fields = {}) {\n const isParentNodeArray = Array.isArray(data);\n if (isObject(data) || isParentNodeArray) {\n for (const key in data) {\n if (Array.isArray(data[key]) ||\n (isObject(data[key]) && !objectHasFunction(data[key]))) {\n fields[key] = Array.isArray(data[key]) ? [] : {};\n markFieldsDirty(data[key], fields[key]);\n }\n else if (!isNullOrUndefined(data[key])) {\n fields[key] = true;\n }\n }\n }\n return fields;\n}\nfunction getDirtyFieldsFromDefaultValues(data, formValues, dirtyFieldsFromValues) {\n const isParentNodeArray = Array.isArray(data);\n if (isObject(data) || isParentNodeArray) {\n for (const key in data) {\n if (Array.isArray(data[key]) ||\n (isObject(data[key]) && !objectHasFunction(data[key]))) {\n if (isUndefined(formValues) ||\n isPrimitive(dirtyFieldsFromValues[key])) {\n dirtyFieldsFromValues[key] = Array.isArray(data[key])\n ? markFieldsDirty(data[key], [])\n : { ...markFieldsDirty(data[key]) };\n }\n else {\n getDirtyFieldsFromDefaultValues(data[key], isNullOrUndefined(formValues) ? {} : formValues[key], dirtyFieldsFromValues[key]);\n }\n }\n else {\n dirtyFieldsFromValues[key] = !deepEqual(data[key], formValues[key]);\n }\n }\n }\n return dirtyFieldsFromValues;\n}\nvar getDirtyFields = (defaultValues, formValues) => getDirtyFieldsFromDefaultValues(defaultValues, formValues, markFieldsDirty(formValues));\n\nvar getFieldValueAs = (value, { valueAsNumber, valueAsDate, setValueAs }) => isUndefined(value)\n ? value\n : valueAsNumber\n ? value === ''\n ? NaN\n : value\n ? +value\n : value\n : valueAsDate && isString(value)\n ? new Date(value)\n : setValueAs\n ? setValueAs(value)\n : value;\n\nfunction getFieldValue(_f) {\n const ref = _f.ref;\n if (_f.refs ? _f.refs.every((ref) => ref.disabled) : ref.disabled) {\n return;\n }\n if (isFileInput(ref)) {\n return ref.files;\n }\n if (isRadioInput(ref)) {\n return getRadioValue(_f.refs).value;\n }\n if (isMultipleSelect(ref)) {\n return [...ref.selectedOptions].map(({ value }) => value);\n }\n if (isCheckBoxInput(ref)) {\n return getCheckboxValue(_f.refs).value;\n }\n return getFieldValueAs(isUndefined(ref.value) ? _f.ref.value : ref.value, _f);\n}\n\nvar getResolverOptions = (fieldsNames, _fields, criteriaMode, shouldUseNativeValidation) => {\n const fields = {};\n for (const name of fieldsNames) {\n const field = get(_fields, name);\n field && set(fields, name, field._f);\n }\n return {\n criteriaMode,\n names: [...fieldsNames],\n fields,\n shouldUseNativeValidation,\n };\n};\n\nvar getRuleValue = (rule) => isUndefined(rule)\n ? rule\n : isRegex(rule)\n ? rule.source\n : isObject(rule)\n ? isRegex(rule.value)\n ? rule.value.source\n : rule.value\n : rule;\n\nvar hasValidation = (options) => options.mount &&\n (options.required ||\n options.min ||\n options.max ||\n options.maxLength ||\n options.minLength ||\n options.pattern ||\n options.validate);\n\nfunction schemaErrorLookup(errors, _fields, name) {\n const error = get(errors, name);\n if (error || isKey(name)) {\n return {\n error,\n name,\n };\n }\n const names = name.split('.');\n while (names.length) {\n const fieldName = names.join('.');\n const field = get(_fields, fieldName);\n const foundError = get(errors, fieldName);\n if (field && !Array.isArray(field) && name !== fieldName) {\n return { name };\n }\n if (foundError && foundError.type) {\n return {\n name: fieldName,\n error: foundError,\n };\n }\n names.pop();\n }\n return {\n name,\n };\n}\n\nvar skipValidation = (isBlurEvent, isTouched, isSubmitted, reValidateMode, mode) => {\n if (mode.isOnAll) {\n return false;\n }\n else if (!isSubmitted && mode.isOnTouch) {\n return !(isTouched || isBlurEvent);\n }\n else if (isSubmitted ? reValidateMode.isOnBlur : mode.isOnBlur) {\n return !isBlurEvent;\n }\n else if (isSubmitted ? reValidateMode.isOnChange : mode.isOnChange) {\n return isBlurEvent;\n }\n return true;\n};\n\nvar unsetEmptyArray = (ref, name) => !compact(get(ref, name)).length && unset(ref, name);\n\nconst defaultOptions = {\n mode: VALIDATION_MODE.onSubmit,\n reValidateMode: VALIDATION_MODE.onChange,\n shouldFocusError: true,\n};\nfunction createFormControl(props = {}) {\n let _options = {\n ...defaultOptions,\n ...props,\n };\n let _formState = {\n submitCount: 0,\n isDirty: false,\n isLoading: isFunction(_options.defaultValues),\n isValidating: false,\n isSubmitted: false,\n isSubmitting: false,\n isSubmitSuccessful: false,\n isValid: false,\n touchedFields: {},\n dirtyFields: {},\n validatingFields: {},\n errors: _options.errors || {},\n disabled: _options.disabled || false,\n };\n let _fields = {};\n let _defaultValues = isObject(_options.defaultValues) || isObject(_options.values)\n ? cloneObject(_options.defaultValues || _options.values) || {}\n : {};\n let _formValues = _options.shouldUnregister\n ? {}\n : cloneObject(_defaultValues);\n let _state = {\n action: false,\n mount: false,\n watch: false,\n };\n let _names = {\n mount: new Set(),\n unMount: new Set(),\n array: new Set(),\n watch: new Set(),\n };\n let delayErrorCallback;\n let timer = 0;\n const _proxyFormState = {\n isDirty: false,\n dirtyFields: false,\n validatingFields: false,\n touchedFields: false,\n isValidating: false,\n isValid: false,\n errors: false,\n };\n const _subjects = {\n values: createSubject(),\n array: createSubject(),\n state: createSubject(),\n };\n const validationModeBeforeSubmit = getValidationModes(_options.mode);\n const validationModeAfterSubmit = getValidationModes(_options.reValidateMode);\n const shouldDisplayAllAssociatedErrors = _options.criteriaMode === VALIDATION_MODE.all;\n const debounce = (callback) => (wait) => {\n clearTimeout(timer);\n timer = setTimeout(callback, wait);\n };\n const _updateValid = async (shouldUpdateValid) => {\n if (_proxyFormState.isValid || shouldUpdateValid) {\n const isValid = _options.resolver\n ? isEmptyObject((await _executeSchema()).errors)\n : await executeBuiltInValidation(_fields, true);\n if (isValid !== _formState.isValid) {\n _subjects.state.next({\n isValid,\n });\n }\n }\n };\n const _updateIsValidating = (names, isValidating) => {\n if (_proxyFormState.isValidating || _proxyFormState.validatingFields) {\n (names || Array.from(_names.mount)).forEach((name) => name && set(_formState.validatingFields, name, !!isValidating));\n _formState.isValidating = Object.values(_formState.validatingFields).some((val) => val);\n _subjects.state.next({\n validatingFields: _formState.validatingFields,\n isValidating: _formState.isValidating,\n });\n }\n };\n const _updateFieldArray = (name, values = [], method, args, shouldSetValues = true, shouldUpdateFieldsAndState = true) => {\n if (args && method) {\n _state.action = true;\n if (shouldUpdateFieldsAndState && Array.isArray(get(_fields, name))) {\n const fieldValues = method(get(_fields, name), args.argA, args.argB);\n shouldSetValues && set(_fields, name, fieldValues);\n }\n if (shouldUpdateFieldsAndState &&\n Array.isArray(get(_formState.errors, name))) {\n const errors = method(get(_formState.errors, name), args.argA, args.argB);\n shouldSetValues && set(_formState.errors, name, errors);\n unsetEmptyArray(_formState.errors, name);\n }\n if (_proxyFormState.touchedFields &&\n shouldUpdateFieldsAndState &&\n Array.isArray(get(_formState.touchedFields, name))) {\n const touchedFields = method(get(_formState.touchedFields, name), args.argA, args.argB);\n shouldSetValues && set(_formState.touchedFields, name, touchedFields);\n }\n if (_proxyFormState.dirtyFields) {\n _formState.dirtyFields = getDirtyFields(_defaultValues, _formValues);\n }\n _subjects.state.next({\n name,\n isDirty: _getDirty(name, values),\n dirtyFields: _formState.dirtyFields,\n errors: _formState.errors,\n isValid: _formState.isValid,\n });\n }\n else {\n set(_formValues, name, values);\n }\n };\n const updateErrors = (name, error) => {\n set(_formState.errors, name, error);\n _subjects.state.next({\n errors: _formState.errors,\n });\n };\n const _setErrors = (errors) => {\n _formState.errors = errors;\n _subjects.state.next({\n errors: _formState.errors,\n isValid: false,\n });\n };\n const updateValidAndValue = (name, shouldSkipSetValueAs, value, ref) => {\n const field = get(_fields, name);\n if (field) {\n const defaultValue = get(_formValues, name, isUndefined(value) ? get(_defaultValues, name) : value);\n isUndefined(defaultValue) ||\n (ref && ref.defaultChecked) ||\n shouldSkipSetValueAs\n ? set(_formValues, name, shouldSkipSetValueAs ? defaultValue : getFieldValue(field._f))\n : setFieldValue(name, defaultValue);\n _state.mount && _updateValid();\n }\n };\n const updateTouchAndDirty = (name, fieldValue, isBlurEvent, shouldDirty, shouldRender) => {\n let shouldUpdateField = false;\n let isPreviousDirty = false;\n const output = {\n name,\n };\n const disabledField = !!(get(_fields, name) && get(_fields, name)._f.disabled);\n if (!isBlurEvent || shouldDirty) {\n if (_proxyFormState.isDirty) {\n isPreviousDirty = _formState.isDirty;\n _formState.isDirty = output.isDirty = _getDirty();\n shouldUpdateField = isPreviousDirty !== output.isDirty;\n }\n const isCurrentFieldPristine = disabledField || deepEqual(get(_defaultValues, name), fieldValue);\n isPreviousDirty = !!(!disabledField && get(_formState.dirtyFields, name));\n isCurrentFieldPristine || disabledField\n ? unset(_formState.dirtyFields, name)\n : set(_formState.dirtyFields, name, true);\n output.dirtyFields = _formState.dirtyFields;\n shouldUpdateField =\n shouldUpdateField ||\n (_proxyFormState.dirtyFields &&\n isPreviousDirty !== !isCurrentFieldPristine);\n }\n if (isBlurEvent) {\n const isPreviousFieldTouched = get(_formState.touchedFields, name);\n if (!isPreviousFieldTouched) {\n set(_formState.touchedFields, name, isBlurEvent);\n output.touchedFields = _formState.touchedFields;\n shouldUpdateField =\n shouldUpdateField ||\n (_proxyFormState.touchedFields &&\n isPreviousFieldTouched !== isBlurEvent);\n }\n }\n shouldUpdateField && shouldRender && _subjects.state.next(output);\n return shouldUpdateField ? output : {};\n };\n const shouldRenderByError = (name, isValid, error, fieldState) => {\n const previousFieldError = get(_formState.errors, name);\n const shouldUpdateValid = _proxyFormState.isValid &&\n isBoolean(isValid) &&\n _formState.isValid !== isValid;\n if (props.delayError && error) {\n delayErrorCallback = debounce(() => updateErrors(name, error));\n delayErrorCallback(props.delayError);\n }\n else {\n clearTimeout(timer);\n delayErrorCallback = null;\n error\n ? set(_formState.errors, name, error)\n : unset(_formState.errors, name);\n }\n if ((error ? !deepEqual(previousFieldError, error) : previousFieldError) ||\n !isEmptyObject(fieldState) ||\n shouldUpdateValid) {\n const updatedFormState = {\n ...fieldState,\n ...(shouldUpdateValid && isBoolean(isValid) ? { isValid } : {}),\n errors: _formState.errors,\n name,\n };\n _formState = {\n ..._formState,\n ...updatedFormState,\n };\n _subjects.state.next(updatedFormState);\n }\n };\n const _executeSchema = async (name) => {\n _updateIsValidating(name, true);\n const result = await _options.resolver(_formValues, _options.context, getResolverOptions(name || _names.mount, _fields, _options.criteriaMode, _options.shouldUseNativeValidation));\n _updateIsValidating(name);\n return result;\n };\n const executeSchemaAndUpdateState = async (names) => {\n const { errors } = await _executeSchema(names);\n if (names) {\n for (const name of names) {\n const error = get(errors, name);\n error\n ? set(_formState.errors, name, error)\n : unset(_formState.errors, name);\n }\n }\n else {\n _formState.errors = errors;\n }\n return errors;\n };\n const executeBuiltInValidation = async (fields, shouldOnlyCheckValid, context = {\n valid: true,\n }) => {\n for (const name in fields) {\n const field = fields[name];\n if (field) {\n const { _f, ...fieldValue } = field;\n if (_f) {\n const isFieldArrayRoot = _names.array.has(_f.name);\n _updateIsValidating([name], true);\n const fieldError = await validateField(field, _formValues, shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation && !shouldOnlyCheckValid, isFieldArrayRoot);\n _updateIsValidating([name]);\n if (fieldError[_f.name]) {\n context.valid = false;\n if (shouldOnlyCheckValid) {\n break;\n }\n }\n !shouldOnlyCheckValid &&\n (get(fieldError, _f.name)\n ? isFieldArrayRoot\n ? updateFieldArrayRootError(_formState.errors, fieldError, _f.name)\n : set(_formState.errors, _f.name, fieldError[_f.name])\n : unset(_formState.errors, _f.name));\n }\n fieldValue &&\n (await executeBuiltInValidation(fieldValue, shouldOnlyCheckValid, context));\n }\n }\n return context.valid;\n };\n const _removeUnmounted = () => {\n for (const name of _names.unMount) {\n const field = get(_fields, name);\n field &&\n (field._f.refs\n ? field._f.refs.every((ref) => !live(ref))\n : !live(field._f.ref)) &&\n unregister(name);\n }\n _names.unMount = new Set();\n };\n const _getDirty = (name, data) => (name && data && set(_formValues, name, data),\n !deepEqual(getValues(), _defaultValues));\n const _getWatch = (names, defaultValue, isGlobal) => generateWatchOutput(names, _names, {\n ...(_state.mount\n ? _formValues\n : isUndefined(defaultValue)\n ? _defaultValues\n : isString(names)\n ? { [names]: defaultValue }\n : defaultValue),\n }, isGlobal, defaultValue);\n const _getFieldArray = (name) => compact(get(_state.mount ? _formValues : _defaultValues, name, props.shouldUnregister ? get(_defaultValues, name, []) : []));\n const setFieldValue = (name, value, options = {}) => {\n const field = get(_fields, name);\n let fieldValue = value;\n if (field) {\n const fieldReference = field._f;\n if (fieldReference) {\n !fieldReference.disabled &&\n set(_formValues, name, getFieldValueAs(value, fieldReference));\n fieldValue =\n isHTMLElement(fieldReference.ref) && isNullOrUndefined(value)\n ? ''\n : value;\n if (isMultipleSelect(fieldReference.ref)) {\n [...fieldReference.ref.options].forEach((optionRef) => (optionRef.selected = fieldValue.includes(optionRef.value)));\n }\n else if (fieldReference.refs) {\n if (isCheckBoxInput(fieldReference.ref)) {\n fieldReference.refs.length > 1\n ? fieldReference.refs.forEach((checkboxRef) => (!checkboxRef.defaultChecked || !checkboxRef.disabled) &&\n (checkboxRef.checked = Array.isArray(fieldValue)\n ? !!fieldValue.find((data) => data === checkboxRef.value)\n : fieldValue === checkboxRef.value))\n : fieldReference.refs[0] &&\n (fieldReference.refs[0].checked = !!fieldValue);\n }\n else {\n fieldReference.refs.forEach((radioRef) => (radioRef.checked = radioRef.value === fieldValue));\n }\n }\n else if (isFileInput(fieldReference.ref)) {\n fieldReference.ref.value = '';\n }\n else {\n fieldReference.ref.value = fieldValue;\n if (!fieldReference.ref.type) {\n _subjects.values.next({\n name,\n values: { ..._formValues },\n });\n }\n }\n }\n }\n (options.shouldDirty || options.shouldTouch) &&\n updateTouchAndDirty(name, fieldValue, options.shouldTouch, options.shouldDirty, true);\n options.shouldValidate && trigger(name);\n };\n const setValues = (name, value, options) => {\n for (const fieldKey in value) {\n const fieldValue = value[fieldKey];\n const fieldName = `${name}.${fieldKey}`;\n const field = get(_fields, fieldName);\n (_names.array.has(name) ||\n !isPrimitive(fieldValue) ||\n (field && !field._f)) &&\n !isDateObject(fieldValue)\n ? setValues(fieldName, fieldValue, options)\n : setFieldValue(fieldName, fieldValue, options);\n }\n };\n const setValue = (name, value, options = {}) => {\n const field = get(_fields, name);\n const isFieldArray = _names.array.has(name);\n const cloneValue = cloneObject(value);\n set(_formValues, name, cloneValue);\n if (isFieldArray) {\n _subjects.array.next({\n name,\n values: { ..._formValues },\n });\n if ((_proxyFormState.isDirty || _proxyFormState.dirtyFields) &&\n options.shouldDirty) {\n _subjects.state.next({\n name,\n dirtyFields: getDirtyFields(_defaultValues, _formValues),\n isDirty: _getDirty(name, cloneValue),\n });\n }\n }\n else {\n field && !field._f && !isNullOrUndefined(cloneValue)\n ? setValues(name, cloneValue, options)\n : setFieldValue(name, cloneValue, options);\n }\n isWatched(name, _names) && _subjects.state.next({ ..._formState });\n _subjects.values.next({\n name: _state.mount ? name : undefined,\n values: { ..._formValues },\n });\n };\n const onChange = async (event) => {\n const target = event.target;\n let name = target.name;\n let isFieldValueUpdated = true;\n const field = get(_fields, name);\n const getCurrentFieldValue = () => target.type ? getFieldValue(field._f) : getEventValue(event);\n const _updateIsFieldValueUpdated = (fieldValue) => {\n isFieldValueUpdated =\n Number.isNaN(fieldValue) ||\n fieldValue === get(_formValues, name, fieldValue);\n };\n if (field) {\n let error;\n let isValid;\n const fieldValue = getCurrentFieldValue();\n const isBlurEvent = event.type === EVENTS.BLUR || event.type === EVENTS.FOCUS_OUT;\n const shouldSkipValidation = (!hasValidation(field._f) &&\n !_options.resolver &&\n !get(_formState.errors, name) &&\n !field._f.deps) ||\n skipValidation(isBlurEvent, get(_formState.touchedFields, name), _formState.isSubmitted, validationModeAfterSubmit, validationModeBeforeSubmit);\n const watched = isWatched(name, _names, isBlurEvent);\n set(_formValues, name, fieldValue);\n if (isBlurEvent) {\n field._f.onBlur && field._f.onBlur(event);\n delayErrorCallback && delayErrorCallback(0);\n }\n else if (field._f.onChange) {\n field._f.onChange(event);\n }\n const fieldState = updateTouchAndDirty(name, fieldValue, isBlurEvent, false);\n const shouldRender = !isEmptyObject(fieldState) || watched;\n !isBlurEvent &&\n _subjects.values.next({\n name,\n type: event.type,\n values: { ..._formValues },\n });\n if (shouldSkipValidation) {\n _proxyFormState.isValid && _updateValid();\n return (shouldRender &&\n _subjects.state.next({ name, ...(watched ? {} : fieldState) }));\n }\n !isBlurEvent && watched && _subjects.state.next({ ..._formState });\n if (_options.resolver) {\n const { errors } = await _executeSchema([name]);\n _updateIsFieldValueUpdated(fieldValue);\n if (isFieldValueUpdated) {\n const previousErrorLookupResult = schemaErrorLookup(_formState.errors, _fields, name);\n const errorLookupResult = schemaErrorLookup(errors, _fields, previousErrorLookupResult.name || name);\n error = errorLookupResult.error;\n name = errorLookupResult.name;\n isValid = isEmptyObject(errors);\n }\n }\n else {\n _updateIsValidating([name], true);\n error = (await validateField(field, _formValues, shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation))[name];\n _updateIsValidating([name]);\n _updateIsFieldValueUpdated(fieldValue);\n if (isFieldValueUpdated) {\n if (error) {\n isValid = false;\n }\n else if (_proxyFormState.isValid) {\n isValid = await executeBuiltInValidation(_fields, true);\n }\n }\n }\n if (isFieldValueUpdated) {\n field._f.deps &&\n trigger(field._f.deps);\n shouldRenderByError(name, isValid, error, fieldState);\n }\n }\n };\n const _focusInput = (ref, key) => {\n if (get(_formState.errors, key) && ref.focus) {\n ref.focus();\n return 1;\n }\n return;\n };\n const trigger = async (name, options = {}) => {\n let isValid;\n let validationResult;\n const fieldNames = convertToArrayPayload(name);\n if (_options.resolver) {\n const errors = await executeSchemaAndUpdateState(isUndefined(name) ? name : fieldNames);\n isValid = isEmptyObject(errors);\n validationResult = name\n ? !fieldNames.some((name) => get(errors, name))\n : isValid;\n }\n else if (name) {\n validationResult = (await Promise.all(fieldNames.map(async (fieldName) => {\n const field = get(_fields, fieldName);\n return await executeBuiltInValidation(field && field._f ? { [fieldName]: field } : field);\n }))).every(Boolean);\n !(!validationResult && !_formState.isValid) && _updateValid();\n }\n else {\n validationResult = isValid = await executeBuiltInValidation(_fields);\n }\n _subjects.state.next({\n ...(!isString(name) ||\n (_proxyFormState.isValid && isValid !== _formState.isValid)\n ? {}\n : { name }),\n ...(_options.resolver || !name ? { isValid } : {}),\n errors: _formState.errors,\n });\n options.shouldFocus &&\n !validationResult &&\n iterateFieldsByAction(_fields, _focusInput, name ? fieldNames : _names.mount);\n return validationResult;\n };\n const getValues = (fieldNames) => {\n const values = {\n ..._defaultValues,\n ...(_state.mount ? _formValues : {}),\n };\n return isUndefined(fieldNames)\n ? values\n : isString(fieldNames)\n ? get(values, fieldNames)\n : fieldNames.map((name) => get(values, name));\n };\n const getFieldState = (name, formState) => ({\n invalid: !!get((formState || _formState).errors, name),\n isDirty: !!get((formState || _formState).dirtyFields, name),\n isTouched: !!get((formState || _formState).touchedFields, name),\n isValidating: !!get((formState || _formState).validatingFields, name),\n error: get((formState || _formState).errors, name),\n });\n const clearErrors = (name) => {\n name &&\n convertToArrayPayload(name).forEach((inputName) => unset(_formState.errors, inputName));\n _subjects.state.next({\n errors: name ? _formState.errors : {},\n });\n };\n const setError = (name, error, options) => {\n const ref = (get(_fields, name, { _f: {} })._f || {}).ref;\n set(_formState.errors, name, {\n ...error,\n ref,\n });\n _subjects.state.next({\n name,\n errors: _formState.errors,\n isValid: false,\n });\n options && options.shouldFocus && ref && ref.focus && ref.focus();\n };\n const watch = (name, defaultValue) => isFunction(name)\n ? _subjects.values.subscribe({\n next: (payload) => name(_getWatch(undefined, defaultValue), payload),\n })\n : _getWatch(name, defaultValue, true);\n const unregister = (name, options = {}) => {\n for (const fieldName of name ? convertToArrayPayload(name) : _names.mount) {\n _names.mount.delete(fieldName);\n _names.array.delete(fieldName);\n if (!options.keepValue) {\n unset(_fields, fieldName);\n unset(_formValues, fieldName);\n }\n !options.keepError && unset(_formState.errors, fieldName);\n !options.keepDirty && unset(_formState.dirtyFields, fieldName);\n !options.keepTouched && unset(_formState.touchedFields, fieldName);\n !options.keepIsValidating &&\n unset(_formState.validatingFields, fieldName);\n !_options.shouldUnregister &&\n !options.keepDefaultValue &&\n unset(_defaultValues, fieldName);\n }\n _subjects.values.next({\n values: { ..._formValues },\n });\n _subjects.state.next({\n ..._formState,\n ...(!options.keepDirty ? {} : { isDirty: _getDirty() }),\n });\n !options.keepIsValid && _updateValid();\n };\n const _updateDisabledField = ({ disabled, name, field, fields, value, }) => {\n if (isBoolean(disabled)) {\n const inputValue = disabled\n ? undefined\n : isUndefined(value)\n ? getFieldValue(field ? field._f : get(fields, name)._f)\n : value;\n set(_formValues, name, inputValue);\n updateTouchAndDirty(name, inputValue, false, false, true);\n }\n };\n const register = (name, options = {}) => {\n let field = get(_fields, name);\n const disabledIsDefined = isBoolean(options.disabled);\n set(_fields, name, {\n ...(field || {}),\n _f: {\n ...(field && field._f ? field._f : { ref: { name } }),\n name,\n mount: true,\n ...options,\n },\n });\n _names.mount.add(name);\n if (field) {\n _updateDisabledField({\n field,\n disabled: options.disabled,\n name,\n value: options.value,\n });\n }\n else {\n updateValidAndValue(name, true, options.value);\n }\n return {\n ...(disabledIsDefined ? { disabled: options.disabled } : {}),\n ...(_options.progressive\n ? {\n required: !!options.required,\n min: getRuleValue(options.min),\n max: getRuleValue(options.max),\n minLength: getRuleValue(options.minLength),\n maxLength: getRuleValue(options.maxLength),\n pattern: getRuleValue(options.pattern),\n }\n : {}),\n name,\n onChange,\n onBlur: onChange,\n ref: (ref) => {\n if (ref) {\n register(name, options);\n field = get(_fields, name);\n const fieldRef = isUndefined(ref.value)\n ? ref.querySelectorAll\n ? ref.querySelectorAll('input,select,textarea')[0] || ref\n : ref\n : ref;\n const radioOrCheckbox = isRadioOrCheckbox(fieldRef);\n const refs = field._f.refs || [];\n if (radioOrCheckbox\n ? refs.find((option) => option === fieldRef)\n : fieldRef === field._f.ref) {\n return;\n }\n set(_fields, name, {\n _f: {\n ...field._f,\n ...(radioOrCheckbox\n ? {\n refs: [\n ...refs.filter(live),\n fieldRef,\n ...(Array.isArray(get(_defaultValues, name)) ? [{}] : []),\n ],\n ref: { type: fieldRef.type, name },\n }\n : { ref: fieldRef }),\n },\n });\n updateValidAndValue(name, false, undefined, fieldRef);\n }\n else {\n field = get(_fields, name, {});\n if (field._f) {\n field._f.mount = false;\n }\n (_options.shouldUnregister || options.shouldUnregister) &&\n !(isNameInFieldArray(_names.array, name) && _state.action) &&\n _names.unMount.add(name);\n }\n },\n };\n };\n const _focusError = () => _options.shouldFocusError &&\n iterateFieldsByAction(_fields, _focusInput, _names.mount);\n const _disableForm = (disabled) => {\n if (isBoolean(disabled)) {\n _subjects.state.next({ disabled });\n iterateFieldsByAction(_fields, (ref, name) => {\n let requiredDisabledState = disabled;\n const currentField = get(_fields, name);\n if (currentField && isBoolean(currentField._f.disabled)) {\n requiredDisabledState || (requiredDisabledState = currentField._f.disabled);\n }\n ref.disabled = requiredDisabledState;\n }, 0, false);\n }\n };\n const handleSubmit = (onValid, onInvalid) => async (e) => {\n let onValidError = undefined;\n if (e) {\n e.preventDefault && e.preventDefault();\n e.persist && e.persist();\n }\n let fieldValues = cloneObject(_formValues);\n _subjects.state.next({\n isSubmitting: true,\n });\n if (_options.resolver) {\n const { errors, values } = await _executeSchema();\n _formState.errors = errors;\n fieldValues = values;\n }\n else {\n await executeBuiltInValidation(_fields);\n }\n unset(_formState.errors, 'root');\n if (isEmptyObject(_formState.errors)) {\n _subjects.state.next({\n errors: {},\n });\n try {\n await onValid(fieldValues, e);\n }\n catch (error) {\n onValidError = error;\n }\n }\n else {\n if (onInvalid) {\n await onInvalid({ ..._formState.errors }, e);\n }\n _focusError();\n setTimeout(_focusError);\n }\n _subjects.state.next({\n isSubmitted: true,\n isSubmitting: false,\n isSubmitSuccessful: isEmptyObject(_formState.errors) && !onValidError,\n submitCount: _formState.submitCount + 1,\n errors: _formState.errors,\n });\n if (onValidError) {\n throw onValidError;\n }\n };\n const resetField = (name, options = {}) => {\n if (get(_fields, name)) {\n if (isUndefined(options.defaultValue)) {\n setValue(name, cloneObject(get(_defaultValues, name)));\n }\n else {\n setValue(name, options.defaultValue);\n set(_defaultValues, name, cloneObject(options.defaultValue));\n }\n if (!options.keepTouched) {\n unset(_formState.touchedFields, name);\n }\n if (!options.keepDirty) {\n unset(_formState.dirtyFields, name);\n _formState.isDirty = options.defaultValue\n ? _getDirty(name, cloneObject(get(_defaultValues, name)))\n : _getDirty();\n }\n if (!options.keepError) {\n unset(_formState.errors, name);\n _proxyFormState.isValid && _updateValid();\n }\n _subjects.state.next({ ..._formState });\n }\n };\n const _reset = (formValues, keepStateOptions = {}) => {\n const updatedValues = formValues ? cloneObject(formValues) : _defaultValues;\n const cloneUpdatedValues = cloneObject(updatedValues);\n const isEmptyResetValues = isEmptyObject(formValues);\n const values = isEmptyResetValues ? _defaultValues : cloneUpdatedValues;\n if (!keepStateOptions.keepDefaultValues) {\n _defaultValues = updatedValues;\n }\n if (!keepStateOptions.keepValues) {\n if (keepStateOptions.keepDirtyValues) {\n for (const fieldName of _names.mount) {\n get(_formState.dirtyFields, fieldName)\n ? set(values, fieldName, get(_formValues, fieldName))\n : setValue(fieldName, get(values, fieldName));\n }\n }\n else {\n if (isWeb && isUndefined(formValues)) {\n for (const name of _names.mount) {\n const field = get(_fields, name);\n if (field && field._f) {\n const fieldReference = Array.isArray(field._f.refs)\n ? field._f.refs[0]\n : field._f.ref;\n if (isHTMLElement(fieldReference)) {\n const form = fieldReference.closest('form');\n if (form) {\n form.reset();\n break;\n }\n }\n }\n }\n }\n _fields = {};\n }\n _formValues = props.shouldUnregister\n ? keepStateOptions.keepDefaultValues\n ? cloneObject(_defaultValues)\n : {}\n : cloneObject(values);\n _subjects.array.next({\n values: { ...values },\n });\n _subjects.values.next({\n values: { ...values },\n });\n }\n _names = {\n mount: keepStateOptions.keepDirtyValues ? _names.mount : new Set(),\n unMount: new Set(),\n array: new Set(),\n watch: new Set(),\n watchAll: false,\n focus: '',\n };\n _state.mount =\n !_proxyFormState.isValid ||\n !!keepStateOptions.keepIsValid ||\n !!keepStateOptions.keepDirtyValues;\n _state.watch = !!props.shouldUnregister;\n _subjects.state.next({\n submitCount: keepStateOptions.keepSubmitCount\n ? _formState.submitCount\n : 0,\n isDirty: isEmptyResetValues\n ? false\n : keepStateOptions.keepDirty\n ? _formState.isDirty\n : !!(keepStateOptions.keepDefaultValues &&\n !deepEqual(formValues, _defaultValues)),\n isSubmitted: keepStateOptions.keepIsSubmitted\n ? _formState.isSubmitted\n : false,\n dirtyFields: isEmptyResetValues\n ? []\n : keepStateOptions.keepDirtyValues\n ? keepStateOptions.keepDefaultValues && _formValues\n ? getDirtyFields(_defaultValues, _formValues)\n : _formState.dirtyFields\n : keepStateOptions.keepDefaultValues && formValues\n ? getDirtyFields(_defaultValues, formValues)\n : {},\n touchedFields: keepStateOptions.keepTouched\n ? _formState.touchedFields\n : {},\n errors: keepStateOptions.keepErrors ? _formState.errors : {},\n isSubmitSuccessful: keepStateOptions.keepIsSubmitSuccessful\n ? _formState.isSubmitSuccessful\n : false,\n isSubmitting: false,\n });\n };\n const reset = (formValues, keepStateOptions) => _reset(isFunction(formValues)\n ? formValues(_formValues)\n : formValues, keepStateOptions);\n const setFocus = (name, options = {}) => {\n const field = get(_fields, name);\n const fieldReference = field && field._f;\n if (fieldReference) {\n const fieldRef = fieldReference.refs\n ? fieldReference.refs[0]\n : fieldReference.ref;\n if (fieldRef.focus) {\n fieldRef.focus();\n options.shouldSelect && fieldRef.select();\n }\n }\n };\n const _updateFormState = (updatedFormState) => {\n _formState = {\n ..._formState,\n ...updatedFormState,\n };\n };\n const _resetDefaultValues = () => isFunction(_options.defaultValues) &&\n _options.defaultValues().then((values) => {\n reset(values, _options.resetOptions);\n _subjects.state.next({\n isLoading: false,\n });\n });\n return {\n control: {\n register,\n unregister,\n getFieldState,\n handleSubmit,\n setError,\n _executeSchema,\n _getWatch,\n _getDirty,\n _updateValid,\n _removeUnmounted,\n _updateFieldArray,\n _updateDisabledField,\n _getFieldArray,\n _reset,\n _resetDefaultValues,\n _updateFormState,\n _disableForm,\n _subjects,\n _proxyFormState,\n _setErrors,\n get _fields() {\n return _fields;\n },\n get _formValues() {\n return _formValues;\n },\n get _state() {\n return _state;\n },\n set _state(value) {\n _state = value;\n },\n get _defaultValues() {\n return _defaultValues;\n },\n get _names() {\n return _names;\n },\n set _names(value) {\n _names = value;\n },\n get _formState() {\n return _formState;\n },\n set _formState(value) {\n _formState = value;\n },\n get _options() {\n return _options;\n },\n set _options(value) {\n _options = {\n ..._options,\n ...value,\n };\n },\n },\n trigger,\n register,\n handleSubmit,\n watch,\n setValue,\n getValues,\n reset,\n resetField,\n clearErrors,\n unregister,\n setError,\n setFocus,\n getFieldState,\n };\n}\n\n/**\n * Custom hook to manage the entire form.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useform) • [Demo](https://codesandbox.io/s/react-hook-form-get-started-ts-5ksmm) • [Video](https://www.youtube.com/watch?v=RkXv4AXXC_4)\n *\n * @param props - form configuration and validation parameters.\n *\n * @returns methods - individual functions to manage the form state. {@link UseFormReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, handleSubmit, watch, formState: { errors } } = useForm();\n * const onSubmit = data => console.log(data);\n *\n * console.log(watch(\"example\"));\n *\n * return (\n *
\n * \n * \n * {errors.exampleRequired && This field is required}\n * \n *
\n * );\n * }\n * ```\n */\nfunction useForm(props = {}) {\n const _formControl = React.useRef();\n const _values = React.useRef();\n const [formState, updateFormState] = React.useState({\n isDirty: false,\n isValidating: false,\n isLoading: isFunction(props.defaultValues),\n isSubmitted: false,\n isSubmitting: false,\n isSubmitSuccessful: false,\n isValid: false,\n submitCount: 0,\n dirtyFields: {},\n touchedFields: {},\n validatingFields: {},\n errors: props.errors || {},\n disabled: props.disabled || false,\n defaultValues: isFunction(props.defaultValues)\n ? undefined\n : props.defaultValues,\n });\n if (!_formControl.current) {\n _formControl.current = {\n ...createFormControl(props),\n formState,\n };\n }\n const control = _formControl.current.control;\n control._options = props;\n useSubscribe({\n subject: control._subjects.state,\n next: (value) => {\n if (shouldRenderFormState(value, control._proxyFormState, control._updateFormState, true)) {\n updateFormState({ ...control._formState });\n }\n },\n });\n React.useEffect(() => control._disableForm(props.disabled), [control, props.disabled]);\n React.useEffect(() => {\n if (control._proxyFormState.isDirty) {\n const isDirty = control._getDirty();\n if (isDirty !== formState.isDirty) {\n control._subjects.state.next({\n isDirty,\n });\n }\n }\n }, [control, formState.isDirty]);\n React.useEffect(() => {\n if (props.values && !deepEqual(props.values, _values.current)) {\n control._reset(props.values, control._options.resetOptions);\n _values.current = props.values;\n updateFormState((state) => ({ ...state }));\n }\n else {\n control._resetDefaultValues();\n }\n }, [props.values, control]);\n React.useEffect(() => {\n if (props.errors) {\n control._setErrors(props.errors);\n }\n }, [props.errors, control]);\n React.useEffect(() => {\n if (!control._state.mount) {\n control._updateValid();\n control._state.mount = true;\n }\n if (control._state.watch) {\n control._state.watch = false;\n control._subjects.state.next({ ...control._formState });\n }\n control._removeUnmounted();\n });\n React.useEffect(() => {\n props.shouldUnregister &&\n control._subjects.values.next({\n values: control._getWatch(),\n });\n }, [props.shouldUnregister, control]);\n _formControl.current.formState = getProxyFormState(formState, control);\n return _formControl.current;\n}\n\nexport { Controller, Form, FormProvider, appendErrors, get, set, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch };\n//# sourceMappingURL=index.esm.mjs.map\n","import { View } from 'react-native';\nimport { Button } from '@ui-kitten/components';\n\n/*\nimport { Button } from 'react-native-paper';\n\n*/\n\nexport function CustomButton(props) {\n if (!props) {\n props = {};\n } else {\n props = Object.assign({}, props);\n }\n if (props.disabled) {\n props.appearance = \"ghost\";\n }\n return (\n \n \n \n );\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./theme\"), exports);\n__exportStar(require(\"./ui\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.useTheme = exports.withStyles = exports.ThemeProvider = exports.State = exports.Interaction = exports.useStyleSheet = exports.StyleService = exports.styled = exports.ModalService = exports.ApplicationProvider = void 0;\nvar applicationProvider_component_1 = require(\"./application/applicationProvider.component\");\nObject.defineProperty(exports, \"ApplicationProvider\", { enumerable: true, get: function () { return applicationProvider_component_1.ApplicationProvider; } });\nvar modal_service_1 = require(\"./modal/modal.service\");\nObject.defineProperty(exports, \"ModalService\", { enumerable: true, get: function () { return modal_service_1.ModalService; } });\nvar styled_1 = require(\"./style/styled\");\nObject.defineProperty(exports, \"styled\", { enumerable: true, get: function () { return styled_1.styled; } });\nvar style_service_1 = require(\"./style/style.service\");\nObject.defineProperty(exports, \"StyleService\", { enumerable: true, get: function () { return style_service_1.StyleService; } });\nObject.defineProperty(exports, \"useStyleSheet\", { enumerable: true, get: function () { return style_service_1.useStyleSheet; } });\nvar style_service_2 = require(\"./style/style.service\");\nObject.defineProperty(exports, \"Interaction\", { enumerable: true, get: function () { return style_service_2.Interaction; } });\nObject.defineProperty(exports, \"State\", { enumerable: true, get: function () { return style_service_2.State; } });\nvar themeProvider_component_1 = require(\"./theme/themeProvider.component\");\nObject.defineProperty(exports, \"ThemeProvider\", { enumerable: true, get: function () { return themeProvider_component_1.ThemeProvider; } });\nvar withStyles_1 = require(\"./theme/withStyles\");\nObject.defineProperty(exports, \"withStyles\", { enumerable: true, get: function () { return withStyles_1.withStyles; } });\nvar theme_service_1 = require(\"./theme/theme.service\");\nObject.defineProperty(exports, \"useTheme\", { enumerable: true, get: function () { return theme_service_1.useTheme; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ApplicationProvider = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst lodash_merge_1 = __importDefault(require(\"lodash.merge\"));\nconst processor_1 = require(\"@eva-design/processor\");\nconst styleProvider_component_1 = require(\"../style/styleProvider.component\");\n/**\n * Overall application container.\n *\n * @extends React.Component\n *\n * @property {ReactNode} children - Overall application component.\n * Usually, a router or nested providers.\n *\n * @property {SchemaType} mapping - Mapping for UI Kitten components.\n * This is designed to be provided from any `@eva-design/*` package.\n * If provided, will be merged with *customMapping* and compiled into styles during the runtime.\n * Can be improved with build-time processing with `@ui-kitten/metro-config` package.\n *\n * @property {CustomSchemaType} customMapping - Customized mapping.\n *\n * @property {ThemeType} theme - Current theme.\n * Designed to be provided from any `@eva-design/*` package.\n *\n * @property {ThemeStyleType} styles - Styles compiled by bootstrapping Eva packages.\n * If provided, will replace runtime styles processing.\n * Usually, can be provided by `@ui-kitten/metro-config` package.\n *\n * @overview-example Simple Usage\n * ApplicationProvider is designed to be the root component of the application.\n * It should be rendered **once**, to provide Eva styles for nested components.\n * ```\n * import React from 'react';\n * import { ApplicationProvider, Layout, Text } from '@ui-kitten/components';\n * import * as eva from '@eva-design/eva';\n *\n * export default () => (\n * // <-- {eva.dark} for dark mode\n * \n * Welcome to UI Kitten\n * \n * \n * );\n * ```\n *\n * @overview-example Ecosystem\n * Also, it may accept [custom themes](guides/branding) and [icon packages](guides/icon-packages)\n * to provide a highly customizable, design system based application.\n * ```\n * import React from 'react';\n * import { ApplicationProvider, IconRegistry, Layout, Text } from '@ui-kitten/components';\n * import { EvaIconsPack } from '@ui-kitten/eva-icons';\n * import * as eva from '@eva-design/eva';\n *\n * export default () => (\n * \n * \n * \n * \n * Welcome to UI Kitten\n * \n * \n * \n * );\n * ```\n */\nclass ApplicationProvider extends react_1.default.Component {\n state = {\n styles: this.props.styles,\n };\n schemaProcessor = new processor_1.SchemaProcessor();\n constructor(props) {\n super(props);\n if (!this.state.styles) {\n const { mapping, customMapping } = this.props;\n this.state.styles = this.createStyles(mapping, customMapping);\n }\n }\n createStyles = (mapping, custom) => {\n const customizedMapping = (0, lodash_merge_1.default)({}, mapping, custom);\n return this.schemaProcessor.process(customizedMapping);\n };\n render() {\n return (\n {this.props.children}\n );\n }\n}\nexports.ApplicationProvider = ApplicationProvider;\n//# sourceMappingURL=applicationProvider.component.js.map","/**\n * Lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright OpenJS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeMax = Math.max,\n nativeNow = Date.now;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\n/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\n/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\n/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\n/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = merge;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar processor_1 = require(\"./js/src/processor\");\nexports.SchemaProcessor = processor_1.SchemaProcessor;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar mappingProcessor_1 = require(\"./mapping/mappingProcessor\");\nexports.MappingProcessor = mappingProcessor_1.MappingProcessor;\nvar metaProcessor_1 = require(\"./meta/metaProcessor\");\nexports.MetaProcessor = metaProcessor_1.MetaProcessor;\nvar schemaProcessor_1 = require(\"./schema/schemaProcessor\");\nexports.SchemaProcessor = schemaProcessor_1.SchemaProcessor;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst service_1 = require(\"../../service\");\nclass MappingProcessor {\n process(params) {\n return Object.keys(params).reduce((acc, component) => {\n return [\n ...acc,\n ...this.getComponentMappingMeta(params, component),\n ];\n }, []);\n }\n getComponentMappingMeta(mapping, component) {\n const componentMapping = mapping[component];\n // variants and states possible configurations are the same across all appearances, so we can evaluate them once\n const variants = this.getComponentVariants(mapping, component);\n const states = this.getComponentStates(mapping, component);\n return Object.keys(componentMapping.appearances).map((appearance) => {\n return {\n name: component,\n appearance,\n variants,\n states,\n };\n });\n }\n getComponentVariants(mapping, component) {\n const needsAllCases = service_1.needsAllVariantCases(mapping, component);\n const variants = service_1.getComponentVariants(mapping, component);\n return this.concatComponentVariants(variants, [], needsAllCases);\n }\n getComponentStates(mapping, component) {\n const states = service_1.getComponentStates(mapping, component);\n return this.concatComponentStates([...states]);\n }\n concatComponentVariants(variants, result, needsAllCases) {\n if (variants.length === 0) {\n return result;\n }\n if (needsAllCases) {\n // this is the case when there is no default path for variant groups,\n // e.i. not all variant groups values has default values\n // all possible combinations will be evaluated\n const concat = variants.reduce((acc, current) => {\n return [...acc, ...this.concatVariantGroups(acc, current)];\n }, variants.shift());\n return this.concatComponentVariants(variants, [...result, ...concat], needsAllCases);\n }\n // by default, we will evaluate only required variant groups combinations\n return variants.reduce((acc, current) => {\n if (acc.length === 0) {\n return current;\n }\n return acc.reduce((res, c) => {\n return [...res, ...current.map(x => c.concat(service_1.SEPARATOR_MAPPING_ENTRY, x))];\n }, []);\n }, []);\n }\n concatVariantGroups(lhs, rhs) {\n return lhs.reduce((acc, lhsValue) => {\n const concat = rhs.map(rhsValue => {\n return lhsValue.concat(service_1.SEPARATOR_MAPPING_ENTRY, rhsValue);\n });\n return [...acc, ...concat];\n }, []);\n }\n concatComponentStates(states, result = []) {\n if (states.length === 0) {\n return result;\n }\n const concat = states.reduce((acc, current) => {\n const next = acc.map(value => value.concat(service_1.SEPARATOR_MAPPING_ENTRY, current));\n return [...acc, ...next];\n }, [states.shift()]);\n return this.concatComponentStates(states, [...result, ...concat]);\n }\n}\nexports.MappingProcessor = MappingProcessor;\n//# sourceMappingURL=mappingProcessor.js.map","\"use strict\";\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./common\"));\n__export(require(\"./mapping\"));\n__export(require(\"./style\"));\n//# sourceMappingURL=index.js.map","\"use strict\";\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./common.service\"));\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Safely retrieves R value of T object with reducer\n *\n * @param value (T | undefined) - unsafe object which should be processed\n * @param reducer ((T) => R) - `value` processing lambda. Called if `value` is not `undefined`\n *\n * @return (R | undefined) - object returned by `reducer` if `value` is not `undefined`, `undefined` otherwise\n **/\nfunction safe(value, reducer) {\n if (value) {\n return reducer(value);\n }\n return undefined;\n}\nexports.safe = safe;\n/**\n * Maps 2-dim array to 1-dim\n *\n * @param params (T[][]) - 2-dim array\n *\n * @return 1-dim array\n */\nfunction flatten(params) {\n return [].concat(...params);\n}\nexports.flatten = flatten;\n/**\n * Removes all duplicates from array\n *\n * @param params (T[]) - array with possible duplicate values\n *\n * @return (T[]) - processed array\n */\nfunction noDuplicates(params) {\n return [...new Set(params)];\n}\nexports.noDuplicates = noDuplicates;\n/**\n * Removes null and undefined values from array\n *\n * @param params (T[]) - array with possible null values\n *\n * @return (T[]) - processed array\n */\nfunction noNulls(params) {\n return params.filter(Boolean);\n}\nexports.noNulls = noNulls;\n/**\n * Returns Object with string keys from array type [string, IndexSignatureBase]\n *\n * @param array like [string, IndexSignatureBase]\n *\n * @return object with string keys and IndexSignatureBase values\n */\nfunction toObject(array) {\n return array.reduce((p, c) => {\n if (p && p.hasOwnProperty(c[0])) {\n p[c[0]] = Object.assign(Object.assign({}, p[c[0]]), c[1]);\n }\n else {\n p[c[0]] = c[1];\n }\n return p;\n }, {});\n}\nexports.toObject = toObject;\n/**\n * Check value for null or undefined\n *\n *\n * @return boolean\n * @param value\n */\nfunction isNil(value) {\n return value === undefined || value === null;\n}\nexports.isNil = isNil;\n//# sourceMappingURL=common.service.js.map","\"use strict\";\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./mapping.service\"));\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst common_1 = require(\"../common\");\nfunction getComponentDefaultAppearance(mapping, component) {\n const componentMapping = getComponentMapping(mapping, component);\n return common_1.safe(componentMapping, (value) => {\n const { appearances } = value.meta;\n return Object.keys(appearances).find((appearance) => {\n return appearances[appearance].default === true;\n });\n });\n}\nexports.getComponentDefaultAppearance = getComponentDefaultAppearance;\nfunction getComponentDefaultVariants(mapping, component) {\n const componentMapping = getComponentMapping(mapping, component);\n return common_1.safe(componentMapping, (value) => {\n const { variantGroups } = value.meta;\n return Object.keys(variantGroups).map((group) => {\n return Object.keys(variantGroups[group]).find((variant) => {\n return variantGroups[group][variant].default === true;\n });\n });\n });\n}\nexports.getComponentDefaultVariants = getComponentDefaultVariants;\nfunction getComponentDefaultState(mapping, component) {\n const componentMapping = getComponentMapping(mapping, component);\n return common_1.safe(componentMapping, (value) => {\n const { states } = value.meta;\n return Object.keys(states).find((state) => {\n return states[state].default === true;\n });\n });\n}\nexports.getComponentDefaultState = getComponentDefaultState;\nfunction getComponentVariantGroups(mapping, component) {\n const componentMapping = getComponentMapping(mapping, component);\n return common_1.safe(componentMapping, (value) => {\n const { variantGroups } = value.meta;\n return Object.keys(variantGroups);\n });\n}\nexports.getComponentVariantGroups = getComponentVariantGroups;\nfunction getComponentVariants(mapping, component) {\n const componentMapping = getComponentMapping(mapping, component);\n return common_1.safe(componentMapping, (value) => {\n const { variantGroups } = value.meta;\n return Object.keys(variantGroups).map((group) => {\n return Object.keys(variantGroups[group]);\n });\n });\n}\nexports.getComponentVariants = getComponentVariants;\nfunction getComponentStates(mapping, component) {\n const componentMapping = getComponentMapping(mapping, component);\n return common_1.safe(componentMapping, (value) => {\n const { states } = value.meta;\n return Object.keys(states);\n });\n}\nexports.getComponentStates = getComponentStates;\nfunction getStateAppearanceMapping(mapping, component, appearance, state) {\n const appearanceMapping = getAppearanceMapping(mapping, component, appearance);\n return common_1.safe(appearanceMapping, (value) => {\n return getStateMapping(value, state);\n });\n}\nexports.getStateAppearanceMapping = getStateAppearanceMapping;\nfunction getStatelessAppearanceMapping(mapping, component, appearance) {\n const appearanceMapping = getAppearanceMapping(mapping, component, appearance);\n return common_1.safe(appearanceMapping, (value) => {\n const { state } = value, params = __rest(value, [\"state\"]);\n return params;\n });\n}\nexports.getStatelessAppearanceMapping = getStatelessAppearanceMapping;\nfunction getStateVariantMapping(mapping, component, appearance, variant, state) {\n const variantMapping = getVariantMapping(mapping, component, appearance, variant);\n return common_1.safe(variantMapping, (value) => {\n return getStateMapping(value, state);\n });\n}\nexports.getStateVariantMapping = getStateVariantMapping;\nfunction getStatelessVariantMapping(mapping, component, appearance, variant) {\n const variantMapping = getVariantMapping(mapping, component, appearance, variant);\n return common_1.safe(variantMapping, (value) => {\n const { state } = value, params = __rest(value, [\"state\"]);\n return params;\n });\n}\nexports.getStatelessVariantMapping = getStatelessVariantMapping;\nfunction getComponentMapping(mapping, component) {\n return mapping[component];\n}\nexports.getComponentMapping = getComponentMapping;\nfunction getAppearance(mapping, component, appearance) {\n const componentMapping = getComponentMapping(mapping, component);\n return common_1.safe(componentMapping, (value) => {\n return value.appearances[appearance];\n });\n}\nfunction getAppearanceMapping(mapping, component, appearance) {\n const appearanceConfig = getAppearance(mapping, component, appearance);\n return common_1.safe(appearanceConfig, (value) => {\n return value.mapping;\n });\n}\nfunction getVariantMapping(mapping, component, appearance, variant) {\n const appearanceConfig = getAppearance(mapping, component, appearance);\n return common_1.safe(appearanceConfig, (value) => {\n return common_1.safe(value.variantGroups, (groupValue) => {\n const groupName = Object.keys(groupValue).find((group) => {\n return groupValue[group][variant] !== undefined;\n });\n return common_1.safe(groupName, (groupNameValue) => {\n return groupValue[groupNameValue][variant];\n });\n });\n });\n}\nfunction getStateMapping(mapping, state) {\n return common_1.safe(mapping.state, (value) => {\n return value[state];\n });\n}\n//# sourceMappingURL=mapping.service.js.map","\"use strict\";\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./style.service\"));\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst common_1 = require(\"../common\");\nconst mapping_1 = require(\"../mapping\");\nexports.SEPARATOR_MAPPING_ENTRY = '.';\n/**\n * Creates style object for variant/list of variants(optional) and its state/list of states(optional)\n *\n * Example\n *\n * appearance = 'outline';\n * variants = ['success', 'large'];\n * state = ['active', 'checked'];\n *\n * a = `default` + `outline` - acc appearance (apce) mapping\n *\n * v1 = `success` of `default` - `success` variant mapping of `default` apce\n * v2 = `success` of `outline` - `success` variant mapping of `outline` apce\n * v3 = `large` of `default` - `large` variant mapping of `default` apce\n * v4 = `large` of `outline` - `large` variant mapping of `outline` apce\n *\n * s1 = `active` of `default` - `active` state mapping of `default` apce\n * s2 = `active` of `outline` - `active` state mapping of `outline` apce\n * s3 = `active` of `default success` - `active` state mapping of `success` variant of `default` apce\n * s4 = `active` of `outline success` - `active` state mapping of `success` variant of `outline` apce\n * s5 = `active` of `default large` - `active` state mapping of `large` variant of `default` apce\n * s6 = `active` of `outline large` - `active` state mapping of `large` variant of `outline` apce\n *\n * s7 = `checked` of `default` - `checked` state mapping of `default` apce\n * s8 = `checked` of `outline` - `checked` state mapping of `outline` apce\n * s9 = `checked` of `default success` - `checked` state mapping of `success` variant of `default` apce\n * s10 = `checked` of `outline success` - `checked` state mapping of `success` variant of `outline` apce\n * s11 = `checked` of `default large` - `checked` state mapping of `large` variant of `default` apce\n * s12 = `checked` of `outline large` - `checked` state mapping of `large` variant of `outline` apce\n *\n * s13 = `active.checked` of `default` - `active.checked` state mapping of `default` apce\n * s14 = `active.checked` of `outline` - `active.checked` state mapping of `outline` apce\n * s15 = `active.checked` of `default success` - `active.checked` state mapping of `success` variant of `default` apce\n * s16 = `active.checked` of `outline success` - `active.checked` state mapping of `success` variant of `outline` apce\n * s17 = `active.checked` of `default large` - `active.checked` state mapping of `large` variant of `default` apce\n * s18 = `active.checked` of `outline large` - `active.checked` state mapping of `large` variant of `outline` apce\n *\n * res = a + (v1 + v2 + ... + vn) + (s1 + s2 + ... + sn)\n *\n * @param mapping: ThemeMappingType - theme mapping configuration\n * @param component: string - component name\n * @param appearance: string - appearance applied to component\n * @param variants: string[] - variants applied to component. Default is []\n * @param states: string[] - states in which component is. Default is []\n * @param theme: StrictTheme - theme configuration object. Default is {}\n *\n * @return ThemedStyleType - compiled component styles declared in mappings, mapped to theme values\n */\nfunction createStyle(mapping, component, appearance, variants = [], states = [], theme = {}) {\n const normalizedAppearance = normalizeAppearance(mapping, component, appearance);\n const normalizedVariants = normalizeVariants(mapping, component, variants);\n const normalizedStates = normalizeStates(mapping, component, states, (state) => {\n return states.indexOf(state);\n });\n const appearanceMapping = reduce(normalizedAppearance, apce => {\n return mapping_1.getStatelessAppearanceMapping(mapping, component, apce);\n });\n const variantMapping = reduce(normalizedVariants, variant => {\n return reduce(normalizedAppearance, apce => {\n return mapping_1.getStatelessVariantMapping(mapping, component, apce, variant);\n });\n });\n const stateMapping = reduce(normalizedStates, state => {\n const appearanceStateMapping = reduce(normalizedAppearance, apce => {\n return mapping_1.getStateAppearanceMapping(mapping, component, apce, state);\n });\n const variantStateMapping = reduce(normalizedVariants, variant => {\n return reduce(normalizedAppearance, apce => {\n return mapping_1.getStateVariantMapping(mapping, component, apce, variant, state);\n });\n });\n return Object.assign(Object.assign({}, appearanceStateMapping), variantStateMapping);\n });\n const strictlessMapping = Object.assign(Object.assign(Object.assign({}, appearanceMapping), variantMapping), stateMapping);\n return withStrictTokens(strictlessMapping, theme);\n}\nexports.createStyle = createStyle;\nfunction createAllStyles(mapping, component, appearance, variants, states, theme) {\n let stateless;\n let withStates = [];\n if (needsAllVariantCases(mapping, component)) {\n // we need this config when there are no variant groups or there are no default paths defined\n stateless = createStyleEntry(mapping, component, appearance, appearance, '', '', theme);\n withStates = states.reduce((acc, current) => {\n const key = appearance.concat(exports.SEPARATOR_MAPPING_ENTRY, current);\n const next = createStyleEntry(mapping, component, key, appearance, '', current, theme);\n return [...acc, next];\n }, []);\n }\n const withVariants = variants.map(variant => {\n const key = appearance.concat(exports.SEPARATOR_MAPPING_ENTRY, variant);\n return createStyleEntry(mapping, component, key, appearance, variant, '', theme);\n });\n const withVariantStates = variants.reduce((acc, current) => {\n const next = states.map(state => {\n const key = appearance.concat(exports.SEPARATOR_MAPPING_ENTRY, current, exports.SEPARATOR_MAPPING_ENTRY, state);\n return createStyleEntry(mapping, component, key, appearance, current, state, theme);\n });\n return [...acc, ...next];\n }, []);\n return [\n stateless,\n ...withStates,\n ...withVariants,\n ...withVariantStates,\n ].filter(Boolean);\n}\nexports.createAllStyles = createAllStyles;\nfunction getStyle(mapping, component, appearance, variants, states) {\n return common_1.safe(mapping, (themeMapping) => {\n return common_1.safe(themeMapping[component], (componentMapping) => {\n const query = findStyleKey(Object.keys(componentMapping), [\n appearance,\n ...variants,\n ...states,\n ]);\n return componentMapping[query];\n });\n });\n}\nexports.getStyle = getStyle;\n/**\n * Creates normalized to design system array of component appearances\n *\n * Example:\n *\n * '' => ['default']\n * 'bold' => ['default', 'bold']\n * 'default' => ['default']\n * ...\n *\n * @param mapping: ThemeMappingType - theme mapping configuration\n * @param component: string - component name\n * @param appearance: string - appearance applied to component\n *\n * @return string[] - array of merged appearances\n */\nfunction normalizeAppearance(mapping, component, appearance) {\n const defaultAppearance = mapping_1.getComponentDefaultAppearance(mapping, component);\n return normalize([defaultAppearance, appearance]);\n}\nexports.normalizeAppearance = normalizeAppearance;\n/**\n * Creates normalized to design system array of component variants\n *\n * Example:\n *\n * [''] => ['default0', 'default1']\n * ['success'] => ['default0', 'default1', 'success']\n * ['default0', 'tiny'] => ['default0', 'default1', 'tiny']\n * ...\n *\n * @param mapping: ThemeMappingType - theme mapping configuration\n * @param component: string - component name\n * @param variants: string[] - variants applied to component\n *\n * @return string[] - array of merged variants\n */\nfunction normalizeVariants(mapping, component, variants) {\n const defaultVariants = mapping_1.getComponentDefaultVariants(mapping, component);\n return normalize([...defaultVariants, ...variants]);\n}\nexports.normalizeVariants = normalizeVariants;\n/**\n * Creates normalized to design system array of component states\n *\n * Example:\n *\n * [''] => ['default']\n * ['active', 'checked'] => [\n * 'default',\n * 'active',\n * 'default.active',\n * 'checked',\n * 'default.active.checked'\n * ]\n * ...\n *\n * @param mapping: ThemeMappingType - theme mapping configuration\n * @param component: string - component name\n * @param states: string[] - states in which component is\n * @param stateWeight: (state: string) => number - state weight calculation lambda\n * @param separator - state separator. `.` in example\n *\n * @return string[] - array of merged states\n */\nfunction normalizeStates(mapping, component, states, stateWeight, separator = exports.SEPARATOR_MAPPING_ENTRY) {\n const defaultState = mapping_1.getComponentDefaultState(mapping, component);\n const preprocess = normalize([defaultState, ...states]);\n if (preprocess.length === 0) {\n return preprocess;\n }\n const variations = createStateVariations([...preprocess], separator, []);\n return variations.sort((lhs, rhs) => {\n const lhsWeight = getStateVariationWeight(lhs, separator, stateWeight);\n const rhsWeight = getStateVariationWeight(rhs, separator, stateWeight);\n return lhsWeight - rhsWeight;\n });\n}\nexports.normalizeStates = normalizeStates;\nfunction createStateVariations(states, separator, result = []) {\n if (states.length === 0) {\n return result;\n }\n const next = states.reduce((acc, current) => {\n const nextItem = acc.map(value => value.concat(separator, current));\n return [...acc, ...nextItem];\n }, [states.shift()]);\n return createStateVariations(states, separator, [...result, ...next]);\n}\nfunction withStrictTokens(mapping, theme) {\n return Object.keys(mapping).reduce((acc, next) => {\n const currentToken = mapping[next];\n const nextToken = common_1.isNil(theme[currentToken]) ? currentToken : theme[currentToken];\n return Object.assign(Object.assign({}, acc), { [next]: nextToken });\n }, {});\n}\nfunction getStateVariationWeight(state, separator, stateWeight) {\n const parts = state.split(separator);\n return parts.reduce((acc, current) => {\n return acc + stateWeight(current) + parts.length;\n }, 0);\n}\n/**\n * Finds identical keys across `source` keys array\n *\n * Example:\n *\n * source = ['default.error.small.checked', ...]\n * query = ['default', 'small', 'error', 'checked']\n *\n * will return 'default.error.small.checked'\n *\n * @param source (string[]) - array of style keys\n * @param query (string[]) - array of key parts to search\n *\n * @return (string | undefined) - key identical to some of `source` keys if presents\n */\nfunction findStyleKey(source, query) {\n const partialKeys = source.map((key) => {\n return key.split(exports.SEPARATOR_MAPPING_ENTRY);\n });\n const result = partialKeys.filter((partial) => {\n return compareArrays(query, partial);\n });\n return common_1.safe(result[0], (value) => {\n return value.join(exports.SEPARATOR_MAPPING_ENTRY);\n });\n}\nexports.findStyleKey = findStyleKey;\nfunction createStyleEntry(mapping, component, key, appearance, variant = '', state = '', theme = {}) {\n const value = createStyle(mapping, component, appearance, variant.split(exports.SEPARATOR_MAPPING_ENTRY), state.split(exports.SEPARATOR_MAPPING_ENTRY), theme);\n return [key, value];\n}\n/**\n * Tells if component requires all variant groups combinations to be generated.\n * Basically that just means that default variant group values are not defined for all variant groups.\n *\n * @param mapping: ThemeMappingType - theme mapping configuration\n * @param component: string - component name\n *\n * @return (boolean) - key identical to some of `source` keys if presents\n */\nfunction needsAllVariantCases(mapping, component) {\n const { meta } = mapping[component];\n const variantKeys = Object.keys(meta.variantGroups);\n if (variantKeys.length === 0) {\n return true;\n }\n return variantKeys.some(key => {\n const group = meta.variantGroups[key];\n return !Object.keys(group).find(x => group[x].default);\n });\n}\nexports.needsAllVariantCases = needsAllVariantCases;\nfunction normalize(params) {\n return common_1.noNulls(common_1.noDuplicates(params));\n}\nfunction compareArrays(lhs, rhs) {\n const isEqualLength = lhs && rhs && lhs.length === rhs.length;\n if (!isEqualLength) {\n return false;\n }\n return lhs.reduce((acc, next) => acc && rhs.includes(next), true);\n}\nfunction reduce(items, next) {\n return items.reduce((acc, current) => (Object.assign(Object.assign({}, acc), next(current))), {});\n}\n//# sourceMappingURL=style.service.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst service_1 = require(\"../../service\");\nclass MetaProcessor {\n process(params) {\n const { mapping, meta, theme } = params;\n const strictTheme = this.processStrictTheme(theme || {});\n const entries = meta.reduce((acc, controlMeta) => {\n const { name, appearance, variants, states } = controlMeta;\n const nextAppearanceEntries = service_1.createAllStyles(mapping, name, appearance, variants, states, strictTheme);\n const prevAppearanceStyles = acc[name];\n const nextAppearanceStyles = service_1.toObject(nextAppearanceEntries);\n return Object.assign(Object.assign({}, acc), { [name]: Object.assign(Object.assign({}, prevAppearanceStyles), nextAppearanceStyles) });\n }, {});\n return this.withControlMeta(mapping, entries);\n }\n processStrictTheme(theme) {\n return Object.keys(theme).reduce((acc, key) => {\n return Object.assign(Object.assign({}, acc), { [key]: this.getStrictThemeValue(key, theme, key) });\n }, {});\n }\n getStrictThemeValue(name, theme, fallback) {\n const key = this.isReference(name) ? this.createKeyFromReference(name) : name;\n const value = this.findValue(key, theme);\n return service_1.isNil(value) ? fallback : value;\n }\n findValue(name, theme) {\n const value = theme[name];\n if (this.isReference(value)) {\n const themeKey = this.createKeyFromReference(value);\n return this.findValue(themeKey, theme);\n }\n return value;\n }\n isReference(value) {\n return `${value}`.startsWith('$');\n }\n createKeyFromReference(value) {\n return `${value}`.substring(1);\n }\n withControlMeta(mapping, style) {\n return Object.keys(style).reduce((acc, control) => {\n const controlEntry = {\n meta: mapping[control].meta,\n styles: style[control],\n };\n return Object.assign(Object.assign({}, acc), { [control]: controlEntry });\n }, {});\n }\n}\nexports.MetaProcessor = MetaProcessor;\n//# sourceMappingURL=metaProcessor.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst mappingProcessor_1 = require(\"../mapping/mappingProcessor\");\nconst metaProcessor_1 = require(\"../meta/metaProcessor\");\nclass SchemaProcessor {\n constructor() {\n this.mappingProcessor = new mappingProcessor_1.MappingProcessor();\n this.metaProcessor = new metaProcessor_1.MetaProcessor();\n }\n process(params) {\n const { components: themeMapping, strict: strictTheme } = params;\n const meta = this.mappingProcessor.process(themeMapping);\n return this.metaProcessor.process({\n mapping: themeMapping,\n meta: meta,\n theme: strictTheme,\n });\n }\n}\nexports.SchemaProcessor = SchemaProcessor;\n//# sourceMappingURL=schemaProcessor.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StyleProvider = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst mappingProvider_component_1 = require(\"../mapping/mappingProvider.component\");\nconst themeProvider_component_1 = require(\"../theme/themeProvider.component\");\nclass StyleProvider extends react_1.default.PureComponent {\n render() {\n const { styles, theme, children } = this.props;\n return (\n \n {children}\n \n );\n }\n}\nexports.StyleProvider = StyleProvider;\n//# sourceMappingURL=styleProvider.component.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MappingProvider = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst mappingContext_1 = require(\"./mappingContext\");\nclass MappingProvider extends react_1.default.PureComponent {\n render() {\n const { styles, children } = this.props;\n return (\n {children}\n );\n }\n}\nexports.MappingProvider = MappingProvider;\n//# sourceMappingURL=mappingProvider.component.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MappingContext = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst defaultValue = {};\nexports.MappingContext = react_1.default.createContext(defaultValue);\n//# sourceMappingURL=mappingContext.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ThemeProvider = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst themeContext_1 = require(\"./themeContext\");\nconst theme_service_1 = require(\"./theme.service\");\n/**\n * Since ApplicationProvider is the root component of the application,\n * it provides same theme for all underlying components.\n *\n * ThemeProvider allows modifying this theme so that each component that is the child\n * of ThemeProvider will use modified theme.\n *\n * @overview-example ThemeProviderSimpleUsage\n */\nclass ThemeProvider extends react_1.default.PureComponent {\n render() {\n const { theme, children } = this.props;\n return (\n {children}\n );\n }\n}\nexports.ThemeProvider = ThemeProvider;\n//# sourceMappingURL=themeProvider.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ThemeContext = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst defaultTheme = {};\nexports.ThemeContext = react_1.default.createContext(defaultTheme);\n//# sourceMappingURL=themeContext.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ThemeService = exports.useTheme = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst themeContext_1 = require(\"./themeContext\");\n/**\n * Takes an actual theme provided by ApplicationProvider or ThemeProvider and\n * returns it to a functional component.\n\n * @overview-example UseThemeSimpleUsage\n * Complete list of theme variables could be found under [Light Theme Variables](design-system/eva-light-theme) table.\n *\n */\nconst useTheme = () => {\n return react_1.default.useContext(themeContext_1.ThemeContext);\n};\nexports.useTheme = useTheme;\n/**\n * Service for working with Eva themes\n */\nclass ThemeService {\n /**\n * @returns compiled theme since Eva theme may contain variables referencing each other.\n */\n static create = (theme) => {\n return Object.keys(theme).reduce((acc, key) => {\n return { ...acc, [key]: ThemeService.getValue(key, theme, key) };\n }, {});\n };\n /**\n * Finds theme value recursively since eva theme variables can reference each other.\n *\n * @returns ThemeValue if found, fallback param otherwise.\n */\n static getValue = (name, theme, fallback) => {\n if (ThemeService.isReference(name)) {\n const themeKey = ThemeService.createKeyFromReference(name);\n return ThemeService.findValue(themeKey, theme) || fallback;\n }\n return ThemeService.findValue(name, theme) || fallback;\n };\n /**\n * Finds theme value recursively since eva theme variables can reference each other.\n *\n * @returns ThemeValue if found.\n */\n static findValue = (name, theme) => {\n const value = theme[name];\n if (ThemeService.isReference(value)) {\n const themeKey = ThemeService.createKeyFromReference(value);\n return ThemeService.findValue(themeKey, theme);\n }\n return value;\n };\n /**\n * @returns true if theme value references to another\n */\n static isReference = (value) => {\n return `${value}`.startsWith('$');\n };\n /**\n * Transforms reference key to theme key\n */\n static createKeyFromReference = (value) => {\n return `${value}`.substring(1);\n };\n}\nexports.ThemeService = ThemeService;\n//# sourceMappingURL=theme.service.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ModalService = void 0;\n/**\n * Singleton service designed to store status bar offset configuration.\n *\n * @type ModalService\n *\n * @property {boolean} getShouldUseTopInsets - returns `true` if StatusBar additional offset is not enabled,\n * returns `false` if StatusBar additional offset is enabled.\n *\n * @property {boolean} setShouldUseTopInsets - `true` value enables StatusBar additional offset,\n * `false` disables StatusBar additional offset\n *\n * @overview-example StatusBar additional offset support configuration\n * ModalService could also control additional status bar offset configuration\n * for all related UI Kitten measurable\n * elements like [Modal](components/modal) and [Popover](components/popover).\n *\n * ```\n * import React from 'react';\n * import * as eva from '@eva-design/eva';\n * import { ApplicationProvider, Layout, Text, ModalService } from '@ui-kitten/components';\n *\n * ModalService.setShouldUseTopInsets = true //applies StatusBar additional offset\n *\n * const HomeScreen = () => (\n * \n * HOME\n * \n * );\n *\n * export default () => {\n *\n * return (\n * \n * \n * \n * )\n * };\n * ```\n */\nclass ModalServiceType {\n shouldUseTopInsets = false;\n set setShouldUseTopInsets(state) {\n this.shouldUseTopInsets = state;\n }\n get getShouldUseTopInsets() {\n return this.shouldUseTopInsets;\n }\n}\nexports.ModalService = new ModalServiceType();\n//# sourceMappingURL=modal.service.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.styled = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst hoist_non_react_statics_1 = __importDefault(require(\"hoist-non-react-statics\"));\nconst styleConsumer_service_1 = require(\"./styleConsumer.service\");\nconst mappingContext_1 = require(\"../mapping/mappingContext\");\nconst themeContext_1 = require(\"../theme/themeContext\");\n/**\n * `@styled` is a High Order Function to apply style mapping on a component.\n * Used by all UI Kitten components and can be used when building custom components with Eva.\n *\n * @property {string} appearance - Appearance of component. Default is provided by mapping.\n *\n * @property {EvaProp} eva - Additional property injected to all `styled` components. Includes following properties:\n * `theme` - current theme,\n * `style` - style provided by Eva,\n * `dispatch` - Function for requesting styles from Eva for current component state.\n *\n * @param name - Type: {string}. Name of the component in mapping.json.\n *\n * @overview-example StyledComponentSimpleUsage\n * The below examples demonstrate how components can be styled with Eva.\n * See [the guide](design-system/custom-component-mapping) for more details.\n *\n * @overview-example StyledComponentEvaProp\n * A styled function injects `eva` property into props of decorated component, where\n * theme - a current theme,\n * styles - a styles object provided by Eva\n * dispatch - a function to request styles for a particular state.\n *\n * ```\n * interface EvaProp {\n * theme: ThemeType;\n * style: StyleType;\n * dispatch: (interaction: Interaction[]) => void;\n * }\n * ```\n *\n * @overview-example StyledComponentStates\n * Styled components may describe its style for a particular state.\n *\n * Let's say we don't like the standard behavior of TouchableOpacity when it's pressed and\n * we want the component to change it's color rather being highlighted.\n *\n * We define an active state in `meta` key and in mapping, so that component will change `backgroundColor`,\n * when `active` is requested. To do this, we call `dispatch` function when Touchable is pressed.\n * Then, when touch is released, we request nothing, which stands for `default`.\n *\n * @overview-example StyledComponentVariants\n * Now let's say we want to have a `status` property to make component change its color, for example,\n * within the forms validation. Furthermore, we want to control its color for both statuses when it is pressed.\n *\n * The `variantGroups` key in `meta` defines all properties that can be applied by component.\n * Each key in variant group is a string value that can be passed to component props.\n */\nconst styled = (name) => {\n return (component) => {\n return styleInjector(component, name);\n };\n};\nexports.styled = styled;\nconst styleInjector = (Component, name) => {\n if (!name) {\n console.warn('Components annotated with @styled function should also have its in mapping.json.');\n return null;\n }\n class Wrapper extends react_1.default.PureComponent {\n state = {\n interaction: [],\n };\n init = false;\n defaultProps;\n service;\n onInit = (style) => {\n this.service = new styleConsumer_service_1.StyleConsumerService(name, style);\n this.defaultProps = this.service.createDefaultProps();\n this.init = true;\n };\n onDispatch = (interaction) => {\n this.setState({ interaction });\n };\n withEvaProp = (sourceProps, sourceStyle, theme) => {\n const props = { ...this.defaultProps, ...sourceProps };\n const style = this.service.createStyleProp(props, sourceStyle, theme, this.state.interaction);\n return {\n ...props,\n eva: {\n theme,\n style,\n dispatch: this.onDispatch,\n },\n };\n };\n renderWrappedElement = (style, theme) => {\n if (!this.init) {\n this.onInit(style);\n }\n const { forwardedRef, ...restProps } = this.props;\n return ();\n };\n render() {\n return (\n {(style) => (\n {(theme) => {\n return this.renderWrappedElement(style, theme);\n }}\n )}\n );\n }\n }\n const WrappingElement = (props, ref) => {\n return ();\n };\n const ResultComponent = react_1.default.forwardRef(WrappingElement);\n ResultComponent.displayName = Component.displayName || Component.name;\n (0, hoist_non_react_statics_1.default)(ResultComponent, Component);\n return ResultComponent;\n};\n//# sourceMappingURL=styled.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StyleConsumerService = void 0;\nconst style_service_1 = require(\"./style.service\");\nconst SEPARATOR_MAPPING_ENTRY = '.';\nconst DOC_ROOT = 'https://akveo.github.io/react-native-ui-kitten/docs';\nclass StyleConsumerService {\n name;\n meta;\n constructor(name, style) {\n this.name = name;\n this.meta = this.safe(style[name], (generatedConfig) => {\n return generatedConfig.meta;\n });\n if (!this.meta) {\n const message = [\n `\\n${this.name}: unsupported configuration.`,\n 'Using UI Kitten components is only possible with configuring ApplicationProvider.',\n `📖 Documentation: ${DOC_ROOT}/guides/getting-started#manual-installation`,\n '\\nIn case you have all in place, there might be an incorrect usage of a \"styled\" function.',\n `📖 Documentation: ${DOC_ROOT}/design-system/custom-component-mapping`,\n ].join('\\n');\n console.error(message);\n }\n }\n createDefaultProps() {\n const appearance = this.getDefaultAppearance();\n const variants = this.getDefaultVariants();\n const states = this.getDefaultStates();\n return { appearance, ...variants, ...states };\n }\n createStyleProp(source, style, theme, interaction) {\n const styleInfo = this.getStyleInfo(source, this.withValidInteraction(interaction));\n const generatedMapping = this.getGeneratedStyleMapping(style, styleInfo);\n if (!generatedMapping) {\n const message = [\n `${this.name}: unsupported configuration.`,\n `Check one of the following prop values: ${JSON.stringify(styleInfo, null, 2)}`,\n `📖 Documentation: ${DOC_ROOT}/components/${this.name.toLowerCase()}/api`,\n ].join('\\n');\n console.warn(message);\n return this.createStyleProp({ ...source, ...this.createDefaultProps() }, style, theme, interaction);\n }\n const mapping = this.withValidParameters(generatedMapping);\n return style_service_1.StyleService.createThemedEntry(mapping, theme);\n }\n getGeneratedStyleMapping(style, info) {\n return this.safe(style[this.name], (componentStyles) => {\n const styleKeys = Object.keys(componentStyles.styles);\n const query = this.findGeneratedQuery(info, styleKeys);\n return componentStyles.styles[query];\n });\n }\n withValidInteraction(interaction) {\n const validInteractions = interaction.filter((key) => {\n return Object.keys(this.meta.states).includes(key);\n });\n if (validInteractions.length < interaction.length) {\n const message = [\n `${this.name}: unsupported configuration.`,\n `Check one of the following dispatched interactions: ${interaction}`,\n `📖 Documentation: ${DOC_ROOT}/design-system/custom-component-mapping`,\n ].join('\\n');\n console.warn(message);\n }\n return validInteractions;\n }\n withValidParameters(mapping) {\n const invalidParameters = [];\n Object.keys(mapping).forEach((key) => {\n if (!Object.keys(this.meta.parameters).includes(key)) {\n invalidParameters.push(key);\n delete mapping[key];\n }\n });\n if (invalidParameters.length !== 0) {\n const message = [\n `${this.name}: unsupported configuration.`,\n `Unable to apply ${invalidParameters}`,\n 'There might be an incorrect usage of mapping',\n `📖 Documentation: ${DOC_ROOT}/design-system/custom-component-mapping`,\n ].join('\\n');\n console.warn(message);\n }\n return mapping;\n }\n getStyleInfo(props, interaction) {\n const variantProps = this.getDerivedVariants(this.meta, props);\n const stateProps = this.getDerivedStates(this.meta, props);\n const variants = Object.keys(variantProps).map((variant) => {\n return variantProps[variant];\n });\n const states = Object.keys(stateProps);\n return {\n appearance: props.appearance,\n variants: variants,\n states: [...states, ...interaction],\n };\n }\n getDefaultAppearance() {\n const matches = Object.keys(this.meta.appearances).filter((appearance) => {\n return this.meta.appearances[appearance].default === true;\n });\n return matches[matches.length - 1];\n }\n getDefaultVariants() {\n return this.transformObject(this.meta.variantGroups, (variants, group) => {\n return Object.keys(variants[group]).find((variant) => {\n return variants[group][variant].default === true;\n });\n });\n }\n getDefaultStates() {\n return this.transformObject(this.meta.states, (states, state) => {\n const isDefault = states[state].default === true;\n return isDefault ? isDefault : undefined;\n });\n }\n getDerivedVariants(meta, props) {\n return this.transformObject(props, (p, prop) => {\n const isVariant = Object.keys(meta.variantGroups).includes(prop);\n return isVariant ? p[prop] : undefined;\n });\n }\n getDerivedStates(meta, props) {\n return this.transformObject(props, (p, prop) => {\n const isState = Object.keys(meta.states).includes(prop);\n const isAssigned = p[prop] === true;\n return isState && isAssigned;\n });\n }\n /**\n * Iterates throw `value` object keys and fills it values with values provided by `transform` callback\n * If `transform` returns `undefined`, then appends nothing\n *\n * @param value (V extends object) - object to transform\n * @param transform - object key transformation callback\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n transformObject(value, transform) {\n return Object.keys(value).reduce((acc, key) => {\n const nextValue = transform(value, key);\n return nextValue ? {\n ...acc,\n [key]: nextValue,\n } : acc;\n }, {});\n }\n /**\n * Finds identical keys across `source` keys array\n *\n * Example:\n *\n * source = ['default.error.small.checked', ...]\n * info = { appearance: 'default', variants: ['small', 'error'], states: ['checked'] }\n *\n * will return ['default', 'error', 'small', 'checked']\n *\n * @param info (StyleInfo) - component style info\n * @param source (string[]) - array of style keys\n *\n * @return (string | undefined) - key identical to some of `source` keys if presents\n */\n findGeneratedQuery(info, source) {\n const query = [\n info.appearance,\n ...info.variants,\n ...info.states,\n ];\n return source.find((value) => this.compareArrays(query, value.split(SEPARATOR_MAPPING_ENTRY)));\n }\n /**\n * @param lhs (string[]) - comparable array\n * @param rhs (string[]) - comparing array\n *\n * @return true if all of lhs keys are included in rhs\n */\n compareArrays(lhs, rhs) {\n if (lhs.length !== rhs.length) {\n return false;\n }\n return lhs.reduce((acc, current) => acc && rhs.includes(current), true);\n }\n /**\n * Safely retrieves R value of T object with reducer\n *\n * @param value (T | undefined) - unsafe object which should be processed\n * @param reducer ((T) => R) - `value` processing lambda. Called if `value` is not `undefined`\n * @param fallback (R) - fallback value to return. Optional\n *\n * @return (R | undefined) - object returned by `reducer` if `value` is not `undefined`, `fallback` otherwise\n **/\n safe(value, reducer, fallback) {\n if (value) {\n return reducer(value);\n }\n return fallback;\n }\n}\nexports.StyleConsumerService = StyleConsumerService;\n//# sourceMappingURL=styleConsumer.service.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StyleService = exports.useStyleSheet = exports.State = exports.Interaction = void 0;\nconst react_1 = require(\"react\");\nconst theme_service_1 = require(\"../theme/theme.service\");\n/**\n * User interactions that can be handled by Eva.\n */\nvar Interaction;\n(function (Interaction) {\n Interaction[\"HOVER\"] = \"hover\";\n Interaction[\"ACTIVE\"] = \"active\";\n Interaction[\"FOCUSED\"] = \"focused\";\n Interaction[\"INDETERMINATE\"] = \"indeterminate\";\n Interaction[\"VISIBLE\"] = \"visible\";\n})(Interaction = exports.Interaction || (exports.Interaction = {}));\n/**\n * Component states that can be handled by Eva.\n */\nvar State;\n(function (State) {\n State[\"CHECKED\"] = \"checked\";\n State[\"SELECTED\"] = \"selected\";\n State[\"DISABLED\"] = \"disabled\";\n})(State = exports.State || (exports.State = {}));\n/**\n * Takes a theme provided by ApplicationProvider or ThemeProvider and applies it to style.\n * Consider not using this function when not using Eva theme variables.\n *\n * @overview-example UseStyleSheetSimpleUsage\n */\nconst useStyleSheet = (styles) => {\n const theme = (0, theme_service_1.useTheme)();\n return (0, react_1.useMemo)(() => {\n return StyleService.createThemed(styles, theme);\n }, [theme]);\n};\nexports.useStyleSheet = useStyleSheet;\n/**\n * Service for creating styles that fit current theme.\n * Unlike StyleSheet class exported from React Native package, it allows using Eva theme variables.\n */\nclass StyleService {\n /**\n * Unlike `StyleSheet.create` from RN package,\n * this does nothing with `styles` validation because of inability to process Eva theme variables\n * and returns styles as it is just to support the syntax we used to.\n *\n * However, this may be useful to have this function\n * because future RN versions may allow pre-processing.\n * @see {StyleSheet.setStyleAttributePreprocessor}\n *\n * Notice it is better to use `StyleSheet.create` from RN package since it does style registering.\n * You don't need to use this function if custom variables are not used.\n *\n * When using Eva theme variables, `useStyleSheet` should be called.\n *\n * @example\n * ```\n * const Component = () => {\n * const styles = useStyleSheet(themedStyles);\n * return (\n * \n * );\n * };\n *\n * const themedStyles = StyleService.create({\n * container: { backgroundColor: 'color-primary-default' },\n * });\n * ```\n */\n static create = (styles) => {\n return styles;\n };\n /**\n * @returns stylesheet mapped to theme\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static createThemed = (styles, theme) => {\n return Object.keys(styles).reduce((acc, key) => {\n return { ...acc, [key]: StyleService.createThemedEntry(styles[key], theme) };\n }, {});\n };\n /**\n * @returns a style mapped to theme\n */\n static createThemedEntry = (style, theme) => {\n return Object.keys(style).reduce((acc, key) => {\n const value = style[key];\n return { ...acc, [key]: theme_service_1.ThemeService.getValue(value, theme, value) };\n }, {});\n };\n}\nexports.StyleService = StyleService;\n//# sourceMappingURL=style.service.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.withStyles = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst hoist_non_react_statics_1 = __importDefault(require(\"hoist-non-react-statics\"));\nconst themeContext_1 = require(\"./themeContext\");\n/**\n * High Order Function for creating styles mapped to current theme\n * Returns component class which can be used as themed component.\n *\n * @param Component - Type: {ComponentType}. Component to be themed.\n *\n * @param createStyles - Type: {(ThemeType) => NamedStyles}. Function used to create styles mapped on theme.\n *\n * @overview-example WithStylesSimpleUsage\n *\n * @overview-example WithStylesEvaProp\n * A withStyles function injects `eva` property into props of wrapped component, where\n * theme - a current theme,\n * styles - a styles object provided by a function used as a second argument of withStyles.\n * ```\n * interface EvaProp {\n * theme: ThemeType;\n * style: StyleType;\n * }\n * ```\n */\nconst withStyles = (Component, createStyles) => {\n class Wrapper extends react_1.default.PureComponent {\n withThemedProps = (props, theme) => {\n const style = createStyles?.(theme);\n return {\n ...props,\n eva: {\n theme,\n style,\n },\n };\n };\n renderWrappedElement = (theme) => {\n const { forwardedRef, ...restProps } = this.props;\n const props = this.withThemedProps(restProps, theme);\n return ();\n };\n render() {\n return (\n {this.renderWrappedElement}\n );\n }\n }\n const WrappingElement = (props, ref) => {\n return (\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n );\n };\n const ThemedComponent = react_1.default.forwardRef(WrappingElement);\n ThemedComponent.displayName = Component.displayName || Component.name;\n (0, hoist_non_react_statics_1.default)(ThemedComponent, Component);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return ThemedComponent;\n};\nexports.withStyles = withStyles;\n//# sourceMappingURL=withStyles.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NativeDateService = exports.DateService = exports.ViewPager = exports.TopNavigationAction = exports.TopNavigation = exports.Tooltip = exports.Toggle = exports.Text = exports.Tab = exports.TabBar = exports.TabView = exports.Spinner = exports.CircularProgressBar = exports.ProgressBar = exports.Divider = exports.RadioGroup = exports.Radio = exports.PopoverPlacements = exports.Popover = exports.OverflowMenu = exports.Modal = exports.MenuItem = exports.MenuGroup = exports.Menu = exports.ListItem = exports.List = exports.Layout = exports.Input = exports.IconRegistry = exports.Icon = exports.SelectItem = exports.SelectGroup = exports.Select = exports.DrawerItem = exports.DrawerGroup = exports.Drawer = exports.RangeDatepicker = exports.Datepicker = exports.CheckBox = exports.CalendarViewModes = exports.RangeCalendar = exports.Card = exports.Calendar = exports.ButtonGroup = exports.Button = exports.BottomNavigationTab = exports.BottomNavigation = exports.Avatar = exports.AutocompleteItem = exports.Autocomplete = void 0;\nexports.IndexPath = exports.TranslationWidth = void 0;\nvar autocomplete_component_1 = require(\"./autocomplete/autocomplete.component\");\nObject.defineProperty(exports, \"Autocomplete\", { enumerable: true, get: function () { return autocomplete_component_1.Autocomplete; } });\nvar autocompleteItem_component_1 = require(\"./autocomplete/autocompleteItem.component\");\nObject.defineProperty(exports, \"AutocompleteItem\", { enumerable: true, get: function () { return autocompleteItem_component_1.AutocompleteItem; } });\nvar avatar_component_1 = require(\"./avatar/avatar.component\");\nObject.defineProperty(exports, \"Avatar\", { enumerable: true, get: function () { return avatar_component_1.Avatar; } });\nvar bottomNavigation_component_1 = require(\"./bottomNavigation/bottomNavigation.component\");\nObject.defineProperty(exports, \"BottomNavigation\", { enumerable: true, get: function () { return bottomNavigation_component_1.BottomNavigation; } });\nvar bottomNavigationTab_component_1 = require(\"./bottomNavigation/bottomNavigationTab.component\");\nObject.defineProperty(exports, \"BottomNavigationTab\", { enumerable: true, get: function () { return bottomNavigationTab_component_1.BottomNavigationTab; } });\nvar button_component_1 = require(\"./button/button.component\");\nObject.defineProperty(exports, \"Button\", { enumerable: true, get: function () { return button_component_1.Button; } });\nvar buttonGroup_component_1 = require(\"./buttonGroup/buttonGroup.component\");\nObject.defineProperty(exports, \"ButtonGroup\", { enumerable: true, get: function () { return buttonGroup_component_1.ButtonGroup; } });\nvar calendar_component_1 = require(\"./calendar/calendar.component\");\nObject.defineProperty(exports, \"Calendar\", { enumerable: true, get: function () { return calendar_component_1.Calendar; } });\nvar card_component_1 = require(\"./card/card.component\");\nObject.defineProperty(exports, \"Card\", { enumerable: true, get: function () { return card_component_1.Card; } });\nvar rangeCalendar_component_1 = require(\"./calendar/rangeCalendar.component\");\nObject.defineProperty(exports, \"RangeCalendar\", { enumerable: true, get: function () { return rangeCalendar_component_1.RangeCalendar; } });\nvar type_1 = require(\"./calendar/type\");\nObject.defineProperty(exports, \"CalendarViewModes\", { enumerable: true, get: function () { return type_1.CalendarViewModes; } });\nvar checkbox_component_1 = require(\"./checkbox/checkbox.component\");\nObject.defineProperty(exports, \"CheckBox\", { enumerable: true, get: function () { return checkbox_component_1.CheckBox; } });\nvar datepicker_component_1 = require(\"./datepicker/datepicker.component\");\nObject.defineProperty(exports, \"Datepicker\", { enumerable: true, get: function () { return datepicker_component_1.Datepicker; } });\nvar rangeDatepicker_component_1 = require(\"./datepicker/rangeDatepicker.component\");\nObject.defineProperty(exports, \"RangeDatepicker\", { enumerable: true, get: function () { return rangeDatepicker_component_1.RangeDatepicker; } });\nvar drawer_component_1 = require(\"./drawer/drawer.component\");\nObject.defineProperty(exports, \"Drawer\", { enumerable: true, get: function () { return drawer_component_1.Drawer; } });\nvar drawerGroup_component_1 = require(\"./drawer/drawerGroup.component\");\nObject.defineProperty(exports, \"DrawerGroup\", { enumerable: true, get: function () { return drawerGroup_component_1.DrawerGroup; } });\nvar drawerItem_component_1 = require(\"./drawer/drawerItem.component\");\nObject.defineProperty(exports, \"DrawerItem\", { enumerable: true, get: function () { return drawerItem_component_1.DrawerItem; } });\nvar select_component_1 = require(\"./select/select.component\");\nObject.defineProperty(exports, \"Select\", { enumerable: true, get: function () { return select_component_1.Select; } });\nvar selectGroup_component_1 = require(\"./select/selectGroup.component\");\nObject.defineProperty(exports, \"SelectGroup\", { enumerable: true, get: function () { return selectGroup_component_1.SelectGroup; } });\nvar selectItem_component_1 = require(\"./select/selectItem.component\");\nObject.defineProperty(exports, \"SelectItem\", { enumerable: true, get: function () { return selectItem_component_1.SelectItem; } });\nvar icon_component_1 = require(\"./icon/icon.component\");\nObject.defineProperty(exports, \"Icon\", { enumerable: true, get: function () { return icon_component_1.Icon; } });\nvar iconRegistry_component_1 = require(\"./icon/iconRegistry.component\");\nObject.defineProperty(exports, \"IconRegistry\", { enumerable: true, get: function () { return iconRegistry_component_1.IconRegistry; } });\nvar input_component_1 = require(\"./input/input.component\");\nObject.defineProperty(exports, \"Input\", { enumerable: true, get: function () { return input_component_1.Input; } });\nvar layout_component_1 = require(\"./layout/layout.component\");\nObject.defineProperty(exports, \"Layout\", { enumerable: true, get: function () { return layout_component_1.Layout; } });\nvar list_component_1 = require(\"./list/list.component\");\nObject.defineProperty(exports, \"List\", { enumerable: true, get: function () { return list_component_1.List; } });\nvar listItem_component_1 = require(\"./list/listItem.component\");\nObject.defineProperty(exports, \"ListItem\", { enumerable: true, get: function () { return listItem_component_1.ListItem; } });\nvar menu_component_1 = require(\"./menu/menu.component\");\nObject.defineProperty(exports, \"Menu\", { enumerable: true, get: function () { return menu_component_1.Menu; } });\nvar menuGroup_component_1 = require(\"./menu/menuGroup.component\");\nObject.defineProperty(exports, \"MenuGroup\", { enumerable: true, get: function () { return menuGroup_component_1.MenuGroup; } });\nvar menuItem_component_1 = require(\"./menu/menuItem.component\");\nObject.defineProperty(exports, \"MenuItem\", { enumerable: true, get: function () { return menuItem_component_1.MenuItem; } });\nvar modal_component_1 = require(\"./modal/modal.component\");\nObject.defineProperty(exports, \"Modal\", { enumerable: true, get: function () { return modal_component_1.Modal; } });\nvar overflowMenu_component_1 = require(\"./overflowMenu/overflowMenu.component\");\nObject.defineProperty(exports, \"OverflowMenu\", { enumerable: true, get: function () { return overflowMenu_component_1.OverflowMenu; } });\nvar popover_component_1 = require(\"./popover/popover.component\");\nObject.defineProperty(exports, \"Popover\", { enumerable: true, get: function () { return popover_component_1.Popover; } });\nvar type_2 = require(\"./popover/type\");\nObject.defineProperty(exports, \"PopoverPlacements\", { enumerable: true, get: function () { return type_2.PopoverPlacements; } });\nvar radio_component_1 = require(\"./radio/radio.component\");\nObject.defineProperty(exports, \"Radio\", { enumerable: true, get: function () { return radio_component_1.Radio; } });\nvar radioGroup_component_1 = require(\"./radioGroup/radioGroup.component\");\nObject.defineProperty(exports, \"RadioGroup\", { enumerable: true, get: function () { return radioGroup_component_1.RadioGroup; } });\nvar divider_component_1 = require(\"./divider/divider.component\");\nObject.defineProperty(exports, \"Divider\", { enumerable: true, get: function () { return divider_component_1.Divider; } });\nvar progressBar_component_1 = require(\"./progressBar/progressBar.component\");\nObject.defineProperty(exports, \"ProgressBar\", { enumerable: true, get: function () { return progressBar_component_1.ProgressBar; } });\nvar circularProgressBar_component_1 = require(\"./circularProgressBar/circularProgressBar.component\");\nObject.defineProperty(exports, \"CircularProgressBar\", { enumerable: true, get: function () { return circularProgressBar_component_1.CircularProgressBar; } });\nvar spinner_component_1 = require(\"./spinner/spinner.component\");\nObject.defineProperty(exports, \"Spinner\", { enumerable: true, get: function () { return spinner_component_1.Spinner; } });\nvar tabView_component_1 = require(\"./tab/tabView.component\");\nObject.defineProperty(exports, \"TabView\", { enumerable: true, get: function () { return tabView_component_1.TabView; } });\nvar tabBar_component_1 = require(\"./tab/tabBar.component\");\nObject.defineProperty(exports, \"TabBar\", { enumerable: true, get: function () { return tabBar_component_1.TabBar; } });\nvar tab_component_1 = require(\"./tab/tab.component\");\nObject.defineProperty(exports, \"Tab\", { enumerable: true, get: function () { return tab_component_1.Tab; } });\nvar text_component_1 = require(\"./text/text.component\");\nObject.defineProperty(exports, \"Text\", { enumerable: true, get: function () { return text_component_1.Text; } });\nvar toggle_component_1 = require(\"./toggle/toggle.component\");\nObject.defineProperty(exports, \"Toggle\", { enumerable: true, get: function () { return toggle_component_1.Toggle; } });\nvar tooltip_component_1 = require(\"./tooltip/tooltip.component\");\nObject.defineProperty(exports, \"Tooltip\", { enumerable: true, get: function () { return tooltip_component_1.Tooltip; } });\nvar topNavigation_component_1 = require(\"./topNavigation/topNavigation.component\");\nObject.defineProperty(exports, \"TopNavigation\", { enumerable: true, get: function () { return topNavigation_component_1.TopNavigation; } });\nvar topNavigationAction_component_1 = require(\"./topNavigation/topNavigationAction.component\");\nObject.defineProperty(exports, \"TopNavigationAction\", { enumerable: true, get: function () { return topNavigationAction_component_1.TopNavigationAction; } });\nvar viewPager_component_1 = require(\"./viewPager/viewPager.component\");\nObject.defineProperty(exports, \"ViewPager\", { enumerable: true, get: function () { return viewPager_component_1.ViewPager; } });\nvar date_service_1 = require(\"./calendar/service/date.service\");\nObject.defineProperty(exports, \"DateService\", { enumerable: true, get: function () { return date_service_1.DateService; } });\nvar nativeDate_service_1 = require(\"./calendar/service/nativeDate.service\");\nObject.defineProperty(exports, \"NativeDateService\", { enumerable: true, get: function () { return nativeDate_service_1.NativeDateService; } });\nvar type_3 = require(\"./calendar/i18n/type\");\nObject.defineProperty(exports, \"TranslationWidth\", { enumerable: true, get: function () { return type_3.TranslationWidth; } });\nvar devsupport_1 = require(\"../devsupport\");\nObject.defineProperty(exports, \"IndexPath\", { enumerable: true, get: function () { return devsupport_1.IndexPath; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Autocomplete = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst input_component_1 = require(\"../input/input.component\");\nconst list_component_1 = require(\"../list/list.component\");\nconst popover_component_1 = require(\"../popover/popover.component\");\n/**\n * Autocomplete is a normal text input enhanced by a panel of suggested options.\n *\n * @extends React.Component\n *\n * @method {() => void} focus - Focuses an input field and sets data list visible.\n *\n * @method {() => void} blur - Removes focus from input field and sets data list invisible.\n *\n * @method {() => boolean} isFocused - Returns true if the input field is currently focused.\n *\n * @method {() => void} clear - Removes all text from the input field.\n *\n * @property {ReactElement | ReactElement[]} children -\n * Options displayed within list.\n *\n * @property {(number) => void} onSelect - Called when option is pressed.\n *\n * @property {string} status - Status of the component.\n * Can be `basic`, `primary`, `success`, `info`, `warning`, `danger` or `control`.\n * Defaults to *basic*.\n * Useful for giving user a hint on the input validity.\n * Use *control* status when needed to display within a contrast container.\n *\n * @property {string} size - Size of the component.\n * Can be `small`, `medium` or `large`.\n * Defaults to *medium*.\n *\n * @property {ReactText | (TextProps) => ReactElement} label - String, number or a function component\n * to render to top of the input field.\n * If it is a function, expected to return a Text.\n *\n * @property {(ImageProps) => ReactElement} accessoryLeft - Function component\n * to render to start of the text.\n * Expected to return an Image.\n *\n * @property {(ImageProps) => ReactElement} accessoryRight - Function component\n * to render to end of the text.\n * Expected to return an Image.\n *\n * @property {string | PopoverPlacement} placement - Position of the options list relative to the input field.\n * Can be `left`, `top`, `right`, `bottom`, `left start`, `left end`, `top start`, `top end`, `right start`,\n * `right end`, `bottom start` or `bottom end`.\n * Defaults to *bottom*.\n *\n * @property {() => void} onFocus - Called when options list becomes visible.\n *\n * @property {() => void} onBlur - Called when options list becomes invisible.\n *\n * @property {InputProps} ...InputProps - Any props applied to Input component.\n *\n * @overview-example AutocompleteSimpleUsage\n * Autocomplete may contain options to be rendered within suggestions list.\n * Options should be provided by passing them to children.\n *\n * @overview-example AutocompleteAccessories\n * Autocomplete may contain accessories by passing `accessoryLeft` or `accessoryRight` props.\n * By default, we expect it to be images.\n *\n * @example AutocompleteHandleKeyboard\n * On mobile devices, options may be overlapped by keyboard.\n * It can be handled with `placement` property.\n *\n * @example AutocompleteAsync\n * For requesting a real-world data by typing, http requests may be sent with debounce.\n */\nclass Autocomplete extends react_1.default.Component {\n static defaultProps = {\n placement: 'inner top',\n };\n state = {\n listVisible: false,\n };\n inputRef = react_1.default.createRef();\n inputRefAnchor = react_1.default.createRef();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n get data() {\n return react_1.default.Children.toArray(this.props.children || []);\n }\n focus = () => {\n this.inputRef.current?.focus();\n };\n blur = () => {\n this.inputRef.current?.blur();\n };\n isFocused = () => {\n return this.inputRef.current?.isFocused();\n };\n clear = () => {\n this.inputRef.current?.clear();\n };\n componentDidUpdate(prevProps) {\n const { listVisible } = this.state;\n const isChildCountChanged = this.data.length !== react_1.default.Children.count(prevProps.children);\n const shouldBecomeVisible = !listVisible && this.isFocused() && isChildCountChanged;\n shouldBecomeVisible && this.setState({ listVisible: shouldBecomeVisible });\n }\n onInputFocus = (event) => {\n this.setOptionsListVisible();\n this.props.onFocus?.(event);\n };\n onAnchorInputFocus = (event) => {\n this.inputRefAnchor.current?.blur();\n this.setOptionsListVisible();\n this.focus();\n this.props.onFocus?.(event);\n };\n onInputSubmitEditing = (e) => {\n this.setOptionsListInvisible();\n this.props.onSubmitEditing?.(e);\n };\n onBackdropPress = () => {\n this.blur();\n this.inputRefAnchor.current?.blur();\n this.setOptionsListInvisible();\n };\n onItemPress = (index) => {\n if (this.props.onSelect) {\n this.setOptionsListInvisible();\n this.props.onSelect(index);\n }\n };\n setOptionsListVisible = () => {\n const hasData = this.data.length > 0;\n hasData && this.setState({ listVisible: true });\n };\n setOptionsListInvisible = () => {\n this.setState({ listVisible: false });\n };\n renderItem = (info) => {\n return react_1.default.cloneElement(info.item, { onPress: () => this.onItemPress(info.index) });\n };\n renderAnchorInputElement = (props) => {\n return (\n \n );\n };\n renderInputElement = (props) => {\n return (\n \n );\n };\n render() {\n const { placement, children, testID, ...inputProps } = this.props;\n return ( this.renderAnchorInputElement(inputProps)} onBackdropPress={this.onBackdropPress}>\n <>\n {this.renderInputElement(inputProps)}\n \n \n );\n }\n}\nexports.Autocomplete = Autocomplete;\nconst styles = react_native_1.StyleSheet.create({\n popover: {\n maxHeight: 192,\n overflow: 'hidden',\n borderWidth: 0,\n },\n list: {\n flexGrow: 0,\n overflow: 'hidden',\n },\n});\n//# sourceMappingURL=autocomplete.component.js.map","export { default as unstable_createElement } from './exports/createElement';\nexport { default as findNodeHandle } from './exports/findNodeHandle';\nexport { default as processColor } from './exports/processColor';\nexport { default as render } from './exports/render';\nexport { default as unmountComponentAtNode } from './exports/unmountComponentAtNode';\nexport { default as NativeModules } from './exports/NativeModules';\n\n// APIs\nexport { default as AccessibilityInfo } from './exports/AccessibilityInfo';\nexport { default as Alert } from './exports/Alert';\nexport { default as Animated } from './exports/Animated';\nexport { default as Appearance } from './exports/Appearance';\nexport { default as AppRegistry } from './exports/AppRegistry';\nexport { default as AppState } from './exports/AppState';\nexport { default as BackHandler } from './exports/BackHandler';\nexport { default as Clipboard } from './exports/Clipboard';\nexport { default as Dimensions } from './exports/Dimensions';\nexport { default as Easing } from './exports/Easing';\nexport { default as I18nManager } from './exports/I18nManager';\nexport { default as Keyboard } from './exports/Keyboard';\nexport { default as InteractionManager } from './exports/InteractionManager';\nexport { default as LayoutAnimation } from './exports/LayoutAnimation';\nexport { default as Linking } from './exports/Linking';\nexport { default as NativeEventEmitter } from './exports/NativeEventEmitter';\nexport { default as PanResponder } from './exports/PanResponder';\nexport { default as PixelRatio } from './exports/PixelRatio';\nexport { default as Platform } from './exports/Platform';\nexport { default as Share } from './exports/Share';\nexport { default as StyleSheet } from './exports/StyleSheet';\nexport { default as UIManager } from './exports/UIManager';\nexport { default as Vibration } from './exports/Vibration';\n\n// components\nexport { default as ActivityIndicator } from './exports/ActivityIndicator';\nexport { default as Button } from './exports/Button';\nexport { default as CheckBox } from './exports/CheckBox';\nexport { default as FlatList } from './exports/FlatList';\nexport { default as Image } from './exports/Image';\nexport { default as ImageBackground } from './exports/ImageBackground';\nexport { default as KeyboardAvoidingView } from './exports/KeyboardAvoidingView';\nexport { default as Modal } from './exports/Modal';\nexport { default as Picker } from './exports/Picker';\nexport { default as Pressable } from './exports/Pressable';\nexport { default as ProgressBar } from './exports/ProgressBar';\nexport { default as RefreshControl } from './exports/RefreshControl';\nexport { default as SafeAreaView } from './exports/SafeAreaView';\nexport { default as ScrollView } from './exports/ScrollView';\nexport { default as SectionList } from './exports/SectionList';\nexport { default as StatusBar } from './exports/StatusBar';\nexport { default as Switch } from './exports/Switch';\nexport { default as Text } from './exports/Text';\nexport { default as TextInput } from './exports/TextInput';\nexport { default as Touchable } from './exports/Touchable';\nexport { default as TouchableHighlight } from './exports/TouchableHighlight';\nexport { default as TouchableNativeFeedback } from './exports/TouchableNativeFeedback';\nexport { default as TouchableOpacity } from './exports/TouchableOpacity';\nexport { default as TouchableWithoutFeedback } from './exports/TouchableWithoutFeedback';\nexport { default as View } from './exports/View';\nexport { default as VirtualizedList } from './exports/VirtualizedList';\nexport { default as YellowBox } from './exports/YellowBox';\nexport { default as LogBox } from './exports/LogBox';\n\n// plugins\nexport { default as DeviceEventEmitter } from './exports/DeviceEventEmitter';\n\n// hooks\nexport { default as useColorScheme } from './exports/useColorScheme';\nexport { default as useLocaleContext } from './exports/useLocaleContext';\nexport { default as useWindowDimensions } from './exports/useWindowDimensions';","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nclass Alert {\n static alert() {}\n}\nexport default Alert;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport invariant from 'fbjs/lib/invariant';\nimport EventEmitter from '../../vendor/react-native/vendor/emitter/EventEmitter';\nimport canUseDOM from '../../modules/canUseDom';\n\n// Android 4.4 browser\nvar isPrefixed = canUseDOM && !document.hasOwnProperty('hidden') && document.hasOwnProperty('webkitHidden');\nvar EVENT_TYPES = ['change', 'memoryWarning'];\nvar VISIBILITY_CHANGE_EVENT = isPrefixed ? 'webkitvisibilitychange' : 'visibilitychange';\nvar VISIBILITY_STATE_PROPERTY = isPrefixed ? 'webkitVisibilityState' : 'visibilityState';\nvar AppStates = {\n BACKGROUND: 'background',\n ACTIVE: 'active'\n};\nvar changeEmitter = null;\nexport default class AppState {\n static get currentState() {\n if (!AppState.isAvailable) {\n return AppStates.ACTIVE;\n }\n switch (document[VISIBILITY_STATE_PROPERTY]) {\n case 'hidden':\n case 'prerender':\n case 'unloaded':\n return AppStates.BACKGROUND;\n default:\n return AppStates.ACTIVE;\n }\n }\n static addEventListener(type, handler) {\n if (AppState.isAvailable) {\n invariant(EVENT_TYPES.indexOf(type) !== -1, 'Trying to subscribe to unknown event: \"%s\"', type);\n if (type === 'change') {\n if (!changeEmitter) {\n changeEmitter = new EventEmitter();\n document.addEventListener(VISIBILITY_CHANGE_EVENT, () => {\n if (changeEmitter) {\n changeEmitter.emit('change', AppState.currentState);\n }\n }, false);\n }\n return changeEmitter.addListener(type, handler);\n }\n }\n }\n}\nAppState.isAvailable = canUseDOM && document[VISIBILITY_STATE_PROPERTY];","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar clipboardAvailable;\nexport default class Clipboard {\n static isAvailable() {\n if (clipboardAvailable === undefined) {\n clipboardAvailable = typeof document.queryCommandSupported === 'function' && document.queryCommandSupported('copy');\n }\n return clipboardAvailable;\n }\n static getString() {\n return Promise.resolve('');\n }\n static setString(text) {\n var success = false;\n var body = document.body;\n if (body) {\n // add the text to a hidden node\n var node = document.createElement('span');\n node.textContent = text;\n node.style.opacity = '0';\n node.style.position = 'absolute';\n node.style.whiteSpace = 'pre-wrap';\n node.style.userSelect = 'auto';\n body.appendChild(node);\n\n // select the text\n var selection = window.getSelection();\n selection.removeAllRanges();\n var range = document.createRange();\n range.selectNodeContents(node);\n selection.addRange(range);\n\n // attempt to copy\n try {\n document.execCommand('copy');\n success = true;\n } catch (e) {}\n\n // remove selection and node\n selection.removeAllRanges();\n body.removeChild(node);\n }\n return success;\n }\n}","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport LayoutAnimation from '../../vendor/react-native/LayoutAnimation';\nexport default LayoutAnimation;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport Platform from '../../../exports/Platform';\nimport UIManager from '../../../exports/UIManager';\nvar __DEV__ = process.env.NODE_ENV !== 'production';\nfunction configureNext(config, onAnimationDidEnd) {\n if (!Platform.isTesting) {\n UIManager.configureNextLayoutAnimation(config, onAnimationDidEnd !== null && onAnimationDidEnd !== void 0 ? onAnimationDidEnd : function () {}, function () {} /* unused onError */);\n }\n}\n\nfunction create(duration, type, property) {\n return {\n duration,\n create: {\n type,\n property\n },\n update: {\n type\n },\n delete: {\n type,\n property\n }\n };\n}\nvar Presets = {\n easeInEaseOut: create(300, 'easeInEaseOut', 'opacity'),\n linear: create(500, 'linear', 'opacity'),\n spring: {\n duration: 700,\n create: {\n type: 'linear',\n property: 'opacity'\n },\n update: {\n type: 'spring',\n springDamping: 0.4\n },\n delete: {\n type: 'linear',\n property: 'opacity'\n }\n }\n};\n\n/**\n * Automatically animates views to their new positions when the\n * next layout happens.\n *\n * A common way to use this API is to call it before calling `setState`.\n *\n * Note that in order to get this to work on **Android** you need to set the following flags via `UIManager`:\n *\n * UIManager.setLayoutAnimationEnabledExperimental && UIManager.setLayoutAnimationEnabledExperimental(true);\n */\nvar LayoutAnimation = {\n /**\n * Schedules an animation to happen on the next layout.\n *\n * @param config Specifies animation properties:\n *\n * - `duration` in milliseconds\n * - `create`, `AnimationConfig` for animating in new views\n * - `update`, `AnimationConfig` for animating views that have been updated\n *\n * @param onAnimationDidEnd Called when the animation finished.\n * Only supported on iOS.\n * @param onError Called on error. Only supported on iOS.\n */\n configureNext,\n /**\n * Helper for creating a config for `configureNext`.\n */\n create,\n Types: Object.freeze({\n spring: 'spring',\n linear: 'linear',\n easeInEaseOut: 'easeInEaseOut',\n easeIn: 'easeIn',\n easeOut: 'easeOut',\n keyboard: 'keyboard'\n }),\n Properties: Object.freeze({\n opacity: 'opacity',\n scaleX: 'scaleX',\n scaleY: 'scaleY',\n scaleXY: 'scaleXY'\n }),\n checkConfig() {\n console.error('LayoutAnimation.checkConfig(...) has been disabled.');\n },\n Presets,\n easeInEaseOut: configureNext.bind(null, Presets.easeInEaseOut),\n linear: configureNext.bind(null, Presets.linear),\n spring: configureNext.bind(null, Presets.spring)\n};\nexport default LayoutAnimation;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport invariant from 'fbjs/lib/invariant';\nimport canUseDOM from '../../modules/canUseDom';\nvar initialURL = canUseDOM ? window.location.href : '';\nclass Linking {\n constructor() {\n this._eventCallbacks = {};\n }\n _dispatchEvent(event) {\n for (var _len = arguments.length, data = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n data[_key - 1] = arguments[_key];\n }\n var listeners = this._eventCallbacks[event];\n if (listeners != null && Array.isArray(listeners)) {\n listeners.map(listener => {\n listener(...data);\n });\n }\n }\n\n /**\n * Adds a event listener for the specified event. The callback will be called when the\n * said event is dispatched.\n */\n addEventListener(eventType, callback) {\n var _this = this;\n if (!_this._eventCallbacks[eventType]) {\n _this._eventCallbacks[eventType] = [callback];\n }\n _this._eventCallbacks[eventType].push(callback);\n return {\n remove() {\n var callbacks = _this._eventCallbacks[eventType];\n var filteredCallbacks = callbacks.filter(c => c.toString() !== callback.toString());\n _this._eventCallbacks[eventType] = filteredCallbacks;\n }\n };\n }\n\n /**\n * Removes a previously added event listener for the specified event. The callback must\n * be the same object as the one passed to `addEventListener`.\n */\n removeEventListener(eventType, callback) {\n console.error(\"Linking.removeEventListener('\" + eventType + \"', ...): Method has been \" + 'deprecated. Please instead use `remove()` on the subscription ' + 'returned by `Linking.addEventListener`.');\n var callbacks = this._eventCallbacks[eventType];\n var filteredCallbacks = callbacks.filter(c => c.toString() !== callback.toString());\n this._eventCallbacks[eventType] = filteredCallbacks;\n }\n canOpenURL() {\n return Promise.resolve(true);\n }\n getInitialURL() {\n return Promise.resolve(initialURL);\n }\n\n /**\n * Try to open the given url in a secure fashion. The method returns a Promise object.\n * If a target is passed (including undefined) that target will be used, otherwise '_blank'.\n * If the url opens, the promise is resolved. If not, the promise is rejected.\n * Dispatches the `onOpen` event if `url` is opened successfully.\n */\n openURL(url, target) {\n if (arguments.length === 1) {\n target = '_blank';\n }\n try {\n open(url, target);\n this._dispatchEvent('onOpen', url);\n return Promise.resolve();\n } catch (e) {\n return Promise.reject(e);\n }\n }\n _validateURL(url) {\n invariant(typeof url === 'string', 'Invalid URL: should be a string. Was: ' + url);\n invariant(url, 'Invalid URL: cannot be empty');\n }\n}\nvar open = (url, target) => {\n if (canUseDOM) {\n var urlToOpen = new URL(url, window.location).toString();\n if (urlToOpen.indexOf('tel:') === 0) {\n window.location = urlToOpen;\n } else {\n window.open(urlToOpen, target, 'noopener');\n }\n }\n};\nexport default new Linking();","import PanResponder from '../../vendor/react-native/PanResponder';\nexport default PanResponder;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport InteractionManager from '../../../exports/InteractionManager';\nimport TouchHistoryMath from '../TouchHistoryMath';\nvar currentCentroidXOfTouchesChangedAfter = TouchHistoryMath.currentCentroidXOfTouchesChangedAfter;\nvar currentCentroidYOfTouchesChangedAfter = TouchHistoryMath.currentCentroidYOfTouchesChangedAfter;\nvar previousCentroidXOfTouchesChangedAfter = TouchHistoryMath.previousCentroidXOfTouchesChangedAfter;\nvar previousCentroidYOfTouchesChangedAfter = TouchHistoryMath.previousCentroidYOfTouchesChangedAfter;\nvar currentCentroidX = TouchHistoryMath.currentCentroidX;\nvar currentCentroidY = TouchHistoryMath.currentCentroidY;\n\n/**\n * `PanResponder` reconciles several touches into a single gesture. It makes\n * single-touch gestures resilient to extra touches, and can be used to\n * recognize simple multi-touch gestures.\n *\n * By default, `PanResponder` holds an `InteractionManager` handle to block\n * long-running JS events from interrupting active gestures.\n *\n * It provides a predictable wrapper of the responder handlers provided by the\n * [gesture responder system](docs/gesture-responder-system.html).\n * For each handler, it provides a new `gestureState` object alongside the\n * native event object:\n *\n * ```\n * onPanResponderMove: (event, gestureState) => {}\n * ```\n *\n * A native event is a synthetic touch event with the following form:\n *\n * - `nativeEvent`\n * + `changedTouches` - Array of all touch events that have changed since the last event\n * + `identifier` - The ID of the touch\n * + `locationX` - The X position of the touch, relative to the element\n * + `locationY` - The Y position of the touch, relative to the element\n * + `pageX` - The X position of the touch, relative to the root element\n * + `pageY` - The Y position of the touch, relative to the root element\n * + `target` - The node id of the element receiving the touch event\n * + `timestamp` - A time identifier for the touch, useful for velocity calculation\n * + `touches` - Array of all current touches on the screen\n *\n * A `gestureState` object has the following:\n *\n * - `stateID` - ID of the gestureState- persisted as long as there at least\n * one touch on screen\n * - `moveX` - the latest screen coordinates of the recently-moved touch\n * - `moveY` - the latest screen coordinates of the recently-moved touch\n * - `x0` - the screen coordinates of the responder grant\n * - `y0` - the screen coordinates of the responder grant\n * - `dx` - accumulated distance of the gesture since the touch started\n * - `dy` - accumulated distance of the gesture since the touch started\n * - `vx` - current velocity of the gesture\n * - `vy` - current velocity of the gesture\n * - `numberActiveTouches` - Number of touches currently on screen\n *\n * ### Basic Usage\n *\n * ```\n * componentWillMount: function() {\n * this._panResponder = PanResponder.create({\n * // Ask to be the responder:\n * onStartShouldSetPanResponder: (evt, gestureState) => true,\n * onStartShouldSetPanResponderCapture: (evt, gestureState) => true,\n * onMoveShouldSetPanResponder: (evt, gestureState) => true,\n * onMoveShouldSetPanResponderCapture: (evt, gestureState) => true,\n *\n * onPanResponderGrant: (evt, gestureState) => {\n * // The gesture has started. Show visual feedback so the user knows\n * // what is happening!\n *\n * // gestureState.d{x,y} will be set to zero now\n * },\n * onPanResponderMove: (evt, gestureState) => {\n * // The most recent move distance is gestureState.move{X,Y}\n *\n * // The accumulated gesture distance since becoming responder is\n * // gestureState.d{x,y}\n * },\n * onPanResponderTerminationRequest: (evt, gestureState) => true,\n * onPanResponderRelease: (evt, gestureState) => {\n * // The user has released all touches while this view is the\n * // responder. This typically means a gesture has succeeded\n * },\n * onPanResponderTerminate: (evt, gestureState) => {\n * // Another component has become the responder, so this gesture\n * // should be cancelled\n * },\n * onShouldBlockNativeResponder: (evt, gestureState) => {\n * // Returns whether this component should block native components from becoming the JS\n * // responder. Returns true by default. Is currently only supported on android.\n * return true;\n * },\n * });\n * },\n *\n * render: function() {\n * return (\n * \n * );\n * },\n *\n * ```\n *\n * ### Working Example\n *\n * To see it in action, try the\n * [PanResponder example in RNTester](https://github.com/facebook/react-native/blob/master/RNTester/js/PanResponderExample.js)\n */\n\nvar PanResponder = {\n /**\n *\n * A graphical explanation of the touch data flow:\n *\n * +----------------------------+ +--------------------------------+\n * | ResponderTouchHistoryStore | |TouchHistoryMath |\n * +----------------------------+ +----------+---------------------+\n * |Global store of touchHistory| |Allocation-less math util |\n * |including activeness, start | |on touch history (centroids |\n * |position, prev/cur position.| |and multitouch movement etc) |\n * | | | |\n * +----^-----------------------+ +----^---------------------------+\n * | |\n * | (records relevant history |\n * | of touches relevant for |\n * | implementing higher level |\n * | gestures) |\n * | |\n * +----+-----------------------+ +----|---------------------------+\n * | ResponderEventPlugin | | | Your App/Component |\n * +----------------------------+ +----|---------------------------+\n * |Negotiates which view gets | Low level | | High level |\n * |onResponderMove events. | events w/ | +-+-------+ events w/ |\n * |Also records history into | touchHistory| | Pan | multitouch + |\n * |ResponderTouchHistoryStore. +---------------->Responder+-----> accumulative|\n * +----------------------------+ attached to | | | distance and |\n * each event | +---------+ velocity. |\n * | |\n * | |\n * +--------------------------------+\n *\n *\n *\n * Gesture that calculates cumulative movement over time in a way that just\n * \"does the right thing\" for multiple touches. The \"right thing\" is very\n * nuanced. When moving two touches in opposite directions, the cumulative\n * distance is zero in each dimension. When two touches move in parallel five\n * pixels in the same direction, the cumulative distance is five, not ten. If\n * two touches start, one moves five in a direction, then stops and the other\n * touch moves fives in the same direction, the cumulative distance is ten.\n *\n * This logic requires a kind of processing of time \"clusters\" of touch events\n * so that two touch moves that essentially occur in parallel but move every\n * other frame respectively, are considered part of the same movement.\n *\n * Explanation of some of the non-obvious fields:\n *\n * - moveX/moveY: If no move event has been observed, then `(moveX, moveY)` is\n * invalid. If a move event has been observed, `(moveX, moveY)` is the\n * centroid of the most recently moved \"cluster\" of active touches.\n * (Currently all move have the same timeStamp, but later we should add some\n * threshold for what is considered to be \"moving\"). If a palm is\n * accidentally counted as a touch, but a finger is moving greatly, the palm\n * will move slightly, but we only want to count the single moving touch.\n * - x0/y0: Centroid location (non-cumulative) at the time of becoming\n * responder.\n * - dx/dy: Cumulative touch distance - not the same thing as sum of each touch\n * distance. Accounts for touch moves that are clustered together in time,\n * moving the same direction. Only valid when currently responder (otherwise,\n * it only represents the drag distance below the threshold).\n * - vx/vy: Velocity.\n */\n\n _initializeGestureState(gestureState) {\n gestureState.moveX = 0;\n gestureState.moveY = 0;\n gestureState.x0 = 0;\n gestureState.y0 = 0;\n gestureState.dx = 0;\n gestureState.dy = 0;\n gestureState.vx = 0;\n gestureState.vy = 0;\n gestureState.numberActiveTouches = 0;\n // All `gestureState` accounts for timeStamps up until:\n gestureState._accountsForMovesUpTo = 0;\n },\n /**\n * This is nuanced and is necessary. It is incorrect to continuously take all\n * active *and* recently moved touches, find the centroid, and track how that\n * result changes over time. Instead, we must take all recently moved\n * touches, and calculate how the centroid has changed just for those\n * recently moved touches, and append that change to an accumulator. This is\n * to (at least) handle the case where the user is moving three fingers, and\n * then one of the fingers stops but the other two continue.\n *\n * This is very different than taking all of the recently moved touches and\n * storing their centroid as `dx/dy`. For correctness, we must *accumulate\n * changes* in the centroid of recently moved touches.\n *\n * There is also some nuance with how we handle multiple moved touches in a\n * single event. With the way `ReactNativeEventEmitter` dispatches touches as\n * individual events, multiple touches generate two 'move' events, each of\n * them triggering `onResponderMove`. But with the way `PanResponder` works,\n * all of the gesture inference is performed on the first dispatch, since it\n * looks at all of the touches (even the ones for which there hasn't been a\n * native dispatch yet). Therefore, `PanResponder` does not call\n * `onResponderMove` passed the first dispatch. This diverges from the\n * typical responder callback pattern (without using `PanResponder`), but\n * avoids more dispatches than necessary.\n */\n _updateGestureStateOnMove(gestureState, touchHistory) {\n gestureState.numberActiveTouches = touchHistory.numberActiveTouches;\n gestureState.moveX = currentCentroidXOfTouchesChangedAfter(touchHistory, gestureState._accountsForMovesUpTo);\n gestureState.moveY = currentCentroidYOfTouchesChangedAfter(touchHistory, gestureState._accountsForMovesUpTo);\n var movedAfter = gestureState._accountsForMovesUpTo;\n var prevX = previousCentroidXOfTouchesChangedAfter(touchHistory, movedAfter);\n var x = currentCentroidXOfTouchesChangedAfter(touchHistory, movedAfter);\n var prevY = previousCentroidYOfTouchesChangedAfter(touchHistory, movedAfter);\n var y = currentCentroidYOfTouchesChangedAfter(touchHistory, movedAfter);\n var nextDX = gestureState.dx + (x - prevX);\n var nextDY = gestureState.dy + (y - prevY);\n\n // TODO: This must be filtered intelligently.\n var dt = touchHistory.mostRecentTimeStamp - gestureState._accountsForMovesUpTo;\n gestureState.vx = (nextDX - gestureState.dx) / dt;\n gestureState.vy = (nextDY - gestureState.dy) / dt;\n gestureState.dx = nextDX;\n gestureState.dy = nextDY;\n gestureState._accountsForMovesUpTo = touchHistory.mostRecentTimeStamp;\n },\n /**\n * @param {object} config Enhanced versions of all of the responder callbacks\n * that provide not only the typical `ResponderSyntheticEvent`, but also the\n * `PanResponder` gesture state. Simply replace the word `Responder` with\n * `PanResponder` in each of the typical `onResponder*` callbacks. For\n * example, the `config` object would look like:\n *\n * - `onMoveShouldSetPanResponder: (e, gestureState) => {...}`\n * - `onMoveShouldSetPanResponderCapture: (e, gestureState) => {...}`\n * - `onStartShouldSetPanResponder: (e, gestureState) => {...}`\n * - `onStartShouldSetPanResponderCapture: (e, gestureState) => {...}`\n * - `onPanResponderReject: (e, gestureState) => {...}`\n * - `onPanResponderGrant: (e, gestureState) => {...}`\n * - `onPanResponderStart: (e, gestureState) => {...}`\n * - `onPanResponderEnd: (e, gestureState) => {...}`\n * - `onPanResponderRelease: (e, gestureState) => {...}`\n * - `onPanResponderMove: (e, gestureState) => {...}`\n * - `onPanResponderTerminate: (e, gestureState) => {...}`\n * - `onPanResponderTerminationRequest: (e, gestureState) => {...}`\n * - `onShouldBlockNativeResponder: (e, gestureState) => {...}`\n *\n * In general, for events that have capture equivalents, we update the\n * gestureState once in the capture phase and can use it in the bubble phase\n * as well.\n *\n * Be careful with onStartShould* callbacks. They only reflect updated\n * `gestureState` for start/end events that bubble/capture to the Node.\n * Once the node is the responder, you can rely on every start/end event\n * being processed by the gesture and `gestureState` being updated\n * accordingly. (numberActiveTouches) may not be totally accurate unless you\n * are the responder.\n */\n create(config) {\n var interactionState = {\n handle: null,\n shouldCancelClick: false,\n timeout: null\n };\n var gestureState = {\n // Useful for debugging\n stateID: Math.random(),\n moveX: 0,\n moveY: 0,\n x0: 0,\n y0: 0,\n dx: 0,\n dy: 0,\n vx: 0,\n vy: 0,\n numberActiveTouches: 0,\n _accountsForMovesUpTo: 0\n };\n var panHandlers = {\n onStartShouldSetResponder(event) {\n return config.onStartShouldSetPanResponder == null ? false : config.onStartShouldSetPanResponder(event, gestureState);\n },\n onMoveShouldSetResponder(event) {\n return config.onMoveShouldSetPanResponder == null ? false : config.onMoveShouldSetPanResponder(event, gestureState);\n },\n onStartShouldSetResponderCapture(event) {\n // TODO: Actually, we should reinitialize the state any time\n // touches.length increases from 0 active to > 0 active.\n if (event.nativeEvent.touches.length === 1) {\n PanResponder._initializeGestureState(gestureState);\n }\n gestureState.numberActiveTouches = event.touchHistory.numberActiveTouches;\n return config.onStartShouldSetPanResponderCapture != null ? config.onStartShouldSetPanResponderCapture(event, gestureState) : false;\n },\n onMoveShouldSetResponderCapture(event) {\n var touchHistory = event.touchHistory;\n // Responder system incorrectly dispatches should* to current responder\n // Filter out any touch moves past the first one - we would have\n // already processed multi-touch geometry during the first event.\n if (gestureState._accountsForMovesUpTo === touchHistory.mostRecentTimeStamp) {\n return false;\n }\n PanResponder._updateGestureStateOnMove(gestureState, touchHistory);\n return config.onMoveShouldSetPanResponderCapture ? config.onMoveShouldSetPanResponderCapture(event, gestureState) : false;\n },\n onResponderGrant(event) {\n if (!interactionState.handle) {\n interactionState.handle = InteractionManager.createInteractionHandle();\n }\n if (interactionState.timeout) {\n clearInteractionTimeout(interactionState);\n }\n interactionState.shouldCancelClick = true;\n gestureState.x0 = currentCentroidX(event.touchHistory);\n gestureState.y0 = currentCentroidY(event.touchHistory);\n gestureState.dx = 0;\n gestureState.dy = 0;\n if (config.onPanResponderGrant) {\n config.onPanResponderGrant(event, gestureState);\n }\n // TODO: t7467124 investigate if this can be removed\n return config.onShouldBlockNativeResponder == null ? true : config.onShouldBlockNativeResponder(event, gestureState);\n },\n onResponderReject(event) {\n clearInteractionHandle(interactionState, config.onPanResponderReject, event, gestureState);\n },\n onResponderRelease(event) {\n clearInteractionHandle(interactionState, config.onPanResponderRelease, event, gestureState);\n setInteractionTimeout(interactionState);\n PanResponder._initializeGestureState(gestureState);\n },\n onResponderStart(event) {\n var touchHistory = event.touchHistory;\n gestureState.numberActiveTouches = touchHistory.numberActiveTouches;\n if (config.onPanResponderStart) {\n config.onPanResponderStart(event, gestureState);\n }\n },\n onResponderMove(event) {\n var touchHistory = event.touchHistory;\n // Guard against the dispatch of two touch moves when there are two\n // simultaneously changed touches.\n if (gestureState._accountsForMovesUpTo === touchHistory.mostRecentTimeStamp) {\n return;\n }\n // Filter out any touch moves past the first one - we would have\n // already processed multi-touch geometry during the first event.\n PanResponder._updateGestureStateOnMove(gestureState, touchHistory);\n if (config.onPanResponderMove) {\n config.onPanResponderMove(event, gestureState);\n }\n },\n onResponderEnd(event) {\n var touchHistory = event.touchHistory;\n gestureState.numberActiveTouches = touchHistory.numberActiveTouches;\n clearInteractionHandle(interactionState, config.onPanResponderEnd, event, gestureState);\n },\n onResponderTerminate(event) {\n clearInteractionHandle(interactionState, config.onPanResponderTerminate, event, gestureState);\n setInteractionTimeout(interactionState);\n PanResponder._initializeGestureState(gestureState);\n },\n onResponderTerminationRequest(event) {\n return config.onPanResponderTerminationRequest == null ? true : config.onPanResponderTerminationRequest(event, gestureState);\n },\n // We do not want to trigger 'click' activated gestures or native behaviors\n // on any pan target that is under a mouse cursor when it is released.\n // Browsers will natively cancel 'click' events on a target if a non-mouse\n // active pointer moves.\n onClickCapture: event => {\n if (interactionState.shouldCancelClick === true) {\n event.stopPropagation();\n event.preventDefault();\n }\n }\n };\n return {\n panHandlers,\n getInteractionHandle() {\n return interactionState.handle;\n }\n };\n }\n};\nfunction clearInteractionHandle(interactionState, callback, event, gestureState) {\n if (interactionState.handle) {\n InteractionManager.clearInteractionHandle(interactionState.handle);\n interactionState.handle = null;\n }\n if (callback) {\n callback(event, gestureState);\n }\n}\nfunction clearInteractionTimeout(interactionState) {\n clearTimeout(interactionState.timeout);\n}\nfunction setInteractionTimeout(interactionState) {\n interactionState.timeout = setTimeout(() => {\n interactionState.shouldCancelClick = false;\n }, 250);\n}\nexport default PanResponder;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nvar TouchHistoryMath = {\n /**\n * This code is optimized and not intended to look beautiful. This allows\n * computing of touch centroids that have moved after `touchesChangedAfter`\n * timeStamp. You can compute the current centroid involving all touches\n * moves after `touchesChangedAfter`, or you can compute the previous\n * centroid of all touches that were moved after `touchesChangedAfter`.\n *\n * @param {TouchHistoryMath} touchHistory Standard Responder touch track\n * data.\n * @param {number} touchesChangedAfter timeStamp after which moved touches\n * are considered \"actively moving\" - not just \"active\".\n * @param {boolean} isXAxis Consider `x` dimension vs. `y` dimension.\n * @param {boolean} ofCurrent Compute current centroid for actively moving\n * touches vs. previous centroid of now actively moving touches.\n * @return {number} value of centroid in specified dimension.\n */\n centroidDimension: function centroidDimension(touchHistory, touchesChangedAfter, isXAxis, ofCurrent) {\n var touchBank = touchHistory.touchBank;\n var total = 0;\n var count = 0;\n var oneTouchData = touchHistory.numberActiveTouches === 1 ? touchHistory.touchBank[touchHistory.indexOfSingleActiveTouch] : null;\n if (oneTouchData !== null) {\n if (oneTouchData.touchActive && oneTouchData.currentTimeStamp > touchesChangedAfter) {\n total += ofCurrent && isXAxis ? oneTouchData.currentPageX : ofCurrent && !isXAxis ? oneTouchData.currentPageY : !ofCurrent && isXAxis ? oneTouchData.previousPageX : oneTouchData.previousPageY;\n count = 1;\n }\n } else {\n for (var i = 0; i < touchBank.length; i++) {\n var touchTrack = touchBank[i];\n if (touchTrack !== null && touchTrack !== undefined && touchTrack.touchActive && touchTrack.currentTimeStamp >= touchesChangedAfter) {\n var toAdd = void 0; // Yuck, program temporarily in invalid state.\n if (ofCurrent && isXAxis) {\n toAdd = touchTrack.currentPageX;\n } else if (ofCurrent && !isXAxis) {\n toAdd = touchTrack.currentPageY;\n } else if (!ofCurrent && isXAxis) {\n toAdd = touchTrack.previousPageX;\n } else {\n toAdd = touchTrack.previousPageY;\n }\n total += toAdd;\n count++;\n }\n }\n }\n return count > 0 ? total / count : TouchHistoryMath.noCentroid;\n },\n currentCentroidXOfTouchesChangedAfter: function currentCentroidXOfTouchesChangedAfter(touchHistory, touchesChangedAfter) {\n return TouchHistoryMath.centroidDimension(touchHistory, touchesChangedAfter, true,\n // isXAxis\n true // ofCurrent\n );\n },\n\n currentCentroidYOfTouchesChangedAfter: function currentCentroidYOfTouchesChangedAfter(touchHistory, touchesChangedAfter) {\n return TouchHistoryMath.centroidDimension(touchHistory, touchesChangedAfter, false,\n // isXAxis\n true // ofCurrent\n );\n },\n\n previousCentroidXOfTouchesChangedAfter: function previousCentroidXOfTouchesChangedAfter(touchHistory, touchesChangedAfter) {\n return TouchHistoryMath.centroidDimension(touchHistory, touchesChangedAfter, true,\n // isXAxis\n false // ofCurrent\n );\n },\n\n previousCentroidYOfTouchesChangedAfter: function previousCentroidYOfTouchesChangedAfter(touchHistory, touchesChangedAfter) {\n return TouchHistoryMath.centroidDimension(touchHistory, touchesChangedAfter, false,\n // isXAxis\n false // ofCurrent\n );\n },\n\n currentCentroidX: function currentCentroidX(touchHistory) {\n return TouchHistoryMath.centroidDimension(touchHistory, 0,\n // touchesChangedAfter\n true,\n // isXAxis\n true // ofCurrent\n );\n },\n\n currentCentroidY: function currentCentroidY(touchHistory) {\n return TouchHistoryMath.centroidDimension(touchHistory, 0,\n // touchesChangedAfter\n false,\n // isXAxis\n true // ofCurrent\n );\n },\n\n noCentroid: -1\n};\nexport default TouchHistoryMath;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport invariant from 'fbjs/lib/invariant';\nclass Share {\n static share(content, options) {\n if (options === void 0) {\n options = {};\n }\n invariant(typeof content === 'object' && content !== null, 'Content to share must be a valid object');\n invariant(typeof content.url === 'string' || typeof content.message === 'string', 'At least one of URL and message is required');\n invariant(typeof options === 'object' && options !== null, 'Options must be a valid object');\n invariant(!content.title || typeof content.title === 'string', 'Invalid title: title should be a string.');\n if (window.navigator.share !== undefined) {\n return window.navigator.share({\n title: content.title,\n text: content.message,\n url: content.url\n });\n } else {\n return Promise.reject(new Error('Share is not supported in this browser'));\n }\n }\n\n /**\n * The content was successfully shared.\n */\n static get sharedAction() {\n return 'sharedAction';\n }\n\n /**\n * The dialog has been dismissed.\n * @platform ios\n */\n static get dismissedAction() {\n return 'dismissedAction';\n }\n}\nexport default Share;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar vibrate = pattern => {\n if ('vibrate' in window.navigator) {\n window.navigator.vibrate(pattern);\n }\n};\nvar Vibration = {\n cancel() {\n vibrate(0);\n },\n vibrate(pattern) {\n if (pattern === void 0) {\n pattern = 400;\n }\n vibrate(pattern);\n }\n};\nexport default Vibration;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport TouchableOpacity from '../TouchableOpacity';\nimport Text from '../Text';\nimport { warnOnce } from '../../modules/warnOnce';\nvar Button = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n warnOnce('Button', 'Button is deprecated. Please use Pressable.');\n var accessibilityLabel = props.accessibilityLabel,\n color = props.color,\n disabled = props.disabled,\n onPress = props.onPress,\n testID = props.testID,\n title = props.title;\n return /*#__PURE__*/React.createElement(TouchableOpacity, {\n accessibilityLabel: accessibilityLabel,\n accessibilityRole: \"button\",\n disabled: disabled,\n focusable: !disabled,\n onPress: onPress,\n ref: forwardedRef,\n style: [styles.button, color && {\n backgroundColor: color\n }, disabled && styles.buttonDisabled],\n testID: testID\n }, /*#__PURE__*/React.createElement(Text, {\n style: [styles.text, disabled && styles.textDisabled]\n }, title));\n});\nButton.displayName = 'Button';\nvar styles = StyleSheet.create({\n button: {\n backgroundColor: '#2196F3',\n borderRadius: 2\n },\n text: {\n color: '#fff',\n fontWeight: '500',\n padding: 8,\n textAlign: 'center',\n textTransform: 'uppercase'\n },\n buttonDisabled: {\n backgroundColor: '#dfdfdf'\n },\n textDisabled: {\n color: '#a1a1a1'\n }\n});\nexport default Button;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"aria-readonly\", \"color\", \"disabled\", \"onChange\", \"onValueChange\", \"readOnly\", \"style\", \"value\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nvar CheckBox = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n var ariaReadOnly = props['aria-readonly'],\n color = props.color,\n disabled = props.disabled,\n onChange = props.onChange,\n onValueChange = props.onValueChange,\n readOnly = props.readOnly,\n style = props.style,\n value = props.value,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n function handleChange(event) {\n var value = event.nativeEvent.target.checked;\n event.nativeEvent.value = value;\n onChange && onChange(event);\n onValueChange && onValueChange(value);\n }\n var fakeControl = /*#__PURE__*/React.createElement(View, {\n style: [styles.fakeControl, value && styles.fakeControlChecked,\n // custom color\n value && color && {\n backgroundColor: color,\n borderColor: color\n }, disabled && styles.fakeControlDisabled, value && disabled && styles.fakeControlCheckedAndDisabled]\n });\n var nativeControl = createElement('input', {\n checked: value,\n disabled: disabled,\n onChange: handleChange,\n readOnly: readOnly === true || ariaReadOnly === true || other.accessibilityReadOnly === true,\n ref: forwardedRef,\n style: [styles.nativeControl, styles.cursorInherit],\n type: 'checkbox'\n });\n return /*#__PURE__*/React.createElement(View, _extends({}, other, {\n \"aria-disabled\": disabled,\n \"aria-readonly\": ariaReadOnly,\n style: [styles.root, style, disabled && styles.cursorDefault]\n }), fakeControl, nativeControl);\n});\nCheckBox.displayName = 'CheckBox';\nvar styles = StyleSheet.create({\n root: {\n cursor: 'pointer',\n height: 16,\n userSelect: 'none',\n width: 16\n },\n cursorDefault: {\n cursor: 'default'\n },\n cursorInherit: {\n cursor: 'inherit'\n },\n fakeControl: {\n alignItems: 'center',\n backgroundColor: '#fff',\n borderColor: '#657786',\n borderRadius: 2,\n borderStyle: 'solid',\n borderWidth: 2,\n height: '100%',\n justifyContent: 'center',\n width: '100%'\n },\n fakeControlChecked: {\n backgroundColor: '#009688',\n backgroundImage: 'url(\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K\")',\n backgroundRepeat: 'no-repeat',\n borderColor: '#009688'\n },\n fakeControlDisabled: {\n borderColor: '#CCD6DD'\n },\n fakeControlCheckedAndDisabled: {\n backgroundColor: '#AAB8C2',\n borderColor: '#AAB8C2'\n },\n nativeControl: _objectSpread(_objectSpread({}, StyleSheet.absoluteFillObject), {}, {\n height: '100%',\n margin: 0,\n appearance: 'none',\n padding: 0,\n width: '100%'\n })\n});\nexport default CheckBox;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"children\", \"style\", \"imageStyle\", \"imageRef\"];\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport { forwardRef } from 'react';\nimport Image from '../Image';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nvar emptyObject = {};\n\n/**\n * Very simple drop-in replacement for which supports nesting views.\n */\nvar ImageBackground = /*#__PURE__*/forwardRef((props, forwardedRef) => {\n var children = props.children,\n _props$style = props.style,\n style = _props$style === void 0 ? emptyObject : _props$style,\n imageStyle = props.imageStyle,\n imageRef = props.imageRef,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n var _StyleSheet$flatten = StyleSheet.flatten(style),\n height = _StyleSheet$flatten.height,\n width = _StyleSheet$flatten.width;\n return /*#__PURE__*/React.createElement(View, {\n ref: forwardedRef,\n style: style\n }, /*#__PURE__*/React.createElement(Image, _extends({}, rest, {\n ref: imageRef,\n style: [{\n // Temporary Workaround:\n // Current (imperfect yet) implementation of overwrites width and height styles\n // (which is not quite correct), and these styles conflict with explicitly set styles\n // of and with our internal layout model here.\n // So, we have to proxy/reapply these styles explicitly for actual component.\n // This workaround should be removed after implementing proper support of\n // intrinsic content size of the .\n width,\n height,\n zIndex: -1\n }, StyleSheet.absoluteFill, imageStyle]\n })), children);\n});\nImageBackground.displayName = 'ImageBackground';\nexport default ImageBackground;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"behavior\", \"contentContainerStyle\", \"keyboardVerticalOffset\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport View from '../View';\nclass KeyboardAvoidingView extends React.Component {\n constructor() {\n super(...arguments);\n this.frame = null;\n this.onLayout = event => {\n this.frame = event.nativeEvent.layout;\n };\n }\n relativeKeyboardHeight(keyboardFrame) {\n var frame = this.frame;\n if (!frame || !keyboardFrame) {\n return 0;\n }\n var keyboardY = keyboardFrame.screenY - (this.props.keyboardVerticalOffset || 0);\n return Math.max(frame.y + frame.height - keyboardY, 0);\n }\n onKeyboardChange(event) {}\n render() {\n var _this$props = this.props,\n behavior = _this$props.behavior,\n contentContainerStyle = _this$props.contentContainerStyle,\n keyboardVerticalOffset = _this$props.keyboardVerticalOffset,\n rest = _objectWithoutPropertiesLoose(_this$props, _excluded);\n return /*#__PURE__*/React.createElement(View, _extends({\n onLayout: this.onLayout\n }, rest));\n }\n}\nexport default KeyboardAvoidingView;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"animationType\", \"children\", \"onDismiss\", \"onRequestClose\", \"onShow\", \"transparent\", \"visible\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport ModalPortal from './ModalPortal';\nimport ModalAnimation from './ModalAnimation';\nimport ModalContent from './ModalContent';\nimport ModalFocusTrap from './ModalFocusTrap';\nvar uniqueModalIdentifier = 0;\nvar activeModalStack = [];\nvar activeModalListeners = {};\nfunction notifyActiveModalListeners() {\n if (activeModalStack.length === 0) {\n return;\n }\n var activeModalId = activeModalStack[activeModalStack.length - 1];\n activeModalStack.forEach(modalId => {\n if (modalId in activeModalListeners) {\n activeModalListeners[modalId](modalId === activeModalId);\n }\n });\n}\nfunction removeActiveModal(modalId) {\n if (modalId in activeModalListeners) {\n // Before removing this listener we should probably tell it\n // that it's no longer the active modal for sure.\n activeModalListeners[modalId](false);\n delete activeModalListeners[modalId];\n }\n var index = activeModalStack.indexOf(modalId);\n if (index !== -1) {\n activeModalStack.splice(index, 1);\n notifyActiveModalListeners();\n }\n}\nfunction addActiveModal(modalId, listener) {\n removeActiveModal(modalId);\n activeModalStack.push(modalId);\n activeModalListeners[modalId] = listener;\n notifyActiveModalListeners();\n}\nvar Modal = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n var animationType = props.animationType,\n children = props.children,\n onDismiss = props.onDismiss,\n onRequestClose = props.onRequestClose,\n onShow = props.onShow,\n transparent = props.transparent,\n _props$visible = props.visible,\n visible = _props$visible === void 0 ? true : _props$visible,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n\n // Set a unique model identifier so we can correctly route\n // dismissals and check the layering of modals.\n var modalId = React.useMemo(() => uniqueModalIdentifier++, []);\n var _React$useState = React.useState(false),\n isActive = _React$useState[0],\n setIsActive = _React$useState[1];\n var onDismissCallback = React.useCallback(() => {\n removeActiveModal(modalId);\n if (onDismiss) {\n onDismiss();\n }\n }, [modalId, onDismiss]);\n var onShowCallback = React.useCallback(() => {\n addActiveModal(modalId, setIsActive);\n if (onShow) {\n onShow();\n }\n }, [modalId, onShow]);\n React.useEffect(() => {\n return () => removeActiveModal(modalId);\n }, [modalId]);\n return /*#__PURE__*/React.createElement(ModalPortal, null, /*#__PURE__*/React.createElement(ModalAnimation, {\n animationType: animationType,\n onDismiss: onDismissCallback,\n onShow: onShowCallback,\n visible: visible\n }, /*#__PURE__*/React.createElement(ModalFocusTrap, {\n active: isActive\n }, /*#__PURE__*/React.createElement(ModalContent, _extends({}, rest, {\n active: isActive,\n onRequestClose: onRequestClose,\n ref: forwardedRef,\n transparent: transparent\n }), children))));\n});\nexport default Modal;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport canUseDOM from '../../modules/canUseDom';\nfunction ModalPortal(props) {\n var children = props.children;\n var elementRef = React.useRef(null);\n if (canUseDOM && !elementRef.current) {\n var element = document.createElement('div');\n if (element && document.body) {\n document.body.appendChild(element);\n elementRef.current = element;\n }\n }\n React.useEffect(() => {\n if (canUseDOM) {\n return () => {\n if (document.body && elementRef.current) {\n document.body.removeChild(elementRef.current);\n elementRef.current = null;\n }\n };\n }\n }, []);\n return elementRef.current && canUseDOM ? /*#__PURE__*/ReactDOM.createPortal(children, elementRef.current) : null;\n}\nexport default ModalPortal;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport createElement from '../createElement';\nvar ANIMATION_DURATION = 300;\nfunction getAnimationStyle(animationType, visible) {\n if (animationType === 'slide') {\n return visible ? animatedSlideInStyles : animatedSlideOutStyles;\n }\n if (animationType === 'fade') {\n return visible ? animatedFadeInStyles : animatedFadeOutStyles;\n }\n return visible ? styles.container : styles.hidden;\n}\nfunction ModalAnimation(props) {\n var animationType = props.animationType,\n children = props.children,\n onDismiss = props.onDismiss,\n onShow = props.onShow,\n visible = props.visible;\n var _React$useState = React.useState(false),\n isRendering = _React$useState[0],\n setIsRendering = _React$useState[1];\n var wasVisible = React.useRef(false);\n var wasRendering = React.useRef(false);\n var isAnimated = animationType && animationType !== 'none';\n var animationEndCallback = React.useCallback(e => {\n if (e && e.currentTarget !== e.target) {\n // If the event was generated for something NOT this element we\n // should ignore it as it's not relevant to us\n return;\n }\n if (visible) {\n if (onShow) {\n onShow();\n }\n } else {\n setIsRendering(false);\n }\n }, [onShow, visible]);\n React.useEffect(() => {\n if (wasRendering.current && !isRendering && onDismiss) {\n onDismiss();\n }\n wasRendering.current = isRendering;\n }, [isRendering, onDismiss]);\n React.useEffect(() => {\n if (visible) {\n setIsRendering(true);\n }\n if (visible !== wasVisible.current && !isAnimated) {\n // Manually call `animationEndCallback` if no animation is used\n animationEndCallback();\n }\n wasVisible.current = visible;\n }, [isAnimated, visible, animationEndCallback]);\n return isRendering || visible ? createElement('div', {\n style: isRendering ? getAnimationStyle(animationType, visible) : styles.hidden,\n onAnimationEnd: animationEndCallback,\n children\n }) : null;\n}\nvar styles = StyleSheet.create({\n container: {\n position: 'fixed',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n zIndex: 9999\n },\n animatedIn: {\n animationDuration: ANIMATION_DURATION + \"ms\",\n animationTimingFunction: 'ease-in'\n },\n animatedOut: {\n pointerEvents: 'none',\n animationDuration: ANIMATION_DURATION + \"ms\",\n animationTimingFunction: 'ease-out'\n },\n fadeIn: {\n opacity: 1,\n animationKeyframes: {\n '0%': {\n opacity: 0\n },\n '100%': {\n opacity: 1\n }\n }\n },\n fadeOut: {\n opacity: 0,\n animationKeyframes: {\n '0%': {\n opacity: 1\n },\n '100%': {\n opacity: 0\n }\n }\n },\n slideIn: {\n transform: 'translateY(0%)',\n animationKeyframes: {\n '0%': {\n transform: 'translateY(100%)'\n },\n '100%': {\n transform: 'translateY(0%)'\n }\n }\n },\n slideOut: {\n transform: 'translateY(100%)',\n animationKeyframes: {\n '0%': {\n transform: 'translateY(0%)'\n },\n '100%': {\n transform: 'translateY(100%)'\n }\n }\n },\n hidden: {\n opacity: 0\n }\n});\nvar animatedSlideInStyles = [styles.container, styles.animatedIn, styles.slideIn];\nvar animatedSlideOutStyles = [styles.container, styles.animatedOut, styles.slideOut];\nvar animatedFadeInStyles = [styles.container, styles.animatedIn, styles.fadeIn];\nvar animatedFadeOutStyles = [styles.container, styles.animatedOut, styles.fadeOut];\nexport default ModalAnimation;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"active\", \"children\", \"onRequestClose\", \"transparent\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport View from '../View';\nimport StyleSheet from '../StyleSheet';\nimport canUseDOM from '../../modules/canUseDom';\nvar ModalContent = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n var active = props.active,\n children = props.children,\n onRequestClose = props.onRequestClose,\n transparent = props.transparent,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n React.useEffect(() => {\n if (canUseDOM) {\n var closeOnEscape = e => {\n if (active && e.key === 'Escape') {\n e.stopPropagation();\n if (onRequestClose) {\n onRequestClose();\n }\n }\n };\n document.addEventListener('keyup', closeOnEscape, false);\n return () => document.removeEventListener('keyup', closeOnEscape, false);\n }\n }, [active, onRequestClose]);\n var style = React.useMemo(() => {\n return [styles.modal, transparent ? styles.modalTransparent : styles.modalOpaque];\n }, [transparent]);\n return /*#__PURE__*/React.createElement(View, _extends({}, rest, {\n \"aria-modal\": true,\n ref: forwardedRef,\n role: active ? 'dialog' : null,\n style: style\n }), /*#__PURE__*/React.createElement(View, {\n style: styles.container\n }, children));\n});\nvar styles = StyleSheet.create({\n modal: {\n position: 'fixed',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n },\n modalTransparent: {\n backgroundColor: 'transparent'\n },\n modalOpaque: {\n backgroundColor: 'white'\n },\n container: {\n top: 0,\n flex: 1\n }\n});\nexport default ModalContent;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport View from '../View';\nimport createElement from '../createElement';\nimport StyleSheet from '../StyleSheet';\nimport UIManager from '../UIManager';\nimport canUseDOM from '../../modules/canUseDom';\n\n/**\n * This Component is used to \"wrap\" the modal we're opening\n * so that changing focus via tab will never leave the document.\n *\n * This allows us to properly trap the focus within a modal\n * even if the modal is at the start or end of a document.\n */\n\nvar FocusBracket = () => {\n return createElement('div', {\n role: 'none',\n tabIndex: 0,\n style: styles.focusBracket\n });\n};\nfunction attemptFocus(element) {\n if (!canUseDOM) {\n return false;\n }\n try {\n element.focus();\n } catch (e) {\n // Do nothing\n }\n return document.activeElement === element;\n}\nfunction focusFirstDescendant(element) {\n for (var i = 0; i < element.childNodes.length; i++) {\n var child = element.childNodes[i];\n if (attemptFocus(child) || focusFirstDescendant(child)) {\n return true;\n }\n }\n return false;\n}\nfunction focusLastDescendant(element) {\n for (var i = element.childNodes.length - 1; i >= 0; i--) {\n var child = element.childNodes[i];\n if (attemptFocus(child) || focusLastDescendant(child)) {\n return true;\n }\n }\n return false;\n}\nvar ModalFocusTrap = _ref => {\n var active = _ref.active,\n children = _ref.children;\n var trapElementRef = React.useRef();\n var focusRef = React.useRef({\n trapFocusInProgress: false,\n lastFocusedElement: null\n });\n React.useEffect(() => {\n if (canUseDOM) {\n var trapFocus = () => {\n // We should not trap focus if:\n // - The modal hasn't fully initialized with an HTMLElement ref\n // - Focus is already in the process of being trapped (e.g., we're refocusing)\n // - isTrapActive prop being falsey tells us to do nothing\n if (trapElementRef.current == null || focusRef.current.trapFocusInProgress || !active) {\n return;\n }\n try {\n focusRef.current.trapFocusInProgress = true;\n if (document.activeElement instanceof Node && !trapElementRef.current.contains(document.activeElement)) {\n // To handle keyboard focusing we can make an assumption here.\n // If you're tabbing through the focusable elements, the previously\n // active element will either be the first or the last.\n // If the previously selected element is the \"first\" descendant\n // and we're leaving it - this means that we should be looping\n // around to the other side of the modal.\n var hasFocused = focusFirstDescendant(trapElementRef.current);\n if (focusRef.current.lastFocusedElement === document.activeElement) {\n hasFocused = focusLastDescendant(trapElementRef.current);\n }\n // If we couldn't focus a new element then we need to focus onto the trap target\n if (!hasFocused && trapElementRef.current != null && document.activeElement) {\n UIManager.focus(trapElementRef.current);\n }\n }\n } finally {\n focusRef.current.trapFocusInProgress = false;\n }\n focusRef.current.lastFocusedElement = document.activeElement;\n };\n\n // Call the trapFocus callback at least once when this modal has been activated.\n trapFocus();\n document.addEventListener('focus', trapFocus, true);\n return () => document.removeEventListener('focus', trapFocus, true);\n }\n }, [active]);\n\n // To be fully compliant with WCAG we need to refocus element that triggered opening modal\n // after closing it\n React.useEffect(function () {\n if (canUseDOM) {\n var lastFocusedElementOutsideTrap = document.activeElement;\n return function () {\n if (lastFocusedElementOutsideTrap && document.contains(lastFocusedElementOutsideTrap)) {\n UIManager.focus(lastFocusedElementOutsideTrap);\n }\n };\n }\n }, []);\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FocusBracket, null), /*#__PURE__*/React.createElement(View, {\n ref: trapElementRef\n }, children), /*#__PURE__*/React.createElement(FocusBracket, null));\n};\nexport default ModalFocusTrap;\nvar styles = StyleSheet.create({\n focusBracket: {\n outlineStyle: 'none'\n }\n});","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"children\", \"enabled\", \"onValueChange\", \"selectedValue\", \"style\", \"testID\", \"itemStyle\", \"mode\", \"prompt\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePlatformMethods from '../../modules/usePlatformMethods';\nimport PickerItem from './PickerItem';\nimport StyleSheet from '../StyleSheet';\nvar Picker = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n var children = props.children,\n enabled = props.enabled,\n onValueChange = props.onValueChange,\n selectedValue = props.selectedValue,\n style = props.style,\n testID = props.testID,\n itemStyle = props.itemStyle,\n mode = props.mode,\n prompt = props.prompt,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var hostRef = React.useRef(null);\n function handleChange(e) {\n var _e$target = e.target,\n selectedIndex = _e$target.selectedIndex,\n value = _e$target.value;\n if (onValueChange) {\n onValueChange(value, selectedIndex);\n }\n }\n\n // $FlowFixMe\n var supportedProps = _objectSpread({\n children,\n disabled: enabled === false ? true : undefined,\n onChange: handleChange,\n style: [styles.initial, style],\n testID,\n value: selectedValue\n }, other);\n var platformMethodsRef = usePlatformMethods(supportedProps);\n var setRef = useMergeRefs(hostRef, platformMethodsRef, forwardedRef);\n supportedProps.ref = setRef;\n return createElement('select', supportedProps);\n});\n\n// $FlowFixMe\nPicker.Item = PickerItem;\nvar styles = StyleSheet.create({\n initial: {\n fontFamily: 'System',\n fontSize: 'inherit',\n margin: 0\n }\n});\nexport default Picker;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport createElement from '../createElement';\nexport default function PickerItem(props) {\n var color = props.color,\n label = props.label,\n testID = props.testID,\n value = props.value;\n var style = {\n color\n };\n return createElement('option', {\n children: label,\n style,\n testID,\n value\n });\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"color\", \"indeterminate\", \"progress\", \"trackColor\", \"style\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nvar ProgressBar = /*#__PURE__*/React.forwardRef((props, ref) => {\n var _props$color = props.color,\n color = _props$color === void 0 ? '#1976D2' : _props$color,\n _props$indeterminate = props.indeterminate,\n indeterminate = _props$indeterminate === void 0 ? false : _props$indeterminate,\n _props$progress = props.progress,\n progress = _props$progress === void 0 ? 0 : _props$progress,\n _props$trackColor = props.trackColor,\n trackColor = _props$trackColor === void 0 ? 'transparent' : _props$trackColor,\n style = props.style,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var percentageProgress = progress * 100;\n var width = indeterminate ? '25%' : percentageProgress + \"%\";\n return /*#__PURE__*/React.createElement(View, _extends({}, other, {\n \"aria-valuemax\": 100,\n \"aria-valuemin\": 0,\n \"aria-valuenow\": indeterminate ? null : percentageProgress,\n ref: ref,\n role: \"progressbar\",\n style: [styles.track, style, {\n backgroundColor: trackColor\n }]\n }), /*#__PURE__*/React.createElement(View, {\n style: [{\n backgroundColor: color,\n width\n }, styles.progress, indeterminate && styles.animation]\n }));\n});\nProgressBar.displayName = 'ProgressBar';\nvar styles = StyleSheet.create({\n track: {\n forcedColorAdjust: 'none',\n height: 5,\n overflow: 'hidden',\n userSelect: 'none',\n zIndex: 0\n },\n progress: {\n forcedColorAdjust: 'none',\n height: '100%',\n zIndex: -1\n },\n animation: {\n animationDuration: '1s',\n animationKeyframes: [{\n '0%': {\n transform: 'translateX(-100%)'\n },\n '100%': {\n transform: 'translateX(400%)'\n }\n }],\n animationTimingFunction: 'linear',\n animationIterationCount: 'infinite'\n }\n});\nexport default ProgressBar;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"style\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nimport canUseDOM from '../../modules/canUseDom';\nvar cssFunction = function () {\n if (canUseDOM && window.CSS && window.CSS.supports && window.CSS.supports('top: constant(safe-area-inset-top)')) {\n return 'constant';\n }\n return 'env';\n}();\nvar SafeAreaView = /*#__PURE__*/React.forwardRef((props, ref) => {\n var style = props.style,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n return /*#__PURE__*/React.createElement(View, _extends({}, rest, {\n ref: ref,\n style: [styles.root, style]\n }));\n});\nSafeAreaView.displayName = 'SafeAreaView';\nvar styles = StyleSheet.create({\n root: {\n paddingTop: cssFunction + \"(safe-area-inset-top)\",\n paddingRight: cssFunction + \"(safe-area-inset-right)\",\n paddingBottom: cssFunction + \"(safe-area-inset-bottom)\",\n paddingLeft: cssFunction + \"(safe-area-inset-left)\"\n }\n});\nexport default SafeAreaView;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar emptyFunction = () => {};\nfunction StatusBar() {\n return null;\n}\nStatusBar.setBackgroundColor = emptyFunction;\nStatusBar.setBarStyle = emptyFunction;\nStatusBar.setHidden = emptyFunction;\nStatusBar.setNetworkActivityIndicatorVisible = emptyFunction;\nStatusBar.setTranslucent = emptyFunction;\nexport default StatusBar;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport AccessibilityUtil from '../../modules/AccessibilityUtil';\nimport BoundingDimensions from './BoundingDimensions';\nimport normalizeColor from '@react-native/normalize-color';\nimport Position from './Position';\nimport React from 'react';\nimport UIManager from '../UIManager';\nimport View from '../View';\nimport { warnOnce } from '../../modules/warnOnce';\nvar extractSingleTouch = nativeEvent => {\n var touches = nativeEvent.touches;\n var changedTouches = nativeEvent.changedTouches;\n var hasTouches = touches && touches.length > 0;\n var hasChangedTouches = changedTouches && changedTouches.length > 0;\n return !hasTouches && hasChangedTouches ? changedTouches[0] : hasTouches ? touches[0] : nativeEvent;\n};\n\n/**\n * `Touchable`: Taps done right.\n *\n * You hook your `ResponderEventPlugin` events into `Touchable`. `Touchable`\n * will measure time/geometry and tells you when to give feedback to the user.\n *\n * ====================== Touchable Tutorial ===============================\n * The `Touchable` mixin helps you handle the \"press\" interaction. It analyzes\n * the geometry of elements, and observes when another responder (scroll view\n * etc) has stolen the touch lock. It notifies your component when it should\n * give feedback to the user. (bouncing/highlighting/unhighlighting).\n *\n * - When a touch was activated (typically you highlight)\n * - When a touch was deactivated (typically you unhighlight)\n * - When a touch was \"pressed\" - a touch ended while still within the geometry\n * of the element, and no other element (like scroller) has \"stolen\" touch\n * lock (\"responder\") (Typically you bounce the element).\n *\n * A good tap interaction isn't as simple as you might think. There should be a\n * slight delay before showing a highlight when starting a touch. If a\n * subsequent touch move exceeds the boundary of the element, it should\n * unhighlight, but if that same touch is brought back within the boundary, it\n * should rehighlight again. A touch can move in and out of that boundary\n * several times, each time toggling highlighting, but a \"press\" is only\n * triggered if that touch ends while within the element's boundary and no\n * scroller (or anything else) has stolen the lock on touches.\n *\n * To create a new type of component that handles interaction using the\n * `Touchable` mixin, do the following:\n *\n * - Initialize the `Touchable` state.\n *\n * getInitialState: function() {\n * return merge(this.touchableGetInitialState(), yourComponentState);\n * }\n *\n * - Add a method to get your touchable component's node.\n * getTouchableNode: function() {\n * return this.touchableRef.current\n * }\n *\n * - Choose the rendered component who's touches should start the interactive\n * sequence. On that rendered node, forward all `Touchable` responder\n * handlers. You can choose any rendered node you like. Choose a node whose\n * hit target you'd like to instigate the interaction sequence:\n *\n * // In render function:\n * return (\n * \n * \n * Even though the hit detection/interactions are triggered by the\n * wrapping (typically larger) node, we usually end up implementing\n * custom logic that highlights this inner one.\n * \n * \n * );\n *\n * - You may set up your own handlers for each of these events, so long as you\n * also invoke the `touchable*` handlers inside of your custom handler.\n *\n * - Implement the handlers on your component class in order to provide\n * feedback to the user. See documentation for each of these class methods\n * that you should implement.\n *\n * touchableHandlePress: function() {\n * this.performBounceAnimation(); // or whatever you want to do.\n * },\n * touchableHandleActivePressIn: function() {\n * this.beginHighlighting(...); // Whatever you like to convey activation\n * },\n * touchableHandleActivePressOut: function() {\n * this.endHighlighting(...); // Whatever you like to convey deactivation\n * },\n *\n * - There are more advanced methods you can implement (see documentation below):\n * touchableGetHighlightDelayMS: function() {\n * return 20;\n * }\n * // In practice, *always* use a predeclared constant (conserve memory).\n * touchableGetPressRectOffset: function() {\n * return {top: 20, left: 20, right: 20, bottom: 100};\n * }\n */\n\n/**\n * Touchable states.\n */\n\nvar States = {\n NOT_RESPONDER: 'NOT_RESPONDER',\n // Not the responder\n RESPONDER_INACTIVE_PRESS_IN: 'RESPONDER_INACTIVE_PRESS_IN',\n // Responder, inactive, in the `PressRect`\n RESPONDER_INACTIVE_PRESS_OUT: 'RESPONDER_INACTIVE_PRESS_OUT',\n // Responder, inactive, out of `PressRect`\n RESPONDER_ACTIVE_PRESS_IN: 'RESPONDER_ACTIVE_PRESS_IN',\n // Responder, active, in the `PressRect`\n RESPONDER_ACTIVE_PRESS_OUT: 'RESPONDER_ACTIVE_PRESS_OUT',\n // Responder, active, out of `PressRect`\n RESPONDER_ACTIVE_LONG_PRESS_IN: 'RESPONDER_ACTIVE_LONG_PRESS_IN',\n // Responder, active, in the `PressRect`, after long press threshold\n RESPONDER_ACTIVE_LONG_PRESS_OUT: 'RESPONDER_ACTIVE_LONG_PRESS_OUT',\n // Responder, active, out of `PressRect`, after long press threshold\n ERROR: 'ERROR'\n};\n/*\n * Quick lookup map for states that are considered to be \"active\"\n */\n\nvar baseStatesConditions = {\n NOT_RESPONDER: false,\n RESPONDER_INACTIVE_PRESS_IN: false,\n RESPONDER_INACTIVE_PRESS_OUT: false,\n RESPONDER_ACTIVE_PRESS_IN: false,\n RESPONDER_ACTIVE_PRESS_OUT: false,\n RESPONDER_ACTIVE_LONG_PRESS_IN: false,\n RESPONDER_ACTIVE_LONG_PRESS_OUT: false,\n ERROR: false\n};\nvar IsActive = _objectSpread(_objectSpread({}, baseStatesConditions), {}, {\n RESPONDER_ACTIVE_PRESS_OUT: true,\n RESPONDER_ACTIVE_PRESS_IN: true\n});\n\n/**\n * Quick lookup for states that are considered to be \"pressing\" and are\n * therefore eligible to result in a \"selection\" if the press stops.\n */\nvar IsPressingIn = _objectSpread(_objectSpread({}, baseStatesConditions), {}, {\n RESPONDER_INACTIVE_PRESS_IN: true,\n RESPONDER_ACTIVE_PRESS_IN: true,\n RESPONDER_ACTIVE_LONG_PRESS_IN: true\n});\nvar IsLongPressingIn = _objectSpread(_objectSpread({}, baseStatesConditions), {}, {\n RESPONDER_ACTIVE_LONG_PRESS_IN: true\n});\n\n/**\n * Inputs to the state machine.\n */\nvar Signals = {\n DELAY: 'DELAY',\n RESPONDER_GRANT: 'RESPONDER_GRANT',\n RESPONDER_RELEASE: 'RESPONDER_RELEASE',\n RESPONDER_TERMINATED: 'RESPONDER_TERMINATED',\n ENTER_PRESS_RECT: 'ENTER_PRESS_RECT',\n LEAVE_PRESS_RECT: 'LEAVE_PRESS_RECT',\n LONG_PRESS_DETECTED: 'LONG_PRESS_DETECTED'\n};\n/**\n * Mapping from States x Signals => States\n */\nvar Transitions = {\n NOT_RESPONDER: {\n DELAY: States.ERROR,\n RESPONDER_GRANT: States.RESPONDER_INACTIVE_PRESS_IN,\n RESPONDER_RELEASE: States.ERROR,\n RESPONDER_TERMINATED: States.ERROR,\n ENTER_PRESS_RECT: States.ERROR,\n LEAVE_PRESS_RECT: States.ERROR,\n LONG_PRESS_DETECTED: States.ERROR\n },\n RESPONDER_INACTIVE_PRESS_IN: {\n DELAY: States.RESPONDER_ACTIVE_PRESS_IN,\n RESPONDER_GRANT: States.ERROR,\n RESPONDER_RELEASE: States.NOT_RESPONDER,\n RESPONDER_TERMINATED: States.NOT_RESPONDER,\n ENTER_PRESS_RECT: States.RESPONDER_INACTIVE_PRESS_IN,\n LEAVE_PRESS_RECT: States.RESPONDER_INACTIVE_PRESS_OUT,\n LONG_PRESS_DETECTED: States.ERROR\n },\n RESPONDER_INACTIVE_PRESS_OUT: {\n DELAY: States.RESPONDER_ACTIVE_PRESS_OUT,\n RESPONDER_GRANT: States.ERROR,\n RESPONDER_RELEASE: States.NOT_RESPONDER,\n RESPONDER_TERMINATED: States.NOT_RESPONDER,\n ENTER_PRESS_RECT: States.RESPONDER_INACTIVE_PRESS_IN,\n LEAVE_PRESS_RECT: States.RESPONDER_INACTIVE_PRESS_OUT,\n LONG_PRESS_DETECTED: States.ERROR\n },\n RESPONDER_ACTIVE_PRESS_IN: {\n DELAY: States.ERROR,\n RESPONDER_GRANT: States.ERROR,\n RESPONDER_RELEASE: States.NOT_RESPONDER,\n RESPONDER_TERMINATED: States.NOT_RESPONDER,\n ENTER_PRESS_RECT: States.RESPONDER_ACTIVE_PRESS_IN,\n LEAVE_PRESS_RECT: States.RESPONDER_ACTIVE_PRESS_OUT,\n LONG_PRESS_DETECTED: States.RESPONDER_ACTIVE_LONG_PRESS_IN\n },\n RESPONDER_ACTIVE_PRESS_OUT: {\n DELAY: States.ERROR,\n RESPONDER_GRANT: States.ERROR,\n RESPONDER_RELEASE: States.NOT_RESPONDER,\n RESPONDER_TERMINATED: States.NOT_RESPONDER,\n ENTER_PRESS_RECT: States.RESPONDER_ACTIVE_PRESS_IN,\n LEAVE_PRESS_RECT: States.RESPONDER_ACTIVE_PRESS_OUT,\n LONG_PRESS_DETECTED: States.ERROR\n },\n RESPONDER_ACTIVE_LONG_PRESS_IN: {\n DELAY: States.ERROR,\n RESPONDER_GRANT: States.ERROR,\n RESPONDER_RELEASE: States.NOT_RESPONDER,\n RESPONDER_TERMINATED: States.NOT_RESPONDER,\n ENTER_PRESS_RECT: States.RESPONDER_ACTIVE_LONG_PRESS_IN,\n LEAVE_PRESS_RECT: States.RESPONDER_ACTIVE_LONG_PRESS_OUT,\n LONG_PRESS_DETECTED: States.RESPONDER_ACTIVE_LONG_PRESS_IN\n },\n RESPONDER_ACTIVE_LONG_PRESS_OUT: {\n DELAY: States.ERROR,\n RESPONDER_GRANT: States.ERROR,\n RESPONDER_RELEASE: States.NOT_RESPONDER,\n RESPONDER_TERMINATED: States.NOT_RESPONDER,\n ENTER_PRESS_RECT: States.RESPONDER_ACTIVE_LONG_PRESS_IN,\n LEAVE_PRESS_RECT: States.RESPONDER_ACTIVE_LONG_PRESS_OUT,\n LONG_PRESS_DETECTED: States.ERROR\n },\n error: {\n DELAY: States.NOT_RESPONDER,\n RESPONDER_GRANT: States.RESPONDER_INACTIVE_PRESS_IN,\n RESPONDER_RELEASE: States.NOT_RESPONDER,\n RESPONDER_TERMINATED: States.NOT_RESPONDER,\n ENTER_PRESS_RECT: States.NOT_RESPONDER,\n LEAVE_PRESS_RECT: States.NOT_RESPONDER,\n LONG_PRESS_DETECTED: States.NOT_RESPONDER\n }\n};\n\n// ==== Typical Constants for integrating into UI components ====\n// var HIT_EXPAND_PX = 20;\n// var HIT_VERT_OFFSET_PX = 10;\nvar HIGHLIGHT_DELAY_MS = 130;\nvar PRESS_EXPAND_PX = 20;\nvar LONG_PRESS_THRESHOLD = 500;\nvar LONG_PRESS_DELAY_MS = LONG_PRESS_THRESHOLD - HIGHLIGHT_DELAY_MS;\nvar LONG_PRESS_ALLOWED_MOVEMENT = 10;\n\n// Default amount \"active\" region protrudes beyond box\n\n/**\n * By convention, methods prefixed with underscores are meant to be @private,\n * and not @protected. Mixers shouldn't access them - not even to provide them\n * as callback handlers.\n *\n *\n * ========== Geometry =========\n * `Touchable` only assumes that there exists a `HitRect` node. The `PressRect`\n * is an abstract box that is extended beyond the `HitRect`.\n *\n * +--------------------------+\n * | | - \"Start\" events in `HitRect` cause `HitRect`\n * | +--------------------+ | to become the responder.\n * | | +--------------+ | | - `HitRect` is typically expanded around\n * | | | | | | the `VisualRect`, but shifted downward.\n * | | | VisualRect | | | - After pressing down, after some delay,\n * | | | | | | and before letting up, the Visual React\n * | | +--------------+ | | will become \"active\". This makes it eligible\n * | | HitRect | | for being highlighted (so long as the\n * | +--------------------+ | press remains in the `PressRect`).\n * | PressRect o |\n * +----------------------|---+\n * Out Region |\n * +-----+ This gap between the `HitRect` and\n * `PressRect` allows a touch to move far away\n * from the original hit rect, and remain\n * highlighted, and eligible for a \"Press\".\n * Customize this via\n * `touchableGetPressRectOffset()`.\n *\n *\n *\n * ======= State Machine =======\n *\n * +-------------+ <---+ RESPONDER_RELEASE\n * |NOT_RESPONDER|\n * +-------------+ <---+ RESPONDER_TERMINATED\n * +\n * | RESPONDER_GRANT (HitRect)\n * v\n * +---------------------------+ DELAY +-------------------------+ T + DELAY +------------------------------+\n * |RESPONDER_INACTIVE_PRESS_IN|+-------->|RESPONDER_ACTIVE_PRESS_IN| +------------> |RESPONDER_ACTIVE_LONG_PRESS_IN|\n * +---------------------------+ +-------------------------+ +------------------------------+\n * + ^ + ^ + ^\n * |LEAVE_ |ENTER_ |LEAVE_ |ENTER_ |LEAVE_ |ENTER_\n * |PRESS_RECT |PRESS_RECT |PRESS_RECT |PRESS_RECT |PRESS_RECT |PRESS_RECT\n * | | | | | |\n * v + v + v +\n * +----------------------------+ DELAY +--------------------------+ +-------------------------------+\n * |RESPONDER_INACTIVE_PRESS_OUT|+------->|RESPONDER_ACTIVE_PRESS_OUT| |RESPONDER_ACTIVE_LONG_PRESS_OUT|\n * +----------------------------+ +--------------------------+ +-------------------------------+\n *\n * T + DELAY => LONG_PRESS_DELAY_MS + DELAY\n *\n * Not drawn are the side effects of each transition. The most important side\n * effect is the `touchableHandlePress` abstract method invocation that occurs\n * when a responder is released while in either of the \"Press\" states.\n *\n * The other important side effects are the highlight abstract method\n * invocations (internal callbacks) to be implemented by the mixer.\n *\n *\n * @lends Touchable.prototype\n */\nvar TouchableMixin = {\n // HACK (part 1): basic support for touchable interactions using a keyboard\n componentDidMount: function componentDidMount() {\n warnOnce('TouchableMixin', 'TouchableMixin is deprecated. Please use Pressable.');\n var touchableNode = this.getTouchableNode && this.getTouchableNode();\n if (touchableNode && touchableNode.addEventListener) {\n this._touchableBlurListener = e => {\n if (this._isTouchableKeyboardActive) {\n if (this.state.touchable.touchState && this.state.touchable.touchState !== States.NOT_RESPONDER) {\n this.touchableHandleResponderTerminate({\n nativeEvent: e\n });\n }\n this._isTouchableKeyboardActive = false;\n }\n };\n touchableNode.addEventListener('blur', this._touchableBlurListener);\n }\n },\n /**\n * Clear all timeouts on unmount\n */\n componentWillUnmount: function componentWillUnmount() {\n var touchableNode = this.getTouchableNode && this.getTouchableNode();\n if (touchableNode && touchableNode.addEventListener) {\n touchableNode.removeEventListener('blur', this._touchableBlurListener);\n }\n this.touchableDelayTimeout && clearTimeout(this.touchableDelayTimeout);\n this.longPressDelayTimeout && clearTimeout(this.longPressDelayTimeout);\n this.pressOutDelayTimeout && clearTimeout(this.pressOutDelayTimeout);\n // Clear DOM nodes\n this.pressInLocation = null;\n this.state.touchable.responderID = null;\n },\n /**\n * It's prefer that mixins determine state in this way, having the class\n * explicitly mix the state in the one and only `getInitialState` method.\n *\n * @return {object} State object to be placed inside of\n * `this.state.touchable`.\n */\n touchableGetInitialState: function touchableGetInitialState() {\n return {\n touchable: {\n touchState: undefined,\n responderID: null\n }\n };\n },\n // ==== Hooks to Gesture Responder system ====\n /**\n * Must return true if embedded in a native platform scroll view.\n */\n touchableHandleResponderTerminationRequest: function touchableHandleResponderTerminationRequest() {\n return !this.props.rejectResponderTermination;\n },\n /**\n * Must return true to start the process of `Touchable`.\n */\n touchableHandleStartShouldSetResponder: function touchableHandleStartShouldSetResponder() {\n return !this.props.disabled;\n },\n /**\n * Return true to cancel press on long press.\n */\n touchableLongPressCancelsPress: function touchableLongPressCancelsPress() {\n return true;\n },\n /**\n * Place as callback for a DOM element's `onResponderGrant` event.\n * @param {SyntheticEvent} e Synthetic event from event system.\n *\n */\n touchableHandleResponderGrant: function touchableHandleResponderGrant(e) {\n var dispatchID = e.currentTarget;\n // Since e is used in a callback invoked on another event loop\n // (as in setTimeout etc), we need to call e.persist() on the\n // event to make sure it doesn't get reused in the event object pool.\n e.persist();\n this.pressOutDelayTimeout && clearTimeout(this.pressOutDelayTimeout);\n this.pressOutDelayTimeout = null;\n this.state.touchable.touchState = States.NOT_RESPONDER;\n this.state.touchable.responderID = dispatchID;\n this._receiveSignal(Signals.RESPONDER_GRANT, e);\n var delayMS = this.touchableGetHighlightDelayMS !== undefined ? Math.max(this.touchableGetHighlightDelayMS(), 0) : HIGHLIGHT_DELAY_MS;\n delayMS = isNaN(delayMS) ? HIGHLIGHT_DELAY_MS : delayMS;\n if (delayMS !== 0) {\n this.touchableDelayTimeout = setTimeout(this._handleDelay.bind(this, e), delayMS);\n } else {\n this._handleDelay(e);\n }\n var longDelayMS = this.touchableGetLongPressDelayMS !== undefined ? Math.max(this.touchableGetLongPressDelayMS(), 10) : LONG_PRESS_DELAY_MS;\n longDelayMS = isNaN(longDelayMS) ? LONG_PRESS_DELAY_MS : longDelayMS;\n this.longPressDelayTimeout = setTimeout(this._handleLongDelay.bind(this, e), longDelayMS + delayMS);\n },\n /**\n * Place as callback for a DOM element's `onResponderRelease` event.\n */\n touchableHandleResponderRelease: function touchableHandleResponderRelease(e) {\n this.pressInLocation = null;\n this._receiveSignal(Signals.RESPONDER_RELEASE, e);\n },\n /**\n * Place as callback for a DOM element's `onResponderTerminate` event.\n */\n touchableHandleResponderTerminate: function touchableHandleResponderTerminate(e) {\n this.pressInLocation = null;\n this._receiveSignal(Signals.RESPONDER_TERMINATED, e);\n },\n /**\n * Place as callback for a DOM element's `onResponderMove` event.\n */\n touchableHandleResponderMove: function touchableHandleResponderMove(e) {\n // Measurement may not have returned yet.\n if (!this.state.touchable.positionOnActivate) {\n return;\n }\n var positionOnActivate = this.state.touchable.positionOnActivate;\n var dimensionsOnActivate = this.state.touchable.dimensionsOnActivate;\n var pressRectOffset = this.touchableGetPressRectOffset ? this.touchableGetPressRectOffset() : {\n left: PRESS_EXPAND_PX,\n right: PRESS_EXPAND_PX,\n top: PRESS_EXPAND_PX,\n bottom: PRESS_EXPAND_PX\n };\n var pressExpandLeft = pressRectOffset.left;\n var pressExpandTop = pressRectOffset.top;\n var pressExpandRight = pressRectOffset.right;\n var pressExpandBottom = pressRectOffset.bottom;\n var hitSlop = this.touchableGetHitSlop ? this.touchableGetHitSlop() : null;\n if (hitSlop) {\n pressExpandLeft += hitSlop.left || 0;\n pressExpandTop += hitSlop.top || 0;\n pressExpandRight += hitSlop.right || 0;\n pressExpandBottom += hitSlop.bottom || 0;\n }\n var touch = extractSingleTouch(e.nativeEvent);\n var pageX = touch && touch.pageX;\n var pageY = touch && touch.pageY;\n if (this.pressInLocation) {\n var movedDistance = this._getDistanceBetweenPoints(pageX, pageY, this.pressInLocation.pageX, this.pressInLocation.pageY);\n if (movedDistance > LONG_PRESS_ALLOWED_MOVEMENT) {\n this._cancelLongPressDelayTimeout();\n }\n }\n var isTouchWithinActive = pageX > positionOnActivate.left - pressExpandLeft && pageY > positionOnActivate.top - pressExpandTop && pageX < positionOnActivate.left + dimensionsOnActivate.width + pressExpandRight && pageY < positionOnActivate.top + dimensionsOnActivate.height + pressExpandBottom;\n if (isTouchWithinActive) {\n var prevState = this.state.touchable.touchState;\n this._receiveSignal(Signals.ENTER_PRESS_RECT, e);\n var curState = this.state.touchable.touchState;\n if (curState === States.RESPONDER_INACTIVE_PRESS_IN && prevState !== States.RESPONDER_INACTIVE_PRESS_IN) {\n // fix for t7967420\n this._cancelLongPressDelayTimeout();\n }\n } else {\n this._cancelLongPressDelayTimeout();\n this._receiveSignal(Signals.LEAVE_PRESS_RECT, e);\n }\n },\n /**\n * Invoked when the item receives focus. Mixers might override this to\n * visually distinguish the `VisualRect` so that the user knows that it\n * currently has the focus. Most platforms only support a single element being\n * focused at a time, in which case there may have been a previously focused\n * element that was blurred just prior to this. This can be overridden when\n * using `Touchable.Mixin.withoutDefaultFocusAndBlur`.\n */\n touchableHandleFocus: function touchableHandleFocus(e) {\n this.props.onFocus && this.props.onFocus(e);\n },\n /**\n * Invoked when the item loses focus. Mixers might override this to\n * visually distinguish the `VisualRect` so that the user knows that it\n * no longer has focus. Most platforms only support a single element being\n * focused at a time, in which case the focus may have moved to another.\n * This can be overridden when using\n * `Touchable.Mixin.withoutDefaultFocusAndBlur`.\n */\n touchableHandleBlur: function touchableHandleBlur(e) {\n this.props.onBlur && this.props.onBlur(e);\n },\n // ==== Abstract Application Callbacks ====\n\n /**\n * Invoked when the item should be highlighted. Mixers should implement this\n * to visually distinguish the `VisualRect` so that the user knows that\n * releasing a touch will result in a \"selection\" (analog to click).\n *\n * @abstract\n * touchableHandleActivePressIn: function,\n */\n\n /**\n * Invoked when the item is \"active\" (in that it is still eligible to become\n * a \"select\") but the touch has left the `PressRect`. Usually the mixer will\n * want to unhighlight the `VisualRect`. If the user (while pressing) moves\n * back into the `PressRect` `touchableHandleActivePressIn` will be invoked\n * again and the mixer should probably highlight the `VisualRect` again. This\n * event will not fire on an `touchEnd/mouseUp` event, only move events while\n * the user is depressing the mouse/touch.\n *\n * @abstract\n * touchableHandleActivePressOut: function\n */\n\n /**\n * Invoked when the item is \"selected\" - meaning the interaction ended by\n * letting up while the item was either in the state\n * `RESPONDER_ACTIVE_PRESS_IN` or `RESPONDER_INACTIVE_PRESS_IN`.\n *\n * @abstract\n * touchableHandlePress: function\n */\n\n /**\n * Invoked when the item is long pressed - meaning the interaction ended by\n * letting up while the item was in `RESPONDER_ACTIVE_LONG_PRESS_IN`. If\n * `touchableHandleLongPress` is *not* provided, `touchableHandlePress` will\n * be called as it normally is. If `touchableHandleLongPress` is provided, by\n * default any `touchableHandlePress` callback will not be invoked. To\n * override this default behavior, override `touchableLongPressCancelsPress`\n * to return false. As a result, `touchableHandlePress` will be called when\n * lifting up, even if `touchableHandleLongPress` has also been called.\n *\n * @abstract\n * touchableHandleLongPress: function\n */\n\n /**\n * Returns the number of millis to wait before triggering a highlight.\n *\n * @abstract\n * touchableGetHighlightDelayMS: function\n */\n\n /**\n * Returns the amount to extend the `HitRect` into the `PressRect`. Positive\n * numbers mean the size expands outwards.\n *\n * @abstract\n * touchableGetPressRectOffset: function\n */\n\n // ==== Internal Logic ====\n\n /**\n * Measures the `HitRect` node on activation. The Bounding rectangle is with\n * respect to viewport - not page, so adding the `pageXOffset/pageYOffset`\n * should result in points that are in the same coordinate system as an\n * event's `globalX/globalY` data values.\n *\n * - Consider caching this for the lifetime of the component, or possibly\n * being able to share this cache between any `ScrollMap` view.\n *\n * @sideeffects\n * @private\n */\n _remeasureMetricsOnActivation: function _remeasureMetricsOnActivation() {\n var tag = this.state.touchable.responderID;\n if (tag == null) {\n return;\n }\n UIManager.measure(tag, this._handleQueryLayout);\n },\n _handleQueryLayout: function _handleQueryLayout(l, t, w, h, globalX, globalY) {\n //don't do anything UIManager failed to measure node\n if (!l && !t && !w && !h && !globalX && !globalY) {\n return;\n }\n this.state.touchable.positionOnActivate && Position.release(this.state.touchable.positionOnActivate);\n this.state.touchable.dimensionsOnActivate &&\n // $FlowFixMe\n BoundingDimensions.release(this.state.touchable.dimensionsOnActivate);\n this.state.touchable.positionOnActivate = Position.getPooled(globalX, globalY);\n // $FlowFixMe\n this.state.touchable.dimensionsOnActivate = BoundingDimensions.getPooled(w, h);\n },\n _handleDelay: function _handleDelay(e) {\n this.touchableDelayTimeout = null;\n this._receiveSignal(Signals.DELAY, e);\n },\n _handleLongDelay: function _handleLongDelay(e) {\n this.longPressDelayTimeout = null;\n var curState = this.state.touchable.touchState;\n if (curState !== States.RESPONDER_ACTIVE_PRESS_IN && curState !== States.RESPONDER_ACTIVE_LONG_PRESS_IN) {\n console.error('Attempted to transition from state `' + curState + '` to `' + States.RESPONDER_ACTIVE_LONG_PRESS_IN + '`, which is not supported. This is ' + 'most likely due to `Touchable.longPressDelayTimeout` not being cancelled.');\n } else {\n this._receiveSignal(Signals.LONG_PRESS_DETECTED, e);\n }\n },\n /**\n * Receives a state machine signal, performs side effects of the transition\n * and stores the new state. Validates the transition as well.\n *\n * @param {Signals} signal State machine signal.\n * @throws Error if invalid state transition or unrecognized signal.\n * @sideeffects\n */\n _receiveSignal: function _receiveSignal(signal, e) {\n var responderID = this.state.touchable.responderID;\n var curState = this.state.touchable.touchState;\n var nextState = Transitions[curState] && Transitions[curState][signal];\n if (!responderID && signal === Signals.RESPONDER_RELEASE) {\n return;\n }\n if (!nextState) {\n throw new Error('Unrecognized signal `' + signal + '` or state `' + curState + '` for Touchable responder `' + responderID + '`');\n }\n if (nextState === States.ERROR) {\n throw new Error('Touchable cannot transition from `' + curState + '` to `' + signal + '` for responder `' + responderID + '`');\n }\n if (curState !== nextState) {\n this._performSideEffectsForTransition(curState, nextState, signal, e);\n this.state.touchable.touchState = nextState;\n }\n },\n _cancelLongPressDelayTimeout: function _cancelLongPressDelayTimeout() {\n this.longPressDelayTimeout && clearTimeout(this.longPressDelayTimeout);\n this.longPressDelayTimeout = null;\n },\n _isHighlight: function _isHighlight(state) {\n return state === States.RESPONDER_ACTIVE_PRESS_IN || state === States.RESPONDER_ACTIVE_LONG_PRESS_IN;\n },\n _savePressInLocation: function _savePressInLocation(e) {\n var touch = extractSingleTouch(e.nativeEvent);\n var pageX = touch && touch.pageX;\n var pageY = touch && touch.pageY;\n var locationX = touch && touch.locationX;\n var locationY = touch && touch.locationY;\n this.pressInLocation = {\n pageX,\n pageY,\n locationX,\n locationY\n };\n },\n _getDistanceBetweenPoints: function _getDistanceBetweenPoints(aX, aY, bX, bY) {\n var deltaX = aX - bX;\n var deltaY = aY - bY;\n return Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n },\n /**\n * Will perform a transition between touchable states, and identify any\n * highlighting or unhighlighting that must be performed for this particular\n * transition.\n *\n * @param {States} curState Current Touchable state.\n * @param {States} nextState Next Touchable state.\n * @param {Signal} signal Signal that triggered the transition.\n * @param {Event} e Native event.\n * @sideeffects\n */\n _performSideEffectsForTransition: function _performSideEffectsForTransition(curState, nextState, signal, e) {\n var curIsHighlight = this._isHighlight(curState);\n var newIsHighlight = this._isHighlight(nextState);\n var isFinalSignal = signal === Signals.RESPONDER_TERMINATED || signal === Signals.RESPONDER_RELEASE;\n if (isFinalSignal) {\n this._cancelLongPressDelayTimeout();\n }\n var isInitialTransition = curState === States.NOT_RESPONDER && nextState === States.RESPONDER_INACTIVE_PRESS_IN;\n var isActiveTransition = !IsActive[curState] && IsActive[nextState];\n if (isInitialTransition || isActiveTransition) {\n this._remeasureMetricsOnActivation();\n }\n if (IsPressingIn[curState] && signal === Signals.LONG_PRESS_DETECTED) {\n this.touchableHandleLongPress && this.touchableHandleLongPress(e);\n }\n if (newIsHighlight && !curIsHighlight) {\n this._startHighlight(e);\n } else if (!newIsHighlight && curIsHighlight) {\n this._endHighlight(e);\n }\n if (IsPressingIn[curState] && signal === Signals.RESPONDER_RELEASE) {\n var hasLongPressHandler = !!this.props.onLongPress;\n var pressIsLongButStillCallOnPress = IsLongPressingIn[curState] && (\n // We *are* long pressing.. // But either has no long handler\n !hasLongPressHandler || !this.touchableLongPressCancelsPress()); // or we're told to ignore it.\n\n var shouldInvokePress = !IsLongPressingIn[curState] || pressIsLongButStillCallOnPress;\n if (shouldInvokePress && this.touchableHandlePress) {\n if (!newIsHighlight && !curIsHighlight) {\n // we never highlighted because of delay, but we should highlight now\n this._startHighlight(e);\n this._endHighlight(e);\n }\n this.touchableHandlePress(e);\n }\n }\n this.touchableDelayTimeout && clearTimeout(this.touchableDelayTimeout);\n this.touchableDelayTimeout = null;\n },\n _playTouchSound: function _playTouchSound() {\n UIManager.playTouchSound();\n },\n _startHighlight: function _startHighlight(e) {\n this._savePressInLocation(e);\n this.touchableHandleActivePressIn && this.touchableHandleActivePressIn(e);\n },\n _endHighlight: function _endHighlight(e) {\n if (this.touchableHandleActivePressOut) {\n if (this.touchableGetPressOutDelayMS && this.touchableGetPressOutDelayMS()) {\n this.pressOutDelayTimeout = setTimeout(() => {\n this.touchableHandleActivePressOut(e);\n }, this.touchableGetPressOutDelayMS());\n } else {\n this.touchableHandleActivePressOut(e);\n }\n }\n },\n // HACK (part 2): basic support for touchable interactions using a keyboard (including\n // delays and longPress)\n touchableHandleKeyEvent: function touchableHandleKeyEvent(e) {\n var type = e.type,\n key = e.key;\n if (key === 'Enter' || key === ' ') {\n if (type === 'keydown') {\n if (!this._isTouchableKeyboardActive) {\n if (!this.state.touchable.touchState || this.state.touchable.touchState === States.NOT_RESPONDER) {\n this.touchableHandleResponderGrant(e);\n this._isTouchableKeyboardActive = true;\n }\n }\n } else if (type === 'keyup') {\n if (this._isTouchableKeyboardActive) {\n if (this.state.touchable.touchState && this.state.touchable.touchState !== States.NOT_RESPONDER) {\n this.touchableHandleResponderRelease(e);\n this._isTouchableKeyboardActive = false;\n }\n }\n }\n e.stopPropagation();\n // prevent the default behaviour unless the Touchable functions as a link\n // and Enter is pressed\n if (!(key === 'Enter' && AccessibilityUtil.propsToAriaRole(this.props) === 'link')) {\n e.preventDefault();\n }\n }\n },\n withoutDefaultFocusAndBlur: {}\n};\n\n/**\n * Provide an optional version of the mixin where `touchableHandleFocus` and\n * `touchableHandleBlur` can be overridden. This allows appropriate defaults to\n * be set on TV platforms, without breaking existing implementations of\n * `Touchable`.\n */\nvar touchableHandleFocus = TouchableMixin.touchableHandleFocus,\n touchableHandleBlur = TouchableMixin.touchableHandleBlur,\n TouchableMixinWithoutDefaultFocusAndBlur = _objectWithoutPropertiesLoose(TouchableMixin, [\"touchableHandleFocus\", \"touchableHandleBlur\"]);\nTouchableMixin.withoutDefaultFocusAndBlur = TouchableMixinWithoutDefaultFocusAndBlur;\nvar Touchable = {\n Mixin: TouchableMixin,\n TOUCH_TARGET_DEBUG: false,\n // Highlights all touchable targets. Toggle with Inspector.\n /**\n * Renders a debugging overlay to visualize touch target with hitSlop (might not work on Android).\n */\n renderDebugView: _ref => {\n var color = _ref.color,\n hitSlop = _ref.hitSlop;\n if (!Touchable.TOUCH_TARGET_DEBUG) {\n return null;\n }\n if (process.env.NODE_ENV !== 'production') {\n throw Error('Touchable.TOUCH_TARGET_DEBUG should not be enabled in prod!');\n }\n var debugHitSlopStyle = {};\n hitSlop = hitSlop || {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n };\n for (var key in hitSlop) {\n debugHitSlopStyle[key] = -hitSlop[key];\n }\n var normalizedColor = normalizeColor(color);\n if (typeof normalizedColor !== 'number') {\n return null;\n }\n var hexColor = '#' + ('00000000' + normalizedColor.toString(16)).substr(-8);\n return /*#__PURE__*/React.createElement(View, {\n pointerEvents: \"none\",\n style: _objectSpread({\n position: 'absolute',\n borderColor: hexColor.slice(0, -2) + '55',\n // More opaque\n borderWidth: 1,\n borderStyle: 'dashed',\n backgroundColor: hexColor.slice(0, -2) + '0F'\n }, debugHitSlopStyle)\n });\n }\n};\nexport default Touchable;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport PooledClass from '../../vendor/react-native/PooledClass';\nvar twoArgumentPooler = PooledClass.twoArgumentPooler;\n\n/**\n * PooledClass representing the bounding rectangle of a region.\n */\nfunction BoundingDimensions(width, height) {\n this.width = width;\n this.height = height;\n}\nBoundingDimensions.prototype.destructor = function () {\n this.width = null;\n this.height = null;\n};\nBoundingDimensions.getPooledFromElement = function (element) {\n return BoundingDimensions.getPooled(element.offsetWidth, element.offsetHeight);\n};\nPooledClass.addPoolingTo(BoundingDimensions, twoArgumentPooler);\nexport default BoundingDimensions;","/* eslint-disable */\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * From React 16.0.0\n */\n\nimport invariant from 'fbjs/lib/invariant';\nvar twoArgumentPooler = function twoArgumentPooler(a1, a2) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, a1, a2);\n return instance;\n } else {\n return new Klass(a1, a2);\n }\n};\nvar standardReleaser = function standardReleaser(instance) {\n var Klass = this;\n instance.destructor();\n if (Klass.instancePool.length < Klass.poolSize) {\n Klass.instancePool.push(instance);\n }\n};\nvar DEFAULT_POOL_SIZE = 10;\nvar DEFAULT_POOLER = twoArgumentPooler;\n\n/**\n * Augments `CopyConstructor` to be a poolable class, augmenting only the class\n * itself (statically) not adding any prototypical fields. Any CopyConstructor\n * you give this may have a `poolSize` property, and will look for a\n * prototypical `destructor` on instances.\n *\n * @param {Function} CopyConstructor Constructor that can be used to reset.\n * @param {Function} pooler Customizable pooler.\n */\nvar addPoolingTo = function addPoolingTo(CopyConstructor, pooler) {\n // Casting as any so that flow ignores the actual implementation and trusts\n // it to match the type we declared\n var NewKlass = CopyConstructor;\n NewKlass.instancePool = [];\n NewKlass.getPooled = pooler || DEFAULT_POOLER;\n if (!NewKlass.poolSize) {\n NewKlass.poolSize = DEFAULT_POOL_SIZE;\n }\n NewKlass.release = standardReleaser;\n return NewKlass;\n};\nvar PooledClass = {\n addPoolingTo: addPoolingTo,\n twoArgumentPooler: twoArgumentPooler\n};\nexport default PooledClass;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport PooledClass from '../../vendor/react-native/PooledClass';\nvar twoArgumentPooler = PooledClass.twoArgumentPooler;\nfunction Position(left, top) {\n this.left = left;\n this.top = top;\n}\nPosition.prototype.destructor = function () {\n this.left = null;\n this.top = null;\n};\nPooledClass.addPoolingTo(Position, twoArgumentPooler);\nexport default Position;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport UnimplementedView from '../../modules/UnimplementedView';\nexport default UnimplementedView;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport View from '../../exports/View';\nimport React from 'react';\n\n/**\n * Common implementation for a simple stubbed view.\n */\nclass UnimplementedView extends React.Component {\n render() {\n return /*#__PURE__*/React.createElement(View, {\n style: [unimplementedViewStyles, this.props.style]\n }, this.props.children);\n }\n}\nvar unimplementedViewStyles = process.env.NODE_ENV !== 'production' ? {\n alignSelf: 'flex-start',\n borderColor: 'red',\n borderWidth: 1\n} : {};\nexport default UnimplementedView;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport * as React from 'react';\nimport { useMemo, useRef } from 'react';\nimport pick from '../../modules/pick';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePressEvents from '../../modules/usePressEvents';\nimport { warnOnce } from '../../modules/warnOnce';\nvar forwardPropsList = {\n accessibilityDisabled: true,\n accessibilityLabel: true,\n accessibilityLiveRegion: true,\n accessibilityRole: true,\n accessibilityState: true,\n accessibilityValue: true,\n children: true,\n disabled: true,\n focusable: true,\n nativeID: true,\n onBlur: true,\n onFocus: true,\n onLayout: true,\n testID: true\n};\nvar pickProps = props => pick(props, forwardPropsList);\nfunction TouchableWithoutFeedback(props, forwardedRef) {\n warnOnce('TouchableWithoutFeedback', 'TouchableWithoutFeedback is deprecated. Please use Pressable.');\n var delayPressIn = props.delayPressIn,\n delayPressOut = props.delayPressOut,\n delayLongPress = props.delayLongPress,\n disabled = props.disabled,\n focusable = props.focusable,\n onLongPress = props.onLongPress,\n onPress = props.onPress,\n onPressIn = props.onPressIn,\n onPressOut = props.onPressOut,\n rejectResponderTermination = props.rejectResponderTermination;\n var hostRef = useRef(null);\n var pressConfig = useMemo(() => ({\n cancelable: !rejectResponderTermination,\n disabled,\n delayLongPress,\n delayPressStart: delayPressIn,\n delayPressEnd: delayPressOut,\n onLongPress,\n onPress,\n onPressStart: onPressIn,\n onPressEnd: onPressOut\n }), [disabled, delayPressIn, delayPressOut, delayLongPress, onLongPress, onPress, onPressIn, onPressOut, rejectResponderTermination]);\n var pressEventHandlers = usePressEvents(hostRef, pressConfig);\n var element = React.Children.only(props.children);\n var children = [element.props.children];\n var supportedProps = pickProps(props);\n supportedProps.accessibilityDisabled = disabled;\n supportedProps.focusable = !disabled && focusable !== false;\n supportedProps.ref = useMergeRefs(forwardedRef, hostRef, element.ref);\n var elementProps = Object.assign(supportedProps, pressEventHandlers);\n return /*#__PURE__*/React.cloneElement(element, elementProps, ...children);\n}\nvar MemoedTouchableWithoutFeedback = /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef(TouchableWithoutFeedback));\nMemoedTouchableWithoutFeedback.displayName = 'TouchableWithoutFeedback';\nexport default MemoedTouchableWithoutFeedback;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport VirtualizedList from '../../vendor/react-native/VirtualizedList';\nexport default VirtualizedList;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport React from 'react';\nimport UnimplementedView from '../../modules/UnimplementedView';\nfunction YellowBox(props) {\n return /*#__PURE__*/React.createElement(UnimplementedView, props);\n}\nYellowBox.ignoreWarnings = () => {};\nexport default YellowBox;","/**\n * Copyright (c) 2016-present, Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar LogBox = {\n ignoreLogs() {},\n ignoreAllLogs() {},\n uninstall() {},\n install() {}\n};\nexport default LogBox;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport Appearance from '../Appearance';\nexport default function useColorScheme() {\n var _React$useState = React.useState(Appearance.getColorScheme()),\n colorScheme = _React$useState[0],\n setColorScheme = _React$useState[1];\n React.useEffect(() => {\n function listener(appearance) {\n setColorScheme(appearance.colorScheme);\n }\n var _Appearance$addChange = Appearance.addChangeListener(listener),\n remove = _Appearance$addChange.remove;\n return remove;\n });\n return colorScheme;\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { useLocaleContext } from '../../modules/useLocale';\nexport default useLocaleContext;","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Input = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst devsupport_1 = require(\"../../devsupport\");\nconst theme_1 = require(\"../../theme\");\n/**\n * Inputs let users enter and edit text.\n *\n * @extends React.Component\n *\n * @property {string} value - A value displayed in input field.\n *\n * @property {(string) => void} onChangeText - Called when the value should be changed.\n *\n * @property {() => void} onFocus - Called when input field becomes focused.\n *\n * @property {() => void} onBlur - Called when input field looses focus.\n *\n * @property {string} placeholder - A string to be displayed when there is no value.\n *\n * @property {boolean} disabled - Whether input field is disabled.\n * This property overrides `editable` property of TextInput.\n *\n * @property {ReactElement | ReactText | (TextProps) => ReactElement} label - String, number or a function component\n * to render above the input field.\n * If it is a function, expected to return a Text.\n *\n * @property {ReactElement | ReactText | (TextProps) => ReactElement} caption - Function component to render below\n * Input view.\n * Expected to return View.\n *\n * @property {ReactElement | (ImageProps) => ReactElement} accessoryLeft - Function component\n * to render to start of the text.\n * Expected to return an Image.\n *\n * @property {ReactElement | (ImageProps) => ReactElement} accessoryRight - Function component\n * to render to end of the text.\n * Expected to return an Image.\n *\n * @property {string} status - Status of the component.\n * Can be `basic`, `primary`, `success`, `info`, `warning`, `danger` or `control`.\n * Defaults to *basic*.\n * Useful for giving user a hint on the input validity.\n * Use *control* status when needed to display within a contrast container.\n *\n * @property {string} size - Size of the component.\n * Can be `small`, `medium` or `large`.\n * Defaults to *medium*.\n *\n * @property {StyleProp} textStyle - Customizes the style of the text field.\n *\n * @property {TextInputProps} ...TextInputProps - Any props applied to TextInput component.\n *\n * @overview-example InputSimpleUsage\n *\n * @overview-example InputStates\n * Input can be disabled with `disabled` property.\n *\n * @overview-example InputStatus\n * Or marked with `status` property, which is useful within forms validation.\n * An extra status is `control`, which is designed to be used on high-contrast backgrounds.\n *\n * @overview-example InputAccessories\n * Input may contain labels, captions and inner views by configuring `accessoryLeft` or `accessoryRight` properties.\n * Within Eva, Input accessories are expected to be images or [svg icons](guides/icon-packages).\n *\n * @overview-example InputSize\n * To resize Input, a `size` property may be used.\n *\n * @overview-example InputStyling\n * Input and it's inner views can be styled by passing them as function components.\n * ```\n * import { Input, Text } from '@ui-kitten/components';\n *\n * Label}\n * caption={evaProps => Caption}\n * />\n * ```\n *\n * @overview-example InputTheming\n * In most cases this is redundant, if [custom theme is configured](guides/branding).\n */\nlet Input = class Input extends react_1.default.Component {\n textInputRef = react_1.default.createRef();\n webEventResponder = devsupport_1.WebEventResponder.create(this);\n focus = () => {\n this.textInputRef.current?.focus();\n };\n blur = () => {\n this.textInputRef.current?.blur();\n };\n isFocused = () => {\n return this.textInputRef.current?.isFocused();\n };\n clear = () => {\n this.textInputRef.current?.clear();\n };\n // WebEventResponderCallbacks\n onMouseEnter = () => {\n this.props.eva.dispatch([theme_1.Interaction.HOVER]);\n };\n onMouseLeave = () => {\n this.props.eva.dispatch([]);\n };\n onTextFieldFocus = (event) => {\n this.props.eva.dispatch([theme_1.Interaction.FOCUSED]);\n this.props.onFocus?.(event);\n };\n onTextFieldBlur = (event) => {\n this.props.eva.dispatch([]);\n this.props.onBlur?.(event);\n };\n getComponentStyle = (source) => {\n const flatStyles = react_native_1.StyleSheet.flatten(this.props.style);\n const { rest: inputContainerStyle, ...containerStyle } = devsupport_1.PropsService.allWithRest(flatStyles, devsupport_1.FlexViewCrossStyleProps);\n const { textMarginHorizontal, textFontFamily, textFontSize, textFontWeight, textColor, placeholderColor, iconWidth, iconHeight, iconMarginHorizontal, iconTintColor, labelColor, labelFontSize, labelMarginBottom, labelFontWeight, labelFontFamily, captionMarginTop, captionColor, captionFontSize, captionFontWeight, captionFontFamily, ...containerParameters } = source;\n return {\n container: containerStyle,\n inputContainer: {\n ...containerParameters,\n ...inputContainerStyle,\n },\n text: {\n marginHorizontal: textMarginHorizontal,\n fontFamily: textFontFamily,\n fontSize: textFontSize,\n fontWeight: textFontWeight,\n color: textColor,\n },\n placeholder: {\n color: placeholderColor,\n },\n icon: {\n width: iconWidth,\n height: iconHeight,\n marginHorizontal: iconMarginHorizontal,\n tintColor: iconTintColor,\n },\n label: {\n color: labelColor,\n fontSize: labelFontSize,\n marginBottom: labelMarginBottom,\n fontWeight: labelFontWeight,\n fontFamily: labelFontFamily,\n },\n captionLabel: {\n fontSize: captionFontSize,\n fontWeight: captionFontWeight,\n fontFamily: captionFontFamily,\n color: captionColor,\n },\n };\n };\n render() {\n const { eva, textStyle, label, caption, accessoryLeft, accessoryRight, testID, ...textInputProps } = this.props;\n const evaStyle = this.getComponentStyle(eva.style);\n return (\n \n \n \n \n \n \n \n );\n }\n};\nInput = __decorate([\n (0, theme_1.styled)('Input')\n], Input);\nexports.Input = Input;\nconst styles = react_native_1.StyleSheet.create({\n inputContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n width: '100%',\n },\n text: {\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: 'auto',\n },\n label: {\n textAlign: 'left',\n },\n captionLabel: {\n textAlign: 'left',\n },\n});\nconst platformStyles = react_native_1.StyleSheet.create({\n text: react_native_1.Platform.select({\n default: null,\n android: {\n paddingVertical: 0,\n marginVertical: -2,\n },\n web: {\n outlineWidth: 0,\n },\n }),\n});\n//# sourceMappingURL=input.component.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FlexViewCrossStyleProps = exports.FlexStyleProps = exports.TextStyleProps = exports.PropsService = exports.RTLService = exports.WebEventResponderInstance = exports.WebEventResponder = exports.Frame = exports.Size = exports.Point = exports.MeasureElement = exports.TouchableWeb = exports.TouchableWithoutFeedback = exports.FalsyText = exports.FalsyFC = void 0;\nvar falsyFC_component_1 = require(\"./components/falsyFC/falsyFC.component\");\nObject.defineProperty(exports, \"FalsyFC\", { enumerable: true, get: function () { return falsyFC_component_1.FalsyFC; } });\nvar falsyText_component_1 = require(\"./components/falsyText/falsyText.component\");\nObject.defineProperty(exports, \"FalsyText\", { enumerable: true, get: function () { return falsyText_component_1.FalsyText; } });\nvar touchableWithoutFeedback_component_1 = require(\"./components/touchableWithoutFeedback.component\");\nObject.defineProperty(exports, \"TouchableWithoutFeedback\", { enumerable: true, get: function () { return touchableWithoutFeedback_component_1.TouchableWithoutFeedback; } });\nvar touchableWeb_component_1 = require(\"./components/touchableWeb.component\");\nObject.defineProperty(exports, \"TouchableWeb\", { enumerable: true, get: function () { return touchableWeb_component_1.TouchableWeb; } });\nvar measure_component_1 = require(\"./components/measure/measure.component\");\nObject.defineProperty(exports, \"MeasureElement\", { enumerable: true, get: function () { return measure_component_1.MeasureElement; } });\nvar type_1 = require(\"./components/measure/type\");\nObject.defineProperty(exports, \"Point\", { enumerable: true, get: function () { return type_1.Point; } });\nObject.defineProperty(exports, \"Size\", { enumerable: true, get: function () { return type_1.Size; } });\nObject.defineProperty(exports, \"Frame\", { enumerable: true, get: function () { return type_1.Frame; } });\nvar webEventResponder_1 = require(\"./services/web/webEventResponder\");\nObject.defineProperty(exports, \"WebEventResponder\", { enumerable: true, get: function () { return webEventResponder_1.WebEventResponder; } });\nObject.defineProperty(exports, \"WebEventResponderInstance\", { enumerable: true, get: function () { return webEventResponder_1.WebEventResponderInstance; } });\nvar rtl_service_1 = require(\"./services/rtl/rtl.service\");\nObject.defineProperty(exports, \"RTLService\", { enumerable: true, get: function () { return rtl_service_1.RTLService; } });\nvar props_service_1 = require(\"./services/props/props.service\");\nObject.defineProperty(exports, \"PropsService\", { enumerable: true, get: function () { return props_service_1.PropsService; } });\nObject.defineProperty(exports, \"TextStyleProps\", { enumerable: true, get: function () { return props_service_1.TextStyleProps; } });\nObject.defineProperty(exports, \"FlexStyleProps\", { enumerable: true, get: function () { return props_service_1.FlexStyleProps; } });\nObject.defineProperty(exports, \"FlexViewCrossStyleProps\", { enumerable: true, get: function () { return props_service_1.FlexViewCrossStyleProps; } });\n__exportStar(require(\"./typings\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FalsyFC = void 0;\nconst react_1 = __importDefault(require(\"react\"));\n/**\n * Helper component for optional properties that should render a component.\n *\n * Accepts props of a component that is expected to be rendered,\n * and `component` which may be a string, a function, null or undefined.\n *\n * If it is a function, will call it with props passed to this component.\n * Otherwise, will return null.\n *\n * @property {RenderProp} component - Function component to be rendered.\n * @property {React.ReactElement} fallback - Element to render if children is null or undefined.\n *\n * @example Will render nothing.\n * ```\n * \n * ```\n *\n * @example Will render red title.\n * ```\n * const Title = () => (\n * Title}\n * />\n * );\n * ```\n */\nclass FalsyFC extends react_1.default.Component {\n render() {\n const { component, fallback, ...props } = this.props;\n if (!component) {\n return fallback || null;\n }\n if (react_1.default.isValidElement(component)) {\n return react_1.default.cloneElement(component, props);\n }\n return react_1.default.createElement(component, props);\n }\n}\nexports.FalsyFC = FalsyFC;\n//# sourceMappingURL=falsyFC.component.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FalsyText = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst text_component_1 = require(\"../../../ui/text/text.component\");\n/**\n * Helper component for optional text properties.\n *\n * Accepts same props as Text component,\n * and `component` which may be a string, a function, null or undefined.\n *\n * If it is null or undefined, will render nothing.\n * If it is a function, will call it with props passed to this component.\n * Otherwise, will render a Text with props passed to this component.\n *\n * @example Will render nothing.\n * ```\n * \n * ```\n *\n * @example Will render red title.\n * ```\n * const Title = () => (\n * \n * );\n * ```\n *\n * @example Will render image and red title.\n * ```\n * const renderTitle = (props) => (\n * \n * \n * Title\n * \n * );\n *\n * const Title = () => (\n * \n * );\n * ```\n */\nclass FalsyText extends react_1.default.Component {\n render() {\n const { component, ...textProps } = this.props;\n if (!component) {\n return null;\n }\n if (react_1.default.isValidElement(component)) {\n return react_1.default.cloneElement(component, textProps);\n }\n if (typeof component === 'function') {\n return react_1.default.createElement(component, textProps);\n }\n return (\n {component}\n );\n }\n}\nexports.FalsyText = FalsyText;\n//# sourceMappingURL=falsyText.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Text = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst theme_1 = require(\"../../theme\");\n/**\n * Basic text writing.\n *\n * @extends React.Component\n *\n * @property {ReactText | ReactElement} children - String or number to be rendered as text.\n * Also can be ReactElement - nested Text component.\n *\n * @property {string} appearance - Can be `default`, `alternative` or `hint`.\n * Use `alternative` for displaying light text on a dark content and vice versa.\n * Use `hint` for giving user a hint on something.\n *\n * @property {string} category - Can be `h1`, `h2`, `h3`, `h4`, `h5`, `h6`, `s1`, `s2`, `p1`, `p2`, `c1`, `c2`, `label`.\n * Defaults to *p1*.\n * Use *h* categories when needed to display headings.\n * Use *s* categories when needed to display subtitles.\n * Use *p* categories when needed to display regular text.\n * Use *c* and *label* categories when needed to give user a hint on something.\n *\n * @property {string} status - Status of the component.\n * Can be `basic`, `primary`, `success`, `info`, `warning`, `danger` or `control`.\n * Defaults to *basic*.\n * Use *control* status when needed to display within a contrast container.\n *\n * @property {TextProps} ...TextProps - Any props applied to Text component.\n *\n * @overview-example TextCategories\n * Text has pre-defined set of styles for headings, subtitles, paragraphs, and more.\n *\n * @overview-example TextAppearances\n * Also, it has 2 types of additional appearances:\n * `hint` and `alternative`.\n *\n * Use hints when needed to give user a hint on action.\n * And use alternative when needed to display light text in light themes (same for dark).\n *\n * @overview-example TextStatuses\n *\n * @overview-example TextStyling\n * Text can be styled with `style` property.\n * In most cases this is redundant, if [custom theme is configured](guides/branding).\n * ```\n * import { Text } from '@ui-kitten/components';\n *\n * Place your Text\n * ```\n */\nlet Text = class Text extends react_1.default.Component {\n render() {\n const { eva, style, ...textProps } = this.props;\n return ();\n }\n};\nText = __decorate([\n (0, theme_1.styled)('Text')\n], Text);\nexports.Text = Text;\n//# sourceMappingURL=text.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TouchableWithoutFeedback = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\n/**\n * Helper component for the Touchable component with no opacity feedback.\n *\n * Applies recommended hitSlop by default.\n * @see https://reactnative.dev/docs/view#hitslop\n *\n * Allows passing ReactNode as children whereas original TouchableWithoutFeedback not.\n */\nclass TouchableWithoutFeedback extends react_1.default.Component {\n createHitSlopInsets = () => {\n const flatStyle = react_native_1.StyleSheet.flatten(this.props.style || {});\n // @ts-ignore: `width` is restricted to be a number\n const value = 40 - flatStyle.height || 0;\n return {\n left: value,\n top: value,\n right: value,\n bottom: value,\n };\n };\n render() {\n return ();\n }\n}\nexports.TouchableWithoutFeedback = TouchableWithoutFeedback;\n//# sourceMappingURL=touchableWithoutFeedback.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TouchableWeb = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst touchableWithoutFeedback_component_1 = require(\"./touchableWithoutFeedback.component\");\n/**\n * Helper component for the Touchable component rendered on the web.\n */\nclass TouchableWeb extends react_1.default.Component {\n render() {\n const { style, ...touchableProps } = this.props;\n return ();\n }\n}\nexports.TouchableWeb = TouchableWeb;\nconst styles = react_native_1.Platform.OS === 'web' && react_native_1.StyleSheet.create({\n container: {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n outlineWidth: 0,\n },\n});\n//# sourceMappingURL=touchableWeb.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MeasureElement = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst type_1 = require(\"./type\");\n/**\n * Measures child element size and it's screen position asynchronously.\n * Returns measure result in `onMeasure` callback.\n *\n * Usage:\n *\n * ```tsx\n * const onMeasure = (frame: Frame): void => {\n * const { x, y } = frame.origin;\n * const { width, height } = frame.size;\n * ...\n * };\n *\n * \n * \n * \n * ```\n *\n * By default, it measures each time onLayout is called,\n * but `force` property may be used to measure any time it's needed.\n * DON'T USE THIS FLAG IF THE COMPONENT RENDERS FIRST TIME OR YOU KNOW `onLayout` WILL BE CALLED.\n */\nconst MeasureElement = (props) => {\n const ref = react_1.default.useRef();\n const bindToWindow = (frame, window) => {\n if (frame.origin.x < window.size.width) {\n return frame;\n }\n const boundFrame = new type_1.Frame(frame.origin.x - window.size.width, frame.origin.y, Math.floor(frame.size.width), Math.floor(frame.size.height));\n return bindToWindow(boundFrame, window);\n };\n const onUIManagerMeasure = (x, y, w, h) => {\n if (!w && !h) {\n measureSelf();\n }\n else {\n const originY = props.shouldUseTopInsets ? y + react_native_1.StatusBar.currentHeight || 0 : y;\n const frame = bindToWindow(new type_1.Frame(x, originY, Math.floor(w), Math.floor(h)), type_1.Frame.window());\n props.onMeasure(frame);\n }\n };\n const measureSelf = () => {\n const node = (0, react_native_1.findNodeHandle)(ref.current);\n if (node) react_native_1.UIManager.measureInWindow(node, onUIManagerMeasure);\n };\n if (props.force) {\n measureSelf();\n }\n return react_1.default.cloneElement(props.children, { ref, onLayout: measureSelf });\n};\nexports.MeasureElement = MeasureElement;\nexports.MeasureElement.defaultProps = {\n shouldUseTopInsets: false,\n};\n//# sourceMappingURL=measure.component.js.map\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Frame = exports.Size = exports.Point = void 0;\nconst react_native_1 = require(\"react-native\");\nclass Point {\n x;\n y;\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n static zero() {\n return new Point(0, 0);\n }\n static outscreen() {\n return new Point(-999, -999);\n }\n equals(other) {\n if (!other) {\n return false;\n }\n return this.x === other.x && this.y === other.y;\n }\n}\nexports.Point = Point;\nclass Size {\n width;\n height;\n constructor(width, height) {\n this.width = width;\n this.height = height;\n }\n static zero() {\n return new Size(0, 0);\n }\n equals(other) {\n if (!other) {\n return false;\n }\n return this.width === other.width && this.height === other.height;\n }\n}\nexports.Size = Size;\nclass Frame {\n origin;\n size;\n constructor(x, y, width, height) {\n this.origin = new Point(x, y);\n this.size = new Size(width, height);\n }\n static zero() {\n return new Frame(0, 0, 0, 0);\n }\n static window() {\n const window = react_native_1.Dimensions.get('window');\n return new Frame(0, 0, window.width, window.height);\n }\n static outscreen() {\n const point = Point.outscreen();\n return new Frame(point.x, point.y, 0, 0);\n }\n equals(other) {\n if (!other) {\n return false;\n }\n return this.origin.equals(other.origin) && this.size.equals(other.size);\n }\n /**\n * Creates new frame aligned to left of other\n */\n leftOf(other) {\n return new Frame(other.origin.x - this.size.width, this.origin.y, this.size.width, this.size.height);\n }\n /**\n * Creates new frame aligned to top of other\n */\n topOf(other) {\n return new Frame(this.origin.x, other.origin.y - this.size.height, this.size.width, this.size.height);\n }\n /**\n * Creates new frame aligned to right of other\n */\n rightOf(other) {\n return new Frame(other.origin.x + other.size.width, this.origin.y, this.size.width, this.size.height);\n }\n /**\n * Creates new frame aligned to bottom of other\n */\n bottomOf(other) {\n return new Frame(this.origin.x, other.origin.y + other.size.height, this.size.width, this.size.height);\n }\n /**\n * Creates new frame aligned to inner bottom of other\n */\n bottomIn(other) {\n return new Frame(this.origin.x, other.origin.y + other.size.height - this.size.height, this.size.width, this.size.height);\n }\n /**\n * Creates new frame aligned to inner top of other\n */\n topIn(other) {\n return new Frame(this.origin.x, other.origin.y, this.size.width, this.size.height);\n }\n /**\n * Creates new frame centered horizontally to other\n */\n centerHorizontalOf(other) {\n return new Frame(other.origin.x + Math.floor((other.size.width - this.size.width) / 2), this.origin.y, this.size.width, this.size.height);\n }\n /**\n * Creates new frame centered vertically to other\n */\n centerVerticalOf(other) {\n return new Frame(this.origin.x, other.origin.y + Math.floor((other.size.height - this.size.height) / 2), this.size.width, this.size.height);\n }\n centerOf(other) {\n return new Frame(other.origin.x + Math.floor((other.size.width - this.size.width) / 2), other.origin.y + Math.floor((other.size.height - this.size.height) / 2), this.size.width, this.size.height);\n }\n}\nexports.Frame = Frame;\n//# sourceMappingURL=type.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WebEventResponder = exports.WebEventResponderInstance = void 0;\nclass WebEventResponderInstance {\n eventHandlers;\n constructor(props) {\n this.eventHandlers = props;\n }\n}\nexports.WebEventResponderInstance = WebEventResponderInstance;\nclass WebEventResponderStatic {\n static create(config) {\n return new WebEventResponderInstance({\n onMouseEnter: () => {\n config.onMouseEnter?.();\n },\n onMouseLeave: () => {\n config.onMouseLeave?.();\n },\n onFocus: () => {\n config.onFocus?.();\n },\n onBlur: () => {\n config.onBlur?.();\n },\n });\n }\n}\nexports.WebEventResponder = WebEventResponderStatic;\n//# sourceMappingURL=webEventResponder.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RTLService = void 0;\nconst react_native_1 = require(\"react-native\");\nconst rtlFlexMap_1 = require(\"./rtlFlexMap\");\nclass RTLServiceStatic {\n /**\n * @returns true if it is Right-to-Left layout\n */\n isRTL() {\n return react_native_1.I18nManager.isRTL;\n }\n select(ltr, rtl) {\n return this.isRTL() ? rtl : ltr;\n }\n /**\n * Iterates through {RtlFlexMap} and reverses style values if needed.\n *\n * @param {ViewStyle} source - style to convert\n * @param {boolean} rtl - is layout currently in RTL mode (Needed for tests, because unable to mock this)\n *\n * @returns {ViewStyle} - style reversed to fit RTL\n */\n ignoreRTL(source, rtl = this.isRTL()) {\n const rtlStyle = Object.keys(rtlFlexMap_1.RtlFlexMap).reduce((style, prop) => {\n const currentStyleValue = source[prop];\n if (currentStyleValue) {\n const i18nStyleValue = rtlFlexMap_1.RtlFlexMap[prop].toRTL(currentStyleValue, rtl);\n return {\n ...style,\n [prop]: i18nStyleValue,\n };\n }\n return style;\n }, {});\n return { ...source, ...rtlStyle };\n }\n}\nexports.RTLService = new RTLServiceStatic();\n//# sourceMappingURL=rtl.service.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RtlFlexMap = void 0;\nconst FLEX_PREFIX = 'flex';\nconst FLEX_ROW_PREFIX = 'row';\nconst FLEX_WRAP_PREFIX = 'wrap';\nconst FLEX_START_PREFIX = 'start';\nconst FLEX_END_PREFIX = 'end';\nconst FLEX_REVERSE_PREFIX = 'reverse';\n/**\n * Works with FlexBox style properties that starts with `flex` and ends with `-start` or `-end`\n *\n * E.g justifyContent: flex-start\n */\nconst FlexStartEndMapper = {\n toRTL(value, rtl) {\n if (!rtl || !value.startsWith(FLEX_PREFIX)) {\n return value;\n }\n const isReverse = value.endsWith(FLEX_END_PREFIX);\n if (isReverse) {\n return `${FLEX_PREFIX}-${FLEX_START_PREFIX}`;\n }\n return `${FLEX_PREFIX}-${FLEX_END_PREFIX}`;\n },\n};\n/**\n * Works with FlexBox style properties that starts with `row` and optionally ends with `-reverse`\n *\n * E.g flexDirection: row-reverse\n */\nconst FlexRowMapper = {\n toRTL(value, rtl) {\n if (!rtl || !value.startsWith(FLEX_ROW_PREFIX)) {\n return value;\n }\n const isReverse = value.endsWith(FLEX_REVERSE_PREFIX);\n if (isReverse) {\n return FLEX_ROW_PREFIX;\n }\n return `${FLEX_ROW_PREFIX}-${FLEX_REVERSE_PREFIX}`;\n },\n};\n/**\n * Works with FlexBox style properties that starts with `wrap` and optionally ends with `-reverse`\n *\n * E.g flexWrap: wrap-reverse\n */\nconst FlexWrapMapper = {\n toRTL(value, rtl) {\n if (!rtl || !value.startsWith(FLEX_WRAP_PREFIX)) {\n return value;\n }\n const isReverse = value.endsWith(`-${FLEX_REVERSE_PREFIX}`);\n if (isReverse) {\n return FLEX_WRAP_PREFIX;\n }\n return `${FLEX_WRAP_PREFIX}-${FLEX_REVERSE_PREFIX}`;\n },\n};\n/**\n * Matches FlexBox style properties that can affect on Layout depending on LTR/RTL mode corresponding Mappers\n */\nexports.RtlFlexMap = {\n alignContent: FlexStartEndMapper,\n alignItems: FlexStartEndMapper,\n alignSelf: FlexStartEndMapper,\n justifyContent: FlexStartEndMapper,\n flexDirection: FlexRowMapper,\n flexWrap: FlexWrapMapper,\n};\n//# sourceMappingURL=rtlFlexMap.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PropsService = exports.FlexViewCrossStyleProps = exports.FlexStyleProps = exports.TextStyleProps = void 0;\nexports.TextStyleProps = [\n // TextStyle\n 'color',\n 'fontFamily',\n 'fontSize',\n 'fontStyle',\n 'fontWeight',\n 'letterSpacing',\n 'lineHeight',\n 'textAlign',\n 'textAlign',\n 'textDecorationLine',\n 'textDecorationStyle',\n 'textDecorationColor',\n 'textShadowColor',\n 'textShadowColor',\n 'textShadowOffset',\n 'textShadowRadius',\n // TextStyleIOS\n 'textTransform',\n 'writingDirection',\n // TextStyleAndroid\n 'textAlignVertical',\n 'includeFontPadding',\n];\nexports.FlexStyleProps = [\n 'alignContent',\n 'alignItems',\n 'alignSelf',\n 'aspectRatio',\n 'borderBottomWidth',\n 'borderEndWidth',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderStartWidth',\n 'borderTopWidth',\n 'borderWidth',\n 'bottom',\n 'display',\n 'end',\n 'flex',\n 'flexBasis',\n 'flexDirection',\n 'flexGrow',\n 'flexShrink',\n 'flexWrap',\n 'height',\n 'justifyContent',\n 'left',\n 'margin',\n 'marginBottom',\n 'marginEnd',\n 'marginHorizontal',\n 'marginLeft',\n 'marginRight',\n 'marginStart',\n 'marginTop',\n 'marginVertical',\n 'maxHeight',\n 'maxWidth',\n 'minHeight',\n 'minWidth',\n 'overflow',\n 'padding',\n 'paddingBottom',\n 'paddingEnd',\n 'paddingHorizontal',\n 'paddingLeft',\n 'paddingRight',\n 'paddingStart',\n 'paddingTop',\n 'paddingVertical',\n 'position',\n 'right',\n 'start',\n 'top',\n 'width',\n 'zIndex',\n // ios\n 'direction',\n];\nconst FlexViewCrossStyleValues = [\n 'borderBottomWidth',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderWidth',\n];\nexports.FlexViewCrossStyleProps = exports.FlexStyleProps.filter((el) => !FlexViewCrossStyleValues.includes(el));\nclass NativePropsService {\n /**\n * Retrieves all props included in `from` array\n *\n * @param source (Props) - source object\n * @param from (string[]) - array of keys needed to retrieve from `source`\n *\n * @return (Partial) - object with keys contained in `from` array\n */\n all(source, from) {\n if (!source) {\n return {};\n }\n return from.reduce((acc, prop) => {\n return { ...acc, [prop]: source[prop] };\n }, {});\n }\n /**\n * Retrieves all props included in `from` array, rest props includes in under the `rest` key\n */\n allWithRest(source, from) {\n if (!source) {\n return { rest: {} };\n }\n return Object.keys(source).reduce((acc, prop) => {\n const { rest, ...allOf } = acc;\n if (from.includes(prop)) {\n return { ...allOf, [prop]: source[prop], rest };\n }\n return { ...allOf, rest: { ...rest, [prop]: source[prop] } };\n }, {});\n }\n /**\n * Returns all styles with prefix\n *\n * @param {StyleType} source - Eva Styles\n * @param {string} key - prefix\n *\n * @return {StyleType} - all styles with prefix\n */\n allWithPrefix(source, key) {\n return Object.keys(source)\n .filter((styleName) => styleName.includes(key))\n .reduce((obj, styleKey) => {\n return {\n ...obj,\n [styleKey]: source[styleKey],\n };\n }, {});\n }\n}\nexports.PropsService = new NativePropsService();\n//# sourceMappingURL=props.service.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IndexPath = void 0;\nclass IndexPath {\n row;\n section;\n constructor(row, section) {\n this.row = row;\n this.section = section;\n }\n get groupIndex() {\n return this.section >= 0 && new IndexPath(this.row);\n }\n toString() {\n if (this.section >= 0) {\n return `${this.section + 1}.${this.row + 1}`;\n }\n return (this.row + 1).toString();\n }\n equals = (other) => {\n if (!other) {\n return false;\n }\n return this.row === other.row && this.section === other.section;\n };\n}\nexports.IndexPath = IndexPath;\n//# sourceMappingURL=typings.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.List = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst theme_1 = require(\"../../theme\");\n/**\n * Performant interface for rendering simple, flat lists.\n *\n * @extends React.Component\n *\n * @property {any[]} data - An array of anything to be rendered within the list\n *\n * @property {(ListRenderItemInfo) => ReactElement} renderItem - Takes an\n * item from *data* and renders it into the list.\n *\n * @property {FlatListProps} ...FlatListProps - Any props applied to FlatList component.\n *\n * @overview-example ListSimpleUsage\n * Lists should render ListItem components by providing them through `renderItem` property\n * to provide a useful component.\n *\n * @overview-example ListDividers\n * It is a good idea to separate items with `Divider` component.\n *\n * @overview-example ListAccessories\n * Items may contain inner views configured with `accessoryLeft` and `accessoryRight` properties.\n *\n * @overview-example ListCustomItem\n * Using ListItem is helpful for basic lists, but not required. For example, `Card` may be used.\n */\nlet List = class List extends react_1.default.Component {\n listRef = react_1.default.createRef();\n scrollToEnd = (params) => {\n this.listRef.current?.scrollToEnd(params);\n };\n scrollToIndex = (params) => {\n this.listRef.current?.scrollToIndex(params);\n };\n scrollToOffset(params) {\n this.listRef.current?.scrollToOffset(params);\n }\n keyExtractor = (item, index) => {\n return index.toString();\n };\n render() {\n const { eva, style, keyExtractor, ...flatListProps } = this.props;\n return ();\n }\n};\nList = __decorate([\n (0, theme_1.styled)('List')\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n], List);\nexports.List = List;\n//# sourceMappingURL=list.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Popover = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst devsupport_1 = require(\"../../devsupport\");\nconst theme_1 = require(\"../../theme\");\nconst modal_component_1 = require(\"../modal/modal.component\");\nconst popoverView_component_1 = require(\"./popoverView.component\");\nconst placement_service_1 = require(\"./placement.service\");\nconst type_1 = require(\"./type\");\n/**\n * Displays a content positioned relative to another view.\n *\n * @extends React.Component\n *\n * @property {boolean} visible - Whether content component is visible.\n * Defaults to false.\n * The property is more specific that the show/hide methods, so do not use them at the same time.\n *\n * @property {() => ReactElement} anchor - A component relative to which content component will be shown.\n *\n * @property {ReactElement} children - A component displayed within the popover.\n *\n * @property {() => void} onBackdropPress - Called when popover is visible and the underlying view was touched.\n * Useful when needed to close the modal on outside touches.\n *\n * @property {boolean} fullWidth - Whether a content component should take the width of `anchor`.\n *\n * @property {string | PopoverPlacement} placement - Position of the content component relative to the `anchor`.\n * Can be `left`, `top`, `right`, `bottom`, `left start`, `left end`, `top start`, `top end`, `right start`,\n * `right end`, `bottom start`, `bottom end`, `inner`, `inner top` or `inner bottom`.\n * Defaults to *bottom*.\n *\n * @property {boolean} hardwareAccelerated - Controls whether to force hardware acceleration for the underlying window.\n * Defaults to false.\n *\n * @property {'none' | 'slide' | 'fade'} animationType - Controls how the modal animates.\n * Defaults to 'none'.\n *\n * @property {Array<'portrait' | 'portrait-upside-down' | 'landscape' | 'landscape-left' | 'landscape-right'>}\n * supportedOrientations -\n * allows the modal to be rotated to any of the specified orientations.\n * On iOS, the modal is still restricted by what's specified\n * in your app's Info.plist's UISupportedInterfaceOrientations field\n *\n * @property {StyleProp} backdropStyle - Style of backdrop.\n *\n * @property {(event: NativeSyntheticEvent) => void} onShow -\n * Allows passing a function that will be called once the modal has been shown.\n *\n * @property {ViewProps} ...ViewProps - Any props applied to View component.\n *\n * @overview-example PopoverSimpleUsage\n * Popover accepts it's content as child element and is displayed relative to `anchor` view.\n *\n * @overview-example PopoverPlacement\n * By default, it is displayed to the bottom of `anchor` view, but it is configurable with `placement` property.\n *\n * @overview-example PopoverFullWidth\n * Popover may take the full width of the anchor view by configuring `fullWidth` property.\n *\n * @overview-example PopoverStyledBackdrop\n * To style the underlying view, `backdropStyle` property may be used.\n */\nclass Popover extends react_1.default.Component {\n static defaultProps = {\n placement: type_1.PopoverPlacements.BOTTOM,\n };\n state = {\n childFrame: devsupport_1.Frame.zero(),\n forceMeasure: false,\n actualPlacement: this.preferredPlacement,\n contentPosition: devsupport_1.Point.zero(),\n };\n placementService = new placement_service_1.PopoverPlacementService();\n get preferredPlacement() {\n return type_1.PopoverPlacements.parse(this.props.placement);\n }\n get contentFlexPosition() {\n const { x: left, y: top } = this.state.contentPosition;\n return { left, top };\n }\n componentDidUpdate() {\n if (this.props.visible && !this.state.forceMeasure) {\n this.setState({ forceMeasure: true });\n }\n }\n static getDerivedStateFromProps(props, state) {\n if (!props.visible && !devsupport_1.Point.outscreen().equals(state.contentPosition)) {\n return {\n ...state,\n contentPosition: devsupport_1.Point.outscreen(),\n };\n }\n return null;\n }\n onChildMeasure = (childFrame) => {\n if (!childFrame.equals(this.state.childFrame)) {\n this.setState({ childFrame });\n }\n };\n onContentMeasure = (anchorFrame) => {\n const placementOptions = this.findPlacementOptions(anchorFrame, this.state.childFrame);\n const actualPlacement = this.placementService.find(this.preferredPlacement, placementOptions);\n const displayFrame = actualPlacement.frame(placementOptions);\n const contentPosition = displayFrame.origin;\n if (!contentPosition.equals(this.state.contentPosition) ||\n actualPlacement.rawValue !== this.state.actualPlacement.rawValue) {\n this.setState({\n actualPlacement,\n contentPosition,\n });\n }\n };\n findPlacementOptions = (contentFrame, childFrame) => {\n const width = this.props.fullWidth ? childFrame.size.width : contentFrame.size.width;\n const frame = new devsupport_1.Frame(contentFrame.origin.x, contentFrame.origin.y, width, contentFrame.size.height);\n return new type_1.PlacementOptions(frame, childFrame, devsupport_1.Frame.window(), devsupport_1.Frame.zero());\n };\n renderContentElement = () => {\n const contentElement = this.props.children;\n const fullWidthStyle = { width: this.state.childFrame.size.width };\n return react_1.default.cloneElement(contentElement, {\n style: [this.props.fullWidth && fullWidthStyle, contentElement.props.style],\n });\n };\n renderPopoverElement = () => {\n return (\n {this.renderContentElement()}\n );\n };\n renderMeasuringPopoverElement = () => {\n return (\n {this.renderPopoverElement()}\n );\n };\n render() {\n return (\n \n {this.props.anchor()}\n \n \n {this.renderMeasuringPopoverElement()}\n \n );\n }\n}\nexports.Popover = Popover;\nconst styles = react_native_1.StyleSheet.create({\n popoverView: {\n position: 'absolute',\n },\n});\n//# sourceMappingURL=popover.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Modal = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst devsupport_1 = require(\"../../devsupport\");\nconst theme_1 = require(\"../../theme\");\nconst backdrop_component_1 = require(\"@ui-kitten/components/theme/backdrop/backdrop.component\");\n/**\n * A wrapper that presents content above an enclosing view.\n *\n * @extends React.Component\n *\n * @property {ReactNode} children - Component to render within the modal.\n *\n * @property {boolean} visible - Whether component is visible.\n * Defaults to false.\n *\n * @property {boolean} shouldUseContainer - Whether children should be wrapped into absolute positioned container.\n * Defaults to true.\n *\n * @property {boolean} hardwareAccelerated - Controls whether to force hardware acceleration for the underlying window.\n * Defaults to false.\n *\n * @property {'none' | 'slide' | 'fade'} animationType - Controls how the modal animates.\n * Defaults to 'none'.\n *\n * @property {Array<'portrait' | 'portrait-upside-down' | 'landscape' | 'landscape-left' | 'landscape-right'>}\n * supportedOrientations -\n * allows the modal to be rotated to any of the specified orientations.\n * On iOS, the modal is still restricted by what's specified\n * in your app's Info.plist's UISupportedInterfaceOrientations field\n *\n * @property {() => void} onBackdropPress - Called when the modal is visible and the view below it was touched.\n * Useful when needed to close the modal on outside touches.\n *\n * @property {(event: NativeSyntheticEvent) => void} onShow -\n * Allows passing a function that will be called once the modal has been shown.\n *\n * @property {StyleProp} backdropStyle - Style of backdrop.\n *\n * @property {ViewProps} ...ViewProps - Any props applied to View component.\n *\n * @overview-example ModalSimpleUsage\n * Modals accept content views as child elements and are displayed in the screen center.\n * To display a modal, a `visible` property should be used.\n *\n * @overview-example ModalWithBackdrop\n * To configure underlying view, `backdropStyle` and `onBackdropPress` properties may be used.\n */\nclass Modal extends react_1.default.PureComponent {\n static defaultProps = {\n shouldUseContainer: true,\n };\n state = {\n contentFrame: devsupport_1.Frame.zero(),\n forceMeasure: false,\n contentPosition: devsupport_1.Point.outscreen(),\n };\n get contentFlexPosition() {\n const derivedStyle = react_native_1.StyleSheet.flatten(this.props.style || {});\n const { x: centerX, y: centerY } = this.state.contentPosition;\n return { left: derivedStyle.left || centerX, top: derivedStyle.top || centerY };\n }\n componentDidUpdate() {\n if (this.props.visible && !this.state.forceMeasure) {\n this.setState({ forceMeasure: true });\n return;\n }\n }\n static getDerivedStateFromProps(props, state) {\n if (!props.visible) {\n return {\n ...state,\n contentPosition: devsupport_1.Point.outscreen(),\n };\n }\n return null;\n }\n onContentMeasure = (contentFrame) => {\n const displayFrame = contentFrame.centerOf(devsupport_1.Frame.window());\n this.setState({ contentPosition: displayFrame.origin });\n };\n renderContentElement = () => {\n return ();\n };\n renderMeasuringContentElement = () => {\n return (\n {this.renderContentElement()}\n );\n };\n render() {\n return this.props.visible && (\n \n {this.props.shouldUseContainer ? this.renderMeasuringContentElement() : this.props.children}\n \n );\n }\n}\nexports.Modal = Modal;\nconst styles = react_native_1.StyleSheet.create({\n modalView: {\n position: 'absolute',\n },\n});\n//# sourceMappingURL=modal.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Backdrop = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nclass Backdrop extends react_1.default.Component {\n static defaultProps = {\n visible: false,\n };\n renderChildElement = (source) => {\n return react_1.default.cloneElement(source, {\n style: [source.props.style, this.props.style],\n });\n };\n renderComponentChildren = (source) => {\n return react_1.default.Children.map(source, this.renderChildElement);\n };\n renderComponent = () => {\n const componentChildren = this.renderComponentChildren(this.props.children);\n return (\n \n {componentChildren}\n );\n };\n render() {\n return this.props.visible && this.renderComponent();\n }\n}\nexports.Backdrop = Backdrop;\n//# sourceMappingURL=backdrop.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PopoverView = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst devsupport_1 = require(\"../../devsupport\");\nconst theme_1 = require(\"../../theme\");\nconst INDICATOR_OFFSET = 8;\nconst INDICATOR_WIDTH = 6;\nlet PopoverView = class PopoverView extends react_1.default.Component {\n getComponentStyle = (source) => {\n const { indicatorWidth, indicatorHeight, indicatorBackgroundColor, ...containerParameters } = source;\n return {\n content: containerParameters,\n indicator: {\n width: indicatorWidth,\n height: indicatorHeight,\n backgroundColor: indicatorBackgroundColor,\n },\n };\n };\n getDirectionStyle = () => {\n const { direction, alignment } = this.props.layoutDirection;\n const isVertical = direction.startsWith('column');\n const isStart = alignment.endsWith('start');\n const isEnd = alignment.endsWith('end');\n const isReverse = direction.endsWith('reverse');\n // Rotate indicator by 90 deg if we have `row` direction (left/right placement)\n // Rotate it again by 180 if we have `row-reverse` (bottom/right placement)\n const indicatorRotate = isVertical ? 180 : 90;\n const indicatorReverseRotate = isReverse ? 0 : 180;\n // Translate container by half of `indicatorWidth`. Exactly half (because it has a square shape)\n // Reverse if needed\n // @ts-ignore: indicatorWidth type is always number\n let containerTranslate = (this.props.indicator && !isVertical) ? INDICATOR_WIDTH / 2 : 0;\n containerTranslate = isReverse ? containerTranslate : -containerTranslate;\n // Translate indicator by passed `indicatorOffset`\n // Reverse if needed\n let indicatorTranslate = isVertical ? -INDICATOR_OFFSET : INDICATOR_OFFSET;\n indicatorTranslate = isReverse ? -indicatorTranslate : indicatorTranslate;\n const i18nVerticalIndicatorTranslate = devsupport_1.RTLService.select(indicatorTranslate, -indicatorTranslate);\n indicatorTranslate = isVertical ? i18nVerticalIndicatorTranslate : indicatorTranslate;\n const contentTransforms = {\n transform: [\n { translateX: containerTranslate },\n ],\n };\n const indicatorTransforms = {\n transform: [\n { rotate: `${indicatorRotate}deg` },\n { rotate: `${indicatorReverseRotate}deg` },\n // Translate indicator \"to start\" if we have `-start` alignment\n // Or translate it \"to end\" if we have `-end` alignment\n { translateX: isStart ? -indicatorTranslate : 0 },\n { translateX: isEnd ? indicatorTranslate : 0 },\n ],\n };\n return {\n container: {\n flexDirection: direction,\n alignItems: alignment,\n },\n content: contentTransforms,\n indicator: indicatorTransforms,\n };\n };\n render() {\n const { eva, style, contentContainerStyle, onLayout, indicator, ...viewProps } = this.props;\n const evaStyle = this.getComponentStyle(eva.style);\n const directionStyle = this.getDirectionStyle();\n return (\n \n \n );\n }\n};\nPopoverView = __decorate([\n (0, theme_1.styled)('Popover')\n], PopoverView);\nexports.PopoverView = PopoverView;\n//# sourceMappingURL=popoverView.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PopoverPlacementService = void 0;\nconst type_1 = require(\"./type\");\nconst PLACEMENT_FAMILIES = [\n type_1.PopoverPlacements.BOTTOM.rawValue,\n type_1.PopoverPlacements.TOP.rawValue,\n type_1.PopoverPlacements.LEFT.rawValue,\n type_1.PopoverPlacements.RIGHT.rawValue,\n type_1.PopoverPlacements.INNER.rawValue,\n];\nclass PopoverPlacementService {\n find(preferredValue, options) {\n const placement = this.findRecursive(preferredValue, [...PLACEMENT_FAMILIES], options);\n return placement || preferredValue;\n }\n findRecursive(placement, families, options) {\n const oneOfCurrentFamily = this.findFromFamily(placement, options);\n if (oneOfCurrentFamily) {\n return oneOfCurrentFamily;\n }\n const oneOfReversedFamily = this.findFromFamily(placement.reverse(), options);\n if (oneOfReversedFamily) {\n return oneOfReversedFamily;\n }\n delete families[families.indexOf(placement.parent().rawValue)];\n delete families[families.indexOf(placement.reverse().parent().rawValue)];\n const firstTruthy = families.filter(Boolean)[0];\n if (firstTruthy) {\n const nextPlacement = type_1.PopoverPlacements.parse(firstTruthy);\n return this.findRecursive(nextPlacement, families, options);\n }\n return null;\n }\n findFromFamily(placement, options) {\n const preferredFrame = placement.frame(options);\n if (placement.fits(preferredFrame, options.bounds)) {\n return placement;\n }\n return placement.family().find((familyValue) => {\n const familyFrame = familyValue.frame(options);\n return familyValue.fits(familyFrame, options.bounds);\n });\n }\n}\nexports.PopoverPlacementService = PopoverPlacementService;\n//# sourceMappingURL=placement.service.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PopoverPlacements = exports.PlacementOptions = exports.Offsets = void 0;\nconst react_native_1 = require(\"react-native\");\nconst devsupport_1 = require(\"../../devsupport\");\nclass Offsets {\n static MARGIN = new class {\n rawValue = 'margin';\n apply(frame, value) {\n return new devsupport_1.Frame(value, value, value, value);\n }\n };\n static MARGIN_HORIZONTAL = new class {\n rawValue = 'marginHorizontal';\n apply(frame, value) {\n return new devsupport_1.Frame(value, frame.origin.y, value, frame.size.height);\n }\n };\n static MARGIN_VERTICAL = new class {\n rawValue = 'marginVertical';\n apply(frame, value) {\n return new devsupport_1.Frame(frame.origin.x, value, frame.size.width, value);\n }\n };\n static MARGIN_LEFT = new class {\n rawValue = 'marginLeft';\n apply(frame, value) {\n return new devsupport_1.Frame(value, frame.origin.y, frame.size.width, frame.size.height);\n }\n };\n static MARGIN_TOP = new class {\n rawValue = 'marginTop';\n apply(frame, value) {\n return new devsupport_1.Frame(frame.origin.x, value, frame.size.width, frame.size.height);\n }\n };\n static MARGIN_RIGHT = new class {\n rawValue = 'marginRight';\n apply(frame, value) {\n return new devsupport_1.Frame(frame.origin.x, frame.origin.y, value, frame.size.height);\n }\n };\n static MARGIN_BOTTOM = new class {\n rawValue = 'marginBottom';\n apply(frame, value) {\n return new devsupport_1.Frame(frame.origin.x, frame.origin.y, frame.size.width, value);\n }\n };\n static find(source) {\n const offsetKeys = [\n Offsets.MARGIN.rawValue,\n Offsets.MARGIN_HORIZONTAL.rawValue,\n Offsets.MARGIN_VERTICAL.rawValue,\n Offsets.MARGIN_LEFT.rawValue,\n Offsets.MARGIN_TOP.rawValue,\n Offsets.MARGIN_RIGHT.rawValue,\n Offsets.MARGIN_BOTTOM.rawValue,\n ];\n const flatStyle = react_native_1.StyleSheet.flatten(source) || {};\n return Object.keys(flatStyle)\n .filter((key) => offsetKeys.includes(key))\n .reduce((acc, key) => {\n const value = flatStyle[key];\n const offsetValue = Offsets.parse(key);\n return offsetValue ? offsetValue.apply(acc, value) : acc;\n }, devsupport_1.Frame.zero());\n }\n static parse(value, fallback) {\n return Offsets.typeOf(value) ? value : Offsets.parseString(value, fallback);\n }\n static parseString(rawValue, fallback) {\n switch (rawValue) {\n case Offsets.MARGIN.rawValue:\n return Offsets.MARGIN;\n case Offsets.MARGIN_HORIZONTAL.rawValue:\n return Offsets.MARGIN_HORIZONTAL;\n case Offsets.MARGIN_VERTICAL.rawValue:\n return Offsets.MARGIN_VERTICAL;\n case Offsets.MARGIN_LEFT.rawValue:\n return Offsets.MARGIN_LEFT;\n case Offsets.MARGIN_TOP.rawValue:\n return Offsets.MARGIN_TOP;\n case Offsets.MARGIN_RIGHT.rawValue:\n return Offsets.MARGIN_RIGHT;\n case Offsets.MARGIN_BOTTOM.rawValue:\n return Offsets.MARGIN_BOTTOM;\n default:\n return fallback;\n }\n }\n static typeOf(value) {\n const { rawValue } = value;\n return rawValue !== undefined;\n }\n}\nexports.Offsets = Offsets;\nclass PlacementOptions {\n source;\n other;\n bounds;\n offsets;\n constructor(source = devsupport_1.Frame.zero(), other = devsupport_1.Frame.zero(), bounds = devsupport_1.Frame.zero(), offsets = devsupport_1.Frame.zero()) {\n this.source = source;\n this.other = other;\n this.bounds = bounds;\n this.offsets = offsets;\n }\n}\nexports.PlacementOptions = PlacementOptions;\nclass PopoverPlacements {\n static RIGHT_START = new class {\n rawValue = 'right start';\n frame(options) {\n const { origin, size } = this.parent().frame(options);\n return new devsupport_1.Frame(origin.x, Math.round(origin.y - (options.other.size.height - size.height) / 2 + options.offsets.origin.y), size.width, size.height);\n }\n flex() {\n return {\n direction: 'row',\n alignment: 'flex-start',\n };\n }\n parent() {\n return PopoverPlacements.RIGHT;\n }\n reverse() {\n return PopoverPlacements.LEFT_START;\n }\n family() {\n return this.parent().family();\n }\n fits(frame, other) {\n return this.parent().fits(frame, other);\n }\n };\n static LEFT_START = new class {\n rawValue = 'left start';\n frame(options) {\n const { origin, size } = this.parent().frame(options);\n return new devsupport_1.Frame(origin.x, Math.round(origin.y - (options.other.size.height - size.height) / 2 + options.offsets.origin.y), size.width, size.height);\n }\n flex() {\n return {\n direction: 'row-reverse',\n alignment: 'flex-start',\n };\n }\n parent() {\n return PopoverPlacements.LEFT;\n }\n reverse() {\n return PopoverPlacements.RIGHT_START;\n }\n family() {\n return this.parent().family();\n }\n fits(frame, other) {\n return this.parent().fits(frame, other);\n }\n };\n static RIGHT_END = new class {\n rawValue = 'right end';\n frame(options) {\n const { origin, size } = this.parent().frame(options);\n return new devsupport_1.Frame(origin.x, Math.round(origin.y + (options.other.size.height - size.height) / 2 - options.offsets.size.height), size.width, size.height);\n }\n flex() {\n return {\n direction: 'row',\n alignment: 'flex-end',\n };\n }\n parent() {\n return PopoverPlacements.RIGHT;\n }\n reverse() {\n return PopoverPlacements.LEFT_END;\n }\n family() {\n return this.parent().family();\n }\n fits(frame, other) {\n return this.parent().fits(frame, other);\n }\n };\n static LEFT_END = new class {\n rawValue = 'left end';\n frame(options) {\n const { origin, size } = this.parent().frame(options);\n return new devsupport_1.Frame(origin.x, Math.round(origin.y + (options.other.size.height - size.height) / 2 - options.offsets.size.height), size.width, size.height);\n }\n flex() {\n return {\n direction: 'row-reverse',\n alignment: 'flex-end',\n };\n }\n parent() {\n return PopoverPlacements.LEFT;\n }\n reverse() {\n return PopoverPlacements.RIGHT_END;\n }\n family() {\n return this.parent().family();\n }\n fits(frame, other) {\n return this.parent().fits(frame, other);\n }\n };\n static RIGHT = new class {\n rawValue = 'right';\n frame(options) {\n const { origin, size } = options.source.rightOf(options.other).centerVerticalOf(options.other);\n const x = devsupport_1.RTLService.select(origin.x - options.offsets.size.width, options.bounds.size.width - size.width - (origin.x - options.offsets.size.width));\n return new devsupport_1.Frame(x, origin.y, size.width, size.height);\n }\n flex() {\n return {\n direction: 'row',\n alignment: 'center',\n };\n }\n parent() {\n return this;\n }\n reverse() {\n return PopoverPlacements.LEFT;\n }\n family() {\n return [\n PopoverPlacements.RIGHT,\n PopoverPlacements.RIGHT_START,\n PopoverPlacements.RIGHT_END,\n ];\n }\n fits(frame, other) {\n return fitsEnd(frame, other) && fitsTop(frame, other) && fitsBottom(frame, other);\n }\n };\n static LEFT = new class {\n rawValue = 'left';\n frame(options) {\n const { origin, size } = options.source.leftOf(options.other).centerVerticalOf(options.other);\n const x = devsupport_1.RTLService.select(origin.x + options.offsets.origin.x, options.bounds.size.width - size.width - (origin.x + options.offsets.size.width));\n return new devsupport_1.Frame(x, origin.y, size.width, size.height);\n }\n flex() {\n return {\n direction: 'row-reverse',\n alignment: 'center',\n };\n }\n parent() {\n return this;\n }\n reverse() {\n return PopoverPlacements.RIGHT;\n }\n family() {\n return [\n PopoverPlacements.LEFT,\n PopoverPlacements.LEFT_START,\n PopoverPlacements.LEFT_END,\n ];\n }\n fits(frame, other) {\n return fitsStart(frame, other) && fitsTop(frame, other) && fitsBottom(frame, other);\n }\n };\n static BOTTOM_START = new class {\n rawValue = 'bottom start';\n frame(options) {\n const { origin, size } = this.parent().frame(options);\n return new devsupport_1.Frame(Math.round(origin.x - (options.other.size.width - size.width) / 2 + options.offsets.origin.x), origin.y, size.width, size.height);\n }\n flex() {\n return {\n direction: 'column',\n alignment: 'flex-start',\n };\n }\n parent() {\n return PopoverPlacements.BOTTOM;\n }\n reverse() {\n return PopoverPlacements.TOP_START;\n }\n family() {\n return this.parent().family();\n }\n fits(frame, other) {\n return this.parent().fits(frame, other);\n }\n };\n static TOP_START = new class {\n rawValue = 'top start';\n frame(options) {\n const { origin, size } = this.parent().frame(options);\n return new devsupport_1.Frame(Math.round(origin.x - (options.other.size.width - size.width) / 2 + options.offsets.origin.x), origin.y, size.width, size.height);\n }\n flex() {\n return {\n direction: 'column-reverse',\n alignment: 'flex-start',\n };\n }\n parent() {\n return PopoverPlacements.TOP;\n }\n reverse() {\n return PopoverPlacements.BOTTOM_START;\n }\n family() {\n return this.parent().family();\n }\n fits(frame, other) {\n return this.parent().fits(frame, other);\n }\n };\n static BOTTOM_END = new class {\n rawValue = 'bottom end';\n frame(options) {\n const { origin, size } = this.parent().frame(options);\n return new devsupport_1.Frame(Math.round(origin.x + (options.other.size.width - size.width) / 2 - options.offsets.size.width), origin.y, size.width, size.height);\n }\n flex() {\n return {\n direction: 'column',\n alignment: 'flex-end',\n };\n }\n parent() {\n return PopoverPlacements.BOTTOM;\n }\n reverse() {\n return PopoverPlacements.TOP_END;\n }\n family() {\n return this.parent().family();\n }\n fits(frame, other) {\n return this.parent().fits(frame, other);\n }\n };\n static TOP_END = new class {\n rawValue = 'top end';\n frame(options) {\n const { origin, size } = this.parent().frame(options);\n return new devsupport_1.Frame(Math.round(origin.x + (options.other.size.width - size.width) / 2 - options.offsets.size.width), origin.y, size.width, size.height);\n }\n flex() {\n return {\n direction: 'column-reverse',\n alignment: 'flex-end',\n };\n }\n parent() {\n return PopoverPlacements.TOP;\n }\n reverse() {\n return PopoverPlacements.BOTTOM_END;\n }\n family() {\n return this.parent().family();\n }\n fits(frame, other) {\n return this.parent().fits(frame, other);\n }\n };\n static INNER = new class {\n rawValue = 'inner';\n frame(options) {\n const { origin, size } = options.source.centerVerticalOf(options.other).centerHorizontalOf(options.other);\n const x = devsupport_1.RTLService.select(origin.x, options.bounds.size.width - (origin.x + size.width));\n return new devsupport_1.Frame(x, origin.y - options.offsets.size.height, size.width, size.height);\n }\n flex() {\n return {\n direction: 'column',\n alignment: 'center',\n };\n }\n parent() {\n return this;\n }\n reverse() {\n return PopoverPlacements.INNER;\n }\n family() {\n return [\n PopoverPlacements.INNER_TOP,\n PopoverPlacements.INNER_BOTTOM,\n PopoverPlacements.INNER,\n ];\n }\n fits(frame, other) {\n return fitsBottom(frame, other) && fitsLeft(frame, other) && fitsRight(frame, other);\n }\n };\n static INNER_TOP = new class {\n rawValue = 'inner top';\n frame(options) {\n const { origin, size } = options.source.topIn(options.other).centerHorizontalOf(options.other);\n const x = devsupport_1.RTLService.select(origin.x, options.bounds.size.width - (origin.x + size.width));\n return new devsupport_1.Frame(x, origin.y - options.offsets.size.height, size.width, size.height);\n }\n flex() {\n return {\n direction: 'column',\n alignment: 'center',\n };\n }\n parent() {\n return PopoverPlacements.INNER;\n }\n reverse() {\n return PopoverPlacements.INNER_BOTTOM;\n }\n family() {\n return this.parent().family();\n }\n fits(frame, other) {\n return this.parent().fits(frame, other);\n }\n };\n static INNER_BOTTOM = new class {\n rawValue = 'inner bottom';\n frame(options) {\n const { origin, size } = options.source.bottomIn(options.other).centerHorizontalOf(options.other);\n const x = devsupport_1.RTLService.select(origin.x, options.bounds.size.width - (origin.x + size.width));\n return new devsupport_1.Frame(x, origin.y - options.offsets.size.height, size.width, size.height);\n }\n flex() {\n return {\n direction: 'column-reverse',\n alignment: 'center',\n };\n }\n parent() {\n return PopoverPlacements.INNER;\n }\n reverse() {\n return PopoverPlacements.INNER_TOP;\n }\n family() {\n return this.parent().family();\n }\n fits(frame, other) {\n return this.parent().fits(frame, other);\n }\n };\n static TOP = new class {\n rawValue = 'top';\n frame(options) {\n const { origin, size } = options.source.topOf(options.other).centerHorizontalOf(options.other);\n const x = devsupport_1.RTLService.select(origin.x, options.bounds.size.width - (origin.x + size.width));\n return new devsupport_1.Frame(x, origin.y + options.offsets.origin.y, size.width, size.height);\n }\n flex() {\n return {\n direction: 'column-reverse',\n alignment: 'center',\n };\n }\n parent() {\n return this;\n }\n reverse() {\n return PopoverPlacements.BOTTOM;\n }\n family() {\n return [\n PopoverPlacements.TOP,\n PopoverPlacements.TOP_START,\n PopoverPlacements.TOP_END,\n ];\n }\n fits(frame, other) {\n return fitsTop(frame, other) && fitsLeft(frame, other) && fitsRight(frame, other);\n }\n };\n static BOTTOM = new class {\n rawValue = 'bottom';\n frame(options) {\n const { origin, size } = options.source.bottomOf(options.other).centerHorizontalOf(options.other);\n const x = devsupport_1.RTLService.select(origin.x, options.bounds.size.width - (origin.x + size.width));\n return new devsupport_1.Frame(x, origin.y - options.offsets.size.height, size.width, size.height);\n }\n flex() {\n return {\n direction: 'column',\n alignment: 'center',\n };\n }\n parent() {\n return this;\n }\n family() {\n return [\n PopoverPlacements.BOTTOM,\n PopoverPlacements.BOTTOM_START,\n PopoverPlacements.BOTTOM_END,\n ];\n }\n reverse() {\n return PopoverPlacements.TOP;\n }\n fits(frame, other) {\n return fitsBottom(frame, other) && fitsLeft(frame, other) && fitsRight(frame, other);\n }\n };\n static parse(value, fallback) {\n return PopoverPlacements.typeOf(value) ? value : PopoverPlacements.parseString(value, fallback);\n }\n static parseString(rawValue, fallback) {\n switch (rawValue) {\n case PopoverPlacements.LEFT.rawValue:\n return PopoverPlacements.LEFT;\n case PopoverPlacements.TOP.rawValue:\n return PopoverPlacements.TOP;\n case PopoverPlacements.RIGHT.rawValue:\n return PopoverPlacements.RIGHT;\n case PopoverPlacements.BOTTOM.rawValue:\n return PopoverPlacements.BOTTOM;\n case PopoverPlacements.LEFT_START.rawValue:\n return PopoverPlacements.LEFT_START;\n case PopoverPlacements.LEFT_END.rawValue:\n return PopoverPlacements.LEFT_END;\n case PopoverPlacements.TOP_START.rawValue:\n return PopoverPlacements.TOP_START;\n case PopoverPlacements.TOP_END.rawValue:\n return PopoverPlacements.TOP_END;\n case PopoverPlacements.RIGHT_START.rawValue:\n return PopoverPlacements.RIGHT_START;\n case PopoverPlacements.RIGHT_END.rawValue:\n return PopoverPlacements.RIGHT_END;\n case PopoverPlacements.BOTTOM_START.rawValue:\n return PopoverPlacements.BOTTOM_START;\n case PopoverPlacements.BOTTOM_END.rawValue:\n return PopoverPlacements.BOTTOM_END;\n case PopoverPlacements.INNER.rawValue:\n return PopoverPlacements.INNER;\n case PopoverPlacements.INNER_TOP.rawValue:\n return PopoverPlacements.INNER_TOP;\n case PopoverPlacements.INNER_BOTTOM.rawValue:\n return PopoverPlacements.INNER_BOTTOM;\n default:\n return fallback;\n }\n }\n static typeOf(value) {\n const { rawValue } = value;\n return rawValue !== undefined;\n }\n}\nexports.PopoverPlacements = PopoverPlacements;\nconst fitsStart = (frame, other) => {\n return devsupport_1.RTLService.select(fitsLeft, fitsRight)(frame, other);\n};\nconst fitsEnd = (frame, other) => {\n return devsupport_1.RTLService.select(fitsRight, fitsLeft)(frame, other);\n};\nconst fitsLeft = (frame, other) => {\n return frame.origin.x >= other.origin.x;\n};\nconst fitsRight = (frame, other) => {\n return frame.origin.x + frame.size.width <= other.size.width;\n};\nconst fitsTop = (frame, other) => {\n return frame.origin.y >= other.origin.y;\n};\nconst fitsBottom = (frame, other) => {\n return frame.origin.y + frame.size.height <= other.size.height;\n};\n//# sourceMappingURL=type.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AutocompleteItem = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst listItem_component_1 = require(\"../list/listItem.component\");\n/**\n * A single item in Autocomplete List.\n * Items should be rendered within Autocomplete children to provide a usable component.\n *\n * @extends React.Component\n *\n * @property {ReactText | (TextProps) => ReactElement} title - String, number or a function component\n * to render within the button.\n * If it is a function, expected to return a Text.\n *\n * @property {(ImageProps) => ReactElement} accessoryLeft - Function component\n * to render to start of the *title*.\n * Expected to return an Image.\n *\n * @property {(ImageProps) => ReactElement} accessoryRight - Function component\n * to render to end of the *title*.\n * Expected to return an Image.\n *\n * @property {TouchableOpacityProps} ...TouchableOpacityProps - Any props applied to TouchableOpacity component.\n *\n * @overview-example AutocompleteItemSimpleUsage\n */\nclass AutocompleteItem extends react_1.default.Component {\n render() {\n return ();\n }\n}\nexports.AutocompleteItem = AutocompleteItem;\n//# sourceMappingURL=autocompleteItem.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ListItem = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst devsupport_1 = require(\"../../devsupport\");\nconst theme_1 = require(\"../../theme\");\n/**\n * A single item rendered in List.\n * Items should be rendered within List by providing them through `renderItem` property to provide a usable component.\n *\n * @extends React.Component\n *\n * @property {ReactElement | ReactText | (TextProps) => ReactElement} title - String, number or a function component\n * to render within the item.\n * If it is a function, expected to return a Text.\n *\n * @property {ReactElement | ReactText | (TextProps) => ReactElement} description - String, number or a function\n * component to render within the item.\n * If it is a function, expected to return a Text.\n *\n * @property {ReactElement | (ImageProps) => ReactElement} accessoryLeft - Function component\n * to render to start of the text.\n * Expected to return an Image.\n *\n * @property {ReactElement | (ViewProps) => ReactElement} accessoryRight - Function component\n * to render to end of the text.\n *\n * @property {ReactNode} children - Component to render within the item.\n * Useful when needed to render a custom item and get a feedback when it is pressed.\n * If provided, *title* and other properties will be ignored.\n *\n * @property {TouchableOpacityProps} ...TouchableOpacityProps - Any props applied to TouchableOpacity component.\n *\n * @overview-example ListItemSimpleUsage\n *\n * @overview-example ListItemStyling\n * List Item and it's inner views can be styled by passing them as function components.\n *\n * In most cases this is redundant, if [custom theme is configured](guides/branding).\n * ```\n * import { ListItem, Text } from '@ui-kitten/components';\n *\n * TITLE}\n * description={evaProps => DESCRIPTION}\n * />\n * ```\n */\nlet ListItem = class ListItem extends react_1.default.Component {\n onPressIn = (event) => {\n this.props.eva.dispatch([theme_1.Interaction.ACTIVE]);\n this.props.onPressIn?.(event);\n };\n onPressOut = (event) => {\n this.props.eva.dispatch([]);\n this.props.onPressOut?.(event);\n };\n getComponentStyle = (source) => {\n const { iconWidth, iconHeight, iconMarginHorizontal, iconTintColor, titleMarginHorizontal, titleFontFamily, titleFontSize, titleFontWeight, titleColor, descriptionFontFamily, descriptionFontSize, descriptionFontWeight, descriptionColor, descriptionMarginHorizontal, accessoryMarginHorizontal, ...containerParameters } = source;\n return {\n container: containerParameters,\n icon: {\n width: iconWidth,\n height: iconHeight,\n marginHorizontal: iconMarginHorizontal,\n tintColor: iconTintColor,\n },\n title: {\n marginHorizontal: titleMarginHorizontal,\n fontFamily: titleFontFamily,\n fontSize: titleFontSize,\n fontWeight: titleFontWeight,\n color: titleColor,\n },\n description: {\n color: descriptionColor,\n fontFamily: descriptionFontFamily,\n fontSize: descriptionFontSize,\n fontWeight: descriptionFontWeight,\n marginHorizontal: descriptionMarginHorizontal,\n },\n accessory: {\n marginHorizontal: accessoryMarginHorizontal,\n },\n };\n };\n renderTemplateChildren = (props, evaStyle) => {\n return (<>\n \n \n \n \n \n \n );\n };\n render() {\n const { eva, style, children, title, description, accessoryLeft, accessoryRight, ...touchableProps } = this.props;\n const evaStyle = this.getComponentStyle(eva.style);\n return (\n {children || this.renderTemplateChildren(this.props, evaStyle)}\n );\n }\n};\nListItem = __decorate([\n (0, theme_1.styled)('ListItem')\n], ListItem);\nexports.ListItem = ListItem;\nconst styles = react_native_1.StyleSheet.create({\n container: {\n flexDirection: 'row',\n alignItems: 'center',\n },\n contentContainer: {\n flex: 1,\n },\n title: {\n textAlign: 'left',\n },\n description: {\n textAlign: 'left',\n },\n});\nconst webStyles = react_native_1.Platform.OS === 'web' && react_native_1.StyleSheet.create({\n container: {\n outlineWidth: 0,\n },\n});\n//# sourceMappingURL=listItem.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Avatar = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst theme_1 = require(\"../../theme\");\n/**\n * An Image with additional styles provided by Eva.\n *\n * @extends React.Component\n *\n * @property {string} shape - Shape of the component.\n * Can be `round`, `rounded` or `square`.\n * Defaults to *round*.\n *\n * @property {string} size - Size of the component.\n * Can be `tiny`, `small`, `medium`, `large`, or `giant`.\n * Defaults to *medium*.\n *\n * @property {React.ComponentType} ImageComponent - A component to render.\n * Defaults to Image.\n *\n * @property {P = ImageProps} ...P - Any props that may be accepted by the component passed to ImageComponent property.\n *\n * @overview-example AvatarSimpleUsage\n *\n * @overview-example AvatarSize\n * Avatar can be resized by passing `size` property.\n *\n * @overview-example AvatarShape\n * Also, it may have different shape configurable with `shape` property.\n *\n * @overview-example AvatarImageComponent\n * Avatar may have different root component to render images.\n * This might be helpful when needed to improve image loading with 3rd party image libraries.\n */\nlet Avatar = class Avatar extends react_1.default.Component {\n static defaultProps = {\n ImageComponent: react_native_1.Image,\n };\n getComponentStyle = (source) => {\n const { roundCoefficient, ...containerParameters } = source;\n // @ts-ignore: avoid checking `containerParameters`\n const baseStyle = react_native_1.StyleSheet.flatten([\n containerParameters,\n this.props.style,\n ]);\n // @ts-ignore: rhs operator is restricted to be number\n const borderRadius = roundCoefficient * baseStyle.height;\n return {\n borderRadius,\n ...baseStyle,\n };\n };\n render() {\n const { eva, ImageComponent, ...imageProps } = this.props;\n const evaStyle = this.getComponentStyle(eva.style);\n return ();\n }\n};\nAvatar = __decorate([\n (0, theme_1.styled)('Avatar')\n], Avatar);\nexports.Avatar = Avatar;\nconst styles = react_native_1.StyleSheet.create({\n image: {\n overflow: 'hidden',\n },\n});\n//# sourceMappingURL=avatar.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BottomNavigation = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst theme_1 = require(\"../../theme\");\nconst tabIndicator_component_1 = require(\"../shared/tabIndicator.component\");\n/**\n * A bar with tabs styled by Eva.\n * BottomNavigation should contain BottomNavigationTab components to provide a usable navigation component.\n *\n * @extends React.Component\n *\n * @property {ReactElement | ReactElement[]} children - Tabs to be rendered within the bar.\n *\n * @property {number} selectedIndex - Index of currently selected tab.\n *\n * @property {(number) => void} onSelect - Called when tab is pressed.\n *\n * @property {string} appearance - Appearance of the component.\n * Can be `default` or `noIndicator`.\n *\n * @property {StyleProp} indicatorStyle - Styles of the indicator.\n *\n * @property {ViewProps} ...ViewProps - Any props applied to View component.\n *\n * @overview-example BottomNavigationSimpleUsage\n * In basic examples, tabs are wrapped within `BottomNavigation`.\n *\n * @overview-example Using with React Navigation\n * BottomNavigation can also be [configured with React Navigation](guides/configure-navigation)\n * to provide a navigational component.\n *\n * ```\n * import React from 'react';\n * import { NavigationContainer } from '@react-navigation/native';\n * import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';\n * import { BottomNavigation, BottomNavigationTab, Layout, Text } from '@ui-kitten/components';\n *\n * const { Navigator, Screen } = createBottomTabNavigator();\n *\n * const UsersScreen = () => (\n * \n * USERS\n * \n * );\n *\n * const OrdersScreen = () => (\n * \n * ORDERS\n * \n * );\n *\n * const BottomTabBar = ({ navigation, state }) => (\n * navigation.navigate(state.routeNames[index])}>\n * \n * \n * \n * );\n *\n * const TabNavigator = () => (\n * }>\n * \n * \n * \n * );\n *\n * export const AppNavigator = () => (\n * \n * \n * \n * );\n * ```\n *\n * @overview-example BottomNavigationAccessories\n * Tabs also may contain [icons](guides/icon-packages) to provide a better user interfaces.\n *\n * @overview-example BottomNavigationTabStyling\n * Tabs and it's inner views can be styled by passing them as function components.\n * ```\n * import { BottomNavigationTab, Text } from '@ui-kitten/components';\n *\n * USERS}\n * />\n * ```\n * @overview-example BottomNavigationTabTheming\n * In most cases this is redundant, if [custom theme is configured](guides/branding).\n *\n * @example BottomNavigationWithoutIndicator\n * To remove indicator, `appearance` property may be used.\n */\nlet BottomNavigation = class BottomNavigation extends react_1.default.Component {\n static defaultProps = {\n selectedIndex: 0,\n };\n onTabSelect = (index) => {\n this.props.onSelect?.(index);\n };\n getComponentStyle = (source) => {\n const { indicatorHeight, indicatorBackgroundColor, ...containerParameters } = source;\n return {\n container: containerParameters,\n indicator: {\n height: indicatorHeight,\n backgroundColor: indicatorBackgroundColor,\n },\n };\n };\n renderIndicatorElement = (positions, style) => {\n const { indicatorStyle, selectedIndex } = this.props;\n return ();\n };\n renderTabElement = (element, index) => {\n return react_1.default.cloneElement(element, {\n key: index,\n style: [styles.item, element.props.style],\n selected: index === this.props.selectedIndex,\n onSelect: () => this.onTabSelect(index),\n });\n };\n renderTabElements = (source) => {\n return react_1.default.Children.map(source, this.renderTabElement);\n };\n renderComponentChildren = (style) => {\n const tabElements = this.renderTabElements(this.props.children);\n const hasIndicator = style.indicator.height > 0;\n return [\n hasIndicator && this.renderIndicatorElement(tabElements.length, style.indicator),\n ...tabElements,\n ];\n };\n render() {\n const { eva, style, testID } = this.props;\n const evaStyle = this.getComponentStyle(eva.style);\n const [indicatorElement, ...tabElements] = this.renderComponentChildren(evaStyle);\n return (\n {indicatorElement}\n \n {tabElements}\n \n );\n }\n};\nBottomNavigation = __decorate([\n (0, theme_1.styled)('BottomNavigation')\n], BottomNavigation);\nexports.BottomNavigation = BottomNavigation;\nconst styles = react_native_1.StyleSheet.create({\n elementsContainer: {\n flexDirection: 'row',\n },\n item: {\n flex: 1,\n },\n});\n//# sourceMappingURL=bottomNavigation.component.js.map","var arrayWithHoles = require(\"./arrayWithHoles.js\");\nvar iterableToArray = require(\"./iterableToArray.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableRest = require(\"./nonIterableRest.js\");\nfunction _toArray(arr) {\n return arrayWithHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableRest();\n}\nmodule.exports = _toArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TabIndicator = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst devsupport_1 = require(\"../../devsupport\");\nclass TabIndicator extends react_1.default.Component {\n static defaultProps = {\n selectedPosition: 0,\n };\n indicatorWidth = 0;\n contentOffset = new react_native_1.Animated.Value(0);\n componentDidUpdate() {\n const { selectedPosition: index } = this.props;\n this.scrollToIndex({\n index,\n animated: true,\n });\n }\n /**\n * scrolls indicator to passed index\n *\n * @param params (object) - {\n * index: number,\n * animated: boolean | undefined\n * }\n */\n scrollToIndex(params) {\n const { index, ...rest } = params;\n const offset = this.indicatorWidth * index;\n this.scrollToOffset({ offset, ...rest });\n }\n /**\n * scrolls indicator to passed offset\n *\n * @param params (object) - {\n * offset: number,\n * animated: boolean | undefined\n * }\n */\n scrollToOffset(params) {\n this.createOffsetAnimation(params).start();\n }\n createOffsetAnimation = (params) => {\n return react_native_1.Animated.timing(this.contentOffset, {\n toValue: devsupport_1.RTLService.select(params.offset, -params.offset),\n duration: 200,\n easing: react_native_1.Easing.linear,\n useNativeDriver: react_native_1.Platform.OS !== 'web',\n });\n };\n onLayout = (event) => {\n this.indicatorWidth = event.nativeEvent.layout.width;\n this.scrollToOffset({\n offset: this.indicatorWidth * this.props.selectedPosition,\n animated: false,\n });\n };\n getComponentStyle = () => {\n const widthPercent = 100 / this.props.positions;\n return {\n width: `${widthPercent}%`,\n // @ts-ignore: RN has no types for `Animated` styles\n transform: [{ translateX: this.contentOffset }],\n };\n };\n renderIndicatorLine = (style) => {\n const styles = [{ width: '100%', alignSelf: 'center' }, react_native_1.StyleSheet.flatten(style)];\n return ();\n };\n render() {\n const { style, ...viewProps } = this.props;\n const evaStyle = this.getComponentStyle();\n const indicatorLine = this.renderIndicatorLine(style);\n return (\n {indicatorLine}\n );\n }\n}\nexports.TabIndicator = TabIndicator;\n//# sourceMappingURL=tabIndicator.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BottomNavigationTab = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst devsupport_1 = require(\"../../devsupport\");\nconst theme_1 = require(\"../../theme\");\n/**\n * A single tab within the BottomNavigation.\n * Bottom tabs should be rendered within BottomNavigation to provide a usable navigation component.\n *\n * @extends React.Component\n *\n * @property {ReactText | ReactElement | (TextProps) => ReactElement} title - String, number or a function component\n * to render within the tab.\n * If it is a function, expected to return a Text.\n *\n * @property {ReactElement | (ImageProps) => ReactElement} icon - Function component\n * to render within the tab.\n * Expected to return an Image.\n *\n * @property {TouchableOpacityProps} ...TouchableOpacityProps - Any props applied to TouchableOpacity component.\n *\n * @overview-example BottomNavigationTabSimpleUsage\n */\nlet BottomNavigationTab = class BottomNavigationTab extends react_1.default.Component {\n onMouseEnter = (event) => {\n this.props.eva.dispatch([theme_1.Interaction.HOVER]);\n this.props.onMouseEnter?.(event);\n };\n onMouseLeave = (event) => {\n this.props.eva.dispatch([]);\n this.props.onMouseLeave?.(event);\n };\n onPress = () => {\n this.props.onSelect?.(!this.props.selected);\n };\n getComponentStyle = (source) => {\n const { iconWidth, iconHeight, iconMarginVertical, iconTintColor, textMarginVertical, textFontFamily, textFontSize, textFontWeight, textColor, ...containerParameters } = source;\n return {\n container: containerParameters,\n text: {\n marginVertical: textMarginVertical,\n fontFamily: textFontFamily,\n fontSize: textFontSize,\n fontWeight: textFontWeight,\n color: textColor,\n },\n icon: {\n width: iconWidth,\n height: iconHeight,\n marginVertical: iconMarginVertical,\n tintColor: iconTintColor,\n },\n };\n };\n render() {\n const { eva, style, title, icon, ...touchableProps } = this.props;\n const evaStyle = this.getComponentStyle(eva.style);\n return (\n \n \n );\n }\n};\nBottomNavigationTab = __decorate([\n (0, theme_1.styled)('BottomNavigationTab')\n], BottomNavigationTab);\nexports.BottomNavigationTab = BottomNavigationTab;\nconst styles = react_native_1.StyleSheet.create({\n container: {\n justifyContent: 'center',\n alignItems: 'center',\n },\n});\n//# sourceMappingURL=bottomNavigationTab.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Button = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst devsupport_1 = require(\"../../devsupport\");\nconst theme_1 = require(\"../../theme\");\n/**\n * Buttons allow users to take actions, and make choices, with a single tap.\n *\n * @extends React.Component\n *\n * @property {ReactElement | ReactText | (TextProps) => ReactElement} children - String, number or a function component\n * to render within the button.\n * If it is a function, expected to return a Text.\n *\n * @property {ReactElement | (ImageProps) => ReactElement} accessoryLeft - Function component\n * to render to start of the text.\n * Expected to return an Image.\n *\n * @property {ReactElement | (ImageProps) => ReactElement} accessoryRight - Function component\n * to render to end of the text.\n * Expected to return an Image.\n *\n * @property {string} appearance - Appearance of the component.\n * Can be `filled`, `outline` or `ghost`.\n * Defaults to *filled*.\n *\n * @property {string} status - Status of the component.\n * Can be `basic`, `primary`, `success`, `info`, `warning`, `danger` or `control`.\n * Defaults to *primary*.\n * Use *control* status when needed to display within a contrast container.\n *\n * @property {string} size - Size of the component.\n * Can be `tiny`, `small`, `medium`, `large`, or `giant`.\n * Defaults to *medium*.\n *\n * @property {TouchableOpacityProps} ...TouchableOpacityProps - Any props applied to TouchableOpacity component.\n *\n * @overview-example ButtonSimpleUsage\n * Default button size is `medium` and status color is `primary`.\n *\n * @overview-example ButtonStates\n * Button can be disabled with `disabled` property.\n *\n * @overview-example ButtonAppearances\n * Within Eva Design System, it can be `filled`, `outline` or `ghost`.\n *\n * @overview-example ButtonAccessories\n * Also, it may contain inner views configured with `accessoryLeft` and `accessoryRight` properties.\n * Within Eva it is expected to be an image or [svg icon](guides/icon-packages).\n *\n * @overview-example ButtonSize\n * Buttons can be resized by using `size` property.\n *\n * @overview-example ButtonStatus\n * Or marked with `status` property.\n * An extra status is `control`, which is designed to be used on high-contrast backgrounds.\n *\n * @overview-example ButtonOutline\n * Status can be combined with `outline` appearance.\n *\n * @overview-example ButtonGhost\n * As well as for `ghost`.\n *\n * @overview-example ButtonStyling\n * Button and it's inner views can be styled by passing them as function components.\n * ```\n * import { Button, Text } from '@ui-kitten/components';\n *\n * \n * ```\n *\n * @overview-example ButtonTheming\n * In most cases this is redundant, if [custom theme is configured](guides/branding).\n */\nlet Button = class Button extends react_1.default.Component {\n onMouseEnter = (event) => {\n this.props.eva.dispatch([theme_1.Interaction.HOVER]);\n this.props.onMouseEnter?.(event);\n };\n onMouseLeave = (event) => {\n this.props.eva.dispatch([]);\n this.props.onMouseLeave?.(event);\n };\n onFocus = (event) => {\n this.props.eva.dispatch([theme_1.Interaction.FOCUSED]);\n this.props.onFocus?.(event);\n };\n onBlur = (event) => {\n this.props.eva.dispatch([]);\n this.props.onBlur?.(event);\n };\n onPressIn = (event) => {\n this.props.eva.dispatch([theme_1.Interaction.ACTIVE]);\n this.props.onPressIn?.(event);\n };\n onPressOut = (event) => {\n this.props.eva.dispatch([]);\n this.props.onPressOut?.(event);\n };\n getComponentStyle = (source) => {\n const { textColor, textFontFamily, textFontSize, textFontWeight, textMarginHorizontal, iconWidth, iconHeight, iconTintColor, iconMarginHorizontal, ...containerParameters } = source;\n return {\n container: containerParameters,\n text: {\n color: textColor,\n fontFamily: textFontFamily,\n fontSize: textFontSize,\n fontWeight: textFontWeight,\n marginHorizontal: textMarginHorizontal,\n },\n icon: {\n width: iconWidth,\n height: iconHeight,\n tintColor: iconTintColor,\n marginHorizontal: iconMarginHorizontal,\n },\n };\n };\n render() {\n const { eva, style, accessoryLeft, accessoryRight, children, ...touchableProps } = this.props;\n const evaStyle = this.getComponentStyle(eva.style);\n return (\n \n \n \n );\n }\n};\nButton = __decorate([\n (0, theme_1.styled)('Button')\n], Button);\nexports.Button = Button;\nconst styles = react_native_1.StyleSheet.create({\n container: {\n flexDirection: 'row',\n justifyContent: 'center',\n alignItems: 'center',\n },\n});\n//# sourceMappingURL=button.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ButtonGroup = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst theme_1 = require(\"../../theme\");\n/**\n * A group of buttons with additional styles provided by Eva.\n * ButtonGroup should contain Button components to provide a usable component.\n *\n * @extends React.Component\n *\n * @property {ReactElement | ReactElement[]} children -\n * Buttons to be rendered within the group.\n *\n * @property {string} appearance - Appearance of the component.\n * Can be `filled`, `outline` or `ghost`.\n * Defaults to *filled*.\n *\n * @property {string} status - Status of the component.\n * Can be `basic`, `primary`, `success`, `info`, `warning`, `danger` or `control`.\n * Defaults to *primary*.\n * Use *control* status when needed to display within a contrast container.\n *\n * @property {string} size - Size of the component.\n * Can be `tiny`, `small`, `medium`, `large`, or `giant`.\n * Defaults to *medium*.\n *\n * @property {ViewProps} ...ViewProps - Any props applied to View component.\n *\n * @overview-example ButtonGroupSimpleUsage\n * Button Group accepts buttons as child elements.\n *\n * @overview-example ButtonGroupAppearance\n * Appearance passed to group is also applied for grouped buttons.\n *\n * @overview-example ButtonGroupStatus\n * Same for status.\n *\n * @overview-example ButtonGroupSize\n * And size.\n *\n * @overview-example ButtonGroupOutline\n *\n * @overview-example ButtonGroupWithIcons\n */\nlet ButtonGroup = class ButtonGroup extends react_1.default.Component {\n getComponentStyle = (source) => {\n const { dividerBackgroundColor, dividerWidth, ...containerParameters } = source;\n return {\n container: {\n ...containerParameters,\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n borderWidth: containerParameters.borderWidth + 0.25,\n },\n button: {\n borderWidth: dividerWidth,\n borderColor: dividerBackgroundColor,\n },\n };\n };\n isFirstElement = (index) => {\n return index === 0;\n };\n isLastElement = (index) => {\n return index === react_1.default.Children.count(this.props.children) - 1;\n };\n renderButtonElement = (element, index, style) => {\n const { appearance, size, status } = this.props;\n const { borderRadius } = style.container;\n const { borderWidth, borderColor } = style.button;\n const shapeStyle = !this.isLastElement(index) && {\n borderEndWidth: borderWidth,\n borderEndColor: borderColor,\n };\n const startShapeStyle = this.isFirstElement(index) && {\n borderTopStartRadius: borderRadius,\n borderBottomStartRadius: borderRadius,\n };\n const endShapeStyle = this.isLastElement(index) && {\n borderTopEndRadius: borderRadius,\n borderBottomEndRadius: borderRadius,\n };\n return react_1.default.cloneElement(element, {\n key: index,\n appearance: appearance,\n size: size,\n status: status,\n style: [element.props.style, styles.button, shapeStyle, startShapeStyle, endShapeStyle],\n });\n };\n renderButtonElements = (source, style) => {\n return react_1.default.Children.map(source, (element, index) => {\n return this.renderButtonElement(element, index, style);\n });\n };\n render() {\n const { eva, style, children, ...viewProps } = this.props;\n const evaStyle = this.getComponentStyle(eva.style);\n return (\n {this.renderButtonElements(children, evaStyle)}\n );\n }\n};\nButtonGroup = __decorate([\n (0, theme_1.styled)('ButtonGroup')\n], ButtonGroup);\nexports.ButtonGroup = ButtonGroup;\nconst styles = react_native_1.StyleSheet.create({\n container: {\n flexDirection: 'row',\n overflow: 'hidden',\n },\n button: {\n borderRadius: 0,\n borderWidth: 0,\n },\n});\n//# sourceMappingURL=buttonGroup.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Calendar = void 0;\nconst theme_1 = require(\"../../theme\");\nconst baseCalendar_component_1 = require(\"./baseCalendar.component\");\n/**\n * Calendar provides a simple way to select a date.\n *\n * @extends React.Component\n *\n * @method {() => void} scrollToToday - Show the current date in the calendar.\n *\n * @method {(date: D) => void} scrollToDate - Show the specific date in the calendar.\n *\n * @property {D} date - Date which is currently selected.\n * Defaults to current date.\n *\n * @property {D} initialVisibleDate - Specific date that should be shown on the first render of the component.\n * If it is not set, the selected date or today's date will be displayed.\n *\n * @property {(D) => void} onSelect - Called when date cell is pressed.\n *\n * @property {D} min - Minimal date that is able to be selected.\n *\n * @property {D} max - Maximum date that is able to be selected.\n *\n * @property {DateService} dateService - Date service that is able to work with a date objects.\n * Defaults to Native Date service that works with JS Date.\n * Allows using different types of date like Moment.js or date-fns.\n * Moment.js service can be provided by installing `@ui-kitten/moment` package.\n * date-fns service can be provided by installing `@ui-kitten/date-fns` package.\n *\n * @property {boolean} boundingMonth - Whether previous and next months in the current month view should be rendered.\n *\n * @property {CalendarViewMode} startView - Defines starting view for calendar.\n * Can be `CalendarViewModes.DATE`, `CalendarViewModes.MONTH` or `CalendarViewModes.YEAR`.\n * Defaults to *CalendarViewModes.DATE*.\n *\n * @property {(D, D, CalendarViewMode) => string} title - A function to transform visible date to a string displayed in\n * header for the specific view mode: first date - date picker, second date - year and month picker.\n *\n * @property {(D) => boolean} filter - A function to determine whether particular date cells should be disabled.\n *\n * @property {() => ReactElement} renderFooter - Function component\n * to render below the calendar.\n *\n * @property {(D, NamedStyles) => ReactElement} renderDay - Function component\n * to render instead of default day cell.\n * Called with a date for this cell and styles provided by Eva.\n *\n * @property {(D, NamedStyles) => ReactElement} renderMonth - Function component\n * to render instead of default month cell.\n * Called with a date for this cell and styles provided by Eva.\n *\n * @property {(D, NamedStyles) => ReactElement} renderYear - Function component\n * to render instead of default year cell.\n * Called with a date for this cell and styles provided by Eva.\n *\n * @property {ComponentType | null} renderArrowLeft - Custom component which will be used\n * to render left arrow inside header instead of default one. Custom component must invoke onPress method from\n * props to keep calendar navigation functionality.\n *\n * @property {ComponentType | null} renderArrowRight - Custom component which will be used\n * to render right arrow inside header instead of default one. Custom component must invoke onPress method from\n * props to keep calendar navigation functionality.\n *\n * @property {(D, CalendarViewMode) => void} onVisibleDateChange - Called when navigating to the previous or next\n * month / year.\n * viewMode returns string with current calendar view (\"YEAR\", \"MONTH\", \"DATE\").\n *\n * @property {ViewProps} ...ViewProps - Any props applied to View component.\n *\n * @overview-example CalendarSimpleUsage\n *\n * @overview-example RangeCalendarSimpleUsage\n * There is an alternative calendar component, to work with date ranges.\n *\n * @overview-example RangeCalendarType\n * Ranged calendar works with special range object - CalendarRange.\n * For empty ranges, range has no date properties.\n * And for incomplete ranges, there is only a `startDate` property.\n * ```\n * export interface CalendarRange {\n * startDate?: D;\n * endDate?: D;\n * }\n * ```\n *\n * @overview-example CalendarInitialVisibleDate\n * Calendar can show specified date on render.\n * Also, it is possible to use scrollToToday and scrollToDate to show specific dates.\n *\n * @overview-example CalendarFilters\n * Calendar may accept minimal and maximum dates, filter functions, and `boundingMonth` property,\n * which disables displaying previous month dates at the current date view.\n *\n * @overview-example CalendarLocaleSettings\n * Also, it is possible to setup locale by configuring Date Service.\n *\n * @overview-example CalendarMoment\n * Calendar is able to work with Moment, by configuring date service.\n * In order to use Moment, `@ui-kitten/moment` package is required.\n *\n * @overview-example CalendarCustomDay\n * To render custom cells, `renderDay`, `renderMonth` and `renderYear` properties may be used.\n *\n * @overview-example CalendarTheming\n * Styling of the calendar is possible with [configuring a custom theme](guides/branding).\n */\nlet Calendar = class Calendar extends baseCalendar_component_1.BaseCalendarComponent {\n constructor(props) {\n super(props);\n this.createDates = this.createDates.bind(this);\n this.selectedDate = this.selectedDate.bind(this);\n this.onDateSelect = this.onDateSelect.bind(this);\n this.isDateSelected = this.isDateSelected.bind(this);\n this.shouldUpdateDate = this.shouldUpdateDate.bind(this);\n }\n // BaseCalendarComponent\n createDates(date) {\n return this.dataService.createDayPickerData(date);\n }\n selectedDate() {\n return this.props.date;\n }\n onDateSelect(date) {\n this.props.onSelect?.(date);\n }\n isDateSelected(date) {\n return this.dateService.isSameDaySafe(date, this.selectedDate());\n }\n shouldUpdateDate(props, nextProps) {\n const dateChanged = this.dateService.compareDatesSafe(props.date.date, nextProps.date.date) !== 0;\n if (dateChanged) {\n return true;\n }\n const selectionChanged = props.selected !== nextProps.selected;\n const disablingChanged = props.disabled !== nextProps.disabled;\n const value = selectionChanged || disablingChanged;\n if (value) {\n return true;\n }\n return props.eva.theme !== nextProps.eva.theme;\n }\n};\nCalendar = __decorate([\n (0, theme_1.styled)('Calendar')\n], Calendar);\nexports.Calendar = Calendar;\n//# sourceMappingURL=calendar.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BaseCalendarComponent = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst divider_component_1 = require(\"../divider/divider.component\");\nconst calendarHeader_component_1 = require(\"./components/calendarHeader.component\");\nconst calendarMonthHeader_component_1 = require(\"./components/calendarMonthHeader.component\");\nconst calendarPicker_component_1 = require(\"./components/picker/calendarPicker.component\");\nconst calendarDateContent_component_1 = require(\"./components/calendarDateContent.component\");\nconst type_1 = require(\"./type\");\nconst type_2 = require(\"./i18n/type\");\nconst nativeDate_service_1 = require(\"./service/nativeDate.service\");\nconst calendarData_service_1 = require(\"./service/calendarData.service\");\nconst PICKER_ROWS = 4;\nconst PICKER_COLUMNS = 3;\nconst VIEWS_IN_PICKER = PICKER_ROWS * PICKER_COLUMNS;\nclass BaseCalendarComponent extends react_1.default.Component {\n static defaultProps = {\n dateService: new nativeDate_service_1.NativeDateService(),\n boundingMonth: true,\n startView: type_1.CalendarViewModes.DATE,\n };\n state = {\n viewMode: this.props.startView,\n visibleDate: this.dateService.getMonthStart(this.initialVisibleDate()),\n pickerDate: this.dateService.getMonthStart(this.initialVisibleDate()),\n };\n dataService = new calendarData_service_1.CalendarDataService(this.dateService);\n get dateService() {\n return this.props.dateService;\n }\n get min() {\n return this.props.min || this.dateService.getYearStart(this.dateService.today());\n }\n get max() {\n return this.props.max || this.dateService.getYearEnd(this.dateService.today());\n }\n scrollToToday = () => {\n this.setState({\n viewMode: type_1.CalendarViewModes.DATE,\n visibleDate: this.dateService.today(),\n pickerDate: this.dateService.today(),\n });\n };\n scrollToDate = (date) => {\n if (date) {\n this.setState({\n viewMode: type_1.CalendarViewModes.DATE,\n visibleDate: date,\n pickerDate: date,\n });\n }\n };\n getCalendarStyle = (source) => {\n return {\n container: {\n width: source.width,\n paddingVertical: source.paddingVertical,\n borderColor: source.borderColor,\n borderWidth: source.borderWidth,\n borderRadius: source.borderRadius,\n },\n headerContainer: {\n paddingHorizontal: source.headerPaddingHorizontal,\n paddingVertical: source.headerPaddingVertical,\n },\n title: {\n fontSize: source.titleFontSize,\n fontWeight: source.titleFontWeight,\n color: source.titleColor,\n fontFamily: source.titleFontFamily,\n },\n icon: {\n width: source.iconWidth,\n height: source.iconHeight,\n tintColor: source.iconTintColor,\n },\n divider: {\n marginVertical: source.dividerMarginVertical,\n },\n daysHeaderContainer: {\n marginHorizontal: source.rowMarginHorizontal,\n },\n row: {\n minHeight: source.rowMinHeight,\n marginHorizontal: source.rowMarginHorizontal,\n },\n };\n };\n isDayDisabled = ({ date }) => {\n const minDayStart = this.dateService.createDate(this.dateService.getYear(this.min), this.dateService.getMonth(this.min), this.dateService.getDate(this.min));\n const maxDayStart = this.dateService.createDate(this.dateService.getYear(this.max), this.dateService.getMonth(this.max), this.dateService.getDate(this.max));\n const fitsFilter = this.props.filter && !this.props.filter(date) || false;\n return !this.dateService.isBetweenIncludingSafe(date, minDayStart, maxDayStart) || fitsFilter;\n };\n isDayToday = ({ date }) => {\n return this.dateService.isSameDaySafe(date, this.dateService.today());\n };\n initialVisibleDate() {\n return this.props.initialVisibleDate || this.selectedDate() || this.dateService.today();\n }\n onDaySelect = ({ date }) => {\n this.onDateSelect(date);\n };\n onMonthSelect = ({ date }) => {\n const { pickerDate, viewMode } = this.state;\n const nextVisibleDate = this.dateService.createDate(this.dateService.getYear(pickerDate), this.dateService.getMonth(date), this.dateService.getDate(pickerDate));\n this.setState({\n viewMode: viewMode.pickNext(),\n visibleDate: nextVisibleDate,\n pickerDate: nextVisibleDate,\n }, () => {\n this.props.onVisibleDateChange?.(this.state.visibleDate, this.state.viewMode.id);\n });\n };\n onYearSelect = ({ date }) => {\n const { pickerDate, viewMode } = this.state;\n const nextVisibleDate = this.dateService.createDate(this.dateService.getYear(date), this.dateService.getMonth(pickerDate), this.dateService.getDate(pickerDate));\n this.setState({\n viewMode: viewMode.pickNext(),\n pickerDate: nextVisibleDate,\n });\n };\n onPickerNavigationPress = () => {\n const { viewMode, visibleDate } = this.state;\n this.setState({\n viewMode: viewMode.navigationNext(),\n pickerDate: visibleDate,\n });\n };\n onHeaderNavigationLeftPress = () => {\n const nextDate = this.createViewModeVisibleDate(-1);\n if (this.state.viewMode.id === type_1.CalendarViewModes.DATE.id) {\n this.setState({ visibleDate: nextDate }, () => {\n this.props.onVisibleDateChange?.(this.state.visibleDate, this.state.viewMode.id);\n });\n }\n else {\n this.setState({ pickerDate: nextDate });\n }\n };\n onHeaderNavigationRightPress = () => {\n const nextDate = this.createViewModeVisibleDate(1);\n if (this.state.viewMode.id === type_1.CalendarViewModes.DATE.id) {\n this.setState({ visibleDate: nextDate }, () => {\n this.props.onVisibleDateChange?.(this.state.visibleDate, this.state.viewMode.id);\n });\n }\n else {\n this.setState({ pickerDate: nextDate });\n }\n };\n getWeekdayStyle = (source) => {\n return {\n fontSize: source.weekdayTextFontSize,\n fontWeight: source.weekdayTextFontWeight,\n color: source.weekdayTextColor,\n fontFamily: source.weekdayTextFontFamily,\n };\n };\n isDaySelected = ({ date }) => {\n return this.isDateSelected(date);\n };\n isMonthSelected = ({ date }) => {\n return this.dateService.isSameMonthSafe(date, this.selectedDate());\n };\n isYearSelected = ({ date }) => {\n return this.dateService.isSameYearSafe(date, this.selectedDate());\n };\n isMonthDisabled = ({ date }) => {\n const minMonthStart = this.dateService.getMonthStart(this.min);\n const maxMonthStart = this.dateService.getMonthStart(this.max);\n return !this.dateService.isBetweenIncludingSafe(date, minMonthStart, maxMonthStart);\n };\n isYearDisabled = ({ date }) => {\n const minYearStart = this.dateService.getYearStart(this.min);\n const maxYearStart = this.dateService.getYearEnd(this.max);\n return !this.dateService.isBetweenIncludingSafe(date, minYearStart, maxYearStart);\n };\n isMonthToday = (date) => {\n return this.dateService.isSameMonthSafe(date.date, this.dateService.today());\n };\n isYearToday = ({ date }) => {\n return this.dateService.isSameYearSafe(date, this.dateService.today());\n };\n isHeaderNavigationAllowed = () => {\n return this.state.viewMode.id !== type_1.CalendarViewModes.MONTH.id;\n };\n createViewModeVisibleDate = (page) => {\n switch (this.state.viewMode.id) {\n case type_1.CalendarViewModes.DATE.id: {\n return this.dateService.addMonth(this.state.visibleDate, page);\n }\n case type_1.CalendarViewModes.MONTH.id: {\n return this.dateService.addYear(this.state.pickerDate, page);\n }\n case type_1.CalendarViewModes.YEAR.id: {\n return this.dateService.addYear(this.state.pickerDate, VIEWS_IN_PICKER * page);\n }\n default: return;\n }\n };\n createViewModeHeaderTitle = (visibleDate, pickerDate, viewMode) => {\n switch (viewMode.id) {\n case type_1.CalendarViewModes.DATE.id: {\n const month = this.props.dateService.getMonthName(visibleDate, type_2.TranslationWidth.LONG);\n const year = this.props.dateService.getYear(visibleDate);\n return `${month} ${year}`;\n }\n case type_1.CalendarViewModes.MONTH.id: {\n return `${this.dateService.getYear(pickerDate)}`;\n }\n case type_1.CalendarViewModes.YEAR.id: {\n const minDateFormat = this.dateService.getYear(pickerDate);\n const maxDateFormat = minDateFormat + VIEWS_IN_PICKER - 1;\n return `${minDateFormat} - ${maxDateFormat}`;\n }\n default: return;\n }\n };\n renderDayIfNeeded = (item, style) => {\n const shouldRender = !item.bounding || this.props.boundingMonth;\n if (shouldRender) {\n const renderSelector = this.props.renderDay || this.renderDayElement;\n return renderSelector(item, style);\n }\n return null;\n };\n renderWeekdayElement = (weekday, index) => {\n return (\n {weekday}\n );\n };\n renderDayElement = ({ date }, evaStyle) => {\n return (\n {this.dateService.getDate(date)}\n );\n };\n renderMonthElement = ({ date }, evaStyle) => {\n return (\n {this.dateService.getMonthName(date, type_2.TranslationWidth.SHORT)}\n );\n };\n renderYearElement = ({ date }, evaStyle) => {\n return (\n {this.dateService.getYear(date)}\n );\n };\n renderDayPickerElement = (date, evaStyle) => {\n return (<>\n \n {this.renderWeekdayElement}\n \n \n \n {this.renderDayIfNeeded}\n \n );\n };\n renderMonthPickerElement = (date, evaStyle) => {\n return (\n {this.props.renderMonth || this.renderMonthElement}\n );\n };\n renderYearPickerElement = (date, style) => {\n return (\n {this.props.renderYear || this.renderYearElement}\n );\n };\n renderPickerElement = (style) => {\n switch (this.state.viewMode.id) {\n case type_1.CalendarViewModes.DATE.id:\n return this.renderDayPickerElement(this.state.visibleDate, style);\n case type_1.CalendarViewModes.MONTH.id:\n return this.renderMonthPickerElement(this.state.pickerDate, style);\n case type_1.CalendarViewModes.YEAR.id:\n return this.renderYearPickerElement(this.state.pickerDate, style);\n default: return;\n }\n };\n renderFooterElement = () => {\n if (this.props.renderFooter) {\n return this.props.renderFooter();\n }\n return null;\n };\n renderHeaderElement = (evaStyle) => {\n const titleSelector = this.props.title || this.createViewModeHeaderTitle;\n return ();\n };\n render() {\n const { eva, style, ...viewProps } = this.props;\n const evaStyle = this.getCalendarStyle(eva.style);\n return (\n {this.renderHeaderElement(evaStyle)}\n {this.renderPickerElement(evaStyle)}\n {this.renderFooterElement()}\n );\n }\n}\nexports.BaseCalendarComponent = BaseCalendarComponent;\n//# sourceMappingURL=baseCalendar.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Divider = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst theme_1 = require(\"../../theme\");\n/**\n * A divider is a thin line that groups content in lists and layouts.\n *\n * @property {ViewProps} ...ViewProps - Any props applied to View component.\n *\n * @overview-example DividerSimpleUsage\n */\nlet Divider = class Divider extends react_1.default.Component {\n render() {\n const { eva, style, ...viewProps } = this.props;\n return ();\n }\n};\nDivider = __decorate([\n (0, theme_1.styled)('Divider')\n], Divider);\nexports.Divider = Divider;\n//# sourceMappingURL=divider.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CalendarHeader = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst devsupport_1 = require(\"../../../devsupport\");\nconst button_component_1 = require(\"../../button/button.component\");\nconst text_component_1 = require(\"../../text/text.component\");\nconst chevronDown_component_1 = require(\"../../shared/chevronDown.component\");\nconst chevronLeft_component_1 = require(\"../../shared/chevronLeft.component\");\nconst chevronRight_component_1 = require(\"../../shared/chevronRight.component\");\nconst type_1 = require(\"@ui-kitten/components/ui/calendar/type\");\nclass CalendarHeader extends react_1.default.Component {\n renderTitleIcon = () => {\n const { tintColor, ...svgStyle } = this.props.iconStyle;\n const rotation = this.props.viewModeId === type_1.CalendarViewModes.DATE.id ? 0 : 180;\n return ();\n };\n renderLeftIcon = () => {\n const { tintColor, ...svgStyle } = this.props.iconStyle;\n const IconComponent = devsupport_1.RTLService.select(chevronLeft_component_1.ChevronLeft, chevronRight_component_1.ChevronRight);\n return ();\n };\n renderRightIcon = () => {\n const { tintColor, ...svgStyle } = this.props.iconStyle;\n const IconComponent = devsupport_1.RTLService.select(chevronRight_component_1.ChevronRight, chevronLeft_component_1.ChevronLeft);\n return ();\n };\n renderLeftArrow = () => {\n const LeftArrowComponent = this.props.arrowLeftComponent;\n if (LeftArrowComponent) {\n return ;\n }\n return ();\n };\n renderRightArrow = () => {\n const RightArrowComponent = this.props.arrowRightComponent;\n if (RightArrowComponent) {\n return ;\n }\n return ();\n };\n renderLateralNavigationControls = () => {\n return (\n {this.renderLeftArrow()}\n {this.renderRightArrow()}\n );\n };\n renderTitleElement = (props) => {\n return (\n {this.props.title}\n );\n };\n render() {\n const { style, titleStyle, onTitlePress, title, lateralNavigationAllowed, viewModeId, ...viewProps } = this.props;\n return (\n \n {(props) => this.renderTitleElement(props)}\n \n {lateralNavigationAllowed && this.renderLateralNavigationControls()}\n );\n }\n}\nexports.CalendarHeader = CalendarHeader;\nconst styles = react_native_1.StyleSheet.create({\n container: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n headerButtonText: {\n marginHorizontal: 0,\n },\n headerButtonIcon: {\n marginHorizontal: 0,\n },\n lateralIcon: {\n marginHorizontal: 0,\n },\n subContainer: {\n flexDirection: 'row',\n justifyContent: 'center',\n },\n});\n//# sourceMappingURL=calendarHeader.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ChevronDown = void 0;\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_svg_1 = require(\"react-native-svg\");\nclass ChevronDown extends react_1.default.Component {\n render() {\n return (\n \n \n \n \n \n \n );\n }\n}\nexports.ChevronDown = ChevronDown;\n//# sourceMappingURL=chevronDown.component.js.map","export * from './ReactNativeSVG';\nexport { default } from './ReactNativeSVG';\n//# sourceMappingURL=index.js.map","import * as React from 'react';\nimport {\n// @ts-ignore it is not seen in exports\nunstable_createElement as createElement } from 'react-native';\nimport SvgTouchableMixin from './lib/SvgTouchableMixin';\nimport { resolve } from './lib/resolve';\nimport { transformsArrayToProps } from './lib/extract/extractTransform';\nconst hasTouchableProperty = props => props.onPress || props.onPressIn || props.onPressOut || props.onLongPress;\nconst camelCaseToDashed = camelCase => {\n return camelCase.replace(/[A-Z]/g, m => '-' + m.toLowerCase());\n};\nfunction stringifyTransformProps(transformProps) {\n const transformArray = [];\n if (transformProps.translate != null) {\n transformArray.push(`translate(${transformProps.translate})`);\n }\n if (transformProps.translateX != null || transformProps.translateY != null) {\n transformArray.push(`translate(${transformProps.translateX || 0}, ${transformProps.translateY || 0})`);\n }\n if (transformProps.scale != null) {\n transformArray.push(`scale(${transformProps.scale})`);\n }\n if (transformProps.scaleX != null || transformProps.scaleY != null) {\n transformArray.push(`scale(${transformProps.scaleX || 1}, ${transformProps.scaleY || 1})`);\n }\n // rotation maps to rotate, not to collide with the text rotate attribute (which acts per glyph rather than block)\n if (transformProps.rotation != null) {\n transformArray.push(`rotate(${transformProps.rotation})`);\n }\n if (transformProps.skewX != null) {\n transformArray.push(`skewX(${transformProps.skewX})`);\n }\n if (transformProps.skewY != null) {\n transformArray.push(`skewY(${transformProps.skewY})`);\n }\n return transformArray;\n}\nfunction parseTransformProp(transform, props) {\n const transformArray = [];\n props && transformArray.push(...stringifyTransformProps(props));\n if (Array.isArray(transform)) {\n if (typeof transform[0] === 'number') {\n transformArray.push(`matrix(${transform.join(' ')})`);\n } else {\n const stringifiedProps = transformsArrayToProps(transform);\n transformArray.push(...stringifyTransformProps(stringifiedProps));\n }\n } else if (typeof transform === 'string') {\n transformArray.push(transform);\n }\n return transformArray.length ? transformArray.join(' ') : undefined;\n}\n\n/**\n * `react-native-svg` supports additional props that aren't defined in the spec.\n * This function replaces them in a spec conforming manner.\n *\n * @param {WebShape} self Instance given to us.\n * @param {Object?} props Optional overridden props given to us.\n * @returns {Object} Cleaned props object.\n * @private\n */\nconst prepare = function (self) {\n let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : self.props;\n const {\n transform,\n origin,\n originX,\n originY,\n fontFamily,\n fontSize,\n fontWeight,\n fontStyle,\n style,\n forwardedRef,\n gradientTransform,\n patternTransform,\n ...rest\n } = props;\n const clean = {\n ...(hasTouchableProperty(props) ? {\n onStartShouldSetResponder: self.touchableHandleStartShouldSetResponder,\n onResponderTerminationRequest: self.touchableHandleResponderTerminationRequest,\n onResponderGrant: self.touchableHandleResponderGrant,\n onResponderMove: self.touchableHandleResponderMove,\n onResponderRelease: self.touchableHandleResponderRelease,\n onResponderTerminate: self.touchableHandleResponderTerminate\n } : null),\n ...rest\n };\n if (origin != null) {\n clean['transform-origin'] = origin.toString().replace(',', ' ');\n } else if (originX != null || originY != null) {\n clean['transform-origin'] = `${originX || 0} ${originY || 0}`;\n }\n\n // we do it like this because setting transform as undefined causes error in web\n const parsedTransform = parseTransformProp(transform, props);\n if (parsedTransform) {\n clean.transform = parsedTransform;\n }\n const parsedGradientTransform = parseTransformProp(gradientTransform);\n if (parsedGradientTransform) {\n clean.gradientTransform = parsedGradientTransform;\n }\n const parsedPatternTransform = parseTransformProp(patternTransform);\n if (parsedPatternTransform) {\n clean.patternTransform = parsedPatternTransform;\n }\n clean.ref = el => {\n self.elementRef.current = el;\n if (typeof forwardedRef === 'function') {\n forwardedRef(el);\n } else if (forwardedRef) {\n forwardedRef.current = el;\n }\n };\n const styles = {};\n if (fontFamily != null) {\n styles.fontFamily = fontFamily;\n }\n if (fontSize != null) {\n styles.fontSize = fontSize;\n }\n if (fontWeight != null) {\n styles.fontWeight = fontWeight;\n }\n if (fontStyle != null) {\n styles.fontStyle = fontStyle;\n }\n clean.style = resolve(style, styles);\n return clean;\n};\nconst getBoundingClientRect = node => {\n if (node) {\n const isElement = node.nodeType === 1; /* Node.ELEMENT_NODE */\n if (isElement && typeof node.getBoundingClientRect === 'function') {\n return node.getBoundingClientRect();\n }\n }\n throw new Error('Can not get boundingClientRect of ' + node || 'undefined');\n};\nconst measureLayout = (node, callback) => {\n const relativeNode = node === null || node === void 0 ? void 0 : node.parentNode;\n if (relativeNode) {\n setTimeout(() => {\n // @ts-expect-error TODO: handle it better\n const relativeRect = getBoundingClientRect(relativeNode);\n const {\n height,\n left,\n top,\n width\n } = getBoundingClientRect(node);\n const x = left - relativeRect.left;\n const y = top - relativeRect.top;\n callback(x, y, width, height, left, top);\n }, 0);\n }\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction remeasure() {\n const tag = this.state.touchable.responderID;\n if (tag === null) {\n return;\n }\n measureLayout(tag, this._handleQueryLayout);\n}\nexport class WebShape extends React.Component {\n prepareProps(props) {\n return props;\n }\n elementRef = /*#__PURE__*/React.createRef();\n lastMergedProps = {};\n\n /**\n * disclaimer: I am not sure why the props are wrapped in a `style` attribute here, but that's how reanimated calls it\n */\n setNativeProps(props) {\n const merged = Object.assign({}, this.props, this.lastMergedProps, props.style);\n this.lastMergedProps = merged;\n const clean = prepare(this, this.prepareProps(merged));\n const current = this.elementRef.current;\n if (current) {\n for (const cleanAttribute of Object.keys(clean)) {\n const cleanValue = clean[cleanAttribute];\n switch (cleanAttribute) {\n case 'ref':\n case 'children':\n break;\n case 'style':\n // style can be an object here or an array, so we convert it to an array and assign each element\n for (const partialStyle of [].concat(clean.style ?? [])) {\n Object.assign(current.style, partialStyle);\n }\n break;\n default:\n // apply all other incoming prop updates as attributes on the node\n // same logic as in https://github.com/software-mansion/react-native-reanimated/blob/d04720c82f5941532991b235787285d36d717247/src/reanimated2/js-reanimated/index.ts#L38-L39\n // @ts-expect-error TODO: fix this\n current.setAttribute(camelCaseToDashed(cleanAttribute), cleanValue);\n break;\n }\n }\n }\n }\n constructor(props) {\n super(props);\n\n // Do not attach touchable mixin handlers if SVG element doesn't have a touchable prop\n if (hasTouchableProperty(props)) {\n SvgTouchableMixin(this);\n }\n this._remeasureMetricsOnActivation = remeasure.bind(this);\n }\n render() {\n if (!this.tag) {\n throw new Error('When extending `WebShape` you need to overwrite either `tag` or `render`!');\n }\n this.lastMergedProps = {};\n return createElement(this.tag, prepare(this, this.prepareProps(this.props)));\n }\n}\nexport class Circle extends WebShape {\n tag = 'circle';\n}\nexport class ClipPath extends WebShape {\n tag = 'clipPath';\n}\nexport class Defs extends WebShape {\n tag = 'defs';\n}\nexport class Ellipse extends WebShape {\n tag = 'ellipse';\n}\nexport class G extends WebShape {\n tag = 'g';\n prepareProps(props) {\n const {\n x,\n y,\n ...rest\n } = props;\n if ((x || y) && !rest.translate) {\n rest.translate = `${x || 0}, ${y || 0}`;\n }\n return rest;\n }\n}\nexport class Image extends WebShape {\n tag = 'image';\n}\nexport class Line extends WebShape {\n tag = 'line';\n}\nexport class LinearGradient extends WebShape {\n tag = 'linearGradient';\n}\nexport class Path extends WebShape {\n tag = 'path';\n}\nexport class Polygon extends WebShape {\n tag = 'polygon';\n}\nexport class Polyline extends WebShape {\n tag = 'polyline';\n}\nexport class RadialGradient extends WebShape {\n tag = 'radialGradient';\n}\nexport class Rect extends WebShape {\n tag = 'rect';\n}\nexport class Stop extends WebShape {\n tag = 'stop';\n}\n\n/* Taken from here: https://gist.github.com/jennyknuth/222825e315d45a738ed9d6e04c7a88d0 */\nfunction encodeSvg(svgString) {\n return svgString.replace('/g, '%3E').replace(/\\s+/g, ' ');\n}\nexport class Svg extends WebShape {\n tag = 'svg';\n toDataURL(callback) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const ref = this.elementRef.current;\n if (ref === null) {\n return;\n }\n const rect = getBoundingClientRect(ref);\n const width = Number(options.width) || rect.width;\n const height = Number(options.height) || rect.height;\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('viewBox', `0 0 ${rect.width} ${rect.height}`);\n svg.setAttribute('width', String(width));\n svg.setAttribute('height', String(height));\n svg.appendChild(ref.cloneNode(true));\n const img = new window.Image();\n img.onload = () => {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n const context = canvas.getContext('2d');\n context === null || context === void 0 ? void 0 : context.drawImage(img, 0, 0);\n callback(canvas.toDataURL().replace('data:image/png;base64,', ''));\n };\n img.src = `data:image/svg+xml;utf8,${encodeSvg(new window.XMLSerializer().serializeToString(svg))}`;\n }\n}\nexport class Symbol extends WebShape {\n tag = 'symbol';\n}\nexport class Text extends WebShape {\n tag = 'text';\n}\nexport class TSpan extends WebShape {\n tag = 'tspan';\n}\nexport class TextPath extends WebShape {\n tag = 'textPath';\n}\nexport class Use extends WebShape {\n tag = 'use';\n}\nexport class Mask extends WebShape {\n tag = 'mask';\n}\nexport class ForeignObject extends WebShape {\n tag = 'foreignObject';\n}\nexport class Marker extends WebShape {\n tag = 'marker';\n}\nexport class Pattern extends WebShape {\n tag = 'pattern';\n}\nexport default Svg;\n//# sourceMappingURL=ReactNativeSVG.web.js.map","import { Touchable } from 'react-native';\nconst PRESS_RETENTION_OFFSET = {\n top: 20,\n left: 20,\n right: 20,\n bottom: 30\n};\n// @ts-expect-error: Mixin is not typed\nconst {\n Mixin\n} = Touchable;\nconst {\n touchableHandleStartShouldSetResponder,\n touchableHandleResponderTerminationRequest,\n touchableHandleResponderGrant,\n touchableHandleResponderMove,\n touchableHandleResponderRelease,\n touchableHandleResponderTerminate,\n touchableGetInitialState\n} = Mixin;\nconst SvgTouchableMixin = {\n ...Mixin,\n touchableHandleStartShouldSetResponder(e) {\n const {\n onStartShouldSetResponder\n } = this.props;\n if (onStartShouldSetResponder) {\n return onStartShouldSetResponder(e);\n } else {\n return touchableHandleStartShouldSetResponder.call(this, e);\n }\n },\n touchableHandleResponderTerminationRequest(e) {\n const {\n onResponderTerminationRequest\n } = this.props;\n if (onResponderTerminationRequest) {\n return onResponderTerminationRequest(e);\n } else {\n return touchableHandleResponderTerminationRequest.call(this, e);\n }\n },\n touchableHandleResponderGrant(e) {\n const {\n onResponderGrant\n } = this.props;\n if (onResponderGrant) {\n return onResponderGrant(e);\n } else {\n return touchableHandleResponderGrant.call(this, e);\n }\n },\n touchableHandleResponderMove(e) {\n const {\n onResponderMove\n } = this.props;\n if (onResponderMove) {\n return onResponderMove(e);\n } else {\n return touchableHandleResponderMove.call(this, e);\n }\n },\n touchableHandleResponderRelease(e) {\n const {\n onResponderRelease\n } = this.props;\n if (onResponderRelease) {\n return onResponderRelease(e);\n } else {\n return touchableHandleResponderRelease.call(this, e);\n }\n },\n touchableHandleResponderTerminate(e) {\n const {\n onResponderTerminate\n } = this.props;\n if (onResponderTerminate) {\n return onResponderTerminate(e);\n } else {\n return touchableHandleResponderTerminate.call(this, e);\n }\n },\n touchableHandlePress(e) {\n const {\n onPress\n } = this.props;\n onPress && onPress(e);\n },\n touchableHandleActivePressIn(e) {\n const {\n onPressIn\n } = this.props;\n onPressIn && onPressIn(e);\n },\n touchableHandleActivePressOut(e) {\n const {\n onPressOut\n } = this.props;\n onPressOut && onPressOut(e);\n },\n touchableHandleLongPress(e) {\n const {\n onLongPress\n } = this.props;\n onLongPress && onLongPress(e);\n },\n touchableGetPressRectOffset() {\n const {\n pressRetentionOffset\n } = this.props;\n return pressRetentionOffset || PRESS_RETENTION_OFFSET;\n },\n touchableGetHitSlop() {\n const {\n hitSlop\n } = this.props;\n return hitSlop;\n },\n touchableGetHighlightDelayMS() {\n const {\n delayPressIn\n } = this.props;\n return delayPressIn || 0;\n },\n touchableGetLongPressDelayMS() {\n const {\n delayLongPress\n } = this.props;\n return delayLongPress === 0 ? 0 : delayLongPress || 500;\n },\n touchableGetPressOutDelayMS() {\n const {\n delayPressOut\n } = this.props;\n return delayPressOut || 0;\n }\n};\nconst touchKeys = Object.keys(SvgTouchableMixin);\nconst touchVals = touchKeys.map(key => SvgTouchableMixin[key]);\nconst numTouchKeys = touchKeys.length;\nexport default (target => {\n for (let i = 0; i < numTouchKeys; i++) {\n const key = touchKeys[i];\n const val = touchVals[i];\n if (typeof val === 'function') {\n target[key] = val.bind(target);\n } else {\n target[key] = val;\n }\n }\n target.state = touchableGetInitialState();\n});\n//# sourceMappingURL=SvgTouchableMixin.js.map","import { StyleSheet } from 'react-native';\n\n// Kept in separate file, to avoid name collision with Symbol element\nexport function resolve(styleProp, cleanedProps) {\n if (styleProp) {\n return StyleSheet ? [styleProp, cleanedProps] :\n // Compatibility for arrays of styles in plain react web\n styleProp[Symbol.iterator] ? Object.assign({}, ...styleProp, cleanedProps) : Object.assign({}, styleProp, cleanedProps);\n } else {\n return cleanedProps;\n }\n}\n//# sourceMappingURL=resolve.js.map","import { append, appendTransform, identity, reset, toArray } from '../Matrix2D';\nimport { parse } from './transform';\nfunction appendTransformProps(props) {\n const {\n x,\n y,\n originX,\n originY,\n scaleX,\n scaleY,\n rotation,\n skewX,\n skewY\n } = props;\n appendTransform(x + originX, y + originY, scaleX, scaleY, rotation, skewX, skewY, originX, originY);\n}\nfunction universal2axis(universal, axisX, axisY, defaultValue) {\n let x;\n let y;\n if (typeof universal === 'number') {\n x = y = universal;\n } else if (typeof universal === 'string') {\n const coords = universal.split(/\\s*,\\s*/);\n if (coords.length === 2) {\n x = +coords[0];\n y = +coords[1];\n } else if (coords.length === 1) {\n x = y = +coords[0];\n }\n } else if (Array.isArray(universal)) {\n if (universal.length === 2) {\n x = +universal[0];\n y = +universal[1];\n } else if (universal.length === 1) {\n x = y = +universal[0];\n }\n }\n axisX = +axisX;\n if (!isNaN(axisX)) {\n x = axisX;\n }\n axisY = +axisY;\n if (!isNaN(axisY)) {\n y = axisY;\n }\n return [x || defaultValue || 0, y || defaultValue || 0];\n}\nexport function transformsArrayToProps(transformObjectsArray) {\n const props = {};\n transformObjectsArray === null || transformObjectsArray === void 0 ? void 0 : transformObjectsArray.forEach(transformObject => {\n const keys = Object.keys(transformObject);\n if (keys.length !== 1) {\n console.error('You must specify exactly one property per transform object.');\n }\n const key = keys[0];\n const value = transformObject[key];\n props[key] = value;\n });\n return props;\n}\nexport function props2transform(props) {\n if (!props) {\n return null;\n }\n const extractedProps = Array.isArray(props) ? transformsArrayToProps(props) : props;\n const {\n rotation,\n translate,\n translateX,\n translateY,\n origin,\n originX,\n originY,\n scale,\n scaleX,\n scaleY,\n skew,\n skewX,\n skewY,\n x,\n y\n } = extractedProps;\n if (rotation == null && translate == null && translateX == null && translateY == null && origin == null && originX == null && originY == null && scale == null && scaleX == null && scaleY == null && skew == null && skewX == null && skewY == null && x == null && y == null) {\n return null;\n }\n if (Array.isArray(x) || Array.isArray(y)) {\n console.warn('Passing SvgLengthList to x or y attribute where SvgLength expected');\n }\n const tr = universal2axis(translate, translateX || (Array.isArray(x) ? x[0] : x), translateY || (Array.isArray(y) ? y[0] : y));\n const or = universal2axis(origin, originX, originY);\n const sc = universal2axis(scale, scaleX, scaleY, 1);\n const sk = universal2axis(skew, skewX, skewY);\n return {\n rotation: rotation == null ? 0 : +rotation || 0,\n originX: or[0],\n originY: or[1],\n scaleX: sc[0],\n scaleY: sc[1],\n skewX: sk[0],\n skewY: sk[1],\n x: tr[0],\n y: tr[1]\n };\n}\nexport function transformToMatrix(props, transform) {\n if (!props && !transform) {\n return null;\n }\n reset();\n props && appendTransformProps(props);\n if (transform) {\n if (Array.isArray(transform)) {\n if (typeof transform[0] === 'number') {\n const columnMatrix = transform;\n append(columnMatrix[0], columnMatrix[1], columnMatrix[2], columnMatrix[3], columnMatrix[4], columnMatrix[5]);\n } else {\n const transformProps = props2transform(transformsArrayToProps(transform));\n transformProps && appendTransformProps(transformProps);\n }\n } else if (typeof transform === 'string') {\n try {\n const t = parse(transform);\n append(t[0], t[3], t[1], t[4], t[2], t[5]);\n } catch (e) {\n console.error(e);\n }\n } else {\n const transformProps = props2transform(transform);\n transformProps && appendTransformProps(transformProps);\n }\n }\n return toArray();\n}\nexport default function extractTransform(props) {\n if (Array.isArray(props) && typeof props[0] === 'number') {\n return props;\n }\n if (typeof props === 'string') {\n try {\n const t = parse(props);\n return [t[0], t[3], t[1], t[4], t[2], t[5]];\n } catch (e) {\n console.error(e);\n return identity;\n }\n }\n // this type is not correct since props can be of type TransformsStyle['transform'] too\n // but it satisfies TS and should not produce any type errors\n const transformProps = props;\n return transformToMatrix(props2transform(transformProps), transformProps === null || transformProps === void 0 ? void 0 : transformProps.transform);\n}\n//# sourceMappingURL=extractTransform.js.map","/**\n * based on\n * https://github.com/CreateJS/EaselJS/blob/631cdffb85eff9413dab43b4676f059b4232d291/src/easeljs/geom/Matrix2D.js\n */\nconst DEG_TO_RAD = Math.PI / 180;\nexport const identity = [1, 0, 0, 1, 0, 0];\nlet a = 1;\nlet b = 0;\nlet c = 0;\nlet d = 1;\nlet tx = 0;\nlet ty = 0;\nlet hasInitialState = true;\n\n/**\n * Represents an affine transformation matrix, and provides tools for concatenating transforms.\n *\n * This matrix can be visualized as:\n *\n * \t[ a c tx\n * \t b d ty\n * \t 0 0 1 ]\n *\n * Note the locations of b and c.\n **/\n\n/**\n * Reset current matrix to an identity matrix.\n * @method reset\n **/\nexport function reset() {\n if (hasInitialState) {\n return;\n }\n a = d = 1;\n b = c = tx = ty = 0;\n hasInitialState = true;\n}\n\n/**\n * Returns an array with current matrix values.\n * @method toArray\n * @return {Array} an array with current matrix values.\n **/\nexport function toArray() {\n if (hasInitialState) {\n return identity;\n }\n return [a, b, c, d, tx, ty];\n}\n\n/**\n * Appends the specified matrix properties to this matrix. All parameters are required.\n * This is the equivalent of multiplying `(this matrix) * (specified matrix)`.\n * @method append\n * @param {Number} a2\n * @param {Number} b2\n * @param {Number} c2\n * @param {Number} d2\n * @param {Number} tx2\n * @param {Number} ty2\n **/\nexport function append(a2, b2, c2, d2, tx2, ty2) {\n const change = a2 !== 1 || b2 !== 0 || c2 !== 0 || d2 !== 1;\n const translate = tx2 !== 0 || ty2 !== 0;\n if (!change && !translate) {\n return;\n }\n if (hasInitialState) {\n hasInitialState = false;\n a = a2;\n b = b2;\n c = c2;\n d = d2;\n tx = tx2;\n ty = ty2;\n return;\n }\n const a1 = a;\n const b1 = b;\n const c1 = c;\n const d1 = d;\n if (change) {\n a = a1 * a2 + c1 * b2;\n b = b1 * a2 + d1 * b2;\n c = a1 * c2 + c1 * d2;\n d = b1 * c2 + d1 * d2;\n }\n if (translate) {\n tx = a1 * tx2 + c1 * ty2 + tx;\n ty = b1 * tx2 + d1 * ty2 + ty;\n }\n}\n\n/**\n * Generates matrix properties from the specified display object transform properties, and appends them to this matrix.\n * For example, you can use this to generate a matrix representing the transformations of a display object:\n *\n * \treset();\n * \tappendTransform(o.x, o.y, o.scaleX, o.scaleY, o.rotation);\n * \tvar matrix = toArray()\n *\n * @method appendTransform\n * @param {Number} x\n * @param {Number} y\n * @param {Number} scaleX\n * @param {Number} scaleY\n * @param {Number} rotation\n * @param {Number} skewX\n * @param {Number} skewY\n * @param {Number} regX Optional.\n * @param {Number} regY Optional.\n **/\nexport function appendTransform(x, y, scaleX, scaleY, rotation, skewX, skewY, regX, regY) {\n if (x === 0 && y === 0 && scaleX === 1 && scaleY === 1 && rotation === 0 && skewX === 0 && skewY === 0 && regX === 0 && regY === 0) {\n return;\n }\n let cos, sin;\n if (rotation % 360) {\n const r = rotation * DEG_TO_RAD;\n cos = Math.cos(r);\n sin = Math.sin(r);\n } else {\n cos = 1;\n sin = 0;\n }\n const a2 = cos * scaleX;\n const b2 = sin * scaleX;\n const c2 = -sin * scaleY;\n const d2 = cos * scaleY;\n if (skewX || skewY) {\n const b1 = Math.tan(skewY * DEG_TO_RAD);\n const c1 = Math.tan(skewX * DEG_TO_RAD);\n append(a2 + c1 * b2, b1 * a2 + b2, c2 + c1 * d2, b1 * c2 + d2, x, y);\n } else {\n append(a2, b2, c2, d2, x, y);\n }\n if (regX || regY) {\n // append the registration offset:\n tx -= regX * a + regY * c;\n ty -= regX * b + regY * d;\n hasInitialState = false;\n }\n}\n//# sourceMappingURL=Matrix2D.js.map","/*\n * Generated by PEG.js 0.10.0.\n *\n * http://pegjs.org/\n */\n\n\"use strict\";\n\nfunction peg$subclass(child, parent) {\n function ctor() {\n this.constructor = child;\n }\n ctor.prototype = parent.prototype;\n child.prototype = new ctor();\n}\nfunction peg$SyntaxError(message, expected, found, location) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.location = location;\n this.name = \"SyntaxError\";\n if (typeof Error.captureStackTrace === \"function\") {\n Error.captureStackTrace(this, peg$SyntaxError);\n }\n}\npeg$subclass(peg$SyntaxError, Error);\npeg$SyntaxError.buildMessage = function (expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function (expectation) {\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n },\n \"class\": function (expectation) {\n var escapedParts = \"\",\n i;\n for (i = 0; i < expectation.parts.length; i++) {\n escapedParts += expectation.parts[i] instanceof Array ? classEscape(expectation.parts[i][0]) + \"-\" + classEscape(expectation.parts[i][1]) : classEscape(expectation.parts[i]);\n }\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts + \"]\";\n },\n any: function (expectation) {\n return \"any character\";\n },\n end: function (expectation) {\n return \"end of input\";\n },\n other: function (expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\0/g, '\\\\0').replace(/\\t/g, '\\\\t').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/[\\x00-\\x0F]/g, function (ch) {\n return '\\\\x0' + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n return '\\\\x' + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, '\\\\\\\\').replace(/\\]/g, '\\\\]').replace(/\\^/g, '\\\\^').replace(/-/g, '\\\\-').replace(/\\0/g, '\\\\0').replace(/\\t/g, '\\\\t').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/[\\x00-\\x0F]/g, function (ch) {\n return '\\\\x0' + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n return '\\\\x' + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected) {\n var descriptions = new Array(expected.length),\n i,\n j;\n for (i = 0; i < expected.length; i++) {\n descriptions[i] = describeExpectation(expected[i]);\n }\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found) {\n return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n};\nfunction peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {},\n peg$startRuleFunctions = {\n transformList: peg$parsetransformList\n },\n peg$startRuleFunction = peg$parsetransformList,\n peg$c0 = function (ts) {\n return ts;\n },\n peg$c1 = function (t, ts) {\n return multiply_matrices(t, ts);\n },\n peg$c2 = \"matrix\",\n peg$c3 = peg$literalExpectation(\"matrix\", false),\n peg$c4 = \"(\",\n peg$c5 = peg$literalExpectation(\"(\", false),\n peg$c6 = \")\",\n peg$c7 = peg$literalExpectation(\")\", false),\n peg$c8 = function (a, b, c, d, e, f) {\n return [a, c, e, b, d, f];\n },\n peg$c9 = \"translate\",\n peg$c10 = peg$literalExpectation(\"translate\", false),\n peg$c11 = function (tx, ty) {\n return [1, 0, tx, 0, 1, ty || 0];\n },\n peg$c12 = \"scale\",\n peg$c13 = peg$literalExpectation(\"scale\", false),\n peg$c14 = function (sx, sy) {\n return [sx, 0, 0, 0, sy === null ? sx : sy, 0];\n },\n peg$c15 = \"rotate\",\n peg$c16 = peg$literalExpectation(\"rotate\", false),\n peg$c17 = function (angle, c) {\n var cos = Math.cos(deg2rad * angle);\n var sin = Math.sin(deg2rad * angle);\n if (c !== null) {\n var x = c[0];\n var y = c[1];\n return [cos, -sin, cos * -x + -sin * -y + x, sin, cos, sin * -x + cos * -y + y];\n }\n return [cos, -sin, 0, sin, cos, 0];\n },\n peg$c18 = \"skewX\",\n peg$c19 = peg$literalExpectation(\"skewX\", false),\n peg$c20 = function (angle) {\n return [1, Math.tan(deg2rad * angle), 0, 0, 1, 0];\n },\n peg$c21 = \"skewY\",\n peg$c22 = peg$literalExpectation(\"skewY\", false),\n peg$c23 = function (angle) {\n return [1, 0, 0, Math.tan(deg2rad * angle), 1, 0];\n },\n peg$c24 = function (f) {\n return parseFloat(f.join(\"\"));\n },\n peg$c25 = function (i) {\n return parseInt(i.join(\"\"));\n },\n peg$c26 = function (n) {\n return n;\n },\n peg$c27 = function (n1, n2) {\n return [n1, n2];\n },\n peg$c28 = \",\",\n peg$c29 = peg$literalExpectation(\",\", false),\n peg$c30 = function (ds) {\n return ds.join(\"\");\n },\n peg$c31 = function (f) {\n return f.join(\"\");\n },\n peg$c32 = function (d) {\n return d.join(\"\");\n },\n peg$c33 = peg$otherExpectation(\"fractionalConstant\"),\n peg$c34 = \".\",\n peg$c35 = peg$literalExpectation(\".\", false),\n peg$c36 = function (d1, d2) {\n return [d1 ? d1.join(\"\") : null, \".\", d2.join(\"\")].join(\"\");\n },\n peg$c37 = /^[eE]/,\n peg$c38 = peg$classExpectation([\"e\", \"E\"], false, false),\n peg$c39 = function (e) {\n return [e[0], e[1], e[2].join(\"\")].join(\"\");\n },\n peg$c40 = /^[+\\-]/,\n peg$c41 = peg$classExpectation([\"+\", \"-\"], false, false),\n peg$c42 = /^[0-9]/,\n peg$c43 = peg$classExpectation([[\"0\", \"9\"]], false, false),\n peg$c44 = /^[ \\t\\r\\n]/,\n peg$c45 = peg$classExpectation([\" \", \"\\t\", \"\\r\", \"\\n\"], false, false),\n peg$currPos = 0,\n peg$savedPos = 0,\n peg$posDetailsCache = [{\n line: 1,\n column: 1\n }],\n peg$maxFailPos = 0,\n peg$maxFailExpected = [],\n peg$silentFails = 0,\n peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location) {\n location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError([peg$otherExpectation(description)], input.substring(peg$savedPos, peg$currPos), location);\n }\n function error(message, location) {\n location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location);\n }\n function peg$literalExpectation(text, ignoreCase) {\n return {\n type: \"literal\",\n text: text,\n ignoreCase: ignoreCase\n };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return {\n type: \"class\",\n parts: parts,\n inverted: inverted,\n ignoreCase: ignoreCase\n };\n }\n function peg$anyExpectation() {\n return {\n type: \"any\"\n };\n }\n function peg$endExpectation() {\n return {\n type: \"end\"\n };\n }\n function peg$otherExpectation(description) {\n return {\n type: \"other\",\n description: description\n };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos],\n p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos),\n endPosDetails = peg$computePosDetails(endPos);\n return {\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected);\n }\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(peg$SyntaxError.buildMessage(expected, found), expected, found, location);\n }\n function peg$parsetransformList() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewsp();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewsp();\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsetransforms();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsewsp();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsewsp();\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsetransforms() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parsetransform();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsecommaWsp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsecommaWsp();\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsetransforms();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c1(s1, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parsetransform();\n }\n return s0;\n }\n function peg$parsetransform() {\n var s0;\n s0 = peg$parsematrix();\n if (s0 === peg$FAILED) {\n s0 = peg$parsetranslate();\n if (s0 === peg$FAILED) {\n s0 = peg$parsescale();\n if (s0 === peg$FAILED) {\n s0 = peg$parserotate();\n if (s0 === peg$FAILED) {\n s0 = peg$parseskewX();\n if (s0 === peg$FAILED) {\n s0 = peg$parseskewY();\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parsematrix() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16, s17;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 6) === peg$c2) {\n s1 = peg$c2;\n peg$currPos += 6;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c3);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewsp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewsp();\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 40) {\n s3 = peg$c4;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c5);\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parsewsp();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parsewsp();\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsenumber();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsecommaWsp();\n if (s6 !== peg$FAILED) {\n s7 = peg$parsenumber();\n if (s7 !== peg$FAILED) {\n s8 = peg$parsecommaWsp();\n if (s8 !== peg$FAILED) {\n s9 = peg$parsenumber();\n if (s9 !== peg$FAILED) {\n s10 = peg$parsecommaWsp();\n if (s10 !== peg$FAILED) {\n s11 = peg$parsenumber();\n if (s11 !== peg$FAILED) {\n s12 = peg$parsecommaWsp();\n if (s12 !== peg$FAILED) {\n s13 = peg$parsenumber();\n if (s13 !== peg$FAILED) {\n s14 = peg$parsecommaWsp();\n if (s14 !== peg$FAILED) {\n s15 = peg$parsenumber();\n if (s15 !== peg$FAILED) {\n s16 = [];\n s17 = peg$parsewsp();\n while (s17 !== peg$FAILED) {\n s16.push(s17);\n s17 = peg$parsewsp();\n }\n if (s16 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s17 = peg$c6;\n peg$currPos++;\n } else {\n s17 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n if (s17 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c8(s5, s7, s9, s11, s13, s15);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsetranslate() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 9) === peg$c9) {\n s1 = peg$c9;\n peg$currPos += 9;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c10);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewsp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewsp();\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 40) {\n s3 = peg$c4;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c5);\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parsewsp();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parsewsp();\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsenumber();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsecommaWspNumber();\n if (s6 === peg$FAILED) {\n s6 = null;\n }\n if (s6 !== peg$FAILED) {\n s7 = [];\n s8 = peg$parsewsp();\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n s8 = peg$parsewsp();\n }\n if (s7 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s8 = peg$c6;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c11(s5, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsescale() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c12) {\n s1 = peg$c12;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c13);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewsp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewsp();\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 40) {\n s3 = peg$c4;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c5);\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parsewsp();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parsewsp();\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsenumber();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsecommaWspNumber();\n if (s6 === peg$FAILED) {\n s6 = null;\n }\n if (s6 !== peg$FAILED) {\n s7 = [];\n s8 = peg$parsewsp();\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n s8 = peg$parsewsp();\n }\n if (s7 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s8 = peg$c6;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c14(s5, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parserotate() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 6) === peg$c15) {\n s1 = peg$c15;\n peg$currPos += 6;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c16);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewsp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewsp();\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 40) {\n s3 = peg$c4;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c5);\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parsewsp();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parsewsp();\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsenumber();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsecommaWspTwoNumbers();\n if (s6 === peg$FAILED) {\n s6 = null;\n }\n if (s6 !== peg$FAILED) {\n s7 = [];\n s8 = peg$parsewsp();\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n s8 = peg$parsewsp();\n }\n if (s7 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s8 = peg$c6;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c17(s5, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseskewX() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c18) {\n s1 = peg$c18;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c19);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewsp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewsp();\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 40) {\n s3 = peg$c4;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c5);\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parsewsp();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parsewsp();\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsenumber();\n if (s5 !== peg$FAILED) {\n s6 = [];\n s7 = peg$parsewsp();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsewsp();\n }\n if (s6 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s7 = peg$c6;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n if (s7 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c20(s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseskewY() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c21) {\n s1 = peg$c21;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c22);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewsp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewsp();\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 40) {\n s3 = peg$c4;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c5);\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parsewsp();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parsewsp();\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsenumber();\n if (s5 !== peg$FAILED) {\n s6 = [];\n s7 = peg$parsewsp();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsewsp();\n }\n if (s6 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s7 = peg$c6;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n if (s7 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c23(s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsenumber() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parsesign();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsefloatingPointConstant();\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c24(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parsesign();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseintegerConstant();\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c25(s1);\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parsecommaWspNumber() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parsecommaWsp();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c26(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecommaWspTwoNumbers() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$parsecommaWsp();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsecommaWsp();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsenumber();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c27(s2, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecommaWsp() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewsp();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewsp();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsecomma();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsewsp();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsewsp();\n }\n if (s3 !== peg$FAILED) {\n s1 = [s1, s2, s3];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsecomma();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewsp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewsp();\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n function peg$parsecomma() {\n var s0;\n if (input.charCodeAt(peg$currPos) === 44) {\n s0 = peg$c28;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c29);\n }\n }\n return s0;\n }\n function peg$parseintegerConstant() {\n var s0, s1;\n s0 = peg$currPos;\n s1 = peg$parsedigitSequence();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c30(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parsefloatingPointConstant() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parsefractionalConstant();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseexponent();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c31(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parsedigitSequence();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseexponent();\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c32(s1);\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parsefractionalConstant() {\n var s0, s1, s2, s3;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsedigitSequence();\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s2 = peg$c34;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c35);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsedigitSequence();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c36(s1, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsedigitSequence();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s2 = peg$c34;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c35);\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c32(s1);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c33);\n }\n }\n return s0;\n }\n function peg$parseexponent() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (peg$c37.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c38);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsesign();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parsedigitSequence();\n if (s4 !== peg$FAILED) {\n s2 = [s2, s3, s4];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c39(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parsesign() {\n var s0;\n if (peg$c40.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c41);\n }\n }\n return s0;\n }\n function peg$parsedigitSequence() {\n var s0, s1;\n s0 = [];\n s1 = peg$parsedigit();\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parsedigit();\n }\n } else {\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsedigit() {\n var s0;\n if (peg$c42.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c43);\n }\n }\n return s0;\n }\n function peg$parsewsp() {\n var s0;\n if (peg$c44.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c45);\n }\n }\n return s0;\n }\n var deg2rad = Math.PI / 180;\n\n /*\n ╔═ ═╗ ╔═ ═╗ ╔═ ═╗\n ║ al cl el ║ ║ ar cr er ║ ║ a c e ║\n ║ bl dl fl ║ * ║ br dr fr ║ = ║ b d f ║\n ║ 0 0 1 ║ ║ 0 0 1 ║ ║ 0 0 1 ║\n ╚═ ═╝ ╚═ ═╝ ╚═ ═╝\n */\n function multiply_matrices(l, r) {\n var al = l[0];\n var cl = l[1];\n var el = l[2];\n var bl = l[3];\n var dl = l[4];\n var fl = l[5];\n var ar = r[0];\n var cr = r[1];\n var er = r[2];\n var br = r[3];\n var dr = r[4];\n var fr = r[5];\n var a = al * ar + cl * br;\n var c = al * cr + cl * dr;\n var e = al * er + cl * fr + el;\n var b = bl * ar + dl * br;\n var d = bl * cr + dl * dr;\n var f = bl * er + dl * fr + fl;\n return [a, c, e, b, d, f];\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(peg$maxFailExpected, peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos));\n }\n}\nmodule.exports = {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n};\n//# sourceMappingURL=transform.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ChevronLeft = void 0;\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_svg_1 = require(\"react-native-svg\");\nclass ChevronLeft extends react_1.default.Component {\n render() {\n return (\n \n \n \n \n \n \n );\n }\n}\nexports.ChevronLeft = ChevronLeft;\n//# sourceMappingURL=chevronLeft.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ChevronRight = void 0;\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_svg_1 = require(\"react-native-svg\");\nclass ChevronRight extends react_1.default.Component {\n render() {\n return (\n \n \n \n \n \n \n );\n }\n}\nexports.ChevronRight = ChevronRight;\n//# sourceMappingURL=chevronRight.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CalendarViewModes = exports.RangeRole = void 0;\nvar RangeRole;\n(function (RangeRole) {\n RangeRole[RangeRole[\"none\"] = 0] = \"none\";\n RangeRole[RangeRole[\"member\"] = 1] = \"member\";\n RangeRole[RangeRole[\"start\"] = 2] = \"start\";\n RangeRole[RangeRole[\"end\"] = 4] = \"end\";\n RangeRole[RangeRole[\"complete\"] = 6] = \"complete\";\n})(RangeRole = exports.RangeRole || (exports.RangeRole = {}));\nconst VIEW_MODE_DATE = {\n id: 'DATE',\n navigationNext: () => {\n return VIEW_MODE_YEAR;\n },\n pickNext: () => {\n return VIEW_MODE_DATE;\n },\n};\nconst VIEW_MODE_MONTH = {\n id: 'MONTH',\n navigationNext: () => {\n return VIEW_MODE_DATE;\n },\n pickNext: () => {\n return VIEW_MODE_DATE;\n },\n};\nconst VIEW_MODE_YEAR = {\n id: 'YEAR',\n navigationNext: () => {\n return VIEW_MODE_DATE;\n },\n pickNext: () => {\n return VIEW_MODE_MONTH;\n },\n};\nexports.CalendarViewModes = {\n DATE: VIEW_MODE_DATE,\n MONTH: VIEW_MODE_MONTH,\n YEAR: VIEW_MODE_YEAR,\n};\n//# sourceMappingURL=type.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CalendarMonthHeader = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nclass CalendarMonthHeader extends react_1.default.Component {\n render() {\n const { style, data, children, ...viewProps } = this.props;\n return (\n {data.map(children)}\n );\n }\n}\nexports.CalendarMonthHeader = CalendarMonthHeader;\nconst styles = react_native_1.StyleSheet.create({\n container: {\n justifyContent: 'center',\n flexDirection: 'row',\n },\n});\n//# sourceMappingURL=calendarMonthHeader.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CalendarPicker = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst calendarPickerRow_component_1 = require(\"./calendarPickerRow.component\");\nconst calendarPickerCell_component_1 = require(\"./calendarPickerCell.component\");\nconst type_1 = require(\"../../type\");\nclass CalendarPicker extends react_1.default.Component {\n renderCellElement = (item, index) => {\n const firstRangeItem = !!(item.range & type_1.RangeRole.start);\n const lastRangeItem = !!(item.range & type_1.RangeRole.end);\n return (\n {this.props.children}\n );\n };\n renderRowElement = (item, index) => {\n return (\n {this.renderCellElement}\n );\n };\n render() {\n const { data, children, ...viewProps } = this.props;\n return (\n {data.map(this.renderRowElement)}\n );\n }\n}\nexports.CalendarPicker = CalendarPicker;\n//# sourceMappingURL=calendarPicker.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CalendarPickerRow = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nclass CalendarPickerRow extends react_1.default.Component {\n render() {\n const { style, data, children, ...viewProps } = this.props;\n return (\n {data.map(children)}\n );\n }\n}\nexports.CalendarPickerRow = CalendarPickerRow;\nconst styles = react_native_1.StyleSheet.create({\n container: {\n flexDirection: 'row',\n overflow: 'hidden',\n },\n});\n//# sourceMappingURL=calendarPickerRow.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CalendarPickerCell = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst devsupport_1 = require(\"../../../../devsupport\");\nconst theme_1 = require(\"../../../../theme\");\nlet CalendarPickerCell = class CalendarPickerCell extends react_1.default.Component {\n shouldComponentUpdate(nextProps) {\n if (nextProps.shouldComponentUpdate) {\n return nextProps.shouldComponentUpdate(this.props, nextProps);\n }\n return true;\n }\n onPress = () => {\n this.props.onSelect?.(this.props.date);\n };\n getContainerBorderRadius = (borderRadius) => {\n const { firstRangeItem, lastRangeItem } = this.props;\n const borderStyle = {\n borderBottomRightRadius: 0,\n borderTopRightRadius: 0,\n borderBottomLeftRadius: 0,\n borderTopLeftRadius: 0,\n };\n if (firstRangeItem) {\n borderStyle.borderBottomLeftRadius = borderRadius;\n borderStyle.borderTopLeftRadius = borderRadius;\n }\n if (lastRangeItem) {\n borderStyle.borderBottomRightRadius = borderRadius;\n borderStyle.borderTopRightRadius = borderRadius;\n }\n return borderStyle;\n };\n getComponentStyle = (source) => {\n const { contentBorderWidth, contentBorderRadius, contentBorderColor, contentBackgroundColor, contentTextFontSize, contentTextFontWeight, contentTextColor, contentTextFontFamily, borderRadius, ...containerParameters } = source;\n return {\n container: {\n ...containerParameters,\n ...this.getContainerBorderRadius(borderRadius),\n },\n contentContainer: {\n borderWidth: contentBorderWidth,\n borderRadius: contentBorderRadius,\n borderColor: contentBorderColor,\n backgroundColor: contentBackgroundColor,\n },\n contentText: {\n fontSize: contentTextFontSize,\n fontWeight: contentTextFontWeight,\n color: contentTextColor,\n fontFamily: contentTextFontFamily,\n },\n };\n };\n renderContentElement = (source, evaStyle) => {\n return source?.(this.props.date, {\n container: evaStyle.contentContainer,\n text: evaStyle.contentText,\n });\n };\n render() {\n const { eva, style, date, bounding, children, ...touchableProps } = this.props;\n const evaStyle = this.getComponentStyle(eva.style);\n return (\n {this.renderContentElement(children, evaStyle)}\n );\n }\n};\nCalendarPickerCell = __decorate([\n (0, theme_1.styled)('CalendarCell')\n], CalendarPickerCell);\nexports.CalendarPickerCell = CalendarPickerCell;\nconst styles = react_native_1.StyleSheet.create({\n container: {\n flex: 1,\n },\n});\n//# sourceMappingURL=calendarPickerCell.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CalendarDateContent = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst text_component_1 = require(\"../../text/text.component\");\nclass CalendarDateContent extends react_1.default.Component {\n render() {\n const { style, textStyle, children, ...viewProps } = this.props;\n return (\n \n {children}\n \n );\n }\n}\nexports.CalendarDateContent = CalendarDateContent;\nconst styles = react_native_1.StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n },\n});\n//# sourceMappingURL=calendarDateContent.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TranslationWidth = void 0;\nvar TranslationWidth;\n(function (TranslationWidth) {\n TranslationWidth[\"SHORT\"] = \"short\";\n TranslationWidth[\"LONG\"] = \"long\";\n})(TranslationWidth = exports.TranslationWidth || (exports.TranslationWidth = {}));\n//# sourceMappingURL=type.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NativeDateService = exports.LOCALE_DEFAULT = void 0;\nconst fecha_1 = __importDefault(require(\"fecha\"));\nconst date_service_1 = require(\"./date.service\");\nconst type_1 = require(\"../i18n/type\");\nconst en_1 = require(\"../i18n/en\");\nexports.LOCALE_DEFAULT = 'en';\nconst DEFAULT_OPTIONS = {\n format: 'DD/MM/YYYY',\n startDayOfWeek: 0,\n};\n/**\n * The `NativeDateService` is basic implementation of `DateService` using\n * native js date objects.\n */\nclass NativeDateService extends date_service_1.DateService {\n options;\n i18nSettings = fecha_1.default.i18n;\n constructor(locale = exports.LOCALE_DEFAULT, options) {\n super();\n this.options = { ...DEFAULT_OPTIONS, ...options };\n super.setLocale(this.options.i18n ? locale : exports.LOCALE_DEFAULT);\n this.setFechaLocaleData(this.options.i18n || en_1.EN);\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n setLocale(locale) {\n console.warn('Runtime locale is not supported');\n }\n isValidDateString(date, format) {\n return !isNaN(this.parse(date, format).getTime());\n }\n today() {\n return new Date();\n }\n getDate(date) {\n return date.getDate();\n }\n getMonth(date) {\n return date.getMonth();\n }\n getYear(date) {\n return date.getFullYear();\n }\n getDayOfWeek(date) {\n return date.getDay();\n }\n /**\n * returns first day of the week, it can be 1 if week starts from monday\n * and 0 if from sunday and so on.\n * */\n getFirstDayOfWeek() {\n return this.options.startDayOfWeek;\n }\n getMonthName(date, style = type_1.TranslationWidth.SHORT) {\n const index = date.getMonth();\n return this.getMonthNameByIndex(index, style);\n }\n getMonthNameByIndex(index, style = type_1.TranslationWidth.SHORT) {\n return this.getFechaMonthNames(style)[index];\n }\n getDayOfWeekNames(style = type_1.TranslationWidth.SHORT) {\n const dayNames = this.getFechaDayNames(style);\n // avoid mutation of source array\n return this.shiftDayOfWeekNames([...dayNames], this.options.startDayOfWeek);\n }\n format(date, format) {\n return fecha_1.default.format(date, format || this.options.format, this.i18nSettings);\n }\n /**\n * We haven't got capability to parse date using formatting without third party libraries.\n * */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n parse(date, format) {\n return new Date(Date.parse(date));\n }\n addDay(date, num) {\n return this.createDate(date.getFullYear(), date.getMonth(), date.getDate() + num);\n }\n addMonth(date, num) {\n const month = this.createDate(date.getFullYear(), date.getMonth() + num, 1);\n // In case of date has more days than calculated month js Date will change that month to the next one\n // because of the date overflow.\n month.setDate(Math.min(date.getDate(), this.getMonthEnd(month).getDate()));\n return month;\n }\n addYear(date, num) {\n return this.createDate(date.getFullYear() + num, date.getMonth(), date.getDate());\n }\n clone(date) {\n return new Date(date.getTime());\n }\n compareDates(date1, date2) {\n return date1.getTime() - date2.getTime();\n }\n compareDatesSafe(date1, date2) {\n if (this.compareDates(date1, date2) < 0) {\n return -1;\n }\n else if (this.compareDates(date1, date2) > 0) {\n return 1;\n }\n else if (this.compareDates(date1, date2) === 0) {\n return 0;\n }\n }\n createDate(year, month, date) {\n const result = new Date(year, month, date);\n // We need to correct for the fact that JS native Date treats years in range [0, 99] as\n // abbreviations for 19xx.\n if (year >= 0 && year < 100) {\n result.setFullYear(result.getFullYear() - 1900);\n }\n return result;\n }\n getMonthEnd(date) {\n return this.createDate(date.getFullYear(), date.getMonth() + 1, 0);\n }\n getMonthStart(date) {\n return this.createDate(date.getFullYear(), date.getMonth(), 1);\n }\n getNumberOfDaysInMonth(date) {\n return this.getMonthEnd(date).getDate();\n }\n getYearEnd(date) {\n return this.createDate(date.getFullYear(), 11, 31);\n }\n getYearStart(date) {\n return this.createDate(date.getFullYear(), 0, 1);\n }\n isSameDay(date1, date2) {\n return this.isSameMonth(date1, date2) && date1.getDate() === date2.getDate();\n }\n isSameMonth(date1, date2) {\n return this.isSameYear(date1, date2) && date1.getMonth() === date2.getMonth();\n }\n isSameYear(date1, date2) {\n return date1.getFullYear() === date2.getFullYear();\n }\n getId() {\n return 'native';\n }\n shiftDayOfWeekNames(value, offset) {\n return value.splice(offset).concat(value);\n }\n getFechaDayNames(style) {\n switch (style) {\n case type_1.TranslationWidth.SHORT:\n return this.i18nSettings.dayNamesShort;\n case type_1.TranslationWidth.LONG:\n return this.i18nSettings.dayNames;\n default:\n return;\n }\n }\n getFechaMonthNames(style) {\n switch (style) {\n case type_1.TranslationWidth.SHORT:\n return this.i18nSettings.monthNamesShort;\n case type_1.TranslationWidth.LONG:\n return this.i18nSettings.monthNames;\n default:\n return;\n }\n }\n setFechaLocaleData(config) {\n this.i18nSettings = {\n ...fecha_1.default.i18n,\n dayNames: config.dayNames[type_1.TranslationWidth.LONG],\n dayNamesShort: config.dayNames[type_1.TranslationWidth.SHORT],\n monthNames: config.monthNames[type_1.TranslationWidth.LONG],\n monthNamesShort: config.monthNames[type_1.TranslationWidth.SHORT],\n };\n }\n}\nexports.NativeDateService = NativeDateService;\n//# sourceMappingURL=nativeDate.service.js.map","/**\n * Parse or format dates\n * @class fecha\n */\nvar fecha = {};\nvar token = /d{1,4}|M{1,4}|YY(?:YY)?|S{1,3}|Do|ZZ|([HhMsDm])\\1?|[aA]|\"[^\"]*\"|'[^']*'/g;\nvar twoDigits = '\\\\d\\\\d?';\nvar threeDigits = '\\\\d{3}';\nvar fourDigits = '\\\\d{4}';\nvar word = '[^\\\\s]+';\nvar literal = /\\[([^]*?)\\]/gm;\nvar noop = function () {\n};\n\nfunction regexEscape(str) {\n return str.replace( /[|\\\\{()[^$+*?.-]/g, '\\\\$&');\n}\n\nfunction shorten(arr, sLen) {\n var newArr = [];\n for (var i = 0, len = arr.length; i < len; i++) {\n newArr.push(arr[i].substr(0, sLen));\n }\n return newArr;\n}\n\nfunction monthUpdate(arrName) {\n return function (d, v, i18n) {\n var index = i18n[arrName].indexOf(v.charAt(0).toUpperCase() + v.substr(1).toLowerCase());\n if (~index) {\n d.month = index;\n }\n };\n}\n\nfunction pad(val, len) {\n val = String(val);\n len = len || 2;\n while (val.length < len) {\n val = '0' + val;\n }\n return val;\n}\n\nvar dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\nvar monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\nvar monthNamesShort = shorten(monthNames, 3);\nvar dayNamesShort = shorten(dayNames, 3);\nfecha.i18n = {\n dayNamesShort: dayNamesShort,\n dayNames: dayNames,\n monthNamesShort: monthNamesShort,\n monthNames: monthNames,\n amPm: ['am', 'pm'],\n DoFn: function DoFn(D) {\n return D + ['th', 'st', 'nd', 'rd'][D % 10 > 3 ? 0 : (D - D % 10 !== 10) * D % 10];\n }\n};\n\nvar formatFlags = {\n D: function(dateObj) {\n return dateObj.getDate();\n },\n DD: function(dateObj) {\n return pad(dateObj.getDate());\n },\n Do: function(dateObj, i18n) {\n return i18n.DoFn(dateObj.getDate());\n },\n d: function(dateObj) {\n return dateObj.getDay();\n },\n dd: function(dateObj) {\n return pad(dateObj.getDay());\n },\n ddd: function(dateObj, i18n) {\n return i18n.dayNamesShort[dateObj.getDay()];\n },\n dddd: function(dateObj, i18n) {\n return i18n.dayNames[dateObj.getDay()];\n },\n M: function(dateObj) {\n return dateObj.getMonth() + 1;\n },\n MM: function(dateObj) {\n return pad(dateObj.getMonth() + 1);\n },\n MMM: function(dateObj, i18n) {\n return i18n.monthNamesShort[dateObj.getMonth()];\n },\n MMMM: function(dateObj, i18n) {\n return i18n.monthNames[dateObj.getMonth()];\n },\n YY: function(dateObj) {\n return pad(String(dateObj.getFullYear()), 4).substr(2);\n },\n YYYY: function(dateObj) {\n return pad(dateObj.getFullYear(), 4);\n },\n h: function(dateObj) {\n return dateObj.getHours() % 12 || 12;\n },\n hh: function(dateObj) {\n return pad(dateObj.getHours() % 12 || 12);\n },\n H: function(dateObj) {\n return dateObj.getHours();\n },\n HH: function(dateObj) {\n return pad(dateObj.getHours());\n },\n m: function(dateObj) {\n return dateObj.getMinutes();\n },\n mm: function(dateObj) {\n return pad(dateObj.getMinutes());\n },\n s: function(dateObj) {\n return dateObj.getSeconds();\n },\n ss: function(dateObj) {\n return pad(dateObj.getSeconds());\n },\n S: function(dateObj) {\n return Math.round(dateObj.getMilliseconds() / 100);\n },\n SS: function(dateObj) {\n return pad(Math.round(dateObj.getMilliseconds() / 10), 2);\n },\n SSS: function(dateObj) {\n return pad(dateObj.getMilliseconds(), 3);\n },\n a: function(dateObj, i18n) {\n return dateObj.getHours() < 12 ? i18n.amPm[0] : i18n.amPm[1];\n },\n A: function(dateObj, i18n) {\n return dateObj.getHours() < 12 ? i18n.amPm[0].toUpperCase() : i18n.amPm[1].toUpperCase();\n },\n ZZ: function(dateObj) {\n var o = dateObj.getTimezoneOffset();\n return (o > 0 ? '-' : '+') + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4);\n }\n};\n\nvar parseFlags = {\n D: [twoDigits, function (d, v) {\n d.day = v;\n }],\n Do: [twoDigits + word, function (d, v) {\n d.day = parseInt(v, 10);\n }],\n M: [twoDigits, function (d, v) {\n d.month = v - 1;\n }],\n YY: [twoDigits, function (d, v) {\n var da = new Date(), cent = +('' + da.getFullYear()).substr(0, 2);\n d.year = '' + (v > 68 ? cent - 1 : cent) + v;\n }],\n h: [twoDigits, function (d, v) {\n d.hour = v;\n }],\n m: [twoDigits, function (d, v) {\n d.minute = v;\n }],\n s: [twoDigits, function (d, v) {\n d.second = v;\n }],\n YYYY: [fourDigits, function (d, v) {\n d.year = v;\n }],\n S: ['\\\\d', function (d, v) {\n d.millisecond = v * 100;\n }],\n SS: ['\\\\d{2}', function (d, v) {\n d.millisecond = v * 10;\n }],\n SSS: [threeDigits, function (d, v) {\n d.millisecond = v;\n }],\n d: [twoDigits, noop],\n ddd: [word, noop],\n MMM: [word, monthUpdate('monthNamesShort')],\n MMMM: [word, monthUpdate('monthNames')],\n a: [word, function (d, v, i18n) {\n var val = v.toLowerCase();\n if (val === i18n.amPm[0]) {\n d.isPm = false;\n } else if (val === i18n.amPm[1]) {\n d.isPm = true;\n }\n }],\n ZZ: ['[^\\\\s]*?[\\\\+\\\\-]\\\\d\\\\d:?\\\\d\\\\d|[^\\\\s]*?Z', function (d, v) {\n var parts = (v + '').match(/([+-]|\\d\\d)/gi), minutes;\n\n if (parts) {\n minutes = +(parts[1] * 60) + parseInt(parts[2], 10);\n d.timezoneOffset = parts[0] === '+' ? minutes : -minutes;\n }\n }]\n};\nparseFlags.dd = parseFlags.d;\nparseFlags.dddd = parseFlags.ddd;\nparseFlags.DD = parseFlags.D;\nparseFlags.mm = parseFlags.m;\nparseFlags.hh = parseFlags.H = parseFlags.HH = parseFlags.h;\nparseFlags.MM = parseFlags.M;\nparseFlags.ss = parseFlags.s;\nparseFlags.A = parseFlags.a;\n\n\n// Some common format strings\nfecha.masks = {\n default: 'ddd MMM DD YYYY HH:mm:ss',\n shortDate: 'M/D/YY',\n mediumDate: 'MMM D, YYYY',\n longDate: 'MMMM D, YYYY',\n fullDate: 'dddd, MMMM D, YYYY',\n shortTime: 'HH:mm',\n mediumTime: 'HH:mm:ss',\n longTime: 'HH:mm:ss.SSS'\n};\n\n/***\n * Format a date\n * @method format\n * @param {Date|number} dateObj\n * @param {string} mask Format of the date, i.e. 'mm-dd-yy' or 'shortDate'\n */\nfecha.format = function (dateObj, mask, i18nSettings) {\n var i18n = i18nSettings || fecha.i18n;\n\n if (typeof dateObj === 'number') {\n dateObj = new Date(dateObj);\n }\n\n if (Object.prototype.toString.call(dateObj) !== '[object Date]' || isNaN(dateObj.getTime())) {\n throw new Error('Invalid Date in fecha.format');\n }\n\n mask = fecha.masks[mask] || mask || fecha.masks['default'];\n\n var literals = [];\n\n // Make literals inactive by replacing them with ??\n mask = mask.replace(literal, function($0, $1) {\n literals.push($1);\n return '@@@';\n });\n // Apply formatting rules\n mask = mask.replace(token, function ($0) {\n return $0 in formatFlags ? formatFlags[$0](dateObj, i18n) : $0.slice(1, $0.length - 1);\n });\n // Inline literal values back into the formatted value\n return mask.replace(/@@@/g, function() {\n return literals.shift();\n });\n};\n\n/**\n * Parse a date string into an object, changes - into /\n * @method parse\n * @param {string} dateStr Date string\n * @param {string} format Date parse format\n * @returns {Date|boolean}\n */\nfecha.parse = function (dateStr, format, i18nSettings) {\n var i18n = i18nSettings || fecha.i18n;\n\n if (typeof format !== 'string') {\n throw new Error('Invalid format in fecha.parse');\n }\n\n format = fecha.masks[format] || format;\n\n // Avoid regular expression denial of service, fail early for really long strings\n // https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS\n if (dateStr.length > 1000) {\n return null;\n }\n\n var dateInfo = {};\n var parseInfo = [];\n var literals = [];\n format = format.replace(literal, function($0, $1) {\n literals.push($1);\n return '@@@';\n });\n var newFormat = regexEscape(format).replace(token, function ($0) {\n if (parseFlags[$0]) {\n var info = parseFlags[$0];\n parseInfo.push(info[1]);\n return '(' + info[0] + ')';\n }\n\n return $0;\n });\n newFormat = newFormat.replace(/@@@/g, function() {\n return literals.shift();\n });\n var matches = dateStr.match(new RegExp(newFormat, 'i'));\n if (!matches) {\n return null;\n }\n\n for (var i = 1; i < matches.length; i++) {\n parseInfo[i - 1](dateInfo, matches[i], i18n);\n }\n\n var today = new Date();\n if (dateInfo.isPm === true && dateInfo.hour != null && +dateInfo.hour !== 12) {\n dateInfo.hour = +dateInfo.hour + 12;\n } else if (dateInfo.isPm === false && +dateInfo.hour === 12) {\n dateInfo.hour = 0;\n }\n\n var date;\n if (dateInfo.timezoneOffset != null) {\n dateInfo.minute = +(dateInfo.minute || 0) - +dateInfo.timezoneOffset;\n date = new Date(Date.UTC(dateInfo.year || today.getFullYear(), dateInfo.month || 0, dateInfo.day || 1,\n dateInfo.hour || 0, dateInfo.minute || 0, dateInfo.second || 0, dateInfo.millisecond || 0));\n } else {\n date = new Date(dateInfo.year || today.getFullYear(), dateInfo.month || 0, dateInfo.day || 1,\n dateInfo.hour || 0, dateInfo.minute || 0, dateInfo.second || 0, dateInfo.millisecond || 0);\n }\n return date;\n};\n\nexport default fecha;\n","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DateService = void 0;\nclass DateService {\n static DAYS_IN_WEEK = 7;\n static MONTHS_IN_YEAR = 12;\n locale;\n setLocale(locale) {\n this.locale = locale;\n }\n compareDatesSafe(date1, date2) {\n if (date1 && date2) {\n return this.compareDates(date1, date2);\n }\n else if (!date1 && !date2) {\n return 0;\n }\n return -1;\n }\n /**\n * Checks if the date is between the start date and the end date.\n * */\n isBetween(date, start, end) {\n return this.compareDates(date, start) > 0 && this.compareDates(date, end) < 0;\n }\n /**\n * Checks if the date is between the start date and the end date.\n * */\n isBetweenSafe(date, start, end) {\n return date && start && end && this.compareDates(date, start) > 0 && this.compareDates(date, end) < 0;\n }\n /**\n * Checks if the date is between the start date and the end date including bounds.\n * */\n isBetweenIncluding(date, start, end) {\n return this.compareDates(date, start) >= 0 && this.compareDates(date, end) <= 0;\n }\n /**\n * Checks if the date is between the start date and the end date including bounds.\n * */\n isBetweenIncludingSafe(date, start, end) {\n return date && start && end && this.isBetweenIncluding(date, start, end);\n }\n /**\n * Checks is two dates have the same day.\n * */\n isSameDaySafe(date1, date2) {\n return date1 && date2 && this.isSameDay(date1, date2);\n }\n /**\n * Checks is two dates have the same month.\n * */\n isSameMonthSafe(date1, date2) {\n return date1 && date2 && this.isSameMonth(date1, date2);\n }\n /**\n * Checks is two dates have the same year.\n * */\n isSameYearSafe(date1, date2) {\n return date1 && date2 && this.isSameYear(date1, date2);\n }\n}\nexports.DateService = DateService;\n//# sourceMappingURL=date.service.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EN = void 0;\nexports.EN = {\n dayNames: {\n short: [\n 'Su',\n 'Mo',\n 'Tu',\n 'We',\n 'Th',\n 'Fr',\n 'Sa',\n ],\n long: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n ],\n },\n monthNames: {\n short: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n ],\n long: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ],\n },\n};\n//# sourceMappingURL=en.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CalendarDataService = void 0;\nconst date_service_1 = require(\"./date.service\");\nconst helpers_1 = require(\"./helpers\");\nconst type_1 = require(\"../type\");\nconst DEFAULT_DATE_OPTIONS = {\n bounding: false,\n holiday: false,\n range: type_1.RangeRole.none,\n};\nclass CalendarDataService {\n dateService;\n constructor(dateService) {\n this.dateService = dateService;\n }\n createDayPickerData = (date, dateRange) => {\n const weeks = this.createDates(date, DEFAULT_DATE_OPTIONS, dateRange);\n return this.withBoundingMonths(weeks, date);\n };\n createMonthPickerData = (date, rows, columns) => {\n const yearStart = this.dateService.getYearStart(date);\n const monthRange = (0, helpers_1.range)(rows * columns, (index) => {\n const monthDate = this.dateService.addMonth(yearStart, index);\n return { date: monthDate, ...DEFAULT_DATE_OPTIONS };\n });\n return (0, helpers_1.batch)(monthRange, rows);\n };\n createYearPickerData = (date, rows, columns) => {\n const yearStart = this.dateService.getYearStart(date);\n const yearRange = (0, helpers_1.range)(rows * columns, (index) => {\n const yearDate = this.dateService.addYear(yearStart, index);\n return { date: yearDate, ...DEFAULT_DATE_OPTIONS };\n });\n return (0, helpers_1.batch)(yearRange, rows);\n };\n createDayPickerPagerData = (startDate, endDate) => {\n const numberOfDayPickers = this.getNumberOfMonths(startDate, endDate) + 1;\n return (0, helpers_1.range)(numberOfDayPickers, (index) => {\n const monthDate = this.dateService.addMonth(startDate, index);\n return { date: monthDate, ...DEFAULT_DATE_OPTIONS };\n });\n };\n createYearPickerPagerData = (startDate, endDate, rows, columns) => {\n const numberOfYears = this.getNumberOfYears(startDate, endDate) + 1;\n const numberOfYearPickers = Math.max(Math.ceil(numberOfYears / (rows * columns)), 1);\n return (0, helpers_1.range)(numberOfYearPickers, (index) => {\n const yearDate = this.dateService.addYear(startDate, index * rows * columns);\n return { date: yearDate, ...DEFAULT_DATE_OPTIONS };\n });\n };\n getNumberOfMonths = (lhs, rhs) => {\n const numberOfYears = this.getNumberOfYears(lhs, rhs);\n const numberOfMonths = this.dateService.getMonth(rhs) - this.dateService.getMonth(lhs);\n return numberOfMonths + numberOfYears * date_service_1.DateService.MONTHS_IN_YEAR;\n };\n getNumberOfYears = (lhs, rhs) => {\n return this.dateService.getYear(rhs) - this.dateService.getYear(lhs);\n };\n createDates(activeMonth, options, dateRange) {\n let days = this.createDateRangeForMonth(activeMonth, options);\n if (dateRange) {\n days = this.withRangedDates(days, dateRange);\n }\n const startOfWeekDayDiff = this.getStartOfWeekDayDiff(activeMonth);\n return (0, helpers_1.batch)(days, date_service_1.DateService.DAYS_IN_WEEK, startOfWeekDayDiff);\n }\n withRangedDates(days, calendarRange) {\n if (calendarRange.startDate && !calendarRange.endDate) {\n return this.withRangedStartDates(days, calendarRange.startDate);\n }\n if (calendarRange.startDate && calendarRange.endDate) {\n return this.withRangedStartEndDates(days, calendarRange.startDate, calendarRange.endDate);\n }\n return days;\n }\n withRangedStartDates(days, startDate) {\n return days.map((day) => {\n const isSameStartDate = this.dateService.compareDatesSafe(day.date, startDate) === 0;\n return isSameStartDate ? { ...day, range: type_1.RangeRole.start } : day;\n });\n }\n withRangedStartEndDates(days, startDate, endDate) {\n return days.map((day) => {\n const isSameStartDate = this.dateService.compareDatesSafe(day.date, startDate) === 0;\n const isSameEndDate = this.dateService.compareDatesSafe(day.date, endDate) === 0;\n const isInRange = this.dateService.isBetween(day.date, startDate, endDate);\n let rangeRole = type_1.RangeRole.none;\n if (isInRange) {\n rangeRole = type_1.RangeRole.member;\n }\n else {\n if (isSameStartDate) {\n rangeRole |= type_1.RangeRole.start;\n }\n if (isSameEndDate) {\n rangeRole |= type_1.RangeRole.end;\n }\n }\n return { ...day, range: rangeRole };\n });\n }\n withBoundingMonths(weeks, activeMonth) {\n let withBoundingMonths = weeks;\n if (this.isShouldAddPrevBoundingMonth(withBoundingMonths)) {\n withBoundingMonths = this.addPrevBoundingMonth(withBoundingMonths, activeMonth);\n }\n if (this.isShouldAddNextBoundingMonth(withBoundingMonths)) {\n withBoundingMonths = this.addNextBoundingMonth(withBoundingMonths, activeMonth);\n }\n return withBoundingMonths;\n }\n addPrevBoundingMonth(weeks, activeMonth) {\n const firstWeek = weeks.shift();\n const numberOfBoundingDates = date_service_1.DateService.DAYS_IN_WEEK - firstWeek.length;\n firstWeek.unshift(...this.createPrevBoundingDays(activeMonth, numberOfBoundingDates));\n return [firstWeek, ...weeks];\n }\n addNextBoundingMonth(weeks, activeMonth) {\n const lastWeek = weeks.pop();\n const numberOfBoundingDates = date_service_1.DateService.DAYS_IN_WEEK - lastWeek.length;\n lastWeek.push(...this.createNextBoundingDays(activeMonth, numberOfBoundingDates));\n return [...weeks, lastWeek];\n }\n createPrevBoundingDays(activeMonth, numberOfBoundingDates) {\n const month = this.dateService.addMonth(activeMonth, -1);\n const daysInMonth = this.dateService.getNumberOfDaysInMonth(month);\n return this.createDateRangeForMonth(month, DEFAULT_DATE_OPTIONS)\n .slice(daysInMonth - numberOfBoundingDates)\n .map((date) => {\n return { ...date, bounding: true };\n });\n }\n createNextBoundingDays(activeMonth, numberOfBoundingDates) {\n const month = this.dateService.addMonth(activeMonth, 1);\n return this.createDateRangeForMonth(month, DEFAULT_DATE_OPTIONS)\n .slice(0, numberOfBoundingDates)\n .map((date) => {\n return { ...date, bounding: true };\n });\n }\n getStartOfWeekDayDiff(date) {\n const startOfMonth = this.dateService.getMonthStart(date);\n return this.getWeekStartDiff(startOfMonth);\n }\n getWeekStartDiff(date) {\n return (date_service_1.DateService.DAYS_IN_WEEK -\n this.dateService.getFirstDayOfWeek() +\n this.dateService.getDayOfWeek(date)) % date_service_1.DateService.DAYS_IN_WEEK;\n }\n isShouldAddPrevBoundingMonth(weeks) {\n return weeks[0].length < date_service_1.DateService.DAYS_IN_WEEK;\n }\n isShouldAddNextBoundingMonth(weeks) {\n return weeks[weeks.length - 1].length < date_service_1.DateService.DAYS_IN_WEEK;\n }\n createDateRangeForMonth(monthDate, options) {\n const daysInMonth = this.dateService.getNumberOfDaysInMonth(monthDate);\n return (0, helpers_1.range)(daysInMonth, (i) => {\n const year = this.dateService.getYear(monthDate);\n const month = this.dateService.getMonth(monthDate);\n const date = this.dateService.createDate(year, month, i + 1);\n return { date, ...options };\n });\n }\n}\nexports.CalendarDataService = CalendarDataService;\n//# sourceMappingURL=calendarData.service.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.range = exports.batch = void 0;\nconst batch = (target, batchSize, offset = 0) => {\n return target.reduce((res, item, index) => {\n const chunkIndex = Math.floor((index + offset) / batchSize);\n if (!res[chunkIndex]) {\n res[chunkIndex] = [];\n }\n res[chunkIndex].push(item);\n return res;\n }, []);\n};\nexports.batch = batch;\n/**\n * returns array with numbers from zero to bound.\n * */\nconst range = (bound, producer = i => i) => {\n const arr = [];\n for (let i = 0; i < bound; i++) {\n arr.push(producer(i));\n }\n return arr;\n};\nexports.range = range;\n//# sourceMappingURL=helpers.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Card = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst devsupport_1 = require(\"../../devsupport\");\nconst theme_1 = require(\"../../theme\");\nconst divider_component_1 = require(\"../divider/divider.component\");\n/**\n * Cards contain content and actions about a single subject.\n *\n * @extends React.Component\n *\n * @property {ReactNode} children - Component to render within the card.\n *\n * @property {ReactElement | (ViewProps) => ReactElement} header - Function component\n * to render above the content.\n *\n * @property {ReactElement | (ViewProps) => ReactElement} footer - Function component\n * to render below the content.\n *\n * @property {ReactElement | (ViewProps) => ReactElement} accent - Function component\n * to render above the card.\n * Accents may change it's color depending on *status* property.\n *\n * @property {string} appearance - Appearance of the component.\n * Can be `filled` or `outline`.\n * Defaults to *outline*.\n *\n * @property {string} status - Status of the component.\n * Can be `basic`, `primary`, `success`, `info`, `warning`, `danger` or `control`.\n * Defaults to *basic*.\n *\n * @property {TouchableOpacityProps} ...TouchableOpacityProps - Any props applied to TouchableOpacity component.\n *\n * @overview-example CardSimpleUsage\n * In basic example, card accepts content view as child element.\n *\n * @overview-example CardAccessories\n * It also may have header and footer by configuring `header` and `footer` properties.\n *\n * @overview-example CardStatuses\n */\nlet Card = class Card extends react_1.default.Component {\n onPressIn = (event) => {\n this.props.eva.dispatch([theme_1.Interaction.ACTIVE]);\n this.props.onPressIn?.(event);\n };\n onPressOut = (event) => {\n this.props.eva.dispatch([]);\n this.props.onPressOut?.(event);\n };\n getComponentStyle = (source) => {\n const { bodyPaddingVertical, bodyPaddingHorizontal, accentHeight, accentBackgroundColor, headerPaddingVertical, headerPaddingHorizontal, footerPaddingVertical, footerPaddingHorizontal, ...containerParameters } = source;\n return {\n container: containerParameters,\n body: {\n paddingVertical: bodyPaddingVertical,\n paddingHorizontal: bodyPaddingHorizontal,\n },\n accent: {\n height: accentHeight,\n backgroundColor: accentBackgroundColor,\n },\n header: {\n paddingHorizontal: headerPaddingHorizontal,\n paddingVertical: headerPaddingVertical,\n },\n footer: {\n paddingHorizontal: footerPaddingHorizontal,\n paddingVertical: footerPaddingVertical,\n },\n };\n };\n renderStatusAccent = (evaStyle) => {\n return ();\n };\n render() {\n const { eva, style, children, accent, header, footer, ...touchableProps } = this.props;\n const evaStyle = this.getComponentStyle(eva.style);\n return (\n \n \n {header && }\n \n {children}\n \n {footer && }\n \n );\n }\n};\nCard = __decorate([\n (0, theme_1.styled)('Card')\n], Card);\nexports.Card = Card;\nconst styles = react_native_1.StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n transparent: {\n backgroundColor: 'transparent',\n },\n content: {\n flexShrink: 1,\n },\n});\n//# sourceMappingURL=card.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RangeCalendar = void 0;\nconst theme_1 = require(\"../../theme\");\nconst baseCalendar_component_1 = require(\"./baseCalendar.component\");\nconst rangeDate_service_1 = require(\"./service/rangeDate.service\");\n/**\n * Range Calendar provides a simple way to select a date range.\n *\n * Supports locales and different date objects like Moment.js or date-fns.\n * Composes date picker components in a horizontal pageable list.\n *\n * @extends React.Component\n *\n * @method {() => void} scrollToToday - Show the current date in the calendar.\n *\n * @method {(date: D) => void} scrollToDate - Show the specific date in the calendar.\n *\n * @property {CalendarRange} range - Date range which is currently selected.\n * CalendarRange `startDate?: D, endDate?: D` - Object with start and end dates for date range.\n * A range may contain only a startDate or both startDate and endDate properties meaning completeness of picked value.\n *\n * @property {D} initialVisibleDate - Specific date that should be shown on the first render of the component.\n * If it is not set, the selected date or today's date will be displayed.\n *\n * @property {(CalendarRange) => void} onSelect - Called when day cell is pressed.\n *\n * @property {D} min - Minimal date that is able to be selected.\n *\n * @property {D} max - Maximum date that is able to be selected.\n *\n * @property {DateService} dateService - Date service that is able to work with a date objects.\n * Defaults to Native Date service that works with JS Date.\n * Allows using different types of date like Moment.js or date-fns.\n * Moment.js service can be provided by installing `@ui-kitten/moment` package.\n * date-fns service can be provided by installing `@ui-kitten/date-fns` package.\n *\n * @property {boolean} boundingMonth - Defines if we should render previous and next months in the current month view.\n *\n * @property {CalendarViewMode} startView - Defines starting view for calendar.\n * Can be `CalendarViewModes.DATE`, `CalendarViewModes.MONTH` or `CalendarViewModes.YEAR`.\n * Defaults to *CalendarViewModes.DATE*.\n *\n * @property {(D, D, CalendarViewMode) => string} title - A function to transform visible date to a string displayed in\n * header for the specific view mode: first date - date picker, second date - year and month picker.\n *\n * @property {(D) => boolean} filter - A function to determine whether particular date cells should be disabled.\n *\n * @property {() => ReactElement} renderFooter - Function component\n * to render below the calendar.\n *\n * @property {(D, NamedStyles) => ReactElement} renderDay - Function component\n * to render instead of default day cell.\n * Called with a date for this cell and styles provided by Eva.\n *\n * @property {(D, NamedStyles) => ReactElement} renderMonth - Function component\n * to render instead of default month cell.\n * Called with a date for this cell and styles provided by Eva.\n *\n * @property {(D, NamedStyles) => ReactElement} renderYear - Function component\n * to render instead of default year cell.\n * Called with a date for this cell and styles provided by Eva.\n *\n * @property {ComponentType | null} renderArrowLeft - Custom component which will be used\n * to render left arrow inside header instead of default one. Custom component must invoke onPress method from\n * props to keep calendar navigation functionality.\n *\n * @property {ComponentType | null} renderArrowRight - Custom component which will be used\n * to render right arrow inside header instead of default one. Custom component must invoke onPress method from\n * props to keep calendar navigation functionality.\n *\n * @property {(D, CalendarViewMode) => void} onVisibleDateChange - Called when navigating to the previous or next\n * month / year.\n * viewMode returns string with current calendar view (\"YEAR\", \"MONTH\", \"DATE\").\n *\n * @property {ViewProps} ...ViewProps - Any props applied to View component.\n *\n * @overview-example RangeCalendarSimpleUsage\n *\n * @overview-example RangeCalendarType\n * Ranged calendar works with special range object - CalendarRange.\n * For empty ranges, range has no date properties.\n * And for incomplete ranges, there is only a `startDate` property.\n * ```\n * export interface CalendarRange {\n * startDate?: D;\n * endDate?: D;\n * }\n * ```\n */\nlet RangeCalendar = class RangeCalendar extends baseCalendar_component_1.BaseCalendarComponent {\n static defaultProps = {\n ...baseCalendar_component_1.BaseCalendarComponent.defaultProps,\n range: {},\n };\n rangeDateService = new rangeDate_service_1.RangeDateService(this.dateService);\n constructor(props) {\n super(props);\n this.createDates = this.createDates.bind(this);\n this.selectedDate = this.selectedDate.bind(this);\n this.onDateSelect = this.onDateSelect.bind(this);\n this.isDateSelected = this.isDateSelected.bind(this);\n this.shouldUpdateDate = this.shouldUpdateDate.bind(this);\n }\n // BaseCalendarComponent\n createDates(date) {\n return this.dataService.createDayPickerData(date, this.props.range);\n }\n selectedDate() {\n return this.props.range?.startDate;\n }\n onDateSelect(date) {\n if (this.props.onSelect) {\n const range = this.rangeDateService.createRange(this.props.range, date);\n this.props.onSelect(range);\n }\n }\n isDateSelected() {\n return false;\n }\n shouldUpdateDate(props, nextProps) {\n const dateChanged = this.dateService.compareDatesSafe(props.date.date, nextProps.date.date) !== 0;\n if (dateChanged) {\n return true;\n }\n const selectionChanged = props.selected !== nextProps.selected;\n const disablingChanged = props.disabled !== nextProps.disabled;\n const rangeChanged = props.range !== nextProps.range;\n const rangeStartPlaceChanged = props.firstRangeItem !== nextProps.firstRangeItem;\n const rangeEndPlaceChanged = props.lastRangeItem !== nextProps.lastRangeItem;\n const shouldUpdate = selectionChanged ||\n disablingChanged ||\n rangeChanged ||\n rangeStartPlaceChanged ||\n rangeEndPlaceChanged;\n if (shouldUpdate) {\n return true;\n }\n return props.eva.theme !== nextProps.eva.theme;\n }\n};\nRangeCalendar = __decorate([\n (0, theme_1.styled)('Calendar')\n], RangeCalendar);\nexports.RangeCalendar = RangeCalendar;\n//# sourceMappingURL=rangeCalendar.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RangeDateService = void 0;\nclass RangeDateService {\n dateService;\n constructor(dateService) {\n this.dateService = dateService;\n }\n createRange(range, date) {\n switch (true) {\n case (!range.startDate && !range.endDate):\n return { startDate: date, endDate: null };\n case (range.startDate && !range.endDate):\n return this.createRangeForStart(range, date);\n case (range.startDate !== null && range.endDate !== null):\n return this.createRangeForStartEnd(date);\n default:\n return range;\n }\n }\n createRangeForStart(range, date) {\n if (this.dateService.compareDatesSafe(date, range.startDate) === -1) {\n // startDate < date\n return { startDate: date, endDate: range.startDate };\n }\n else {\n // startDate >= date\n return { startDate: range.startDate ?? date, endDate: date };\n }\n }\n createRangeForStartEnd(date) {\n return { startDate: date, endDate: null };\n }\n}\nexports.RangeDateService = RangeDateService;\n//# sourceMappingURL=rangeDate.service.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CheckBox = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst devsupport_1 = require(\"../../devsupport\");\nconst theme_1 = require(\"../../theme\");\nconst checkmark_component_1 = require(\"../shared/checkmark.component\");\nconst minus_component_1 = require(\"../shared/minus.component\");\n/**\n * Checkboxes allow the user to select one or more items from a set.\n *\n * @extends React.Component\n *\n * @property {boolean} checked - Whether component is checked.\n * Defaults to *false*.\n *\n * @property {(checked: boolean, indeterminate: boolean) => void} onChange - Called when checkbox\n * should switch it's value.\n * Called with *checked* and *indeterminate* values.\n * If *indeterminate* was provided, it should be changed to the value passed in this function.\n *\n * @property {boolean} indeterminate - Whether checked status is indeterminate.\n * Will set indeterminate to false when the checked property is changed.\n * Defaults to *false*.\n *\n * @property {ReactText | ReactElement | (TextProps) => ReactElement} children - String, number or a function component\n * to render near the checkbox.\n * If it is a function, expected to return a Text.\n *\n * @property {string} status - Status of the component.\n * Can be `basic`, `primary`, `success`, `info`, `warning`, `danger` or `control`.\n * Defaults to *basic*.\n * Use *control* status when needed to display within a contrast container.\n *\n * @property {TouchableOpacityProps} ...TouchableOpacityProps - Any props applied to TouchableOpacity component.\n *\n * @overview-example CheckboxSimpleUsage\n *\n * @overview-example CheckboxStates\n * CheckBoxes can be checked or disabled.\n *\n * @overview-example CheckboxIndeterminate\n * An extra state is `indeterminate`, which may be useful for grouping inner checkboxes.\n * Indeterminate will be set to `false` when the checked state is changed.\n *\n * @overview-example CheckboxStatus\n * Checkboxes may also be marked with `status` property, which is useful within forms validation.\n * An extra status is `control`, which is designed to be used on high-contrast backgrounds.\n *\n * @overview-example CheckboxStyling\n * CheckBox and it's inner views can be styled by passing them as function components.\n * ```\n * import { CheckBox, Text } from '@ui-kitten/components';\n *\n * \n * {evaProps => Place your Text}\n * \n * ```\n *\n * @overview-example CheckboxTheming\n * In most cases this is redundant, if [custom theme is configured](guides/branding).\n */\nlet CheckBox = class CheckBox extends react_1.default.Component {\n onMouseEnter = (event) => {\n this.props.eva.dispatch([theme_1.Interaction.HOVER]);\n this.props.onMouseEnter?.(event);\n };\n onMouseLeave = (event) => {\n this.props.eva.dispatch([]);\n this.props.onMouseLeave?.(event);\n };\n onFocus = (event) => {\n this.props.eva.dispatch([theme_1.Interaction.FOCUSED]);\n this.props.onFocus?.(event);\n };\n onBlur = (event) => {\n this.props.eva.dispatch([]);\n this.props.onBlur?.(event);\n };\n onPress = () => {\n this.props.eva.dispatch([]);\n this.props.onChange?.(!this.props.checked, false);\n };\n onPressIn = (event) => {\n this.props.eva.dispatch([theme_1.Interaction.ACTIVE]);\n this.props.onPressIn?.(event);\n };\n onPressOut = (event) => {\n this.props.eva.dispatch([]);\n this.props.onPressOut?.(event);\n };\n getComponentStyle = (source) => {\n const { textMarginHorizontal, textFontFamily, textFontSize, textFontWeight, textColor, iconWidth, iconHeight, iconBorderRadius, iconTintColor, outlineWidth, outlineHeight, outlineBorderRadius, outlineBackgroundColor, ...containerParameters } = source;\n return {\n selectContainer: containerParameters,\n text: {\n marginHorizontal: textMarginHorizontal,\n fontFamily: textFontFamily,\n fontSize: textFontSize,\n fontWeight: textFontWeight,\n color: textColor,\n },\n icon: {\n width: iconWidth,\n height: iconHeight,\n fill: iconTintColor,\n stroke: iconTintColor,\n strokeWidth: 3,\n },\n highlight: {\n width: outlineWidth,\n height: outlineHeight,\n borderRadius: outlineBorderRadius,\n backgroundColor: outlineBackgroundColor,\n },\n };\n };\n renderIconElement = (style) => {\n const Icon = this.props.indeterminate ? minus_component_1.Minus : checkmark_component_1.CheckMark;\n return ();\n };\n render() {\n const { eva, style, disabled, children, ...touchableProps } = this.props;\n const evaStyle = this.getComponentStyle(eva.style);\n return (\n \n \n \n {this.renderIconElement(evaStyle.icon)}\n \n \n \n );\n }\n};\nCheckBox = __decorate([\n (0, theme_1.styled)('CheckBox')\n], CheckBox);\nexports.CheckBox = CheckBox;\nconst styles = react_native_1.StyleSheet.create({\n container: {\n flexDirection: 'row',\n alignItems: 'center',\n },\n highlightContainer: {\n justifyContent: 'center',\n alignItems: 'center',\n },\n selectContainer: {\n justifyContent: 'center',\n alignItems: 'center',\n },\n highlight: {\n position: 'absolute',\n },\n});\n//# sourceMappingURL=checkbox.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CheckMark = void 0;\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_svg_1 = require(\"react-native-svg\");\nclass CheckMark extends react_1.default.Component {\n render() {\n return (\n \n \n \n \n \n \n );\n }\n}\nexports.CheckMark = CheckMark;\n//# sourceMappingURL=checkmark.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Minus = void 0;\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_svg_1 = require(\"react-native-svg\");\nclass Minus extends react_1.default.Component {\n render() {\n return (\n \n \n \n \n \n \n );\n }\n}\nexports.Minus = Minus;\n//# sourceMappingURL=minus.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Datepicker = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst theme_1 = require(\"../../theme\");\nconst baseDatepicker_component_1 = require(\"./baseDatepicker.component\");\nconst calendar_component_1 = require(\"../calendar/calendar.component\");\n/**\n * Date picker provides a simple way to select a date within a picker displayed in modal.\n *\n * @extends React.Component\n *\n * @method {() => void} focus - Focuses Datepicker and sets it visible.\n *\n * @method {() => void} blur - Removes focus from Datepicker and sets it invisible.\n *\n * @method {() => boolean} isFocused - Returns true if the Datepicker is currently focused and visible.\n *\n * @method {() => void} clear - Removes all text from the Datepicker.\n *\n * @method {() => void} scrollToToday - Show the current date in the picker, the picker should be visible.\n *\n * @method {(date: D) => void} scrollToDate - Show the specific date in the picker, the picker should be visible.\n *\n * @property {D} date - Date which is currently selected.\n * Defaults to current date.\n *\n * @property {D} initialVisibleDate - Specific date that should be shown on load.\n * If it is not set, the selected date or today's date will be displayed.\n * Clear initialVisibleDate to stop showing it when the datepicker is opened.\n *\n * @property {(D) => void} onSelect - Called when date cell is pressed.\n *\n * @property {boolean} autoDismiss - Will hide the calendar when date cell is pressed.\n * Defaults to *true*.\n *\n * @property {D} min - Minimal date that is able to be selected.\n *\n * @property {D} max - Maximum date that is able to be selected.\n *\n * @property {DateService} dateService - Date service that is able to work with a date objects.\n * Defaults to Native Date service that works with JS Date.\n * Allows using different types of date like Moment.js or date-fns.\n * Moment.js service can be provided by installing `@ui-kitten/moment` package.\n * date-fns service can be provided by installing `@ui-kitten/date-fns` package.\n *\n * @property {boolean} boundingMonth - Defines if previous and next months should be rendered in the current month view.\n *\n * @property {(D, NamedStyles) => ReactElement} renderDay - Function component\n * to render instead of default day cell.\n * Called with a date for this cell and styles provided by Eva.\n *\n * @property {(D, NamedStyles) => ReactElement} renderMonth - Function component\n * to render instead of default month cell.\n * Called with a date for this cell and styles provided by Eva.\n *\n * @property {(D, NamedStyles) => ReactElement} renderYear - Function component\n * to render instead of default year cell.\n * Called with a date for this cell and styles provided by Eva.\n *\n * @property {CalendarViewMode} startView - Defines starting view for calendar.\n * Can be `CalendarViewModes.DATE`, `CalendarViewModes.MONTH` or `CalendarViewModes.YEAR`.\n * Defaults to *CalendarViewModes.DATE*.\n *\n * @property {(D, D, CalendarViewMode) => string} title - A function to transform visible date to a string displayed in\n * header for the specific view mode: first date - date picker, second date - year and month picker.\n *\n * @property {(date: D) => boolean} filter - A function to determine whether particular date cells should be disabled.\n *\n * @property {string} status - Status of the component.\n * Can be `basic`, `primary`, `success`, `info`, `warning`, `danger` or `control`.\n * Defaults to *basic*.\n * Useful for giving user a hint on the input validity.\n * Use *control* status when needed to display within a contrast container.\n *\n * @property {string} size - Size of the component.\n * Can be `small`, `medium` or `large`.\n * Defaults to *medium*.\n *\n * @property {ReactText | ReactElement | (TextProps) => ReactElement} placeholder - String, number or a function\n * component to render when input field is empty.\n * If it is a function, expected to return a Text.\n *\n * @property {ReactText | ReactElement | (TextProps) => ReactElement} label - String, number or a function component\n * to render to top of the input field.\n * If it is a function, expected to return a Text.\n *\n * @property {ReactElement | (ImageProps) => ReactElement} accessoryLeft - Function component\n * to render to start of the text.\n * Expected to return an Image.\n *\n * @property {ReactElement | (ImageProps) => ReactElement} accessoryRight - Function component\n * to render to end of the text.\n * Expected to return an Image.\n *\n * @property {ReactText | ReactElement | (TextProps) => ReactElement} caption - Function component to render below\n * Input view.\n * Expected to return View.\n *\n * @property {() => void} onFocus - Called when picker becomes visible.\n *\n * @property {() => void} onBlur - Called when picker becomes invisible.\n *\n * @property {string | PopoverPlacement} placement - Position of the picker relative to the input field.\n * Can be `left`, `top`, `right`, `bottom`, `left start`, `left end`, `top start`, `top end`, `right start`,\n * `right end`, `bottom start` or `bottom end`.\n * Defaults to *bottom*.\n *\n * @property {StyleProp} backdropStyle - Style of backdrop.\n *\n * @property {ComponentType | null} renderArrowLeft - Custom component which will be used\n * to render left arrow inside header instead of default one. Custom component must invoke onPress method from\n * props to keep calendar navigation functionality.\n *\n * @property {ComponentType | null} renderArrowRight - Custom component which will be used\n * to render right arrow inside header instead of default one. Custom component must invoke onPress method from\n * props to keep calendar navigation functionality.\n *\n * @property {(D, CalendarViewMode) => void} onVisibleDateChange - Called when navigating to the previous\n * or next month / year. viewMode returns string with current calendar view (\"YEAR\", \"MONTH\", \"DATE\").\n *\n * @property {TouchableOpacityProps} ...TouchableOpacityProps - Any props applied to TouchableOpacity component.\n *\n * @overview-example DatepickerSimpleUsage\n * Both range and date pickers support all parameters as calendar, so, check Calendar API for additional info.\n *\n * @overview-example DatepickerAccessories\n * Pickers may contain labels, captions and inner views by configuring `accessoryLeft` or `accessoryRight` properties.\n * Within Eva, Datepicker accessories are expected to be images or [svg icons](guides/icon-packages).\n *\n * @overview-example DatepickerInitialVisibleDate\n * Calendar can show specified date on render.\n * Also, it is possible to use scrollToToday and scrollToDate to show specific dates.\n *\n * @overview-example DatepickerFilters\n * Picker may accept minimal and maximum dates, filter functions, and `boundingMonth` property,\n * which disables displaying previous month dates at the current date view.\n *\n * @overview-example DatepickerLocaleSettings\n * Also, it is possible to setup locale by configuring Date Service.\n *\n * @overview-example DatepickerStatus\n * Datepicker may be marked with `status` property, which is useful within forms validation.\n * An extra status is `control`, which is designed to be used on high-contrast backgrounds.\n *\n * @overview-example DatepickerSize\n * To resize Datepicker, a `size` property may be used.\n *\n * @overview-example DatepickerMoment\n * Datepicker is able to work with Moment, by configuring date service.\n * In order to use Moment, `@ui-kitten/moment` package is required.\n *\n * @overview-example DatepickerCustomDay\n * To render custom cells, `renderDay`, `renderMonth` and `renderYear` properties may be used.\n *\n * @overview-example DatepickerStyling\n * Datepicker and it's inner views can be styled by passing them as function components.\n * ```\n * import { Datepicker, Text } '@ui-kitten/components';\n *\n * Label}\n * caption={evaProps => Caption}\n * />\n * ```\n *\n * @overview-example DatepickerTheming\n * In most cases this is redundant, if [custom theme is configured](guides/branding).\n */\nlet Datepicker = class Datepicker extends baseDatepicker_component_1.BaseDatepickerComponent {\n static defaultProps = {\n ...baseDatepicker_component_1.BaseDatepickerComponent.defaultProps,\n autoDismiss: true,\n };\n constructor(props) {\n super(props);\n this.clear = this.clear.bind(this);\n }\n get calendarProps() {\n return {\n min: this.props.min,\n max: this.props.max,\n date: this.props.date,\n initialVisibleDate: this.props.initialVisibleDate,\n dateService: this.props.dateService,\n boundingMonth: this.props.boundingMonth,\n startView: this.props.startView,\n filter: this.props.filter,\n title: this.props.title,\n onSelect: this.props.onSelect,\n renderDay: this.props.renderDay,\n renderMonth: this.props.renderMonth,\n renderYear: this.props.renderYear,\n renderFooter: this.props.renderFooter,\n renderArrowRight: this.props.renderArrowRight,\n renderArrowLeft: this.props.renderArrowLeft,\n onVisibleDateChange: this.props.onVisibleDateChange,\n };\n }\n clear = () => {\n if (this.props.onSelect) {\n this.props.onSelect(null);\n }\n };\n // BaseDatepickerComponent\n getComponentTitle() {\n if (this.props.date) {\n return this.props.dateService.format(this.props.date, null);\n }\n else {\n return this.props.placeholder;\n }\n }\n onSelect = (date) => {\n this.props.onSelect?.(date);\n this.props.autoDismiss && this.blur();\n };\n renderCalendar() {\n return ();\n }\n};\nDatepicker = __decorate([\n (0, theme_1.styled)('Datepicker')\n], Datepicker);\nexports.Datepicker = Datepicker;\n//# sourceMappingURL=datepicker.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BaseDatepickerComponent = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst devsupport_1 = require(\"../../devsupport\");\nconst theme_1 = require(\"../../theme\");\nconst nativeDate_service_1 = require(\"../calendar/service/nativeDate.service\");\nconst popover_component_1 = require(\"../popover/popover.component\");\nconst type_1 = require(\"../popover/type\");\nclass BaseDatepickerComponent extends react_1.default.Component {\n static defaultProps = {\n dateService: new nativeDate_service_1.NativeDateService(),\n placeholder: 'dd/mm/yyyy',\n placement: type_1.PopoverPlacements.BOTTOM_START,\n };\n state = {\n visible: false,\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n calendarRef = react_1.default.createRef();\n scrollToToday = () => {\n this.calendarRef.current?.scrollToToday();\n };\n scrollToDate = (date) => {\n this.calendarRef.current?.scrollToDate(date);\n };\n focus = () => {\n this.setState({ visible: true }, this.onPickerVisible);\n };\n blur = () => {\n this.setState({ visible: false }, this.onPickerInvisible);\n };\n isFocused = () => {\n return this.state.visible;\n };\n getComponentStyle = (style) => {\n const { textMarginHorizontal, textFontFamily, textFontSize, textFontWeight, textColor, placeholderColor, iconWidth, iconHeight, iconMarginHorizontal, iconTintColor, labelColor, labelFontSize, labelMarginBottom, labelFontWeight, labelFontFamily, captionMarginTop, captionColor, captionFontSize, captionFontWeight, captionFontFamily, popoverWidth, ...controlParameters } = style;\n return {\n control: controlParameters,\n text: {\n marginHorizontal: textMarginHorizontal,\n fontFamily: textFontFamily,\n fontSize: textFontSize,\n fontWeight: textFontWeight,\n color: textColor,\n },\n placeholder: {\n marginHorizontal: textMarginHorizontal,\n color: placeholderColor,\n },\n icon: {\n width: iconWidth,\n height: iconHeight,\n marginHorizontal: iconMarginHorizontal,\n tintColor: iconTintColor,\n },\n label: {\n color: labelColor,\n fontSize: labelFontSize,\n fontFamily: labelFontFamily,\n marginBottom: labelMarginBottom,\n fontWeight: labelFontWeight,\n },\n captionLabel: {\n fontSize: captionFontSize,\n fontWeight: captionFontWeight,\n fontFamily: captionFontFamily,\n color: captionColor,\n },\n popover: {\n width: popoverWidth,\n marginBottom: captionMarginTop,\n },\n };\n };\n onPress = (event) => {\n this.setPickerVisible();\n this.props.onPress?.(event);\n };\n onPressIn = (event) => {\n this.props.eva.dispatch([theme_1.Interaction.ACTIVE]);\n this.props.onPressIn?.(event);\n };\n onPressOut = (event) => {\n this.props.eva.dispatch([]);\n this.props.onPressOut?.(event);\n };\n onPickerVisible = () => {\n this.props.eva.dispatch([theme_1.Interaction.ACTIVE]);\n this.props.onFocus?.();\n };\n onPickerInvisible = () => {\n this.props.eva.dispatch([]);\n this.props.onBlur?.();\n };\n setPickerVisible = () => {\n this.setState({ visible: true }, this.onPickerVisible);\n };\n setPickerInvisible = () => {\n this.setState({ visible: false }, this.onPickerInvisible);\n };\n renderInputElement = (props, evaStyle) => {\n return (\n \n \n \n );\n };\n render() {\n const { eva, style, testID, backdropStyle, controlStyle, placement, label, accessoryLeft, accessoryRight, caption, ...touchableProps } = this.props;\n const evaStyle = this.getComponentStyle(eva.style);\n return (\n \n this.renderInputElement(touchableProps, evaStyle)} onBackdropPress={this.setPickerInvisible}>\n {this.renderCalendar()}\n \n \n );\n }\n}\nexports.BaseDatepickerComponent = BaseDatepickerComponent;\nconst styles = react_native_1.StyleSheet.create({\n popover: {\n borderWidth: 0,\n },\n control: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n label: {\n textAlign: 'left',\n },\n captionLabel: {\n textAlign: 'left',\n },\n});\n//# sourceMappingURL=baseDatepicker.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RangeDatepicker = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst theme_1 = require(\"../../theme\");\nconst baseDatepicker_component_1 = require(\"./baseDatepicker.component\");\nconst rangeCalendar_component_1 = require(\"../calendar/rangeCalendar.component\");\n/**\n * Range date picker provides a simple way to select a date range within a picker displayed in modal.\n *\n * @method {() => void} focus - Focuses Datepicker and sets it visible.\n *\n * @method {() => void} blur - Removes focus from Datepicker and sets it invisible.\n *\n * @method {() => boolean} isFocused - Returns true if the Datepicker is currently focused and visible.\n *\n * @method {() => void} clear - Removes all text from the Datepicker.\n *\n * @method {() => void} scrollToToday - Show the current date in the picker, the picker should be visible.\n *\n * @method {(date: D) => void} scrollToDate - Show the specific date in the picker, the picker should be visible.\n *\n * @property {CalendarRange} range - Date range which is currently selected.\n * CalendarRange `startDate?: D, endDate?: D` - Object with start and end dates for date range.\n * A range may contain only a startDate or both startDate and endDate properties meaning completeness of picked value.\n *\n * @property {D} initialVisibleDate - Specific date that should be shown on load.\n * If it is not set, the selected date or today's date will be displayed.\n * Clear initialVisibleDate to stop showing it when the datepicker is opened.\n *\n * @property {(CalendarRange) => void} onSelect - Called when day cell is pressed.\n *\n * @property {D} min - Minimal date that is able to be selected.\n *\n * @property {D} max - Maximum date that is able to be selected.\n *\n * @property {DateService} dateService - Date service that is able to work with a date objects.\n * Defaults to Native Date service that works with JS Date.\n * Allows using different types of date like Moment.js or date-fns.\n * Moment.js service can be provided by installing `@ui-kitten/moment` package.\n * date-fns service can be provided by installing `@ui-kitten/date-fns` package.\n *\n * @property {boolean} boundingMonth - Whether previous and next months in the current month view should be rendered.\n *\n * @property {D, NamedStyles) => ReactElement} renderDay - Function component\n * to render instead of default day cell.\n * Called with a date for this cell and styles provided by Eva.\n *\n * @property {(D, NamedStyles) => ReactElement} renderMonth - Function component\n * to render instead of default month cell.\n * Called with a date for this cell and styles provided by Eva.\n *\n * @property {(D, NamedStyles) => ReactElement} renderYear - Function component\n * to render instead of default year cell.\n * Called with a date for this cell and styles provided by Eva.\n *\n * @property {CalendarViewMode} startView - Defines starting view for calendar.\n * Can be `CalendarViewModes.DATE`, `CalendarViewModes.MONTH` or `CalendarViewModes.YEAR`.\n * Defaults to *CalendarViewModes.DATE*.\n *\n * @property {(D, D, CalendarViewMode) => string} title - A function to transform visible date to a string displayed\n * in header for the specific view mode: first date - date picker, second date - year and month picker.\n *\n * @property {(D) => boolean} filter - A function to determine whether particular date cells should be disabled.\n *\n * @property {string} status - Status of the component.\n * Can be `basic`, `primary`, `success`, `info`, `warning`, `danger` or `control`.\n * Defaults to *basic*.\n * Useful for giving user a hint on the input validity.\n * Use *control* status when needed to display within a contrast container.\n *\n * @property {string} size - Size of the component.\n * Can be `small`, `medium` or `large`.\n * Defaults to *medium*.\n *\n * @property {ReactText | ReactElement | (TextProps) => ReactElement} placeholder - String, number or a function\n * component to render when input field is empty.\n * If it is a function, expected to return a Text.\n *\n * @property {ReactText | ReactElement | (TextProps) => ReactElement} label - String, number or a function component\n * to render to top of the input field.\n * If it is a function, expected to return a Text.\n *\n * @property {ReactElement | (ImageProps) => ReactElement} accessoryLeft - Function component\n * to render to start of the text.\n * Expected to return an Image.\n *\n * @property {ReactElement | (ImageProps) => ReactElement} accessoryRight - Function component\n * to render to end of the text.\n * Expected to return an Image.\n *\n * @property {ReactElement | ReactText | (TextProps) => ReactElement} caption - Function component to render below\n * Input view.\n * Expected to return View.\n *\n * @property {() => void} onFocus - Called when picker becomes visible.\n *\n * @property {() => void} onBlur - Called when picker becomes invisible.\n *\n * @property {string | PopoverPlacement} placement - Position of the picker relative to the input field.\n * Can be `left`, `top`, `right`, `bottom`, `left start`, `left end`, `top start`, `top end`, `right start`,\n * `right end`, `bottom start` or `bottom end`.\n * Defaults to *bottom*.\n *\n * @property {StyleProp} backdropStyle - Style of backdrop.\n *\n * @property {ComponentType | null} renderArrowLeft - Custom component which will be used\n * to render left arrow inside header instead of default one. Custom component must invoke onPress method from\n * props to keep calendar navigation functionality.\n *\n * @property {ComponentType | null} renderArrowRight - Custom component which will be used\n * to render right arrow inside header instead of default one. Custom component must invoke onPress method from\n * props to keep calendar navigation functionality.\n *\n * @property {(D, CalendarViewMode) => void} onVisibleDateChange - Called when navigating to the previous or next\n * month / year. viewMode returns string with current calendar view (\"YEAR\", \"MONTH\", \"DATE\").\n *\n * @property {TouchableOpacityProps} ...TouchableOpacityProps - Any props applied to TouchableOpacity component.\n *\n * @overview-example RangeDatepickerSimpleUsage\n * Ranged picker works with special range object - CalendarRange: `{ startDate: Date, endDate: Date }`.\n * For incomplete ranges, there is only a `startDate` property.\n */\nlet RangeDatepicker = class RangeDatepicker extends baseDatepicker_component_1.BaseDatepickerComponent {\n static styledComponentName = 'Datepicker';\n constructor(props) {\n super(props);\n this.clear = this.clear.bind(this);\n }\n get calendarProps() {\n return {\n min: this.props.min,\n max: this.props.max,\n range: this.props.range,\n initialVisibleDate: this.props.initialVisibleDate,\n dateService: this.props.dateService,\n boundingMonth: this.props.boundingMonth,\n startView: this.props.startView,\n filter: this.props.filter,\n title: this.props.title,\n onSelect: this.props.onSelect,\n renderDay: this.props.renderDay,\n renderMonth: this.props.renderMonth,\n renderYear: this.props.renderYear,\n renderFooter: this.props.renderFooter,\n renderArrowRight: this.props.renderArrowRight,\n renderArrowLeft: this.props.renderArrowLeft,\n onVisibleDateChange: this.props.onVisibleDateChange,\n };\n }\n clear = () => {\n this.props.onSelect?.({});\n };\n // BaseDatepickerComponent\n getComponentTitle() {\n const { startDate, endDate } = this.props.range;\n if (startDate || endDate) {\n const start = startDate ? this.props.dateService.format(startDate, null) : '';\n const end = endDate ? this.props.dateService.format(endDate, null) : '';\n return `${start} - ${end}`;\n }\n else {\n return this.props.placeholder;\n }\n }\n renderCalendar() {\n return ();\n }\n};\nRangeDatepicker = __decorate([\n (0, theme_1.styled)('Datepicker')\n], RangeDatepicker);\nexports.RangeDatepicker = RangeDatepicker;\n//# sourceMappingURL=rangeDatepicker.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Drawer = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst devsupport_1 = require(\"../../devsupport\");\nconst theme_1 = require(\"../../theme\");\nconst menu_component_1 = require(\"../menu/menu.component\");\n/**\n * Navigation panel which slides from the side of the screen.\n * Drawer should contain DrawerItem or DrawerGroup components to provide a useful component.\n *\n * @extends React.Component\n *\n * @property {ReactElement | ReactElement[]} children -\n * items to be rendered within drawer.\n *\n * @property {ReactElement | (ViewProps) => ReactElement} header - Function component\n * to render above the content.\n *\n * @property {ReactElement | (ViewProps) => ReactElement} footer - Function component\n * to render below the content.\n *\n * @property {IndexPath} selectedIndex - Index of selected item.\n * IndexPath `row: number, section?: number` - position of element in sectioned list.\n * Drawer becomes sectioned when DrawerGroup is rendered within children.\n * Updating this property is not required if marking items selected is not needed.\n *\n * @property {(IndexPath | IndexPath[]) => void} onSelect - Called when item is pressed.\n * Called with `row: number` for non-grouped items.\n * Called with `row: number, section: number` for items rendered within group,\n * where row - index of item in group, section - index of group in list.\n *\n * @property {string} appearance - Appearance of the component.\n * Can be `default` or `noDivider`.\n *\n * @property {ListProps} ...ListProps - Any props applied to List component,\n * excluding `renderItem` and `data`.\n *\n * @overview-example DrawerSimpleUsage\n *\n * @overview-example DrawerIndexType\n * Drawer works with special index object - IndexPath.\n * For non-grouped items in drawer, there is only a `row` property.\n * Otherwise, `row` is an index of option within the group, section - index of group in drawer.\n * ```\n * interface IndexPath {\n * row: number;\n * section?: number;\n * }\n * ```\n *\n * @overview-example Using with React Navigation\n * Drawer can also be [configured with React Navigation](guides/configure-navigation)\n * to provide a navigational component.\n *\n * ```\n * import React from 'react';\n * import { NavigationContainer } from '@react-navigation/native';\n * import { createDrawerNavigator } from '@react-navigation/drawer';\n * import { Drawer, DrawerItem, Layout, Text, IndexPath } from '@ui-kitten/components';\n *\n * const { Navigator, Screen } = createDrawerNavigator();\n *\n * const UsersScreen = () => (\n * \n * USERS\n * \n * );\n *\n * const OrdersScreen = () => (\n * \n * ORDERS\n * \n * );\n *\n * const DrawerContent = ({ navigation, state }) => (\n * navigation.navigate(state.routeNames[index.row])}>\n * \n * \n * \n * );\n *\n * export const DrawerNavigator = () => (\n * }>\n * \n * \n * \n * );\n *\n * export const AppNavigator = () => (\n * \n * \n * \n * );\n * ```\n *\n * @overview-example DrawerNoMarkers\n * Pressing of drawer items can be handled without marking items.\n *\n * @overview-example DrawerAccessories\n * Drawer may be configured with header and footer,\n * and items may contain inner views configured with `accessoryLeft` and `accessoryRight` properties.\n * Within Eva, item accessories are expected to be images or [svg icons](guides/icon-packages).\n *\n * @overview-example DrawerGroups\n * And be grouped within `DrawerGroup` component.\n *\n * @overview-example DrawerStyling\n * Drawer and it's inner views can be styled by passing them as function components.\n * ```\n * import { DrawerItem, Text } from '@ui-kitten/components';\n *\n * USERS}>\n * \n * ```\n *\n * @overview-example DrawerTheming\n * In most cases this is redundant, if [custom theme is configured](guides/branding).\n */\nlet Drawer = class Drawer extends react_1.default.Component {\n getComponentStyle = (source) => {\n const { headerPaddingHorizontal, headerPaddingVertical, footerPaddingHorizontal, footerPaddingVertical, ...containerParameters } = source;\n return {\n container: containerParameters,\n header: {\n paddingHorizontal: headerPaddingHorizontal,\n paddingVertical: headerPaddingVertical,\n },\n footer: {\n paddingHorizontal: footerPaddingHorizontal,\n paddingVertical: footerPaddingVertical,\n },\n };\n };\n render() {\n const { eva, style, header, footer, ...menuProps } = this.props;\n const evaStyle = this.getComponentStyle(eva.style);\n return (<>\n \n \n \n );\n }\n};\nDrawer = __decorate([\n (0, theme_1.styled)('Drawer')\n], Drawer);\nexports.Drawer = Drawer;\n//# sourceMappingURL=drawer.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Menu = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst theme_1 = require(\"../../theme\");\nconst divider_component_1 = require(\"../divider/divider.component\");\nconst list_component_1 = require(\"../list/list.component\");\nconst menu_service_1 = require(\"./menu.service\");\n/**\n * A versatile menu for navigation.\n * Menu should contain MenuItem or MenuGroup components to provide a useful component.\n *\n * @extends React.Component\n *\n * @property {string} appearance - Appearance of the component.\n * Can be `default` or `noDivider`.\n *\n * @property {ReactElement | ReactElement[]} children -\n * Items to be rendered within menu.\n *\n * @property {IndexPath} selectedIndex - Index of selected item.\n * IndexPath `row: number, section?: number` - position of element in sectioned list.\n * Menu becomes sectioned when MenuGroup is rendered within children.\n * Updating this property is not required if marking items selected is not needed.\n *\n * @property {(IndexPath) => void} onSelect - Called when item is pressed.\n * Called with `row: number` for non-grouped items.\n * Called with `row: number, section: number` for items rendered within group,\n * where row - index of item in group, section - index of group in list.\n *\n * @property {ListProps} ...ListProps - Any props applied to List component,\n * excluding `renderItem` and `data`.\n *\n * @overview-example MenuSimpleUsage\n *\n * @overview-example MenuIndexType\n * Menu works with special index object - IndexPath.\n * For non-grouped items in menu, there is only a `row` property.\n * Otherwise, `row` is an index of option within the group, section - index of group in menu.\n * ```\n * interface IndexPath {\n * row: number;\n * section?: number;\n * }\n * ```\n *\n * @overview-example MenuNoMarkers\n * Pressing of menu items can be handled without marking items.\n *\n * @overview-example MenuAccessories\n * Items may contain inner views configured with `accessoryLeft` and `accessoryRight` properties.\n * Within Eva, item accessories are expected to be images or [svg icons](guides/icon-packages).\n *\n * @overview-example MenuGroups\n * And be grouped within `MenuGroup` component.\n *\n * @overview-example MenuDisabledOptions\n * Also, it may be disabled with `disabled` property.\n *\n * @overview-example MenuStyling\n * Menu and it's inner views can be styled by passing them as function components.\n * ```\n * import { MenuItem, Text } from '@ui-kitten/components';\n *\n * USERS}>\n * \n * ```\n *\n * @overview-example MenuTheming\n * In most cases this is redundant, if [custom theme is configured](guides/branding).\n *\n */\nlet Menu = class Menu extends react_1.default.Component {\n service = new menu_service_1.MenuService();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n get data() {\n return react_1.default.Children.toArray(this.props.children || []);\n }\n get shouldRenderDividers() {\n return this.props.appearance !== 'noDivider';\n }\n clear = () => {\n this.props.onSelect?.(null);\n };\n onItemPress = (descriptor) => {\n this.props.onSelect?.(descriptor.index);\n };\n isItemSelected = (descriptor) => {\n return descriptor.index.equals(this.props.selectedIndex);\n };\n // eslint-disable-next-line max-len\n cloneItemWithProps = (element, props) => {\n const nestedElements = react_1.default.Children.map(element.props.children, (el, index) => {\n const descriptor = this.service.createDescriptorForNestedElement(props.descriptor, index);\n const selected = this.isItemSelected(descriptor);\n return this.cloneItemWithProps(el, { ...props, selected, descriptor });\n });\n const onPress = (descriptor, event) => {\n element.props.onPress?.(descriptor, event);\n props.onPress(descriptor);\n };\n return react_1.default.cloneElement(element, { ...element.props, ...props, onPress }, nestedElements);\n };\n renderItem = (info) => {\n const descriptor = this.service.createDescriptorForElement(info.item, info.index);\n const selected = this.isItemSelected(descriptor);\n return this.cloneItemWithProps(info.item, { descriptor, selected, onPress: this.onItemPress });\n };\n render() {\n const { appearance, ...listProps } = this.props;\n return ();\n }\n};\nMenu = __decorate([\n (0, theme_1.styled)('Menu')\n], Menu);\nexports.Menu = Menu;\n//# sourceMappingURL=menu.component.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MenuService = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst devsupport_1 = require(\"../../devsupport\");\nclass MenuService {\n createDescriptorForElement = (element, index) => {\n const groupIndices = react_1.default.Children.map(element.props.children, ((child, row) => {\n return new devsupport_1.IndexPath(row, index);\n }));\n return { groupIndices, index: new devsupport_1.IndexPath(index) };\n };\n createDescriptorForNestedElement = (groupDescriptor, index) => {\n return {\n index: new devsupport_1.IndexPath(index, groupDescriptor.index.row),\n groupIndices: null,\n };\n };\n}\nexports.MenuService = MenuService;\n//# sourceMappingURL=menu.service.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DrawerGroup = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst menuGroup_component_1 = require(\"../menu/menuGroup.component\");\n/**\n * A group of items displayed in Drawer.\n * Groups should be rendered within Drawer and contain DrawerItem components to provide a useful component.\n *\n * @extends React.Component\n *\n * @property {ReactElement | ReactElement[]} children -\n * items to be rendered within group.\n *\n * @property {ReactText | ReactElement | (TextProps) => ReactElement} title - String, number or a function component\n * to render within the group.\n * If it is a function, expected to return a Text.\n *\n * @property {ReactElement | (ImageProps) => ReactElement} accessoryLeft - Function component\n * to render to start of the *title*.\n * Expected to return an Image.\n *\n * @property {ReactElement | (ImageProps) => ReactElement} accessoryRight - Function component\n * to render to end of the *title*.\n * Expected to return an Image.\n *\n * @property {TouchableOpacityProps} ...TouchableOpacityProps - Any props applied to TouchableOpacity component.\n *\n * @overview-example DrawerGroups\n */\nclass DrawerGroup extends react_1.default.Component {\n render() {\n return ();\n }\n}\nexports.DrawerGroup = DrawerGroup;\n//# sourceMappingURL=drawerGroup.component.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MenuGroup = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst devsupport_1 = require(\"../../devsupport\");\nconst chevronDown_component_1 = require(\"../shared/chevronDown.component\");\nconst menuItem_component_1 = require(\"./menuItem.component\");\nconst CHEVRON_DEG_COLLAPSED = -180;\nconst CHEVRON_DEG_EXPANDED = 0;\nconst CHEVRON_ANIM_DURATION = 200;\nconst POSITION_OUTSCREEN = devsupport_1.Point.outscreen();\n/**\n * A group of items displayed in Menu.\n * Groups should be rendered within Menu and contain MenuItem components to provide a useful navigation component.\n *\n * @extends React.Component\n *\n * @property {ReactElement | ReactElement[]} children -\n * Items to be rendered within group.\n *\n * @property {ReactText | ReactElement | (TextProps) => ReactElement} title - String, number or a function component\n * to render within the group.\n * If it is a function, expected to return a Text.\n *\n * @property {ReactElement | (ImageProps) => ReactElement} accessoryLeft - Function component\n * to render to start of the *title*.\n * Expected to return an Image.\n *\n * @property {ReactElement | (ImageProps) => ReactElement} accessoryRight - Function component\n * to render to end of the *title*.\n * Expected to return an Image.\n *\n * @property {boolean} initiallyExpanded - Boolean value which defines whether group should be initially expanded.\n * If true - menu group will be expanded by default.\n *\n * @property {TouchableOpacityProps} ...TouchableOpacityProps - Any props applied to TouchableOpacity component.\n *\n * @overview-example MenuGroups\n */\nclass MenuGroup extends react_1.default.Component {\n state = {\n submenuHeight: 1,\n };\n initiallyExpanded;\n expandAnimation = new react_native_1.Animated.Value(0);\n constructor(props) {\n super(props);\n this.initiallyExpanded = props.initiallyExpanded;\n }\n componentDidUpdate(prevProps, prevState) {\n const submenuHeightChanged = this.state.submenuHeight !== prevState.submenuHeight;\n if (submenuHeightChanged && this.hasSubmenu && this.initiallyExpanded) {\n this.expandAnimation.setValue(this.state.submenuHeight);\n }\n }\n get hasSubmenu() {\n return react_1.default.Children.count(this.props.children) > 0;\n }\n get shouldMeasureSubmenu() {\n return this.state.submenuHeight === 1;\n }\n get expandAnimationValue() {\n // @ts-ignore - private api, but let's us avoid creating animation listeners.\n // `this.expandAnimation.addListener`\n return this.expandAnimation._value;\n }\n get expandToRotateInterpolation() {\n return this.expandAnimation.interpolate({\n inputRange: [-this.state.submenuHeight, CHEVRON_DEG_EXPANDED],\n outputRange: [`${CHEVRON_DEG_COLLAPSED}deg`, `${CHEVRON_DEG_EXPANDED}deg`],\n });\n }\n get submenuStyle() {\n // @ts-ignore - issue of `@types/react-native` package\n return this.shouldMeasureSubmenu ? styles.outscreen : { height: this.expandAnimation };\n }\n get defaultItemProps() {\n return { appearance: 'grouped' };\n }\n onPress = (descriptor, event) => {\n if (this.hasSubmenu) {\n this.initiallyExpanded = false;\n const expandValue = this.expandAnimationValue > 0 ? 0 : this.state.submenuHeight;\n this.createExpandAnimation(expandValue).start();\n this.props.onPress?.(descriptor, event);\n }\n };\n onSubmenuMeasure = (frame) => {\n this.setState({ submenuHeight: frame.size.height });\n };\n createExpandAnimation = (toValue) => {\n return react_native_1.Animated.timing(this.expandAnimation, {\n toValue: toValue,\n duration: CHEVRON_ANIM_DURATION,\n useNativeDriver: false,\n });\n };\n renderAccessoryIfNeeded = (evaProps) => {\n if (!this.hasSubmenu) {\n return null;\n }\n const style = react_native_1.StyleSheet.flatten(evaProps.style);\n return (\n \n );\n };\n renderItemsWithDefaultProps = () => {\n return react_1.default.Children.map(this.props.children, (item) => {\n return react_1.default.cloneElement(item, this.defaultItemProps, null);\n });\n };\n renderGroupedItems = (evaStyle) => {\n return (\n {this.renderItemsWithDefaultProps()}\n );\n };\n renderMeasuringGroupedItems = (evaStyle) => {\n return (\n {this.renderGroupedItems(evaStyle)}\n );\n };\n renderGroupedItemsIfNeeded = (evaStyle) => {\n if (!this.hasSubmenu) {\n return null;\n }\n if (this.shouldMeasureSubmenu) {\n return this.renderMeasuringGroupedItems(evaStyle);\n }\n return this.renderGroupedItems(evaStyle);\n };\n render() {\n const { children, ...itemProps } = this.props;\n return (<>\n \n {this.renderGroupedItemsIfNeeded({})}\n );\n }\n}\nexports.MenuGroup = MenuGroup;\nconst styles = react_native_1.StyleSheet.create({\n outscreen: {\n position: 'absolute',\n left: POSITION_OUTSCREEN.x,\n top: POSITION_OUTSCREEN.y,\n },\n submenu: {\n overflow: 'hidden',\n },\n});\n//# sourceMappingURL=menuGroup.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MenuItem = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst devsupport_1 = require(\"../../devsupport\");\nconst theme_1 = require(\"../../theme\");\n/**\n * A single item in Menu.\n * Items should be rendered within Menu or MenuGroup to provide a usable navigation component.\n *\n * @extends React.Component\n *\n * @property {ReactElement | ReactText | (TextProps) => ReactElement} title - String, number or a function component\n * to render within the item.\n * If it is a function, expected to return a Text.\n *\n * @property {ReactElement | (ImageProps) => ReactElement} accessoryLeft - Function component\n * to render to start of the *title*.\n * Expected to return an Image.\n *\n * @property {ReactElement | (ImageProps) => ReactElement} accessoryRight - Function component\n * to render to end of the *title*.\n * Expected to return an Image.\n *\n * @property {TouchableOpacityProps} ...TouchableOpacityProps - Any props applied to TouchableOpacity component.\n *\n * @overview-example MenuItemSimpleUsage\n */\nlet MenuItem = class MenuItem extends react_1.default.Component {\n onMouseEnter = (event) => {\n this.props.eva.dispatch([theme_1.Interaction.HOVER]);\n this.props.onMouseEnter?.(event);\n };\n onMouseLeave = (event) => {\n this.props.eva.dispatch([]);\n this.props.onMouseLeave?.(event);\n };\n onFocus = (event) => {\n this.props.eva.dispatch([theme_1.Interaction.FOCUSED]);\n this.props.onFocus?.(event);\n };\n onBlur = (event) => {\n this.props.eva.dispatch([]);\n this.props.onBlur?.(event);\n };\n onPress = (event) => {\n this.props.onPress?.(this.props.descriptor, event);\n };\n onPressIn = (event) => {\n this.props.eva.dispatch([theme_1.Interaction.ACTIVE]);\n this.props.onPressIn?.(event);\n };\n onPressOut = (event) => {\n this.props.eva.dispatch([]);\n this.props.onPressOut?.(event);\n };\n getComponentStyle = (style) => {\n const { paddingHorizontal, paddingVertical, paddingLeft, backgroundColor } = style;\n const titleStyles = devsupport_1.PropsService.allWithPrefix(style, 'title');\n const indicatorStyles = devsupport_1.PropsService.allWithPrefix(style, 'indicator');\n const iconStyles = devsupport_1.PropsService.allWithPrefix(style, 'icon');\n return {\n container: {\n paddingHorizontal: paddingHorizontal,\n paddingLeft: paddingLeft,\n paddingVertical: paddingVertical,\n backgroundColor: backgroundColor,\n },\n title: {\n marginHorizontal: titleStyles.titleMarginHorizontal,\n fontFamily: titleStyles.titleFontFamily,\n fontSize: titleStyles.titleFontSize,\n fontWeight: titleStyles.titleFontWeight,\n color: titleStyles.titleColor,\n },\n indicator: {\n width: indicatorStyles.indicatorWidth,\n backgroundColor: indicatorStyles.indicatorBackgroundColor,\n },\n icon: {\n width: iconStyles.iconWidth,\n height: iconStyles.iconHeight,\n marginHorizontal: iconStyles.iconMarginHorizontal,\n tintColor: iconStyles.iconTintColor,\n },\n };\n };\n render() {\n const { eva, style, title, accessoryLeft, accessoryRight, children, ...touchableProps } = this.props;\n const evaStyle = this.getComponentStyle(eva.style);\n return (\n \n \n \n \n );\n }\n};\nMenuItem = __decorate([\n (0, theme_1.styled)('MenuItem')\n], MenuItem);\nexports.MenuItem = MenuItem;\nconst styles = react_native_1.StyleSheet.create({\n container: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n title: {\n flex: 1,\n textAlign: 'left',\n },\n});\n//# sourceMappingURL=menuItem.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DrawerItem = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst menuItem_component_1 = require(\"../menu/menuItem.component\");\n/**\n * A single item in Drawer.\n * Items should be rendered within Drawer or DrawerGroup children to provide a usable component.\n *\n * @extends React.Component\n *\n * @property {ReactText | ReactElement | (TextProps) => ReactElement} title - String, number or a function component\n * to render within the item.\n * If it is a function, expected to return a Text.\n *\n * @property {ReactElement | (ImageProps) => ReactElement} accessoryLeft - Function component\n * to render to start of the *title*.\n * Expected to return an Image.\n *\n * @property {ReactElement | (ImageProps) => ReactElement} accessoryRight - Function component\n * to render to end of the *title*.\n * Expected to return an Image.\n *\n * @property {TouchableOpacityProps} ...TouchableOpacityProps - Any props applied to TouchableOpacity component.\n *\n * @overview-example DrawerItemSimpleUsage\n */\nclass DrawerItem extends react_1.default.Component {\n render() {\n return ();\n }\n}\nexports.DrawerItem = DrawerItem;\n//# sourceMappingURL=drawerItem.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Select = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst devsupport_1 = require(\"../../devsupport\");\nconst theme_1 = require(\"../../theme\");\nconst list_component_1 = require(\"../list/list.component\");\nconst popover_component_1 = require(\"../popover/popover.component\");\nconst chevronDown_component_1 = require(\"../shared/chevronDown.component\");\nconst select_service_1 = require(\"./select.service\");\nconst CHEVRON_DEG_COLLAPSED = -180;\nconst CHEVRON_DEG_EXPANDED = 0;\nconst CHEVRON_ANIM_DURATION = 200;\n/**\n * A dropdown menu for displaying selectable options.\n * Select should contain SelectItem or SelectGroup components to provide a useful component.\n *\n * @extends React.Component\n *\n * @method {() => void} focus - Focuses input field and sets options list visible.\n *\n * @method {() => void} blur - Removes focus from input field and sets options list invisible.\n *\n * @method {() => boolean} isFocused - Whether input field is currently focused and options list is visible.\n *\n * @method {() => void} clear - Removes all text from the Select.\n *\n * @property {ReactElement | ReactElement[]} children -\n * Items to be rendered within options list.\n *\n * @property {IndexPath | IndexPath[]} selectedIndex - Index or array of indices of selected options.\n * IndexPath `row: number, section?: number` - position of element in sectioned list.\n * Select becomes sectioned when SelectGroup is rendered within children.\n *\n * @property {(IndexPath | IndexPath[]) => void} onSelect - Called when option is pressed.\n * Called with `row: number` for non-grouped items.\n * Called with `row: number, section: number` for items rendered within group,\n * where row - index of item in group, section - index of group in list.\n * Called with array if *multiSelect* was set to true.\n *\n * @property {ReactText | ReactElement | (TextProps) => ReactElement} value - String, number or a function component\n * to render for the selected options.\n * By default, calls *toString()* for each index in selectedIndex property.\n * If it is a function, expected to return a Text.\n *\n * @property {boolean} multiSelect - Whether multiple options can be selected.\n * If true, calls onSelect with IndexPath[] in arguments.\n * Otherwise, with IndexPath in arguments.\n *\n * @property {ReactText | ReactElement | (TextProps) => ReactElement} placeholder - String, number or a function\n * component to render when there is no selected option.\n * If it is a function, expected to return a Text.\n *\n * @property {ReactText | ReactElement | (TextProps) => ReactElement} label - String, number or a function component\n * to render above input field.\n * If it is a function, expected to return a Text.\n *\n * @property {ReactText | ReactElement | (TextProps) => ReactElement} caption - String, number or a function component\n * to render below the input field.\n * If it is a function, expected to return a Text.\n *\n * @property {ReactElement | (ImageProps) => ReactElement} accessoryLeft - Function component\n * to render to start of the text.\n * Expected to return an Image.\n *\n * @property {ReactElement | (ImageProps) => ReactElement} accessoryRight - Function component\n * to render to end of the text.\n * Expected to return an Image.\n *\n * @property {string} status - Status of the component.\n * Can be `basic`, `primary`, `success`, `info`, `warning`, `danger` or `control`.\n * Defaults to *basic*.\n * Use *control* status when needed to display within a contrast container.\n *\n * @property {string} size - Size of the component.\n * Can be `small`, `medium` or `large`.\n * Defaults to *medium*.\n *\n * @property {() => void} onFocus - Called when options list becomes visible.\n *\n * @property {() => void} onBlur - Called when options list becomes invisible.\n *\n * @property {TouchableOpacityProps} ...TouchableOpacityProps - Any props applied to TouchableOpacity component.\n *\n * @overview-example SelectSimpleUsage\n *\n * @overview-example SelectIndexType\n * Select works with special index object - IndexPath.\n * For non-grouped items in select, there is only a `row` property.\n * Otherwise, `row` is an index of option within the group, section - index of group in options list.\n * ```\n * interface IndexPath {\n * row: number;\n * section?: number;\n * }\n * ```\n *\n * @overview-example SelectMultiSelect\n * Multiple options can be selected if `multiSelect` property is configured.\n * For multiple options, `onSelect` function is called with array if indices.\n *\n * @overview-example SelectWithGroups\n * Options may be grouped within `SelectGroup` component.\n *\n * @overview-example SelectDisplayValue\n * By default, Select displays a value by building strings for selected indices.\n * For a real-word examples, a `value` property should be configured.\n *\n * @overview-example SelectStates\n * Select can be disabled with `disabled` property.\n *\n * @overview-example SelectDisabledOptions\n * Same for options.\n *\n * @overview-example SelectStatus\n * It also may be marked with `status` property, which is useful within forms validation.\n * An extra status is `control`, which is designed to be used on high-contrast backgrounds.\n *\n * @overview-example SelectAccessories\n * Select may contain labels, captions and inner views by configuring `accessoryLeft` or `accessoryRight` properties.\n * Within Eva, Select accessories are expected to be images or [svg icons](guides/icon-packages).\n *\n * @overview-example SelectSize\n * To resize Select, a `size` property may be used.\n *\n * @overview-example SelectStyling\n * Select and it's inner views can be styled by passing them as function components.\n * ```\n * import { Select, SelectItem, Text } from '@ui-kitten/components';\n *\n * Label}\n * caption={evaProps => Caption}>\n * Option 1} />\n * \n * ```\n *\n * @overview-example SelectTheming\n * In most cases this is redundant, if [custom theme is configured](guides/branding).\n */\nlet Select = class Select extends react_1.default.Component {\n static defaultProps = {\n placeholder: 'Select Option',\n selectedIndex: [],\n };\n state = {\n listVisible: false,\n };\n service = new select_service_1.SelectService();\n expandAnimation = new react_native_1.Animated.Value(0);\n get isMultiSelect() {\n return this.props.multiSelect;\n }\n get data() {\n return react_1.default.Children.toArray(this.props.children || []);\n }\n get selectedIndices() {\n if (!this.props.selectedIndex) {\n return [];\n }\n return Array.isArray(this.props.selectedIndex) ? this.props.selectedIndex : [this.props.selectedIndex];\n }\n get expandToRotateInterpolation() {\n return this.expandAnimation.interpolate({\n inputRange: [CHEVRON_DEG_COLLAPSED, CHEVRON_DEG_EXPANDED],\n outputRange: [`${CHEVRON_DEG_COLLAPSED}deg`, `${CHEVRON_DEG_EXPANDED}deg`],\n });\n }\n focus = () => {\n this.setOptionsListVisible();\n };\n blur = () => {\n this.setOptionsListInvisible();\n };\n isFocused = () => {\n return this.state.listVisible;\n };\n clear = () => {\n this.props.onSelect?.(null);\n };\n onMouseEnter = (event) => {\n this.props.eva.dispatch([theme_1.Interaction.HOVER]);\n this.props.onMouseEnter?.(event);\n };\n onMouseLeave = (event) => {\n this.props.eva.dispatch([]);\n this.props.onMouseLeave?.(event);\n };\n onPress = () => {\n this.setOptionsListVisible();\n };\n onPressIn = (event) => {\n this.props.eva.dispatch([theme_1.Interaction.ACTIVE]);\n this.props.onPressIn?.(event);\n };\n onPressOut = (event) => {\n this.props.eva.dispatch([]);\n this.props.onPressOut?.(event);\n };\n onItemPress = (descriptor) => {\n if (this.props.onSelect) {\n const selectedIndices = this.service.selectItem(this.isMultiSelect, descriptor, this.selectedIndices);\n !this.isMultiSelect && this.setOptionsListInvisible();\n this.props.onSelect(selectedIndices);\n }\n };\n onBackdropPress = () => {\n this.setOptionsListInvisible();\n };\n onListVisible = () => {\n this.props.eva.dispatch([theme_1.Interaction.ACTIVE]);\n this.createExpandAnimation(-CHEVRON_DEG_COLLAPSED).start(() => {\n this.props.onFocus?.(null);\n });\n };\n onListInvisible = () => {\n this.props.eva.dispatch([]);\n this.createExpandAnimation(CHEVRON_DEG_EXPANDED).start(() => {\n this.props.onBlur?.(null);\n });\n };\n getComponentStyle = (style) => {\n const { textMarginHorizontal, textFontFamily, textFontSize, textFontWeight, textColor, placeholderColor, placeholderFontSize, placeholderFontWeight, placeholderFontFamily, iconWidth, iconHeight, iconMarginHorizontal, iconTintColor, labelColor, labelFontSize, labelMarginBottom, labelFontWeight, labelFontFamily, captionColor, captionFontSize, captionFontWeight, captionFontFamily, captionIconWidth, captionIconHeight, captionIconMarginRight, captionIconTintColor, popoverMaxHeight, popoverBorderRadius, popoverBorderColor, popoverBorderWidth, ...inputParameters } = style;\n return {\n input: inputParameters,\n text: {\n marginHorizontal: textMarginHorizontal,\n fontFamily: textFontFamily,\n fontSize: textFontSize,\n fontWeight: textFontWeight,\n color: textColor,\n },\n placeholder: {\n marginHorizontal: textMarginHorizontal,\n fontSize: placeholderFontSize,\n fontWeight: placeholderFontWeight,\n fontFamily: placeholderFontFamily,\n color: placeholderColor,\n },\n icon: {\n width: iconWidth,\n height: iconHeight,\n marginHorizontal: iconMarginHorizontal,\n tintColor: iconTintColor,\n },\n label: {\n marginBottom: labelMarginBottom,\n fontSize: labelFontSize,\n fontWeight: labelFontWeight,\n fontFamily: labelFontFamily,\n color: labelColor,\n },\n caption: {\n fontSize: captionFontSize,\n fontWeight: captionFontWeight,\n fontFamily: captionFontFamily,\n color: captionColor,\n },\n popover: {\n maxHeight: popoverMaxHeight,\n borderRadius: popoverBorderRadius,\n borderWidth: popoverBorderWidth,\n borderColor: popoverBorderColor,\n },\n };\n };\n setOptionsListVisible = () => {\n const hasData = this.data.length > 0;\n hasData && this.setState({ listVisible: true }, this.onListVisible);\n };\n setOptionsListInvisible = () => {\n this.setState({ listVisible: false }, this.onListInvisible);\n };\n createExpandAnimation = (toValue) => {\n return react_native_1.Animated.timing(this.expandAnimation, {\n toValue,\n duration: CHEVRON_ANIM_DURATION,\n useNativeDriver: react_native_1.Platform.OS !== 'web',\n });\n };\n cloneItemWithProps = (el, props) => {\n const nestedElements = react_1.default.Children.map(el.props.children, (nestedEl, index) => {\n const descriptor = this.service.createDescriptorForNestedElement(nestedEl, props.descriptor, index);\n const selected = this.service.isSelected(descriptor, this.selectedIndices);\n return this.cloneItemWithProps(nestedEl, { ...props, descriptor, selected, disabled: false });\n });\n return react_1.default.cloneElement(el, { ...props, ...el.props }, nestedElements);\n };\n renderItem = (info) => {\n const descriptor = this.service.createDescriptorForElement(info.item, this.isMultiSelect, info.index);\n const selected = this.service.isSelected(descriptor, this.selectedIndices);\n const disabled = this.service.isDisabled(descriptor);\n return this.cloneItemWithProps(info.item, { descriptor, selected, disabled, onPress: this.onItemPress });\n };\n renderDefaultIconElement = (evaStyle) => {\n const { tintColor, ...svgStyle } = evaStyle;\n return (\n \n );\n };\n renderInputElement = (props, evaStyle) => {\n const value = props.value || this.service.toStringSelected(this.selectedIndices);\n const textStyle = value && evaStyle.text;\n return (\n \n \n \n );\n };\n render() {\n const { eva, style, label, caption, children, ...touchableProps } = this.props;\n const evaStyle = this.getComponentStyle(eva.style);\n return (\n \n this.renderInputElement(touchableProps, evaStyle)} onBackdropPress={this.onBackdropPress}>\n \n \n \n );\n }\n};\nSelect = __decorate([\n (0, theme_1.styled)('Select')\n], Select);\nexports.Select = Select;\nconst styles = react_native_1.StyleSheet.create({\n input: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n popover: {\n overflow: 'hidden',\n },\n list: {\n flexGrow: 0,\n },\n text: {\n flex: 1,\n textAlign: 'left',\n },\n label: {\n textAlign: 'left',\n },\n caption: {\n textAlign: 'left',\n },\n});\n//# sourceMappingURL=select.component.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SelectService = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst devsupport_1 = require(\"../../devsupport\");\nconst SEPARATOR = ', ';\nclass SelectService {\n selectItem = (multiSelect, descriptor, selected) => {\n if (multiSelect) {\n return this.createMultiSelectIndices(descriptor, selected);\n }\n return descriptor.index;\n };\n toStringSelected = (selected) => {\n if (!Array.isArray(selected)) {\n return '';\n }\n const options = selected.map((index) => {\n return `Option ${index.toString()}`;\n });\n return options.join(SEPARATOR);\n };\n isSelected = (descriptor, selected) => {\n if (descriptor.multiSelect && this.isGroup(descriptor)) {\n return this.containsSomeFromGroup(descriptor.index, selected);\n }\n return this.contains(descriptor.index, selected);\n };\n isDisabled = (descriptor) => {\n return !descriptor.multiSelect && this.isGroup(descriptor);\n };\n createDescriptorForElement = (element, multiSelect, index) => {\n const groupIndices = react_1.default.Children.map(element.props.children, ((child, row) => {\n return new devsupport_1.IndexPath(row, index);\n }));\n return { multiSelect, groupIndices, index: new devsupport_1.IndexPath(index) };\n };\n createDescriptorForNestedElement = (element, descriptor, index) => {\n return {\n ...descriptor,\n index: new devsupport_1.IndexPath(index, descriptor.index.row),\n groupIndices: [],\n };\n };\n createMultiSelectIndices = (descriptor, selected) => {\n const isIndexSelected = this.isSelected(descriptor, selected);\n return !isIndexSelected ? this.addIndex(descriptor, selected) : this.removeIndex(descriptor, selected);\n };\n isGroup = (descriptor) => {\n return descriptor.groupIndices && descriptor.groupIndices.length > 0;\n };\n createGroupIndices = (descriptor) => {\n return this.isGroup(descriptor) ? descriptor.groupIndices : [descriptor.index];\n };\n addIndex = (descriptor, selected) => {\n return [...selected, ...this.createGroupIndices(descriptor)];\n };\n removeIndex = (descriptor, selected) => {\n const groupIndices = this.createGroupIndices(descriptor);\n return selected.filter((selectedIndex) => {\n return !this.contains(selectedIndex, groupIndices);\n });\n };\n contains = (index, selected) => {\n return selected.some((selectedIndex) => {\n return selectedIndex.equals(index);\n });\n };\n containsSomeFromGroup = (index, selected) => {\n return selected.some((selectedIndex) => {\n return selectedIndex.section === index.row;\n });\n };\n}\nexports.SelectService = SelectService;\n//# sourceMappingURL=select.service.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SelectGroup = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst checkbox_component_1 = require(\"../checkbox/checkbox.component\");\nconst selectItem_component_1 = require(\"./selectItem.component\");\n/**\n * A group of items displayed in Select.\n * Groups should be rendered within Select and contain SelectItem components to provide a useful component.\n *\n * @extends React.Component\n *\n * @property {ReactElement | ReactElement[]} children -\n * items to be rendered within group.\n *\n * @property {ReactElement | ReactText | (TextProps) => ReactElement} title - String, number or a function component\n * to render within the group.\n * If it is a function, expected to return a Text.\n *\n * @property {ReactElement | (ImageProps) => ReactElement} accessoryLeft - Function component\n * to render to start of the *title*.\n * Expected to return an Image.\n *\n * @property {ReactElement | (ImageProps) => ReactElement} accessoryRight - Function component\n * to render to end of the *title*.\n * Expected to return an Image.\n *\n * @property {TouchableOpacityProps} ...TouchableOpacityProps - Any props applied to TouchableOpacity component.\n *\n * @overview-example SelectWithGroups\n */\nclass SelectGroup extends react_1.default.Component {\n get isMultiSelect() {\n if (this.props.descriptor) {\n return this.props.descriptor.multiSelect;\n }\n return false;\n }\n get groupAccessoryState() {\n const nestedElements = react_1.default.Children.toArray(this.props.children);\n const selectedElements = nestedElements.filter(el => el.props.selected);\n const indeterminate = selectedElements.length > 0 && selectedElements.length < nestedElements.length;\n const checked = selectedElements.length === nestedElements.length;\n return { checked, indeterminate };\n }\n get groupAccessoryProps() {\n return {\n ...this.createAccessoryProps(this.props),\n ...this.groupAccessoryState,\n };\n }\n createAccessoryProps = (props) => {\n return {\n checked: props.selected,\n onChange: () => props.onPress?.(props.descriptor),\n };\n };\n createGroupedItemProps = (props) => {\n const accessoryProps = this.createAccessoryProps(props);\n return {\n appearance: 'grouped',\n accessoryLeft: evaProps => this.renderAccessory({ ...evaProps, ...accessoryProps }),\n };\n };\n renderAccessory = (props) => {\n if (!this.isMultiSelect) {\n return null;\n }\n return ();\n };\n renderGroupedItems = (source) => {\n return react_1.default.Children.map(source, (item, key) => {\n const groupedProps = this.createGroupedItemProps(item.props);\n return react_1.default.cloneElement(item, { key, ...groupedProps, ...item.props });\n });\n };\n render() {\n const { children, ...itemProps } = this.props;\n return (<>\n this.renderAccessory({ ...evaProps, ...this.groupAccessoryProps })} {...itemProps}/>\n {this.renderGroupedItems(children)}\n );\n }\n}\nexports.SelectGroup = SelectGroup;\n//# sourceMappingURL=selectGroup.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SelectItem = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst devsupport_1 = require(\"../../devsupport\");\nconst theme_1 = require(\"../../theme\");\nconst checkbox_component_1 = require(\"../checkbox/checkbox.component\");\n/**\n * A single item in Select.\n * Items should be rendered within Select or SelectGroup children to provide a usable component.\n *\n * @extends React.Component\n *\n * @property {ReactText | ReactElement | (TextProps) => ReactElement} title - String, number or a function component\n * to render within the item.\n * If it is a function, expected to return a Text.\n *\n * @property {ReactElement | (ImageProps) => ReactElement} accessoryLeft - Function component\n * to render to start of the *title*.\n * Expected to return an Image.\n *\n * @property {ReactElement | (ImageProps) => ReactElement} accessoryRight - Function component\n * to render to end of the *title*.\n * Expected to return an Image.\n *\n * @property {TouchableOpacityProps} ...TouchableOpacityProps - Any props applied to TouchableOpacity component.\n *\n * @overview-example SelectItemSimpleUsage\n */\nlet SelectItem = class SelectItem extends react_1.default.Component {\n get isMultiSelect() {\n if (this.props.descriptor) {\n return this.props.descriptor.multiSelect;\n }\n return false;\n }\n onMouseEnter = (event) => {\n this.props.eva.dispatch([theme_1.Interaction.HOVER]);\n this.props.onMouseEnter?.(event);\n };\n onMouseLeave = (event) => {\n this.props.eva.dispatch([]);\n this.props.onMouseLeave?.(event);\n };\n onFocus = (event) => {\n this.props.eva.dispatch([theme_1.Interaction.FOCUSED]);\n this.props.onFocus?.(event);\n };\n onBlur = (event) => {\n this.props.eva.dispatch([]);\n this.props.onBlur?.(event);\n };\n onPress = (event) => {\n this.props.onPress?.(this.props.descriptor, event);\n };\n onPressIn = (event) => {\n this.props.eva.dispatch([theme_1.Interaction.ACTIVE]);\n this.props.onPressIn?.(event);\n };\n onPressOut = (event) => {\n this.props.eva.dispatch([]);\n this.props.onPressOut?.(event);\n };\n onAccessoryCheckedChange = () => {\n this.props.onPress?.(this.props.descriptor);\n };\n getComponentStyle = (style) => {\n const { paddingHorizontal, paddingLeft, paddingVertical, backgroundColor } = style;\n const textStyles = devsupport_1.PropsService.allWithPrefix(style, 'text');\n const iconStyles = devsupport_1.PropsService.allWithPrefix(style, 'icon');\n return {\n container: {\n paddingHorizontal: paddingHorizontal,\n paddingLeft: paddingLeft,\n paddingVertical: paddingVertical,\n backgroundColor: backgroundColor,\n },\n text: {\n marginHorizontal: textStyles.textMarginHorizontal,\n fontFamily: textStyles.textFontFamily,\n fontSize: textStyles.textFontSize,\n fontWeight: textStyles.textFontWeight,\n color: textStyles.textColor,\n },\n icon: {\n width: iconStyles.iconWidth,\n height: iconStyles.iconHeight,\n marginHorizontal: iconStyles.iconMarginHorizontal,\n tintColor: iconStyles.iconTintColor,\n },\n };\n };\n renderAccessory = (evaStyle) => {\n if (!this.isMultiSelect) {\n return null;\n }\n return ();\n };\n render() {\n const { eva, style, title, accessoryLeft, accessoryRight, ...touchableProps } = this.props;\n const evaStyle = this.getComponentStyle(eva.style);\n return (\n \n \n \n );\n }\n};\nSelectItem = __decorate([\n (0, theme_1.styled)('SelectOption')\n], SelectItem);\nexports.SelectItem = SelectItem;\nconst styles = react_native_1.StyleSheet.create({\n container: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n text: {\n flex: 1,\n textAlign: 'left',\n },\n});\n//# sourceMappingURL=selectItem.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Icon = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst react_native_1 = require(\"react-native\");\nconst iconAnimation_1 = require(\"./iconAnimation\");\nconst iconRegistry_service_1 = require(\"./service/iconRegistry.service\");\n/**\n * Animated Icon component.\n *\n * @extends React.Component\n *\n * @method {(callback?: Animated.EndCallback) => void} startAnimation - Toggle animation to start.\n *\n * @method {() => void} stopAnimation - Toggle animation to stop.\n *\n * @property {string} name - A name of icon registered in a specific pack.\n *\n * @property {string} pack - A name of icon pack registered in IconRegistry that is able to provide\n * an icon for a given name.\n *\n * @property {string} animation - Animation name. Can be `zoom`, `pulse`, `shake` or null.\n * Defaults to *zoom*.\n *\n * @property {AnimationConfig} animationConfig - Animation config.\n *\n * @property {any} ...props - Accepts any props\n * depending on the component registered in IconRegistry for a given `name` property.\n * In case of using `@ui-kitten/eva-icons` package, Icon accepts any props for react-native-svg component.\n *\n * @overview-example IconSimpleUsage\n * Icon component provides a simple way to render image by requesting it from an icon set.\n * Icons come with [additional packages](guides/icon-packages),\n * that should be configured before using component.\n * We recommend using [Eva Icons](https://akveo.github.io/eva-icons),\n * to provide a full consistency with Eva Design System.\n *\n * @overview-example IconWithinComponents\n * All UI Kitten components that may contain inner views have support for Eva Icons.\n * When using icons as nested components, icon styles are handled by Eva.\n *\n * @overview-example IconAnimation\n * Icons have 3 types of animations: `zoom`, `pulse` and `shake`.\n *\n * @overview-example IconTheming\n * In particular cases, Icon should be styled in a different way.\n * In case of using Eva Icons it renders [svg images](https://github.com/react-native-community/react-native-svg).\n *\n * In most cases this is redundant, if [custom theme is configured](guides/branding).\n */\nclass Icon extends react_1.default.Component {\n static defaultProps = {\n animation: 'zoom',\n };\n animation;\n constructor(props) {\n super(props);\n this.animation = (0, iconAnimation_1.getIconAnimation)(props.animation, props.animationConfig);\n }\n componentWillUnmount() {\n this.animation?.release();\n }\n startAnimation = (callback) => {\n this.animation?.start(callback);\n };\n stopAnimation = () => {\n this.animation?.stop();\n };\n render() {\n const { name, pack, animation, animationConfig, ...iconProps } = this.props;\n const registeredIcon = iconRegistry_service_1.IconRegistryService.getIcon(name, pack);\n const iconElement = registeredIcon.icon.toReactElement(iconProps);\n if (!this.animation) {\n return iconElement;\n }\n return (\n {iconElement}\n );\n }\n}\nexports.Icon = Icon;\n//# sourceMappingURL=icon.component.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getIconAnimation = void 0;\nconst animation_1 = require(\"../animation\");\nfunction getIconAnimation(animation, config) {\n switch (animation) {\n case 'zoom':\n return new animation_1.ZoomAnimation(config);\n case 'pulse':\n return new animation_1.PulseAnimation(config);\n case 'shake':\n return new animation_1.ShakeAnimation(config);\n default:\n return null;\n }\n}\nexports.getIconAnimation = getIconAnimation;\n//# sourceMappingURL=iconAnimation.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ZoomAnimation = exports.ShakeAnimation = exports.PulseAnimation = exports.Animation = void 0;\nvar animation_1 = require(\"./animation\");\nObject.defineProperty(exports, \"Animation\", { enumerable: true, get: function () { return animation_1.Animation; } });\nvar pulseAnimation_1 = require(\"./pulseAnimation\");\nObject.defineProperty(exports, \"PulseAnimation\", { enumerable: true, get: function () { return pulseAnimation_1.PulseAnimation; } });\nvar shakeAnimation_1 = require(\"./shakeAnimation\");\nObject.defineProperty(exports, \"ShakeAnimation\", { enumerable: true, get: function () { return shakeAnimation_1.ShakeAnimation; } });\nvar zoomAnimation_1 = require(\"./zoomAnimation\");\nObject.defineProperty(exports, \"ZoomAnimation\", { enumerable: true, get: function () { return zoomAnimation_1.ZoomAnimation; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Animation = exports.DEFAULT_CONFIG = void 0;\nconst react_native_1 = require(\"react-native\");\nexports.DEFAULT_CONFIG = {\n cycles: 1,\n useNativeDriver: react_native_1.Platform.OS !== 'web',\n};\nclass Animation {\n counter = 0;\n endCallback;\n running = false;\n config;\n constructor(config) {\n this.config = {\n ...exports.DEFAULT_CONFIG,\n ...config,\n };\n }\n start(callback) {\n this.endCallback = callback;\n this.running = true;\n this.animation.start(this.onAnimationEnd);\n }\n stop() {\n this.running = false;\n this.animation.stop();\n }\n release() {\n this.stop();\n }\n onAnimationEnd = (result) => {\n this.counter += 1;\n if (this.counter === this.config.cycles) {\n this.stop();\n }\n if (this.running) {\n this.start(this.endCallback);\n }\n if (!this.running) {\n this.counter = 0;\n this.endCallback?.(result);\n this.endCallback = null;\n }\n };\n}\nexports.Animation = Animation;\n//# sourceMappingURL=animation.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PulseAnimation = void 0;\nconst react_native_1 = require(\"react-native\");\nconst animation_1 = require(\"./animation\");\nconst DEFAULT_CONFIG = {\n start: 1.0,\n end: 1.25,\n easing: react_native_1.Easing.linear,\n duration: 500,\n useNativeDriver: react_native_1.Platform.OS !== 'web',\n};\nclass PulseAnimation extends animation_1.Animation {\n value;\n constructor(config) {\n super({ ...DEFAULT_CONFIG, ...config });\n this.value = new react_native_1.Animated.Value(this.config.start);\n }\n get animation() {\n const { start, end, ...restConfig } = this.config;\n const startAnimation = react_native_1.Animated.timing(this.value, {\n toValue: end,\n ...restConfig,\n });\n const endAnimation = react_native_1.Animated.timing(this.value, {\n toValue: start,\n ...restConfig,\n });\n return react_native_1.Animated.sequence([\n startAnimation,\n endAnimation,\n ]);\n }\n toProps() {\n return {\n // @ts-ignore: Animated.Value is not assignable to a number, but it is a number\n style: {\n transform: [{ scale: this.value }],\n },\n };\n }\n}\nexports.PulseAnimation = PulseAnimation;\n//# sourceMappingURL=pulseAnimation.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ShakeAnimation = void 0;\nconst react_native_1 = require(\"react-native\");\nconst animation_1 = require(\"./animation\");\nconst DEFAULT_CONFIG = {\n start: 0.0,\n offset: 2.5,\n easing: react_native_1.Easing.linear,\n duration: 25,\n cycles: 8,\n useNativeDriver: react_native_1.Platform.OS !== 'web',\n};\nclass ShakeAnimation extends animation_1.Animation {\n value;\n constructor(config) {\n super({ ...DEFAULT_CONFIG, ...config });\n this.value = new react_native_1.Animated.Value(this.config.start);\n }\n get animation() {\n const { start, offset, ...restConfig } = this.config;\n const startAnimation = react_native_1.Animated.timing(this.value, {\n toValue: this.counter % 2 !== 0 ? -offset : offset,\n ...restConfig,\n });\n const endAnimation = react_native_1.Animated.timing(this.value, {\n toValue: this.counter % 2 !== 0 ? offset : -offset,\n ...restConfig,\n });\n return react_native_1.Animated.sequence([\n startAnimation,\n endAnimation,\n ]);\n }\n toProps() {\n return {\n // @ts-ignore: Animated.Value is not assignable to a number, but it is a number\n style: {\n transform: [{ translateX: this.value }],\n },\n };\n }\n}\nexports.ShakeAnimation = ShakeAnimation;\n//# sourceMappingURL=shakeAnimation.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ZoomAnimation = void 0;\nconst react_native_1 = require(\"react-native\");\nconst animation_1 = require(\"./animation\");\nconst DEFAULT_CONFIG = {\n start: 1.0,\n end: 0.5,\n easing: react_native_1.Easing.linear,\n duration: 500,\n useNativeDriver: react_native_1.Platform.OS !== 'web',\n};\nclass ZoomAnimation extends animation_1.Animation {\n value;\n constructor(config) {\n super({ ...DEFAULT_CONFIG, ...config });\n this.value = new react_native_1.Animated.Value(this.config.start);\n }\n get animation() {\n const { start, end, ...restConfig } = this.config;\n const startAnimation = react_native_1.Animated.timing(this.value, {\n toValue: end,\n ...restConfig,\n });\n const endAnimation = react_native_1.Animated.timing(this.value, {\n toValue: start,\n ...restConfig,\n });\n return react_native_1.Animated.sequence([\n startAnimation,\n endAnimation,\n ]);\n }\n toProps() {\n return {\n // @ts-ignore: Animated.Value is not assignable to a number, but it is a number\n style: {\n transform: [{ scale: this.value }],\n },\n };\n }\n}\nexports.ZoomAnimation = ZoomAnimation;\n//# sourceMappingURL=zoomAnimation.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IconRegistryService = void 0;\nfunction throwPackNotFoundError(name) {\n const docRoot = 'https://akveo.github.io/react-native-ui-kitten/docs';\n const message = [\n `\\nIcon: Icon Pack '${name}' is not registered`,\n 'Using UI Kitten components is only possible with configuring ApplicationProvider.',\n `📖 Documentation: ${docRoot}/guides/setting-up-icons`,\n ].join('\\n');\n throw Error(message);\n}\nfunction throwIconNotFoundError(name, pack) {\n const docRoot = 'https://akveo.github.io/react-native-ui-kitten/docs';\n const message = [\n `\\nIcon: '${name}' icon is not registered in pack '${pack}'.`,\n 'Check icon name or consider switching icon pack.',\n `📖 Documentation: ${docRoot}/guides/setting-up-icons`,\n ].join('\\n');\n throw Error(message);\n}\n/**\n * This service allows to register multiple icon packs to use them later within\n * `` component.\n */\nclass RegistryService {\n packs = new Map();\n defaultPack;\n /**\n * Registers multiple icon packs and sets the first one as default if there is no default packs\n *\n * @param {IconPack[]} packs - array of icon packs\n */\n register(...packs) {\n packs.forEach((pack) => {\n this.registerIconPack(pack);\n });\n }\n /**\n * Sets pack as default\n *\n * @param {string} name\n * @throws {Error} if pack is nor registered\n */\n setDefaultIconPack(name) {\n if (!this.packs.has(name)) {\n throwPackNotFoundError(name);\n }\n this.defaultPack = name;\n }\n /**\n * @param {string} name\n * @returns {IconPack} pack by name\n */\n getIconPack(name) {\n return this.packs.get(name);\n }\n /**\n * @param {string} name - icon name\n * @param {string} pack - pack name\n * @throws {Error} if requested icon pack is not registered\n * @returns {RegisteredIcon} - registered icon of a requested/default pack\n */\n getIcon(name, pack) {\n const iconsPack = pack ? this.getPackOrThrow(pack) : this.getDefaultPack();\n return {\n name,\n pack: iconsPack.name,\n icon: this.getIconFromPack(name, iconsPack),\n };\n }\n /**\n * Registers single icon pack\n *\n * @param {IconPack} pack - icon pack to register\n */\n registerIconPack(pack) {\n this.packs.set(pack.name, pack);\n }\n getPackOrThrow(name) {\n const pack = this.packs.get(name);\n if (!pack) {\n throwPackNotFoundError(name);\n }\n return pack;\n }\n getDefaultPack() {\n return this.getIconPack(this.defaultPack);\n }\n getIconFromPack(name, pack, shouldThrow = true) {\n if (shouldThrow && !pack.icons[name]) {\n throwIconNotFoundError(name, pack.name);\n }\n return pack.icons[name];\n }\n}\nexports.IconRegistryService = new RegistryService();\n//# sourceMappingURL=iconRegistry.service.js.map","\"use strict\";\n/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IconRegistry = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst iconRegistry_service_1 = require(\"./service/iconRegistry.service\");\n/**\n * Registers one or more icon packs for later usage in Icon component.\n * Renders nothing, but should be added as a child of an Application Root.\n *\n * @extends React.Component\n *\n * @property {IconPack | IconPack[]} icons - Icon packs to register.\n * @property {string} defaultIcons - A name of an icon pack that is used by default.\n *\n * @overview-example Simple Usage\n *\n * ```\n * import React from 'react';\n * import * as eva from '@eva-design/eva';\n * import { ApplicationProvider, IconRegistry, Layout, Text, Icon, Button } from '@ui-kitten/components';\n * import { EvaIconsPack } from '@ui-kitten/eva-icons'; // <-- Make sure it is installed. npm i @ui-kitten/eva-icons\n *\n * const LikeIcon = (props) => (\n * \n * );\n *\n * export default () => (\n * <>\n * \n * \n * \n * Welcome to UI Kitten\n *