diff --git a/.eslintrc.json b/.eslintrc.json index 4e63004896..31577b8973 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -12,7 +12,7 @@ }, "parser": "@typescript-eslint/parser", "parserOptions": { - "project": ["./tsconfig.json", "./example/tsconfig.json"] + "project": ["./tsconfig.json", "./example/tsconfig.json", "./FabricExample/tsconfig.json"] }, "env": { "browser": true, "node": true, "jest/globals": true }, "plugins": ["jest"], diff --git a/.github/workflows/android-build.yml b/.github/workflows/android-build.yml index d9bda44442..ec60d768b5 100644 --- a/.github/workflows/android-build.yml +++ b/.github/workflows/android-build.yml @@ -9,8 +9,9 @@ on: jobs: build: runs-on: ubuntu-latest - env: - WORKING_DIRECTORY: example + strategy: + matrix: + working-directory: [example] concurrency: group: android-${{ github.ref }} cancel-in-progress: true @@ -23,8 +24,8 @@ jobs: node-version: 14 cache: 'yarn' - name: Install node dependencies - working-directory: ${{ env.WORKING_DIRECTORY }} + working-directory: ${{ matrix.working-directory }} run: yarn - name: Build app - working-directory: ${{ env.WORKING_DIRECTORY }}/android + working-directory: ${{ matrix.working-directory }}/android run: ./gradlew assembleDebug --console=plain diff --git a/.github/workflows/docs-check.yml b/.github/workflows/docs-check.yml new file mode 100644 index 0000000000..3aafd87aac --- /dev/null +++ b/.github/workflows/docs-check.yml @@ -0,0 +1,29 @@ +name: Check documentation + +on: + pull_request: + paths: + - 'docs/**' + +jobs: + check: + runs-on: ubuntu-latest + concurrency: + group: docs-check-${{ github.ref }} + cancel-in-progress: true + env: + WORKING_DIRECTORY: docs + steps: + - name: checkout + uses: actions/checkout@v2 + - name: Use Node.js 14 + uses: actions/setup-node@v2 + with: + node-version: 14 + cache: 'yarn' + - name: Install node dependencies + working-directory: ${{ env.WORKING_DIRECTORY }} + run: yarn + - name: Generate docs + working-directory: ${{ env.WORKING_DIRECTORY }} + run: yarn build:baseUrl diff --git a/.github/workflows/ios-build.yml b/.github/workflows/ios-build.yml index 6d367c9d81..c8c70be447 100644 --- a/.github/workflows/ios-build.yml +++ b/.github/workflows/ios-build.yml @@ -9,8 +9,11 @@ on: jobs: build: runs-on: macos-latest - env: - WORKING_DIRECTORY: example + strategy: + matrix: + working-directory: [example, FabricExample] + xcode: ['13.2.1'] + device: ['iPhone 13'] concurrency: group: ios-${{ github.ref }} cancel-in-progress: true @@ -23,11 +26,15 @@ jobs: node-version: 14 cache: 'yarn' - name: Install node dependencies - working-directory: ${{ env.WORKING_DIRECTORY }} + working-directory: ${{ matrix.working-directory }} run: yarn - name: Install pods - working-directory: ${{ env.WORKING_DIRECTORY }}/ios + working-directory: ${{ matrix.working-directory }}/ios run: pod install + - name: Switch Xcode version to ${{ matrix.xcode }} + run: sudo xcode-select --switch /Applications/Xcode_${{ matrix.xcode }}.app + - name: Force update Launch Database to prevent issues when opening the Simulator app + run: /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f /Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer/Applications/Simulator.app - name: Build app - working-directory: ${{ env.WORKING_DIRECTORY }} + working-directory: ${{ matrix.working-directory }} run: yarn ios diff --git a/.github/workflows/static-example-app-checks.yml b/.github/workflows/static-example-apps-checks.yml similarity index 60% rename from .github/workflows/static-example-app-checks.yml rename to .github/workflows/static-example-apps-checks.yml index 288b6eaf4a..f2a32d8351 100644 --- a/.github/workflows/static-example-app-checks.yml +++ b/.github/workflows/static-example-apps-checks.yml @@ -1,16 +1,18 @@ -name: Test Example App TypeScript and Lint +name: Test TypeScript and Lint on: pull_request: paths: - 'example/**' + # - 'FabricExample/**' push: branches: - main jobs: check: runs-on: ubuntu-latest - env: - WORKING_DIRECTORY: example + strategy: + matrix: + working-directory: [example, FabricExample] concurrency: group: static-example-${{ github.ref }} cancel-in-progress: true @@ -24,12 +26,12 @@ jobs: cache: 'yarn' - name: Install root node dependencies run: yarn - - name: Install example app node dependencies - working-directory: ${{ env.WORKING_DIRECTORY }} + - name: Install ${{ matrix.working-directory }} app node dependencies + working-directory: ${{ matrix.working-directory }} run: yarn - name: Check types - working-directory: ${{ env.WORKING_DIRECTORY }} + working-directory: ${{ matrix.working-directory }} run: yarn tsc --noEmit - name: Lint - working-directory: ${{ env.WORKING_DIRECTORY }} + working-directory: ${{ matrix.working-directory }} run: yarn lint-check diff --git a/FabricExample/.flowconfig b/FabricExample/.flowconfig index 975227dab4..74f3a75e7b 100644 --- a/FabricExample/.flowconfig +++ b/FabricExample/.flowconfig @@ -52,7 +52,6 @@ nonstrict-import=warn deprecated-type=warn unsafe-getters-setters=warn unnecessary-invariant=warn -signature-verification-failure=warn [strict] deprecated-type @@ -64,4 +63,4 @@ untyped-import untyped-type-import [version] -^0.170.0 +^0.176.3 diff --git a/FabricExample/.gitignore b/FabricExample/.gitignore index 81570d9918..e8b2d63f70 100644 --- a/FabricExample/.gitignore +++ b/FabricExample/.gitignore @@ -49,9 +49,10 @@ buck-out/ # For more information about the recommended setup visit: # https://docs.fastlane.tools/best-practices/source-control/ -*/fastlane/report.xml -*/fastlane/Preview.html -*/fastlane/screenshots +**/fastlane/report.xml +**/fastlane/Preview.html +**/fastlane/screenshots +**/fastlane/test_output # Bundle artifact *.jsbundle diff --git a/FabricExample/.prettierrc.json b/FabricExample/.prettierrc.json index 6e5e96b3c5..792c8d89e6 100644 --- a/FabricExample/.prettierrc.json +++ b/FabricExample/.prettierrc.json @@ -1,5 +1,5 @@ { - "jsxBracketSameLine": true, + "bracketSameLine": true, "printWidth": 80, "tabWidth": 2, "semi": true, diff --git a/FabricExample/App.js b/FabricExample/App.js deleted file mode 100644 index 4189dcfdcb..0000000000 --- a/FabricExample/App.js +++ /dev/null @@ -1,112 +0,0 @@ -/** - * Sample React Native App - * https://github.com/facebook/react-native - * - * @format - * @flow strict-local - */ - -import React from 'react'; -import type { Node } from 'react'; -import { - SafeAreaView, - ScrollView, - StatusBar, - StyleSheet, - Text, - useColorScheme, - View, -} from 'react-native'; - -import { - Colors, - DebugInstructions, - Header, - LearnMoreLinks, - ReloadInstructions, -} from 'react-native/Libraries/NewAppScreen'; - -const Section = ({ children, title }): Node => { - const isDarkMode = useColorScheme() === 'dark'; - return ( - - - {title} - - - {children} - - - ); -}; - -const App: () => Node = () => { - const isDarkMode = useColorScheme() === 'dark'; - - const backgroundStyle = { - backgroundColor: isDarkMode ? Colors.darker : Colors.lighter, - }; - - return ( - - - -
- -
- Edit App.js to change this - screen and then come back to see your edits. -
-
- -
-
- -
-
- Read the docs to discover what to do next: -
- -
- - - ); -}; - -const styles = StyleSheet.create({ - sectionContainer: { - marginTop: 32, - paddingHorizontal: 24, - }, - sectionTitle: { - fontSize: 24, - fontWeight: '600', - }, - sectionDescription: { - marginTop: 8, - fontSize: 18, - fontWeight: '400', - }, - highlight: { - fontWeight: '700', - }, -}); - -export default App; diff --git a/FabricExample/Gemfile b/FabricExample/Gemfile index 2c3edcf4b7..5efda89f45 100644 --- a/FabricExample/Gemfile +++ b/FabricExample/Gemfile @@ -1,6 +1,6 @@ source 'https://rubygems.org' # You may use http://rbenv.org/ or https://rvm.io/ to install and use this version -ruby '2.7.4' +ruby '2.7.5' gem 'cocoapods', '~> 1.11', '>= 1.11.2' diff --git a/FabricExample/Gemfile.lock b/FabricExample/Gemfile.lock index 640d2f1ed1..ab55ee6838 100644 --- a/FabricExample/Gemfile.lock +++ b/FabricExample/Gemfile.lock @@ -3,7 +3,7 @@ GEM specs: CFPropertyList (3.0.5) rexml - activesupport (6.1.4.6) + activesupport (6.1.5) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) @@ -16,10 +16,10 @@ GEM json (>= 1.5.1) atomos (0.1.3) claide (1.1.0) - cocoapods (1.11.2) + cocoapods (1.11.3) addressable (~> 2.8) claide (>= 1.0.2, < 2.0) - cocoapods-core (= 1.11.2) + cocoapods-core (= 1.11.3) cocoapods-deintegrate (>= 1.0.3, < 2.0) cocoapods-downloader (>= 1.4.0, < 2.0) cocoapods-plugins (>= 1.0.0, < 2.0) @@ -34,7 +34,7 @@ GEM nap (~> 1.0) ruby-macho (>= 1.0, < 3.0) xcodeproj (>= 1.21.0, < 2.0) - cocoapods-core (1.11.2) + cocoapods-core (1.11.3) activesupport (>= 5.0, < 7) addressable (~> 2.8) algoliasearch (~> 1.0) @@ -45,7 +45,7 @@ GEM public_suffix (~> 4.0) typhoeus (~> 1.0) cocoapods-deintegrate (1.0.5) - cocoapods-downloader (1.5.1) + cocoapods-downloader (1.6.3) cocoapods-plugins (1.0.0) nap cocoapods-search (1.0.1) @@ -54,7 +54,7 @@ GEM netrc (~> 0.11) cocoapods-try (1.2.0) colored2 (3.1.2) - concurrent-ruby (1.1.9) + concurrent-ruby (1.1.10) escape (0.0.4) ethon (0.15.0) ffi (>= 1.15.0) diff --git a/FabricExample/_ruby-version b/FabricExample/_ruby-version index a4dd9dba4f..a603bb50a2 100644 --- a/FabricExample/_ruby-version +++ b/FabricExample/_ruby-version @@ -1 +1 @@ -2.7.4 +2.7.5 diff --git a/FabricExample/android/app/build.gradle b/FabricExample/android/app/build.gradle index a6937cad1a..81c7b26304 100644 --- a/FabricExample/android/app/build.gradle +++ b/FabricExample/android/app/build.gradle @@ -152,7 +152,8 @@ android { "GENERATED_SRC_DIR=$buildDir/generated/source", "PROJECT_BUILD_DIR=$buildDir", "REACT_ANDROID_DIR=$rootDir/../node_modules/react-native/ReactAndroid", - "REACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build" + "REACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build", + "NODE_MODULES_DIR=$rootDir/../node_modules" cFlags "-Wall", "-Werror", "-fexceptions", "-frtti", "-DWITH_INSPECTOR=1" cppFlags "-std=c++17" // Make sure this target name is the same you specify inside the @@ -160,6 +161,11 @@ android { targets "fabricexample_appmodules" } } + if (!enableSeparateBuildPerCPUArchitecture) { + ndk { + abiFilters (*reactNativeArchitectures()) + } + } } } @@ -187,6 +193,20 @@ android { // preBuild.dependsOn("generateCodegenArtifactsFromSchema") preDebugBuild.dependsOn(packageReactNdkDebugLibs) preReleaseBuild.dependsOn(packageReactNdkReleaseLibs) + + // Due to a bug inside AGP, we have to explicitly set a dependency + // between configureNdkBuild* tasks and the preBuild tasks. + // This can be removed once this is solved: https://issuetracker.google.com/issues/207403732 + configureNdkBuildRelease.dependsOn(preReleaseBuild) + configureNdkBuildDebug.dependsOn(preDebugBuild) + reactNativeArchitectures().each { architecture -> + tasks.findByName("configureNdkBuildDebug[${architecture}]")?.configure { + dependsOn("preDebugBuild") + } + tasks.findByName("configureNdkBuildRelease[${architecture}]")?.configure { + dependsOn("preReleaseBuild") + } + } } } @@ -258,9 +278,10 @@ dependencies { } if (enableHermes) { - def hermesPath = "../../node_modules/hermes-engine/android/"; - debugImplementation files(hermesPath + "hermes-debug.aar") - releaseImplementation files(hermesPath + "hermes-release.aar") + //noinspection GradleDynamicVersion + implementation("com.facebook.react:hermes-engine:+") { // From node_modules + exclude group:'com.facebook.fbjni' + } } else { implementation jscFlavor } @@ -273,7 +294,11 @@ if (isNewArchitectureEnabled()) { configurations.all { resolutionStrategy.dependencySubstitution { substitute(module("com.facebook.react:react-native")) - .using(project(":ReactAndroid")).because("On New Architecture we're building React Native from source") + .using(project(":ReactAndroid")) + .because("On New Architecture we're building React Native from source") + substitute(module("com.facebook.react:hermes-engine")) + .using(project(":ReactAndroid:hermes-engine")) + .because("On New Architecture we're building Hermes from source") } } } diff --git a/FabricExample/android/app/src/main/java/com/fabricexample/MainActivity.java b/FabricExample/android/app/src/main/java/com/fabricexample/MainActivity.java index 0b501ffa46..bd61758967 100644 --- a/FabricExample/android/app/src/main/java/com/fabricexample/MainActivity.java +++ b/FabricExample/android/app/src/main/java/com/fabricexample/MainActivity.java @@ -17,7 +17,8 @@ protected String getMainComponentName() { /** * Returns the instance of the {@link ReactActivityDelegate}. There the RootView is created and - * you can specify the rendered you wish to use (Fabric or the older renderer). + * you can specify the renderer you wish to use - the new renderer (Fabric) or the old renderer + * (Paper). */ @Override protected ReactActivityDelegate createReactActivityDelegate() { @@ -36,5 +37,12 @@ protected ReactRootView createRootView() { reactRootView.setIsFabric(BuildConfig.IS_NEW_ARCHITECTURE_ENABLED); return reactRootView; } + + @Override + protected boolean isConcurrentRootEnabled() { + // If you opted-in for the New Architecture, we enable Concurrent Root (i.e. React 18). + // More on this on https://reactjs.org/blog/2022/03/29/react-v18.html + return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED; + } } } diff --git a/FabricExample/android/app/src/main/java/com/fabricexample/newarchitecture/MainApplicationReactNativeHost.java b/FabricExample/android/app/src/main/java/com/fabricexample/newarchitecture/MainApplicationReactNativeHost.java index 0968cb255a..ec782e0a3d 100644 --- a/FabricExample/android/app/src/main/java/com/fabricexample/newarchitecture/MainApplicationReactNativeHost.java +++ b/FabricExample/android/app/src/main/java/com/fabricexample/newarchitecture/MainApplicationReactNativeHost.java @@ -16,8 +16,8 @@ import com.facebook.react.bridge.UIManager; import com.facebook.react.fabric.ComponentFactory; import com.facebook.react.fabric.CoreComponentsRegistry; -import com.facebook.react.fabric.EmptyReactNativeConfig; import com.facebook.react.fabric.FabricJSIModuleProvider; +import com.facebook.react.fabric.ReactNativeConfig; import com.facebook.react.uimanager.ViewManagerRegistry; import com.fabricexample.BuildConfig; import com.fabricexample.newarchitecture.components.MainComponentsRegistry; @@ -105,7 +105,7 @@ public JSIModuleProvider getJSIModuleProvider() { return new FabricJSIModuleProvider( reactApplicationContext, componentFactory, - new EmptyReactNativeConfig(), + ReactNativeConfig.DEFAULT_CONFIG, viewManagerRegistry); } }); diff --git a/FabricExample/android/app/src/main/jni/Android.mk b/FabricExample/android/app/src/main/jni/Android.mk index b8a16aebb3..49499f3dc4 100644 --- a/FabricExample/android/app/src/main/jni/Android.mk +++ b/FabricExample/android/app/src/main/jni/Android.mk @@ -17,7 +17,7 @@ LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.cpp) LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) # If you wish to add a custom TurboModule or Fabric component in your app you -# will have to uncomment those lines to include the generated source +# will have to uncomment those lines to include the generated source # files from the codegen (placed in $(GENERATED_SRC_DIR)/codegen/jni) # # LOCAL_C_INCLUDES += $(GENERATED_SRC_DIR)/codegen/jni @@ -28,8 +28,7 @@ LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) LOCAL_SHARED_LIBRARIES := \ libfabricjni \ libfbjni \ - libfolly_futures \ - libfolly_json \ + libfolly_runtime \ libglog \ libjsi \ libreact_codegen_rncore \ diff --git a/FabricExample/android/build.gradle b/FabricExample/android/build.gradle index 516d8cef16..0ab2d51c6f 100644 --- a/FabricExample/android/build.gradle +++ b/FabricExample/android/build.gradle @@ -7,16 +7,17 @@ buildscript { compileSdkVersion = 31 targetSdkVersion = 31 ndkVersion = "21.4.7075529" + kotlinVersion = "1.6.21" } repositories { google() mavenCentral() } dependencies { - classpath("com.android.tools.build:gradle:7.0.4") + classpath("com.android.tools.build:gradle:7.1.1") classpath("com.facebook.react:react-native-gradle-plugin") classpath("com.facebook.react:react") - classpath("de.undercouch:gradle-download-task:4.1.2") + classpath("de.undercouch:gradle-download-task:5.0.1") // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } diff --git a/FabricExample/android/settings.gradle b/FabricExample/android/settings.gradle index 2c20106949..2fe7fa0e98 100644 --- a/FabricExample/android/settings.gradle +++ b/FabricExample/android/settings.gradle @@ -10,4 +10,6 @@ if (settings.hasProperty("newArchEnabled") && settings.newArchEnabled == "true") } include(":ReactAndroid") project(":ReactAndroid").projectDir = file('../node_modules/react-native/ReactAndroid') + include(":ReactAndroid:hermes-engine") + project(":ReactAndroid:hermes-engine").projectDir = file('../node_modules/react-native/ReactAndroid/hermes-engine') } diff --git a/FabricExample/ios/.xcode.env b/FabricExample/ios/.xcode.env new file mode 100644 index 0000000000..9d643e97ae --- /dev/null +++ b/FabricExample/ios/.xcode.env @@ -0,0 +1,10 @@ +# This `.xcode.env` file is versioned and is used to source the environment +# used when running script phases inside Xcode. +# To customize your local environment, you can create an `.xcode.env.local` +# file that is not versioned. +# NODE_BINARY variable contains the PATH to the node executable. +# +# Customize the NODE_BINARY variable here. +# For example, to use nvm with brew, add the following line +# . "$(brew --prefix nvm)/nvm.sh" --no-use +export NODE_BINARY=$(command -v node) \ No newline at end of file diff --git a/FabricExample/ios/FabricExample.xcodeproj/project.pbxproj b/FabricExample/ios/FabricExample.xcodeproj/project.pbxproj index 2ad19b37f7..c3f03f434d 100644 --- a/FabricExample/ios/FabricExample.xcodeproj/project.pbxproj +++ b/FabricExample/ios/FabricExample.xcodeproj/project.pbxproj @@ -8,12 +8,12 @@ /* Begin PBXBuildFile section */ 00E356F31AD99517003FC87E /* FabricExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* FabricExampleTests.m */; }; - 0C80B921A6F3F58F76C31292 /* libPods-FabricExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-FabricExample.a */; }; 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; - 7699B88040F8A987B510C191 /* libPods-FabricExample-FabricExampleTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-FabricExample-FabricExampleTests.a */; }; + 2A5AD97C3C4CF41E58149268 /* libPods-FabricExample-FabricExampleTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AC686FD7C8455654D147D14 /* libPods-FabricExample-FabricExampleTests.a */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; + 9D6B9B621E09E5B2FE12DCA8 /* libPods-FabricExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D9E9D914A676F6D4C45747B /* libPods-FabricExample.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -30,19 +30,19 @@ 00E356EE1AD99517003FC87E /* FabricExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FabricExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 00E356F21AD99517003FC87E /* FabricExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FabricExampleTests.m; sourceTree = ""; }; + 0DDF250920107A24927F6CDF /* Pods-FabricExample-FabricExampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FabricExample-FabricExampleTests.debug.xcconfig"; path = "Target Support Files/Pods-FabricExample-FabricExampleTests/Pods-FabricExample-FabricExampleTests.debug.xcconfig"; sourceTree = ""; }; 13B07F961A680F5B00A75B9A /* FabricExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FabricExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = FabricExample/AppDelegate.h; sourceTree = ""; }; 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = FabricExample/AppDelegate.mm; sourceTree = ""; }; 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = FabricExample/Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = FabricExample/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = FabricExample/main.m; sourceTree = ""; }; - 19F6CBCC0A4E27FBF8BF4A61 /* libPods-FabricExample-FabricExampleTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-FabricExample-FabricExampleTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 3B4392A12AC88292D35C810B /* Pods-FabricExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FabricExample.debug.xcconfig"; path = "Target Support Files/Pods-FabricExample/Pods-FabricExample.debug.xcconfig"; sourceTree = ""; }; - 5709B34CF0A7D63546082F79 /* Pods-FabricExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FabricExample.release.xcconfig"; path = "Target Support Files/Pods-FabricExample/Pods-FabricExample.release.xcconfig"; sourceTree = ""; }; - 5B7EB9410499542E8C5724F5 /* Pods-FabricExample-FabricExampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FabricExample-FabricExampleTests.debug.xcconfig"; path = "Target Support Files/Pods-FabricExample-FabricExampleTests/Pods-FabricExample-FabricExampleTests.debug.xcconfig"; sourceTree = ""; }; - 5DCACB8F33CDC322A6C60F78 /* libPods-FabricExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-FabricExample.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 1AF62F5E2F0E4051AB99B71C /* Pods-FabricExample-FabricExampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FabricExample-FabricExampleTests.release.xcconfig"; path = "Target Support Files/Pods-FabricExample-FabricExampleTests/Pods-FabricExample-FabricExampleTests.release.xcconfig"; sourceTree = ""; }; + 3D9E9D914A676F6D4C45747B /* libPods-FabricExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-FabricExample.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 5AC686FD7C8455654D147D14 /* libPods-FabricExample-FabricExampleTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-FabricExample-FabricExampleTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 749BDD636C281B41F0EADFA7 /* Pods-FabricExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FabricExample.debug.xcconfig"; path = "Target Support Files/Pods-FabricExample/Pods-FabricExample.debug.xcconfig"; sourceTree = ""; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = FabricExample/LaunchScreen.storyboard; sourceTree = ""; }; - 89C6BE57DB24E9ADA2F236DE /* Pods-FabricExample-FabricExampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FabricExample-FabricExampleTests.release.xcconfig"; path = "Target Support Files/Pods-FabricExample-FabricExampleTests/Pods-FabricExample-FabricExampleTests.release.xcconfig"; sourceTree = ""; }; + E1F60D5C313F707EC19FB4C2 /* Pods-FabricExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FabricExample.release.xcconfig"; path = "Target Support Files/Pods-FabricExample/Pods-FabricExample.release.xcconfig"; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; /* End PBXFileReference section */ @@ -51,7 +51,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7699B88040F8A987B510C191 /* libPods-FabricExample-FabricExampleTests.a in Frameworks */, + 2A5AD97C3C4CF41E58149268 /* libPods-FabricExample-FabricExampleTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -59,7 +59,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0C80B921A6F3F58F76C31292 /* libPods-FabricExample.a in Frameworks */, + 9D6B9B621E09E5B2FE12DCA8 /* libPods-FabricExample.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -100,8 +100,8 @@ isa = PBXGroup; children = ( ED297162215061F000B7C4FE /* JavaScriptCore.framework */, - 5DCACB8F33CDC322A6C60F78 /* libPods-FabricExample.a */, - 19F6CBCC0A4E27FBF8BF4A61 /* libPods-FabricExample-FabricExampleTests.a */, + 3D9E9D914A676F6D4C45747B /* libPods-FabricExample.a */, + 5AC686FD7C8455654D147D14 /* libPods-FabricExample-FabricExampleTests.a */, ); name = Frameworks; sourceTree = ""; @@ -140,10 +140,10 @@ BBD78D7AC51CEA395F1C20DB /* Pods */ = { isa = PBXGroup; children = ( - 3B4392A12AC88292D35C810B /* Pods-FabricExample.debug.xcconfig */, - 5709B34CF0A7D63546082F79 /* Pods-FabricExample.release.xcconfig */, - 5B7EB9410499542E8C5724F5 /* Pods-FabricExample-FabricExampleTests.debug.xcconfig */, - 89C6BE57DB24E9ADA2F236DE /* Pods-FabricExample-FabricExampleTests.release.xcconfig */, + 749BDD636C281B41F0EADFA7 /* Pods-FabricExample.debug.xcconfig */, + E1F60D5C313F707EC19FB4C2 /* Pods-FabricExample.release.xcconfig */, + 0DDF250920107A24927F6CDF /* Pods-FabricExample-FabricExampleTests.debug.xcconfig */, + 1AF62F5E2F0E4051AB99B71C /* Pods-FabricExample-FabricExampleTests.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -155,12 +155,12 @@ isa = PBXNativeTarget; buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "FabricExampleTests" */; buildPhases = ( - A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */, + 8B6C80369E4A426A395E93B7 /* [CP] Check Pods Manifest.lock */, 00E356EA1AD99517003FC87E /* Sources */, 00E356EB1AD99517003FC87E /* Frameworks */, 00E356EC1AD99517003FC87E /* Resources */, - C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */, - F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */, + 71EF37D844E9EC26F37ECD6E /* [CP] Embed Pods Frameworks */, + C3B89C7FD3DE1E07CB213794 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -176,14 +176,14 @@ isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "FabricExample" */; buildPhases = ( - C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */, + 15674DA29C723354D6AA807E /* [CP] Check Pods Manifest.lock */, FD10A7F022414F080027D42C /* Start Packager */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */, - E235C05ADACE081382539298 /* [CP] Copy Pods Resources */, + 5D9967C3C56532EEB8E00659 /* [CP] Embed Pods Frameworks */, + BA03EFD45EA639CE06E5E1F7 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -256,32 +256,17 @@ files = ( ); inputPaths = ( + "$(SRCROOT)/.xcode.env.local", + "$(SRCROOT)/.xcode.env", ); name = "Bundle React Native code and images"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "set -e\n\nexport NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; + shellScript = "set -e\n\nWITH_ENVIRONMENT=\"../node_modules/react-native/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"../node_modules/react-native/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n"; }; - 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-FabricExample/Pods-FabricExample-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-FabricExample/Pods-FabricExample-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FabricExample/Pods-FabricExample-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */ = { + 15674DA29C723354D6AA807E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -296,36 +281,31 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-FabricExample-FabricExampleTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-FabricExample-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = { + 5D9967C3C56532EEB8E00659 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-FabricExample/Pods-FabricExample-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-FabricExample-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-FabricExample/Pods-FabricExample-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FabricExample/Pods-FabricExample-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */ = { + 71EF37D844E9EC26F37ECD6E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -342,7 +322,29 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FabricExample-FabricExampleTests/Pods-FabricExample-FabricExampleTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = { + 8B6C80369E4A426A395E93B7 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-FabricExample-FabricExampleTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + BA03EFD45EA639CE06E5E1F7 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -359,7 +361,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FabricExample/Pods-FabricExample-resources.sh\"\n"; showEnvVarsInLog = 0; }; - F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */ = { + C3B89C7FD3DE1E07CB213794 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -428,7 +430,7 @@ /* Begin XCBuildConfiguration section */ 00E356F61AD99517003FC87E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-FabricExample-FabricExampleTests.debug.xcconfig */; + baseConfigurationReference = 0DDF250920107A24927F6CDF /* Pods-FabricExample-FabricExampleTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; GCC_PREPROCESSOR_DEFINITIONS = ( @@ -436,7 +438,7 @@ "$(inherited)", ); INFOPLIST_FILE = FabricExampleTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.4; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -455,12 +457,12 @@ }; 00E356F71AD99517003FC87E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-FabricExample-FabricExampleTests.release.xcconfig */; + baseConfigurationReference = 1AF62F5E2F0E4051AB99B71C /* Pods-FabricExample-FabricExampleTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; COPY_PHASE_STRIP = NO; INFOPLIST_FILE = FabricExampleTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.4; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -479,7 +481,7 @@ }; 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-FabricExample.debug.xcconfig */; + baseConfigurationReference = 749BDD636C281B41F0EADFA7 /* Pods-FabricExample.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; @@ -505,7 +507,7 @@ }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-FabricExample.release.xcconfig */; + baseConfigurationReference = E1F60D5C313F707EC19FB4C2 /* Pods-FabricExample.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; @@ -560,7 +562,7 @@ COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -576,7 +578,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.4; LD_RUNPATH_SEARCH_PATHS = ( /usr/lib/swift, "$(inherited)", @@ -594,6 +596,7 @@ "-DFOLLY_MOBILE=1", "-DFOLLY_USE_LIBCPP=1", ); + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; }; name = Debug; @@ -631,7 +634,7 @@ COPY_PHASE_STRIP = YES; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -640,7 +643,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.4; LD_RUNPATH_SEARCH_PATHS = ( /usr/lib/swift, "$(inherited)", @@ -657,6 +660,7 @@ "-DFOLLY_MOBILE=1", "-DFOLLY_USE_LIBCPP=1", ); + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; diff --git a/FabricExample/ios/FabricExample/AppDelegate.mm b/FabricExample/ios/FabricExample/AppDelegate.mm index 0166004077..0cbf33f8c7 100644 --- a/FabricExample/ios/FabricExample/AppDelegate.mm +++ b/FabricExample/ios/FabricExample/AppDelegate.mm @@ -16,6 +16,8 @@ #import +static NSString *const kRNConcurrentRoot = @"concurrentRoot"; + @interface AppDelegate () { RCTTurboModuleManager *_turboModuleManager; RCTSurfacePresenterBridgeAdapter *_bridgeAdapter; @@ -41,7 +43,8 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( bridge.surfacePresenter = _bridgeAdapter.surfacePresenter; #endif - UIView *rootView = RCTAppSetupDefaultRootView(bridge, @"FabricExample", nil); + NSDictionary *initProps = [self prepareInitialProps]; + UIView *rootView = RCTAppSetupDefaultRootView(bridge, @"FabricExample", initProps); if (@available(iOS 13.0, *)) { rootView.backgroundColor = [UIColor systemBackgroundColor]; @@ -57,6 +60,26 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( return YES; } +/// This method controls whether the `concurrentRoot`feature of React18 is turned on or off. +/// +/// @see: https://reactjs.org/blog/2022/03/29/react-v18.html +/// @note: This requires to be rendering on Fabric (i.e. on the New Architecture). +/// @return: `true` if the `concurrentRoot` feture is enabled. Otherwise, it returns `false`. +- (BOOL)concurrentRootEnabled +{ + // Switch this bool to turn on and off the concurrent root + return true; +} +- (NSDictionary *)prepareInitialProps +{ + NSMutableDictionary *initProps = [NSMutableDictionary new]; +#ifdef RCT_NEW_ARCH_ENABLED + initProps[kRNConcurrentRoot] = @([self concurrentRootEnabled]); +#endif + return initProps; +} + + - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge { #if DEBUG diff --git a/FabricExample/ios/Podfile b/FabricExample/ios/Podfile index 6493da9525..8e2516e0ee 100644 --- a/FabricExample/ios/Podfile +++ b/FabricExample/ios/Podfile @@ -1,7 +1,7 @@ require_relative '../node_modules/react-native/scripts/react_native_pods' require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' -platform :ios, '11.0' +platform :ios, '12.4' install! 'cocoapods', :deterministic_uuids => false ENV['RCT_NEW_ARCH_ENABLED'] = '1' @@ -18,7 +18,7 @@ target 'FabricExample' do :hermes_enabled => flags[:hermes_enabled], :fabric_enabled => flags[:fabric_enabled], # An abosolute path to your application root. - :app_path => "#{Dir.pwd}/.." + :app_path => "#{Pod::Config.instance.installation_root}/.." ) target 'FabricExampleTests' do diff --git a/FabricExample/ios/Podfile.lock b/FabricExample/ios/Podfile.lock index abf1f959f9..2f4e1911cc 100644 --- a/FabricExample/ios/Podfile.lock +++ b/FabricExample/ios/Podfile.lock @@ -2,19 +2,19 @@ PODS: - boost (1.76.0) - CocoaAsyncSocket (7.6.5) - DoubleConversion (1.1.6) - - FBLazyVector (0.68.0-rc.2) - - FBReactNativeSpec (0.68.0-rc.2): - - RCT-Folly (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-Core (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) + - FBLazyVector (0.69.0) + - FBReactNativeSpec (0.69.0): + - RCT-Folly (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-Core (= 0.69.0) + - React-jsi (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) - Flipper (0.125.0): - Flipper-Folly (~> 2.6) - Flipper-RSocket (~> 1.4) - Flipper-Boost-iOSX (1.76.0.1.11) - - Flipper-DoubleConversion (3.1.7) + - Flipper-DoubleConversion (3.2.0.1) - Flipper-Fmt (7.1.7) - Flipper-Folly (2.6.10): - Flipper-Boost-iOSX @@ -23,7 +23,7 @@ PODS: - Flipper-Glog - libevent (~> 2.1.12) - OpenSSL-Universal (= 1.1.1100) - - Flipper-Glog (0.3.9) + - Flipper-Glog (0.5.0.5) - Flipper-PeerTalk (0.0.4) - Flipper-RSocket (1.4.3): - Flipper-Folly (~> 2.6) @@ -73,7 +73,7 @@ PODS: - FlipperKit/FlipperKitNetworkPlugin - fmt (6.2.1) - glog (0.3.5) - - hermes-engine (0.11.0) + - hermes-engine (0.69.0) - libevent (2.1.12) - OpenSSL-Universal (1.1.1100) - RCT-Folly (2021.06.28.00-v2): @@ -98,546 +98,548 @@ PODS: - fmt (~> 6.2.1) - glog - libevent - - RCTRequired (0.68.0-rc.2) - - RCTTypeSafety (0.68.0-rc.2): - - FBLazyVector (= 0.68.0-rc.2) - - RCT-Folly (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - React-Core (= 0.68.0-rc.2) - - React (0.68.0-rc.2): - - React-Core (= 0.68.0-rc.2) - - React-Core/DevSupport (= 0.68.0-rc.2) - - React-Core/RCTWebSocket (= 0.68.0-rc.2) - - React-RCTActionSheet (= 0.68.0-rc.2) - - React-RCTAnimation (= 0.68.0-rc.2) - - React-RCTBlob (= 0.68.0-rc.2) - - React-RCTImage (= 0.68.0-rc.2) - - React-RCTLinking (= 0.68.0-rc.2) - - React-RCTNetwork (= 0.68.0-rc.2) - - React-RCTSettings (= 0.68.0-rc.2) - - React-RCTText (= 0.68.0-rc.2) - - React-RCTVibration (= 0.68.0-rc.2) - - React-callinvoker (0.68.0-rc.2) - - React-Codegen (0.68.0-rc.2): - - FBReactNativeSpec (= 0.68.0-rc.2) - - RCT-Folly (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-Core (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - React-rncore (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Core (0.68.0-rc.2): + - RCTRequired (0.69.0) + - RCTTypeSafety (0.69.0): + - FBLazyVector (= 0.69.0) + - RCTRequired (= 0.69.0) + - React-Core (= 0.69.0) + - React (0.69.0): + - React-Core (= 0.69.0) + - React-Core/DevSupport (= 0.69.0) + - React-Core/RCTWebSocket (= 0.69.0) + - React-RCTActionSheet (= 0.69.0) + - React-RCTAnimation (= 0.69.0) + - React-RCTBlob (= 0.69.0) + - React-RCTImage (= 0.69.0) + - React-RCTLinking (= 0.69.0) + - React-RCTNetwork (= 0.69.0) + - React-RCTSettings (= 0.69.0) + - React-RCTText (= 0.69.0) + - React-RCTVibration (= 0.69.0) + - React-bridging (0.69.0): + - RCT-Folly (= 2021.06.28.00-v2) + - React-jsi (= 0.69.0) + - React-callinvoker (0.69.0) + - React-Codegen (0.69.0): + - FBReactNativeSpec (= 0.69.0) + - RCT-Folly (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-Core (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - React-rncore (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Core (0.69.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.68.0-rc.2) - - React-cxxreact (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - React-perflogger (= 0.68.0-rc.2) + - React-Core/Default (= 0.69.0) + - React-cxxreact (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - React-perflogger (= 0.69.0) - Yoga - - React-Core/CoreModulesHeaders (0.68.0-rc.2): + - React-Core/CoreModulesHeaders (0.69.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - React-perflogger (= 0.68.0-rc.2) + - React-cxxreact (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - React-perflogger (= 0.69.0) - Yoga - - React-Core/Default (0.68.0-rc.2): + - React-Core/Default (0.69.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-cxxreact (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - React-perflogger (= 0.68.0-rc.2) + - React-cxxreact (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - React-perflogger (= 0.69.0) - Yoga - - React-Core/DevSupport (0.68.0-rc.2): + - React-Core/DevSupport (0.69.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.68.0-rc.2) - - React-Core/RCTWebSocket (= 0.68.0-rc.2) - - React-cxxreact (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - React-jsinspector (= 0.68.0-rc.2) - - React-perflogger (= 0.68.0-rc.2) + - React-Core/Default (= 0.69.0) + - React-Core/RCTWebSocket (= 0.69.0) + - React-cxxreact (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - React-jsinspector (= 0.69.0) + - React-perflogger (= 0.69.0) - Yoga - - React-Core/RCTActionSheetHeaders (0.68.0-rc.2): + - React-Core/RCTActionSheetHeaders (0.69.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - React-perflogger (= 0.68.0-rc.2) + - React-cxxreact (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - React-perflogger (= 0.69.0) - Yoga - - React-Core/RCTAnimationHeaders (0.68.0-rc.2): + - React-Core/RCTAnimationHeaders (0.69.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - React-perflogger (= 0.68.0-rc.2) + - React-cxxreact (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - React-perflogger (= 0.69.0) - Yoga - - React-Core/RCTBlobHeaders (0.68.0-rc.2): + - React-Core/RCTBlobHeaders (0.69.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - React-perflogger (= 0.68.0-rc.2) + - React-cxxreact (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - React-perflogger (= 0.69.0) - Yoga - - React-Core/RCTImageHeaders (0.68.0-rc.2): + - React-Core/RCTImageHeaders (0.69.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - React-perflogger (= 0.68.0-rc.2) + - React-cxxreact (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - React-perflogger (= 0.69.0) - Yoga - - React-Core/RCTLinkingHeaders (0.68.0-rc.2): + - React-Core/RCTLinkingHeaders (0.69.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - React-perflogger (= 0.68.0-rc.2) + - React-cxxreact (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - React-perflogger (= 0.69.0) - Yoga - - React-Core/RCTNetworkHeaders (0.68.0-rc.2): + - React-Core/RCTNetworkHeaders (0.69.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - React-perflogger (= 0.68.0-rc.2) + - React-cxxreact (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - React-perflogger (= 0.69.0) - Yoga - - React-Core/RCTSettingsHeaders (0.68.0-rc.2): + - React-Core/RCTSettingsHeaders (0.69.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - React-perflogger (= 0.68.0-rc.2) + - React-cxxreact (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - React-perflogger (= 0.69.0) - Yoga - - React-Core/RCTTextHeaders (0.68.0-rc.2): + - React-Core/RCTTextHeaders (0.69.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - React-perflogger (= 0.68.0-rc.2) + - React-cxxreact (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - React-perflogger (= 0.69.0) - Yoga - - React-Core/RCTVibrationHeaders (0.68.0-rc.2): + - React-Core/RCTVibrationHeaders (0.69.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - React-perflogger (= 0.68.0-rc.2) + - React-cxxreact (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - React-perflogger (= 0.69.0) - Yoga - - React-Core/RCTWebSocket (0.68.0-rc.2): + - React-Core/RCTWebSocket (0.69.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.68.0-rc.2) - - React-cxxreact (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - React-perflogger (= 0.68.0-rc.2) + - React-Core/Default (= 0.69.0) + - React-cxxreact (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - React-perflogger (= 0.69.0) - Yoga - - React-CoreModules (0.68.0-rc.2): - - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-Codegen (= 0.68.0-rc.2) - - React-Core/CoreModulesHeaders (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-RCTImage (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-cxxreact (0.68.0-rc.2): + - React-CoreModules (0.69.0): + - RCT-Folly (= 2021.06.28.00-v2) + - RCTTypeSafety (= 0.69.0) + - React-Codegen (= 0.69.0) + - React-Core/CoreModulesHeaders (= 0.69.0) + - React-jsi (= 0.69.0) + - React-RCTImage (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-cxxreact (0.69.0): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-callinvoker (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsinspector (= 0.68.0-rc.2) - - React-logger (= 0.68.0-rc.2) - - React-perflogger (= 0.68.0-rc.2) - - React-runtimeexecutor (= 0.68.0-rc.2) - - React-Fabric (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-Fabric/animations (= 0.68.0-rc.2) - - React-Fabric/attributedstring (= 0.68.0-rc.2) - - React-Fabric/butter (= 0.68.0-rc.2) - - React-Fabric/componentregistry (= 0.68.0-rc.2) - - React-Fabric/componentregistrynative (= 0.68.0-rc.2) - - React-Fabric/components (= 0.68.0-rc.2) - - React-Fabric/config (= 0.68.0-rc.2) - - React-Fabric/core (= 0.68.0-rc.2) - - React-Fabric/debug_core (= 0.68.0-rc.2) - - React-Fabric/debug_renderer (= 0.68.0-rc.2) - - React-Fabric/imagemanager (= 0.68.0-rc.2) - - React-Fabric/leakchecker (= 0.68.0-rc.2) - - React-Fabric/mounting (= 0.68.0-rc.2) - - React-Fabric/runtimescheduler (= 0.68.0-rc.2) - - React-Fabric/scheduler (= 0.68.0-rc.2) - - React-Fabric/telemetry (= 0.68.0-rc.2) - - React-Fabric/templateprocessor (= 0.68.0-rc.2) - - React-Fabric/textlayoutmanager (= 0.68.0-rc.2) - - React-Fabric/uimanager (= 0.68.0-rc.2) - - React-Fabric/utils (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/animations (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/attributedstring (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/butter (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/componentregistry (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/componentregistrynative (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/components (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-Fabric/components/activityindicator (= 0.68.0-rc.2) - - React-Fabric/components/image (= 0.68.0-rc.2) - - React-Fabric/components/inputaccessory (= 0.68.0-rc.2) - - React-Fabric/components/legacyviewmanagerinterop (= 0.68.0-rc.2) - - React-Fabric/components/modal (= 0.68.0-rc.2) - - React-Fabric/components/root (= 0.68.0-rc.2) - - React-Fabric/components/safeareaview (= 0.68.0-rc.2) - - React-Fabric/components/scrollview (= 0.68.0-rc.2) - - React-Fabric/components/slider (= 0.68.0-rc.2) - - React-Fabric/components/text (= 0.68.0-rc.2) - - React-Fabric/components/textinput (= 0.68.0-rc.2) - - React-Fabric/components/unimplementedview (= 0.68.0-rc.2) - - React-Fabric/components/view (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/components/activityindicator (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/components/image (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/components/inputaccessory (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/components/legacyviewmanagerinterop (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/components/modal (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/components/root (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/components/safeareaview (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/components/scrollview (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/components/slider (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/components/text (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/components/textinput (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/components/unimplementedview (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/components/view (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) + - React-callinvoker (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsinspector (= 0.69.0) + - React-logger (= 0.69.0) + - React-perflogger (= 0.69.0) + - React-runtimeexecutor (= 0.69.0) + - React-Fabric (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-Fabric/animations (= 0.69.0) + - React-Fabric/attributedstring (= 0.69.0) + - React-Fabric/butter (= 0.69.0) + - React-Fabric/componentregistry (= 0.69.0) + - React-Fabric/componentregistrynative (= 0.69.0) + - React-Fabric/components (= 0.69.0) + - React-Fabric/config (= 0.69.0) + - React-Fabric/core (= 0.69.0) + - React-Fabric/debug_core (= 0.69.0) + - React-Fabric/debug_renderer (= 0.69.0) + - React-Fabric/imagemanager (= 0.69.0) + - React-Fabric/leakchecker (= 0.69.0) + - React-Fabric/mounting (= 0.69.0) + - React-Fabric/runtimescheduler (= 0.69.0) + - React-Fabric/scheduler (= 0.69.0) + - React-Fabric/telemetry (= 0.69.0) + - React-Fabric/templateprocessor (= 0.69.0) + - React-Fabric/textlayoutmanager (= 0.69.0) + - React-Fabric/uimanager (= 0.69.0) + - React-Fabric/utils (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/animations (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/attributedstring (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/butter (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/componentregistry (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/componentregistrynative (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/components (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-Fabric/components/activityindicator (= 0.69.0) + - React-Fabric/components/image (= 0.69.0) + - React-Fabric/components/inputaccessory (= 0.69.0) + - React-Fabric/components/legacyviewmanagerinterop (= 0.69.0) + - React-Fabric/components/modal (= 0.69.0) + - React-Fabric/components/root (= 0.69.0) + - React-Fabric/components/safeareaview (= 0.69.0) + - React-Fabric/components/scrollview (= 0.69.0) + - React-Fabric/components/slider (= 0.69.0) + - React-Fabric/components/text (= 0.69.0) + - React-Fabric/components/textinput (= 0.69.0) + - React-Fabric/components/unimplementedview (= 0.69.0) + - React-Fabric/components/view (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/components/activityindicator (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/components/image (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/components/inputaccessory (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/components/legacyviewmanagerinterop (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/components/modal (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/components/root (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/components/safeareaview (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/components/scrollview (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/components/slider (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/components/text (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/components/textinput (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/components/unimplementedview (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/components/view (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) - Yoga - - React-Fabric/config (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/core (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/debug_core (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/debug_renderer (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/imagemanager (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - React-RCTImage (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/leakchecker (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/mounting (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/runtimescheduler (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/scheduler (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/telemetry (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/templateprocessor (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/textlayoutmanager (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) + - React-Fabric/config (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/core (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/debug_core (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/debug_renderer (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/imagemanager (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - React-RCTImage (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/leakchecker (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/mounting (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/runtimescheduler (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/scheduler (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/telemetry (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/templateprocessor (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/textlayoutmanager (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) - React-Fabric/uimanager - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/uimanager (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-Fabric/utils (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.0-rc.2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-graphics (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-graphics (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - React-Core/Default (= 0.68.0-rc.2) - - React-hermes (0.68.0-rc.2): + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/uimanager (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-Fabric/utils (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0) + - RCTTypeSafety (= 0.69.0) + - React-graphics (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-graphics (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - React-Core/Default (= 0.69.0) + - React-hermes (0.69.0): - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2021.06.28.00-v2) - RCT-Folly/Futures (= 2021.06.28.00-v2) - - React-cxxreact (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-jsiexecutor (= 0.68.0-rc.2) - - React-jsinspector (= 0.68.0-rc.2) - - React-perflogger (= 0.68.0-rc.2) - - React-jsi (0.68.0-rc.2): + - React-cxxreact (= 0.69.0) + - React-jsi (= 0.69.0) + - React-jsiexecutor (= 0.69.0) + - React-jsinspector (= 0.69.0) + - React-perflogger (= 0.69.0) + - React-jsi (0.69.0): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-jsi/Default (= 0.68.0-rc.2) - - React-jsi/Default (0.68.0-rc.2): + - React-jsi/Default (= 0.69.0) + - React-jsi/Default (0.69.0): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-jsi/Fabric (0.68.0-rc.2): + - React-jsi/Fabric (0.69.0): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-jsiexecutor (0.68.0-rc.2): + - React-jsiexecutor (0.69.0): - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-cxxreact (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-perflogger (= 0.68.0-rc.2) - - React-jsinspector (0.68.0-rc.2) - - React-logger (0.68.0-rc.2): + - React-cxxreact (= 0.69.0) + - React-jsi (= 0.69.0) + - React-perflogger (= 0.69.0) + - React-jsinspector (0.69.0) + - React-logger (0.69.0): - glog - - react-native-safe-area-context (4.0.1): + - react-native-safe-area-context (4.2.5): - RCT-Folly - RCTRequired - RCTTypeSafety - React - - react-native-safe-area-context/common (= 4.0.1) - - react-native-safe-area-context/fabric (= 4.0.1) + - react-native-safe-area-context/common (= 4.2.5) + - react-native-safe-area-context/fabric (= 4.2.5) - ReactCommon/turbomodule/core - - react-native-safe-area-context/common (4.0.1): + - react-native-safe-area-context/common (4.2.5): - RCT-Folly - RCTRequired - RCTTypeSafety - React - ReactCommon/turbomodule/core - - react-native-safe-area-context/fabric (4.0.1): + - react-native-safe-area-context/fabric (4.2.5): - RCT-Folly - RCTRequired - RCTTypeSafety @@ -646,78 +648,79 @@ PODS: - react-native-safe-area-context/common - React-RCTFabric - ReactCommon/turbomodule/core - - React-perflogger (0.68.0-rc.2) - - React-RCTActionSheet (0.68.0-rc.2): - - React-Core/RCTActionSheetHeaders (= 0.68.0-rc.2) - - React-RCTAnimation (0.68.0-rc.2): - - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-Codegen (= 0.68.0-rc.2) - - React-Core/RCTAnimationHeaders (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-RCTBlob (0.68.0-rc.2): - - RCT-Folly (= 2021.06.28.00-v2) - - React-Codegen (= 0.68.0-rc.2) - - React-Core/RCTBlobHeaders (= 0.68.0-rc.2) - - React-Core/RCTWebSocket (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-RCTNetwork (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-RCTFabric (0.68.0-rc.2): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - React-Core (= 0.68.0-rc.2) - - React-Fabric (= 0.68.0-rc.2) - - React-RCTImage (= 0.68.0-rc.2) - - React-RCTImage (0.68.0-rc.2): - - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-Codegen (= 0.68.0-rc.2) - - React-Core/RCTImageHeaders (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-RCTNetwork (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-RCTLinking (0.68.0-rc.2): - - React-Codegen (= 0.68.0-rc.2) - - React-Core/RCTLinkingHeaders (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-RCTNetwork (0.68.0-rc.2): - - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-Codegen (= 0.68.0-rc.2) - - React-Core/RCTNetworkHeaders (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-RCTSettings (0.68.0-rc.2): - - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.68.0-rc.2) - - React-Codegen (= 0.68.0-rc.2) - - React-Core/RCTSettingsHeaders (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-RCTText (0.68.0-rc.2): - - React-Core/RCTTextHeaders (= 0.68.0-rc.2) - - React-RCTVibration (0.68.0-rc.2): - - RCT-Folly (= 2021.06.28.00-v2) - - React-Codegen (= 0.68.0-rc.2) - - React-Core/RCTVibrationHeaders (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (= 0.68.0-rc.2) - - React-rncore (0.68.0-rc.2) - - React-runtimeexecutor (0.68.0-rc.2): - - React-jsi (= 0.68.0-rc.2) - - ReactCommon/turbomodule/core (0.68.0-rc.2): + - React-perflogger (0.69.0) + - React-RCTActionSheet (0.69.0): + - React-Core/RCTActionSheetHeaders (= 0.69.0) + - React-RCTAnimation (0.69.0): + - RCT-Folly (= 2021.06.28.00-v2) + - RCTTypeSafety (= 0.69.0) + - React-Codegen (= 0.69.0) + - React-Core/RCTAnimationHeaders (= 0.69.0) + - React-jsi (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-RCTBlob (0.69.0): + - RCT-Folly (= 2021.06.28.00-v2) + - React-Codegen (= 0.69.0) + - React-Core/RCTBlobHeaders (= 0.69.0) + - React-Core/RCTWebSocket (= 0.69.0) + - React-jsi (= 0.69.0) + - React-RCTNetwork (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-RCTFabric (0.69.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - React-Core (= 0.69.0) + - React-Fabric (= 0.69.0) + - React-RCTImage (= 0.69.0) + - React-RCTImage (0.69.0): + - RCT-Folly (= 2021.06.28.00-v2) + - RCTTypeSafety (= 0.69.0) + - React-Codegen (= 0.69.0) + - React-Core/RCTImageHeaders (= 0.69.0) + - React-jsi (= 0.69.0) + - React-RCTNetwork (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-RCTLinking (0.69.0): + - React-Codegen (= 0.69.0) + - React-Core/RCTLinkingHeaders (= 0.69.0) + - React-jsi (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-RCTNetwork (0.69.0): + - RCT-Folly (= 2021.06.28.00-v2) + - RCTTypeSafety (= 0.69.0) + - React-Codegen (= 0.69.0) + - React-Core/RCTNetworkHeaders (= 0.69.0) + - React-jsi (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-RCTSettings (0.69.0): + - RCT-Folly (= 2021.06.28.00-v2) + - RCTTypeSafety (= 0.69.0) + - React-Codegen (= 0.69.0) + - React-Core/RCTSettingsHeaders (= 0.69.0) + - React-jsi (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-RCTText (0.69.0): + - React-Core/RCTTextHeaders (= 0.69.0) + - React-RCTVibration (0.69.0): + - RCT-Folly (= 2021.06.28.00-v2) + - React-Codegen (= 0.69.0) + - React-Core/RCTVibrationHeaders (= 0.69.0) + - React-jsi (= 0.69.0) + - ReactCommon/turbomodule/core (= 0.69.0) + - React-rncore (0.69.0) + - React-runtimeexecutor (0.69.0): + - React-jsi (= 0.69.0) + - ReactCommon/turbomodule/core (0.69.0): - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-callinvoker (= 0.68.0-rc.2) - - React-Core (= 0.68.0-rc.2) - - React-cxxreact (= 0.68.0-rc.2) - - React-jsi (= 0.68.0-rc.2) - - React-logger (= 0.68.0-rc.2) - - React-perflogger (= 0.68.0-rc.2) - - RNGestureHandler (2.3.0): + - React-bridging (= 0.69.0) + - React-callinvoker (= 0.69.0) + - React-Core (= 0.69.0) + - React-cxxreact (= 0.69.0) + - React-jsi (= 0.69.0) + - React-logger (= 0.69.0) + - React-perflogger (= 0.69.0) + - RNGestureHandler (2.5.0): - RCT-Folly (= 2021.06.28.00-v2) - RCTRequired - RCTTypeSafety @@ -754,10 +757,10 @@ DEPENDENCIES: - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`) - Flipper (= 0.125.0) - Flipper-Boost-iOSX (= 1.76.0.1.11) - - Flipper-DoubleConversion (= 3.1.7) + - Flipper-DoubleConversion (= 3.2.0.1) - Flipper-Fmt (= 7.1.7) - Flipper-Folly (= 2.6.10) - - Flipper-Glog (= 0.3.9) + - Flipper-Glog (= 0.5.0.5) - Flipper-PeerTalk (= 0.0.4) - Flipper-RSocket (= 1.4.3) - FlipperKit (= 0.125.0) @@ -774,7 +777,7 @@ DEPENDENCIES: - FlipperKit/FlipperKitUserDefaultsPlugin (= 0.125.0) - FlipperKit/SKIOSNetworkPlugin (= 0.125.0) - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) - - hermes-engine (~> 0.11.0) + - hermes-engine (from `../node_modules/react-native/sdks/hermes/hermes-engine.podspec`) - libevent (~> 2.1.12) - OpenSSL-Universal (= 1.1.1100) - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) @@ -782,6 +785,7 @@ DEPENDENCIES: - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`) - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) - React (from `../node_modules/react-native/`) + - React-bridging (from `../node_modules/react-native/ReactCommon/react/bridging`) - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) - React-Codegen (from `build/generated/ios`) - React-Core (from `../node_modules/react-native/`) @@ -829,7 +833,6 @@ SPEC REPOS: - Flipper-RSocket - FlipperKit - fmt - - hermes-engine - libevent - OpenSSL-Universal - SocketRocket @@ -846,6 +849,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/React/FBReactNativeSpec" glog: :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" + hermes-engine: + :podspec: "../node_modules/react-native/sdks/hermes/hermes-engine.podspec" RCT-Folly: :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" RCTRequired: @@ -854,6 +859,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/Libraries/TypeSafety" React: :path: "../node_modules/react-native/" + React-bridging: + :path: "../node_modules/react-native/ReactCommon/react/bridging" React-callinvoker: :path: "../node_modules/react-native/ReactCommon/callinvoker" React-Codegen: @@ -918,60 +925,61 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: boost: a7c83b31436843459a1961bfd74b96033dc77234 CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99 - DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662 - FBLazyVector: 07eb8bb0d56ecb0c16f771d81f0f25008bc403b5 - FBReactNativeSpec: d15e0e4014f3ce41333bcacafc8e07e35011c727 + DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54 + FBLazyVector: f98dec9f199b7b51db586fe0140f509fabd5cc54 + FBReactNativeSpec: a18ce612cc55071c8b5fc186125e60d993e749bc Flipper: 26fc4b7382499f1281eb8cb921e5c3ad6de91fe0 Flipper-Boost-iOSX: fd1e2b8cbef7e662a122412d7ac5f5bea715403c - Flipper-DoubleConversion: 57ffbe81ef95306cc9e69c4aa3aeeeeb58a6a28c + Flipper-DoubleConversion: 2dc99b02f658daf147069aad9dbd29d8feb06d30 Flipper-Fmt: 60cbdd92fc254826e61d669a5d87ef7015396a9b Flipper-Folly: 584845625005ff068a6ebf41f857f468decd26b3 - Flipper-Glog: 05579840e2750ec907ee2f81544f41ad76a7cae4 + Flipper-Glog: 70c50ce58ddaf67dc35180db05f191692570f446 Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9 Flipper-RSocket: d9d9ade67cbecf6ac10730304bf5607266dd2541 FlipperKit: cbdee19bdd4e7f05472a66ce290f1b729ba3cb86 fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 - glog: 476ee3e89abb49e07f822b48323c51c57124b572 - hermes-engine: 84e3af1ea01dd7351ac5d8689cbbea1f9903ffc3 + glog: 3d02b25ca00c2d456734d0bcff864cbc62f6ae1a + hermes-engine: 03851318b18b534b671ea435fad2202154135c72 libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913 OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c - RCT-Folly: 803a9cfd78114b2ec0f140cfa6fa2a6bafb2d685 - RCTRequired: 180eaa134050e3315986c2ae145f3674be78ae3e - RCTTypeSafety: 91d830366397fae0974496104cedce043279045d - React: f6ee8a53d6212d8939ce92a537cb4b179dc01109 - React-callinvoker: 62fc4e32f979e20a321d60e37c792b70c210244b - React-Codegen: 85af5324b94f33232ca46a619f82f825a8edd5cd - React-Core: d894f74339f2c56bf2d4e87c20f135b34803d676 - React-CoreModules: 89cdf26ecff5d019f5e73c2cb750abc9f2657c87 - React-cxxreact: f7bad9461a1570a1871b9f2b3276ccd989253562 - React-Fabric: bd860a32a1441b16954b4a42604493b389ec0e0f - React-graphics: 1f55c02e913e20f03124bb0e4e70e2423d54f6ae - React-hermes: 111e0a44755739a28e48a307b1867de7b680d564 - React-jsi: ef80f544ee1c0b9d7d29b33963520fafd9992fa9 - React-jsiexecutor: 352a2d26dd981cf2586e144196ae0972fd7ee0d0 - React-jsinspector: f5ae77343a320a7d644b424ab4808c7827f3a1b3 - React-logger: 2fa2f7404a8f41ed2c787e1bb84d13343f2997cf - react-native-safe-area-context: 8fbc95874c160b6e830cb7fada0c4d7622e8d331 - React-perflogger: 3bf9ae62c5bff7308a3886ab4e51f4420bfa16c0 - React-RCTActionSheet: d056d06abe9e0a7c59a6dbd6103a323417bdc901 - React-RCTAnimation: 34339473f0ebaf7b183a2344a1fe6a18da6162a8 - React-RCTBlob: 08c8d788b269ff3ea1df236a33b91d1cfaed0f0d - React-RCTFabric: 1b30ab3573c3a66bae9a68b3102884b6a3cf99bc - React-RCTImage: a4d41a79b2a1cbfdbf779907f803f57ebbb85af1 - React-RCTLinking: a98387924d98d68e686ebaa539bf0523ebb3d61c - React-RCTNetwork: dc08d04b3f49c42fcc6d56c869fd98542945d48a - React-RCTSettings: 45a6f0a9a45eb0f1f0272c359af8ce6957b6eb10 - React-RCTText: b88155b89ba6fb2d4e21d17dce575d0fc206a7b1 - React-RCTVibration: 25ef5d6f6141ea389d41d93d5a2ca1b4771920b4 - React-rncore: f9e4ffbbe4bc01bb34869b73320da97d98227a04 - React-runtimeexecutor: 37e5fa0b81067a8e487391e2816bae8813b226a5 - ReactCommon: 4c7431a20d472996669b2230f34df0115bf5dc8d - RNGestureHandler: 0ccc67ba16a3833b6edae55eb92d9769838a81fd - RNScreens: 9c1dfa815b0e70f24453f6acd1fb26090ddd38cb + RCT-Folly: 4d8508a426467c48885f1151029bc15fa5d7b3b8 + RCTRequired: eff60a46da0f496a6c76c8f60108c20626860d27 + RCTTypeSafety: 8cc8a45d0e2f93f1b42b5b2bbf23c4143f19935a + React: 8a8fc19196a41141ecb5bde33c97091cdc25ccd8 + React-bridging: 543858c1fc01ed8264585c5a2646305d20225840 + React-callinvoker: cc62aa541f261cee6f990f870dbf6aff38f97eef + React-Codegen: 7e911be8678357bfae75ff60ba6231780c68e949 + React-Core: 7faa8679c6f38b5462a71d55b399483f46365e44 + React-CoreModules: 3a51e8d50928a8593ea44606c00ffa60db95222f + React-cxxreact: 51a2239091bc13a3c0b5b1cb445b1585a483df2d + React-Fabric: af0fa77fddba0f13b775856ae19117934ec5cfb0 + React-graphics: 2d0bc92b641fb84924ff55f98161391ce5112372 + React-hermes: 585652ef95faf9ad06066b3b27fe336b6cc44e64 + React-jsi: 80aef7359ddaacd86f7247fec6a8dff4db099dc6 + React-jsiexecutor: b2a049b9f156342f6037ccb0c8acf69f923d3089 + React-jsinspector: 6aced68014b275b7abd073c9598b0affd0e1669c + React-logger: bcf33ce10afa135158c72635e621ddb94126c610 + react-native-safe-area-context: a9616f1fd257ff31946b518266a62f50dbcb3d5b + React-perflogger: aa48956d87bae67fc847acc196fae97928b96cd3 + React-RCTActionSheet: 4eaab2b885130ce9a88c8fdac5f1992315da80f6 + React-RCTAnimation: 5e91e3ceb988838fa43615bb602181be30d2b26e + React-RCTBlob: 4fc8f15c018635668dec9b577f46acf75f604a68 + React-RCTFabric: e22d23ecc2c1672c3a53feff7862e5ec04e6ff7c + React-RCTImage: 53ece22415c499ea18f0acafc2bc7ea89517a78c + React-RCTLinking: 0211dd109987c22d9b51d187498cac55a43fe24e + React-RCTNetwork: 540c0087fd0382c9b959169eb0e3727306f5d812 + React-RCTSettings: d1e584c83392d1babbe5e731af10c2726d2545e2 + React-RCTText: 9c5de1f593a548a2dbeb991ee01c88bef86f0659 + React-RCTVibration: 7549ef7b07aad1cc629f4c6d88c325366f26423c + React-rncore: 0a5131510415ca520866410f3504832de3d6f753 + React-runtimeexecutor: 7ad268dee53d001697e13264c6bc8e95a902352e + ReactCommon: 74a3b8ee497c6d50ce86ef57e15c4c5bf654b83d + RNGestureHandler: 28c0a447ceb87b96c4045c2f786f67958837f320 + RNScreens: 592316e0744de3b640e90c335a45aad13088381a SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608 - Yoga: d7b12009fb66b91a161cddf00c349d42a0015de2 + Yoga: 4935173923cabaa830e195be3e8e4cac045a8f90 YogaKit: f782866e155069a2cca2517aafea43200b01fd5a -PODFILE CHECKSUM: d1692aab6ddf32b03dc03304e2dc04073ec65f35 +PODFILE CHECKSUM: a4b75881b792b0b32549559ca76f4a5a711245c2 -COCOAPODS: 1.11.2 +COCOAPODS: 1.11.3 diff --git a/FabricExample/metro.config.js b/FabricExample/metro.config.js index b6580e1336..70cf06a4e5 100644 --- a/FabricExample/metro.config.js +++ b/FabricExample/metro.config.js @@ -1,5 +1,3 @@ -/* eslint-disable import/no-commonjs */ - const path = require('path'); const exclusionList = require('metro-config/src/defaults/exclusionList'); const escape = require('escape-string-regexp'); @@ -18,8 +16,9 @@ module.exports = { resolver: { blacklistRE: exclusionList( modules.map( - m => new RegExp(`^${escape(path.join(root, 'node_modules', m))}\\/.*$`), - ), + (m) => + new RegExp(`^${escape(path.join(root, 'node_modules', m))}\\/.*$`) + ) ), extraNodeModules: modules.reduce((acc, name) => { diff --git a/FabricExample/package.json b/FabricExample/package.json index 6e37231fb6..6d09bbf00a 100644 --- a/FabricExample/package.json +++ b/FabricExample/package.json @@ -7,27 +7,42 @@ "ios": "react-native run-ios", "start": "react-native start", "test": "jest", - "lint": "eslint ." + "lint": "eslint . --ext .js,.jsx,.ts,.tsx", + "ts-check": "yarn tsc --noEmit", + "lint-check": "yarn eslint src/ && yarn prettier --check src/", + "postinstall": "patch-package" }, "dependencies": { "@react-native/babel-plugin-codegen": "^0.0.6", "@react-navigation/native": "^6.0.8", "@react-navigation/native-stack": "^6.5.0", - "react": "17.0.2", - "react-native": "0.68.0-rc.2", + "patch-package": "^6.4.7", + "postinstall-postinstall": "^2.1.0", + "react": "18.0.0", + "react-native": "^0.69.0", "react-native-gesture-handler": "link:../", - "react-native-safe-area-context": "^4.0.1", - "react-native-screens": "^3.13.1" + "react-native-safe-area-context": "^4.2.5", + "react-native-screens": "software-mansion/react-native-screens#568e588817538740dff23a3590748614d4c346e3" }, "devDependencies": { "@babel/core": "^7.12.9", + "@babel/preset-env": "^7.1.6", "@babel/runtime": "^7.12.5", - "@react-native-community/eslint-config": "^2.0.0", + "@react-native-community/eslint-config": "^3.0.0", "babel-jest": "^26.6.3", - "eslint": "^7.32.0", + "eslint": "^8.12.0", "jest": "^26.6.3", - "metro-react-native-babel-preset": "^0.67.0", - "react-test-renderer": "17.0.2" + "metro-react-native-babel-preset": "^0.70.3", + "mkdirp": "^1.0.4", + "prettier": "^2.6.1", + "react-test-renderer": "^18.0.0", + "typescript": "^4.5.5" + }, + "resolutions": { + "@typescript-eslint/eslint-plugin": "^5.17.0", + "@typescript-eslint/parser": "^5.17.0", + "eslint-plugin-react-native": "^4.0.0", + "@types/react": "18.0.0" }, "jest": { "preset": "react-native" diff --git a/FabricExample/patches/react-native-safe-area-context+4.2.5.patch b/FabricExample/patches/react-native-safe-area-context+4.2.5.patch new file mode 100644 index 0000000000..7eea719afb --- /dev/null +++ b/FabricExample/patches/react-native-safe-area-context+4.2.5.patch @@ -0,0 +1,34 @@ +diff --git a/node_modules/react-native-safe-area-context/android/src/main/jni/Android.mk b/node_modules/react-native-safe-area-context/android/src/main/jni/Android.mk +index 6166527..33a7e73 100644 +--- a/node_modules/react-native-safe-area-context/android/src/main/jni/Android.mk ++++ b/node_modules/react-native-safe-area-context/android/src/main/jni/Android.mk +@@ -20,7 +20,7 @@ LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) $(GENERATED_SRC_DIR)/codegen/jni + LOCAL_SHARED_LIBRARIES := libjsi \ + libfbjni \ + libglog \ +- libfolly_json \ ++ libfolly_runtime \ + libyoga \ + libreact_nativemodule_core \ + libturbomodulejsijni \ +@@ -28,7 +28,6 @@ LOCAL_SHARED_LIBRARIES := libjsi \ + libreact_render_core \ + libreact_render_graphics \ + libfabricjni \ +- libfolly_futures \ + libreact_debug \ + libreact_render_componentregistry \ + libreact_render_debug \ +diff --git a/node_modules/react-native-safe-area-context/common/cpp/Android.mk b/node_modules/react-native-safe-area-context/common/cpp/Android.mk +index a7680a6..69d86d6 100644 +--- a/node_modules/react-native-safe-area-context/common/cpp/Android.mk ++++ b/node_modules/react-native-safe-area-context/common/cpp/Android.mk +@@ -15,7 +15,7 @@ LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.cpp) $(wildcard $(LOCAL_PATH)/reac + + LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) $(LOCAL_PATH)/react/renderer/components/safeareacontext + +-LOCAL_SHARED_LIBRARIES := libjsi libglog libfolly_json libyoga libreact_nativemodule_core librrc_view libreact_render_core libreact_render_graphics libfbjni libturbomodulejsijni libreact_codegen_rncore libreact_debug libreact_render_debug libreact_render_mapbuffer libreact_codegen_safeareacontext ++LOCAL_SHARED_LIBRARIES := libjsi libglog libfolly_runtime libyoga libreact_nativemodule_core librrc_view libreact_render_core libreact_render_graphics libfbjni libturbomodulejsijni libreact_codegen_rncore libreact_debug libreact_render_debug libreact_render_mapbuffer libreact_codegen_safeareacontext + + LOCAL_CFLAGS := \ + -DLOG_TAG=\"ReactNative\" diff --git a/FabricExample/patches/react-native-screens+3.13.1.patch b/FabricExample/patches/react-native-screens+3.13.1.patch new file mode 100644 index 0000000000..0fb9d0cdaa --- /dev/null +++ b/FabricExample/patches/react-native-screens+3.13.1.patch @@ -0,0 +1,81 @@ +diff --git a/node_modules/react-native-screens/android/build.gradle b/node_modules/react-native-screens/android/build.gradle +index 7ceb834..13544e8 100644 +--- a/node_modules/react-native-screens/android/build.gradle ++++ b/node_modules/react-native-screens/android/build.gradle +@@ -32,6 +32,11 @@ if (isNewArchitectureEnabled()) { + apply plugin: 'com.android.library' + apply plugin: 'kotlin-android' + ++def reactNativeArchitectures() { ++ def value = project.getProperties().get("reactNativeArchitectures") ++ return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"] ++} ++ + android { + compileSdkVersion safeExtGet('compileSdkVersion', 28) + +@@ -66,6 +71,9 @@ android { + targets "rnscreens_modules" + } + } ++ ndk { ++ abiFilters (*reactNativeArchitectures()) ++ } + } + } + lintOptions { +diff --git a/node_modules/react-native-screens/android/src/main/jni/Android.mk b/node_modules/react-native-screens/android/src/main/jni/Android.mk +index 914607f..7684d3b 100644 +--- a/node_modules/react-native-screens/android/src/main/jni/Android.mk ++++ b/node_modules/react-native-screens/android/src/main/jni/Android.mk +@@ -20,7 +20,7 @@ LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) $(GENERATED_SRC_DIR)/codegen/jni + LOCAL_SHARED_LIBRARIES := libjsi \ + libfbjni \ + libglog \ +- libfolly_json \ ++ libfolly_runtime \ + libyoga \ + libreact_nativemodule_core \ + libturbomodulejsijni \ +@@ -28,7 +28,6 @@ LOCAL_SHARED_LIBRARIES := libjsi \ + libreact_render_core \ + libreact_render_graphics \ + libfabricjni \ +- libfolly_futures \ + libreact_debug \ + libreact_render_componentregistry \ + libreact_render_debug \ +diff --git a/node_modules/react-native-screens/common/cpp/Android.mk b/node_modules/react-native-screens/common/cpp/Android.mk +index 3b8afa2..454e4ff 100644 +--- a/node_modules/react-native-screens/common/cpp/Android.mk ++++ b/node_modules/react-native-screens/common/cpp/Android.mk +@@ -15,7 +15,7 @@ LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) $(GENERATED_SRC_DIR)/codegen/jni + LOCAL_SHARED_LIBRARIES := libjsi \ + libfbjni \ + libglog \ +- libfolly_json \ ++ libfolly_runtime \ + libyoga \ + libreact_nativemodule_core \ + libturbomodulejsijni \ +@@ -23,7 +23,6 @@ LOCAL_SHARED_LIBRARIES := libjsi \ + libreact_render_core \ + libreact_render_graphics \ + libfabricjni \ +- libfolly_futures \ + libreact_debug \ + libreact_render_componentregistry \ + libreact_render_debug \ +diff --git a/node_modules/react-native-screens/ios/RNSScreenStack.mm b/node_modules/react-native-screens/ios/RNSScreenStack.mm +index 5a0e37d..7a5ca3b 100644 +--- a/node_modules/react-native-screens/ios/RNSScreenStack.mm ++++ b/node_modules/react-native-screens/ios/RNSScreenStack.mm +@@ -824,7 +824,7 @@ - (void)takeSnapshot + _snapshot = [_controller.topViewController.view snapshotViewAfterScreenUpdates:NO]; + } + +-- (void)mountingTransactionWillMountWithMetadata:(facebook::react::MountingTransactionMetadata const &)metadata ++- (void)mountingTransactionWillMount:(facebook::react::MountingTransaction const &)transaction + { + [self takeSnapshot]; + } \ No newline at end of file diff --git a/FabricExample/src/FinalScreen.tsx b/FabricExample/src/FinalScreen.tsx index 97e04ea555..9e65cf8135 100644 --- a/FabricExample/src/FinalScreen.tsx +++ b/FabricExample/src/FinalScreen.tsx @@ -1,5 +1,6 @@ import React from 'react'; import { Image, StyleSheet, Text, View } from 'react-native'; +// @ts-ignore TODO: remove once there is a .d.ts file with definitions import openURLInBrowser from 'react-native/Libraries/Core/Devtools/openURLInBrowser'; import { COLORS } from './colors'; diff --git a/FabricExample/src/HomeScreen.tsx b/FabricExample/src/HomeScreen.tsx index d466b26cf2..0c96155a61 100644 --- a/FabricExample/src/HomeScreen.tsx +++ b/FabricExample/src/HomeScreen.tsx @@ -11,6 +11,10 @@ import { import { isFabric, isHermes } from './utils'; import { COLORS } from './colors'; +declare const performance: { + now: () => number; +}; + interface GestureDetectorDemoProps { color: string; } @@ -18,19 +22,19 @@ interface GestureDetectorDemoProps { export function GestureDetectorDemo({ color }: GestureDetectorDemoProps) { const gesture = Gesture.Pan() .onBegin(() => { - console.log(window.performance.now(), 'onBegin'); + console.log(performance.now(), 'onBegin'); }) .onStart(() => { - console.log(window.performance.now(), 'onStart'); + console.log(performance.now(), 'onStart'); }) .onUpdate(() => { - console.log(window.performance.now(), 'onUpdate'); + console.log(performance.now(), 'onUpdate'); }) .onEnd(() => { - console.log(window.performance.now(), 'onEnd'); + console.log(performance.now(), 'onEnd'); }) .onFinalize(() => { - console.log(window.performance.now(), 'onFinalize'); + console.log(performance.now(), 'onFinalize'); }); return ( @@ -50,13 +54,13 @@ interface ManualGestureDemoProps { export function ManualGestureDemo({ color }: ManualGestureDemoProps) { const gesture = Gesture.Manual() .onTouchesDown(() => { - console.log(window.performance.now(), 'onTouchesDown'); + console.log(performance.now(), 'onTouchesDown'); }) .onTouchesMove(() => { - console.log(window.performance.now(), 'onTouchesMove'); + console.log(performance.now(), 'onTouchesMove'); }) .onTouchesUp(() => { - console.log(window.performance.now(), 'onTouchesUp'); + console.log(performance.now(), 'onTouchesUp'); }); return ( @@ -75,11 +79,11 @@ interface PanGestureHandlerDemoProps { export function PanGestureHandlerDemo({ color }: PanGestureHandlerDemoProps) { const onGestureEvent = () => { - console.log(window.performance.now(), 'onGestureEvent'); + console.log(performance.now(), 'onGestureEvent'); }; const onHandlerStateChange = () => { - console.log(window.performance.now(), 'onHandlerStateChange'); + console.log(performance.now(), 'onHandlerStateChange'); }; return ( @@ -161,7 +165,7 @@ export default function HomeScreen() { - + ); diff --git a/FabricExample/src/ViewFlatteningScreen.tsx b/FabricExample/src/ViewFlatteningScreen.tsx index df4f4154a6..dd3aaa52f9 100644 --- a/FabricExample/src/ViewFlatteningScreen.tsx +++ b/FabricExample/src/ViewFlatteningScreen.tsx @@ -1,12 +1,16 @@ -import React, { useState } from 'react'; +import React from 'react'; import { Animated, StyleSheet, Text, View } from 'react-native'; import { Gesture, GestureDetector } from 'react-native-gesture-handler'; import { COLORS } from './colors'; +declare const performance: { + now: () => number; +}; + function ParentViewFlattenedDemo() { const tap = Gesture.Tap().onStart(() => - console.log(window.performance.now(), 'tap!') + console.log(performance.now(), 'tap!') ); return ( @@ -32,7 +36,7 @@ function InnerFlattenedParent() { function ParentViewNotFlattenedCollapsableTrueDemo() { const tap = Gesture.Tap().onStart(() => { - console.log(window.performance.now(), 'tap!'); + console.log(performance.now(), 'tap!'); }); return ( @@ -58,13 +62,13 @@ function InnerNotFlattenedParentCollapsable() { function ParentViewNotFlattenedCollapsableFalseDemo() { const tap = Gesture.Tap().onStart(() => - console.log(window.performance.now(), 'tap!') + console.log(performance.now(), 'tap!') ); return ( <> Parent view not flattened, collapsable=false - (structure doesn't change) + (structure doesn't change) @@ -86,7 +90,7 @@ function InnerNotFlattenedParentNotCollapsable() { function ParentAnimatedViewDemo() { const tap = Gesture.Tap().onStart(() => - console.log(window.performance.now(), 'tap!') + console.log(performance.now(), 'tap!') ); return ( diff --git a/FabricExample/src/utils.ts b/FabricExample/src/utils.ts index def205ace1..8776c3ed46 100644 --- a/FabricExample/src/utils.ts +++ b/FabricExample/src/utils.ts @@ -4,5 +4,6 @@ export function isHermes(): boolean { } export function isFabric(): boolean { + // @ts-expect-error nativeFabricUIManager is not yet included in the RN types return !!global?.nativeFabricUIManager; } diff --git a/FabricExample/tsconfig.json b/FabricExample/tsconfig.json new file mode 100644 index 0000000000..887ba2edfb --- /dev/null +++ b/FabricExample/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "noEmit": true, + "baseUrl": ".", + "paths": { + "react-native-gesture-handler": ["../src/index.ts"], + "react-native-gesture-handler/Swipeable": [ + "../src/components/Swipeable.tsx" + ], + "react-native-gesture-handler/DrawerLayout": [ + "../src/components/DrawerLayout.tsx" + ], + "react-native-gesture-handler/jest-utils": [ + "../src/jestUtils/index.ts" + ] + } + }, + "include": ["src/**/*.ts", "src/**/*.tsx", "index.js"] +} diff --git a/FabricExample/yarn.lock b/FabricExample/yarn.lock index a9e187fe22..1e44e65f28 100644 --- a/FabricExample/yarn.lock +++ b/FabricExample/yarn.lock @@ -9,13 +9,6 @@ dependencies: "@jridgewell/trace-mapping" "^0.3.0" -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" @@ -28,6 +21,11 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.0.tgz#86850b8597ea6962089770952075dcaabb8dba34" integrity sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng== +"@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.0": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.7.tgz#078d8b833fbbcc95286613be8c716cef2b519fa2" + integrity sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ== + "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.12.9", "@babel/core@^7.13.16", "@babel/core@^7.14.0", "@babel/core@^7.7.5": version "7.17.0" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.0.tgz#16b8772b0a567f215839f689c5ded6bb20e864d5" @@ -49,7 +47,7 @@ json5 "^2.1.2" semver "^6.3.0" -"@babel/generator@^7.14.0", "@babel/generator@^7.17.0": +"@babel/generator@^7.14.0": version "7.17.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.0.tgz#7bd890ba706cd86d3e2f727322346ffdbf98f65e" integrity sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw== @@ -58,6 +56,15 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.17.0", "@babel/generator@^7.17.3": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad" + integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w== + dependencies: + "@babel/types" "^7.17.0" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/helper-annotate-as-pure@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" @@ -83,6 +90,19 @@ browserslist "^4.17.5" semver "^6.3.0" +"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.17.6": + version "7.17.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz#3778c1ed09a7f3e65e6d6e0f6fbfcc53809d92c9" + integrity sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-create-class-features-plugin@^7.16.7": version "7.17.1" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz#9699f14a88833a7e055ce57dcd3ffdcd25186b21" @@ -96,7 +116,7 @@ "@babel/helper-replace-supers" "^7.16.7" "@babel/helper-split-export-declaration" "^7.16.7" -"@babel/helper-create-regexp-features-plugin@^7.16.7": +"@babel/helper-create-regexp-features-plugin@^7.16.7", "@babel/helper-create-regexp-features-plugin@^7.17.0": version "7.17.0" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz#1dcc7d40ba0c6b6b25618997c5dbfd310f186fe1" integrity sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA== @@ -183,6 +203,20 @@ "@babel/traverse" "^7.16.7" "@babel/types" "^7.16.7" +"@babel/helper-module-transforms@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz#3943c7f777139e7954a5355c815263741a9c1cbd" + integrity sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-simple-access" "^7.17.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.3" + "@babel/types" "^7.17.0" + "@babel/helper-optimise-call-expression@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" @@ -190,7 +224,7 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== @@ -222,6 +256,13 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-simple-access@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz#aaa473de92b7987c6dfa7ce9a7d9674724823367" + integrity sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA== + dependencies: + "@babel/types" "^7.17.0" + "@babel/helper-skip-transparent-expression-wrappers@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" @@ -265,7 +306,7 @@ "@babel/traverse" "^7.17.0" "@babel/types" "^7.17.0" -"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7": +"@babel/highlight@^7.16.7": version "7.16.10" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== @@ -274,12 +315,42 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.0", "@babel/parser@^7.7.0": +"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.0", "@babel/parser@^7.14.7": version "7.17.0" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.0.tgz#f0ac33eddbe214e4105363bb17c3341c5ffcc43c" integrity sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw== -"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.13.0": +"@babel/parser@^7.16.7", "@babel/parser@^7.17.0", "@babel/parser@^7.17.3", "@babel/parser@^7.7.0": + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.8.tgz#2817fb9d885dd8132ea0f8eb615a6388cca1c240" + integrity sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" + integrity sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" + integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + +"@babel/plugin-proposal-async-generator-functions@^7.0.0", "@babel/plugin-proposal-async-generator-functions@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" + integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== @@ -287,6 +358,23 @@ "@babel/helper-create-class-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-proposal-class-static-block@^7.16.7": + version "7.17.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz#164e8fd25f0d80fa48c5a4d1438a6629325ad83c" + integrity sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.17.6" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-dynamic-import@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" + integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-proposal-export-default-from@^7.0.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.16.7.tgz#a40ab158ca55627b71c5513f03d3469026a9e929" @@ -295,7 +383,31 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-export-default-from" "^7.16.7" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8": +"@babel/plugin-proposal-export-namespace-from@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" + integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" + integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" + integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8", "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== @@ -303,6 +415,14 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" +"@babel/plugin-proposal-numeric-separator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" + integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread@^7.0.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz#94593ef1ddf37021a25bdcb5754c4a8d534b01d8" @@ -314,7 +434,18 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.16.7" -"@babel/plugin-proposal-optional-catch-binding@^7.0.0": +"@babel/plugin-proposal-object-rest-spread@^7.16.7": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz#d9eb649a54628a51701aef7e0ea3d17e2b9dd390" + integrity sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw== + dependencies: + "@babel/compat-data" "^7.17.0" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.16.7" + +"@babel/plugin-proposal-optional-catch-binding@^7.0.0", "@babel/plugin-proposal-optional-catch-binding@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== @@ -322,7 +453,7 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.0.0", "@babel/plugin-proposal-optional-chaining@^7.13.12": +"@babel/plugin-proposal-optional-chaining@^7.0.0", "@babel/plugin-proposal-optional-chaining@^7.13.12", "@babel/plugin-proposal-optional-chaining@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== @@ -331,6 +462,32 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" +"@babel/plugin-proposal-private-methods@^7.16.11": + version "7.16.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50" + integrity sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.10" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-proposal-private-property-in-object@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" + integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" + integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -345,14 +502,21 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.0.0", "@babel/plugin-syntax-class-properties@^7.8.3": +"@babel/plugin-syntax-class-properties@^7.0.0", "@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-dynamic-import@^7.0.0": +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-dynamic-import@^7.0.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== @@ -366,6 +530,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.16.7", "@babel/plugin-syntax-flow@^7.2.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.7.tgz#202b147e5892b8452bbb0bb269c7ed2539ab8832" @@ -394,7 +565,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== @@ -408,7 +579,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.8.3": +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== @@ -436,7 +607,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-top-level-await@^7.8.3": +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== @@ -450,14 +628,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-arrow-functions@^7.0.0": +"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-async-to-generator@^7.0.0": +"@babel/plugin-transform-async-to-generator@^7.0.0", "@babel/plugin-transform-async-to-generator@^7.16.8": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== @@ -466,21 +644,21 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-remap-async-to-generator" "^7.16.8" -"@babel/plugin-transform-block-scoped-functions@^7.0.0": +"@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-block-scoping@^7.0.0": +"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-classes@^7.0.0": +"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== @@ -494,7 +672,7 @@ "@babel/helper-split-export-declaration" "^7.16.7" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.0.0": +"@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== @@ -508,7 +686,29 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-exponentiation-operator@^7.0.0": +"@babel/plugin-transform-destructuring@^7.16.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz#49dc2675a7afa9a5e4c6bdee636061136c3408d1" + integrity sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" + integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-duplicate-keys@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" + integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-exponentiation-operator@^7.0.0", "@babel/plugin-transform-exponentiation-operator@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== @@ -524,14 +724,14 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-flow" "^7.16.7" -"@babel/plugin-transform-for-of@^7.0.0": +"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-function-name@^7.0.0": +"@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== @@ -540,20 +740,29 @@ "@babel/helper-function-name" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-literals@^7.0.0": +"@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-member-expression-literals@^7.0.0": +"@babel/plugin-transform-member-expression-literals@^7.0.0", "@babel/plugin-transform-member-expression-literals@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-modules-amd@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" + integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.13.8": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz#cdee19aae887b16b9d331009aa9a219af7c86afe" @@ -564,14 +773,57 @@ "@babel/helper-simple-access" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-object-assign@^7.0.0": +"@babel/plugin-transform-modules-commonjs@^7.16.8": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.7.tgz#d86b217c8e45bb5f2dbc11eefc8eab62cf980d19" + integrity sha512-ITPmR2V7MqioMJyrxUo2onHNC3e+MvfFiFIR0RP21d3PtlVb6sfzoxNKiphSZUOM9hEIdzCcZe83ieX3yoqjUA== + dependencies: + "@babel/helper-module-transforms" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-simple-access" "^7.17.7" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.16.7": + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz#81fd834024fae14ea78fbe34168b042f38703859" + integrity sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw== + dependencies: + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-module-transforms" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" + integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.0.0": + version "7.17.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.10.tgz#715dbcfafdb54ce8bccd3d12e8917296a4ba66a4" + integrity sha512-v54O6yLaJySCs6mGzaVOUw9T967GnH38T6CQSAtnzdNPwu84l2qAjssKzo/WSO8Yi7NF+7ekm5cVbF/5qiIgNA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.17.0" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz#7f860e0e40d844a02c9dcf9d84965e7dfd666252" + integrity sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + +"@babel/plugin-transform-new-target@^7.16.7": version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.16.7.tgz#5fe08d63dccfeb6a33aa2638faf98e5c584100f8" - integrity sha512-R8mawvm3x0COTJtveuoqZIjNypn2FjfvXZr4pSQ8VhEFBuQGBz4XhHasZtHXjgXU4XptZ4HtGof3NoYc93ZH9Q== + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" + integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-object-super@^7.0.0": +"@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== @@ -586,7 +838,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-property-literals@^7.0.0": +"@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== @@ -625,13 +877,20 @@ "@babel/plugin-syntax-jsx" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/plugin-transform-regenerator@^7.0.0": +"@babel/plugin-transform-regenerator@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb" integrity sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q== dependencies: regenerator-transform "^0.14.2" +"@babel/plugin-transform-reserved-words@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" + integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-runtime@^7.0.0": version "7.17.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz#0a2e08b5e2b2d95c4b1d3b3371a2180617455b70" @@ -644,14 +903,14 @@ babel-plugin-polyfill-regenerator "^0.3.0" semver "^6.3.0" -"@babel/plugin-transform-shorthand-properties@^7.0.0": +"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-spread@^7.0.0": +"@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== @@ -659,20 +918,27 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" -"@babel/plugin-transform-sticky-regex@^7.0.0": +"@babel/plugin-transform-sticky-regex@^7.0.0", "@babel/plugin-transform-sticky-regex@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-template-literals@^7.0.0": +"@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-typeof-symbol@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" + integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-typescript@^7.16.7", "@babel/plugin-transform-typescript@^7.5.0": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz#591ce9b6b83504903fa9dd3652c357c2ba7a1ee0" @@ -682,7 +948,14 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-typescript" "^7.16.7" -"@babel/plugin-transform-unicode-regex@^7.0.0": +"@babel/plugin-transform-unicode-escapes@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" + integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-unicode-regex@^7.0.0", "@babel/plugin-transform-unicode-regex@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== @@ -690,6 +963,86 @@ "@babel/helper-create-regexp-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" +"@babel/preset-env@^7.1.6": + version "7.16.11" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982" + integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g== + dependencies: + "@babel/compat-data" "^7.16.8" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-async-generator-functions" "^7.16.8" + "@babel/plugin-proposal-class-properties" "^7.16.7" + "@babel/plugin-proposal-class-static-block" "^7.16.7" + "@babel/plugin-proposal-dynamic-import" "^7.16.7" + "@babel/plugin-proposal-export-namespace-from" "^7.16.7" + "@babel/plugin-proposal-json-strings" "^7.16.7" + "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" + "@babel/plugin-proposal-numeric-separator" "^7.16.7" + "@babel/plugin-proposal-object-rest-spread" "^7.16.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-private-methods" "^7.16.11" + "@babel/plugin-proposal-private-property-in-object" "^7.16.7" + "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.16.7" + "@babel/plugin-transform-async-to-generator" "^7.16.8" + "@babel/plugin-transform-block-scoped-functions" "^7.16.7" + "@babel/plugin-transform-block-scoping" "^7.16.7" + "@babel/plugin-transform-classes" "^7.16.7" + "@babel/plugin-transform-computed-properties" "^7.16.7" + "@babel/plugin-transform-destructuring" "^7.16.7" + "@babel/plugin-transform-dotall-regex" "^7.16.7" + "@babel/plugin-transform-duplicate-keys" "^7.16.7" + "@babel/plugin-transform-exponentiation-operator" "^7.16.7" + "@babel/plugin-transform-for-of" "^7.16.7" + "@babel/plugin-transform-function-name" "^7.16.7" + "@babel/plugin-transform-literals" "^7.16.7" + "@babel/plugin-transform-member-expression-literals" "^7.16.7" + "@babel/plugin-transform-modules-amd" "^7.16.7" + "@babel/plugin-transform-modules-commonjs" "^7.16.8" + "@babel/plugin-transform-modules-systemjs" "^7.16.7" + "@babel/plugin-transform-modules-umd" "^7.16.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.8" + "@babel/plugin-transform-new-target" "^7.16.7" + "@babel/plugin-transform-object-super" "^7.16.7" + "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/plugin-transform-property-literals" "^7.16.7" + "@babel/plugin-transform-regenerator" "^7.16.7" + "@babel/plugin-transform-reserved-words" "^7.16.7" + "@babel/plugin-transform-shorthand-properties" "^7.16.7" + "@babel/plugin-transform-spread" "^7.16.7" + "@babel/plugin-transform-sticky-regex" "^7.16.7" + "@babel/plugin-transform-template-literals" "^7.16.7" + "@babel/plugin-transform-typeof-symbol" "^7.16.7" + "@babel/plugin-transform-unicode-escapes" "^7.16.7" + "@babel/plugin-transform-unicode-regex" "^7.16.7" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.16.8" + babel-plugin-polyfill-corejs2 "^0.3.0" + babel-plugin-polyfill-corejs3 "^0.5.0" + babel-plugin-polyfill-regenerator "^0.3.0" + core-js-compat "^3.20.2" + semver "^6.3.0" + "@babel/preset-flow@^7.13.13": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.16.7.tgz#7fd831323ab25eeba6e4b77a589f680e30581cbd" @@ -699,6 +1052,17 @@ "@babel/helper-validator-option" "^7.16.7" "@babel/plugin-transform-flow-strip-types" "^7.16.7" +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + "@babel/preset-typescript@^7.13.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz#ab114d68bb2020afc069cd51b37ff98a046a70b9" @@ -719,6 +1083,13 @@ pirates "^4.0.5" source-map-support "^0.5.16" +"@babel/runtime@^7.0.0": + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72" + integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/runtime@^7.12.5", "@babel/runtime@^7.8.4": version "7.17.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.0.tgz#b8d142fc0f7664fb3d9b5833fd40dcbab89276c0" @@ -735,7 +1106,7 @@ "@babel/parser" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.0", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.4": +"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.0": version "7.17.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.0.tgz#3143e5066796408ccc880a33ecd3184f3e75cd30" integrity sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg== @@ -751,7 +1122,23 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.7.0": +"@babel/traverse@^7.17.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.4": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57" + integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.17.3" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.17.3" + "@babel/types" "^7.17.0" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": version "7.17.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== @@ -779,18 +1166,18 @@ dependencies: "@types/hammerjs" "^2.0.36" -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== +"@eslint/eslintrc@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.2.1.tgz#8b5e1c49f4077235516bc9ec7d41378c0f69b8c6" + integrity sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ== dependencies: ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" + debug "^4.3.2" + espree "^9.3.1" globals "^13.9.0" - ignore "^4.0.6" + ignore "^5.2.0" import-fresh "^3.2.1" - js-yaml "^3.13.1" + js-yaml "^4.1.0" minimatch "^3.0.4" strip-json-comments "^3.1.1" @@ -806,16 +1193,16 @@ dependencies: "@hapi/hoek" "^9.0.0" -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== +"@humanwhocodes/config-array@^0.9.2": + version "0.9.5" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" + integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== dependencies: - "@humanwhocodes/object-schema" "^1.2.0" + "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" minimatch "^3.0.4" -"@humanwhocodes/object-schema@^1.2.0": +"@humanwhocodes/object-schema@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== @@ -1043,46 +1430,94 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@react-native-community/cli-debugger-ui@^7.0.3": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-7.0.3.tgz#3eeeacc5a43513cbcae56e5e965d77726361bcb4" - integrity sha512-G4SA6jFI0j22o+j+kYP8/7sxzbCDqSp2QiHA/X5E0lsGEd2o9qN2zbIjiFr8b8k+VVAYSUONhoC0+uKuINvmkA== +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@react-native-community/cli-clean@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-8.0.0.tgz#c8fc6e8d6a84c90ca0839d48080a87ad455613db" + integrity sha512-VY/kwyH5xp6oXiB9bcwa+I9W5k6WR/nX3s85FuMW76hSlgG1UVAGL04uZPwYlSmMZuSOSuoXOaIjJ7wAvQMBpg== + dependencies: + "@react-native-community/cli-tools" "^8.0.0" + chalk "^4.1.2" + execa "^1.0.0" + prompts "^2.4.0" + +"@react-native-community/cli-config@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-config/-/cli-config-8.0.2.tgz#dd033cf51fae2b046304b40bb166f577165c6c48" + integrity sha512-q0mL6QBzoLDHmlvkAKdgioIsMeyvvgRyu0WVLvT/v5DX6OVRvq4UEULLEY+7/P+760nPBQo4Ou1KqpP/SxmbXA== + dependencies: + "@react-native-community/cli-tools" "^8.0.0" + cosmiconfig "^5.1.0" + deepmerge "^3.2.0" + glob "^7.1.3" + joi "^17.2.1" + +"@react-native-community/cli-debugger-ui@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-8.0.0.tgz#98263dc525e65015e2d6392c940114028f87e8e9" + integrity sha512-u2jq06GZwZ9sRERzd9FIgpW6yv4YOW4zz7Ym/B8eSzviLmy3yI/8mxJtvlGW+J8lBsfMcQoqJpqI6Rl1nZy9yQ== dependencies: serve-static "^1.13.1" -"@react-native-community/cli-hermes@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-6.3.0.tgz#92b2f07d08626a60f6893c3e3d57c1538c8fb5a7" - integrity sha512-Uhbm9bubyZLZ12vFCIfWbE/Qi3SBTbYIN/TC08EudTLhv/KbPomCQnmFsnJ7AXQFuOZJs73mBxoEAYSbRbwyVA== +"@react-native-community/cli-doctor@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-8.0.2.tgz#2f166812d9b410de66e811fe2d84512157322289" + integrity sha512-XOimZcBR8n0Ipuk0iXfbZwxrt1r+2fZnskInZRf3SkYrLIKzDLF+ylKbNWJeuMWZSz9lQimo2cI/978bH1JQGw== dependencies: - "@react-native-community/cli-platform-android" "^6.3.0" - "@react-native-community/cli-tools" "^6.2.0" + "@react-native-community/cli-config" "^8.0.2" + "@react-native-community/cli-platform-ios" "^8.0.2" + "@react-native-community/cli-tools" "^8.0.0" chalk "^4.1.2" + command-exists "^1.2.8" + envinfo "^7.7.2" + execa "^1.0.0" hermes-profile-transformer "^0.0.6" ip "^1.1.5" + node-stream-zip "^1.9.1" + ora "^5.4.1" + prompts "^2.4.0" + semver "^6.3.0" + strip-ansi "^5.2.0" + sudo-prompt "^9.0.0" + wcwidth "^1.0.1" -"@react-native-community/cli-platform-android@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-6.3.0.tgz#ab7d156bd69a392493323eeaba839a874c0e201f" - integrity sha512-d5ufyYcvrZoHznYm5bjBXaiHIJv552t5gYtQpnUsxBhHSQ8QlaNmlLUyeSPRDfOw4ND9b0tPHqs4ufwx6vp/fQ== +"@react-native-community/cli-hermes@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-8.0.2.tgz#d0c3945b4093128d3095032595c3112378c5cc5e" + integrity sha512-RZ9uHTf3UFtGTYxq88uENJEdaDB8ab+YPBDn+Li1u78IKwNeL04F0A1A3ab3hYUkG4PEPnL2rkYSlzzNFLOSPQ== dependencies: - "@react-native-community/cli-tools" "^6.2.0" + "@react-native-community/cli-platform-android" "^8.0.2" + "@react-native-community/cli-tools" "^8.0.0" chalk "^4.1.2" - execa "^1.0.0" - fs-extra "^8.1.0" - glob "^7.1.3" - jetifier "^1.6.2" - lodash "^4.17.15" - logkitty "^0.7.1" - slash "^3.0.0" - xmldoc "^1.1.2" + hermes-profile-transformer "^0.0.6" + ip "^1.1.5" -"@react-native-community/cli-platform-android@^7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-7.0.1.tgz#d165897edf401f9bceff1f361ef446528133cb52" - integrity sha512-nOr0aMkxAymCnbtsQwXBlyoRN2Y+IzC7Qz5T+/zyWwEbTY8SKQI8uV+8+qttUvzSvuXa2PeXsTWluuliOS8KCw== +"@react-native-community/cli-platform-android@^8.0.0", "@react-native-community/cli-platform-android@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-8.0.2.tgz#5e408f06a33712263c2a4c4ef3fde4e43c660585" + integrity sha512-pAEkt+GULesr8FphTpaNYSmu+O1CPQ2zCXkAg4kRd0WXpq3BsVqomyDWd/eMXTkY/yYQMGl6KilU2p9r/hnfhA== dependencies: - "@react-native-community/cli-tools" "^7.0.1" + "@react-native-community/cli-tools" "^8.0.0" chalk "^4.1.2" execa "^1.0.0" fs-extra "^8.1.0" @@ -1091,14 +1526,13 @@ lodash "^4.17.15" logkitty "^0.7.1" slash "^3.0.0" - xmldoc "^1.1.2" -"@react-native-community/cli-platform-ios@^7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-7.0.1.tgz#1c27af85229246b7a528e97f093e38859896cc93" - integrity sha512-PLRIbzrCzSedmpjuFtQqcqUD45G8q7sEciI1lf5zUbVMXqjIBwJWS7iz8235PyWwj8J4MNHohLC+oyRueFtbGg== +"@react-native-community/cli-platform-ios@^8.0.0", "@react-native-community/cli-platform-ios@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-8.0.2.tgz#603079d9def2f2159a40f9905a26c19dbbe6f0ef" + integrity sha512-LxWzj6jIZr5Ot893TKFbt0/T3WkVe6pbc/FSTo+TDQq1FQr/Urv16Uqn0AcL4IX2O1g3Qd13d0vtR/Cdpn3VNw== dependencies: - "@react-native-community/cli-tools" "^7.0.1" + "@react-native-community/cli-tools" "^8.0.0" chalk "^4.1.2" execa "^1.0.0" glob "^7.1.3" @@ -1106,57 +1540,42 @@ lodash "^4.17.15" ora "^5.4.1" plist "^3.0.2" - xcode "^3.0.0" -"@react-native-community/cli-plugin-metro@^7.0.3": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-7.0.3.tgz#b381ed2f68a0b126e4fa238f1956a44846e1ef8a" - integrity sha512-HJrEkFbxv9DNixsGwO+Q0zCcZMghDltyzeB9yQ//D5ZR4ZUEuAIPrRDdEp9xVw0WkBxAIZs6KXLux2/yPMwLhA== +"@react-native-community/cli-plugin-metro@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-8.0.0.tgz#0b355a7a6fe93b347ec32b3edb3b2cd96b04dfd8" + integrity sha512-eIowV2ZRbzIWL3RIKVUUSahntXTuAeKzBSsFuhffLZphsV+UdKdtg5ATR9zbq7nsKap4ZseO5DkVqZngUkC7iQ== dependencies: - "@react-native-community/cli-server-api" "^7.0.3" - "@react-native-community/cli-tools" "^6.2.0" + "@react-native-community/cli-server-api" "^8.0.0" + "@react-native-community/cli-tools" "^8.0.0" chalk "^4.1.2" - metro "^0.67.0" - metro-config "^0.67.0" - metro-core "^0.67.0" - metro-react-native-babel-transformer "^0.67.0" - metro-resolver "^0.67.0" - metro-runtime "^0.67.0" + metro "^0.70.1" + metro-config "^0.70.1" + metro-core "^0.70.1" + metro-react-native-babel-transformer "^0.70.1" + metro-resolver "^0.70.1" + metro-runtime "^0.70.1" readline "^1.3.0" -"@react-native-community/cli-server-api@^7.0.3": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-7.0.3.tgz#ba9695a2fdfef22750d141153efd94baf641129b" - integrity sha512-JDrLsrkBgNxbG2u3fouoVGL9tKrXUrTsaNwr+oCV+3XyMwbVe42r/OaQ681/iW/7mHXjuVkDnMcp7BMg7e2yJg== +"@react-native-community/cli-server-api@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-8.0.0.tgz#562fee6da9f880531db2af1d3439efb7309281f8" + integrity sha512-TxUs3sMl9clt7sdv30XETc6VRzyaEli2vDrk3TB5W5o5nSd1PmQdP4ccdGLO/nDRXwOy72QmmXlYWMg1XGU0Gg== dependencies: - "@react-native-community/cli-debugger-ui" "^7.0.3" - "@react-native-community/cli-tools" "^6.2.0" + "@react-native-community/cli-debugger-ui" "^8.0.0" + "@react-native-community/cli-tools" "^8.0.0" compression "^1.7.1" connect "^3.6.5" errorhandler "^1.5.0" - nocache "^2.1.0" + nocache "^3.0.1" pretty-format "^26.6.2" serve-static "^1.13.1" ws "^7.5.1" -"@react-native-community/cli-tools@^6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-6.2.0.tgz#8f4adc2d83ab96e5654348533c8fa602742c4fce" - integrity sha512-08ssz4GMEnRxC/1FgTTN/Ud7mExQi5xMphItPjfHiTxpZPhrFn+IMx6mya0ncFEhhxQ207wYlJMRLPRRdBZ8oA== - dependencies: - appdirsjs "^1.2.4" - chalk "^4.1.2" - lodash "^4.17.15" - mime "^2.4.1" - node-fetch "^2.6.0" - open "^6.2.0" - semver "^6.3.0" - shell-quote "1.6.1" - -"@react-native-community/cli-tools@^7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-7.0.1.tgz#73790d6ca2825e42a70a770c1b403a6777e690d6" - integrity sha512-0xra4hKNA5PR2zYVXsDMNiXMGaDNoNRYMY6eTP2aVIxQbqIcVMDWSyCA8wMWX5iOpMWg0cZGaQ6a77f3Rlb34g== +"@react-native-community/cli-tools@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-8.0.0.tgz#2ca9177d7cdf352f6863f278cdacd44066d10473" + integrity sha512-jA4y8CebrRZaOJFjc5zMOnls4KfHkBl2FUtBZV2vcWuedQHa6JVwo+KO88ta3Ysby3uY0+mrZagZfXk7c0mrBw== dependencies: appdirsjs "^1.2.4" chalk "^4.1.2" @@ -1168,58 +1587,47 @@ semver "^6.3.0" shell-quote "^1.7.3" -"@react-native-community/cli-types@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-6.0.0.tgz#90269fbdc7229d5e3b8f2f3e029a94083551040d" - integrity sha512-K493Fk2DMJC0ZM8s8gnfseKxGasIhuDaCUDeLZcoCSFlrjKEuEs1BKKEJiev0CARhKEXKOyyp/uqYM9nWhisNw== +"@react-native-community/cli-types@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-8.0.0.tgz#72d24178e5ed1c2d271da43e0a4a4f59178f261a" + integrity sha512-1lZS1PEvMlFaN3Se1ksyoFWzMjk+YfKi490GgsqKJln9gvFm8tqVPdnXttI5Uf2DQf3BMse8Bk8dNH4oV6Ewow== dependencies: - ora "^3.4.0" + joi "^17.2.1" -"@react-native-community/cli@^7.0.3": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-7.0.3.tgz#1addb462d71786fcbbd266fbceb41819b8cf7839" - integrity sha512-WyJOA829KAhU1pw2MDQt0YhOS9kyR2KqyqgJyTuQhzFVCBPX4F5aDEkZYYn4jdldaDHCPrLJ3ho3gxYTXy+x7w== - dependencies: - "@react-native-community/cli-debugger-ui" "^7.0.3" - "@react-native-community/cli-hermes" "^6.3.0" - "@react-native-community/cli-plugin-metro" "^7.0.3" - "@react-native-community/cli-server-api" "^7.0.3" - "@react-native-community/cli-tools" "^6.2.0" - "@react-native-community/cli-types" "^6.0.0" - appdirsjs "^1.2.4" +"@react-native-community/cli@^8.0.0": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-8.0.2.tgz#d3657017a5438862881e9e773ab4d252e3afa950" + integrity sha512-IwG3f6gKPlJucFH1Ex0SMD1P1rtOpdR9lloWoBZh3y0dbUbsNtiZZz0zJjZFm/2mtrIihplL7Yz3LmQBNm7xBQ== + dependencies: + "@react-native-community/cli-clean" "^8.0.0" + "@react-native-community/cli-config" "^8.0.2" + "@react-native-community/cli-debugger-ui" "^8.0.0" + "@react-native-community/cli-doctor" "^8.0.2" + "@react-native-community/cli-hermes" "^8.0.2" + "@react-native-community/cli-plugin-metro" "^8.0.0" + "@react-native-community/cli-server-api" "^8.0.0" + "@react-native-community/cli-tools" "^8.0.0" + "@react-native-community/cli-types" "^8.0.0" chalk "^4.1.2" - command-exists "^1.2.8" commander "^2.19.0" - cosmiconfig "^5.1.0" - deepmerge "^3.2.0" - envinfo "^7.7.2" execa "^1.0.0" find-up "^4.1.0" fs-extra "^8.1.0" - glob "^7.1.3" graceful-fs "^4.1.3" - joi "^17.2.1" leven "^3.1.0" lodash "^4.17.15" - minimist "^1.2.0" - node-stream-zip "^1.9.1" - ora "^3.4.0" - pretty-format "^26.6.2" - prompts "^2.4.0" - semver "^6.3.0" - serve-static "^1.13.1" - strip-ansi "^5.2.0" - sudo-prompt "^9.0.0" - wcwidth "^1.0.1" + minimist "^1.2.0" + prompts "^2.4.0" + semver "^6.3.0" -"@react-native-community/eslint-config@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@react-native-community/eslint-config/-/eslint-config-2.0.0.tgz#35dcc529a274803fc4e0a6b3d6c274551fb91774" - integrity sha512-vHaMMfvMp9BWCQQ0lNIXibOJTcXIbYUQ8dSUsMOsrXgVkeVQJj88OwrKS00rQyqwMaC4/a6HuDiFzYUkGKOpVg== +"@react-native-community/eslint-config@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@react-native-community/eslint-config/-/eslint-config-3.0.1.tgz#c45968f1214139fe747a7aebdba06c4fa2a4d018" + integrity sha512-h0MRsaHkyfoQjEiTjG3a+Ie/p6AmQNAHXpYrVhtYMZNRF26TCwNOsQNp4/13QhKAq6vhS8EJppge0P43GnPmfQ== dependencies: "@react-native-community/eslint-plugin" "^1.1.0" - "@typescript-eslint/eslint-plugin" "^3.1.0" - "@typescript-eslint/parser" "^3.1.0" + "@typescript-eslint/eslint-plugin" "^4.22.1" + "@typescript-eslint/parser" "^4.22.1" babel-eslint "^10.1.0" eslint-config-prettier "^6.10.1" eslint-plugin-eslint-comments "^3.1.2" @@ -1227,8 +1635,8 @@ eslint-plugin-jest "22.4.1" eslint-plugin-prettier "3.1.2" eslint-plugin-react "^7.20.0" - eslint-plugin-react-hooks "^4.0.4" - eslint-plugin-react-native "^3.8.1" + eslint-plugin-react-hooks "^4.0.7" + eslint-plugin-react-native "^3.10.0" prettier "^2.0.2" "@react-native-community/eslint-plugin@^1.1.0": @@ -1248,7 +1656,7 @@ dependencies: react-native-codegen "*" -"@react-native/normalize-color@*", "@react-native/normalize-color@2.0.0": +"@react-native/normalize-color@2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@react-native/normalize-color/-/normalize-color-2.0.0.tgz#da955909432474a9a0fe1cbffc66576a0447f567" integrity sha512-Wip/xsc5lw8vsBlmY2MO/gFLp3MvuZ2baBZjDeTjjndMgM0h5sxz7AZR62RDPGgstp8Np7JzjvVqVT7tpFZqsw== @@ -1368,11 +1776,6 @@ dependencies: "@babel/types" "^7.3.0" -"@types/eslint-visitor-keys@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" - integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== - "@types/graceful-fs@^4.1.2": version "4.1.5" resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" @@ -1404,10 +1807,10 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/json-schema@^7.0.3": - version "7.0.9" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" - integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== +"@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== "@types/node@*": version "17.0.15" @@ -1424,6 +1827,25 @@ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.3.tgz#a3c65525b91fca7da00ab1a3ac2b5a2a4afbffbf" integrity sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w== +"@types/prop-types@*": + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + +"@types/react@18.0.0": + version "18.0.0" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.0.tgz#4be8aa3a2d04afc3ac2cc1ca43d39b0bd412890c" + integrity sha512-7+K7zEQYu7NzOwQGLR91KwWXXDzmTFODRVizJyIALf6RfLv2GDpqpknX64pvRVILXCpXi7O/pua8NGk44dLvJw== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/scheduler@*": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" + integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + "@types/stack-utils@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" @@ -1448,65 +1870,90 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^3.1.0": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz#7e061338a1383f59edc204c605899f93dc2e2c8f" - integrity sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ== +"@typescript-eslint/eslint-plugin@^4.22.1", "@typescript-eslint/eslint-plugin@^5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.17.0.tgz#704eb4e75039000531255672bf1c85ee85cf1d67" + integrity sha512-qVstvQilEd89HJk3qcbKt/zZrfBZ+9h2ynpAGlWjWiizA7m/MtLT9RoX6gjtpE500vfIg8jogAkDzdCxbsFASQ== dependencies: - "@typescript-eslint/experimental-utils" "3.10.1" - debug "^4.1.1" + "@typescript-eslint/scope-manager" "5.17.0" + "@typescript-eslint/type-utils" "5.17.0" + "@typescript-eslint/utils" "5.17.0" + debug "^4.3.2" functional-red-black-tree "^1.0.1" - regexpp "^3.0.0" - semver "^7.3.2" - tsutils "^3.17.1" - -"@typescript-eslint/experimental-utils@3.10.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz#e179ffc81a80ebcae2ea04e0332f8b251345a686" - integrity sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw== - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/types" "3.10.1" - "@typescript-eslint/typescript-estree" "3.10.1" - eslint-scope "^5.0.0" - eslint-utils "^2.0.0" - -"@typescript-eslint/parser@^3.1.0": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.10.1.tgz#1883858e83e8b442627e1ac6f408925211155467" - integrity sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw== - dependencies: - "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "3.10.1" - "@typescript-eslint/types" "3.10.1" - "@typescript-eslint/typescript-estree" "3.10.1" - eslint-visitor-keys "^1.1.0" - -"@typescript-eslint/types@3.10.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727" - integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ== - -"@typescript-eslint/typescript-estree@3.10.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz#fd0061cc38add4fad45136d654408569f365b853" - integrity sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w== - dependencies: - "@typescript-eslint/types" "3.10.1" - "@typescript-eslint/visitor-keys" "3.10.1" - debug "^4.1.1" - glob "^7.1.6" - is-glob "^4.0.1" - lodash "^4.17.15" - semver "^7.3.2" - tsutils "^3.17.1" + ignore "^5.1.8" + regexpp "^3.2.0" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^4.22.1", "@typescript-eslint/parser@^5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.17.0.tgz#7def77d5bcd8458d12d52909118cf3f0a45f89d5" + integrity sha512-aRzW9Jg5Rlj2t2/crzhA2f23SIYFlF9mchGudyP0uiD6SenIxzKoLjwzHbafgHn39dNV/TV7xwQkLfFTZlJ4ig== + dependencies: + "@typescript-eslint/scope-manager" "5.17.0" + "@typescript-eslint/types" "5.17.0" + "@typescript-eslint/typescript-estree" "5.17.0" + debug "^4.3.2" + +"@typescript-eslint/scope-manager@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.17.0.tgz#4cea7d0e0bc0e79eb60cad431c89120987c3f952" + integrity sha512-062iCYQF/doQ9T2WWfJohQKKN1zmmXVfAcS3xaiialiw8ZUGy05Em6QVNYJGO34/sU1a7a+90U3dUNfqUDHr3w== + dependencies: + "@typescript-eslint/types" "5.17.0" + "@typescript-eslint/visitor-keys" "5.17.0" + +"@typescript-eslint/type-utils@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.17.0.tgz#1c4549d68c89877662224aabb29fbbebf5fc9672" + integrity sha512-3hU0RynUIlEuqMJA7dragb0/75gZmwNwFf/QJokWzPehTZousP/MNifVSgjxNcDCkM5HI2K22TjQWUmmHUINSg== + dependencies: + "@typescript-eslint/utils" "5.17.0" + debug "^4.3.2" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.17.0.tgz#861ec9e669ffa2aa9b873dd4d28d9b1ce26d216f" + integrity sha512-AgQ4rWzmCxOZLioFEjlzOI3Ch8giDWx8aUDxyNw9iOeCvD3GEYAB7dxWGQy4T/rPVe8iPmu73jPHuaSqcjKvxw== + +"@typescript-eslint/typescript-estree@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.17.0.tgz#a7cba7dfc8f9cc2ac78c18584e684507df4f2488" + integrity sha512-X1gtjEcmM7Je+qJRhq7ZAAaNXYhTgqMkR10euC4Si6PIjb+kwEQHSxGazXUQXFyqfEXdkGf6JijUu5R0uceQzg== + dependencies: + "@typescript-eslint/types" "5.17.0" + "@typescript-eslint/visitor-keys" "5.17.0" + debug "^4.3.2" + globby "^11.0.4" + is-glob "^4.0.3" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.17.0.tgz#549a9e1d491c6ccd3624bc3c1b098f5cfb45f306" + integrity sha512-DVvndq1QoxQH+hFv+MUQHrrWZ7gQ5KcJzyjhzcqB1Y2Xes1UQQkTRPUfRpqhS8mhTWsSb2+iyvDW1Lef5DD7vA== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.17.0" + "@typescript-eslint/types" "5.17.0" + "@typescript-eslint/typescript-estree" "5.17.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" -"@typescript-eslint/visitor-keys@3.10.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz#cd4274773e3eb63b2e870ac602274487ecd1e931" - integrity sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ== +"@typescript-eslint/visitor-keys@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.17.0.tgz#52daae45c61b0211b4c81b53a71841911e479128" + integrity sha512-6K/zlc4OfCagUu7Am/BD5k8PSWQOgh34Nrv9Rxe2tBzlJ7uOeJ/h7ugCGDCeEZHT6k2CJBhbk9IsbkPI0uvUkA== dependencies: - eslint-visitor-keys "^1.1.0" + "@typescript-eslint/types" "5.17.0" + eslint-visitor-keys "^3.0.0" + +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== abab@^2.0.3, abab@^2.0.5: version "2.0.5" @@ -1551,12 +1998,12 @@ acorn-walk@^7.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^7.1.1, acorn@^7.4.0: +acorn@^7.1.1: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.2.4: +acorn@^8.2.4, acorn@^8.7.0: version "8.7.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== @@ -1578,26 +2025,11 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.1: - version "8.10.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.10.0.tgz#e573f719bd3af069017e3b66538ab968d040e54d" - integrity sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - anser@^1.4.9: version "1.4.10" resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.10.tgz#befa3eddf282684bd03b63dcda3927aef8c2e35b" integrity sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww== -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - ansi-escapes@^4.2.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" @@ -1615,9 +2047,9 @@ ansi-fragments@^0.2.1: strip-ansi "^5.0.0" ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== ansi-regex@^5.0.0, ansi-regex@^5.0.1: version "5.0.1" @@ -1666,6 +2098,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -1681,11 +2118,6 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= -array-filter@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" - integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw= - array-includes@^3.1.3, array-includes@^3.1.4: version "3.1.4" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9" @@ -1697,15 +2129,10 @@ array-includes@^3.1.3, array-includes@^3.1.4: get-intrinsic "^1.1.1" is-string "^1.0.7" -array-map@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" - integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI= - -array-reduce@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" - integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys= +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array-unique@^0.3.2: version "0.3.2" @@ -1743,22 +2170,15 @@ astral-regex@^1.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - async-limiter@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async@^2.4.0: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== - dependencies: - lodash "^4.17.14" +async@^3.2.2: + version "3.2.3" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9" + integrity sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g== asynckit@^0.4.0: version "0.4.0" @@ -1940,11 +2360,6 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" -big-integer@1.6.x: - version "1.6.51" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" - integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== - bl@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" @@ -1954,20 +2369,6 @@ bl@^4.1.0: inherits "^2.0.4" readable-stream "^3.4.0" -bplist-creator@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.1.0.tgz#018a2d1b587f769e379ef5519103730f8963ba1e" - integrity sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg== - dependencies: - stream-buffers "2.2.x" - -bplist-parser@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.3.0.tgz#ba50666370f61bbf94881636cd9f7d23c5286090" - integrity sha512-zgmaRvT6AN1JpPPV+S0a1/FAtoxSreYDccZGIqEMSvZl9DMe70mJ7MFzpxa1X+gHVdkToE2haRUHHMiW1OdejA== - dependencies: - big-integer "1.6.x" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -2109,7 +2510,7 @@ capture-exit@^2.0.0: dependencies: rsvp "^4.8.4" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2156,13 +2557,6 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" @@ -2170,7 +2564,7 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-spinners@^2.0.0, cli-spinners@^2.5.0: +cli-spinners@^2.5.0: version "2.6.1" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== @@ -2324,6 +2718,14 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= +core-js-compat@^3.20.2: + version "3.21.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.21.1.tgz#cac369f67c8d134ff8f9bd1623e3bc2c42068c82" + integrity sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g== + dependencies: + browserslist "^4.19.1" + semver "7.0.0" + core-js-compat@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.21.0.tgz#bcc86aa5a589cee358e7a7fa0a4979d5a76c3885" @@ -2347,7 +2749,7 @@ cosmiconfig@^5.0.5, cosmiconfig@^5.1.0: js-yaml "^3.13.1" parse-json "^4.0.0" -cross-spawn@^6.0.0: +cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -2384,6 +2786,11 @@ cssstyle@^2.3.0: dependencies: cssom "~0.3.6" +csstype@^3.0.2: + version "3.0.11" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.11.tgz#d66700c5eacfac1940deb4e3ee5642792d85cd33" + integrity sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw== + data-urls@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" @@ -2405,13 +2812,20 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: +debug@4: version "4.3.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== dependencies: ms "2.1.2" +debug@^4.1.0, debug@^4.1.1, debug@^4.3.2: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -2493,15 +2907,6 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= -deprecated-react-native-prop-types@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-2.3.0.tgz#c10c6ee75ff2b6de94bb127f142b814e6e08d9ab" - integrity sha512-pWD0voFtNYxrVqvBMYf5gq3NA2GCpfodS1yNynTPc93AYA/KEMGeWDqqeUB6R2Z9ZofVhks2aeJXiuQqKNpesA== - dependencies: - "@react-native/normalize-color" "*" - invariant "*" - prop-types "*" - destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" @@ -2517,6 +2922,13 @@ diff-sequences@^26.6.2: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + doctrine@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" @@ -2570,13 +2982,6 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - envinfo@^7.7.2: version "7.8.1" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" @@ -2605,9 +3010,9 @@ errorhandler@^1.5.0: escape-html "~1.0.3" es-abstract@^1.19.0, es-abstract@^1.19.1: - version "1.19.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" - integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== + version "1.19.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.2.tgz#8f7b696d8f15b167ae3640b4060670f3d054143f" + integrity sha512-gfSBJoZdlL2xRiOCy0g8gLMryhoe1TlimjzU99L/31Z8QEGIhVQI+EWwt5lT+AuU9SnorVupXFqqOGqGfsyO6w== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" @@ -2615,15 +3020,15 @@ es-abstract@^1.19.0, es-abstract@^1.19.1: get-intrinsic "^1.1.1" get-symbol-description "^1.0.0" has "^1.0.3" - has-symbols "^1.0.2" + has-symbols "^1.0.3" internal-slot "^1.0.3" is-callable "^1.2.4" - is-negative-zero "^2.0.1" + is-negative-zero "^2.0.2" is-regex "^1.1.4" is-shared-array-buffer "^1.0.1" is-string "^1.0.7" - is-weakref "^1.0.1" - object-inspect "^1.11.0" + is-weakref "^1.0.2" + object-inspect "^1.12.0" object-keys "^1.1.1" object.assign "^4.1.2" string.prototype.trimend "^1.0.4" @@ -2710,45 +3115,45 @@ eslint-plugin-prettier@3.1.2: dependencies: prettier-linter-helpers "^1.0.0" -eslint-plugin-react-hooks@^4.0.4: - version "4.3.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz#318dbf312e06fab1c835a4abef00121751ac1172" - integrity sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA== +eslint-plugin-react-hooks@^4.0.7: + version "4.4.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.4.0.tgz#71c39e528764c848d8253e1aa2c7024ed505f6c4" + integrity sha512-U3RVIfdzJaeKDQKEJbz5p3NW8/L80PCATJAfuojwbaEL+gBjfGdhUcGde+WGUW46Q5sr/NgxevsIiDtNXrvZaQ== eslint-plugin-react-native-globals@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz#ee1348bc2ceb912303ce6bdbd22e2f045ea86ea2" integrity sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g== -eslint-plugin-react-native@^3.8.1: - version "3.11.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-native/-/eslint-plugin-react-native-3.11.0.tgz#c73b0886abb397867e5e6689d3a6a418682e6bac" - integrity sha512-7F3OTwrtQPfPFd+VygqKA2VZ0f2fz0M4gJmry/TRE18JBb94/OtMxwbL7Oqwu7FGyrdeIOWnXQbBAveMcSTZIA== +eslint-plugin-react-native@^3.10.0, eslint-plugin-react-native@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-native/-/eslint-plugin-react-native-4.0.0.tgz#eec41984abe4970bdd7c6082dff7a98a5e34d0bb" + integrity sha512-kMmdxrSY7A1WgdqaGC+rY/28rh7kBGNBRsk48ovqkQmdg5j4K+DaFmegENDzMrdLkoufKGRNkKX6bgSwQTCAxQ== dependencies: "@babel/traverse" "^7.7.4" eslint-plugin-react-native-globals "^0.1.1" eslint-plugin-react@^7.20.0: - version "7.28.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz#8f3ff450677571a659ce76efc6d80b6a525adbdf" - integrity sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw== + version "7.29.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz#4717de5227f55f3801a5fd51a16a4fa22b5914d2" + integrity sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ== dependencies: array-includes "^3.1.4" array.prototype.flatmap "^1.2.5" doctrine "^2.1.0" estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.0.4" + minimatch "^3.1.2" object.entries "^1.1.5" object.fromentries "^2.0.5" object.hasown "^1.1.0" object.values "^1.1.5" - prop-types "^15.7.2" + prop-types "^15.8.1" resolve "^2.0.0-next.3" semver "^6.3.0" string.prototype.matchall "^4.0.6" -eslint-scope@^5.0.0, eslint-scope@^5.1.1: +eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -2756,14 +3161,22 @@ eslint-scope@^5.0.0, eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-utils@^2.0.0, eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== dependencies: - eslint-visitor-keys "^1.1.0" + eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: +eslint-visitor-keys@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== @@ -2773,60 +3186,60 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint@^7.32.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== +eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^8.12.0: + version "8.12.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.12.0.tgz#c7a5bd1cfa09079aae64c9076c07eada66a46e8e" + integrity sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q== dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" + "@eslint/eslintrc" "^1.2.1" + "@humanwhocodes/config-array" "^0.9.2" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" - debug "^4.0.1" + debug "^4.3.2" doctrine "^3.0.0" - enquirer "^2.3.5" escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.3.1" esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" + glob-parent "^6.0.1" globals "^13.6.0" - ignore "^4.0.6" + ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-yaml "^3.13.1" + js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" minimatch "^3.0.4" natural-compare "^1.4.0" optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" + regexpp "^3.2.0" + strip-ansi "^6.0.1" strip-json-comments "^3.1.0" - table "^6.0.9" text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== +espree@^9.3.1: + version "9.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.1.tgz#8793b4bc27ea4c778c19908e0719e7b8f4115bcd" + integrity sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ== dependencies: - acorn "^7.4.0" + acorn "^8.7.0" acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" + eslint-visitor-keys "^3.3.0" esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" @@ -2974,6 +3387,17 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== +fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -2984,6 +3408,13 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + fb-watchman@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" @@ -3057,6 +3488,13 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +find-yarn-workspace-root@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz#f47fb8d239c900eb78179aa81b66673eac88f7bd" + integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ== + dependencies: + micromatch "^4.0.2" + flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -3115,6 +3553,15 @@ fs-extra@^1.0.0: jsonfile "^2.1.0" klaw "^1.0.0" +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -3207,7 +3654,14 @@ glob-parent@^5.1.2: dependencies: is-glob "^4.0.1" -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== @@ -3231,6 +3685,18 @@ globals@^13.6.0, globals@^13.9.0: dependencies: type-fest "^0.20.2" +globby@^11.0.4: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: version "4.2.9" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" @@ -3256,10 +3722,10 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.1, has-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== +has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== has-tostringtag@^1.0.0: version "1.0.0" @@ -3311,17 +3777,17 @@ hermes-engine@~0.11.0: resolved "https://registry.yarnpkg.com/hermes-engine/-/hermes-engine-0.11.0.tgz#bb224730d230a02a5af02c4e090d1f52d57dd3db" integrity sha512-7aMUlZja2IyLYAcZ69NBnwJAR5ZOYlSllj0oMpx08a8HzxHOys0eKCzfphrf6D0vX1JGO1QQvVsQKe6TkYherw== -hermes-estree@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.5.0.tgz#36432a2b12f01b217244da098924efdfdfc12327" - integrity sha512-1h8rvG23HhIR5K6Kt0e5C7BC72J1Ath/8MmSta49vxXp/j6wl7IMHvIRFYBQr35tWnQY97dSGR2uoAJ5pHUQkg== +hermes-estree@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.6.0.tgz#e866fddae1b80aec65fe2ae450a5f2070ad54033" + integrity sha512-2YTGzJCkhdmT6VuNprWjXnvTvw/3iPNw804oc7yknvQpNKo+vJGZmtvLLCghOZf0OwzKaNAzeIMp71zQbNl09w== -hermes-parser@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.5.0.tgz#8b678dd8b29a08b57cbaf60adba4896494c59a53" - integrity sha512-ARnJBScKAkkq8j3BHrNGBUv/4cSpZNbKDsVizEtzmsFeqC67Dopa5s4XRe+e3wN52Dh5Mj2kDB5wJvhcxwDkPg== +hermes-parser@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.6.0.tgz#00d14e91bca830b3c1457050fa4187400cb96328" + integrity sha512-Vf58jBZca2+QBLR9h7B7mdg8oFz2g5ILz1iVouZ5DOrOrAfBmPfJjdjDT8jrO0f+iJ4/hSRrQHqHIjSnTaLUDQ== dependencies: - hermes-estree "0.5.0" + hermes-estree "0.6.0" hermes-profile-transformer@^0.0.6: version "0.0.6" @@ -3399,12 +3865,7 @@ ieee754@^1.1.13: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.0.5: +ignore@^5.0.5, ignore@^5.1.8, ignore@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== @@ -3465,7 +3926,7 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" -invariant@*, invariant@^2.2.4: +invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -3616,7 +4077,7 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-glob@^4.0.0, is-glob@^4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -3628,7 +4089,7 @@ is-interactive@^1.0.0: resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== -is-negative-zero@^2.0.1: +is-negative-zero@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== @@ -3711,7 +4172,7 @@ is-unicode-supported@^0.1.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-weakref@^1.0.1: +is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== @@ -3728,7 +4189,7 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= -is-wsl@^2.2.0: +is-wsl@^2.1.1, is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== @@ -4209,7 +4670,7 @@ jest-watcher@^26.6.2: jest-util "^26.6.2" string-length "^4.0.1" -jest-worker@^26.0.0, jest-worker@^26.6.2: +jest-worker@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== @@ -4218,6 +4679,15 @@ jest-worker@^26.0.0, jest-worker@^26.6.2: merge-stream "^2.0.0" supports-color "^7.0.0" +jest-worker@^27.2.0: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + jest-worker@^27.5.0: version "27.5.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.0.tgz#99ee77e4d06168107c27328bd7f54e74c3a48d59" @@ -4265,6 +4735,13 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + jsc-android@^250230.2.1: version "250230.2.1" resolved "https://registry.yarnpkg.com/jsc-android/-/jsc-android-250230.2.1.tgz#3790313a970586a03ab0ad47defbc84df54f1b83" @@ -4353,11 +4830,6 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" @@ -4384,11 +4856,6 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= - "jsx-ast-utils@^2.4.1 || ^3.0.0": version "3.2.1" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz#720b97bfe7d901b927d87c3773637ae8ea48781b" @@ -4421,6 +4888,13 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +klaw-sync@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c" + integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== + dependencies: + graceful-fs "^4.1.11" + klaw@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" @@ -4489,23 +4963,11 @@ lodash.throttle@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= - -lodash@^4.17.10, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21, lodash@^4.7.0: +lodash@^4.17.10, lodash@^4.17.15, lodash@^4.17.21, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - dependencies: - chalk "^2.0.1" - log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" @@ -4571,84 +5033,94 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +memoize-one@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" + integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -metro-babel-transformer@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.67.0.tgz#42fe82af9953e5c62d9a8d7d544eb7be9020dd18" - integrity sha512-SBqc4nq/dgsPNFm+mpWcQQzJaXnh0nrfz2pSnZC4i6zMtIakrTWb8SQ78jOU1FZVEZ3nu9xCYVHS9Tbr/LoEuw== +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +metro-babel-transformer@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.70.3.tgz#dca61852be273824a4b641bd1ecafff07ff3ad1f" + integrity sha512-bWhZRMn+mIOR/s3BDpFevWScz9sV8FGktVfMlF1eJBLoX24itHDbXvTktKBYi38PWIKcHedh6THSFpJogfuwNA== dependencies: "@babel/core" "^7.14.0" - hermes-parser "0.5.0" - metro-source-map "0.67.0" + hermes-parser "0.6.0" + metro-source-map "0.70.3" nullthrows "^1.1.1" -metro-cache-key@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.67.0.tgz#4df6a73cced199e1bddd0f3454bb931a27141eeb" - integrity sha512-FNJe5Rcb2uzY6G6tsqCf0RV4t2rCeX6vSHBxmP7k+4aI4NqX4evtPI0K82r221nBzm5DqNWCURZ0RYUT6jZMGA== +metro-cache-key@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.70.3.tgz#898803db04178a8f440598afba7d82a9cf35abf7" + integrity sha512-0zpw+IcpM3hmGd5sKMdxNv3sbOIUYnMUvx1/yaM6vNRReSPmOLX0bP8fYf3CGgk8NEreZ1OHbVsuw7bdKt40Mw== -metro-cache@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.67.0.tgz#928db5742542719677468c4d22ea29b71c7ec8fc" - integrity sha512-IY5dXiR76L75b2ue/mv+9vW8g5hdQJU6YEe81lj6gTSoUrhcONT0rzY+Gh5QOS2Kk6z9utZQMvd9PRKL9/635A== +metro-cache@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.70.3.tgz#42cf3cdf8a7b3691f3bef9a86bed38d4c5f6201f" + integrity sha512-iCix/+z812fUqa6KlOxaTkY6LQQDoXIe/VljXkGIvpygSCmYyhjQpfQVZEVVPezFmUBYXNdabdQ6cYx6JX3yMg== dependencies: - metro-core "0.67.0" - mkdirp "^0.5.1" + metro-core "0.70.3" rimraf "^2.5.4" -metro-config@0.67.0, metro-config@^0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.67.0.tgz#5507d3b295bd10c87bd13dbe5a3033a357418786" - integrity sha512-ThAwUmzZwTbKyyrIn2bKIcJDPDBS0LKAbqJZQioflvBGfcgA21h3fdL3IxRmvCEl6OnkEWI0Tn1Z9w2GLAjf2g== +metro-config@0.70.3, metro-config@^0.70.1: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.70.3.tgz#fe6f7330f679d5594e5724af7a69d4dbe1bb5bc3" + integrity sha512-SSCDjSTygoCgzoj61DdrBeJzZDRwQxUEfcgc6t6coxWSExXNR4mOngz0q4SAam49Bmjq9J2Jft6qUKnUTPrRgA== dependencies: cosmiconfig "^5.0.5" jest-validate "^26.5.2" - metro "0.67.0" - metro-cache "0.67.0" - metro-core "0.67.0" - metro-runtime "0.67.0" + metro "0.70.3" + metro-cache "0.70.3" + metro-core "0.70.3" + metro-runtime "0.70.3" -metro-core@0.67.0, metro-core@^0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.67.0.tgz#75066e11b4df220992abf9cd6200279dd87876c8" - integrity sha512-TOa/ShE1bUq83fGNfV6rFwyfZ288M8ydmWN3g9C2OW8emOHLhJslYD/SIU4DhDkP/99yaJluIALdZ2g0+pCrvQ== +metro-core@0.70.3, metro-core@^0.70.1: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.70.3.tgz#bf4dda15a5185f5a7931de463a1b97ac9ef680a0" + integrity sha512-NzfHB/w5R7yLaOeU1tzPTbBzCRsYSvpKJkLMP0yudszKZzIAZqNdjoEJ9GZ688Wi0ynZxcU0BxukXh4my80ZBw== dependencies: jest-haste-map "^27.3.1" lodash.throttle "^4.1.1" - metro-resolver "0.67.0" + metro-resolver "0.70.3" -metro-hermes-compiler@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-hermes-compiler/-/metro-hermes-compiler-0.67.0.tgz#9c1340f1882fbf535145868d0d28211ca15b0477" - integrity sha512-X5Pr1jC8/kO6d1EBDJ6yhtuc5euHX89UDNv8qdPJHAET03xfFnlojRPwOw6il2udAH20WLBv+F5M9VY+58zspQ== +metro-hermes-compiler@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-hermes-compiler/-/metro-hermes-compiler-0.70.3.tgz#ac7ed656fbcf0a59adcd010d3639e4cfdbc76b4f" + integrity sha512-W6WttLi4E72JL/NyteQ84uxYOFMibe0PUr9aBKuJxxfCq6QRnJKOVcNY0NLW0He2tneXGk+8ZsNz8c0flEvYqg== -metro-inspector-proxy@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.67.0.tgz#22b360a837b07e9e2bc87a71af6154dd8fcc02a5" - integrity sha512-5Ubjk94qpNaU3OT2IZa4/dec09bauic1hzWms4czorBzDenkp4kYXG9/aWTmgQLtCk92H3Q8jKl1PQRxUSkrOQ== +metro-inspector-proxy@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.70.3.tgz#321c25b2261e76d8c4bcc39e092714adfcb50a14" + integrity sha512-qQoNdPGrmyoJSWYkxSDpTaAI8xyqVdNDVVj9KRm1PG8niSuYmrCCFGLLFsMvkVYwsCWUGHoGBx0UoAzVp14ejw== dependencies: connect "^3.6.5" debug "^2.2.0" ws "^7.5.1" yargs "^15.3.1" -metro-minify-uglify@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.67.0.tgz#28a77dbd78d9e558dba8c2f31c2b9c6f939df966" - integrity sha512-4CmM5b3MTAmQ/yFEfsHOhD2SuBObB2YF6PKzXZc4agUsQVVtkrrNElaiWa8w26vrTzA9emwcyurxMf4Nl3lYPQ== +metro-minify-uglify@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.70.3.tgz#2f28129ca5b8ef958f3e3fcf004c3707c7732e1e" + integrity sha512-oHyjV9WDqOlDE1FPtvs6tIjjeY/oP1PNUPYL1wqyYtqvjN+zzAOrcbsAAL1sv+WARaeiMsWkF2bwtNo+Hghoog== dependencies: uglify-es "^3.1.9" -metro-react-native-babel-preset@0.67.0, metro-react-native-babel-preset@^0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.67.0.tgz#53aec093f53a09b56236a9bb534d76658efcbec7" - integrity sha512-tgTG4j0SKwLHbLRELMmgkgkjV1biYkWlGGKOmM484/fJC6bpDikdaFhfjsyE+W+qt7I5szbCPCickMTNQ+zwig== +metro-react-native-babel-preset@0.70.3, metro-react-native-babel-preset@^0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.70.3.tgz#1c77ec4544ecd5fb6c803e70b21284d7483e4842" + integrity sha512-4Nxc1zEiHEu+GTdEMEsHnRgfaBkg8f/Td3+FcQ8NTSvs+xL3LBrQy6N07idWSQZHIdGFf+tTHvRfSIWLD8u8Tg== dependencies: "@babel/core" "^7.14.0" + "@babel/plugin-proposal-async-generator-functions" "^7.0.0" "@babel/plugin-proposal-class-properties" "^7.0.0" "@babel/plugin-proposal-export-default-from" "^7.0.0" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" @@ -4668,17 +5140,15 @@ metro-react-native-babel-preset@0.67.0, metro-react-native-babel-preset@^0.67.0: "@babel/plugin-transform-destructuring" "^7.0.0" "@babel/plugin-transform-exponentiation-operator" "^7.0.0" "@babel/plugin-transform-flow-strip-types" "^7.0.0" - "@babel/plugin-transform-for-of" "^7.0.0" "@babel/plugin-transform-function-name" "^7.0.0" "@babel/plugin-transform-literals" "^7.0.0" "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/plugin-transform-object-assign" "^7.0.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.0.0" "@babel/plugin-transform-parameters" "^7.0.0" "@babel/plugin-transform-react-display-name" "^7.0.0" "@babel/plugin-transform-react-jsx" "^7.0.0" "@babel/plugin-transform-react-jsx-self" "^7.0.0" "@babel/plugin-transform-react-jsx-source" "^7.0.0" - "@babel/plugin-transform-regenerator" "^7.0.0" "@babel/plugin-transform-runtime" "^7.0.0" "@babel/plugin-transform-shorthand-properties" "^7.0.0" "@babel/plugin-transform-spread" "^7.0.0" @@ -4689,61 +5159,63 @@ metro-react-native-babel-preset@0.67.0, metro-react-native-babel-preset@^0.67.0: "@babel/template" "^7.0.0" react-refresh "^0.4.0" -metro-react-native-babel-transformer@0.67.0, metro-react-native-babel-transformer@^0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.67.0.tgz#756d32eb3c05cab3d72fcb1700f8fd09322bb07f" - integrity sha512-P0JT09n7T01epUtgL9mH6BPat3xn4JjBakl4lWHdL61cvEGcrxuIom1eoFFKkgU/K5AVLU4aCAttHS7nSFCcEQ== +metro-react-native-babel-transformer@0.70.3, metro-react-native-babel-transformer@^0.70.1: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.70.3.tgz#195597c32488f820aa9e441bbca7c04fe7de7a2d" + integrity sha512-WKBU6S/G50j9cfmFM4k4oRYprd8u3qjleD4so1E2zbTNILg+gYla7ZFGCAvi2G0ZcqS2XuGCR375c2hF6VVvwg== dependencies: "@babel/core" "^7.14.0" babel-preset-fbjs "^3.4.0" - hermes-parser "0.5.0" - metro-babel-transformer "0.67.0" - metro-react-native-babel-preset "0.67.0" - metro-source-map "0.67.0" + hermes-parser "0.6.0" + metro-babel-transformer "0.70.3" + metro-react-native-babel-preset "0.70.3" + metro-source-map "0.70.3" nullthrows "^1.1.1" -metro-resolver@0.67.0, metro-resolver@^0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.67.0.tgz#8143c716f77e468d1d42eca805243706eb349959" - integrity sha512-d2KS/zAyOA/z/q4/ff41rAp+1txF4H6qItwpsls/RHStV2j6PqgRHUzq/3ga+VIeoUJntYJ8nGW3+3qSrhFlig== +metro-resolver@0.70.3, metro-resolver@^0.70.1: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.70.3.tgz#c64fdd6d0a88fa62f3f99f87e539b5f603bd47bf" + integrity sha512-5Pc5S/Gs4RlLbziuIWtvtFd9GRoILlaRC8RZDVq5JZWcWHywKy/PjNmOBNhpyvtRlzpJfy/ssIfLhu8zINt1Mw== dependencies: absolute-path "^0.0.0" -metro-runtime@0.67.0, metro-runtime@^0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.67.0.tgz#a8888dfd06bcebbac3c99dcac7cd622510dd8ee0" - integrity sha512-IFtSL0JUt1xK3t9IoLflTDft82bjieSzdIJWLzrRzBMlesz8ox5bVmnpQbVQEwfYUpEOxbM3VOZauVbdCmXA7g== +metro-runtime@0.70.3, metro-runtime@^0.70.1: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.70.3.tgz#09231b9d05dcbdfb5a13df0a45307273e6fe1168" + integrity sha512-22xU7UdXZacniTIDZgN2EYtmfau2pPyh97Dcs+cWrLcJYgfMKjWBtesnDcUAQy3PHekDYvBdJZkoQUeskYTM+w== + dependencies: + "@babel/runtime" "^7.0.0" -metro-source-map@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.67.0.tgz#e28db7253b9ca688e60d5710ebdccba60b45b2df" - integrity sha512-yxypInsRo3SfS00IgTuL6a2W2tfwLY//vA2E+GeqGBF5zTbJZAhwNGIEl8S87XXZhwzJcxf5/8LjJC1YDzabww== +metro-source-map@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.70.3.tgz#f5976108c18d4661eaa4d188c96713e5d67a903b" + integrity sha512-zsYtZGrwRbbGEFHtmMqqeCH9K9aTGNVPsurMOWCUeQA3VGyVGXPGtLMC+CdAM9jLpUyg6jw2xh0esxi+tYH7Uw== dependencies: "@babel/traverse" "^7.14.0" "@babel/types" "^7.0.0" invariant "^2.2.4" - metro-symbolicate "0.67.0" + metro-symbolicate "0.70.3" nullthrows "^1.1.1" - ob1 "0.67.0" + ob1 "0.70.3" source-map "^0.5.6" vlq "^1.0.0" -metro-symbolicate@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.67.0.tgz#16729d05663d28176895244b3d932a898fca2b45" - integrity sha512-ZqVVcfa0xSz40eFzA5P8pCF3V6Tna9RU1prFzAJTa3j9dCGqwh0HTXC8AIkMtgX7hNdZrCJI1YipzUBlwkT0/A== +metro-symbolicate@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.70.3.tgz#b039e5629c4ed0c999ea0496d580e1c98260f5cb" + integrity sha512-JTYkF1dpeDUssQ84juE1ycnhHki2ylJBBdJE1JHtfu5oC+z1ElDbBdPHq90Uvt8HbRov/ZAnxvv7Zy6asS+WCA== dependencies: invariant "^2.2.4" - metro-source-map "0.67.0" + metro-source-map "0.70.3" nullthrows "^1.1.1" source-map "^0.5.6" through2 "^2.0.1" vlq "^1.0.0" -metro-transform-plugins@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.67.0.tgz#6122aa4e5e5f9a767cebcc5af6fd1695666683ce" - integrity sha512-DQFoSDIJdTMPDTUlKaCNJjEXiHGwFNneAF9wDSJ3luO5gigM7t7MuSaPzF4hpjmfmcfPnRhP6AEn9jcza2Sh8Q== +metro-transform-plugins@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.70.3.tgz#7fe87cd0d8979b4d5d6e375751d86188fff38fd9" + integrity sha512-dQRIJoTkWZN2IVS2KzgS1hs7ZdHDX3fS3esfifPkqFAEwHiLctCf0EsPgIknp0AjMLvmGWfSLJigdRB/dc0ASw== dependencies: "@babel/core" "^7.14.0" "@babel/generator" "^7.14.0" @@ -4751,29 +5223,29 @@ metro-transform-plugins@0.67.0: "@babel/traverse" "^7.14.0" nullthrows "^1.1.1" -metro-transform-worker@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.67.0.tgz#5689553c25b0657aadefdf4ea2cd8dd06e18882a" - integrity sha512-29n+JdTb80ROiv/wDiBVlY/xRAF/nrjhp/Udv/XJl1DZb+x7JEiPxpbpthPhwwl+AYxVrostGB0W06WJ61hfiw== +metro-transform-worker@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.70.3.tgz#62bfa28ebef98803531c4bcb558de5fc804c94ef" + integrity sha512-MtVVsnHhhBOp9GRLCdAb2mD1dTCsIzT4+m34KMRdBDCEbDIb90YafT5prpU8qbj5uKd0o2FOQdrJ5iy5zQilHw== dependencies: "@babel/core" "^7.14.0" "@babel/generator" "^7.14.0" "@babel/parser" "^7.14.0" "@babel/types" "^7.0.0" babel-preset-fbjs "^3.4.0" - metro "0.67.0" - metro-babel-transformer "0.67.0" - metro-cache "0.67.0" - metro-cache-key "0.67.0" - metro-hermes-compiler "0.67.0" - metro-source-map "0.67.0" - metro-transform-plugins "0.67.0" + metro "0.70.3" + metro-babel-transformer "0.70.3" + metro-cache "0.70.3" + metro-cache-key "0.70.3" + metro-hermes-compiler "0.70.3" + metro-source-map "0.70.3" + metro-transform-plugins "0.70.3" nullthrows "^1.1.1" -metro@0.67.0, metro@^0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro/-/metro-0.67.0.tgz#8007a041d22de1cdb05184431c67eb7989eef6e0" - integrity sha512-DwuBGAFcAivoac/swz8Lp7Y5Bcge1tzT7T6K0nf1ubqJP8YzBUtyR4pkjEYVUzVu/NZf7O54kHSPVu1ibYzOBQ== +metro@0.70.3, metro@^0.70.1: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro/-/metro-0.70.3.tgz#4290f538ab5446c7050e718b5c5823eea292c5c2" + integrity sha512-uEWS7xg8oTetQDABYNtsyeUjdLhH3KAvLFpaFFoJqUpOk2A3iygszdqmjobFl6W4zrvKDJS+XxdMR1roYvUhTw== dependencies: "@babel/code-frame" "^7.0.0" "@babel/core" "^7.14.0" @@ -4784,7 +5256,7 @@ metro@0.67.0, metro@^0.67.0: "@babel/types" "^7.0.0" absolute-path "^0.0.0" accepts "^1.3.7" - async "^2.4.0" + async "^3.2.2" chalk "^4.0.0" ci-info "^2.0.0" connect "^3.6.5" @@ -4792,30 +5264,29 @@ metro@0.67.0, metro@^0.67.0: denodeify "^1.2.1" error-stack-parser "^2.0.6" fs-extra "^1.0.0" - graceful-fs "^4.1.3" - hermes-parser "0.5.0" + graceful-fs "^4.2.4" + hermes-parser "0.6.0" image-size "^0.6.0" invariant "^2.2.4" jest-haste-map "^27.3.1" - jest-worker "^26.0.0" + jest-worker "^27.2.0" lodash.throttle "^4.1.1" - metro-babel-transformer "0.67.0" - metro-cache "0.67.0" - metro-cache-key "0.67.0" - metro-config "0.67.0" - metro-core "0.67.0" - metro-hermes-compiler "0.67.0" - metro-inspector-proxy "0.67.0" - metro-minify-uglify "0.67.0" - metro-react-native-babel-preset "0.67.0" - metro-resolver "0.67.0" - metro-runtime "0.67.0" - metro-source-map "0.67.0" - metro-symbolicate "0.67.0" - metro-transform-plugins "0.67.0" - metro-transform-worker "0.67.0" + metro-babel-transformer "0.70.3" + metro-cache "0.70.3" + metro-cache-key "0.70.3" + metro-config "0.70.3" + metro-core "0.70.3" + metro-hermes-compiler "0.70.3" + metro-inspector-proxy "0.70.3" + metro-minify-uglify "0.70.3" + metro-react-native-babel-preset "0.70.3" + metro-resolver "0.70.3" + metro-runtime "0.70.3" + metro-source-map "0.70.3" + metro-symbolicate "0.70.3" + metro-transform-plugins "0.70.3" + metro-transform-worker "0.70.3" mime-types "^2.1.27" - mkdirp "^0.5.1" node-fetch "^2.2.0" nullthrows "^1.1.1" rimraf "^2.5.4" @@ -4876,27 +5347,29 @@ mime@^2.4.1: resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -minimatch@^3.0.2, minimatch@^3.0.4: +minimatch@^3.0.2: version "3.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== dependencies: brace-expansion "^1.1.7" -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minimatch@^3.0.4, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== mixin-deep@^1.2.0: version "1.3.2" @@ -4907,11 +5380,16 @@ mixin-deep@^1.2.0: is-extendable "^1.0.1" mkdirp@^0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: - minimist "^1.2.5" + minimist "^1.2.6" + +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== ms@2.0.0: version "2.0.0" @@ -4970,10 +5448,10 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -nocache@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/nocache/-/nocache-2.1.0.tgz#120c9ffec43b5729b1d5de88cd71aa75a0ba491f" - integrity sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q== +nocache@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/nocache/-/nocache-3.0.3.tgz#07a3f4094746d5211c298d1938dcb5c1e1e352ca" + integrity sha512-bd+lPsDTjbfAuKez+xp8xvp15SrQuOjzajRGqRpCAE06FPB1pJzV/QkyBgFD5KOktv/M/A8M0vY7yatnOUaM5Q== node-dir@^0.1.17: version "0.1.17" @@ -5062,10 +5540,10 @@ nwsapi@^2.2.0: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== -ob1@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.67.0.tgz#91f104c90641b1af8c364fc82a4b2c7d0801072d" - integrity sha512-YvZtX8HKYackQ5PwdFIuuNFVsMChRPHvnARRRT0Vk59xsBvL5t9U1Ock3M1sYrKj+Gp73+0q9xcHLAxI+xLi5g== +ob1@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.70.3.tgz#f48cd5a5abf54b0c423b1b06b6d4ff4d049816cb" + integrity sha512-Vy9GGhuXgDRY01QA6kdhToPd8AkLdLpX9GjH5kpqluVqTu70mgOm7tpGoJDZGaNbr9nJlJgnipqHJQRPORixIQ== object-assign@^4.1.1: version "4.1.1" @@ -5081,7 +5559,7 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.11.0, object-inspect@^1.9.0: +object-inspect@^1.12.0, object-inspect@^1.9.0: version "1.12.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== @@ -5169,13 +5647,6 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - onetime@^5.1.0: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" @@ -5190,6 +5661,14 @@ open@^6.2.0: dependencies: is-wsl "^1.1.0" +open@^7.4.2: + version "7.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" @@ -5214,18 +5693,6 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -ora@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" - integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== - dependencies: - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-spinners "^2.0.0" - log-symbols "^2.2.0" - strip-ansi "^5.2.0" - wcwidth "^1.0.1" - ora@^5.4.1: version "5.4.1" resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" @@ -5241,7 +5708,7 @@ ora@^5.4.1: strip-ansi "^6.0.0" wcwidth "^1.0.1" -os-tmpdir@^1.0.0: +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= @@ -5322,6 +5789,25 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= +patch-package@^6.4.7: + version "6.4.7" + resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.4.7.tgz#2282d53c397909a0d9ef92dae3fdeb558382b148" + integrity sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ== + dependencies: + "@yarnpkg/lockfile" "^1.1.0" + chalk "^2.4.2" + cross-spawn "^6.0.5" + find-yarn-workspace-root "^2.0.0" + fs-extra "^7.0.1" + is-ci "^2.0.0" + klaw-sync "^6.0.0" + minimist "^1.2.0" + open "^7.4.2" + rimraf "^2.6.3" + semver "^5.6.0" + slash "^2.0.0" + tmp "^0.0.33" + path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -5352,6 +5838,11 @@ path-parse@^1.0.6, path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -5386,10 +5877,10 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -plist@^3.0.2, plist@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.4.tgz#a62df837e3aed2bb3b735899d510c4f186019cbe" - integrity sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg== +plist@^3.0.2: + version "3.0.5" + resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.5.tgz#2cbeb52d10e3cdccccf0c11a63a85d830970a987" + integrity sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA== dependencies: base64-js "^1.5.1" xmlbuilder "^9.0.7" @@ -5399,6 +5890,11 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +postinstall-postinstall@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz#4f7f77441ef539d1512c40bd04c71b06a4704ca3" + integrity sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ== + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -5416,10 +5912,10 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^2.0.2: - version "2.5.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" - integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== +prettier@^2.0.2, prettier@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.1.tgz#d472797e0d7461605c1609808e27b80c0f9cfe17" + integrity sha512-8UVbTBYGwN37Bs9LERmxCPjdvPxlEowx2urIL6urHzdb3SDq4B/Z6xLFCblrSnE4iKWcS6ziJ3aOYrc1kz/E2A== pretty-format@^26.5.2, pretty-format@^26.6.2: version "26.6.2" @@ -5436,11 +5932,6 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - promise@^8.0.3: version "8.1.0" resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" @@ -5456,7 +5947,7 @@ prompts@^2.0.1, prompts@^2.4.0: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@*, prop-types@^15.7.2: +prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -5493,15 +5984,20 @@ query-string@^7.0.0: split-on-first "^1.0.0" strict-uri-encode "^2.0.0" +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -react-devtools-core@^4.23.0: - version "4.23.0" - resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.23.0.tgz#dff9d12202a472ef62632203d6de3877dc6e58be" - integrity sha512-KkzneT1LczFtebbTJlvRphIRvzuHLhI9ghfrseVv9ktBs+l2cXy8Svw5U16lzQnwU9okVEcURmGPgH79WWrlaw== +react-devtools-core@4.24.0: + version "4.24.0" + resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.24.0.tgz#7daa196bdc64f3626b3f54f2ff2b96f7c4fdf017" + integrity sha512-Rw7FzYOOzcfyUPaAm9P3g0tFdGqGq2LLiAI+wjYcp6CsF3DeeMrRS3HZAho4s273C29G/DJhx0e8BpRE/QZNGg== dependencies: shell-quote "^1.6.1" ws "^7" @@ -5511,17 +6007,22 @@ react-freeze@^1.0.0: resolved "https://registry.yarnpkg.com/react-freeze/-/react-freeze-1.0.0.tgz#b21c65fe1783743007c8c9a2952b1c8879a77354" integrity sha512-yQaiOqDmoKqks56LN9MTgY06O0qQHgV4FUrikH357DydArSZHQhl0BJFqGKIZoTqi8JizF9Dxhuk1FIZD6qCaw== -"react-is@^16.12.0 || ^17.0.0", react-is@^17.0.1, react-is@^17.0.2: +"react-is@^16.12.0 || ^17.0.0", react-is@^17.0.1: version "17.0.2" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.1.0: + version "18.1.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.1.0.tgz#61aaed3096d30eacf2a2127118b5b41387d32a67" + integrity sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg== + react-is@^16.13.0, react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-native-codegen@*, react-native-codegen@^0.0.13: +react-native-codegen@*: version "0.0.13" resolved "https://registry.yarnpkg.com/react-native-codegen/-/react-native-codegen-0.0.13.tgz#4cc94546fc75a5dbe9350d59c10108f2efe6bc17" integrity sha512-rCh1P+s0Q4N6vNgS97ckafbhJRztz22+0l0VZoyQC06F07J98kI5cUByH0ATypPRIdpkMbAZc59DoPdDFc01bg== @@ -5531,65 +6032,73 @@ react-native-codegen@*, react-native-codegen@^0.0.13: jscodeshift "^0.13.1" nullthrows "^1.1.1" +react-native-codegen@^0.69.1: + version "0.69.1" + resolved "https://registry.yarnpkg.com/react-native-codegen/-/react-native-codegen-0.69.1.tgz#3632be2f24464e6fad8dd11a25d1b6f3bc2c7d0b" + integrity sha512-TOZEqBarczcyYN3iZE3VpKkooOevaAzBq9n7lU0h9mQUvtRhLVyolc+a5K6cWI0e4v4K69I0MqzjPcPeFKo32Q== + dependencies: + "@babel/parser" "^7.14.0" + flow-parser "^0.121.0" + jscodeshift "^0.13.1" + nullthrows "^1.1.1" + "react-native-gesture-handler@link:..": version "0.0.0" uid "" -react-native-gradle-plugin@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/react-native-gradle-plugin/-/react-native-gradle-plugin-0.0.5.tgz#1f20d437b140eda65b6e3bdf6eb102bbab1a5a10" - integrity sha512-kGupXo+pD2mB6Z+Oyowor3qlCroiS32FNGoiGQdwU19u8o+NNhEZKwoKfC5Qt03bMZSmFlcAlTyf79vrS2BZKQ== - dependencies: - react-native-codegen "*" +react-native-gradle-plugin@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/react-native-gradle-plugin/-/react-native-gradle-plugin-0.0.7.tgz#96602f909745239deab7b589443f14fce5da2056" + integrity sha512-+4JpbIx42zGTONhBTIXSyfyHICHC29VTvhkkoUOJAh/XHPEixpuBduYgf6Y4y9wsN1ARlQhBBoptTvXvAFQf5g== -react-native-safe-area-context@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-4.0.1.tgz#b8413ad703088d8c36d2e56202a28b17aa0df79b" - integrity sha512-N8xvlDrcdQ8FBtS/jIvsxm7Wwb5ZRnYjQpoQR2CfFTN1AwIHG80ZACteeLFQ8ErGBRTPBgXNBPoFCppCDHbnyg== +react-native-safe-area-context@^4.2.5: + version "4.2.5" + resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-4.2.5.tgz#23006dc1a398bb825d7d795c27f1c46119efe8a5" + integrity sha512-nUil2de1gk/8ZB9IzIxFyGCiKeAYcHzJb/Tks2NzSkev1qH4MNR05DWYDSmW6vLT+y4mospLVyG/H5dyUd+KQQ== -react-native-screens@^3.13.1: +react-native-screens@software-mansion/react-native-screens#568e588817538740dff23a3590748614d4c346e3: version "3.13.1" - resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-3.13.1.tgz#b3b1c5788dca25a71668909f66d87fb35c5c5241" - integrity sha512-xcrnuUs0qUrGpc2gOTDY4VgHHADQwp80mwR1prU/Q0JqbZN5W3koLhuOsT6FkSRKjR5t40l+4LcjhHdpqRB2HA== + resolved "https://codeload.github.com/software-mansion/react-native-screens/tar.gz/568e588817538740dff23a3590748614d4c346e3" dependencies: react-freeze "^1.0.0" warn-once "^0.1.0" -react-native@0.68.0-rc.2: - version "0.68.0-rc.2" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.68.0-rc.2.tgz#6b826810355e70193fcc3a4f4c862767e5c2cce2" - integrity sha512-PdaPs+g5DCZdWTFScZ42nv6m+iTvLSo34efxDiWBwrkU7kr6M9WjNSnPhd07KAOxHWBOQKZgV0UwwlN2ugvqtw== +react-native@^0.69.0: + version "0.69.0" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.69.0.tgz#16cb7f02d8253fb4e69ea56e878afd1e797b0292" + integrity sha512-TBaoNMaxxVLRNNxNXmi8sauxSv6LXF5O6apoUPHVYC1Tr9dP0DqiQP2ngHHJM9ysxxIkX47OTho028HRbkgTCA== dependencies: "@jest/create-cache-key-function" "^27.0.1" - "@react-native-community/cli" "^7.0.3" - "@react-native-community/cli-platform-android" "^7.0.1" - "@react-native-community/cli-platform-ios" "^7.0.1" + "@react-native-community/cli" "^8.0.0" + "@react-native-community/cli-platform-android" "^8.0.0" + "@react-native-community/cli-platform-ios" "^8.0.0" "@react-native/assets" "1.0.0" "@react-native/normalize-color" "2.0.0" "@react-native/polyfills" "2.0.0" abort-controller "^3.0.0" anser "^1.4.9" base64-js "^1.1.2" - deprecated-react-native-prop-types "^2.3.0" event-target-shim "^5.0.1" hermes-engine "~0.11.0" invariant "^2.2.4" jsc-android "^250230.2.1" - metro-react-native-babel-transformer "0.67.0" - metro-runtime "0.67.0" - metro-source-map "0.67.0" + memoize-one "^5.0.0" + metro-react-native-babel-transformer "0.70.3" + metro-runtime "0.70.3" + metro-source-map "0.70.3" + mkdirp "^0.5.1" nullthrows "^1.1.1" pretty-format "^26.5.2" promise "^8.0.3" - react-devtools-core "^4.23.0" - react-native-codegen "^0.0.13" - react-native-gradle-plugin "^0.0.5" + react-devtools-core "4.24.0" + react-native-codegen "^0.69.1" + react-native-gradle-plugin "^0.0.7" react-refresh "^0.4.0" react-shallow-renderer "16.14.1" regenerator-runtime "^0.13.2" - scheduler "^0.20.2" + scheduler "^0.21.0" stacktrace-parser "^0.1.3" - use-subscription "^1.0.0" + use-sync-external-store "^1.0.0" whatwg-fetch "^3.0.0" ws "^6.1.4" @@ -5598,7 +6107,7 @@ react-refresh@^0.4.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.3.tgz#966f1750c191672e76e16c2efa569150cc73ab53" integrity sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA== -react-shallow-renderer@16.14.1, react-shallow-renderer@^16.13.1: +react-shallow-renderer@16.14.1: version "16.14.1" resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.14.1.tgz#bf0d02df8a519a558fd9b8215442efa5c840e124" integrity sha512-rkIMcQi01/+kxiTE9D3fdS959U1g7gs+/rborw++42m1O9FAQiNI/UNRZExVUoAOprn4umcXf+pFRou8i4zuBg== @@ -5606,23 +6115,29 @@ react-shallow-renderer@16.14.1, react-shallow-renderer@^16.13.1: object-assign "^4.1.1" react-is "^16.12.0 || ^17.0.0" -react-test-renderer@17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-17.0.2.tgz#4cd4ae5ef1ad5670fc0ef776e8cc7e1231d9866c" - integrity sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ== +react-shallow-renderer@^16.15.0: + version "16.15.0" + resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz#48fb2cf9b23d23cde96708fe5273a7d3446f4457" + integrity sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA== dependencies: object-assign "^4.1.1" - react-is "^17.0.2" - react-shallow-renderer "^16.13.1" - scheduler "^0.20.2" + react-is "^16.12.0 || ^17.0.0 || ^18.0.0" -react@17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== +react-test-renderer@^18.0.0: + version "18.1.0" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-18.1.0.tgz#35b75754834cf9ab517b6813db94aee0a6b545c3" + integrity sha512-OfuueprJFW7h69GN+kr4Ywin7stcuqaYAt1g7airM5cUgP0BoF5G5CXsPGmXeDeEkncb2fqYNECO4y18sSqphg== + dependencies: + react-is "^18.1.0" + react-shallow-renderer "^16.15.0" + scheduler "^0.22.0" + +react@18.0.0: + version "18.0.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.0.0.tgz#b468736d1f4a5891f38585ba8e8fb29f91c3cb96" + integrity sha512-x+VL6wbT4JRVPm7EGxXhZ8w8LTROaxPXOqhlGyVSrv0sB1jkyFGgXxJ8LVoPRLvPR6/CIZGFmfzqUa2NYeMr2A== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" read-pkg-up@^7.0.1: version "7.0.1" @@ -5712,7 +6227,7 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp.prototype.flags@^1.3.1: +regexp.prototype.flags@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz#b3f4c0059af9e47eca9f3f660e51d81307e72307" integrity sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ== @@ -5720,7 +6235,7 @@ regexp.prototype.flags@^1.3.1: call-bind "^1.0.2" define-properties "^1.1.3" -regexpp@^3.0.0, regexpp@^3.1.0: +regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== @@ -5769,11 +6284,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" @@ -5823,14 +6333,6 @@ resolve@^2.0.0-next.3: is-core-module "^2.2.0" path-parse "^1.0.6" -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -5844,7 +6346,12 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -rimraf@^2.5.4: +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^2.5.4, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -5875,6 +6382,13 @@ rsvp@^4.8.4: resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -5912,11 +6426,6 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" -sax@^1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - saxes@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" @@ -5924,13 +6433,19 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== +scheduler@^0.21.0: + version "0.21.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.21.0.tgz#6fd2532ff5a6d877b6edb12f00d8ab7e8f308820" + integrity sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ== + dependencies: + loose-envify "^1.1.0" + +scheduler@^0.22.0: + version "0.22.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.22.0.tgz#83a5d63594edf074add9a7198b1bae76c3db01b8" + integrity sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" "semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: version "5.7.1" @@ -5947,7 +6462,7 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.2.1, semver@^7.3.2: +semver@^7.3.2, semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== @@ -6039,16 +6554,6 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shell-quote@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" - integrity sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c= - dependencies: - array-filter "~0.0.0" - array-map "~0.0.0" - array-reduce "~0.0.0" - jsonify "~0.0.0" - shell-quote@^1.6.1, shell-quote@^1.7.3: version "1.7.3" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" @@ -6073,20 +6578,16 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -simple-plist@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.3.0.tgz#f451997663eafd8ea6bad353a01caf49ef186d43" - integrity sha512-uYWpeGFtZtVt2NhG4AHgpwx323zxD85x42heMJBan1qAiqqozIlaGrwrEt6kRjXWRWIXsuV1VLCvVmZan2B5dg== - dependencies: - bplist-creator "0.1.0" - bplist-parser "0.3.0" - plist "^3.0.4" - sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -6101,15 +6602,6 @@ slice-ansi@^2.0.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -6254,11 +6746,6 @@ static-extend@^0.1.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= -stream-buffers@2.2.x: - version "2.2.0" - resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" - integrity sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ= - strict-uri-encode@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" @@ -6272,7 +6759,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -6282,17 +6769,17 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: strip-ansi "^6.0.1" string.prototype.matchall@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz#5abb5dabc94c7b0ea2380f65ba610b3a544b15fa" - integrity sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg== + version "4.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" + integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" es-abstract "^1.19.1" get-intrinsic "^1.1.1" - has-symbols "^1.0.2" + has-symbols "^1.0.3" internal-slot "^1.0.3" - regexp.prototype.flags "^1.3.1" + regexp.prototype.flags "^1.4.1" side-channel "^1.0.4" string.prototype.trimend@^1.0.4: @@ -6403,17 +6890,6 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^6.0.9: - version "6.8.0" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" - integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - temp@0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" @@ -6464,6 +6940,13 @@ through2@^2.0.1: readable-stream "~2.3.6" xtend "~4.0.1" +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -6542,7 +7025,7 @@ tslib@^2.0.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== -tsutils@^3.17.1: +tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== @@ -6600,6 +7083,11 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" +typescript@^4.5.5: + version "4.6.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.3.tgz#eefeafa6afdd31d725584c67a0eaba80f6fc6c6c" + integrity sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw== + uglify-es@^3.1.9: version "3.3.9" resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" @@ -6681,12 +7169,10 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= -use-subscription@^1.0.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.5.1.tgz#73501107f02fad84c6dd57965beb0b75c68c42d1" - integrity sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA== - dependencies: - object-assign "^4.1.1" +use-sync-external-store@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.1.0.tgz#3343c3fe7f7e404db70f8c687adf5c1652d34e82" + integrity sha512-SEnieB2FPKEVne66NpXPd1Np4R1lTNKfjuy3XdIoPQKYBAFdzbzSZlSn1KJZUiihQLQC5Znot4SBz1EOTBwQAQ== use@^3.1.0: version "3.1.1" @@ -6703,11 +7189,6 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" - integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== - uuid@^8.3.0: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" @@ -6907,14 +7388,6 @@ ws@^7, ws@^7.4.6, ws@^7.5.1: resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b" integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA== -xcode@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/xcode/-/xcode-3.0.1.tgz#3efb62aac641ab2c702458f9a0302696146aa53c" - integrity sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA== - dependencies: - simple-plist "^1.1.0" - uuid "^7.0.3" - xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" @@ -6930,13 +7403,6 @@ xmlchars@^2.2.0: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xmldoc@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/xmldoc/-/xmldoc-1.1.2.tgz#6666e029fe25470d599cd30e23ff0d1ed50466d7" - integrity sha512-ruPC/fyPNck2BD1dpz0AZZyrEwMOrWTO5lDdIXS91rs3wtm4j+T8Rp2o+zoOYkkAxJTZRPOSnOGei1egoRmKMQ== - dependencies: - sax "^1.2.1" - xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" diff --git a/README.md b/README.md index 439b7e7c1d..d3bbe59541 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Check out our dedicated documentation page for info about this library, API refe If you want to play with the API but don't feel like trying it on a real app, you can run the example project. Clone the repo, go to the `example` folder and run: ```bash - yarn install +yarn install ``` If you are running on ios, run `pod install` in the ios folder @@ -44,7 +44,8 @@ You will need to have an Android or iOS device or emulator connected as well as | <1.1.0 | 0.50.0+ | It may be possible to use newer versions of react-native-gesture-handler on React Native with version <= 0.59 by reverse Jetifying. -Read more on that here https://github.com/mikehardy/jetifier#to-reverse-jetify--convert-node_modules-dependencies-to-support-libraries +Read more on that here + ## License Gesture handler library is licensed under [The MIT License](LICENSE). diff --git a/RNGestureHandler.podspec b/RNGestureHandler.podspec index 449d11d47b..e369edee3c 100644 --- a/RNGestureHandler.podspec +++ b/RNGestureHandler.podspec @@ -23,7 +23,8 @@ Pod::Spec.new do |s| folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32' s.pod_target_xcconfig = { - 'HEADER_SEARCH_PATHS' => '"$(PODS_ROOT)/boost" "$(PODS_ROOT)/boost-for-react-native" "$(PODS_ROOT)/RCT-Folly"' + 'HEADER_SEARCH_PATHS' => '"$(PODS_ROOT)/boost" "$(PODS_ROOT)/boost-for-react-native" "$(PODS_ROOT)/RCT-Folly"', + 'CLANG_CXX_LANGUAGE_STANDARD' => 'c++17', } s.platforms = { ios: '11.0', tvos: '11.0' } s.compiler_flags = folly_compiler_flags + ' -DRN_FABRIC_ENABLED' diff --git a/android/build.gradle b/android/build.gradle index 189ea11c2b..26798d6a36 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,4 +1,5 @@ import groovy.json.JsonSlurper +import java.nio.file.Paths buildscript { ext.isStandaloneProject = (project == rootProject) @@ -24,6 +25,20 @@ def isNewArchitectureEnabled() { return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true" } +def findNodeModulePath(baseDir, packageName) { + def basePath = baseDir.toPath().normalize() + // Node's module resolution algorithm searches up to the root directory, + // after which the base path will be null + while (basePath) { + def candidatePath = Paths.get(basePath.toString(), "node_modules", packageName) + if (candidatePath.toFile().exists()) { + return candidatePath.toString() + } + basePath = basePath.getParent() + } + return null +} + if (isNewArchitectureEnabled()) { apply plugin: 'com.facebook.react' } @@ -39,7 +54,7 @@ def shouldUseCommonInterfaceFromReanimated() { def json = new JsonSlurper().parseText(inputFile.text) def reanimatedVersion = json.version as String def (major, minor, patch) = reanimatedVersion.tokenize('.') - return Integer.parseInt(major) == 2 && Integer.parseInt(minor) >= 3 + return (Integer.parseInt(major) == 2 && Integer.parseInt(minor) >= 3) || Integer.parseInt(major) == 3 } else { // In Gutenberg, we use a Reanimated version higher than 2.3. Therefore, we have to // assure that the common interface is always used to prevent duplicating the class. @@ -53,11 +68,20 @@ repositories { } android { - compileSdkVersion 30 + compileSdkVersion 31 + + // Used to override the NDK path/version on internal CI or by allowing + // users to customize the NDK path/version from their root project (e.g. for M1 support) + if (rootProject.hasProperty("ndkPath")) { + ndkPath rootProject.ext.ndkPath + } + if (rootProject.hasProperty("ndkVersion")) { + ndkVersion rootProject.ext.ndkVersion + } defaultConfig { minSdkVersion 21 - targetSdkVersion 30 + targetSdkVersion 31 versionCode 1 versionName "1.0" buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString() @@ -70,8 +94,8 @@ android { "NDK_TOOLCHAIN_VERSION=clang", "GENERATED_SRC_DIR=${appProject.buildDir}/generated/source", "PROJECT_BUILD_DIR=${appProject.buildDir}", - "REACT_ANDROID_DIR=${appProject.rootDir}/../node_modules/react-native/ReactAndroid", - "REACT_ANDROID_BUILD_DIR=${appProject.rootDir}/../node_modules/react-native/ReactAndroid/build" + "REACT_ANDROID_DIR=${findNodeModulePath(appProject.rootDir, "react-native") ?: "../node_modules/react-native/"}/ReactAndroid", + "REACT_ANDROID_BUILD_DIR=${findNodeModulePath(appProject.rootDir, "react-native") ?: "../node_modules/react-native/"}/ReactAndroid/build" cFlags "-Wall", "-Werror", "-fexceptions", "-frtti", "-DWITH_INSPECTOR=1" cppFlags "-std=c++17" targets "rngesturehandler_modules" @@ -80,6 +104,11 @@ android { } } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + if (isNewArchitectureEnabled()) { externalNativeBuild { ndkBuild { @@ -109,8 +138,11 @@ android { // Include "common/" only when it's not provided by Reanimated to mitigate // multiple definitions of the same class preventing build - if (!shouldUseCommonInterfaceFromReanimated()) { + if (shouldUseCommonInterfaceFromReanimated()) { + srcDirs += 'reanimated/src/main/java' + } else { srcDirs += 'common/src/main/java' + srcDirs += 'noreanimated/src/main/java' } if (isNewArchitectureEnabled()) { @@ -150,7 +182,7 @@ dependencies { } else { if (isStandaloneProject) { // If this is the root project (e.g. Jitpack), specify a version - implementation 'com.facebook.react:react-native:0.66.2' + implementation 'com.facebook.react:react-native:0.69.4' } else { implementation 'com.facebook.react:react-native:+' } @@ -159,7 +191,7 @@ dependencies { if (shouldUseCommonInterfaceFromReanimated()) { // Include Reanimated as dependency to load the common interface if (isStandaloneProject) { - implementation ("com.github.wordpress-mobile:react-native-reanimated:2.4.1-wp-1") { + implementation ("com.github.wordpress-mobile:react-native-reanimated:2.9.1-wp-1") { exclude group:'com.facebook.fbjni' // resolves "Duplicate class com.facebook.jni.CppException" } } else { @@ -176,9 +208,9 @@ dependencies { if (isNewArchitectureEnabled()) { react { - reactRoot = rootProject.file("../node_modules/react-native/") + reactNativeDir = rootProject.file(findNodeModulePath(rootProject.rootDir, "react-native") ?: "../node_modules/react-native/") jsRootDir = file("../src/fabric/") - codegenDir = rootProject.file("../node_modules/react-native-codegen/") + codegenDir = rootProject.file(findNodeModulePath(rootProject.rootDir, "react-native-codegen") ?: "../node_modules/react-native-codegen/") libraryName = "rngesturehandler" codegenJavaPackageName = "com.swmansion.gesturehandler" } diff --git a/android/lib/build.gradle b/android/lib/build.gradle index 557b73b331..e0eec5aacd 100644 --- a/android/lib/build.gradle +++ b/android/lib/build.gradle @@ -3,11 +3,11 @@ plugins { } android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { minSdkVersion 21 - targetSdkVersion 30 + targetSdkVersion 31 } buildTypes { @@ -21,7 +21,7 @@ android { dependencies { if (isStandaloneProject) { // If this is the root project (e.g. Jitpack), specify a version - implementation 'com.facebook.react:react-native:0.64.0' + implementation 'com.facebook.react:react-native:0.69.4' } else { //noinspection GradleDynamicVersion api "com.facebook.react:react-native:+" diff --git a/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt b/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt index 476803dfcc..fafc280c5a 100644 --- a/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt +++ b/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt @@ -172,8 +172,12 @@ open class GestureHandler { // This view can't be the target, but its children might if (view is ViewGroup) { - extractGestureHandlers(view, coords, pointerId) + extractGestureHandlers(view, coords, pointerId).also { found -> + // A child view is handling touch, also extract handlers attached to this view + if (found) { + recordViewHandlersForPointer(view, coords, pointerId) + } + } } else false } PointerEventsConfig.AUTO -> { diff --git a/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.kt b/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.kt index b24aaf724f..2780135a29 100644 --- a/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.kt +++ b/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.kt @@ -3,13 +3,16 @@ package com.swmansion.gesturehandler import android.os.SystemClock import android.view.MotionEvent import android.view.View +import android.view.ViewConfiguration import android.view.ViewGroup -import com.swmansion.gesturehandler.react.RNGestureHandlerButtonViewManager +import com.facebook.react.views.textinput.ReactEditText class NativeViewGestureHandler : GestureHandler() { private var shouldActivateOnStart = false private var disallowInterruption = false + private var hook: NativeViewGestureHandlerHook = defaultHook + init { setShouldCancelWhenOutside(true) } @@ -34,13 +37,17 @@ class NativeViewGestureHandler : GestureHandler() { } override fun shouldRecognizeSimultaneously(handler: GestureHandler<*>): Boolean { + // if the gesture is marked by user as simultaneous with other or the hook return true + if (super.shouldRecognizeSimultaneously(handler) || hook.shouldRecognizeSimultaneously(handler)) { + return true + } + if (handler is NativeViewGestureHandler) { // Special case when the peer handler is also an instance of NativeViewGestureHandler: // For the `disallowInterruption` to work correctly we need to check the property when // accessed as a peer, because simultaneous recognizers can be set on either side of the // connection. - val nativeWrapper = handler - if (nativeWrapper.state == STATE_ACTIVE && nativeWrapper.disallowInterruption) { + if (handler.state == STATE_ACTIVE && handler.disallowInterruption) { // other handler is active and it disallows interruption, we don't want to get into its way return false } @@ -52,7 +59,7 @@ class NativeViewGestureHandler : GestureHandler() { // as it means the other handler has turned active and returning `true` would prevent it from // interrupting the current handler false - } else state == STATE_ACTIVE && canBeInterrupted + } else state == STATE_ACTIVE && canBeInterrupted && (!hook.shouldCancelRootViewGestureHandlerIfNecessary() || handler.tag > 0) // otherwise we can only return `true` if already in an active state } @@ -60,19 +67,10 @@ class NativeViewGestureHandler : GestureHandler() { return !disallowInterruption } - private fun canStart(): Boolean { - val view = view - if (view is StateChangeHook) { - return view.canStart() - } - - return true - } - - private fun afterGestureEnd() { - val view = view - if (view is StateChangeHook) { - view.afterGestureEnd() + override fun onPrepare() { + when (val view = view) { + is NativeViewGestureHandlerHook -> this.hook = view + is ReactEditText -> this.hook = EditTextHook(this, view) } } @@ -84,7 +82,7 @@ class NativeViewGestureHandler : GestureHandler() { activate() } end() - afterGestureEnd() + hook.afterGestureEnd(event) } else if (state == STATE_UNDETERMINED || state == STATE_BEGAN) { when { shouldActivateOnStart -> { @@ -96,8 +94,11 @@ class NativeViewGestureHandler : GestureHandler() { view.onTouchEvent(event) activate() } + hook.wantsToHandleEventBeforeActivation() -> { + hook.handleEventBeforeActivation(event) + } state != STATE_BEGAN -> { - if (canStart()) { + if (hook.canBegin()) { begin() } else { cancel() @@ -117,13 +118,93 @@ class NativeViewGestureHandler : GestureHandler() { view!!.onTouchEvent(event) } + override fun onReset() { + this.hook = defaultHook + } + companion object { private fun tryIntercept(view: View, event: MotionEvent) = view is ViewGroup && view.onInterceptTouchEvent(event) + + private val defaultHook = object : NativeViewGestureHandlerHook {} } - interface StateChangeHook { - fun canStart(): Boolean - fun afterGestureEnd() + interface NativeViewGestureHandlerHook { + /** + * Called when gesture is in the UNDETERMINED state, shouldActivateOnStart is set to false, + * and both tryIntercept and wantsToHandleEventBeforeActivation returned false. + * + * @return Boolean value signalling whether the handler can transition to the BEGAN state. If false + * the gesture will be cancelled. + */ + fun canBegin() = true + + /** + * Called after the gesture transitions to the END state. + */ + fun afterGestureEnd(event: MotionEvent) = Unit + + /** + * @return Boolean value signalling whether the gesture can be recognized simultaneously with + * other (handler). Returning false doesn't necessarily prevent it from happening. + */ + fun shouldRecognizeSimultaneously(handler: GestureHandler<*>) = false + + /** + * shouldActivateOnStart and tryIntercept have priority over this method + * + * @return Boolean value signalling if the hook wants to handle events passed to the handler + * before it activates (after that the events are passed to the underlying view). + */ + fun wantsToHandleEventBeforeActivation() = false + + /** + * Will be called with events if wantsToHandleEventBeforeActivation returns true. + */ + fun handleEventBeforeActivation(event: MotionEvent) = Unit + + /** + * @return Boolean value indicating whether the RootViewGestureHandler should be cancelled + * by this one. + */ + fun shouldCancelRootViewGestureHandlerIfNecessary() = false + } + + private class EditTextHook( + private val handler: NativeViewGestureHandler, + private val editText: ReactEditText + ) : NativeViewGestureHandlerHook { + private var startX = 0f + private var startY = 0f + private var touchSlopSquared: Int + + init { + val vc = ViewConfiguration.get(editText.context) + touchSlopSquared = vc.scaledTouchSlop * vc.scaledTouchSlop + } + + override fun afterGestureEnd(event: MotionEvent) { + if ((event.x - startX) * (event.x - startX) + (event.y - startY) * (event.y - startY) < touchSlopSquared) { + editText.requestFocusFromJS() + } + } + + // recognize alongside every handler besides RootViewGestureHandler, which is a private inner class + // of RNGestureHandlerRootHelper so no explicit type checks, but its tag is always negative + // also if other handler is NativeViewGestureHandler then don't override the default implementation + override fun shouldRecognizeSimultaneously(handler: GestureHandler<*>) = + handler.tag > 0 && handler !is NativeViewGestureHandler + + override fun wantsToHandleEventBeforeActivation() = true + + override fun handleEventBeforeActivation(event: MotionEvent) { + handler.activate() + editText.onTouchEvent(event) + + startX = event.x + startY = event.y + } + + override fun shouldCancelRootViewGestureHandlerIfNecessary() = true } } diff --git a/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt b/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt index 382934f37e..cb250ecf8b 100644 --- a/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt +++ b/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt @@ -1,6 +1,7 @@ package com.swmansion.gesturehandler import android.content.Context +import android.os.Handler import android.view.MotionEvent import android.view.VelocityTracker import android.view.ViewConfiguration @@ -40,6 +41,9 @@ class PanGestureHandler(context: Context?) : GestureHandler() private var lastY = 0f private var velocityTracker: VelocityTracker? = null private var averageTouches = false + private var activateAfterLongPress = DEFAULT_ACTIVATE_AFTER_LONG_PRESS + private val activateDelayed = Runnable { activate() } + private var handler: Handler? = null /** * On Android when there are multiple pointers on the screen pan gestures most often just consider @@ -54,7 +58,7 @@ class PanGestureHandler(context: Context?) : GestureHandler() * position of all the fingers will remain still while doing a rotation gesture. */ init { - val vc = ViewConfiguration.get(context) + val vc = ViewConfiguration.get(context!!) val touchSlop = vc.scaledTouchSlop defaultMinDistSq = (touchSlop * touchSlop).toFloat() minDistSq = defaultMinDistSq @@ -76,6 +80,7 @@ class PanGestureHandler(context: Context?) : GestureHandler() minDistSq = defaultMinDistSq minPointers = DEFAULT_MIN_POINTERS maxPointers = DEFAULT_MAX_POINTERS + activateAfterLongPress = DEFAULT_ACTIVATE_AFTER_LONG_PRESS averageTouches = false } @@ -127,6 +132,10 @@ class PanGestureHandler(context: Context?) : GestureHandler() this.averageTouches = averageTouches } + fun setActivateAfterLongPress(time: Long) = apply { + this.activateAfterLongPress = time + } + /** * @param minVelocity in pixels per second */ @@ -177,13 +186,18 @@ class PanGestureHandler(context: Context?) : GestureHandler() private fun shouldFail(): Boolean { val dx = lastX - startX + offsetX + val dy = lastY - startY + offsetY + + if (activateAfterLongPress > 0 && dx * dx + dy * dy > defaultMinDistSq) { + handler?.removeCallbacksAndMessages(null) + return true + } if (failOffsetXStart != MAX_VALUE_IGNORE && dx < failOffsetXStart) { return true } if (failOffsetXEnd != MIN_VALUE_IGNORE && dx > failOffsetXEnd) { return true } - val dy = lastY - startY + offsetY if (failOffsetYStart != MAX_VALUE_IGNORE && dy < failOffsetYStart) { return true } @@ -216,6 +230,13 @@ class PanGestureHandler(context: Context?) : GestureHandler() velocityTracker = VelocityTracker.obtain() addVelocityMovement(velocityTracker, event) begin() + + if (activateAfterLongPress > 0) { + if (handler == null) { + handler = Handler() + } + handler!!.postDelayed(activateDelayed, activateAfterLongPress) + } } else if (velocityTracker != null) { addVelocityMovement(velocityTracker, event) velocityTracker!!.computeCurrentVelocity(1000) @@ -257,7 +278,12 @@ class PanGestureHandler(context: Context?) : GestureHandler() super.activate(force) } + override fun onCancel() { + handler?.removeCallbacksAndMessages(null) + } + override fun onReset() { + handler?.removeCallbacksAndMessages(null) velocityTracker?.let { it.recycle() velocityTracker = null @@ -274,6 +300,7 @@ class PanGestureHandler(context: Context?) : GestureHandler() private const val MAX_VALUE_IGNORE = Float.MIN_VALUE private const val DEFAULT_MIN_POINTERS = 1 private const val DEFAULT_MAX_POINTERS = 10 + private const val DEFAULT_ACTIVATE_AFTER_LONG_PRESS = 0L /** * This method adds movement to {@class VelocityTracker} first resetting offset of the event so diff --git a/android/noreanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt b/android/noreanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt new file mode 100644 index 0000000000..18d3f93f07 --- /dev/null +++ b/android/noreanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt @@ -0,0 +1,10 @@ +package com.swmansion.gesturehandler + +import com.facebook.react.bridge.ReactContext +import com.facebook.react.uimanager.events.Event + +object ReanimatedEventDispatcher { + fun >sendEvent(event: T, reactApplicationContext: ReactContext) { + // no-op + } +} diff --git a/android/reanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt b/android/reanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt new file mode 100644 index 0000000000..43f9d421a6 --- /dev/null +++ b/android/reanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt @@ -0,0 +1,17 @@ +package com.swmansion.gesturehandler + +import com.facebook.react.bridge.ReactContext +import com.facebook.react.uimanager.events.Event +import com.swmansion.reanimated.ReanimatedModule + +object ReanimatedEventDispatcher { + private var reanimatedModule: ReanimatedModule? = null + + fun >sendEvent(event: T, reactApplicationContext: ReactContext) { + if (reanimatedModule == null) { + reanimatedModule = reactApplicationContext.getNativeModule(ReanimatedModule::class.java) + } + + reanimatedModule?.nodesManager?.onEventDispatch(event) + } +} diff --git a/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt b/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt index 63ee79f51d..7f878bf8f6 100644 --- a/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +++ b/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt @@ -9,6 +9,8 @@ import android.graphics.drawable.Drawable import android.graphics.drawable.LayerDrawable import android.graphics.drawable.PaintDrawable import android.graphics.drawable.RippleDrawable +import android.graphics.drawable.ShapeDrawable +import android.graphics.drawable.shapes.RectShape import android.os.Build import android.util.TypedValue import android.view.MotionEvent @@ -16,7 +18,6 @@ import android.view.View import android.view.View.OnClickListener import android.view.ViewGroup import androidx.core.view.children -import com.facebook.react.bridge.SoftAssertions import com.facebook.react.module.annotations.ReactModule import com.facebook.react.uimanager.PixelUtil import com.facebook.react.uimanager.ThemedReactContext @@ -77,6 +78,11 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager(), R view.exclusive = exclusive } + @ReactProp(name = "touchSoundDisabled") + override fun setTouchSoundDisabled(view: ButtonViewGroup, touchSoundDisabled: Boolean) { + view.isSoundEffectsEnabled = !touchSoundDisabled + } + override fun onAfterUpdateTransaction(view: ButtonViewGroup) { view.updateBackground() } @@ -86,7 +92,7 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager(), R } class ButtonViewGroup(context: Context?) : ViewGroup(context), - NativeViewGestureHandler.StateChangeHook { + NativeViewGestureHandler.NativeViewGestureHandlerHook { // Using object because of handling null representing no value set. var rippleColor: Int? = null set(color) = withBackgroundUpdate { @@ -132,30 +138,6 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager(), R _backgroundColor = color } - private fun applyRippleEffectWhenNeeded(selectable: Drawable): Drawable { - val rippleColor = rippleColor - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && selectable is RippleDrawable) { - val states = arrayOf(intArrayOf(android.R.attr.state_enabled)) - val colorStateList = if (rippleColor != null) { - val colors = intArrayOf(rippleColor) - ColorStateList(states, colors) - } else { - // if rippleColor is null, reapply the default color - context.theme.resolveAttribute(android.R.attr.colorControlHighlight, resolveOutValue, true) - val colors = intArrayOf(resolveOutValue.data) - ColorStateList(states, colors) - } - - selectable.setColor(colorStateList) - } - - val rippleRadius = rippleRadius - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && rippleRadius != null && selectable is RippleDrawable) { - selectable.radius = PixelUtil.toPixelFromDIP(rippleRadius.toFloat()).toInt() - } - return selectable - } - override fun onInterceptTouchEvent(ev: MotionEvent): Boolean { if (super.onInterceptTouchEvent(ev)) { return true @@ -210,49 +192,74 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager(), R // reset foreground foreground = null } + + val selectable = createSelectableDrawable() + + if (borderRadius != 0f) { + // Radius-connected lines below ought to be considered + // as a temporary solution. It do not allow to set + // different radius on each corner. However, I suppose it's fairly + // fine for button-related use cases. + // Therefore it might be used as long as: + // 1. ReactViewManager is not a generic class with a possibility to handle another ViewGroup + // 2. There's no way to force native behavior of ReactViewGroup's superclass's onTouchEvent + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && selectable is RippleDrawable) { + val mask = PaintDrawable(Color.WHITE) + mask.setCornerRadius(borderRadius) + selectable.setDrawableByLayerId(android.R.id.mask, mask) + } + } + if (useDrawableOnForeground && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - foreground = applyRippleEffectWhenNeeded(createSelectableDrawable()) + foreground = selectable if (_backgroundColor != Color.TRANSPARENT) { setBackgroundColor(_backgroundColor) } } else if (_backgroundColor == Color.TRANSPARENT && rippleColor == null) { - background = createSelectableDrawable() + background = selectable } else { val colorDrawable = PaintDrawable(_backgroundColor) - val selectable = createSelectableDrawable() + if (borderRadius != 0f) { - // Radius-connected lines below ought to be considered - // as a temporary solution. It do not allow to set - // different radius on each corner. However, I suppose it's fairly - // fine for button-related use cases. - // Therefore it might be used as long as: - // 1. ReactViewManager is not a generic class with a possibility to handle another ViewGroup - // 2. There's no way to force native behavior of ReactViewGroup's superclass's onTouchEvent colorDrawable.setCornerRadius(borderRadius) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP - && selectable is RippleDrawable) { - val mask = PaintDrawable(Color.WHITE) - mask.setCornerRadius(borderRadius) - selectable.setDrawableByLayerId(android.R.id.mask, mask) - } } - applyRippleEffectWhenNeeded(selectable) + val layerDrawable = LayerDrawable(arrayOf(colorDrawable, selectable)) background = layerDrawable } } private fun createSelectableDrawable(): Drawable { - val version = Build.VERSION.SDK_INT - val identifier = if (useBorderlessDrawable && version >= 21) SELECTABLE_ITEM_BACKGROUND_BORDERLESS else SELECTABLE_ITEM_BACKGROUND - val attrID = getAttrId(context, identifier) - context.theme.resolveAttribute(attrID, resolveOutValue, true) - return if (version >= 21) { - resources.getDrawable(resolveOutValue.resourceId, context.theme) - } else { + // TODO: remove once support for RN 0.63 is dropped, since 0.64 minSdkVersion is 21 + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { + context.theme.resolveAttribute(android.R.attr.selectableItemBackground, resolveOutValue, true) @Suppress("Deprecation") - resources.getDrawable(resolveOutValue.resourceId) + return resources.getDrawable(resolveOutValue.resourceId) + } + + val states = arrayOf(intArrayOf(android.R.attr.state_enabled)) + val rippleRadius = rippleRadius + val colorStateList = if (rippleColor != null) { + val colors = intArrayOf(rippleColor!!) + ColorStateList(states, colors) + } else { + // if rippleColor is null, reapply the default color + context.theme.resolveAttribute(android.R.attr.colorControlHighlight, resolveOutValue, true) + val colors = intArrayOf(resolveOutValue.data) + ColorStateList(states, colors) + } + + val drawable = RippleDrawable( + colorStateList, + null, + if (useBorderlessDrawable) null else ShapeDrawable(RectShape()) + ) + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && rippleRadius != null) { + drawable.radius = PixelUtil.toPixelFromDIP(rippleRadius.toFloat()).toInt() } + + return drawable } override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) { @@ -265,7 +272,7 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager(), R } } - override fun canStart(): Boolean { + override fun canBegin(): Boolean { val isResponder = tryGrabbingResponder() if (isResponder) { isTouched = true @@ -273,11 +280,6 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager(), R return isResponder } - override fun afterGestureEnd() { - tryFreeingResponder() - isTouched = false - } - private fun tryGrabbingResponder(): Boolean { if (isChildTouched()) { return false @@ -294,24 +296,30 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager(), R } } - private fun tryFreeingResponder() { - if (responder === this) { - responder = null - } - } - private fun isChildTouched(children: Sequence = this.children): Boolean { for (child in children) { if (child is ButtonViewGroup && (child.isTouched || child.isPressed)) { return true } else if (child is ViewGroup) { - return isChildTouched(child.children) + if (isChildTouched(child.children)) { + return true + } } } return false } + override fun performClick(): Boolean { + // don't preform click when a child button is pressed (mainly to prevent sound effect of + // a parent button from playing) + return if (!isChildTouched()) { + super.performClick() + } else { + false + } + } + override fun setPressed(pressed: Boolean) { // there is a possibility of this method being called before NativeViewGestureHandler has // opportunity to call canStart, in that case we need to grab responder in case the gesture @@ -329,12 +337,13 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager(), R if (!pressed || responder === this || canBePressedAlongsideOther) { // we set pressed state only for current responder or any non-exclusive button when responder // is null or non-exclusive, assuming it doesn't have pressed children - super.setPressed(pressed) isTouched = pressed + super.setPressed(pressed) } if (!pressed && responder === this) { // if the responder is no longer pressed we release button responder responder = null + isTouched = false } } @@ -344,28 +353,9 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager(), R } companion object { - const val SELECTABLE_ITEM_BACKGROUND = "selectableItemBackground" - const val SELECTABLE_ITEM_BACKGROUND_BORDERLESS = "selectableItemBackgroundBorderless" - var resolveOutValue = TypedValue() var responder: ButtonViewGroup? = null var dummyClickListener = OnClickListener { } - - @TargetApi(Build.VERSION_CODES.LOLLIPOP) - private fun getAttrId(context: Context, attr: String): Int { - SoftAssertions.assertNotNull(attr) - return when (attr) { - SELECTABLE_ITEM_BACKGROUND -> { - android.R.attr.selectableItemBackground - } - SELECTABLE_ITEM_BACKGROUND_BORDERLESS -> { - android.R.attr.selectableItemBackgroundBorderless - } - else -> { - context.resources.getIdentifier(attr, "attr", "android") - } - } - } } } diff --git a/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt b/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt index 7de0492f42..471ce311ef 100644 --- a/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt +++ b/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt @@ -6,52 +6,14 @@ import android.util.AttributeSet import android.view.MotionEvent import com.facebook.react.ReactInstanceManager import com.facebook.react.ReactRootView +import java.lang.Exception @Deprecated(message = "Use component instead. Check gesture handler installation instructions in documentation for more information.") class RNGestureHandlerEnabledRootView : ReactRootView { - private lateinit var _reactInstanceManager: ReactInstanceManager - private var gestureRootHelper: RNGestureHandlerRootHelper? = null - constructor(context: Context?) : super(context) {} constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {} - override fun requestDisallowInterceptTouchEvent(disallowIntercept: Boolean) { - gestureRootHelper?.requestDisallowInterceptTouchEvent(disallowIntercept) - super.requestDisallowInterceptTouchEvent(disallowIntercept) - } - - override fun dispatchTouchEvent(ev: MotionEvent): Boolean { - return if (gestureRootHelper?.dispatchTouchEvent(ev) == true) { - true - } else super.dispatchTouchEvent(ev) - } - - /** - * This method is used to enable root view to start processing touch events through the gesture - * handler library logic. Unless this method is called (which happens as a result of instantiating - * new gesture handler from JS) the root view component will just proxy all touch related methods - * to its superclass. Thus in the "disabled" state all touch related events will fallback to - * default RN behavior. - */ - fun initialize() { - check(gestureRootHelper == null) { "GestureHandler already initialized for root view $this" } - gestureRootHelper = RNGestureHandlerRootHelper( - _reactInstanceManager.currentReactContext!!, this) - } - - fun tearDown() { - gestureRootHelper?.let { - it.tearDown() - gestureRootHelper = null - } - } - - override fun startReactApplication( - reactInstanceManager: ReactInstanceManager, - moduleName: String, - initialProperties: Bundle?, - ) { - super.startReactApplication(reactInstanceManager, moduleName, initialProperties) - _reactInstanceManager = reactInstanceManager + init { + throw UnsupportedOperationException("Your application is configured to use RNGestureHandlerEnabledRootView which is no longer supported. You can see how to migrate to here: https://docs.swmansion.com/react-native-gesture-handler/docs/guides/migrating-off-rnghenabledroot") } } diff --git a/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt b/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt index 28b2495c20..10ca971db7 100644 --- a/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +++ b/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt @@ -1,3 +1,9 @@ +// 1. RCTEventEmitter was deprecated in favor of RCTModernEventEmitter interface +// 2. Event#init() with only viewTag was deprecated in favor of two arg c-tor +// 3. Event#receiveEvent() with 3 args was deprecated in favor of 4 args version +// ref: https://github.com/facebook/react-native/commit/2fbbdbb2ce897e8da3f471b08b93f167d566db1d +@file:Suppress("DEPRECATION") + package com.swmansion.gesturehandler.react import androidx.core.util.Pools diff --git a/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt b/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt index 13edb2a3a4..78fcb87681 100644 --- a/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +++ b/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt @@ -14,7 +14,12 @@ import com.facebook.soloader.SoLoader import com.swmansion.common.GestureHandlerStateManager import com.swmansion.gesturehandler.* import java.util.* +// NativeModule.onCatalystInstanceDestroy() was deprecated in favor of NativeModule.invalidate() +// ref: https://github.com/facebook/react-native/commit/18c8417290823e67e211bde241ae9dde27b72f17 +// UIManagerModule.resolveRootTagFromReactTag() was deprecated and will be removed in the next RN release +// ref: https://github.com/facebook/react-native/commit/acbf9e18ea666b07c1224a324602a41d0a66985e +@Suppress("DEPRECATION") @ReactModule(name = RNGestureHandlerModule.MODULE_NAME) class RNGestureHandlerModule(reactContext: ReactApplicationContext?) : ReactContextBaseJavaModule(reactContext), GestureHandlerStateManager { @@ -219,6 +224,9 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?) if (config.hasKey(KEY_PAN_AVG_TOUCHES)) { handler.setAverageTouches(config.getBoolean(KEY_PAN_AVG_TOUCHES)) } + if (config.hasKey(KEY_PAN_ACTIVATE_AFTER_LONG_PRESS)) { + handler.setActivateAfterLongPress(config.getInt(KEY_PAN_ACTIVATE_AFTER_LONG_PRESS).toLong()) + } } override fun extractEventData(handler: PanGestureHandler, eventData: WritableMap) { @@ -314,7 +322,7 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?) private val eventListener = object : OnTouchEventListener { override fun > onHandlerUpdate(handler: T, event: MotionEvent) { - this@RNGestureHandlerModule.onHandlerUpdate(handler, event) + this@RNGestureHandlerModule.onHandlerUpdate(handler) } override fun > onStateChange(handler: T, newState: Int, oldState: Int) { @@ -363,10 +371,6 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?) @ReactMethod fun attachGestureHandler(handlerTag: Int, viewTag: Int, actionType: Int) { - if (!BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { - tryInitializeHandlerForReactRootView(viewTag) - } - // We don't have to handle view flattening in any special way since handlers are stored as // a map: viewTag -> [handler]. If the view with attached handlers was to be flattened // then that viewTag simply wouldn't be visited when traversing the view hierarchy in the @@ -459,12 +463,7 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?) while (roots.isNotEmpty()) { val sizeBefore: Int = roots.size val root: RNGestureHandlerRootHelper = roots[0] - val reactRootView: ViewGroup = root.rootView - if (reactRootView is RNGestureHandlerEnabledRootView) { - reactRootView.tearDown() - } else { - root.tearDown() - } + root.tearDown() if (roots.size >= sizeBefore) { throw IllegalStateException("Expected root helper to get unregistered while tearing down") } @@ -473,44 +472,6 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?) super.onCatalystInstanceDestroy() } - private fun tryInitializeHandlerForReactRootView(ancestorViewTag: Int) { - val uiManager = reactApplicationContext.UIManager - val rootViewTag = uiManager.resolveRootTagFromReactTag(ancestorViewTag) - if (rootViewTag < 1) { - throw JSApplicationIllegalArgumentException("Could find root view for a given ancestor with tag $ancestorViewTag") - } - synchronized(roots) { - for (root in roots) { - val rootView: ViewGroup = root.rootView - if (rootView is ReactRootView && rootView.rootViewTag == rootViewTag) { - // we have found root helper registered for a given react root, we don't need to - // initialize a new one then - return - } - } - } - synchronized(enqueuedRootViewInit) { - if (rootViewTag in enqueuedRootViewInit) { - // root view initialization already enqueued -> we skip - return - } - enqueuedRootViewInit.add(rootViewTag) - } - // root helper for a given root tag has not been found, we may wat to check if the root view is - // an instance of RNGestureHandlerEnabledRootView and then initialize gesture handler with it - uiManager.addUIBlock(UIBlock { nativeViewHierarchyManager -> - val view = nativeViewHierarchyManager.resolveView(rootViewTag) - if (view is RNGestureHandlerEnabledRootView) { - view.initialize() - } else { - // Seems like the root view is something else than RNGestureHandlerEnabledRootView, this - // is fine though as long as gestureHandlerRootHOC is used in JS - // FIXME: check and warn about gestureHandlerRootHOC - } - synchronized(enqueuedRootViewInit) { enqueuedRootViewInit.remove(rootViewTag) } - }) - } - fun registerRootHelper(root: RNGestureHandlerRootHelper) { synchronized(roots) { if (root in roots) { @@ -542,7 +503,7 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?) private fun > findFactoryForHandler(handler: GestureHandler): HandlerFactory? = handlerFactories.firstOrNull { it.type == handler.javaClass } as HandlerFactory? - private fun > onHandlerUpdate(handler: T, motionEvent: MotionEvent) { + private fun > onHandlerUpdate(handler: T) { // triggers onUpdate and onChange callbacks on the JS side if (handler.tag < 0) { @@ -631,10 +592,8 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?) private fun >sendEventForReanimated(event: T) { // Delivers the event to Reanimated. if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { - // TODO: send event directly to Reanimated - // This is already supported in Reanimated with Fabric but let's wait until the official release. - // val reanimatedModule = reactApplicationContext.getNativeModule(ReanimatedModule::class.java) - // reanimatedModule?.nodesManager?.onEventDispatch(event) + // Send event directly to Reanimated + ReanimatedEventDispatcher.sendEvent(event, reactApplicationContext) } else { // In the old architecture, Reanimated subscribes for specific direct events. sendEventForDirectEvent(event) @@ -700,6 +659,7 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?) private const val KEY_PAN_MIN_POINTERS = "minPointers" private const val KEY_PAN_MAX_POINTERS = "maxPointers" private const val KEY_PAN_AVG_TOUCHES = "avgTouches" + private const val KEY_PAN_ACTIVATE_AFTER_LONG_PRESS = "activateAfterLongPress" private const val KEY_NUMBER_OF_POINTERS = "numberOfPointers" private const val KEY_DIRECTION = "direction" diff --git a/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt b/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt index b6f3dbb467..da3098fd03 100644 --- a/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +++ b/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt @@ -51,6 +51,8 @@ class RNGestureHandlerRootView(context: Context?) : ReactViewGroup(context) { var parent = viewGroup.parent while (parent != null) { + // our own deprecated root view + @Suppress("DEPRECATION") if (parent is RNGestureHandlerEnabledRootView || parent is RNGestureHandlerRootView) { return true } diff --git a/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt b/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt index 2e9f670e3f..90aff46941 100644 --- a/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +++ b/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt @@ -1,3 +1,9 @@ +// 1. RCTEventEmitter was deprecated in favor of RCTModernEventEmitter interface +// 2. Event#init() with only viewTag was deprecated in favor of two arg c-tor +// 3. Event#receiveEvent() with 3 args was deprecated in favor of 4 args version +// ref: https://github.com/facebook/react-native/commit/2fbbdbb2ce897e8da3f471b08b93f167d566db1d +@file:Suppress("DEPRECATION") + package com.swmansion.gesturehandler.react import androidx.core.util.Pools diff --git a/android/src/main/jni/Android.mk b/android/src/main/jni/Android.mk index 185709b945..926b3e7b43 100644 --- a/android/src/main/jni/Android.mk +++ b/android/src/main/jni/Android.mk @@ -28,7 +28,7 @@ LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) $(GENERATED_SRC_DIR)/codegen/jni LOCAL_SHARED_LIBRARIES := libjsi \ libfbjni \ libglog \ - libfolly_json \ + libfolly_runtime \ libyoga \ libreact_nativemodule_core \ libturbomodulejsijni \ @@ -36,7 +36,6 @@ LOCAL_SHARED_LIBRARIES := libjsi \ libreact_render_core \ libreact_render_graphics \ libfabricjni \ - libfolly_futures \ libreact_debug \ libreact_render_componentregistry \ libreact_render_debug \ diff --git a/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java b/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java index 4cd163f03b..0214d3db1a 100644 --- a/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +++ b/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java @@ -1,11 +1,11 @@ /** -* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). -* -* Do not edit this file as changes may cause incorrect behavior and will be lost -* once the code is regenerated. -* -* @generated by codegen project: GeneratePropsJavaDelegate.js -*/ + * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). + * + * Do not edit this file as changes may cause incorrect behavior and will be lost + * once the code is regenerated. + * + * @generated by codegen project: GeneratePropsJavaDelegate.js + */ package com.facebook.react.viewmanagers; @@ -23,7 +23,7 @@ public RNGestureHandlerButtonManagerDelegate(U viewManager) { public void setProperty(T view, String propName, @Nullable Object value) { switch (propName) { case "exclusive": - mViewManager.setExclusive(view, value == null ? false : (boolean) value); + mViewManager.setExclusive(view, value == null ? true : (boolean) value); break; case "foreground": mViewManager.setForeground(view, value == null ? false : (boolean) value); @@ -32,7 +32,7 @@ public void setProperty(T view, String propName, @Nullable Object value) { mViewManager.setBorderless(view, value == null ? false : (boolean) value); break; case "enabled": - mViewManager.setEnabled(view, value == null ? false : (boolean) value); + mViewManager.setEnabled(view, value == null ? true : (boolean) value); break; case "rippleColor": mViewManager.setRippleColor(view, ColorPropConverter.getColor(value, view.getContext())); @@ -40,6 +40,9 @@ public void setProperty(T view, String propName, @Nullable Object value) { case "rippleRadius": mViewManager.setRippleRadius(view, value == null ? 0 : ((Double) value).intValue()); break; + case "touchSoundDisabled": + mViewManager.setTouchSoundDisabled(view, value == null ? false : (boolean) value); + break; default: super.setProperty(view, propName, value); } diff --git a/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java b/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java index 5fdd4243d9..1c5aa129f2 100644 --- a/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +++ b/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java @@ -19,4 +19,5 @@ public interface RNGestureHandlerButtonManagerInterface { void setEnabled(T view, boolean value); void setRippleColor(T view, @Nullable Integer value); void setRippleRadius(T view, int value); + void setTouchSoundDisabled(T view, boolean value); } diff --git a/ci/e2e/yarn.lock b/ci/e2e/yarn.lock index 7680a90c4d..262f708023 100644 --- a/ci/e2e/yarn.lock +++ b/ci/e2e/yarn.lock @@ -2299,11 +2299,11 @@ async-limiter@~1.0.0: integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== async@^2.4.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" - integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg== + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== dependencies: - lodash "^4.17.11" + lodash "^4.17.14" asynckit@^0.4.0: version "0.4.0" @@ -2549,29 +2549,29 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -big-integer@^1.6.7: - version "1.6.43" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.43.tgz#8ac15bf13e93e509500859061233e19d8d0d99d1" - integrity sha512-9dULc9jsKmXl0Aeunug8wbF+58n+hQoFjqClN7WeZwGLh0XJUWyJJ9Ee+Ep+Ql/J9fRsTVaeThp8MhiCCrY0Jg== +big-integer@1.6.x: + version "1.6.51" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" + integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== bluebird@^3.5.4: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bplist-creator@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.7.tgz#37df1536092824b87c42f957b01344117372ae45" - integrity sha1-N98VNgkoJLh8QvlXsBNEEXNyrkU= +bplist-creator@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.1.0.tgz#018a2d1b587f769e379ef5519103730f8963ba1e" + integrity sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg== dependencies: - stream-buffers "~2.2.0" + stream-buffers "2.2.x" -bplist-parser@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.1.1.tgz#d60d5dcc20cba6dc7e1f299b35d3e1f95dafbae6" - integrity sha1-1g1dzCDLptx+HymbNdPh+V2vuuY= +bplist-parser@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.3.1.tgz#e1c90b2ca2a9f9474cc72f6862bbf3fee8341fd1" + integrity sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA== dependencies: - big-integer "^1.6.7" + big-integer "1.6.x" brace-expansion@^1.1.7: version "1.1.11" @@ -5384,7 +5384,7 @@ lodash.throttle@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= -lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.15, lodash@^4.17.5, lodash@^4.3.0, lodash@^4.6.1: +lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.5, lodash@^4.3.0, lodash@^4.6.1: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -6205,9 +6205,9 @@ mocha@^6.1.4: yargs-unparser "1.5.0" moment@^2.10.6: - version "2.24.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" - integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== + version "2.29.2" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.2.tgz#00910c60b20843bcba52d37d58c628b47b1f20e4" + integrity sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg== morgan@^1.9.0: version "1.9.1" @@ -6866,10 +6866,10 @@ pkg-up@^2.0.0: dependencies: find-up "^2.1.0" -plist@^3.0.0, plist@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.4.tgz#a62df837e3aed2bb3b735899d510c4f186019cbe" - integrity sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg== +plist@^3.0.0, plist@^3.0.1, plist@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.5.tgz#2cbeb52d10e3cdccccf0c11a63a85d830970a987" + integrity sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA== dependencies: base64-js "^1.5.1" xmlbuilder "^9.0.7" @@ -7758,13 +7758,13 @@ signal-exit@^3.0.3: integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== simple-plist@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.0.0.tgz#bed3085633b22f371e111f45d159a1ccf94b81eb" - integrity sha512-043L2rO80LVF7zfZ+fqhsEkoJFvW8o59rt/l4ctx1TJWoTx7/jkiS1R5TatD15Z1oYnuLJytzE7gcnnBuIPL2g== + version "1.3.1" + resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.3.1.tgz#16e1d8f62c6c9b691b8383127663d834112fb017" + integrity sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw== dependencies: - bplist-creator "0.0.7" - bplist-parser "0.1.1" - plist "^3.0.1" + bplist-creator "0.1.0" + bplist-parser "0.3.1" + plist "^3.0.5" sisteransi@^1.0.0: version "1.0.0" @@ -7962,7 +7962,7 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= -stream-buffers@~2.2.0: +stream-buffers@2.2.x: version "2.2.0" resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" integrity sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ= diff --git a/docs/docs/api/gestures/base-gesture-config.md b/docs/docs/api/gestures/base-gesture-config.md index 7b0c6370a9..0a41dd6ea6 100644 --- a/docs/docs/api/gestures/base-gesture-config.md +++ b/docs/docs/api/gestures/base-gesture-config.md @@ -36,6 +36,11 @@ API. Sets a `testID` property for gesture object, allowing for querying for it in tests. +### `cancelsToucesInView(value)` (**iOS only**) +Accepts a boolean value. +When `true`, the gesture will cancel touches for native UI components (`UIButton`, `UISwitch`, etc) it's attached to when it becomes [`ACTIVE`](../../under-the-hood/states-events.md#active). +Default value is `true`. + ### `runOnJS(value: boolean)` When `react-native-reanimated` is installed, the callbacks passed to the gestures are automatically workletized and run on the UI thread when called. This option allows for changing this behavior: when `true`, all the callbacks will be run on the JS thread instead of the UI thread, regardless of whether they are worklets or not. diff --git a/docs/docs/api/gestures/gesture.md b/docs/docs/api/gestures/gesture.md index a84a48003a..b8131ffc58 100644 --- a/docs/docs/api/gestures/gesture.md +++ b/docs/docs/api/gestures/gesture.md @@ -6,6 +6,20 @@ sidebar_label: Gesture `Gesture` is the object that allows you to create and compose gestures. +:::tip +Consider wrapping your gesture configurations with `useMemo`, as it will reduce the amount of work Gesture Handler has to do under the hood when updating gestures. For example: +```jsx +const gesture = useMemo( + () => + Gesture.Tap().onStart(() => { + console.log('Number of taps:', tapNumber + 1); + setTapNumber((value) => value + 1); + }), + [tapNumber, setTapNumber] +); +``` +::: + ### Gesture.Tap() Creates a new instance of [`TapGesture`](./tap-gesture.md) with its default config and no callbacks. diff --git a/docs/docs/api/gestures/pan-gesture.md b/docs/docs/api/gestures/pan-gesture.md index c8be974e7f..6423e44411 100644 --- a/docs/docs/api/gestures/pan-gesture.md +++ b/docs/docs/api/gestures/pan-gesture.md @@ -50,6 +50,10 @@ A number of fingers that is required to be placed before gesture can [activate]( When the given number of fingers is placed on the screen and gesture hasn't yet [activated](../../under-the-hood/states-events.md#active) it will fail recognizing the gesture. Should be a higher or equal to 0 integer. +### `activateAfterLongPress(duration: number)` + +Duration in milliseconds of the `LongPress` gesture before `Pan` is allowed to [activate](../../under-the-hood/states-events.md#active). If the finger is moved during that period, the gesture will [fail](../../under-the-hood/states-events.md#failed). Should be a higher or equal to 0 integer. Default value is 0, meaning no `LongPress` is required to [activate](../../under-the-hood/states-events.md#active) the `Pan`. + ### `activeOffsetX(value: number | number[])` Range along X axis (in points) where fingers travels without activation of gesture. Moving outside of this range implies activation of gesture. Range can be given as an array or a single number. diff --git a/docs/docs/api/gestures/tap-gesture.md b/docs/docs/api/gestures/tap-gesture.md index b0eb8216ea..6c6c0a0872 100644 --- a/docs/docs/api/gestures/tap-gesture.md +++ b/docs/docs/api/gestures/tap-gesture.md @@ -15,7 +15,7 @@ The fingers involved in these gestures must not move significantly from their in The required number of taps and allowed distance from initial position may be configured. For example, you might configure tap gesture recognizers to detect single taps, double taps, or triple taps. -In order for a gesture to [activate](../../under-the-hood/states-events.md#active), specified gesture requirements such as minPointers, numberOfTaps, maxDist, maxDurationMs, and maxDelayMs (explained below) must be met. Immediately after the gesture [activates](../../under-the-hood/states-events.md#active), it will [end](../../under-the-hood/states-events.md#end). +In order for a gesture to [activate](../../under-the-hood/states-events.md#active), specified gesture requirements such as minPointers, numberOfTaps, maxDist, maxDuration, and maxDelayMs (explained below) must be met. Immediately after the gesture [activates](../../under-the-hood/states-events.md#active), it will [end](../../under-the-hood/states-events.md#end). ## Config @@ -81,13 +81,13 @@ Y coordinate, expressed in points, of the current position of the pointer (finge ```jsx const singleTap = Gesture.Tap() - .maxDurationMs(250) + .maxDuration(250) .onStart(() => { Alert.alert('Single tap!'); }); const doubleTap = Gesture.Tap() - .maxDurationMs(250) + .maxDuration(250) .onStart(() => { Alert.alert('Double tap!'); }); diff --git a/docs/docs/gesture-handlers/api/common-gh.md b/docs/docs/gesture-handlers/api/common-gh.md index cb6147ed3a..450dc7f853 100644 --- a/docs/docs/gesture-handlers/api/common-gh.md +++ b/docs/docs/gesture-handlers/api/common-gh.md @@ -36,6 +36,12 @@ When `true` the handler will [cancel](../basics/state.md#cancelled) or [fail](.. Default value of this property is different depending on the handler type. Most handlers' `shouldCancelWhenOutside` property defaults to `false` except for the [`LongPressGestureHandler`](./longpress-gh.md) and [`TapGestureHandler`](./tap-gh.md) which default to `true`. +### `cancelsTouchesInView` (**iOS only**) + +Accepts a boolean value. +When `true`, the handler will cancel touches for native UI components (`UIButton`, `UISwitch`, etc) it's attached to when it becomes [`ACTIVE`](../basics/state.md#active). +Default value is `true`. + ### `simultaneousHandlers` Accepts a react ref object or an array of refs to other handler components (refs should be created using [`React.createRef()`](https://reactjs.org/docs/refs-and-the-dom.html)). When set, the handler will be allowed to [activate](../basics/state.md#active) even if one or more of the handlers provided by their refs are in an [`ACTIVE`](../basics/state.md#active) state. It will also prevent the provided handlers from [cancelling](../basics/state.md#cancelled) the current handler when they [activate](../basics/state.md#active). Read more in the [cross handler interaction](../basics/interactions.md#simultaneous-recognition) section. diff --git a/docs/docs/gesture-handlers/api/pinch-gh.md b/docs/docs/gesture-handlers/api/pinch-gh.md index aa9eb9adb1..ac8c9b357c 100644 --- a/docs/docs/gesture-handlers/api/pinch-gh.md +++ b/docs/docs/gesture-handlers/api/pinch-gh.md @@ -46,7 +46,7 @@ Position expressed in points along Y axis of center anchor point of gesture ## Example -See the [scale and rotation example](hhttps://github.com/software-mansion/react-native-gesture-handler/blob/main/example/src/recipes/scaleAndRotate/index.tsx) from Gesture Handler Example App. +See the [scale and rotation example](https://github.com/software-mansion/react-native-gesture-handler/blob/main/example/src/recipes/scaleAndRotate/index.tsx) from Gesture Handler Example App. ```js export class PinchableBox extends React.Component { diff --git a/docs/docs/guides/migrating-off-rnghenabledroot.md b/docs/docs/guides/migrating-off-rnghenabledroot.md new file mode 100644 index 0000000000..b72293fa64 --- /dev/null +++ b/docs/docs/guides/migrating-off-rnghenabledroot.md @@ -0,0 +1,45 @@ +--- +id: migrating-off-rnghenabledroot +title: Migrating off RNGHEnabledRootView +--- + +## Update `MainActivity.java` + +Update your `MainActivity.java` file (or wherever you create an instance of `ReactActivityDelegate`), so that it no longer overrides the method responsible for creating `ReactRootView` instance, or modify it so that it no longer uses `RNGestureHandlerEnabledRootView`. Do not forget to remove import for `RNGestureHandlerEnabledRootView`: + +```java +package com.swmansion.gesturehandler.react.example; + +import com.facebook.react.ReactActivity; +- import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView; +public class MainActivity extends ReactActivity { + +- @Override +- protected ReactActivityDelegate createReactActivityDelegate() { +- return new ReactActivityDelegate(this, getMainComponentName()) { +- @Override +- protected ReactRootView createRootView() { +- return new RNGestureHandlerEnabledRootView(MainActivity.this); +- } +- }; +- } +} +``` + +## Check if your app works correctly + +Some libraries (for example React Navigation) already use `GestureHandlerRootView` as a wrapper to enable gesture interactions. In that case you don't have to add one yourself. If gestures in your app work as expected after removing `RNGestureHandlerEnabledRootView` you can skip the next step. + +## Update your JS code + +Instead of using `RNGestureHandlerEnabledRootView` wrap your entry point with `` or `gestureHandlerRootHOC`, for example: + +```jsx +export default function App() { + return {/* content */}; +} +``` + +:::info +Note that `GestureHandlerRootView` acts like a normal `View`. So if you want it to fill the screen, you will need to pass `{ flex: 1 }` like you'll need to do with a normal View. By default, it'll take the size of the content nested inside. +::: \ No newline at end of file diff --git a/docs/docs/guides/upgrading-to-2.md b/docs/docs/guides/upgrading-to-2.md new file mode 100644 index 0000000000..36ff261b6e --- /dev/null +++ b/docs/docs/guides/upgrading-to-2.md @@ -0,0 +1,116 @@ +--- +id: upgrading-to-2 +title: Upgrading to the new API introduced in Gesture Handler 2 +--- + +## Make sure to migrate off the `RNGestureHandlerEnabledRootView` (Android only) + +Gesture Handler 1 required you to override `createRootView` to return an instance of `RNGestureHandlerEnabledRootView`. This class has been the cause of many hard to debug and fix crashed and was deprecated in version 2.0, and subsequently removed in version 2.4. If you are still using it, check out [migrating off RNGHEnabledRootView guide](./migrating-off-rnghenabledroot.md). + +## Upgrading to the new API + +The most important change brought by the Gesture Handler 2 is the new Gesture API, along with the `GestureDetector` component. It makes declaring gesture easier, as it handles much of the work under the hood and reduces the amount of necessary boilerplate code. Instead of a separate component for every type of gesture, the `GestureDetector` component is used to attach gestures to the underlying view based on the configuration object passed to it. The configuration objects are created using the `Gesture` object, here is a simple example: + +```jsx +const tapGesture = Gesture.Tap().onStart(() => { + console.log('Tap!'); +}); +... +return ( + + + +); +``` + +As you can see, there are no `onGestureEvent` and `onHandlerStateChange` callbacks, instead the state machine is handled under the hood and relevant callbacks are called for specific transitions or events: +- `onBegin` - called when the gesture transitions to the `BEGAN` state, which in most cases is when the gesture starts processing the touch stream - when the finger first touches the view +- `onStart` - called when the activation criteria for the gesture are met and it transitions from `BEGAN` to `ACTIVE` state +- `onUpdate` - replaces `onGestureEvent`, called every time the gesture sends a new event while it's in the `ACTIVE` state +- `onChange` - if defined, called just after `onUpdate`, the events passed to it are the same as the ones passed to `onUpdate` but they also contain `change` values which hold the change in value they represent since the last event (i.e. in case of the `Pan` gesture, the event will also contain `changeX` and `changeY` properties) +- `onEnd` - called when the gesture transitions from the `ACTIVE` state to either of `END`, `FAILED` or `CANCELLED` - you can tell whether the gesture finished due to user interaction or because of other reason (like getting cancelled by the system, or failure criteria) using the second value passed to the `onEnd` callback alongside the event +- `onFinalize` called when the gesture transitions into either of `END`, `FAILED` or `CANCELLED` state, if the gesture was `ACTIVE`, `onEnd` will be called first (similarily to `onEnd` you can determine the reason for finishing using the second argument) + +The difference between `onEnd` and `onFinalize` is that the `onEnd` will be called only if the gesture was `ACTIVE`, while `onFinalize` will be called if the gesture has `BEGAN`. This means that you can use `onEnd` to clean up after `onStart`, and `onFinalize` to clean up after `onBegin` (or both `onBegin` and `onStart`). + +### Configuring the gestures + +The new gesture objects are configured in the builder-like pattern. Instead of properties, each gesture provides methods that allow for its customization. In most cases the names of the methods are the same as the relevant props, ot at least very similar. For example: + +```jsx +return ( + { + if (nativeEvent.state === State.ACTIVE) { + console.log('Tap!'); + } + }}> + + +); +``` + +Would have the same effect as: + +```jsx +const tapGesture = Gesture.Tap() + .numberOfTaps(2) + .maxDuration(500) + .maxDelay(500) + .maxDistance(10) + .onStart(() => { + console.log('Tap!'); + }); + +return ( + + + +); +``` + +You can check the modifiers available to specific gestures in the API Reference under Gestures. + +### Using multiple gestures on the same view + +Using the gesture handler components, if you wanted to have multiple gestures on one view, you would have to stack them on top of each other and, in case you wanted to use animations, add an `Animated.View` after each handler, resulting in a deep component tree, for example: + +```jsx +return ( + + + + + + + + + + + +); +``` + +With the `GestureDetector` you can use the [Gesture Composition API](../gesture-composition.md) to stack the gestures onto one view: + +```jsx +const tapGesture = Gesture.Tap(); +const panGesture = Gesture.Pan(); +const pinchGesture = Gesture.Pinch(); + +return ( + + + +); +``` + +Similarily, you can use [`Gesture.Simultaneous`](../gesture-composition.md#simultaneous) to replace stacked gesture handlers that should be able to recognize gestures simultaneously, and [`Gesture.Exclusive`](../gesture-composition.md#exclusive) to replace stacked gesture handlers that require failure of others. + +### Replacing `waitFor` and `simultaneousHandlers` + +If you want to make relations between the gestures attached to the same view, you should use the [Gesture Composition API](../gesture-composition.md) described above. However, if you want to make a relation between gestures attached to different views, or between gesture and an old gesture handler, you should use `simultaneousWithExternalGesture` instead of `simultaneousHandlers`, and `requireExternalGestureToFail` instead of `waitFor`. In case you need a ref object to pass to an old gesture handler, you can set it to the gesture using `.withRef(refObject)` modifier. \ No newline at end of file diff --git a/docs/docs/installation.md b/docs/docs/installation.md index 0a428eb2c4..b56ff60575 100644 --- a/docs/docs/installation.md +++ b/docs/docs/installation.md @@ -80,6 +80,37 @@ Install pods using `RCT_NEW_ARCH_ENABLED=1 pod install` – this is the same com #### on Android: There are no additional steps required so long as your app is configured to build with Fabric – this is typically configured by setting `newArchEnabled=true` in `gradle.properties` file in your project. +### With [wix/react-native-navigation](https://github.com/wix/react-native-navigation) + +If you are using a native navigation library like [wix/react-native-navigation](https://github.com/wix/react-native-navigation) you need to make sure that every screen is wrapped with `GestureHandlerRootView` (you can do this using `gestureHandlerRootHOC` function). This can be done for example at the stage when you register your screens. Here's an example: + +```js +import { gestureHandlerRootHOC } from 'react-native-gesture-handler'; +import { Navigation } from 'react-native-navigation'; +import FirstTabScreen from './FirstTabScreen'; +import SecondTabScreen from './SecondTabScreen'; +import PushedScreen from './PushedScreen'; +// register all screens of the app (including internal ones) +export function registerScreens() { + Navigation.registerComponent('example.FirstTabScreen', + () => gestureHandlerRootHOC(FirstTabScreen), + () => FirstTabScreen + ); + Navigation.registerComponent('example.SecondTabScreen', + () => gestureHandlerRootHOC(SecondTabScreen), + () => SecondTabScreen + ); + Navigation.registerComponent('example.PushedScreen', + () => gestureHandlerRootHOC(PushedScreen), + () => PushedScreen + ); +} +``` + +You can check out [this example project](https://github.com/henrikra/nativeNavigationGestureHandler) to see this kind of set up in action. + +Remember that you need to wrap each screen that you use in your app with `GestureHandlerRootView` (you can do this using `gestureHandlerRootHOC` function) as with native navigation libraries each screen maps to a separate root view. It will not be enough to wrap the main screen only. + ## Android ### Usage with modals on Android diff --git a/docs/sidebars.js b/docs/sidebars.js index 915923bd9b..68a5fb307f 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -14,6 +14,8 @@ module.exports = { 'gesture-handlers/basics/about-handlers', 'gesture-handlers/basics/interactions', 'guides/testing', + 'guides/migrating-off-rnghenabledroot', + 'guides/upgrading-to-2', ], }, { diff --git a/docs/versioned_docs/version-2.4.0/api/components/buttons.mdx b/docs/versioned_docs/version-2.4.0/api/components/buttons.mdx new file mode 100644 index 0000000000..6cfa2b4d86 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/api/components/buttons.mdx @@ -0,0 +1,170 @@ +--- +id: buttons +title: Buttons +sidebar_label: Buttons +--- + +import useBaseUrl from '@docusaurus/useBaseUrl'; +import GifGallery from '@site/components/GifGallery'; + + + + + +Gesture handler library provides native components that can act as buttons. These can be treated as a replacement to `TouchableHighlight` or `TouchableOpacity` from RN core. Gesture handler's buttons recognize touches in native which makes the recognition process deterministic, allows for rendering ripples on Android in highly performant way (`TouchableNativeFeedback` requires that touch event does a roundtrip to JS before we can update ripple effect, which makes ripples lag a bit on older phones), and provides native and platform default interaction for buttons that are placed in a scrollable container (in which case the interaction is slightly delayed to prevent button from highlighting when you fling). + +Currently Gesture handler library exposes three components that render native touchable elements under the hood: + +- `BaseButton` +- `RectButton` +- `BorderlessButton` + +On top of that all the buttons are wrapped with `NativeViewGestureHandler` and therefore allow for all the [common gesture handler properties](#common-gesturehandler-properties) and `NativeViewGestureHandler`'s [extra properties](#nativeviewgesturehandler-extra-properties) to be applied to them. + +**IMPORTANT**: In order to make buttons accessible, you have to wrap your children in a `View` with `accessible` and `accessibilityRole="button"` props. +Example: + +```javascript +// Not accessible: +const NotAccessibleButton = () => ( + + Foo + +); +// Accessible: +const AccessibleButton = () => ( + + + Bar + + +); +``` + +It is applicable for both iOS and Android platform. On iOS, you won't be able to even select the button, on Android you won't be able to click it in accessibility mode. + +## `BaseButton` + +Can be used as a base class if you'd like to implement some custom interaction for when the button is pressed. + +Below is a list of properties specific to `BaseButton` component: + +### `onActiveStateChange` + +function that gets triggered when button changes from inactive to active and vice versa. It passes active state as a boolean variable as a first parameter for that method. + +### `onPress` + +function that gets triggered when the button gets pressed (analogous to `onPress` in `TouchableHighlight` from RN core). + +### `rippleColor` (**Android only**) + +defines color of native [ripple](https://developer.android.com/reference/android/graphics/drawable/RippleDrawable) animation used since API level 21. + +### `exclusive` + +defines if more than one button could be pressed simultaneously. By default set `true`. + +## `RectButton` + +This type of button component should be used when you deal with rectangular elements or blocks of content that can be pressed, for example table rows or buttons with text and icons. This component provides a platform specific interaction, rendering a rectangular ripple on Android or highlighting the background on iOS and on older versions of Android. In addition to the props of [`BaseButton`](#basebutton-component), it accepts the following: + +Below is a list of properties specific to `RectButton` component: + +### `underlayColor` + +this is the background color that will be dimmed when button is in active state. + +### `activeOpacity` (**iOS only**) + +opacity applied to the underlay when button is in active state. + +## `BorderlessButton` + +This type of button component should be used with simple icon-only or text-only buttons. The interaction will be different depending on platform: on Android a borderless ripple will be rendered (it means that the ripple will animate into a circle that can span outside of the view bounds), whereas on iOS the button will be dimmed (similar to how `TouchableOpacity` works). In addition to the props of [`BaseButton`](#basebutton-component), it accepts the following: + +Below is a list of properties specific to `BorderlessButton` component: + +### `borderless` (**Android only**) + +set this to `false` if you want the ripple animation to render only within view bounds. + +### `activeOpacity` (**iOS only**) + +opacity applied to the button when it is in an active state. + +## Design patterns + +Components listed here were not designed to behave and look in the same way on both platforms but rather to be used for handling similar behaviour on iOS and Android taking into consideration their's design concepts. + +If you wish to get specific information about platforms design patterns, visit [official Apple docs](https://developer.apple.com/design/human-interface-guidelines/ios/controls) and [Material.io guideline](https://material.io/design/components/buttons.html#text-button), which widely describe how to implement coherent design. + +This library allows to use native components with native feedback in adequate situations. + +If you do not wish to implement custom design approach, `RectButton` and `BorderlessButton` seem to be absolutely enough and there's no need to use anything else. In all the remaining cases you can always rely on `BaseButton` which is a superclass for the other button classes and can be used as a generic `Touchable` replacement that can be customized to your needs. + +Below we list some of the common usecases for button components to be used along with the type of button that should be used according to the platform specific design guidelines. + +### Lists and action buttons + +If you have a list with clickable items or have an action button that need to display as a separate UI block (vs being inlined in a text) you should use `RectButton`. It changes opacity on click and additionally supports a ripple effect on Android. + + + + + + +To determine emphasis of button it's vital to use fill color or leave it transparent especially on Android. +For medium emphasis you may consider outlined buttons which are used for lower impact than fill buttons. + + + + + +### Icon or text only buttons + +Use `BorderlessButton` for simple icon-only or text-only buttons. The interaction will be different depending on platform: on Android a borderless ripple will be rendered, whereas on iOS the button will be dimmed. +It should be used if you wish to handle non-crucial actions and supportive behaviour. + + + + + + +### `PureNativeButton` + +Use a `PureNativeButton` for accessing the native Component used for build more complex buttons listed above. +It's normally is not recommended to use, but it might be useful if we want to wrap it using Animated or Reanimated. + +```javascript +import { + createNativeWrapper, + PureNativeButton, +} from 'react-native-gesture-handler'; +import Animated from 'react-native-reanimated'; +const { event, Value, createAnimatedComponent } = Animated; + +const AnimatedRawButton = createNativeWrapper( + createAnimatedComponent(PureNativeButton), + { + shouldCancelWhenOutside: false, + shouldActivateOnStart: false, + } +); + +export default class App extends React.Component { + constructor(props) { + super(props); + const state = new Value(); + this._onGestureEvent = event([ + { + nativeEvent: { state }, + }, + ]); + } + + render() { + return ; + } +} +``` diff --git a/docs/versioned_docs/version-2.4.0/api/components/drawer-layout.mdx b/docs/versioned_docs/version-2.4.0/api/components/drawer-layout.mdx new file mode 100644 index 0000000000..0f6fce24d6 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/api/components/drawer-layout.mdx @@ -0,0 +1,147 @@ +--- +id: drawer-layout +title: Drawer Layout +sidebar_label: DrawerLayout +--- + +import useBaseUrl from '@docusaurus/useBaseUrl'; +import GifGallery from '@site/components/GifGallery'; + +This is a cross-platform replacement for React Native's [DrawerLayoutAndroid](http://facebook.github.io/react-native/docs/drawerlayoutandroid.html) component. It provides a compatible API but allows for the component to be used on both Android and iOS. Please refer to [React Native docs](http://facebook.github.io/react-native/docs/drawerlayoutandroid.html) for the detailed usage for standard parameters. + +## Usage: + +`DrawerLayout` component isn't exported by default from the `react-native-gesture-handler` package. To use it, import it in the following way: + +```js +import DrawerLayout from 'react-native-gesture-handler/DrawerLayout'; +``` + +## Properties: + +On top of the standard list of parameters DrawerLayout has an additional set of attributes to customize its behavior. Please refer to the list below: + +### `drawerType` + +possible values are: `front`, `back` or `slide` (default is `front`). It specifies the way the drawer will be displayed. When set to `front` the drawer will slide in and out along with the gesture and will display on top of the content view. When `back` is used the drawer displays behind the content view and can be revealed with gesture of pulling the content view to the side. Finally `slide` option makes the drawer appear like it is attached to the side of the content view; when you pull both content view and drawer will follow the gesture. + +Type `slide`: + + + + + +Type `front`: + + + + + +Type `back`: + + + + + +### `edgeWidth` + +number, allows for defining how far from the edge of the content view the gesture should activate. + +### `hideStatusBar` + +boolean, when set to `true` Drawer component will use [StatusBar](http://facebook.github.io/react-native/docs/statusbar.html) API to hide the OS status bar whenever the drawer is pulled or when its in an "open" state. + +### `statusBarAnimation` + +possible values are: `slide`, `none` or `fade` (defaults to `slide`). Can be used when `hideStatusBar` is set to `true` and will select the animation used for hiding/showing the status bar. See [StatusBar](http://facebook.github.io/react-native/docs/statusbar.html#statusbaranimation) documentation for more details. + +### `overlayColor` + +color (default to `"black"`) of a semi-transparent overlay to be displayed on top of the content view when drawer gets open. A solid color should be used as the opacity is added by the Drawer itself and the opacity of the overlay is animated (from 0% to 70%). + +### `renderNavigationView` + +function. This attribute is present in the standard implementation already and is one of the required params. Gesture handler version of DrawerLayout make it possible for the function passed as `renderNavigationView` to take an Animated value as a parameter that indicates the progress of drawer opening/closing animation (progress value is 0 when closed and 1 when opened). This can be used by the drawer component to animated its children while the drawer is opening or closing. + +### `onDrawerClose` + +function. This function is called when the drawer is closed. + +### `onDrawerOpen` + +function. This function is called when the drawer is opened. + +### `onDrawerSlide` + +function. This function is called as a drawer sliding open from touch events. The progress of the drawer opening/closing is passed back as 0 when closed and 1 when opened. + +### `onDrawerStateChanged` + +function. This function is called when the status of the drawer changes. Possible values that can be passed back are: 'Idle', 'Dragging', and 'Settling'. + +### `enableTrackpadTwoFingerGesture` (iOS only) + +Enables two-finger gestures on supported devices, for example iPads with trackpads. If not enabled the gesture will require click + drag, with enableTrackpadTwoFingerGesture swiping with two fingers will also trigger the gesture. + +### `children` + +component or function. Children is a component which is rendered by default and is wrapped by drawer. However, it could be also a render function which takes an Animated value as a parameter that indicates the progress of drawer opening/closing animation (progress value is 0 when closed and 1 when opened) is the same way like `renderNavigationView` prop. + +## Methods + +### `openDrawer(options)` + +`openDrawer` can take an optional `options` parameter which is an object, enabling further customization of the open animation. + +`options` has two optional properties: + +`velocity`: number, the initial velocity of the object attached to the spring. Default 0 (object is at rest). +`speed`: number, controls speed of the animation. Default 12. + +### `closeDrawer(options)` + +`closeDrawer` can take an optional `options` parameter which is an object, enabling further customization of the close animation. + +`options` has two optional properties: + +`velocity`: number, the initial velocity of the object attached to the spring. Default 0 (object is at rest). +`speed`: number, controls speed of the animation. Default 12. + +## Example: + +See the [drawer example](https://github.com/software-mansion/react-native-gesture-handler/blob/main/examples/Example/src/horizontalDrawer/index.tsx) from GestureHandler Example App or view it directly on your phone by visiting [our expo demo](https://snack.expo.io/@adamgrzybowski/react-native-gesture-handler-demo). + +```js +class Drawerable extends Component { + handleDrawerSlide = (status) => { + // outputs a value between 0 and 1 + console.log(status); + }; + + renderDrawer = () => { + return ( + + I am in the drawer! + + ); + }; + + render() { + return ( + + + + Hello, it's me + + + + ); + } +} +``` diff --git a/docs/versioned_docs/version-2.4.0/api/components/swipeable.md b/docs/versioned_docs/version-2.4.0/api/components/swipeable.md new file mode 100644 index 0000000000..18fb7dfe78 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/api/components/swipeable.md @@ -0,0 +1,190 @@ +--- +id: swipeable +title: Swipeable +sidebar_label: Swipeable +--- + +import useBaseUrl from '@docusaurus/useBaseUrl'; +import GifGallery from '@site/components/GifGallery' + + + + + +This component allows for implementing swipeable rows or similar interaction. It renders its children within a panable container allows for horizontal swiping left and right. While swiping one of two "action" containers can be shown depends on whether user swipes left or right (containers can be rendered by `renderLeftActions` or `renderRightActions` props). + +### Usage: + +Similarly to the `DrawerLayout`, `Swipeable` component isn't exported by default from the `react-native-gesture-handler` package. To use it, import it in the following way: + +```js +import Swipeable from 'react-native-gesture-handler/Swipeable'; +``` + +## Properties + +### `friction` + +a number that specifies how much the visual interaction will be delayed compared to the gesture distance. e.g. value of 1 will indicate that the swipeable panel should exactly follow the gesture, 2 means it is going to be two times "slower". + +### `leftThreshold` + +distance from the left edge at which released panel will animate to the open state (or the open panel will animate into the closed state). By default it's a half of the panel's width. + +### `rightThreshold` + +distance from the right edge at which released panel will animate to the open state (or the open panel will animate into the closed state). By default it's a half of the panel's width. + +### `overshootLeft` + +a boolean value indicating if the swipeable panel can be pulled further than the left actions panel's width. It is set to `true` by default as long as the left panel render method is present. + +### `overshootRight` + +a boolean value indicating if the swipeable panel can be pulled further than the right actions panel's width. It is set to `true` by default as long as the right panel render method is present. + +### `overshootFriction` + +a number that specifies how much the visual interaction will be delayed compared to the gesture distance at overshoot. Default value is 1, it mean no friction, for a native feel, try 8 or above. + +### `onSwipeableLeftOpen` + +:::caution +This callback is deprecated and will be removed in the next version. Please use `onSwipeableOpen(direction)` +::: + +method that is called when left action panel gets open. + +### `onSwipeableRightOpen` + +:::caution +This callback is deprecated and will be removed in the next version. Please use `onSwipeableOpen(direction)` +::: + +method that is called when right action panel gets open. + +### `onSwipeableOpen` + +method that is called when action panel gets open (either right or left). Takes swipe direction as +an argument. + +### `onSwipeableClose` + +method that is called when action panel is closed. Takes swipe direction as +an argument. + +### `onSwipeableLeftWillOpen` + +:::caution +This callback is deprecated and will be removed in the next version. Please use `onSwipeableWillOpen(direction)` +::: + +method that is called when left action panel starts animating on open. + +### `onSwipeableRightWillOpen` + +:::caution +This callback is deprecated and will be removed in the next version. Please use `onSwipeableWillOpen(direction)` +::: + +method that is called when right action panel starts animating on open. + +### `onSwipeableWillOpen` + +method that is called when action panel starts animating on open (either right or left). Takes swipe direction as +an argument. + +### `onSwipeableWillClose` + +method that is called when action panel starts animating on close. Takes swipe direction as +an argument. + +### `renderLeftActions` + +method that is expected to return an action panel that is going to be revealed from the left side when user swipes right. +This map describes the values to use as inputRange for extra interpolation: +AnimatedValue: [startValue, endValue] + +progressAnimatedValue: [0, 1] +dragAnimatedValue: [0, +] + +To support `rtl` flexbox layouts use `flexDirection` styling. + +### `renderRightActions` + +method that is expected to return an action panel that is going to be revealed from the right side when user swipes left. +This map describes the values to use as inputRange for extra interpolation: +AnimatedValue: [startValue, endValue] + +progressAnimatedValue: [0, 1] +dragAnimatedValue: [0, -] + +To support `rtl` flexbox layouts use `flexDirection` styling. + +### `containerStyle` + +style object for the container (Animated.View), for example to override `overflow: 'hidden'`. + +### `childrenContainerStyle` + +style object for the children container (Animated.View), for example to apply `flex: 1`. + +### `enableTrackpadTwoFingerGesture` (iOS only) + +Enables two-finger gestures on supported devices, for example iPads with trackpads. If not enabled the gesture will require click + drag, with enableTrackpadTwoFingerGesture swiping with two fingers will also trigger the gesture. + +## Methods + +Using reference to `Swipeable` it's possible to trigger some actions on it + +### `close` + +method that closes component. + +### `openLeft` + +method that opens component on left side. + +### `openRight` + +method that opens component on right side. + +### Example: + +See the [swipeable example](https://github.com/software-mansion/react-native-gesture-handler/blob/main/example/src/showcase/swipeable/index.tsx) from GestureHandler Example App or view it directly on your phone by visiting [our expo demo](https://snack.expo.io/@adamgrzybowski/react-native-gesture-handler-demo). + +```js +import React, { Component } from 'react'; +import { Animated, StyleSheet, View } from 'react-native'; +import { RectButton } from 'react-native-gesture-handler'; +import Swipeable from 'react-native-gesture-handler/Swipeable'; + +class AppleStyleSwipeableRow extends Component { + renderLeftActions = (progress, dragX) => { + const trans = dragX.interpolate({ + inputRange: [0, 50, 100, 101], + outputRange: [-20, 0, 0, 1], + }); + return ( + + + Archive + + + ); + }; + render() { + return ( + + "hello" + + ); + } +} +``` diff --git a/docs/versioned_docs/version-2.4.0/api/components/touchables.md b/docs/versioned_docs/version-2.4.0/api/components/touchables.md new file mode 100644 index 0000000000..4b45292f72 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/api/components/touchables.md @@ -0,0 +1,52 @@ +--- +id: touchables +title: Touchables +sidebar_label: Touchables +--- + +Gesture Handler library provides an implementation of RN's touchable components that are based on [native buttons](buttons.mdx) and does not rely on JS responder system utilized by RN. Our touchable implementation follows the same API and aims to be a drop-in replacement for touchables available in React Native. + +React Native's touchables API can be found here: + +- [Touchable Native Feedback](https://facebook.github.io/react-native/docs/touchablenativefeedback) +- [Touchable Highlight](https://facebook.github.io/react-native/docs/touchablehighlight) +- [Touchable Opacity](https://facebook.github.io/react-native/docs/touchableopacity) +- [Touchable Without Feedback](https://facebook.github.io/react-native/docs/touchablewithoutfeedback) + +All major touchable properties (except from `pressRetentionOffset`) have been adopted and should behave in a similar way as with RN's touchables. + +The motivation for using RNGH touchables as a replacement for these imported from React Native is to follow built-in native behavior more closely by utilizing platform native touch system instead of relying on the JS responder system. +These touchables and their feedback behavior are deeply integrated with native +gesture ecosystem and could be connected with other native components (e.g. `ScrollView`) and Gesture Handlers easily and in a more predictable way, which +follows native apps' behavior. + +Our intention was to make switch for these touchables as simple as possible. In order to use RNGH's touchables the only thing you need to do is to change library from which you import touchable components. +need only to change imports of touchables. + +:::info +Gesture Handler's TouchableOpacity uses native driver for animations by default. If this causes problems for you, you can set `useNativeAnimations` prop to false. +::: + +### Example: + +```javascript +import { + TouchableNativeFeedback, + TouchableHighlight, + TouchableOpacity, + TouchableWithoutFeedback, +} from 'react-native'; +``` + +has to be replaced with: + +```javascript +import { + TouchableNativeFeedback, + TouchableHighlight, + TouchableOpacity, + TouchableWithoutFeedback, +} from 'react-native-gesture-handler'; +``` + +For a comparison of both touchable implementations see our [touchables example](https://github.com/software-mansion/react-native-gesture-handler/blob/main/example/src/release_tests/touchables/index.tsx) diff --git a/docs/versioned_docs/version-2.4.0/api/gestures/base-continous-gesture-callbacks.md b/docs/versioned_docs/version-2.4.0/api/gestures/base-continous-gesture-callbacks.md new file mode 100644 index 0000000000..5504b2db8d --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/api/gestures/base-continous-gesture-callbacks.md @@ -0,0 +1,9 @@ +### Callbacks common to all continous gestures: + +### `onUpdate(callback)` + +Set the callback that is being called every time the gesture receives an update while it's active. + +### `onChange(callback)` + +Set the callback that is being called every time the gesture receives an update while it's active. This callback will receive information about change in value in relation to the last received event. diff --git a/docs/versioned_docs/version-2.4.0/api/gestures/base-continous-gesture-config.md b/docs/versioned_docs/version-2.4.0/api/gestures/base-continous-gesture-config.md new file mode 100644 index 0000000000..a19473784e --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/api/gestures/base-continous-gesture-config.md @@ -0,0 +1,5 @@ +### Properties common to all continous gestures: + +### `manualActivation(value: boolead)` + +When `true` the handler will not activate by itself even if its activation criteria are met. Instead you can manipulate its state using [state manager](./state-manager.md). diff --git a/docs/versioned_docs/version-2.4.0/api/gestures/base-gesture-callbacks.md b/docs/versioned_docs/version-2.4.0/api/gestures/base-gesture-callbacks.md new file mode 100644 index 0000000000..dff985b307 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/api/gestures/base-gesture-callbacks.md @@ -0,0 +1,33 @@ +### Callbacks common to all gestures: + +### `onBegin(callback)` + +Set the callback that is being called when given gesture handler starts receiving touches. At the moment of this callback the handler is not yet in an active state and we don't know yet if it will recognize the gesture at all. + +### `onStart(callback)` + +Set the callback that is being called when the gesture is recognized by the handler and it transitions to the active state. + +### `onEnd(callback)` + +Set the callback that is being called when the gesture that was recognized by the handler finishes. It will be called only if the handler was previously in the active state. + +### `onFinalize(callback)` + +Set the callback that is being called when the handler finalizes handling gesture - the gesture was recognized and has finished or it failed to recognize. + +### `onTouchesDown(callback)` + +Set the `onTouchesDown` callback which is called every time a finger is placed on the screen. + +### `onTouchesMove(callback)` + +Set the `onTouchesMove` callback which is called every time a finger is moved on the screen. + +### `onTouchesUp(callback)` + +Set the `onTouchesUp` callback which is called every time a finger is lifted from the screen. + +### `onTouchesCancelled(callback)` + +Set the `onTouchesCancelled` callback which is called every time a finger stops being tracked, for example when the gesture finishes. diff --git a/docs/versioned_docs/version-2.4.0/api/gestures/base-gesture-config.md b/docs/versioned_docs/version-2.4.0/api/gestures/base-gesture-config.md new file mode 100644 index 0000000000..0a41dd6ea6 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/api/gestures/base-gesture-config.md @@ -0,0 +1,59 @@ +### Properties common to all gestures: + +### `enabled(value: boolean)` + +Indicates whether the given handler should be analyzing stream of touch events or not. +When set to `false` we can be sure that the handler's state will **never** become [`ACTIVE`](../../under-the-hood/states-events.md#active). +If the value gets updated while the handler already started recognizing a gesture, then the handler's state it will immediately change to [`FAILED`](../../under-the-hood/states-events.md#failed) or [`CANCELLED`](../../under-the-hood/states-events.md#cancelled) (depending on its current state). +Default value is `true`. + +### `shouldCancelWhenOutside(value: boolean)` + +When `true` the handler will [cancel](../../under-the-hood/states-events.md#cancelled) or [fail](../../under-the-hood/states-events.md#failed) recognition (depending on its current state) whenever the finger leaves the area of the connected view. +Default value of this property is different depending on the handler type. +Most handlers' `shouldCancelWhenOutside` property defaults to `false` except for the [`LongPressGesture`](./long-press-gesture.md) and [`TapGesture`](./tap-gesture.md) which default to `true`. + +### `hitSlop(settings)` + +This parameter enables control over what part of the connected view area can be used to [begin](../../under-the-hood/states-events.md#began) recognizing the gesture. +When a negative number is provided the bounds of the view will reduce the area by the given number of points in each of the sides evenly. + +Instead you can pass an object to specify how each boundary side should be reduced by providing different number of points for `left`, `right`, `top` or `bottom` sides. +You can alternatively provide `horizontal` or `vertical` instead of specifying directly `left`, `right` or `top` and `bottom`. +Finally, the object can also take `width` and `height` attributes. +When `width` is set it is only allow to specify one of the sides `right` or `left`. +Similarly when `height` is provided only `top` or `bottom` can be set. +Specifying `width` or `height` is useful if we only want the gesture to activate on the edge of the view. In which case for example we can set `left: 0` and `width: 20` which would make it possible for the gesture to be recognize when started no more than 20 points from the left edge. + +**IMPORTANT:** Note that this parameter is primarily designed to reduce the area where gesture can activate. Hence it is only supported for all the values (except `width` and `height`) to be non positive (0 or lower). Although on Android it is supported for the values to also be positive and therefore allow to expand beyond view bounds but not further than the parent view bounds. To achieve this effect on both platforms you can use React Native's View [hitSlop](https://facebook.github.io/react-native/docs/view.html#props) property. + +### `withRef(ref)` + +Sets a ref to the gesture object, allowing for interoperability with the old +API. + +### `withTestId(testID)` + +Sets a `testID` property for gesture object, allowing for querying for it in tests. + +### `cancelsToucesInView(value)` (**iOS only**) +Accepts a boolean value. +When `true`, the gesture will cancel touches for native UI components (`UIButton`, `UISwitch`, etc) it's attached to when it becomes [`ACTIVE`](../../under-the-hood/states-events.md#active). +Default value is `true`. + +### `runOnJS(value: boolean)` + +When `react-native-reanimated` is installed, the callbacks passed to the gestures are automatically workletized and run on the UI thread when called. This option allows for changing this behavior: when `true`, all the callbacks will be run on the JS thread instead of the UI thread, regardless of whether they are worklets or not. +Defaults to `false`. + +### `simultaneousWithExternalGesture(otherGesture1, otherGesture2, ...)` + +Adds a gesture that should be recognized simultaneously with this one. + +**IMPORTANT:** Note that this method only marks the relation between gestures, without [composing them](../../gesture-composition). [`GestureDetector`](gesture-detector) will not recognize the `otherGestures` and it needs to be added to another detector in order to be recognized. + +### `requireExternalGestureToFail(otherGesture1, otherGesture2, ...)` + +Adds a relation requiring another gesture to fail, before this one can activate. + +**IMPORTANT:** Note that this method only marks the relation between gestures, without [composing them](../../gesture-composition).[`GestureDetector`](gesture-detector) will not recognize the `otherGestures` and it needs to be added to another detector in order to be recognized. diff --git a/docs/versioned_docs/version-2.4.0/api/gestures/base-gesture-event-data.md b/docs/versioned_docs/version-2.4.0/api/gestures/base-gesture-event-data.md new file mode 100644 index 0000000000..4d9056b1e5 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/api/gestures/base-gesture-event-data.md @@ -0,0 +1,9 @@ +### Event attributes common to all gestures: + +### `state` + +Current [state](.../../under-the-hood/states-events.md) of the handler. Expressed as one of the constants exported under `State` object by the library. + +### `numberOfPointers` + +Represents the number of pointers (fingers) currently placed on the screen. diff --git a/docs/versioned_docs/version-2.4.0/api/gestures/composed-gestures.md b/docs/versioned_docs/version-2.4.0/api/gestures/composed-gestures.md new file mode 100644 index 0000000000..84e2e451bd --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/api/gestures/composed-gestures.md @@ -0,0 +1,7 @@ +--- +id: composed-gestures +title: Composed gestures +sidebar_label: Composed gestures +--- + +Composed gestures (`Race`, `Simultaneous`, `Exclusive`) provide a simple way of building relations between gestures. diff --git a/docs/versioned_docs/version-2.4.0/api/gestures/fling-gesture.md b/docs/versioned_docs/version-2.4.0/api/gestures/fling-gesture.md new file mode 100644 index 0000000000..09c2846276 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/api/gestures/fling-gesture.md @@ -0,0 +1,86 @@ +--- +id: fling-gesture +title: Fling gesture +sidebar_label: Fling gesture +--- + +import BaseEventData from './base-gesture-event-data.md'; +import BaseEventConfig from './base-gesture-config.md'; +import BaseEventCallbacks from './base-gesture-callbacks.md'; + +A discrete gesture that activates when the movement is sufficiently long and fast. +Gesture gets [ACTIVE](../../under-the-hood/states-events.md#active) when movement is sufficiently long and it does not take too much time. +When gesture gets activated it will turn into [END](../../under-the-hood/states-events.md#end) state when finger is released. +The gesture will fail to recognize if the finger is lifted before being activated. + +## Config + +### Properties specific to `FlingGesture`: + +### `direction(value: Directions)` + +Expressed allowed direction of movement. Expected values are exported as constants in the `Directions` object. It's possible to pass one or many directions in one parameter: + +```js +fling.direction(Directions.RIGHT | Directions.LEFT); +``` + +or + +```js +fling.direction(Directions.DOWN); +``` + +### `numberOfPointers(value: number)` + +Determine exact number of points required to handle the fling gesture. + + + +## Callbacks + + + +## Event data + +### Event attributes specific to `FlingGesture`: + +### `x` + +X coordinate of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the view attached to the [`GestureDetector`](./gesture-detector.md). Expressed in point units. + +### `y` + +Y coordinate of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the view attached to the [`GestureDetector`](./gesture-detector.md). Expressed in point units. + +### `absoluteX` + +X coordinate of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the window. The value is expressed in point units. It is recommended to use it instead of [`x`](#x) in cases when the original view can be transformed as an effect of the gesture. + +### `absoluteY` + +Y coordinate of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the window. The value is expressed in point units. It is recommended to use it instead of [`y`](#y) in cases when the original view can be transformed as an effect of the gesture. + + + +## Example + +```jsx +const position = useSharedValue(0); + +const flingGesture = Gesture.Fling() + .direction(Directions.RIGHT) + .onStart((e) => { + position.value = withTiming(position.value + 10, { duration: 100 }); + }); + +const animatedStyle = useAnimatedStyle(() => ({ + transform: [{ translateX: position.value }], +})); + +return ( + + + +); +``` diff --git a/docs/versioned_docs/version-2.4.0/api/gestures/force-touch-gesture.md b/docs/versioned_docs/version-2.4.0/api/gestures/force-touch-gesture.md new file mode 100644 index 0000000000..8280f944b1 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/api/gestures/force-touch-gesture.md @@ -0,0 +1,54 @@ +--- +id: force-touch-gesture +title: Force touch gesture (iOS only) +sidebar_label: Force touch gesture +--- + +import BaseEventData from './base-gesture-event-data.md'; +import BaseEventConfig from './base-gesture-config.md'; +import BaseContinousEventConfig from './base-continous-gesture-config.md'; +import BaseEventCallbacks from './base-gesture-callbacks.md'; +import BaseContinousEventCallbacks from './base-continous-gesture-callbacks.md'; + +A continuous gesture that recognizes force of a touch. It allows for tracking pressure of touch on some iOS devices. +The gesture [activates](../../under-the-hood/states-events.md#active) when pressure of touch if greater or equal than `minForce`. It fails if pressure is greater than `maxForce` +Gesture callback can be used for continuous tracking of the touch pressure. It provides information for one finger (the first one). + +At the beginning of the gesture, the pressure factor is 0.0. As the pressure increases, the pressure factor increases proportionally. The maximum pressure is 1.0. + +There's no implementation provided on Android and it simply renders children without any wrappers. +Since this behaviour is only provided on some iOS devices, this gesture should not be used for defining any crucial behaviors. Use it only as an additional improvement and make all features to be accessed without this gesture as well. + +## Config + +### Properties specific to `ForceTouchGesture`: + +### `minForce(value: number)` + +A minimal pressure that is required before gesture can [activate](../../under-the-hood/states-events.md#active). Should be a value from range `[0.0, 1.0]`. Default is `0.2`. + +### `maxForce(value: number)` + +A maximal pressure that could be applied for gesture. If the pressure is greater, gesture [fails](../../under-the-hood/states-events.md#failed). Should be a value from range `[0.0, 1.0]`. + +### `feedbackOnActivation(value: boolean)` + +Value defining if haptic feedback has to be performed on activation. + + + + +## Callbacks + + + + +## Event data + +### Event attributes specific to `ForceTouchGesture`: + +### `force` + +The pressure of a touch. + + diff --git a/docs/versioned_docs/version-2.4.0/api/gestures/gesture-detector-functional1.md b/docs/versioned_docs/version-2.4.0/api/gestures/gesture-detector-functional1.md new file mode 100644 index 0000000000..2397af9dfa --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/api/gestures/gesture-detector-functional1.md @@ -0,0 +1,19 @@ +```jsx +export default function Example() { + const tap = Gesture.Tap().onStart(() => { + console.log('tap'); + }); + + return ( + + + + + + ); +} + +function FunctionalComponent(props) { + return {props.children}; +} +``` diff --git a/docs/versioned_docs/version-2.4.0/api/gestures/gesture-detector.md b/docs/versioned_docs/version-2.4.0/api/gestures/gesture-detector.md new file mode 100644 index 0000000000..ef8af9b62c --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/api/gestures/gesture-detector.md @@ -0,0 +1,27 @@ +--- +id: gesture-detector +title: GestureDetector +sidebar_label: Gesture detector +--- + +import FunctionalComponents from './gesture-detector-functional1.md'; + +`GestureDetector` is the main component of the RNGH2. It is responsible for creating and updating native gesture handlers based on the config of provided gesture. The most significant difference between it and old gesture handlers is that the `GestureDetector` can recognize more than one gesture at the time thanks to gesture composition. Keep in mind that `GestureDetector` is not compatible with the [Animated API](https://reactnative.dev/docs/animated), nor with [Reanimated 1](https://docs.swmansion.com/react-native-reanimated/docs/1.x.x/). + +:::caution +Gesture Detector will use first native view in its subtree to recognize gestures, however if this view is used only to group its children it may get automatically [collapsed](https://reactnative.dev/docs/view#collapsable-android). Consider this example: + +If we were to remove the collapsable prop from the View, the gesture would stop working because it would be attached to a view that is not present in the view hierarchy. Gesture Detector adds this prop automatically to its direct child but it's impossible to do automatically for more complex view trees. +::: + +## Properties + +### `gesture` + +A gesture object containing the configuration and callbacks. Can be any of the base gestures (`Tap`, `Pan`, `LongPress`, `Fling`, `Pinch`, `Rotation`, `ForceTouch`) or any [`ComposedGesture`](./composed-gestures.md) (`Race`, `Simultaneous`, `Exclusive`). + +:::info +GestureDetector will decide whether to use Reanimated to process provided gestures based on callbacks they have. If any of the callbacks is a worklet, tools provided by the Reanimated will be utilized bringing ability to handle gestures synchrously. + +Starting with Reanimated-2.3.0-beta.4 Gesture Handler will provide a [StateManager](./state-manager.md) in the [touch events](./touch-events.md) that allows for managing the state of the gesture. +::: diff --git a/docs/versioned_docs/version-2.4.0/api/gestures/gesture.md b/docs/versioned_docs/version-2.4.0/api/gestures/gesture.md new file mode 100644 index 0000000000..a84a48003a --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/api/gestures/gesture.md @@ -0,0 +1,55 @@ +--- +id: gesture +title: Gesture +sidebar_label: Gesture +--- + +`Gesture` is the object that allows you to create and compose gestures. + +### Gesture.Tap() + +Creates a new instance of [`TapGesture`](./tap-gesture.md) with its default config and no callbacks. + +### Gesture.Pan() + +Creates a new instance of [`PanGesture`](./pan-gesture.md) with its default config and no callbacks. + +### Gesture.LongPress() + +Creates a new instance of [`LongPressGesture`](./long-press-gesture.md) with its default config and no callbacks. + +### Gesture.Fling() + +Creates a new instance of [`FlingGesture`](./fling-gesture.md) with its default config and no callbacks. + +### Gesture.Pinch() + +Creates a new instance of [`PinchGesture`](./pinch-gesture.md) with its default config and no callbacks. + +### Gesture.Rotation() + +Creates a new instance of [`RotationGesture`](./rotation-gesture.md) with its default config and no callbacks. + +### Gesture.ForceTouch() + +Creates a new instance of [`ForceTouchGesture`](./force-touch-gesture.md) with its default config and no callbacks. + +### Gesture.Manual() + +Creates a new instance of [`ManualGesture`](./manual-gesture.md) with its default config and no callbacks. + +### Gesture.Native() + +Creates a new instance of [`NativeGesture`](./native-gesture.md) with its default config and no callbacks. + +### Gesture.Race(gesture1, gesture2, gesture3, ...): ComposedGesture + +Creates a gesture composed of those provided as arguments. Only one of those can become active and there are no restrictions to the activation of the gesture. The first one to activate will cancel all the others. + +### Gesture.Simultaneous(gesture1, gesture2, gesture3, ...): ComposedGesture + +Creates a gesture composed of those provided as arguments. All of them can become active without cancelling the others. + +### Gesture.Exclusive(gesture1, gesture2, gesture3, ...): ComposedGesture + +Creates a gesture composed of those provided as arguments. Only one of them can become active, but the first one has a higher priority than the second one, the second one has a higher priority than the third one, and so on. When all gestures are in the `BEGAN` state and the activation criteria for the second one is met, instead of activating it will wait until the first one fails (and only then it will activate) or until the first one activates (and then the second one will get cancelled). It is useful when you want to compose gestures with similar activation criteria (e.g. single and double tap at the same component, without Exclusive the single tap would activate every time user taps thus cancelling the double tap). diff --git a/docs/versioned_docs/version-2.4.0/api/gestures/long-press-gesture.md b/docs/versioned_docs/version-2.4.0/api/gestures/long-press-gesture.md new file mode 100644 index 0000000000..9f174d58e7 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/api/gestures/long-press-gesture.md @@ -0,0 +1,73 @@ +--- +id: long-press-gesture +title: Long press gesture +sidebar_label: Long press gesture +--- + +import BaseEventData from './base-gesture-event-data.md'; +import BaseEventConfig from './base-gesture-config.md'; +import BaseEventCallbacks from './base-gesture-callbacks.md'; + +A discrete gesture that activates when the corresponding view is pressed for a sufficiently long time. +This gesture's state will turn into [END](../../under-the-hood/states-events.md#end) immediately after the finger is released. +The gesture will fail to recognize a touch event if the finger is lifted before the [minimum required time](#mindurationms) or if the finger is moved further than the [allowable distance](#maxdist). + +## Config + +### Properties specific to `LongPressGesture`: + +### `minDuration(value: number)` + +Minimum time, expressed in milliseconds, that a finger must remain pressed on the corresponding view. The default value is 500. + +### `maxDistance(value: number)` + +Maximum distance, expressed in points, that defines how far the finger is allowed to travel during a long press gesture. If the finger travels further than the defined distance and the gesture hasn't yet [activated](../../under-the-hood/states-events.md#active), it will fail to recognize the gesture. The default value is 10. + + + +## Callbacks + + + +## Event data + +### Event attributes specific to `LongPressGesture`: + +### `x` + +X coordinate, expressed in points, of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the view attached to the [`GestureDetector`](./gesture-detector.md). + +### `y` + +Y coordinate, expressed in points, of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the view attached to the [`GestureDetector`](./gesture-detector.md). + +### `absoluteX` + +X coordinate, expressed in points, of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the window. It is recommended to use `absoluteX` instead of [`x`](#x) in cases when the view attached to the [`GestureDetector`](./gesture-detector.md) can be transformed as an effect of the gesture. + +### `absoluteY` + +Y coordinate, expressed in points, of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the window. It is recommended to use `absoluteY` instead of [`y`](#y) in cases when the view attached to the [`GestureDetector`](./gesture-detector.md) can be transformed as an effect of the gesture. + +### `duration` + +Duration of the long press (time since the start of the gesture), expressed in milliseconds. + + + +## Example + +```jsx +const longPressGesture = Gesture.LongPress().onEnd((e, success) => { + if (success) { + Alert.alert(`Long pressed for ${e.duration} ms!`); + } +}); + +return ( + + + +); +``` diff --git a/docs/versioned_docs/version-2.4.0/api/gestures/manual-gesture.md b/docs/versioned_docs/version-2.4.0/api/gestures/manual-gesture.md new file mode 100644 index 0000000000..a92c6986ef --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/api/gestures/manual-gesture.md @@ -0,0 +1,25 @@ +--- +id: manual-gesture +title: Manual gesture +sidebar_label: Manual gesture +--- + +import BaseEventData from './base-gesture-event-data.md'; +import BaseEventConfig from './base-gesture-config.md'; +import BaseEventCallbacks from './base-gesture-callbacks.md'; +import BaseContinousEventCallbacks from './base-continous-gesture-callbacks.md'; + +A plain gesture that has no specific activation criteria nor event data set. Its state has to be controlled manually using a [state manager](./state-manager.md). It will not fail when all the pointers are lifted from the screen. + +## Config + + + +## Callbacks + + + + +## Event data + + diff --git a/docs/versioned_docs/version-2.4.0/api/gestures/native-gesture.md b/docs/versioned_docs/version-2.4.0/api/gestures/native-gesture.md new file mode 100644 index 0000000000..6fa7249eed --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/api/gestures/native-gesture.md @@ -0,0 +1,40 @@ +--- +id: native-gesture +title: Native gesture +sidebar_label: Native gesture +--- + +import BaseEventData from './base-gesture-event-data.md'; +import BaseEventConfig from './base-gesture-config.md'; +import BaseEventCallbacks from './base-gesture-callbacks.md'; +import BaseContinousEventCallbacks from './base-continous-gesture-callbacks.md'; + +A gesture that allows other touch handling components to participate in RNGH's gesture system. When used, the other component should be the direct child of a `GestureDetector`. + +## Config + +### Properties specific to `NativeGesture`: + +### `shouldActivateOnStart(value: boolean)` (**Android only**) + +When `true`, underlying handler will activate unconditionally when in `BEGAN` or `UNDETERMINED` state. + +### `disallowInterruption(value: boolean)` + +When `true`, cancels all other gesture handlers when this `NativeViewGestureHandler` receives an `ACTIVE` state event. + + + +## Callbacks + + + +## Event data + +### Event attributes specific to `NativeGesture`: + +### `pointerInside` + +True if gesture was performed inside of containing view, false otherwise. + + diff --git a/docs/versioned_docs/version-2.4.0/api/gestures/pan-gesture.md b/docs/versioned_docs/version-2.4.0/api/gestures/pan-gesture.md new file mode 100644 index 0000000000..c8be974e7f --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/api/gestures/pan-gesture.md @@ -0,0 +1,163 @@ +--- +id: pan-gesture +title: Pan gesture +sidebar_label: Pan gesture +--- + +import BaseEventData from './base-gesture-event-data.md'; +import BaseEventConfig from './base-gesture-config.md'; +import BaseContinousEventConfig from './base-continous-gesture-config.md'; +import BaseEventCallbacks from './base-gesture-callbacks.md'; +import BaseContinousEventCallbacks from './base-continous-gesture-callbacks.md'; + +A continuous gesture that can recognize a panning (dragging) gesture and track its movement. + +The gesture [activates](../../under-the-hood/states-events.md#active) when a finger is placed on the screen and moved some initial distance. + +Configurations such as a minimum initial distance, specific vertical or horizontal pan detection and [number of fingers](#minPointers) required for activation (allowing for multifinger swipes) may be specified. + +Gesture callback can be used for continuous tracking of the pan gesture. It provides information about the gesture such as its XY translation from the starting point as well as its instantaneous velocity. + +## Multi touch pan handling + +If your app relies on multi touch pan handling this section provides some information how the default behavior differs between the platform and how (if necessary) it can be unified. + +The difference in multi touch pan handling lies in the way how translation properties during the event are being calculated. +On iOS the default behavior when more than one finger is placed on the screen is to treat this situation as if only one pointer was placed in the center of mass (average position of all the pointers). +This applies also to many platform native components that handle touch even if not primarily interested in multi touch interactions like for example UIScrollView component. + +The default behavior for native components like scroll view, pager views or drawers is different and hence gesture defaults to that when it comes to pan handling. +The difference is that instead of treating the center of mass of all the fingers placed as a leading pointer it takes the latest placed finger as such. +This behavior can be changed on Android using [`avgTouches`](#avgtouches-android-only) flag. + +Note that on both Android and iOS when the additional finger is placed on the screen that translation prop is not affected even though the position of the pointer being tracked might have changed. +Therefore it is safe to rely on translation most of the time as it only reflects the movement that happens regardless of how many fingers are placed on the screen and if that number changes over time. +If you wish to track the "center of mass" virtual pointer and account for its changes when the number of finger changes you can use relative or absolute position provided in the event ([`x`](#x) and [`y`](#y) or [`absoluteX`](#absolutex) and [`absoluteY`](#absolutey)). + +## Config + +### Properties specific to `PanGesture`: + +### `minDistance(value: number)` + +Minimum distance the finger (or multiple finger) need to travel before the gesture [activates](../../under-the-hood/states-events.md#active). Expressed in points. + +### `minPointers(value: number)` + +A number of fingers that is required to be placed before gesture can [activate](../../under-the-hood/states-events.md#active). Should be a higher or equal to 0 integer. + +### `maxPointers(value: number)` + +When the given number of fingers is placed on the screen and gesture hasn't yet [activated](../../under-the-hood/states-events.md#active) it will fail recognizing the gesture. Should be a higher or equal to 0 integer. + +### `activeOffsetX(value: number | number[])` + +Range along X axis (in points) where fingers travels without activation of gesture. Moving outside of this range implies activation of gesture. Range can be given as an array or a single number. +If range is set as an array, first value must be lower or equal to 0, a the second one higher or equal to 0. +If only one number `p` is given a range of `(-inf, p)` will be used if `p` is higher or equal to 0 and `(-p, inf)` otherwise. + +### `activeOffsetY(value: number | number[])` + +Range along Y axis (in points) where fingers travels without activation of gesture. Moving outside of this range implies activation of gesture. Range can be given as an array or a single number. +If range is set as an array, first value must be lower or equal to 0, a the second one higher or equal to 0. +If only one number `p` is given a range of `(-inf, p)` will be used if `p` is higher or equal to 0 and `(-p, inf)` otherwise. + +### `failOffsetY(value: number | number[])` + +When the finger moves outside this range (in points) along Y axis and gesture hasn't yet activated it will fail recognizing the gesture. Range can be given as an array or a single number. +If range is set as an array, first value must be lower or equal to 0, a the second one higher or equal to 0. +If only one number `p` is given a range of `(-inf, p)` will be used if `p` is higher or equal to 0 and `(-p, inf)` otherwise. + +### `failOffsetX(value: number | number[])` + +When the finger moves outside this range (in points) along X axis and gesture hasn't yet activated it will fail recognizing the gesture. Range can be given as an array or a single number. +If range is set as an array, first value must be lower or equal to 0, a the second one higher or equal to 0. +If only one number `p` is given a range of `(-inf, p)` will be used if `p` is higher or equal to 0 and `(-p, inf)` otherwise. + +### `averageTouches(value: boolean)` (Android only) + +### `enableTrackpadTwoFingerGesture(value: boolean)` (iOS only) + +Enables two-finger gestures on supported devices, for example iPads with trackpads. If not enabled the gesture will require click + drag, with enableTrackpadTwoFingerGesture swiping with two fingers will also trigger the gesture. + + + + +## Callbacks + + + + +## Event data + +### Event attributes specific to `PanGesture`: + +### `translationX` + +Translation of the pan gesture along X axis accumulated over the time of the gesture. The value is expressed in the point units. + +### `translationY` + +Translation of the pan gesture along Y axis accumulated over the time of the gesture. The value is expressed in the point units. + +### `velocityX` + +Velocity of the pan gesture along the X axis in the current moment. The value is expressed in point units per second. + +### `velocityY` + +Velocity of the pan gesture along the Y axis in the current moment. The value is expressed in point units per second. + +### `x` + +X coordinate of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the view attached to the [`GestureDetector`](./gesture-detector.md). Expressed in point units. + +### `y` + +Y coordinate of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the view attached to the [`GestureDetector`](./gesture-detector.md). Expressed in point units. + +### `absoluteX` + +X coordinate of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the window. The value is expressed in point units. It is recommended to use it instead of [`x`](#x) in cases when the original view can be transformed as an effect of the gesture. + +### `absoluteY` + +Y coordinate of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the window. The value is expressed in point units. It is recommended to use it instead of [`y`](#y) in cases when the original view can be transformed as an effect of the gesture. + + + +## Example + +```jsx +const END_POSITION = 200; +const onLeft = useSharedValue(true); +const position = useSharedValue(0); + +const panGesture = Gesture.Pan() + .onUpdate((e) => { + if (onLeft.value) { + position.value = e.translationX; + } else { + position.value = END_POSITION + e.translationX; + } + }) + .onEnd((e) => { + if (position.value > END_POSITION / 2) { + position.value = withTiming(END_POSITION, { duration: 100 }); + onLeft.value = false; + } else { + position.value = withTiming(0, { duration: 100 }); + onLeft.value = true; + } + }); + +const animatedStyle = useAnimatedStyle(() => ({ + transform: [{ translateX: position.value }], +})); + +return ( + + + +); +``` diff --git a/docs/versioned_docs/version-2.4.0/api/gestures/pinch-gesture.md b/docs/versioned_docs/version-2.4.0/api/gestures/pinch-gesture.md new file mode 100644 index 0000000000..5b56e7d043 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/api/gestures/pinch-gesture.md @@ -0,0 +1,77 @@ +--- +id: pinch-gesture +title: Pinch gesture +sidebar_label: Pinch gesture +--- + +import BaseEventData from './base-gesture-event-data.md'; +import BaseEventConfig from './base-gesture-config.md'; +import BaseContinousEventConfig from './base-continous-gesture-config.md'; +import BaseEventCallbacks from './base-gesture-callbacks.md'; +import BaseContinousEventCallbacks from './base-continous-gesture-callbacks.md'; + +A continuous gesture that recognizes pinch gesture. It allows for tracking the distance between two fingers and use that information to scale or zoom your content. +The gesture [activates](../../under-the-hood/states-events.md#active) when fingers are placed on the screen and change their position. +Gesture callback can be used for continuous tracking of the pinch gesture. It provides information about velocity, anchor (focal) point of gesture and scale. + +The distance between the fingers is reported as a scale factor. At the beginning of the gesture, the scale factor is 1.0. As the distance between the two fingers increases, the scale factor increases proportionally. +Similarly, the scale factor decreases as the distance between the fingers decreases. +Pinch gestures are used most commonly to change the size of objects or content onscreen. +For example, map views use pinch gestures to change the zoom level of the map. + +## Config + + + + +## Callbacks + + + + +## Event data + +### Event attributes specific to `PinchGesture`: + +### `scale` + +The scale factor relative to the points of the two touches in screen coordinates. + +### `velocity` + +Velocity of the pan gesture the current moment. The value is expressed in point units per second. + +### `focalX` + +Position expressed in points along X axis of center anchor point of gesture + +### `focalY` + +Position expressed in points along Y axis of center anchor point of gesture + + + +## Example + +```jsx +const scale = useSharedValue(1); +const savedScale = useSharedValue(1); + +const pinchGesture = Gesture.Pinch() + .onUpdate((e) => { + scale.value = savedScale.value * e.scale; + }) + .onEnd(() => { + savedScale.value = scale.value; + }); + +const animatedStyle = useAnimatedStyle(() => ({ + transform: [{ scale: scale.value }], +})); + +return ( + + + +); +``` diff --git a/docs/versioned_docs/version-2.4.0/api/gestures/rotation-gesture.md b/docs/versioned_docs/version-2.4.0/api/gestures/rotation-gesture.md new file mode 100644 index 0000000000..6550e0ea98 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/api/gestures/rotation-gesture.md @@ -0,0 +1,74 @@ +--- +id: rotation-gesture +title: Rotation gesture +sidebar_label: Rotation gesture +--- + +import BaseEventData from './base-gesture-event-data.md'; +import BaseEventConfig from './base-gesture-config.md'; +import BaseContinousEventConfig from './base-continous-gesture-config.md'; +import BaseEventCallbacks from './base-gesture-callbacks.md'; +import BaseContinousEventCallbacks from './base-continous-gesture-callbacks.md'; + +A continuous gesture that can recognize a rotation gesture and track its movement. + +The gesture [activates](../../under-the-hood/states-events.md#active) when fingers are placed on the screen and change position in a proper way. + +Gesture callback can be used for continuous tracking of the rotation gesture. It provides information about the gesture such as the amount rotated, the focal point of the rotation (anchor), and its instantaneous velocity. + +## Config + + + + +## Callbacks + + + + +## Event data + +### Event attributes specific to `RotationGesture`: + +### `rotation` + +Amount rotated, expressed in radians, from the gesture's focal point (anchor). + +### `velocity` + +Instantaneous velocity, expressed in point units per second, of the gesture. + +### `anchorX` + +X coordinate, expressed in points, of the gesture's central focal point (anchor). + +### `anchorY` + +Y coordinate, expressed in points, of the gesture's central focal point (anchor). + + + +## Example + +```jsx +const rotation = useSharedValue(1); +const savedRotation = useSharedValue(1); + +const rotationGesture = Gesture.Rotation() + .onUpdate((e) => { + rotation.value = savedRotation.value + e.rotation; + }) + .onEnd(() => { + savedRotation.value = rotation.value; + }); + +const animatedStyle = useAnimatedStyle(() => ({ + transform: [{ rotateZ: `${(rotation.value / Math.PI) * 180}deg` }], +})); + +return ( + + + +); +``` diff --git a/docs/versioned_docs/version-2.4.0/api/gestures/state-manager.md b/docs/versioned_docs/version-2.4.0/api/gestures/state-manager.md new file mode 100644 index 0000000000..cb50e8212b --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/api/gestures/state-manager.md @@ -0,0 +1,26 @@ +--- +id: state-manager +title: Gesture state manager +sidebar_label: Gesture state manager +--- + +`GestureStateManager` allows to manually control the state of the gestures. Please note that `react-native-reanimated` is required to use it, since it allows for synchronously executing methods in worklets. + +## Methods + +### `begin()` + +Transition the gesture to the [`BEGAN`](../../under-the-hood/states-events.md#began) state. This method will have no effect if the gesture has already activated or finished. + +### `activate()` + +Transition the gesture to the [`ACTIVE`](../../under-the-hood/states-events.md#active) state. This method will have no effect if the handler is already active, or has finished. +If the gesture is [`exclusive`](../../gesture-composition) with another one, the activation will be delayed until the gesture with higher priority fails. + +### `end()` + +Transition the gesture to the [`END`](../../under-the-hood/states-events.md#end) state. This method will have no effect if the handler has already finished. + +### `fail()` + +Transition the gesture to the [`FAILED`](../../under-the-hood/states-events.md#failed) state. This method will have no effect if the handler has already finished. diff --git a/docs/versioned_docs/version-2.4.0/api/gestures/tap-gesture.md b/docs/versioned_docs/version-2.4.0/api/gestures/tap-gesture.md new file mode 100644 index 0000000000..6c6c0a0872 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/api/gestures/tap-gesture.md @@ -0,0 +1,100 @@ +--- +id: tap-gesture +title: Tap gesture +sidebar_label: Tap gesture +--- + +import BaseEventData from './base-gesture-event-data.md'; +import BaseEventConfig from './base-gesture-config.md'; +import BaseEventCallbacks from './base-gesture-callbacks.md'; + +A discrete gesture that recognizes one or many taps. + +Tap gestures detect one or more fingers briefly touching the screen. +The fingers involved in these gestures must not move significantly from their initial touch positions. +The required number of taps and allowed distance from initial position may be configured. +For example, you might configure tap gesture recognizers to detect single taps, double taps, or triple taps. + +In order for a gesture to [activate](../../under-the-hood/states-events.md#active), specified gesture requirements such as minPointers, numberOfTaps, maxDist, maxDuration, and maxDelayMs (explained below) must be met. Immediately after the gesture [activates](../../under-the-hood/states-events.md#active), it will [end](../../under-the-hood/states-events.md#end). + +## Config + +### Properties specific to `TapGesture`: + +### `minPointers(value: number)` + +Minimum number of pointers (fingers) required to be placed before the gesture [activates](../../under-the-hood/states-events.md#active). Should be a positive integer. The default value is 1. + +### `maxDuration(value: number)` + +Maximum time, expressed in milliseconds, that defines how fast a finger must be released after a touch. The default value is 500. + +### `maxDelay(value: number)` + +Maximum time, expressed in milliseconds, that can pass before the next tap — if many taps are required. The default value is 500. + +### `numberOfTaps(value: number)` + +Number of tap gestures required to [activate](../../under-the-hood/states-events.md#active) the gesture. The default value is 1. + +### `maxDeltaX(value: number)` + +Maximum distance, expressed in points, that defines how far the finger is allowed to travel along the X axis during a tap gesture. If the finger travels further than the defined distance along the X axis and the gesture hasn't yet [activated](../../under-the-hood/states-events.md#active), it will fail to recognize the gesture. + +### `maxDeltaY(value: number)` + +Maximum distance, expressed in points, that defines how far the finger is allowed to travel along the Y axis during a tap gesture. If the finger travels further than the defined distance along the Y axis and the gesture hasn't yet [activated](../../under-the-hood/states-events.md#active), it will fail to recognize the gesture. + +### `maxDistance(value: number)` + +Maximum distance, expressed in points, that defines how far the finger is allowed to travel during a tap gesture. If the finger travels further than the defined distance and the gesture hasn't yet [activated](../../under-the-hood/states-events.md#active), it will fail to recognize the gesture. + + + +## Callbacks + + + +## Event data + +### Event attributes specific to `TapGesture`: + +### `x` + +X coordinate, expressed in points, of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the view attached to the [`GestureDetector`](./gesture-detector.md). + +### `y` + +Y coordinate, expressed in points, of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the view attached to the [`GestureDetector`](./gesture-detector.md). + +### `absoluteX` + +X coordinate, expressed in points, of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the window. It is recommended to use `absoluteX` instead of [`x`](#x) in cases when the view attached to the [`GestureDetector`](./gesture-detector.md) can be transformed as an effect of the gesture. + +### `absoluteY` + +Y coordinate, expressed in points, of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the window. It is recommended to use `absoluteY` instead of [`y`](#y) in cases when the view attached to the [`GestureDetector`](./gesture-detector.md) can be transformed as an effect of the gesture. + + + +## Example + +```jsx +const singleTap = Gesture.Tap() + .maxDuration(250) + .onStart(() => { + Alert.alert('Single tap!'); + }); + +const doubleTap = Gesture.Tap() + .maxDuration(250) + .onStart(() => { + Alert.alert('Double tap!'); + }); + +return ( + + + +); +``` diff --git a/docs/versioned_docs/version-2.4.0/api/gestures/touch-events.md b/docs/versioned_docs/version-2.4.0/api/gestures/touch-events.md new file mode 100644 index 0000000000..58103d7b25 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/api/gestures/touch-events.md @@ -0,0 +1,49 @@ +--- +id: touch-events +title: Touch events +sidebar_label: Touch events +--- + +### Touch event attributes: + +### `eventType` + +Type of the current event - whether the finger was placed on the screen, moved, lifted or cancelled. + +### `changedTouches` + +An array of objects where every object represents a single touch. Contains information only about the touches that were affected by the event i.e. those that were placed down, moved, lifted or cancelled. + +### `allTouches` + +An array of objects where every object represents a single touch. Contains information about all active touches. + +### `numberOfTouches` + +Number representing the count of currently active touches. + +:::caution +Don't rely on the order of items in the `touches` as it may change during the gesture, instead use the `id` attribute to track individual touches across events. +::: + +### PointerData attributes: + +### `id` + +A number representing id of the touch. It may be used to track the touch between events as the id will not change while it is being tracked. + +### `x` + +X coordinate of the current position of the touch relative to the view attached to the [`GestureDetector`](./gesture-detector.md). Expressed in point units. + +### `y` + +Y coordinate of the current position of the touch relative to the view attached to the [`GestureDetector`](./gesture-detector.md). Expressed in point units. + +### `absoluteX` + +X coordinate of the current position of the touch relative to the window. The value is expressed in point units. It is recommended to use it instead of [`x`](#x) in cases when the original view can be transformed as an effect of the gesture. + +### `absoluteY` + +Y coordinate of the current position of the touch relative to the window. The value is expressed in point units. It is recommended to use it instead of [`y`](#y) in cases when the original view can be transformed as an effect of the gesture. diff --git a/docs/versioned_docs/version-2.4.0/api/test-api.md b/docs/versioned_docs/version-2.4.0/api/test-api.md new file mode 100644 index 0000000000..2eacd0c711 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/api/test-api.md @@ -0,0 +1,108 @@ +--- +id: test-api +title: Testing +--- + +:::info +If you want to use `fireGestureHandler` and `getByGestureTestId`, you need to import them from `react-native-gesture-handler/jest-utils` package. +::: + +## fireGestureHandler(gestureOrHandler, eventList) + +Simulates one event stream (i.e. event sequence starting with `BEGIN` state and ending +with one of `END`/`FAIL`/`CANCEL` states), calling appropriate callbacks associated with given gesture handler. + +### Arguments + +#### `gestureOrHandler` + +Represents either: + +1. Gesture handler component found by Jest queries (e.g. `getByTestId`) +2. Gesture found by [`getByGestureTestId()`](#getbygestureidtestid) + +#### `eventList` + +Event data passed to appropriate callback. RNGH fills event list if required +data is missing using these rules: + +1. `oldState` is filled using state of the previous event. `BEGIN` events use + `UNDETERMINED` value as previous event. +2. Events after first `ACTIVE` state can omit `state` field. +3. Handler specific data is filled (e.g. `numberOfTouches`, `x` fields) with + defaults. +4. Missing `BEGIN` and `END` events are added with data copied from first and last + passed event, respectively. +5. If first event don't have `state` field, the `ACTIVE` state is assumed. + +Some examples: + +```jsx +const oldStateFilled = [ + { state: State.BEGAN }, + { state: State.ACTIVE }, + { state: State.END }, +]; // three events with specified state are fired. + +const implicitActiveState = [ + { state: State.BEGAN }, + { state: State.ACTIVE }, + { x: 5 }, + { state: State.END }, +]; // 4 events, including two ACTIVE events (second one has overriden additional data). + +const implicitBegin = [ + { x: 1, y: 11 }, + { x: 2, y: 12, state: State.FAILED }, +]; // 3 events, including implicit BEGAN, one ACTIVE, and one FAILED event with additional data. + +const implicitBeginAndEnd = [ + { x: 5, y: 15 }, + { x: 6, y: 16 }, + { x: 7, y: 17 }, +]; // 5 events, including 3 ACTIVE events and implicit BEGAN and END events. BEGAN uses first event's additional data, END uses last event's additional data. + +const allImplicits = []; // 3 events, one BEGIN, one ACTIVE, one END with defaults. +``` + +### Example + +Extracted from RNGH tests, check `Events.test.tsx` for full implementation. + +```tsx +it('sends events with additional data to handlers', () => { + const panHandlers = mockedEventHandlers(); + render(); + fireGestureHandler(getByGestureTestId('pan'), [ + { state: State.BEGAN, translationX: 0 }, + { state: State.ACTIVE, translationX: 10 }, + { translationX: 20 }, + { translationX: 20 }, + { state: State.END, translationX: 30 }, + ]); + + expect(panHandlers.active).toBeCalledTimes(3); + expect(panHandlers.active).toHaveBeenLastCalledWith( + expect.objectContaining({ translationX: 20 }) + ); +}); +``` + +## getByGestureTestId(testID) + +Returns opaque data type associated with gesture. Gesture is found via `testID` attribute in rendered +components (see [`withTestID` method](./gestures/base-gesture-config.md#withrefref)). + +### Arguments + +#### `testID` + +String identifying gesture. + +### Notes + +`testID` must be unique among components rendered in test. + +### Example + +See above example for `fireGestureHandler`. diff --git a/docs/versioned_docs/version-2.4.0/gesture-composition.md b/docs/versioned_docs/version-2.4.0/gesture-composition.md new file mode 100644 index 0000000000..e55e06fae6 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/gesture-composition.md @@ -0,0 +1,181 @@ +--- +id: gesture-composition +title: Composing gestures +sidebar_label: Composing gestures +--- + +Composing gestures is much simpler in RNGH2, you don't need to create a ref for every gesture that depends on another one. Instead you can use `Race`, `Simultaneous` and `Exclusive` methods provided by the `Gesture` object. + +## Race + +Only one of the provided gestures can become active at the same time. The first gesture to become active will cancel the rest of the gestures. It accepts variable number of arguments. +It is the equivalent to having more than one gesture handler without defining `simultaneousHandlers` and `waitFor` props. + +For example, lets say that you have a component that you want to make draggable but you also want to show additional options on long press. Presumably you would not want the component to move after the long press activates. You can accomplish this using `Race`: + +> Note: the `useSharedValue` and `useAnimatedStyle` are part of [`react-native-reanimated`](https://docs.swmansion.com/react-native-reanimated/). + +```js +const offset = useSharedValue({ x: 0, y: 0 }); +const start = useSharedValue({ x: 0, y: 0 }); +const popupPosition = useSharedValue({ x: 0, y: 0 }); +const popupAlpha = useSharedValue(0); + +const animatedStyles = useAnimatedStyle(() => { + return { + transform: [{ translateX: offset.value.x }, { translateY: offset.value.y }], + }; +}); + +const animatedPopupStyles = useAnimatedStyle(() => { + return { + transform: [ + { translateX: popupPosition.value.x }, + { translateY: popupPosition.value.y }, + ], + opacity: popupAlpha.value, + }; +}); + +const dragGesture = Gesture.Pan() + .onStart((_e) => { + popupAlpha.value = withTiming(0); + }) + .onUpdate((e) => { + offset.value = { + x: e.translationX + start.value.x, + y: e.translationY + start.value.y, + }; + }) + .onEnd(() => { + start.value = { + x: offset.value.x, + y: offset.value.y, + }; + }); + +const longPressGesture = Gesture.LongPress().onStart((_event) => { + popupPosition.value = { x: offset.value.x, y: offset.value.y }; + popupAlpha.value = withTiming(1); +}); + +const composed = Gesture.Race(dragGesture, longPressGesture); + +return ( + + + + + + +); +``` + +## Simultaneous + +All of the provided gestures can activate at the same time. Activation of one will not cancel the other. +It is the equivalent to having some gesture handlers, each with `simultaneousHandlers` prop set to the other handlers. + +For example, if you want to make a gallery app, you might want user to be able to zoom, rotate and pan around photos. You can do it with `Simultaneous`: + +> Note: the `useSharedValue` and `useAnimatedStyle` are part of [`react-native-reanimated`](https://docs.swmansion.com/react-native-reanimated/). + +```js +const offset = useSharedValue({ x: 0, y: 0 }); +const start = useSharedValue({ x: 0, y: 0 }); +const scale = useSharedValue(1); +const savedScale = useSharedValue(1); +const rotation = useSharedValue(0); +const savedRotation = useSharedValue(0); + +const animatedStyles = useAnimatedStyle(() => { + return { + transform: [ + { translateX: offset.value.x }, + { translateY: offset.value.y }, + { scale: scale.value }, + { rotateZ: `${rotation.value}rad` }, + ], + }; +}); + +const dragGesture = Gesture.Pan() + .averageTouches(true) + .onUpdate((e) => { + offset.value = { + x: e.translationX + start.value.x, + y: e.translationY + start.value.y, + }; + }) + .onEnd(() => { + start.value = { + x: offset.value.x, + y: offset.value.y, + }; + }); + +const zoomGesture = Gesture.Pinch() + .onUpdate((event) => { + scale.value = savedScale.value * event.scale; + }) + .onEnd(() => { + savedScale.value = scale.value; + }); + +const rotateGesture = Gesture.Rotation() + .onUpdate((event) => { + rotation.value = savedRotation.value + event.rotation; + }) + .onEnd(() => { + savedRotation.value = rotation.value; + }); + +const composed = Gesture.Simultaneous( + dragGesture, + Gesture.Simultaneous(zoomGesture, rotateGesture) +); + +return ( + + + + + +); +``` + +## Exclusive + +Only one of the provided gestures can become active, with the first one having a higher priority than the second one (if both gestures are still possible, the second one will wait for the first one to fail before it activates), second one having a higher priority than the third one, and so on. +It is equivalent to having some gesture handlers where the second one has the `waitFor` prop set to the first handler, third one has the `waitFor` prop set to the first and the second one, and so on. + +For example, if you want to make a component that responds to single tap as well as to a double tap, you can accomplish that using `Exclusive`: + +> Note: the `useSharedValue` and `useAnimatedStyle` are part of [`react-native-reanimated`](https://docs.swmansion.com/react-native-reanimated/). + +```js +const singleTap = Gesture.Tap().onEnd((_event, success) => { + if (success) { + console.log('single tap!'); + } +}); +const doubleTap = Gesture.Tap() + .numberOfTaps(2) + .onEnd((_event, success) => { + if (success) { + console.log('double tap!'); + } + }); + +const taps = Gesture.Exclusive(doubleTap, singleTap); + +return ( + + + +); +``` + +## Composition vs `simultaneousWithExternalGesture` and `requireExternalGestureToFail` + +You may have noticed that gesture composition described above requires you to mount all of the composed gestures under a single `GestureDetector`, effectively attaching them to the same underlying component. If you want to make a relation between gestures that are attached to separate `GestureDetectors`, we have a separate mechanism for that: `simultaneousWithExternalGesture` and `requireExternalGestureToFail` methods that are available on every base gesture. They work exactly the same way as `simultaneousHandlers` and `waitFor` on gesture handlers, that is they just mark the relation between the gestures without joining them into single object. diff --git a/docs/versioned_docs/version-2.4.0/gesture-handlers/api/common-gh.md b/docs/versioned_docs/version-2.4.0/gesture-handlers/api/common-gh.md new file mode 100644 index 0000000000..450dc7f853 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/gesture-handlers/api/common-gh.md @@ -0,0 +1,93 @@ +--- +id: common-gh +title: Common handler properties +sidebar_label: Common handler properties +--- + +:::info +We recently released RNGH 2.0 with new Gestures system. Check out [RNGH 2.0 +section in Introduction](../../introduction.md#rngh-20) for more information. +::: + +This page covers the common set of properties all gesture handler components expose. + +### Units + +All handler component properties and event attributes that represent onscreen dimensions are expressed in screen density independent units we refer to as "points". +These are the units commonly used in React Native ecosystem (e.g. in the [layout system](http://facebook.github.io/react-native/docs/flexbox.html)). +They do not map directly to physical pixels but instead to [iOS's points](https://developer.apple.com/library/content/documentation/2DDrawing/Conceptual/DrawingPrintingiOS/GraphicsDrawingOverview/GraphicsDrawingOverview.html#//apple_ref/doc/uid/TP40010156-CH14-SW7) and to [dp](https://developer.android.com/guide/topics/resources/more-resources#Dimension) units on Android. + +## Properties + +This section describes properties that can be used with all gesture handler components: + +### `enabled` + +Accepts a boolean value. +Indicates whether the given handler should be analyzing stream of touch events or not. +When set to `false` we can be sure that the handler's state will **never** become [`ACTIVE`](../basics/state.md#active). +If the value gets updated while the handler already started recognizing a gesture, then the handler's state it will immediately change to [`FAILED`](../basics/state.md#failed) or [`CANCELLED`](../basics/state.md#cancelled) (depending on its current state). +Default value is `true`. + +### `shouldCancelWhenOutside` + +Accepts a boolean value. +When `true` the handler will [cancel](../basics/state.md#cancelled) or [fail](../basics/state.md#failed) recognition (depending on its current state) whenever the finger leaves the area of the connected view. +Default value of this property is different depending on the handler type. +Most handlers' `shouldCancelWhenOutside` property defaults to `false` except for the [`LongPressGestureHandler`](./longpress-gh.md) and [`TapGestureHandler`](./tap-gh.md) which default to `true`. + +### `cancelsTouchesInView` (**iOS only**) + +Accepts a boolean value. +When `true`, the handler will cancel touches for native UI components (`UIButton`, `UISwitch`, etc) it's attached to when it becomes [`ACTIVE`](../basics/state.md#active). +Default value is `true`. + +### `simultaneousHandlers` + +Accepts a react ref object or an array of refs to other handler components (refs should be created using [`React.createRef()`](https://reactjs.org/docs/refs-and-the-dom.html)). When set, the handler will be allowed to [activate](../basics/state.md#active) even if one or more of the handlers provided by their refs are in an [`ACTIVE`](../basics/state.md#active) state. It will also prevent the provided handlers from [cancelling](../basics/state.md#cancelled) the current handler when they [activate](../basics/state.md#active). Read more in the [cross handler interaction](../basics/interactions.md#simultaneous-recognition) section. + +### `waitFor` + +Accepts a react ref object or an array of refs to other handler components (refs should be created using [`React.createRef()`](https://reactjs.org/docs/refs-and-the-dom.html)). When set the handler will not [activate](../basics/state.md#active) as long as the handlers provided by their refs are in the [`BEGAN`](../basics/state.md#began) state. Read more in the [cross handler interaction](../basics/interactions.md#awaiting-other-handlers) section. + +### `hitSlop` + +This parameter enables control over what part of the connected view area can be used to [begin](../basics/state.md#began) recognizing the gesture. +When a negative number is provided the bounds of the view will reduce the area by the given number of points in each of the sides evenly. + +Instead you can pass an object to specify how each boundary side should be reduced by providing different number of points for `left`, `right`, `top` or `bottom` sides. +You can alternatively provide `horizontal` or `vertical` instead of specifying directly `left`, `right` or `top` and `bottom`. +Finally, the object can also take `width` and `height` attributes. +When `width` is set it is only allow to specify one of the sides `right` or `left`. +Similarly when `height` is provided only `top` or `bottom` can be set. +Specifying `width` or `height` is useful if we only want the gesture to activate on the edge of the view. In which case for example we can set `left: 0` and `width: 20` which would make it possible for the gesture to be recognize when started no more than 20 points from the left edge. + +**IMPORTANT:** Note that this parameter is primarily designed to reduce the area where gesture can activate. Hence it is only supported for all the values (except `width` and `height`) to be non positive (0 or lower). Although on Android it is supported for the values to also be positive and therefore allow to expand beyond view bounds but not further than the parent view bounds. To achieve this effect on both platforms you can use React Native's View [hitSlop](https://facebook.github.io/react-native/docs/view.html#props) property. + +### `onGestureEvent` + +Takes a callback that is going to be triggered for each subsequent touch event while the handler is in an [ACTIVE](../basics/state.md#active) state. Event payload depends on the particular handler type. Common set of event data attributes is documented [below](#event-data) and handler specific attributes are documented on the corresponding handler pages. E.g. event payload for [`PinchGestureHandler`](./rotation-gh.md#event-data) contains `scale` attribute that represents how the distance between fingers changed since when the gesture started. + +Instead of a callback [`Animated.event`](https://facebook.github.io/react-native/docs/animated.html#event) object can be used. Also Animated events with `useNativeDriver` flag enabled **are fully supported**. + +### `onHandlerStateChange` + +Takes a callback that is going to be triggered when [state](../basics/state.md) of the given handler changes. + +The event payload contains the same payload as in case of [`onGestureEvent`](#ongestureevent) including handler specific event attributes some handlers may provide. + +In addition `onHandlerStateChange` event payload contains `oldState` attribute which represents the [state](../basics/state.md) of the handler right before the change. + +Instead of a callback [`Animated.event`](https://facebook.github.io/react-native/docs/animated.html#event) object can be used. Also Animated events with `useNativeDriver` flag enabled **are fully supported**. + +## Event data + +This section describes the attributes of event object being provided to [`onGestureEvent`](#ongestureevent) and [`onHandlerStateChange`](#onhandlerstatechange) callbacks: + +### `state` + +Current [state](../basics/state.md) of the handler. Expressed as one of the constants exported under `State` object by the library. Refer to the section about [handler state](../basics/state.md) to learn more about how to use it. + +### `numberOfPointers` + +Represents the number of pointers (fingers) currently placed on the screen. diff --git a/docs/versioned_docs/version-2.4.0/gesture-handlers/api/create-native-wrapper.md b/docs/versioned_docs/version-2.4.0/gesture-handlers/api/create-native-wrapper.md new file mode 100644 index 0000000000..c8c8be2fe4 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/gesture-handlers/api/create-native-wrapper.md @@ -0,0 +1,27 @@ +--- +id: create-native-wrapper +title: createNativeWrapper +sidebar_label: createNativeWrapper() +--- + +:::info +We recently released RNGH 2.0 with new Gestures system. Check out [RNGH 2.0 +section in Introduction](../../introduction.md#rngh-20) for more information. +::: + +Creates provided component with NativeViewGestureHandler, allowing it to be part of RNGH's +gesture system. + +## Arguments + +### Component + +The component we want to wrap. + +### config + +Config is an object with properties that can be used on [`NativeViewGestureHandler`](./nativeview-gh.md) + +## Returns + +Wrapped component. diff --git a/docs/versioned_docs/version-2.4.0/gesture-handlers/api/fling-gh.md b/docs/versioned_docs/version-2.4.0/gesture-handlers/api/fling-gh.md new file mode 100644 index 0000000000..89f339f191 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/gesture-handlers/api/fling-gh.md @@ -0,0 +1,76 @@ +--- +id: fling-gh +title: FlingGestureHandler +sidebar_label: Fling +--- + +:::info +We recently released RNGH 2.0 with new Gestures system. Check out [RNGH 2.0 +section in Introduction](../../introduction.md#rngh-20) for more information. +::: + +A discrete gesture handler that activates when the movement is sufficiently long and fast. +Handler gets [ACTIVE](../basics/state#active) when movement is sufficiently long and it does not take too much time. +When handler gets activated it will turn into [END](../basics/state#end) state when finger is released. +The handler will fail to recognize if the finger is lifted before being activated. +The handler is implemented using [UISwipeGestureRecognizer](https://developer.apple.com/documentation/uikit/uiswipegesturerecognizer) on iOS and from scratch on Android. + +## Properties + +See [set of properties inherited from base handler class](./common-gh.md#properties). Below is a list of properties specific to `FlingGestureHandler` component: + +### `direction` + +Expressed allowed direction of movement. It's possible to pass one or many directions in one parameter: + +```js +direction={Directions.RIGHT | Directions.LEFT} +``` + +or + +```js +direction={Directions.DOWN} +``` + +### `numberOfPointers` + +Determine exact number of points required to handle the fling gesture. + +## Event data + +See [set of event attributes from base handler class](./common-gh.md#event-data). Below is a list of gesture event attributes specific to `FlingGestureHandler`: + +### `x` + +X coordinate of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the view attached to the handler. Expressed in point units. + +### `y` + +Y coordinate of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the view attached to the handler. Expressed in point units. + +### `absoluteX` + +X coordinate of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the window. The value is expressed in point units. It is recommended to use it instead of [`x`](#x) in cases when the original view can be transformed as an effect of the gesture. + +### `absoluteY` + +Y coordinate of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the window. The value is expressed in point units. It is recommended to use it instead of [`y`](#y) in cases when the original view can be transformed as an effect of the gesture. + +## Example + +See the [fling example](https://github.com/software-mansion/react-native-gesture-handler/blob/main/example/src/release_tests/fling/index.tsx) from Gesture Handler Example App. + +```js +const LongPressButton = () => ( + { + if (nativeEvent.state === State.ACTIVE) { + Alert.alert("I'm flinged!"); + } + }}> + + +); +``` diff --git a/docs/versioned_docs/version-2.4.0/gesture-handlers/api/force-gh.md b/docs/versioned_docs/version-2.4.0/gesture-handlers/api/force-gh.md new file mode 100644 index 0000000000..3fc017e69e --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/gesture-handlers/api/force-gh.md @@ -0,0 +1,67 @@ +--- +id: force-gh +title: ForceTouchGestureHandler (iOS only) +sidebar_label: Force touch +--- + +:::info +We recently released RNGH 2.0 with new Gestures system. Check out [RNGH 2.0 +section in Introduction](../../introduction.md#rngh-20) for more information. +::: + +A continuous gesture handler that recognizes force of a touch. It allows for tracking pressure of touch on some iOS devices. +The handler [activates](../basics/state.md#active) when pressure of touch if greater or equal than `minForce`. It fails if pressure is greater than `maxForce` +Gesture callback can be used for continuous tracking of the touch pressure. It provides information for one finger (the first one). + +At the beginning of the gesture, the pressure factor is 0.0. As the pressure increases, the pressure factor increases proportionally. The maximum pressure is 1.0. + +The handler is implemented using custom [UIGestureRecognizer](https://developer.apple.com/documentation/uikit/uigesturerecognizer) on iOS. There's no implementation provided on Android and it simply render children without any wrappers. +Since this behaviour is only provided on some iOS devices, this handler should not be used for defining any crucial behaviors. Use it only as an additional improvement and make all features to be accessed without this handler as well. + +# Properties + +See [set of properties inherited from base handler class](./common-gh.md#properties). Below is a list of properties specific to `ForceTouchGestureHandler` component: + +### `minForce` + +A minimal pressure that is required before handler can [activate](../basics/state.md#active). Should be a value from range `[0.0, 1.0]`. Default is `0.2`. + +### `maxForce` + +A maximal pressure that could be applied for handler. If the pressure is greater, handler [fails](../basics/state.md#failed). Should be a value from range `[0.0, 1.0]`. + +### `feedbackOnActivation` + +Boolean value defining if haptic feedback has to be performed on activation. + +## Event data + +See [set of event attributes from base handler class](./common-gh.md#event-data). Below is a list of gesture event attributes specific to `ForceTouchGestureHandler`: + +### `force` + +The pressure of a touch. + +## Static method + +### `forceTouchAvailable` + +You may check if it's possible to use `ForceTouchGestureHandler` with `ForceTouchGestureHandler.forceTouchAvailable` + +## Example + +See the [force touch handler example](https://github.com/software-mansion/react-native-gesture-handler/blob/main/example/src/basic/forcetouch/index.tsx) from Gesture Handler Example App. + +```js + + + +``` diff --git a/docs/versioned_docs/version-2.4.0/gesture-handlers/api/longpress-gh.md b/docs/versioned_docs/version-2.4.0/gesture-handlers/api/longpress-gh.md new file mode 100644 index 0000000000..213255e1de --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/gesture-handlers/api/longpress-gh.md @@ -0,0 +1,70 @@ +--- +id: longpress-gh +title: LongPressGestureHandler +sidebar_label: Long press +--- + +:::info +We recently released RNGH 2.0 with new Gestures system. Check out [RNGH 2.0 +section in Introduction](../../introduction.md#rngh-20) for more information. +::: + +A discrete gesture handler that activates when the corresponding view is pressed for a sufficiently long time. +This handler's state will turn into [END](../basics/state.md#end) immediately after the finger is released. +The handler will fail to recognize a touch event if the finger is lifted before the [minimum required time](#mindurationms) or if the finger is moved further than the [allowable distance](#maxdist). + +The handler is implemented using [UILongPressGestureRecognizer](https://developer.apple.com/documentation/uikit/uilongpressgesturerecognizer) on iOS and [LongPressGestureHandler](https://github.com/software-mansion/react-native-gesture-handler/blob/main/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.java) on Android. + +## Properties + +See [set of properties inherited from base handler class](./common-gh.md#properties). Below is a list of properties specific to the `LongPressGestureHandler` component: + +### `minDurationMs` + +Minimum time, expressed in milliseconds, that a finger must remain pressed on the corresponding view. The default value is 500. + +### `maxDist` + +Maximum distance, expressed in points, that defines how far the finger is allowed to travel during a long press gesture. If the finger travels further than the defined distance and the handler hasn't yet [activated](../basics/state.md#active), it will fail to recognize the gesture. The default value is 10. + +## Event data + +See [set of event attributes from base handler class](./common-gh.md#event-data). Below is a list of gesture event attributes specific to the `LongPressGestureHandler` component: + +### `x` + +X coordinate, expressed in points, of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the view attached to the handler. + +### `y` + +Y coordinate, expressed in points, of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the view attached to the handler. + +### `absoluteX` + +X coordinate, expressed in points, of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the window. It is recommended to use `absoluteX` instead of [`x`](#x) in cases when the view attached to the handler can be transformed as an effect of the gesture. + +### `absoluteY` + +Y coordinate, expressed in points, of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the window. It is recommended to use `absoluteY` instead of [`y`](#y) in cases when the view attached to the handler can be transformed as an effect of the gesture. + +### `duration` + +Duration of the long press (time since the start of the event), expressed in milliseconds. + +## Example + +See the [multitap example](https://github.com/software-mansion/react-native-gesture-handler/blob/main/example/src/basic/multitap/index.tsx) from GestureHandler Example App. + +```js +const LongPressButton = () => ( + { + if (nativeEvent.state === State.ACTIVE) { + Alert.alert("I'm being pressed for so long"); + } + }} + minDurationMs={800}> + + +); +``` diff --git a/docs/versioned_docs/version-2.4.0/gesture-handlers/api/nativeview-gh.md b/docs/versioned_docs/version-2.4.0/gesture-handlers/api/nativeview-gh.md new file mode 100644 index 0000000000..aef1ac5398 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/gesture-handlers/api/nativeview-gh.md @@ -0,0 +1,27 @@ +--- +id: nativeview-gh +title: NativeViewGestureHandler +sidebar_label: NativeView +--- + +:::info +We recently released RNGH 2.0 with new Gestures system. Check out [RNGH 2.0 +section in Introduction](../../introduction.md#rngh-20) for more information. +::: + +A gesture handler that allows other touch handling components to participate in +RNGH's gesture system. + +Used by [`createNativeWrapper()`](./create-native-wrapper.md). + +## Properties + +See [set of properties inherited from base handler class](./common-gh.md#properties). Below is a list of properties specific to `NativeViewGestureHandler` component: + +### `shouldActivateOnStart` (**Android only**) + +When `true`, underlying handler will activate unconditionally when in `BEGAN` or `UNDETERMINED` state. + +### `disallowInterruption` + +When `true`, cancels all other gesture handlers when this `NativeViewGestureHandler` receives an `ACTIVE` state event. diff --git a/docs/versioned_docs/version-2.4.0/gesture-handlers/api/pan-gh.md b/docs/versioned_docs/version-2.4.0/gesture-handlers/api/pan-gh.md new file mode 100644 index 0000000000..adb927371b --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/gesture-handlers/api/pan-gh.md @@ -0,0 +1,227 @@ +--- +id: pan-gh +title: PanGestureHandler +sidebar_label: Pan +--- + +:::info +We recently released RNGH 2.0 with new Gestures system. Check out [RNGH 2.0 +section in Introduction](../../introduction.md#rngh-20) for more information. +::: + +A continuous gesture handler that can recognize a panning (dragging) gesture and track its movement. + +The handler [activates](../basics/state.md#active) when a finger is placed on the screen and moved some initial distance. + +Configurations such as a minimum initial distance, specific vertical or horizontal pan detection and [number of fingers](#minPointers) required for activation (allowing for multifinger swipes) may be specified. + +Gesture callback can be used for continuous tracking of the pan gesture. It provides information about the gesture such as its XY translation from the starting point as well as its instantaneous velocity. + +The handler is implemented using [UIPanGestureRecognizer](https://developer.apple.com/documentation/uikit/uipangesturerecognizer) on iOS and [PanGestureHandler](https://github.com/software-mansion/react-native-gesture-handler/blob/main/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.java) on Android. + +## Custom activation criteria + +The `PanGestureHandler` component exposes a number of properties that can be used to customize the criteria under which a handler will [activate](../basics/state.md#active) or [fail](../basics/state.md#fail) when recognizing a gesture. + +When more than one of such a property is set, `PanGestureHandler` expects all criteria to be met for successful recognition and at most one of the criteria to be overstepped to fail recognition. +For example when both [`minDeltaX`](#mindeltax) and [`minDeltaY`](#mindeltay) are set to 20 we expect the finger to travel by 20 points in both the X and Y axis before the handler activates. +Another example would be setting both [`maxDeltaX`](#maxdeltaX) and [`maxDeltaY`](#maxdeltay) to 20 and [`minDist`](#mindist) to 23. +In such a case, if we move a finger along the X-axis by 20 points and along the Y-axis by 0 points, the handler will fail even though the finger is still within the bounds of translation along Y-axis. + +## Multi touch pan handling + +If your app relies on multi touch pan handling this section provides some information how the default behavior differs between the platform and how (if necessary) it can be unified. + +The difference in multi touch pan handling lies in the way how translation properties during the event are being calculated. +On iOS the default behavior when more than one finger is placed on the screen is to treat this situation as if only one pointer was placed in the center of mass (average position of all the pointers). +This applies also to many platform native components that handle touch even if not primarily interested in multi touch interactions like for example UIScrollView component. + +The default behavior for native components like scroll view, pager views or drawers is different and hence gesture handler defaults to that when it comes to pan handling. +The difference is that instead of treating the center of mass of all the fingers placed as a leading pointer it takes the latest placed finger as such. +This behavior can be changed on Android using [`avgTouches`](#avgtouches-android-only) flag. + +Note that on both Android and iOS when the additional finger is placed on the screen that translation prop is not affected even though the position of the pointer being tracked might have changed. +Therefore it is safe to rely on translation most of the time as it only reflects the movement that happens regardless of how many fingers are placed on the screen and if that number changes over time. +If you wish to track the "center of mass" virtual pointer and account for its changes when the number of finger changes you can use relative or absolute position provided in the event ([`x`](#x) and [`y`](#y) or [`absoluteX`](#absolutex) and [`absoluteY`](#absolutey)). + +## Properties + +See [set of properties inherited from base handler class](./common-gh.md#properties). Below is a list of properties specific to `PanGestureHandler` component: + +### `minDist` + +Minimum distance the finger (or multiple finger) need to travel before the handler [activates](../basics/state.md#active). Expressed in points. + +### `minPointers` + +A number of fingers that is required to be placed before handler can [activate](../basics/state.md#active). Should be a higher or equal to 0 integer. + +### `maxPointers` + +When the given number of fingers is placed on the screen and handler hasn't yet [activated](../basics/state.md#active) it will fail recognizing the gesture. Should be a higher or equal to 0 integer. + +### `activeOffsetX` + +Range along X axis (in points) where fingers travels without activation of handler. Moving outside of this range implies activation of handler. Range can be given as an array or a single number. +If range is set as an array, first value must be lower or equal to 0, a the second one higher or equal to 0. +If only one number `p` is given a range of `(-inf, p)` will be used if `p` is higher or equal to 0 and `(-p, inf)` otherwise. + +### `activeOffsetY` + +Range along Y axis (in points) where fingers travels without activation of handler. Moving outside of this range implies activation of handler. Range can be given as an array or a single number. +If range is set as an array, first value must be lower or equal to 0, a the second one higher or equal to 0. +If only one number `p` is given a range of `(-inf, p)` will be used if `p` is higher or equal to 0 and `(-p, inf)` otherwise. + +### `failOffsetY` + +When the finger moves outside this range (in points) along Y axis and handler hasn't yet activated it will fail recognizing the gesture. Range can be given as an array or a single number. +If range is set as an array, first value must be lower or equal to 0, a the second one higher or equal to 0. +If only one number `p` is given a range of `(-inf, p)` will be used if `p` is higher or equal to 0 and `(-p, inf)` otherwise. + +### `failOffsetX` + +When the finger moves outside this range (in points) along X axis and handler hasn't yet activated it will fail recognizing the gesture. Range can be given as an array or a single number. +If range is set as an array, first value must be lower or equal to 0, a the second one higher or equal to 0. +If only one number `p` is given a range of `(-inf, p)` will be used if `p` is higher or equal to 0 and `(-p, inf)` otherwise. + +### `maxDeltaX` + +> This method is deprecated but supported for backward compatibility. Instead of using `maxDeltaX={N}` you can do `failOffsetX={[-N, N]}`. + +When the finger travels the given distance expressed in points along X axis and handler hasn't yet [activated](../basics/state.md#active) it will fail recognizing the gesture. + +### `maxDeltaY` + +> This method is deprecated but supported for backward compatibility. Instead of using `maxDeltaY={N}` you can do `failOffsetY={[-N, N]}`. + +When the finger travels the given distance expressed in points along Y axis and handler hasn't yet [activated](../basics/state.md#active) it will fail recognizing the gesture. + +### `minOffsetX` + +> This method is deprecated but supported for backward compatibility. Instead of using `minOffsetX={N}` you can do `activeOffsetX={N}`. + +Minimum distance along X (in points) axis the finger (or multiple finger) need to travel before the handler [activates](../basics/state.md#active). If set to a lower or equal to 0 value we expect the finger to travel "left" by the given distance. When set to a higher or equal to 0 number the handler will activate on a movement to the "right". If you wish for the movement direction to be ignored use [`minDeltaX`](#mindeltax) instead. + +### `minOffsetY` + +> This method is deprecated but supported for backward compatibility. Instead of using `minOffsetY={N}` you can do `activeOffsetY={N}`. + +Minimum distance along Y (in points) axis the finger (or multiple finger) need to travel before the handler [activates](../basics/state.md#active). If set to a lower or equal to 0 value we expect the finger to travel "up" by the given distance. When set to a higher or equal to 0 number the handler will activate on a movement to the "bottom". If you wish for the movement direction to be ignored use [`minDeltaY`](#mindeltay) instead. + +### `minDeltaX` + +> This method is deprecated but supported for backward compatibility. Instead of using `minDeltaX={N}` you can do `activeOffsetX={[-N, N]}`. + +Minimum distance along X (in points) axis the finger (or multiple finger) need to travel (left or right) before the handler [activates](../basics/state.md#active). Unlike [`minoffsetx`](#minoffsetx) this parameter accepts only non-lower or equal to 0 numbers that represents the distance in point units. If you want for the handler to [activate](../basics/state.md#active) for the movement in one particular direction use [`minOffsetX`](#minoffsetx) instead. + +### `minDeltaY` + +> This method is deprecated but supported for backward compatibility. Instead of using `minDeltaY={N}` you can do `activeOffsetY={[-N, N]}`. + +Minimum distance along Y (in points) axis the finger (or multiple finger) need to travel (top or bottom) before the handler [activates](../basics/state.md#active). Unlike [`minOffsetY`](#minoffsety) this parameter accepts only non-lower or equal to 0 numbers that represents the distance in point units. If you want for the handler to [activate](../basics/state.md#active) for the movement in one particular direction use [`minOffsetY`](#minoffsety) instead. + +### `avgTouches` (Android only) + +### `enableTrackpadTwoFingerGesture` (iOS only) + +Enables two-finger gestures on supported devices, for example iPads with trackpads. If not enabled the gesture will require click + drag, with enableTrackpadTwoFingerGesture swiping with two fingers will also trigger the gesture. + +## Event data + +See [set of event attributes from base handler class](./common-gh.md#event-data). Below is a list of gesture event attributes specific to `PanGestureHandler`: + +### `translationX` + +Translation of the pan gesture along X axis accumulated over the time of the gesture. The value is expressed in the point units. + +### `translationY` + +Translation of the pan gesture along Y axis accumulated over the time of the gesture. The value is expressed in the point units. + +### `velocityX` + +Velocity of the pan gesture along the X axis in the current moment. The value is expressed in point units per second. + +### `velocityY` + +Velocity of the pan gesture along the Y axis in the current moment. The value is expressed in point units per second. + +### `x` + +X coordinate of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the view attached to the handler. Expressed in point units. + +### `y` + +Y coordinate of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the view attached to the handler. Expressed in point units. + +### `absoluteX` + +X coordinate of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the window. The value is expressed in point units. It is recommended to use it instead of [`x`](#x) in cases when the original view can be transformed as an effect of the gesture. + +### `absoluteY` + +Y coordinate of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the window. The value is expressed in point units. It is recommended to use it instead of [`y`](#y) in cases when the original view can be transformed as an effect of the gesture. + +## Example + +See the [draggable example](https://github.com/software-mansion/react-native-gesture-handler/blob/main/example/src/basic/draggable/index.tsx) from Gesture Handler Example App. + +```js +import React, { Component } from 'react'; +import { Animated, Dimensions } from 'react-native'; +import { + GestureHandlerRootView, + PanGestureHandler, +} from 'react-native-gesture-handler'; + +const { width } = Dimensions.get('screen'); +const circleRadius = 30; + +class Circle extends Component { + _touchX = new Animated.Value(width / 2 - circleRadius); + + _onPanGestureEvent = Animated.event([{ nativeEvent: { x: this._touchX } }], { + useNativeDriver: true, + }); + + render() { + return ( + + + + + + + + ); + } +} + +export default function App() { + return ; +} +``` diff --git a/docs/versioned_docs/version-2.4.0/gesture-handlers/api/pinch-gh.md b/docs/versioned_docs/version-2.4.0/gesture-handlers/api/pinch-gh.md new file mode 100644 index 0000000000..ac8c9b357c --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/gesture-handlers/api/pinch-gh.md @@ -0,0 +1,89 @@ +--- +id: pinch-gh +title: PinchGestureHandler +sidebar_label: Pinch +--- + +:::info +We recently released RNGH 2.0 with new Gestures system. Check out [RNGH 2.0 +section in Introduction](../../introduction.md#rngh-20) for more information. +::: + +A continuous gesture handler that recognizes pinch gesture. It allows for tracking the distance between two fingers and use that information to scale or zoom your content. +The handler [activates](../basics/state.md#active) when fingers are placed on the screen and change their position. +Gesture callback can be used for continuous tracking of the pinch gesture. It provides information about velocity, anchor (focal) point of gesture and scale. + +The distance between the fingers is reported as a scale factor. At the beginning of the gesture, the scale factor is 1.0. As the distance between the two fingers increases, the scale factor increases proportionally. +Similarly, the scale factor decreases as the distance between the fingers decreases. +Pinch gestures are used most commonly to change the size of objects or content onscreen. +For example, map views use pinch gestures to change the zoom level of the map. + +The handler is implemented using [UIPinchGestureRecognizer](https://developer.apple.com/documentation/uikit/uipinchgesturerecognizer) on iOS and from scratch on Android. + +## Properties + +Properties provided to `PinchGestureHandler` do not extend [common set of properties from base handler class](./common-gh.md#properties). + +## Event data + +See [set of event attributes from base handler class](./common-gh.md#event-data). Below is a list of gesture event attributes specific to `PinchGestureHandler`: + +### `scale` + +The scale factor relative to the points of the two touches in screen coordinates. + +### `velocity` + +Velocity of the pan gesture the current moment. The value is expressed in point units per second. + +### `focalX` + +Position expressed in points along X axis of center anchor point of gesture + +### `focalY` + +Position expressed in points along Y axis of center anchor point of gesture + +## Example + +See the [scale and rotation example](https://github.com/software-mansion/react-native-gesture-handler/blob/main/example/src/recipes/scaleAndRotate/index.tsx) from Gesture Handler Example App. + +```js +export class PinchableBox extends React.Component { + _baseScale = new Animated.Value(1); + _pinchScale = new Animated.Value(1); + _scale = Animated.multiply(this._baseScale, this._pinchScale); + _lastScale = 1; + _onPinchGestureEvent = Animated.event( + [{ nativeEvent: { scale: this._pinchScale } }], + { useNativeDriver: USE_NATIVE_DRIVER } + ); + + _onPinchHandlerStateChange = (event) => { + if (event.nativeEvent.oldState === State.ACTIVE) { + this._lastScale *= event.nativeEvent.scale; + this._baseScale.setValue(this._lastScale); + this._pinchScale.setValue(1); + } + }; + + render() { + return ( + + + + + + ); + } +} +``` diff --git a/docs/versioned_docs/version-2.4.0/gesture-handlers/api/rotation-gh.md b/docs/versioned_docs/version-2.4.0/gesture-handlers/api/rotation-gh.md new file mode 100644 index 0000000000..b5dde52b55 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/gesture-handlers/api/rotation-gh.md @@ -0,0 +1,84 @@ +--- +id: rotation-gh +title: RotationGestureHandler +sidebar_label: Rotation +--- + +:::info +We recently released RNGH 2.0 with new Gestures system. Check out [RNGH 2.0 +section in Introduction](../../introduction.md#rngh-20) for more information. +::: + +A continuous gesture handler that can recognize a rotation gesture and track its movement. + +The handler [activates](../basics/state.md#active) when fingers are placed on the screen and change position in a proper way. + +Gesture callback can be used for continuous tracking of the rotation gesture. It provides information about the gesture such as the amount rotated, the focal point of the rotation (anchor), and its instantaneous velocity. + +The handler is implemented using [UIRotationGestureRecognizer](https://developer.apple.com/documentation/uikit/uirotationgesturerecognizer) on iOS and from scratch on Android. + +## Properties + +Properties provided to `RotationGestureHandler` do not extend [common set of properties from base handler class](./common-gh.md#properties). + +## Event data + +See [set of event attributes from base handler class](./common-gh.md#event-data). Below is a list of gesture event attributes specific to `RotationGestureHandler`: + +### `rotation` + +Amount rotated, expressed in radians, from the gesture's focal point (anchor). + +### `velocity` + +Instantaneous velocity, expressed in point units per second, of the gesture. + +### `anchorX` + +X coordinate, expressed in points, of the gesture's central focal point (anchor). + +### `anchorY` + +Y coordinate, expressed in points, of the gesture's central focal point (anchor). + +## Example + +See the [scale and rotation example](https://github.com/software-mansion/react-native-gesture-handler/blob/main/example/src/recipes/scaleAndRotate/index.tsx) from Gesture Handler Example App. + +```js +class RotableBox extends React.Component { + _rotate = new Animated.Value(0); + _rotateStr = this._rotate.interpolate({ + inputRange: [-100, 100], + outputRange: ['-100rad', '100rad'], + }); + _lastRotate = 0; + _onRotateGestureEvent = Animated.event( + [{ nativeEvent: { rotation: this._rotate } }], + { useNativeDriver: USE_NATIVE_DRIVER } + ); + _onRotateHandlerStateChange = (event) => { + if (event.nativeEvent.oldState === State.ACTIVE) { + this._lastRotate += event.nativeEvent.rotation; + this._rotate.setOffset(this._lastRotate); + this._rotate.setValue(0); + } + }; + render() { + return ( + + + + ); + } +} +``` diff --git a/docs/versioned_docs/version-2.4.0/gesture-handlers/api/tap-gh.md b/docs/versioned_docs/version-2.4.0/gesture-handlers/api/tap-gh.md new file mode 100644 index 0000000000..9eebabe7ba --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/gesture-handlers/api/tap-gh.md @@ -0,0 +1,92 @@ +--- +id: tap-gh +title: TapGestureHandler +sidebar_label: Tap +--- + +:::info +We recently released RNGH 2.0 with new Gestures system. Check out [RNGH 2.0 +section in Introduction](../../introduction.md#rngh-20) for more information. +::: + +A discrete gesture handler that recognizes one or many taps. + +Tap gestures detect one or more fingers briefly touching the screen. +The fingers involved in these gestures must not move significantly from their initial touch positions. +The required number of taps and allowed distance from initial position may be configured. +For example, you might configure tap gesture recognizers to detect single taps, double taps, or triple taps. + +In order for a handler to [activate](../basics/state.md#active), specified gesture requirements such as minPointers, numberOfTaps, maxDist, maxDurationMs, and maxDelayMs (explained below) must be met. Immediately after the handler [activates](../basics/state.md#active), it will [END](../basics/state.md#end). + +## Properties + +See [set of properties inherited from base handler class](./common-gh.md#properties). Below is a list of properties specific to the `TapGestureHandler` component: + +### `minPointers` + +Minimum number of pointers (fingers) required to be placed before the handler [activates](../basics/state.md#active). Should be a positive integer. The default value is 1. + +### `maxDurationMs` + +Maximum time, expressed in milliseconds, that defines how fast a finger must be released after a touch. The default value is 500. + +### `maxDelayMs` + +Maximum time, expressed in milliseconds, that can pass before the next tap — if many taps are required. The default value is 500. + +### `numberOfTaps` + +Number of tap gestures required to [activate](../basics/state.md#active) the handler. The default value is 1. + +### `maxDeltaX` + +Maximum distance, expressed in points, that defines how far the finger is allowed to travel along the X axis during a tap gesture. If the finger travels further than the defined distance along the X axis and the handler hasn't yet [activated](../basics/state.md#active), it will fail to recognize the gesture. + +### `maxDeltaY` + +Maximum distance, expressed in points, that defines how far the finger is allowed to travel along the Y axis during a tap gesture. If the finger travels further than the defined distance along the Y axis and the handler hasn't yet [activated](../basics/state.md#active), it will fail to recognize the gesture. + +### `maxDist` + +Maximum distance, expressed in points, that defines how far the finger is allowed to travel during a tap gesture. If the finger travels further than the defined distance and the handler hasn't yet [activated](../basics/state.md#active), it will fail to recognize the gesture. + +## Event data + +See [set of event attributes from base handler class](./common-gh.md#event-data). Below is a list of gesture event attributes specific to the `TapGestureHandler` component: + +### `x` + +X coordinate, expressed in points, of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the view attached to the handler. + +### `y` + +Y coordinate, expressed in points, of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the view attached to the handler. + +### `absoluteX` + +X coordinate, expressed in points, of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the window. It is recommended to use `absoluteX` instead of [`x`](#x) in cases when the view attached to the handler can be transformed as an effect of the gesture. + +### `absoluteY` + +Y coordinate, expressed in points, of the current position of the pointer (finger or a leading pointer when there are multiple fingers placed) relative to the window. It is recommended to use `absoluteY` instead of [`y`](#y) in cases when the view attached to the handler can be transformed as an effect of the gesture. + +## Example + +See the [multitap example](https://github.com/software-mansion/react-native-gesture-handler/blob/main/example/src/basic/multitap/index.tsx) from GestureHandler Example App. + +```js +export class PressBox extends Component { + doubleTapRef = React.createRef(); + render() { + return ( + + + + + + ); + } +} +``` diff --git a/docs/versioned_docs/version-2.4.0/gesture-handlers/basics/about-handlers.md b/docs/versioned_docs/version-2.4.0/gesture-handlers/basics/about-handlers.md new file mode 100644 index 0000000000..4c2062a24f --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/gesture-handlers/basics/about-handlers.md @@ -0,0 +1,129 @@ +--- +id: about-handlers +title: About Gesture Handlers +sidebar_label: About Gesture Handlers +--- + +Gesture handlers are the core building blocks of this library. +We use this term to describe elements of the native touch system that the library allows us to instantiate and control from Javascript using [React's Component](https://reactjs.org/docs/react-component.html) interface. + +Each handler type is capable of recognizing one type of gesture (pan, pinch, etc.) and provides gesture-specific information via events (translation, scale, etc.). + +Handlers analyze touch stream synchronously in the UI thread. This allows for uninterrupted interactions even when the Javascript thread is blocked. + +Each handler works as an isolated state machine. It takes touch stream as an input and based on it, it can flip between [states](./state.md). +When a gesture starts, based on the position where the finger was placed, a set of handlers that may be interested in recognizing the gesture is selected. +All the touch events (touch down, move, up, or when other fingers are placed or lifted) are delivered to all of the handlers selected initially. +When one gesture becomes [active](./state.md#active), it cancels all the other gestures (read more about how to influence this process in ["Cross handler interactions"](./interactions.md) section). + +Gesture handler components do not instantiate a native view in the view hierarchy. Instead, they are kept in library's own registry and are only connected to native views. When using any of the gesture handler components, it is important for it to have a native view rendered as a child. +Since handler components don't have corresponding views in the hierarchy, the events registered with them are actually hooked into the underlying view. + +### Available gesture handlers + +Currently, the library provides the following list of gestures. Their parameters and attributes they provide to gesture events are documented under each gesture page: + +- [`PanGestureHandler`](../api/pan-gh.md) +- [`TapGestureHandler`](../api/tap-gh.md) +- [`LongPressGestureHandler`](../api/longpress-gh.md) +- [`RotationGestureHandler`](../api/rotation-gh.md) +- [`FlingGestureHandler`](../api/fling-gh.md) +- [`PinchGestureHandler`](../api/pinch-gh.md) +- [`ForceTouchGestureHandler`](../api/force-gh.md) + +### Discrete vs continuous + +We distinguish between two types of gestures: discrete and continuous. + +Continuous gesture handlers can be [active](./state.md#active) for a long period of time and will generate a stream of [gesture events](../api/common-gh.md#ongestureevent) until the gesture is [over](./state.md#ended). +An example of a continuous handler is [`PanGestureHandler`](../api/pan-gh.md) that once [activated](./state.md#active), will start providing updates about [translation](../api/pan-gh.md#translationx) and other properties. + +On the other hand, discrete gesture handlers once [activated](./state.md#active) will not stay in the active state but will [end](./state.md#ended) immediately. +[`LongPressGestureHandler`](../api/longpress-gh.md) is a discrete handler, as it only detects if the finger is placed for a sufficiently long period of time, it does not track finger movements (as that's the responsibility of [`PanGestureHandler`](../api/pan-gh.md)). + +Keep in mind that `onGestureEvent` is only generated in continuous gesture handlers and shouldn't be used in the `TapGestureHandler` and other discrete handlers. + +### Nesting handlers + +Handler components can be nested. In any case it is recommended that the innermost handler renders a native view component. There are some limitations that apply when [using `useNativeDriver` flag](#events-with-usenativedriver). An example of nested handlers: + +```js +class Multitap extends Component { + render() { + return ( + + + + + + + + ); + } +} +``` + +### Using native components + +Gesture handler library exposes a set of components normally available in React Native that are wrapped in [`NativeViewGestureHandler`](../api/nativeview-gh.md). +Here is a list of exposed components: + +- `ScrollView` +- `FlatList` +- `Switch` +- `TextInput` +- `DrawerLayoutAndroid` (**Android only**) + +If you want to use other handlers or [buttons](../../api/components/buttons.mdx) nested in a `ScrollView`, use the [`waitFor`](../api/common-gh.md#waitfor) property to define interaction between a handler and `ScrollView` + +### Events with `useNativeDriver` + +Because handlers do not instantiate native views but instead hook up to their child views, directly nesting two gesture handlers using `Animated.event` is not currently supported. +To workaround this limitation we recommend placing an `` component in between the handlers. + +Instead of doing: + +```js +const PanAndRotate = () => ( + + + + + +); +``` + +Place an `` in between the handlers: + +```js +const PanAndRotate = () => ( + + + + + + + +); +``` + +Another consequence of handlers depending on their native child components is that when using a `useNativeDriver` flag with an `Animated.event`, the child component must be wrapped by an `Animated.API` e.g. `` instead of just a ``: + +```js +class Draggable extends Component { + render() { + return ( + + {/* <-- NEEDS TO BE Animated.View */} + + ); + } +}; +``` diff --git a/docs/versioned_docs/version-2.4.0/gesture-handlers/basics/interactions.md b/docs/versioned_docs/version-2.4.0/gesture-handlers/basics/interactions.md new file mode 100644 index 0000000000..5b7408cf5f --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/gesture-handlers/basics/interactions.md @@ -0,0 +1,97 @@ +--- +id: interactions +title: Cross handler interactions +sidebar_label: Cross handler interactions +--- + +Gesture handlers can "communicate" with each other to support complex gestures and control how they _[activate](./state.md#active)_ in certain scenarios. + +There are two means of achieving that described in the sections below. +In each case, it is necessary to provide a reference of one handler as a property to the other. +Gesture handler relies on ref objects created using [`React.createRef()`](https://reactjs.org/docs/refs-and-the-dom.html) and introduced in [React 16.3](https://reactjs.org/blog/2018/03/29/react-v-16-3.html#createref-api). + +## Simultaneous recognition + +By default, only one gesture handler is allowed to be in the [`ACTIVE`](./state.md#active) state. +So when a gesture handler recognizes a gesture it [cancels](./state.md#cancelled) all other handlers in the [`BEGAN`](./state.md#began) state and prevents any new handlers from receiving a stream of touch events as long as it remains [`ACTIVE`](./state.md#active). + +This behavior can be altered using the [`simultaneousHandlers`](../api/common-gh.md#simultaneousHandlers) property (available for all types of handlers). +This property accepts a ref or an array of refs to other handlers. +Handlers connected in this way will be allowed to remain in the [`ACTIVE`](./state.md#active) state at the same time. + +### Use cases + +Simultaneous recognition needs to be used when implementing a photo preview component that supports zooming (scaling) the photo, rotating and panning it while zoomed in. +In this case we would use a [`PinchGestureHandler`](../api/pinch-gh.md), [`RotationGestureHandler`](../api/rotation-gh.md) and [`PanGestureHandler`](../api/pan-gh.md) that would have to simultaneously recognize gestures. + +### Example + +See the ["Scale, rotate & tilt" example](https://github.com/software-mansion/react-native-gesture-handler/blob/main/example/src/recipes/scaleAndRotate/index.tsx) from the GestureHandler Example App or view it directly on your phone by visiting [our expo demo](https://snack.expo.io/@adamgrzybowski/react-native-gesture-handler-demo). + +```js +class PinchableBox extends React.Component { + // ...take a look on full implementation in an Example app + render() { + const imagePinch = React.createRef(); + const imageRotation = React.createRef(); + return ( + + + + + + + + + + ); + } +} +``` + +## Awaiting other handlers + +### Use cases + +A good example where awaiting is necessary is when we want to have single and double tap handlers registered for one view (a button). +In such a case we need to make single tap handler await a double tap. +Otherwise if we try to perform a double tap the single tap handler will fire just after we hit the button for the first time, consequently [cancelling](./state.md#cancelled) the double tap handler. + +### Example + +See the ["Multitap" example](https://github.com/software-mansion/react-native-gesture-handler/blob/main/example/src/basic/multitap/index.tsx) from GestureHandler Example App or view it directly on your phone by visiting [our expo demo](https://snack.expo.io/@adamgrzybowski/react-native-gesture-handler-demo). + +```js +const doubleTap = React.createRef(); +const PressBox = () => ( + + nativeEvent.state === State.ACTIVE && Alert.alert('Single tap!') + } + waitFor={doubleTap}> + + nativeEvent.state === State.ACTIVE && Alert.alert("You're so fast") + } + numberOfTaps={2}> + + + +); +``` diff --git a/docs/versioned_docs/version-2.4.0/gesture-handlers/basics/state.md b/docs/versioned_docs/version-2.4.0/gesture-handlers/basics/state.md new file mode 100644 index 0000000000..1f15f94f2f --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/gesture-handlers/basics/state.md @@ -0,0 +1,88 @@ +--- +id: state +title: Handler State +sidebar_label: Handler State +--- + +As described in ["About Gesture Handlers"](./about-handlers.md), gesture handlers can be treated as ["state machines"](https://en.wikipedia.org/wiki/Finite-state_machine). +At any given time, each handler instance has an assigned state that can change when new touch events occur or can be forced to change by the touch system in certain circumstances. + +A gesture handler can be in one of the six possible states: + +- [UNDETERMINED](#undetermined) +- [FAILED](#failed) +- [BEGAN](#began) +- [CANCELLED](#cancelled) +- [ACTIVE](#active) +- [END](#end) + +Each state has its own description below. + +## Accessing state + +We can monitor a handler's state changes by using the [`onHandlerStateChange`](../api/common-gh.md#onhandlerstatechange) callback and the destructured `nativeEvent` argument passed to it. +This can be done by comparing the `nativeEvent`'s [`state`](../api/common-gh.md#state) attribute to one of the constants exported under the `State` object (see example below). + +``` +import { State, LongPressGestureHandler } from 'react-native-gesture-handler'; + +class Demo extends Component { + _handleStateChange = ({ nativeEvent }) => { + if (nativeEvent.state === State.ACTIVE) { + Alert.alert('Longpress'); + } + }; + render() { + return ( + + Longpress me + + ); + } +} +``` + +## State flows + +The most typical flow of state is when a gesture handler picks up on an initial touch event then recognizes it then acknowledges its ending then resets itself back to the initial state. + +The flow looks as follows (longer arrows represent that there are possibly more touch events received before the state changes): + +[`UNDETERMINED`](#undetermined) -> [`BEGAN`](#began) ------> [`ACTIVE`](#active) ------> [`END`](#end) -> [`UNDETERMINED`](#undetermined) + +Another possible flow is when a handler receives touches that cause a recognition failure: + +[`UNDETERMINED`](#undetermined) -> [`BEGAN`](#began) ------> [`FAILED`](#failed) -> [`UNDETERMINED`](#undetermined) + +At last, when a handler does properly recognize the gesture but then is interrupted by the touch system. In that case, the gesture recognition is canceled and the flow looks as follows: + +[`UNDETERMINED`](#undetermined) -> [`BEGAN`](#began) ------> [`ACTIVE`](#active) ------> [`CANCELLED`](#cancelled) -> [`UNDETERMINED`](#undetermined) + +## States + +The section below describes all possible handler states: + +### UNDETERMINED + +This is the initial state of each handler and it goes into this state after it's done recognizing a gesture. + +### FAILED + +A handler received some touches but for some reason didn't recognize them. For example, if a finger travels more distance than a defined `maxDist` property allows, then the handler won't become active but will fail instead. Afterwards, it's state will be reset to `UNDETERMINED`. + +### BEGAN + +Handler has started receiving touch stream but hasn't yet received enough data to either [fail](#failed) or [activate](#active). + +### CANCELLED + +The gesture recognizer has received a signal (possibly new touches or a command from the touch system controller) resulting in the cancellation of a continuous gesture. The gesture's state will become `CANCELLED` until it is finally reset to the initial state, `UNDETERMINED`. + +### ACTIVE + +Handler has recognized a gesture. It will become and stay in the `ACTIVE` state until the gesture finishes (e.g. when user lifts the finger) or gets cancelled by the touch system. Under normal circumstances the state will then turn into `END`. In the case that a gesture is cancelled by the touch system, its state would then become `CANCELLED`. +Learn about [discrete and continuous handlers here](about-handlers#discrete-vs-continuous) to understand how long a handler can be kept in the `ACTIVE` state. + +### END + +The gesture recognizer has received touches signalling the end of a gesture. Its state will become `END` until it is reset to `UNDETERMINED`. diff --git a/docs/versioned_docs/version-2.4.0/guides/migrating-off-rnghenabledroot.md b/docs/versioned_docs/version-2.4.0/guides/migrating-off-rnghenabledroot.md new file mode 100644 index 0000000000..b72293fa64 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/guides/migrating-off-rnghenabledroot.md @@ -0,0 +1,45 @@ +--- +id: migrating-off-rnghenabledroot +title: Migrating off RNGHEnabledRootView +--- + +## Update `MainActivity.java` + +Update your `MainActivity.java` file (or wherever you create an instance of `ReactActivityDelegate`), so that it no longer overrides the method responsible for creating `ReactRootView` instance, or modify it so that it no longer uses `RNGestureHandlerEnabledRootView`. Do not forget to remove import for `RNGestureHandlerEnabledRootView`: + +```java +package com.swmansion.gesturehandler.react.example; + +import com.facebook.react.ReactActivity; +- import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView; +public class MainActivity extends ReactActivity { + +- @Override +- protected ReactActivityDelegate createReactActivityDelegate() { +- return new ReactActivityDelegate(this, getMainComponentName()) { +- @Override +- protected ReactRootView createRootView() { +- return new RNGestureHandlerEnabledRootView(MainActivity.this); +- } +- }; +- } +} +``` + +## Check if your app works correctly + +Some libraries (for example React Navigation) already use `GestureHandlerRootView` as a wrapper to enable gesture interactions. In that case you don't have to add one yourself. If gestures in your app work as expected after removing `RNGestureHandlerEnabledRootView` you can skip the next step. + +## Update your JS code + +Instead of using `RNGestureHandlerEnabledRootView` wrap your entry point with `` or `gestureHandlerRootHOC`, for example: + +```jsx +export default function App() { + return {/* content */}; +} +``` + +:::info +Note that `GestureHandlerRootView` acts like a normal `View`. So if you want it to fill the screen, you will need to pass `{ flex: 1 }` like you'll need to do with a normal View. By default, it'll take the size of the content nested inside. +::: \ No newline at end of file diff --git a/docs/versioned_docs/version-2.4.0/guides/testing.md b/docs/versioned_docs/version-2.4.0/guides/testing.md new file mode 100644 index 0000000000..980160bdbd --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/guides/testing.md @@ -0,0 +1,28 @@ +--- +id: testing +title: Testing with Jest +--- + +## Mocking native modules + +In order to load mocks provided by RNGH add following to your jest config in `package.json`: + +```json +"setupFiles": ["./node_modules/react-native-gesture-handler/jestSetup.js"] +``` + +Example: + +```json +"jest": { + "preset": "react-native", + "setupFiles": ["./node_modules/react-native-gesture-handler/jestSetup.js"] +} +``` + +## Testing Gestures' and Gesture handlers' callbacks + +RNGH provides an API for triggering selected handlers: + +- [`fireGestureHandler(gestureOrHandler, eventList)`](../api/test-api#firegesturehandlergestureorhandler-eventlist) +- [`getByGestureTestId(testID)`](../api/test-api#getbygesturetestidtestid) diff --git a/docs/versioned_docs/version-2.4.0/guides/upgrading-to-2.md b/docs/versioned_docs/version-2.4.0/guides/upgrading-to-2.md new file mode 100644 index 0000000000..36ff261b6e --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/guides/upgrading-to-2.md @@ -0,0 +1,116 @@ +--- +id: upgrading-to-2 +title: Upgrading to the new API introduced in Gesture Handler 2 +--- + +## Make sure to migrate off the `RNGestureHandlerEnabledRootView` (Android only) + +Gesture Handler 1 required you to override `createRootView` to return an instance of `RNGestureHandlerEnabledRootView`. This class has been the cause of many hard to debug and fix crashed and was deprecated in version 2.0, and subsequently removed in version 2.4. If you are still using it, check out [migrating off RNGHEnabledRootView guide](./migrating-off-rnghenabledroot.md). + +## Upgrading to the new API + +The most important change brought by the Gesture Handler 2 is the new Gesture API, along with the `GestureDetector` component. It makes declaring gesture easier, as it handles much of the work under the hood and reduces the amount of necessary boilerplate code. Instead of a separate component for every type of gesture, the `GestureDetector` component is used to attach gestures to the underlying view based on the configuration object passed to it. The configuration objects are created using the `Gesture` object, here is a simple example: + +```jsx +const tapGesture = Gesture.Tap().onStart(() => { + console.log('Tap!'); +}); +... +return ( + + + +); +``` + +As you can see, there are no `onGestureEvent` and `onHandlerStateChange` callbacks, instead the state machine is handled under the hood and relevant callbacks are called for specific transitions or events: +- `onBegin` - called when the gesture transitions to the `BEGAN` state, which in most cases is when the gesture starts processing the touch stream - when the finger first touches the view +- `onStart` - called when the activation criteria for the gesture are met and it transitions from `BEGAN` to `ACTIVE` state +- `onUpdate` - replaces `onGestureEvent`, called every time the gesture sends a new event while it's in the `ACTIVE` state +- `onChange` - if defined, called just after `onUpdate`, the events passed to it are the same as the ones passed to `onUpdate` but they also contain `change` values which hold the change in value they represent since the last event (i.e. in case of the `Pan` gesture, the event will also contain `changeX` and `changeY` properties) +- `onEnd` - called when the gesture transitions from the `ACTIVE` state to either of `END`, `FAILED` or `CANCELLED` - you can tell whether the gesture finished due to user interaction or because of other reason (like getting cancelled by the system, or failure criteria) using the second value passed to the `onEnd` callback alongside the event +- `onFinalize` called when the gesture transitions into either of `END`, `FAILED` or `CANCELLED` state, if the gesture was `ACTIVE`, `onEnd` will be called first (similarily to `onEnd` you can determine the reason for finishing using the second argument) + +The difference between `onEnd` and `onFinalize` is that the `onEnd` will be called only if the gesture was `ACTIVE`, while `onFinalize` will be called if the gesture has `BEGAN`. This means that you can use `onEnd` to clean up after `onStart`, and `onFinalize` to clean up after `onBegin` (or both `onBegin` and `onStart`). + +### Configuring the gestures + +The new gesture objects are configured in the builder-like pattern. Instead of properties, each gesture provides methods that allow for its customization. In most cases the names of the methods are the same as the relevant props, ot at least very similar. For example: + +```jsx +return ( + { + if (nativeEvent.state === State.ACTIVE) { + console.log('Tap!'); + } + }}> + + +); +``` + +Would have the same effect as: + +```jsx +const tapGesture = Gesture.Tap() + .numberOfTaps(2) + .maxDuration(500) + .maxDelay(500) + .maxDistance(10) + .onStart(() => { + console.log('Tap!'); + }); + +return ( + + + +); +``` + +You can check the modifiers available to specific gestures in the API Reference under Gestures. + +### Using multiple gestures on the same view + +Using the gesture handler components, if you wanted to have multiple gestures on one view, you would have to stack them on top of each other and, in case you wanted to use animations, add an `Animated.View` after each handler, resulting in a deep component tree, for example: + +```jsx +return ( + + + + + + + + + + + +); +``` + +With the `GestureDetector` you can use the [Gesture Composition API](../gesture-composition.md) to stack the gestures onto one view: + +```jsx +const tapGesture = Gesture.Tap(); +const panGesture = Gesture.Pan(); +const pinchGesture = Gesture.Pinch(); + +return ( + + + +); +``` + +Similarily, you can use [`Gesture.Simultaneous`](../gesture-composition.md#simultaneous) to replace stacked gesture handlers that should be able to recognize gestures simultaneously, and [`Gesture.Exclusive`](../gesture-composition.md#exclusive) to replace stacked gesture handlers that require failure of others. + +### Replacing `waitFor` and `simultaneousHandlers` + +If you want to make relations between the gestures attached to the same view, you should use the [Gesture Composition API](../gesture-composition.md) described above. However, if you want to make a relation between gestures attached to different views, or between gesture and an old gesture handler, you should use `simultaneousWithExternalGesture` instead of `simultaneousHandlers`, and `requireExternalGestureToFail` instead of `waitFor`. In case you need a ref object to pass to an old gesture handler, you can set it to the gesture using `.withRef(refObject)` modifier. \ No newline at end of file diff --git a/docs/versioned_docs/version-2.4.0/installation.md b/docs/versioned_docs/version-2.4.0/installation.md new file mode 100644 index 0000000000..b56ff60575 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/installation.md @@ -0,0 +1,172 @@ +--- +id: installation +title: Installation +--- + +## Requirements + +| version | `react-native` version | +| --------- | ---------------------- | +| 1.4.0+ | 0.60.0+ | +| 1.1.0+ | 0.57.2+ | +| <1.1.0 | 0.50.0+ | + +It may be possible to use newer versions of react-native-gesture-handler on React Native with version <= 0.59 by reverse Jetifying. +Read more on that here https://github.com/mikehardy/jetifier#to-reverse-jetify--convert-node_modules-dependencies-to-support-libraries + +Note that if you wish to use [`React.createRef()`](https://reactjs.org/docs/refs-and-the-dom.html) support for [interactions](./gesture-handlers/basics/interactions.md) you need to use v16.3 of [React](https://reactjs.org/) + +In order to fully utilize the [touch events](./api/gestures/touch-events.md) you also need to use `react-native-reanimated` 2.3.0-beta.4 or newer. + +## Expo + +### Managed [Expo](https://expo.io) + +To use the version of react-native-gesture-handler that is compatible with your managed Expo project, run `expo install react-native-gesture-handler`. + +The Expo SDK incorporates the latest version of react-native-gesture-handler available at the time of each SDK release, so managed Expo apps might not always support all our latest features as soon as they are available. + +### Bare [React Native](http://facebook.github.io/react-native/) + +Since the library uses native support for handling gestures, it requires an extended installation to the norm. If you are starting a new project, you may want to initialize it with [expo-cli](https://docs.expo.io/versions/latest/workflow/expo-cli/) and use a bare template, they come pre-installed with react-native-gesture-handler. + +## JS + +First, install the library using `yarn`: + +```bash +yarn add react-native-gesture-handler +``` + +or with `npm` if you prefer: + +```bash +npm install --save react-native-gesture-handler +``` + +After installation, wrap your entry point with `` or +`gestureHandlerRootHOC`. + +For example: + +```js +export default function App() { + return {/* content */}; +} +``` + +:::info +If you use props such as `shouldCancelWhenOutside`, `simultaneousHandlers`, `waitFor` etc. with gesture handlers, the handlers need to be mounted under a single `GestureHandlerRootView`. So it's important to keep the `GestureHandlerRootView` as close to the actual root view as possible. + +Note that `GestureHandlerRootView` acts like a normal `View`. So if you want it to fill the screen, you will need to pass `{ flex: 1 }` like you'll need to do with a normal `View`. By default, it'll take the size of the content nested inside. +::: + +:::tip +If you're using gesture handler in your component library, you may want to wrap your library's code in the GestureHandlerRootView component. This will avoid extra configuration for the user. +::: + +### Linking + +> **Important**: You only need to do this step if you're using React Native 0.59 or lower. Since v0.60, linking happens automatically. + +```bash +react-native link react-native-gesture-handler +``` + +## Fabric +Starting with version 2.3.0, Gesture Handler now supports [Fabric](https://reactnative.dev/docs/fabric-renderer)!. To use Gesture Handler in your Fabric application you have to: +#### on iOS: +Install pods using `RCT_NEW_ARCH_ENABLED=1 pod install` – this is the same command you run to prepare a Fabric build but you also need to run it after a new native library gets added. +#### on Android: +There are no additional steps required so long as your app is configured to build with Fabric – this is typically configured by setting `newArchEnabled=true` in `gradle.properties` file in your project. + +### With [wix/react-native-navigation](https://github.com/wix/react-native-navigation) + +If you are using a native navigation library like [wix/react-native-navigation](https://github.com/wix/react-native-navigation) you need to make sure that every screen is wrapped with `GestureHandlerRootView` (you can do this using `gestureHandlerRootHOC` function). This can be done for example at the stage when you register your screens. Here's an example: + +```js +import { gestureHandlerRootHOC } from 'react-native-gesture-handler'; +import { Navigation } from 'react-native-navigation'; +import FirstTabScreen from './FirstTabScreen'; +import SecondTabScreen from './SecondTabScreen'; +import PushedScreen from './PushedScreen'; +// register all screens of the app (including internal ones) +export function registerScreens() { + Navigation.registerComponent('example.FirstTabScreen', + () => gestureHandlerRootHOC(FirstTabScreen), + () => FirstTabScreen + ); + Navigation.registerComponent('example.SecondTabScreen', + () => gestureHandlerRootHOC(SecondTabScreen), + () => SecondTabScreen + ); + Navigation.registerComponent('example.PushedScreen', + () => gestureHandlerRootHOC(PushedScreen), + () => PushedScreen + ); +} +``` + +You can check out [this example project](https://github.com/henrikra/nativeNavigationGestureHandler) to see this kind of set up in action. + +Remember that you need to wrap each screen that you use in your app with `GestureHandlerRootView` (you can do this using `gestureHandlerRootHOC` function) as with native navigation libraries each screen maps to a separate root view. It will not be enough to wrap the main screen only. + +## Android + +### Usage with modals on Android + +On Android RNGH does not work by default because modals are not located under React Native Root view in native hierarchy. +To fix that, components need to be wrapped with `gestureHandlerRootHOC` (it's no-op on iOS and web). + +For example: + +```js +const ExampleWithHoc = gestureHandlerRootHOC(() => ( + + + + ); +); + +export default function Example() { + return ( + + + + ); +} +``` + +### Kotlin + +Since version `2.0.0` RNGH has been rewritten with Kotlin. The default version of the Kotlin plugin used in this library is `1.5.20`. + +If you need to use a different Kotlin version, set the `kotlinVersion` ext property in `android/build.gradle` file and RNGH will use that version: + +``` +buildscript { + ext { + ... + kotlinVersion = "1.5.20" + } +} +``` + +The minimal version of the Kotlin plugin supported by RNGH is `1.4.10`. + +## iOS + +There is no additional configuration required on iOS except what follows in the next steps. + +If you're in a CocoaPods project (the default setup since React Native 0.60), +make sure to install pods before you run your app: + +```bash +cd ios && pod install +``` + +For React Native 0.61 or greater, add the library as the first import in your index.js file: + +```js +import 'react-native-gesture-handler'; +``` diff --git a/docs/versioned_docs/version-2.4.0/introduction.md b/docs/versioned_docs/version-2.4.0/introduction.md new file mode 100644 index 0000000000..1ccc550cc3 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/introduction.md @@ -0,0 +1,115 @@ +--- +id: introduction +title: Introduction +sidebar_label: Introduction +slug: / +--- + +Gesture Handler aims to replace React Native's built in touch system called [Gesture Responder System](http://facebook.github.io/react-native/docs/gesture-responder-system). + +The motivation for building this library was to address the performance limitations of React Native's Gesture Responder System and to provide more control over the built-in native components that can handle gestures. +We recommend [this talk](https://www.youtube.com/watch?v=V8maYc4R2G0) by [Krzysztof Magiera](https://twitter.com/kzzzf) in which he explains issues with the responder system. + +In a nutshell, the library provides: + +- A way to use a platform's native touch handling system for recognizing pinch, rotation and pan (besides a few other gestures). +- The ability to define relations between gesture handlers, e.g. when you have a pan handler in `ScrollView` you can make that `ScrollView` wait until it knows pan won't recognize. +- Mechanisms to use touchables that run in native thread and follow platform default behavior; e.g. in the event they are in a scrollable component, turning into pressed state is slightly delayed to prevent it from highlighting when you fling. + +:::info +It is recommended to use Reanimated 2 for animations when using React Native Gesture Handler as its more advanced features rely heavily on the worklets provided by Reanimated. +::: + +## RNGH 2.0 + +RNGH2 introduces a new way of creating gestures. Instead of creating a gesture handler component for every gesture you want to create, you just need to create a `GestureDetector` component and assign to it all the gestures you want it to recognize. It is also designed to work seamlessly with `Reanimated 2` and it will automatically detect if it is installed, and start using it if it is. +You can create gestures using the `Gesture` object and methods it provides, and configure them in the builder-like pattern. If you want to specify behavior between the gestures instead of using `waitFor` and `simultaneousGestures` you can use the new system of [gesture composition](./gesture-composition). +Along the new API, version 2.0 brings one of the most requested features: [pointer events and manual gestures](./manual-gestures/manual-gestures). Thanks to great work done by the Reanimated team, we were able to provide synchronous communication between gestures and their native implementation using worklets. This allows to manage gesture state from the JS without risking race-conditions. + +### Interoperability with gesture handlers + +The new API with gestures is somewhat compatible with the old gesture handlers. Unfortunately you cannot use the new gesture composing with gesture handlers, however you can still mark relations using refs. If you want to make a gesture handler wait for (or simultaneous with) a gesture, simply use withRef method on the gesture to set the ref object and pass it to the appropriate property on the gesture handler. + +Similarly, if you want to make a gesture simultaneous with (or wait for failure of) a gesture handler, set the ref prop of the gesture handler and pass the same ref to the simultaneousWithExternalGesture or requireExternalGestureToFail method on the gesture object. + +This should allow you to migrate your codebase from the gesture handlers to gestures smoothly and at your own pace. Just keep in mind that the gesture handlers cannot have the GestureDetector as their direct child, as it's a functional component. + +## Learning resources + +### Apps + +[Gesture Handler Example App](https://github.com/software-mansion/react-native-gesture-handler/blob/main/example) – official gesture handler "showcase" app. + +[Gesture Handler Example on Expo](https://snack.expo.io/@adamgrzybowski/react-native-gesture-handler-demo) – the official app you can install and play with using [Expo](https://expo.io). + +### Talks and workshops + +[Declarative future of gestures and animations in React Native](https://www.youtube.com/watch?v=kdq4z2708VM) by [Krzysztof Magiera](https://twitter.com/kzzzf) - talk that explains motivation behind creating gesture handler library. It also presents [react-native-reanimated](https://github.com/software-mansion/react-native-reanimated) and how and when it can be used with gesture handler. + +[React Native workshop with Expo team @ReactEurope 2018](https://youtu.be/JSIoE_ReeDk?t=41m49s) by [Brent Vetne](https://twitter.com/notbrent) – great workshop explaining gesture handler in details and presenting a few exercises that will help get you started. + +[Living in an async world of React Native](https://www.youtube.com/watch?v=-Izgons3mec) by [Krzysztof Magiera](https://twitter.com/kzzzf) – talk which highlights some issue with the React Native's touch system Gesture Handler aims to address. Also the motivation for building this library is explained. + +[React Native Touch & Gesture](https://www.youtube.com/watch?v=V8maYc4R2G0) by [Krzysztof Magiera](https://twitter.com/kzzzf) - talk explaining JS responder system limitations and points out some of the core features of Gesture Handler. + +## Contributing + +If you are interested in the project and want to contribute or support it in other ways don't hesitate to contact [me on Twitter](https://twitter.com/kzzzf)! + +All PRs are welcome, but talk to us before you start working on something big. + +The easiest way to get started with contributing code is by: + +- Reviewing the list of [open issues](https://github.com/software-mansion/react-native-gesture-handler/issues) and trying to solve the one that seem approachable to you. +- Updating the [documentation](https://github.com/software-mansion/react-native-gesture-handler/blob/main/docs) whenever you see some information is unclear, missing or out of date. + +Code is only one way how you can contribute. You may want to consider [replying on issues](https://github.com/software-mansion/react-native-gesture-handler/issues) if you know how to help. + +## Community + +We are very proud of the community that has been build around this package. We really appreciate all your help regardless of it is a pull request, issue report, helping others by commenting on existing issues or posting some demo or video tutorial on social media. +If you've build something with this library you'd like to share, please contact us as we'd love to help share it with others. + +### Gesture Handler Team 🚀 + +
+ +
+ +
Jakub Piasecki
+
+ +
+ +
Jakub Gonet
+
+ +
+ +
Krzysztof Magiera
+ @kzzzf +
+ +
+ +### Sponsors + +We really appreciate our sponsors! Thanks to them we can develop our library and make the react-native world a better place. Special thanks for: + +
+ + + + + +
diff --git a/docs/versioned_docs/version-2.4.0/manual-gestures/manual-gestures.md b/docs/versioned_docs/version-2.4.0/manual-gestures/manual-gestures.md new file mode 100644 index 0000000000..eae7fffd2d --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/manual-gestures/manual-gestures.md @@ -0,0 +1,77 @@ +--- +id: manual-gestures +title: Manual gestures +sidebar_label: Manual gestures +--- + +import Step, { Divider } from '@site/src/theme/Step'; +import Step1 from './step1.md'; +import Step2 from './step2.md'; +import Step3 from './step3.md'; +import Step4 from './step4.md'; +import Step5 from './step5.md'; +import Step6 from './step6.md'; +import Step7 from './step7.md'; + +RNGH2 finally brings one of the most requested features: manual gestures and touch events. To demonstrate how to make a manual gesture we will make a simple one that tracks all pointers on the screen. + + + + + First, we need a way to store information about the pointer: whether it should be visible and its position. + + + + + + + We also need a component to mark where a pointer is. In order to accomplish that we will make a component that accepts two shared values: one holding information about the pointer using the interface we just created, the other holding a bool indicating whether the gesture has activated. + In this example when the gesture is not active, the ball representing it will be blue and when it is active the ball will be red and slightly bigger. + + + + + + + Now we have to make a component that will handle the gesture and draw all the pointer indicators. We will store data about pointers in an array of size 12 as that is the maximum number of touches that RNGH will track, and render them inside an Animated.View. + + + + + + + We have our components set up and we can finally get to making the gesture! We will start with onTouchesDown where we need to set position of the pointers and make them visible. We can get this information from the touches property of the event. In this case we will also check how many pointers are on the screen and activate the gesture if there are at least two. + + + + + + + Next, we will handle pointer movement. In onTouchesMove we will simply update the position of moved pointers. + + + + + + + We also need to handle lifting fingers from the screen, which corresponds to onTouchesUp. Here we will just hide the pointers that were lifted and end the gesture if there are no more pointers on the screen. + Note that we are not handling onTouchesCancelled as in this very basic case we don't expect it to happen, however you should clear data about cancelled pointers (most of the time all active ones) when it is called. + + + + + + + Now that our pointers are being tracked correctly and we have the state management, we can handle activation and ending of the gesture. In our case, we will simply set the active shared value either to true or false. + + + + + +And that's all! As you can see using manual gestures is really easy but as you can imagine, manual gestures are a powerful tool that makes it possible to accomplish things that were previously impossible with RNGH. + +## Modifying existing gestures + +While manual gestures open great possibilities we are aware that reimplementing pinch or rotation from scratch just because you need to activate in specific circumstances or require position of the fingers, would be a waste of time as those gestures are already there. Because of that you can use touch events with every gesture so that you can extract more informations about gesture than is sent to you in events. We also added a `manualActivation` modifier on all continous gestures, which prevents the gesture it is applied to from activating by itself thus giving you full control of its behavior. + +This functionality makes another highly requested feature possible: drag after long press. Simply set `manualActivation` to `true` on a `PanGesture` and use `StateManager` to fail the gesture if the user attempts to drag the component sooner than the duration of the long press. diff --git a/docs/versioned_docs/version-2.4.0/manual-gestures/step1.md b/docs/versioned_docs/version-2.4.0/manual-gestures/step1.md new file mode 100644 index 0000000000..4c6331c1c8 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/manual-gestures/step1.md @@ -0,0 +1,7 @@ +```jsx +interface Pointer { + visible: boolean; + x: number; + y: number; +} +``` diff --git a/docs/versioned_docs/version-2.4.0/manual-gestures/step2.md b/docs/versioned_docs/version-2.4.0/manual-gestures/step2.md new file mode 100644 index 0000000000..3137d334ef --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/manual-gestures/step2.md @@ -0,0 +1,35 @@ +```jsx +function PointerElement(props: { + pointer: Animated.SharedValue, + active: Animated.SharedValue, +}) { + const animatedStyle = useAnimatedStyle(() => ({ + transform: [ + { translateX: props.pointer.value.x }, + { translateY: props.pointer.value.y }, + { + scale: + (props.pointer.value.visible ? 1 : 0) * + (props.active.value ? 1.3 : 1), + }, + ], + backgroundColor: props.active.value ? 'red' : 'blue', + })); + + return ; +} + +... + +const styles = StyleSheet.create({ + pointer: { + width: 60, + height: 60, + borderRadius: 30, + backgroundColor: 'red', + position: 'absolute', + marginStart: -30, + marginTop: -30, + }, +}); +``` diff --git a/docs/versioned_docs/version-2.4.0/manual-gestures/step3.md b/docs/versioned_docs/version-2.4.0/manual-gestures/step3.md new file mode 100644 index 0000000000..c9b32e5c2a --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/manual-gestures/step3.md @@ -0,0 +1,29 @@ +```jsx +export default function Example() { + const trackedPointers: Animated.SharedValue[] = []; + const active = useSharedValue(false); + + for (let i = 0; i < 12; i++) { + trackedPointers[i] = + useSharedValue < + Pointer > + { + visible: false, + x: 0, + y: 0, + }; + } + + const gesture = Gesture.Manual(); + + return ( + + + {trackedPointers.map((pointer, index) => ( + + ))} + + + ); +} +``` diff --git a/docs/versioned_docs/version-2.4.0/manual-gestures/step4.md b/docs/versioned_docs/version-2.4.0/manual-gestures/step4.md new file mode 100644 index 0000000000..36ec2c34bd --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/manual-gestures/step4.md @@ -0,0 +1,15 @@ +```jsx {2-15} +const gesture = Gesture.Manual().onTouchesDown((e, manager) => { + for (const touch of e.changedTouches) { + trackedPointers[touch.id].value = { + visible: true, + x: touch.x, + y: touch.y, + }; + } + + if (e.numberOfTouches >= 2) { + manager.activate(); + } +}); +``` diff --git a/docs/versioned_docs/version-2.4.0/manual-gestures/step5.md b/docs/versioned_docs/version-2.4.0/manual-gestures/step5.md new file mode 100644 index 0000000000..d2f9377cc8 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/manual-gestures/step5.md @@ -0,0 +1,13 @@ +```jsx {3-12} +const gesture = Gesture.Manual() + ... + .onTouchesMove((e, _manager) => { + for (const touch of e.changedTouches) { + trackedPointers[touch.id].value = { + visible: true, + x: touch.x, + y: touch.y, + }; + } + }) +``` diff --git a/docs/versioned_docs/version-2.4.0/manual-gestures/step6.md b/docs/versioned_docs/version-2.4.0/manual-gestures/step6.md new file mode 100644 index 0000000000..323f9516cb --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/manual-gestures/step6.md @@ -0,0 +1,17 @@ +```jsx {3-16} +const gesture = Gesture.Manual() + ... + .onTouchesUp((e, manager) => { + for (const touch of e.changedTouches) { + trackedPointers[touch.id].value = { + visible: false, + x: touch.x, + y: touch.y, + }; + } + + if (e.numberOfTouches === 0) { + manager.end(); + } + }) +``` diff --git a/docs/versioned_docs/version-2.4.0/manual-gestures/step7.md b/docs/versioned_docs/version-2.4.0/manual-gestures/step7.md new file mode 100644 index 0000000000..913e766ae8 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/manual-gestures/step7.md @@ -0,0 +1,10 @@ +```jsx {3-10} +const gesture = Gesture.Manual() + ... + .onStart(() => { + active.value = true; + }) + .onEnd(() => { + active.value = false; + }); +``` diff --git a/docs/versioned_docs/version-2.4.0/quickstart/quickstart.md b/docs/versioned_docs/version-2.4.0/quickstart/quickstart.md new file mode 100644 index 0000000000..c1ba3d7219 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/quickstart/quickstart.md @@ -0,0 +1,67 @@ +--- +id: quickstart +title: Quick start +sidebar_label: Quick start +--- + +import Step, { Divider } from '@site/src/theme/Step'; +import Step1 from './step1.md'; +import Step2 from './step2.md'; +import Step3 from './step3.md'; +import Step4 from './step4.md'; +import Step5 from './step5.md'; + +RNGH2 provides much simpler way to add gestures to your app. All you need to do is wrap the view that you want your gesture to work on with [`GestureDetector`](../api/gestures/gesture-detector), define the gesture and pass it to detector. That's all! + +To demonstrate how you would use the new API, let's make a simple app where you can drag a ball around. You will need to add `react-native-gesture-handler` (for gestures) and `react-native-reanimated` (for animations) modules. + + + + +
First let's define styles we will need to make the app:
+ +
+ + + + +
Then we can start writing our `Ball` component:
+ +
+ + + + +
+ We also need to define{' '} + + shared values + {' '} + to keep track of the ball position and create animated styles in order to be + able to position the ball on the screen: +
+ +
+ + + + +
And add it to the ball's styles:
+ +
+ + + + +
+ The only thing left is to define the pan gesture and assign it to the + detector: +
+ +
+ + + +Note the `start` shared value. We need it to store the position of the ball at the moment we grab it to be able to correctly position it later, because we only have access to translation relative to the starting point of the gesture. + +Now you can just add `Ball` component to some view in the app and see the results! (Or you can just check the code [here](https://github.com/software-mansion/react-native-gesture-handler/blob/main/example/src/new_api/reanimated/index.tsx) and see it in action in the Example app.) diff --git a/docs/versioned_docs/version-2.4.0/quickstart/step1.md b/docs/versioned_docs/version-2.4.0/quickstart/step1.md new file mode 100644 index 0000000000..1995cd907c --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/quickstart/step1.md @@ -0,0 +1,11 @@ +```jsx +const styles = StyleSheet.create({ + ball: { + width: 100, + height: 100, + borderRadius: 100, + backgroundColor: 'blue', + alignSelf: 'center', + }, +}); +``` diff --git a/docs/versioned_docs/version-2.4.0/quickstart/step2.md b/docs/versioned_docs/version-2.4.0/quickstart/step2.md new file mode 100644 index 0000000000..34c528266b --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/quickstart/step2.md @@ -0,0 +1,9 @@ +```jsx +function Ball() { + return ( + + + + ); +} +``` diff --git a/docs/versioned_docs/version-2.4.0/quickstart/step3.md b/docs/versioned_docs/version-2.4.0/quickstart/step3.md new file mode 100644 index 0000000000..ee7184ffc7 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/quickstart/step3.md @@ -0,0 +1,14 @@ +```jsx +const isPressed = useSharedValue(false); +const offset = useSharedValue({ x: 0, y: 0 }); +const animatedStyles = useAnimatedStyle(() => { + return { + transform: [ + { translateX: offset.value.x }, + { translateY: offset.value.y }, + { scale: withSpring(isPressed.value ? 1.2 : 1) }, + ], + backgroundColor: isPressed.value ? 'yellow' : 'blue', + }; +}); +``` diff --git a/docs/versioned_docs/version-2.4.0/quickstart/step4.md b/docs/versioned_docs/version-2.4.0/quickstart/step4.md new file mode 100644 index 0000000000..8e2112a3cd --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/quickstart/step4.md @@ -0,0 +1,9 @@ +```jsx {4} +... +return ( + + + +); +... +``` diff --git a/docs/versioned_docs/version-2.4.0/quickstart/step5.md b/docs/versioned_docs/version-2.4.0/quickstart/step5.md new file mode 100644 index 0000000000..c7c2e07265 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/quickstart/step5.md @@ -0,0 +1,32 @@ +```jsx +const start = useSharedValue({ x: 0, y: 0 }); +const gesture = Gesture.Pan() + .onBegin(() => { + isPressed.value = true; + }) + .onUpdate((e) => { + offset.value = { + x: e.translationX + start.value.x, + y: e.translationY + start.value.y, + }; + }) + .onEnd(() => { + start.value = { + x: offset.value.x, + y: offset.value.y, + }; + }) + .onFinalize(() => { + isPressed.value = false; + }); +``` + +```jsx {3} +... +return ( + + + +); +... +``` diff --git a/docs/versioned_docs/version-2.4.0/troubleshooting.md b/docs/versioned_docs/version-2.4.0/troubleshooting.md new file mode 100644 index 0000000000..3ce6df850c --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/troubleshooting.md @@ -0,0 +1,35 @@ +--- +id: troubleshooting +title: Troubleshooting +--- + +## Troubleshooting + +Thanks for giving this library a try! We are sorry that you might have encountered issues though. Here is how you can seek help: + +1. Search over the [issues on Github](https://github.com/software-mansion/react-native-gesture-handler/issues). There is a chance someone had this problem in the past and it has been resolved! +2. When sure your problem hasn't been reported or was reported but the proposed solution doesn't work for you please follow [our issue reporting guidelines](#reporting-issues). +3. You can try seeking help on [Expo Developers Discord](https://chat.expo.dev/) where we often hang out. +4. If you feel like reading the source code I highly recommend it, as this is by far the best resource and gives you the most up to date insights into how the library works and what might be causing the bug. +5. If you managed to find the solution consider [contributing](introduction.md#contributing) a fix or update our documentation to make this information easier to find for the others in the future. + +## Reporting issues + +This library is maintained by a very small team. +Please be mindful of that when reporting issue and when it happens that we can't get back to you as soon as you might expect. +We would love to fix all the problems as soon as possible, but often our time is constraint with other issues/features or projects. +To make it easier for us to understand your issue and to be able to approach it sooner you can help by: + +- Making sure the issue description is complete. Please include all the details about your environment (library version, RN version, device OS etc). +- It is the best to provide an example app that reproduces the issue you are having. Put it up on [gist](https://gist.github.com/), [snack](https://snack.expo.io) or create a repo on Github – it doesn't matter as long as we can easily pull it in, run and see the issue. +- Explain how you run your repro app and what steps to take to reproduce the issue. +- Isolate your issue from other dependencies you might be using and make the repro app as minimal as possible. +- If you have spent some time figuring out the root cause of the problem you can leave a note about your findings so far. +- **Do not comment on closed issues**. It is very unlikely that we are going to notice your comment in such a case. If the issue has been closed, but the proposed solution doesn't work for you, please open a new one providing all the information necessary and linking to the solution you have tried. + +## It's not a bug, it's a feature + +- Changing `enabled` prop during a gesture has no effect, only when a gesture starts (that is a finger touches the screen) the `enabled` prop is taken into consideration to decide whether to extract (or not) the gesture and provide it with stream of events to analyze. +- `Native` gesture may not conform to the standard state flow due to platform specific workarounds to incorporate native views into RNGH. +- Keep in mind that `Touchables` from RNGH are rendering two additional views that may need to be styled separately to achieve desired effect (`style` and `containerStyle` props). +- In order for the gesture composition to work, all composed gestures must be attached to the same `GestureHandlerRootView`. diff --git a/docs/versioned_docs/version-2.4.0/under-the-hood/how-does-it-work.md b/docs/versioned_docs/version-2.4.0/under-the-hood/how-does-it-work.md new file mode 100644 index 0000000000..aebed78316 --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/under-the-hood/how-does-it-work.md @@ -0,0 +1,22 @@ +--- +id: how-does-it-work +title: How does it work? +sidebar_label: How does it work? +--- + +### Units + +All handler component properties and event attributes that represent onscreen dimensions are expressed in screen density independent units we refer to as "points". +These are the units commonly used in React Native ecosystem (e.g. in the [layout system](http://facebook.github.io/react-native/docs/flexbox.html)). +They do not map directly to physical pixels but instead to [iOS's points](https://developer.apple.com/library/content/documentation/2DDrawing/Conceptual/DrawingPrintingiOS/GraphicsDrawingOverview/GraphicsDrawingOverview.html#//apple_ref/doc/uid/TP40010156-CH14-SW7) and to [dp](https://developer.android.com/guide/topics/resources/more-resources#Dimension) units on Android. + +## iOS + +All gestures are implemented using [UIGestureRecognizers](https://developer.apple.com/documentation/uikit/uigesturerecognizer?language=objc), some of them have been slightly modified to allow for more customization and to conform to the state flow of RNGH. When you assign a gesture configuration to the `GestureDetector`, it creates all the required recognizers and assigns them to the child view of the detector. From this point most of the heavy lifting is handled by the [UIKit](https://developer.apple.com/documentation/uikit?language=objc) (with our help to correctly implement interactions between gestures). + +## Android + +Unfortunately, Android doesn't provide an easy way of handling gestures hence most of them were implemented from scratch, including a system for managing how the gestures should interact with each other. Here's a quick overview of how it works: +When you wrap a component with `GestureHandlerRootView` it allows for the RNGH to intercept all touch events on that component and process them, deciding whether they should be handled by one of the gesture handlers or passed to the underlying view. Gesture handlers are created when you assign a gesture configuration to the `GestureDetector`, it initializes all of the necessary handlers natively. Every `GestureHandlerRootView` also has a specific handler to decide whether to pass the touch events or to consume them. It can never activate, only begin, end or be cancelled. When this handler is in the `UNDETERMINED` state it means that there is no touch in progress, however when the touch starts it transitions to the `BEGAN` state. As long as it stays in that state, no touch event is consumed, but as soon as it gets cancelled (meaning that some handler has activated) all incoming touch events get consumed, preventing underlying view from receiving them. + +When a pointer touches the screen the view tree is traversed in order to extract all handlers attached to the views below the finger (including the one attached to the `GestureHandlerRootView`) and all extracted handlers transition to the `BEGAN` state, signalling that the gesture may heve began. The touch events continue to be delivered to all extracted handlers until one of them recognizes the gesture and tries to activate. At this point the orchestrator checks whether this gesture should wait for any other of the extracted gestures to fail. If it does, it's put to the waiting list, if it doesn't, it gets activated and all other gestures (that are not simultaneous with it) get cancelled. When a gesture handlers transitions to a finished state (the gesture recognized by it stops, it fails or gets cancelled) the orchestrator check the waiting handlers. Every one of them that waited for the gesture that just failed tries to activate again (and again the orchestrator checks if it should wait for any of the extracted gestures...). diff --git a/docs/versioned_docs/version-2.4.0/under-the-hood/states-events.md b/docs/versioned_docs/version-2.4.0/under-the-hood/states-events.md new file mode 100644 index 0000000000..600f16a5cc --- /dev/null +++ b/docs/versioned_docs/version-2.4.0/under-the-hood/states-events.md @@ -0,0 +1,94 @@ +--- +id: states-events +title: Gesture states & events +sidebar_label: Gesture states & events +--- + +Every gesture can be treated as ["state machine"](https://en.wikipedia.org/wiki/Finite-state_machine). +At any given time, each handler instance has an assigned state that can change when new touch events occur or can be forced to change by the touch system in certain circumstances. + +A gesture can be in one of the six possible states: + +- #### UNDETERMINED + + This is the initial state of each gesture recognizer and it goes into this state after it's done recognizing a gesture. + +- #### FAILED + + A gesture recognizer received some touches but for some reason didn't recognize them. For example, if a finger travels more distance than a defined `maxDist` property allows, then the gesture won't become active but will fail instead. Afterwards, it's state will be reset to `UNDETERMINED`. + +- #### BEGAN + + Gesture recognizer has started receiving touch stream but hasn't yet received enough data to either [fail](#failed) or [activate](#active). + +- #### CANCELLED + + The gesture recognizer has received a signal (possibly new touches or a command from the touch system controller) resulting in the cancellation of a continuous gesture. The gesture's state will become `CANCELLED` until it is finally reset to the initial state, `UNDETERMINED`. + +- #### ACTIVE + + Recognizer has recognized a gesture. It will become and stay in the `ACTIVE` state until the gesture finishes (e.g. when user lifts the finger) or gets cancelled by the touch system. Under normal circumstances the state will then turn into `END`. In the case that a gesture is cancelled by the touch system, its state would then become `CANCELLED`. + +- #### END + + The gesture recognizer has received touches signalling the end of a gesture. Its state will become `END` until it is reset to `UNDETERMINED`. + +## State flows + +The most typical flow of state is when a gesture picks up on an initial touch event, then recognizes it, then acknowledges its ending and resets itself back to the initial state. + +The flow looks as follows (longer arrows represent that there are possibly more touch events received before the state changes): + +[`UNDETERMINED`](#undetermined) -> [`BEGAN`](#began) ------> [`ACTIVE`](#active) ------> [`END`](#end) -> [`UNDETERMINED`](#undetermined) + +Another possible flow is when a handler receives touches that cause a recognition failure: + +[`UNDETERMINED`](#undetermined) -> [`BEGAN`](#began) ------> [`FAILED`](#failed) -> [`UNDETERMINED`](#undetermined) + +At last, when a handler does properly recognize the gesture but then is interrupted by the touch system the gesture recognition is canceled and the flow looks as follows: + +[`UNDETERMINED`](#undetermined) -> [`BEGAN`](#began) ------> [`ACTIVE`](#active) ------> [`CANCELLED`](#cancelled) -> [`UNDETERMINED`](#undetermined) + +## Events + +There are three types of events in RNGH2: `StateChangeEvent`, `GestureEvent` and `PointerEvent`. The `StateChangeEvent` is send every time a gesture moves to a different state, while `GestureEvent` is send every time a gesture is updated. The first two carry a gesture-specific data and a `state` property, indicating the current state of the gesture. `StateChangeEvent` also carries a `oldState` property indicating the previous state of the gesture. `PointerEvent` carries information about raw touch events, like touching the screen or moving the finger. These events are handled internally before they are passed along to the correct callbacks: + +### `onBegin` + +Is called when a gesture transitions to the [`BEGAN`](#began) state. + +### `onStart` + +Is called when a gesture transitions to the [`ACTIVE`](#active) state. + +### `onEnd` + +Is called when a gesture transitions from the [`ACTIVE`](#active) state to the [`END`](#end), [`FAILED`](#failed), or [`CANCELLED`](#cancelled) state. If the gesture transitions to the [`END`](#end) state, the `success` argument is set to `true` otherwise it is set to `false`. + +### `onFinalize` + +Is called when a gesture transitions to the [`END`](#end), [`FAILED`](#failed), or [`CANCELLED`](#cancelled) state. If the gesture transitions to the [`END`](#end) state, the `success` argument is set to `true` otherwise it is set to `false`. If the gesture transitions from the [`ACTIVE`](#active) state, it will be called after `onEnd`. + +### `onUpdate` + +Is called every time a gesture is updated while it is in the [`ACTIVE`](#active) state. + +### `onPointerDown` + +Is called when new pointers are placed on the screen. It may carry information about more than one pointer because the events are batched. + +### `onPointerMove` + +Is called when pointers are moved on the screen. It may carry information about more than one pointer because the events are batched. + +### `onPointerUp` + +Is called when pointers are lifted from the screen. It may carry information about more than one pointer because the events are batched. + +### `onPointerCancelled` + +Is called when there will be no more information about this pointer. It may be called because the gesture has ended or was interrupted. It may carry information about more than one pointer because the events are batched. + +### `onPointerChange` + +Is called before `onPointerDown`, `onPointerMove`, `onPointerUp` and `onPointerCancelled` with the same event, which may be useful in case you share logic between them. It may carry information about more than one pointer because the events are batched. diff --git a/docs/versioned_sidebars/version-2.4.0-sidebars.json b/docs/versioned_sidebars/version-2.4.0-sidebars.json new file mode 100644 index 0000000000..00ccf47473 --- /dev/null +++ b/docs/versioned_sidebars/version-2.4.0-sidebars.json @@ -0,0 +1,214 @@ +{ + "version-2.4.0/docs": [ + { + "type": "doc", + "id": "version-2.4.0/introduction" + }, + { + "type": "doc", + "id": "version-2.4.0/installation" + }, + { + "type": "doc", + "id": "version-2.4.0/troubleshooting" + }, + { + "collapsed": true, + "type": "category", + "label": "Guides", + "items": [ + { + "type": "doc", + "id": "version-2.4.0/quickstart/quickstart" + }, + { + "type": "doc", + "id": "version-2.4.0/gesture-composition" + }, + { + "type": "doc", + "id": "version-2.4.0/manual-gestures/manual-gestures" + }, + { + "type": "doc", + "id": "version-2.4.0/under-the-hood/states-events" + }, + { + "type": "doc", + "id": "version-2.4.0/gesture-handlers/basics/about-handlers" + }, + { + "type": "doc", + "id": "version-2.4.0/gesture-handlers/basics/interactions" + }, + { + "type": "doc", + "id": "version-2.4.0/guides/testing" + }, + { + "type": "doc", + "id": "version-2.4.0/guides/migrating-off-rnghenabledroot" + }, + { + "type": "doc", + "id": "version-2.4.0/guides/upgrading-to-2" + } + ] + }, + { + "collapsed": true, + "type": "category", + "label": "API reference", + "items": [ + { + "collapsed": true, + "type": "category", + "label": "Gestures", + "items": [ + { + "type": "doc", + "id": "version-2.4.0/api/gestures/gesture-detector" + }, + { + "type": "doc", + "id": "version-2.4.0/api/gestures/gesture" + }, + { + "type": "doc", + "id": "version-2.4.0/api/gestures/pan-gesture" + }, + { + "type": "doc", + "id": "version-2.4.0/api/gestures/tap-gesture" + }, + { + "type": "doc", + "id": "version-2.4.0/api/gestures/long-press-gesture" + }, + { + "type": "doc", + "id": "version-2.4.0/api/gestures/rotation-gesture" + }, + { + "type": "doc", + "id": "version-2.4.0/api/gestures/pinch-gesture" + }, + { + "type": "doc", + "id": "version-2.4.0/api/gestures/fling-gesture" + }, + { + "type": "doc", + "id": "version-2.4.0/api/gestures/force-touch-gesture" + }, + { + "type": "doc", + "id": "version-2.4.0/api/gestures/native-gesture" + }, + { + "type": "doc", + "id": "version-2.4.0/api/gestures/manual-gesture" + }, + { + "type": "doc", + "id": "version-2.4.0/api/gestures/composed-gestures" + }, + { + "type": "doc", + "id": "version-2.4.0/api/gestures/touch-events" + }, + { + "type": "doc", + "id": "version-2.4.0/api/gestures/state-manager" + } + ] + }, + { + "collapsed": true, + "type": "category", + "label": "Components", + "items": [ + { + "type": "doc", + "id": "version-2.4.0/api/components/buttons" + }, + { + "type": "doc", + "id": "version-2.4.0/api/components/swipeable" + }, + { + "type": "doc", + "id": "version-2.4.0/api/components/touchables" + }, + { + "type": "doc", + "id": "version-2.4.0/api/components/drawer-layout" + } + ] + }, + { + "collapsed": true, + "type": "category", + "label": "Gesture Handlers", + "items": [ + { + "type": "doc", + "id": "version-2.4.0/gesture-handlers/api/common-gh" + }, + { + "type": "doc", + "id": "version-2.4.0/gesture-handlers/api/pan-gh" + }, + { + "type": "doc", + "id": "version-2.4.0/gesture-handlers/api/tap-gh" + }, + { + "type": "doc", + "id": "version-2.4.0/gesture-handlers/api/longpress-gh" + }, + { + "type": "doc", + "id": "version-2.4.0/gesture-handlers/api/rotation-gh" + }, + { + "type": "doc", + "id": "version-2.4.0/gesture-handlers/api/fling-gh" + }, + { + "type": "doc", + "id": "version-2.4.0/gesture-handlers/api/pinch-gh" + }, + { + "type": "doc", + "id": "version-2.4.0/gesture-handlers/api/force-gh" + }, + { + "type": "doc", + "id": "version-2.4.0/gesture-handlers/api/nativeview-gh" + }, + { + "type": "doc", + "id": "version-2.4.0/gesture-handlers/api/create-native-wrapper" + } + ] + }, + { + "type": "doc", + "id": "version-2.4.0/api/test-api" + } + ] + }, + { + "collapsed": true, + "type": "category", + "label": "Under the hood", + "items": [ + { + "type": "doc", + "id": "version-2.4.0/under-the-hood/how-does-it-work" + } + ] + } + ] +} diff --git a/docs/versions.json b/docs/versions.json index fc36a52558..22ea8ba0a4 100644 --- a/docs/versions.json +++ b/docs/versions.json @@ -1,4 +1,5 @@ [ + "2.4.0", "2.3.0", "2.1.1", "2.0.0", diff --git a/docs/yarn.lock b/docs/yarn.lock index 7ec1775951..4383e2fdfb 100644 --- a/docs/yarn.lock +++ b/docs/yarn.lock @@ -2259,9 +2259,9 @@ async-limiter@~1.0.0: integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== async@^2.6.1, async@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== dependencies: lodash "^4.17.14" @@ -4119,9 +4119,9 @@ events@^3.0.0: integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== eventsource@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" - integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== + version "1.1.1" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.1.tgz#4544a35a57d7120fba4fa4c86cb4023b2c09df2f" + integrity sha512-qV5ZC0h7jYIAOhArFJgSfdyz6rALJyb270714o7ZtNnw2WSJ+eexhKtE0O8LYPRsHZHf2osHKZBxGPvm3kPkCA== dependencies: original "^1.0.0" @@ -6478,9 +6478,9 @@ minimatch@3.0.4, minimatch@^3.0.4: brace-expansion "^1.1.7" minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== minipass-collect@^1.0.2: version "1.0.2" diff --git a/example/.eslintrc.js b/example/.eslintrc.js new file mode 100644 index 0000000000..40c6dcd05f --- /dev/null +++ b/example/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: '@react-native-community', +}; diff --git a/example/.gitignore b/example/.gitignore index 6a5e410aba..2efd719f44 100644 --- a/example/.gitignore +++ b/example/.gitignore @@ -59,5 +59,6 @@ buck-out/ # Bundle artifact *.jsbundle -# CocoaPods +# Ruby / CocoaPods /ios/Pods/ +/vendor/bundle/ diff --git a/example/.prettierrc.json b/example/.prettierrc.json index 6e5e96b3c5..792c8d89e6 100644 --- a/example/.prettierrc.json +++ b/example/.prettierrc.json @@ -1,5 +1,5 @@ { - "jsxBracketSameLine": true, + "bracketSameLine": true, "printWidth": 80, "tabWidth": 2, "semi": true, diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index 22c41e14ef..3c27b46b14 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -127,7 +127,10 @@ def enableHermes = project.ext.react.get("enableHermes", false); /** * Architectures to build native code for in debug. */ -def nativeArchitectures = project.getProperties().get("reactNativeDebugArchitectures") +def reactNativeArchitectures() { + def value = project.getProperties().get("reactNativeArchitectures") + return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"] +} android { compileSdkVersion rootProject.ext.compileSdkVersion @@ -138,13 +141,72 @@ android { targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0" + buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString() + if (isNewArchitectureEnabled()) { + // We configure the NDK build only if you decide to opt-in for the New Architecture. + externalNativeBuild { + ndkBuild { + arguments "APP_PLATFORM=android-21", + "APP_STL=c++_shared", + "NDK_TOOLCHAIN_VERSION=clang", + "GENERATED_SRC_DIR=$buildDir/generated/source", + "PROJECT_BUILD_DIR=$buildDir", + "REACT_ANDROID_DIR=$rootDir/../node_modules/react-native/ReactAndroid", + "REACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build" + cFlags "-Wall", "-Werror", "-fexceptions", "-frtti", "-DWITH_INSPECTOR=1" + cppFlags "-std=c++17" + // Make sure this target name is the same you specify inside the + // src/main/jni/Android.mk file for the `LOCAL_MODULE` variable. + targets "example_appmodules" + } + } + } + } + if (isNewArchitectureEnabled()) { + // We configure the NDK build only if you decide to opt-in for the New Architecture. + externalNativeBuild { + ndkBuild { + path "$projectDir/src/main/jni/Android.mk" + } + } + def reactAndroidProjectDir = project(':ReactAndroid').projectDir + def packageReactNdkDebugLibs = tasks.register("packageReactNdkDebugLibs", Copy) { + dependsOn(":ReactAndroid:packageReactNdkDebugLibsForBuck") + from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib") + into("$buildDir/react-ndk/exported") + } + def packageReactNdkReleaseLibs = tasks.register("packageReactNdkReleaseLibs", Copy) { + dependsOn(":ReactAndroid:packageReactNdkReleaseLibsForBuck") + from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib") + into("$buildDir/react-ndk/exported") + } + afterEvaluate { + // If you wish to add a custom TurboModule or component locally, + // you should uncomment this line. + // preBuild.dependsOn("generateCodegenArtifactsFromSchema") + preDebugBuild.dependsOn(packageReactNdkDebugLibs) + preReleaseBuild.dependsOn(packageReactNdkReleaseLibs) + // Due to a bug inside AGP, we have to explicitly set a dependency + // between configureNdkBuild* tasks and the preBuild tasks. + // This can be removed once this is solved: https://issuetracker.google.com/issues/207403732 + configureNdkBuildRelease.dependsOn(preReleaseBuild) + configureNdkBuildDebug.dependsOn(preDebugBuild) + reactNativeArchitectures().each { architecture -> + tasks.findByName("configureNdkBuildDebug[${architecture}]")?.configure { + dependsOn("preDebugBuild") + } + tasks.findByName("configureNdkBuildRelease[${architecture}]")?.configure { + dependsOn("preReleaseBuild") + } + } + } } splits { abi { reset() enable enableSeparateBuildPerCPUArchitecture universalApk false // If true, also generate a universal APK - include "armeabi-v7a", "x86", "arm64-v8a", "x86_64" + include (*reactNativeArchitectures()) } } signingConfigs { @@ -158,11 +220,6 @@ android { buildTypes { debug { signingConfig signingConfigs.debug - if (nativeArchitectures) { - ndk { - abiFilters nativeArchitectures.split(',') - } - } } release { // Caution! In production, you need to generate your own keystore file. @@ -221,6 +278,18 @@ dependencies { } } +if (isNewArchitectureEnabled()) { + // If new architecture is enabled, we let you build RN from source + // Otherwise we fallback to a prebuilt .aar bundled in the NPM package. + // This will be applied to all the imported transtitive dependency. + configurations.all { + resolutionStrategy.dependencySubstitution { + substitute(module("com.facebook.react:react-native")) + .using(project(":ReactAndroid")).because("On New Architecture we're building React Native from source") + } + } +} + // Run this once to be able to run the application with BUCK // puts all compile dependencies into folder libs for BUCK to use task copyDownloadableDepsToLibs(type: Copy) { @@ -229,3 +298,11 @@ task copyDownloadableDepsToLibs(type: Copy) { } apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) + +def isNewArchitectureEnabled() { + // To opt-in for the New Architecture, you can either: + // - Set `newArchEnabled` to true inside the `gradle.properties` file + // - Invoke gradle with `-newArchEnabled=true` + // - Set an environment variable `ORG_GRADLE_PROJECT_newArchEnabled=true` + return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true" +} diff --git a/example/android/app/src/debug/java/com/example/ReactNativeFlipper.java b/example/android/app/src/debug/java/com/example/ReactNativeFlipper.java index a1b70b8aa2..2c80a80313 100644 --- a/example/android/app/src/debug/java/com/example/ReactNativeFlipper.java +++ b/example/android/app/src/debug/java/com/example/ReactNativeFlipper.java @@ -19,6 +19,7 @@ import com.facebook.flipper.plugins.network.NetworkFlipperPlugin; import com.facebook.flipper.plugins.react.ReactFlipperPlugin; import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin; +import com.facebook.react.ReactInstanceEventListener; import com.facebook.react.ReactInstanceManager; import com.facebook.react.bridge.ReactContext; import com.facebook.react.modules.network.NetworkingModule; @@ -51,7 +52,7 @@ public void apply(OkHttpClient.Builder builder) { ReactContext reactContext = reactInstanceManager.getCurrentReactContext(); if (reactContext == null) { reactInstanceManager.addReactInstanceEventListener( - new ReactInstanceManager.ReactInstanceEventListener() { + new ReactInstanceEventListener() { @Override public void onReactContextInitialized(ReactContext reactContext) { reactInstanceManager.removeReactInstanceEventListener(this); diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml index 6e27a2a310..a16f9e42bc 100644 --- a/example/android/app/src/main/AndroidManifest.xml +++ b/example/android/app/src/main/AndroidManifest.xml @@ -13,15 +13,16 @@ + android:windowSoftInputMode="adjustResize" + android:exported="true"> - + diff --git a/example/android/app/src/main/java/com/example/MainActivity.java b/example/android/app/src/main/java/com/example/MainActivity.java index 557797a890..d6c1569976 100644 --- a/example/android/app/src/main/java/com/example/MainActivity.java +++ b/example/android/app/src/main/java/com/example/MainActivity.java @@ -1,6 +1,8 @@ package com.example; import com.facebook.react.ReactActivity; +import com.facebook.react.ReactActivityDelegate; +import com.facebook.react.ReactRootView; public class MainActivity extends ReactActivity { @@ -12,4 +14,25 @@ public class MainActivity extends ReactActivity { protected String getMainComponentName() { return "Example"; } + + /** + * Returns the instance of the {@link ReactActivityDelegate}. There the RootView is created and + * you can specify the rendered you wish to use (Fabric or the older renderer). + */ + @Override + protected ReactActivityDelegate createReactActivityDelegate() { + return new MainActivityDelegate(this, getMainComponentName()); + } + public static class MainActivityDelegate extends ReactActivityDelegate { + public MainActivityDelegate(ReactActivity activity, String mainComponentName) { + super(activity, mainComponentName); + } + @Override + protected ReactRootView createRootView() { + ReactRootView reactRootView = new ReactRootView(getContext()); + // If you opted-in for the New Architecture, we enable the Fabric Renderer. + reactRootView.setIsFabric(BuildConfig.IS_NEW_ARCHITECTURE_ENABLED); + return reactRootView; + } + } } diff --git a/example/android/app/src/main/java/com/example/MainApplication.java b/example/android/app/src/main/java/com/example/MainApplication.java index f022d35521..4b83cec3da 100644 --- a/example/android/app/src/main/java/com/example/MainApplication.java +++ b/example/android/app/src/main/java/com/example/MainApplication.java @@ -7,6 +7,7 @@ import com.facebook.react.ReactInstanceManager; import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; +import com.facebook.react.config.ReactFeatureFlags; import com.facebook.soloader.SoLoader; import java.lang.reflect.InvocationTargetException; import java.util.List; @@ -43,14 +44,22 @@ protected JSIModulePackage getJSIModulePackage() { } }; + private final ReactNativeHost mNewArchitectureNativeHost = new MainApplicationReactNativeHost(this); + @Override public ReactNativeHost getReactNativeHost() { - return mReactNativeHost; + if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { + return mNewArchitectureNativeHost; + } else { + return mReactNativeHost; + } } @Override public void onCreate() { super.onCreate(); + // If you opted-in for the New Architecture, we enable the TurboModule system + ReactFeatureFlags.useTurboModules = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED; SoLoader.init(this, /* native exopackage */ false); initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); } diff --git a/example/android/app/src/main/java/com/example/MainApplicationReactNativeHost.java b/example/android/app/src/main/java/com/example/MainApplicationReactNativeHost.java new file mode 100644 index 0000000000..94d4fe8569 --- /dev/null +++ b/example/android/app/src/main/java/com/example/MainApplicationReactNativeHost.java @@ -0,0 +1,102 @@ +package com.example; + +import android.app.Application; +import androidx.annotation.NonNull; +import com.facebook.react.PackageList; +import com.facebook.react.ReactInstanceManager; +import com.facebook.react.ReactNativeHost; +import com.facebook.react.ReactPackage; +import com.facebook.react.ReactPackageTurboModuleManagerDelegate; +import com.facebook.react.bridge.JSIModulePackage; +import com.facebook.react.bridge.JSIModuleProvider; +import com.facebook.react.bridge.JSIModuleSpec; +import com.facebook.react.bridge.JSIModuleType; +import com.facebook.react.bridge.JavaScriptContextHolder; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.UIManager; +import com.facebook.react.fabric.ComponentFactory; +import com.facebook.react.fabric.CoreComponentsRegistry; +import com.facebook.react.fabric.EmptyReactNativeConfig; +import com.facebook.react.fabric.FabricJSIModuleProvider; +import com.facebook.react.uimanager.ViewManagerRegistry; +import com.example.BuildConfig; +import java.util.ArrayList; +import java.util.List; +/** + * A {@link ReactNativeHost} that helps you load everything needed for the New Architecture, both + * TurboModule delegates and the Fabric Renderer. + * + *

Please note that this class is used ONLY if you opt-in for the New Architecture (see the + * `newArchEnabled` property). Is ignored otherwise. + */ +public class MainApplicationReactNativeHost extends ReactNativeHost { + public MainApplicationReactNativeHost(Application application) { + super(application); + } + @Override + public boolean getUseDeveloperSupport() { + return BuildConfig.DEBUG; + } + @Override + protected List getPackages() { + List packages = new PackageList(this).getPackages(); + // Packages that cannot be autolinked yet can be added manually here, for example: + // packages.add(new MyReactNativePackage()); + // TurboModules must also be loaded here providing a valid TurboReactPackage implementation: + // packages.add(new TurboReactPackage() { ... }); + // If you have custom Fabric Components, their ViewManagers should also be loaded here + // inside a ReactPackage. + return packages; + } + @Override + protected String getJSMainModuleName() { + return "index"; + } + @NonNull + @Override + protected ReactPackageTurboModuleManagerDelegate.Builder + getReactPackageTurboModuleManagerDelegateBuilder() { + // Here we provide the ReactPackageTurboModuleManagerDelegate Builder. This is necessary + // for the new architecture and to use TurboModules correctly. + return new MainApplicationTurboModuleManagerDelegate.Builder(); + } + @Override + protected JSIModulePackage getJSIModulePackage() { + return new JSIModulePackage() { + @Override + public List getJSIModules( + final ReactApplicationContext reactApplicationContext, + final JavaScriptContextHolder jsContext) { + final List specs = new ArrayList<>(); + // Here we provide a new JSIModuleSpec that will be responsible of providing the + // custom Fabric Components. + specs.add( + new JSIModuleSpec() { + @Override + public JSIModuleType getJSIModuleType() { + return JSIModuleType.UIManager; + } + @Override + public JSIModuleProvider getJSIModuleProvider() { + final ComponentFactory componentFactory = new ComponentFactory(); + CoreComponentsRegistry.register(componentFactory); + // Here we register a Components Registry. + // The one that is generated with the template contains no components + // and just provides you the one from React Native core. + MainComponentsRegistry.register(componentFactory); + final ReactInstanceManager reactInstanceManager = getReactInstanceManager(); + ViewManagerRegistry viewManagerRegistry = + new ViewManagerRegistry( + reactInstanceManager.getOrCreateViewManagers(reactApplicationContext)); + return new FabricJSIModuleProvider( + reactApplicationContext, + componentFactory, + new EmptyReactNativeConfig(), + viewManagerRegistry); + } + }); + return specs; + } + }; + } +} \ No newline at end of file diff --git a/example/android/app/src/main/java/com/example/MainApplicationTurboModuleManagerDelegate.java b/example/android/app/src/main/java/com/example/MainApplicationTurboModuleManagerDelegate.java new file mode 100644 index 0000000000..8fd0f3cab9 --- /dev/null +++ b/example/android/app/src/main/java/com/example/MainApplicationTurboModuleManagerDelegate.java @@ -0,0 +1,41 @@ +package com.example; + +import com.facebook.jni.HybridData; +import com.facebook.react.ReactPackage; +import com.facebook.react.ReactPackageTurboModuleManagerDelegate; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.soloader.SoLoader; +import java.util.List; +/** + * Class responsible to load the TurboModules. This class has native methods and needs a + * corresponding C++ implementation/header file to work correctly (already placed inside the jni/ + * folder for you). + * + *

Please note that this class is used ONLY if you opt-in for the New Architecture (see the + * `newArchEnabled` property). Is ignored otherwise. + */ +public class MainApplicationTurboModuleManagerDelegate + extends ReactPackageTurboModuleManagerDelegate { + private static volatile boolean sIsSoLibraryLoaded; + protected MainApplicationTurboModuleManagerDelegate( + ReactApplicationContext reactApplicationContext, List packages) { + super(reactApplicationContext, packages); + } + protected native HybridData initHybrid(); + native boolean canCreateTurboModule(String moduleName); + public static class Builder extends ReactPackageTurboModuleManagerDelegate.Builder { + protected MainApplicationTurboModuleManagerDelegate build( + ReactApplicationContext context, List packages) { + return new MainApplicationTurboModuleManagerDelegate(context, packages); + } + } + @Override + protected synchronized void maybeLoadOtherSoLibraries() { + if (!sIsSoLibraryLoaded) { + // If you change the name of your application .so file in the Android.mk file, + // make sure you update the name here as well. + SoLoader.loadLibrary("rndiffapp_appmodules"); + sIsSoLibraryLoaded = true; + } + } +} \ No newline at end of file diff --git a/example/android/app/src/main/java/com/example/MainComponentsRegistry.java b/example/android/app/src/main/java/com/example/MainComponentsRegistry.java new file mode 100644 index 0000000000..f7fff5db70 --- /dev/null +++ b/example/android/app/src/main/java/com/example/MainComponentsRegistry.java @@ -0,0 +1,31 @@ +package com.example; + +import com.facebook.jni.HybridData; +import com.facebook.proguard.annotations.DoNotStrip; +import com.facebook.react.fabric.ComponentFactory; +import com.facebook.soloader.SoLoader; +/** + * Class responsible to load the custom Fabric Components. This class has native methods and needs a + * corresponding C++ implementation/header file to work correctly (already placed inside the jni/ + * folder for you). + * + *

Please note that this class is used ONLY if you opt-in for the New Architecture (see the + * `newArchEnabled` property). Is ignored otherwise. + */ +@DoNotStrip +public class MainComponentsRegistry { + static { + SoLoader.loadLibrary("fabricjni"); + } + @DoNotStrip private final HybridData mHybridData; + @DoNotStrip + private native HybridData initHybrid(ComponentFactory componentFactory); + @DoNotStrip + private MainComponentsRegistry(ComponentFactory componentFactory) { + mHybridData = initHybrid(componentFactory); + } + @DoNotStrip + public static MainComponentsRegistry register(ComponentFactory componentFactory) { + return new MainComponentsRegistry(componentFactory); + } +} \ No newline at end of file diff --git a/example/android/app/src/main/jni/Android.mk b/example/android/app/src/main/jni/Android.mk new file mode 100644 index 0000000000..c26f9362a7 --- /dev/null +++ b/example/android/app/src/main/jni/Android.mk @@ -0,0 +1,40 @@ +THIS_DIR := $(call my-dir) +include $(REACT_ANDROID_DIR)/Android-prebuilt.mk +# If you wish to add a custom TurboModule or Fabric component in your app you +# will have to include the following autogenerated makefile. +# include $(GENERATED_SRC_DIR)/codegen/jni/Android.mk +include $(CLEAR_VARS) +LOCAL_PATH := $(THIS_DIR) +# You can customize the name of your application .so file here. +LOCAL_MODULE := example_appmodules +LOCAL_C_INCLUDES := $(LOCAL_PATH) +LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.cpp) +LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) +# If you wish to add a custom TurboModule or Fabric component in your app you +# will have to uncomment those lines to include the generated source +# files from the codegen (placed in $(GENERATED_SRC_DIR)/codegen/jni) +# +# LOCAL_C_INCLUDES += $(GENERATED_SRC_DIR)/codegen/jni +# LOCAL_SRC_FILES += $(wildcard $(GENERATED_SRC_DIR)/codegen/jni/*.cpp) +# LOCAL_EXPORT_C_INCLUDES += $(GENERATED_SRC_DIR)/codegen/jni +# Here you should add any native library you wish to depend on. +LOCAL_SHARED_LIBRARIES := \ + libfabricjni \ + libfbjni \ + libfolly_futures \ + libfolly_json \ + libglog \ + libjsi \ + libreact_codegen_rncore \ + libreact_debug \ + libreact_nativemodule_core \ + libreact_render_componentregistry \ + libreact_render_core \ + libreact_render_debug \ + libreact_render_graphics \ + librrc_view \ + libruntimeexecutor \ + libturbomodulejsijni \ + libyoga +LOCAL_CFLAGS := -DLOG_TAG=\"ReactNative\" -fexceptions -frtti -std=c++17 -Wall +include $(BUILD_SHARED_LIBRARY) \ No newline at end of file diff --git a/example/android/app/src/main/jni/MainApplicationModuleProvider.cpp b/example/android/app/src/main/jni/MainApplicationModuleProvider.cpp new file mode 100644 index 0000000000..4b722c7a12 --- /dev/null +++ b/example/android/app/src/main/jni/MainApplicationModuleProvider.cpp @@ -0,0 +1,20 @@ +#include "MainApplicationModuleProvider.h" +#include +namespace facebook { +namespace react { +std::shared_ptr MainApplicationModuleProvider( + const std::string moduleName, + const JavaTurboModule::InitParams ¶ms) { + // Here you can provide your own module provider for TurboModules coming from + // either your application or from external libraries. The approach to follow + // is similar to the following (for a library called `samplelibrary`: + // + // auto module = samplelibrary_ModuleProvider(moduleName, params); + // if (module != nullptr) { + // return module; + // } + // return rncore_ModuleProvider(moduleName, params); + return rncore_ModuleProvider(moduleName, params); +} +} // namespace react +} // namespace facebook \ No newline at end of file diff --git a/example/android/app/src/main/jni/MainApplicationModuleProvider.h b/example/android/app/src/main/jni/MainApplicationModuleProvider.h new file mode 100644 index 0000000000..f89ddbd02d --- /dev/null +++ b/example/android/app/src/main/jni/MainApplicationModuleProvider.h @@ -0,0 +1,11 @@ +#pragma once +#include +#include +#include +namespace facebook { +namespace react { +std::shared_ptr MainApplicationModuleProvider( + const std::string moduleName, + const JavaTurboModule::InitParams ¶ms); +} // namespace react +} // namespace facebook \ No newline at end of file diff --git a/example/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp b/example/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp new file mode 100644 index 0000000000..decb4e17e0 --- /dev/null +++ b/example/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp @@ -0,0 +1,38 @@ +#include "MainApplicationTurboModuleManagerDelegate.h" +#include "MainApplicationModuleProvider.h" +namespace facebook { +namespace react { +jni::local_ref +MainApplicationTurboModuleManagerDelegate::initHybrid( + jni::alias_ref) { + return makeCxxInstance(); +} +void MainApplicationTurboModuleManagerDelegate::registerNatives() { + registerHybrid({ + makeNativeMethod( + "initHybrid", MainApplicationTurboModuleManagerDelegate::initHybrid), + makeNativeMethod( + "canCreateTurboModule", + MainApplicationTurboModuleManagerDelegate::canCreateTurboModule), + }); +} +std::shared_ptr +MainApplicationTurboModuleManagerDelegate::getTurboModule( + const std::string name, + const std::shared_ptr jsInvoker) { + // Not implemented yet: provide pure-C++ NativeModules here. + return nullptr; +} +std::shared_ptr +MainApplicationTurboModuleManagerDelegate::getTurboModule( + const std::string name, + const JavaTurboModule::InitParams ¶ms) { + return MainApplicationModuleProvider(name, params); +} +bool MainApplicationTurboModuleManagerDelegate::canCreateTurboModule( + std::string name) { + return getTurboModule(name, nullptr) != nullptr || + getTurboModule(name, {.moduleName = name}) != nullptr; +} +} // namespace react +} // namespace facebook \ No newline at end of file diff --git a/example/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h b/example/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h new file mode 100644 index 0000000000..051d962cf7 --- /dev/null +++ b/example/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h @@ -0,0 +1,30 @@ +#include +#include +#include +#include +namespace facebook { +namespace react { +class MainApplicationTurboModuleManagerDelegate + : public jni::HybridClass< + MainApplicationTurboModuleManagerDelegate, + TurboModuleManagerDelegate> { + public: + // Adapt it to the package you used for your Java class. + static constexpr auto kJavaDescriptor = + "Lcom/example/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate;"; + static jni::local_ref initHybrid(jni::alias_ref); + static void registerNatives(); + std::shared_ptr getTurboModule( + const std::string name, + const std::shared_ptr jsInvoker) override; + std::shared_ptr getTurboModule( + const std::string name, + const JavaTurboModule::InitParams ¶ms) override; + /** + * Test-only method. Allows user to verify whether a TurboModule can be + * created by instances of this class. + */ + bool canCreateTurboModule(std::string name); +}; +} // namespace react +} // namespace facebook \ No newline at end of file diff --git a/example/android/app/src/main/jni/MainComponentsRegistry.cpp b/example/android/app/src/main/jni/MainComponentsRegistry.cpp new file mode 100644 index 0000000000..01da5875a8 --- /dev/null +++ b/example/android/app/src/main/jni/MainComponentsRegistry.cpp @@ -0,0 +1,48 @@ +#include "MainComponentsRegistry.h" +#include +#include +#include +#include +namespace facebook { +namespace react { +MainComponentsRegistry::MainComponentsRegistry(ComponentFactory *delegate) {} +std::shared_ptr +MainComponentsRegistry::sharedProviderRegistry() { + auto providerRegistry = CoreComponentsRegistry::sharedProviderRegistry(); + // Custom Fabric Components go here. You can register custom + // components coming from your App or from 3rd party libraries here. + // + // providerRegistry->add(concreteComponentDescriptorProvider< + // AocViewerComponentDescriptor>()); + return providerRegistry; +} +jni::local_ref +MainComponentsRegistry::initHybrid( + jni::alias_ref, + ComponentFactory *delegate) { + auto instance = makeCxxInstance(delegate); + auto buildRegistryFunction = + [](EventDispatcher::Weak const &eventDispatcher, + ContextContainer::Shared const &contextContainer) + -> ComponentDescriptorRegistry::Shared { + auto registry = MainComponentsRegistry::sharedProviderRegistry() + ->createComponentDescriptorRegistry( + {eventDispatcher, contextContainer}); + auto mutableRegistry = + std::const_pointer_cast(registry); + mutableRegistry->setFallbackComponentDescriptor( + std::make_shared( + ComponentDescriptorParameters{ + eventDispatcher, contextContainer, nullptr})); + return registry; + }; + delegate->buildRegistryFunction = buildRegistryFunction; + return instance; +} +void MainComponentsRegistry::registerNatives() { + registerHybrid({ + makeNativeMethod("initHybrid", MainComponentsRegistry::initHybrid), + }); +} +} // namespace react +} // namespace facebook \ No newline at end of file diff --git a/example/android/app/src/main/jni/MainComponentsRegistry.h b/example/android/app/src/main/jni/MainComponentsRegistry.h new file mode 100644 index 0000000000..068f82b6fb --- /dev/null +++ b/example/android/app/src/main/jni/MainComponentsRegistry.h @@ -0,0 +1,24 @@ +#pragma once +#include +#include +#include +#include +namespace facebook { +namespace react { +class MainComponentsRegistry + : public facebook::jni::HybridClass { + public: + // Adapt it to the package you used for your Java class. + constexpr static auto kJavaDescriptor = + "Lcom/example/newarchitecture/components/MainComponentsRegistry;"; + static void registerNatives(); + MainComponentsRegistry(ComponentFactory *delegate); + private: + static std::shared_ptr + sharedProviderRegistry(); + static jni::local_ref initHybrid( + jni::alias_ref, + ComponentFactory *delegate); +}; +} // namespace react +} // namespace facebook \ No newline at end of file diff --git a/example/android/app/src/main/jni/OnLoad.cpp b/example/android/app/src/main/jni/OnLoad.cpp new file mode 100644 index 0000000000..6f2082d2a2 --- /dev/null +++ b/example/android/app/src/main/jni/OnLoad.cpp @@ -0,0 +1,10 @@ +#include +#include "MainApplicationTurboModuleManagerDelegate.h" +#include "MainComponentsRegistry.h" +JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) { + return facebook::jni::initialize(vm, [] { + facebook::react::MainApplicationTurboModuleManagerDelegate:: + registerNatives(); + facebook::react::MainComponentsRegistry::registerNatives(); + }); +} \ No newline at end of file diff --git a/example/android/build.gradle b/example/android/build.gradle index 88566b8121..4d17f64050 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -3,17 +3,19 @@ buildscript { ext.kotlin_version = '1.5.20' ext { - buildToolsVersion = "30.0.2" + buildToolsVersion = "31.0.0" minSdkVersion = 21 - compileSdkVersion = 30 - targetSdkVersion = 30 + compileSdkVersion = 31 + targetSdkVersion = 31 } repositories { google() jcenter() } dependencies { - classpath("com.android.tools.build:gradle:4.2.2") + classpath("com.android.tools.build:gradle:7.0.4") + classpath("com.facebook.react:react-native-gradle-plugin") + classpath("de.undercouch:gradle-download-task:4.1.2") classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/example/android/gradle.properties b/example/android/gradle.properties index 30f0c824f9..83b98f1ea8 100644 --- a/example/android/gradle.properties +++ b/example/android/gradle.properties @@ -10,7 +10,8 @@ # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. # Default value: -Xmx10248m -XX:MaxPermSize=256m -org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 +# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m +org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit @@ -25,4 +26,14 @@ android.useAndroidX=true android.enableJetifier=true # Version of flipper SDK to use with React Native -FLIPPER_VERSION=0.99.0 +FLIPPER_VERSION=0.125.0 +# Use this property to specify which architecture you want to build. +# You can also override it from the CLI using +# ./gradlew -PreactNativeArchitectures=x86_64 +reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 +# Use this property to enable support to the new architecture. +# This will allow you to use TurboModules and the Fabric render in +# your application. You should enable this flag either if you want +# to write custom TurboModules/Fabric components OR use libraries that +# are providing them. +newArchEnabled=false diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties index a0f7639f7d..669386b870 100644 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/example/android/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/example/android/gradlew b/example/android/gradlew index 2fe81a7d95..a58591e97b 100755 --- a/example/android/gradlew +++ b/example/android/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,78 +17,113 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +APP_BASE_NAME=${0##*/} # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -97,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -105,79 +140,95 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=`expr $i + 1` + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' -exec "$JAVACMD" "$@" +exec "$JAVACMD" "$@" \ No newline at end of file diff --git a/example/android/settings.gradle b/example/android/settings.gradle index 5635978020..9a329b33c5 100644 --- a/example/android/settings.gradle +++ b/example/android/settings.gradle @@ -3,3 +3,9 @@ apply from: file("../node_modules/@react-native-community/cli-platform-android/n include ':app' include ':react-native-gesture-handler' project(':react-native-gesture-handler').projectDir = new File(rootProject.projectDir, '../../android') + +includeBuild('../node_modules/react-native-gradle-plugin') +if (settings.hasProperty("newArchEnabled") && settings.newArchEnabled == "true") { + include(":ReactAndroid") + project(":ReactAndroid").projectDir = file('../node_modules/react-native/ReactAndroid') +} diff --git a/example/ios/Example.xcodeproj/project.pbxproj b/example/ios/Example.xcodeproj/project.pbxproj index 3f9128c743..ea52a3c442 100644 --- a/example/ios/Example.xcodeproj/project.pbxproj +++ b/example/ios/Example.xcodeproj/project.pbxproj @@ -9,10 +9,10 @@ /* Begin PBXBuildFile section */ 00E356F31AD99517003FC87E /* ExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* ExampleTests.m */; }; 110A0048258675A500B148CB /* MBFingerTipWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 110A0046258675A400B148CB /* MBFingerTipWindow.m */; }; - 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; + 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; - 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; + 2D02E4BC1E0B4A80006451C7 /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; }; 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 2DCD954D1E0B4F2C00145EB5 /* ExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* ExampleTests.m */; }; @@ -50,7 +50,7 @@ 110A0047258675A500B148CB /* MBFingerTipWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MBFingerTipWindow.h; sourceTree = ""; }; 13B07F961A680F5B00A75B9A /* Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = Example/AppDelegate.h; sourceTree = ""; }; - 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = Example/AppDelegate.m; sourceTree = ""; }; + 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = Example/AppDelegate.mm; sourceTree = ""; }; 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Example/Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Example/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Example/main.m; sourceTree = ""; }; @@ -132,7 +132,7 @@ 110A0046258675A400B148CB /* MBFingerTipWindow.m */, 008F07F21AC5B25A0029DE68 /* main.jsbundle */, 13B07FAF1A68108700A75B9A /* AppDelegate.h */, - 13B07FB01A68108700A75B9A /* AppDelegate.m */, + 13B07FB01A68108700A75B9A /* AppDelegate.mm */, 13B07FB51A68108700A75B9A /* Images.xcassets */, 13B07FB61A68108700A75B9A /* Info.plist */, 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */, @@ -509,11 +509,13 @@ inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks.sh", "${PODS_XCFRAMEWORKS_BUILD_DIR}/Flipper-DoubleConversion/double-conversion.framework/double-conversion", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/Flipper-Glog/glog.framework/glog", "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/double-conversion.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/glog.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OpenSSL.framework", ); runOnlyForDeploymentPostprocessing = 0; @@ -529,11 +531,13 @@ inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Example-ExampleTests/Pods-Example-ExampleTests-frameworks.sh", "${PODS_XCFRAMEWORKS_BUILD_DIR}/Flipper-DoubleConversion/double-conversion.framework/double-conversion", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/Flipper-Glog/glog.framework/glog", "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/double-conversion.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/glog.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OpenSSL.framework", ); runOnlyForDeploymentPostprocessing = 0; @@ -616,7 +620,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, + 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */, 13B07FC11A68108700A75B9A /* main.m in Sources */, 110A0048258675A500B148CB /* MBFingerTipWindow.m in Sources */, ); @@ -627,7 +631,7 @@ buildActionMask = 2147483647; files = ( 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */, - 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */, + 2D02E4BC1E0B4A80006451C7 /* AppDelegate.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/example/ios/Example/AppDelegate.m b/example/ios/Example/AppDelegate.m deleted file mode 100644 index b5748fa704..0000000000 --- a/example/ios/Example/AppDelegate.m +++ /dev/null @@ -1,61 +0,0 @@ -#import "AppDelegate.h" - -#import -#import -#import -#import "MBFingerTipWindow.h" - -#ifdef FB_SONARKIT_ENABLED -#import -#import -#import -#import -#import -#import - -static void InitializeFlipper(UIApplication *application) { - FlipperClient *client = [FlipperClient sharedClient]; - SKDescriptorMapper *layoutDescriptorMapper = [[SKDescriptorMapper alloc] initWithDefaults]; - [client addPlugin:[[FlipperKitLayoutPlugin alloc] initWithRootNode:application withDescriptorMapper:layoutDescriptorMapper]]; - [client addPlugin:[[FKUserDefaultsPlugin alloc] initWithSuiteName:nil]]; - [client addPlugin:[FlipperKitReactPlugin new]]; - [client addPlugin:[[FlipperKitNetworkPlugin alloc] initWithNetworkAdapter:[SKIOSNetworkAdapter new]]]; - [client start]; -} -#endif - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ -#ifdef FB_SONARKIT_ENABLED - InitializeFlipper(application); -#endif - - RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; - RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge - moduleName:@"Example" - initialProperties:nil]; - - rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; - - MBFingerTipWindow *window = [[MBFingerTipWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - window.alwaysShowTouches = YES; - self.window = window; - UIViewController *rootViewController = [UIViewController new]; - rootViewController.view = rootView; - self.window.rootViewController = rootViewController; - [self.window makeKeyAndVisible]; - return YES; -} - -- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge -{ -#if DEBUG - return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; -#else - return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; -#endif -} - -@end diff --git a/example/ios/Example/AppDelegate.mm b/example/ios/Example/AppDelegate.mm new file mode 100644 index 0000000000..594681eec1 --- /dev/null +++ b/example/ios/Example/AppDelegate.mm @@ -0,0 +1,168 @@ +#import "AppDelegate.h" +#import "MBFingerTipWindow.h" +#import +#import +#import +#import +#if RCT_NEW_ARCH_ENABLED +#import +#import +#import +#import +#import +#import + +#import + +@interface AppDelegate () { + RCTTurboModuleManager *_turboModuleManager; + RCTSurfacePresenterBridgeAdapter *_bridgeAdapter; + std::shared_ptr _reactNativeConfig; + facebook::react::ContextContainer::Shared _contextContainer; +} +@end +#endif + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + RCTAppSetupPrepareApp(application); + RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; + +#if RCT_NEW_ARCH_ENABLED + _contextContainer = std::make_shared(); + _reactNativeConfig = std::make_shared(); + _contextContainer->insert("ReactNativeConfig", _reactNativeConfig); + _bridgeAdapter = [[RCTSurfacePresenterBridgeAdapter alloc] initWithBridge:bridge contextContainer:_contextContainer]; + bridge.surfacePresenter = _bridgeAdapter.surfacePresenter; +#endif + + UIView *rootView = RCTAppSetupDefaultRootView(bridge, @"Example", nil); + + if (@available(iOS 13.0, *)) { + rootView.backgroundColor = [UIColor systemBackgroundColor]; + } else { + rootView.backgroundColor = [UIColor whiteColor]; + } + + MBFingerTipWindow *window = [[MBFingerTipWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; + window.alwaysShowTouches = YES; + self.window = window; + UIViewController *rootViewController = [UIViewController new]; + rootViewController.view = rootView; + self.window.rootViewController = rootViewController; + [self.window makeKeyAndVisible]; + return YES; +} + +- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge +{ +#if DEBUG + return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"]; +#else + return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; +#endif +} + +#if RCT_NEW_ARCH_ENABLED + +#pragma mark - RCTCxxBridgeDelegate + +- (std::unique_ptr)jsExecutorFactoryForBridge:(RCTBridge *)bridge +{ + _turboModuleManager = [[RCTTurboModuleManager alloc] initWithBridge:bridge + delegate:self + jsInvoker:bridge.jsCallInvoker]; + return RCTAppSetupDefaultJsExecutorFactory(bridge, _turboModuleManager); +} + +#pragma mark RCTTurboModuleManagerDelegate + +- (Class)getModuleClassFromName:(const char *)name +{ + return RCTCoreModulesClassProvider(name); +} + +- (std::shared_ptr)getTurboModule:(const std::string &)name + jsInvoker:(std::shared_ptr)jsInvoker +{ + return nullptr; +} + +- (std::shared_ptr)getTurboModule:(const std::string &)name + initParams: + (const facebook::react::ObjCTurboModule::InitParams &)params +{ + return nullptr; +} + +- (id)getModuleInstanceFromClass:(Class)moduleClass +{ + return RCTAppSetupDefaultModuleFromClass(moduleClass); +} +#endif + +@end + +// #import "AppDelegate.h" + +// #import +// #import +// #import +// #import "MBFingerTipWindow.h" + +// #ifdef FB_SONARKIT_ENABLED +// #import +// #import +// #import +// #import +// #import +// #import + +// static void InitializeFlipper(UIApplication *application) { +// FlipperClient *client = [FlipperClient sharedClient]; +// SKDescriptorMapper *layoutDescriptorMapper = [[SKDescriptorMapper alloc] initWithDefaults]; +// [client addPlugin:[[FlipperKitLayoutPlugin alloc] initWithRootNode:application withDescriptorMapper:layoutDescriptorMapper]]; +// [client addPlugin:[[FKUserDefaultsPlugin alloc] initWithSuiteName:nil]]; +// [client addPlugin:[FlipperKitReactPlugin new]]; +// [client addPlugin:[[FlipperKitNetworkPlugin alloc] initWithNetworkAdapter:[SKIOSNetworkAdapter new]]]; +// [client start]; +// } +// #endif + +// @implementation AppDelegate + +// - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +// { +// #ifdef FB_SONARKIT_ENABLED +// InitializeFlipper(application); +// #endif + +// RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; +// RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge +// moduleName:@"Example" +// initialProperties:nil]; + +// rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; + +// MBFingerTipWindow *window = [[MBFingerTipWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; +// window.alwaysShowTouches = YES; +// self.window = window; +// UIViewController *rootViewController = [UIViewController new]; +// rootViewController.view = rootView; +// self.window.rootViewController = rootViewController; +// [self.window makeKeyAndVisible]; +// return YES; +// } + +// - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge +// { +// #if DEBUG +// return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; +// #else +// return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; +// #endif +// } + +// @end diff --git a/example/ios/Podfile b/example/ios/Podfile index c1d324cba5..fb0b642830 100644 --- a/example/ios/Podfile +++ b/example/ios/Podfile @@ -2,14 +2,21 @@ require_relative '../node_modules/react-native/scripts/react_native_pods' require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' platform :ios, '11.0' +install! 'cocoapods', :deterministic_uuids => false target 'Example' do config = use_native_modules! + # Flags change depending on the env values. + flags = get_default_flags() + use_react_native!( :path => config[:reactNativePath], # to enable hermes on iOS, change `false` to `true` and then install pods - :hermes_enabled => false + :hermes_enabled => flags[:hermes_enabled], + :fabric_enabled => flags[:fabric_enabled], + # An absolute path to your application root. + :app_path => "#{Pod::Config.instance.installation_root}/.." ) pod 'RNGestureHandler', :path => '../..' diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index 50139e29ed..64e18b3b60 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -2,78 +2,79 @@ PODS: - boost (1.76.0) - CocoaAsyncSocket (7.6.5) - DoubleConversion (1.1.6) - - FBLazyVector (0.67.2) - - FBReactNativeSpec (0.67.2): + - FBLazyVector (0.68.0) + - FBReactNativeSpec (0.68.0): - RCT-Folly (= 2021.06.28.00-v2) - - RCTRequired (= 0.67.2) - - RCTTypeSafety (= 0.67.2) - - React-Core (= 0.67.2) - - React-jsi (= 0.67.2) - - ReactCommon/turbomodule/core (= 0.67.2) - - Flipper (0.99.0): + - RCTRequired (= 0.68.0) + - RCTTypeSafety (= 0.68.0) + - React-Core (= 0.68.0) + - React-jsi (= 0.68.0) + - ReactCommon/turbomodule/core (= 0.68.0) + - Flipper (0.125.0): - Flipper-Folly (~> 2.6) - Flipper-RSocket (~> 1.4) - Flipper-Boost-iOSX (1.76.0.1.11) - - Flipper-DoubleConversion (3.1.7) + - Flipper-DoubleConversion (3.2.0) - Flipper-Fmt (7.1.7) - - Flipper-Folly (2.6.7): + - Flipper-Folly (2.6.10): - Flipper-Boost-iOSX - Flipper-DoubleConversion - Flipper-Fmt (= 7.1.7) - Flipper-Glog - libevent (~> 2.1.12) - - OpenSSL-Universal (= 1.1.180) - - Flipper-Glog (0.3.6) + - OpenSSL-Universal (= 1.1.1100) + - Flipper-Glog (0.5.0.4) - Flipper-PeerTalk (0.0.4) - Flipper-RSocket (1.4.3): - Flipper-Folly (~> 2.6) - - FlipperKit (0.99.0): - - FlipperKit/Core (= 0.99.0) - - FlipperKit/Core (0.99.0): - - Flipper (~> 0.99.0) + - FlipperKit (0.125.0): + - FlipperKit/Core (= 0.125.0) + - FlipperKit/Core (0.125.0): + - Flipper (~> 0.125.0) - FlipperKit/CppBridge - FlipperKit/FBCxxFollyDynamicConvert - FlipperKit/FBDefines - FlipperKit/FKPortForwarding - - FlipperKit/CppBridge (0.99.0): - - Flipper (~> 0.99.0) - - FlipperKit/FBCxxFollyDynamicConvert (0.99.0): + - SocketRocket (~> 0.6.0) + - FlipperKit/CppBridge (0.125.0): + - Flipper (~> 0.125.0) + - FlipperKit/FBCxxFollyDynamicConvert (0.125.0): - Flipper-Folly (~> 2.6) - - FlipperKit/FBDefines (0.99.0) - - FlipperKit/FKPortForwarding (0.99.0): + - FlipperKit/FBDefines (0.125.0) + - FlipperKit/FKPortForwarding (0.125.0): - CocoaAsyncSocket (~> 7.6) - Flipper-PeerTalk (~> 0.0.4) - - FlipperKit/FlipperKitHighlightOverlay (0.99.0) - - FlipperKit/FlipperKitLayoutHelpers (0.99.0): + - FlipperKit/FlipperKitHighlightOverlay (0.125.0) + - FlipperKit/FlipperKitLayoutHelpers (0.125.0): - FlipperKit/Core - FlipperKit/FlipperKitHighlightOverlay - FlipperKit/FlipperKitLayoutTextSearchable - - FlipperKit/FlipperKitLayoutIOSDescriptors (0.99.0): + - FlipperKit/FlipperKitLayoutIOSDescriptors (0.125.0): - FlipperKit/Core - FlipperKit/FlipperKitHighlightOverlay - FlipperKit/FlipperKitLayoutHelpers - YogaKit (~> 1.18) - - FlipperKit/FlipperKitLayoutPlugin (0.99.0): + - FlipperKit/FlipperKitLayoutPlugin (0.125.0): - FlipperKit/Core - FlipperKit/FlipperKitHighlightOverlay - FlipperKit/FlipperKitLayoutHelpers - FlipperKit/FlipperKitLayoutIOSDescriptors - FlipperKit/FlipperKitLayoutTextSearchable - YogaKit (~> 1.18) - - FlipperKit/FlipperKitLayoutTextSearchable (0.99.0) - - FlipperKit/FlipperKitNetworkPlugin (0.99.0): + - FlipperKit/FlipperKitLayoutTextSearchable (0.125.0) + - FlipperKit/FlipperKitNetworkPlugin (0.125.0): - FlipperKit/Core - - FlipperKit/FlipperKitReactPlugin (0.99.0): + - FlipperKit/FlipperKitReactPlugin (0.125.0): - FlipperKit/Core - - FlipperKit/FlipperKitUserDefaultsPlugin (0.99.0): + - FlipperKit/FlipperKitUserDefaultsPlugin (0.125.0): - FlipperKit/Core - - FlipperKit/SKIOSNetworkPlugin (0.99.0): + - FlipperKit/SKIOSNetworkPlugin (0.125.0): - FlipperKit/Core - FlipperKit/FlipperKitNetworkPlugin - fmt (6.2.1) - glog (0.3.5) - libevent (2.1.12) - - OpenSSL-Universal (1.1.180) + - OpenSSL-Universal (1.1.1100) - RCT-Folly (2021.06.28.00-v2): - boost - DoubleConversion @@ -85,192 +86,201 @@ PODS: - DoubleConversion - fmt (~> 6.2.1) - glog - - RCTRequired (0.67.2) - - RCTTypeSafety (0.67.2): - - FBLazyVector (= 0.67.2) + - RCTRequired (0.68.0) + - RCTTypeSafety (0.68.0): + - FBLazyVector (= 0.68.0) - RCT-Folly (= 2021.06.28.00-v2) - - RCTRequired (= 0.67.2) - - React-Core (= 0.67.2) - - React (0.67.2): - - React-Core (= 0.67.2) - - React-Core/DevSupport (= 0.67.2) - - React-Core/RCTWebSocket (= 0.67.2) - - React-RCTActionSheet (= 0.67.2) - - React-RCTAnimation (= 0.67.2) - - React-RCTBlob (= 0.67.2) - - React-RCTImage (= 0.67.2) - - React-RCTLinking (= 0.67.2) - - React-RCTNetwork (= 0.67.2) - - React-RCTSettings (= 0.67.2) - - React-RCTText (= 0.67.2) - - React-RCTVibration (= 0.67.2) - - React-callinvoker (0.67.2) - - React-Core (0.67.2): + - RCTRequired (= 0.68.0) + - React-Core (= 0.68.0) + - React (0.68.0): + - React-Core (= 0.68.0) + - React-Core/DevSupport (= 0.68.0) + - React-Core/RCTWebSocket (= 0.68.0) + - React-RCTActionSheet (= 0.68.0) + - React-RCTAnimation (= 0.68.0) + - React-RCTBlob (= 0.68.0) + - React-RCTImage (= 0.68.0) + - React-RCTLinking (= 0.68.0) + - React-RCTNetwork (= 0.68.0) + - React-RCTSettings (= 0.68.0) + - React-RCTText (= 0.68.0) + - React-RCTVibration (= 0.68.0) + - React-callinvoker (0.68.0) + - React-Codegen (0.68.0): + - FBReactNativeSpec (= 0.68.0) + - RCT-Folly (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.0) + - RCTTypeSafety (= 0.68.0) + - React-Core (= 0.68.0) + - React-jsi (= 0.68.0) + - React-jsiexecutor (= 0.68.0) + - ReactCommon/turbomodule/core (= 0.68.0) + - React-Core (0.68.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.67.2) - - React-cxxreact (= 0.67.2) - - React-jsi (= 0.67.2) - - React-jsiexecutor (= 0.67.2) - - React-perflogger (= 0.67.2) + - React-Core/Default (= 0.68.0) + - React-cxxreact (= 0.68.0) + - React-jsi (= 0.68.0) + - React-jsiexecutor (= 0.68.0) + - React-perflogger (= 0.68.0) - Yoga - - React-Core/CoreModulesHeaders (0.67.2): + - React-Core/CoreModulesHeaders (0.68.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.67.2) - - React-jsi (= 0.67.2) - - React-jsiexecutor (= 0.67.2) - - React-perflogger (= 0.67.2) + - React-cxxreact (= 0.68.0) + - React-jsi (= 0.68.0) + - React-jsiexecutor (= 0.68.0) + - React-perflogger (= 0.68.0) - Yoga - - React-Core/Default (0.67.2): + - React-Core/Default (0.68.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-cxxreact (= 0.67.2) - - React-jsi (= 0.67.2) - - React-jsiexecutor (= 0.67.2) - - React-perflogger (= 0.67.2) + - React-cxxreact (= 0.68.0) + - React-jsi (= 0.68.0) + - React-jsiexecutor (= 0.68.0) + - React-perflogger (= 0.68.0) - Yoga - - React-Core/DevSupport (0.67.2): + - React-Core/DevSupport (0.68.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.67.2) - - React-Core/RCTWebSocket (= 0.67.2) - - React-cxxreact (= 0.67.2) - - React-jsi (= 0.67.2) - - React-jsiexecutor (= 0.67.2) - - React-jsinspector (= 0.67.2) - - React-perflogger (= 0.67.2) + - React-Core/Default (= 0.68.0) + - React-Core/RCTWebSocket (= 0.68.0) + - React-cxxreact (= 0.68.0) + - React-jsi (= 0.68.0) + - React-jsiexecutor (= 0.68.0) + - React-jsinspector (= 0.68.0) + - React-perflogger (= 0.68.0) - Yoga - - React-Core/RCTActionSheetHeaders (0.67.2): + - React-Core/RCTActionSheetHeaders (0.68.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.67.2) - - React-jsi (= 0.67.2) - - React-jsiexecutor (= 0.67.2) - - React-perflogger (= 0.67.2) + - React-cxxreact (= 0.68.0) + - React-jsi (= 0.68.0) + - React-jsiexecutor (= 0.68.0) + - React-perflogger (= 0.68.0) - Yoga - - React-Core/RCTAnimationHeaders (0.67.2): + - React-Core/RCTAnimationHeaders (0.68.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.67.2) - - React-jsi (= 0.67.2) - - React-jsiexecutor (= 0.67.2) - - React-perflogger (= 0.67.2) + - React-cxxreact (= 0.68.0) + - React-jsi (= 0.68.0) + - React-jsiexecutor (= 0.68.0) + - React-perflogger (= 0.68.0) - Yoga - - React-Core/RCTBlobHeaders (0.67.2): + - React-Core/RCTBlobHeaders (0.68.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.67.2) - - React-jsi (= 0.67.2) - - React-jsiexecutor (= 0.67.2) - - React-perflogger (= 0.67.2) + - React-cxxreact (= 0.68.0) + - React-jsi (= 0.68.0) + - React-jsiexecutor (= 0.68.0) + - React-perflogger (= 0.68.0) - Yoga - - React-Core/RCTImageHeaders (0.67.2): + - React-Core/RCTImageHeaders (0.68.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.67.2) - - React-jsi (= 0.67.2) - - React-jsiexecutor (= 0.67.2) - - React-perflogger (= 0.67.2) + - React-cxxreact (= 0.68.0) + - React-jsi (= 0.68.0) + - React-jsiexecutor (= 0.68.0) + - React-perflogger (= 0.68.0) - Yoga - - React-Core/RCTLinkingHeaders (0.67.2): + - React-Core/RCTLinkingHeaders (0.68.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.67.2) - - React-jsi (= 0.67.2) - - React-jsiexecutor (= 0.67.2) - - React-perflogger (= 0.67.2) + - React-cxxreact (= 0.68.0) + - React-jsi (= 0.68.0) + - React-jsiexecutor (= 0.68.0) + - React-perflogger (= 0.68.0) - Yoga - - React-Core/RCTNetworkHeaders (0.67.2): + - React-Core/RCTNetworkHeaders (0.68.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.67.2) - - React-jsi (= 0.67.2) - - React-jsiexecutor (= 0.67.2) - - React-perflogger (= 0.67.2) + - React-cxxreact (= 0.68.0) + - React-jsi (= 0.68.0) + - React-jsiexecutor (= 0.68.0) + - React-perflogger (= 0.68.0) - Yoga - - React-Core/RCTSettingsHeaders (0.67.2): + - React-Core/RCTSettingsHeaders (0.68.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.67.2) - - React-jsi (= 0.67.2) - - React-jsiexecutor (= 0.67.2) - - React-perflogger (= 0.67.2) + - React-cxxreact (= 0.68.0) + - React-jsi (= 0.68.0) + - React-jsiexecutor (= 0.68.0) + - React-perflogger (= 0.68.0) - Yoga - - React-Core/RCTTextHeaders (0.67.2): + - React-Core/RCTTextHeaders (0.68.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.67.2) - - React-jsi (= 0.67.2) - - React-jsiexecutor (= 0.67.2) - - React-perflogger (= 0.67.2) + - React-cxxreact (= 0.68.0) + - React-jsi (= 0.68.0) + - React-jsiexecutor (= 0.68.0) + - React-perflogger (= 0.68.0) - Yoga - - React-Core/RCTVibrationHeaders (0.67.2): + - React-Core/RCTVibrationHeaders (0.68.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.67.2) - - React-jsi (= 0.67.2) - - React-jsiexecutor (= 0.67.2) - - React-perflogger (= 0.67.2) + - React-cxxreact (= 0.68.0) + - React-jsi (= 0.68.0) + - React-jsiexecutor (= 0.68.0) + - React-perflogger (= 0.68.0) - Yoga - - React-Core/RCTWebSocket (0.67.2): + - React-Core/RCTWebSocket (0.68.0): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.67.2) - - React-cxxreact (= 0.67.2) - - React-jsi (= 0.67.2) - - React-jsiexecutor (= 0.67.2) - - React-perflogger (= 0.67.2) + - React-Core/Default (= 0.68.0) + - React-cxxreact (= 0.68.0) + - React-jsi (= 0.68.0) + - React-jsiexecutor (= 0.68.0) + - React-perflogger (= 0.68.0) - Yoga - - React-CoreModules (0.67.2): - - FBReactNativeSpec (= 0.67.2) + - React-CoreModules (0.68.0): - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.67.2) - - React-Core/CoreModulesHeaders (= 0.67.2) - - React-jsi (= 0.67.2) - - React-RCTImage (= 0.67.2) - - ReactCommon/turbomodule/core (= 0.67.2) - - React-cxxreact (0.67.2): + - RCTTypeSafety (= 0.68.0) + - React-Codegen (= 0.68.0) + - React-Core/CoreModulesHeaders (= 0.68.0) + - React-jsi (= 0.68.0) + - React-RCTImage (= 0.68.0) + - ReactCommon/turbomodule/core (= 0.68.0) + - React-cxxreact (0.68.0): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-callinvoker (= 0.67.2) - - React-jsi (= 0.67.2) - - React-jsinspector (= 0.67.2) - - React-logger (= 0.67.2) - - React-perflogger (= 0.67.2) - - React-runtimeexecutor (= 0.67.2) - - React-jsi (0.67.2): + - React-callinvoker (= 0.68.0) + - React-jsi (= 0.68.0) + - React-jsinspector (= 0.68.0) + - React-logger (= 0.68.0) + - React-perflogger (= 0.68.0) + - React-runtimeexecutor (= 0.68.0) + - React-jsi (0.68.0): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-jsi/Default (= 0.67.2) - - React-jsi/Default (0.67.2): + - React-jsi/Default (= 0.68.0) + - React-jsi/Default (0.68.0): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-jsiexecutor (0.67.2): + - React-jsiexecutor (0.68.0): - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-cxxreact (= 0.67.2) - - React-jsi (= 0.67.2) - - React-perflogger (= 0.67.2) - - React-jsinspector (0.67.2) - - React-logger (0.67.2): + - React-cxxreact (= 0.68.0) + - React-jsi (= 0.68.0) + - React-perflogger (= 0.68.0) + - React-jsinspector (0.68.0) + - React-logger (0.68.0): - glog - react-native-safe-area-context (3.1.9): - React-Core @@ -278,76 +288,76 @@ PODS: - React - react-native-viewpager (4.2.1): - React-Core - - React-perflogger (0.67.2) - - React-RCTActionSheet (0.67.2): - - React-Core/RCTActionSheetHeaders (= 0.67.2) - - React-RCTAnimation (0.67.2): - - FBReactNativeSpec (= 0.67.2) + - React-perflogger (0.68.0) + - React-RCTActionSheet (0.68.0): + - React-Core/RCTActionSheetHeaders (= 0.68.0) + - React-RCTAnimation (0.68.0): - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.67.2) - - React-Core/RCTAnimationHeaders (= 0.67.2) - - React-jsi (= 0.67.2) - - ReactCommon/turbomodule/core (= 0.67.2) - - React-RCTBlob (0.67.2): - - FBReactNativeSpec (= 0.67.2) + - RCTTypeSafety (= 0.68.0) + - React-Codegen (= 0.68.0) + - React-Core/RCTAnimationHeaders (= 0.68.0) + - React-jsi (= 0.68.0) + - ReactCommon/turbomodule/core (= 0.68.0) + - React-RCTBlob (0.68.0): - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/RCTBlobHeaders (= 0.67.2) - - React-Core/RCTWebSocket (= 0.67.2) - - React-jsi (= 0.67.2) - - React-RCTNetwork (= 0.67.2) - - ReactCommon/turbomodule/core (= 0.67.2) - - React-RCTImage (0.67.2): - - FBReactNativeSpec (= 0.67.2) + - React-Codegen (= 0.68.0) + - React-Core/RCTBlobHeaders (= 0.68.0) + - React-Core/RCTWebSocket (= 0.68.0) + - React-jsi (= 0.68.0) + - React-RCTNetwork (= 0.68.0) + - ReactCommon/turbomodule/core (= 0.68.0) + - React-RCTImage (0.68.0): - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.67.2) - - React-Core/RCTImageHeaders (= 0.67.2) - - React-jsi (= 0.67.2) - - React-RCTNetwork (= 0.67.2) - - ReactCommon/turbomodule/core (= 0.67.2) - - React-RCTLinking (0.67.2): - - FBReactNativeSpec (= 0.67.2) - - React-Core/RCTLinkingHeaders (= 0.67.2) - - React-jsi (= 0.67.2) - - ReactCommon/turbomodule/core (= 0.67.2) - - React-RCTNetwork (0.67.2): - - FBReactNativeSpec (= 0.67.2) + - RCTTypeSafety (= 0.68.0) + - React-Codegen (= 0.68.0) + - React-Core/RCTImageHeaders (= 0.68.0) + - React-jsi (= 0.68.0) + - React-RCTNetwork (= 0.68.0) + - ReactCommon/turbomodule/core (= 0.68.0) + - React-RCTLinking (0.68.0): + - React-Codegen (= 0.68.0) + - React-Core/RCTLinkingHeaders (= 0.68.0) + - React-jsi (= 0.68.0) + - ReactCommon/turbomodule/core (= 0.68.0) + - React-RCTNetwork (0.68.0): - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.67.2) - - React-Core/RCTNetworkHeaders (= 0.67.2) - - React-jsi (= 0.67.2) - - ReactCommon/turbomodule/core (= 0.67.2) - - React-RCTSettings (0.67.2): - - FBReactNativeSpec (= 0.67.2) + - RCTTypeSafety (= 0.68.0) + - React-Codegen (= 0.68.0) + - React-Core/RCTNetworkHeaders (= 0.68.0) + - React-jsi (= 0.68.0) + - ReactCommon/turbomodule/core (= 0.68.0) + - React-RCTSettings (0.68.0): - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.67.2) - - React-Core/RCTSettingsHeaders (= 0.67.2) - - React-jsi (= 0.67.2) - - ReactCommon/turbomodule/core (= 0.67.2) - - React-RCTText (0.67.2): - - React-Core/RCTTextHeaders (= 0.67.2) - - React-RCTVibration (0.67.2): - - FBReactNativeSpec (= 0.67.2) + - RCTTypeSafety (= 0.68.0) + - React-Codegen (= 0.68.0) + - React-Core/RCTSettingsHeaders (= 0.68.0) + - React-jsi (= 0.68.0) + - ReactCommon/turbomodule/core (= 0.68.0) + - React-RCTText (0.68.0): + - React-Core/RCTTextHeaders (= 0.68.0) + - React-RCTVibration (0.68.0): - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/RCTVibrationHeaders (= 0.67.2) - - React-jsi (= 0.67.2) - - ReactCommon/turbomodule/core (= 0.67.2) - - React-runtimeexecutor (0.67.2): - - React-jsi (= 0.67.2) - - ReactCommon/turbomodule/core (0.67.2): + - React-Codegen (= 0.68.0) + - React-Core/RCTVibrationHeaders (= 0.68.0) + - React-jsi (= 0.68.0) + - ReactCommon/turbomodule/core (= 0.68.0) + - React-runtimeexecutor (0.68.0): + - React-jsi (= 0.68.0) + - ReactCommon/turbomodule/core (0.68.0): - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-callinvoker (= 0.67.2) - - React-Core (= 0.67.2) - - React-cxxreact (= 0.67.2) - - React-jsi (= 0.67.2) - - React-logger (= 0.67.2) - - React-perflogger (= 0.67.2) + - React-callinvoker (= 0.68.0) + - React-Core (= 0.68.0) + - React-cxxreact (= 0.68.0) + - React-jsi (= 0.68.0) + - React-logger (= 0.68.0) + - React-perflogger (= 0.68.0) - RNCMaskedView (0.1.10): - React - - RNGestureHandler (2.2.0): + - RNGestureHandler (2.5.0): - React-Core - - RNReanimated (2.3.1): + - RNReanimated (2.6.0): - DoubleConversion - FBLazyVector - FBReactNativeSpec @@ -355,7 +365,6 @@ PODS: - RCT-Folly - RCTRequired - RCTTypeSafety - - React - React-callinvoker - React-Core - React-Core/DevSupport @@ -375,8 +384,10 @@ PODS: - React-RCTText - ReactCommon/turbomodule/core - Yoga - - RNScreens (2.15.0): + - RNScreens (3.13.1): - React-Core + - React-RCTImage + - SocketRocket (0.6.0) - Yoga (1.14.0) - YogaKit (1.18.1): - Yoga (~> 1.14) @@ -386,34 +397,35 @@ DEPENDENCIES: - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`) - - Flipper (= 0.99.0) + - Flipper (= 0.125.0) - Flipper-Boost-iOSX (= 1.76.0.1.11) - - Flipper-DoubleConversion (= 3.1.7) + - Flipper-DoubleConversion (= 3.2.0) - Flipper-Fmt (= 7.1.7) - - Flipper-Folly (= 2.6.7) - - Flipper-Glog (= 0.3.6) + - Flipper-Folly (= 2.6.10) + - Flipper-Glog (= 0.5.0.4) - Flipper-PeerTalk (= 0.0.4) - Flipper-RSocket (= 1.4.3) - - FlipperKit (= 0.99.0) - - FlipperKit/Core (= 0.99.0) - - FlipperKit/CppBridge (= 0.99.0) - - FlipperKit/FBCxxFollyDynamicConvert (= 0.99.0) - - FlipperKit/FBDefines (= 0.99.0) - - FlipperKit/FKPortForwarding (= 0.99.0) - - FlipperKit/FlipperKitHighlightOverlay (= 0.99.0) - - FlipperKit/FlipperKitLayoutPlugin (= 0.99.0) - - FlipperKit/FlipperKitLayoutTextSearchable (= 0.99.0) - - FlipperKit/FlipperKitNetworkPlugin (= 0.99.0) - - FlipperKit/FlipperKitReactPlugin (= 0.99.0) - - FlipperKit/FlipperKitUserDefaultsPlugin (= 0.99.0) - - FlipperKit/SKIOSNetworkPlugin (= 0.99.0) + - FlipperKit (= 0.125.0) + - FlipperKit/Core (= 0.125.0) + - FlipperKit/CppBridge (= 0.125.0) + - FlipperKit/FBCxxFollyDynamicConvert (= 0.125.0) + - FlipperKit/FBDefines (= 0.125.0) + - FlipperKit/FKPortForwarding (= 0.125.0) + - FlipperKit/FlipperKitHighlightOverlay (= 0.125.0) + - FlipperKit/FlipperKitLayoutPlugin (= 0.125.0) + - FlipperKit/FlipperKitLayoutTextSearchable (= 0.125.0) + - FlipperKit/FlipperKitNetworkPlugin (= 0.125.0) + - FlipperKit/FlipperKitReactPlugin (= 0.125.0) + - FlipperKit/FlipperKitUserDefaultsPlugin (= 0.125.0) + - FlipperKit/SKIOSNetworkPlugin (= 0.125.0) - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) - - OpenSSL-Universal (= 1.1.180) + - OpenSSL-Universal (= 1.1.1100) - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`) - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) - React (from `../node_modules/react-native/`) - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) + - React-Codegen (from `build/generated/ios`) - React-Core (from `../node_modules/react-native/`) - React-Core/DevSupport (from `../node_modules/react-native/`) - React-Core/RCTWebSocket (from `../node_modules/react-native/`) @@ -459,6 +471,7 @@ SPEC REPOS: - fmt - libevent - OpenSSL-Universal + - SocketRocket - YogaKit EXTERNAL SOURCES: @@ -482,6 +495,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/" React-callinvoker: :path: "../node_modules/react-native/ReactCommon/callinvoker" + React-Codegen: + :path: build/generated/ios React-Core: :path: "../node_modules/react-native/" React-CoreModules: @@ -541,55 +556,57 @@ SPEC CHECKSUMS: boost: a7c83b31436843459a1961bfd74b96033dc77234 CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99 DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662 - FBLazyVector: 244195e30d63d7f564c55da4410b9a24e8fbceaa - FBReactNativeSpec: c94002c1d93da3658f4d5119c6994d19961e3d52 - Flipper: 30e8eeeed6abdc98edaf32af0cda2f198be4b733 + FBLazyVector: d2fd875e2b24bbc350722df0df9d383cb891b9f2 + FBReactNativeSpec: 7493e074a31512df3253160059295264a84b8149 + Flipper: 26fc4b7382499f1281eb8cb921e5c3ad6de91fe0 Flipper-Boost-iOSX: fd1e2b8cbef7e662a122412d7ac5f5bea715403c - Flipper-DoubleConversion: 57ffbe81ef95306cc9e69c4aa3aeeeeb58a6a28c + Flipper-DoubleConversion: 3d3d04a078d4f3a1b6c6916587f159dc11f232c4 Flipper-Fmt: 60cbdd92fc254826e61d669a5d87ef7015396a9b - Flipper-Folly: 83af37379faa69497529e414bd43fbfc7cae259a - Flipper-Glog: 1dfd6abf1e922806c52ceb8701a3599a79a200a6 + Flipper-Folly: 584845625005ff068a6ebf41f857f468decd26b3 + Flipper-Glog: 87bc98ff48de90cb5b0b5114ed3da79d85ee2dd4 Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9 Flipper-RSocket: d9d9ade67cbecf6ac10730304bf5607266dd2541 - FlipperKit: d8d346844eca5d9120c17d441a2f38596e8ed2b9 + FlipperKit: cbdee19bdd4e7f05472a66ce290f1b729ba3cb86 fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 glog: 85ecdd10ee8d8ec362ef519a6a45ff9aa27b2e85 libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913 - OpenSSL-Universal: 1aa4f6a6ee7256b83db99ec1ccdaa80d10f9af9b + OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c RCT-Folly: 803a9cfd78114b2ec0f140cfa6fa2a6bafb2d685 - RCTRequired: cd47794163052d2b8318c891a7a14fcfaccc75ab - RCTTypeSafety: 393bb40b3e357b224cde53d3fec26813c52428b1 - React: dec6476bc27155b250eeadfc11ea779265f53ebf - React-callinvoker: e5047929e80aea942e6fdd96482504ef0189ca63 - React-Core: e382655566b2b9a6e3b4f641d777b7bfdbe52358 - React-CoreModules: cf262e82fa101c0aee022b6f90d1a5b612038b64 - React-cxxreact: 69d53de3b30c7c161ba087ca1ecdffed9ccb1039 - React-jsi: ce9a2d804adf75809ce2fe2374ba3fbbf5d59b03 - React-jsiexecutor: 52beb652bbc61201bd70cbe4f0b8edb607e8da4f - React-jsinspector: 595f76eba2176ebd8817a1fffd47b84fbdab9383 - React-logger: 23de8ea0f44fa00ee77e96060273225607fd4d78 + RCTRequired: bab4a7c3d7eb9553b13773ee190f279712efd1fc + RCTTypeSafety: efbeb6e450ff6cef8e19c2cb5314c6d8bfeeef77 + React: 28e4d45839b7d0fd9512af899e0379a17a5172ec + React-callinvoker: 5585d1ef6795786f288690b19e08bed253c33155 + React-Codegen: 80ce98fda08a8ddb6f47116375ae2c1670bf8cda + React-Core: 122639d111d791eb00c2bc8d678cfeec46671744 + React-CoreModules: 4dee89a87599055ca172e73924e27531eb4dd570 + React-cxxreact: 15728f254c7e3b94ac9d53c626bff554a7c42b10 + React-jsi: 4d135a7813ea815981b434ec37c6cfd8280b127b + React-jsiexecutor: 010a66edf644339f6da72b34208b070089680415 + React-jsinspector: 90f0bfd5d04e0b066c29216a110ffb9a6c34f23f + React-logger: 8474fefa09d05f573a13c044cb0dfd751d4e52e3 react-native-safe-area-context: b6e0e284002381d2ff29fa4fff42b4d8282e3c94 react-native-slider: e99fc201cefe81270fc9d81714a7a0f5e566b168 react-native-viewpager: 40876e00dbd7bcee4c627cf5a9640e6593a019b4 - React-perflogger: 3c9bb7372493e49036f07a82c44c8cf65cbe88db - React-RCTActionSheet: 052606483045a408693aa7e864410b4a052f541a - React-RCTAnimation: 08d4cac13222bb1348c687a0158dfd3b577cdb63 - React-RCTBlob: 928ad1df65219c3d9e2ac80983b943a75b5c3629 - React-RCTImage: 524d7313b142a39ee0e20fa312b67277917fe076 - React-RCTLinking: 44036ea6f13a2e46238be07a67566247fee35244 - React-RCTNetwork: 9b6faacf1e0789253e319ca53b1f8d92c2ac5455 - React-RCTSettings: ecd8094f831130a49581d5112a8607220e5d12a5 - React-RCTText: 14ba976fb48ed283cfdb1a754a5d4276471e0152 - React-RCTVibration: 99c7f67fba7a5ade46e98e870c6ff2444484f995 - React-runtimeexecutor: 2450b43df7ffe8e805a0b3dcb2abd4282f1f1836 - ReactCommon: d98c6c96b567f9b3a15f9fd4cc302c1eda8e3cf2 + React-perflogger: 15cb741d6c2379f4d3fc8f9e4d4e1110ef3020cb + React-RCTActionSheet: ea9099db0597bd769430db1e2d011fd5fdb7fc5e + React-RCTAnimation: 252df4749866f2654f37612f839522cac91c1165 + React-RCTBlob: ae9ea73c6f84685ad9cd8ba2275cce6eaa26699d + React-RCTImage: 99ae69c73d31e7937cb250a4f470ae6a3f5d16e4 + React-RCTLinking: cff4ca5547612607ae29a5859b466410a58a920d + React-RCTNetwork: 2783868d750a000d33a63bc3c3a140e6f812a735 + React-RCTSettings: 12fc409d5e337cda891058fe2fd1427fa23ab5e1 + React-RCTText: 6db924036c02a9fd98f30d9038756fafac17201c + React-RCTVibration: 82fc52d3d96549b8c59a6c8c017d5a1a11457049 + React-runtimeexecutor: 9b1304f48e344c55bb3c36e13bf11461cb4da5d8 + ReactCommon: fab89a13b52f1ac42b59a0e4b4f76f21aea9eebe RNCMaskedView: 5a8ec07677aa885546a0d98da336457e2bea557f - RNGestureHandler: fec63e3f262c1a69b6888ebe8239b4f6fd932e76 - RNReanimated: 1326679461fa5d2399d54c18ca1432ba3e816b9e - RNScreens: 2ad555d4d9fa10b91bb765ca07fe9b29d59573f0 - Yoga: 9b6696970c3289e8dea34b3eda93f23e61fb8121 + RNGestureHandler: bad495418bcbd3ab47017a38d93d290ebd406f50 + RNReanimated: 89a32ebf01d2dac2eb35b3b1628952f626db93d7 + RNScreens: 40a2cb40a02a609938137a1e0acfbf8fc9eebf19 + SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608 + Yoga: 6671cf077f614314c22fd09ddf87d7abeee64e96 YogaKit: f782866e155069a2cca2517aafea43200b01fd5a -PODFILE CHECKSUM: 25d0906e1aa3e7904eeb1a3ea9428717a9ddaa52 +PODFILE CHECKSUM: 5a09699c42e00bbb7d83dcc949de54de2a3bb630 -COCOAPODS: 1.11.2 +COCOAPODS: 1.11.3 diff --git a/example/package.json b/example/package.json index bda019d08c..ca83167088 100644 --- a/example/package.json +++ b/example/package.json @@ -16,21 +16,24 @@ "@react-native-community/masked-view": "^0.1.10", "@react-native-community/slider": "^3.0.3", "@react-native-community/viewpager": "^4.2.1", - "@react-navigation/native": "^5.8.10", - "@react-navigation/stack": "^5.12.8", + "@react-navigation/elements": "^1.3.1", + "@react-navigation/native": "^6.0.8", + "@react-navigation/stack": "^6.1.1", "expo": "^40.0.0", "hoist-non-react-statics": "^3.3.2", "invariant": "^2.2.4", "react": "17.0.2", - "react-native": "0.67.2", - "react-native-reanimated": "2.3.1", + "react-native": "0.68.0", + "react-native-reanimated": "2.6.0", "react-native-safe-area-context": "^3.1.9", - "react-native-screens": "^2.15.0" + "react-native-screens": "3.13.1" }, "devDependencies": { - "@babel/core": "^7.8.4", + "@babel/core": "^7.17.8", + "@babel/preset-env": "^7.1.6", "@babel/runtime": "^7.12.5", "@expo/webpack-config": "^0.12.52", + "@react-native-community/eslint-config": "^3.0.0", "@types/jest": "^25.2.3", "@types/react-native": "^0.64.2", "@types/react-test-renderer": "^17.0.1", @@ -38,15 +41,20 @@ "babel-jest": "^25.1.0", "babel-plugin-module-resolver": "^4.0.0", "babel-preset-expo": "^8.3.0", - "eslint": "^7.16.0", + "eslint": "^8.12.0", "glob-to-regexp": "^0.4.1", "jest": "^25.1.0", "metro-config": "^0.64.0", - "metro-react-native-babel-preset": "^0.66.2", - "prettier": "^2.2.1", + "metro-react-native-babel-preset": "^0.67.0", + "prettier": "^2.6.1", "react-test-renderer": "17.0.2", "typescript": "^4.5.5" }, + "resolutions": { + "@typescript-eslint/eslint-plugin": "^5.17.0", + "@typescript-eslint/parser": "^5.17.0", + "eslint-plugin-react-native": "^4.0.0" + }, "jest": { "preset": "react-native", "moduleFileExtensions": [ diff --git a/example/src/App.tsx b/example/src/App.tsx index 5d87ef7086..01d1331230 100644 --- a/example/src/App.tsx +++ b/example/src/App.tsx @@ -1,12 +1,5 @@ import React from 'react'; -import { - Text, - View, - StyleSheet, - SectionList, - Platform, - LogBox, -} from 'react-native'; +import { Text, View, StyleSheet, SectionList, Platform } from 'react-native'; import { createStackNavigator, StackScreenProps, @@ -50,10 +43,6 @@ import DragNDrop from './new_api/drag_n_drop'; import BetterHorizontalDrawer from './new_api/betterHorizontalDrawer'; import ManualGestures from './new_api/manualGestures/index'; -LogBox.ignoreLogs([ - "[react-native-gesture-handler] Seems like you're using an old API with gesture components, check out new Gestures system!", -]); - interface Example { name: string; component: React.ComponentType; diff --git a/example/src/basic/bouncing/index.tsx b/example/src/basic/bouncing/index.tsx index 0ea9e1151a..edbf32f0ec 100644 --- a/example/src/basic/bouncing/index.tsx +++ b/example/src/basic/bouncing/index.tsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import React, { Component, PropsWithChildren } from 'react'; import { Animated, StyleSheet, View } from 'react-native'; import { @@ -13,7 +13,7 @@ import { import { USE_NATIVE_DRIVER } from '../../config'; -class Snappable extends Component> { +class Snappable extends Component>> { private onGestureEvent?: (event: PanGestureHandlerGestureEvent) => void; private transX: Animated.AnimatedInterpolation; private dragX: Animated.Value; @@ -59,7 +59,7 @@ class Snappable extends Component> { } } -class Twistable extends Component { +class Twistable extends Component> { private gesture: Animated.Value; private onGestureEvent?: (event: RotationGestureHandlerGestureEvent) => void; private rot: Animated.AnimatedInterpolation; diff --git a/example/src/new_api/betterHorizontalDrawer/BetterHorizonatalDrawer.tsx b/example/src/new_api/betterHorizontalDrawer/BetterHorizonatalDrawer.tsx index c3d8719bd6..950505b7d8 100644 --- a/example/src/new_api/betterHorizontalDrawer/BetterHorizonatalDrawer.tsx +++ b/example/src/new_api/betterHorizontalDrawer/BetterHorizonatalDrawer.tsx @@ -249,6 +249,7 @@ export const DrawerLayout = React.forwardRef< drawerSavedOffset.value = 0; setDrawerVisible(false); + // eslint-disable-next-line react-hooks/exhaustive-deps }, [drawerWidth, drawerPosition, drawerType]); // measure the container diff --git a/example/src/new_api/bottom_sheet/index.tsx b/example/src/new_api/bottom_sheet/index.tsx index d6e791fa16..0eff42588d 100644 --- a/example/src/new_api/bottom_sheet/index.tsx +++ b/example/src/new_api/bottom_sheet/index.tsx @@ -6,6 +6,7 @@ import { PanGestureHandlerEventPayload, } from 'react-native-gesture-handler'; import Animated, { + runOnJS, useAnimatedStyle, useSharedValue, withSpring, @@ -27,7 +28,11 @@ function Example() { const scrollOffset = useSharedValue(0); const bottomSheetTranslateY = useSharedValue(CLOSED_SNAP_POINT); + const onHandlerEndOnJS = (point: number) => { + setSnapPoint(point); + }; const onHandlerEnd = ({ velocityY }: PanGestureHandlerEventPayload) => { + 'worklet'; const dragToss = 0.05; const endOffsetY = bottomSheetTranslateY.value + translationY.value + velocityY * dragToss; @@ -57,10 +62,8 @@ function Example() { bottomSheetTranslateY.value = withSpring(destSnapPoint, { mass: 0.5, }); - - setSnapPoint(destSnapPoint); + runOnJS(onHandlerEndOnJS)(destSnapPoint); }; - const panGesture = Gesture.Pan() .onUpdate((e) => { // when bottom sheet is not fully opened scroll offset should not influence diff --git a/example/src/new_api/camera/index.tsx b/example/src/new_api/camera/index.tsx index 69ccb619ca..74c680c796 100644 --- a/example/src/new_api/camera/index.tsx +++ b/example/src/new_api/camera/index.tsx @@ -20,10 +20,8 @@ export default function Home() { const [selectedFilter, setSelectedFilter] = useState(0); const [isRecording, setIsRecording] = useState(false); const [remainingTimeMs, setRemainingTimeMs] = useState(MAX_VIDEO_DURATION_MS); - const [ - recordingIntervalHandle, - setRecordingIntervalHandle, - ] = useState | null>(null); + const [recordingIntervalHandle, setRecordingIntervalHandle] = + useState | null>(null); const filtersPanGesture = Gesture.Pan() .onUpdate((e) => { diff --git a/example/src/new_api/chat_heads/index.tsx b/example/src/new_api/chat_heads/index.tsx index 16702a2462..502ccda4a9 100644 --- a/example/src/new_api/chat_heads/index.tsx +++ b/example/src/new_api/chat_heads/index.tsx @@ -8,7 +8,7 @@ import Animated, { withSpring, } from 'react-native-reanimated'; import { SafeAreaView } from 'react-native-safe-area-context'; -import { useHeaderHeight } from '@react-navigation/stack'; +import { useHeaderHeight } from '@react-navigation/elements'; const CHAT_HEADS = [ { imageUrl: 'https://avatars0.githubusercontent.com/u/379606?v=4&s=460' }, diff --git a/example/src/new_api/drag_n_drop/DragAndDrop.tsx b/example/src/new_api/drag_n_drop/DragAndDrop.tsx index 748f22d97d..e5a9832390 100644 --- a/example/src/new_api/drag_n_drop/DragAndDrop.tsx +++ b/example/src/new_api/drag_n_drop/DragAndDrop.tsx @@ -68,13 +68,11 @@ function DragAndDrop({ // used to calculate position of currently dragged element in relation to drag start position // we are using dragged element center as calculations point - then we just add translationX/Y from gesture // this way we can easily calculate proper index based of current gesture position - const [ - activeElementInitialPosition, - setActiveElementInitialPosition, - ] = useState({ - x: 0, - y: 0, - }); + const [activeElementInitialPosition, setActiveElementInitialPosition] = + useState({ + x: 0, + y: 0, + }); const updateDataOnDragEnd = () => { const newData = [...data]; @@ -185,6 +183,7 @@ function DragAndDrop({ // react to activeElement change setActiveElementPositionFromIndex(); setPlaceholderIndex(getActiveElementIndex()); + // eslint-disable-next-line react-hooks/exhaustive-deps }, [activeElementId]); const onPositionUpdate = (e: PanGestureHandlerEventPayload) => { diff --git a/example/src/new_api/drag_n_drop/Draggable.tsx b/example/src/new_api/drag_n_drop/Draggable.tsx index 2454a9f834..81f92a4471 100644 --- a/example/src/new_api/drag_n_drop/Draggable.tsx +++ b/example/src/new_api/drag_n_drop/Draggable.tsx @@ -1,4 +1,4 @@ -import React, { FunctionComponent } from 'react'; +import React from 'react'; import { StyleSheet } from 'react-native'; import { PanGestureHandlerEventPayload, @@ -27,9 +27,10 @@ interface DraggableProps { tileSize: number; rowGap: number; columnGap: number; + children?: React.ReactNode; } -const Draggable: FunctionComponent = ({ +const Draggable = ({ id, children, onLongPress, @@ -40,7 +41,7 @@ const Draggable: FunctionComponent = ({ columnGap, rowGap, position, -}) => { +}: DraggableProps) => { const tapGesture = Gesture.LongPress() .minDuration(300) .onStart(() => runOnJS(onLongPress)(id)) diff --git a/example/src/new_api/drag_n_drop/Tile.tsx b/example/src/new_api/drag_n_drop/Tile.tsx index 43dafdca94..0a7d83e059 100644 --- a/example/src/new_api/drag_n_drop/Tile.tsx +++ b/example/src/new_api/drag_n_drop/Tile.tsx @@ -54,6 +54,7 @@ function Tile({ data, draggingActive, tileSize, isActive }: TileProps) { animateOnDraggingDisabled(); } draggingActivePrevious.current = draggingActive; + // eslint-disable-next-line react-hooks/exhaustive-deps }, [draggingActive]); const tileAnimatedStyle = useAnimatedStyle(() => { diff --git a/example/src/new_api/manualGestures/index.tsx b/example/src/new_api/manualGestures/index.tsx index d74ccfada4..6e68b6aee0 100644 --- a/example/src/new_api/manualGestures/index.tsx +++ b/example/src/new_api/manualGestures/index.tsx @@ -99,7 +99,6 @@ export default function Example() { {trackedPointers.map((pointer, index) => ( - // eslint-disable-next-line react/no-array-index-key ))} diff --git a/example/src/recipes/scaleAndRotate/index.tsx b/example/src/recipes/scaleAndRotate/index.tsx index f46a377619..a6e7876d4d 100644 --- a/example/src/recipes/scaleAndRotate/index.tsx +++ b/example/src/recipes/scaleAndRotate/index.tsx @@ -135,7 +135,6 @@ export class PinchableBox extends React.Component { ], }, ]} - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment source={require('./swmansion.png')} /> diff --git a/example/src/release_tests/combo/index.tsx b/example/src/release_tests/combo/index.tsx index 7d33f4c690..af2749a5af 100644 --- a/example/src/release_tests/combo/index.tsx +++ b/example/src/release_tests/combo/index.tsx @@ -66,7 +66,7 @@ class TouchableHighlight extends Component< this.setState({ gestureHandlerState: nextGestureHandlerState }, () => { const pressed = nextGestureHandlerState === State.BEGAN; // @ts-ignore old API - // eslint-disable-next-line @typescript-eslint/no-unsafe-call, react/no-string-refs + // eslint-disable-next-line react/no-string-refs this.refs[CHILD_REF].setNativeProps({ style: pressed ? { opacity: this.props.activeOpacity } @@ -136,7 +136,6 @@ class ControlledSwitch extends React.Component< type ComboProps = { // TODO(TS) what this type can be? - // eslint-disable-next-line @typescript-eslint/no-explicit-any ScrollViewComponent: React.ComponentType; }; class Combo extends Component { diff --git a/example/src/release_tests/rows/index.tsx b/example/src/release_tests/rows/index.tsx index c979e0fb0b..ec490d9663 100644 --- a/example/src/release_tests/rows/index.tsx +++ b/example/src/release_tests/rows/index.tsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import React, { Component, PropsWithChildren } from 'react'; import { Animated, StyleSheet, @@ -29,7 +29,7 @@ type Props = { enableTrackpadTwoFingerGesture: boolean; }; -export class Swipeable extends Component { +export class Swipeable extends Component> { private width: number; private dragX: Animated.Value; private transX: Animated.AnimatedInterpolation; diff --git a/example/src/release_tests/touchables/index.tsx b/example/src/release_tests/touchables/index.tsx index 4d77601fc7..6323f188de 100644 --- a/example/src/release_tests/touchables/index.tsx +++ b/example/src/release_tests/touchables/index.tsx @@ -1,26 +1,26 @@ -import React, { Component } from 'react'; -import { StackScreenProps } from '@react-navigation/stack'; - import { + BackgroundPropType, + FlatList, TouchableHighlight as RNTouchableHighlight, - TouchableOpacity as RNTouchableOpacity, TouchableNativeFeedback as RNTouchableNativeFeedback, + TouchableOpacity as RNTouchableOpacity, TouchableWithoutFeedback as RNTouchableWithoutFeedback, - View, - Text, StyleSheet, - FlatList, - BackgroundPropType, + Text, + View, } from 'react-native'; +import React, { Component } from 'react'; import { RectButton, + ScrollView, TouchableHighlight, TouchableNativeFeedback, TouchableOpacity, TouchableWithoutFeedback, - ScrollView, } from 'react-native-gesture-handler'; +import { StackScreenProps } from '@react-navigation/stack'; + const BOX_SIZE = 80; const renderSampleBox = (color?: string) => ( @@ -34,10 +34,18 @@ const renderSampleBox = (color?: string) => ( ); const toReactNativeTouchable = (touchable: React.ComponentType) => { - if (touchable === TouchableOpacity) return RNTouchableOpacity; - if (touchable === TouchableWithoutFeedback) return RNTouchableWithoutFeedback; - if (touchable === TouchableHighlight) return RNTouchableHighlight; - if (touchable === TouchableNativeFeedback) return RNTouchableNativeFeedback; + if (touchable === TouchableOpacity) { + return RNTouchableOpacity; + } + if (touchable === TouchableWithoutFeedback) { + return RNTouchableWithoutFeedback; + } + if (touchable === TouchableHighlight) { + return RNTouchableHighlight; + } + if (touchable === TouchableNativeFeedback) { + return RNTouchableNativeFeedback; + } return RNTouchableOpacity; }; @@ -45,7 +53,7 @@ type Touchables = { type: React.ComponentType; props?: Record; color?: string; - renderChild: (() => null) | ((color?: string) => JSX.Element); + renderChild: (() => null) | ((color?: string) => React.ReactNode); text: string; background?: (A: typeof TouchableNativeFeedback) => BackgroundPropType; }; @@ -140,8 +148,7 @@ const TOUCHABLES: Touchables[] = [ }, color: 'forestgreen', renderChild: renderSampleBox, - text: - 'TouchableHighlight with callbacks (without longPress), currently GH component differs in the events sent from the RN one', + text: 'TouchableHighlight with callbacks (without longPress), currently GH component differs in the events sent from the RN one', }, { type: TouchableOpacity, @@ -178,8 +185,7 @@ const TOUCHABLES: Touchables[] = [ }, color: 'lightpink', renderChild: renderSampleBox, - text: - 'TouchableOpacity with callbacks and delayed pressOut and pressIn (1000 ms)', + text: 'TouchableOpacity with callbacks and delayed pressOut and pressIn (1000 ms)', }, { type: TouchableOpacity, diff --git a/example/src/showcase/swipeable/AppleStyleSwipeableRow.tsx b/example/src/showcase/swipeable/AppleStyleSwipeableRow.tsx index e6afd2ca85..7c9a6b5211 100644 --- a/example/src/showcase/swipeable/AppleStyleSwipeableRow.tsx +++ b/example/src/showcase/swipeable/AppleStyleSwipeableRow.tsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import React, { Component, PropsWithChildren } from 'react'; import { Animated, StyleSheet, @@ -12,7 +12,9 @@ import { RectButton } from 'react-native-gesture-handler'; import Swipeable from 'react-native-gesture-handler/Swipeable'; -export default class AppleStyleSwipeableRow extends Component { +export default class AppleStyleSwipeableRow extends Component< + PropsWithChildren +> { private renderLeftActions = ( _progress: Animated.AnimatedInterpolation, dragX: Animated.AnimatedInterpolation diff --git a/example/src/showcase/swipeable/GmailStyleSwipeableRow.tsx b/example/src/showcase/swipeable/GmailStyleSwipeableRow.tsx index 2e6dea4d47..e52964910c 100644 --- a/example/src/showcase/swipeable/GmailStyleSwipeableRow.tsx +++ b/example/src/showcase/swipeable/GmailStyleSwipeableRow.tsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import React, { Component, PropsWithChildren } from 'react'; import { Animated, StyleSheet, I18nManager, View } from 'react-native'; import { RectButton } from 'react-native-gesture-handler'; @@ -7,7 +7,9 @@ import Swipeable from 'react-native-gesture-handler/Swipeable'; const AnimatedView = Animated.createAnimatedComponent(View); -export default class GmailStyleSwipeableRow extends Component { +export default class GmailStyleSwipeableRow extends Component< + PropsWithChildren +> { private renderLeftActions = ( _progress: Animated.AnimatedInterpolation, dragX: Animated.AnimatedInterpolation diff --git a/example/yarn.lock b/example/yarn.lock index cf5375a004..87d9ccee84 100644 --- a/example/yarn.lock +++ b/example/yarn.lock @@ -35,6 +35,11 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.7.tgz#9329b4782a7d6bbd7eef57e11addf91ee3ef1e41" integrity sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw== +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.0", "@babel/compat-data@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.7.tgz#078d8b833fbbcc95286613be8c716cef2b519fa2" + integrity sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ== + "@babel/compat-data@^7.16.4": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.8.tgz#31560f9f29fdf1868de8cb55049538a1b9732a60" @@ -62,7 +67,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.7.5", "@babel/core@^7.8.4": +"@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.7.5": version "7.12.9" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== @@ -84,25 +89,25 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.1.6": - version "7.17.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.5.tgz#6cd2e836058c28f06a4ca8ee7ed955bbf37c8225" - integrity sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA== +"@babel/core@^7.13.16": + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.9.tgz#6bae81a06d95f4d0dec5bb9d74bbc1f58babdcfe" + integrity sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw== dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.3" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helpers" "^7.17.2" - "@babel/parser" "^7.17.3" + "@babel/generator" "^7.17.9" + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-module-transforms" "^7.17.7" + "@babel/helpers" "^7.17.9" + "@babel/parser" "^7.17.9" "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" + "@babel/traverse" "^7.17.9" "@babel/types" "^7.17.0" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" - json5 "^2.1.2" + json5 "^2.2.1" semver "^6.3.0" "@babel/core@^7.14.0": @@ -126,6 +131,27 @@ semver "^6.3.0" source-map "^0.5.0" +"@babel/core@^7.17.8": + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.8.tgz#3dac27c190ebc3a4381110d46c80e77efe172e1a" + integrity sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.17.7" + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-module-transforms" "^7.17.7" + "@babel/helpers" "^7.17.8" + "@babel/parser" "^7.17.8" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.3" + "@babel/types" "^7.17.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + "@babel/core@^7.4.5": version "7.12.10" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd" @@ -174,19 +200,28 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.0.tgz#7bd890ba706cd86d3e2f727322346ffdbf98f65e" - integrity sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw== +"@babel/generator@^7.17.3": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.3.tgz#a2c30b0c4f89858cb87050c3ffdfd36bdf443200" + integrity sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg== dependencies: "@babel/types" "^7.17.0" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.17.3": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.3.tgz#a2c30b0c4f89858cb87050c3ffdfd36bdf443200" - integrity sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg== +"@babel/generator@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad" + integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w== + dependencies: + "@babel/types" "^7.17.0" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/generator@^7.17.9": + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.9.tgz#f4af9fd38fa8de143c29fce3f71852406fc1e2fc" + integrity sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ== dependencies: "@babel/types" "^7.17.0" jsesc "^2.5.1" @@ -214,6 +249,14 @@ "@babel/helper-explode-assignable-expression" "^7.10.4" "@babel/types" "^7.10.4" +"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" + integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.16.7" + "@babel/types" "^7.16.7" + "@babel/helper-builder-react-jsx-experimental@^7.12.4": version "7.12.4" resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.4.tgz#55fc1ead5242caa0ca2875dcb8eed6d311e50f48" @@ -241,6 +284,16 @@ browserslist "^4.14.5" semver "^5.5.0" +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz#a3c2924f5e5f0379b356d4cfb313d1414dc30e46" + integrity sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w== + dependencies: + "@babel/compat-data" "^7.17.7" + "@babel/helper-validator-option" "^7.16.7" + browserslist "^4.17.5" + semver "^6.3.0" + "@babel/helper-compilation-targets@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" @@ -262,6 +315,19 @@ "@babel/helper-replace-supers" "^7.12.1" "@babel/helper-split-export-declaration" "^7.10.4" +"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.17.6": + version "7.17.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz#3778c1ed09a7f3e65e6d6e0f6fbfcc53809d92c9" + integrity sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-create-class-features-plugin@^7.16.7": version "7.17.1" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz#9699f14a88833a7e055ce57dcd3ffdcd25186b21" @@ -283,6 +349,14 @@ "@babel/helper-annotate-as-pure" "^7.10.4" regexpu-core "^4.7.1" +"@babel/helper-create-regexp-features-plugin@^7.16.7": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz#1dcc7d40ba0c6b6b25618997c5dbfd310f186fe1" + integrity sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + regexpu-core "^5.0.1" + "@babel/helper-define-map@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" @@ -292,6 +366,20 @@ "@babel/types" "^7.10.5" lodash "^4.17.19" +"@babel/helper-define-polyfill-provider@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" + integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== + dependencies: + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + "@babel/helper-environment-visitor@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" @@ -306,6 +394,13 @@ dependencies: "@babel/types" "^7.12.1" +"@babel/helper-explode-assignable-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" + integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-function-name@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" @@ -333,6 +428,14 @@ "@babel/template" "^7.16.7" "@babel/types" "^7.16.7" +"@babel/helper-function-name@^7.17.9": + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz#136fcd54bc1da82fcb47565cf16fd8e444b1ff12" + integrity sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg== + dependencies: + "@babel/template" "^7.16.7" + "@babel/types" "^7.17.0" + "@babel/helper-get-function-arity@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" @@ -389,7 +492,7 @@ dependencies: "@babel/types" "^7.12.5" -"@babel/helper-module-imports@^7.16.7": +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== @@ -425,6 +528,20 @@ "@babel/traverse" "^7.16.7" "@babel/types" "^7.16.7" +"@babel/helper-module-transforms@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz#3943c7f777139e7954a5355c815263741a9c1cbd" + integrity sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-simple-access" "^7.17.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.3" + "@babel/types" "^7.17.0" + "@babel/helper-optimise-call-expression@^7.10.4": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz#7f94ae5e08721a49467346aa04fd22f750033b9c" @@ -444,7 +561,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== -"@babel/helper-plugin-utils@^7.16.7": +"@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== @@ -502,6 +619,13 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-simple-access@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz#aaa473de92b7987c6dfa7ce9a7d9674724823367" + integrity sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA== + dependencies: + "@babel/types" "^7.17.0" + "@babel/helper-skip-transparent-expression-wrappers@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" @@ -600,13 +724,22 @@ "@babel/traverse" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/helpers@^7.17.2": - version "7.17.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.2.tgz#23f0a0746c8e287773ccd27c14be428891f63417" - integrity sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ== +"@babel/helpers@^7.17.8": + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.8.tgz#288450be8c6ac7e4e44df37bcc53d345e07bc106" + integrity sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw== dependencies: "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.0" + "@babel/traverse" "^7.17.3" + "@babel/types" "^7.17.0" + +"@babel/helpers@^7.17.9": + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.9.tgz#b2af120821bfbe44f9907b1826e168e819375a1a" + integrity sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q== + dependencies: + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.9" "@babel/types" "^7.17.0" "@babel/highlight@^7.10.4": @@ -632,21 +765,47 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.7.tgz#fee7b39fe809d0e73e5b25eecaf5780ef3d73056" integrity sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg== -"@babel/parser@^7.1.6", "@babel/parser@^7.17.0", "@babel/parser@^7.17.3": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.3.tgz#b07702b982990bf6fdc1da5049a23fece4c5c3d0" - integrity sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA== - "@babel/parser@^7.12.10", "@babel/parser@^7.12.11", "@babel/parser@^7.9.0": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.11.tgz#9ce3595bcd74bc5c466905e86c535b8b25011e79" integrity sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg== +"@babel/parser@^7.13.16", "@babel/parser@^7.17.9": + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.9.tgz#9c94189a6062f0291418ca021077983058e171ef" + integrity sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg== + "@babel/parser@^7.14.0", "@babel/parser@^7.16.10", "@babel/parser@^7.16.12", "@babel/parser@^7.16.7": version "7.16.12" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.12.tgz#9474794f9a650cf5e2f892444227f98e28cdf8b6" integrity sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A== +"@babel/parser@^7.17.3": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.3.tgz#b07702b982990bf6fdc1da5049a23fece4c5c3d0" + integrity sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA== + +"@babel/parser@^7.17.8", "@babel/parser@^7.7.0": + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.8.tgz#2817fb9d885dd8132ea0f8eb615a6388cca1c240" + integrity sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" + integrity sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" + integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-async-generator-functions@^7.12.1": version "7.12.12" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.12.tgz#04b8f24fd4532008ab4e79f788468fd5a8476566" @@ -656,6 +815,15 @@ "@babel/helper-remap-async-to-generator" "^7.12.1" "@babel/plugin-syntax-async-generators" "^7.8.0" +"@babel/plugin-proposal-async-generator-functions@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" + integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.4.4": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de" @@ -664,7 +832,7 @@ "@babel/helper-create-class-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-proposal-class-properties@^7.1.0": +"@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== @@ -672,6 +840,15 @@ "@babel/helper-create-class-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-proposal-class-static-block@^7.16.7": + version "7.17.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz#164e8fd25f0d80fa48c5a4d1438a6629325ad83c" + integrity sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.17.6" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-proposal-decorators@^7.6.0": version "7.12.12" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.12.tgz#067a6d3d6ca86d54cf56bb183239199c20daeafe" @@ -689,6 +866,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-dynamic-import" "^7.8.0" +"@babel/plugin-proposal-dynamic-import@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" + integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-proposal-export-default-from@^7.0.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.12.1.tgz#c6e62d668a8abcfe0d28b82f560395fecb611c5a" @@ -705,6 +890,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" +"@babel/plugin-proposal-export-namespace-from@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" + integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-proposal-json-strings@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz#d45423b517714eedd5621a9dfdc03fa9f4eb241c" @@ -713,6 +906,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.0" +"@babel/plugin-proposal-json-strings@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" + integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-proposal-logical-assignment-operators@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz#f2c490d36e1b3c9659241034a5d2cd50263a2751" @@ -721,6 +922,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" +"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" + integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1", "@babel/plugin-proposal-nullish-coalescing-operator@^7.7.4": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" @@ -729,7 +938,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.1.0": +"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8", "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== @@ -745,6 +954,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-numeric-separator" "^7.10.4" +"@babel/plugin-proposal-numeric-separator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" + integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" @@ -754,6 +971,17 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-transform-parameters" "^7.12.1" +"@babel/plugin-proposal-object-rest-spread@^7.16.7": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz#d9eb649a54628a51701aef7e0ea3d17e2b9dd390" + integrity sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw== + dependencies: + "@babel/compat-data" "^7.17.0" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/plugin-proposal-optional-catch-binding@^7.0.0", "@babel/plugin-proposal-optional-catch-binding@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz#ccc2421af64d3aae50b558a71cede929a5ab2942" @@ -762,6 +990,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" +"@babel/plugin-proposal-optional-catch-binding@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" + integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-proposal-optional-chaining@^7.0.0", "@babel/plugin-proposal-optional-chaining@^7.12.7", "@babel/plugin-proposal-optional-chaining@^7.7.5": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz#e02f0ea1b5dc59d401ec16fb824679f683d3303c" @@ -771,7 +1007,7 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" "@babel/plugin-syntax-optional-chaining" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.1.0": +"@babel/plugin-proposal-optional-chaining@^7.13.12", "@babel/plugin-proposal-optional-chaining@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== @@ -788,6 +1024,24 @@ "@babel/helper-create-class-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-proposal-private-methods@^7.16.11": + version "7.16.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50" + integrity sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.10" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-proposal-private-property-in-object@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" + integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz#2a183958d417765b9eae334f47758e5d6a82e072" @@ -796,6 +1050,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-proposal-unicode-property-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" + integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -817,6 +1079,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-decorators@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.1.tgz#81a8b535b284476c41be6de06853a8802b98c5dd" @@ -824,7 +1100,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-dynamic-import@^7.0.0", "@babel/plugin-syntax-dynamic-import@^7.8.0": +"@babel/plugin-syntax-dynamic-import@^7.0.0", "@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== @@ -922,6 +1198,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-top-level-await@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" @@ -929,6 +1212,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-typescript@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz#460ba9d77077653803c3dd2e673f76d66b4029e5" @@ -950,7 +1240,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-async-to-generator@^7.0.0": +"@babel/plugin-transform-arrow-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" + integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-async-to-generator@^7.0.0", "@babel/plugin-transform-async-to-generator@^7.16.8": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== @@ -975,6 +1272,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-block-scoped-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" + integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-block-scoping@^7.0.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz#f0ee727874b42a208a48a586b84c3d222c2bbef1" @@ -989,6 +1293,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-block-scoping@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" + integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz#65e650fcaddd3d88ddce67c0f834a3d436a32db6" @@ -1003,6 +1314,20 @@ "@babel/helper-split-export-declaration" "^7.10.4" globals "^11.1.0" +"@babel/plugin-transform-classes@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" + integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + globals "^11.1.0" + "@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz#d68cf6c9b7f838a8a4144badbe97541ea0904852" @@ -1010,6 +1335,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-computed-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" + integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz#b9a570fe0d0a8d460116413cb4f97e8e08b2f847" @@ -1017,6 +1349,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-destructuring@^7.16.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz#49dc2675a7afa9a5e4c6bdee636061136c3408d1" + integrity sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz#a1d16c14862817b6409c0a678d6f9373ca9cd975" @@ -1025,6 +1364,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-dotall-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" + integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-duplicate-keys@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz#745661baba295ac06e686822797a69fbaa2ca228" @@ -1032,6 +1379,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-duplicate-keys@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" + integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-exponentiation-operator@^7.0.0", "@babel/plugin-transform-exponentiation-operator@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz#b0f2ed356ba1be1428ecaf128ff8a24f02830ae0" @@ -1040,6 +1394,14 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-exponentiation-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" + integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-flow-strip-types@^7.0.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.1.tgz#8430decfa7eb2aea5414ed4a3fa6e1652b7d77c4" @@ -1063,6 +1425,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-for-of@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" + integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz#2ec76258c70fe08c6d7da154003a480620eba667" @@ -1071,6 +1440,15 @@ "@babel/helper-function-name" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" + integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== + dependencies: + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz#d73b803a26b37017ddf9d3bb8f4dc58bfb806f57" @@ -1078,6 +1456,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" + integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-member-expression-literals@^7.0.0", "@babel/plugin-transform-member-expression-literals@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz#496038602daf1514a64d43d8e17cbb2755e0c3ad" @@ -1085,6 +1470,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-member-expression-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" + integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-modules-amd@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz#3154300b026185666eebb0c0ed7f8415fefcf6f9" @@ -1094,6 +1486,15 @@ "@babel/helper-plugin-utils" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-amd@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" + integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.12.1", "@babel/plugin-transform-modules-commonjs@^7.5.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz#fa403124542636c786cf9b460a0ffbb48a86e648" @@ -1104,14 +1505,24 @@ "@babel/helper-simple-access" "^7.12.1" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.1.0": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz#cdee19aae887b16b9d331009aa9a219af7c86afe" - integrity sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA== +"@babel/plugin-transform-modules-commonjs@^7.13.8": + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.9.tgz#274be1a2087beec0254d4abd4d86e52442e1e5b6" + integrity sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw== dependencies: - "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-module-transforms" "^7.17.7" "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-simple-access" "^7.16.7" + "@babel/helper-simple-access" "^7.17.7" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.16.8": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.7.tgz#d86b217c8e45bb5f2dbc11eefc8eab62cf980d19" + integrity sha512-ITPmR2V7MqioMJyrxUo2onHNC3e+MvfFiFIR0RP21d3PtlVb6sfzoxNKiphSZUOM9hEIdzCcZe83ieX3yoqjUA== + dependencies: + "@babel/helper-module-transforms" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-simple-access" "^7.17.7" babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-modules-systemjs@^7.12.1": @@ -1125,6 +1536,17 @@ "@babel/helper-validator-identifier" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-systemjs@^7.16.7": + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz#81fd834024fae14ea78fbe34168b042f38703859" + integrity sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw== + dependencies: + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-module-transforms" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-umd@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz#eb5a218d6b1c68f3d6217b8fa2cc82fec6547902" @@ -1133,6 +1555,14 @@ "@babel/helper-module-transforms" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-modules-umd@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" + integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-named-capturing-groups-regex@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz#b407f5c96be0d9f5f88467497fa82b30ac3e8753" @@ -1140,6 +1570,13 @@ dependencies: "@babel/helper-create-regexp-features-plugin" "^7.12.1" +"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz#7f860e0e40d844a02c9dcf9d84965e7dfd666252" + integrity sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/plugin-transform-new-target@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz#80073f02ee1bb2d365c3416490e085c95759dec0" @@ -1147,6 +1584,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-new-target@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" + integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-object-assign@^7.0.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.12.1.tgz#9102b06625f60a5443cc292d32b565373665e1e4" @@ -1154,7 +1598,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-object-assign@^7.10.4": +"@babel/plugin-transform-object-assign@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.16.7.tgz#5fe08d63dccfeb6a33aa2638faf98e5c584100f8" integrity sha512-R8mawvm3x0COTJtveuoqZIjNypn2FjfvXZr4pSQ8VhEFBuQGBz4XhHasZtHXjgXU4XptZ4HtGof3NoYc93ZH9Q== @@ -1169,6 +1613,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-replace-supers" "^7.12.1" +"@babel/plugin-transform-object-super@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" + integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz#d2e963b038771650c922eff593799c96d853255d" @@ -1176,6 +1628,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-parameters@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" + integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz#41bc81200d730abb4456ab8b3fbd5537b59adecd" @@ -1183,6 +1642,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-property-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" + integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-react-display-name@^7.0.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz#1cbcd0c3b1d6648c55374a22fc9b6b7e5341c00d" @@ -1221,6 +1687,13 @@ dependencies: regenerator-transform "^0.14.2" +"@babel/plugin-transform-regenerator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb" + integrity sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q== + dependencies: + regenerator-transform "^0.14.2" + "@babel/plugin-transform-reserved-words@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz#6fdfc8cc7edcc42b36a7c12188c6787c873adcd8" @@ -1228,6 +1701,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-reserved-words@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" + integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-runtime@^7.0.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz#04b792057eb460389ff6a4198e377614ea1e7ba5" @@ -1245,6 +1725,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-shorthand-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" + integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz#527f9f311be4ec7fdc2b79bb89f7bf884b3e1e1e" @@ -1253,6 +1740,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" +"@babel/plugin-transform-spread@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" + integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-transform-sticky-regex@^7.0.0", "@babel/plugin-transform-sticky-regex@^7.12.7": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz#560224613ab23987453948ed21d0b0b193fa7fad" @@ -1260,6 +1755,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-sticky-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" + integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz#b43ece6ed9a79c0c71119f576d299ef09d942843" @@ -1267,6 +1769,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-template-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" + integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-typeof-symbol@^7.12.10": version "7.12.10" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz#de01c4c8f96580bd00f183072b0d0ecdcf0dec4b" @@ -1274,6 +1783,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-typeof-symbol@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" + integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-typescript@^7.12.1", "@babel/plugin-transform-typescript@^7.5.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz#d92cc0af504d510e26a754a7dbc2e5c8cd9c7ab4" @@ -1299,6 +1815,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-unicode-escapes@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" + integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-unicode-regex@^7.0.0", "@babel/plugin-transform-unicode-regex@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz#cc9661f61390db5c65e3febaccefd5c6ac3faecb" @@ -1307,6 +1830,94 @@ "@babel/helper-create-regexp-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-unicode-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" + integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/preset-env@^7.1.6": + version "7.16.11" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982" + integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g== + dependencies: + "@babel/compat-data" "^7.16.8" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-async-generator-functions" "^7.16.8" + "@babel/plugin-proposal-class-properties" "^7.16.7" + "@babel/plugin-proposal-class-static-block" "^7.16.7" + "@babel/plugin-proposal-dynamic-import" "^7.16.7" + "@babel/plugin-proposal-export-namespace-from" "^7.16.7" + "@babel/plugin-proposal-json-strings" "^7.16.7" + "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" + "@babel/plugin-proposal-numeric-separator" "^7.16.7" + "@babel/plugin-proposal-object-rest-spread" "^7.16.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-private-methods" "^7.16.11" + "@babel/plugin-proposal-private-property-in-object" "^7.16.7" + "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.16.7" + "@babel/plugin-transform-async-to-generator" "^7.16.8" + "@babel/plugin-transform-block-scoped-functions" "^7.16.7" + "@babel/plugin-transform-block-scoping" "^7.16.7" + "@babel/plugin-transform-classes" "^7.16.7" + "@babel/plugin-transform-computed-properties" "^7.16.7" + "@babel/plugin-transform-destructuring" "^7.16.7" + "@babel/plugin-transform-dotall-regex" "^7.16.7" + "@babel/plugin-transform-duplicate-keys" "^7.16.7" + "@babel/plugin-transform-exponentiation-operator" "^7.16.7" + "@babel/plugin-transform-for-of" "^7.16.7" + "@babel/plugin-transform-function-name" "^7.16.7" + "@babel/plugin-transform-literals" "^7.16.7" + "@babel/plugin-transform-member-expression-literals" "^7.16.7" + "@babel/plugin-transform-modules-amd" "^7.16.7" + "@babel/plugin-transform-modules-commonjs" "^7.16.8" + "@babel/plugin-transform-modules-systemjs" "^7.16.7" + "@babel/plugin-transform-modules-umd" "^7.16.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.8" + "@babel/plugin-transform-new-target" "^7.16.7" + "@babel/plugin-transform-object-super" "^7.16.7" + "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/plugin-transform-property-literals" "^7.16.7" + "@babel/plugin-transform-regenerator" "^7.16.7" + "@babel/plugin-transform-reserved-words" "^7.16.7" + "@babel/plugin-transform-shorthand-properties" "^7.16.7" + "@babel/plugin-transform-spread" "^7.16.7" + "@babel/plugin-transform-sticky-regex" "^7.16.7" + "@babel/plugin-transform-template-literals" "^7.16.7" + "@babel/plugin-transform-typeof-symbol" "^7.16.7" + "@babel/plugin-transform-unicode-escapes" "^7.16.7" + "@babel/plugin-transform-unicode-regex" "^7.16.7" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.16.8" + babel-plugin-polyfill-corejs2 "^0.3.0" + babel-plugin-polyfill-corejs3 "^0.5.0" + babel-plugin-polyfill-regenerator "^0.3.0" + core-js-compat "^3.20.2" + semver "^6.3.0" + "@babel/preset-env@^7.4.4", "@babel/preset-env@^7.6.3": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.11.tgz#55d5f7981487365c93dbbc84507b1c7215e857f9" @@ -1379,7 +1990,7 @@ core-js-compat "^3.8.0" semver "^5.5.0" -"@babel/preset-flow@^7.0.0": +"@babel/preset-flow@^7.13.13": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.16.7.tgz#7fd831323ab25eeba6e4b77a589f680e30581cbd" integrity sha512-6ceP7IyZdUYQ3wUVqyRSQXztd1YmFHWI4Xv11MIqAlE4WqxBSd/FZ61V9k+TS5Gd4mkHOtQtPp9ymRpxH4y1Ug== @@ -1399,7 +2010,18 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-typescript@^7.1.0": +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-typescript@^7.13.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz#ab114d68bb2020afc069cd51b37ff98a046a70b9" integrity sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ== @@ -1428,6 +2050,17 @@ pirates "^4.0.0" source-map-support "^0.5.16" +"@babel/register@^7.13.16": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.17.7.tgz#5eef3e0f4afc07e25e847720e7b987ae33f08d0b" + integrity sha512-fg56SwvXRifootQEDQAu1mKdjh5uthPzdO0N6t358FktfL4XjAVXuH58ULoiW8mesxiOgNIrxiImqEwv0+hRRA== + dependencies: + clone-deep "^4.0.1" + find-cache-dir "^2.0.0" + make-dir "^2.1.0" + pirates "^4.0.5" + source-map-support "^0.5.16" + "@babel/runtime@7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.0.tgz#337eda67401f5b066a6f205a3113d4ac18ba495b" @@ -1490,50 +2123,50 @@ globals "^11.1.0" lodash "^4.17.19" -"@babel/traverse@^7.14.0", "@babel/traverse@^7.16.10", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8": - version "7.16.10" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.10.tgz#448f940defbe95b5a8029975b051f75993e8239f" - integrity sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw== +"@babel/traverse@^7.13.0", "@babel/traverse@^7.17.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.4": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57" + integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== dependencies: "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.16.8" + "@babel/generator" "^7.17.3" "@babel/helper-environment-visitor" "^7.16.7" "@babel/helper-function-name" "^7.16.7" "@babel/helper-hoist-variables" "^7.16.7" "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.16.10" - "@babel/types" "^7.16.8" + "@babel/parser" "^7.17.3" + "@babel/types" "^7.17.0" debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.0.tgz#3143e5066796408ccc880a33ecd3184f3e75cd30" - integrity sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg== +"@babel/traverse@^7.14.0", "@babel/traverse@^7.16.10", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.10.tgz#448f940defbe95b5a8029975b051f75993e8239f" + integrity sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw== dependencies: "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.0" + "@babel/generator" "^7.16.8" "@babel/helper-environment-visitor" "^7.16.7" "@babel/helper-function-name" "^7.16.7" "@babel/helper-hoist-variables" "^7.16.7" "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.17.0" - "@babel/types" "^7.17.0" + "@babel/parser" "^7.16.10" + "@babel/types" "^7.16.8" debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.17.3": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57" - integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== +"@babel/traverse@^7.17.9": + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.9.tgz#1f9b207435d9ae4a8ed6998b2b82300d83c37a0d" + integrity sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw== dependencies: "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.3" + "@babel/generator" "^7.17.9" "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" + "@babel/helper-function-name" "^7.17.9" "@babel/helper-hoist-variables" "^7.16.7" "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.17.3" + "@babel/parser" "^7.17.9" "@babel/types" "^7.17.0" debug "^4.1.0" globals "^11.1.0" @@ -1572,7 +2205,7 @@ "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" -"@babel/types@^7.17.0": +"@babel/types@^7.17.0", "@babel/types@^7.7.0": version "7.17.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== @@ -1593,19 +2226,18 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@eslint/eslintrc@^0.2.2": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.2.tgz#d01fc791e2fc33e88a29d6f3dc7e93d0cd784b76" - integrity sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ== +"@eslint/eslintrc@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.2.1.tgz#8b5e1c49f4077235516bc9ec7d41378c0f69b8c6" + integrity sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ== dependencies: ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^12.1.0" - ignore "^4.0.6" + debug "^4.3.2" + espree "^9.3.1" + globals "^13.9.0" + ignore "^5.2.0" import-fresh "^3.2.1" - js-yaml "^3.13.1" - lodash "^4.17.19" + js-yaml "^4.1.0" minimatch "^3.0.4" strip-json-comments "^3.1.1" @@ -1754,6 +2386,20 @@ dependencies: "@hapi/hoek" "^9.0.0" +"@humanwhocodes/config-array@^0.9.2": + version "0.9.5" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" + integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -1967,6 +2613,17 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" +"@jest/types@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" + integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^16.0.0" + chalk "^4.0.0" + "@jimp/bmp@^0.12.1": version "0.12.1" resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.12.1.tgz#43cf1f711797c029aa7570a492769b4778638da2" @@ -2314,10 +2971,10 @@ native-url "^0.2.6" schema-utils "^2.6.5" -"@react-native-community/cli-debugger-ui@^6.0.0-rc.0": - version "6.0.0-rc.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-6.0.0-rc.0.tgz#774378626e4b70f5e1e2e54910472dcbaffa1536" - integrity sha512-achYcPPoWa9D02C5tn6TBzjeY443wQTyx37urptc75JpZ7gR5YHsDyIEEWa3DDYp1va9zx/iGg+uZ/hWw07GAw== +"@react-native-community/cli-debugger-ui@^7.0.3": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-7.0.3.tgz#3eeeacc5a43513cbcae56e5e965d77726361bcb4" + integrity sha512-G4SA6jFI0j22o+j+kYP8/7sxzbCDqSp2QiHA/X5E0lsGEd2o9qN2zbIjiFr8b8k+VVAYSUONhoC0+uKuINvmkA== dependencies: serve-static "^1.13.1" @@ -2332,7 +2989,7 @@ hermes-profile-transformer "^0.0.6" ip "^1.1.5" -"@react-native-community/cli-platform-android@^6.0.0", "@react-native-community/cli-platform-android@^6.3.0": +"@react-native-community/cli-platform-android@^6.3.0": version "6.3.0" resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-6.3.0.tgz#ab7d156bd69a392493323eeaba839a874c0e201f" integrity sha512-d5ufyYcvrZoHznYm5bjBXaiHIJv552t5gYtQpnUsxBhHSQ8QlaNmlLUyeSPRDfOw4ND9b0tPHqs4ufwx6vp/fQ== @@ -2348,42 +3005,59 @@ slash "^3.0.0" xmldoc "^1.1.2" -"@react-native-community/cli-platform-ios@^6.0.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-6.2.0.tgz#ceaa23995511a8e400b506632ac7e6a66a17ec2a" - integrity sha512-k15MhExxLiLDDZOeuPgvTxbp0CsoLQQpk2Du0HjZDePqqWcKJylQqMZru1o8HuQHPcEr+b71HIs5V+lKyFYpfg== +"@react-native-community/cli-platform-android@^7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-7.0.1.tgz#d165897edf401f9bceff1f361ef446528133cb52" + integrity sha512-nOr0aMkxAymCnbtsQwXBlyoRN2Y+IzC7Qz5T+/zyWwEbTY8SKQI8uV+8+qttUvzSvuXa2PeXsTWluuliOS8KCw== dependencies: - "@react-native-community/cli-tools" "^6.2.0" + "@react-native-community/cli-tools" "^7.0.1" + chalk "^4.1.2" + execa "^1.0.0" + fs-extra "^8.1.0" + glob "^7.1.3" + jetifier "^1.6.2" + lodash "^4.17.15" + logkitty "^0.7.1" + slash "^3.0.0" + xmldoc "^1.1.2" + +"@react-native-community/cli-platform-ios@^7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-7.0.1.tgz#1c27af85229246b7a528e97f093e38859896cc93" + integrity sha512-PLRIbzrCzSedmpjuFtQqcqUD45G8q7sEciI1lf5zUbVMXqjIBwJWS7iz8235PyWwj8J4MNHohLC+oyRueFtbGg== + dependencies: + "@react-native-community/cli-tools" "^7.0.1" chalk "^4.1.2" + execa "^1.0.0" glob "^7.1.3" js-yaml "^3.13.1" lodash "^4.17.15" - ora "^3.4.0" + ora "^5.4.1" plist "^3.0.2" - xcode "^2.0.0" + xcode "^3.0.0" -"@react-native-community/cli-plugin-metro@^6.4.0": - version "6.4.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-6.4.0.tgz#70b7908d6b548481f37ed58167f9460d325ae21c" - integrity sha512-lcrNODvHd3ZVhiEshXAjyBoqP44rjhkytkOSUpnZHAcmMLiguxDmvhWeWqbwu3XqSX/f0gVKmfj81t+opI1bSw== +"@react-native-community/cli-plugin-metro@^7.0.3": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-7.0.3.tgz#b381ed2f68a0b126e4fa238f1956a44846e1ef8a" + integrity sha512-HJrEkFbxv9DNixsGwO+Q0zCcZMghDltyzeB9yQ//D5ZR4ZUEuAIPrRDdEp9xVw0WkBxAIZs6KXLux2/yPMwLhA== dependencies: - "@react-native-community/cli-server-api" "^6.4.0" + "@react-native-community/cli-server-api" "^7.0.3" "@react-native-community/cli-tools" "^6.2.0" chalk "^4.1.2" - metro "^0.66.1" - metro-config "^0.66.1" - metro-core "^0.66.1" - metro-react-native-babel-transformer "^0.66.1" - metro-resolver "^0.66.1" - metro-runtime "^0.66.1" + metro "^0.67.0" + metro-config "^0.67.0" + metro-core "^0.67.0" + metro-react-native-babel-transformer "^0.67.0" + metro-resolver "^0.67.0" + metro-runtime "^0.67.0" readline "^1.3.0" -"@react-native-community/cli-server-api@^6.4.0": - version "6.4.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-6.4.0.tgz#aa547839e54f9910d3671808e009489d2c2db0d9" - integrity sha512-zYUfOEHLTFEmNoa5oscgWOu2xtOcB4NZWqCdpkxNmgGQhC48CSNl8V4rxXLoozcymEsSUN0rj5pDRiXz/5CYow== +"@react-native-community/cli-server-api@^7.0.3": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-7.0.3.tgz#ba9695a2fdfef22750d141153efd94baf641129b" + integrity sha512-JDrLsrkBgNxbG2u3fouoVGL9tKrXUrTsaNwr+oCV+3XyMwbVe42r/OaQ681/iW/7mHXjuVkDnMcp7BMg7e2yJg== dependencies: - "@react-native-community/cli-debugger-ui" "^6.0.0-rc.0" + "@react-native-community/cli-debugger-ui" "^7.0.3" "@react-native-community/cli-tools" "^6.2.0" compression "^1.7.1" connect "^3.6.5" @@ -2391,7 +3065,7 @@ nocache "^2.1.0" pretty-format "^26.6.2" serve-static "^1.13.1" - ws "^1.1.0" + ws "^7.5.1" "@react-native-community/cli-tools@^6.2.0": version "6.2.0" @@ -2407,6 +3081,21 @@ semver "^6.3.0" shell-quote "1.6.1" +"@react-native-community/cli-tools@^7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-7.0.1.tgz#73790d6ca2825e42a70a770c1b403a6777e690d6" + integrity sha512-0xra4hKNA5PR2zYVXsDMNiXMGaDNoNRYMY6eTP2aVIxQbqIcVMDWSyCA8wMWX5iOpMWg0cZGaQ6a77f3Rlb34g== + dependencies: + appdirsjs "^1.2.4" + chalk "^4.1.2" + lodash "^4.17.15" + mime "^2.4.1" + node-fetch "^2.6.0" + open "^6.2.0" + ora "^5.4.1" + semver "^6.3.0" + shell-quote "^1.7.3" + "@react-native-community/cli-types@^6.0.0": version "6.0.0" resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-6.0.0.tgz#90269fbdc7229d5e3b8f2f3e029a94083551040d" @@ -2414,15 +3103,15 @@ dependencies: ora "^3.4.0" -"@react-native-community/cli@^6.0.0": - version "6.4.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-6.4.0.tgz#0b61a4b5f11293b0b79a0e78f80777387a9529a9" - integrity sha512-UNvYnWaALa4mJEaWdLY3fVK+csZzx/Ja/FGvXISPJ9W9lrKvGtyXkidViUCPbPtMsJUi7teA4uIShHn0mbGmnQ== +"@react-native-community/cli@^7.0.3": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-7.0.3.tgz#1addb462d71786fcbbd266fbceb41819b8cf7839" + integrity sha512-WyJOA829KAhU1pw2MDQt0YhOS9kyR2KqyqgJyTuQhzFVCBPX4F5aDEkZYYn4jdldaDHCPrLJ3ho3gxYTXy+x7w== dependencies: - "@react-native-community/cli-debugger-ui" "^6.0.0-rc.0" + "@react-native-community/cli-debugger-ui" "^7.0.3" "@react-native-community/cli-hermes" "^6.3.0" - "@react-native-community/cli-plugin-metro" "^6.4.0" - "@react-native-community/cli-server-api" "^6.4.0" + "@react-native-community/cli-plugin-metro" "^7.0.3" + "@react-native-community/cli-server-api" "^7.0.3" "@react-native-community/cli-tools" "^6.2.0" "@react-native-community/cli-types" "^6.0.0" appdirsjs "^1.2.4" @@ -2451,6 +3140,30 @@ sudo-prompt "^9.0.0" wcwidth "^1.0.1" +"@react-native-community/eslint-config@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@react-native-community/eslint-config/-/eslint-config-3.0.1.tgz#c45968f1214139fe747a7aebdba06c4fa2a4d018" + integrity sha512-h0MRsaHkyfoQjEiTjG3a+Ie/p6AmQNAHXpYrVhtYMZNRF26TCwNOsQNp4/13QhKAq6vhS8EJppge0P43GnPmfQ== + dependencies: + "@react-native-community/eslint-plugin" "^1.1.0" + "@typescript-eslint/eslint-plugin" "^4.22.1" + "@typescript-eslint/parser" "^4.22.1" + babel-eslint "^10.1.0" + eslint-config-prettier "^6.10.1" + eslint-plugin-eslint-comments "^3.1.2" + eslint-plugin-flowtype "2.50.3" + eslint-plugin-jest "22.4.1" + eslint-plugin-prettier "3.1.2" + eslint-plugin-react "^7.20.0" + eslint-plugin-react-hooks "^4.0.7" + eslint-plugin-react-native "^3.10.0" + prettier "^2.0.2" + +"@react-native-community/eslint-plugin@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@react-native-community/eslint-plugin/-/eslint-plugin-1.1.0.tgz#e42b1bef12d2415411519fd528e64b593b1363dc" + integrity sha512-W/J0fNYVO01tioHjvYWQ9m6RgndVtbElzYozBq1ZPrHO/iCzlqoySHl4gO/fpCl9QEFjvJfjPgtPMTMlsoq5DQ== + "@react-native-community/masked-view@^0.1.10": version "0.1.10" resolved "https://registry.yarnpkg.com/@react-native-community/masked-view/-/masked-view-0.1.10.tgz#5dda643e19e587793bc2034dd9bf7398ad43d401" @@ -2471,7 +3184,7 @@ resolved "https://registry.yarnpkg.com/@react-native/assets/-/assets-1.0.0.tgz#c6f9bf63d274bafc8e970628de24986b30a55c8e" integrity sha512-KrwSpS1tKI70wuKl68DwJZYEvXktDHdZMG0k2AXD/rJVSlB23/X2CB2cutVR0HwNMJIal9HOUOBB2rVfa6UGtQ== -"@react-native/normalize-color@2.0.0": +"@react-native/normalize-color@*", "@react-native/normalize-color@2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@react-native/normalize-color/-/normalize-color-2.0.0.tgz#da955909432474a9a0fe1cbffc66576a0447f567" integrity sha512-Wip/xsc5lw8vsBlmY2MO/gFLp3MvuZ2baBZjDeTjjndMgM0h5sxz7AZR62RDPGgstp8Np7JzjvVqVT7tpFZqsw== @@ -2481,40 +3194,47 @@ resolved "https://registry.yarnpkg.com/@react-native/polyfills/-/polyfills-2.0.0.tgz#4c40b74655c83982c8cf47530ee7dc13d957b6aa" integrity sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ== -"@react-navigation/core@^5.14.4": - version "5.14.4" - resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-5.14.4.tgz#f63a2cd214bddbd25e1181f9335c32dfc3b6460f" - integrity sha512-MzZU9PO1a/6f9KdN04dC/E4BNl6M1Ba0Tb4sQdl/32y0hM2ToxlrKcERnTLWGFIbQV+9ZV1GTrp3mlGS6U9Jpw== +"@react-navigation/core@^6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-6.1.1.tgz#47b01d0263e413164431c886267a5139e093c706" + integrity sha512-njysuiqztgvR1Z9Noxk2OGJfYtFGFDRyji5Vmm1jHzlql0m+q0wh1dUiyaIEtTyrhFXr/YNgdrKuiPaU9Jp8OA== dependencies: - "@react-navigation/routers" "^5.6.2" + "@react-navigation/routers" "^6.1.0" escape-string-regexp "^4.0.0" - nanoid "^3.1.15" - query-string "^6.13.6" + nanoid "^3.1.23" + query-string "^7.0.0" react-is "^16.13.0" -"@react-navigation/native@^5.8.10": - version "5.8.10" - resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-5.8.10.tgz#3fe806abff9efb085bcf595212803dd05a1347ca" - integrity sha512-OUgD1o+y7PwmhRIRqQxN0SQvVU/SHic/ek/qMvBZX8nu5/WlBNxmNRMHVxONgHlG3AQZh27NUs9ynntL7ek1zQ== +"@react-navigation/elements@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@react-navigation/elements/-/elements-1.3.1.tgz#aacb08fe0ca4db50f0ed16b72906869ce770edf4" + integrity sha512-jIDRJaG8YPIinl4hZXJu/W3TnhDe8hLYmGSEdL1mxZ1aoNMiApCBYkgTy11oq0EfK/koZd3DPSkJNbzBAQmPJw== + +"@react-navigation/native@^6.0.8": + version "6.0.8" + resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-6.0.8.tgz#66f48ad2b3fb1acd08c8d935d9f342a3d77ee6cd" + integrity sha512-6022M3+Btok3xJC/49B88er3SRrlDAZ4FdmGndhEVvBcGSHWmscU2qKCwFd0RY6A0AGCVmdIlXudrfdcdRAkpQ== dependencies: - "@react-navigation/core" "^5.14.4" + "@react-navigation/core" "^6.1.1" escape-string-regexp "^4.0.0" - nanoid "^3.1.15" + fast-deep-equal "^3.1.3" + nanoid "^3.1.23" -"@react-navigation/routers@^5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@react-navigation/routers/-/routers-5.6.2.tgz#accc008c3b777f74d998e16cb2ea8e4c1fe8d9aa" - integrity sha512-XBcDKXS5s4MaHFufN44LtbXqFDH/nUHfHjbwG85fP3k772oRyPRgbnUb2mbw5MFGqORla9T7uymR6Gh6uwIwVw== +"@react-navigation/routers@^6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@react-navigation/routers/-/routers-6.1.0.tgz#d5682be88f1eb7809527c48f9cd3dedf4f344e40" + integrity sha512-8xJL+djIzpFdRW/sGlKojQ06fWgFk1c5jER9501HYJ12LF5DIJFr/tqBI2TJ6bk+y+QFu0nbNyeRC80OjRlmkA== dependencies: - nanoid "^3.1.15" + nanoid "^3.1.23" -"@react-navigation/stack@^5.12.8": - version "5.12.8" - resolved "https://registry.yarnpkg.com/@react-navigation/stack/-/stack-5.12.8.tgz#31e54e05d8a3ffaaa3e39a1a9b7969f8316a35bf" - integrity sha512-wUJFbU0v606RBXOUxHToCXJNmiwxtFYhN2TFvjxCZ3PJU+OWWx8HTmn99pT3rVH4Ax2cfO5BDUy9v+r74ZrIWw== +"@react-navigation/stack@^6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@react-navigation/stack/-/stack-6.1.1.tgz#eb0dd2f5dec01b9322b7cea8767cb1e408365124" + integrity sha512-mr7CrP3rvYapTZj/xUInJYDte2QEQPvK8qBI6kbJ6goeLqRMkcO7haK4Q5FeV1HVYCUnssAn7CA5j+OOm59syg== dependencies: + "@react-navigation/elements" "^1.3.1" color "^3.1.3" - react-native-iphone-x-helper "^1.3.0" + warn-once "^0.1.0" "@sideway/address@^4.1.3": version "4.1.3" @@ -2643,6 +3363,11 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== +"@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + "@types/minimatch@*": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" @@ -2757,6 +3482,31 @@ dependencies: "@types/yargs-parser" "*" +"@typescript-eslint/eslint-plugin@^4.22.1", "@typescript-eslint/eslint-plugin@^5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.17.0.tgz#704eb4e75039000531255672bf1c85ee85cf1d67" + integrity sha512-qVstvQilEd89HJk3qcbKt/zZrfBZ+9h2ynpAGlWjWiizA7m/MtLT9RoX6gjtpE500vfIg8jogAkDzdCxbsFASQ== + dependencies: + "@typescript-eslint/scope-manager" "5.17.0" + "@typescript-eslint/type-utils" "5.17.0" + "@typescript-eslint/utils" "5.17.0" + debug "^4.3.2" + functional-red-black-tree "^1.0.1" + ignore "^5.1.8" + regexpp "^3.2.0" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^4.22.1", "@typescript-eslint/parser@^5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.17.0.tgz#7def77d5bcd8458d12d52909118cf3f0a45f89d5" + integrity sha512-aRzW9Jg5Rlj2t2/crzhA2f23SIYFlF9mchGudyP0uiD6SenIxzKoLjwzHbafgHn39dNV/TV7xwQkLfFTZlJ4ig== + dependencies: + "@typescript-eslint/scope-manager" "5.17.0" + "@typescript-eslint/types" "5.17.0" + "@typescript-eslint/typescript-estree" "5.17.0" + debug "^4.3.2" + "@typescript-eslint/parser@^4.9.1": version "4.9.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.9.1.tgz#2d74c4db5dd5117379a9659081a4d1ec02629055" @@ -2775,11 +3525,33 @@ "@typescript-eslint/types" "4.9.1" "@typescript-eslint/visitor-keys" "4.9.1" +"@typescript-eslint/scope-manager@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.17.0.tgz#4cea7d0e0bc0e79eb60cad431c89120987c3f952" + integrity sha512-062iCYQF/doQ9T2WWfJohQKKN1zmmXVfAcS3xaiialiw8ZUGy05Em6QVNYJGO34/sU1a7a+90U3dUNfqUDHr3w== + dependencies: + "@typescript-eslint/types" "5.17.0" + "@typescript-eslint/visitor-keys" "5.17.0" + +"@typescript-eslint/type-utils@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.17.0.tgz#1c4549d68c89877662224aabb29fbbebf5fc9672" + integrity sha512-3hU0RynUIlEuqMJA7dragb0/75gZmwNwFf/QJokWzPehTZousP/MNifVSgjxNcDCkM5HI2K22TjQWUmmHUINSg== + dependencies: + "@typescript-eslint/utils" "5.17.0" + debug "^4.3.2" + tsutils "^3.21.0" + "@typescript-eslint/types@4.9.1": version "4.9.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.9.1.tgz#a1a7dd80e4e5ac2c593bc458d75dd1edaf77faa2" integrity sha512-fjkT+tXR13ks6Le7JiEdagnwEFc49IkOyys7ueWQ4O8k4quKPwPJudrwlVOJCUQhXo45PrfIvIarcrEjFTNwUA== +"@typescript-eslint/types@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.17.0.tgz#861ec9e669ffa2aa9b873dd4d28d9b1ce26d216f" + integrity sha512-AgQ4rWzmCxOZLioFEjlzOI3Ch8giDWx8aUDxyNw9iOeCvD3GEYAB7dxWGQy4T/rPVe8iPmu73jPHuaSqcjKvxw== + "@typescript-eslint/typescript-estree@4.9.1": version "4.9.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.9.1.tgz#6e5b86ff5a5f66809e1f347469fadeec69ac50bf" @@ -2794,6 +3566,31 @@ semver "^7.3.2" tsutils "^3.17.1" +"@typescript-eslint/typescript-estree@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.17.0.tgz#a7cba7dfc8f9cc2ac78c18584e684507df4f2488" + integrity sha512-X1gtjEcmM7Je+qJRhq7ZAAaNXYhTgqMkR10euC4Si6PIjb+kwEQHSxGazXUQXFyqfEXdkGf6JijUu5R0uceQzg== + dependencies: + "@typescript-eslint/types" "5.17.0" + "@typescript-eslint/visitor-keys" "5.17.0" + debug "^4.3.2" + globby "^11.0.4" + is-glob "^4.0.3" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.17.0.tgz#549a9e1d491c6ccd3624bc3c1b098f5cfb45f306" + integrity sha512-DVvndq1QoxQH+hFv+MUQHrrWZ7gQ5KcJzyjhzcqB1Y2Xes1UQQkTRPUfRpqhS8mhTWsSb2+iyvDW1Lef5DD7vA== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.17.0" + "@typescript-eslint/types" "5.17.0" + "@typescript-eslint/typescript-estree" "5.17.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + "@typescript-eslint/visitor-keys@4.9.1": version "4.9.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.9.1.tgz#d76374a58c4ead9e92b454d186fea63487b25ae1" @@ -2802,6 +3599,14 @@ "@typescript-eslint/types" "4.9.1" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.17.0.tgz#52daae45c61b0211b4c81b53a71841911e479128" + integrity sha512-6K/zlc4OfCagUu7Am/BD5k8PSWQOgh34Nrv9Rxe2tBzlJ7uOeJ/h7ugCGDCeEZHT6k2CJBhbk9IsbkPI0uvUkA== + dependencies: + "@typescript-eslint/types" "5.17.0" + eslint-visitor-keys "^3.0.0" + "@unimodules/core@~6.0.0": version "6.0.0" resolved "https://registry.yarnpkg.com/@unimodules/core/-/core-6.0.0.tgz#c76ca5ca92128a059c62bb0c24d0372aaf908408" @@ -3020,11 +3825,16 @@ acorn@^6.0.1, acorn@^6.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^7.1.0, acorn@^7.4.0: +acorn@^7.1.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.7.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" + integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== + address@1.1.2, address@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" @@ -3068,11 +3878,6 @@ anser@^1.4.9: resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.10.tgz#befa3eddf282684bd03b63dcda3927aef8c2e35b" integrity sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww== -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - ansi-escapes@^4.2.1: version "4.3.1" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" @@ -3109,6 +3914,11 @@ ansi-regex@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -3161,6 +3971,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + argsarray@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/argsarray/-/argsarray-0.0.1.tgz#6e7207b4ecdb39b0af88303fa5ae22bda8df61cb" @@ -3191,6 +4006,17 @@ array-filter@~0.0.0: resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw= +array-includes@^3.1.3, array-includes@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9" + integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + get-intrinsic "^1.1.1" + is-string "^1.0.7" + array-map@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" @@ -3223,6 +4049,15 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +array.prototype.flatmap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz#908dc82d8a406930fdf38598d51e7411d18d4446" + integrity sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.19.0" + asap@~2.0.3, asap@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" @@ -3275,11 +4110,6 @@ astral-regex@^1.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - async-each@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" @@ -3327,6 +4157,18 @@ babel-core@^7.0.0-bridge.0: resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== +babel-eslint@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" + integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + eslint-visitor-keys "^1.0.0" + resolve "^1.12.0" + babel-extract-comments@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz#0a2aedf81417ed391b85e18b4614e693a0351a21" @@ -3408,6 +4250,30 @@ babel-plugin-module-resolver@^4.0.0: reselect "^4.0.0" resolve "^1.13.1" +babel-plugin-polyfill-corejs2@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" + integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== + dependencies: + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.3.1" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" + integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.1" + core-js-compat "^3.21.0" + +babel-plugin-polyfill-regenerator@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" + integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.1" + babel-plugin-react-native-web@~0.13.6: version "0.13.18" resolved "https://registry.yarnpkg.com/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.13.18.tgz#f0b640412b81acd02d8036b7a935ffb3ab446e4e" @@ -3608,6 +4474,15 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" @@ -3645,10 +4520,10 @@ bplist-creator@0.1.0: dependencies: stream-buffers "2.2.x" -bplist-parser@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.3.0.tgz#ba50666370f61bbf94881636cd9f7d23c5286090" - integrity sha512-zgmaRvT6AN1JpPPV+S0a1/FAtoxSreYDccZGIqEMSvZl9DMe70mJ7MFzpxa1X+gHVdkToE2haRUHHMiW1OdejA== +bplist-parser@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.3.1.tgz#e1c90b2ca2a9f9474cc72f6862bbf3fee8341fd1" + integrity sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA== dependencies: big-integer "1.6.x" @@ -3676,7 +4551,7 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1, braces@~3.0.2: +braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -3793,6 +4668,17 @@ browserslist@^4.17.5: node-releases "^2.0.1" picocolors "^1.0.0" +browserslist@^4.19.1: + version "4.20.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.2.tgz#567b41508757ecd904dab4d1c646c612cd3d4f88" + integrity sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA== + dependencies: + caniuse-lite "^1.0.30001317" + electron-to-chromium "^1.4.84" + escalade "^3.1.1" + node-releases "^2.0.2" + picocolors "^1.0.0" + bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -3842,7 +4728,7 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -buffer@^5.2.0: +buffer@^5.2.0, buffer@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -3927,6 +4813,14 @@ call-bind@^1.0.0: function-bind "^1.1.1" get-intrinsic "^1.0.0" +call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" @@ -3989,6 +4883,11 @@ caniuse-lite@^1.0.30001286: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001305.tgz#02cd8031df07c4fcb117aa2ecc4899122681bd4c" integrity sha512-p7d9YQMji8haf0f+5rbcv9WlQ+N5jMPfRAnUmZRlNxsNeBO3Yr7RYG6M2uTY1h9tCVdlkJg6YNNc4kiAiBLdWA== +caniuse-lite@^1.0.30001317: + version "1.0.30001322" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001322.tgz#2e4c09d11e1e8f852767dab287069a8d0c29d623" + integrity sha512-neRmrmIrCGuMnxGSoh+x7zYtQFFgnSY2jaomjU56sCkTA6JINqQrxutF459JpWcWRajvoyn95sOXq4Pqrnyjew== + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -4026,7 +4925,7 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.1.2: +chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -4095,6 +4994,11 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +ci-info@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" + integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -4140,7 +5044,14 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" -cli-spinners@^2.0.0: +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.0.0, cli-spinners@^2.5.0: version "2.6.1" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== @@ -4154,6 +5065,15 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" @@ -4186,7 +5106,7 @@ collection-visit@^1.0.0: map-visit "^1.0.0" object-visit "^1.0.0" -color-convert@^1.9.0, color-convert@^1.9.1: +color-convert@^1.9.0, color-convert@^1.9.1, color-convert@^1.9.3: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -4218,7 +5138,15 @@ color-string@^1.5.4: color-name "^1.0.0" simple-swizzle "^0.2.2" -color@^3.0.0, color@^3.1.3: +color-string@^1.6.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.0.tgz#63b6ebd1bec11999d1df3a79a7569451ac2be8aa" + integrity sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.0.0: version "3.1.3" resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== @@ -4226,16 +5154,19 @@ color@^3.0.0, color@^3.1.3: color-convert "^1.9.1" color-string "^1.5.4" +color@^3.1.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== + dependencies: + color-convert "^1.9.3" + color-string "^1.6.0" + colorette@^1.0.7, colorette@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== -colors@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -4389,6 +5320,14 @@ copy-webpack-plugin@~6.0.3: serialize-javascript "^4.0.0" webpack-sources "^1.4.3" +core-js-compat@^3.20.2, core-js-compat@^3.21.0: + version "3.21.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.21.1.tgz#cac369f67c8d134ff8f9bd1623e3bc2c42068c82" + integrity sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g== + dependencies: + browserslist "^4.19.1" + semver "7.0.0" + core-js-compat@^3.8.0: version "3.8.2" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.2.tgz#3717f51f6c3d2ebba8cbf27619b57160029d1d4c" @@ -4698,13 +5637,20 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0: dependencies: ms "2.0.0" -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: +debug@^4.1.0, debug@^4.1.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: ms "2.1.2" +debug@^4.3.2: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -4807,6 +5753,15 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= +deprecated-react-native-prop-types@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-2.3.0.tgz#c10c6ee75ff2b6de94bb127f142b814e6e08d9ab" + integrity sha512-pWD0voFtNYxrVqvBMYf5gq3NA2GCpfodS1yNynTPc93AYA/KEMGeWDqqeUB6R2Z9ZofVhks2aeJXiuQqKNpesA== + dependencies: + "@react-native/normalize-color" "*" + invariant "*" + prop-types "*" + des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" @@ -4854,6 +5809,13 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + doctrine@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" @@ -5003,6 +5965,11 @@ electron-to-chromium@^1.4.17: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.61.tgz#97689f81b4ac5c996363d9ee7babd3406c44d6c3" integrity sha512-kpzCOOFlx63C9qKRyIDEsKIUgzoe98ump7T4gU+/OLzj8gYkkWf2SIyBjhTSE0keAjMAp3i7C262YtkQOMYrGw== +electron-to-chromium@^1.4.84: + version "1.4.100" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.100.tgz#da82de8a19a47ea3dcdf141dde85355942fbc4e7" + integrity sha512-pNrSE2naf8fizl6/Uxq8UbKb8hU9EiYW4OzCYswosXoLV5NTMOUVKECNzDaHiUubsPq/kAckOzZd7zd8S8CHVw== + elliptic@^6.5.3: version "6.5.3" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" @@ -5054,13 +6021,6 @@ enhanced-resolve@^4.1.0: memory-fs "^0.5.0" tapable "^1.0.0" -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - entities@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" @@ -5140,6 +6100,32 @@ es-abstract@^1.18.0-next.1: string.prototype.trimend "^1.0.1" string.prototype.trimstart "^1.0.1" +es-abstract@^1.19.0, es-abstract@^1.19.1: + version "1.19.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.2.tgz#8f7b696d8f15b167ae3640b4060670f3d054143f" + integrity sha512-gfSBJoZdlL2xRiOCy0g8gLMryhoe1TlimjzU99L/31Z8QEGIhVQI+EWwt5lT+AuU9SnorVupXFqqOGqGfsyO6w== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.1" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -5186,6 +6172,78 @@ escodegen@^1.11.1: optionalDependencies: source-map "~0.6.1" +eslint-config-prettier@^6.10.1: + version "6.15.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz#7f93f6cb7d45a92f1537a70ecc06366e1ac6fed9" + integrity sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw== + dependencies: + get-stdin "^6.0.0" + +eslint-plugin-eslint-comments@^3.1.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz#9e1cd7b4413526abb313933071d7aba05ca12ffa" + integrity sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ== + dependencies: + escape-string-regexp "^1.0.5" + ignore "^5.0.5" + +eslint-plugin-flowtype@2.50.3: + version "2.50.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.3.tgz#61379d6dce1d010370acd6681740fd913d68175f" + integrity sha512-X+AoKVOr7Re0ko/yEXyM5SSZ0tazc6ffdIOocp2fFUlWoDt7DV0Bz99mngOkAFLOAWjqRA5jPwqUCbrx13XoxQ== + dependencies: + lodash "^4.17.10" + +eslint-plugin-jest@22.4.1: + version "22.4.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-22.4.1.tgz#a5fd6f7a2a41388d16f527073b778013c5189a9c" + integrity sha512-gcLfn6P2PrFAVx3AobaOzlIEevpAEf9chTpFZz7bYfc7pz8XRv7vuKTIE4hxPKZSha6XWKKplDQ0x9Pq8xX2mg== + +eslint-plugin-prettier@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz#432e5a667666ab84ce72f945c72f77d996a5c9ba" + integrity sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-plugin-react-hooks@^4.0.7: + version "4.4.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.4.0.tgz#71c39e528764c848d8253e1aa2c7024ed505f6c4" + integrity sha512-U3RVIfdzJaeKDQKEJbz5p3NW8/L80PCATJAfuojwbaEL+gBjfGdhUcGde+WGUW46Q5sr/NgxevsIiDtNXrvZaQ== + +eslint-plugin-react-native-globals@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz#ee1348bc2ceb912303ce6bdbd22e2f045ea86ea2" + integrity sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g== + +eslint-plugin-react-native@^3.10.0, eslint-plugin-react-native@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-native/-/eslint-plugin-react-native-4.0.0.tgz#eec41984abe4970bdd7c6082dff7a98a5e34d0bb" + integrity sha512-kMmdxrSY7A1WgdqaGC+rY/28rh7kBGNBRsk48ovqkQmdg5j4K+DaFmegENDzMrdLkoufKGRNkKX6bgSwQTCAxQ== + dependencies: + "@babel/traverse" "^7.7.4" + eslint-plugin-react-native-globals "^0.1.1" + +eslint-plugin-react@^7.20.0: + version "7.29.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz#4717de5227f55f3801a5fd51a16a4fa22b5914d2" + integrity sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ== + dependencies: + array-includes "^3.1.4" + array.prototype.flatmap "^1.2.5" + doctrine "^2.1.0" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.5" + object.fromentries "^2.0.5" + object.hasown "^1.1.0" + object.values "^1.1.5" + prop-types "^15.8.1" + resolve "^2.0.0-next.3" + semver "^6.3.0" + string.prototype.matchall "^4.0.6" + eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -5202,14 +6260,22 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== dependencies: - eslint-visitor-keys "^1.1.0" + eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: +eslint-visitor-keys@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== @@ -5219,67 +6285,70 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== -eslint@^7.16.0: - version "7.16.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.16.0.tgz#a761605bf9a7b32d24bb7cde59aeb0fd76f06092" - integrity sha512-iVWPS785RuDA4dWuhhgXTNrGxHHK3a8HLSMBgbbU59ruJDubUraXN8N5rn7kb8tG6sjg74eE0RA3YWT51eusEw== +eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^8.12.0: + version "8.12.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.12.0.tgz#c7a5bd1cfa09079aae64c9076c07eada66a46e8e" + integrity sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q== dependencies: - "@babel/code-frame" "^7.0.0" - "@eslint/eslintrc" "^0.2.2" + "@eslint/eslintrc" "^1.2.1" + "@humanwhocodes/config-array" "^0.9.2" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" - debug "^4.0.1" + debug "^4.3.2" doctrine "^3.0.0" - enquirer "^2.3.5" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.2.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.3.1" + esquery "^1.4.0" esutils "^2.0.2" - file-entry-cache "^6.0.0" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" - ignore "^4.0.6" + glob-parent "^6.0.1" + globals "^13.6.0" + ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-yaml "^3.13.1" + js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" - lodash "^4.17.19" + lodash.merge "^4.6.2" minimatch "^3.0.4" natural-compare "^1.4.0" optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" + regexpp "^3.2.0" + strip-ansi "^6.0.1" strip-json-comments "^3.1.0" - table "^6.0.4" text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== +espree@^9.3.1: + version "9.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.1.tgz#8793b4bc27ea4c778c19908e0719e7b8f4115bcd" + integrity sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ== dependencies: - acorn "^7.4.0" + acorn "^8.7.0" acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" + eslint-visitor-keys "^3.3.0" esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" - integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== dependencies: estraverse "^5.1.0" @@ -5300,6 +6369,11 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== +estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -5589,11 +6663,16 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= -fast-deep-equal@^3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + fast-glob@^3.1.1, fast-glob@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" @@ -5606,6 +6685,17 @@ fast-glob@^3.1.1, fast-glob@^3.2.4: micromatch "^4.0.2" picomatch "^2.2.1" +fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -5681,10 +6771,10 @@ figures@^3.0.0: dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a" - integrity sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA== +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" @@ -5728,6 +6818,11 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +filter-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" + integrity sha1-mzERErxsYSehbgFsbF1/GeCAXFs= + finalhandler@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" @@ -5973,6 +7068,11 @@ fsevents@^2.1.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.2.1.tgz#1fb02ded2036a8ac288d507a65962bd87b97628d" integrity sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA== +fsevents@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + fsevents@~2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" @@ -6007,6 +7107,15 @@ get-intrinsic@^1.0.0: has "^1.0.3" has-symbols "^1.0.1" +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" @@ -6017,6 +7126,11 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== +get-stdin@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== + get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -6031,6 +7145,14 @@ get-stream@^5.0.0: dependencies: pump "^3.0.0" +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -6056,13 +7178,27 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.0: +glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== dependencies: is-glob "^4.0.1" +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" @@ -6109,12 +7245,12 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== +globals@^13.6.0, globals@^13.9.0: + version "13.13.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.13.0.tgz#ac32261060d8070e2719dd6998406e27d2b5727b" + integrity sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A== dependencies: - type-fest "^0.8.1" + type-fest "^0.20.2" globby@11.0.1, globby@^11.0.1: version "11.0.1" @@ -6128,6 +7264,18 @@ globby@11.0.1, globby@^11.0.1: merge2 "^1.3.0" slash "^3.0.0" +globby@^11.0.4: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" @@ -6144,6 +7292,11 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" @@ -6170,6 +7323,11 @@ har-validator@~5.1.3: ajv "^6.12.3" har-schema "^2.0.0" +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -6185,6 +7343,18 @@ has-symbols@^1.0.1: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -6245,15 +7415,22 @@ he@1.2.0, he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -hermes-engine@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/hermes-engine/-/hermes-engine-0.9.0.tgz#84d9cfe84e8f6b1b2020d6e71b350cec84ed982f" - integrity sha512-r7U+Y4P2Qg/igFVZN+DpT7JFfXUn1MM4dFne8aW+cCrF6RRymof+VqrUHs1kl07j8h8V2CNesU19RKgWbr3qPw== +hermes-engine@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/hermes-engine/-/hermes-engine-0.11.0.tgz#bb224730d230a02a5af02c4e090d1f52d57dd3db" + integrity sha512-7aMUlZja2IyLYAcZ69NBnwJAR5ZOYlSllj0oMpx08a8HzxHOys0eKCzfphrf6D0vX1JGO1QQvVsQKe6TkYherw== + +hermes-estree@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.5.0.tgz#36432a2b12f01b217244da098924efdfdfc12327" + integrity sha512-1h8rvG23HhIR5K6Kt0e5C7BC72J1Ath/8MmSta49vxXp/j6wl7IMHvIRFYBQr35tWnQY97dSGR2uoAJ5pHUQkg== -hermes-parser@0.4.7: - version "0.4.7" - resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.4.7.tgz#410f5129d57183784d205a0538e6fbdcf614c9ea" - integrity sha512-jc+zCtXbtwTiXoMAoXOHepxAaGVFIp89wwE9qcdwnMd/uGVEtPoY8FaFSsx0ThPvyKirdR2EsIIDVrpbSXz1Ag== +hermes-parser@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.5.0.tgz#8b678dd8b29a08b57cbaf60adba4896494c59a53" + integrity sha512-ARnJBScKAkkq8j3BHrNGBUv/4cSpZNbKDsVizEtzmsFeqC67Dopa5s4XRe+e3wN52Dh5Mj2kDB5wJvhcxwDkPg== + dependencies: + hermes-estree "0.5.0" hermes-profile-transformer@^0.0.6: version "0.0.6" @@ -6447,10 +7624,10 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +ignore@^5.0.5, ignore@^5.1.8, ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== ignore@^5.1.4: version "5.1.8" @@ -6543,7 +7720,16 @@ ini@^1.3.5, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -invariant@^2.2.2, invariant@^2.2.4: +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +invariant@*, invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -6589,6 +7775,13 @@ is-arrayish@^0.3.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" @@ -6603,6 +7796,14 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -6613,6 +7814,11 @@ is-callable@^1.1.4, is-callable@^1.2.2: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== +is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== + is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -6639,6 +7845,13 @@ is-core-module@^2.1.0: dependencies: has "^1.0.3" +is-core-module@^2.2.0, is-core-module@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" + integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -6737,11 +7950,35 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + is-negative-zero@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" + integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== + dependencies: + has-tostringtag "^1.0.0" + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -6797,6 +8034,14 @@ is-regex@^1.1.1: dependencies: has-symbols "^1.0.1" +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" @@ -6812,6 +8057,11 @@ is-root@2.1.0: resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== +is-shared-array-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" + integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== + is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -6822,6 +8072,13 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + is-svg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" @@ -6836,11 +8093,30 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.1" +is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -7098,6 +8374,26 @@ jest-haste-map@^26.5.2: optionalDependencies: fsevents "^2.1.2" +jest-haste-map@^27.3.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" + integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== + dependencies: + "@jest/types" "^27.5.1" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^27.5.1" + jest-serializer "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + micromatch "^4.0.4" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.3.2" + jest-jasmine2@^25.5.4: version "25.5.4" resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz#66ca8b328fb1a3c5364816f8958f6970a8526968" @@ -7175,6 +8471,11 @@ jest-regex-util@^26.0.0: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== +jest-regex-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" + integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== + jest-resolve-dependencies@^25.5.4: version "25.5.4" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz#85501f53957c8e3be446e863a74777b5a17397a7" @@ -7271,6 +8572,14 @@ jest-serializer@^26.6.2: "@types/node" "*" graceful-fs "^4.2.4" +jest-serializer@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" + integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.9" + jest-snapshot@^25.5.1: version "25.5.1" resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-25.5.1.tgz#1a2a576491f9961eb8d00c2e5fd479bc28e5ff7f" @@ -7315,6 +8624,18 @@ jest-util@^26.6.2: is-ci "^2.0.0" micromatch "^4.0.2" +jest-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" + integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + jest-validate@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-25.5.0.tgz#fb4c93f332c2e4cf70151a628e58a35e459a413a" @@ -7368,6 +8689,15 @@ jest-worker@^26.0.0, jest-worker@^26.2.1, jest-worker@^26.6.2: merge-stream "^2.0.0" supports-color "^7.0.0" +jest-worker@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + jest@^25.1.0: version "25.5.4" resolved "https://registry.yarnpkg.com/jest/-/jest-25.5.4.tgz#f21107b6489cfe32b076ce2adcadee3587acb9db" @@ -7431,6 +8761,13 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -7441,29 +8778,29 @@ jsc-android@^250230.2.1: resolved "https://registry.yarnpkg.com/jsc-android/-/jsc-android-250230.2.1.tgz#3790313a970586a03ab0ad47defbc84df54f1b83" integrity sha512-KmxeBlRjwoqCnBBKGsihFtvsBHyUFlBxJPK4FzeYcIuBfdjv6jFys44JITAgSTbQD+vIdwMEfyZklsuQX0yI1Q== -jscodeshift@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.11.0.tgz#4f95039408f3f06b0e39bb4d53bc3139f5330e2f" - integrity sha512-SdRK2C7jjs4k/kT2mwtO07KJN9RnjxtKn03d9JVj6c3j9WwaLcFYsICYDnLAzY0hp+wG2nxl+Cm2jWLiNVYb8g== - dependencies: - "@babel/core" "^7.1.6" - "@babel/parser" "^7.1.6" - "@babel/plugin-proposal-class-properties" "^7.1.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.1.0" - "@babel/plugin-proposal-optional-chaining" "^7.1.0" - "@babel/plugin-transform-modules-commonjs" "^7.1.0" - "@babel/preset-flow" "^7.0.0" - "@babel/preset-typescript" "^7.1.0" - "@babel/register" "^7.0.0" +jscodeshift@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.13.1.tgz#69bfe51e54c831296380585c6d9e733512aecdef" + integrity sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ== + dependencies: + "@babel/core" "^7.13.16" + "@babel/parser" "^7.13.16" + "@babel/plugin-proposal-class-properties" "^7.13.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8" + "@babel/plugin-proposal-optional-chaining" "^7.13.12" + "@babel/plugin-transform-modules-commonjs" "^7.13.8" + "@babel/preset-flow" "^7.13.13" + "@babel/preset-typescript" "^7.13.0" + "@babel/register" "^7.13.16" babel-core "^7.0.0-bridge.0" - colors "^1.1.2" + chalk "^4.1.2" flow-parser "0.*" graceful-fs "^4.2.4" micromatch "^3.1.10" neo-async "^2.5.0" node-dir "^0.1.17" - recast "^0.20.3" - temp "^0.8.1" + recast "^0.20.4" + temp "^0.8.4" write-file-atomic "^2.3.0" jsdom@^15.2.1: @@ -7564,6 +8901,11 @@ json5@^2.1.2: dependencies: minimist "^1.2.5" +json5@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + jsonfile@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" @@ -7602,6 +8944,14 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +"jsx-ast-utils@^2.4.1 || ^3.0.0": + version "3.2.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz#720b97bfe7d901b927d87c3773637ae8ea48781b" + integrity sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA== + dependencies: + array-includes "^3.1.3" + object.assign "^4.1.2" + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -7769,6 +9119,11 @@ lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + lodash.omit@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-4.5.0.tgz#6eb19ae5a1ee1dd9df0b969e66ce0b7fa30b5e60" @@ -7814,6 +9169,11 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== +lodash@^4.17.10: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + log-symbols@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" @@ -7821,6 +9181,14 @@ log-symbols@^2.2.0: dependencies: chalk "^2.0.1" +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + logkitty@^0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/logkitty/-/logkitty-0.7.1.tgz#8e8d62f4085a826e8d38987722570234e33c6aa7" @@ -7946,7 +9314,7 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0: +merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -7965,20 +9333,6 @@ metro-babel-register@0.64.0: "@babel/register" "^7.0.0" escape-string-regexp "^1.0.5" -metro-babel-register@0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.66.2.tgz#c6bbe36c7a77590687ccd74b425dc020d17d05af" - integrity sha512-3F+vsVubUPJYKfVMeol8/7pd8CC287Rw92QYzJD8LEmI980xcgwMUEVBZ0UIAUwlLgiJG/f4Mwhuji2EeBXrPg== - dependencies: - "@babel/core" "^7.14.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" - "@babel/plugin-proposal-optional-chaining" "^7.0.0" - "@babel/plugin-syntax-class-properties" "^7.0.0" - "@babel/plugin-transform-flow-strip-types" "^7.0.0" - "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/register" "^7.0.0" - escape-string-regexp "^1.0.5" - metro-babel-transformer@0.64.0: version "0.64.0" resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.64.0.tgz#a21f8a989a5ea60c1109456e21bd4d9374194ea0" @@ -7988,14 +9342,14 @@ metro-babel-transformer@0.64.0: metro-source-map "0.64.0" nullthrows "^1.1.1" -metro-babel-transformer@0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.66.2.tgz#fce0a3e314d28a5e7141c135665e1cc9b8e7ce86" - integrity sha512-aJ/7fc/Xkofw8Fqa51OTDhBzBz26mmpIWrXAZcPdQ8MSTt883EWncxeCEjasc79NJ89BRi7sOkkaWZo2sXlKvw== +metro-babel-transformer@0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.67.0.tgz#42fe82af9953e5c62d9a8d7d544eb7be9020dd18" + integrity sha512-SBqc4nq/dgsPNFm+mpWcQQzJaXnh0nrfz2pSnZC4i6zMtIakrTWb8SQ78jOU1FZVEZ3nu9xCYVHS9Tbr/LoEuw== dependencies: "@babel/core" "^7.14.0" - hermes-parser "0.4.7" - metro-source-map "0.66.2" + hermes-parser "0.5.0" + metro-source-map "0.67.0" nullthrows "^1.1.1" metro-cache-key@0.64.0: @@ -8003,10 +9357,10 @@ metro-cache-key@0.64.0: resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.64.0.tgz#98d0a94332453c4c52b74f72c07cc62a5c264c4f" integrity sha512-O9B65G8L/fopck45ZhdRosyVZdMtUQuX5mBWEC1NRj02iWBIUPLmYMjrunqIe8vHipCMp3DtTCm/65IlBmO8jg== -metro-cache-key@0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.66.2.tgz#d6463d2a53e887a38419d523962cc24ea0e780b4" - integrity sha512-WtkNmRt41qOpHh1MkNA4nLiQ/m7iGL90ysSKD+fcLqlUnOBKJptPQm0ZUv8Kfqk18ddWX2KmsSbq+Sf3I6XohQ== +metro-cache-key@0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.67.0.tgz#4df6a73cced199e1bddd0f3454bb931a27141eeb" + integrity sha512-FNJe5Rcb2uzY6G6tsqCf0RV4t2rCeX6vSHBxmP7k+4aI4NqX4evtPI0K82r221nBzm5DqNWCURZ0RYUT6jZMGA== metro-cache@0.64.0: version "0.64.0" @@ -8017,12 +9371,12 @@ metro-cache@0.64.0: mkdirp "^0.5.1" rimraf "^2.5.4" -metro-cache@0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.66.2.tgz#e0af4e0a319898f7d42a980f7ee5da153fcfd019" - integrity sha512-5QCYJtJOHoBSbL3H4/Fpl36oA697C3oYHqsce+Hk/dh2qtODUGpS3gOBhvP1B8iB+H8jJMyR75lZq129LJEsIQ== +metro-cache@0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.67.0.tgz#928db5742542719677468c4d22ea29b71c7ec8fc" + integrity sha512-IY5dXiR76L75b2ue/mv+9vW8g5hdQJU6YEe81lj6gTSoUrhcONT0rzY+Gh5QOS2Kk6z9utZQMvd9PRKL9/635A== dependencies: - metro-core "0.66.2" + metro-core "0.67.0" mkdirp "^0.5.1" rimraf "^2.5.4" @@ -8038,17 +9392,17 @@ metro-config@0.64.0, metro-config@^0.64.0: metro-core "0.64.0" metro-runtime "0.64.0" -metro-config@0.66.2, metro-config@^0.66.1: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.66.2.tgz#e365acdb66ad0cda0182b9c9910760a97ee4293b" - integrity sha512-0C+PrKKIBNNzLZUKN/8ZDJS2U5FLMOTXDWbvBHIdqb6YXz8WplXR2+xlSlaSCCi5b+GR7cWFWUNeKA4GQS1/AQ== +metro-config@0.67.0, metro-config@^0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.67.0.tgz#5507d3b295bd10c87bd13dbe5a3033a357418786" + integrity sha512-ThAwUmzZwTbKyyrIn2bKIcJDPDBS0LKAbqJZQioflvBGfcgA21h3fdL3IxRmvCEl6OnkEWI0Tn1Z9w2GLAjf2g== dependencies: cosmiconfig "^5.0.5" jest-validate "^26.5.2" - metro "0.66.2" - metro-cache "0.66.2" - metro-core "0.66.2" - metro-runtime "0.66.2" + metro "0.67.0" + metro-cache "0.67.0" + metro-core "0.67.0" + metro-runtime "0.67.0" metro-core@0.64.0: version "0.64.0" @@ -8059,24 +9413,24 @@ metro-core@0.64.0: lodash.throttle "^4.1.1" metro-resolver "0.64.0" -metro-core@0.66.2, metro-core@^0.66.1: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.66.2.tgz#ead776a17b3e5a307e6dc22259db30bf5c7e8490" - integrity sha512-JieLZkef/516yxXYvQxWnf3OWw5rcgWRy76K8JV/wr/i8LGVGulPAXlIi445/QZzXVydzRVASKAEVqyxM5F4mA== +metro-core@0.67.0, metro-core@^0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.67.0.tgz#75066e11b4df220992abf9cd6200279dd87876c8" + integrity sha512-TOa/ShE1bUq83fGNfV6rFwyfZ288M8ydmWN3g9C2OW8emOHLhJslYD/SIU4DhDkP/99yaJluIALdZ2g0+pCrvQ== dependencies: - jest-haste-map "^26.5.2" + jest-haste-map "^27.3.1" lodash.throttle "^4.1.1" - metro-resolver "0.66.2" + metro-resolver "0.67.0" metro-hermes-compiler@0.64.0: version "0.64.0" resolved "https://registry.yarnpkg.com/metro-hermes-compiler/-/metro-hermes-compiler-0.64.0.tgz#e6043d7aa924e5b2be99bd3f602e693685d15386" integrity sha512-CLAjVDWGAoGhbi2ZyPHnH5YDdfrDIx6+tzFWfHGIMTZkYBXsYta9IfYXBV8lFb6BIbrXLjlXZAOoosknetMPOA== -metro-hermes-compiler@0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-hermes-compiler/-/metro-hermes-compiler-0.66.2.tgz#30290748f83805faa601aa487632444915795823" - integrity sha512-nCVL1g9uR6vrw5+X1wjwZruRyMkndnzGRMqjqoljf+nGEqBTD607CR7elXw4fMWn/EM+1y0Vdq5altUu9LdgCA== +metro-hermes-compiler@0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-hermes-compiler/-/metro-hermes-compiler-0.67.0.tgz#9c1340f1882fbf535145868d0d28211ca15b0477" + integrity sha512-X5Pr1jC8/kO6d1EBDJ6yhtuc5euHX89UDNv8qdPJHAET03xfFnlojRPwOw6il2udAH20WLBv+F5M9VY+58zspQ== metro-inspector-proxy@0.64.0: version "0.64.0" @@ -8088,14 +9442,14 @@ metro-inspector-proxy@0.64.0: ws "^1.1.5" yargs "^15.3.1" -metro-inspector-proxy@0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.66.2.tgz#a83c76bd2f2fd7b9240be92acf9a8b1d1404547a" - integrity sha512-gnLc9121eznwP0iiA9tCBW8qZjwIsCgwHWMF1g1Qaki9le9tzeJv3dK4/lFNGxyfSaLO7vahQEhsEYsiRnTROg== +metro-inspector-proxy@0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.67.0.tgz#22b360a837b07e9e2bc87a71af6154dd8fcc02a5" + integrity sha512-5Ubjk94qpNaU3OT2IZa4/dec09bauic1hzWms4czorBzDenkp4kYXG9/aWTmgQLtCk92H3Q8jKl1PQRxUSkrOQ== dependencies: connect "^3.6.5" debug "^2.2.0" - ws "^1.1.5" + ws "^7.5.1" yargs "^15.3.1" metro-minify-uglify@0.64.0: @@ -8105,10 +9459,10 @@ metro-minify-uglify@0.64.0: dependencies: uglify-es "^3.1.9" -metro-minify-uglify@0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.66.2.tgz#6061dbee4f61e6d5bb3c100e4379ff6f2e16e42b" - integrity sha512-7TUK+L5CmB5x1PVnFbgmjzHW4CUadq9H5jgp0HfFoWT1skXAyEsx0DHkKDXwnot0khnNhBOEfl62ctQOnE110Q== +metro-minify-uglify@0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.67.0.tgz#28a77dbd78d9e558dba8c2f31c2b9c6f939df966" + integrity sha512-4CmM5b3MTAmQ/yFEfsHOhD2SuBObB2YF6PKzXZc4agUsQVVtkrrNElaiWa8w26vrTzA9emwcyurxMf4Nl3lYPQ== dependencies: uglify-es "^3.1.9" @@ -8157,10 +9511,10 @@ metro-react-native-babel-preset@0.64.0: "@babel/template" "^7.0.0" react-refresh "^0.4.0" -metro-react-native-babel-preset@0.66.2, metro-react-native-babel-preset@^0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.66.2.tgz#fddebcf413ad4ea617d4f47f7c1da401052de734" - integrity sha512-H/nLBAz0MgfDloSe1FjyH4EnbokHFdncyERvLPXDACY3ROVRCeUyFNo70ywRGXW2NMbrV4H7KUyU4zkfWhC2HQ== +metro-react-native-babel-preset@0.67.0, metro-react-native-babel-preset@^0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.67.0.tgz#53aec093f53a09b56236a9bb534d76658efcbec7" + integrity sha512-tgTG4j0SKwLHbLRELMmgkgkjV1biYkWlGGKOmM484/fJC6bpDikdaFhfjsyE+W+qt7I5szbCPCickMTNQ+zwig== dependencies: "@babel/core" "^7.14.0" "@babel/plugin-proposal-class-properties" "^7.0.0" @@ -8247,17 +9601,17 @@ metro-react-native-babel-preset@~0.59.0: "@babel/template" "^7.0.0" react-refresh "^0.4.0" -metro-react-native-babel-transformer@0.66.2, metro-react-native-babel-transformer@^0.66.1: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.66.2.tgz#768f341e7c3d3d1c38189799c9884b90d1c32eb7" - integrity sha512-z1ab7ihIT0pJrwgi9q2IH+LcW/xUWMQ0hH+Mrk7wbKQB0RnJdXFoxphrfoVHBHMUu+TBPetUcEkKawkK1e7Cng== +metro-react-native-babel-transformer@0.67.0, metro-react-native-babel-transformer@^0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.67.0.tgz#756d32eb3c05cab3d72fcb1700f8fd09322bb07f" + integrity sha512-P0JT09n7T01epUtgL9mH6BPat3xn4JjBakl4lWHdL61cvEGcrxuIom1eoFFKkgU/K5AVLU4aCAttHS7nSFCcEQ== dependencies: "@babel/core" "^7.14.0" babel-preset-fbjs "^3.4.0" - hermes-parser "0.4.7" - metro-babel-transformer "0.66.2" - metro-react-native-babel-preset "0.66.2" - metro-source-map "0.66.2" + hermes-parser "0.5.0" + metro-babel-transformer "0.67.0" + metro-react-native-babel-preset "0.67.0" + metro-source-map "0.67.0" nullthrows "^1.1.1" metro-resolver@0.64.0: @@ -8267,10 +9621,10 @@ metro-resolver@0.64.0: dependencies: absolute-path "^0.0.0" -metro-resolver@0.66.2, metro-resolver@^0.66.1: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.66.2.tgz#f743ddbe7a12dd137d1f7a555732cafcaea421f8" - integrity sha512-pXQAJR/xauRf4kWFj2/hN5a77B4jLl0Fom5I3PHp6Arw/KxSBp0cnguXpGLwNQ6zQC0nxKCoYGL9gQpzMnN7Hw== +metro-resolver@0.67.0, metro-resolver@^0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.67.0.tgz#8143c716f77e468d1d42eca805243706eb349959" + integrity sha512-d2KS/zAyOA/z/q4/ff41rAp+1txF4H6qItwpsls/RHStV2j6PqgRHUzq/3ga+VIeoUJntYJ8nGW3+3qSrhFlig== dependencies: absolute-path "^0.0.0" @@ -8279,10 +9633,10 @@ metro-runtime@0.64.0: resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.64.0.tgz#cdaa1121d91041bf6345f2a69eb7c2fb289eff7b" integrity sha512-m7XbWOaIOeFX7YcxUhmnOi6Pg8EaeL89xyZ+quZyZVF1aNoTr4w8FfbKxvijpjsytKHIZtd+43m2Wt5JrqyQmQ== -metro-runtime@0.66.2, metro-runtime@^0.66.1: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.66.2.tgz#3409ee957b949b6c7b72ef6ed2b9af9a4f4a910e" - integrity sha512-vFhKBk2ot9FS4b+2v0OTa/guCF/QDAOJubY0CNg7PzCS5+w4y3IvZIcPX4SSS1t8pYEZBLvtdtTDarlDl81xmg== +metro-runtime@0.67.0, metro-runtime@^0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.67.0.tgz#a8888dfd06bcebbac3c99dcac7cd622510dd8ee0" + integrity sha512-IFtSL0JUt1xK3t9IoLflTDft82bjieSzdIJWLzrRzBMlesz8ox5bVmnpQbVQEwfYUpEOxbM3VOZauVbdCmXA7g== metro-source-map@0.64.0: version "0.64.0" @@ -8298,17 +9652,17 @@ metro-source-map@0.64.0: source-map "^0.5.6" vlq "^1.0.0" -metro-source-map@0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.66.2.tgz#b5304a282a5d55fa67b599265e9cf3217175cdd7" - integrity sha512-038tFmB7vSh73VQcDWIbr5O1m+WXWyYafDaOy+1A/2K308YP0oj33gbEgDnZsLZDwcJ+xt1x6KUEBIzlX4YGeQ== +metro-source-map@0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.67.0.tgz#e28db7253b9ca688e60d5710ebdccba60b45b2df" + integrity sha512-yxypInsRo3SfS00IgTuL6a2W2tfwLY//vA2E+GeqGBF5zTbJZAhwNGIEl8S87XXZhwzJcxf5/8LjJC1YDzabww== dependencies: "@babel/traverse" "^7.14.0" "@babel/types" "^7.0.0" invariant "^2.2.4" - metro-symbolicate "0.66.2" + metro-symbolicate "0.67.0" nullthrows "^1.1.1" - ob1 "0.66.2" + ob1 "0.67.0" source-map "^0.5.6" vlq "^1.0.0" @@ -8324,13 +9678,13 @@ metro-symbolicate@0.64.0: through2 "^2.0.1" vlq "^1.0.0" -metro-symbolicate@0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.66.2.tgz#addd095ce5f77e73ca21ddb5dfb396ff5d4fa041" - integrity sha512-u+DeQHyAFXVD7mVP+GST/894WHJ3i/U8oEJFnT7U3P52ZuLgX8n4tMNxhqZU12RcLR6etF8143aP0Ktx1gFLEQ== +metro-symbolicate@0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.67.0.tgz#16729d05663d28176895244b3d932a898fca2b45" + integrity sha512-ZqVVcfa0xSz40eFzA5P8pCF3V6Tna9RU1prFzAJTa3j9dCGqwh0HTXC8AIkMtgX7hNdZrCJI1YipzUBlwkT0/A== dependencies: invariant "^2.2.4" - metro-source-map "0.66.2" + metro-source-map "0.67.0" nullthrows "^1.1.1" source-map "^0.5.6" through2 "^2.0.1" @@ -8347,10 +9701,10 @@ metro-transform-plugins@0.64.0: "@babel/traverse" "^7.0.0" nullthrows "^1.1.1" -metro-transform-plugins@0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.66.2.tgz#39dd044a23b1343e4f2d2ec34d08128cdf255ed4" - integrity sha512-KTvqplh0ut7oDKovvDG6yzXM02R6X+9b2oVG+qYq8Zd3aCGTi51ASx4ThCNkAHyEvCuJdYg9fxXTL+j+wvhB5w== +metro-transform-plugins@0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.67.0.tgz#6122aa4e5e5f9a767cebcc5af6fd1695666683ce" + integrity sha512-DQFoSDIJdTMPDTUlKaCNJjEXiHGwFNneAF9wDSJ3luO5gigM7t7MuSaPzF4hpjmfmcfPnRhP6AEn9jcza2Sh8Q== dependencies: "@babel/core" "^7.14.0" "@babel/generator" "^7.14.0" @@ -8377,23 +9731,23 @@ metro-transform-worker@0.64.0: metro-transform-plugins "0.64.0" nullthrows "^1.1.1" -metro-transform-worker@0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.66.2.tgz#0a8455992132c479721accd52c9bd47deb77769e" - integrity sha512-dO4PtYOMGB7Vzte8aIzX39xytODhmbJrBYPu+zYzlDjyefJZT7BkZ0LkPIThtyJi96xWcGqi9JBSo0CeRupAHw== +metro-transform-worker@0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.67.0.tgz#5689553c25b0657aadefdf4ea2cd8dd06e18882a" + integrity sha512-29n+JdTb80ROiv/wDiBVlY/xRAF/nrjhp/Udv/XJl1DZb+x7JEiPxpbpthPhwwl+AYxVrostGB0W06WJ61hfiw== dependencies: "@babel/core" "^7.14.0" "@babel/generator" "^7.14.0" "@babel/parser" "^7.14.0" "@babel/types" "^7.0.0" babel-preset-fbjs "^3.4.0" - metro "0.66.2" - metro-babel-transformer "0.66.2" - metro-cache "0.66.2" - metro-cache-key "0.66.2" - metro-hermes-compiler "0.66.2" - metro-source-map "0.66.2" - metro-transform-plugins "0.66.2" + metro "0.67.0" + metro-babel-transformer "0.67.0" + metro-cache "0.67.0" + metro-cache-key "0.67.0" + metro-hermes-compiler "0.67.0" + metro-source-map "0.67.0" + metro-transform-plugins "0.67.0" nullthrows "^1.1.1" metro@0.64.0: @@ -8453,10 +9807,10 @@ metro@0.64.0: ws "^1.1.5" yargs "^15.3.1" -metro@0.66.2, metro@^0.66.1: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro/-/metro-0.66.2.tgz#f21759bf00995470e7577b5b88a5277963f24492" - integrity sha512-uNsISfcQ3iKKSHoN5Q+LAh0l3jeeg7ZcNZ/4BAHGsk02erA0OP+l2m+b5qYVoPptHz9Oc3KyG5oGJoTu41pWjg== +metro@0.67.0, metro@^0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro/-/metro-0.67.0.tgz#8007a041d22de1cdb05184431c67eb7989eef6e0" + integrity sha512-DwuBGAFcAivoac/swz8Lp7Y5Bcge1tzT7T6K0nf1ubqJP8YzBUtyR4pkjEYVUzVu/NZf7O54kHSPVu1ibYzOBQ== dependencies: "@babel/code-frame" "^7.0.0" "@babel/core" "^7.14.0" @@ -8476,28 +9830,27 @@ metro@0.66.2, metro@^0.66.1: error-stack-parser "^2.0.6" fs-extra "^1.0.0" graceful-fs "^4.1.3" - hermes-parser "0.4.7" + hermes-parser "0.5.0" image-size "^0.6.0" invariant "^2.2.4" - jest-haste-map "^26.5.2" + jest-haste-map "^27.3.1" jest-worker "^26.0.0" lodash.throttle "^4.1.1" - metro-babel-register "0.66.2" - metro-babel-transformer "0.66.2" - metro-cache "0.66.2" - metro-cache-key "0.66.2" - metro-config "0.66.2" - metro-core "0.66.2" - metro-hermes-compiler "0.66.2" - metro-inspector-proxy "0.66.2" - metro-minify-uglify "0.66.2" - metro-react-native-babel-preset "0.66.2" - metro-resolver "0.66.2" - metro-runtime "0.66.2" - metro-source-map "0.66.2" - metro-symbolicate "0.66.2" - metro-transform-plugins "0.66.2" - metro-transform-worker "0.66.2" + metro-babel-transformer "0.67.0" + metro-cache "0.67.0" + metro-cache-key "0.67.0" + metro-config "0.67.0" + metro-core "0.67.0" + metro-hermes-compiler "0.67.0" + metro-inspector-proxy "0.67.0" + metro-minify-uglify "0.67.0" + metro-react-native-babel-preset "0.67.0" + metro-resolver "0.67.0" + metro-runtime "0.67.0" + metro-source-map "0.67.0" + metro-symbolicate "0.67.0" + metro-transform-plugins "0.67.0" + metro-transform-worker "0.67.0" mime-types "^2.1.27" mkdirp "^0.5.1" node-fetch "^2.2.0" @@ -8508,7 +9861,7 @@ metro@0.66.2, metro@^0.66.1: strip-ansi "^6.0.0" temp "0.8.3" throat "^5.0.0" - ws "^1.1.5" + ws "^7.5.1" yargs "^15.3.1" microevent.ts@~0.1.1: @@ -8543,6 +9896,14 @@ micromatch@^4.0.2: braces "^3.0.1" picomatch "^2.0.5" +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -8633,6 +9994,13 @@ minimatch@^3.0.2: dependencies: brace-expansion "^1.1.7" +minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" @@ -8710,11 +10078,6 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mockdate@^3.0.2: - version "3.0.5" - resolved "https://registry.yarnpkg.com/mockdate/-/mockdate-3.0.5.tgz#789be686deb3149e7df2b663d2bc4392bc3284fb" - integrity sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ== - move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -8747,10 +10110,10 @@ nan@^2.12.1: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== -nanoid@^3.1.15: - version "3.1.20" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" - integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== +nanoid@^3.1.23: + version "3.3.1" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" + integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== nanomatch@^1.2.9: version "1.2.13" @@ -8896,6 +10259,11 @@ node-releases@^2.0.1: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== +node-releases@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" + integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== + node-stream-zip@^1.9.1: version "1.12.0" resolved "https://registry.yarnpkg.com/node-stream-zip/-/node-stream-zip-1.12.0.tgz#f69af78799531b928662f4900d345387fa0b3777" @@ -8974,10 +10342,10 @@ ob1@0.64.0: resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.64.0.tgz#f254a55a53ca395c4f9090e28a85483eac5eba19" integrity sha512-CO1N+5dhvy+MoAwxz8+fymEUcwsT4a+wHhrHFb02LppcJdHxgcBWviwEhUwKOD2kLMQ7ijrrzybOqpGcqEtvpQ== -ob1@0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.66.2.tgz#8caf548202cf2688944bae47db405a08bca17a61" - integrity sha512-RFewnL/RjE0qQBOuM+2bbY96zmJPIge/aDtsiDbLSb+MOiK8CReAhBHDgL+zrA3F1hQk00lMWpUwYcep750plA== +ob1@0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.67.0.tgz#91f104c90641b1af8c364fc82a4b2c7d0801072d" + integrity sha512-YvZtX8HKYackQ5PwdFIuuNFVsMChRPHvnARRRT0Vk59xsBvL5t9U1Ock3M1sYrKj+Gp73+0q9xcHLAxI+xLi5g== object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" @@ -8993,6 +10361,11 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" +object-inspect@^1.12.0, object-inspect@^1.9.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" + integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== + object-inspect@^1.8.0: version "1.9.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" @@ -9010,7 +10383,7 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.1.0, object.assign@^4.1.1: +object.assign@^4.1.0, object.assign@^4.1.1, object.assign@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== @@ -9030,6 +10403,24 @@ object.entries@^1.1.0: es-abstract "^1.18.0-next.1" has "^1.0.3" +object.entries@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" + integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.fromentries@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251" + integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz#0dfda8d108074d9c563e80490c883b6661091544" @@ -9039,6 +10430,14 @@ object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0 define-properties "^1.1.3" es-abstract "^1.18.0-next.1" +object.hasown@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.0.tgz#7232ed266f34d197d15cac5880232f7a4790afe5" + integrity sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.19.1" + object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" @@ -9056,6 +10455,15 @@ object.values@^1.1.0: es-abstract "^1.18.0-next.1" has "^1.0.3" +object.values@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" + integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + omggif@^1.0.9: version "1.0.10" resolved "https://registry.yarnpkg.com/omggif/-/omggif-1.0.10.tgz#ddaaf90d4a42f532e9e7cb3a95ecdd47f17c7b19" @@ -9158,6 +10566,21 @@ ora@^3.4.0: strip-ansi "^5.2.0" wcwidth "^1.0.1" +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" @@ -9415,7 +10838,7 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6: +path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== @@ -9456,6 +10879,11 @@ picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== +picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -9485,6 +10913,11 @@ pirates@^4.0.0, pirates@^4.0.1: dependencies: node-modules-regexp "^1.0.0" +pirates@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + pixelmatch@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854" @@ -9520,7 +10953,7 @@ pkg-up@^2.0.0: dependencies: find-up "^2.1.0" -plist@^3.0.2, plist@^3.0.4: +plist@^3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.4.tgz#a62df837e3aed2bb3b735899d510c4f186019cbe" integrity sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg== @@ -9528,6 +10961,14 @@ plist@^3.0.2, plist@^3.0.4: base64-js "^1.5.1" xmlbuilder "^9.0.7" +plist@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.5.tgz#2cbeb52d10e3cdccccf0c11a63a85d830970a987" + integrity sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA== + dependencies: + base64-js "^1.5.1" + xmlbuilder "^9.0.7" + pn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" @@ -9890,10 +11331,17 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prettier@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" - integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^2.0.2, prettier@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.1.tgz#d472797e0d7461605c1609808e27b80c0f9cfe17" + integrity sha512-8UVbTBYGwN37Bs9LERmxCPjdvPxlEowx2urIL6urHzdb3SDq4B/Z6xLFCblrSnE4iKWcS6ziJ3aOYrc1kz/E2A== pretty-bytes@^4.0.2: version "4.0.2" @@ -9943,7 +11391,7 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= -progress@^2.0.0, progress@^2.0.3: +progress@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== @@ -9983,7 +11431,7 @@ prompts@^2.4.0: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.7.2: +prop-types@*, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -10069,12 +11517,13 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -query-string@^6.13.6: - version "6.13.7" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.13.7.tgz#af53802ff6ed56f3345f92d40a056f93681026ee" - integrity sha512-CsGs8ZYb39zu0WLkeOhe0NMePqgYdAuCqxOYKDR5LVCytDZYMGx3Bb+xypvQvPHVPijRXB0HZNFllCzHRe4gEA== +query-string@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.1.1.tgz#754620669db978625a90f635f12617c271a088e1" + integrity sha512-MplouLRDHBZSG9z7fpuAAcI7aAYjDLhtsiVZsevsfaHWDS2IDdORKbSd1kWUA+V4zyva/HZoSfpwnYMMQDhb0w== dependencies: decode-uri-component "^0.2.0" + filter-obj "^1.1.0" split-on-first "^1.0.0" strict-uri-encode "^2.0.0" @@ -10153,10 +11602,10 @@ react-dev-utils@~11.0.1: strip-ansi "6.0.0" text-table "0.2.0" -react-devtools-core@4.19.1: - version "4.19.1" - resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.19.1.tgz#bc37c2ef2f48f28c6af4c7292be9dca1b63deace" - integrity sha512-2wJiGffPWK0KggBjVwnTaAk+Z3MSxKInHmdzPTrBh1mAarexsa93Kw+WMX88+XjN+TtYgAiLe9xeTqcO5FfJTw== +react-devtools-core@^4.23.0: + version "4.24.3" + resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.24.3.tgz#371fef3f5c639db0dc59eeef334dd5e10ac61661" + integrity sha512-+htKZxLxDN14jhRG3+IXRiJqNSGHUiPYrMtv9e7qlZxcbKeJjVs+C/hd8kZF5rydp3faBwFN6ZpTaZnLA3/ZGA== dependencies: shell-quote "^1.6.1" ws "^7" @@ -10186,31 +11635,44 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== -react-native-codegen@^0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/react-native-codegen/-/react-native-codegen-0.0.8.tgz#b7796a54074139d956fff2862cf1285db43c891b" - integrity sha512-k/944+0XD+8l7zDaiKfYabyEKmAmyZgS1mj+4LcSRPyHnrjgCHKrh/Y6jM6kucQ6xU1+1uyMmF/dSkikxK8i+Q== +react-native-codegen@*: + version "0.0.14" + resolved "https://registry.yarnpkg.com/react-native-codegen/-/react-native-codegen-0.0.14.tgz#1c8a9d39935e611a22765aefb06c2d81b2341672" + integrity sha512-i3TtOB7IWIhaKZCg7EMBcXmNtaxEMFyzGQ4Zf6ZR1esj6gs36OWpYj357nSqeqzPKUqb8P1pUvmhoLIK4uVNeQ== + dependencies: + "@babel/parser" "^7.14.0" + flow-parser "^0.121.0" + jscodeshift "^0.13.1" + nullthrows "^1.1.1" + +react-native-codegen@^0.0.13: + version "0.0.13" + resolved "https://registry.yarnpkg.com/react-native-codegen/-/react-native-codegen-0.0.13.tgz#4cc94546fc75a5dbe9350d59c10108f2efe6bc17" + integrity sha512-rCh1P+s0Q4N6vNgS97ckafbhJRztz22+0l0VZoyQC06F07J98kI5cUByH0ATypPRIdpkMbAZc59DoPdDFc01bg== dependencies: + "@babel/parser" "^7.14.0" flow-parser "^0.121.0" - jscodeshift "^0.11.0" + jscodeshift "^0.13.1" nullthrows "^1.1.1" -react-native-iphone-x-helper@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz#20c603e9a0e765fd6f97396638bdeb0e5a60b010" - integrity sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg== +react-native-gradle-plugin@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/react-native-gradle-plugin/-/react-native-gradle-plugin-0.0.5.tgz#1f20d437b140eda65b6e3bdf6eb102bbab1a5a10" + integrity sha512-kGupXo+pD2mB6Z+Oyowor3qlCroiS32FNGoiGQdwU19u8o+NNhEZKwoKfC5Qt03bMZSmFlcAlTyf79vrS2BZKQ== + dependencies: + react-native-codegen "*" -react-native-reanimated@2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-2.3.1.tgz#c7abad48f9e6c84610b0d5e270088ecd61750382" - integrity sha512-nzjVqwkB8eeyPKT2KoiA9EEz17ZMFSGMoOTC17Z9b5nE2Z4ZHjHM5EKhY0TlwzXFUuJAE9PhOfxF0wIO/maZSA== +react-native-reanimated@2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-2.6.0.tgz#500497339bec2d18fd4979dc07c831997c9aee82" + integrity sha512-TG7u0d1iTx6BRQXhUp9DKEW/9K6169qiX9vweC+qOcVffGSZvjDZ+OyyI0faXIDvcf5LRHAud3mNtO3ANaHRhQ== dependencies: - "@babel/plugin-transform-object-assign" "^7.10.4" + "@babel/plugin-transform-object-assign" "^7.16.7" "@types/invariant" "^2.2.35" invariant "^2.2.4" lodash.isequal "^4.5.0" - mockdate "^3.0.2" - react-native-screens "^3.4.0" + react-native-screens "^3.11.1" + setimmediate "^1.0.5" string-hash-64 "^1.0.3" react-native-safe-area-context@3.1.9, react-native-safe-area-context@^3.1.9: @@ -10218,48 +11680,45 @@ react-native-safe-area-context@3.1.9, react-native-safe-area-context@^3.1.9: resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-3.1.9.tgz#48864ea976b0fa57142a2cc523e1fd3314e7247e" integrity sha512-wmcGbdyE/vBSL5IjDPReoJUEqxkZsywZw5gPwsVUV1NBpw5eTIdnL6Y0uNKHE25Z661moxPHQz6kwAkYQyorxA== -react-native-screens@^2.15.0: - version "2.15.0" - resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-2.15.0.tgz#9b97c1881c4fcdf304bf363f0013225901625f44" - integrity sha512-qTSQPy0WKHtlb8xt5gY0Gt6sdvfQUQAnFSqgsggW9UEvySbkHzpqOrOYNA79Ca8oXO0dCFwp6X8buIiDefa7+Q== - -react-native-screens@^3.4.0: - version "3.10.2" - resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-3.10.2.tgz#cbf505d61c09e29ad5b335309951a3bd81f0df19" - integrity sha512-bMKSpwMeqAoXBqTJiDEG1ogM1cMk66sEmpp/4dGqdX59v+OwMqPeTuBk37qaSuS7gPOFFKsNW2X3ymGvBT4iEw== +react-native-screens@3.13.1, react-native-screens@^3.11.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-3.13.1.tgz#b3b1c5788dca25a71668909f66d87fb35c5c5241" + integrity sha512-xcrnuUs0qUrGpc2gOTDY4VgHHADQwp80mwR1prU/Q0JqbZN5W3koLhuOsT6FkSRKjR5t40l+4LcjhHdpqRB2HA== dependencies: react-freeze "^1.0.0" warn-once "^0.1.0" -react-native@0.67.2: - version "0.67.2" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.67.2.tgz#312224bc2271c3cecd374d4bc425619cff4ea5dc" - integrity sha512-grEtpOLLvtSg8Bivg0ffVRCjTkresqMt7Jdog/geF6VAYhb4RnLaaUCWvyrfyB9buf135FKnqg5BIuve/XQNXA== +react-native@0.68.0: + version "0.68.0" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.68.0.tgz#00204818c7fa5a9802ee73f3905a6d9b1c945a31" + integrity sha512-Qi8KpG9rqiU0hVp05GKkuRe8iAVhblYMwpnwG3wkBi99Z/X8iZ0jD1b1UW0/y6oesmCyGQAxpsB36imU8zg1AQ== dependencies: "@jest/create-cache-key-function" "^27.0.1" - "@react-native-community/cli" "^6.0.0" - "@react-native-community/cli-platform-android" "^6.0.0" - "@react-native-community/cli-platform-ios" "^6.0.0" + "@react-native-community/cli" "^7.0.3" + "@react-native-community/cli-platform-android" "^7.0.1" + "@react-native-community/cli-platform-ios" "^7.0.1" "@react-native/assets" "1.0.0" "@react-native/normalize-color" "2.0.0" "@react-native/polyfills" "2.0.0" abort-controller "^3.0.0" anser "^1.4.9" base64-js "^1.1.2" + deprecated-react-native-prop-types "^2.3.0" event-target-shim "^5.0.1" - hermes-engine "~0.9.0" + hermes-engine "~0.11.0" invariant "^2.2.4" jsc-android "^250230.2.1" - metro-react-native-babel-transformer "0.66.2" - metro-runtime "0.66.2" - metro-source-map "0.66.2" + metro-react-native-babel-transformer "0.67.0" + metro-runtime "0.67.0" + metro-source-map "0.67.0" nullthrows "^1.1.1" pretty-format "^26.5.2" promise "^8.0.3" - prop-types "^15.7.2" - react-devtools-core "4.19.1" - react-native-codegen "^0.0.8" + react-devtools-core "^4.23.0" + react-native-codegen "^0.0.13" + react-native-gradle-plugin "^0.0.5" react-refresh "^0.4.0" + react-shallow-renderer "16.14.1" regenerator-runtime "^0.13.2" scheduler "^0.20.2" stacktrace-parser "^0.1.3" @@ -10277,7 +11736,7 @@ react-refresh@^0.8.2: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f" integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg== -react-shallow-renderer@^16.13.1: +react-shallow-renderer@16.14.1, react-shallow-renderer@^16.13.1: version "16.14.1" resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.14.1.tgz#bf0d02df8a519a558fd9b8215442efa5c840e124" integrity sha512-rkIMcQi01/+kxiTE9D3fdS959U1g7gs+/rborw++42m1O9FAQiNI/UNRZExVUoAOprn4umcXf+pFRou8i4zuBg== @@ -10335,7 +11794,7 @@ read-pkg@^5.2.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.1.1, readable-stream@^3.6.0: +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -10370,7 +11829,7 @@ realpath-native@^2.0.0: resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866" integrity sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q== -recast@^0.20.3: +recast@^0.20.4: version "0.20.5" resolved "https://registry.yarnpkg.com/recast/-/recast-0.20.5.tgz#8e2c6c96827a1b339c634dd232957d230553ceae" integrity sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ== @@ -10387,6 +11846,13 @@ recursive-readdir@2.2.2: dependencies: minimatch "3.0.4" +regenerate-unicode-properties@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" + integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" @@ -10394,7 +11860,7 @@ regenerate-unicode-properties@^8.2.0: dependencies: regenerate "^1.4.0" -regenerate@^1.4.0: +regenerate@^1.4.0, regenerate@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== @@ -10424,10 +11890,18 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexpp@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" - integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== +regexp.prototype.flags@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz#b3f4c0059af9e47eca9f3f660e51d81307e72307" + integrity sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== regexpu-core@^4.7.1: version "4.7.1" @@ -10441,6 +11915,18 @@ regexpu-core@^4.7.1: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.2.0" +regexpu-core@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.0.1.tgz#c531122a7840de743dcf9c83e923b5560323ced3" + integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.0.1" + regjsgen "^0.6.0" + regjsparser "^0.8.2" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + registry-auth-token@3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" @@ -10461,6 +11947,11 @@ regjsgen@^0.5.1: resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== +regjsgen@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" + integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== + regjsparser@^0.6.4: version "0.6.4" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" @@ -10468,6 +11959,13 @@ regjsparser@^0.6.4: dependencies: jsesc "~0.5.0" +regjsparser@^0.8.2: + version "0.8.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" + integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== + dependencies: + jsesc "~0.5.0" + relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" @@ -10611,6 +12109,23 @@ resolve@^1.10.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.3.2, resolve@^1.4. is-core-module "^2.1.0" path-parse "^1.0.6" +resolve@^1.12.0, resolve@^1.14.2: + version "1.22.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== + dependencies: + is-core-module "^2.8.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@^2.0.0-next.3: + version "2.0.0-next.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" + integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -10619,6 +12134,14 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -10797,18 +12320,25 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@^6.0.0, semver@^6.3.0: +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.1.3, semver@^7.2.1, semver@^7.3.2: +semver@^7.1.3, semver@^7.3.2: version "7.3.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== dependencies: lru-cache "^6.0.0" +semver@^7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -10883,6 +12413,13 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -10922,24 +12459,38 @@ shell-quote@1.7.2, shell-quote@^1.6.1: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== +shell-quote@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" + integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== + shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== -simple-plist@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.3.0.tgz#f451997663eafd8ea6bad353a01caf49ef186d43" - integrity sha512-uYWpeGFtZtVt2NhG4AHgpwx323zxD85x42heMJBan1qAiqqozIlaGrwrEt6kRjXWRWIXsuV1VLCvVmZan2B5dg== +simple-plist@^1.1.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.3.1.tgz#16e1d8f62c6c9b691b8383127663d834112fb017" + integrity sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw== dependencies: bplist-creator "0.1.0" - bplist-parser "0.3.0" - plist "^3.0.4" + bplist-parser "0.3.1" + plist "^3.0.5" simple-swizzle@^0.2.2: version "0.2.2" @@ -10967,15 +12518,6 @@ slice-ansi@^2.0.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - slugify@^1.3.4: version "1.4.6" resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.4.6.tgz#ef288d920a47fb01c2be56b3487b6722f5e34ace" @@ -11240,6 +12782,20 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +string.prototype.matchall@^4.0.6: + version "4.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" + integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + get-intrinsic "^1.1.1" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.4.1" + side-channel "^1.0.4" + string.prototype.trimend@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" @@ -11248,6 +12804,14 @@ string.prototype.trimend@^1.0.1: call-bind "^1.0.0" define-properties "^1.1.3" +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + string.prototype.trimstart@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" @@ -11256,6 +12820,14 @@ string.prototype.trimstart@^1.0.1: call-bind "^1.0.0" define-properties "^1.1.3" +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -11300,6 +12872,13 @@ strip-ansi@^5.0.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-bom@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" @@ -11376,6 +12955,13 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + supports-hyperlinks@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" @@ -11384,6 +12970,11 @@ supports-hyperlinks@^2.0.0: has-flag "^4.0.0" supports-color "^7.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + svgo@^1.0.0: version "1.3.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" @@ -11408,16 +12999,6 @@ symbol-tree@^3.2.2: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/table/-/table-6.0.4.tgz#c523dd182177e926c723eb20e1b341238188aa0d" - integrity sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw== - dependencies: - ajv "^6.12.4" - lodash "^4.17.20" - slice-ansi "^4.0.0" - string-width "^4.2.0" - tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" @@ -11448,7 +13029,7 @@ temp@0.8.3: os-tmpdir "^1.0.0" rimraf "~2.2.6" -temp@^0.8.1: +temp@^0.8.4: version "0.8.4" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.4.tgz#8c97a33a4770072e0a05f919396c7665a7dd59f2" integrity sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg== @@ -11675,6 +13256,13 @@ tsutils@^3.17.1: dependencies: tslib "^1.8.1" +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" @@ -11716,6 +13304,11 @@ type-fest@^0.11.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + type-fest@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" @@ -11771,11 +13364,26 @@ ultron@1.0.x: resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" integrity sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po= +unbox-primitive@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + unicode-match-property-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" @@ -11784,16 +13392,34 @@ unicode-match-property-ecmascript@^1.0.4: unicode-canonical-property-names-ecmascript "^1.0.4" unicode-property-aliases-ecmascript "^1.0.4" +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" + integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== + unicode-property-aliases-ecmascript@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== +unicode-property-aliases-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" + integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + unimodules-app-loader@~1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/unimodules-app-loader/-/unimodules-app-loader-1.4.0.tgz#8ab738a379b46798aec9e4fda317f17750cd2f92" @@ -12044,6 +13670,11 @@ uuid@^3.3.2, uuid@^3.4.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +uuid@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" + integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== + v8-compile-cache@^2.0.3: version "2.2.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" @@ -12247,6 +13878,17 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -12453,7 +14095,7 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@^1.1.0, ws@^1.1.5: +ws@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" integrity sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w== @@ -12473,13 +14115,18 @@ ws@^7, ws@^7.0.0: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.1.tgz#a333be02696bd0e54cea0434e21dcc8a9ac294bb" integrity sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ== -xcode@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/xcode/-/xcode-2.1.0.tgz#bab64a7e954bb50ca8d19da7e09531c65a43ecfe" - integrity sha512-uCrmPITrqTEzhn0TtT57fJaNaw8YJs1aCzs+P/QqxsDbvPZSv7XMPPwXrKvHtD6pLjBM/NaVwraWJm8q83Y4iQ== +ws@^7.5.1: + version "7.5.7" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" + integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== + +xcode@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/xcode/-/xcode-3.0.1.tgz#3efb62aac641ab2c702458f9a0302696146aa53c" + integrity sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA== dependencies: - simple-plist "^1.0.0" - uuid "^3.3.2" + simple-plist "^1.1.0" + uuid "^7.0.3" xhr@^2.0.1: version "2.6.0" diff --git a/ios/Handlers/RNFlingHandler.m b/ios/Handlers/RNFlingHandler.m index 115350cd00..d01f8d7b97 100644 --- a/ios/Handlers/RNFlingHandler.m +++ b/ios/Handlers/RNFlingHandler.m @@ -8,38 +8,54 @@ - (id)initWithGestureHandler:(RNGestureHandler*)gestureHandler; @implementation RNBetterSwipeGestureRecognizer { __weak RNGestureHandler* _gestureHandler; + CGPoint _lastPoint; // location of the most recently updated touch, relative to the view + bool _hasBegan; // whether the `BEGAN` event has been sent } - (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler { if ((self = [super initWithTarget:gestureHandler action:@selector(handleGesture:)])) { _gestureHandler = gestureHandler; + _lastPoint = CGPointZero; + _hasBegan = NO; } return self; } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { + _lastPoint = [[[touches allObjects] objectAtIndex:0] locationInView:_gestureHandler.recognizer.view]; [_gestureHandler reset]; - [self triggerAction]; [super touchesBegan:touches withEvent:event]; + + // self.numberOfTouches doesn't work for this because in case than one finger is required, + // when holding one finger on the screen and tapping with the second one, numberOfTouches is equal + // to 2 only for the first tap but 1 for all the following ones + if (!_hasBegan) { + [self triggerAction]; + _hasBegan = YES; + } + [_gestureHandler.pointerTracker touchesBegan:touches withEvent:event]; } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { + _lastPoint = [[[touches allObjects] objectAtIndex:0] locationInView:_gestureHandler.recognizer.view]; [super touchesMoved:touches withEvent:event]; [_gestureHandler.pointerTracker touchesMoved:touches withEvent:event]; } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { + _lastPoint = [[[touches allObjects] objectAtIndex:0] locationInView:_gestureHandler.recognizer.view]; [super touchesEnded:touches withEvent:event]; [_gestureHandler.pointerTracker touchesEnded:touches withEvent:event]; } - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { + _lastPoint = [[[touches allObjects] objectAtIndex:0] locationInView:_gestureHandler.recognizer.view]; [super touchesCancelled:touches withEvent:event]; [_gestureHandler.pointerTracker touchesCancelled:touches withEvent:event]; } @@ -53,9 +69,17 @@ - (void)reset { [self triggerAction]; [_gestureHandler.pointerTracker reset]; + _hasBegan = NO; [super reset]; } +- (CGPoint)getLastLocation { + // I think keeping the location of only one touch is enough since it would be used to determine the direction + // of the movement, and if it's wrong the recognizer fails anyway. + // In case the location of all touches is required, touch events are the way to go + return _lastPoint; +} + @end @implementation RNFlingGestureHandler @@ -104,5 +128,23 @@ - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer return shouldBegin; } +- (RNGestureHandlerEventExtraData *)eventExtraData:(id)_recognizer +{ + // For some weird reason [recognizer locationInView:recognizer.view.window] returns (0, 0). + // To calculate the correct absolute position, first calculate the absolute position of the + // view inside the root view controller (https://stackoverflow.com/a/7448573) and then + // add the relative touch position to it. + + RNBetterSwipeGestureRecognizer *recognizer = (RNBetterSwipeGestureRecognizer *)_recognizer; + + CGPoint viewAbsolutePosition = [recognizer.view convertPoint:recognizer.view.bounds.origin toView:[UIApplication sharedApplication].keyWindow.rootViewController.view]; + CGPoint locationInView = [recognizer getLastLocation]; + + return [RNGestureHandlerEventExtraData + forPosition:locationInView + withAbsolutePosition:CGPointMake(viewAbsolutePosition.x + locationInView.x, viewAbsolutePosition.y + locationInView.y) + withNumberOfTouches:recognizer.numberOfTouches]; +} + @end diff --git a/ios/Handlers/RNNativeViewHandler.m b/ios/Handlers/RNNativeViewHandler.mm similarity index 94% rename from ios/Handlers/RNNativeViewHandler.m rename to ios/Handlers/RNNativeViewHandler.mm index aadbd23033..c921778ef6 100644 --- a/ios/Handlers/RNNativeViewHandler.m +++ b/ios/Handlers/RNNativeViewHandler.mm @@ -11,9 +11,14 @@ #import #import -#import #import +#ifdef RN_FABRIC_ENABLED +#import +#else +#import +#endif // RN_FABRIC_ENABLED + #pragma mark RNDummyGestureRecognizer @implementation RNDummyGestureRecognizer { @@ -101,6 +106,12 @@ - (void)bindToView:(UIView *)view // We can restore default scrollview behaviour to delay touches to scrollview's children // because gesture handler system can handle cancellation of scroll recognizer when JS responder // is set +#ifdef RN_FABRIC_ENABLED + if ([view isKindOfClass:[RCTScrollViewComponentView class]]) { + UIScrollView *scrollView = ((RCTScrollViewComponentView *)view).scrollView; + scrollView.delaysContentTouches = YES; + } +#else if ([view isKindOfClass:[RCTScrollView class]]) { // This part of the code is coupled with RN implementation of ScrollView native wrapper and // we expect for RCTScrollView component to contain a subclass of UIScrollview as the only @@ -108,6 +119,7 @@ - (void)bindToView:(UIView *)view UIScrollView *scrollView = [view.subviews objectAtIndex:0]; scrollView.delaysContentTouches = YES; } +#endif // RN_FABRIC_ENABLED } - (void)handleTouchDown:(UIView *)sender forEvent:(UIEvent *)event diff --git a/ios/Handlers/RNPanHandler.m b/ios/Handlers/RNPanHandler.m index 7dd01725d1..3269d3d3d0 100644 --- a/ios/Handlers/RNPanHandler.m +++ b/ios/Handlers/RNPanHandler.m @@ -24,6 +24,7 @@ @interface RNBetterPanGestureRecognizer : UIPanGestureRecognizer @property (nonatomic) CGFloat activeOffsetYEnd; @property (nonatomic) CGFloat failOffsetYStart; @property (nonatomic) CGFloat failOffsetYEnd; +@property (nonatomic) CGFloat activateAfterLongPress; - (id)initWithGestureHandler:(RNGestureHandler*)gestureHandler; @@ -53,6 +54,7 @@ - (id)initWithGestureHandler:(RNGestureHandler*)gestureHandler _activeOffsetYEnd = NAN; _failOffsetYStart = NAN; _failOffsetYEnd = NAN; + _activateAfterLongPress = NAN; _hasCustomActivationCriteria = NO; #if !TARGET_OS_TV _realMinimumNumberOfTouches = self.minimumNumberOfTouches; @@ -71,6 +73,13 @@ - (void)setMinimumNumberOfTouches:(NSUInteger)minimumNumberOfTouches _realMinimumNumberOfTouches = minimumNumberOfTouches; } +- (void)activateAfterLongPress +{ + self.state = UIGestureRecognizerStateBegan; + // Send event in ACTIVE state because UIGestureRecognizerStateBegan is mapped to RNGestureHandlerStateBegan + [_gestureHandler handleGesture:self inState:RNGestureHandlerStateActive]; +} + - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { if ([self numberOfTouches] == 0) { @@ -89,6 +98,10 @@ - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event [super touchesBegan:touches withEvent:event]; [self triggerAction]; [_gestureHandler.pointerTracker touchesBegan:touches withEvent:event]; + + if (!isnan(_activateAfterLongPress)) { + [self performSelector:@selector(activateAfterLongPress) withObject:nil afterDelay:_activateAfterLongPress]; + } } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event @@ -140,6 +153,7 @@ - (void)reset { [self triggerAction]; [_gestureHandler.pointerTracker reset]; + [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(activateAfterLongPress) object:nil]; self.enabled = YES; [super reset]; } @@ -155,6 +169,12 @@ - (void)updateHasCustomActivationCriteria - (BOOL)shouldFailUnderCustomCriteria { CGPoint trans = [self translationInView:self.view.window]; + // Apple docs say that 10 units is the default allowable movement for UILongPressGestureRecognizer + if (!isnan(_activateAfterLongPress) && trans.x * trans.x + trans.y * trans.y > 100) { + [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(activateAfterLongPress) object:nil]; + return YES; + } + if (!isnan(_failOffsetXStart) && trans.x < _failOffsetXStart) { return YES; } @@ -242,6 +262,7 @@ - (void)resetConfig #endif recognizer.minDistSq = NAN; recognizer.minVelocitySq = NAN; + recognizer.activateAfterLongPress = NAN; } - (void)configure:(NSDictionary *)config @@ -283,6 +304,12 @@ - (void)configure:(NSDictionary *)config CGFloat velocity = [RCTConvert CGFloat:prop]; recognizer.minVelocitySq = velocity * velocity; } + + prop = config[@"activateAfterLongPress"]; + if (prop != nil) { + recognizer.activateAfterLongPress = [RCTConvert CGFloat:prop] / 1000.0; + recognizer.minDistSq = MAX(100, recognizer.minDistSq); + } [recognizer updateHasCustomActivationCriteria]; } diff --git a/ios/RNGHTouchEventType.h b/ios/RNGHTouchEventType.h new file mode 100644 index 0000000000..65febeb344 --- /dev/null +++ b/ios/RNGHTouchEventType.h @@ -0,0 +1,9 @@ +#import + +typedef NS_ENUM(NSInteger, RNGHTouchEventType) { + RNGHTouchEventTypeUndetermined = 0, + RNGHTouchEventTypePointerDown, + RNGHTouchEventTypePointerMove, + RNGHTouchEventTypePointerUp, + RNGHTouchEventTypeCancelled, +}; diff --git a/ios/RNGestureHandler.h b/ios/RNGestureHandler.h index e8c73c9c7d..af7ec7088f 100644 --- a/ios/RNGestureHandler.h +++ b/ios/RNGestureHandler.h @@ -26,7 +26,7 @@ if (value != nil) { recognizer.prop = [RCTConvert type:value]; }\ @protocol RNGestureHandlerEventEmitter -- (void)sendStateChangeEvent:(nonnull RNGestureHandlerStateChange *)event withActionType:(RNGestureHandlerActionType)actionType; +- (void)sendEvent:(nonnull RNGestureHandlerStateChange *)event withActionType:(RNGestureHandlerActionType)actionType; @end @@ -65,6 +65,7 @@ if (value != nil) { recognizer.prop = [RCTConvert type:value]; }\ - (void)resetConfig NS_REQUIRES_SUPER; - (void)configure:(nullable NSDictionary *)config NS_REQUIRES_SUPER; - (void)handleGesture:(nonnull id)recognizer; +- (void)handleGesture:(nonnull id)recognizer inState:(RNGestureHandlerState)state; - (BOOL)containsPointInView; - (RNGestureHandlerState)state; - (nullable RNGestureHandlerEventExtraData *)eventExtraData:(nonnull id)recognizer; @@ -74,7 +75,7 @@ if (value != nil) { recognizer.prop = [RCTConvert type:value]; }\ - (void)sendEventsInState:(RNGestureHandlerState)state forViewWithTag:(nonnull NSNumber *)reactTag withExtraData:(nonnull RNGestureHandlerEventExtraData *)extraData; -- (void)sendStateChangeEvent:(nonnull RNGestureHandlerStateChange *)event; +- (void)sendEvent:(nonnull RNGestureHandlerStateChange *)event; - (void)sendTouchEventInState:(RNGestureHandlerState)state forViewWithTag:(nonnull NSNumber *)reactTag; diff --git a/ios/RNGestureHandler.m b/ios/RNGestureHandler.m index b0db8ce7d9..19ee0f3b18 100644 --- a/ios/RNGestureHandler.m +++ b/ios/RNGestureHandler.m @@ -94,13 +94,14 @@ - (instancetype)initWithTag:(NSNumber *)tag - (void)resetConfig { self.enabled = YES; + self.manualActivation = NO; _shouldCancelWhenOutside = NO; _handlersToWaitFor = nil; _simultaneousHandlers = nil; _hitSlop = RNGHHitSlopEmpty; _needsPointerData = NO; - - self.manualActivation = NO; + + _recognizer.cancelsTouchesInView = YES; } - (void)configure:(NSDictionary *)config @@ -119,6 +120,11 @@ - (void)configure:(NSDictionary *)config _shouldCancelWhenOutside = [RCTConvert BOOL:prop]; } + prop = config[@"cancelsTouchesInView"]; + if (prop != nil) { + _recognizer.cancelsTouchesInView = [RCTConvert BOOL:prop]; + } + prop = config[@"needsPointerData"]; if (prop != nil) { _needsPointerData = [RCTConvert BOOL:prop]; @@ -189,7 +195,20 @@ - (RNGestureHandlerEventExtraData *)eventExtraData:(UIGestureRecognizer *)recogn - (void)handleGesture:(UIGestureRecognizer *)recognizer { + // it may happen that the gesture recognizer is reset after it's been unbound from the view, + // it that recognizer tried to send event, the app would crash because the target of the event + // would be nil. + if (recognizer.view.reactTag == nil) { + return; + } + _state = [self recognizerState]; + [self handleGesture:recognizer inState:_state]; +} + +- (void)handleGesture:(UIGestureRecognizer *)recognizer inState:(RNGestureHandlerState)state +{ + _state = state; RNGestureHandlerEventExtraData *eventData = [self eventExtraData:recognizer]; [self sendEventsInState:self.state forViewWithTag:recognizer.view.reactTag withExtraData:eventData]; } @@ -199,6 +218,11 @@ - (void)sendEventsInState:(RNGestureHandlerState)state withExtraData:(RNGestureHandlerEventExtraData *)extraData { if (state != _lastState) { + // don't send change events from END to FAILED or CANCELLED, this may happen when gesture is ended in `onTouchesUp` callback + if (_lastState == RNGestureHandlerStateEnd && (state == RNGestureHandlerStateFailed || state == RNGestureHandlerStateCancelled)) { + return; + } + if (state == RNGestureHandlerStateActive) { // Generate a unique coalescing-key each time the gesture-handler becomes active. All events will have // the same coalescing-key allowing RCTEventDispatcher to coalesce RNGestureHandlerEvents when events are @@ -206,13 +230,13 @@ - (void)sendEventsInState:(RNGestureHandlerState)state static uint16_t nextEventCoalescingKey = 0; self->_eventCoalescingKey = nextEventCoalescingKey++; - } else if (state == RNGestureHandlerStateEnd && _lastState != RNGestureHandlerStateActive) { + } else if (state == RNGestureHandlerStateEnd && _lastState != RNGestureHandlerStateActive && !_manualActivation) { id event = [[RNGestureHandlerStateChange alloc] initWithReactTag:reactTag handlerTag:_tag state:RNGestureHandlerStateActive prevState:_lastState extraData:extraData]; - [self sendStateChangeEvent:event]; + [self sendEvent:event]; _lastState = RNGestureHandlerStateActive; } id stateEvent = [[RNGestureHandlerStateChange alloc] initWithReactTag:reactTag @@ -220,7 +244,7 @@ - (void)sendEventsInState:(RNGestureHandlerState)state state:state prevState:_lastState extraData:extraData]; - [self sendStateChangeEvent:stateEvent]; + [self sendEvent:stateEvent]; _lastState = state; } @@ -230,13 +254,13 @@ - (void)sendEventsInState:(RNGestureHandlerState)state state:state extraData:extraData coalescingKey:self->_eventCoalescingKey]; - [self sendStateChangeEvent:touchEvent]; + [self sendEvent:touchEvent]; } } -- (void)sendStateChangeEvent:(RNGestureHandlerStateChange *)event +- (void)sendEvent:(RNGestureHandlerStateChange *)event { - [self.emitter sendStateChangeEvent:event withActionType:self.actionType]; + [self.emitter sendEvent:event withActionType:self.actionType]; } - (void)sendTouchEventInState:(RNGestureHandlerState)state @@ -248,7 +272,7 @@ - (void)sendTouchEventInState:(RNGestureHandlerState)state withNumberOfTouches:_pointerTracker.trackedPointersCount]; id event = [[RNGestureHandlerEvent alloc] initWithReactTag:reactTag handlerTag:_tag state:state extraData:extraData coalescingKey:[_tag intValue]]; - [self.emitter sendStateChangeEvent:event withActionType:self.actionType]; + [self.emitter sendEvent:event withActionType:self.actionType]; } - (RNGestureHandlerState)recognizerState @@ -377,14 +401,21 @@ - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer if (_recognizer.state == UIGestureRecognizerStateBegan && _recognizer.state == UIGestureRecognizerStatePossible) { return YES; } - if ([_simultaneousHandlers count]) { - RNGestureHandler *handler = [RNGestureHandler findGestureHandlerByRecognizer:otherGestureRecognizer]; - if (handler != nil) { + + RNGestureHandler *handler = [RNGestureHandler findGestureHandlerByRecognizer:otherGestureRecognizer]; + if (handler != nil) { + if ([_simultaneousHandlers count]) { for (NSNumber *handlerTag in _simultaneousHandlers) { if ([handler.tag isEqual:handlerTag]) { return YES; } } + } else if (handler->_simultaneousHandlers) { + for (NSNumber *handlerTag in handler->_simultaneousHandlers) { + if ([self.tag isEqual:handlerTag]) { + return YES; + } + } } } return NO; diff --git a/ios/RNGestureHandlerButton.h b/ios/RNGestureHandlerButton.h index bfbbf7b2f3..dd0ad4862e 100644 --- a/ios/RNGestureHandlerButton.h +++ b/ios/RNGestureHandlerButton.h @@ -14,5 +14,6 @@ * Insets used when hit testing inside this view. */ @property (nonatomic, assign) UIEdgeInsets hitTestEdgeInsets; +@property (nonatomic) BOOL userEnabled; @end diff --git a/ios/RNGestureHandlerButton.m b/ios/RNGestureHandlerButton.m index 14ade75ff8..efd98a236d 100644 --- a/ios/RNGestureHandlerButton.m +++ b/ios/RNGestureHandlerButton.m @@ -38,6 +38,7 @@ - (instancetype)init self = [super init]; if (self) { _hitTestEdgeInsets = UIEdgeInsetsZero; + _userEnabled = YES; #if !TARGET_OS_TV [self setExclusiveTouch:YES]; #endif @@ -47,6 +48,11 @@ - (instancetype)init - (BOOL)shouldHandleTouch:(UIView *)view { + if ([view isKindOfClass:[RNGestureHandlerButton class]]) { + RNGestureHandlerButton *button = (RNGestureHandlerButton *)view; + return button.userEnabled; + } + return [view isKindOfClass:[UIControl class]] || [view.gestureRecognizers count] > 0; } @@ -62,7 +68,9 @@ - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { UIView *inner = [super hitTest:point withEvent:event]; - while (inner && ![self shouldHandleTouch:inner]) inner = inner.superview; + while (inner && ![self shouldHandleTouch:inner]) { + inner = inner.superview; + } return inner; } diff --git a/ios/RNGestureHandlerButtonComponentView.mm b/ios/RNGestureHandlerButtonComponentView.mm index f48d854826..af99949db4 100644 --- a/ios/RNGestureHandlerButtonComponentView.mm +++ b/ios/RNGestureHandlerButtonComponentView.mm @@ -18,14 +18,18 @@ @interface RNGestureHandlerButtonComponentView () (); _props = defaultProps; + _buttonView = [[RNGestureHandlerButton alloc] initWithFrame:self.bounds]; - self.contentView = [[RNGestureHandlerButton alloc] initWithFrame:self.bounds]; + self.contentView = _buttonView; } return self; @@ -38,6 +42,15 @@ + (ComponentDescriptorProvider)componentDescriptorProvider return concreteComponentDescriptorProvider(); } +- (void)updateProps:(const Props::Shared &)props oldProps:(const Props::Shared &)oldProps +{ + const auto &newProps = *std::static_pointer_cast(props); + + _buttonView.userEnabled = newProps.enabled; + _buttonView.exclusiveTouch = newProps.exclusive; + + [super updateProps:props oldProps:oldProps]; +} @end Class RNGestureHandlerButtonCls(void) diff --git a/ios/RNGestureHandlerButtonManager.m b/ios/RNGestureHandlerButtonManager.m index c77af7b077..a45162eaef 100644 --- a/ios/RNGestureHandlerButtonManager.m +++ b/ios/RNGestureHandlerButtonManager.m @@ -5,7 +5,10 @@ @implementation RNGestureHandlerButtonManager RCT_EXPORT_MODULE(RNGestureHandlerButton) -RCT_EXPORT_VIEW_PROPERTY(enabled, BOOL) +RCT_CUSTOM_VIEW_PROPERTY(enabled, BOOL, RNGestureHandlerButton) +{ + view.userEnabled = json == nil ? YES : [RCTConvert BOOL: json]; +} #if !TARGET_OS_TV RCT_CUSTOM_VIEW_PROPERTY(exclusive, BOOL, RNGestureHandlerButton) { diff --git a/ios/RNGestureHandlerEvents.h b/ios/RNGestureHandlerEvents.h index 00251bb2bc..7a1b4a95e8 100644 --- a/ios/RNGestureHandlerEvents.h +++ b/ios/RNGestureHandlerEvents.h @@ -4,7 +4,7 @@ #import #import "RNGestureHandlerState.h" -#import "RNTouchEventType.h" +#import "RNGHTouchEventType.h" @interface RNGestureHandlerEventExtraData : NSObject @@ -36,7 +36,7 @@ withAnchorPoint:(CGPoint)anchorPoint withVelocity:(CGFloat)velocity withNumberOfTouches:(NSUInteger)numberOfTouches; -+ (RNGestureHandlerEventExtraData *)forEventType:(RNTouchEventType)eventType ++ (RNGestureHandlerEventExtraData *)forEventType:(RNGHTouchEventType)eventType withChangedPointers:(NSArray *)changedPointers withAllPointers:(NSArray *)allPointers withNumberOfTouches:(NSUInteger)numberOfTouches; diff --git a/ios/RNGestureHandlerEvents.m b/ios/RNGestureHandlerEvents.m index 99737aff22..bbd338ebff 100644 --- a/ios/RNGestureHandlerEvents.m +++ b/ios/RNGestureHandlerEvents.m @@ -103,7 +103,7 @@ + (RNGestureHandlerEventExtraData *)forRotation:(CGFloat)rotation @"numberOfPointers": @(numberOfTouches)}]; } -+ (RNGestureHandlerEventExtraData *)forEventType:(RNTouchEventType)eventType ++ (RNGestureHandlerEventExtraData *)forEventType:(RNGHTouchEventType)eventType withChangedPointers:(NSArray *)changedPointers withAllPointers:(NSArray *)allPointers withNumberOfTouches:(NSUInteger)numberOfTouches @@ -111,7 +111,7 @@ + (RNGestureHandlerEventExtraData *)forEventType:(RNTouchEventType)eventType if (changedPointers == nil || allPointers == nil) { changedPointers = @[]; allPointers = @[]; - eventType = RNTouchEventTypeUndetermined; + eventType = RNGHTouchEventTypeUndetermined; } return [[RNGestureHandlerEventExtraData alloc] diff --git a/ios/RNGestureHandlerManager.h b/ios/RNGestureHandlerManager.h index 0e83ac9217..b6ecff0736 100644 --- a/ios/RNGestureHandlerManager.h +++ b/ios/RNGestureHandlerManager.h @@ -24,6 +24,8 @@ - (void)dropGestureHandler:(nonnull NSNumber *)handlerTag; +- (void)dropAllGestureHandlers; + - (void)handleSetJSResponder:(nonnull NSNumber *)viewTag blockNativeResponder:(nonnull NSNumber *)blockNativeResponder; diff --git a/ios/RNGestureHandlerManager.mm b/ios/RNGestureHandlerManager.mm index 7870d51f39..83b3d9bbc5 100644 --- a/ios/RNGestureHandlerManager.mm +++ b/ios/RNGestureHandlerManager.mm @@ -4,7 +4,6 @@ #import #import #import -#import #import #import @@ -22,6 +21,9 @@ #ifdef RN_FABRIC_ENABLED #import +#import +#else +#import #endif // RN_FABRIC_ENABLED #import "Handlers/RNPanHandler.h" @@ -48,6 +50,7 @@ @implementation RNGestureHandlerManager RCTUIManager *_uiManager; NSHashTable *_rootViewGestureRecognizers; RCTEventDispatcher *_eventDispatcher; + id _reanimatedModule; } - (instancetype)initWithUIManager:(RCTUIManager *)uiManager @@ -58,6 +61,7 @@ - (instancetype)initWithUIManager:(RCTUIManager *)uiManager _eventDispatcher = eventDispatcher; _registry = [RNGestureHandlerRegistry new]; _rootViewGestureRecognizers = [NSHashTable hashTableWithOptions:NSPointerFunctionsWeakMemory]; + _reanimatedModule = nil; } return self; } @@ -139,6 +143,11 @@ - (void)dropGestureHandler:(NSNumber *)handlerTag [_registry dropHandlerWithTag:handlerTag]; } +- (void)dropAllGestureHandlers +{ + [_registry dropAllHandlers]; +} + - (void)handleSetJSResponder:(NSNumber *)viewTag blockNativeResponder:(NSNumber *)blockNativeResponder { if ([blockNativeResponder boolValue]) { @@ -204,86 +213,95 @@ - (void)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer // Once the upstream fix lands the line below along with this comment can be removed if ([gestureRecognizer.view isKindOfClass:[UIScrollView class]]) return; +#ifdef RN_FABRIC_ENABLED + RCTSurfaceTouchHandler *touchHandler = [viewWithTouchHandler performSelector:@selector(touchHandler)]; +#else RCTTouchHandler *touchHandler = [viewWithTouchHandler performSelector:@selector(touchHandler)]; - [touchHandler cancel]; +#endif + [touchHandler setEnabled:NO]; + [touchHandler setEnabled:YES]; + } #pragma mark Events -- (void)sendStateChangeEvent:(RNGestureHandlerStateChange *)event withActionType:(RNGestureHandlerActionType)actionType +- (void)sendEvent:(RNGestureHandlerStateChange *)event withActionType:(RNGestureHandlerActionType)actionType { switch (actionType) { case RNGestureHandlerActionTypeReanimatedWorklet: - [self sendStateChangeEventForReanimated:event]; + [self sendEventForReanimated:event]; break; case RNGestureHandlerActionTypeNativeAnimatedEvent: if ([event.eventName isEqualToString:@"onGestureHandlerEvent"]) { - [self sendStateChangeEventForNativeAnimatedEvent:event]; + [self sendEventForNativeAnimatedEvent:event]; } else { // Although onGestureEvent prop is an Animated.event with useNativeDriver: true, // onHandlerStateChange prop is still a regular JS function. // Also, Animated.event is only supported with old API. - [self sendStateChangeEventForJSFunctionOldAPI:event]; + [self sendEventForJSFunctionOldAPI:event]; } break; case RNGestureHandlerActionTypeJSFunctionOldAPI: - [self sendStateChangeEventForJSFunctionOldAPI:event]; + [self sendEventForJSFunctionOldAPI:event]; break; case RNGestureHandlerActionTypeJSFunctionNewAPI: - [self sendStateChangeEventForJSFunctionNewAPI:event]; + [self sendEventForJSFunctionNewAPI:event]; break; } } -- (void)sendStateChangeEventForReanimated:(RNGestureHandlerStateChange *)event +- (void)sendEventForReanimated:(RNGestureHandlerStateChange *)event { // Delivers the event to Reanimated. #ifdef RN_FABRIC_ENABLED - // TODO: send event directly to Reanimated - // This is already supported in Reanimated with Fabric but let's wait until the official release. - // [_reanimatedModule eventDispatcherWillDispatchEvent:event]; + // Send event directly to Reanimated + if (_reanimatedModule == nil) { + _reanimatedModule = [_uiManager.bridge moduleForName:@"ReanimatedModule"]; + } + + [_reanimatedModule eventDispatcherWillDispatchEvent:event]; #else // In the old architecture, Reanimated overwrites RCTEventDispatcher // with REAEventDispatcher and intercepts all direct events. - [self sendStateChangeEventForDirectEvent:event]; + [self sendEventForDirectEvent:event]; #endif // RN_FABRIC_ENABLED } -- (void)sendStateChangeEventForNativeAnimatedEvent:(RNGestureHandlerStateChange *)event +- (void)sendEventForNativeAnimatedEvent:(RNGestureHandlerStateChange *)event { // Delivers the event to NativeAnimatedModule. // Currently, NativeAnimated[Turbo]Module is RCTEventDispatcherObserver so we can // simply send a direct event which is handled by the observer but ignored on JS side. // TODO: send event directly to NativeAnimated[Turbo]Module - [self sendStateChangeEventForDirectEvent:event]; + [self sendEventForDirectEvent:event]; } -- (void)sendStateChangeEventForJSFunctionOldAPI:(RNGestureHandlerStateChange *)event +- (void)sendEventForJSFunctionOldAPI:(RNGestureHandlerStateChange *)event { // Delivers the event to JS (old RNGH API). #ifdef RN_FABRIC_ENABLED - [self sendStateChangeEventForDeviceEvent:event]; + [self sendEventForDeviceEvent:event]; #else - [self sendStateChangeEventForDirectEvent:event]; + [self sendEventForDirectEvent:event]; #endif // RN_FABRIC_ENABLED } -- (void)sendStateChangeEventForJSFunctionNewAPI:(RNGestureHandlerStateChange *)event +- (void)sendEventForJSFunctionNewAPI:(RNGestureHandlerStateChange *)event { // Delivers the event to JS (new RNGH API). - [self sendStateChangeEventForDeviceEvent:event]; + [self sendEventForDeviceEvent:event]; } -- (void)sendStateChangeEventForDirectEvent:(RNGestureHandlerStateChange *)event +- (void)sendEventForDirectEvent:(RNGestureHandlerStateChange *)event { // Delivers the event to JS as a direct event. [_eventDispatcher sendEvent:event]; } -- (void)sendStateChangeEventForDeviceEvent:(RNGestureHandlerStateChange *)event +- (void)sendEventForDeviceEvent:(RNGestureHandlerStateChange *)event { // Delivers the event to JS as a device event. NSMutableDictionary *body = [[event arguments] objectAtIndex:2]; diff --git a/ios/RNGestureHandlerModule.mm b/ios/RNGestureHandlerModule.mm index a9cca3cab2..7d3e50847b 100644 --- a/ios/RNGestureHandlerModule.mm +++ b/ios/RNGestureHandlerModule.mm @@ -60,6 +60,11 @@ + (BOOL)requiresMainQueueSetup - (void)invalidate { + RNGestureHandlerManager *handlerManager = _manager; + dispatch_async(dispatch_get_main_queue(), ^{ + [handlerManager dropAllGestureHandlers]; + }); + _manager = nil; #ifdef RN_FABRIC_ENABLED @@ -173,6 +178,22 @@ - (void)setBridge:(RCTBridge *)bridge }]; } +RCT_EXPORT_METHOD(flushOperations) +{ + if (_operations.count == 0) { + return; + } + + NSArray *operations = _operations; + _operations = [NSMutableArray new]; + + [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *manager, __unused NSDictionary *viewRegistry) { + for (GestureHandlerOperation operation in operations) { + operation(self->_manager); + } + }]; +} + - (void)setGestureState:(int)state forHandler:(int)handlerTag { RNGestureHandler *handler = [_manager handlerWithTag:@(handlerTag)]; diff --git a/ios/RNGestureHandlerPointerTracker.h b/ios/RNGestureHandlerPointerTracker.h index a44f312ce8..5df6c368e0 100644 --- a/ios/RNGestureHandlerPointerTracker.h +++ b/ios/RNGestureHandlerPointerTracker.h @@ -1,6 +1,6 @@ #import -#import "RNTouchEventType.h" +#import "RNGHTouchEventType.h" #define MAX_POINTERS_COUNT 12 @@ -8,7 +8,7 @@ @interface RNGestureHandlerPointerTracker : NSObject -@property (nonatomic) RNTouchEventType eventType; +@property (nonatomic) RNGHTouchEventType eventType; @property (nonatomic) NSArray *changedPointersData; @property (nonatomic) NSArray *allPointersData; @property (nonatomic) int trackedPointersCount; diff --git a/ios/RNGestureHandlerPointerTracker.m b/ios/RNGestureHandlerPointerTracker.m index 57f487f532..30475a6947 100644 --- a/ios/RNGestureHandlerPointerTracker.m +++ b/ios/RNGestureHandlerPointerTracker.m @@ -103,7 +103,7 @@ - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event return; } - _eventType = RNTouchEventTypePointerDown; + _eventType = RNGHTouchEventTypePointerDown; NSDictionary *data[touches.count]; @@ -129,7 +129,7 @@ - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event return; } - _eventType = RNTouchEventTypePointerMove; + _eventType = RNGHTouchEventTypePointerMove; NSDictionary *data[touches.count]; @@ -153,7 +153,7 @@ - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event // extract all touches first to include the ones that were just lifted [self extractAllTouches]; - _eventType = RNTouchEventTypePointerUp; + _eventType = RNGHTouchEventTypePointerUp; NSDictionary *data[touches.count]; @@ -188,7 +188,7 @@ - (void)reset if (_trackedPointersCount == 0) { // gesture has finished because all pointers were lifted, reset event type to send state change event - _eventType = RNTouchEventTypeUndetermined; + _eventType = RNGHTouchEventTypeUndetermined; } else { // turns out that the gesture may be made to fail without calling touchesCancelled in that case there // are still tracked pointers but the recognizer state is already set to UIGestureRecognizerStateFailed @@ -218,7 +218,7 @@ - (void)cancelPointers } } - _eventType = RNTouchEventTypeCancelled; + _eventType = RNGHTouchEventTypeCancelled; _changedPointersData = [[NSArray alloc] initWithObjects:data count:registeredTouches]; [self sendEvent]; _trackedPointersCount = 0; @@ -227,7 +227,10 @@ - (void)cancelPointers - (void)sendEvent { - if (!_gestureHandler.needsPointerData) { + // it may happen that the gesture recognizer is reset after it's been unbound from the view, + // it that recognizer tried to send event, the app would crash because the target of the event + // would be nil. + if (!_gestureHandler.needsPointerData || _gestureHandler.recognizer.view.reactTag == nil) { return; } diff --git a/ios/RNGestureHandlerRegistry.h b/ios/RNGestureHandlerRegistry.h index e3978ecb7f..b8267b01a6 100644 --- a/ios/RNGestureHandlerRegistry.h +++ b/ios/RNGestureHandlerRegistry.h @@ -14,5 +14,6 @@ - (void)registerGestureHandler:(nonnull RNGestureHandler *)gestureHandler; - (void)attachHandlerWithTag:(nonnull NSNumber *)handlerTag toView:(nonnull UIView *)view withActionType:(RNGestureHandlerActionType)actionType; - (void)dropHandlerWithTag:(nonnull NSNumber *)handlerTag; +- (void)dropAllHandlers; @end diff --git a/ios/RNGestureHandlerRegistry.m b/ios/RNGestureHandlerRegistry.m index dbc332c2a8..cd3d8944aa 100644 --- a/ios/RNGestureHandlerRegistry.m +++ b/ios/RNGestureHandlerRegistry.m @@ -48,4 +48,14 @@ - (void)dropHandlerWithTag:(NSNumber *)handlerTag [_handlers removeObjectForKey:handlerTag]; } +- (void)dropAllHandlers +{ + for (NSNumber* tag in _handlers) { + RNGestureHandler *handler = _handlers[tag]; + [handler unbindFromView]; + } + + [_handlers removeAllObjects]; +} + @end diff --git a/ios/RNManualActivationRecognizer.m b/ios/RNManualActivationRecognizer.m index 67d3cf27e0..f1df5badf2 100644 --- a/ios/RNManualActivationRecognizer.m +++ b/ios/RNManualActivationRecognizer.m @@ -8,7 +8,7 @@ @implementation RNManualActivationRecognizer { - (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler { - if ((self = [super initWithTarget:self action:nil])) { + if ((self = [super initWithTarget:self action:@selector(handleGesture:)])) { _handler = gestureHandler; self.delegate = self; _activePointers = 0; @@ -16,6 +16,14 @@ - (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler return self; } +- (void)handleGesture:(UIGestureRecognizer *)recognizer +{ + if (recognizer.state == UIGestureRecognizerStateBegan) { + self.state = UIGestureRecognizerStateEnded; + [self reset]; + } +} + - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [super touchesBegan:touches withEvent:event]; @@ -35,8 +43,7 @@ - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event _activePointers -= touches.count; if (_activePointers == 0) { - [self fail]; - [self reset]; + self.state = UIGestureRecognizerStateBegan; } } diff --git a/ios/RNRootViewGestureRecognizer.m b/ios/RNRootViewGestureRecognizer.m index a184d23a56..51982e22f5 100644 --- a/ios/RNRootViewGestureRecognizer.m +++ b/ios/RNRootViewGestureRecognizer.m @@ -10,7 +10,12 @@ #import +#ifdef RN_FABRIC_ENABLED +#import +#else #import +#endif // RN_FABRIC_ENABLED + @implementation RNRootViewGestureRecognizer { @@ -43,7 +48,13 @@ - (BOOL)shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGe - (BOOL)canPreventGestureRecognizer:(UIGestureRecognizer *)preventedGestureRecognizer { - return ![preventedGestureRecognizer isKindOfClass:[RCTTouchHandler class]]; + return ![preventedGestureRecognizer isKindOfClass:[ +#ifdef RN_FABRIC_ENABLED + RCTSurfaceTouchHandler +#else + RCTTouchHandler +#endif + class]]; } - (BOOL)canBePreventedByGestureRecognizer:(UIGestureRecognizer *)preventingGestureRecognizer diff --git a/ios/RNTouchEventType.h b/ios/RNTouchEventType.h deleted file mode 100644 index e1e8271095..0000000000 --- a/ios/RNTouchEventType.h +++ /dev/null @@ -1,9 +0,0 @@ -#import - -typedef NS_ENUM(NSInteger, RNTouchEventType) { - RNTouchEventTypeUndetermined = 0, - RNTouchEventTypePointerDown, - RNTouchEventTypePointerMove, - RNTouchEventTypePointerUp, - RNTouchEventTypeCancelled, -}; diff --git a/package.json b/package.json index 45c651beb2..1ea34923ff 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-gesture-handler", - "version": "2.3.2-wp-1", + "version": "2.5.0-wp-1", "description": "Experimental implementation of a new declarative API for gesture handling in react-native", "scripts": { "prepare": "bob build", @@ -31,6 +31,8 @@ "android/lib/build.gradle", "android/lib/src/main/java/", "android/common/src/main/java/", + "android/reanimated/src/main/java/", + "android/noreanimated/src/main/java/", "ios/", "Swipeable/", "jest-utils/", @@ -109,7 +111,7 @@ "react-native": "*" }, "lint-staged": { - "*.{ts,tsx}": [ + "./src/*.{ts,tsx}": [ "prettier --write" ] }, diff --git a/react-native-gesture-handler-2.3.2-wp-1.tgz b/react-native-gesture-handler-2.3.2-wp-1.tgz deleted file mode 100644 index 824f401249..0000000000 Binary files a/react-native-gesture-handler-2.3.2-wp-1.tgz and /dev/null differ diff --git a/react-native-gesture-handler-2.5.0-wp-1.tgz b/react-native-gesture-handler-2.5.0-wp-1.tgz new file mode 100644 index 0000000000..456c33d7e8 Binary files /dev/null and b/react-native-gesture-handler-2.5.0-wp-1.tgz differ diff --git a/src/GestureHandlerRootView.android.tsx b/src/GestureHandlerRootView.android.tsx index c6b5779253..310886d122 100644 --- a/src/GestureHandlerRootView.android.tsx +++ b/src/GestureHandlerRootView.android.tsx @@ -2,9 +2,10 @@ import * as React from 'react'; import { PropsWithChildren } from 'react'; import { requireNativeComponent, ViewProps } from 'react-native'; -import { isFabric } from './utils'; +import { maybeInitializeFabric } from './init'; +import { shouldUseCodegenNativeComponent } from './utils'; -const GestureHandlerRootViewNativeComponent = isFabric() +const GestureHandlerRootViewNativeComponent = shouldUseCodegenNativeComponent() ? require('./fabric/RNGestureHandlerRootViewNativeComponent').default : requireNativeComponent('RNGestureHandlerRootView'); @@ -14,5 +15,10 @@ export interface GestureHandlerRootViewProps export default function GestureHandlerRootView( props: GestureHandlerRootViewProps ) { + // try initialize fabric on the first render, at this point we can + // reliably check if fabric is enabled (the function contains a flag + // to make sure it's called only once) + maybeInitializeFabric(); + return ; } diff --git a/src/GestureHandlerRootView.tsx b/src/GestureHandlerRootView.tsx index beb9c84e38..69e39485f4 100644 --- a/src/GestureHandlerRootView.tsx +++ b/src/GestureHandlerRootView.tsx @@ -1,6 +1,7 @@ import * as React from 'react'; import { PropsWithChildren } from 'react'; import { View, ViewProps } from 'react-native'; +import { maybeInitializeFabric } from './init'; export interface GestureHandlerRootViewProps extends PropsWithChildren {} @@ -8,5 +9,10 @@ export interface GestureHandlerRootViewProps export default function GestureHandlerRootView( props: GestureHandlerRootViewProps ) { + // try initialize fabric on the first render, at this point we can + // reliably check if fabric is enabled (the function contains a flag + // to make sure it's called only once) + maybeInitializeFabric(); + return ; } diff --git a/src/GestureHandlerRootView.web.tsx b/src/GestureHandlerRootView.web.tsx new file mode 100644 index 0000000000..beb9c84e38 --- /dev/null +++ b/src/GestureHandlerRootView.web.tsx @@ -0,0 +1,12 @@ +import * as React from 'react'; +import { PropsWithChildren } from 'react'; +import { View, ViewProps } from 'react-native'; + +export interface GestureHandlerRootViewProps + extends PropsWithChildren {} + +export default function GestureHandlerRootView( + props: GestureHandlerRootViewProps +) { + return ; +} diff --git a/src/RNGestureHandlerModule.macos.ts b/src/RNGestureHandlerModule.macos.ts new file mode 100644 index 0000000000..f802aa07e9 --- /dev/null +++ b/src/RNGestureHandlerModule.macos.ts @@ -0,0 +1,62 @@ +import { ActionType } from './ActionType'; +import { Direction } from './web/constants'; +import FlingGestureHandler from './web/FlingGestureHandler'; +import LongPressGestureHandler from './web/LongPressGestureHandler'; +import NativeViewGestureHandler from './web/NativeViewGestureHandler'; +import * as NodeManager from './web/NodeManager'; +import PanGestureHandler from './web/PanGestureHandler'; +import PinchGestureHandler from './web/PinchGestureHandler'; +import RotationGestureHandler from './web/RotationGestureHandler'; +import TapGestureHandler from './web/TapGestureHandler'; + +export const Gestures = { + PanGestureHandler, + RotationGestureHandler, + PinchGestureHandler, + TapGestureHandler, + NativeViewGestureHandler, + LongPressGestureHandler, + FlingGestureHandler, + // ForceTouchGestureHandler, +}; + +export default { + Direction, + // eslint-disable-next-line @typescript-eslint/no-empty-function + handleSetJSResponder() {}, + // eslint-disable-next-line @typescript-eslint/no-empty-function + handleClearJSResponder() {}, + createGestureHandler( + handlerName: keyof typeof Gestures, + handlerTag: number, + config: T + ) { + //TODO(TS) extends config + if (!(handlerName in Gestures)) + throw new Error( + `react-native-gesture-handler: ${handlerName} is not supported on macos.` + ); + const GestureClass = Gestures[handlerName]; + NodeManager.createGestureHandler(handlerTag, new GestureClass()); + this.updateGestureHandler(handlerTag, config); + }, + attachGestureHandler( + handlerTag: number, + newView: number, + _actionType: ActionType, + propsRef: React.RefObject + ) { + NodeManager.getHandler(handlerTag).setView(newView, propsRef); + }, + updateGestureHandler(handlerTag: number, newConfig: any) { + NodeManager.getHandler(handlerTag).updateGestureConfig(newConfig); + }, + getGestureHandlerNode(handlerTag: number) { + return NodeManager.getHandler(handlerTag); + }, + dropGestureHandler(handlerTag: number) { + NodeManager.dropGestureHandler(handlerTag); + }, + // eslint-disable-next-line @typescript-eslint/no-empty-function + flushOperations() {}, +}; diff --git a/src/RNGestureHandlerModule.ts b/src/RNGestureHandlerModule.ts index d27e367e45..73052bc764 100644 --- a/src/RNGestureHandlerModule.ts +++ b/src/RNGestureHandlerModule.ts @@ -16,6 +16,12 @@ if (RNGestureHandlerModule == null) { ); } +if (RNGestureHandlerModule.flushOperations === undefined) { + RNGestureHandlerModule.flushOperations = () => { + // NO-OP if not defined + }; +} + export type RNGestureHandlerModuleProps = { handleSetJSResponder: (tag: number, blockNativeResponder: boolean) => void; handleClearJSResponder: () => void; @@ -35,6 +41,7 @@ export type RNGestureHandlerModuleProps = { ) => void; dropGestureHandler: (handlerTag: number) => void; install: () => void; + flushOperations: () => void; }; export default RNGestureHandlerModule as RNGestureHandlerModuleProps; diff --git a/src/RNGestureHandlerModule.web.ts b/src/RNGestureHandlerModule.web.ts index 1187fdffdf..df758d6679 100644 --- a/src/RNGestureHandlerModule.web.ts +++ b/src/RNGestureHandlerModule.web.ts @@ -59,4 +59,6 @@ export default { dropGestureHandler(handlerTag: number) { NodeManager.dropGestureHandler(handlerTag); }, + // eslint-disable-next-line @typescript-eslint/no-empty-function + flushOperations() {}, }; diff --git a/src/EventType.ts b/src/TouchEventType.ts similarity index 67% rename from src/EventType.ts rename to src/TouchEventType.ts index 17813a75df..99bc1ba3b2 100644 --- a/src/EventType.ts +++ b/src/TouchEventType.ts @@ -1,4 +1,4 @@ -export const EventType = { +export const TouchEventType = { UNDETERMINED: 0, TOUCHES_DOWN: 1, TOUCHES_MOVE: 2, @@ -7,4 +7,4 @@ export const EventType = { } as const; // eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; it can be used as a type and as a value -export type EventType = typeof EventType[keyof typeof EventType]; +export type TouchEventType = typeof TouchEventType[keyof typeof TouchEventType]; diff --git a/src/components/DrawerLayout.tsx b/src/components/DrawerLayout.tsx index 5a1a8277b2..985d2ec0ab 100644 --- a/src/components/DrawerLayout.tsx +++ b/src/components/DrawerLayout.tsx @@ -148,6 +148,11 @@ export interface DrawerLayoutProps { onDrawerSlide?: (position: number) => void; onGestureRef?: (ref: PanGestureHandler) => void; + + // implicit `children` prop has been removed in @types/react^18.0.0 + children?: + | React.ReactNode + | ((openValue?: Animated.AnimatedInterpolation) => React.ReactNode); } export type DrawerLayoutState = { @@ -155,6 +160,8 @@ export type DrawerLayoutState = { touchX: Animated.Value; drawerTranslation: Animated.Value; containerWidth: number; + drawerState: DrawerState; + drawerOpened: boolean; }; export type DrawerMovementOption = { @@ -189,6 +196,8 @@ export default class DrawerLayout extends Component< touchX, drawerTranslation, containerWidth: 0, + drawerState: IDLE, + drawerOpened: false, }; this.updateAnimatedEvent(props, this.state); @@ -349,6 +358,7 @@ export default class DrawerLayout extends Component< this.handleRelease({ nativeEvent }); } else if (nativeEvent.state === State.ACTIVE) { this.emitStateChanged(DRAGGING, false); + this.setState({ drawerState: DRAGGING }); if (this.props.keyboardDismissMode === 'on-drag') { Keyboard.dismiss(); } @@ -464,6 +474,7 @@ export default class DrawerLayout extends Component< const willShow = toValue !== 0; this.updateShowing(willShow); this.emitStateChanged(SETTLING, willShow); + this.setState({ drawerState: SETTLING }); if (this.props.hideStatusBar) { StatusBar.setHidden(willShow, this.props.statusBarAnimation || 'slide'); } @@ -476,6 +487,12 @@ export default class DrawerLayout extends Component< }).start(({ finished }) => { if (finished) { this.emitStateChanged(IDLE, willShow); + this.setState({ drawerOpened: willShow }); + if (this.state.drawerState !== DRAGGING) { + // it's possilbe that user started drag while the drawer + // was settling, don't override state in this case + this.setState({ drawerState: IDLE }); + } if (willShow) { this.props.onDrawerOpen?.(); } else { @@ -516,11 +533,14 @@ export default class DrawerLayout extends Component< private renderOverlay = () => { /* Overlay styles */ invariant(this.openValue, 'should be set'); - const overlayOpacity = this.openValue.interpolate({ - inputRange: [0, 1], - outputRange: [0, 1], - extrapolate: 'clamp', - }); + let overlayOpacity; + + if (this.state.drawerState !== IDLE) { + overlayOpacity = this.openValue; + } else { + overlayOpacity = this.state.drawerOpened ? 1 : 0; + } + const dynamicOverlayStyles = { opacity: overlayOpacity, backgroundColor: this.props.overlayColor, @@ -579,11 +599,15 @@ export default class DrawerLayout extends Component< let drawerTranslateX: number | Animated.AnimatedInterpolation = 0; if (drawerSlide) { const closedDrawerOffset = fromLeft ? -drawerWidth! : drawerWidth!; - drawerTranslateX = openValue.interpolate({ - inputRange: [0, 1], - outputRange: [closedDrawerOffset, 0], - extrapolate: 'clamp', - }); + if (this.state.drawerState !== IDLE) { + drawerTranslateX = openValue.interpolate({ + inputRange: [0, 1], + outputRange: [closedDrawerOffset, 0], + extrapolate: 'clamp', + }); + } else { + drawerTranslateX = this.state.drawerOpened ? 0 : closedDrawerOffset; + } } const drawerStyles: { transform: { translateX: number | Animated.AnimatedInterpolation }[]; diff --git a/src/components/GestureButtons.tsx b/src/components/GestureButtons.tsx index 09329cc466..b4748f4ffc 100644 --- a/src/components/GestureButtons.tsx +++ b/src/components/GestureButtons.tsx @@ -35,6 +35,34 @@ export interface RawButtonProps extends NativeViewGestureHandlerProps { * Defines color of native ripple animation used since API level 21. */ rippleColor?: any; // it was present in BaseButtonProps before but is used here in code + + /** + * Android only. + * + * Defines radius of native ripple animation used since API level 21. + */ + rippleRadius?: number | null; + + /** + * Android only. + * + * Set this to true if you want the ripple animation to render outside the view bounds. + */ + borderless?: boolean; + + /** + * Android only. + * + * Defines whether the ripple animation should be drawn on the foreground of the view. + */ + foreground?: boolean; + + /** + * Android only. + * + * Set this to true if you don't want the system to play sound when the button is pressed. + */ + touchSoundDisabled?: boolean; } export interface BaseButtonProps extends RawButtonProps { @@ -69,13 +97,6 @@ export interface RectButtonProps extends BaseButtonProps { } export interface BorderlessButtonProps extends BaseButtonProps { - /** - * Android only. - * - * Set this to false if you want the ripple animation to render only within view bounds. - */ - borderless?: boolean; - /** * iOS only. * diff --git a/src/components/GestureHandlerButton.tsx b/src/components/GestureHandlerButton.tsx index 46f5a67f27..aab837ea15 100644 --- a/src/components/GestureHandlerButton.tsx +++ b/src/components/GestureHandlerButton.tsx @@ -1,9 +1,9 @@ /* eslint-disable @typescript-eslint/no-var-requires */ import { HostComponent, requireNativeComponent } from 'react-native'; import { RawButtonProps } from './GestureButtons'; -import { isFabric } from '../utils'; +import { shouldUseCodegenNativeComponent } from '../utils'; -const RNGestureHandlerButtonNativeComponent = isFabric() +const RNGestureHandlerButtonNativeComponent = shouldUseCodegenNativeComponent() ? require('../fabric/RNGestureHandlerButtonNativeComponent').default : requireNativeComponent('RNGestureHandlerButton'); diff --git a/src/components/touchables/GenericTouchable.tsx b/src/components/touchables/GenericTouchable.tsx index b24772479c..2a08b9c13d 100644 --- a/src/components/touchables/GenericTouchable.tsx +++ b/src/components/touchables/GenericTouchable.tsx @@ -258,6 +258,8 @@ export default class GenericTouchable extends Component< // TODO: check if changed to no 's' correctly, also removed 2 props that are no longer available: `accessibilityComponentType` and `accessibilityTraits`, // would be good to check if it is ok for sure, see: https://github.com/facebook/react-native/issues/24016 accessibilityState: this.props.accessibilityState, + accessibilityActions: this.props.accessibilityActions, + onAccessibilityAction: this.props.onAccessibilityAction, nativeID: this.props.nativeID, onLayout: this.props.onLayout, hitSlop: this.props.hitSlop, @@ -275,6 +277,7 @@ export default class GenericTouchable extends Component< shouldActivateOnStart={this.props.shouldActivateOnStart} disallowInterruption={this.props.disallowInterruption} testID={this.props.testID} + touchSoundDisabled={this.props.touchSoundDisabled ?? false} {...this.props.extraButtonProps}> {this.props.children} diff --git a/src/fabric/RNGestureHandlerButtonNativeComponent.js b/src/fabric/RNGestureHandlerButtonNativeComponent.js deleted file mode 100644 index a024100144..0000000000 --- a/src/fabric/RNGestureHandlerButtonNativeComponent.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * @flow strict-local - * @format - */ -/* eslint-disable */ -import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent'; -import type { HostComponent } from 'react-native'; -import type { ColorValue } from 'react-native/Libraries/StyleSheet/StyleSheet'; -import type { ViewProps } from 'react-native/Libraries/Components/View/ViewPropTypes'; -import type { Int32 } from 'react-native/Libraries/Types/CodegenTypes'; - -type NativeProps = $ReadOnly<{| - ...ViewProps, // This is required. - exclusive: boolean, - foreground: boolean, - borderless: boolean, - enabled: boolean, - rippleColor: ColorValue, - rippleRadius: Int32, -|}>; - -type ComponentType = HostComponent; - -export default (codegenNativeComponent( - 'RNGestureHandlerButton', - {} -): ComponentType); diff --git a/src/fabric/RNGestureHandlerButtonNativeComponent.ts b/src/fabric/RNGestureHandlerButtonNativeComponent.ts new file mode 100644 index 0000000000..1e677ef4a0 --- /dev/null +++ b/src/fabric/RNGestureHandlerButtonNativeComponent.ts @@ -0,0 +1,28 @@ +// @ts-ignore TODO: remove once there is a .d.ts file with definitions +import codegenNativeComponentUntyped from 'react-native/Libraries/Utilities/codegenNativeComponent'; +// @ts-ignore TODO: remove once there is a .d.ts file with definitions +import type { + Int32, + WithDefault, + // @ts-ignore TODO: remove once there is a .d.ts file with definitions +} from 'react-native/Libraries/Types/CodegenTypes'; +import type { ViewProps, HostComponent } from 'react-native'; +// @ts-ignore TODO: remove once there is a .d.ts file with definitions +import type { ColorValue } from 'react-native/Libraries/StyleSheet/StyleSheet'; + +// eslint-disable-next-line @typescript-eslint/ban-types +const codegenNativeComponent = codegenNativeComponentUntyped as ( + name: string +) => HostComponent; + +interface NativeProps extends ViewProps { + exclusive?: WithDefault; + foreground?: boolean; + borderless?: boolean; + enabled?: WithDefault; + rippleColor?: ColorValue; + rippleRadius?: Int32; + touchSoundDisabled?: WithDefault; +} + +export default codegenNativeComponent('RNGestureHandlerButton'); diff --git a/src/fabric/RNGestureHandlerRootViewNativeComponent.js b/src/fabric/RNGestureHandlerRootViewNativeComponent.js deleted file mode 100644 index b336a4fafc..0000000000 --- a/src/fabric/RNGestureHandlerRootViewNativeComponent.js +++ /dev/null @@ -1,19 +0,0 @@ -/** - * @flow strict-local - * @format - */ -/* eslint-disable */ -import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent'; -import type { HostComponent } from 'react-native'; -import type { ViewProps } from 'react-native/Libraries/Components/View/ViewPropTypes'; - -type NativeProps = $ReadOnly<{| - ...ViewProps, // This is required. -|}>; - -type ComponentType = HostComponent; - -export default (codegenNativeComponent( - 'RNGestureHandlerRootView', - {} -): ComponentType); diff --git a/src/fabric/RNGestureHandlerRootViewNativeComponent.ts b/src/fabric/RNGestureHandlerRootViewNativeComponent.ts new file mode 100644 index 0000000000..5b17982785 --- /dev/null +++ b/src/fabric/RNGestureHandlerRootViewNativeComponent.ts @@ -0,0 +1,12 @@ +// @ts-ignore TODO: remove once there is a .d.ts file with definitions +import codegenNativeComponentUntyped from 'react-native/Libraries/Utilities/codegenNativeComponent'; +import type { ViewProps, HostComponent } from 'react-native'; + +// eslint-disable-next-line @typescript-eslint/ban-types +const codegenNativeComponent = codegenNativeComponentUntyped as ( + name: string +) => HostComponent; + +interface NativeProps extends ViewProps {} + +export default codegenNativeComponent('RNGestureHandlerRootView'); diff --git a/src/getShadowNodeFromRef.ts b/src/getShadowNodeFromRef.ts index 1c0ef44d28..ad2aeebe80 100644 --- a/src/getShadowNodeFromRef.ts +++ b/src/getShadowNodeFromRef.ts @@ -2,17 +2,20 @@ // attached view may get flattened on Fabric. This implementation causes errors // on web due to the static resolution of `require` statements by webpack breaking // the conditional importing. Solved by making .web file. -let findHostInstance_DEPRECATED = (_ref: any) => null; - -try { - // eslint-disable-next-line @typescript-eslint/no-var-requires - findHostInstance_DEPRECATED = require('react-native/Libraries/Renderer/shims/ReactFabric') - .findHostInstance_DEPRECATED; -} catch (e) { - // do nothing -} +let findHostInstance_DEPRECATED: (ref: any) => void; export function getShadowNodeFromRef(ref: any) { + // load findHostInstance_DEPRECATED lazily because it may not be available before render + if (findHostInstance_DEPRECATED === undefined) { + try { + // eslint-disable-next-line @typescript-eslint/no-var-requires + findHostInstance_DEPRECATED = require('react-native/Libraries/Renderer/shims/ReactFabric') + .findHostInstance_DEPRECATED; + } catch (e) { + findHostInstance_DEPRECATED = (_ref: any) => null; + } + } + // @ts-ignore Fabric return findHostInstance_DEPRECATED(ref)._internalInstanceHandle.stateNode .node; diff --git a/src/handlers/ForceTouchGestureHandler.ts b/src/handlers/ForceTouchGestureHandler.ts index a24561affe..0de04e9209 100644 --- a/src/handlers/ForceTouchGestureHandler.ts +++ b/src/handlers/ForceTouchGestureHandler.ts @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { PropsWithChildren } from 'react'; import { tagMessage } from '../utils'; import PlatformConstants from '../PlatformConstants'; import createHandler from './createHandler'; @@ -13,7 +13,8 @@ export const forceTouchGestureHandlerProps = [ 'feedbackOnActivation', ] as const; -class ForceTouchFallback extends React.Component { +// implicit `children` prop has been removed in @types/react^18.0.0 +class ForceTouchFallback extends React.Component> { static forceTouchAvailable = false; componentDidMount() { console.warn( diff --git a/src/handlers/PanGestureHandler.ts b/src/handlers/PanGestureHandler.ts index 3fd5e3eb50..c596535f0e 100644 --- a/src/handlers/PanGestureHandler.ts +++ b/src/handlers/PanGestureHandler.ts @@ -17,6 +17,7 @@ export const panGestureHandlerProps = [ 'maxPointers', 'avgTouches', 'enableTrackpadTwoFingerGesture', + 'activateAfterLongPress', ] as const; export const panGestureHandlerCustomNativeProps = [ @@ -124,6 +125,7 @@ interface CommonPanProperties { minVelocity?: number; minVelocityX?: number; minVelocityY?: number; + activateAfterLongPress?: number; } export interface PanGestureConfig extends CommonPanProperties { diff --git a/src/handlers/PressabilityDebugView.tsx b/src/handlers/PressabilityDebugView.tsx new file mode 100644 index 0000000000..44f8bcdbcd --- /dev/null +++ b/src/handlers/PressabilityDebugView.tsx @@ -0,0 +1,2 @@ +// @ts-ignore it's not exported so we need to import it from path +export { PressabilityDebugView } from 'react-native/Libraries/Pressability/PressabilityDebug'; diff --git a/src/handlers/PressabilityDebugView.web.tsx b/src/handlers/PressabilityDebugView.web.tsx new file mode 100644 index 0000000000..73e56c2bc4 --- /dev/null +++ b/src/handlers/PressabilityDebugView.web.tsx @@ -0,0 +1,4 @@ +// PressabilityDebugView is not implemented in react-native-web +export function PressabilityDebugView() { + return null; +} diff --git a/src/handlers/createHandler.ts b/src/handlers/createHandler.tsx similarity index 91% rename from src/handlers/createHandler.ts rename to src/handlers/createHandler.tsx index 5f374bd184..d3a7890ec8 100644 --- a/src/handlers/createHandler.ts +++ b/src/handlers/createHandler.tsx @@ -1,7 +1,6 @@ import * as React from 'react'; import { Platform, - Touchable, UIManager, DeviceEventEmitter, EmitterSubscription, @@ -23,10 +22,12 @@ import { GestureEvent, HandlerStateChangeEvent, findNodeHandle, + scheduleFlushOperations, } from './gestureHandlerCommon'; import { ValueOf } from '../typeUtils'; -import { isFabric, isJestEnv, tagMessage } from '../utils'; +import { isFabric, isJestEnv } from '../utils'; import { ActionType } from '../ActionType'; +import { PressabilityDebugView } from './PressabilityDebugView'; const UIManagerAny = UIManager as any; @@ -147,17 +148,7 @@ type InternalEventHandlers = { onGestureHandlerStateChange?: (event: any) => void; }; -let showedRngh2Notice = false; -function showRngh2NoticeIfNeeded() { - if (!showedRngh2Notice) { - console.warn( - tagMessage( - "Seems like you're using an old API with gesture components, check out new Gestures system!" - ) - ); - showedRngh2Notice = true; - } -} +const UNRESOLVED_REFS_RETRY_LIMIT = 1; // TODO(TS) - make sure that BaseGestureHandlerProps doesn't need other generic parameter to work with custom properties. export default function createHandler< @@ -199,9 +190,6 @@ export default function createHandler< } handlerIDToTag[props.id] = this.handlerTag; } - if (__DEV__ && !isJestEnv()) { - showRngh2NoticeIfNeeded(); - } } componentDidMount() { @@ -212,7 +200,7 @@ export default function createHandler< 'toggleElementInspector', () => { this.setState((_) => ({ allowTouches })); - this.update(); + this.update(UNRESOLVED_REFS_RETRY_LIMIT); } ); } @@ -225,7 +213,7 @@ export default function createHandler< // be resolved by then. this.updateEnqueued = setImmediate(() => { this.updateEnqueued = null; - this.update(); + this.update(UNRESOLVED_REFS_RETRY_LIMIT); }); } @@ -245,12 +233,13 @@ export default function createHandler< if (this.viewTag !== viewTag) { this.attachGestureHandler(viewTag as number); // TODO(TS) - check interaction between _viewTag & findNodeHandle } - this.update(); + this.update(UNRESOLVED_REFS_RETRY_LIMIT); } componentWillUnmount() { this.inspectorToggleListener?.remove(); RNGestureHandlerModule.dropGestureHandler(this.handlerTag); + scheduleFlushOperations(); if (this.updateEnqueued) { clearImmediate(this.updateEnqueued); } @@ -361,6 +350,8 @@ export default function createHandler< actionType ); } + + scheduleFlushOperations(); }; private updateGestureHandler = ( @@ -369,16 +360,29 @@ export default function createHandler< this.config = newConfig; RNGestureHandlerModule.updateGestureHandler(this.handlerTag, newConfig); + scheduleFlushOperations(); }; - private update() { - const newConfig = filterConfig( - transformProps ? transformProps(this.props) : this.props, - [...allowedProps, ...customNativeProps], - config - ); - if (!deepEqual(this.config, newConfig)) { - this.updateGestureHandler(newConfig); + private update(remainingTries: number) { + const props: HandlerProps = this.props; + + // When ref is set via a function i.e. `ref={(r) => refObject.current = r}` instead of + // `ref={refObject}` it's possible that it won't be resolved in time. Seems like trying + // again is easy enough fix. + if (hasUnresolvedRefs(props) && remainingTries > 0) { + this.updateEnqueued = setImmediate(() => { + this.updateEnqueued = null; + this.update(remainingTries - 1); + }); + } else { + const newConfig = filterConfig( + transformProps ? transformProps(this.props) : this.props, + [...allowedProps, ...customNativeProps], + config + ); + if (!deepEqual(this.config, newConfig)) { + this.updateGestureHandler(newConfig); + } } } @@ -468,7 +472,7 @@ export default function createHandler< const child: any = React.Children.only(this.props.children); let grandChildren = child.props.children; if ( - Touchable.TOUCH_TARGET_DEBUG && + __DEV__ && child.type && (child.type === 'RNGestureHandlerButton' || child.type.name === 'View' || @@ -476,10 +480,11 @@ export default function createHandler< ) { grandChildren = React.Children.toArray(grandChildren); grandChildren.push( - Touchable.renderDebugView({ - color: 'mediumspringgreen', - hitSlop: child.props.hitSlop, - }) + ); } diff --git a/src/handlers/gestureHandlerCommon.ts b/src/handlers/gestureHandlerCommon.ts index d2ccabc554..b6b9d4b8f0 100644 --- a/src/handlers/gestureHandlerCommon.ts +++ b/src/handlers/gestureHandlerCommon.ts @@ -6,16 +6,18 @@ import * as React from 'react'; import { Platform, findNodeHandle as findNodeHandleRN } from 'react-native'; import { State } from '../State'; -import { EventType } from '../EventType'; +import { TouchEventType } from '../TouchEventType'; import { ValueOf } from '../typeUtils'; import { handlerIDToTag } from './handlersRegistry'; import { toArray } from '../utils'; +import RNGestureHandlerModule from '../RNGestureHandlerModule'; const commonProps = [ 'id', 'enabled', 'shouldCancelWhenOutside', 'hitSlop', + 'cancelsTouchesInView', ] as const; const componentInteractionProps = ['waitFor', 'simultaneousHandlers'] as const; @@ -83,7 +85,7 @@ export type GestureTouchEvent = { handlerTag: number; numberOfTouches: number; state: ValueOf; - eventType: EventType; + eventType: TouchEventType; allTouches: TouchData[]; changedTouches: TouchData[]; }; @@ -111,6 +113,7 @@ export type BaseGestureHandlerProps< waitFor?: React.Ref | React.Ref[]; simultaneousHandlers?: React.Ref | React.Ref[]; testID?: string; + cancelsTouchesInView?: boolean; // TODO(TS) - fix event types onBegan?: (event: HandlerStateChangeEvent) => void; onFailed?: (event: HandlerStateChangeEvent) => void; @@ -123,6 +126,8 @@ export type BaseGestureHandlerProps< onHandlerStateChange?: ( event: HandlerStateChangeEvent ) => void; + // implicit `children` prop has been removed in @types/react^18.0.0 + children?: React.ReactNode; }; function isConfigParam(param: unknown, name: string) { @@ -180,3 +185,17 @@ export function findNodeHandle( if (Platform.OS === 'web') return node; return findNodeHandleRN(node); } + +let scheduledFlushOperationsId: ReturnType< + typeof requestAnimationFrame +> | null = null; + +export function scheduleFlushOperations() { + if (scheduledFlushOperationsId === null) { + scheduledFlushOperationsId = requestAnimationFrame(() => { + RNGestureHandlerModule.flushOperations(); + + scheduledFlushOperationsId = null; + }); + } +} diff --git a/src/handlers/gestures/GestureDetector.tsx b/src/handlers/gestures/GestureDetector.tsx index c37409c649..3a4c57339d 100644 --- a/src/handlers/gestures/GestureDetector.tsx +++ b/src/handlers/gestures/GestureDetector.tsx @@ -16,6 +16,8 @@ import { GestureTouchEvent, GestureUpdateEvent, GestureStateChangeEvent, + HandlerStateChangeEvent, + scheduleFlushOperations, } from '../gestureHandlerCommon'; import { GestureStateManager, @@ -30,15 +32,18 @@ import { } from '../PanGestureHandler'; import { tapGestureHandlerProps } from '../TapGestureHandler'; import { State } from '../../State'; -import { EventType } from '../../EventType'; +import { TouchEventType } from '../../TouchEventType'; import { ComposedGesture } from './gestureComposition'; import { ActionType } from '../../ActionType'; import { isFabric, tagMessage } from '../../utils'; import { getShadowNodeFromRef } from '../../getShadowNodeFromRef'; +import { Platform } from 'react-native'; +import type RNGestureHandlerModuleWeb from '../../RNGestureHandlerModule.web'; +import { onGestureHandlerEvent } from './eventReceiver'; -declare global { - function isFormsStackingContext(node: unknown): boolean | null; // JSI function -} +declare const global: { + isFormsStackingContext: (node: unknown) => boolean | null; // JSI function +}; const ALLOWED_PROPS = [ ...baseGestureHandlerWithMonitorProps, @@ -84,6 +89,8 @@ function dropHandlers(preparedGesture: GestureConfigReference) { unregisterHandler(handler.handlerTag, handler.config.testId); } + + scheduleFlushOperations(); } function checkGestureCallbacksForWorklets(gesture: GestureType) { @@ -107,11 +114,16 @@ function checkGestureCallbacksForWorklets(gesture: GestureType) { } } +interface WebEventHandler { + onGestureHandlerEvent: (event: HandlerStateChangeEvent) => void; +} + interface AttachHandlersConfig { preparedGesture: GestureConfigReference; gestureConfig: ComposedGesture | GestureType | undefined; gesture: GestureType[]; viewTag: number; + webEventHandlersRef: React.RefObject; } function attachHandlers({ @@ -119,6 +131,7 @@ function attachHandlers({ gestureConfig, gesture, viewTag, + webEventHandlersRef, }: AttachHandlersConfig) { if (!preparedGesture.firstExecution) { gestureConfig?.initialize(); @@ -142,10 +155,12 @@ function attachHandlers({ ); registerHandler(handler.handlerTag, handler, handler.config.testId); + } - // use setImmediate to extract handlerTags, because all refs should be initialized - // when it's ran - setImmediate(() => { + // use setImmediate to extract handlerTags, because all refs should be initialized + // when it's ran + setImmediate(() => { + for (const handler of gesture) { let requireToFail: number[] = []; if (handler.config.requireToFail) { requireToFail = extractValidHandlerTags(handler.config.requireToFail); @@ -165,8 +180,11 @@ function attachHandlers({ waitFor: requireToFail, }) ); - }); - } + } + + scheduleFlushOperations(); + }); + preparedGesture.config = gesture; for (const gesture of preparedGesture.config) { @@ -174,11 +192,20 @@ function attachHandlers({ ? ActionType.REANIMATED_WORKLET : ActionType.JS_FUNCTION_NEW_API; - RNGestureHandlerModule.attachGestureHandler( - gesture.handlerTag, - viewTag, - actionType - ); + if (Platform.OS === 'web') { + (RNGestureHandlerModule.attachGestureHandler as typeof RNGestureHandlerModuleWeb.attachGestureHandler)( + gesture.handlerTag, + viewTag, + ActionType.JS_FUNCTION_OLD_API, // ignored on web + webEventHandlersRef + ); + } else { + RNGestureHandlerModule.attachGestureHandler( + gesture.handlerTag, + viewTag, + actionType + ); + } } if (preparedGesture.animatedHandlers) { @@ -241,12 +268,37 @@ function updateHandlers( } if (preparedGesture.animatedHandlers) { - preparedGesture.animatedHandlers.value = (preparedGesture.config + const previousHandlersValue = + preparedGesture.animatedHandlers.value ?? []; + const newHandlersValue = (preparedGesture.config .filter((g) => g.shouldUseReanimated) // ignore gestures that shouldn't run on UI .map((g) => g.handlers) as unknown) as HandlerCallbacks< Record >[]; + + // if amount of gesture configs changes, we need to update the callbacks in shared value + let shouldUpdateSharedValue = + previousHandlersValue.length !== newHandlersValue.length; + + if (!shouldUpdateSharedValue) { + // if the amount is the same, we need to check if any of the configs inside has changed + for (let i = 0; i < newHandlersValue.length; i++) { + if ( + // we can use the `gestureId` prop as it's unique for every config instance + newHandlersValue[i].gestureId !== previousHandlersValue[i].gestureId + ) { + shouldUpdateSharedValue = true; + break; + } + } + } + + if (shouldUpdateSharedValue) { + preparedGesture.animatedHandlers.value = newHandlersValue; + } } + + scheduleFlushOperations(); }); } @@ -270,88 +322,90 @@ function needsToReattach( return false; } -function useAnimatedGesture( - preparedGesture: GestureConfigReference, - needsRebuild: boolean -) { - if (!Reanimated) { - return; - } +function isStateChangeEvent( + event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent +): event is GestureStateChangeEvent { + 'worklet'; + // @ts-ignore Yes, the oldState prop is missing on GestureTouchEvent, that's the point + return event.oldState != null; +} - function isStateChangeEvent( - event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent - ): event is GestureStateChangeEvent { - 'worklet'; - // @ts-ignore Yes, the oldState prop is missing on GestureTouchEvent, that's the point - return event.oldState != null; - } +function isTouchEvent( + event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent +): event is GestureTouchEvent { + 'worklet'; + return event.eventType != null; +} - function isTouchEvent( - event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent - ): event is GestureTouchEvent { - 'worklet'; - return event.eventType != null; +function getHandler( + type: CALLBACK_TYPE, + gesture: HandlerCallbacks> +) { + 'worklet'; + switch (type) { + case CALLBACK_TYPE.BEGAN: + return gesture.onBegin; + case CALLBACK_TYPE.START: + return gesture.onStart; + case CALLBACK_TYPE.UPDATE: + return gesture.onUpdate; + case CALLBACK_TYPE.CHANGE: + return gesture.onChange; + case CALLBACK_TYPE.END: + return gesture.onEnd; + case CALLBACK_TYPE.FINALIZE: + return gesture.onFinalize; + case CALLBACK_TYPE.TOUCHES_DOWN: + return gesture.onTouchesDown; + case CALLBACK_TYPE.TOUCHES_MOVE: + return gesture.onTouchesMove; + case CALLBACK_TYPE.TOUCHES_UP: + return gesture.onTouchesUp; + case CALLBACK_TYPE.TOUCHES_CANCELLED: + return gesture.onTouchesCancelled; } +} - function getHandler( - type: CALLBACK_TYPE, - gesture: HandlerCallbacks> - ) { - 'worklet'; - switch (type) { - case CALLBACK_TYPE.BEGAN: - return gesture.onBegin; - case CALLBACK_TYPE.START: - return gesture.onStart; - case CALLBACK_TYPE.UPDATE: - return gesture.onUpdate; - case CALLBACK_TYPE.CHANGE: - return gesture.onChange; - case CALLBACK_TYPE.END: - return gesture.onEnd; - case CALLBACK_TYPE.FINALIZE: - return gesture.onFinalize; - case CALLBACK_TYPE.TOUCHES_DOWN: - return gesture.onTouchesDown; - case CALLBACK_TYPE.TOUCHES_MOVE: - return gesture.onTouchesMove; - case CALLBACK_TYPE.TOUCHES_UP: - return gesture.onTouchesUp; - case CALLBACK_TYPE.TOUCHES_CANCELLED: - return gesture.onTouchesCancelled; - } +function touchEventTypeToCallbackType( + eventType: TouchEventType +): CALLBACK_TYPE { + 'worklet'; + switch (eventType) { + case TouchEventType.TOUCHES_DOWN: + return CALLBACK_TYPE.TOUCHES_DOWN; + case TouchEventType.TOUCHES_MOVE: + return CALLBACK_TYPE.TOUCHES_MOVE; + case TouchEventType.TOUCHES_UP: + return CALLBACK_TYPE.TOUCHES_UP; + case TouchEventType.TOUCHES_CANCELLED: + return CALLBACK_TYPE.TOUCHES_CANCELLED; } + return CALLBACK_TYPE.UNDEFINED; +} - function touchEventTypeToCallbackType(eventType: EventType): CALLBACK_TYPE { - 'worklet'; - switch (eventType) { - case EventType.TOUCHES_DOWN: - return CALLBACK_TYPE.TOUCHES_DOWN; - case EventType.TOUCHES_MOVE: - return CALLBACK_TYPE.TOUCHES_MOVE; - case EventType.TOUCHES_UP: - return CALLBACK_TYPE.TOUCHES_UP; - case EventType.TOUCHES_CANCELLED: - return CALLBACK_TYPE.TOUCHES_CANCELLED; - } - return CALLBACK_TYPE.UNDEFINED; +function runWorklet( + type: CALLBACK_TYPE, + gesture: HandlerCallbacks>, + event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent, + ...args: any[] +) { + 'worklet'; + const handler = getHandler(type, gesture); + if (gesture.isWorklet[type]) { + // @ts-ignore Logic below makes sure the correct event is send to the + // correct handler. + handler?.(event, ...args); + } else if (handler) { + console.warn(tagMessage('Animated gesture callback must be a worklet')); } +} - function runWorklet( - type: CALLBACK_TYPE, - gesture: HandlerCallbacks>, - event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent, - ...args: any[] - ) { - 'worklet'; - const handler = getHandler(type, gesture); - if (gesture.isWorklet[type]) { - // @ts-ignore Logic below makes sure the correct event is send to the - // correct handler. - handler?.(event, ...args); - } else if (handler) { - console.warn(tagMessage('Animated gesture callback must be a worklet')); - } +function useAnimatedGesture( + preparedGesture: GestureConfigReference, + needsRebuild: boolean +) { + if (!Reanimated) { + return; } // Hooks are called conditionally, but the condition is whether the @@ -418,7 +472,7 @@ function useAnimatedGesture( stateControllers[i] = GestureStateManager.create(event.handlerTag); } - if (event.eventType !== EventType.UNDETERMINED) { + if (event.eventType !== TouchEventType.UNDETERMINED) { runWorklet( touchEventTypeToCallbackType(event.eventType), gesture, @@ -459,15 +513,19 @@ function useAnimatedGesture( interface GestureDetectorProps { gesture?: ComposedGesture | GestureType; + children?: React.ReactNode; } -export const GestureDetector: React.FunctionComponent = ( - props -) => { +export const GestureDetector = (props: GestureDetectorProps) => { const gestureConfig = props.gesture; const gesture = gestureConfig?.toGestureArray?.() ?? []; const useReanimatedHook = gesture.some((g) => g.shouldUseReanimated); const viewRef = useRef(null); const firstRenderRef = useRef(true); + const webEventHandlersRef = useRef({ + onGestureHandlerEvent: (e: HandlerStateChangeEvent) => { + onGestureHandlerEvent(e.nativeEvent); + }, + }); const preparedGesture = React.useRef({ config: gesture, @@ -508,6 +566,7 @@ export const GestureDetector: React.FunctionComponent = ( gestureConfig, gesture, viewTag, + webEventHandlersRef, }); return () => { @@ -526,6 +585,7 @@ export const GestureDetector: React.FunctionComponent = ( gestureConfig, gesture, viewTag, + webEventHandlersRef, }); } else { updateHandlers(preparedGesture, gestureConfig, gesture); @@ -543,17 +603,12 @@ export const GestureDetector: React.FunctionComponent = ( if (isFabric()) { const node = getShadowNodeFromRef(ref); if (global.isFormsStackingContext(node) === false) { - setImmediate(() => { - // For some weird reason, console.error on iOS delays - // the execution of RNGestureHandlerModule.attachGestureHandler, - // so that's why we use setImmediate here. - console.error( - tagMessage( - 'GestureDetector has received a child that may get view-flattened. ' + - '\nTo prevent it from misbehaving you need to wrap the child with a ``.' - ) - ); - }); + console.error( + tagMessage( + 'GestureDetector has received a child that may get view-flattened. ' + + '\nTo prevent it from misbehaving you need to wrap the child with a ``.' + ) + ); } } } @@ -572,7 +627,11 @@ export const GestureDetector: React.FunctionComponent = ( } }; -class Wrap extends React.Component<{ onGestureHandlerEvent?: unknown }> { +class Wrap extends React.Component<{ + onGestureHandlerEvent?: unknown; + // implicit `children` prop has been removed in @types/react^18.0.0 + children?: React.ReactNode; +}> { render() { // I don't think that fighting with types over such a simple function is worth it // The only thing it does is add 'collapsable: false' to the child component diff --git a/src/handlers/gestures/eventReceiver.ts b/src/handlers/gestures/eventReceiver.ts index 52141b1cb9..aa650105aa 100644 --- a/src/handlers/gestures/eventReceiver.ts +++ b/src/handlers/gestures/eventReceiver.ts @@ -1,6 +1,6 @@ import { DeviceEventEmitter, EmitterSubscription } from 'react-native'; import { State } from '../../State'; -import { EventType } from '../../EventType'; +import { TouchEventType } from '../../TouchEventType'; import { GestureTouchEvent, GestureUpdateEvent, @@ -48,7 +48,7 @@ function isTouchEvent( return event.eventType != null; } -function onGestureHandlerEvent( +export function onGestureHandlerEvent( event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent ) { const handler = findHandler(event.handlerTag) as BaseGesture< @@ -87,16 +87,16 @@ function onGestureHandlerEvent( } } else if (isTouchEvent(event)) { switch (event.eventType) { - case EventType.TOUCHES_DOWN: + case TouchEventType.TOUCHES_DOWN: handler.handlers?.onTouchesDown?.(event, dummyStateManager); break; - case EventType.TOUCHES_MOVE: + case TouchEventType.TOUCHES_MOVE: handler.handlers?.onTouchesMove?.(event, dummyStateManager); break; - case EventType.TOUCHES_UP: + case TouchEventType.TOUCHES_UP: handler.handlers?.onTouchesUp?.(event, dummyStateManager); break; - case EventType.TOUCHES_CANCELLED: + case TouchEventType.TOUCHES_CANCELLED: handler.handlers?.onTouchesCancelled?.(event, dummyStateManager); break; } diff --git a/src/handlers/gestures/gesture.ts b/src/handlers/gestures/gesture.ts index 401c01ae9c..fcfcddc6ce 100644 --- a/src/handlers/gestures/gesture.ts +++ b/src/handlers/gestures/gesture.ts @@ -15,6 +15,7 @@ import { PinchGestureHandlerEventPayload } from '../PinchGestureHandler'; import { RotationGestureHandlerEventPayload } from '../RotationGestureHandler'; import { TapGestureHandlerEventPayload } from '../TapGestureHandler'; import { NativeViewGestureHandlerPayload } from '../NativeViewGestureHandler'; +import { isRemoteDebuggingEnabled } from '../../utils'; export type GestureType = | BaseGesture> @@ -43,6 +44,7 @@ export interface BaseGestureConfig manualActivation?: boolean; runOnJS?: boolean; testId?: string; + cancelsTouchesInView?: boolean; } type TouchEventHandlerType = ( @@ -51,6 +53,7 @@ type TouchEventHandlerType = ( ) => void; export type HandlerCallbacks> = { + gestureId: number; handlerTag: number; onBegin?: (event: GestureStateChangeEvent) => void; onStart?: (event: GestureStateChangeEvent) => void; @@ -113,17 +116,32 @@ export abstract class Gesture { abstract prepare(): void; } +let nextGestureId = 0; export abstract class BaseGesture< EventPayloadT extends Record > extends Gesture { + private gestureId = -1; public handlerTag = -1; public handlerName = ''; public config: BaseGestureConfig = {}; public handlers: HandlerCallbacks = { + gestureId: -1, handlerTag: -1, isWorklet: [], }; + constructor() { + super(); + + // Used to check whether the gesture config has been updated when wrapping it + // with `useMemo`. Since every config will have a unique id, when the dependencies + // don't change, the config won't be recreated and the id will stay the same. + // If the id is different, it means that the config has changed and the gesture + // needs to be updated. + this.gestureId = nextGestureId++; + this.handlers.gestureId = this.gestureId; + } + private addDependency( key: 'simultaneousWith' | 'requireToFail', gesture: Exclude @@ -260,6 +278,11 @@ export abstract class BaseGesture< return this; } + cancelsTouchesInView(value: boolean) { + this.config.cancelsTouchesInView = value; + return this; + } + initialize() { this.handlerTag = getNextHandlerTag(); @@ -278,9 +301,13 @@ export abstract class BaseGesture< prepare() {} get shouldUseReanimated(): boolean { - // use Reanimated when runOnJS isn't set explicitly and all defined callbacks are worklets + // use Reanimated when runOnJS isn't set explicitly, + // and all defined callbacks are worklets, + // and remote debugging is disabled return ( - this.config.runOnJS !== true && !this.handlers.isWorklet.includes(false) + this.config.runOnJS !== true && + !this.handlers.isWorklet.includes(false) && + !isRemoteDebuggingEnabled() ); } } diff --git a/src/handlers/gestures/gestureStateManager.ts b/src/handlers/gestures/gestureStateManager.ts index f25f99e299..35ff56acf0 100644 --- a/src/handlers/gestures/gestureStateManager.ts +++ b/src/handlers/gestures/gestureStateManager.ts @@ -13,14 +13,19 @@ const warningMessage = tagMessage( 'react-native-reanimated is required in order to use synchronous state management' ); +// check if reanimated module is available, but look for useSharedValue as conditional +// require of reanimated can sometimes return content of `utils.ts` file (?) +const REANIMATED_AVAILABLE = Reanimated?.useSharedValue !== undefined; +const setGestureState = Reanimated?.setGestureState; + export const GestureStateManager = { create(handlerTag: number): GestureStateManagerType { 'worklet'; return { begin: () => { 'worklet'; - if (Reanimated) { - Reanimated.setGestureState(handlerTag, State.BEGAN); + if (REANIMATED_AVAILABLE) { + setGestureState(handlerTag, State.BEGAN); } else { console.warn(warningMessage); } @@ -28,8 +33,8 @@ export const GestureStateManager = { activate: () => { 'worklet'; - if (Reanimated) { - Reanimated.setGestureState(handlerTag, State.ACTIVE); + if (REANIMATED_AVAILABLE) { + setGestureState(handlerTag, State.ACTIVE); } else { console.warn(warningMessage); } @@ -37,8 +42,8 @@ export const GestureStateManager = { fail: () => { 'worklet'; - if (Reanimated) { - Reanimated.setGestureState(handlerTag, State.FAILED); + if (REANIMATED_AVAILABLE) { + setGestureState(handlerTag, State.FAILED); } else { console.warn(warningMessage); } @@ -46,8 +51,8 @@ export const GestureStateManager = { end: () => { 'worklet'; - if (Reanimated) { - Reanimated.setGestureState(handlerTag, State.END); + if (REANIMATED_AVAILABLE) { + setGestureState(handlerTag, State.END); } else { console.warn(warningMessage); } diff --git a/src/handlers/gestures/panGesture.ts b/src/handlers/gestures/panGesture.ts index 9946d1ac43..7b782943e8 100644 --- a/src/handlers/gestures/panGesture.ts +++ b/src/handlers/gestures/panGesture.ts @@ -131,6 +131,11 @@ export class PanGesture extends ContinousBaseGesture< return this; } + activateAfterLongPress(duration: number) { + this.config.activateAfterLongPress = duration; + return this; + } + onChange( callback: ( event: GestureUpdateEvent< diff --git a/src/init.ts b/src/init.ts index dafeb97da6..3f753cd72f 100644 --- a/src/init.ts +++ b/src/init.ts @@ -2,10 +2,17 @@ import { startListening } from './handlers/gestures/eventReceiver'; import RNGestureHandlerModule from './RNGestureHandlerModule'; import { isFabric } from './utils'; +let fabricInitialized = false; + export function initialize() { startListening(); +} - if (isFabric()) { +// since isFabric() may give wrong results before the first render, we call this +// method during render of GestureHandlerRootView +export function maybeInitializeFabric() { + if (isFabric() && !fabricInitialized) { RNGestureHandlerModule.install(); + fabricInitialized = true; } } diff --git a/src/mocks.ts b/src/mocks.ts index 4aafcc5bbd..e3cf6e58fd 100644 --- a/src/mocks.ts +++ b/src/mocks.ts @@ -21,6 +21,7 @@ const attachGestureHandler = NOOP; const createGestureHandler = NOOP; const dropGestureHandler = NOOP; const updateGestureHandler = NOOP; +const flushOperations = NOOP; const NativeViewGestureHandler = View; const TapGestureHandler = View; const ForceTouchGestureHandler = View; @@ -59,6 +60,7 @@ export default { createGestureHandler, dropGestureHandler, updateGestureHandler, + flushOperations, // probably can be removed Directions, State, diff --git a/src/utils.ts b/src/utils.ts index e10239a9f0..1577f51712 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,3 +1,7 @@ +import pack from 'react-native/package.json'; + +const rnVersion = pack.version; + export function toArray(object: T | T[]): T[] { if (!Array.isArray(object)) { return [object]; @@ -32,6 +36,7 @@ export function hasProperty(object: object, key: string) { } export function isJestEnv(): boolean { + // @ts-ignore Do not use `@types/node` because it will prioritise Node types over RN types which breaks the types (ex. setTimeout) in React Native projects. return hasProperty(global, 'process') && !!process.env.JEST_WORKER_ID; } @@ -39,7 +44,24 @@ export function tagMessage(msg: string) { return `[react-native-gesture-handler] ${msg}`; } +// helper method to check whether Fabric is enabled, however global.nativeFabricUIManager +// may not be initialized before the first render export function isFabric(): boolean { // @ts-expect-error nativeFabricUIManager is not yet included in the RN types return !!global?.nativeFabricUIManager; } + +export function shouldUseCodegenNativeComponent(): boolean { + const [majorStr, minorStr] = rnVersion.split('.'); + const major = Number.parseInt(majorStr); + const minor = Number.parseInt(minorStr); + + // use codegenNativeComponent starting with RN 0.68 + return minor >= 68 || major > 0; +} + +export function isRemoteDebuggingEnabled(): boolean { + // react-native-reanimated checks if in remote debugging in the same way + // @ts-ignore global is available but node types are not included + return !(global as any).nativeCallSyncHook || (global as any).__REMOTEDEV__; +} diff --git a/src/web/GestureHandler.ts b/src/web/GestureHandler.ts index 1f51e94a48..92132428e6 100644 --- a/src/web/GestureHandler.ts +++ b/src/web/GestureHandler.ts @@ -182,7 +182,13 @@ abstract class GestureHandler { // onHandlerStateChange only handlerTag: this.handlerTag, target: this.ref, - oldState: this.oldState, + // send oldState only when the state was changed, or is different than ACTIVE + // GestureDetector relies on the presence of `oldState` to differentiate between + // update events and state change events + oldState: + state !== this.previousState || state != 4 + ? this.oldState + : undefined, }, timeStamp: Date.now(), }; diff --git a/src/web/utils.ts b/src/web/utils.ts index caf029cb47..8886395db2 100644 --- a/src/web/utils.ts +++ b/src/web/utils.ts @@ -20,5 +20,5 @@ export function fireAfterInterval( method(); return null; } - return setTimeout(() => method(), interval); + return setTimeout(() => method(), interval as number); } diff --git a/tsconfig.json b/tsconfig.json index 1f6d3f3e0a..425a29148f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,7 +4,7 @@ "esModuleInterop": true, "jsx": "react-native", "lib": ["esnext"], - "types": ["node", "jest"], + "types": ["jest"], "module": "esnext", "moduleResolution": "node", "resolveJsonModule": true, diff --git a/yarn.lock b/yarn.lock index 31b71a08a2..539c76416e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3665,19 +3665,15 @@ ansi-fragments@^0.2.1: strip-ansi "^5.0.0" ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== ansi-regex@^4.0.0, ansi-regex@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - -ansi-regex@^5.0.1: +ansi-regex@^5.0.0, ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== @@ -3694,13 +3690,20 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0, ansi-styles@^4.1.0: +ansi-styles@^4.0.0: version "4.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" dependencies: "@types/color-name" "^1.1.1" color-convert "^2.0.1" +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + ansi-styles@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" @@ -3855,17 +3858,18 @@ async-retry@1.3.1: dependencies: retry "0.12.0" -async@0.9.x: - version "0.9.2" - resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" - integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0= - async@^2.4.0: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== dependencies: lodash "^4.17.14" +async@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9" + integrity sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -4047,11 +4051,7 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.1.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - -base64-js@^1.5.1: +base64-js@^1.1.2, base64-js@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -4102,10 +4102,10 @@ bplist-creator@0.1.0: dependencies: stream-buffers "2.2.x" -bplist-parser@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.3.0.tgz#ba50666370f61bbf94881636cd9f7d23c5286090" - integrity sha512-zgmaRvT6AN1JpPPV+S0a1/FAtoxSreYDccZGIqEMSvZl9DMe70mJ7MFzpxa1X+gHVdkToE2haRUHHMiW1OdejA== +bplist-parser@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.3.1.tgz#e1c90b2ca2a9f9474cc72f6862bbf3fee8341fd1" + integrity sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA== dependencies: big-integer "1.6.x" @@ -4117,6 +4117,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" @@ -4322,6 +4329,14 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + changelog-filename-regex@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/changelog-filename-regex/-/changelog-filename-regex-1.1.2.tgz#19e98e38248cff0c1cf3ae3bf51bfb22c48592d6" @@ -4470,6 +4485,7 @@ color-convert@^1.9.0: color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" @@ -4481,6 +4497,7 @@ color-name@1.1.3: color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== colorette@^1.0.7: version "1.2.2" @@ -4993,11 +5010,11 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" ejs@^3.1.5: - version "3.1.6" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.6.tgz#5bfd0a0689743bb5268b3550cceeebbc1702822a" - integrity sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw== + version "3.1.7" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.7.tgz#c544d9c7f715783dd92f0bddcf73a59e6962d006" + integrity sha512-BIar7R6abbUxDA3bfXrO4DSgwo8I+fB5/1zgujl3HLLjwd6+9iOnrT+t3grn2qbk9vOgBubXOFwX2m9axoFaGw== dependencies: - jake "^10.6.1" + jake "^10.8.5" electron-to-chromium@^1.3.723, electron-to-chromium@^1.3.878: version "1.3.886" @@ -5825,11 +5842,11 @@ file-entry-cache@^6.0.0: flat-cache "^3.0.4" filelist@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.2.tgz#80202f21462d4d1c2e214119b1807c1bc0380e5b" - integrity sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ== + version "1.0.3" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.3.tgz#448607750376484932f67ef1b9ff07386b036c83" + integrity sha512-LwjCsruLWQULGYKy7TX0OPtrL9kLpojOFKc5VCTxdFTV7w5zbsgqVKfnkKG7Qgjtq50gKfO56hJv88OfcGb70Q== dependencies: - minimatch "^3.0.4" + minimatch "^5.0.1" fill-range@^4.0.0: version "4.0.0" @@ -6231,6 +6248,7 @@ has-flag@^3.0.0: has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-symbols@^1.0.1: version "1.0.1" @@ -6993,13 +7011,13 @@ istanbul-reports@^3.0.2: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jake@^10.6.1: - version "10.8.2" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.2.tgz#ebc9de8558160a66d82d0eadc6a2e58fbc500a7b" - integrity sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A== +jake@^10.8.5: + version "10.8.5" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" + integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== dependencies: - async "0.9.x" - chalk "^2.4.2" + async "^3.2.3" + chalk "^4.0.2" filelist "^1.0.1" minimatch "^3.0.4" @@ -7747,11 +7765,11 @@ lodash.throttle@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" -lodash@4.17.19, lodash@^4.17.11, lodash@^4.17.14: +lodash@4.17.19: version "4.17.19" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" -lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.5.0, lodash@^4.6.0, lodash@^4.6.1, lodash@^4.7.0: +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.5.0, lodash@^4.6.0, lodash@^4.6.1, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -8266,16 +8284,23 @@ minimatch@^3.0.2: brace-expansion "^1.1.7" minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== mixin-deep@^1.2.0: version "1.3.2" @@ -8927,10 +8952,10 @@ pkg-up@^3.1.0: dependencies: find-up "^3.0.0" -plist@^3.0.1, plist@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.4.tgz#a62df837e3aed2bb3b735899d510c4f186019cbe" - integrity sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg== +plist@^3.0.1, plist@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.5.tgz#2cbeb52d10e3cdccccf0c11a63a85d830970a987" + integrity sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA== dependencies: base64-js "^1.5.1" xmlbuilder "^9.0.7" @@ -9943,13 +9968,13 @@ signal-exit@^3.0.3: integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== simple-plist@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.3.0.tgz#f451997663eafd8ea6bad353a01caf49ef186d43" - integrity sha512-uYWpeGFtZtVt2NhG4AHgpwx323zxD85x42heMJBan1qAiqqozIlaGrwrEt6kRjXWRWIXsuV1VLCvVmZan2B5dg== + version "1.3.1" + resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.3.1.tgz#16e1d8f62c6c9b691b8383127663d834112fb017" + integrity sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw== dependencies: bplist-creator "0.1.0" - bplist-parser "0.3.0" - plist "^3.0.4" + bplist-parser "0.3.1" + plist "^3.0.5" sisteransi@^1.0.4, sisteransi@^1.0.5: version "1.0.5" @@ -10272,7 +10297,7 @@ sudo-prompt@^9.0.0: resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.2.1.tgz#77efb84309c9ca489527a4e749f287e6bdd52afd" integrity sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw== -supports-color@7.1.0, supports-color@^7.1.0: +supports-color@7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" dependencies: @@ -10285,7 +10310,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0: +supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -11005,6 +11030,7 @@ xml-name-validator@^3.0.0: xmlbuilder@^9.0.7: version "9.0.7" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= xmlchars@^2.2.0: version "2.2.0"