diff --git a/README.md b/README.md
index 5fd0c0c..23dffcc 100644
--- a/README.md
+++ b/README.md
@@ -103,9 +103,10 @@ Checkout the example app in the [example](./example) folder.
- **`GMSServices must be configured before use`**
Ensure your key is in `Info.plist` and/or provided via `GMSServices.provideAPIKey(...)` in `AppDelegate.swift`.
-- **Build fails with `Node.h` import error from SVGKit**
- SVGKit uses a header `Node.h` which can conflict with iOS system headers.
- You can patch it automatically in your **Podfile** inside the `post_install` hook:
+- **Build fails with `Node.h`, `CSSValue.h`, or `SVGLength.h` import errors from SVGKit**
+ SVGKit includes headers (`Node.h`, `CSSValue.h`, `SVGLength.h`) that can conflict with
+ iOS system headers and React Native Reanimated’s internal types.
+ You can patch them automatically in your **Podfile** inside the `post_install`
```ruby
post_install do |installer|
@@ -121,14 +122,35 @@ Checkout the example app in the [example](./example) folder.
end
end
- # Patch SVGKit includes to avoid Node.h conflicts
+ # --- SVGKit Patch ---
require 'fileutils'
svgkit_path = File.join(installer.sandbox.pod_dir('SVGKit'), 'Source')
+
+ # node fix
Dir.glob(File.join(svgkit_path, '**', '*.{h,m}')).each do |file|
FileUtils.chmod("u+w", file)
text = File.read(file)
new_contents = text.gsub('#import "Node.h"', '#import "SVGKit/Node.h"')
File.open(file, 'w') { |f| f.write(new_contents) }
+ # puts "Patched Node import in: #{file}"
+ end
+
+ # import CSSValue.h
+ Dir.glob(File.join(svgkit_path, '**', '*.{h,m}')).each do |file|
+ FileUtils.chmod("u+w", file)
+ text = File.read(file)
+ new_contents = text.gsub('#import "CSSValue.h"', '#import "SVGKit/CSSValue.h"')
+ File.open(file, 'w') { |f| f.write(new_contents) }
+ # puts "Patched CSSValue import in: #{file}"
+ end
+
+ # import SVGLength.h
+ Dir.glob(File.join(svgkit_path, '**', '*.{h,m}')).each do |file|
+ FileUtils.chmod("u+w", file)
+ text = File.read(file)
+ new_contents = text.gsub('#import "SVGLength.h"', '#import "SVGKit/SVGLength.h"')
+ File.open(file, 'w') { |f| f.write(new_contents) }
+ # puts "Patched SVGLength import in: #{file}"
end
end
```
diff --git a/android/build.gradle b/android/build.gradle
index 0ab758e..ad78c0e 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -25,7 +25,11 @@ apply plugin: "kotlin-android"
apply from: '../nitrogen/generated/android/RNGoogleMapsPlus+autolinking.gradle'
apply from: "./fix-prefab.gradle"
-apply plugin: "com.facebook.react"
+if (rootProject.name != "rngooglemapsplus.example") {
+ apply plugin: "com.facebook.react"
+} else {
+ println("\u001B[33m⚠️ Skipping React Native Gradle plugin in library (example build detected)\u001B[0m")
+}
def getExtOrIntegerDefault(name) {
return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["RNGoogleMapsPlus_" + name]).toInteger()
diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle
index 0193f09..a054502 100644
--- a/example/android/app/build.gradle
+++ b/example/android/app/build.gradle
@@ -85,6 +85,7 @@ android {
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
+ multiDexEnabled true
}
signingConfigs {
debug {
diff --git a/example/babel.config.js b/example/babel.config.js
index 486a093..4f18b89 100644
--- a/example/babel.config.js
+++ b/example/babel.config.js
@@ -7,6 +7,7 @@ const root = path.resolve(__dirname, '..');
module.exports = getConfig(
{
presets: ['module:@react-native/babel-preset'],
+ plugins: ['react-native-worklets/plugin'],
},
{ root, pkg }
);
diff --git a/example/ios/Podfile b/example/ios/Podfile
index d19430f..e535fec 100644
--- a/example/ios/Podfile
+++ b/example/ios/Podfile
@@ -33,13 +33,36 @@ target 'GoogleMapsPlusExample' do
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '16.0'
end
end
- require 'fileutils'
- svgkit_path = File.join(installer.sandbox.pod_dir('SVGKit'), 'Source')
- Dir.glob(File.join(svgkit_path, '**', '*.{h,m}')).each do |file|
- FileUtils.chmod("u+w", file)
- text = File.read(file)
- new_contents = text.gsub('#import "Node.h"', '#import "SVGKit/Node.h"')
- File.open(file, 'w') { |f| f.write(new_contents) }
- end
+
+ # --- SVGKit Patch ---
+ require 'fileutils'
+ svgkit_path = File.join(installer.sandbox.pod_dir('SVGKit'), 'Source')
+
+ # node fix
+ Dir.glob(File.join(svgkit_path, '**', '*.{h,m}')).each do |file|
+ FileUtils.chmod("u+w", file)
+ text = File.read(file)
+ new_contents = text.gsub('#import "Node.h"', '#import "SVGKit/Node.h"')
+ File.open(file, 'w') { |f| f.write(new_contents) }
+ # puts "Patched Node import in: #{file}"
+ end
+
+ # import CSSValue.h
+ Dir.glob(File.join(svgkit_path, '**', '*.{h,m}')).each do |file|
+ FileUtils.chmod("u+w", file)
+ text = File.read(file)
+ new_contents = text.gsub('#import "CSSValue.h"', '#import "SVGKit/CSSValue.h"')
+ File.open(file, 'w') { |f| f.write(new_contents) }
+ # puts "Patched CSSValue import in: #{file}"
+ end
+
+ # import SVGLength.h
+ Dir.glob(File.join(svgkit_path, '**', '*.{h,m}')).each do |file|
+ FileUtils.chmod("u+w", file)
+ text = File.read(file)
+ new_contents = text.gsub('#import "SVGLength.h"', '#import "SVGKit/SVGLength.h"')
+ File.open(file, 'w') { |f| f.write(new_contents) }
+ # puts "Patched SVGLength import in: #{file}"
+ end
end
end
diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock
index 60981f1..413288b 100644
--- a/example/ios/Podfile.lock
+++ b/example/ios/Podfile.lock
@@ -1819,6 +1819,93 @@ PODS:
- React-RCTFBReactNativeSpec
- ReactCommon/turbomodule/core
- SocketRocket
+ - react-native-safe-area-context (5.6.1):
+ - boost
+ - DoubleConversion
+ - fast_float
+ - fmt
+ - glog
+ - hermes-engine
+ - RCT-Folly
+ - RCT-Folly/Fabric
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-ImageManager
+ - React-jsi
+ - react-native-safe-area-context/common (= 5.6.1)
+ - react-native-safe-area-context/fabric (= 5.6.1)
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-renderercss
+ - React-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - SocketRocket
+ - Yoga
+ - react-native-safe-area-context/common (5.6.1):
+ - boost
+ - DoubleConversion
+ - fast_float
+ - fmt
+ - glog
+ - hermes-engine
+ - RCT-Folly
+ - RCT-Folly/Fabric
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-ImageManager
+ - React-jsi
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-renderercss
+ - React-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - SocketRocket
+ - Yoga
+ - react-native-safe-area-context/fabric (5.6.1):
+ - boost
+ - DoubleConversion
+ - fast_float
+ - fmt
+ - glog
+ - hermes-engine
+ - RCT-Folly
+ - RCT-Folly/Fabric
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-ImageManager
+ - React-jsi
+ - react-native-safe-area-context/common
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-renderercss
+ - React-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - SocketRocket
+ - Yoga
- React-NativeModulesApple (0.82.0):
- boost
- DoubleConversion
@@ -2358,6 +2445,35 @@ PODS:
- React-perflogger (= 0.82.0)
- React-utils (= 0.82.0)
- SocketRocket
+ - RNGestureHandler (2.28.0):
+ - boost
+ - DoubleConversion
+ - fast_float
+ - fmt
+ - glog
+ - hermes-engine
+ - RCT-Folly
+ - RCT-Folly/Fabric
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-debug
+ - React-Fabric
+ - React-FabricComponents
+ - React-featureflags
+ - React-graphics
+ - React-ImageManager
+ - React-jsi
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-renderercss
+ - React-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - SocketRocket
+ - Yoga
- RNGoogleMapsPlus (1.1.0-dev.5):
- boost
- DoubleConversion
@@ -2391,6 +2507,246 @@ PODS:
- SocketRocket
- SVGKit (= 3.0.0)
- Yoga
+ - RNReanimated (4.1.3):
+ - boost
+ - DoubleConversion
+ - fast_float
+ - fmt
+ - glog
+ - hermes-engine
+ - RCT-Folly
+ - RCT-Folly/Fabric
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-hermes
+ - React-ImageManager
+ - React-jsi
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-renderercss
+ - React-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - RNReanimated/reanimated (= 4.1.3)
+ - RNWorklets
+ - SocketRocket
+ - Yoga
+ - RNReanimated/reanimated (4.1.3):
+ - boost
+ - DoubleConversion
+ - fast_float
+ - fmt
+ - glog
+ - hermes-engine
+ - RCT-Folly
+ - RCT-Folly/Fabric
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-hermes
+ - React-ImageManager
+ - React-jsi
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-renderercss
+ - React-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - RNReanimated/reanimated/apple (= 4.1.3)
+ - RNWorklets
+ - SocketRocket
+ - Yoga
+ - RNReanimated/reanimated/apple (4.1.3):
+ - boost
+ - DoubleConversion
+ - fast_float
+ - fmt
+ - glog
+ - hermes-engine
+ - RCT-Folly
+ - RCT-Folly/Fabric
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-hermes
+ - React-ImageManager
+ - React-jsi
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-renderercss
+ - React-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - RNWorklets
+ - SocketRocket
+ - Yoga
+ - RNScreens (4.16.0):
+ - boost
+ - DoubleConversion
+ - fast_float
+ - fmt
+ - glog
+ - hermes-engine
+ - RCT-Folly
+ - RCT-Folly/Fabric
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-ImageManager
+ - React-jsi
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-RCTImage
+ - React-renderercss
+ - React-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - RNScreens/common (= 4.16.0)
+ - SocketRocket
+ - Yoga
+ - RNScreens/common (4.16.0):
+ - boost
+ - DoubleConversion
+ - fast_float
+ - fmt
+ - glog
+ - hermes-engine
+ - RCT-Folly
+ - RCT-Folly/Fabric
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-ImageManager
+ - React-jsi
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-RCTImage
+ - React-renderercss
+ - React-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - SocketRocket
+ - Yoga
+ - RNWorklets (0.6.1):
+ - boost
+ - DoubleConversion
+ - fast_float
+ - fmt
+ - glog
+ - hermes-engine
+ - RCT-Folly
+ - RCT-Folly/Fabric
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-hermes
+ - React-ImageManager
+ - React-jsi
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-renderercss
+ - React-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - RNWorklets/worklets (= 0.6.1)
+ - SocketRocket
+ - Yoga
+ - RNWorklets/worklets (0.6.1):
+ - boost
+ - DoubleConversion
+ - fast_float
+ - fmt
+ - glog
+ - hermes-engine
+ - RCT-Folly
+ - RCT-Folly/Fabric
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-hermes
+ - React-ImageManager
+ - React-jsi
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-renderercss
+ - React-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - RNWorklets/worklets/apple (= 0.6.1)
+ - SocketRocket
+ - Yoga
+ - RNWorklets/worklets/apple (0.6.1):
+ - boost
+ - DoubleConversion
+ - fast_float
+ - fmt
+ - glog
+ - hermes-engine
+ - RCT-Folly
+ - RCT-Folly/Fabric
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-hermes
+ - React-ImageManager
+ - React-jsi
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-renderercss
+ - React-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - SocketRocket
+ - Yoga
- SocketRocket (0.7.1)
- SVGKit (3.0.0):
- CocoaLumberjack (~> 3.0)
@@ -2439,6 +2795,7 @@ DEPENDENCIES:
- React-logger (from `../node_modules/react-native/ReactCommon/logger`)
- React-Mapbuffer (from `../node_modules/react-native/ReactCommon`)
- React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`)
+ - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
- React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`)
- React-oscompat (from `../node_modules/react-native/ReactCommon/oscompat`)
- React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`)
@@ -2471,7 +2828,11 @@ DEPENDENCIES:
- ReactAppDependencyProvider (from `build/generated/ios`)
- ReactCodegen (from `build/generated/ios`)
- ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
+ - RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
- RNGoogleMapsPlus (from `../..`)
+ - RNReanimated (from `../node_modules/react-native-reanimated`)
+ - RNScreens (from `../node_modules/react-native-screens`)
+ - RNWorklets (from `../node_modules/react-native-worklets`)
- SocketRocket (~> 0.7.1)
- Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
@@ -2567,6 +2928,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/ReactCommon"
React-microtasksnativemodule:
:path: "../node_modules/react-native/ReactCommon/react/nativemodule/microtasks"
+ react-native-safe-area-context:
+ :path: "../node_modules/react-native-safe-area-context"
React-NativeModulesApple:
:path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios"
React-oscompat:
@@ -2631,8 +2994,16 @@ EXTERNAL SOURCES:
:path: build/generated/ios
ReactCommon:
:path: "../node_modules/react-native/ReactCommon"
+ RNGestureHandler:
+ :path: "../node_modules/react-native-gesture-handler"
RNGoogleMapsPlus:
:path: "../.."
+ RNReanimated:
+ :path: "../node_modules/react-native-reanimated"
+ RNScreens:
+ :path: "../node_modules/react-native-screens"
+ RNWorklets:
+ :path: "../node_modules/react-native-worklets"
Yoga:
:path: "../node_modules/react-native/ReactCommon/yoga"
@@ -2681,6 +3052,7 @@ SPEC CHECKSUMS:
React-logger: 30adf849117e87cf86e88dca1824bb0f18f87e10
React-Mapbuffer: 2a5edca6905cb1b3a40fb7ed3f4496df4f1bc60e
React-microtasksnativemodule: 6d775fdf71445f58dbedbd66ed9cb08b48ae2797
+ react-native-safe-area-context: ee1e8e2a7abf737a8d4d9d1a5686a7f2e7466236
React-NativeModulesApple: b2ee5b48020439fd81d1fd9cba40ebf0c3af5636
React-oscompat: 80ca388c4831481cd03a6b45ecfc82739ca9a95e
React-perflogger: 9725c8b401ca406f52e4bb59bf0b22ef9354f96a
@@ -2713,11 +3085,15 @@ SPEC CHECKSUMS:
ReactAppDependencyProvider: c5c4f5280e4ae0f9f4a739c64c4260fe0b3edaf1
ReactCodegen: 3873d7ac09960375f7845384ff47d53e478462dc
ReactCommon: f5527f5d97a9957ab46eb5db78875d3579e03b97
+ RNGestureHandler: e1cc4de7646eb557ad62d1271d8eac73c304a896
RNGoogleMapsPlus: cdea400ea1e69740d91e07dbb5882d93be4c0a77
+ RNReanimated: 8f0185df21f0dea34ee8c9611ba88c17a290ed9a
+ RNScreens: 2e9c41cd099b1ca50136af8d57c3594214d0086a
+ RNWorklets: ab618bf7d1c7fd2cb793b9f0f39c3e29274b3ebf
SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
SVGKit: 1ad7513f8c74d9652f94ed64ddecda1a23864dea
Yoga: ce55ebb197c21e22b6700cd36e3f36b7ec26e6f8
-PODFILE CHECKSUM: ada9cd8bbcd5ad8a6a2eae598262b8f8bce77633
+PODFILE CHECKSUM: 246331f3f9b61838ac0bd43aa0f04db450c4bd52
COCOAPODS: 1.15.2
diff --git a/example/package.json b/example/package.json
index 3f14cb6..ccbb59e 100644
--- a/example/package.json
+++ b/example/package.json
@@ -5,15 +5,24 @@
"scripts": {
"android": "react-native run-android",
"ios": "react-native run-ios",
- "start": "react-native start",
+ "start": "watchman watch-del-all && react-native start",
"ios:pods": "bundle install && bundle exec pod repo update --verbose && bundle exec pod install --repo-update --project-directory=ios",
"build:android": "react-native build-android",
"build:ios": "react-native build-ios --mode Debug --extra-params 'CODE_SIGNING_ALLOWED=NO CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY=\"\" EXPANDED_CODE_SIGN_IDENTITY=\"\" DEVELOPMENT_TEAM=\"\" COCOAPODS_PARALLEL_CODE_SIGN=false'"
},
"dependencies": {
+ "@react-navigation/native": "7.1.18",
+ "@react-navigation/native-stack": "7.3.27",
+ "@react-navigation/stack": "7.4.9",
"react": "19.1.1",
"react-native": "0.82.0",
- "react-native-nitro-modules": "0.29.8"
+ "react-native-gesture-handler": "2.28.0",
+ "react-native-google-maps-plus": "workspace:*",
+ "react-native-nitro-modules": "0.29.8",
+ "react-native-reanimated": "4.1.3",
+ "react-native-safe-area-context": "5.6.1",
+ "react-native-screens": "4.16.0",
+ "react-native-worklets": "0.6.1"
},
"devDependencies": {
"@babel/core": "7.28.4",
diff --git a/example/src/App.tsx b/example/src/App.tsx
index 619f913..f44ddd3 100644
--- a/example/src/App.tsx
+++ b/example/src/App.tsx
@@ -1,688 +1,100 @@
import React from 'react';
import {
- View,
- StyleSheet,
- ScrollView,
- TouchableOpacity,
- Text,
-} from 'react-native';
-import { useEffect, useMemo, useRef, useState } from 'react';
-import { RNAndroidLocationPriority, RNIOSLocationAccuracy } from '../../src';
-import type {
- RNCamera,
- RNMapStyleElement,
- RNMarker,
- RNPolygon,
- RNPolyline,
- RNLocation,
- GoogleMapsViewRef,
- RNRegion,
- RNLatLng,
- RNCircle,
- RNHeatmap,
-} from '../../src';
-import { GoogleMapsView, GoogleMapsModule } from '../../src';
-import { callback } from 'react-native-nitro-modules';
-
-const standardMapStyle: RNMapStyleElement[] = [
- {
- featureType: 'poi.attraction',
- stylers: [
- {
- visibility: 'off',
- },
- ],
- },
- {
- featureType: 'poi.business',
- stylers: [
- {
- visibility: 'off',
- },
- ],
- },
- {
- featureType: 'poi.government',
- stylers: [
- {
- visibility: 'off',
- },
- ],
- },
- {
- featureType: 'poi.medical',
- stylers: [
- {
- visibility: 'off',
- },
- ],
- },
- {
- featureType: 'poi.park',
- elementType: 'labels.icon',
- stylers: [
- {
- visibility: 'off',
- },
- ],
- },
- {
- featureType: 'poi.place_of_worship',
- stylers: [
- {
- visibility: 'off',
- },
- ],
- },
- {
- featureType: 'poi.school',
- stylers: [
- {
- visibility: 'off',
- },
- ],
- },
- {
- featureType: 'poi.sports_complex',
- stylers: [
- {
- visibility: 'off',
- },
- ],
- },
-];
-
-const silverMapStyle: RNMapStyleElement[] = [
- {
- featureType: 'poi.attraction',
- stylers: [
- {
- visibility: 'off',
- },
- ],
- },
- {
- featureType: 'poi.business',
- stylers: [
- {
- visibility: 'off',
- },
- ],
- },
- {
- featureType: 'poi.government',
- stylers: [
- {
- visibility: 'off',
- },
- ],
- },
- {
- featureType: 'poi.medical',
- stylers: [
- {
- visibility: 'off',
- },
- ],
- },
- {
- featureType: 'poi.park',
- elementType: 'labels.icon',
- stylers: [
- {
- visibility: 'off',
- },
- ],
- },
- {
- featureType: 'poi.place_of_worship',
- stylers: [
- {
- visibility: 'off',
- },
- ],
- },
- {
- featureType: 'poi.school',
- stylers: [
- {
- visibility: 'off',
- },
- ],
- },
- {
- featureType: 'poi.sports_complex',
- stylers: [
- {
- visibility: 'off',
- },
- ],
- },
- {
- featureType: 'water',
- elementType: 'geometry',
- stylers: [
- {
- color: '#ff0000',
- },
- ],
- },
- {
- featureType: 'water',
- elementType: 'labels.text.fill',
- stylers: [
- {
- color: '#ff0000',
- },
- ],
- },
-];
-
-const kmlString = `
-
-
-
- Example KML Data
- Example with marker, polygon and circle shifted further northeast of San Francisco
-
-
- Center Point
-
- -122.4156,37.7781,0
-
-
-
-
- Example Polygon
-
-
-
-
-
- -122.4206,37.7826,0
- -122.4106,37.7826,0
- -122.4106,37.7746,0
- -122.4206,37.7746,0
- -122.4206,37.7826,0
-
-
-
-
-
-
-
- Approximate Circle
-
-
-
-
-
- -122.4156,37.7801,0
- -122.4136,37.7801,0
- -122.4136,37.7761,0
- -122.4156,37.7761,0
- -122.4176,37.7761,0
- -122.4176,37.7801,0
- -122.4156,37.7801,0
-
-
-
-
-
-
-
-
-`.trim();
-
-function makeSvgIcon(width: number, height: number): string {
- const color = randomColor();
- return `
-
- `;
-}
-
-function randomColor() {
- return '#' + Math.floor(Math.random() * 16777215).toString(16);
-}
-
-const randomCoordinates = (
- baseLat: number,
- baseLng: number,
- offset = 0.01
-) => ({
- latitude: baseLat + (Math.random() - 0.5) * offset,
- longitude: baseLng + (Math.random() - 0.5) * offset,
-});
-
-const randomWeightedCoordinates = (
- baseLat: number,
- baseLng: number,
- offset = 0.01
-) => ({
- latitude: baseLat + (Math.random() - 0.5) * offset,
- longitude: baseLng + (Math.random() - 0.5) * offset,
- weight: Math.floor(Math.random() * (100 - 10 + 1)) + 10,
-});
-
-const makePolygon = (id: number): RNPolygon => ({
- id: id.toString(),
- zIndex: id,
- pressable: true,
- coordinates: [
- randomCoordinates(37.7749, -122.4194, 0.01),
- randomCoordinates(37.7749, -122.4194, 0.01),
- randomCoordinates(37.7749, -122.4194, 0.01),
- randomCoordinates(37.7749, -122.4194, 0.01),
- ],
- fillColor: '#0000ff',
- strokeColor: '#ff0000',
- strokeWidth: 1 + (id % 5),
-});
-
-const makePolyline = (id: number): RNPolyline => ({
- id: id.toString(),
- zIndex: id,
- pressable: true,
- coordinates: [
- randomCoordinates(37.7749, -122.4194, 0.02),
- randomCoordinates(37.7749, -122.4194, 0.02),
- randomCoordinates(37.7749, -122.4194, 0.02),
- ],
-
- lineCap: id % 2 === 0 ? 'round' : 'square',
- lineJoin: id % 3 === 0 ? 'bevel' : 'round',
- color: id % 2 === 0 ? '#00ff00' : '#ff0000',
- width: 2 + (id % 4),
-});
-
-const makeCircle = (id: number): RNCircle => ({
- id: id.toString(),
- zIndex: id,
- pressable: true,
- center: randomCoordinates(37.7749, -122.4194, 0.02),
- radius: 100 + (id % 5),
- strokeWidth: 1 + (id % 5),
- strokeColor: '#ff0000',
- fillColor: '#0000ff',
-});
-
-const makeHeatmap = (id: number): RNHeatmap => ({
- id: id.toString(),
- zIndex: id,
- weightedData: [
- randomWeightedCoordinates(37.7749, -122.4194, 0.02),
- randomWeightedCoordinates(37.7749, -122.4194, 0.03),
- randomWeightedCoordinates(37.7749, -122.4194, 0.05),
- randomWeightedCoordinates(37.7749, -122.4194, 0.01),
- randomWeightedCoordinates(37.7749, -122.4194, 0.08),
- randomWeightedCoordinates(37.7749, -122.4194, 0.03),
- randomWeightedCoordinates(37.7749, -122.4194, 0.09),
- ],
- gradient: {
- colors: ['#00f', '#0ff', '#0f0', '#ff0', '#f00'],
- startPoints: [0.1, 0.3, 0.5, 0.7, 1],
- colorMapSize: 256,
- },
- radius: 100,
- opacity: 1,
-});
-
-export const makeMarker = (id: number): RNMarker => ({
- id: id.toString(),
- zIndex: id,
- coordinate: randomCoordinates(37.7749, -122.4194, 0.2),
- anchor: { x: 0.5, y: 1.0 },
- iconSvg:
- id % 2 === 0
- ? {
- width: (64 / 100) * 50,
- height: (88 / 100) * 50,
- svgString: makeSvgIcon(64, 88),
- }
- : undefined,
-});
+ NavigationContainer,
+ DefaultTheme,
+ DarkTheme,
+} from '@react-navigation/native';
+import { createStackNavigator } from '@react-navigation/stack';
+
+import HomeScreen from './screens/HomeScreen';
+import BasicMapScreen from './screens/BasicMapScreen';
+import MarkersScreen from './screens/MarkersScreen';
+import PolygonsScreen from './screens/PolygonsScreen';
+import PolylinesScreen from './screens/PolylinesScreen';
+import CirclesScreen from './screens/CirclesScreen';
+import HeatmapScreen from './screens/HeatmapScreen';
+import KmlLayerScreen from './screens/KmlLayerScreen';
+import LocationScreen from './screens/LocationScreen';
+import CustomStyleScreen from './screens/CustomStyleScreen';
+import StressTestScreen from './screens/StressTestScreen';
+import { GestureHandlerRootView } from 'react-native-gesture-handler';
+import { useColorScheme } from 'react-native';
+
+const Stack = createStackNavigator();
export default function App() {
- const mapRef = useRef(null);
- const [stressTest, setStressTest] = useState(false);
- const [normalStyle, setNormalStyle] = useState(true);
- const [controlButtonsExpanded, setControlButtonsExpanded] = useState(false);
-
- const [initialProps] = useState({
- /// mapStyle not working with mapId
- /// mapId: '111',
- camera: {
- center: {
- latitude: 37.7749,
- longitude: -122.4194,
- },
- zoom: 15,
- },
- });
-
- const [uiSettings] = useState({
- allGesturesEnabled: true,
- compassEnabled: true,
- indoorLevelPickerEnabled: true,
- mapToolbarEnabled: true,
- myLocationButtonEnabled: true,
- rotateEnabled: true,
- scrollEnabled: true,
- scrollDuringRotateOrZoomEnabled: true,
- tiltEnabled: true,
- zoomControlsEnabled: true,
- zoomGesturesEnabled: true,
- });
-
- const [mapPadding] = useState({
- top: 20,
- left: 20,
- bottom: 20,
- right: 20,
- });
-
- const [mapZoomConfig] = useState({
- min: 0,
- max: 20,
- });
-
- const [locationConfig] = useState({
- android: {
- priority: RNAndroidLocationPriority.PRIORITY_BALANCED_POWER_ACCURACY,
- interval: 5000,
- minUpdateInterval: 5000,
- },
- ios: {
- desiredAccuracy: RNIOSLocationAccuracy.ACCURACY_BEST,
- distanceFilterMeters: 10,
- },
- });
-
- const [markers, setMaker] = useState(
- Array.from({ length: 0 }, (_, i) => makeMarker(i + 1))
- );
-
- const [polygons] = useState(
- Array.from({ length: 1 }, (_, i) => makePolygon(i + 1))
- );
-
- const [polylines] = useState(
- Array.from({ length: 1 }, (_, i) => makePolyline(i + 1))
- );
-
- const [circles] = useState(
- Array.from({ length: 1 }, (_, i) => makeCircle(i + 1))
- );
-
- const [heatmaps] = useState(
- Array.from({ length: 1 }, (_, i) => makeHeatmap(i + 1))
- );
-
- const [kmlLayers] = useState([{ id: '21', zIndex: 1, kmlString }]);
-
- useEffect(() => {
- if (!stressTest) return;
-
- const interval = setInterval(() => {
- setMaker((m) => {
- const newMarkers = [...m];
- while (newMarkers.length > 100) {
- newMarkers.shift();
- }
- for (let i = 0; i < 500; i++) {
- newMarkers.push(makeMarker(newMarkers.length + 1));
- }
-
- return newMarkers;
- });
- }, 100);
-
- return () => clearInterval(interval);
- }, [stressTest]);
-
- const mapStyle = useMemo(
- () => JSON.stringify(normalStyle ? standardMapStyle : silverMapStyle),
- [normalStyle]
- );
-
- const buttons = useMemo(() => {
- return [
- {
- title: 'Set Camera',
- onPress: () => {
- const camera = {
- center: { latitude: 37.7749, longitude: -122.4194 },
- zoom: 15,
- };
- mapRef.current?.setCamera(camera, true, 350);
- },
- },
- {
- title: 'Set Camera to coordinates',
- onPress: () => {
- mapRef.current?.setCameraToCoordinates(
- markers.map((e) => e.coordinate),
- { top: 0, left: 0, bottom: 0, right: 0 },
- true,
- 350
- );
- },
- },
- {
- title: `${stressTest ? 'Stop' : 'Start'} stress test`,
- onPress: () => setStressTest(!stressTest),
- },
- {
- title: 'request location permission',
- onPress: async () => {
- const permission = await mapRef.current?.requestLocationPermission();
- console.log('Permission request result', permission);
- },
- },
- {
- title: 'Test Nitro module',
- onPress: () => {
- GoogleMapsModule.openLocationSettings();
- },
- },
- {
- title: `Style: ${normalStyle ? 'Normal' : 'Standard'}`,
- onPress: () => setNormalStyle(!normalStyle),
- },
- {
- title: 'Marker -1',
- onPress: () => setMaker(markers.slice(0, markers.length - 1)),
- },
- {
- title: 'Marker +1',
- onPress: () => setMaker([...markers, makeMarker(markers.length + 1)]),
- },
- {
- title: 'isGooglePlayServicesAvailable',
- onPress: () =>
- console.log(mapRef.current?.isGooglePlayServicesAvailable()),
- },
- ];
- }, [markers, normalStyle, stressTest]);
-
+ const scheme = useColorScheme();
return (
-
- {
- mapRef.current = ref;
- },
- }}
- initialProps={initialProps}
- uiSettings={uiSettings}
- onMapReady={callback((ready) => console.log('Map is ready! ' + ready))}
- style={styles.map}
- myLocationEnabled={true}
- buildingEnabled={true}
- trafficEnabled={true}
- indoorEnabled={true}
- customMapStyle={mapStyle}
- userInterfaceStyle={'light'}
- mapType={'normal'}
- mapZoomConfig={mapZoomConfig}
- mapPadding={mapPadding}
- locationConfig={locationConfig}
- onMapPress={{
- f: function (coordinate: RNLatLng): void {
- console.log('Map pressed', coordinate);
- },
- }}
- onMarkerPress={{
- f: function (id: string): void {
- console.log('Marker pressed', id);
- },
- }}
- onPolylinePress={{
- f: function (id: string): void {
- console.log('Polyline pressed', id);
- },
- }}
- onPolygonPress={{
- f: function (id: string): void {
- console.log('Polygon pressed', id);
- },
- }}
- onCirclePress={{
- f: function (id: string): void {
- console.log('Circle pressed', id);
- },
- }}
- onCameraChangeStart={{
- f: function (
- region: RNRegion,
- camera: RNCamera,
- isGesture: boolean
- ): void {
- console.log('Camera change started:', region, camera, isGesture);
- },
- }}
- onCameraChange={{
- f: function (
- region: RNRegion,
- camera: RNCamera,
- isGesture: boolean
- ): void {
- console.log('Camera change:', region, camera, isGesture);
- },
- }}
- onCameraChangeComplete={{
- f: function (
- region: RNRegion,
- camera: RNCamera,
- isGesture: boolean
- ): void {
- console.log('Camera change completed:', region, camera, isGesture);
- },
- }}
- onLocationUpdate={{
- f: function (l: RNLocation): void {
- console.log('Location updated:', l);
- },
- }}
- onLocationError={{
- f: function (error): void {
- console.log('Location error:', error);
- },
- }}
- markers={markers}
- polygons={polygons}
- polylines={polylines}
- circles={circles}
- heatmaps={heatmaps}
- kmlLayers={kmlLayers}
- />
-
-
- setControlButtonsExpanded(!controlButtonsExpanded)}
- activeOpacity={0.8}
+
+
+ ({
+ headerShown: true,
+ headerTitleAlign: 'center',
+ headerStyle: { backgroundColor: theme.colors.card },
+ headerTintColor: theme.colors.text,
+ contentStyle: { backgroundColor: theme.colors.background },
+ })}
>
-
- {controlButtonsExpanded ? 'Hide Controls' : 'Show Controls'}
-
-
-
- {controlButtonsExpanded && (
-
- {buttons.map((btn, i) => (
-
- {btn.title}
-
- ))}
-
- )}
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
);
}
-
-const styles = StyleSheet.create({
- container: {
- flex: 1,
- alignItems: 'center',
- justifyContent: 'center',
- },
- map: {
- position: 'absolute',
- left: 0,
- right: 0,
- top: 0,
- bottom: 0,
- },
- scrollView: { position: 'absolute', bottom: 0, padding: 10 },
- header: {
- padding: 10,
- backgroundColor: 'red',
- borderRadius: 8,
- marginBottom: 10,
- },
- headerText: { fontWeight: '600', fontSize: 16 },
- buttonList: { gap: 5 },
- button: {
- backgroundColor: 'blue',
- paddingVertical: 12,
- paddingHorizontal: 16,
- borderRadius: 12,
- marginBottom: 10,
- alignItems: 'center',
- shadowColor: '#000',
- shadowOffset: { width: 0, height: 2 },
- shadowOpacity: 0.15,
- shadowRadius: 4,
- elevation: 3,
- },
- buttonText: { color: '#fff', fontWeight: '600', fontSize: 15 },
-});
diff --git a/example/src/components/ControlPanel.tsx b/example/src/components/ControlPanel.tsx
new file mode 100644
index 0000000..ef81b1f
--- /dev/null
+++ b/example/src/components/ControlPanel.tsx
@@ -0,0 +1,176 @@
+import React, { useMemo } from 'react';
+import {
+ View,
+ Text,
+ TouchableOpacity,
+ ScrollView,
+ StyleSheet,
+} from 'react-native';
+import Animated, {
+ useSharedValue,
+ useAnimatedStyle,
+ withTiming,
+ interpolate,
+ Extrapolation,
+} from 'react-native-reanimated';
+import type { GoogleMapsViewRef } from 'react-native-google-maps-plus';
+import { useAppTheme } from '../theme';
+
+export type ButtonItem = { title: string; onPress: () => void };
+
+type Props = {
+ mapRef: React.RefObject;
+ buttons: ButtonItem[];
+};
+
+export default function ControlPanel({ mapRef, buttons }: Props) {
+ const theme = useAppTheme();
+ const progress = useSharedValue(0);
+
+ const toggle = () => {
+ progress.value = withTiming(progress.value === 1 ? 0 : 1, {
+ duration: 280,
+ });
+ };
+
+ const finalButtons = useMemo(
+ () => [
+ ...buttons,
+ {
+ title: 'Request location permission',
+ onPress: async () => {
+ const res = await mapRef.current?.requestLocationPermission();
+ console.log('Permission result', res);
+ },
+ },
+ {
+ title: 'Show location dialog',
+ onPress: () => console.log(mapRef.current?.showLocationDialog()),
+ },
+ {
+ title: 'Open location settings',
+ onPress: () => console.log(mapRef.current?.openLocationSettings()),
+ },
+ {
+ title: 'Check Google Play Services',
+ onPress: () =>
+ console.log(mapRef.current?.isGooglePlayServicesAvailable()),
+ },
+ ],
+ [buttons, mapRef]
+ );
+
+ const buttonHeight = 52;
+ const maxHeight = finalButtons.length * buttonHeight;
+
+ const containerStyle = useAnimatedStyle(() => ({
+ height: interpolate(
+ progress.value,
+ [0, 1],
+ [0, maxHeight],
+ Extrapolation.CLAMP
+ ),
+ opacity: progress.value,
+ }));
+
+ const arrowStyle = useAnimatedStyle(() => ({
+ transform: [
+ {
+ rotate: `${interpolate(progress.value, [0, 1], [0, 180])}deg`,
+ },
+ ],
+ }));
+
+ return (
+
+
+
+ Controls
+
+
+ ▼
+
+
+
+
+
+ {finalButtons.map((btn, i) => (
+
+
+ {btn.title}
+
+
+ ))}
+
+
+
+ );
+}
+
+const styles = StyleSheet.create({
+ scrollView: {
+ position: 'absolute',
+ bottom: 0,
+ left: 0,
+ right: 0,
+ paddingHorizontal: 12,
+ paddingTop: 12,
+ },
+ scrollContent: {
+ paddingBottom: 40,
+ },
+ header: {
+ borderRadius: 10,
+ paddingVertical: 12,
+ alignItems: 'center',
+ marginBottom: 10,
+ flexDirection: 'row',
+ justifyContent: 'center',
+ },
+ headerText: {
+ fontWeight: '600',
+ fontSize: 16,
+ marginRight: 6,
+ },
+ arrow: {
+ fontSize: 14,
+ fontWeight: '600',
+ },
+ animatedContainer: {
+ overflow: 'hidden',
+ },
+ buttonList: {
+ gap: 8,
+ },
+ button: {
+ paddingVertical: 12,
+ borderRadius: 10,
+ alignItems: 'center',
+ justifyContent: 'center',
+ shadowOffset: { width: 0, height: 2 },
+ shadowOpacity: 0.25,
+ shadowRadius: 4,
+ elevation: 1,
+ },
+ buttonText: {
+ fontWeight: '600',
+ fontSize: 15,
+ },
+});
diff --git a/example/src/components/MapWrapper.tsx b/example/src/components/MapWrapper.tsx
new file mode 100644
index 0000000..d6075fd
--- /dev/null
+++ b/example/src/components/MapWrapper.tsx
@@ -0,0 +1,192 @@
+import React, { useMemo } from 'react';
+import { StyleSheet, useColorScheme, View } from 'react-native';
+import { GoogleMapsView } from 'react-native-google-maps-plus';
+import type {
+ GoogleMapsViewRef,
+ RNGoogleMapsPlusViewProps,
+ RNCamera,
+ RNLocation,
+ RNRegion,
+ RNLatLng,
+} from 'react-native-google-maps-plus';
+import {
+ RNAndroidLocationPriority,
+ RNIOSLocationAccuracy,
+} from 'react-native-google-maps-plus';
+import type { ViewProps } from 'react-native';
+import { useSafeAreaInsets } from 'react-native-safe-area-context';
+
+type Props = ViewProps &
+ RNGoogleMapsPlusViewProps & {
+ mapRef: React.RefObject;
+ children?: React.ReactNode;
+ };
+
+export default function MapWrapper(props: Props) {
+ const { children, ...rest } = props;
+ const scheme = useColorScheme();
+ const layout = useSafeAreaInsets();
+ const initialProps = useMemo(
+ () => ({
+ camera: {
+ center: { latitude: 37.7749, longitude: -122.4194 },
+ zoom: 12,
+ },
+ }),
+ []
+ );
+
+ const uiSettings = useMemo(
+ () => ({
+ allGesturesEnabled: true,
+ compassEnabled: true,
+ indoorLevelPickerEnabled: true,
+ mapToolbarEnabled: true,
+ myLocationButtonEnabled: true,
+ rotateEnabled: true,
+ scrollEnabled: true,
+ scrollDuringRotateOrZoomEnabled: true,
+ tiltEnabled: true,
+ zoomControlsEnabled: true,
+ zoomGesturesEnabled: true,
+ }),
+ []
+ );
+
+ const mapPadding = useMemo(
+ () => ({ top: 20, left: 20, bottom: layout.bottom + 80, right: 20 }),
+ [layout.bottom]
+ );
+
+ const mapZoomConfig = useMemo(() => ({ min: 0, max: 20 }), []);
+
+ const locationConfig = useMemo(
+ () => ({
+ android: {
+ priority: RNAndroidLocationPriority.PRIORITY_BALANCED_POWER_ACCURACY,
+ interval: 5000,
+ minUpdateInterval: 5000,
+ },
+ ios: {
+ desiredAccuracy: RNIOSLocationAccuracy.ACCURACY_BEST,
+ distanceFilterMeters: 10,
+ },
+ }),
+ []
+ );
+
+ return (
+
+ {
+ props.mapRef.current = ref;
+ },
+ }}
+ initialProps={props.initialProps ?? initialProps}
+ uiSettings={props.uiSettings ?? uiSettings}
+ style={[styles.map, props.style]}
+ userInterfaceStyle={
+ (props.userInterfaceStyle ?? scheme === 'dark') ? 'dark' : 'light'
+ }
+ mapType={props.mapType ?? 'normal'}
+ mapZoomConfig={props.mapZoomConfig ?? mapZoomConfig}
+ mapPadding={props.mapPadding ?? mapPadding}
+ locationConfig={props.locationConfig ?? locationConfig}
+ onMapReady={
+ props.onMapReady
+ ? {
+ f: (ready: boolean) => console.log('Map is ready! ' + ready),
+ }
+ : undefined
+ }
+ onMapPress={
+ props.onMapPress
+ ? {
+ f: (c: RNLatLng) => console.log('Map press:', c),
+ }
+ : undefined
+ }
+ onMarkerPress={
+ props.onMarkerPress
+ ? {
+ f: (id: string) => console.log('Marker press:', id),
+ }
+ : undefined
+ }
+ onPolylinePress={
+ props.onPolylinePress
+ ? {
+ f: (id: string) => console.log('Polyline press:', id),
+ }
+ : undefined
+ }
+ onPolygonPress={
+ props.onPolygonPress
+ ? {
+ f: (id: string) => console.log('Polygon press:', id),
+ }
+ : undefined
+ }
+ onCirclePress={
+ props.onCirclePress
+ ? {
+ f: (id: string) => console.log('Circle press:', id),
+ }
+ : undefined
+ }
+ onCameraChangeStart={
+ props.onCameraChangeStart
+ ? {
+ f: (r: RNRegion, cam: RNCamera, g: boolean) =>
+ console.log('Cam start', r, cam, g),
+ }
+ : undefined
+ }
+ onCameraChange={
+ props.onCameraChange
+ ? {
+ f: (r: RNRegion, cam: RNCamera, g: boolean) =>
+ console.log('Cam', r, cam, g),
+ }
+ : undefined
+ }
+ onCameraChangeComplete={
+ props.onCameraChangeComplete
+ ? {
+ f: (r: RNRegion, cam: RNCamera, g: boolean) =>
+ console.log('Cam complete', r, cam, g),
+ }
+ : undefined
+ }
+ onLocationUpdate={
+ props.onLocationUpdate
+ ? {
+ f: (l: RNLocation) => console.log('Location', l),
+ }
+ : undefined
+ }
+ onLocationError={
+ props.onLocationError
+ ? {
+ f: (e: any) => console.log('Location error', e),
+ }
+ : undefined
+ }
+ />
+ {children}
+
+ );
+}
+
+const styles = StyleSheet.create({
+ container: { flex: 1 },
+ map: {
+ position: 'absolute',
+ left: 0,
+ right: 0,
+ top: 0,
+ bottom: 0,
+ },
+});
diff --git a/example/src/screens/BasicMapScreen.tsx b/example/src/screens/BasicMapScreen.tsx
new file mode 100644
index 0000000..7a8048b
--- /dev/null
+++ b/example/src/screens/BasicMapScreen.tsx
@@ -0,0 +1,14 @@
+import React, { useRef } from 'react';
+import MapWrapper from '../components/MapWrapper';
+import type { GoogleMapsViewRef } from 'react-native-google-maps-plus';
+import ControlPanel from '../components/ControlPanel';
+
+export default function BasicMapScreen() {
+ const mapRef = useRef(null);
+
+ return (
+
+
+
+ );
+}
diff --git a/example/src/screens/CirclesScreen.tsx b/example/src/screens/CirclesScreen.tsx
new file mode 100644
index 0000000..a215fa6
--- /dev/null
+++ b/example/src/screens/CirclesScreen.tsx
@@ -0,0 +1,10 @@
+import React, { useRef } from 'react';
+import MapWrapper from '../components/MapWrapper';
+import { makeCircle } from '../utils/mapGenerators';
+import type { GoogleMapsViewRef } from 'react-native-google-maps-plus';
+
+export default function CirclesScreen() {
+ const mapRef = useRef(null);
+ const circles = [makeCircle(1)];
+ return ;
+}
diff --git a/example/src/screens/CustomStyleScreen.tsx b/example/src/screens/CustomStyleScreen.tsx
new file mode 100644
index 0000000..0141db6
--- /dev/null
+++ b/example/src/screens/CustomStyleScreen.tsx
@@ -0,0 +1,31 @@
+import React, { useMemo, useRef, useState } from 'react';
+import MapWrapper from '../components/MapWrapper';
+import ControlPanel from '../components/ControlPanel';
+import { standardMapStyle, silverMapStyle } from '../utils/mapStyles';
+import type { GoogleMapsViewRef } from 'react-native-google-maps-plus';
+
+export default function CustomStyleScreen() {
+ const mapRef = useRef(null);
+
+ const [normalStyle, setNormalStyle] = useState(true);
+ const customMapStyle = useMemo(
+ () => JSON.stringify(normalStyle ? standardMapStyle : silverMapStyle),
+ [normalStyle]
+ );
+
+ const buttons = useMemo(
+ () => [
+ {
+ title: `Style: ${normalStyle ? 'Normal' : 'Standard'}`,
+ onPress: () => setNormalStyle(!normalStyle),
+ },
+ ],
+ [normalStyle]
+ );
+
+ return (
+
+
+
+ );
+}
diff --git a/example/src/screens/HeatmapScreen.tsx b/example/src/screens/HeatmapScreen.tsx
new file mode 100644
index 0000000..7f9fa7e
--- /dev/null
+++ b/example/src/screens/HeatmapScreen.tsx
@@ -0,0 +1,10 @@
+import React, { useRef } from 'react';
+import MapWrapper from '../components/MapWrapper';
+import { makeHeatmap } from '../utils/mapGenerators';
+import type { GoogleMapsViewRef } from 'react-native-google-maps-plus';
+
+export default function HeatmapScreen() {
+ const mapRef = useRef(null);
+ const heatmaps = [makeHeatmap(1)];
+ return ;
+}
diff --git a/example/src/screens/HomeScreen.tsx b/example/src/screens/HomeScreen.tsx
new file mode 100644
index 0000000..fb721b1
--- /dev/null
+++ b/example/src/screens/HomeScreen.tsx
@@ -0,0 +1,74 @@
+import React from 'react';
+import { Text, TouchableOpacity, StyleSheet, ScrollView } from 'react-native';
+import type { StackNavigationProp } from '@react-navigation/stack';
+import { useNavigation } from '@react-navigation/native';
+import { useAppTheme } from '../theme';
+
+const screens = [
+ { name: 'BasicMap', title: 'Basic Map' },
+ { name: 'Markers', title: 'Markers' },
+ { name: 'Polygons', title: 'Polygons' },
+ { name: 'Polylines', title: 'Polylines' },
+ { name: 'Circles', title: 'Circles' },
+ { name: 'Heatmap', title: 'Heatmap' },
+ { name: 'KmlLayer', title: 'KML Layer' },
+ { name: 'Location', title: 'Location & Permissions' },
+ { name: 'CustomStyle', title: 'Custom Map Style' },
+ { name: 'StressTest', title: 'Stress Test' },
+];
+
+export default function HomeScreen() {
+ const navigation = useNavigation>();
+ const theme = useAppTheme();
+
+ return (
+
+
+ React Native Google Maps Plus Examples
+
+ {screens.map((s) => (
+ navigation.navigate(s.name)}
+ activeOpacity={0.85}
+ >
+
+ {s.title}
+
+
+ ))}
+
+ );
+}
+
+const styles = StyleSheet.create({
+ container: {
+ flexGrow: 1,
+ alignItems: 'center',
+ justifyContent: 'center',
+ paddingVertical: 40,
+ },
+ title: {
+ fontSize: 18,
+ fontWeight: '600',
+ marginBottom: 20,
+ },
+ button: {
+ paddingVertical: 14,
+ paddingHorizontal: 24,
+ borderRadius: 10,
+ marginVertical: 6,
+ width: '80%',
+ alignItems: 'center',
+ },
+ buttonText: {
+ fontSize: 16,
+ fontWeight: '600',
+ },
+});
diff --git a/example/src/screens/KmlLayerScreen.tsx b/example/src/screens/KmlLayerScreen.tsx
new file mode 100644
index 0000000..66602ed
--- /dev/null
+++ b/example/src/screens/KmlLayerScreen.tsx
@@ -0,0 +1,11 @@
+import React, { useRef } from 'react';
+import MapWrapper from '../components/MapWrapper';
+import { kmlString } from '../utils/kmlData';
+import type { GoogleMapsViewRef } from 'react-native-google-maps-plus';
+
+export default function KmlLayerScreen() {
+ const mapRef = useRef(null);
+
+ const kmlLayers = [{ id: '21', zIndex: 1, kmlString }];
+ return ;
+}
diff --git a/example/src/screens/LocationScreen.tsx b/example/src/screens/LocationScreen.tsx
new file mode 100644
index 0000000..7f5242e
--- /dev/null
+++ b/example/src/screens/LocationScreen.tsx
@@ -0,0 +1,14 @@
+import React, { useRef } from 'react';
+import MapWrapper from '../components/MapWrapper';
+import ControlPanel from '../components/ControlPanel';
+import type { GoogleMapsViewRef } from 'react-native-google-maps-plus';
+
+export default function LocationScreen() {
+ const mapRef = useRef(null);
+
+ return (
+
+
+
+ );
+}
diff --git a/example/src/screens/MarkersScreen.tsx b/example/src/screens/MarkersScreen.tsx
new file mode 100644
index 0000000..bccaf57
--- /dev/null
+++ b/example/src/screens/MarkersScreen.tsx
@@ -0,0 +1,47 @@
+import React, { useMemo, useRef, useState } from 'react';
+import MapWrapper from '../components/MapWrapper';
+import ControlPanel from '../components/ControlPanel';
+import { makeMarker } from '../utils/mapGenerators';
+import type {
+ GoogleMapsViewRef,
+ RNMarker,
+} from 'react-native-google-maps-plus';
+
+export default function MarkersScreen() {
+ const mapRef = useRef(null);
+ const [markers, setMarkers] = useState(
+ Array.from({ length: 2 }, (_, i) => makeMarker(i + 1))
+ );
+
+ const buttons = useMemo(
+ () => [
+ {
+ title: 'Marker +1',
+ onPress: () => setMarkers((m) => [...m, makeMarker(m.length + 1)]),
+ },
+ {
+ title: 'Marker -1',
+ onPress: () => setMarkers((m) => m.slice(0, Math.max(0, m.length - 1))),
+ },
+ {
+ title: 'Fit to markers',
+ onPress: () => {
+ const coords = markers.map((m) => m.coordinate);
+ mapRef.current?.setCameraToCoordinates(
+ coords,
+ { top: 0, left: 0, bottom: 0, right: 0 },
+ true,
+ 300
+ );
+ },
+ },
+ ],
+ [markers]
+ );
+
+ return (
+
+
+
+ );
+}
diff --git a/example/src/screens/PolygonsScreen.tsx b/example/src/screens/PolygonsScreen.tsx
new file mode 100644
index 0000000..8f2df34
--- /dev/null
+++ b/example/src/screens/PolygonsScreen.tsx
@@ -0,0 +1,11 @@
+import React, { useRef } from 'react';
+import MapWrapper from '../components/MapWrapper';
+import { makePolygon } from '../utils/mapGenerators';
+import type { GoogleMapsViewRef } from 'react-native-google-maps-plus';
+
+export default function PolygonsScreen() {
+ const mapRef = useRef(null);
+
+ const polygons = [makePolygon(1)];
+ return ;
+}
diff --git a/example/src/screens/PolylinesScreen.tsx b/example/src/screens/PolylinesScreen.tsx
new file mode 100644
index 0000000..fa3aaff
--- /dev/null
+++ b/example/src/screens/PolylinesScreen.tsx
@@ -0,0 +1,10 @@
+import React, { useRef } from 'react';
+import MapWrapper from '../components/MapWrapper';
+import { makePolyline } from '../utils/mapGenerators';
+import type { GoogleMapsViewRef } from 'react-native-google-maps-plus';
+
+export default function PolylinesScreen() {
+ const mapRef = useRef(null);
+ const polylines = [makePolyline(1)];
+ return ;
+}
diff --git a/example/src/screens/StressTestScreen.tsx b/example/src/screens/StressTestScreen.tsx
new file mode 100644
index 0000000..f33ecc6
--- /dev/null
+++ b/example/src/screens/StressTestScreen.tsx
@@ -0,0 +1,64 @@
+import React, { useEffect, useMemo, useRef, useState } from 'react';
+import MapWrapper from '../components/MapWrapper';
+import ControlPanel from '../components/ControlPanel';
+import { makeMarker } from '../utils/mapGenerators';
+import type {
+ GoogleMapsViewRef,
+ RNMarker,
+} from 'react-native-google-maps-plus';
+
+export default function StressTestScreen() {
+ const mapRef = useRef(null);
+ const [stressTest, setStressTest] = useState(false);
+ const [markers, setMarkers] = useState([]);
+
+ useEffect(() => {
+ if (!stressTest) return;
+ const interval = setInterval(() => {
+ setMarkers((m) => {
+ const next = [...m];
+ while (next.length > 100) next.shift();
+ for (let i = 0; i < 500; i++) next.push(makeMarker(next.length + 1));
+ return next;
+ });
+ }, 100);
+ return () => clearInterval(interval);
+ }, [stressTest]);
+
+ const buttons = useMemo(
+ () => [
+ {
+ title: stressTest ? 'Stop stress test' : 'Start stress test',
+ onPress: () => setStressTest(!stressTest),
+ },
+ {
+ title: 'Fit to markers',
+ onPress: () => {
+ const coords = markers.map((m) => m.coordinate);
+ if (coords.length)
+ mapRef.current?.setCameraToCoordinates(
+ coords,
+ { top: 0, left: 0, bottom: 0, right: 0 },
+ true,
+ 300
+ );
+ },
+ },
+ {
+ title: 'Marker +1',
+ onPress: () => setMarkers((m) => [...m, makeMarker(m.length + 1)]),
+ },
+ {
+ title: 'Marker -1',
+ onPress: () => setMarkers((m) => m.slice(0, Math.max(0, m.length - 1))),
+ },
+ ],
+ [markers, stressTest]
+ );
+
+ return (
+
+
+
+ );
+}
diff --git a/example/src/theme.ts b/example/src/theme.ts
new file mode 100644
index 0000000..c881ee3
--- /dev/null
+++ b/example/src/theme.ts
@@ -0,0 +1,26 @@
+import { useColorScheme } from 'react-native';
+
+export const lightTheme = {
+ bgPrimary: '#FFFFFF',
+ bgAccent: '#3B82F6',
+ bgHeader: '#E5E7EB',
+ textPrimary: '#111827',
+ textOnAccent: '#FFFFFF',
+ shadow: '#000000',
+};
+
+export const darkTheme = {
+ bgPrimary: '#1E1E1E',
+ bgAccent: '#2D6BE9',
+ bgHeader: '#2C2C2E',
+ textPrimary: '#FFFFFF',
+ textOnAccent: '#FFFFFF',
+ shadow: '#000000',
+};
+
+export type AppTheme = typeof lightTheme;
+
+export function useAppTheme(): AppTheme {
+ const scheme = useColorScheme();
+ return scheme === 'dark' ? darkTheme : lightTheme;
+}
diff --git a/example/src/utils/kmlData.ts b/example/src/utils/kmlData.ts
new file mode 100644
index 0000000..b9ea623
--- /dev/null
+++ b/example/src/utils/kmlData.ts
@@ -0,0 +1,53 @@
+export const kmlString = `
+
+
+ Example KML Data
+ Example with marker, polygon and circle near San Francisco center
+
+ Center Point
+ -122.4194,37.7749,0
+
+
+ Example Polygon
+
+
+
+
+
+ -122.4244,37.7784,0
+ -122.4144,37.7784,0
+ -122.4144,37.7714,0
+ -122.4244,37.7714,0
+ -122.4244,37.7784,0
+
+
+
+
+
+
+ Approximate Circle
+
+
+
+
+
+ -122.4194,37.7770,0
+ -122.4174,37.7770,0
+ -122.4174,37.7730,0
+ -122.4194,37.7730,0
+ -122.4214,37.7730,0
+ -122.4214,37.7770,0
+ -122.4194,37.7770,0
+
+
+
+
+
+
+;`;
diff --git a/example/src/utils/mapGenerators.ts b/example/src/utils/mapGenerators.ts
new file mode 100644
index 0000000..f83e01b
--- /dev/null
+++ b/example/src/utils/mapGenerators.ts
@@ -0,0 +1,122 @@
+import type {
+ RNMarker,
+ RNPolygon,
+ RNPolyline,
+ RNCircle,
+ RNHeatmap,
+} from 'react-native-google-maps-plus';
+
+export function randomColor() {
+ return (
+ '#' +
+ Math.floor(Math.random() * 16777215)
+ .toString(16)
+ .padStart(6, '0')
+ );
+}
+
+export function makeSvgIcon(width: number, height: number): string {
+ const color = randomColor();
+ return `
+`;
+}
+
+export const randomCoordinates = (
+ baseLat: number,
+ baseLng: number,
+ offset = 0.01
+) => ({
+ latitude: baseLat + (Math.random() - 0.5) * offset,
+ longitude: baseLng + (Math.random() - 0.5) * offset,
+});
+
+export const randomWeightedCoordinates = (
+ baseLat: number,
+ baseLng: number,
+ offset = 0.01
+) => ({
+ latitude: baseLat + (Math.random() - 0.5) * offset,
+ longitude: baseLng + (Math.random() - 0.5) * offset,
+ weight: Math.floor(Math.random() * (100 - 10 + 1)) + 10,
+});
+
+export const makePolygon = (id: number): RNPolygon => ({
+ id: id.toString(),
+ zIndex: id,
+ pressable: true,
+ coordinates: [
+ randomCoordinates(37.7749, -122.4194, 0.01),
+ randomCoordinates(37.7749, -122.4194, 0.01),
+ randomCoordinates(37.7749, -122.4194, 0.01),
+ randomCoordinates(37.7749, -122.4194, 0.01),
+ ],
+ fillColor: '#0000ff',
+ strokeColor: '#ff0000',
+ strokeWidth: 1 + (id % 5),
+});
+
+export const makePolyline = (id: number): RNPolyline => ({
+ id: id.toString(),
+ zIndex: id,
+ pressable: true,
+ coordinates: [
+ randomCoordinates(37.7749, -122.4194, 0.02),
+ randomCoordinates(37.7749, -122.4194, 0.02),
+ randomCoordinates(37.7749, -122.4194, 0.02),
+ ],
+ lineCap: id % 2 === 0 ? 'round' : 'square',
+ lineJoin: id % 3 === 0 ? 'bevel' : 'round',
+ color: id % 2 === 0 ? '#00ff00' : '#ff0000',
+ width: 2 + (id % 4),
+});
+
+export const makeCircle = (id: number): RNCircle => ({
+ id: id.toString(),
+ zIndex: id,
+ pressable: true,
+ center: randomCoordinates(37.7749, -122.4194, 0.02),
+ radius: 100 + (id % 5),
+ strokeWidth: 1 + (id % 5),
+ strokeColor: '#ff0000',
+ fillColor: '#0000ff',
+});
+
+export const makeHeatmap = (id: number): RNHeatmap => ({
+ id: id.toString(),
+ zIndex: id,
+ weightedData: [
+ randomWeightedCoordinates(37.7749, -122.4194, 0.02),
+ randomWeightedCoordinates(37.7749, -122.4194, 0.03),
+ randomWeightedCoordinates(37.7749, -122.4194, 0.05),
+ randomWeightedCoordinates(37.7749, -122.4194, 0.01),
+ randomWeightedCoordinates(37.7749, -122.4194, 0.08),
+ randomWeightedCoordinates(37.7749, -122.4194, 0.03),
+ randomWeightedCoordinates(37.7749, -122.4194, 0.09),
+ ],
+ gradient: {
+ colors: ['#00f', '#0ff', '#0f0', '#ff0', '#f00'],
+ startPoints: [0.1, 0.3, 0.5, 0.7, 1],
+ colorMapSize: 256,
+ },
+ radius: 100,
+ opacity: 1,
+});
+
+export const makeMarker = (id: number): RNMarker => ({
+ id: id.toString(),
+ zIndex: id,
+ coordinate: randomCoordinates(37.7749, -122.4194, 0.2),
+ anchor: { x: 0.5, y: 1.0 },
+ iconSvg:
+ id % 2 === 0
+ ? {
+ width: (64 / 100) * 50,
+ height: (88 / 100) * 50,
+ svgString: makeSvgIcon(64, 88),
+ }
+ : undefined,
+});
diff --git a/example/src/utils/mapStyles.ts b/example/src/utils/mapStyles.ts
new file mode 100644
index 0000000..2983969
--- /dev/null
+++ b/example/src/utils/mapStyles.ts
@@ -0,0 +1,41 @@
+import type { RNMapStyleElement } from 'react-native-google-maps-plus';
+
+export const standardMapStyle: RNMapStyleElement[] = [
+ { featureType: 'poi.attraction', stylers: [{ visibility: 'off' }] },
+ { featureType: 'poi.business', stylers: [{ visibility: 'off' }] },
+ { featureType: 'poi.government', stylers: [{ visibility: 'off' }] },
+ { featureType: 'poi.medical', stylers: [{ visibility: 'off' }] },
+ {
+ featureType: 'poi.park',
+ elementType: 'labels.icon',
+ stylers: [{ visibility: 'off' }],
+ },
+ { featureType: 'poi.place_of_worship', stylers: [{ visibility: 'off' }] },
+ { featureType: 'poi.school', stylers: [{ visibility: 'off' }] },
+ { featureType: 'poi.sports_complex', stylers: [{ visibility: 'off' }] },
+];
+
+export const silverMapStyle: RNMapStyleElement[] = [
+ { featureType: 'poi.attraction', stylers: [{ visibility: 'off' }] },
+ { featureType: 'poi.business', stylers: [{ visibility: 'off' }] },
+ { featureType: 'poi.government', stylers: [{ visibility: 'off' }] },
+ { featureType: 'poi.medical', stylers: [{ visibility: 'off' }] },
+ {
+ featureType: 'poi.park',
+ elementType: 'labels.icon',
+ stylers: [{ visibility: 'off' }],
+ },
+ { featureType: 'poi.place_of_worship', stylers: [{ visibility: 'off' }] },
+ { featureType: 'poi.school', stylers: [{ visibility: 'off' }] },
+ { featureType: 'poi.sports_complex', stylers: [{ visibility: 'off' }] },
+ {
+ featureType: 'water',
+ elementType: 'geometry',
+ stylers: [{ color: '#ff0000' }],
+ },
+ {
+ featureType: 'water',
+ elementType: 'labels.text.fill',
+ stylers: [{ color: '#ff0000' }],
+ },
+];
diff --git a/example/tsconfig.json b/example/tsconfig.json
new file mode 100644
index 0000000..28026a9
--- /dev/null
+++ b/example/tsconfig.json
@@ -0,0 +1,10 @@
+{
+ "extends": "../tsconfig.json",
+ "compilerOptions": {
+ "baseUrl": ".",
+ "paths": {
+ "react-native-google-maps-plus": ["../src"]
+ }
+ },
+ "include": ["src", "../src"]
+}
diff --git a/package.json b/package.json
index 5bb24b5..085e59d 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "react-native-google-maps-plus",
- "version": "1.1.0-dev.6",
+ "version": "1.1.0-dev.5",
"description": "React-native wrapper for android & IOS google maps sdk",
"main": "./lib/module/index.js",
"module": "./lib/module/index.js",
diff --git a/yarn.lock b/yarn.lock
index d2c4e1e..c55103b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -659,7 +659,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-arrow-functions@npm:^7.24.7, @babel/plugin-transform-arrow-functions@npm:^7.27.1":
+"@babel/plugin-transform-arrow-functions@npm:^7.0.0-0, @babel/plugin-transform-arrow-functions@npm:^7.24.7, @babel/plugin-transform-arrow-functions@npm:^7.27.1":
version: 7.27.1
resolution: "@babel/plugin-transform-arrow-functions@npm:7.27.1"
dependencies:
@@ -718,7 +718,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-class-properties@npm:^7.25.4, @babel/plugin-transform-class-properties@npm:^7.27.1":
+"@babel/plugin-transform-class-properties@npm:^7.0.0-0, @babel/plugin-transform-class-properties@npm:^7.25.4, @babel/plugin-transform-class-properties@npm:^7.27.1":
version: 7.27.1
resolution: "@babel/plugin-transform-class-properties@npm:7.27.1"
dependencies:
@@ -742,7 +742,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-classes@npm:^7.25.4, @babel/plugin-transform-classes@npm:^7.28.3":
+"@babel/plugin-transform-classes@npm:^7.0.0-0, @babel/plugin-transform-classes@npm:^7.25.4, @babel/plugin-transform-classes@npm:^7.28.3":
version: 7.28.4
resolution: "@babel/plugin-transform-classes@npm:7.28.4"
dependencies:
@@ -1016,7 +1016,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.24.7, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.27.1":
+"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.0.0-0, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.24.7, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.27.1":
version: 7.27.1
resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.27.1"
dependencies:
@@ -1076,7 +1076,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-optional-chaining@npm:^7.24.8, @babel/plugin-transform-optional-chaining@npm:^7.27.1":
+"@babel/plugin-transform-optional-chaining@npm:^7.0.0-0, @babel/plugin-transform-optional-chaining@npm:^7.24.8, @babel/plugin-transform-optional-chaining@npm:^7.27.1":
version: 7.27.1
resolution: "@babel/plugin-transform-optional-chaining@npm:7.27.1"
dependencies:
@@ -1256,7 +1256,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-shorthand-properties@npm:^7.24.7, @babel/plugin-transform-shorthand-properties@npm:^7.27.1":
+"@babel/plugin-transform-shorthand-properties@npm:^7.0.0-0, @babel/plugin-transform-shorthand-properties@npm:^7.24.7, @babel/plugin-transform-shorthand-properties@npm:^7.27.1":
version: 7.27.1
resolution: "@babel/plugin-transform-shorthand-properties@npm:7.27.1"
dependencies:
@@ -1301,7 +1301,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-template-literals@npm:^7.27.1":
+"@babel/plugin-transform-template-literals@npm:^7.0.0-0, @babel/plugin-transform-template-literals@npm:^7.27.1":
version: 7.27.1
resolution: "@babel/plugin-transform-template-literals@npm:7.27.1"
dependencies:
@@ -1361,7 +1361,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-unicode-regex@npm:^7.24.7, @babel/plugin-transform-unicode-regex@npm:^7.27.1":
+"@babel/plugin-transform-unicode-regex@npm:^7.0.0-0, @babel/plugin-transform-unicode-regex@npm:^7.24.7, @babel/plugin-transform-unicode-regex@npm:^7.27.1":
version: 7.27.1
resolution: "@babel/plugin-transform-unicode-regex@npm:7.27.1"
dependencies:
@@ -1494,7 +1494,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/preset-typescript@npm:^7.24.7":
+"@babel/preset-typescript@npm:^7.16.7, @babel/preset-typescript@npm:^7.24.7":
version: 7.27.1
resolution: "@babel/preset-typescript@npm:7.27.1"
dependencies:
@@ -1757,6 +1757,15 @@ __metadata:
languageName: node
linkType: hard
+"@egjs/hammerjs@npm:^2.0.17":
+ version: 2.0.17
+ resolution: "@egjs/hammerjs@npm:2.0.17"
+ dependencies:
+ "@types/hammerjs": ^2.0.36
+ checksum: 8945137cec5837edd70af3f2e0ea621543eb0aa3b667e6269ec6485350f4d120c2434b37c7c30b1cf42a65275dd61c1f24626749c616696d3956ac0c008c4766
+ languageName: node
+ linkType: hard
+
"@emnapi/core@npm:^1.4.3":
version: 1.5.0
resolution: "@emnapi/core@npm:1.5.0"
@@ -2497,9 +2506,9 @@ __metadata:
languageName: node
linkType: hard
-"@npmcli/arborist@npm:^9.1.5":
- version: 9.1.5
- resolution: "@npmcli/arborist@npm:9.1.5"
+"@npmcli/arborist@npm:^9.1.6":
+ version: 9.1.6
+ resolution: "@npmcli/arborist@npm:9.1.6"
dependencies:
"@isaacs/string-locale-compare": ^1.1.0
"@npmcli/fs": ^4.0.0
@@ -2536,13 +2545,13 @@ __metadata:
walk-up-path: ^4.0.0
bin:
arborist: bin/index.js
- checksum: 7d0c7abd89de1d863164ae3b548fb21f5f95df09c334cf78cf7389eea4da0de6590943065545c7031483d9b688bbf197bed647cf6a4aa292f478ec3d6c350346
+ checksum: 03f4bdc4fb4a290e464f27ee275b4f6b02d0206817596b9d8ee8b81f64ca59a6cc580a37e7efb065124df458fb75a957bb14cc1d640d617de013c0b0b29fec4f
languageName: node
linkType: hard
-"@npmcli/config@npm:^10.4.1":
- version: 10.4.1
- resolution: "@npmcli/config@npm:10.4.1"
+"@npmcli/config@npm:^10.4.2":
+ version: 10.4.2
+ resolution: "@npmcli/config@npm:10.4.2"
dependencies:
"@npmcli/map-workspaces": ^5.0.0
"@npmcli/package-json": ^7.0.0
@@ -2552,7 +2561,7 @@ __metadata:
proc-log: ^5.0.0
semver: ^7.3.5
walk-up-path: ^4.0.0
- checksum: 6f3487dc72365b9d968996599183e18e4c463bbdbeb5b03117b23c1fd54fd53909248a6b9a4f81a852ed5f69c3c3bd58a7ef1586bcd760ffcfc73654e4f5186f
+ checksum: d2eba0233fd28db12f80fdf4b94813e1fdc6f0347a60fc2bdefbd51cda3ef04e28896caa5f44a3c1f3f5e439f3e54f99a334be64fb5a5d307bc456c12589e24b
languageName: node
linkType: hard
@@ -3272,6 +3281,101 @@ __metadata:
languageName: node
linkType: hard
+"@react-navigation/core@npm:^7.12.4":
+ version: 7.12.4
+ resolution: "@react-navigation/core@npm:7.12.4"
+ dependencies:
+ "@react-navigation/routers": ^7.5.1
+ escape-string-regexp: ^4.0.0
+ nanoid: ^3.3.11
+ query-string: ^7.1.3
+ react-is: ^19.1.0
+ use-latest-callback: ^0.2.4
+ use-sync-external-store: ^1.5.0
+ peerDependencies:
+ react: ">= 18.2.0"
+ checksum: 84eb6d003d09c271e9e5e8f34c4a440447a82d81df7bd2f87dc4d56f851a5c74b1ec6e488cc2702cf16fde7d33bb55a58fe1dbd14e6cbdd513583b33227c2471
+ languageName: node
+ linkType: hard
+
+"@react-navigation/elements@npm:^2.6.5":
+ version: 2.6.5
+ resolution: "@react-navigation/elements@npm:2.6.5"
+ dependencies:
+ color: ^4.2.3
+ use-latest-callback: ^0.2.4
+ use-sync-external-store: ^1.5.0
+ peerDependencies:
+ "@react-native-masked-view/masked-view": ">= 0.2.0"
+ "@react-navigation/native": ^7.1.18
+ react: ">= 18.2.0"
+ react-native: "*"
+ react-native-safe-area-context: ">= 4.0.0"
+ peerDependenciesMeta:
+ "@react-native-masked-view/masked-view":
+ optional: true
+ checksum: ed6542b9dfaf04693445bb847651cc6bfdac5c2ffb687c1a5dcc473a05d12cd5e951c3ef5df854978aa93b6ced0bab1bbe94390df10cf24f2e3f9b72688661fb
+ languageName: node
+ linkType: hard
+
+"@react-navigation/native-stack@npm:7.3.27":
+ version: 7.3.27
+ resolution: "@react-navigation/native-stack@npm:7.3.27"
+ dependencies:
+ "@react-navigation/elements": ^2.6.5
+ warn-once: ^0.1.1
+ peerDependencies:
+ "@react-navigation/native": ^7.1.18
+ react: ">= 18.2.0"
+ react-native: "*"
+ react-native-safe-area-context: ">= 4.0.0"
+ react-native-screens: ">= 4.0.0"
+ checksum: 7719e78b86e3465a8a51ef302a54c059aa0e7ff38d671c898f71e91265a71843f6fc17ef783ff08e80b00c4f16902cba58f41fdd06efbc735b11a090d7f371d0
+ languageName: node
+ linkType: hard
+
+"@react-navigation/native@npm:7.1.18":
+ version: 7.1.18
+ resolution: "@react-navigation/native@npm:7.1.18"
+ dependencies:
+ "@react-navigation/core": ^7.12.4
+ escape-string-regexp: ^4.0.0
+ fast-deep-equal: ^3.1.3
+ nanoid: ^3.3.11
+ use-latest-callback: ^0.2.4
+ peerDependencies:
+ react: ">= 18.2.0"
+ react-native: "*"
+ checksum: c7f0f6ae439a4d74cc7f42fe693aa014acdaaf3205c07cf40448eac5ef0417a307a08da0b8ad79516028182e3377c77332e40697874ceee3bd8ec52be7f8d459
+ languageName: node
+ linkType: hard
+
+"@react-navigation/routers@npm:^7.5.1":
+ version: 7.5.1
+ resolution: "@react-navigation/routers@npm:7.5.1"
+ dependencies:
+ nanoid: ^3.3.11
+ checksum: 49f04894f7e8b8e2c16abb96bbc1a9775a02341bb00fb9c0d9ce97f8d82613c27570921f2b854f8fd1639c29309df05345aa734124d48bdbcb5a934055b8af12
+ languageName: node
+ linkType: hard
+
+"@react-navigation/stack@npm:7.4.9":
+ version: 7.4.9
+ resolution: "@react-navigation/stack@npm:7.4.9"
+ dependencies:
+ "@react-navigation/elements": ^2.6.5
+ color: ^4.2.3
+ peerDependencies:
+ "@react-navigation/native": ^7.1.18
+ react: ">= 18.2.0"
+ react-native: "*"
+ react-native-gesture-handler: ">= 2.0.0"
+ react-native-safe-area-context: ">= 4.0.0"
+ react-native-screens: ">= 4.0.0"
+ checksum: 2efe2b33cea7a789d47f4721441d3cd66036b8425dbb1abbb4551560b34b8b83e852e9a8b5747d2a6fc4d3ef8ee41c24726e3205731534bf1445e6f77736b4ce
+ languageName: node
+ linkType: hard
+
"@sec-ant/readable-stream@npm:^0.4.1":
version: 0.4.1
resolution: "@sec-ant/readable-stream@npm:0.4.1"
@@ -3658,6 +3762,13 @@ __metadata:
languageName: node
linkType: hard
+"@types/hammerjs@npm:^2.0.36":
+ version: 2.0.46
+ resolution: "@types/hammerjs@npm:2.0.46"
+ checksum: caba6ec788d19905c71092670b58514b3d1f5eee5382bf9205e8df688d51e7857b7994e2dd7aed57fac8977bdf0e456d67fbaf23440a4385b8ce25fe2af1ec39
+ languageName: node
+ linkType: hard
+
"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1, @types/istanbul-lib-coverage@npm:^2.0.6":
version: 2.0.6
resolution: "@types/istanbul-lib-coverage@npm:2.0.6"
@@ -4668,11 +4779,11 @@ __metadata:
linkType: hard
"baseline-browser-mapping@npm:^2.8.9":
- version: 2.8.13
- resolution: "baseline-browser-mapping@npm:2.8.13"
+ version: 2.8.14
+ resolution: "baseline-browser-mapping@npm:2.8.14"
bin:
baseline-browser-mapping: dist/cli.js
- checksum: 62c08d1b9c119c4796e82a65a7d3efd7d4b12abe4495b1112ff629dba0a7994da5359209f3f77618402f4f6f554d12b667252389fa6b5a08cbc8b9c3a137a009
+ checksum: 422a3c25169ef6ffb89d2fab297f92c72496e0e87bcff6c7af3fbe917a9ee4ca3092ea8bd0ca128d915b2c1b2a0c7921edacdefb701e347d87158f2fa5b2bb1a
languageName: node
linkType: hard
@@ -5000,7 +5111,7 @@ __metadata:
languageName: node
linkType: hard
-"ci-info@npm:^4.0.0, ci-info@npm:^4.2.0, ci-info@npm:^4.3.0":
+"ci-info@npm:^4.0.0, ci-info@npm:^4.2.0, ci-info@npm:^4.3.1":
version: 4.3.1
resolution: "ci-info@npm:4.3.1"
checksum: 66c159d92648e8a07acab0a3a0681bff6ccc39aa44916263208c4d97bbbeedbbc886d7611fd30c21df1aa624ce3c6fcdfde982e74689e3e014e064e1d0805f94
@@ -5208,13 +5319,33 @@ __metadata:
languageName: node
linkType: hard
-"color-name@npm:~1.1.4":
+"color-name@npm:^1.0.0, color-name@npm:~1.1.4":
version: 1.1.4
resolution: "color-name@npm:1.1.4"
checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610
languageName: node
linkType: hard
+"color-string@npm:^1.9.0":
+ version: 1.9.1
+ resolution: "color-string@npm:1.9.1"
+ dependencies:
+ color-name: ^1.0.0
+ simple-swizzle: ^0.2.2
+ checksum: c13fe7cff7885f603f49105827d621ce87f4571d78ba28ef4a3f1a104304748f620615e6bf065ecd2145d0d9dad83a3553f52bb25ede7239d18e9f81622f1cc5
+ languageName: node
+ linkType: hard
+
+"color@npm:^4.2.3":
+ version: 4.2.3
+ resolution: "color@npm:4.2.3"
+ dependencies:
+ color-convert: ^2.0.1
+ color-string: ^1.9.0
+ checksum: 0579629c02c631b426780038da929cca8e8d80a40158b09811a0112a107c62e10e4aad719843b791b1e658ab4e800558f2e87ca4522c8b32349d497ecb6adeb4
+ languageName: node
+ linkType: hard
+
"colorette@npm:^1.0.7":
version: 1.4.0
resolution: "colorette@npm:1.4.0"
@@ -5580,6 +5711,13 @@ __metadata:
languageName: node
linkType: hard
+"decode-uri-component@npm:^0.2.2":
+ version: 0.2.2
+ resolution: "decode-uri-component@npm:0.2.2"
+ checksum: 95476a7d28f267292ce745eac3524a9079058bbb35767b76e3ee87d42e34cd0275d2eb19d9d08c3e167f97556e8a2872747f5e65cbebcac8b0c98d83e285f139
+ languageName: node
+ linkType: hard
+
"dedent@npm:^0.7.0":
version: 0.7.0
resolution: "dedent@npm:0.7.0"
@@ -6675,6 +6813,13 @@ __metadata:
languageName: node
linkType: hard
+"filter-obj@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "filter-obj@npm:1.1.0"
+ checksum: cf2104a7c45ff48e7f505b78a3991c8f7f30f28bd8106ef582721f321f1c6277f7751aacd5d83026cb079d9d5091082f588d14a72e7c5d720ece79118fa61e10
+ languageName: node
+ linkType: hard
+
"finalhandler@npm:1.1.2":
version: 1.1.2
resolution: "finalhandler@npm:1.1.2"
@@ -7341,6 +7486,15 @@ __metadata:
languageName: node
linkType: hard
+"hoist-non-react-statics@npm:^3.3.0":
+ version: 3.3.2
+ resolution: "hoist-non-react-statics@npm:3.3.2"
+ dependencies:
+ react-is: ^16.7.0
+ checksum: b1538270429b13901ee586aa44f4cc3ecd8831c061d06cb8322e50ea17b3f5ce4d0e2e66394761e6c8e152cd8c34fb3b4b690116c6ce2bd45b18c746516cb9e8
+ languageName: node
+ linkType: hard
+
"hook-std@npm:^3.0.0":
version: 3.0.0
resolution: "hook-std@npm:3.0.0"
@@ -7357,12 +7511,12 @@ __metadata:
languageName: node
linkType: hard
-"hosted-git-info@npm:^9.0.0":
- version: 9.0.1
- resolution: "hosted-git-info@npm:9.0.1"
+"hosted-git-info@npm:^9.0.0, hosted-git-info@npm:^9.0.2":
+ version: 9.0.2
+ resolution: "hosted-git-info@npm:9.0.2"
dependencies:
lru-cache: ^11.1.0
- checksum: 7079026b3ae80868452817be8c32014f24f9cd4166bd9cc115af4e4cf2620f35a2d02ccee5ac5c2fc7901a7fc00029fd50e8136f22e45519a20e69f19a572b65
+ checksum: 01687a41925189ab10dfd6c5b295d9186366faf22f74face5f83c6ac8e9927f25d5d91fad3352ee6833a3130e35d5fd71c9037a2d684e307cfd321724a90a689
languageName: node
linkType: hard
@@ -7692,6 +7846,13 @@ __metadata:
languageName: node
linkType: hard
+"is-arrayish@npm:^0.3.1":
+ version: 0.3.4
+ resolution: "is-arrayish@npm:0.3.4"
+ checksum: 09816634eb7b6e357067f6b49c7656b4aff6d8b25486553d086bab53ce0f929c0293906539503b2a317f3137b5a5cd7e9ea01305f6090c0037c4340d9121420d
+ languageName: node
+ linkType: hard
+
"is-async-function@npm:^2.0.0":
version: 2.1.1
resolution: "is-async-function@npm:2.1.1"
@@ -7731,7 +7892,7 @@ __metadata:
languageName: node
linkType: hard
-"is-cidr@npm:^6.0.0":
+"is-cidr@npm:^6.0.1":
version: 6.0.1
resolution: "is-cidr@npm:6.0.1"
dependencies:
@@ -9165,21 +9326,21 @@ __metadata:
languageName: node
linkType: hard
-"libnpmaccess@npm:^10.0.2":
- version: 10.0.2
- resolution: "libnpmaccess@npm:10.0.2"
+"libnpmaccess@npm:^10.0.3":
+ version: 10.0.3
+ resolution: "libnpmaccess@npm:10.0.3"
dependencies:
npm-package-arg: ^13.0.0
npm-registry-fetch: ^19.0.0
- checksum: 0bed58951b72d61866de54a88302aa5d365df984a127e304005b6df37635f11a8779291d1429a30ceafd057bd9194c268a96327c77ce87f83a1b7126f131127c
+ checksum: 8bcd40e89bcec85250f3fe38049e14bc2fb0bd1769a7c3e2c82fd72c35730b322af30a031f6de85434651ce08731461c7beac752ed80e49df3fb689a5fdcc0b2
languageName: node
linkType: hard
-"libnpmdiff@npm:^8.0.8":
- version: 8.0.8
- resolution: "libnpmdiff@npm:8.0.8"
+"libnpmdiff@npm:^8.0.9":
+ version: 8.0.9
+ resolution: "libnpmdiff@npm:8.0.9"
dependencies:
- "@npmcli/arborist": ^9.1.5
+ "@npmcli/arborist": ^9.1.6
"@npmcli/installed-package-contents": ^3.0.0
binary-extensions: ^3.0.0
diff: ^8.0.2
@@ -9187,15 +9348,15 @@ __metadata:
npm-package-arg: ^13.0.0
pacote: ^21.0.2
tar: ^7.5.1
- checksum: 5287ac6554988674e1cdf74b963a39f7aa73b09946ad1650c4019e349b03b9c47c15e65f2540d6bb1d88fb5fc678c7298d87531d63902a37dc0c690c5a0cfaa8
+ checksum: d5119df0f8be2b57be02c88c58cf005176801e400bf027908e2920a6aec16b88698bb2f71c6ac305b936bc4006bee3a8d2f3e6faf2cd81f2eedcfda1bb8bc6a7
languageName: node
linkType: hard
-"libnpmexec@npm:^10.1.7":
- version: 10.1.7
- resolution: "libnpmexec@npm:10.1.7"
+"libnpmexec@npm:^10.1.8":
+ version: 10.1.8
+ resolution: "libnpmexec@npm:10.1.8"
dependencies:
- "@npmcli/arborist": ^9.1.5
+ "@npmcli/arborist": ^9.1.6
"@npmcli/package-json": ^7.0.0
"@npmcli/run-script": ^10.0.0
ci-info: ^4.0.0
@@ -9207,16 +9368,16 @@ __metadata:
semver: ^7.3.7
signal-exit: ^4.1.0
walk-up-path: ^4.0.0
- checksum: 0592b0bbd620fe2e3ecf859366b83557bb23084a9118656516ea1cacdb3469fd58a30d3713ae648c1358c20b08421a3cb1208bd58045de61c23e6b0e8e64ae05
+ checksum: d42ef697c4d1c51b96797a7118f637aa755ddb924d06202d96c2edab4cfe3f2acf0d78559c31794ac817c896c65ecdeb6f6d9f70da09e9ff6eb6a0c448b8398d
languageName: node
linkType: hard
-"libnpmfund@npm:^7.0.8":
- version: 7.0.8
- resolution: "libnpmfund@npm:7.0.8"
+"libnpmfund@npm:^7.0.9":
+ version: 7.0.9
+ resolution: "libnpmfund@npm:7.0.9"
dependencies:
- "@npmcli/arborist": ^9.1.5
- checksum: fac40554ae60b558e49579e0cf374794595142aa856fe09bfa1c55cccd3db73efec0559e8b35373d942511e946cf438bbe4fa62df1f000914183297d93a2f95a
+ "@npmcli/arborist": ^9.1.6
+ checksum: ec0398f03321b7ab4568ff58167db3d4a3f937ecd2f418bb91b8fadaf8686646e26fb05225996b6d700dffc5880f3a525555a6eb904d4f971408ce986d537321
languageName: node
linkType: hard
@@ -9230,21 +9391,21 @@ __metadata:
languageName: node
linkType: hard
-"libnpmpack@npm:^9.0.8":
- version: 9.0.8
- resolution: "libnpmpack@npm:9.0.8"
+"libnpmpack@npm:^9.0.9":
+ version: 9.0.9
+ resolution: "libnpmpack@npm:9.0.9"
dependencies:
- "@npmcli/arborist": ^9.1.5
+ "@npmcli/arborist": ^9.1.6
"@npmcli/run-script": ^10.0.0
npm-package-arg: ^13.0.0
pacote: ^21.0.2
- checksum: 7a061d316f007879a9bae161edcbfdbfb3534fcbde3070dd8c3b40d04a8f129c5c7ad9a010fb50df2078b21f00877c811ccae64358eb793b2b23af826722af83
+ checksum: 3812fb9abbf4f4f39dde3370c1aacbfc2c568c87f6148fba791119234cd132cc5de8a80a93367656fb2733bc2dadfae76cb6d81f6f5ac7cfb3eb3e6d4d01007f
languageName: node
linkType: hard
-"libnpmpublish@npm:^11.1.1":
- version: 11.1.1
- resolution: "libnpmpublish@npm:11.1.1"
+"libnpmpublish@npm:^11.1.2":
+ version: 11.1.2
+ resolution: "libnpmpublish@npm:11.1.2"
dependencies:
"@npmcli/package-json": ^7.0.0
ci-info: ^4.0.0
@@ -9254,7 +9415,7 @@ __metadata:
semver: ^7.3.7
sigstore: ^4.0.0
ssri: ^12.0.0
- checksum: 38007dea14befcaf6b8482808472e14a9b35db3a3d774c98199de86c9d97bd293ba94f88170a71051825e996d6d61ccc2b627b9aee95d9e50e5637553841ad06
+ checksum: e9e21ed63339b5c54c373dda4915c82e24a4f17d86336d541a57891984fc4259b077a380eac60a8d943375d02908d885978f4a981bf966fa92d31f498bde6d3c
languageName: node
linkType: hard
@@ -10136,6 +10297,15 @@ __metadata:
languageName: node
linkType: hard
+"nanoid@npm:^3.3.11":
+ version: 3.3.11
+ resolution: "nanoid@npm:3.3.11"
+ bin:
+ nanoid: bin/nanoid.cjs
+ checksum: 3be20d8866a57a6b6d218e82549711c8352ed969f9ab3c45379da28f405363ad4c9aeb0b39e9abc101a529ca65a72ff9502b00bf74a912c4b64a9d62dfd26c29
+ languageName: node
+ linkType: hard
+
"napi-postinstall@npm:^0.3.0":
version: 0.3.4
resolution: "napi-postinstall@npm:0.3.4"
@@ -10284,17 +10454,6 @@ __metadata:
languageName: node
linkType: hard
-"normalize-package-data@npm:^8.0.0":
- version: 8.0.0
- resolution: "normalize-package-data@npm:8.0.0"
- dependencies:
- hosted-git-info: ^9.0.0
- semver: ^7.3.5
- validate-npm-package-license: ^3.0.4
- checksum: 226ef14e168caeeeb0ae21f70f0296d8c29cc55a484e1561d1f1771156f049f5896cd50f38b9a8b4bbe30f2fea32fb9e5491449249137faecb3fd169b3db8118
- languageName: node
- linkType: hard
-
"normalize-path@npm:^3.0.0":
version: 3.0.0
resolution: "normalize-path@npm:3.0.0"
@@ -10341,7 +10500,7 @@ __metadata:
languageName: node
linkType: hard
-"npm-package-arg@npm:^13.0.0":
+"npm-package-arg@npm:^13.0.0, npm-package-arg@npm:^13.0.1":
version: 13.0.1
resolution: "npm-package-arg@npm:13.0.1"
dependencies:
@@ -10437,12 +10596,12 @@ __metadata:
linkType: hard
"npm@npm:^11.4.2":
- version: 11.6.1
- resolution: "npm@npm:11.6.1"
+ version: 11.6.2
+ resolution: "npm@npm:11.6.2"
dependencies:
"@isaacs/string-locale-compare": ^1.1.0
- "@npmcli/arborist": ^9.1.5
- "@npmcli/config": ^10.4.1
+ "@npmcli/arborist": ^9.1.6
+ "@npmcli/config": ^10.4.2
"@npmcli/fs": ^4.0.0
"@npmcli/map-workspaces": ^5.0.0
"@npmcli/package-json": ^7.0.1
@@ -10454,24 +10613,24 @@ __metadata:
archy: ~1.0.0
cacache: ^20.0.1
chalk: ^5.6.2
- ci-info: ^4.3.0
+ ci-info: ^4.3.1
cli-columns: ^4.0.0
fastest-levenshtein: ^1.0.16
fs-minipass: ^3.0.3
glob: ^11.0.3
graceful-fs: ^4.2.11
- hosted-git-info: ^9.0.0
+ hosted-git-info: ^9.0.2
ini: ^5.0.0
init-package-json: ^8.2.2
- is-cidr: ^6.0.0
+ is-cidr: ^6.0.1
json-parse-even-better-errors: ^4.0.0
- libnpmaccess: ^10.0.2
- libnpmdiff: ^8.0.8
- libnpmexec: ^10.1.7
- libnpmfund: ^7.0.8
+ libnpmaccess: ^10.0.3
+ libnpmdiff: ^8.0.9
+ libnpmexec: ^10.1.8
+ libnpmfund: ^7.0.9
libnpmorg: ^8.0.1
- libnpmpack: ^9.0.8
- libnpmpublish: ^11.1.1
+ libnpmpack: ^9.0.9
+ libnpmpublish: ^11.1.2
libnpmsearch: ^9.0.1
libnpmteam: ^8.0.2
libnpmversion: ^8.0.2
@@ -10482,10 +10641,9 @@ __metadata:
ms: ^2.1.2
node-gyp: ^11.4.2
nopt: ^8.1.0
- normalize-package-data: ^8.0.0
npm-audit-report: ^6.0.0
npm-install-checks: ^7.1.2
- npm-package-arg: ^13.0.0
+ npm-package-arg: ^13.0.1
npm-pick-manifest: ^11.0.1
npm-profile: ^12.0.0
npm-registry-fetch: ^19.0.0
@@ -10496,7 +10654,7 @@ __metadata:
proc-log: ^5.0.0
qrcode-terminal: ^0.12.0
read: ^4.1.0
- semver: ^7.7.2
+ semver: ^7.7.3
spdx-expression-parse: ^4.0.0
ssri: ^12.0.0
supports-color: ^10.2.2
@@ -10509,7 +10667,7 @@ __metadata:
bin:
npm: bin/npm-cli.js
npx: bin/npx-cli.js
- checksum: 1580294580afdad62584e31b794e9e78d7324e5978b0611cb8b4bd30a39ea52cb26f930273bf0547526dfe824c1e0b7e80fe06886fec3a8d5e0d944c30c1d11b
+ checksum: 1ac92eb3a6d87a5d0f9431d992fb3bddbe34c2a44584ad350b3e1376c06104984198414241a27be74077dddc37f56d8847ee053d44e8e2e7a6159df388859d05
languageName: node
linkType: hard
@@ -11333,6 +11491,18 @@ __metadata:
languageName: node
linkType: hard
+"query-string@npm:^7.1.3":
+ version: 7.1.3
+ resolution: "query-string@npm:7.1.3"
+ dependencies:
+ decode-uri-component: ^0.2.2
+ filter-obj: ^1.1.0
+ split-on-first: ^1.0.0
+ strict-uri-encode: ^2.0.0
+ checksum: 91af02dcd9cc9227a052841d5c2eecb80a0d6489d05625df506a097ef1c59037cfb5e907f39b84643cbfd535c955abec3e553d0130a7b510120c37d06e0f4346
+ languageName: node
+ linkType: hard
+
"queue-microtask@npm:^1.2.2":
version: 1.2.3
resolution: "queue-microtask@npm:1.2.3"
@@ -11392,7 +11562,16 @@ __metadata:
languageName: node
linkType: hard
-"react-is@npm:^16.13.1":
+"react-freeze@npm:^1.0.0":
+ version: 1.0.4
+ resolution: "react-freeze@npm:1.0.4"
+ peerDependencies:
+ react: ">=17.0.0"
+ checksum: 6b4d93209dff04a1f25d9f8e0c56a9a8a80e7889e8e8267299f34449c7e41a9ab90cad24569d03dd7173b56b7496576dba68f71f1d4e5c8be72f0633023668bc
+ languageName: node
+ linkType: hard
+
+"react-is@npm:^16.13.1, react-is@npm:^16.7.0":
version: 16.13.1
resolution: "react-is@npm:16.13.1"
checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f
@@ -11406,6 +11585,13 @@ __metadata:
languageName: node
linkType: hard
+"react-is@npm:^19.1.0":
+ version: 19.2.0
+ resolution: "react-is@npm:19.2.0"
+ checksum: 9a23e1c2d0bbc13b383bc59a05f54e6eb95dd87e01aec8aa92a88618364b7b0ee8a5b057ad813cf61e2f7ae7d24503b624706acb609d07c54754e5ad2c522568
+ languageName: node
+ linkType: hard
+
"react-native-builder-bob@npm:0.40.13":
version: 0.40.13
resolution: "react-native-builder-bob@npm:0.40.13"
@@ -11438,6 +11624,20 @@ __metadata:
languageName: node
linkType: hard
+"react-native-gesture-handler@npm:2.28.0":
+ version: 2.28.0
+ resolution: "react-native-gesture-handler@npm:2.28.0"
+ dependencies:
+ "@egjs/hammerjs": ^2.0.17
+ hoist-non-react-statics: ^3.3.0
+ invariant: ^2.2.4
+ peerDependencies:
+ react: "*"
+ react-native: "*"
+ checksum: 7bcd7db784b12565fdd5916bbebc2d3511a63159ca553d33e430008940ba7d209f1e85ef02968a920ed19c414fabe7d2c18cc0e967dd4889aae266788562d1e9
+ languageName: node
+ linkType: hard
+
"react-native-google-maps-plus-example@workspace:example":
version: 0.0.0-use.local
resolution: "react-native-google-maps-plus-example@workspace:example"
@@ -11451,16 +11651,25 @@ __metadata:
"@react-native/babel-preset": 0.82.0
"@react-native/metro-config": 0.82.0
"@react-native/typescript-config": 0.82.0
+ "@react-navigation/native": 7.1.18
+ "@react-navigation/native-stack": 7.3.27
+ "@react-navigation/stack": 7.4.9
"@types/react": 19.1.1
react: 19.1.1
react-native: 0.82.0
react-native-builder-bob: 0.40.13
+ react-native-gesture-handler: 2.28.0
+ react-native-google-maps-plus: "workspace:*"
react-native-monorepo-config: 0.2.1
react-native-nitro-modules: 0.29.8
+ react-native-reanimated: 4.1.3
+ react-native-safe-area-context: 5.6.1
+ react-native-screens: 4.16.0
+ react-native-worklets: 0.6.1
languageName: unknown
linkType: soft
-"react-native-google-maps-plus@workspace:.":
+"react-native-google-maps-plus@workspace:*, react-native-google-maps-plus@workspace:.":
version: 0.0.0-use.local
resolution: "react-native-google-maps-plus@workspace:."
dependencies:
@@ -11501,6 +11710,16 @@ __metadata:
languageName: unknown
linkType: soft
+"react-native-is-edge-to-edge@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "react-native-is-edge-to-edge@npm:1.2.1"
+ peerDependencies:
+ react: "*"
+ react-native: "*"
+ checksum: 8fb6d8ab7b953c7d7cec8c987cef24f1c5348a293a85cb49c7c53b54ef110c0ca746736ae730e297603c8c76020df912e93915fb17518c4f2f91143757177aba
+ languageName: node
+ linkType: hard
+
"react-native-monorepo-config@npm:0.2.1":
version: 0.2.1
resolution: "react-native-monorepo-config@npm:0.2.1"
@@ -11531,6 +11750,68 @@ __metadata:
languageName: node
linkType: hard
+"react-native-reanimated@npm:4.1.3":
+ version: 4.1.3
+ resolution: "react-native-reanimated@npm:4.1.3"
+ dependencies:
+ react-native-is-edge-to-edge: ^1.2.1
+ semver: 7.7.2
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ react: "*"
+ react-native: "*"
+ react-native-worklets: ">=0.5.0"
+ checksum: 5f3b7298dd721b5da7f8bab64c557624d08b8715502f4ba2ff9118f31d852e3d9734ffbfaacd1302468ba68d4790689eead39605645a80f737802c8de0008064
+ languageName: node
+ linkType: hard
+
+"react-native-safe-area-context@npm:5.6.1":
+ version: 5.6.1
+ resolution: "react-native-safe-area-context@npm:5.6.1"
+ peerDependencies:
+ react: "*"
+ react-native: "*"
+ checksum: f346615d5f8f26c0c8459d29c149ea3f66684b8ae79cea6fd48d118d039851a69a92955d67b455d0e7ab46639155c4357ebf58ec1859b2377ee459e2a04b602b
+ languageName: node
+ linkType: hard
+
+"react-native-screens@npm:4.16.0":
+ version: 4.16.0
+ resolution: "react-native-screens@npm:4.16.0"
+ dependencies:
+ react-freeze: ^1.0.0
+ react-native-is-edge-to-edge: ^1.2.1
+ warn-once: ^0.1.0
+ peerDependencies:
+ react: "*"
+ react-native: "*"
+ checksum: 71bebbead1d8f886b80b70cf9d69b0179e035fb425fae84fbcbb2930167220cb90c2ee70b26d3fd94f940fa3e6ce325b0ec2e283d039d5abb29bf6898c58e485
+ languageName: node
+ linkType: hard
+
+"react-native-worklets@npm:0.6.1":
+ version: 0.6.1
+ resolution: "react-native-worklets@npm:0.6.1"
+ dependencies:
+ "@babel/plugin-transform-arrow-functions": ^7.0.0-0
+ "@babel/plugin-transform-class-properties": ^7.0.0-0
+ "@babel/plugin-transform-classes": ^7.0.0-0
+ "@babel/plugin-transform-nullish-coalescing-operator": ^7.0.0-0
+ "@babel/plugin-transform-optional-chaining": ^7.0.0-0
+ "@babel/plugin-transform-shorthand-properties": ^7.0.0-0
+ "@babel/plugin-transform-template-literals": ^7.0.0-0
+ "@babel/plugin-transform-unicode-regex": ^7.0.0-0
+ "@babel/preset-typescript": ^7.16.7
+ convert-source-map: ^2.0.0
+ semver: 7.7.2
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ react: "*"
+ react-native: "*"
+ checksum: fee8de844ef2286dee9f81a53f9cf309424d26251953c8524204342c8531fef403c625a23632a6bb65ea57409d6f8522a60e02de772322bebb5ff4aa4cccf569
+ languageName: node
+ linkType: hard
+
"react-native@npm:0.82.0":
version: 0.82.0
resolution: "react-native@npm:0.82.0"
@@ -12020,6 +12301,15 @@ __metadata:
languageName: node
linkType: hard
+"semver@npm:7.7.2":
+ version: 7.7.2
+ resolution: "semver@npm:7.7.2"
+ bin:
+ semver: bin/semver.js
+ checksum: dd94ba8f1cbc903d8eeb4dd8bf19f46b3deb14262b6717d0de3c804b594058ae785ef2e4b46c5c3b58733c99c83339068203002f9e37cfe44f7e2cc5e3d2f621
+ languageName: node
+ linkType: hard
+
"semver@npm:^6.3.0, semver@npm:^6.3.1":
version: 6.3.1
resolution: "semver@npm:6.3.1"
@@ -12029,7 +12319,7 @@ __metadata:
languageName: node
linkType: hard
-"semver@npm:^7.1.1, semver@npm:^7.1.2, semver@npm:^7.1.3, semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.7.2":
+"semver@npm:^7.1.1, semver@npm:^7.1.2, semver@npm:^7.1.3, semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.7.2, semver@npm:^7.7.3":
version: 7.7.3
resolution: "semver@npm:7.7.3"
bin:
@@ -12239,6 +12529,15 @@ __metadata:
languageName: node
linkType: hard
+"simple-swizzle@npm:^0.2.2":
+ version: 0.2.4
+ resolution: "simple-swizzle@npm:0.2.4"
+ dependencies:
+ is-arrayish: ^0.3.1
+ checksum: 9a2f6f39a6b9fab68f96903523bf19953ec21e5e843108154cf47a9cc0f78955dd44f64499ffb71a849ac10c758d9fab7533627c7ca3ab40b5c177117acfdc1b
+ languageName: node
+ linkType: hard
+
"sisteransi@npm:^1.0.5":
version: 1.0.5
resolution: "sisteransi@npm:1.0.5"
@@ -12393,6 +12692,13 @@ __metadata:
languageName: node
linkType: hard
+"split-on-first@npm:^1.0.0":
+ version: 1.1.0
+ resolution: "split-on-first@npm:1.1.0"
+ checksum: 16ff85b54ddcf17f9147210a4022529b343edbcbea4ce977c8f30e38408b8d6e0f25f92cd35b86a524d4797f455e29ab89eb8db787f3c10708e0b47ebf528d30
+ languageName: node
+ linkType: hard
+
"split2@npm:^4.0.0":
version: 4.2.0
resolution: "split2@npm:4.2.0"
@@ -12484,6 +12790,13 @@ __metadata:
languageName: node
linkType: hard
+"strict-uri-encode@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "strict-uri-encode@npm:2.0.0"
+ checksum: eaac4cf978b6fbd480f1092cab8b233c9b949bcabfc9b598dd79a758f7243c28765ef7639c876fa72940dac687181b35486ea01ff7df3e65ce3848c64822c581
+ languageName: node
+ linkType: hard
+
"string-length@npm:^4.0.2":
version: 4.0.2
resolution: "string-length@npm:4.0.2"
@@ -13383,6 +13696,24 @@ __metadata:
languageName: node
linkType: hard
+"use-latest-callback@npm:^0.2.4":
+ version: 0.2.5
+ resolution: "use-latest-callback@npm:0.2.5"
+ peerDependencies:
+ react: ">=16.8"
+ checksum: 8008a9c6635fa107ea3e84aba53c8f5334ea81bfe25a6866d76294045f53a34f9ad81ea7e2db595ceb1acf75064050b9cb7e800adee02e8a833b2f17ccdef88e
+ languageName: node
+ linkType: hard
+
+"use-sync-external-store@npm:^1.5.0":
+ version: 1.6.0
+ resolution: "use-sync-external-store@npm:1.6.0"
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ checksum: 61a62e910713adfaf91bdb72ff2cd30e5ba83687accaf3b6e75a903b45bf635f5722e3694af30d83a03e92cb533c0a5c699298d2fef639a03ffc86b469f4eee2
+ languageName: node
+ linkType: hard
+
"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1":
version: 1.0.2
resolution: "util-deprecate@npm:1.0.2"
@@ -13455,6 +13786,13 @@ __metadata:
languageName: node
linkType: hard
+"warn-once@npm:^0.1.0, warn-once@npm:^0.1.1":
+ version: 0.1.1
+ resolution: "warn-once@npm:0.1.1"
+ checksum: e6a5a1f5a8dba7744399743d3cfb571db4c3947897875d4962a7c5b1bf2195ab4518c838cb4cea652e71729f21bba2e98dc75686f5fccde0fabbd894e2ed0c0d
+ languageName: node
+ linkType: hard
+
"wcwidth@npm:^1.0.1":
version: 1.0.1
resolution: "wcwidth@npm:1.0.1"