() {
- override fun getName() = "IosModalView"
-
- override fun createViewInstance(reactContext: ThemedReactContext): View {
- return View(reactContext)
- }
-
- @ReactProp(name = "color")
- fun setColor(view: View, color: String) {
- view.setBackgroundColor(Color.parseColor(color))
- }
-}
diff --git a/babel.config.js b/babel.config.js
deleted file mode 100644
index f842b77f..00000000
--- a/babel.config.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = {
- presets: ['module:metro-react-native-babel-preset'],
-};
diff --git a/example/.bundle/config b/example/.bundle/config
deleted file mode 100644
index 848943bb..00000000
--- a/example/.bundle/config
+++ /dev/null
@@ -1,2 +0,0 @@
-BUNDLE_PATH: "vendor/bundle"
-BUNDLE_FORCE_RUBY_PLATFORM: 1
diff --git a/example/.node-version b/example/.node-version
deleted file mode 100644
index b6a7d89c..00000000
--- a/example/.node-version
+++ /dev/null
@@ -1 +0,0 @@
-16
diff --git a/example/.ruby-version b/example/.ruby-version
deleted file mode 100644
index a603bb50..00000000
--- a/example/.ruby-version
+++ /dev/null
@@ -1 +0,0 @@
-2.7.5
diff --git a/example/.watchmanconfig b/example/.watchmanconfig
deleted file mode 100644
index 9e26dfee..00000000
--- a/example/.watchmanconfig
+++ /dev/null
@@ -1 +0,0 @@
-{}
\ No newline at end of file
diff --git a/example/Gemfile b/example/Gemfile
deleted file mode 100644
index 5efda89f..00000000
--- a/example/Gemfile
+++ /dev/null
@@ -1,6 +0,0 @@
-source 'https://rubygems.org'
-
-# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
-ruby '2.7.5'
-
-gem 'cocoapods', '~> 1.11', '>= 1.11.2'
diff --git a/example/android/app/_BUCK b/example/android/app/_BUCK
deleted file mode 100644
index a0d56f98..00000000
--- a/example/android/app/_BUCK
+++ /dev/null
@@ -1,55 +0,0 @@
-# To learn about Buck see [Docs](https://buckbuild.com/).
-# To run your application with Buck:
-# - install Buck
-# - `npm start` - to start the packager
-# - `cd android`
-# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"`
-# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck
-# - `buck install -r android/app` - compile, install and run application
-#
-
-load(":build_defs.bzl", "create_aar_targets", "create_jar_targets")
-
-lib_deps = []
-
-create_aar_targets(glob(["libs/*.aar"]))
-
-create_jar_targets(glob(["libs/*.jar"]))
-
-android_library(
- name = "all-libs",
- exported_deps = lib_deps,
-)
-
-android_library(
- name = "app-code",
- srcs = glob([
- "src/main/java/**/*.java",
- ]),
- deps = [
- ":all-libs",
- ":build_config",
- ":res",
- ],
-)
-
-android_build_config(
- name = "build_config",
- package = "com.iosmodalexample",
-)
-
-android_resource(
- name = "res",
- package = "com.iosmodalexample",
- res = "src/main/res",
-)
-
-android_binary(
- name = "app",
- keystore = "//android/keystores:debug",
- manifest = "src/main/AndroidManifest.xml",
- package_type = "debug",
- deps = [
- ":app-code",
- ],
-)
diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle
deleted file mode 100644
index 283c65d2..00000000
--- a/example/android/app/build.gradle
+++ /dev/null
@@ -1,313 +0,0 @@
-apply plugin: "com.android.application"
-
-import com.android.build.OutputFile
-import org.apache.tools.ant.taskdefs.condition.Os
-
-/**
- * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
- * and bundleReleaseJsAndAssets).
- * These basically call `react-native bundle` with the correct arguments during the Android build
- * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
- * bundle directly from the development server. Below you can see all the possible configurations
- * and their defaults. If you decide to add a configuration block, make sure to add it before the
- * `apply from: "../../node_modules/react-native/react.gradle"` line.
- *
- * project.ext.react = [
- * // the name of the generated asset file containing your JS bundle
- * bundleAssetName: "index.android.bundle",
- *
- * // the entry file for bundle generation. If none specified and
- * // "index.android.js" exists, it will be used. Otherwise "index.js" is
- * // default. Can be overridden with ENTRY_FILE environment variable.
- * entryFile: "index.android.js",
- *
- * // https://reactnative.dev/docs/performance#enable-the-ram-format
- * bundleCommand: "ram-bundle",
- *
- * // whether to bundle JS and assets in debug mode
- * bundleInDebug: false,
- *
- * // whether to bundle JS and assets in release mode
- * bundleInRelease: true,
- *
- * // whether to bundle JS and assets in another build variant (if configured).
- * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
- * // The configuration property can be in the following formats
- * // 'bundleIn${productFlavor}${buildType}'
- * // 'bundleIn${buildType}'
- * // bundleInFreeDebug: true,
- * // bundleInPaidRelease: true,
- * // bundleInBeta: true,
- *
- * // whether to disable dev mode in custom build variants (by default only disabled in release)
- * // for example: to disable dev mode in the staging build type (if configured)
- * devDisabledInStaging: true,
- * // The configuration property can be in the following formats
- * // 'devDisabledIn${productFlavor}${buildType}'
- * // 'devDisabledIn${buildType}'
- *
- * // the root of your project, i.e. where "package.json" lives
- * root: "../../",
- *
- * // where to put the JS bundle asset in debug mode
- * jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
- *
- * // where to put the JS bundle asset in release mode
- * jsBundleDirRelease: "$buildDir/intermediates/assets/release",
- *
- * // where to put drawable resources / React Native assets, e.g. the ones you use via
- * // require('./image.png')), in debug mode
- * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
- *
- * // where to put drawable resources / React Native assets, e.g. the ones you use via
- * // require('./image.png')), in release mode
- * resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
- *
- * // by default the gradle tasks are skipped if none of the JS files or assets change; this means
- * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
- * // date; if you have any other folders that you want to ignore for performance reasons (gradle
- * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
- * // for example, you might want to remove it from here.
- * inputExcludes: ["android/**", "ios/**"],
- *
- * // override which node gets called and with what additional arguments
- * nodeExecutableAndArgs: ["node"],
- *
- * // supply additional arguments to the packager
- * extraPackagerArgs: []
- * ]
- */
-
-project.ext.react = [
- enableHermes: true, // clean and rebuild if changing
-]
-
-apply from: "../../node_modules/react-native/react.gradle"
-
-/**
- * Set this to true to create two separate APKs instead of one:
- * - An APK that only works on ARM devices
- * - An APK that only works on x86 devices
- * The advantage is the size of the APK is reduced by about 4MB.
- * Upload all the APKs to the Play Store and people will download
- * the correct one based on the CPU architecture of their device.
- */
-def enableSeparateBuildPerCPUArchitecture = false
-
-/**
- * Run Proguard to shrink the Java bytecode in release builds.
- */
-def enableProguardInReleaseBuilds = false
-
-/**
- * The preferred build flavor of JavaScriptCore.
- *
- * For example, to use the international variant, you can use:
- * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
- *
- * The international variant includes ICU i18n library and necessary data
- * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
- * give correct results when using with locales other than en-US. Note that
- * this variant is about 6MiB larger per architecture than default.
- */
-def jscFlavor = 'org.webkit:android-jsc:+'
-
-/**
- * Whether to enable the Hermes VM.
- *
- * This should be set on project.ext.react and that value will be read here. If it is not set
- * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode
- * and the benefits of using Hermes will therefore be sharply reduced.
- */
-def enableHermes = project.ext.react.get("enableHermes", false);
-
-/**
- * Architectures to build native code for.
- */
-def reactNativeArchitectures() {
- def value = project.getProperties().get("reactNativeArchitectures")
- return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
-}
-
-android {
- ndkVersion rootProject.ext.ndkVersion
-
- compileSdkVersion rootProject.ext.compileSdkVersion
-
- defaultConfig {
- applicationId "com.iosmodalexample"
- minSdkVersion rootProject.ext.minSdkVersion
- targetSdkVersion rootProject.ext.targetSdkVersion
- versionCode 1
- versionName "1.0"
- buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
-
- if (isNewArchitectureEnabled()) {
- // We configure the CMake build only if you decide to opt-in for the New Architecture.
- externalNativeBuild {
- cmake {
- arguments "-DPROJECT_BUILD_DIR=$buildDir",
- "-DREACT_ANDROID_DIR=$rootDir/../node_modules/react-native/ReactAndroid",
- "-DREACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build",
- "-DNODE_MODULES_DIR=$rootDir/../node_modules",
- "-DANDROID_STL=c++_shared"
- }
- }
- if (!enableSeparateBuildPerCPUArchitecture) {
- ndk {
- abiFilters (*reactNativeArchitectures())
- }
- }
- }
- }
-
- if (isNewArchitectureEnabled()) {
- // We configure the NDK build only if you decide to opt-in for the New Architecture.
- externalNativeBuild {
- cmake {
- path "$projectDir/src/main/jni/CMakeLists.txt"
- }
- }
- 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 configureCMakeDebug* tasks and the preBuild tasks.
- // This can be removed once this is solved: https://issuetracker.google.com/issues/207403732
- configureCMakeRelWithDebInfo.dependsOn(preReleaseBuild)
- configureCMakeDebug.dependsOn(preDebugBuild)
- reactNativeArchitectures().each { architecture ->
- tasks.findByName("configureCMakeDebug[${architecture}]")?.configure {
- dependsOn("preDebugBuild")
- }
- tasks.findByName("configureCMakeRelWithDebInfo[${architecture}]")?.configure {
- dependsOn("preReleaseBuild")
- }
- }
- }
- }
-
- splits {
- abi {
- reset()
- enable enableSeparateBuildPerCPUArchitecture
- universalApk false // If true, also generate a universal APK
- include (*reactNativeArchitectures())
- }
- }
- signingConfigs {
- debug {
- storeFile file('debug.keystore')
- storePassword 'android'
- keyAlias 'androiddebugkey'
- keyPassword 'android'
- }
- }
- buildTypes {
- debug {
- signingConfig signingConfigs.debug
- }
- release {
- // Caution! In production, you need to generate your own keystore file.
- // see https://reactnative.dev/docs/signed-apk-android.
- signingConfig signingConfigs.debug
- minifyEnabled enableProguardInReleaseBuilds
- proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
- }
- }
-
- // applicationVariants are e.g. debug, release
- applicationVariants.all { variant ->
- variant.outputs.each { output ->
- // For each separate APK per architecture, set a unique version code as described here:
- // https://developer.android.com/studio/build/configure-apk-splits.html
- // Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.
- def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
- def abi = output.getFilter(OutputFile.ABI)
- if (abi != null) { // null for the universal-debug, universal-release variants
- output.versionCodeOverride =
- defaultConfig.versionCode * 1000 + versionCodes.get(abi)
- }
-
- }
- }
-}
-
-dependencies {
- implementation fileTree(dir: "libs", include: ["*.jar"])
-
- //noinspection GradleDynamicVersion
- implementation "com.facebook.react:react-native:+" // From node_modules
-
- implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
-
- debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") {
- exclude group:'com.facebook.fbjni'
- }
-
- debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
- exclude group:'com.facebook.flipper'
- exclude group:'com.squareup.okhttp3', module:'okhttp'
- }
-
- debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") {
- exclude group:'com.facebook.flipper'
- }
-
- if (enableHermes) {
- //noinspection GradleDynamicVersion
- implementation("com.facebook.react:hermes-engine:+") { // From node_modules
- exclude group:'com.facebook.fbjni'
- }
- } else {
- implementation jscFlavor
- }
-}
-
-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")
- substitute(module("com.facebook.react:hermes-engine"))
- .using(project(":ReactAndroid:hermes-engine"))
- .because("On New Architecture we're building Hermes 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) {
- from configurations.implementation
- into 'libs'
-}
-
-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/build_defs.bzl b/example/android/app/build_defs.bzl
deleted file mode 100644
index fff270f8..00000000
--- a/example/android/app/build_defs.bzl
+++ /dev/null
@@ -1,19 +0,0 @@
-"""Helper definitions to glob .aar and .jar targets"""
-
-def create_aar_targets(aarfiles):
- for aarfile in aarfiles:
- name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")]
- lib_deps.append(":" + name)
- android_prebuilt_aar(
- name = name,
- aar = aarfile,
- )
-
-def create_jar_targets(jarfiles):
- for jarfile in jarfiles:
- name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")]
- lib_deps.append(":" + name)
- prebuilt_jar(
- name = name,
- binary_jar = jarfile,
- )
diff --git a/example/android/app/debug.keystore b/example/android/app/debug.keystore
deleted file mode 100644
index 364e105e..00000000
Binary files a/example/android/app/debug.keystore and /dev/null differ
diff --git a/example/android/app/proguard-rules.pro b/example/android/app/proguard-rules.pro
deleted file mode 100644
index 11b02572..00000000
--- a/example/android/app/proguard-rules.pro
+++ /dev/null
@@ -1,10 +0,0 @@
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the proguardFiles
-# directive in build.gradle.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# Add any project specific keep options here:
diff --git a/example/android/app/src/debug/AndroidManifest.xml b/example/android/app/src/debug/AndroidManifest.xml
deleted file mode 100644
index 4b185bc1..00000000
--- a/example/android/app/src/debug/AndroidManifest.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/example/android/app/src/debug/java/com/iosmodalexample/ReactNativeFlipper.java b/example/android/app/src/debug/java/com/iosmodalexample/ReactNativeFlipper.java
deleted file mode 100644
index cb09c69e..00000000
--- a/example/android/app/src/debug/java/com/iosmodalexample/ReactNativeFlipper.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- *
- * This source code is licensed under the MIT license found in the LICENSE file in the root
- * directory of this source tree.
- */
-package com.iosmodalexample;
-
-import android.content.Context;
-import com.facebook.flipper.android.AndroidFlipperClient;
-import com.facebook.flipper.android.utils.FlipperUtils;
-import com.facebook.flipper.core.FlipperClient;
-import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin;
-import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin;
-import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin;
-import com.facebook.flipper.plugins.inspector.DescriptorMapping;
-import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin;
-import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor;
-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;
-import okhttp3.OkHttpClient;
-
-public class ReactNativeFlipper {
- public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
- if (FlipperUtils.shouldEnableFlipper(context)) {
- final FlipperClient client = AndroidFlipperClient.getInstance(context);
-
- client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults()));
- client.addPlugin(new ReactFlipperPlugin());
- client.addPlugin(new DatabasesFlipperPlugin(context));
- client.addPlugin(new SharedPreferencesFlipperPlugin(context));
- client.addPlugin(CrashReporterPlugin.getInstance());
-
- NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
- NetworkingModule.setCustomClientBuilder(
- new NetworkingModule.CustomClientBuilder() {
- @Override
- public void apply(OkHttpClient.Builder builder) {
- builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
- }
- });
- client.addPlugin(networkFlipperPlugin);
- client.start();
-
- // Fresco Plugin needs to ensure that ImagePipelineFactory is initialized
- // Hence we run if after all native modules have been initialized
- ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
- if (reactContext == null) {
- reactInstanceManager.addReactInstanceEventListener(
- new ReactInstanceEventListener() {
- @Override
- public void onReactContextInitialized(ReactContext reactContext) {
- reactInstanceManager.removeReactInstanceEventListener(this);
- reactContext.runOnNativeModulesQueueThread(
- new Runnable() {
- @Override
- public void run() {
- client.addPlugin(new FrescoFlipperPlugin());
- }
- });
- }
- });
- } else {
- client.addPlugin(new FrescoFlipperPlugin());
- }
- }
- }
-}
diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml
deleted file mode 100644
index 5233ac66..00000000
--- a/example/android/app/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/example/android/app/src/main/java/com/iosmodalexample/MainActivity.java b/example/android/app/src/main/java/com/iosmodalexample/MainActivity.java
deleted file mode 100644
index 86ac2f9e..00000000
--- a/example/android/app/src/main/java/com/iosmodalexample/MainActivity.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.iosmodalexample;
-
-import com.facebook.react.ReactActivity;
-import com.facebook.react.ReactActivityDelegate;
-import com.facebook.react.ReactRootView;
-
-public class MainActivity extends ReactActivity {
-
- /**
- * Returns the name of the main component registered from JavaScript. This is used to schedule
- * rendering of the component.
- */
- @Override
- protected String getMainComponentName() {
- return "IosModalExample";
- }
-
- /**
- * Returns the instance of the {@link ReactActivityDelegate}. There the RootView is created and
- * you can specify the renderer you wish to use - the new renderer (Fabric) or the old renderer
- * (Paper).
- */
- @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;
- }
-
- @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/example/android/app/src/main/java/com/iosmodalexample/MainApplication.java b/example/android/app/src/main/java/com/iosmodalexample/MainApplication.java
deleted file mode 100644
index d6377de0..00000000
--- a/example/android/app/src/main/java/com/iosmodalexample/MainApplication.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package com.iosmodalexample;
-
-import android.app.Application;
-import android.content.Context;
-import com.facebook.react.PackageList;
-import com.facebook.react.ReactApplication;
-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 com.iosmodalexample.newarchitecture.MainApplicationReactNativeHost;
-import java.lang.reflect.InvocationTargetException;
-import java.util.List;
-
-public class MainApplication extends Application implements ReactApplication {
-
- private final ReactNativeHost mReactNativeHost =
- new ReactNativeHost(this) {
- @Override
- public boolean getUseDeveloperSupport() {
- return BuildConfig.DEBUG;
- }
-
- @Override
- protected List getPackages() {
- @SuppressWarnings("UnnecessaryLocalVariable")
- List packages = new PackageList(this).getPackages();
- // Packages that cannot be autolinked yet can be added manually here, for example:
- // packages.add(new MyReactNativePackage());
- return packages;
- }
-
- @Override
- protected String getJSMainModuleName() {
- return "index";
- }
- };
-
- private final ReactNativeHost mNewArchitectureNativeHost =
- new MainApplicationReactNativeHost(this);
-
- @Override
- public ReactNativeHost getReactNativeHost() {
- 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());
- }
-
- /**
- * Loads Flipper in React Native templates. Call this in the onCreate method with something like
- * initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
- *
- * @param context
- * @param reactInstanceManager
- */
- private static void initializeFlipper(
- Context context, ReactInstanceManager reactInstanceManager) {
- if (BuildConfig.DEBUG) {
- try {
- /*
- We use reflection here to pick up the class that initializes Flipper,
- since Flipper library is not available in release mode
- */
- Class> aClass = Class.forName("com.iosmodalexample.ReactNativeFlipper");
- aClass
- .getMethod("initializeFlipper", Context.class, ReactInstanceManager.class)
- .invoke(null, context, reactInstanceManager);
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- } catch (NoSuchMethodException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
- }
- }
-}
diff --git a/example/android/app/src/main/java/com/iosmodalexample/newarchitecture/MainApplicationReactNativeHost.java b/example/android/app/src/main/java/com/iosmodalexample/newarchitecture/MainApplicationReactNativeHost.java
deleted file mode 100644
index f69c69f1..00000000
--- a/example/android/app/src/main/java/com/iosmodalexample/newarchitecture/MainApplicationReactNativeHost.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package com.iosmodalexample.newarchitecture;
-
-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.FabricJSIModuleProvider;
-import com.facebook.react.fabric.ReactNativeConfig;
-import com.facebook.react.uimanager.ViewManagerRegistry;
-import com.iosmodalexample.BuildConfig;
-import com.iosmodalexample.newarchitecture.components.MainComponentsRegistry;
-import com.iosmodalexample.newarchitecture.modules.MainApplicationTurboModuleManagerDelegate;
-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,
- ReactNativeConfig.DEFAULT_CONFIG,
- viewManagerRegistry);
- }
- });
- return specs;
- }
- };
- }
-}
diff --git a/example/android/app/src/main/java/com/iosmodalexample/newarchitecture/components/MainComponentsRegistry.java b/example/android/app/src/main/java/com/iosmodalexample/newarchitecture/components/MainComponentsRegistry.java
deleted file mode 100644
index f02eaa5e..00000000
--- a/example/android/app/src/main/java/com/iosmodalexample/newarchitecture/components/MainComponentsRegistry.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.iosmodalexample.newarchitecture.components;
-
-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);
- }
-}
diff --git a/example/android/app/src/main/java/com/iosmodalexample/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java b/example/android/app/src/main/java/com/iosmodalexample/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java
deleted file mode 100644
index c82e5442..00000000
--- a/example/android/app/src/main/java/com/iosmodalexample/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.iosmodalexample.newarchitecture.modules;
-
-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("iosmodalexample_appmodules");
- sIsSoLibraryLoaded = true;
- }
- }
-}
diff --git a/example/android/app/src/main/jni/CMakeLists.txt b/example/android/app/src/main/jni/CMakeLists.txt
deleted file mode 100644
index eb5dc079..00000000
--- a/example/android/app/src/main/jni/CMakeLists.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-cmake_minimum_required(VERSION 3.13)
-
-# Define the library name here.
-project(iosmodalexample_appmodules)
-
-# This file includes all the necessary to let you build your application with the New Architecture.
-include(${REACT_ANDROID_DIR}/cmake-utils/ReactNative-application.cmake)
diff --git a/example/android/app/src/main/jni/MainApplicationModuleProvider.cpp b/example/android/app/src/main/jni/MainApplicationModuleProvider.cpp
deleted file mode 100644
index 26162dd8..00000000
--- a/example/android/app/src/main/jni/MainApplicationModuleProvider.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#include "MainApplicationModuleProvider.h"
-
-#include
-#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);
-
- // Module providers autolinked by RN CLI
- auto rncli_module = rncli_ModuleProvider(moduleName, params);
- if (rncli_module != nullptr) {
- return rncli_module;
- }
-
- return rncore_ModuleProvider(moduleName, params);
-}
-
-} // namespace react
-} // namespace facebook
diff --git a/example/android/app/src/main/jni/MainApplicationModuleProvider.h b/example/android/app/src/main/jni/MainApplicationModuleProvider.h
deleted file mode 100644
index b38ccf53..00000000
--- a/example/android/app/src/main/jni/MainApplicationModuleProvider.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#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
diff --git a/example/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp b/example/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp
deleted file mode 100644
index 5fd688c5..00000000
--- a/example/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-#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(
- const std::string &name) {
- return getTurboModule(name, nullptr) != nullptr ||
- getTurboModule(name, {.moduleName = name}) != nullptr;
-}
-
-} // namespace react
-} // namespace facebook
diff --git a/example/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h b/example/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h
deleted file mode 100644
index 4149e497..00000000
--- a/example/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h
+++ /dev/null
@@ -1,38 +0,0 @@
-#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/iosmodalexample/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(const std::string &name);
-};
-
-} // namespace react
-} // namespace facebook
diff --git a/example/android/app/src/main/jni/MainComponentsRegistry.cpp b/example/android/app/src/main/jni/MainComponentsRegistry.cpp
deleted file mode 100644
index 54f598a4..00000000
--- a/example/android/app/src/main/jni/MainComponentsRegistry.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-#include "MainComponentsRegistry.h"
-
-#include
-#include
-#include
-#include
-#include
-
-namespace facebook {
-namespace react {
-
-MainComponentsRegistry::MainComponentsRegistry(ComponentFactory *delegate) {}
-
-std::shared_ptr
-MainComponentsRegistry::sharedProviderRegistry() {
- auto providerRegistry = CoreComponentsRegistry::sharedProviderRegistry();
-
- // Autolinked providers registered by RN CLI
- rncli_registerProviders(providerRegistry);
-
- // 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
diff --git a/example/android/app/src/main/jni/MainComponentsRegistry.h b/example/android/app/src/main/jni/MainComponentsRegistry.h
deleted file mode 100644
index 147ac160..00000000
--- a/example/android/app/src/main/jni/MainComponentsRegistry.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#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/iosmodalexample/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
diff --git a/example/android/app/src/main/jni/OnLoad.cpp b/example/android/app/src/main/jni/OnLoad.cpp
deleted file mode 100644
index c569b6e8..00000000
--- a/example/android/app/src/main/jni/OnLoad.cpp
+++ /dev/null
@@ -1,11 +0,0 @@
-#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();
- });
-}
diff --git a/example/android/app/src/main/res/drawable/rn_edit_text_material.xml b/example/android/app/src/main/res/drawable/rn_edit_text_material.xml
deleted file mode 100644
index f35d9962..00000000
--- a/example/android/app/src/main/res/drawable/rn_edit_text_material.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index a2f59082..00000000
Binary files a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
deleted file mode 100644
index 1b523998..00000000
Binary files a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ
diff --git a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index ff10afd6..00000000
Binary files a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
deleted file mode 100644
index 115a4c76..00000000
Binary files a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ
diff --git a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index dcd3cd80..00000000
Binary files a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
deleted file mode 100644
index 459ca609..00000000
Binary files a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 8ca12fe0..00000000
Binary files a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
deleted file mode 100644
index 8e19b410..00000000
Binary files a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index b824ebdd..00000000
Binary files a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
deleted file mode 100644
index 4c19a13c..00000000
Binary files a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/example/android/app/src/main/res/values/strings.xml b/example/android/app/src/main/res/values/strings.xml
deleted file mode 100644
index 18b91dad..00000000
--- a/example/android/app/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
- IosModalExample
-
diff --git a/example/android/app/src/main/res/values/styles.xml b/example/android/app/src/main/res/values/styles.xml
deleted file mode 100644
index 7ba83a2a..00000000
--- a/example/android/app/src/main/res/values/styles.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
diff --git a/example/android/build.gradle b/example/android/build.gradle
deleted file mode 100644
index 8569fee3..00000000
--- a/example/android/build.gradle
+++ /dev/null
@@ -1,51 +0,0 @@
-// Top-level build file where you can add configuration options common to all sub-projects/modules.
-
-buildscript {
- ext {
- buildToolsVersion = "31.0.0"
- minSdkVersion = 21
- compileSdkVersion = 31
- targetSdkVersion = 31
-
- if (System.properties['os.arch'] == "aarch64") {
- // For M1 Users we need to use the NDK 24 which added support for aarch64
- ndkVersion = "24.0.8215888"
- } else {
- // Otherwise we default to the side-by-side NDK version from AGP.
- ndkVersion = "21.4.7075529"
- }
- }
- repositories {
- google()
- mavenCentral()
- }
- dependencies {
- classpath("com.android.tools.build:gradle:7.2.1")
- classpath("com.facebook.react:react-native-gradle-plugin")
- 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
- }
-}
-
-allprojects {
- repositories {
- maven {
- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
- url("$rootDir/../node_modules/react-native/android")
- }
- maven {
- // Android JSC is installed from npm
- url("$rootDir/../node_modules/jsc-android/dist")
- }
- mavenCentral {
- // We don't want to fetch react-native from Maven Central as there are
- // older versions over there.
- content {
- excludeGroup "com.facebook.react"
- }
- }
- google()
- maven { url 'https://www.jitpack.io' }
- }
-}
diff --git a/example/android/gradle.properties b/example/android/gradle.properties
deleted file mode 100644
index fa4feae5..00000000
--- a/example/android/gradle.properties
+++ /dev/null
@@ -1,40 +0,0 @@
-# Project-wide Gradle settings.
-
-# IDE (e.g. Android Studio) users:
-# Gradle settings configured through the IDE *will override*
-# any settings specified in this file.
-
-# For more details on how to configure your build environment visit
-# http://www.gradle.org/docs/current/userguide/build_environment.html
-
-# Specifies the JVM arguments used for the daemon process.
-# The setting is particularly useful for tweaking memory settings.
-# 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
-# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
-# org.gradle.parallel=true
-
-# AndroidX package structure to make it clearer which packages are bundled with the
-# Android operating system, and which are packaged with your app's APK
-# https://developer.android.com/topic/libraries/support-library/androidx-rn
-android.useAndroidX=true
-# Automatically convert third-party libraries to use AndroidX
-android.enableJetifier=true
-
-# Version of flipper SDK to use with React Native
-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.jar b/example/android/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 41d9927a..00000000
Binary files a/example/android/gradle/wrapper/gradle-wrapper.jar and /dev/null differ
diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index 8fad3f5a..00000000
--- a/example/android/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
diff --git a/example/android/gradlew b/example/android/gradlew
deleted file mode 100755
index 1b6c7873..00000000
--- a/example/android/gradlew
+++ /dev/null
@@ -1,234 +0,0 @@
-#!/bin/sh
-
-#
-# 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.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-##############################################################################
-#
-# 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
-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
-
-APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
-
-APP_NAME="Gradle"
-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
-
-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 ;; #(
- 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
- else
- JAVACMD=$JAVA_HOME/bin/java
- fi
- if [ ! -x "$JAVACMD" ] ; then
- die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-else
- 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
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-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
-
-# 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" || "$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
- 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
- # 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
-fi
-
-# 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.
-#
-
-eval "set -- $(
- printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
- xargs -n1 |
- sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
- tr '\n' ' '
- )" '"$@"'
-
-exec "$JAVACMD" "$@"
diff --git a/example/android/gradlew.bat b/example/android/gradlew.bat
deleted file mode 100644
index 107acd32..00000000
--- a/example/android/gradlew.bat
+++ /dev/null
@@ -1,89 +0,0 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Resolve any "." and ".." in APP_HOME to make it shorter.
-for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto execute
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto execute
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/example/android/settings.gradle b/example/android/settings.gradle
deleted file mode 100644
index 64dad682..00000000
--- a/example/android/settings.gradle
+++ /dev/null
@@ -1,11 +0,0 @@
-rootProject.name = 'IosModalExample'
-apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
-include ':app'
-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')
- include(":ReactAndroid:hermes-engine")
- project(":ReactAndroid:hermes-engine").projectDir = file('../node_modules/react-native/ReactAndroid/hermes-engine')
-}
diff --git a/example/app.json b/example/app.json
deleted file mode 100644
index f91df11a..00000000
--- a/example/app.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "name": "IosModalExample",
- "displayName": "IosModalExample"
-}
\ No newline at end of file
diff --git a/example/babel.config.js b/example/babel.config.js
deleted file mode 100644
index adea77bd..00000000
--- a/example/babel.config.js
+++ /dev/null
@@ -1,17 +0,0 @@
-const path = require('path');
-const pak = require('../package.json');
-
-module.exports = {
- presets: ['module:metro-react-native-babel-preset'],
- plugins: [
- [
- 'module-resolver',
- {
- extensions: ['.tsx', '.ts', '.js', '.json'],
- alias: {
- [pak.name]: path.join(__dirname, '..', pak.source),
- },
- },
- ],
- ],
-};
diff --git a/example/index.js b/example/index.js
deleted file mode 100644
index 117ddcae..00000000
--- a/example/index.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import { AppRegistry } from 'react-native';
-import App from './src/App';
-import { name as appName } from './app.json';
-
-AppRegistry.registerComponent(appName, () => App);
diff --git a/example/ios/.xcode.env b/example/ios/.xcode.env
deleted file mode 100644
index 3d5782c7..00000000
--- a/example/ios/.xcode.env
+++ /dev/null
@@ -1,11 +0,0 @@
-# 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)
diff --git a/example/ios/File.swift b/example/ios/File.swift
deleted file mode 100644
index 3d6d69c3..00000000
--- a/example/ios/File.swift
+++ /dev/null
@@ -1,6 +0,0 @@
-//
-// File.swift
-// IosModalExample
-//
-
-import Foundation
diff --git a/example/ios/IosModalExample-Bridging-Header.h b/example/ios/IosModalExample-Bridging-Header.h
deleted file mode 100644
index e11d920b..00000000
--- a/example/ios/IosModalExample-Bridging-Header.h
+++ /dev/null
@@ -1,3 +0,0 @@
-//
-// Use this file to import your target's public headers that you would like to expose to Swift.
-//
diff --git a/example/ios/IosModalExample.xcodeproj/project.pbxproj b/example/ios/IosModalExample.xcodeproj/project.pbxproj
deleted file mode 100644
index e9d5f15c..00000000
--- a/example/ios/IosModalExample.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,712 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 54;
- objects = {
-
-/* Begin PBXBuildFile section */
- 00E356F31AD99517003FC87E /* IosModalExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* IosModalExampleTests.m */; };
- 0C80B921A6F3F58F76C31292 /* libPods-IosModalExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-IosModalExample.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-IosModalExample-IosModalExampleTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-IosModalExample-IosModalExampleTests.a */; };
- 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
- 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
- remoteInfo = IosModalExample;
- };
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXFileReference section */
- 00E356EE1AD99517003FC87E /* IosModalExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = IosModalExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
- 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 00E356F21AD99517003FC87E /* IosModalExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IosModalExampleTests.m; sourceTree = ""; };
- 13B07F961A680F5B00A75B9A /* IosModalExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = IosModalExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
- 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = IosModalExample/AppDelegate.h; sourceTree = ""; };
- 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = IosModalExample/AppDelegate.mm; sourceTree = ""; };
- 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = IosModalExample/Images.xcassets; sourceTree = ""; };
- 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = IosModalExample/Info.plist; sourceTree = ""; };
- 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = IosModalExample/main.m; sourceTree = ""; };
- 19F6CBCC0A4E27FBF8BF4A61 /* libPods-IosModalExample-IosModalExampleTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-IosModalExample-IosModalExampleTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B4392A12AC88292D35C810B /* Pods-IosModalExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-IosModalExample.debug.xcconfig"; path = "Target Support Files/Pods-IosModalExample/Pods-IosModalExample.debug.xcconfig"; sourceTree = ""; };
- 5709B34CF0A7D63546082F79 /* Pods-IosModalExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-IosModalExample.release.xcconfig"; path = "Target Support Files/Pods-IosModalExample/Pods-IosModalExample.release.xcconfig"; sourceTree = ""; };
- 5B7EB9410499542E8C5724F5 /* Pods-IosModalExample-IosModalExampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-IosModalExample-IosModalExampleTests.debug.xcconfig"; path = "Target Support Files/Pods-IosModalExample-IosModalExampleTests/Pods-IosModalExample-IosModalExampleTests.debug.xcconfig"; sourceTree = ""; };
- 5DCACB8F33CDC322A6C60F78 /* libPods-IosModalExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-IosModalExample.a"; sourceTree = BUILT_PRODUCTS_DIR; };
- 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = IosModalExample/LaunchScreen.storyboard; sourceTree = ""; };
- 89C6BE57DB24E9ADA2F236DE /* Pods-IosModalExample-IosModalExampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-IosModalExample-IosModalExampleTests.release.xcconfig"; path = "Target Support Files/Pods-IosModalExample-IosModalExampleTests/Pods-IosModalExample-IosModalExampleTests.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 */
-
-/* Begin PBXFrameworksBuildPhase section */
- 00E356EB1AD99517003FC87E /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 7699B88040F8A987B510C191 /* libPods-IosModalExample-IosModalExampleTests.a in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 0C80B921A6F3F58F76C31292 /* libPods-IosModalExample.a in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
- 00E356EF1AD99517003FC87E /* IosModalExampleTests */ = {
- isa = PBXGroup;
- children = (
- 00E356F21AD99517003FC87E /* IosModalExampleTests.m */,
- 00E356F01AD99517003FC87E /* Supporting Files */,
- );
- path = IosModalExampleTests;
- sourceTree = "";
- };
- 00E356F01AD99517003FC87E /* Supporting Files */ = {
- isa = PBXGroup;
- children = (
- 00E356F11AD99517003FC87E /* Info.plist */,
- );
- name = "Supporting Files";
- sourceTree = "";
- };
- 13B07FAE1A68108700A75B9A /* IosModalExample */ = {
- isa = PBXGroup;
- children = (
- 13B07FAF1A68108700A75B9A /* AppDelegate.h */,
- 13B07FB01A68108700A75B9A /* AppDelegate.mm */,
- 13B07FB51A68108700A75B9A /* Images.xcassets */,
- 13B07FB61A68108700A75B9A /* Info.plist */,
- 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */,
- 13B07FB71A68108700A75B9A /* main.m */,
- );
- name = IosModalExample;
- sourceTree = "";
- };
- 2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
- isa = PBXGroup;
- children = (
- ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
- 5DCACB8F33CDC322A6C60F78 /* libPods-IosModalExample.a */,
- 19F6CBCC0A4E27FBF8BF4A61 /* libPods-IosModalExample-IosModalExampleTests.a */,
- );
- name = Frameworks;
- sourceTree = "";
- };
- 832341AE1AAA6A7D00B99B32 /* Libraries */ = {
- isa = PBXGroup;
- children = (
- );
- name = Libraries;
- sourceTree = "";
- };
- 83CBB9F61A601CBA00E9B192 = {
- isa = PBXGroup;
- children = (
- 13B07FAE1A68108700A75B9A /* IosModalExample */,
- 832341AE1AAA6A7D00B99B32 /* Libraries */,
- 00E356EF1AD99517003FC87E /* IosModalExampleTests */,
- 83CBBA001A601CBA00E9B192 /* Products */,
- 2D16E6871FA4F8E400B85C8A /* Frameworks */,
- BBD78D7AC51CEA395F1C20DB /* Pods */,
- );
- indentWidth = 2;
- sourceTree = "";
- tabWidth = 2;
- usesTabs = 0;
- };
- 83CBBA001A601CBA00E9B192 /* Products */ = {
- isa = PBXGroup;
- children = (
- 13B07F961A680F5B00A75B9A /* IosModalExample.app */,
- 00E356EE1AD99517003FC87E /* IosModalExampleTests.xctest */,
- );
- name = Products;
- sourceTree = "";
- };
- BBD78D7AC51CEA395F1C20DB /* Pods */ = {
- isa = PBXGroup;
- children = (
- 3B4392A12AC88292D35C810B /* Pods-IosModalExample.debug.xcconfig */,
- 5709B34CF0A7D63546082F79 /* Pods-IosModalExample.release.xcconfig */,
- 5B7EB9410499542E8C5724F5 /* Pods-IosModalExample-IosModalExampleTests.debug.xcconfig */,
- 89C6BE57DB24E9ADA2F236DE /* Pods-IosModalExample-IosModalExampleTests.release.xcconfig */,
- );
- path = Pods;
- sourceTree = "";
- };
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
- 00E356ED1AD99517003FC87E /* IosModalExampleTests */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "IosModalExampleTests" */;
- buildPhases = (
- A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */,
- 00E356EA1AD99517003FC87E /* Sources */,
- 00E356EB1AD99517003FC87E /* Frameworks */,
- 00E356EC1AD99517003FC87E /* Resources */,
- C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */,
- F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */,
- );
- buildRules = (
- );
- dependencies = (
- 00E356F51AD99517003FC87E /* PBXTargetDependency */,
- );
- name = IosModalExampleTests;
- productName = IosModalExampleTests;
- productReference = 00E356EE1AD99517003FC87E /* IosModalExampleTests.xctest */;
- productType = "com.apple.product-type.bundle.unit-test";
- };
- 13B07F861A680F5B00A75B9A /* IosModalExample */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "IosModalExample" */;
- buildPhases = (
- C38B50BA6285516D6DCD4F65 /* [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 */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = IosModalExample;
- productName = IosModalExample;
- productReference = 13B07F961A680F5B00A75B9A /* IosModalExample.app */;
- productType = "com.apple.product-type.application";
- };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
- 83CBB9F71A601CBA00E9B192 /* Project object */ = {
- isa = PBXProject;
- attributes = {
- LastUpgradeCheck = 1210;
- TargetAttributes = {
- 00E356ED1AD99517003FC87E = {
- CreatedOnToolsVersion = 6.2;
- TestTargetID = 13B07F861A680F5B00A75B9A;
- };
- 13B07F861A680F5B00A75B9A = {
- LastSwiftMigration = 1120;
- };
- };
- };
- buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "IosModalExample" */;
- compatibilityVersion = "Xcode 12.0";
- developmentRegion = en;
- hasScannedForEncodings = 0;
- knownRegions = (
- en,
- Base,
- );
- mainGroup = 83CBB9F61A601CBA00E9B192;
- productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
- projectDirPath = "";
- projectRoot = "";
- targets = (
- 13B07F861A680F5B00A75B9A /* IosModalExample */,
- 00E356ED1AD99517003FC87E /* IosModalExampleTests */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
- 00E356EC1AD99517003FC87E /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 13B07F8E1A680F5B00A75B9A /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */,
- 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXShellScriptBuildPhase section */
- 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- 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\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-IosModalExample/Pods-IosModalExample-frameworks-${CONFIGURATION}-input-files.xcfilelist",
- );
- name = "[CP] Embed Pods Frameworks";
- outputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-IosModalExample/Pods-IosModalExample-frameworks-${CONFIGURATION}-output-files.xcfilelist",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-IosModalExample/Pods-IosModalExample-frameworks.sh\"\n";
- showEnvVarsInLog = 0;
- };
- A55EABD7B0C7F3A422A6CC61 /* [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-IosModalExample-IosModalExampleTests-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 */ = {
- 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-IosModalExample-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;
- };
- C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-IosModalExample-IosModalExampleTests/Pods-IosModalExample-IosModalExampleTests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
- );
- name = "[CP] Embed Pods Frameworks";
- outputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-IosModalExample-IosModalExampleTests/Pods-IosModalExample-IosModalExampleTests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-IosModalExample-IosModalExampleTests/Pods-IosModalExample-IosModalExampleTests-frameworks.sh\"\n";
- showEnvVarsInLog = 0;
- };
- E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-IosModalExample/Pods-IosModalExample-resources-${CONFIGURATION}-input-files.xcfilelist",
- );
- name = "[CP] Copy Pods Resources";
- outputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-IosModalExample/Pods-IosModalExample-resources-${CONFIGURATION}-output-files.xcfilelist",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-IosModalExample/Pods-IosModalExample-resources.sh\"\n";
- showEnvVarsInLog = 0;
- };
- F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-IosModalExample-IosModalExampleTests/Pods-IosModalExample-IosModalExampleTests-resources-${CONFIGURATION}-input-files.xcfilelist",
- );
- name = "[CP] Copy Pods Resources";
- outputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-IosModalExample-IosModalExampleTests/Pods-IosModalExample-IosModalExampleTests-resources-${CONFIGURATION}-output-files.xcfilelist",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-IosModalExample-IosModalExampleTests/Pods-IosModalExample-IosModalExampleTests-resources.sh\"\n";
- showEnvVarsInLog = 0;
- };
- FD10A7F022414F080027D42C /* Start Packager */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- );
- inputPaths = (
- );
- name = "Start Packager";
- outputFileListPaths = (
- );
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n fi\nfi\n";
- showEnvVarsInLog = 0;
- };
-/* End PBXShellScriptBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
- 00E356EA1AD99517003FC87E /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 00E356F31AD99517003FC87E /* IosModalExampleTests.m in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 13B07F871A680F5B00A75B9A /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,
- 13B07FC11A68108700A75B9A /* main.m in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
- 00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 13B07F861A680F5B00A75B9A /* IosModalExample */;
- targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
- };
-/* End PBXTargetDependency section */
-
-/* Begin XCBuildConfiguration section */
- 00E356F61AD99517003FC87E /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-IosModalExample-IosModalExampleTests.debug.xcconfig */;
- buildSettings = {
- BUNDLE_LOADER = "$(TEST_HOST)";
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- );
- INFOPLIST_FILE = IosModalExampleTests/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 12.4;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- "@loader_path/Frameworks",
- );
- OTHER_LDFLAGS = (
- "-ObjC",
- "-lc++",
- "$(inherited)",
- );
- PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
- PRODUCT_NAME = "$(TARGET_NAME)";
- TEST_HOST = "$(BUILT_PRODUCTS_DIR)/IosModalExample.app/IosModalExample";
- };
- name = Debug;
- };
- 00E356F71AD99517003FC87E /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-IosModalExample-IosModalExampleTests.release.xcconfig */;
- buildSettings = {
- BUNDLE_LOADER = "$(TEST_HOST)";
- COPY_PHASE_STRIP = NO;
- INFOPLIST_FILE = IosModalExampleTests/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 12.4;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- "@loader_path/Frameworks",
- );
- OTHER_LDFLAGS = (
- "-ObjC",
- "-lc++",
- "$(inherited)",
- );
- PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
- PRODUCT_NAME = "$(TARGET_NAME)";
- TEST_HOST = "$(BUILT_PRODUCTS_DIR)/IosModalExample.app/IosModalExample";
- };
- name = Release;
- };
- 13B07F941A680F5B00A75B9A /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-IosModalExample.debug.xcconfig */;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CLANG_ENABLE_MODULES = YES;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_TEAM = ZC7A6XV8GR;
- ENABLE_BITCODE = NO;
- INFOPLIST_FILE = IosModalExample/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- OTHER_LDFLAGS = (
- "$(inherited)",
- "-ObjC",
- "-lc++",
- );
- PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
- PRODUCT_NAME = IosModalExample;
- SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
- SUPPORTS_MACCATALYST = NO;
- SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- VERSIONING_SYSTEM = "apple-generic";
- };
- name = Debug;
- };
- 13B07F951A680F5B00A75B9A /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-IosModalExample.release.xcconfig */;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CLANG_ENABLE_MODULES = YES;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_TEAM = ZC7A6XV8GR;
- INFOPLIST_FILE = IosModalExample/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- OTHER_LDFLAGS = (
- "$(inherited)",
- "-ObjC",
- "-lc++",
- );
- PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
- PRODUCT_NAME = IosModalExample;
- SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
- SUPPORTS_MACCATALYST = NO;
- SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- VERSIONING_SYSTEM = "apple-generic";
- };
- name = Release;
- };
- 83CBBA201A601CBA00E9B192 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
- CLANG_CXX_LANGUAGE_STANDARD = "c++17";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- COPY_PHASE_STRIP = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- ENABLE_TESTABILITY = YES;
- "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386;
- GCC_C_LANGUAGE_STANDARD = gnu99;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- );
- GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 12.4;
- LD_RUNPATH_SEARCH_PATHS = (
- /usr/lib/swift,
- "$(inherited)",
- );
- LIBRARY_SEARCH_PATHS = (
- "\"$(SDKROOT)/usr/lib/swift\"",
- "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
- "\"$(inherited)\"",
- );
- MTL_ENABLE_DEBUG_INFO = YES;
- ONLY_ACTIVE_ARCH = YES;
- OTHER_CPLUSPLUSFLAGS = (
- "$(OTHER_CFLAGS)",
- "-DFOLLY_NO_CONFIG",
- "-DFOLLY_MOBILE=1",
- "-DFOLLY_USE_LIBCPP=1",
- );
- REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
- SDKROOT = iphoneos;
- };
- name = Debug;
- };
- 83CBBA211A601CBA00E9B192 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
- CLANG_CXX_LANGUAGE_STANDARD = "c++17";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- COPY_PHASE_STRIP = YES;
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386;
- GCC_C_LANGUAGE_STANDARD = gnu99;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 12.4;
- LD_RUNPATH_SEARCH_PATHS = (
- /usr/lib/swift,
- "$(inherited)",
- );
- LIBRARY_SEARCH_PATHS = (
- "\"$(SDKROOT)/usr/lib/swift\"",
- "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
- "\"$(inherited)\"",
- );
- MTL_ENABLE_DEBUG_INFO = NO;
- OTHER_CPLUSPLUSFLAGS = (
- "$(OTHER_CFLAGS)",
- "-DFOLLY_NO_CONFIG",
- "-DFOLLY_MOBILE=1",
- "-DFOLLY_USE_LIBCPP=1",
- );
- REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
- SDKROOT = iphoneos;
- VALIDATE_PRODUCT = YES;
- };
- name = Release;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "IosModalExampleTests" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 00E356F61AD99517003FC87E /* Debug */,
- 00E356F71AD99517003FC87E /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "IosModalExample" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 13B07F941A680F5B00A75B9A /* Debug */,
- 13B07F951A680F5B00A75B9A /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "IosModalExample" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 83CBBA201A601CBA00E9B192 /* Debug */,
- 83CBBA211A601CBA00E9B192 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
-/* End XCConfigurationList section */
- };
- rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
-}
diff --git a/example/ios/IosModalExample.xcodeproj/xcshareddata/xcschemes/IosModalExample.xcscheme b/example/ios/IosModalExample.xcodeproj/xcshareddata/xcschemes/IosModalExample.xcscheme
deleted file mode 100644
index be380ed0..00000000
--- a/example/ios/IosModalExample.xcodeproj/xcshareddata/xcschemes/IosModalExample.xcscheme
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/example/ios/IosModalExample.xcworkspace/contents.xcworkspacedata b/example/ios/IosModalExample.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index 543366eb..00000000
--- a/example/ios/IosModalExample.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
diff --git a/example/ios/IosModalExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/ios/IosModalExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
deleted file mode 100644
index 18d98100..00000000
--- a/example/ios/IosModalExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- IDEDidComputeMac32BitWarning
-
-
-
diff --git a/example/ios/IosModalExample/AppDelegate.h b/example/ios/IosModalExample/AppDelegate.h
deleted file mode 100644
index ef1de86a..00000000
--- a/example/ios/IosModalExample/AppDelegate.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#import
-#import
-
-@interface AppDelegate : UIResponder
-
-@property (nonatomic, strong) UIWindow *window;
-
-@end
diff --git a/example/ios/IosModalExample/AppDelegate.mm b/example/ios/IosModalExample/AppDelegate.mm
deleted file mode 100644
index 28cb04bd..00000000
--- a/example/ios/IosModalExample/AppDelegate.mm
+++ /dev/null
@@ -1,133 +0,0 @@
-#import "AppDelegate.h"
-
-#import
-#import
-#import
-
-#import
-
-#if RCT_NEW_ARCH_ENABLED
-#import
-#import
-#import
-#import
-#import
-#import
-
-#import
-
-static NSString *const kRNConcurrentRoot = @"concurrentRoot";
-
-@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
-
- NSDictionary *initProps = [self prepareInitialProps];
- UIView *rootView = RCTAppSetupDefaultRootView(bridge, @"IosModalExample", initProps);
-
- if (@available(iOS 13.0, *)) {
- rootView.backgroundColor = [UIColor systemBackgroundColor];
- } else {
- rootView.backgroundColor = [UIColor whiteColor];
- }
-
- self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
- UIViewController *rootViewController = [UIViewController new];
- rootViewController.view = rootView;
- self.window.rootViewController = rootViewController;
- [self.window makeKeyAndVisible];
- 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
- 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
diff --git a/example/ios/IosModalExample/Images.xcassets/AppIcon.appiconset/Contents.json b/example/ios/IosModalExample/Images.xcassets/AppIcon.appiconset/Contents.json
deleted file mode 100644
index 81213230..00000000
--- a/example/ios/IosModalExample/Images.xcassets/AppIcon.appiconset/Contents.json
+++ /dev/null
@@ -1,53 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "iphone",
- "scale" : "2x",
- "size" : "20x20"
- },
- {
- "idiom" : "iphone",
- "scale" : "3x",
- "size" : "20x20"
- },
- {
- "idiom" : "iphone",
- "scale" : "2x",
- "size" : "29x29"
- },
- {
- "idiom" : "iphone",
- "scale" : "3x",
- "size" : "29x29"
- },
- {
- "idiom" : "iphone",
- "scale" : "2x",
- "size" : "40x40"
- },
- {
- "idiom" : "iphone",
- "scale" : "3x",
- "size" : "40x40"
- },
- {
- "idiom" : "iphone",
- "scale" : "2x",
- "size" : "60x60"
- },
- {
- "idiom" : "iphone",
- "scale" : "3x",
- "size" : "60x60"
- },
- {
- "idiom" : "ios-marketing",
- "scale" : "1x",
- "size" : "1024x1024"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/example/ios/IosModalExample/Images.xcassets/Contents.json b/example/ios/IosModalExample/Images.xcassets/Contents.json
deleted file mode 100644
index 2d92bd53..00000000
--- a/example/ios/IosModalExample/Images.xcassets/Contents.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
diff --git a/example/ios/IosModalExample/Info.plist b/example/ios/IosModalExample/Info.plist
deleted file mode 100644
index 8c657821..00000000
--- a/example/ios/IosModalExample/Info.plist
+++ /dev/null
@@ -1,55 +0,0 @@
-
-
-
-
- CFBundleDevelopmentRegion
- en
- CFBundleDisplayName
- IosModalExample
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- $(PRODUCT_NAME)
- CFBundlePackageType
- APPL
- CFBundleShortVersionString
- 1.0
- CFBundleSignature
- ????
- CFBundleVersion
- 1
- LSRequiresIPhoneOS
-
- NSAppTransportSecurity
-
- NSExceptionDomains
-
- localhost
-
- NSExceptionAllowsInsecureHTTPLoads
-
-
-
-
- NSLocationWhenInUseUsageDescription
-
- UILaunchStoryboardName
- LaunchScreen
- UIRequiredDeviceCapabilities
-
- armv7
-
- UISupportedInterfaceOrientations
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- UIViewControllerBasedStatusBarAppearance
-
-
-
diff --git a/example/ios/IosModalExample/LaunchScreen.storyboard b/example/ios/IosModalExample/LaunchScreen.storyboard
deleted file mode 100644
index 1d41bb2a..00000000
--- a/example/ios/IosModalExample/LaunchScreen.storyboard
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/example/ios/IosModalExample/main.m b/example/ios/IosModalExample/main.m
deleted file mode 100644
index d645c724..00000000
--- a/example/ios/IosModalExample/main.m
+++ /dev/null
@@ -1,10 +0,0 @@
-#import
-
-#import "AppDelegate.h"
-
-int main(int argc, char *argv[])
-{
- @autoreleasepool {
- return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
- }
-}
diff --git a/example/ios/IosModalExampleTests/Info.plist b/example/ios/IosModalExampleTests/Info.plist
deleted file mode 100644
index ba72822e..00000000
--- a/example/ios/IosModalExampleTests/Info.plist
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
- CFBundleDevelopmentRegion
- en
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- $(PRODUCT_NAME)
- CFBundlePackageType
- BNDL
- CFBundleShortVersionString
- 1.0
- CFBundleSignature
- ????
- CFBundleVersion
- 1
-
-
diff --git a/example/ios/IosModalExampleTests/IosModalExampleTests.m b/example/ios/IosModalExampleTests/IosModalExampleTests.m
deleted file mode 100644
index 4760d721..00000000
--- a/example/ios/IosModalExampleTests/IosModalExampleTests.m
+++ /dev/null
@@ -1,66 +0,0 @@
-#import
-#import
-
-#import
-#import
-
-#define TIMEOUT_SECONDS 600
-#define TEXT_TO_LOOK_FOR @"Welcome to React"
-
-@interface IosModalExampleTests : XCTestCase
-
-@end
-
-@implementation IosModalExampleTests
-
-- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL (^)(UIView *view))test
-{
- if (test(view)) {
- return YES;
- }
- for (UIView *subview in [view subviews]) {
- if ([self findSubviewInView:subview matching:test]) {
- return YES;
- }
- }
- return NO;
-}
-
-- (void)testRendersWelcomeScreen
-{
- UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController];
- NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS];
- BOOL foundElement = NO;
-
- __block NSString *redboxError = nil;
-#ifdef DEBUG
- RCTSetLogFunction(
- ^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
- if (level >= RCTLogLevelError) {
- redboxError = message;
- }
- });
-#endif
-
- while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) {
- [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
- [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
-
- foundElement = [self findSubviewInView:vc.view
- matching:^BOOL(UIView *view) {
- if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {
- return YES;
- }
- return NO;
- }];
- }
-
-#ifdef DEBUG
- RCTSetLogFunction(RCTDefaultLogFunction);
-#endif
-
- XCTAssertNil(redboxError, @"RedBox error: %@", redboxError);
- XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);
-}
-
-@end
diff --git a/example/ios/Podfile b/example/ios/Podfile
deleted file mode 100644
index 240f2f21..00000000
--- a/example/ios/Podfile
+++ /dev/null
@@ -1,45 +0,0 @@
-require_relative '../node_modules/react-native/scripts/react_native_pods'
-require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
-
-platform :ios, '12.4'
-install! 'cocoapods', :deterministic_uuids => false
-
-target 'IosModalExample' do
- config = use_native_modules!
-
- # Flags change depending on the env values.
- flags = get_default_flags()
-
- use_react_native!(
- :path => config[:reactNativePath],
- # Hermes is now enabled by default. Disable by setting this flag to false.
- # Upcoming versions of React Native may rely on get_default_flags(), but
- # we make it explicit here to aid in the React Native upgrade process.
- :hermes_enabled => true,
- :fabric_enabled => flags[:fabric_enabled],
-
- # Enables Flipper.
- #
- # Note that if you have use_frameworks! enabled, Flipper will not work and
- # you should disable the next line.
- #:flipper_configuration => FlipperConfiguration.enabled,
-
- # An absolute path to your application root.
- :app_path => "#{Pod::Config.instance.installation_root}/.."
- )
-
- target 'IosModalExampleTests' do
- inherit! :complete
- # Pods for testing
- end
-
- post_install do |installer|
- react_native_post_install(
- installer,
- # Set `mac_catalyst_enabled` to `true` in order to apply patches
- # necessary for Mac Catalyst builds
- :mac_catalyst_enabled => false
- )
- __apply_Xcode_12_5_M1_post_install_workaround(installer)
- end
-end
diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock
deleted file mode 100644
index d968f66f..00000000
--- a/example/ios/Podfile.lock
+++ /dev/null
@@ -1,486 +0,0 @@
-PODS:
- - boost (1.76.0)
- - DoubleConversion (1.1.6)
- - FBLazyVector (0.70.4)
- - FBReactNativeSpec (0.70.4):
- - RCT-Folly (= 2021.07.22.00)
- - RCTRequired (= 0.70.4)
- - RCTTypeSafety (= 0.70.4)
- - React-Core (= 0.70.4)
- - React-jsi (= 0.70.4)
- - ReactCommon/turbomodule/core (= 0.70.4)
- - fmt (6.2.1)
- - glog (0.3.5)
- - hermes-engine (0.70.4)
- - libevent (2.1.12)
- - RCT-Folly (2021.07.22.00):
- - boost
- - DoubleConversion
- - fmt (~> 6.2.1)
- - glog
- - RCT-Folly/Default (= 2021.07.22.00)
- - RCT-Folly/Default (2021.07.22.00):
- - boost
- - DoubleConversion
- - fmt (~> 6.2.1)
- - glog
- - RCT-Folly/Futures (2021.07.22.00):
- - boost
- - DoubleConversion
- - fmt (~> 6.2.1)
- - glog
- - libevent
- - RCTRequired (0.70.4)
- - RCTTypeSafety (0.70.4):
- - FBLazyVector (= 0.70.4)
- - RCTRequired (= 0.70.4)
- - React-Core (= 0.70.4)
- - React (0.70.4):
- - React-Core (= 0.70.4)
- - React-Core/DevSupport (= 0.70.4)
- - React-Core/RCTWebSocket (= 0.70.4)
- - React-RCTActionSheet (= 0.70.4)
- - React-RCTAnimation (= 0.70.4)
- - React-RCTBlob (= 0.70.4)
- - React-RCTImage (= 0.70.4)
- - React-RCTLinking (= 0.70.4)
- - React-RCTNetwork (= 0.70.4)
- - React-RCTSettings (= 0.70.4)
- - React-RCTText (= 0.70.4)
- - React-RCTVibration (= 0.70.4)
- - React-bridging (0.70.4):
- - RCT-Folly (= 2021.07.22.00)
- - React-jsi (= 0.70.4)
- - React-callinvoker (0.70.4)
- - React-Codegen (0.70.4):
- - FBReactNativeSpec (= 0.70.4)
- - RCT-Folly (= 2021.07.22.00)
- - RCTRequired (= 0.70.4)
- - RCTTypeSafety (= 0.70.4)
- - React-Core (= 0.70.4)
- - React-jsi (= 0.70.4)
- - React-jsiexecutor (= 0.70.4)
- - ReactCommon/turbomodule/core (= 0.70.4)
- - React-Core (0.70.4):
- - glog
- - RCT-Folly (= 2021.07.22.00)
- - React-Core/Default (= 0.70.4)
- - React-cxxreact (= 0.70.4)
- - React-jsi (= 0.70.4)
- - React-jsiexecutor (= 0.70.4)
- - React-perflogger (= 0.70.4)
- - Yoga
- - React-Core/CoreModulesHeaders (0.70.4):
- - glog
- - RCT-Folly (= 2021.07.22.00)
- - React-Core/Default
- - React-cxxreact (= 0.70.4)
- - React-jsi (= 0.70.4)
- - React-jsiexecutor (= 0.70.4)
- - React-perflogger (= 0.70.4)
- - Yoga
- - React-Core/Default (0.70.4):
- - glog
- - RCT-Folly (= 2021.07.22.00)
- - React-cxxreact (= 0.70.4)
- - React-jsi (= 0.70.4)
- - React-jsiexecutor (= 0.70.4)
- - React-perflogger (= 0.70.4)
- - Yoga
- - React-Core/DevSupport (0.70.4):
- - glog
- - RCT-Folly (= 2021.07.22.00)
- - React-Core/Default (= 0.70.4)
- - React-Core/RCTWebSocket (= 0.70.4)
- - React-cxxreact (= 0.70.4)
- - React-jsi (= 0.70.4)
- - React-jsiexecutor (= 0.70.4)
- - React-jsinspector (= 0.70.4)
- - React-perflogger (= 0.70.4)
- - Yoga
- - React-Core/RCTActionSheetHeaders (0.70.4):
- - glog
- - RCT-Folly (= 2021.07.22.00)
- - React-Core/Default
- - React-cxxreact (= 0.70.4)
- - React-jsi (= 0.70.4)
- - React-jsiexecutor (= 0.70.4)
- - React-perflogger (= 0.70.4)
- - Yoga
- - React-Core/RCTAnimationHeaders (0.70.4):
- - glog
- - RCT-Folly (= 2021.07.22.00)
- - React-Core/Default
- - React-cxxreact (= 0.70.4)
- - React-jsi (= 0.70.4)
- - React-jsiexecutor (= 0.70.4)
- - React-perflogger (= 0.70.4)
- - Yoga
- - React-Core/RCTBlobHeaders (0.70.4):
- - glog
- - RCT-Folly (= 2021.07.22.00)
- - React-Core/Default
- - React-cxxreact (= 0.70.4)
- - React-jsi (= 0.70.4)
- - React-jsiexecutor (= 0.70.4)
- - React-perflogger (= 0.70.4)
- - Yoga
- - React-Core/RCTImageHeaders (0.70.4):
- - glog
- - RCT-Folly (= 2021.07.22.00)
- - React-Core/Default
- - React-cxxreact (= 0.70.4)
- - React-jsi (= 0.70.4)
- - React-jsiexecutor (= 0.70.4)
- - React-perflogger (= 0.70.4)
- - Yoga
- - React-Core/RCTLinkingHeaders (0.70.4):
- - glog
- - RCT-Folly (= 2021.07.22.00)
- - React-Core/Default
- - React-cxxreact (= 0.70.4)
- - React-jsi (= 0.70.4)
- - React-jsiexecutor (= 0.70.4)
- - React-perflogger (= 0.70.4)
- - Yoga
- - React-Core/RCTNetworkHeaders (0.70.4):
- - glog
- - RCT-Folly (= 2021.07.22.00)
- - React-Core/Default
- - React-cxxreact (= 0.70.4)
- - React-jsi (= 0.70.4)
- - React-jsiexecutor (= 0.70.4)
- - React-perflogger (= 0.70.4)
- - Yoga
- - React-Core/RCTSettingsHeaders (0.70.4):
- - glog
- - RCT-Folly (= 2021.07.22.00)
- - React-Core/Default
- - React-cxxreact (= 0.70.4)
- - React-jsi (= 0.70.4)
- - React-jsiexecutor (= 0.70.4)
- - React-perflogger (= 0.70.4)
- - Yoga
- - React-Core/RCTTextHeaders (0.70.4):
- - glog
- - RCT-Folly (= 2021.07.22.00)
- - React-Core/Default
- - React-cxxreact (= 0.70.4)
- - React-jsi (= 0.70.4)
- - React-jsiexecutor (= 0.70.4)
- - React-perflogger (= 0.70.4)
- - Yoga
- - React-Core/RCTVibrationHeaders (0.70.4):
- - glog
- - RCT-Folly (= 2021.07.22.00)
- - React-Core/Default
- - React-cxxreact (= 0.70.4)
- - React-jsi (= 0.70.4)
- - React-jsiexecutor (= 0.70.4)
- - React-perflogger (= 0.70.4)
- - Yoga
- - React-Core/RCTWebSocket (0.70.4):
- - glog
- - RCT-Folly (= 2021.07.22.00)
- - React-Core/Default (= 0.70.4)
- - React-cxxreact (= 0.70.4)
- - React-jsi (= 0.70.4)
- - React-jsiexecutor (= 0.70.4)
- - React-perflogger (= 0.70.4)
- - Yoga
- - React-CoreModules (0.70.4):
- - RCT-Folly (= 2021.07.22.00)
- - RCTTypeSafety (= 0.70.4)
- - React-Codegen (= 0.70.4)
- - React-Core/CoreModulesHeaders (= 0.70.4)
- - React-jsi (= 0.70.4)
- - React-RCTImage (= 0.70.4)
- - ReactCommon/turbomodule/core (= 0.70.4)
- - React-cxxreact (0.70.4):
- - boost (= 1.76.0)
- - DoubleConversion
- - glog
- - RCT-Folly (= 2021.07.22.00)
- - React-callinvoker (= 0.70.4)
- - React-jsi (= 0.70.4)
- - React-jsinspector (= 0.70.4)
- - React-logger (= 0.70.4)
- - React-perflogger (= 0.70.4)
- - React-runtimeexecutor (= 0.70.4)
- - React-hermes (0.70.4):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2021.07.22.00)
- - RCT-Folly/Futures (= 2021.07.22.00)
- - React-cxxreact (= 0.70.4)
- - React-jsi (= 0.70.4)
- - React-jsiexecutor (= 0.70.4)
- - React-jsinspector (= 0.70.4)
- - React-perflogger (= 0.70.4)
- - React-jsi (0.70.4):
- - boost (= 1.76.0)
- - DoubleConversion
- - glog
- - RCT-Folly (= 2021.07.22.00)
- - React-jsi/Default (= 0.70.4)
- - React-jsi/Default (0.70.4):
- - boost (= 1.76.0)
- - DoubleConversion
- - glog
- - RCT-Folly (= 2021.07.22.00)
- - React-jsiexecutor (0.70.4):
- - DoubleConversion
- - glog
- - RCT-Folly (= 2021.07.22.00)
- - React-cxxreact (= 0.70.4)
- - React-jsi (= 0.70.4)
- - React-perflogger (= 0.70.4)
- - React-jsinspector (0.70.4)
- - React-logger (0.70.4):
- - glog
- - react-native-ios-modal (2.0.0-1):
- - React-Core
- - react-native-safe-area-context (4.5.0):
- - RCT-Folly
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - ReactCommon/turbomodule/core
- - React-perflogger (0.70.4)
- - React-RCTActionSheet (0.70.4):
- - React-Core/RCTActionSheetHeaders (= 0.70.4)
- - React-RCTAnimation (0.70.4):
- - RCT-Folly (= 2021.07.22.00)
- - RCTTypeSafety (= 0.70.4)
- - React-Codegen (= 0.70.4)
- - React-Core/RCTAnimationHeaders (= 0.70.4)
- - React-jsi (= 0.70.4)
- - ReactCommon/turbomodule/core (= 0.70.4)
- - React-RCTBlob (0.70.4):
- - RCT-Folly (= 2021.07.22.00)
- - React-Codegen (= 0.70.4)
- - React-Core/RCTBlobHeaders (= 0.70.4)
- - React-Core/RCTWebSocket (= 0.70.4)
- - React-jsi (= 0.70.4)
- - React-RCTNetwork (= 0.70.4)
- - ReactCommon/turbomodule/core (= 0.70.4)
- - React-RCTImage (0.70.4):
- - RCT-Folly (= 2021.07.22.00)
- - RCTTypeSafety (= 0.70.4)
- - React-Codegen (= 0.70.4)
- - React-Core/RCTImageHeaders (= 0.70.4)
- - React-jsi (= 0.70.4)
- - React-RCTNetwork (= 0.70.4)
- - ReactCommon/turbomodule/core (= 0.70.4)
- - React-RCTLinking (0.70.4):
- - React-Codegen (= 0.70.4)
- - React-Core/RCTLinkingHeaders (= 0.70.4)
- - React-jsi (= 0.70.4)
- - ReactCommon/turbomodule/core (= 0.70.4)
- - React-RCTNetwork (0.70.4):
- - RCT-Folly (= 2021.07.22.00)
- - RCTTypeSafety (= 0.70.4)
- - React-Codegen (= 0.70.4)
- - React-Core/RCTNetworkHeaders (= 0.70.4)
- - React-jsi (= 0.70.4)
- - ReactCommon/turbomodule/core (= 0.70.4)
- - React-RCTSettings (0.70.4):
- - RCT-Folly (= 2021.07.22.00)
- - RCTTypeSafety (= 0.70.4)
- - React-Codegen (= 0.70.4)
- - React-Core/RCTSettingsHeaders (= 0.70.4)
- - React-jsi (= 0.70.4)
- - ReactCommon/turbomodule/core (= 0.70.4)
- - React-RCTText (0.70.4):
- - React-Core/RCTTextHeaders (= 0.70.4)
- - React-RCTVibration (0.70.4):
- - RCT-Folly (= 2021.07.22.00)
- - React-Codegen (= 0.70.4)
- - React-Core/RCTVibrationHeaders (= 0.70.4)
- - React-jsi (= 0.70.4)
- - ReactCommon/turbomodule/core (= 0.70.4)
- - React-runtimeexecutor (0.70.4):
- - React-jsi (= 0.70.4)
- - ReactCommon/turbomodule/core (0.70.4):
- - DoubleConversion
- - glog
- - RCT-Folly (= 2021.07.22.00)
- - React-bridging (= 0.70.4)
- - React-callinvoker (= 0.70.4)
- - React-Core (= 0.70.4)
- - React-cxxreact (= 0.70.4)
- - React-jsi (= 0.70.4)
- - React-logger (= 0.70.4)
- - React-perflogger (= 0.70.4)
- - RNScreens (3.19.0):
- - React-Core
- - React-RCTImage
- - Yoga (1.14.0)
-
-DEPENDENCIES:
- - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`)
- - 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`)
- - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
- - hermes-engine (from `../node_modules/react-native/sdks/hermes/hermes-engine.podspec`)
- - libevent (~> 2.1.12)
- - 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-bridging (from `../node_modules/react-native/ReactCommon`)
- - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`)
- - React-Codegen (from `build/generated/ios`)
- - React-Core (from `../node_modules/react-native/`)
- - React-Core/RCTWebSocket (from `../node_modules/react-native/`)
- - React-CoreModules (from `../node_modules/react-native/React/CoreModules`)
- - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`)
- - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`)
- - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`)
- - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
- - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
- - React-logger (from `../node_modules/react-native/ReactCommon/logger`)
- - react-native-ios-modal (from `../..`)
- - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
- - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`)
- - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
- - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
- - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`)
- - React-RCTImage (from `../node_modules/react-native/Libraries/Image`)
- - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`)
- - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`)
- - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`)
- - React-RCTText (from `../node_modules/react-native/Libraries/Text`)
- - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`)
- - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`)
- - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
- - RNScreens (from `../node_modules/react-native-screens`)
- - Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
-
-SPEC REPOS:
- trunk:
- - fmt
- - libevent
-
-EXTERNAL SOURCES:
- boost:
- :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec"
- DoubleConversion:
- :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
- FBLazyVector:
- :path: "../node_modules/react-native/Libraries/FBLazyVector"
- FBReactNativeSpec:
- :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:
- :path: "../node_modules/react-native/Libraries/RCTRequired"
- RCTTypeSafety:
- :path: "../node_modules/react-native/Libraries/TypeSafety"
- React:
- :path: "../node_modules/react-native/"
- React-bridging:
- :path: "../node_modules/react-native/ReactCommon"
- React-callinvoker:
- :path: "../node_modules/react-native/ReactCommon/callinvoker"
- React-Codegen:
- :path: build/generated/ios
- React-Core:
- :path: "../node_modules/react-native/"
- React-CoreModules:
- :path: "../node_modules/react-native/React/CoreModules"
- React-cxxreact:
- :path: "../node_modules/react-native/ReactCommon/cxxreact"
- React-hermes:
- :path: "../node_modules/react-native/ReactCommon/hermes"
- React-jsi:
- :path: "../node_modules/react-native/ReactCommon/jsi"
- React-jsiexecutor:
- :path: "../node_modules/react-native/ReactCommon/jsiexecutor"
- React-jsinspector:
- :path: "../node_modules/react-native/ReactCommon/jsinspector"
- React-logger:
- :path: "../node_modules/react-native/ReactCommon/logger"
- react-native-ios-modal:
- :path: "../.."
- react-native-safe-area-context:
- :path: "../node_modules/react-native-safe-area-context"
- React-perflogger:
- :path: "../node_modules/react-native/ReactCommon/reactperflogger"
- React-RCTActionSheet:
- :path: "../node_modules/react-native/Libraries/ActionSheetIOS"
- React-RCTAnimation:
- :path: "../node_modules/react-native/Libraries/NativeAnimation"
- React-RCTBlob:
- :path: "../node_modules/react-native/Libraries/Blob"
- React-RCTImage:
- :path: "../node_modules/react-native/Libraries/Image"
- React-RCTLinking:
- :path: "../node_modules/react-native/Libraries/LinkingIOS"
- React-RCTNetwork:
- :path: "../node_modules/react-native/Libraries/Network"
- React-RCTSettings:
- :path: "../node_modules/react-native/Libraries/Settings"
- React-RCTText:
- :path: "../node_modules/react-native/Libraries/Text"
- React-RCTVibration:
- :path: "../node_modules/react-native/Libraries/Vibration"
- React-runtimeexecutor:
- :path: "../node_modules/react-native/ReactCommon/runtimeexecutor"
- ReactCommon:
- :path: "../node_modules/react-native/ReactCommon"
- RNScreens:
- :path: "../node_modules/react-native-screens"
- Yoga:
- :path: "../node_modules/react-native/ReactCommon/yoga"
-
-SPEC CHECKSUMS:
- boost: a7c83b31436843459a1961bfd74b96033dc77234
- DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54
- FBLazyVector: 8a28262f61fbe40c04ce8677b8d835d97c18f1b3
- FBReactNativeSpec: b475991eb2d8da6a4ec32d09a8df31b0247fa87d
- fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
- glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b
- hermes-engine: 3623325e0d0676a45fbc544d72c57dd79fce7446
- libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
- RCT-Folly: 0080d0a6ebf2577475bda044aa59e2ca1f909cda
- RCTRequired: 49a2c4d4215580d8b24ed538ae01b6de20b43a76
- RCTTypeSafety: 55d538399fe8b51e5cd862e2ec2f9b135b07e783
- React: 413fd7d791365c2c5742b60493d3ab450ca1a210
- React-bridging: 8e577e404677d57daa0310db63e6a27328a57207
- React-callinvoker: d0ae2f0ea66bcf29a3e42a895428d2f01473d2ea
- React-Codegen: 273200ed3b02d35fd1755aebe0eb3319b037d950
- React-Core: f42a10403076c1114f8c50f063ddafc9eea92fff
- React-CoreModules: 1ed78c63dad96f40b123d4d4ca455e09ccd8aaed
- React-cxxreact: 7d30af80adb5fe6a97646a06540c19e61736aa15
- React-hermes: 185ce251487bcb812c34ce33b1ab6412419b43a3
- React-jsi: 9b2b4ac1642b72bffcd74550f0caa0926b3f8a4d
- React-jsiexecutor: 4a893fc8f683b91befcaf56c44ad8be4506b6828
- React-jsinspector: 1d5a9e84e419a57cabc23249aec3d837d1b03a80
- React-logger: f8071ad48248781d5afdb8a07f778758529d3019
- react-native-ios-modal: 15476ab2f25b25fdd9918a6c162949dbbaa5b483
- react-native-safe-area-context: 39c2d8be3328df5d437ac1700f4f3a4f75716acc
- React-perflogger: 5e41b01b35d97cc1b0ea177181eb33b5c77623b6
- React-RCTActionSheet: 48949f30b24200c82f3dd27847513be34e06a3ae
- React-RCTAnimation: 96af42c97966fcd53ed9c31bee6f969c770312b6
- React-RCTBlob: 22aa326a2b34eea3299a2274ce93e102f8383ed9
- React-RCTImage: 1df0dbdb53609778f68830ccdd07ff3b40812837
- React-RCTLinking: eef4732d9102a10174115a727588d199711e376c
- React-RCTNetwork: 18716f00568ec203df2192d35f4a74d1d9b00675
- React-RCTSettings: 1dc8a5e5272cea1bad2f8d9b4e6bac91b846749b
- React-RCTText: 17652c6294903677fb3d754b5955ac293347782c
- React-RCTVibration: 0e247407238d3bd6b29d922d7b5de0404359431b
- React-runtimeexecutor: 5407e26b5aaafa9b01a08e33653255f8247e7c31
- ReactCommon: abf3605a56f98b91671d0d1327addc4ffb87af77
- RNScreens: ea4cd3a853063cda19a4e3c28d2e52180c80f4eb
- Yoga: 1f02ef4ce4469aefc36167138441b27d988282b1
-
-PODFILE CHECKSUM: 743b98a2f4844604f7964fdef75d215b5b160332
-
-COCOAPODS: 1.12.0
diff --git a/example/metro.config.js b/example/metro.config.js
deleted file mode 100644
index b5c0064b..00000000
--- a/example/metro.config.js
+++ /dev/null
@@ -1,40 +0,0 @@
-const path = require('path');
-const escape = require('escape-string-regexp');
-const exclusionList = require('metro-config/src/defaults/exclusionList');
-const pak = require('../package.json');
-
-const root = path.resolve(__dirname, '..');
-
-const modules = Object.keys({
- ...pak.peerDependencies,
-});
-
-module.exports = {
- projectRoot: __dirname,
- watchFolders: [root],
-
- // We need to make sure that only one version is loaded for peerDependencies
- // So we block them at the root, and alias them to the versions in example's node_modules
- resolver: {
- blacklistRE: exclusionList(
- modules.map(
- (m) =>
- new RegExp(`^${escape(path.join(root, 'node_modules', m))}\\/.*$`)
- )
- ),
-
- extraNodeModules: modules.reduce((acc, name) => {
- acc[name] = path.join(__dirname, 'node_modules', name);
- return acc;
- }, {}),
- },
-
- transformer: {
- getTransformOptions: async () => ({
- transform: {
- experimentalImportSupport: false,
- inlineRequires: true,
- },
- }),
- },
-};
diff --git a/example/package.json b/example/package.json
deleted file mode 100644
index 5c441e98..00000000
--- a/example/package.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "name": "IosModalExample",
- "version": "0.0.1",
- "private": true,
- "scripts": {
- "android": "react-native run-android",
- "ios": "react-native run-ios",
- "start": "react-native start",
- "pods": "pod-install --quiet"
- },
- "dependencies": {
- "@react-navigation/bottom-tabs": "^6.5.3",
- "@react-navigation/native": "^6.1.2",
- "@react-navigation/native-stack": "^6.9.8",
- "react": "18.1.0",
- "react-native": "0.70.4",
- "react-native-safe-area-context": "^4.5.0",
- "react-native-screens": "^3.19.0"
- },
- "devDependencies": {
- "@babel/core": "^7.12.9",
- "@babel/runtime": "^7.12.5",
- "babel-plugin-module-resolver": "^4.1.0",
- "metro-react-native-babel-preset": "0.72.3"
- }
-}
diff --git a/example/react-native.config.js b/example/react-native.config.js
deleted file mode 100644
index 63c70c5f..00000000
--- a/example/react-native.config.js
+++ /dev/null
@@ -1,9 +0,0 @@
-const path = require('path');
-
-module.exports = {
- dependencies: {
- 'react-native-ios-modal': {
- root: path.join(__dirname, '..'),
- },
- },
-};
diff --git a/example/src/App.tsx b/example/src/App.tsx
deleted file mode 100644
index d0f9b92a..00000000
--- a/example/src/App.tsx
+++ /dev/null
@@ -1,75 +0,0 @@
-import * as React from 'react';
-
-import { NavigationContainer } from '@react-navigation/native';
-import { createNativeStackNavigator } from '@react-navigation/native-stack';
-import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
-
-import { HomeScreen } from './screens/HomeScreen';
-import { Test01Screen } from './screens/Test01Screen';
-
-import { SHARED_ENV } from './constants/SharedEnv';
-
-const shouldEnableTabs =
- SHARED_ENV.enableReactNavigation &&
- SHARED_ENV.enableTabNavigation;
-
-function Tab1StackScreen() {
- if (shouldEnableTabs) {
- const Tab1Stack = createNativeStackNavigator();
-
- return (
-
-
-
-
- );
- } else {
- return null;
- }
-}
-
-export default function App() {
- if (shouldEnableTabs) {
- const TabNavigator = createBottomTabNavigator();
-
- return (
-
-
-
-
-
-
- );
- } else if (SHARED_ENV.enableReactNavigation) {
- const Stack = createNativeStackNavigator();
-
- return (
-
-
-
-
-
-
- );
- }
-
- return null;
-}
diff --git a/example/src/components/Card/CardBody.tsx b/example/src/components/Card/CardBody.tsx
deleted file mode 100644
index 8552ce74..00000000
--- a/example/src/components/Card/CardBody.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import * as React from 'react';
-import { StyleSheet, View, ViewStyle } from 'react-native';
-
-import * as Colors from '../../constants/Colors';
-
-export const CardBody: React.FC<{
- style?: ViewStyle;
-}> = (props) => {
- return (
-
- {props.children}
-
- );
-};
-
-const styles = StyleSheet.create({
- cardBodyContainer: {
- paddingHorizontal: 12,
- paddingVertical: 15,
- marginHorizontal: 10,
- marginVertical: 10,
- backgroundColor: Colors.PURPLE[50],
- borderRadius: 10,
- },
-});
diff --git a/example/src/components/Card/CardButton.tsx b/example/src/components/Card/CardButton.tsx
deleted file mode 100644
index 7b1086e7..00000000
--- a/example/src/components/Card/CardButton.tsx
+++ /dev/null
@@ -1,72 +0,0 @@
-import * as React from 'react';
-import {
- StyleSheet,
- Text,
- TouchableOpacity,
- GestureResponderEvent,
- ViewStyle,
-} from 'react-native';
-
-import * as Colors from '../../constants/Colors';
-
-/**
- * ```
- * ┌─────────────────────────────┐
- * │ Title │
- * │ Subtitle │
- * └─────────────────────────────┘
- * ```
- */
-export function CardButton(props: {
- title: string;
- subtitle?: string;
- onPress: (event: GestureResponderEvent) => void;
- style?: ViewStyle;
-}) {
- // prettier-ignore
- const hasSubtitle = (
- props.subtitle != null ||
- props.subtitle === ''
- );
-
- const buttonContainer: ViewStyle = {
- alignItems: hasSubtitle ? 'flex-start' : 'center',
- };
-
- return (
-
-
-
- {/* Button Title */ props.title}
-
- {hasSubtitle && (
-
- {/* Button Subtitle */ props.subtitle}
-
- )}
-
-
- );
-}
-
-const styles = StyleSheet.create({
- cardButtonContainer: {
- paddingHorizontal: 12,
- paddingVertical: 8,
- backgroundColor: Colors.PURPLE.A200,
- borderRadius: 10,
- marginTop: 12,
- },
- cardButtonTitleText: {
- color: 'white',
- fontSize: 15,
- fontWeight: '700',
- },
- cardButtonSubtitleText: {
- color: 'white',
- fontWeight: '400',
- },
-});
diff --git a/example/src/components/Card/CardLogDisplay/CardLogDisplay.tsx b/example/src/components/Card/CardLogDisplay/CardLogDisplay.tsx
deleted file mode 100644
index 9f9a3040..00000000
--- a/example/src/components/Card/CardLogDisplay/CardLogDisplay.tsx
+++ /dev/null
@@ -1,152 +0,0 @@
-import * as React from 'react';
-import { StyleSheet, View, Text, ScrollView, ViewStyle } from 'react-native';
-
-import type {
- CardLogDisplayItem,
- CardLogDisplayProps,
- CardLogDisplayHandle,
- InternalListMode,
-} from './CardLogDisplayTypes';
-
-import { CardLogDisplayListRow } from './CardLogDisplayListRow';
-
-import * as HelpersInternal from './CardLogDisplayHelpers';
-
-export const CardLogDisplay = React.forwardRef<
- CardLogDisplayHandle,
- CardLogDisplayProps
->((props, ref) => {
- const [logList, setLogList] = React.useState(
- props.initialLogItems
- );
-
- // callable functions...
- React.useImperativeHandle(ref, () => ({
- log: (title) => {
- setLogList((prevItems) => [
- ...prevItems,
- {
- title,
- timestamp: Date.now(),
- index: prevItems.length,
- },
- ]);
- },
- clearLogs: () => {
- setLogList([]);
- },
- setLogs: (nextLogs) => {
- setLogList(nextLogs);
- },
- }));
-
- const listMode: InternalListMode =
- logList.length === 0
- ? /* true */ 'EMPTY'
- : /* false */ props.listDisplayMode;
-
- // prettier-ignore
- const listMaxItems =
- props.listDisplayMode === 'FIXED' ? (props.listMaxItemsToShow ?? 10) :
- props.listDisplayMode === 'SCROLL_ENABLED' ? props.listMaxItems :
- /* default */ 20;
-
- const logListTruncated = logList
- .slice() // make a copy
- .reverse()
- .slice(-listMaxItems);
-
- switch (listMode) {
- case 'EMPTY':
- const listEmptyMessage = props.listEmptyMessage ?? 'No Items To Show...';
- return (
-
- {listEmptyMessage}
-
- );
-
- case 'FIXED':
- // guard
- if (!HelpersInternal.isDisplayListModePropFixed(props)) {
- break;
- }
-
- return (
-
- {logListTruncated.map((item) => (
-
- ))}
-
- );
-
- case 'SCROLL_ENABLED': /* fallthrough */
- case 'SCROLL_FIXED':
- const isScrollEnabled = listMode === 'SCROLL_ENABLED';
-
- // guard
- if (!HelpersInternal.isDisplayListModePropScroll(props)) {
- break;
- }
-
- const scrollViewHeight = props.listMinHeight ?? 150;
-
- const logRootContainerStyle: ViewStyle = {
- height: scrollViewHeight,
- };
-
- return (
-
- {logListTruncated.map((item) => (
-
- ))}
-
- );
- }
-
- return null;
-});
-
-// Section - Styles
-// ----------------
-
-const styles = StyleSheet.create({
- logRootContainer: {
- marginTop: 15,
- height: 150,
- backgroundColor: 'rgba(0,0,0,0.04)',
- borderRadius: 10,
- paddingHorizontal: 12,
- paddingVertical: 7,
- },
- logContainerEmpty: {
- alignItems: 'center',
- justifyContent: 'center',
- },
- logEmptyText: {
- fontWeight: '600',
- fontSize: 16,
- color: 'rgba(0,0,0,0.35)',
- },
-});
diff --git a/example/src/components/Card/CardLogDisplay/CardLogDisplayHelpers.ts b/example/src/components/Card/CardLogDisplay/CardLogDisplayHelpers.ts
deleted file mode 100644
index aaf4b5dd..00000000
--- a/example/src/components/Card/CardLogDisplay/CardLogDisplayHelpers.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import type {
- CardLogDisplayProps,
- DisplayListModePropScroll,
- DisplayListModePropFixed,
-} from './CardLogDisplayTypes';
-
-export function isDisplayListModePropScroll(
- props: CardLogDisplayProps
-): props is CardLogDisplayProps & DisplayListModePropScroll {
- return (
- /* 1 */ props.listDisplayMode === 'SCROLL_ENABLED' ||
- /* 2 */ props.listDisplayMode === 'SCROLL_FIXED'
- );
-}
-
-export function isDisplayListModePropFixed(
- props: CardLogDisplayProps
-): props is CardLogDisplayProps & DisplayListModePropFixed {
- return props.listDisplayMode === 'FIXED';
-}
diff --git a/example/src/components/Card/CardLogDisplay/CardLogDisplayListRow.tsx b/example/src/components/Card/CardLogDisplay/CardLogDisplayListRow.tsx
deleted file mode 100644
index abbcd577..00000000
--- a/example/src/components/Card/CardLogDisplay/CardLogDisplayListRow.tsx
+++ /dev/null
@@ -1,66 +0,0 @@
-import * as React from 'react';
-import { View, Text, StyleSheet } from 'react-native';
-
-import type { CardLogDisplayItem } from './CardLogDisplayTypes';
-
-import * as Helpers from '../../../functions/Helpers';
-
-export function CardLogDisplayListRow(props: {
- item: CardLogDisplayItem;
- shouldShowTimestamp: boolean;
-}) {
- const { item } = props;
- const date = new Date(item.timestamp);
-
- const h = Helpers.pad(date.getHours());
- const m = Helpers.pad(date.getMinutes());
- const s = Helpers.pad(date.getSeconds());
- const ms = Helpers.pad(date.getMilliseconds(), 3);
-
- const timeString = `${h}:${m}:${s}.${ms}`;
-
- return (
-
-
- {/* Col - Index */}
- {`${Helpers.pad(item.index, 3)}`}
-
- {props.shouldShowTimestamp && (
-
- {/* Col - Timestamp */}
- {timeString}
-
- )}
-
- {/* Col - Title */}
- {item.title}
-
-
- );
-}
-
-// Section - Styles
-// ----------------
-
-const styles = StyleSheet.create({
- logListItemContainer: {
- flexDirection: 'row',
- },
- logItemIndexText: {
- fontVariant: ['tabular-nums'],
- fontWeight: 'bold',
- opacity: 0.4,
- },
- logItemTimestampText: {
- fontVariant: ['tabular-nums'],
- fontWeight: '700',
- marginLeft: 10,
- opacity: 0.4,
- textDecorationLine: 'underline',
- textDecorationColor: 'rgba(0,0,0,0.4)',
- },
- logItemTypeText: {
- marginLeft: 10,
- opacity: 0.9,
- },
-});
diff --git a/example/src/components/Card/CardLogDisplay/CardLogDisplayTypes.ts b/example/src/components/Card/CardLogDisplay/CardLogDisplayTypes.ts
deleted file mode 100644
index 8a8c8736..00000000
--- a/example/src/components/Card/CardLogDisplay/CardLogDisplayTypes.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-import type { ViewStyle } from 'react-native';
-
-// Section - Types - Internal
-// --------------------------
-
-export type DisplayListModePropFixed = {
- listDisplayMode: 'FIXED';
- listMaxItemsToShow?: number;
-};
-
-export type DisplayListModePropScroll = {
- listDisplayMode: 'SCROLL_ENABLED' | 'SCROLL_FIXED';
- listMaxItems?: number;
- listMinHeight?: number;
- scrollViewStyle?: ViewStyle;
- contentContainerStyle?: ViewStyle;
-};
-
-export type DisplayListModeProp =
- | DisplayListModePropFixed
- | DisplayListModePropScroll;
-
-export type CardLogDisplayBaseProps = {
- style?: ViewStyle;
- initialLogItems?: Array;
- listEmptyMessage?: string;
- shouldShowTimestamp?: boolean;
-};
-
-export type CardLogDisplayProps = CardLogDisplayBaseProps & DisplayListModeProp;
-
-export type InternalListMode = CardLogDisplayListMode | 'EMPTY';
-
-// Section - Types - Public
-// ------------------------
-
-export type CardLogDisplayItem = {
- timestamp: number;
- title: string;
- index: number;
-};
-
-export type CardLogDisplayListMode = DisplayListModeProp['listDisplayMode'];
-
-export type CardLogDisplayHandle = {
- log: (title: string) => void;
- clearLogs: () => void;
- setLogs: (nextLogs: CardLogDisplayItem[]) => void;
-};
diff --git a/example/src/components/Card/CardLogDisplay/index.ts b/example/src/components/Card/CardLogDisplay/index.ts
deleted file mode 100644
index edd1ad7f..00000000
--- a/example/src/components/Card/CardLogDisplay/index.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-export * from './CardLogDisplay';
-
-export {
- CardLogDisplayItem,
- CardLogDisplayListMode,
- CardLogDisplayHandle,
-} from './CardLogDisplayTypes';
diff --git a/example/src/components/Card/CardRowColorPicker.tsx b/example/src/components/Card/CardRowColorPicker.tsx
deleted file mode 100644
index 4e3c1e83..00000000
--- a/example/src/components/Card/CardRowColorPicker.tsx
+++ /dev/null
@@ -1,174 +0,0 @@
-import * as React from 'react';
-import {
- StyleSheet,
- View,
- Text,
- TouchableOpacity,
- FlatList,
- ListRenderItem,
-} from 'react-native';
-
-import * as Colors from '../../constants/Colors';
-
-type CardRowColorPickerState = {
- selectedItem?: string;
-};
-
-type CardRowColorPickerProps = {
- initialSelectedColor?: string;
- colors?: string;
- onSelectItem?: (color?: string) => void;
-};
-
-const PALLETES = [
- Colors.PINK,
- Colors.RED,
- Colors.ORANGE,
- Colors.AMBER,
- Colors.YELLOW,
- Colors.LIGHT_GREEN,
- Colors.GREEN,
- Colors.BLUE,
- Colors.INDIGO,
- Colors.VIOLET,
- Colors.PURPLE,
- Colors.BLUE_GREY,
- Colors.GREY,
-];
-
-const BASE_COLORS = PALLETES.reduce(
- (acc: string[][], curr) => {
- if ('A700' in curr) {
- acc[0].push(curr.A700);
- }
-
- acc[1].push(curr['900']);
- acc[2].push(curr['600']);
- acc[3].push(curr['300']);
-
- return acc;
- },
- [[], [], [], []]
-);
-
-const DEFAULT_COLORS = [
- 'black',
- 'white',
- ...BASE_COLORS.flat(),
-];
-
-export class CardRowColorPicker extends React.Component<
- CardRowColorPickerProps,
- CardRowColorPickerState
-> {
- constructor(props) {
- super(props);
-
- this.state = {
- selectedItem: undefined,
- };
- }
-
- _listRenderItem: ListRenderItem = ({ item }) => {
- const props = this.props;
- const state = this.state;
-
- const isSelected = item === state.selectedItem;
-
- return (
- {
- // clear if already selected
- const selectedItem = isSelected
- ? undefined
- : item;
-
- this.setState({ selectedItem });
- props.onSelectItem?.(selectedItem);
- }}
- />
- );
- };
-
- render() {
- const state = this.state;
-
- const hasSelection = state.selectedItem != null;
-
- return (
-
-
-
- {'Selected Color:'}
-
- {hasSelection ? (
-
- ) : (
-
- {'N/A'}
-
- )}
-
- item}
- horizontal={true}
- />
-
- );
- }
-}
-
-const styles = StyleSheet.create({
- rootContainer: {
- marginTop: 12,
- },
- selectedColorContainer: {
- flexDirection: 'row',
- justifyContent: 'space-between',
- alignItems: 'center',
- minHeight: 25,
- },
- selectedColorLabel: {
- fontSize: 16,
- },
- selectedColorValue: {
- fontSize: 16,
- color: 'rgba(0,0,0,0.3)',
- },
- list: {
- marginTop: 10,
- backgroundColor: Colors.INDIGO[100],
- borderRadius: 10,
- paddingHorizontal: 10,
- paddingVertical: 10,
- },
- listItem: {
- height: 25,
- minWidth: 25,
- backgroundColor: 'white',
- borderRadius: 25 / 2,
- marginRight: 10,
- },
- listItemSelected: {
- width: 50,
- },
- selectedColorValueContainer: {
- borderWidth: 3,
- borderColor: 'rgba(255,255,255,0.75)',
- },
-});
diff --git a/example/src/components/Card/CardRowLabelDisplay.tsx b/example/src/components/Card/CardRowLabelDisplay.tsx
deleted file mode 100644
index 0b77d15a..00000000
--- a/example/src/components/Card/CardRowLabelDisplay.tsx
+++ /dev/null
@@ -1,52 +0,0 @@
-import * as React from 'react';
-import { StyleSheet, View, Text } from 'react-native';
-
-import * as Colors from '../../constants/Colors';
-
-/**
- * ```
- * ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
- * Label Value │
- * └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
- * ```
- */
-export function CardRowLabelDisplay(props: {
- label?: string;
- value?: string | number;
-}) {
- return (
-
-
- {props.label ?? 'Current Value'}
-
-
- {props.value ?? 'N/A'}
-
-
- );
-}
-
-const styles = StyleSheet.create({
- cardRowLabelDisplayContainer: {
- flexDirection: 'row',
- marginTop: 12,
- paddingHorizontal: 12,
- paddingVertical: 5,
- backgroundColor: Colors.INDIGO[100],
- borderRadius: 10,
- alignItems: 'center',
- justifyContent: 'space-between',
- },
- cardRowLabelDisplayLabelText: {
- fontSize: 16,
- fontWeight: '500',
- color: Colors.PURPLE[1100],
- opacity: 0.75,
- },
- cardRowLabelDisplayValueText: {
- fontSize: 16,
- fontWeight: '500',
- color: Colors.PURPLE[1100],
- opacity: 0.4,
- },
-});
diff --git a/example/src/components/Card/CardRowStepper.tsx b/example/src/components/Card/CardRowStepper.tsx
deleted file mode 100644
index 68db5d3b..00000000
--- a/example/src/components/Card/CardRowStepper.tsx
+++ /dev/null
@@ -1,109 +0,0 @@
-import * as React from 'react';
-import {
- StyleSheet,
- View,
- Text,
- TouchableOpacity,
-} from 'react-native';
-
-import * as Colors from '../../constants/Colors';
-
-export function CardRowStepper(props: {
- title: string;
- subtitle?: string;
- value: number;
- stepperAmount: number;
- onValueChange: (value: number) => void;
-}) {
- return (
-
-
-
- {props.title ?? 'Title'}
-
-
- {props.subtitle ??
- `Current value: ${props.value ?? 0}`}
-
-
-
- {
- props.onValueChange(
- props.value - props.stepperAmount
- );
- }}
- >
-
- {'–'}
-
-
- {
- props.onValueChange(
- props.value + props.stepperAmount
- );
- }}
- >
-
- {'+'}
-
-
-
-
- );
-}
-
-const styles = StyleSheet.create({
- cardRowStepperContainer: {
- flexDirection: 'row',
- alignItems: 'center',
- marginTop: 12,
- },
- cardRowStepperLabelContainer: {
- flex: 1,
- },
- cardRowStepperLabelText: {
- fontSize: 16,
- fontWeight: '500',
- color: Colors.PURPLE[1200],
- },
- cardRowStepperSubtitleText: {
- flex: 1,
- fontSize: 16,
- opacity: 0.5,
- color: Colors.PURPLE[1100],
- },
- cardRowStepperButtonsContainer: {
- flexDirection: 'row',
- overflow: 'hidden',
- borderRadius: 10,
- },
- cardRowStepperButton: {
- padding: 10,
- backgroundColor: Colors.PURPLE.A200,
- width: 45,
- alignItems: 'center',
- justifyContent: 'center',
- },
- cardRowStepperButtonLeft: {
- marginRight: 0.5,
- },
- cardRowStepperButtonRight: {
- marginLeft: 0.5,
- },
- cardRowStepperButtonLabel: {
- fontWeight: '500',
- color: 'white',
- opacity: 0.9,
- fontSize: 18,
- },
-});
diff --git a/example/src/components/Card/CardRowSwitch.tsx b/example/src/components/Card/CardRowSwitch.tsx
deleted file mode 100644
index 2eba17f5..00000000
--- a/example/src/components/Card/CardRowSwitch.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-import * as React from 'react';
-import {
- StyleSheet,
- View,
- Text,
- Switch,
-} from 'react-native';
-
-import * as Colors from '../../constants/Colors';
-
-/**
- * ```
- * ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐
- * Title ┌──┬─┐
- * │ Subtitle └──┴─┘ │
- * ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
- * ```
- */
-export function CardRowSwitch(props: {
- title: string;
- subtitle?: string;
- value: boolean;
- onValueChange: (value: boolean) => void;
-}) {
- return (
-
-
-
- {props.title ?? 'title'}
-
-
- {props.subtitle ?? 'Toggle the value'}
-
-
-
-
- );
-}
-
-const styles = StyleSheet.create({
- cardRowSwitchContainer: {
- flexDirection: 'row',
- alignItems: 'center',
- marginTop: 12,
- },
- cardRowSwitchLabelContainer: {
- flex: 1,
- marginRight: 10,
- },
- cardRowSwitchLabelText: {
- fontSize: 16,
- fontWeight: '500',
- color: Colors.PURPLE[1200],
- },
- cardRowSwitchSubtitleText: {
- fontSize: 16,
- opacity: 0.5,
- color: Colors.PURPLE[1100],
- },
-});
diff --git a/example/src/components/Card/CardRowTextInput.tsx b/example/src/components/Card/CardRowTextInput.tsx
deleted file mode 100644
index 843777c4..00000000
--- a/example/src/components/Card/CardRowTextInput.tsx
+++ /dev/null
@@ -1,45 +0,0 @@
-import * as React from 'react';
-import { StyleSheet, TextInput } from 'react-native';
-
-import * as Colors from '../../constants/Colors';
-
-export class CardRowTextInput extends React.PureComponent<{
- placeholder?: string;
-}> {
- state = {
- textInput: '',
- };
-
- getText = () => {
- return this.state.textInput;
- };
-
- _handleOnChangeText = (text: string) => {
- this.setState({ textInput: text });
- };
-
- render() {
- const props = this.props;
-
- return (
-
- );
- }
-}
-
-const styles = StyleSheet.create({
- cardRowTextInput: {
- backgroundColor: Colors.INDIGO[100],
- fontSize: 16,
- color: Colors.INDIGO[900],
- paddingHorizontal: 12,
- paddingVertical: 7,
- borderRadius: 10,
- marginTop: 12,
- },
-});
diff --git a/example/src/components/Card/CardTitle.tsx b/example/src/components/Card/CardTitle.tsx
deleted file mode 100644
index b855fa86..00000000
--- a/example/src/components/Card/CardTitle.tsx
+++ /dev/null
@@ -1,89 +0,0 @@
-import * as React from 'react';
-import { StyleSheet, View, Text } from 'react-native';
-
-import * as Colors from '../../constants/Colors';
-
-// prettier-ignore
-/**
- * ```
- * ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐
- * │ .─────────────. │
- * │ Title ( Pill Title ) │
- * │ `─────────────' │
- * │ Subtitle... │
- * └─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─┘
- * ```
- */
-export function CardTitle(props: {
- extraMarginTop?: number;
- //
- title?: string;
- pillTitle?: string;
- subtitle?: string;
-}){
-
- const hasTitle = (props.title != null);
-
- const cardPillWrapper = {
- marginLeft: (hasTitle ? 10 : 0),
- };
-
- return (
-
-
-
- {props.title ?? ''}
-
- {props.pillTitle && (
-
-
-
- {props.pillTitle}
-
-
-
- )}
-
- {props.subtitle && (
-
- {props.subtitle ?? 'subtitle'}
-
- )}
-
- );
-}
-
-const styles = StyleSheet.create({
- cardTitleContainer: {
- flexDirection: 'row',
- alignItems: 'center',
- },
- cardTitle: {
- fontSize: 18,
- fontWeight: '600',
- },
- cardPillWrapper: {
- flex: 1,
- alignItems: 'flex-start',
- },
- cardPillContainer: {
- backgroundColor: Colors.BLUE.A400,
- paddingHorizontal: 10,
- paddingVertical: 5,
- borderRadius: 10,
- },
- cardPillTitleText: {
- color: 'white',
- fontWeight: '600',
- fontSize: 15,
- },
- cardSubtitleText: {
- marginTop: 7,
- fontWeight: '300',
- fontSize: 14,
- color: 'rgba(0,0,0,0.5)',
- },
-});
diff --git a/example/src/components/Card/CardToggleButton.tsx b/example/src/components/Card/CardToggleButton.tsx
deleted file mode 100644
index ee757443..00000000
--- a/example/src/components/Card/CardToggleButton.tsx
+++ /dev/null
@@ -1,26 +0,0 @@
-import * as React from 'react';
-
-import { CardButton } from './CardButton';
-
-export function CardToggleButton(props: {
- title: string;
- subtitle?: string;
- value: boolean;
- indicatorOn?: string;
- indicatorOff?: string;
- onPress: (value: boolean) => void;
-}) {
- const prefix = props.value
- ? props.indicatorOn ?? '☀️'
- : props.indicatorOff ?? '🌙';
-
- return (
- {
- props.onPress(!props.value);
- }}
- />
- );
-}
diff --git a/example/src/components/Card/index.ts b/example/src/components/Card/index.ts
deleted file mode 100644
index 96d4cf57..00000000
--- a/example/src/components/Card/index.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-export * from './CardBody';
-export * from './CardTitle';
-export * from './CardButton';
-export * from './CardRowLabelDisplay';
-export * from './CardRowSwitch';
-export * from './CardRowStepper';
-export * from './CardRowTextInput';
-export * from './CardRowColorPicker';
-export * from './CardToggleButton';
diff --git a/example/src/components/ExampleCard.tsx b/example/src/components/ExampleCard.tsx
deleted file mode 100644
index 74606a3e..00000000
--- a/example/src/components/ExampleCard.tsx
+++ /dev/null
@@ -1,144 +0,0 @@
-import * as React from 'react';
-import { StyleSheet, View, Text, ViewStyle } from 'react-native';
-
-import * as Colors from '../constants/Colors';
-
-export type ColorConfig = {
- headerBGColorActive: string;
- headerBGColorInactive: string;
-
- bodyBGColorActive: string;
- bodyBGColorInactive: string;
-
- bodyDescriptionLabelColor: string;
-};
-
-export type ExampleCardProps = {
- index?: number;
- title?: string;
- subtitle?: string;
- description?: string[];
- colorConfig?: ColorConfig;
-
- style?: ViewStyle;
- extraContentContainerStyle?: ViewStyle;
- children?: JSX.Element | JSX.Element[];
-};
-
-const defaultColorConfig: ColorConfig = {
- headerBGColorActive: Colors.PURPLE.A700,
- headerBGColorInactive: Colors.BLUE.A700,
-
- bodyBGColorActive: Colors.PURPLE[100],
- bodyBGColorInactive: Colors.BLUE[100],
-
- bodyDescriptionLabelColor: Colors.BLUE[1100],
-};
-
-export function ExampleCard(props: ExampleCardProps) {
- const colorConfig = props.colorConfig ?? defaultColorConfig;
-
- const titleContainerStyle = {
- backgroundColor: colorConfig.headerBGColorInactive,
- };
-
- const bodyContainerStyle = {
- backgroundColor: colorConfig.bodyBGColorInactive,
- };
-
- const bodyDescriptionLabelTextStyle = {
- color: colorConfig.bodyDescriptionLabelColor,
- };
-
- const descriptionMain = props.description?.[0];
- const descriptionSub = props.description?.slice(1);
-
- return (
-
-
-
- {`${props.index ?? 0}. `}
-
-
- {props.title ?? 'N/A'}
- {props.subtitle && (
- {props.subtitle}
- )}
-
-
-
- {descriptionMain && (
-
-
- {'Description: '}
-
- {descriptionMain}
-
- )}
- {descriptionSub?.map((description, index) => (
-
- {description}
-
- ))}
- {React.Children.count(props.children) > 0 && (
- {props.children}
- )}
-
-
- );
-}
-
-const styles = StyleSheet.create({
- rootContainer: {
- borderRadius: 10,
- overflow: 'hidden',
- },
- headerContainer: {
- flexDirection: 'row',
- alignItems: 'center',
- paddingHorizontal: 15,
- paddingVertical: 8,
- },
- headerTitleContainer: {
- marginLeft: 5,
- },
- headerTitleText: {
- flex: 1,
- fontSize: 16,
- fontWeight: '700',
- color: 'white',
- },
- headerTitleIndexText: {
- fontSize: 16,
- fontWeight: '800',
- color: 'rgba(255,255,255,0.75)',
- },
- headerSubtitleText: {
- fontSize: 14,
- color: 'rgba(255,255,255,0.75)',
- fontWeight: '600',
- },
- bodyContainer: {
- paddingHorizontal: 12,
- paddingTop: 7,
- paddingBottom: 10,
- },
- bodyDescriptionText: {
- fontWeight: '300',
- color: 'rgba(0,0,0,0.75)',
- },
- bodyDescriptionLabelText: {
- fontWeight: 'bold',
- },
- bodyDescriptionSubText: {
- marginTop: 10,
- },
-});
diff --git a/example/src/components/ObjectPropertyDisplay.tsx b/example/src/components/ObjectPropertyDisplay.tsx
deleted file mode 100644
index 5fad323c..00000000
--- a/example/src/components/ObjectPropertyDisplay.tsx
+++ /dev/null
@@ -1,146 +0,0 @@
-import * as React from 'react';
-import {
- StyleSheet,
- View,
- Text,
- ViewStyle,
-} from 'react-native';
-
-import * as Colors from '../constants/Colors';
-
-/**
- * ```
- * ┌─────────────────────────────┐
- * │ Property 'Value' │
- * │ Object │
- * │ Property 'Value' │
- * │ Property 'Value' │
- * └─────────────────────────────┘
- * ```
- */
-export function ObjectPropertyDisplay<
- T extends Object
->(props: { object?: T; style?: ViewStyle }) {
- const hasObject = props.object != null;
-
- const objectKeys = (
- hasObject ? Object.keys(props.object) : []
- ) as Array;
-
- return hasObject ? (
-
- {objectKeys.map((objKey, index) => {
- const value = props.object[objKey];
- const isValueObj =
- typeof value === 'object' && value !== null;
-
- return isValueObj ? (
-
-
- {`${objKey}: `}
-
-
-
- ) : (
-
-
- {`${objKey}: `}
-
-
- {isValueObj
- ? '...'
- : `'${props.object[objKey]}'`}
-
-
- );
- })}
-
- ) : (
-
-
- {'Nothing to show'}
-
-
- );
-}
-
-const styles = StyleSheet.create({
- rootContainerBase: {
- marginTop: 12,
- paddingHorizontal: 12,
- paddingVertical: 10,
- backgroundColor: Colors.INDIGO[100],
- borderRadius: 10,
- },
- rootContainerWhenEmptyObject: {
- alignItems: 'center',
- justifyContent: 'center',
- },
- rootContainerWhenHasObject: {
- flexDirection: 'column',
- paddingVertical: 5,
- },
- propertyLabelText: {
- flex: 1,
- fontSize: 16,
- fontWeight: '500',
- color: Colors.PURPLE[1100],
- opacity: 0.75,
- marginRight: 10,
- },
- propertyLabelObjectText: {
- flex: 0,
- },
- propertyValueText: {
- flex: 1,
- textAlign: 'right',
- fontSize: 16,
- fontWeight: '500',
- color: Colors.PURPLE[1100],
- opacity: 0.4,
- },
- objectPropertyDisplay: {
- marginTop: 0,
- paddingHorizontal: 7,
- paddingVertical: 5,
- },
- propertyRowContainer: {
- flexDirection: 'row',
- alignItems: 'center',
- },
- emptyObjectText: {
- opacity: 0.75,
- },
-});
diff --git a/example/src/components/Spacer.tsx b/example/src/components/Spacer.tsx
deleted file mode 100644
index a70c5bbd..00000000
--- a/example/src/components/Spacer.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import * as React from 'react';
-
-import { View } from 'react-native';
-
-export function Spacer(props: { space?: number }) {
- return ;
-}
-
-export function SpacerLine(props: {
- space?: number;
- lineThickness?: number;
-}) {
- const spacerLineStyle = {
- paddingTop: props.space ?? 12,
- borderBottomWidth: props.lineThickness ?? 1,
- borderBottomColor: 'rgba(0,0,0,0.15)',
- };
-
- return ;
-}
diff --git a/example/src/components/ViewShapes.tsx b/example/src/components/ViewShapes.tsx
deleted file mode 100644
index 61f78154..00000000
--- a/example/src/components/ViewShapes.tsx
+++ /dev/null
@@ -1,69 +0,0 @@
-import * as React from 'react';
-import { StyleSheet, View, ViewStyle } from 'react-native';
-
-export function TriangleView(props: {
- style?: ViewStyle;
- width?: number;
- height?: number;
- color?: string;
- children?: JSX.Element | JSX.Element[];
-}) {
- const { width, height, color } = props;
-
- const shapeWidth = width ?? (height == null ? width : 30);
-
- const shapeHeight =
- height ?? (width == null ? height : 30);
-
- const containerStyle = {
- borderLeftWidth: shapeHeight,
- borderRightWidth: shapeHeight,
- borderBottomWidth: shapeWidth,
- borderBottomColor: color ?? 'red',
- };
-
- return (
-
- {props.children}
-
- );
-}
-
-export function CircleView(props: {
- style?: ViewStyle;
- size?: number;
- color?: string;
- children?: JSX.Element | JSX.Element[];
-}) {
- const size = props.size ?? 30;
-
- const containerStyle = {
- height: size,
- aspectRatio: 1,
- borderRadius: size / 2,
- backgroundColor: props.color ?? 'white',
- };
-
- return (
-
- {props.children}
-
- );
-}
-
-const styles = StyleSheet.create({
- triangleContainer: {
- width: 0,
- height: 0,
- backgroundColor: 'transparent',
- borderStyle: 'solid',
- borderLeftColor: 'transparent',
- borderRightColor: 'transparent',
- },
-});
diff --git a/example/src/constants/Colors.ts b/example/src/constants/Colors.ts
deleted file mode 100644
index d75975f0..00000000
--- a/example/src/constants/Colors.ts
+++ /dev/null
@@ -1,234 +0,0 @@
-/* eslint-disable prettier/prettier */
-
-export const BLACK = {
- 100: '#F5F5F5',
- 200: '#EEEEEE',
- 300: '#E0E0E0',
- 400: '#BDBDBD',
- 500: '#9E9E9E',
- 600: '#757575',
- 700: '#616161',
- 800: '#424242',
- 900: '#212121',
-};
-
-export const GREY = {
- 50 : '#FAFAFA',
- 100: '#F5F5F5',
- 200: '#EEEEEE',
- 300: '#E0E0E0',
- 400: '#BDBDBD',
- 500: '#9E9E9E',
- 600: '#757575',
- 700: '#616161',
- 800: '#424242',
- 900: '#212121',
-};
-
-export const BLUE_GREY = {
- 50 : '#ECEFF1',
- 100: '#CFD8DC',
- 200: '#B0BEC5',
- 300: '#90A4AE',
- 400: '#78909C',
- 500: '#607D8B',
- 600: '#546E7A',
- 700: '#455A64',
- 800: '#37474F',
- 900: '#263238',
-};
-
-export const RED = {
- 50 : '#FFEBEE',
- 100 : '#FFCDD2',
- 200 : '#EF9A9A',
- 300 : '#E57373',
- 400 : '#EF5350',
- 500 : '#F44336',
- 600 : '#E53935',
- 700 : '#D32F2F',
- 800 : '#C62828',
- 900 : '#B71C1C',
- A100: '#FF8A80',
- A200: '#FF5252',
- A400: '#FF1744',
- A700: '#D50000',
-};
-
-export const PINK = {
- '50' : '#FCE4EC',
- '100' : '#F8BBD0',
- '200' : '#F48FB1',
- '300' : '#F06292',
- '400' : '#EC407A',
- '500' : '#E91E63',
- '600' : '#D81B60',
- '700' : '#C2185B',
- '800' : '#AD1457',
- '900' : '#880E4F',
- 'A100': '#FF80AB',
- 'A200': '#FF4081',
- 'A400': '#F50057',
- 'A700': '#C51162',
-};
-
-export const VIOLET = {
- '100' :'#E1BEE7',
- '200' :'#CE93D8',
- '300' :'#BA68C8',
- '400' :'#AB47BC',
- '500' :'#9C27B0',
- '600' :'#8E24AA',
- '700' :'#7B1FA2',
- '800' :'#6A1B9A',
- '900' :'#4A148C',
- 'A700' :'#AA00FF',
-};
-
-export const PURPLE = {
- '25' :'#f1edf7',
- '50' :'#EDE7F6',
- '100' :'#D1C4E9',
- '200' :'#B39DDB',
- '300' :'#9575CD',
- '400' :'#7E57C2',
- '500' :'#673AB7',
- '600' :'#5E35B1',
- '700' :'#512DA8',
- '800' :'#4527A0',
- '900' :'#311B92',
- '1000' :'#190b5b',
- '1100' :'#0f0442',
- '1200' :'#0e0333',
- '1300' :'#090126',
- 'A100' :'#B388FF',
- 'A200' :'#7C4DFF',
- 'A400' :'#651FFF',
- 'A700' :'#6200EA',
-};
-
-export const INDIGO = {
- '50' : '#E8EAF6',
- '100' : '#C5CAE9',
- '200' : '#9FA8DA',
- '300' : '#7986CB',
- '400' : '#5C6BC0',
- '500' : '#3F51B5',
- '600' : '#3949AB',
- '700' : '#303F9F',
- '800' : '#283593',
- '900' : '#1A237E',
- '1000': '#11165e',
- '2000': '#0b0f47',
- '3000': '#070b36',
- 'A100': '#8C9EFF',
- 'A200': '#536DFE',
- 'A400': '#3D5AFE',
- 'A700': '#304FFE',
-};
-
-export const BLUE = {
- '50' : '#E3F2FD',
- '100' : '#BBDEFB',
- '200' : '#90CAF9',
- '300' : '#64B5F6',
- '400' : '#42A5F5',
- '500' : '#2196F3',
- '600' : '#1E88E5',
- '700' : '#1976D2',
- '800' : '#1565C0',
- '900' : '#0D47A1',
- '1000': '#093270',
- '1100': '#031f4a',
- '1200': '#001029',
- 'A100': '#82B1FF',
- 'A200': '#448AFF',
- 'A400': '#2979FF',
- 'A700': '#2962FF',
-};
-
-export const GREEN = {
- 50 : '#E8F5E9',
- 100 : '#C8E6C9',
- 200 : '#A5D6A7',
- 300 : '#81C784',
- 400 : '#66BB6A',
- 500 : '#4CAF50',
- 600 : '#43A047',
- 700 : '#388E3C',
- 800 : '#2E7D32',
- 900 : '#1B5E20',
- A100: '#B9F6CA',
- A200: '#69F0AE',
- A400: '#00E676',
- A700: '#00C853',
-};
-
-export const LIGHT_GREEN = {
- '50' : '#F1F8E9',
- '100' : '#DCEDC8',
- '200' : '#C5E1A5',
- '300' : '#AED581',
- '400' : '#9CCC65',
- '500' : '#8BC34A',
- '600' : '#7CB342',
- '700' : '#689F38',
- '800' : '#558B2F',
- '900' : '#33691E',
- 'A100': '#CCFF90',
- 'A200': '#B2FF59',
- 'A400': '#76FF03',
- 'A700': '#64DD17',
-};
-
-export const YELLOW = {
- '50' : '#FFFDE7',
- '100' : '#FFF9C4',
- '200' : '#FFF59D',
- '300' : '#FFF176',
- '400' : '#FFEE58',
- '500' : '#FFEB3B',
- '600' : '#FDD835',
- '700' : '#FBC02D',
- '800' : '#F9A825',
- '900' : '#F57F17',
- 'A100': '#FFFF8D',
- 'A200': '#FFFF00',
- 'A400': '#FFEA00',
- 'A700': '#FFD600',
-};
-
-export const AMBER = {
- '50' : '#FFF8E1',
- '100' : '#FFECB3',
- '200' : '#FFE082',
- '300' : '#FFD54F',
- '400' : '#FFCA28',
- '500' : '#FFC107',
- '600' : '#FFB300',
- '700' : '#FFA000',
- '800' : '#FF8F00',
- '900' : '#FF6F00',
- 'A100': '#FFE57F',
- 'A200': '#FFD740',
- 'A400': '#FFC400',
- 'A700': '#FFAB00',
-};
-
-export const ORANGE = {
- '50' : '#FFF3E0',
- '100' : '#FFE0B2',
- '200' : '#FFCC80',
- '300' : '#FFB74D',
- '400' : '#FFA726',
- '500' : '#FF9800',
- '600' : '#FB8C00',
- '700' : '#F57C00',
- '800' : '#EF6C00',
- '900' : '#E65100',
- '1000': '#a63a00',
- 'A100': '#FFD180',
- 'A200': '#FFAB40',
- 'A400': '#FF9100',
- 'A700': '#FF6D00',
-};
diff --git a/example/src/constants/SharedEnv.ts b/example/src/constants/SharedEnv.ts
deleted file mode 100644
index 9b7f5624..00000000
--- a/example/src/constants/SharedEnv.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export const SHARED_ENV = {
- enableReactNavigation: true,
- enableTabNavigation: false,
-};
diff --git a/example/src/examples/DebugControls.tsx b/example/src/examples/DebugControls.tsx
deleted file mode 100644
index face071f..00000000
--- a/example/src/examples/DebugControls.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-import * as React from 'react';
-
-import { useNavigation } from '@react-navigation/native';
-
-import type { ExampleProps } from './SharedExampleTypes';
-
-import { ExampleCard } from '../components/ExampleCard';
-import { CardButton } from '../components/Card/CardButton';
-import { SHARED_ENV } from '../constants/SharedEnv';
-
-export function DebugControls(props: ExampleProps) {
- const navigation =
- // eslint-disable-next-line react-hooks/rules-of-hooks
- SHARED_ENV.enableReactNavigation && useNavigation();
-
- return (
-
- {
- // @ts-ignore
- navigation.push('Home');
- }}
- />
- {
- // @ts-ignore
- navigation.push('Test01');
- }}
- />
-
- );
-}
diff --git a/example/src/examples/Example01.tsx b/example/src/examples/Example01.tsx
deleted file mode 100644
index 45961af5..00000000
--- a/example/src/examples/Example01.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import * as React from 'react';
-
-import type { ExampleProps } from './SharedExampleTypes';
-
-import { ExampleCard } from '../components/ExampleCard';
-import { CardButton } from '../components/Card';
-
-export function Example01(props: ExampleProps) {
- return (
-
- {
- // TBA
- }}
- />
-
- );
-}
diff --git a/example/src/examples/SharedExampleTypes.ts b/example/src/examples/SharedExampleTypes.ts
deleted file mode 100644
index c68e0d0f..00000000
--- a/example/src/examples/SharedExampleTypes.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import type { ViewStyle } from 'react-native';
-
-export type ExampleProps = {
- index: number;
- style?: ViewStyle;
-};
diff --git a/example/src/examples/TemplateTest.tsx b/example/src/examples/TemplateTest.tsx
deleted file mode 100644
index b61a0fec..00000000
--- a/example/src/examples/TemplateTest.tsx
+++ /dev/null
@@ -1,63 +0,0 @@
-// @ts-nocheck
-import * as React from 'react';
-import { StyleSheet } from 'react-native';
-
-import type { ExampleProps } from './SharedExampleTypes';
-
-import { ExampleCard } from '../components/ExampleCard';
-
-import { CardBody, CardButton, CardTitle } from '../components/Card';
-
-import { ModalView } from 'react-native-ios-modal';
-
-export function TestXX(props: ExampleProps) {
- const modalRef = React.useRef(null);
-
- const [counter, setCounter] = React.useState(0);
-
- return (
-
-
-
-
-
-
- {
- // TBA
- }}
- />
-
-
- {
- modalRef.current.setVisibility(true);
- }}
- />
-
- );
-}
-
-export const styles = StyleSheet.create({
- modalContainer: {
- flex: 1,
- justifyContent: 'center',
- alignItems: 'center',
- },
- modalCard: {
- alignSelf: 'stretch',
- backgroundColor: 'white',
- },
-});
diff --git a/example/src/examples/Test00.tsx b/example/src/examples/Test00.tsx
deleted file mode 100644
index 967b0514..00000000
--- a/example/src/examples/Test00.tsx
+++ /dev/null
@@ -1,120 +0,0 @@
-// Note: Created based on `example/src_old/ModalViewTest0.js`
-
-import * as React from 'react';
-import { StyleSheet } from 'react-native';
-
-import type { ExampleProps } from './SharedExampleTypes';
-
-import { ExampleCard } from '../components/ExampleCard';
-
-import {
- CardBody,
- CardButton,
- CardTitle,
- CardToggleButton,
-} from '../components/Card';
-
-import {
- ModalView,
- UIBlurEffectStyles,
- AvailableBlurEffectStyles,
-} from 'react-native-ios-modal';
-
-import { ObjectPropertyDisplay } from '../components/ObjectPropertyDisplay';
-
-const totalBlurStylesCount = Object.keys(UIBlurEffectStyles).length ?? 0;
-
-const availableBlurStylesCount = AvailableBlurEffectStyles?.length ?? 0;
-
-export function Test00(props: ExampleProps) {
- const modalRef = React.useRef(null);
-
- const [counter, setCounter] = React.useState(0);
-
- const [isModalBGTransparent, setIsModalBGTransparent] = React.useState(true);
- const [isModalBGBlurred, setIsModalBGBlurred] = React.useState(true);
-
- const currentIndex = counter % availableBlurStylesCount;
- const currentBlurEffectStyle = AvailableBlurEffectStyles[currentIndex];
-
- const debugObject = {
- isModalBGTransparent,
- isModalBGBlurred,
- availableBlurStylesCount,
- totalBlurStylesCount,
- counter,
- currentIndex,
- currentBlurEffectStyle: {
- _: currentBlurEffectStyle,
- },
- };
-
- return (
-
-
-
-
-
-
-
- {
- setCounter((prevCount) => prevCount + 1);
- }}
- />
- {
- setIsModalBGTransparent(value);
- }}
- />
- {
- setIsModalBGBlurred(value);
- }}
- />
- {
- modalRef.current.setVisibility(false);
- }}
- />
-
-
- {
- modalRef.current.setVisibility(true);
- }}
- />
-
- );
-}
-
-export const styles = StyleSheet.create({
- modalContainer: {
- flex: 1,
- justifyContent: 'center',
- alignItems: 'center',
- },
- modalCard: {
- alignSelf: 'stretch',
- backgroundColor: 'white',
- },
-});
diff --git a/example/src/examples/Test01.tsx b/example/src/examples/Test01.tsx
deleted file mode 100644
index f8c2d400..00000000
--- a/example/src/examples/Test01.tsx
+++ /dev/null
@@ -1,99 +0,0 @@
-// Note: Created based on `example/src_old/ModalViewTest1.js`
-
-import * as React from 'react';
-import { StyleSheet } from 'react-native';
-
-import type { ExampleProps } from './SharedExampleTypes';
-
-import { ExampleCard } from '../components/ExampleCard';
-
-import { CardBody, CardButton, CardTitle } from '../components/Card';
-
-import {
- ModalView,
- UIModalPresentationStyle,
- UIModalPresentationStyles,
-} from 'react-native-ios-modal';
-
-import { ObjectPropertyDisplay } from '../components/ObjectPropertyDisplay';
-
-const availablePresentationStyles = Object.keys(
- UIModalPresentationStyles
-) as Array;
-
-const totalPresentationStylesCount = availablePresentationStyles.length ?? 0;
-
-export function Test01(props: ExampleProps) {
- const modalRef = React.useRef(null);
-
- const [counter, setCounter] = React.useState(0);
-
- const currentIndex = counter % totalPresentationStylesCount;
- const currentPresentationStyle = availablePresentationStyles[currentIndex];
-
- const debugObject = {
- currentIndex,
- totalPresentationStylesCount,
- currentPresentationStyle: {
- _: currentPresentationStyle,
- },
- };
-
- return (
-
-
-
-
-
-
-
- {
- setCounter((prevCount) => prevCount + 1);
- }}
- />
- {
- modalRef.current.setVisibility(false);
- }}
- />
-
-
- {
- modalRef.current.setVisibility(true);
- }}
- />
-
- );
-}
-
-export const styles = StyleSheet.create({
- modalContainer: {
- flex: 1,
- justifyContent: 'center',
- alignItems: 'center',
- },
- modalCard: {
- alignSelf: 'stretch',
- backgroundColor: 'white',
- },
-});
diff --git a/example/src/examples/Test02.tsx b/example/src/examples/Test02.tsx
deleted file mode 100644
index f960c9c5..00000000
--- a/example/src/examples/Test02.tsx
+++ /dev/null
@@ -1,285 +0,0 @@
-// Note: Created based on `example/src_old/ModalViewTest2.js`
-
-import * as React from 'react';
-import { StyleSheet, Text } from 'react-native';
-
-import type { ExampleProps } from './SharedExampleTypes';
-
-import { ExampleCard } from '../components/ExampleCard';
-import { CardBody, CardButton } from '../components/Card';
-
-import * as Helpers from '../functions/Helpers';
-
-import {
- ModalView,
- ModalViewProps,
- AvailableBlurEffectStyles,
-} from 'react-native-ios-modal';
-import { ObjectPropertyDisplay } from '../components/ObjectPropertyDisplay';
-
-//
-const availableBlurStylesCount = AvailableBlurEffectStyles?.length ?? 0;
-
-function deriveBlurEffectStyleStringFromCounter(counter: number) {
- const currentIndex = counter % availableBlurStylesCount;
- return AvailableBlurEffectStyles[currentIndex];
-}
-
-const TestModal = React.forwardRef<
- ModalView,
- {
- counter: number;
- modalProps: ModalViewProps;
- emoji?: string;
- title?: string;
- }
->((props, ref) => (
-
-
-
- {props.emoji ?? '😊'}
- {props.title ?? 'Hello'}
-
-
-
-
-));
-
-type Test02State = {
- counter: number;
-};
-
-export class Test02 extends React.PureComponent {
- // Properties
- // ----------
-
- modalRef01: ModalView;
- modalRef02: ModalView;
- modalRef03: ModalView;
- modalRef04: ModalView;
- modalRef05: ModalView;
- modalRef06: ModalView;
- modalRef07: ModalView;
- modalRef08: ModalView;
- modalRef09: ModalView;
-
- // Lifecycle
- // ---------
-
- constructor(props) {
- super(props);
-
- this.state = {
- counter: 0,
- };
- }
-
- // Methods
- // -------
-
- getModalRefForIndex = (index: number): ModalView | undefined => {
- const modalRefsMap = {
- modalRef01: this.modalRef01,
- modalRef02: this.modalRef02,
- modalRef03: this.modalRef03,
- modalRef04: this.modalRef04,
- modalRef05: this.modalRef05,
- modalRef06: this.modalRef06,
- modalRef07: this.modalRef07,
- modalRef08: this.modalRef08,
- modalRef09: this.modalRef09,
- };
-
- const indexPrefix = index < 10 ? '0' : '';
- return modalRefsMap[`modalRef${indexPrefix + index}`];
- };
-
- beginCyclingBlurEffectStyles = async () => {
- for (let index = 0; index < availableBlurStylesCount; index++) {
- await Promise.all([
- Helpers.setStateAsync(this, (prevState: Test02State) => ({
- counter: prevState.counter + 1,
- })),
- Helpers.timeout(250),
- ]);
- }
- };
-
- beginShowingModals = async () => {
- await this.modalRef01.setVisibility(true);
- await this.beginCyclingBlurEffectStyles();
-
- for (let index = 2; index < 10; index++) {
- const modalRef = this.getModalRefForIndex(index);
- await modalRef?.setVisibility(true);
- }
-
- await this.beginCyclingBlurEffectStyles();
-
- for (let index = 9; index > 0; index--) {
- const modalRef = this.getModalRefForIndex(index);
- await modalRef?.setVisibility(false);
- }
- };
-
- // Render
- // -----
-
- render() {
- const props = this.props;
- const state = this.state;
-
- const currentBlurEffectStyle = deriveBlurEffectStyleStringFromCounter(
- state.counter
- );
-
- const sharedModalProps = {
- containerStyle: styles.modalContainer,
- modalBGBlurEffectStyle: currentBlurEffectStyle,
- isModalInPresentation: true,
- enableSwipeGesture: false,
- };
-
- let modalCount = 0;
-
- return (
-
-
- {
- this.modalRef01 = ref;
- }}
- emoji={'😊'}
- title={'Hello #' + ++modalCount}
- counter={state.counter}
- modalProps={sharedModalProps}
- />
- {
- this.modalRef02 = ref;
- }}
- emoji={'😄'}
- title={'Hello There #' + ++modalCount}
- counter={state.counter}
- modalProps={sharedModalProps}
- />
- {
- this.modalRef03 = ref;
- }}
- emoji={'💖'}
- title={'ModalView Test #' + ++modalCount}
- counter={state.counter}
- modalProps={sharedModalProps}
- />
- {
- this.modalRef04 = ref;
- }}
- emoji={'🥺'}
- title={'PageSheet Modal #' + ++modalCount}
- counter={state.counter}
- modalProps={sharedModalProps}
- />
- {
- this.modalRef05 = ref;
- }}
- emoji={'🥰'}
- title={'Hello World Modal #' + ++modalCount}
- counter={state.counter}
- modalProps={sharedModalProps}
- />
- {
- this.modalRef06 = ref;
- }}
- emoji={'😙'}
- title={'Hello World #' + ++modalCount}
- counter={state.counter}
- modalProps={sharedModalProps}
- />
- {
- this.modalRef07 = ref;
- }}
- emoji={'🤩'}
- title={'Heyyy There #' + ++modalCount}
- counter={state.counter}
- modalProps={sharedModalProps}
- />
- {
- this.modalRef08 = ref;
- }}
- emoji={'😃'}
- title={'Another Modal #' + ++modalCount}
- counter={state.counter}
- modalProps={sharedModalProps}
- />
- {
- this.modalRef09 = ref;
- }}
- emoji={'🏳️🌈'}
- title={'And Another Modal #' + ++modalCount}
- counter={state.counter}
- modalProps={sharedModalProps}
- />
-
- {
- this.beginShowingModals();
- }}
- />
-
- );
- }
-}
-
-export const styles = StyleSheet.create({
- modalContainer: {
- flex: 1,
- justifyContent: 'center',
- alignItems: 'center',
- },
- testModalCard: {
- alignSelf: 'stretch',
- backgroundColor: 'white',
- },
- testLabelEmoji: {
- fontSize: 36,
- alignSelf: 'center',
- },
- testLabelTitle: {
- fontSize: 18,
- fontWeight: '600',
- marginTop: 3,
- alignSelf: 'center',
- },
-});
diff --git a/example/src/examples/Test03.tsx b/example/src/examples/Test03.tsx
deleted file mode 100644
index 3d7abe16..00000000
--- a/example/src/examples/Test03.tsx
+++ /dev/null
@@ -1,174 +0,0 @@
-// Note: Created based on `example/src_old/ModalViewTest3.js`
-
-import * as React from 'react';
-import { StyleSheet } from 'react-native';
-
-import type { ExampleProps } from './SharedExampleTypes';
-
-import { ExampleCard } from '../components/ExampleCard';
-
-import {
- CardBody,
- CardButton,
- CardTitle,
- CardToggleButton,
-} from '../components/Card';
-
-import {
- ModalView,
- ModalViewEmitterEventsDeprecated,
-} from 'react-native-ios-modal';
-
-import {
- CardLogDisplay,
- CardLogDisplayHandle,
-} from '../components/Card/CardLogDisplay';
-
-// @ts-ignore
-function getEventMessageForEventKey(event: ModalViewEmitterEventsDeprecated) {
- switch (event) {
- case 'onModalBlur':
- return 'The modal is in focus';
- case 'onModalFocus':
- return 'The modal is blurred';
- case 'onModalShow':
- return 'The modal is visible';
- case 'onModalDismiss':
- return 'The modal is dismissed';
- case '_onModalDidDismiss':
- return 'The modal is dismissed via swipe';
- case '_onModalWillDismiss':
- return 'The modal is being swiped down';
- case 'onModalAttemptDismiss':
- return 'User attempted to swipe down while isModalInPresentation';
- }
-}
-
-export function Test03(props: ExampleProps) {
- const modalRef = React.useRef(null);
- const logDisplayRef = React.useRef(null);
-
- const [isModalInPresentation, setIsModalInPresentation] =
- React.useState(false);
-
- const [isSwipeGestureEnabled, setIsSwipeGestureEnabled] =
- React.useState(true);
-
- const logEvent = (eventString: string) => {
- logDisplayRef.current?.log(eventString);
- };
-
- return (
-
- {
- logEvent('onModalBlur');
- }}
- onModalFocus={() => {
- logEvent('onModalFocus');
- }}
- onModalShow={() => {
- logEvent('onModalShow');
- }}
- onModalDismiss={() => {
- logEvent('onModalDismiss');
- }}
- _onModalDidDismiss={() => {
- logEvent('_onModalDidDismiss');
- }}
- _onModalWillDismiss={() => {
- logEvent('_onModalWillDismiss');
- }}
- onModalAttemptDismiss={() => {
- logEvent('onModalAttemptDismiss');
- }}
- >
-
-
-
-
-
-
-
- {
- setIsModalInPresentation((prev) => !prev);
- }}
- />
- {
- setIsSwipeGestureEnabled((prev) => !prev);
- }}
- />
- {
- modalRef.current.setVisibility(false);
- }}
- />
-
-
-
- {
- modalRef.current.setVisibility(true);
- }}
- />
-
- );
-}
-
-export const styles = StyleSheet.create({
- modalContainer: {
- flex: 1,
- justifyContent: 'center',
- alignItems: 'center',
- },
- modalCard1: {
- alignSelf: 'stretch',
- backgroundColor: 'rgba(255,255,255,0.8)',
- },
- modalCard2: {
- alignSelf: 'stretch',
- backgroundColor: 'rgba(255,255,255,0.8)',
- },
-});
diff --git a/example/src/examples/Test04.tsx b/example/src/examples/Test04.tsx
deleted file mode 100644
index 3ff6dfdc..00000000
--- a/example/src/examples/Test04.tsx
+++ /dev/null
@@ -1,153 +0,0 @@
-// Note: Created based on `example/src_old/ModalViewTest4.js`
-
-import * as React from 'react';
-import { StyleSheet } from 'react-native';
-
-import type { ExampleProps } from './SharedExampleTypes';
-
-import { ExampleCard } from '../components/ExampleCard';
-
-import {
- CardBody,
- CardButton,
- CardTitle,
- CardToggleButton,
-} from '../components/Card';
-
-import { ModalContext, ModalView } from 'react-native-ios-modal';
-
-import {
- CardLogDisplay,
- CardLogDisplayHandle,
-} from '../components/Card/CardLogDisplay';
-
-function ModalEventLogger() {
- const modalContext = React.useContext(ModalContext);
- const logDisplayRef = React.useRef(null);
-
- React.useEffect(() => {
- // componentDidMount
- const modalEmitter = modalContext.getEmitterRef();
-
- modalEmitter.addListener('onModalBlur', () =>
- logDisplayRef.current?.log('onModalBlur')
- );
- modalEmitter.addListener('onModalFocus', () =>
- logDisplayRef.current?.log('onModalFocus')
- );
- modalEmitter.addListener('onModalShow', () =>
- logDisplayRef.current?.log('onModalShow')
- );
- modalEmitter.addListener('onModalDismiss', () =>
- logDisplayRef.current?.log('onModalDismiss')
- );
- modalEmitter.addListener('onModalDidDismiss', () =>
- logDisplayRef.current?.log('onModalDidDismiss')
- );
- modalEmitter.addListener('onModalWillDismiss', () =>
- logDisplayRef.current?.log('onModalWillDismiss')
- );
- modalEmitter.addListener('onModalAttemptDismiss', () =>
- logDisplayRef.current?.log('onModalAttemptDismiss')
- );
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, []);
-
- return (
-
- );
-}
-
-export function Test04(props: ExampleProps) {
- const modalRef = React.useRef(null);
-
- const [isModalInPresentation, setIsModalInPresentation] =
- React.useState(false);
-
- const [isSwipeGestureEnabled, setIsSwipeGestureEnabled] =
- React.useState(true);
-
- return (
-
-
-
-
-
-
-
-
-
- {
- setIsModalInPresentation((prev) => !prev);
- }}
- />
- {
- setIsSwipeGestureEnabled((prev) => !prev);
- }}
- />
- {
- modalRef.current.setVisibility(false);
- }}
- />
-
-
-
- {
- modalRef.current.setVisibility(true);
- }}
- />
-
- );
-}
-
-export const styles = StyleSheet.create({
- modalContainer: {
- flex: 1,
- justifyContent: 'center',
- alignItems: 'center',
- },
- modalCard1: {
- alignSelf: 'stretch',
- backgroundColor: 'rgba(255,255,255,0.8)',
- },
- modalCard2: {
- alignSelf: 'stretch',
- backgroundColor: 'rgba(255,255,255,0.8)',
- },
-});
diff --git a/example/src/examples/Test05.tsx b/example/src/examples/Test05.tsx
deleted file mode 100644
index 33e44d2a..00000000
--- a/example/src/examples/Test05.tsx
+++ /dev/null
@@ -1,137 +0,0 @@
-// Note: Created based on `example/src_old/ModalViewTest6.js`
-
-import * as React from 'react';
-import { ScrollView, StyleSheet, View, Text } from 'react-native';
-
-import type { ExampleProps } from './SharedExampleTypes';
-
-import { ExampleCard } from '../components/ExampleCard';
-
-import { CardBody, CardButton, CardTitle } from '../components/Card';
-
-import { ModalView } from 'react-native-ios-modal';
-
-import * as Colors from '../constants/Colors';
-
-function DummyItems() {
- let items: JSX.Element[] = [];
-
- for (let index = 0; index < 30; index++) {
- // prettier-ignore
- const backgroundColor = (
- (index % 4 === 0) ? Colors.RED [900] :
- (index % 4 === 1) ? Colors.BLUE [900] :
- (index % 4 === 2) ? Colors.YELLOW[900] :
- (index % 4 === 3) ? Colors.PURPLE[900] :
- /* default */ Colors.GREEN[900]
- );
-
- const dummyItemLeftSquareStyle = {
- backgroundColor,
- };
-
- items.push(
-
-
-
-
- {/* Label */ `Item #${index}`}
-
-
- {/* Desc */ `Item Description - lorum ipsum sit #${index}`}
-
-
-
- );
- }
-
- return items;
-}
-
-export function Test05(props: ExampleProps) {
- const modalRef = React.useRef(null);
-
- return (
-
-
-
-
-
-
- {DummyItems()}
- {
- modalRef.current?.setVisibility(false);
- }}
- />
-
-
- {
- modalRef.current.setVisibility(true);
- }}
- />
-
- );
-}
-
-export const styles = StyleSheet.create({
- scroll: {
- flex: 1,
- marginTop: 25,
- },
- scrollContentContainer: {
- paddingBottom: 15,
- },
- modalContainer: {},
- modalCard: {
- backgroundColor: 'white',
- alignSelf: 'center',
- marginBottom: 20,
- },
- modalCloseButton: {
- marginVertical: 20,
- marginHorizontal: 12,
- },
-
- dummyItemContainer: {
- flexDirection: 'row',
- },
- dummyItemLeftSquare: {
- aspectRatio: 1,
- width: 75,
- },
- dummyItemRightContainer: {
- marginLeft: 10,
- flex: 1,
- justifyContent: 'center',
- },
- dummyItemLabel: {
- fontWeight: '600',
- fontSize: 20,
- },
- dummyItemDesc: {
- color: Colors.GREY[800],
- marginTop: 2,
- },
-});
diff --git a/example/src/examples/Test06/ModalFocusIndicatorPill.tsx b/example/src/examples/Test06/ModalFocusIndicatorPill.tsx
deleted file mode 100644
index 035ad43f..00000000
--- a/example/src/examples/Test06/ModalFocusIndicatorPill.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import * as React from 'react';
-import { StyleSheet, View, Text, ViewStyle } from 'react-native';
-
-import { ModalContext } from 'react-native-ios-modal';
-
-import * as Colors from '../../constants/Colors';
-
-export function ModalFocusIndicatorPill() {
- const { focusState } = React.useContext(ModalContext);
-
- const pillContainerStyle: ViewStyle = {
- // prettier-ignore
- backgroundColor: (
- focusState === 'INITIAL' ? Colors.GREY[900] :
- focusState === 'FOCUSING' ? Colors.BLUE.A700 :
- focusState === 'FOCUSED' ? Colors.PURPLE.A700 :
- focusState === 'BLURRING' ? Colors.PINK.A700 :
- focusState === 'BLURRED' ? Colors.RED.A700
- // default
- : ''
- ),
- };
-
- return (
-
-
- {/* Focus Pill Label: Focus/Blur */}
- {focusState}
-
-
- );
-}
-
-const styles = StyleSheet.create({
- modalFocusIndicatorPillContainer: {
- alignSelf: 'center',
- alignItems: 'center',
- width: 200,
- paddingVertical: 12,
- borderRadius: 15,
- marginBottom: 7,
- },
- modalFocusIndicatorPillText: {
- fontSize: 24,
- fontWeight: '900',
- color: 'white',
- },
-});
diff --git a/example/src/examples/Test06/ModalGroup.tsx b/example/src/examples/Test06/ModalGroup.tsx
deleted file mode 100644
index 93dda30f..00000000
--- a/example/src/examples/Test06/ModalGroup.tsx
+++ /dev/null
@@ -1,103 +0,0 @@
-import * as React from 'react';
-import { StyleSheet } from 'react-native';
-
-import { ModalView } from 'react-native-ios-modal';
-import { ModalGroupItemContent } from './ModalGroupItemContent';
-
-export type ModalGroupHandle = {
- showModal: () => void;
-};
-
-export type ModalGroupProps = {};
-
-export const ModalGroup = React.forwardRef(
- (_, ref) => {
- const [currentModalIndex, setCurrentModalIndex] = React.useState(0);
-
- const modalRefs = React.useRef>({});
-
- const modalGroupItems: JSX.Element[] = [];
-
- // callable functions...
- React.useImperativeHandle(ref, () => ({
- showModal: () => {
- const targetModalIndex = 0;
-
- const modalRef = modalRefs.current[`${targetModalIndex}`];
-
- // guard
- if (modalRef == null) {
- return;
- }
-
- // open first modal
- modalRef.setVisibility(true);
- setCurrentModalIndex(targetModalIndex + 1);
- },
- }));
-
- // render next modal in advance
- const modalsToMountCount = currentModalIndex + 1;
-
- for (let index = 0; index <= modalsToMountCount; index++) {
- modalGroupItems.push(
- {
- modalRefs.current[`${index}`] = _ref;
- }}
- >
- {
- const nextModalIndex = modalIndex + 1;
-
- const modalRef = modalRefs.current[`${nextModalIndex}`];
-
- // guard
- if (modalRef == null) {
- return;
- }
-
- // open next modal
- setCurrentModalIndex(nextModalIndex);
- modalRef.setVisibility(true);
- }}
- onPressCloseModal={async (modalIndex) => {
- const modalRef = modalRefs.current[`${modalIndex}`];
-
- // guard
- if (modalRef == null) {
- return;
- }
-
- await modalRef.setVisibility(false);
- setCurrentModalIndex(modalIndex - 1);
- }}
- onPressClosePrevModal={(modalIndex) => {
- const prevModalIndex = modalIndex - 1;
-
- const prevModalRef = modalRefs.current[`${prevModalIndex}`];
-
- // guard
- if (prevModalRef == null) {
- return;
- }
-
- prevModalRef.setVisibility(false);
- }}
- />
-
- );
- }
-
- return {modalGroupItems} ;
- }
-);
-
-export const styles = StyleSheet.create({
- modalGroupModal: {
- justifyContent: 'center',
- },
-});
diff --git a/example/src/examples/Test06/ModalGroupItemContent.tsx b/example/src/examples/Test06/ModalGroupItemContent.tsx
deleted file mode 100644
index f6aa5d49..00000000
--- a/example/src/examples/Test06/ModalGroupItemContent.tsx
+++ /dev/null
@@ -1,110 +0,0 @@
-import * as React from 'react';
-import { StyleSheet } from 'react-native';
-
-import { CardBody, CardButton, CardTitle } from '../../components/Card';
-
-import { ModalContext } from 'react-native-ios-modal';
-
-import {
- CardLogDisplay,
- CardLogDisplayHandle,
-} from '../../components/Card/CardLogDisplay';
-
-import { ModalFocusIndicatorPill } from './ModalFocusIndicatorPill';
-
-export function ModalGroupItemContent(props: {
- modalIndex: number;
- onPressOpenNextModal: (modalIndex: number) => void;
- onPressClosePrevModal: (modalIndex: number) => void;
- onPressCloseModal: (modalIndex: number) => void;
-}) {
- const logDisplayRef = React.useRef(null);
-
- const modalContext = React.useContext(ModalContext);
-
- // Lifecycle: componentDidMount
- React.useEffect(() => {
- const modalEmitter = modalContext.getEmitterRef();
-
- const listenerOnModalWillFocus = modalEmitter.addListener(
- 'onModalWillFocus',
- () => {
- logDisplayRef.current?.log('onModalWillFocus');
- }
- );
-
- const listenerOnModalDidFocus = modalEmitter.addListener(
- 'onModalDidFocus',
- () => {
- logDisplayRef.current?.log('onModalDidFocus');
- }
- );
-
- const listenerOnModalWillBlur = modalEmitter.addListener(
- 'onModalWillBlur',
- () => {
- logDisplayRef.current?.log('onModalWillBlur');
- }
- );
-
- const listenerOnModalDidBlur = modalEmitter.addListener(
- 'onModalDidBlur',
- () => {
- logDisplayRef.current?.log('onModalDidBlur');
- }
- );
-
- return () => {
- // Lifecycle: componentWillUnmount
- listenerOnModalWillFocus.unsubscribe();
- listenerOnModalDidFocus.unsubscribe();
- listenerOnModalWillBlur.unsubscribe();
- listenerOnModalDidBlur.unsubscribe();
- };
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, []);
-
- return (
-
-
-
-
-
- {
- props.onPressOpenNextModal(props.modalIndex);
- }}
- />
- {
- props.onPressCloseModal(props.modalIndex);
- }}
- />
- {props.modalIndex > 0 && (
- {
- // TODO: See TODO:2023-03-09-17-36-51
- props.onPressClosePrevModal(props.modalIndex);
- }}
- />
- )}
-
-
- );
-}
-
-const styles = StyleSheet.create({
- modalGroupModal: {
- justifyContent: 'center',
- },
- modalGroupItemCard: {
- backgroundColor: 'white',
- },
-});
diff --git a/example/src/examples/Test06/Test06.tsx b/example/src/examples/Test06/Test06.tsx
deleted file mode 100644
index 03af0f05..00000000
--- a/example/src/examples/Test06/Test06.tsx
+++ /dev/null
@@ -1,42 +0,0 @@
-// Note: Created based on `example/src_old/ModalViewTest7.js`
-
-// TODO - See TODO:2023-03-08-03-48-33
-// * Enable `ModalView.isModalContentLazy` prop
-
-import * as React from 'react';
-
-import type { ExampleProps } from '../SharedExampleTypes';
-
-import { ExampleCard } from '../../components/ExampleCard';
-
-import { CardButton } from '../../components/Card';
-
-import { ModalGroup, ModalGroupHandle } from './ModalGroup';
-
-// Section: Test06
-// --------------
-
-export function Test06(props: ExampleProps) {
- const modalGroupRef = React.useRef(null);
-
- return (
-
-
- {
- modalGroupRef.current?.showModal();
- }}
- />
-
- );
-}
diff --git a/example/src/examples/Test06/index.ts b/example/src/examples/Test06/index.ts
deleted file mode 100644
index bab01e57..00000000
--- a/example/src/examples/Test06/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './Test06';
diff --git a/example/src/examples/Test07.tsx b/example/src/examples/Test07.tsx
deleted file mode 100644
index a5a762a6..00000000
--- a/example/src/examples/Test07.tsx
+++ /dev/null
@@ -1,144 +0,0 @@
-// Note: Created based on `example/src_old/ModalViewTest8.js`
-
-import * as React from 'react';
-import { StyleSheet, View, ScrollView } from 'react-native';
-
-import type { ExampleProps } from './SharedExampleTypes';
-
-import { ExampleCard } from '../components/ExampleCard';
-
-import { CardBody, CardButton, CardTitle } from '../components/Card';
-
-import { ModalView } from 'react-native-ios-modal';
-import { ObjectPropertyDisplay } from '../components/ObjectPropertyDisplay';
-
-type ModalWrapperHandle = {
- showModal: () => void;
-};
-
-type ModalWrapperProps = {
- index: number;
- onPressOpenModal?: () => void;
-};
-
-const ModalWrapper = React.forwardRef(
- (props, ref) => {
- const modalRef = React.useRef(null);
- const [modalInfo, setModalInfo] = React.useState(null);
-
- // callable functions...
- React.useImperativeHandle(ref, () => ({
- showModal: () => {
- modalRef.current?.setVisibility(true);
- },
- }));
-
- const ModalContents = (
-
-
-
-
-
- {
- const results = await modalRef.current.getModalInfo();
- setModalInfo(results);
- }}
- />
- {props.onPressOpenModal && (
- {
- props.onPressOpenModal?.();
- }}
- />
- )}
-
- );
-
- return (
- {
- setModalInfo(null);
- }}
- >
-
- {modalInfo == null ? (
- {ModalContents}
- ) : (
-
- {ModalContents}
-
- )}
-
-
- );
- }
-);
-
-export function Test07(props: ExampleProps) {
- const modalWrapperRef1 = React.useRef(null);
- const modalWrapperRef2 = React.useRef(null);
- const modalWrapperRef3 = React.useRef(null);
-
- return (
-
- {
- modalWrapperRef2.current?.showModal();
- }}
- />
- {
- modalWrapperRef3.current?.showModal();
- }}
- />
-
- {
- modalWrapperRef1.current?.showModal();
- }}
- />
-
- );
-}
-
-export const styles = StyleSheet.create({
- modalContainer: {
- flex: 1,
- },
- modalWrapper: {
- flex: 1,
- },
- modalWrapperEmpty: {
- flex: 1,
- justifyContent: 'center',
- alignItems: 'center',
- },
- modalScrollView: {
- alignItems: 'center',
- marginTop: 20,
- paddingBottom: 100,
- },
- modalCard: {
- alignSelf: 'stretch',
- backgroundColor: 'white',
- },
-});
diff --git a/example/src/examples/Test08.tsx b/example/src/examples/Test08.tsx
deleted file mode 100644
index 475ef05e..00000000
--- a/example/src/examples/Test08.tsx
+++ /dev/null
@@ -1,87 +0,0 @@
-import * as React from 'react';
-import { StyleSheet } from 'react-native';
-
-import type { ExampleProps } from './SharedExampleTypes';
-
-import { ExampleCard } from '../components/ExampleCard';
-
-import { CardBody, CardButton, CardTitle } from '../components/Card';
-
-import { ModalView } from 'react-native-ios-modal';
-import { ObjectPropertyDisplay } from '../components/ObjectPropertyDisplay';
-
-export function Test08(props: ExampleProps) {
- const modalRef = React.useRef(null);
-
- const [shouldUseMediumDetent, setShouldUseMediumDetent] =
- React.useState(true);
-
- const [debugObject, setDebugObject] = React.useState({
- detentCurrent: null,
- detentPrev: null,
- });
-
- return (
-
- {
- setDebugObject((prev) => ({
- ...prev,
- detentCurrent: nativeEvent.sheetDetentStringCurrent,
- detentPrev: nativeEvent.sheetDetentStringPrevious,
- }));
- }}
- >
-
-
-
-
-
- {
- setShouldUseMediumDetent((prevValue) => !prevValue);
- }}
- />
-
-
- {
- modalRef.current.setVisibility(true);
- }}
- />
-
- );
-}
-
-export const styles = StyleSheet.create({
- modalContainer: {
- flex: 1,
- justifyContent: 'center',
- alignItems: 'center',
- },
- modalCard: {
- alignSelf: 'stretch',
- backgroundColor: 'white',
- },
-});
diff --git a/example/src/examples/Test09.tsx b/example/src/examples/Test09.tsx
deleted file mode 100644
index 29442cc5..00000000
--- a/example/src/examples/Test09.tsx
+++ /dev/null
@@ -1,149 +0,0 @@
-import * as React from 'react';
-import { StyleSheet } from 'react-native';
-
-import type { ExampleProps } from './SharedExampleTypes';
-
-import { ExampleCard } from '../components/ExampleCard';
-
-import * as Helpers from '../functions/Helpers';
-
-import { CardBody, CardButton, CardTitle } from '../components/Card';
-
-import { ModalView, RNIModalCustomSheetDetent } from 'react-native-ios-modal';
-import { ObjectPropertyDisplay } from '../components/ObjectPropertyDisplay';
-
-const CUSTOM_DETENTS: RNIModalCustomSheetDetent[] = [
- {
- key: 'custom_small',
- mode: 'constant',
- sizeConstant: 375,
- },
- {
- key: 'custom_75%',
- mode: 'relative',
- sizeMultiplier: 0.75,
- offset: 20,
- },
- {
- key: 'custom_100%',
- mode: 'relative',
- sizeMultiplier: 1,
- },
-];
-
-export function Test09(props: ExampleProps) {
- const modalRef = React.useRef(null);
-
- const [counter, setCounter] = React.useState(0);
- const [eventData, setEventData] = React.useState(null);
-
- const currentDetent = Helpers.getNextItemInCyclicArray(
- counter,
- CUSTOM_DETENTS
- );
-
- const objectToDisplay = {
- counter,
- currentDetent,
- eventData,
- };
-
- return (
-
- {
- setEventData((prev) => ({
- ...prev,
- detentCurrent: nativeEvent.sheetDetentStringCurrent,
- detentPrev: nativeEvent.sheetDetentStringPrevious,
- }));
- }}
- onModalDetentDidCompute={({ nativeEvent }) => {
- console.log(
- "onModalDetentDidCompute"
- + ` - key: ${nativeEvent.key}`
- + ` - maximumDetentValue: ${nativeEvent.maximumDetentValue}`
- + ` - computedDetentValue: ${nativeEvent.computedDetentValue}`
- );
- }}
- onModalSwipeGestureStart={({ nativeEvent }) => {
- console.log(
- "onModalSwipeGestureStart"
- + ` - position: ${JSON.stringify(nativeEvent.position)}`
- );
- }}
- onModalSwipeGestureDidEnd={({ nativeEvent }) => {
- console.log(
- "onModalSwipeGestureDidEnd"
- + ` - position: ${JSON.stringify(nativeEvent.position)}`
- );
- }}
- onModalDidSnap={({ nativeEvent }) => {
- console.log(
- "onModalDidSnap"
- + ` - modalContentSize: ${JSON.stringify(nativeEvent.modalContentSize)}`
- + ` - selectedDetentIdentifier: ${nativeEvent.selectedDetentIdentifier}`
- );
- }}
- onModalDismissWillCancel={({nativeEvent}) => {
- console.log('onModalDismissWillCancel - ', nativeEvent);
- }}
- onModalDismissDidCancel={({nativeEvent}) => {
- console.log('onModalDismissDidCancel - ', nativeEvent);
- }}
- >
-
-
-
-
-
- {
- setCounter((prevCount) => prevCount + 1);
- }}
- />
-
-
- {
- modalRef.current.setVisibility(true);
- }}
- />
-
- );
-}
-
-export const styles = StyleSheet.create({
- modalContainer: {
- flex: 1,
- justifyContent: 'center',
- alignItems: 'center',
- },
- modalCard: {
- alignSelf: 'stretch',
- backgroundColor: 'white',
- },
-});
diff --git a/example/src/functions/Helpers.ts b/example/src/functions/Helpers.ts
deleted file mode 100644
index 4c294bbb..00000000
--- a/example/src/functions/Helpers.ts
+++ /dev/null
@@ -1,98 +0,0 @@
-// @ts-nocheck
-
-import * as React from 'react';
-
-/** wrapper func for setState that returns a promise */
-// eslint-disable-next-line consistent-this
-export function setStateAsync(
- that: React.Component,
- newState: T | ((prevState: T) => T)
-) {
- return new Promise((resolve) => {
- that.setState(newState, () => {
- resolve();
- });
- });
-}
-
-export function useStateCallback(
- initialState: T
-): [T, (state: T, callback?: (nextState: T) => void) => void] {
- const [state, setState] = React.useState(initialState);
-
- // init mutable ref container for callbacks
- const cbRef = React.useRef<((state: T) => void) | undefined>(undefined);
-
- const setStateCallback = React.useCallback(
- (nextState: T, cb?: (state: T) => void) => {
- // store current, passed callback in ref
- cbRef.current = cb;
-
- // keep object reference stable, exactly like `useState`
- setState(nextState);
- },
- []
- );
-
- React.useEffect(() => {
- // cb.current is `undefined` on initial render,
- // so we only invoke callback on state *updates*
- if (cbRef.current) {
- cbRef.current(state);
-
- // reset callback after execution
- cbRef.current = undefined;
- }
- }, [state]);
-
- return [state, setStateCallback];
-}
-
-export function useStateAsync(
- initialState: T
-): [T, (nextState: T) => Promise] {
- const [state, setState] = useStateCallback(initialState);
-
- return [
- state,
- (nextState) => {
- return new Promise((resolve) => {
- setState(nextState, () => {
- resolve();
- });
- });
- },
- ];
-}
-
-/** wrapper for timeout that returns a promise */
-export function timeout(ms: number) {
- return new Promise((resolve) => {
- const timeoutID = setTimeout(() => {
- clearTimeout(timeoutID);
- resolve();
- }, ms);
- });
-}
-
-/** Wraps a promise that will reject if not not resolved in milliseconds */
-export function promiseWithTimeout(ms: number, promise: Promise) {
- // Create a promise that rejects in milliseconds
- const timeoutPromise = new Promise((_, reject) => {
- const timeoutID = setTimeout(() => {
- clearTimeout(timeoutID);
- reject(`Promise timed out in ${ms} ms.`);
- }, ms);
- });
-
- // Returns a race between our timeout and the passed in promise
- return Promise.race([promise, timeoutPromise]);
-}
-
-export function pad(num: number | string, places = 2) {
- return String(num).padStart(places, '0');
-}
-
-export function getNextItemInCyclicArray(index: number, array: Array): T {
- return array[index % array.length];
-}
\ No newline at end of file
diff --git a/example/src/screens/HomeScreen.tsx b/example/src/screens/HomeScreen.tsx
deleted file mode 100644
index 549c3749..00000000
--- a/example/src/screens/HomeScreen.tsx
+++ /dev/null
@@ -1,93 +0,0 @@
-import * as React from 'react';
-import {
- StyleSheet,
- SafeAreaView,
- FlatList,
- ListRenderItem,
-} from 'react-native';
-
-import type { ExampleProps } from '../examples/SharedExampleTypes';
-
-import { Test00 } from '../examples/Test00';
-import { Test01 } from '../examples/Test01';
-import { Test02 } from '../examples/Test02';
-import { Test03 } from '../examples/Test03';
-import { Test04 } from '../examples/Test04';
-import { Test05 } from '../examples/Test05';
-import { Test06 } from '../examples/Test06';
-import { Test07 } from '../examples/Test07';
-import { Test08 } from '../examples/Test08';
-import { Test09 } from '../examples/Test09';
-
-import { Example01 } from '../examples/Example01';
-
-import { DebugControls } from '../examples/DebugControls';
-import { SHARED_ENV } from '../constants/SharedEnv';
-
-type ExampleListItem = {
- id: number;
- component: React.FC;
-};
-
-type ExampleFunctionalComponentItem = (props: ExampleProps) => JSX.Element;
-
-type ExampleClassComponentItem =
- | typeof React.PureComponent
- | typeof React.Component;
-
-type ExampleComponentItem =
- | ExampleFunctionalComponentItem
- | ExampleClassComponentItem
- | false;
-
-const EXAMPLE_COMPONENTS: Array = [
- Test00,
- Test01,
- Test02,
- Test03,
- Test04,
- Test05,
- Test06,
- Test07,
- Test08,
- Test09,
- Example01,
- SHARED_ENV.enableReactNavigation && DebugControls,
-];
-
-const EXAMPLE_ITEMS = EXAMPLE_COMPONENTS.filter(
- (item): item is ExampleFunctionalComponentItem => item != null
-).map((item, index) => ({
- id: index + 1,
- component: item,
-}));
-
-export function HomeScreen() {
- const renderItem: ListRenderItem = ({ item }) =>
- React.createElement(item.component, {
- index: item.id,
- style: styles.exampleListItem,
- });
-
- return (
-
- `item-${item.id}`}
- />
-
- );
-}
-
-const styles = StyleSheet.create({
- scrollContentContainer: {
- paddingHorizontal: 10,
- paddingBottom: 100,
- paddingTop: 20,
- },
- exampleListItem: {
- marginBottom: 15,
- },
-});
diff --git a/example/src/screens/Test01Screen.tsx b/example/src/screens/Test01Screen.tsx
deleted file mode 100644
index c2155619..00000000
--- a/example/src/screens/Test01Screen.tsx
+++ /dev/null
@@ -1,36 +0,0 @@
-import * as React from 'react';
-import {
- View,
- Text,
- TouchableOpacity,
- StyleSheet,
- Alert,
-} from 'react-native';
-
-import { SHARED_ENV } from '../constants/SharedEnv';
-
-export const Test01Screen = (props) => {
- return (
-
- {
- if (SHARED_ENV.enableReactNavigation) {
- props.navigation.push('Home');
- } else {
- Alert.alert('react-navigation is disabled.');
- }
- }}
- >
- {'Test Screen'}
-
-
- );
-};
-
-const styles = StyleSheet.create({
- rootContainer: {
- flex: 1,
- alignItems: 'center',
- justifyContent: 'center',
- },
-});
diff --git a/example/tsconfig.json b/example/tsconfig.json
deleted file mode 100644
index 0b98ace6..00000000
--- a/example/tsconfig.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "extends": "../tsconfig.json",
- "include": [
- "./src",
- ],
- "exclude": [
- "./node_modules",
- "../src",
- ],
- "compilerOptions": {
- "strict": false,
- "strictNullChecks": false,
- "noImplicitAny": false,
- "skipLibCheck": true,
- }
-}
\ No newline at end of file
diff --git a/example/yarn.lock b/example/yarn.lock
deleted file mode 100644
index 0a6f9f73..00000000
--- a/example/yarn.lock
+++ /dev/null
@@ -1,4342 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@ampproject/remapping@^2.1.0":
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d"
- integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==
- dependencies:
- "@jridgewell/gen-mapping" "^0.1.0"
- "@jridgewell/trace-mapping" "^0.3.9"
-
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a"
- integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==
- dependencies:
- "@babel/highlight" "^7.18.6"
-
-"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.19.4", "@babel/compat-data@^7.20.0":
- version "7.20.0"
- resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.0.tgz#9b61938c5f688212c7b9ae363a819df7d29d4093"
- integrity sha512-Gt9jszFJYq7qzXVK4slhc6NzJXnOVmRECWcVjF/T23rNXD9NtWQ0W3qxdg+p9wWIB+VQw3GYV/U2Ha9bRTfs4w==
-
-"@babel/core@^7.12.9", "@babel/core@^7.13.16", "@babel/core@^7.14.0":
- version "7.19.6"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.19.6.tgz#7122ae4f5c5a37c0946c066149abd8e75f81540f"
- integrity sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==
- dependencies:
- "@ampproject/remapping" "^2.1.0"
- "@babel/code-frame" "^7.18.6"
- "@babel/generator" "^7.19.6"
- "@babel/helper-compilation-targets" "^7.19.3"
- "@babel/helper-module-transforms" "^7.19.6"
- "@babel/helpers" "^7.19.4"
- "@babel/parser" "^7.19.6"
- "@babel/template" "^7.18.10"
- "@babel/traverse" "^7.19.6"
- "@babel/types" "^7.19.4"
- convert-source-map "^1.7.0"
- debug "^4.1.0"
- gensync "^1.0.0-beta.2"
- json5 "^2.2.1"
- semver "^6.3.0"
-
-"@babel/generator@^7.14.0", "@babel/generator@^7.19.6", "@babel/generator@^7.20.0":
- version "7.20.0"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.0.tgz#0bfc5379e0efb05ca6092091261fcdf7ec36249d"
- integrity sha512-GUPcXxWibClgmYJuIwC2Bc2Lg+8b9VjaJ+HlNdACEVt+Wlr1eoU1OPZjZRm7Hzl0gaTsUZNQfeihvZJhG7oc3w==
- dependencies:
- "@babel/types" "^7.20.0"
- "@jridgewell/gen-mapping" "^0.3.2"
- jsesc "^2.5.1"
-
-"@babel/helper-annotate-as-pure@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb"
- integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==
- dependencies:
- "@babel/types" "^7.18.6"
-
-"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb"
- integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==
- dependencies:
- "@babel/helper-explode-assignable-expression" "^7.18.6"
- "@babel/types" "^7.18.9"
-
-"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.19.0", "@babel/helper-compilation-targets@^7.19.3":
- version "7.20.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz#6bf5374d424e1b3922822f1d9bdaa43b1a139d0a"
- integrity sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==
- dependencies:
- "@babel/compat-data" "^7.20.0"
- "@babel/helper-validator-option" "^7.18.6"
- browserslist "^4.21.3"
- semver "^6.3.0"
-
-"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.19.0":
- version "7.19.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz#bfd6904620df4e46470bae4850d66be1054c404b"
- integrity sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.18.6"
- "@babel/helper-environment-visitor" "^7.18.9"
- "@babel/helper-function-name" "^7.19.0"
- "@babel/helper-member-expression-to-functions" "^7.18.9"
- "@babel/helper-optimise-call-expression" "^7.18.6"
- "@babel/helper-replace-supers" "^7.18.9"
- "@babel/helper-split-export-declaration" "^7.18.6"
-
-"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.19.0":
- version "7.19.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz#7976aca61c0984202baca73d84e2337a5424a41b"
- integrity sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.18.6"
- regexpu-core "^5.1.0"
-
-"@babel/helper-define-polyfill-provider@^0.3.3":
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a"
- integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==
- dependencies:
- "@babel/helper-compilation-targets" "^7.17.7"
- "@babel/helper-plugin-utils" "^7.16.7"
- debug "^4.1.1"
- lodash.debounce "^4.0.8"
- resolve "^1.14.2"
- semver "^6.1.2"
-
-"@babel/helper-environment-visitor@^7.18.9":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be"
- integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==
-
-"@babel/helper-explode-assignable-expression@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096"
- integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==
- dependencies:
- "@babel/types" "^7.18.6"
-
-"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0":
- version "7.19.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c"
- integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==
- dependencies:
- "@babel/template" "^7.18.10"
- "@babel/types" "^7.19.0"
-
-"@babel/helper-hoist-variables@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678"
- integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==
- dependencies:
- "@babel/types" "^7.18.6"
-
-"@babel/helper-member-expression-to-functions@^7.18.9":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815"
- integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==
- dependencies:
- "@babel/types" "^7.18.9"
-
-"@babel/helper-module-imports@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e"
- integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==
- dependencies:
- "@babel/types" "^7.18.6"
-
-"@babel/helper-module-transforms@^7.19.6":
- version "7.19.6"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz#6c52cc3ac63b70952d33ee987cbee1c9368b533f"
- integrity sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==
- dependencies:
- "@babel/helper-environment-visitor" "^7.18.9"
- "@babel/helper-module-imports" "^7.18.6"
- "@babel/helper-simple-access" "^7.19.4"
- "@babel/helper-split-export-declaration" "^7.18.6"
- "@babel/helper-validator-identifier" "^7.19.1"
- "@babel/template" "^7.18.10"
- "@babel/traverse" "^7.19.6"
- "@babel/types" "^7.19.4"
-
-"@babel/helper-optimise-call-expression@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe"
- integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==
- dependencies:
- "@babel/types" "^7.18.6"
-
-"@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0":
- version "7.19.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz#4796bb14961521f0f8715990bee2fb6e51ce21bf"
- integrity sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==
-
-"@babel/helper-remap-async-to-generator@^7.18.6", "@babel/helper-remap-async-to-generator@^7.18.9":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519"
- integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.18.6"
- "@babel/helper-environment-visitor" "^7.18.9"
- "@babel/helper-wrap-function" "^7.18.9"
- "@babel/types" "^7.18.9"
-
-"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9":
- version "7.19.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz#e1592a9b4b368aa6bdb8784a711e0bcbf0612b78"
- integrity sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==
- dependencies:
- "@babel/helper-environment-visitor" "^7.18.9"
- "@babel/helper-member-expression-to-functions" "^7.18.9"
- "@babel/helper-optimise-call-expression" "^7.18.6"
- "@babel/traverse" "^7.19.1"
- "@babel/types" "^7.19.0"
-
-"@babel/helper-simple-access@^7.19.4":
- version "7.19.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz#be553f4951ac6352df2567f7daa19a0ee15668e7"
- integrity sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==
- dependencies:
- "@babel/types" "^7.19.4"
-
-"@babel/helper-skip-transparent-expression-wrappers@^7.18.9":
- version "7.20.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684"
- integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==
- dependencies:
- "@babel/types" "^7.20.0"
-
-"@babel/helper-split-export-declaration@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075"
- integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==
- dependencies:
- "@babel/types" "^7.18.6"
-
-"@babel/helper-string-parser@^7.19.4":
- version "7.19.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63"
- integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==
-
-"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1":
- version "7.19.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2"
- integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==
-
-"@babel/helper-validator-option@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8"
- integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==
-
-"@babel/helper-wrap-function@^7.18.9":
- version "7.19.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz#89f18335cff1152373222f76a4b37799636ae8b1"
- integrity sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==
- dependencies:
- "@babel/helper-function-name" "^7.19.0"
- "@babel/template" "^7.18.10"
- "@babel/traverse" "^7.19.0"
- "@babel/types" "^7.19.0"
-
-"@babel/helpers@^7.19.4":
- version "7.20.0"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.0.tgz#27c8ffa8cc32a2ed3762fba48886e7654dbcf77f"
- integrity sha512-aGMjYraN0zosCEthoGLdqot1oRsmxVTQRHadsUPz5QM44Zej2PYRz7XiDE7GqnkZnNtLbOuxqoZw42vkU7+XEQ==
- dependencies:
- "@babel/template" "^7.18.10"
- "@babel/traverse" "^7.20.0"
- "@babel/types" "^7.20.0"
-
-"@babel/highlight@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf"
- integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==
- dependencies:
- "@babel/helper-validator-identifier" "^7.18.6"
- chalk "^2.0.0"
- js-tokens "^4.0.0"
-
-"@babel/parser@^7.13.16", "@babel/parser@^7.14.0", "@babel/parser@^7.18.10", "@babel/parser@^7.19.6", "@babel/parser@^7.20.0":
- version "7.20.0"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.0.tgz#b26133c888da4d79b0d3edcf42677bcadc783046"
- integrity sha512-G9VgAhEaICnz8iiJeGJQyVl6J2nTjbW0xeisva0PK6XcKsga7BIaqm4ZF8Rg1Wbaqmy6znspNqhPaPkyukujzg==
-
-"@babel/plugin-proposal-async-generator-functions@^7.0.0":
- version "7.19.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz#34f6f5174b688529342288cd264f80c9ea9fb4a7"
- integrity sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==
- dependencies:
- "@babel/helper-environment-visitor" "^7.18.9"
- "@babel/helper-plugin-utils" "^7.19.0"
- "@babel/helper-remap-async-to-generator" "^7.18.9"
- "@babel/plugin-syntax-async-generators" "^7.8.4"
-
-"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.13.0":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3"
- integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==
- dependencies:
- "@babel/helper-create-class-features-plugin" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-proposal-export-default-from@^7.0.0":
- version "7.18.10"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.18.10.tgz#091f4794dbce4027c03cf4ebc64d3fb96b75c206"
- integrity sha512-5H2N3R2aQFxkV4PIBUR/i7PUSwgTZjouJKzI8eKswfIjT0PhvzkPn0t0wIS5zn6maQuvtT0t1oHtMUz61LOuow==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.9"
- "@babel/plugin-syntax-export-default-from" "^7.18.6"
-
-"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1"
- integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
- "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
-
-"@babel/plugin-proposal-object-rest-spread@^7.0.0":
- version "7.19.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.19.4.tgz#a8fc86e8180ff57290c91a75d83fe658189b642d"
- integrity sha512-wHmj6LDxVDnL+3WhXteUBaoM1aVILZODAUjg11kHqG4cOlfgMQGxw6aCgvrXrmaJR3Bn14oZhImyCPZzRpC93Q==
- dependencies:
- "@babel/compat-data" "^7.19.4"
- "@babel/helper-compilation-targets" "^7.19.3"
- "@babel/helper-plugin-utils" "^7.19.0"
- "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
- "@babel/plugin-transform-parameters" "^7.18.8"
-
-"@babel/plugin-proposal-optional-catch-binding@^7.0.0":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb"
- integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
- "@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":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz#e8e8fe0723f2563960e4bf5e9690933691915993"
- integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.9"
- "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9"
- "@babel/plugin-syntax-optional-chaining" "^7.8.3"
-
-"@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"
- integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-class-properties@^7.0.0":
- 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":
- 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==
- dependencies:
- "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.18.6.tgz#8df076711a4818c4ce4f23e61d622b0ba2ff84bc"
- integrity sha512-Kr//z3ujSVNx6E9z9ih5xXXMqK07VVTuqPmqGe6Mss/zW5XPeLZeSDZoP9ab/hT4wPKqAgjl2PnhPrcpk8Seew==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.18.6", "@babel/plugin-syntax-flow@^7.2.0":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz#774d825256f2379d06139be0c723c4dd444f3ca1"
- integrity sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0"
- integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-syntax-nullish-coalescing-operator@^7.0.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
- version "7.8.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
- integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
- dependencies:
- "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3":
- version "7.8.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
- integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-optional-catch-binding@^7.8.3":
- version "7.8.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
- integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
- dependencies:
- "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-optional-chaining@^7.0.0", "@babel/plugin-syntax-optional-chaining@^7.8.3":
- version "7.8.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
- integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
- dependencies:
- "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-typescript@^7.20.0":
- version "7.20.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz#4e9a0cfc769c85689b77a2e642d24e9f697fc8c7"
- integrity sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==
- dependencies:
- "@babel/helper-plugin-utils" "^7.19.0"
-
-"@babel/plugin-transform-arrow-functions@^7.0.0":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz#19063fcf8771ec7b31d742339dac62433d0611fe"
- integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-async-to-generator@^7.0.0":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz#ccda3d1ab9d5ced5265fdb13f1882d5476c71615"
- integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==
- dependencies:
- "@babel/helper-module-imports" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.18.6"
- "@babel/helper-remap-async-to-generator" "^7.18.6"
-
-"@babel/plugin-transform-block-scoped-functions@^7.0.0":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8"
- integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-block-scoping@^7.0.0":
- version "7.20.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.0.tgz#91fe5e6ffc9ba13cb6c95ed7f0b1204f68c988c5"
- integrity sha512-sXOohbpHZSk7GjxK9b3dKB7CfqUD5DwOH+DggKzOQ7TXYP+RCSbRykfjQmn/zq+rBjycVRtLf9pYhAaEJA786w==
- dependencies:
- "@babel/helper-plugin-utils" "^7.19.0"
-
-"@babel/plugin-transform-classes@^7.0.0":
- version "7.19.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz#0e61ec257fba409c41372175e7c1e606dc79bb20"
- integrity sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.18.6"
- "@babel/helper-compilation-targets" "^7.19.0"
- "@babel/helper-environment-visitor" "^7.18.9"
- "@babel/helper-function-name" "^7.19.0"
- "@babel/helper-optimise-call-expression" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.19.0"
- "@babel/helper-replace-supers" "^7.18.9"
- "@babel/helper-split-export-declaration" "^7.18.6"
- globals "^11.1.0"
-
-"@babel/plugin-transform-computed-properties@^7.0.0":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz#2357a8224d402dad623caf6259b611e56aec746e"
- integrity sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.9"
-
-"@babel/plugin-transform-destructuring@^7.0.0":
- version "7.20.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.0.tgz#712829ef4825d9cc04bb379de316f981e9a6f648"
- integrity sha512-1dIhvZfkDVx/zn2S1aFwlruspTt4189j7fEkH0Y0VyuDM6bQt7bD6kLcz3l4IlLG+e5OReaBz9ROAbttRtUHqA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.19.0"
-
-"@babel/plugin-transform-exponentiation-operator@^7.0.0":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd"
- integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==
- dependencies:
- "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-flow-strip-types@^7.0.0", "@babel/plugin-transform-flow-strip-types@^7.18.6":
- version "7.19.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz#e9e8606633287488216028719638cbbb2f2dde8f"
- integrity sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==
- dependencies:
- "@babel/helper-plugin-utils" "^7.19.0"
- "@babel/plugin-syntax-flow" "^7.18.6"
-
-"@babel/plugin-transform-for-of@^7.0.0":
- version "7.18.8"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1"
- integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-function-name@^7.0.0":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0"
- integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==
- dependencies:
- "@babel/helper-compilation-targets" "^7.18.9"
- "@babel/helper-function-name" "^7.18.9"
- "@babel/helper-plugin-utils" "^7.18.9"
-
-"@babel/plugin-transform-literals@^7.0.0":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc"
- integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.9"
-
-"@babel/plugin-transform-member-expression-literals@^7.0.0":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e"
- integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.13.8":
- version "7.19.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz#25b32feef24df8038fc1ec56038917eacb0b730c"
- integrity sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==
- dependencies:
- "@babel/helper-module-transforms" "^7.19.6"
- "@babel/helper-plugin-utils" "^7.19.0"
- "@babel/helper-simple-access" "^7.19.4"
-
-"@babel/plugin-transform-named-capturing-groups-regex@^7.0.0":
- version "7.19.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz#ec7455bab6cd8fb05c525a94876f435a48128888"
- integrity sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==
- dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.19.0"
- "@babel/helper-plugin-utils" "^7.19.0"
-
-"@babel/plugin-transform-object-super@^7.0.0":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c"
- integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
- "@babel/helper-replace-supers" "^7.18.6"
-
-"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.18.8":
- version "7.18.8"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz#ee9f1a0ce6d78af58d0956a9378ea3427cccb48a"
- integrity sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-property-literals@^7.0.0":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3"
- integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-react-display-name@^7.0.0":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415"
- integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-react-jsx-self@^7.0.0":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz#3849401bab7ae8ffa1e3e5687c94a753fc75bda7"
- integrity sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-react-jsx-source@^7.0.0":
- version "7.19.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz#88578ae8331e5887e8ce28e4c9dc83fb29da0b86"
- integrity sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==
- dependencies:
- "@babel/helper-plugin-utils" "^7.19.0"
-
-"@babel/plugin-transform-react-jsx@^7.0.0":
- version "7.19.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz#b3cbb7c3a00b92ec8ae1027910e331ba5c500eb9"
- integrity sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.18.6"
- "@babel/helper-module-imports" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.19.0"
- "@babel/plugin-syntax-jsx" "^7.18.6"
- "@babel/types" "^7.19.0"
-
-"@babel/plugin-transform-runtime@^7.0.0":
- version "7.19.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz#9d2a9dbf4e12644d6f46e5e75bfbf02b5d6e9194"
- integrity sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==
- dependencies:
- "@babel/helper-module-imports" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.19.0"
- babel-plugin-polyfill-corejs2 "^0.3.3"
- babel-plugin-polyfill-corejs3 "^0.6.0"
- babel-plugin-polyfill-regenerator "^0.4.1"
- semver "^6.3.0"
-
-"@babel/plugin-transform-shorthand-properties@^7.0.0":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9"
- integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-spread@^7.0.0":
- version "7.19.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz#dd60b4620c2fec806d60cfaae364ec2188d593b6"
- integrity sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==
- dependencies:
- "@babel/helper-plugin-utils" "^7.19.0"
- "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9"
-
-"@babel/plugin-transform-sticky-regex@^7.0.0":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc"
- integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-template-literals@^7.0.0":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e"
- integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.9"
-
-"@babel/plugin-transform-typescript@^7.18.6", "@babel/plugin-transform-typescript@^7.5.0":
- version "7.20.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.0.tgz#2c7ec62b8bfc21482f3748789ba294a46a375169"
- integrity sha512-xOAsAFaun3t9hCwZ13Qe7gq423UgMZ6zAgmLxeGGapFqlT/X3L5qT2btjiVLlFn7gWtMaVyceS5VxGAuKbgizw==
- dependencies:
- "@babel/helper-create-class-features-plugin" "^7.19.0"
- "@babel/helper-plugin-utils" "^7.19.0"
- "@babel/plugin-syntax-typescript" "^7.20.0"
-
-"@babel/plugin-transform-unicode-regex@^7.0.0":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca"
- integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==
- dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/preset-flow@^7.13.13":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.18.6.tgz#83f7602ba566e72a9918beefafef8ef16d2810cb"
- integrity sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
- "@babel/helper-validator-option" "^7.18.6"
- "@babel/plugin-transform-flow-strip-types" "^7.18.6"
-
-"@babel/preset-typescript@^7.13.0":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz#ce64be3e63eddc44240c6358daefac17b3186399"
- integrity sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
- "@babel/helper-validator-option" "^7.18.6"
- "@babel/plugin-transform-typescript" "^7.18.6"
-
-"@babel/register@^7.13.16":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.18.9.tgz#1888b24bc28d5cc41c412feb015e9ff6b96e439c"
- integrity sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw==
- 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.0.0", "@babel/runtime@^7.12.5":
- version "7.20.0"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.0.tgz#824a9ef325ffde6f78056059db3168c08785e24a"
- integrity sha512-NDYdls71fTXoU8TZHfbBWg7DiZfNzClcKui/+kyi6ppD2L1qnWW3VV6CjtaBXSUGGhiTWJ6ereOIkUvenif66Q==
- dependencies:
- regenerator-runtime "^0.13.10"
-
-"@babel/template@^7.0.0", "@babel/template@^7.18.10":
- version "7.18.10"
- resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71"
- integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==
- dependencies:
- "@babel/code-frame" "^7.18.6"
- "@babel/parser" "^7.18.10"
- "@babel/types" "^7.18.10"
-
-"@babel/traverse@^7.14.0", "@babel/traverse@^7.19.0", "@babel/traverse@^7.19.1", "@babel/traverse@^7.19.6", "@babel/traverse@^7.20.0":
- version "7.20.0"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.0.tgz#538c4c6ce6255f5666eba02252a7b59fc2d5ed98"
- integrity sha512-5+cAXQNARgjRUK0JWu2UBwja4JLSO/rBMPJzpsKb+oBF5xlUuCfljQepS4XypBQoiigL0VQjTZy6WiONtUdScQ==
- dependencies:
- "@babel/code-frame" "^7.18.6"
- "@babel/generator" "^7.20.0"
- "@babel/helper-environment-visitor" "^7.18.9"
- "@babel/helper-function-name" "^7.19.0"
- "@babel/helper-hoist-variables" "^7.18.6"
- "@babel/helper-split-export-declaration" "^7.18.6"
- "@babel/parser" "^7.20.0"
- "@babel/types" "^7.20.0"
- debug "^4.1.0"
- globals "^11.1.0"
-
-"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.19.4", "@babel/types@^7.20.0":
- version "7.20.0"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.0.tgz#52c94cf8a7e24e89d2a194c25c35b17a64871479"
- integrity sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg==
- dependencies:
- "@babel/helper-string-parser" "^7.19.4"
- "@babel/helper-validator-identifier" "^7.19.1"
- to-fast-properties "^2.0.0"
-
-"@hapi/hoek@^9.0.0":
- version "9.3.0"
- resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb"
- integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==
-
-"@hapi/topo@^5.0.0":
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012"
- integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==
- dependencies:
- "@hapi/hoek" "^9.0.0"
-
-"@jest/create-cache-key-function@^29.0.3":
- version "29.2.1"
- resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-29.2.1.tgz#5f168051001ffea318b720cd6062daaf0b074913"
- integrity sha512-///wxGQUyP0GCr3L1OcqIzhsKvN2gOyqWsRxs56XGCdD8EEuoKg857G9nC+zcWIpIsG+3J5UnEbhe3LJw8CNmQ==
- dependencies:
- "@jest/types" "^29.2.1"
-
-"@jest/schemas@^29.0.0":
- version "29.0.0"
- resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.0.0.tgz#5f47f5994dd4ef067fb7b4188ceac45f77fe952a"
- integrity sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==
- dependencies:
- "@sinclair/typebox" "^0.24.1"
-
-"@jest/types@^26.6.2":
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e"
- integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==
- dependencies:
- "@types/istanbul-lib-coverage" "^2.0.0"
- "@types/istanbul-reports" "^3.0.0"
- "@types/node" "*"
- "@types/yargs" "^15.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"
-
-"@jest/types@^29.2.1":
- version "29.2.1"
- resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.2.1.tgz#ec9c683094d4eb754e41e2119d8bdaef01cf6da0"
- integrity sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==
- dependencies:
- "@jest/schemas" "^29.0.0"
- "@types/istanbul-lib-coverage" "^2.0.0"
- "@types/istanbul-reports" "^3.0.0"
- "@types/node" "*"
- "@types/yargs" "^17.0.8"
- chalk "^4.0.0"
-
-"@jridgewell/gen-mapping@^0.1.0":
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996"
- integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==
- dependencies:
- "@jridgewell/set-array" "^1.0.0"
- "@jridgewell/sourcemap-codec" "^1.4.10"
-
-"@jridgewell/gen-mapping@^0.3.2":
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9"
- integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==
- dependencies:
- "@jridgewell/set-array" "^1.0.1"
- "@jridgewell/sourcemap-codec" "^1.4.10"
- "@jridgewell/trace-mapping" "^0.3.9"
-
-"@jridgewell/resolve-uri@3.1.0":
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
- integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
-
-"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1":
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
- integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
-
-"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10":
- version "1.4.14"
- resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
- integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
-
-"@jridgewell/trace-mapping@^0.3.9":
- version "0.3.17"
- resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985"
- integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==
- dependencies:
- "@jridgewell/resolve-uri" "3.1.0"
- "@jridgewell/sourcemap-codec" "1.4.14"
-
-"@react-native-community/cli-clean@^9.2.1":
- version "9.2.1"
- resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-9.2.1.tgz#198c5dd39c432efb5374582073065ff75d67d018"
- integrity sha512-dyNWFrqRe31UEvNO+OFWmQ4hmqA07bR9Ief/6NnGwx67IO9q83D5PEAf/o96ML6jhSbDwCmpPKhPwwBbsyM3mQ==
- dependencies:
- "@react-native-community/cli-tools" "^9.2.1"
- chalk "^4.1.2"
- execa "^1.0.0"
- prompts "^2.4.0"
-
-"@react-native-community/cli-config@^9.2.1":
- version "9.2.1"
- resolved "https://registry.yarnpkg.com/@react-native-community/cli-config/-/cli-config-9.2.1.tgz#54eb026d53621ccf3a9df8b189ac24f6e56b8750"
- integrity sha512-gHJlBBXUgDN9vrr3aWkRqnYrPXZLztBDQoY97Mm5Yo6MidsEpYo2JIP6FH4N/N2p1TdjxJL4EFtdd/mBpiR2MQ==
- dependencies:
- "@react-native-community/cli-tools" "^9.2.1"
- cosmiconfig "^5.1.0"
- deepmerge "^3.2.0"
- glob "^7.1.3"
- joi "^17.2.1"
-
-"@react-native-community/cli-debugger-ui@^9.0.0":
- version "9.0.0"
- resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-9.0.0.tgz#ea5c5dad6008bccd840d858e160d42bb2ced8793"
- integrity sha512-7hH05ZwU9Tp0yS6xJW0bqcZPVt0YCK7gwj7gnRu1jDNN2kughf6Lg0Ys29rAvtZ7VO1PK5c1O+zs7yFnylQDUA==
- dependencies:
- serve-static "^1.13.1"
-
-"@react-native-community/cli-doctor@^9.2.1":
- version "9.2.1"
- resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-9.2.1.tgz#04859a93f0ea87d78cc7050362b6ce2b1c54fd36"
- integrity sha512-RpUax0pkKumXJ5hcRG0Qd+oYWsA2RFeMWKY+Npg8q05Cwd1rqDQfWGprkHC576vz26+FPuvwEagoAf6fR2bvJA==
- dependencies:
- "@react-native-community/cli-config" "^9.2.1"
- "@react-native-community/cli-platform-ios" "^9.2.1"
- "@react-native-community/cli-tools" "^9.2.1"
- 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-hermes@^9.2.1":
- version "9.2.1"
- resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-9.2.1.tgz#c4aeadc4aa2b55cd0dd931a1a1c1909fd426f31a"
- integrity sha512-723/NMb7egXzJrbWT1uEkN2hOpw+OOtWTG2zKJ3j7KKgUd8u/pP+/z5jO8xVrq+eYJEMjDK0FBEo1Xj7maR4Sw==
- dependencies:
- "@react-native-community/cli-platform-android" "^9.2.1"
- "@react-native-community/cli-tools" "^9.2.1"
- chalk "^4.1.2"
- hermes-profile-transformer "^0.0.6"
- ip "^1.1.5"
-
-"@react-native-community/cli-platform-android@9.2.1", "@react-native-community/cli-platform-android@^9.2.1":
- version "9.2.1"
- resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-9.2.1.tgz#cd73cb6bbaeb478cafbed10bd12dfc01b484d488"
- integrity sha512-VamCZ8nido3Q3Orhj6pBIx48itORNPLJ7iTfy3nucD1qISEDih3DOzCaQCtmqdEBgUkNkNl0O+cKgq5A3th3Zg==
- dependencies:
- "@react-native-community/cli-tools" "^9.2.1"
- chalk "^4.1.2"
- execa "^1.0.0"
- fs-extra "^8.1.0"
- glob "^7.1.3"
- logkitty "^0.7.1"
- slash "^3.0.0"
-
-"@react-native-community/cli-platform-ios@9.2.1", "@react-native-community/cli-platform-ios@^9.2.1":
- version "9.2.1"
- resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-9.2.1.tgz#d90740472216ffae5527dfc5f49063ede18a621f"
- integrity sha512-dEgvkI6CFgPk3vs8IOR0toKVUjIFwe4AsXFvWWJL5qhrIzW9E5Owi0zPkSvzXsMlfYMbVX0COfVIK539ZxguSg==
- dependencies:
- "@react-native-community/cli-tools" "^9.2.1"
- chalk "^4.1.2"
- execa "^1.0.0"
- glob "^7.1.3"
- ora "^5.4.1"
-
-"@react-native-community/cli-plugin-metro@^9.2.1":
- version "9.2.1"
- resolved "https://registry.yarnpkg.com/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-9.2.1.tgz#0ec207e78338e0cc0a3cbe1b43059c24afc66158"
- integrity sha512-byBGBH6jDfUvcHGFA45W/sDwMlliv7flJ8Ns9foCh3VsIeYYPoDjjK7SawE9cPqRdMAD4SY7EVwqJnOtRbwLiQ==
- dependencies:
- "@react-native-community/cli-server-api" "^9.2.1"
- "@react-native-community/cli-tools" "^9.2.1"
- chalk "^4.1.2"
- metro "0.72.3"
- metro-config "0.72.3"
- metro-core "0.72.3"
- metro-react-native-babel-transformer "0.72.3"
- metro-resolver "0.72.3"
- metro-runtime "0.72.3"
- readline "^1.3.0"
-
-"@react-native-community/cli-server-api@^9.2.1":
- version "9.2.1"
- resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-9.2.1.tgz#41ac5916b21d324bccef447f75600c03b2f54fbe"
- integrity sha512-EI+9MUxEbWBQhWw2PkhejXfkcRqPl+58+whlXJvKHiiUd7oVbewFs0uLW0yZffUutt4FGx6Uh88JWEgwOzAdkw==
- dependencies:
- "@react-native-community/cli-debugger-ui" "^9.0.0"
- "@react-native-community/cli-tools" "^9.2.1"
- compression "^1.7.1"
- connect "^3.6.5"
- errorhandler "^1.5.0"
- nocache "^3.0.1"
- pretty-format "^26.6.2"
- serve-static "^1.13.1"
- ws "^7.5.1"
-
-"@react-native-community/cli-tools@^9.2.1":
- version "9.2.1"
- resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-9.2.1.tgz#c332324b1ea99f9efdc3643649bce968aa98191c"
- integrity sha512-bHmL/wrKmBphz25eMtoJQgwwmeCylbPxqFJnFSbkqJPXQz3ManQ6q/gVVMqFyz7D3v+riaus/VXz3sEDa97uiQ==
- dependencies:
- appdirsjs "^1.2.4"
- chalk "^4.1.2"
- find-up "^5.0.0"
- 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@^9.1.0":
- version "9.1.0"
- resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-9.1.0.tgz#dcd6a0022f62790fe1f67417f4690db938746aab"
- integrity sha512-KDybF9XHvafLEILsbiKwz5Iobd+gxRaPyn4zSaAerBxedug4er5VUWa8Szy+2GeYKZzMh/gsb1o9lCToUwdT/g==
- dependencies:
- joi "^17.2.1"
-
-"@react-native-community/cli@9.2.1":
- version "9.2.1"
- resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-9.2.1.tgz#15cc32531fc323d4232d57b1f2d7c571816305ac"
- integrity sha512-feMYS5WXXKF4TSWnCXozHxtWq36smyhGaENXlkiRESfYZ1mnCUlPfOanNCAvNvBqdyh9d4o0HxhYKX1g9l6DCQ==
- dependencies:
- "@react-native-community/cli-clean" "^9.2.1"
- "@react-native-community/cli-config" "^9.2.1"
- "@react-native-community/cli-debugger-ui" "^9.0.0"
- "@react-native-community/cli-doctor" "^9.2.1"
- "@react-native-community/cli-hermes" "^9.2.1"
- "@react-native-community/cli-plugin-metro" "^9.2.1"
- "@react-native-community/cli-server-api" "^9.2.1"
- "@react-native-community/cli-tools" "^9.2.1"
- "@react-native-community/cli-types" "^9.1.0"
- chalk "^4.1.2"
- commander "^9.4.0"
- execa "^1.0.0"
- find-up "^4.1.0"
- fs-extra "^8.1.0"
- graceful-fs "^4.1.3"
- prompts "^2.4.0"
- semver "^6.3.0"
-
-"@react-native/assets@1.0.0":
- version "1.0.0"
- 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":
- 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==
-
-"@react-native/polyfills@2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@react-native/polyfills/-/polyfills-2.0.0.tgz#4c40b74655c83982c8cf47530ee7dc13d957b6aa"
- integrity sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ==
-
-"@react-navigation/bottom-tabs@^6.5.3":
- version "6.5.3"
- resolved "https://registry.yarnpkg.com/@react-navigation/bottom-tabs/-/bottom-tabs-6.5.3.tgz#76bb793b42326544997d438c5202b59913d0d656"
- integrity sha512-ZA2Ko9fNwNaaSNn7738KpEk8Doi+yjRfTg8Wb/WvduIaK/28qNLAYWBCUEVjBC55y/9zJOzwc4R8Av2J2MG/4g==
- dependencies:
- "@react-navigation/elements" "^1.3.13"
- color "^4.2.3"
- warn-once "^0.1.0"
-
-"@react-navigation/core@^6.4.6":
- version "6.4.6"
- resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-6.4.6.tgz#b0738667dec5927b01c4c496c2f4c73ef8a5e4dd"
- integrity sha512-6zaAgUT5k4vhJlddUk2l52RZyMkMelHdrRv1cL57ALi2RZzERdgmbiMKhJerxFLn9S8E3PUe8vwxHzjHOZKG4w==
- dependencies:
- "@react-navigation/routers" "^6.1.6"
- escape-string-regexp "^4.0.0"
- nanoid "^3.1.23"
- query-string "^7.1.3"
- react-is "^16.13.0"
- use-latest-callback "^0.1.5"
-
-"@react-navigation/elements@^1.3.13":
- version "1.3.13"
- resolved "https://registry.yarnpkg.com/@react-navigation/elements/-/elements-1.3.13.tgz#5105fa26df8d32810cd9f14d6ec5a3d2c2bb26d2"
- integrity sha512-LqqK5s2ZfYHn2cQ376jC5V9dQztLH5ixkkJj9WR7JY2g4SghDd39WJhL3Jillw1Mu3F3b9sZwvAK+QkXhnDeAA==
-
-"@react-navigation/native-stack@^6.9.8":
- version "6.9.8"
- resolved "https://registry.yarnpkg.com/@react-navigation/native-stack/-/native-stack-6.9.8.tgz#c953a169918a4bdde56f7d2dc1073da4726b4cb7"
- integrity sha512-74dje939lflsTXJQwCAdznbJ4B6V8sA5CSzuHwbiogL8B6EVXNa/qliXtB7DBAvzeyWDWT3u+gM2vOYJOeXYhA==
- dependencies:
- "@react-navigation/elements" "^1.3.13"
- warn-once "^0.1.0"
-
-"@react-navigation/native@^6.1.2":
- version "6.1.2"
- resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-6.1.2.tgz#6fffbf4787c233687fff8fe9ce7364ffce696d38"
- integrity sha512-qLUe0asHofr5EhxKjvUBJ9DrPPmR4535IEwmW3oU4DRb3cLbNysjajJKHL8kcYtqPvn9Bx9QZG2x0PMb2vN23A==
- dependencies:
- "@react-navigation/core" "^6.4.6"
- escape-string-regexp "^4.0.0"
- fast-deep-equal "^3.1.3"
- nanoid "^3.1.23"
-
-"@react-navigation/routers@^6.1.6":
- version "6.1.6"
- resolved "https://registry.yarnpkg.com/@react-navigation/routers/-/routers-6.1.6.tgz#f57f2a73855d329255aa225fdad75ae8e7700c6d"
- integrity sha512-Z5DeCW3pUvMafbU9Cjy1qJYC2Bvl8iy3+PfsB0DsAwQ6zZ3WAXW5FTMX4Gb9H+Jg6qHWGbMFFwlYpS3UJ3tlVQ==
- dependencies:
- nanoid "^3.1.23"
-
-"@sideway/address@^4.1.3":
- version "4.1.4"
- resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0"
- integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==
- dependencies:
- "@hapi/hoek" "^9.0.0"
-
-"@sideway/formula@^3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c"
- integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==
-
-"@sideway/pinpoint@^2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df"
- integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==
-
-"@sinclair/typebox@^0.24.1":
- version "0.24.51"
- resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f"
- integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==
-
-"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44"
- integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==
-
-"@types/istanbul-lib-report@*":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686"
- integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==
- dependencies:
- "@types/istanbul-lib-coverage" "*"
-
-"@types/istanbul-reports@^3.0.0":
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff"
- integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==
- dependencies:
- "@types/istanbul-lib-report" "*"
-
-"@types/node@*":
- version "18.11.7"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.7.tgz#8ccef136f240770c1379d50100796a6952f01f94"
- integrity sha512-LhFTglglr63mNXUSRYD8A+ZAIu5sFqNJ4Y2fPuY7UlrySJH87rRRlhtVmMHplmfk5WkoJGmDjE9oiTfyX94CpQ==
-
-"@types/yargs-parser@*":
- version "21.0.0"
- resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b"
- integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==
-
-"@types/yargs@^15.0.0":
- version "15.0.14"
- resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06"
- integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==
- dependencies:
- "@types/yargs-parser" "*"
-
-"@types/yargs@^16.0.0":
- version "16.0.4"
- resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977"
- integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==
- dependencies:
- "@types/yargs-parser" "*"
-
-"@types/yargs@^17.0.8":
- version "17.0.13"
- resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.13.tgz#34cced675ca1b1d51fcf4d34c3c6f0fa142a5c76"
- integrity sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==
- dependencies:
- "@types/yargs-parser" "*"
-
-abort-controller@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
- integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==
- dependencies:
- event-target-shim "^5.0.0"
-
-absolute-path@^0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/absolute-path/-/absolute-path-0.0.0.tgz#a78762fbdadfb5297be99b15d35a785b2f095bf7"
- integrity sha512-HQiug4c+/s3WOvEnDRxXVmNtSG5s2gJM9r19BTcqjp7BWcE48PB+Y2G6jE65kqI0LpsQeMZygt/b60Gi4KxGyA==
-
-accepts@^1.3.7, accepts@~1.3.5, accepts@~1.3.7:
- version "1.3.8"
- resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
- integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
- dependencies:
- mime-types "~2.1.34"
- negotiator "0.6.3"
-
-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-fragments@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/ansi-fragments/-/ansi-fragments-0.2.1.tgz#24409c56c4cc37817c3d7caa99d8969e2de5a05e"
- integrity sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==
- dependencies:
- colorette "^1.0.7"
- slice-ansi "^2.0.0"
- strip-ansi "^5.0.0"
-
-ansi-regex@^4.1.0:
- 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"
- 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"
- integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
- dependencies:
- color-convert "^1.9.0"
-
-ansi-styles@^4.0.0, 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"
-
-anymatch@^3.0.3:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
- integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
- dependencies:
- normalize-path "^3.0.0"
- picomatch "^2.0.4"
-
-appdirsjs@^1.2.4:
- version "1.2.7"
- resolved "https://registry.yarnpkg.com/appdirsjs/-/appdirsjs-1.2.7.tgz#50b4b7948a26ba6090d4aede2ae2dc2b051be3b3"
- integrity sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==
-
-argparse@^1.0.7:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
- integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
- dependencies:
- sprintf-js "~1.0.2"
-
-arr-diff@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
- integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==
-
-arr-flatten@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
- integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
-
-arr-union@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
- integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==
-
-array-unique@^0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
- integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==
-
-asap@~2.0.6:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
- integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==
-
-assign-symbols@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
- integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==
-
-ast-types@0.14.2:
- version "0.14.2"
- resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.14.2.tgz#600b882df8583e3cd4f2df5fa20fa83759d4bdfd"
- integrity sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==
- dependencies:
- tslib "^2.0.1"
-
-astral-regex@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
- integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
-
-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@^3.2.2:
- version "3.2.4"
- resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c"
- integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==
-
-atob@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
- integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
-
-babel-core@^7.0.0-bridge.0:
- version "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-plugin-module-resolver@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.1.0.tgz#22a4f32f7441727ec1fbf4967b863e1e3e9f33e2"
- integrity sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA==
- dependencies:
- find-babel-config "^1.2.0"
- glob "^7.1.6"
- pkg-up "^3.1.0"
- reselect "^4.0.0"
- resolve "^1.13.1"
-
-babel-plugin-polyfill-corejs2@^0.3.3:
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122"
- integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==
- dependencies:
- "@babel/compat-data" "^7.17.7"
- "@babel/helper-define-polyfill-provider" "^0.3.3"
- semver "^6.1.1"
-
-babel-plugin-polyfill-corejs3@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a"
- integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==
- dependencies:
- "@babel/helper-define-polyfill-provider" "^0.3.3"
- core-js-compat "^3.25.1"
-
-babel-plugin-polyfill-regenerator@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747"
- integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==
- dependencies:
- "@babel/helper-define-polyfill-provider" "^0.3.3"
-
-babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0:
- version "7.0.0-beta.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf"
- integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==
-
-babel-preset-fbjs@^3.4.0:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz#38a14e5a7a3b285a3f3a86552d650dca5cf6111c"
- integrity sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==
- dependencies:
- "@babel/plugin-proposal-class-properties" "^7.0.0"
- "@babel/plugin-proposal-object-rest-spread" "^7.0.0"
- "@babel/plugin-syntax-class-properties" "^7.0.0"
- "@babel/plugin-syntax-flow" "^7.0.0"
- "@babel/plugin-syntax-jsx" "^7.0.0"
- "@babel/plugin-syntax-object-rest-spread" "^7.0.0"
- "@babel/plugin-transform-arrow-functions" "^7.0.0"
- "@babel/plugin-transform-block-scoped-functions" "^7.0.0"
- "@babel/plugin-transform-block-scoping" "^7.0.0"
- "@babel/plugin-transform-classes" "^7.0.0"
- "@babel/plugin-transform-computed-properties" "^7.0.0"
- "@babel/plugin-transform-destructuring" "^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-member-expression-literals" "^7.0.0"
- "@babel/plugin-transform-modules-commonjs" "^7.0.0"
- "@babel/plugin-transform-object-super" "^7.0.0"
- "@babel/plugin-transform-parameters" "^7.0.0"
- "@babel/plugin-transform-property-literals" "^7.0.0"
- "@babel/plugin-transform-react-display-name" "^7.0.0"
- "@babel/plugin-transform-react-jsx" "^7.0.0"
- "@babel/plugin-transform-shorthand-properties" "^7.0.0"
- "@babel/plugin-transform-spread" "^7.0.0"
- "@babel/plugin-transform-template-literals" "^7.0.0"
- babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0"
-
-balanced-match@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
- integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
-
-base64-js@^1.1.2, base64-js@^1.3.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
- integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
-
-base@^0.11.1:
- version "0.11.2"
- resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
- integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
- dependencies:
- cache-base "^1.0.1"
- class-utils "^0.3.5"
- component-emitter "^1.2.1"
- define-property "^1.0.0"
- isobject "^3.0.1"
- mixin-deep "^1.2.0"
- pascalcase "^0.1.1"
-
-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"
-
-brace-expansion@^1.1.7:
- version "1.1.11"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
- integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
- dependencies:
- balanced-match "^1.0.0"
- concat-map "0.0.1"
-
-braces@^2.3.1:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
- integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
- dependencies:
- arr-flatten "^1.1.0"
- array-unique "^0.3.2"
- extend-shallow "^2.0.1"
- fill-range "^4.0.0"
- isobject "^3.0.1"
- repeat-element "^1.1.2"
- snapdragon "^0.8.1"
- snapdragon-node "^2.0.1"
- split-string "^3.0.2"
- to-regex "^3.0.1"
-
-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==
- dependencies:
- fill-range "^7.0.1"
-
-browserslist@^4.21.3, browserslist@^4.21.4:
- version "4.21.4"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987"
- integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==
- dependencies:
- caniuse-lite "^1.0.30001400"
- electron-to-chromium "^1.4.251"
- node-releases "^2.0.6"
- update-browserslist-db "^1.0.9"
-
-bser@2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
- integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
- dependencies:
- node-int64 "^0.4.0"
-
-buffer-from@^1.0.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
- integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
-
-buffer@^5.5.0:
- version "5.7.1"
- resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
- integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
- dependencies:
- base64-js "^1.3.1"
- ieee754 "^1.1.13"
-
-bytes@3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
- integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==
-
-cache-base@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
- integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
- dependencies:
- collection-visit "^1.0.0"
- component-emitter "^1.2.1"
- get-value "^2.0.6"
- has-value "^1.0.0"
- isobject "^3.0.1"
- set-value "^2.0.0"
- to-object-path "^0.3.0"
- union-value "^1.0.0"
- unset-value "^1.0.0"
-
-caller-callsite@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
- integrity sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==
- dependencies:
- callsites "^2.0.0"
-
-caller-path@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
- integrity sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==
- dependencies:
- caller-callsite "^2.0.0"
-
-callsites@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
- integrity sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==
-
-camelcase@^5.0.0:
- version "5.3.1"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
- integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
-
-camelcase@^6.0.0:
- version "6.3.0"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
- integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
-
-caniuse-lite@^1.0.30001400:
- version "1.0.30001426"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001426.tgz#58da20446ccd0cb1dfebd11d2350c907ee7c2eaa"
- integrity sha512-n7cosrHLl8AWt0wwZw/PJZgUg3lV0gk9LMI7ikGJwhyhgsd2Nb65vKvmSexCqq/J7rbH3mFG6yZZiPR5dLPW5A==
-
-chalk@^2.0.0:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
- integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
- dependencies:
- ansi-styles "^3.2.1"
- escape-string-regexp "^1.0.5"
- supports-color "^5.3.0"
-
-chalk@^4.0.0, 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==
- dependencies:
- ansi-styles "^4.1.0"
- supports-color "^7.1.0"
-
-ci-info@^2.0.0:
- version "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.5.0"
- resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.5.0.tgz#bfac2a29263de4c829d806b1ab478e35091e171f"
- integrity sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==
-
-class-utils@^0.3.5:
- version "0.3.6"
- resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
- integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
- dependencies:
- arr-union "^3.1.0"
- define-property "^0.2.5"
- isobject "^3.0.0"
- static-extend "^0.1.1"
-
-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.5.0:
- version "2.7.0"
- resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a"
- integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==
-
-cliui@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
- integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
- dependencies:
- string-width "^4.2.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"
- integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==
-
-collection-visit@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
- integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==
- dependencies:
- map-visit "^1.0.0"
- object-visit "^1.0.0"
-
-color-convert@^1.9.0:
- 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==
- dependencies:
- color-name "1.1.3"
-
-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"
-
-color-name@1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
- integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
-
-color-name@^1.0.0, 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==
-
-color-string@^1.9.0:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4"
- integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==
- dependencies:
- color-name "^1.0.0"
- simple-swizzle "^0.2.2"
-
-color@^4.2.3:
- version "4.2.3"
- resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a"
- integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==
- dependencies:
- color-convert "^2.0.1"
- color-string "^1.9.0"
-
-colorette@^1.0.7:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40"
- integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==
-
-command-exists@^1.2.8:
- version "1.2.9"
- resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69"
- integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==
-
-commander@^9.4.0:
- version "9.4.1"
- resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.1.tgz#d1dd8f2ce6faf93147295c0df13c7c21141cfbdd"
- integrity sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==
-
-commander@~2.13.0:
- version "2.13.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c"
- integrity sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==
-
-commondir@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
- integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==
-
-component-emitter@^1.2.1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
- integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
-
-compressible@~2.0.16:
- version "2.0.18"
- resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
- integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==
- dependencies:
- mime-db ">= 1.43.0 < 2"
-
-compression@^1.7.1:
- version "1.7.4"
- resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
- integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==
- dependencies:
- accepts "~1.3.5"
- bytes "3.0.0"
- compressible "~2.0.16"
- debug "2.6.9"
- on-headers "~1.0.2"
- safe-buffer "5.1.2"
- vary "~1.1.2"
-
-concat-map@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
- integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
-
-connect@^3.6.5:
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8"
- integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==
- dependencies:
- debug "2.6.9"
- finalhandler "1.1.2"
- parseurl "~1.3.3"
- utils-merge "1.0.1"
-
-convert-source-map@^1.7.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f"
- integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==
-
-copy-descriptor@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
- integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==
-
-core-js-compat@^3.25.1:
- version "3.26.0"
- resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.26.0.tgz#94e2cf8ba3e63800c4956ea298a6473bc9d62b44"
- integrity sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A==
- dependencies:
- browserslist "^4.21.4"
-
-core-util-is@~1.0.0:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
- integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
-
-cosmiconfig@^5.0.5, cosmiconfig@^5.1.0:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
- integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
- dependencies:
- import-fresh "^2.0.0"
- is-directory "^0.3.1"
- js-yaml "^3.13.1"
- parse-json "^4.0.0"
-
-cross-spawn@^6.0.0:
- version "6.0.5"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
- integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
- dependencies:
- nice-try "^1.0.4"
- path-key "^2.0.1"
- semver "^5.5.0"
- shebang-command "^1.2.0"
- which "^1.2.9"
-
-dayjs@^1.8.15:
- version "1.11.6"
- resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.6.tgz#2e79a226314ec3ec904e3ee1dd5a4f5e5b1c7afb"
- integrity sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ==
-
-debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
- version "2.6.9"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
- integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
- dependencies:
- ms "2.0.0"
-
-debug@^4.1.0, debug@^4.1.1:
- 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"
- integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==
-
-decode-uri-component@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
- integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==
-
-decode-uri-component@^0.2.2:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9"
- integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==
-
-deepmerge@^3.2.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.3.0.tgz#d3c47fd6f3a93d517b14426b0628a17b0125f5f7"
- integrity sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==
-
-defaults@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a"
- integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==
- dependencies:
- clone "^1.0.2"
-
-define-property@^0.2.5:
- version "0.2.5"
- resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
- integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==
- dependencies:
- is-descriptor "^0.1.0"
-
-define-property@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
- integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==
- dependencies:
- is-descriptor "^1.0.0"
-
-define-property@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
- integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
- dependencies:
- is-descriptor "^1.0.2"
- isobject "^3.0.1"
-
-denodeify@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631"
- integrity sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==
-
-depd@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
- integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
-
-destroy@1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
- integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
-
-ee-first@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
- integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
-
-electron-to-chromium@^1.4.251:
- version "1.4.284"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592"
- integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==
-
-emoji-regex@^8.0.0:
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
- integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
-
-encodeurl@~1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
- integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
-
-end-of-stream@^1.1.0:
- version "1.4.4"
- resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
- integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
- dependencies:
- once "^1.4.0"
-
-envinfo@^7.7.2:
- version "7.8.1"
- resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475"
- integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==
-
-error-ex@^1.3.1:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
- integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
- dependencies:
- is-arrayish "^0.2.1"
-
-error-stack-parser@^2.0.6:
- version "2.1.4"
- resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286"
- integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==
- dependencies:
- stackframe "^1.3.4"
-
-errorhandler@^1.5.0:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/errorhandler/-/errorhandler-1.5.1.tgz#b9ba5d17cf90744cd1e851357a6e75bf806a9a91"
- integrity sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==
- dependencies:
- accepts "~1.3.7"
- escape-html "~1.0.3"
-
-escalade@^3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
- integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
-
-escape-html@~1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
- integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
-
-escape-string-regexp@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
- integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
-
-escape-string-regexp@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
- integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
-
-esprima@^4.0.0, 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==
-
-etag@~1.8.1:
- version "1.8.1"
- resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
- integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
-
-event-target-shim@^5.0.0, event-target-shim@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
- integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
-
-execa@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
- integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
- dependencies:
- cross-spawn "^6.0.0"
- get-stream "^4.0.0"
- is-stream "^1.1.0"
- npm-run-path "^2.0.0"
- p-finally "^1.0.0"
- signal-exit "^3.0.0"
- strip-eof "^1.0.0"
-
-expand-brackets@^2.1.4:
- version "2.1.4"
- resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
- integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==
- dependencies:
- debug "^2.3.3"
- define-property "^0.2.5"
- extend-shallow "^2.0.1"
- posix-character-classes "^0.1.0"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.1"
-
-extend-shallow@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
- integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==
- dependencies:
- is-extendable "^0.1.0"
-
-extend-shallow@^3.0.0, extend-shallow@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
- integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==
- dependencies:
- assign-symbols "^1.0.0"
- is-extendable "^1.0.1"
-
-extglob@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
- integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
- dependencies:
- array-unique "^0.3.2"
- define-property "^1.0.0"
- expand-brackets "^2.1.4"
- extend-shallow "^2.0.1"
- fragment-cache "^0.2.1"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.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"
- integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
-
-fb-watchman@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c"
- integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==
- dependencies:
- bser "2.1.1"
-
-fill-range@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
- integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==
- dependencies:
- extend-shallow "^2.0.1"
- is-number "^3.0.0"
- repeat-string "^1.6.1"
- to-regex-range "^2.1.0"
-
-fill-range@^7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
- integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
- 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 sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==
-
-finalhandler@1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
- integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
- dependencies:
- debug "2.6.9"
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- on-finished "~2.3.0"
- parseurl "~1.3.3"
- statuses "~1.5.0"
- unpipe "~1.0.0"
-
-find-babel-config@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2"
- integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==
- dependencies:
- json5 "^0.5.1"
- path-exists "^3.0.0"
-
-find-cache-dir@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
- integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
- dependencies:
- commondir "^1.0.1"
- make-dir "^2.0.0"
- pkg-dir "^3.0.0"
-
-find-up@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
- integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
- dependencies:
- locate-path "^3.0.0"
-
-find-up@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
- integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
- dependencies:
- locate-path "^5.0.0"
- path-exists "^4.0.0"
-
-find-up@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
- integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
- dependencies:
- locate-path "^6.0.0"
- path-exists "^4.0.0"
-
-flow-parser@0.*:
- version "0.191.0"
- resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.191.0.tgz#0fe7eb4be505f443c067c47f795153bf3b87c7d7"
- integrity sha512-/5Gv9zY+Mg58ubzzwNz4I29uYHDpBFR5F5ohyVsb+SxW2R8S4s1qCBRtgiTAsujsC6qmQlrsOn2DBlK4m7SQTQ==
-
-flow-parser@^0.121.0:
- version "0.121.0"
- resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.121.0.tgz#9f9898eaec91a9f7c323e9e992d81ab5c58e618f"
- integrity sha512-1gIBiWJNR0tKUNv8gZuk7l9rVX06OuLzY9AoGio7y/JT4V1IZErEMEq2TJS+PFcw/y0RshZ1J/27VfK1UQzYVg==
-
-for-in@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
- integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==
-
-fragment-cache@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
- integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==
- dependencies:
- map-cache "^0.2.2"
-
-fresh@0.5.2:
- version "0.5.2"
- resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
- integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
-
-fs-extra@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950"
- integrity sha512-VerQV6vEKuhDWD2HGOybV6v5I73syoc/cXAbKlgTC7M/oFVEtklWlp9QH2Ijw3IaWDOQcMkldSPa7zXy79Z/UQ==
- dependencies:
- graceful-fs "^4.1.2"
- jsonfile "^2.1.0"
- klaw "^1.0.0"
-
-fs-extra@^8.1.0:
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
- integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
- dependencies:
- graceful-fs "^4.2.0"
- jsonfile "^4.0.0"
- universalify "^0.1.0"
-
-fs.realpath@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
- integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
-
-fsevents@^2.1.2:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
- integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
-
-function-bind@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
- integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
-
-gensync@^1.0.0-beta.2:
- version "1.0.0-beta.2"
- resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
- integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
-
-get-caller-file@^2.0.1:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
- integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
-
-get-stream@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
- integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
- dependencies:
- pump "^3.0.0"
-
-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"
- integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==
-
-glob@^7.1.3, glob@^7.1.6:
- version "7.2.3"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
- integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.1.1"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-globals@^11.1.0:
- version "11.12.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
- integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
-
-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.10"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
- integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
-
-has-flag@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
- integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
-
-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-value@^0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
- integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==
- dependencies:
- get-value "^2.0.3"
- has-values "^0.1.4"
- isobject "^2.0.0"
-
-has-value@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
- integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==
- dependencies:
- get-value "^2.0.6"
- has-values "^1.0.0"
- isobject "^3.0.0"
-
-has-values@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
- integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==
-
-has-values@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
- integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==
- dependencies:
- is-number "^3.0.0"
- kind-of "^4.0.0"
-
-has@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
- integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
- dependencies:
- function-bind "^1.1.1"
-
-hermes-estree@0.8.0:
- version "0.8.0"
- resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.8.0.tgz#530be27243ca49f008381c1f3e8b18fb26bf9ec0"
- integrity sha512-W6JDAOLZ5pMPMjEiQGLCXSSV7pIBEgRR5zGkxgmzGSXHOxqV5dC/M1Zevqpbm9TZDE5tu358qZf8Vkzmsc+u7Q==
-
-hermes-parser@0.8.0:
- version "0.8.0"
- resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.8.0.tgz#116dceaba32e45b16d6aefb5c4c830eaeba2d257"
- integrity sha512-yZKalg1fTYG5eOiToLUaw69rQfZq/fi+/NtEXRU7N87K/XobNRhRWorh80oSge2lWUiZfTgUvRJH+XgZWrhoqA==
- dependencies:
- hermes-estree "0.8.0"
-
-hermes-profile-transformer@^0.0.6:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz#bd0f5ecceda80dd0ddaae443469ab26fb38fc27b"
- integrity sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==
- dependencies:
- source-map "^0.7.3"
-
-http-errors@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
- integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
- dependencies:
- depd "2.0.0"
- inherits "2.0.4"
- setprototypeof "1.2.0"
- statuses "2.0.1"
- toidentifier "1.0.1"
-
-ieee754@^1.1.13:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
- integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
-
-image-size@^0.6.0:
- version "0.6.3"
- resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.6.3.tgz#e7e5c65bb534bd7cdcedd6cb5166272a85f75fb2"
- integrity sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA==
-
-import-fresh@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
- integrity sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==
- dependencies:
- caller-path "^2.0.0"
- resolve-from "^3.0.0"
-
-imurmurhash@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
- integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
-
-inflight@^1.0.4:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
- integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
- dependencies:
- once "^1.3.0"
- wrappy "1"
-
-inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
- integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-
-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==
- dependencies:
- loose-envify "^1.0.0"
-
-ip@^1.1.5:
- version "1.1.8"
- resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48"
- integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==
-
-is-accessor-descriptor@^0.1.6:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
- integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==
- dependencies:
- kind-of "^3.0.2"
-
-is-accessor-descriptor@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
- integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
- dependencies:
- kind-of "^6.0.0"
-
-is-arrayish@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
- integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
-
-is-arrayish@^0.3.1:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
- integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
-
-is-buffer@^1.1.5:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
- integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
-
-is-core-module@^2.9.0:
- version "2.11.0"
- resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144"
- integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==
- 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"
- integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==
- dependencies:
- kind-of "^3.0.2"
-
-is-data-descriptor@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
- integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
- dependencies:
- kind-of "^6.0.0"
-
-is-descriptor@^0.1.0:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
- integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
- dependencies:
- is-accessor-descriptor "^0.1.6"
- is-data-descriptor "^0.1.4"
- kind-of "^5.0.0"
-
-is-descriptor@^1.0.0, is-descriptor@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
- integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
- dependencies:
- is-accessor-descriptor "^1.0.0"
- is-data-descriptor "^1.0.0"
- kind-of "^6.0.2"
-
-is-directory@^0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
- integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==
-
-is-extendable@^0.1.0, is-extendable@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
- integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==
-
-is-extendable@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
- integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
- dependencies:
- is-plain-object "^2.0.4"
-
-is-fullwidth-code-point@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
- integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==
-
-is-fullwidth-code-point@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
- integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
-
-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-number@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
- integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==
- dependencies:
- kind-of "^3.0.2"
-
-is-number@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
- integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
-
-is-plain-object@^2.0.3, is-plain-object@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
- integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
- dependencies:
- isobject "^3.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"
- integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==
-
-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-windows@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
- integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
-
-is-wsl@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
- integrity sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==
-
-isarray@1.0.0, isarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
- integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
-
-isexe@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
- integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
-
-isobject@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
- integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==
- dependencies:
- isarray "1.0.0"
-
-isobject@^3.0.0, isobject@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
- integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
-
-jest-get-type@^26.3.0:
- version "26.3.0"
- resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0"
- integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==
-
-jest-regex-util@^27.0.6:
- 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-serializer@^27.0.6:
- 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-util@^27.2.0:
- 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@^26.5.2:
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec"
- integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==
- dependencies:
- "@jest/types" "^26.6.2"
- camelcase "^6.0.0"
- chalk "^4.0.0"
- jest-get-type "^26.3.0"
- leven "^3.1.0"
- pretty-format "^26.6.2"
-
-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"
-
-joi@^17.2.1:
- version "17.6.4"
- resolved "https://registry.yarnpkg.com/joi/-/joi-17.6.4.tgz#4d9536a059ef0762c718ae98673016b3ec151abd"
- integrity sha512-tPzkTJHZQjSFCc842QpdVpOZ9LI2txApboNUbW70qgnRB14Lzl+oWQOPdF2N4yqyiY14wBGe8lc7f/2hZxbGmw==
- dependencies:
- "@hapi/hoek" "^9.0.0"
- "@hapi/topo" "^5.0.0"
- "@sideway/address" "^4.1.3"
- "@sideway/formula" "^3.0.0"
- "@sideway/pinpoint" "^2.0.0"
-
-"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
- integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
-
-js-yaml@^3.13.1:
- version "3.14.1"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
- integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
- dependencies:
- argparse "^1.0.7"
- esprima "^4.0.0"
-
-jsc-android@^250230.2.1:
- version "250230.2.1"
- resolved "https://registry.yarnpkg.com/jsc-android/-/jsc-android-250230.2.1.tgz#3790313a970586a03ab0ad47defbc84df54f1b83"
- integrity sha512-KmxeBlRjwoqCnBBKGsihFtvsBHyUFlBxJPK4FzeYcIuBfdjv6jFys44JITAgSTbQD+vIdwMEfyZklsuQX0yI1Q==
-
-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"
- 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.4"
- temp "^0.8.4"
- write-file-atomic "^2.3.0"
-
-jsesc@^2.5.1:
- version "2.5.2"
- resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
- integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
-
-jsesc@~0.5.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
- integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==
-
-json-parse-better-errors@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
- integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
-
-json5@^0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
- integrity sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==
-
-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"
- integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==
- optionalDependencies:
- graceful-fs "^4.1.6"
-
-jsonfile@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
- integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==
- optionalDependencies:
- graceful-fs "^4.1.6"
-
-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"
- integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==
- dependencies:
- is-buffer "^1.1.5"
-
-kind-of@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
- integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==
- dependencies:
- is-buffer "^1.1.5"
-
-kind-of@^5.0.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
- integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
-
-kind-of@^6.0.0, kind-of@^6.0.2:
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
- integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
-
-klaw@^1.0.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
- integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==
- optionalDependencies:
- graceful-fs "^4.1.9"
-
-kleur@^3.0.3:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
- integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
-
-leven@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
- integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
-
-locate-path@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
- integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
- dependencies:
- p-locate "^3.0.0"
- path-exists "^3.0.0"
-
-locate-path@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
- integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
- dependencies:
- p-locate "^4.1.0"
-
-locate-path@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
- integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
- dependencies:
- p-locate "^5.0.0"
-
-lodash.debounce@^4.0.8:
- version "4.0.8"
- resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
- integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
-
-lodash.throttle@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
- integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==
-
-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"
- integrity sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==
- dependencies:
- ansi-fragments "^0.2.1"
- dayjs "^1.8.15"
- yargs "^15.1.0"
-
-loose-envify@^1.0.0, loose-envify@^1.1.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
- integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
- dependencies:
- js-tokens "^3.0.0 || ^4.0.0"
-
-make-dir@^2.0.0, make-dir@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
- integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
- dependencies:
- pify "^4.0.1"
- semver "^5.6.0"
-
-makeerror@1.0.12:
- version "1.0.12"
- resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a"
- integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==
- dependencies:
- tmpl "1.0.5"
-
-map-cache@^0.2.2:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
- integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==
-
-map-visit@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
- integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==
- 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.72.3:
- version "0.72.3"
- resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.72.3.tgz#2c60493a4eb7a8d20cc059f05e0e505dc1684d01"
- integrity sha512-PTOR2zww0vJbWeeM3qN90WKENxCLzv9xrwWaNtwVlhcV8/diNdNe82sE1xIxLFI6OQuAVwNMv1Y7VsO2I7Ejrw==
- dependencies:
- "@babel/core" "^7.14.0"
- hermes-parser "0.8.0"
- metro-source-map "0.72.3"
- nullthrows "^1.1.1"
-
-metro-cache-key@0.72.3:
- version "0.72.3"
- resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.72.3.tgz#dcc3055b6cb7e35b84b4fe736a148affb4ecc718"
- integrity sha512-kQzmF5s3qMlzqkQcDwDxrOaVxJ2Bh6WRXWdzPnnhsq9LcD3B3cYqQbRBS+3tSuXmathb4gsOdhWslOuIsYS8Rg==
-
-metro-cache@0.72.3:
- version "0.72.3"
- resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.72.3.tgz#fd079f90b12a81dd5f1567c607c13b14ae282690"
- integrity sha512-++eyZzwkXvijWRV3CkDbueaXXGlVzH9GA52QWqTgAOgSHYp5jWaDwLQ8qpsMkQzpwSyIF4LLK9aI3eA7Xa132A==
- dependencies:
- metro-core "0.72.3"
- rimraf "^2.5.4"
-
-metro-config@0.72.3:
- version "0.72.3"
- resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.72.3.tgz#c2f1a89537c79cec516b1229aa0550dfa769e2ee"
- integrity sha512-VEsAIVDkrIhgCByq8HKTWMBjJG6RlYwWSu1Gnv3PpHa0IyTjKJtB7wC02rbTjSaemcr82scldf2R+h6ygMEvsw==
- dependencies:
- cosmiconfig "^5.0.5"
- jest-validate "^26.5.2"
- metro "0.72.3"
- metro-cache "0.72.3"
- metro-core "0.72.3"
- metro-runtime "0.72.3"
-
-metro-core@0.72.3:
- version "0.72.3"
- resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.72.3.tgz#e3a276d54ecc8fe667127347a1bfd3f8c0009ccb"
- integrity sha512-KuYWBMmLB4+LxSMcZ1dmWabVExNCjZe3KysgoECAIV+wyIc2r4xANq15GhS94xYvX1+RqZrxU1pa0jQ5OK+/6A==
- dependencies:
- lodash.throttle "^4.1.1"
- metro-resolver "0.72.3"
-
-metro-file-map@0.72.3:
- version "0.72.3"
- resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.72.3.tgz#94f6d4969480aa7f47cfe2c5f365ad4e85051f12"
- integrity sha512-LhuRnuZ2i2uxkpFsz1XCDIQSixxBkBG7oICAFyLyEMDGbcfeY6/NexphfLdJLTghkaoJR5ARFMiIxUg9fIY/pA==
- dependencies:
- abort-controller "^3.0.0"
- anymatch "^3.0.3"
- debug "^2.2.0"
- fb-watchman "^2.0.0"
- graceful-fs "^4.2.4"
- invariant "^2.2.4"
- jest-regex-util "^27.0.6"
- jest-serializer "^27.0.6"
- jest-util "^27.2.0"
- jest-worker "^27.2.0"
- micromatch "^4.0.4"
- walker "^1.0.7"
- optionalDependencies:
- fsevents "^2.1.2"
-
-metro-hermes-compiler@0.72.3:
- version "0.72.3"
- resolved "https://registry.yarnpkg.com/metro-hermes-compiler/-/metro-hermes-compiler-0.72.3.tgz#e9ab4d25419eedcc72c73842c8da681a4a7e691e"
- integrity sha512-QWDQASMiXNW3j8uIQbzIzCdGYv5PpAX/ZiF4/lTWqKRWuhlkP4auhVY4eqdAKj5syPx45ggpjkVE0p8hAPDZYg==
-
-metro-inspector-proxy@0.72.3:
- version "0.72.3"
- resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.72.3.tgz#8d7ff4240fc414af5b72d86dac2485647fc3cf09"
- integrity sha512-UPFkaq2k93RaOi+eqqt7UUmqy2ywCkuxJLasQ55+xavTUS+TQSyeTnTczaYn+YKw+izLTLllGcvqnQcZiWYhGw==
- dependencies:
- connect "^3.6.5"
- debug "^2.2.0"
- ws "^7.5.1"
- yargs "^15.3.1"
-
-metro-minify-uglify@0.72.3:
- version "0.72.3"
- resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.72.3.tgz#a9d4cd27933b29cfe95d8406b40d185567a93d39"
- integrity sha512-dPXqtMI8TQcj0g7ZrdhC8X3mx3m3rtjtMuHKGIiEXH9CMBvrET8IwrgujQw2rkPcXiSiX8vFDbGMIlfxefDsKA==
- dependencies:
- uglify-es "^3.1.9"
-
-metro-react-native-babel-preset@0.72.3:
- version "0.72.3"
- resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.72.3.tgz#e549199fa310fef34364fdf19bd210afd0c89432"
- integrity sha512-uJx9y/1NIqoYTp6ZW1osJ7U5ZrXGAJbOQ/Qzl05BdGYvN1S7Qmbzid6xOirgK0EIT0pJKEEh1s8qbassYZe4cw==
- 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"
- "@babel/plugin-proposal-object-rest-spread" "^7.0.0"
- "@babel/plugin-proposal-optional-catch-binding" "^7.0.0"
- "@babel/plugin-proposal-optional-chaining" "^7.0.0"
- "@babel/plugin-syntax-dynamic-import" "^7.0.0"
- "@babel/plugin-syntax-export-default-from" "^7.0.0"
- "@babel/plugin-syntax-flow" "^7.2.0"
- "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0"
- "@babel/plugin-syntax-optional-chaining" "^7.0.0"
- "@babel/plugin-transform-arrow-functions" "^7.0.0"
- "@babel/plugin-transform-async-to-generator" "^7.0.0"
- "@babel/plugin-transform-block-scoping" "^7.0.0"
- "@babel/plugin-transform-classes" "^7.0.0"
- "@babel/plugin-transform-computed-properties" "^7.0.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-function-name" "^7.0.0"
- "@babel/plugin-transform-literals" "^7.0.0"
- "@babel/plugin-transform-modules-commonjs" "^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-runtime" "^7.0.0"
- "@babel/plugin-transform-shorthand-properties" "^7.0.0"
- "@babel/plugin-transform-spread" "^7.0.0"
- "@babel/plugin-transform-sticky-regex" "^7.0.0"
- "@babel/plugin-transform-template-literals" "^7.0.0"
- "@babel/plugin-transform-typescript" "^7.5.0"
- "@babel/plugin-transform-unicode-regex" "^7.0.0"
- "@babel/template" "^7.0.0"
- react-refresh "^0.4.0"
-
-metro-react-native-babel-transformer@0.72.3:
- version "0.72.3"
- resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.72.3.tgz#f8eda8c07c0082cbdbef47a3293edc41587c6b5a"
- integrity sha512-Ogst/M6ujYrl/+9mpEWqE3zF7l2mTuftDTy3L8wZYwX1pWUQWQpfU1aJBeWiLxt1XlIq+uriRjKzKoRoIK57EA==
- dependencies:
- "@babel/core" "^7.14.0"
- babel-preset-fbjs "^3.4.0"
- hermes-parser "0.8.0"
- metro-babel-transformer "0.72.3"
- metro-react-native-babel-preset "0.72.3"
- metro-source-map "0.72.3"
- nullthrows "^1.1.1"
-
-metro-resolver@0.72.3:
- version "0.72.3"
- resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.72.3.tgz#c64ce160454ac850a15431509f54a587cb006540"
- integrity sha512-wu9zSMGdxpKmfECE7FtCdpfC+vrWGTdVr57lDA0piKhZV6VN6acZIvqQ1yZKtS2WfKsngncv5VbB8Y5eHRQP3w==
- dependencies:
- absolute-path "^0.0.0"
-
-metro-runtime@0.72.3:
- version "0.72.3"
- resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.72.3.tgz#1485ed7b5f06d09ebb40c83efcf8accc8d30b8b9"
- integrity sha512-3MhvDKfxMg2u7dmTdpFOfdR71NgNNo4tzAyJumDVQKwnHYHN44f2QFZQqpPBEmqhWlojNeOxsqFsjYgeyMx6VA==
- dependencies:
- "@babel/runtime" "^7.0.0"
- react-refresh "^0.4.0"
-
-metro-source-map@0.72.3:
- version "0.72.3"
- resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.72.3.tgz#5efcf354413804a62ff97864e797f60ef3cc689e"
- integrity sha512-eNtpjbjxSheXu/jYCIDrbNEKzMGOvYW6/ePYpRM7gDdEagUOqKOCsi3St8NJIQJzZCsxD2JZ2pYOiomUSkT1yQ==
- dependencies:
- "@babel/traverse" "^7.14.0"
- "@babel/types" "^7.0.0"
- invariant "^2.2.4"
- metro-symbolicate "0.72.3"
- nullthrows "^1.1.1"
- ob1 "0.72.3"
- source-map "^0.5.6"
- vlq "^1.0.0"
-
-metro-symbolicate@0.72.3:
- version "0.72.3"
- resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.72.3.tgz#093d4f8c7957bcad9ca2ab2047caa90b1ee1b0c1"
- integrity sha512-eXG0NX2PJzJ/jTG4q5yyYeN2dr1cUqUaY7worBB0SP5bRWRc3besfb+rXwfh49wTFiL5qR0oOawkU4ZiD4eHXw==
- dependencies:
- invariant "^2.2.4"
- metro-source-map "0.72.3"
- nullthrows "^1.1.1"
- source-map "^0.5.6"
- through2 "^2.0.1"
- vlq "^1.0.0"
-
-metro-transform-plugins@0.72.3:
- version "0.72.3"
- resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.72.3.tgz#b00e5a9f24bff7434ea7a8e9108eebc8386b9ee4"
- integrity sha512-D+TcUvCKZbRua1+qujE0wV1onZvslW6cVTs7dLCyC2pv20lNHjFr1GtW01jN2fyKR2PcRyMjDCppFd9VwDKnSg==
- dependencies:
- "@babel/core" "^7.14.0"
- "@babel/generator" "^7.14.0"
- "@babel/template" "^7.0.0"
- "@babel/traverse" "^7.14.0"
- nullthrows "^1.1.1"
-
-metro-transform-worker@0.72.3:
- version "0.72.3"
- resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.72.3.tgz#bdc6cc708ea114bc085e11d675b8ff626d7e6db7"
- integrity sha512-WsuWj9H7i6cHuJuy+BgbWht9DK5FOgJxHLGAyULD5FJdTG9rSMFaHDO5WfC0OwQU5h4w6cPT40iDuEGksM7+YQ==
- 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.72.3"
- metro-babel-transformer "0.72.3"
- metro-cache "0.72.3"
- metro-cache-key "0.72.3"
- metro-hermes-compiler "0.72.3"
- metro-source-map "0.72.3"
- metro-transform-plugins "0.72.3"
- nullthrows "^1.1.1"
-
-metro@0.72.3:
- version "0.72.3"
- resolved "https://registry.yarnpkg.com/metro/-/metro-0.72.3.tgz#eb587037d62f48a0c33c8d88f26666b4083bb61e"
- integrity sha512-Hb3xTvPqex8kJ1hutQNZhQadUKUwmns/Du9GikmWKBFrkiG3k3xstGAyO5t5rN9JSUEzQT6y9SWzSSOGogUKIg==
- dependencies:
- "@babel/code-frame" "^7.0.0"
- "@babel/core" "^7.14.0"
- "@babel/generator" "^7.14.0"
- "@babel/parser" "^7.14.0"
- "@babel/template" "^7.0.0"
- "@babel/traverse" "^7.14.0"
- "@babel/types" "^7.0.0"
- absolute-path "^0.0.0"
- accepts "^1.3.7"
- async "^3.2.2"
- chalk "^4.0.0"
- ci-info "^2.0.0"
- connect "^3.6.5"
- debug "^2.2.0"
- denodeify "^1.2.1"
- error-stack-parser "^2.0.6"
- fs-extra "^1.0.0"
- graceful-fs "^4.2.4"
- hermes-parser "0.8.0"
- image-size "^0.6.0"
- invariant "^2.2.4"
- jest-worker "^27.2.0"
- lodash.throttle "^4.1.1"
- metro-babel-transformer "0.72.3"
- metro-cache "0.72.3"
- metro-cache-key "0.72.3"
- metro-config "0.72.3"
- metro-core "0.72.3"
- metro-file-map "0.72.3"
- metro-hermes-compiler "0.72.3"
- metro-inspector-proxy "0.72.3"
- metro-minify-uglify "0.72.3"
- metro-react-native-babel-preset "0.72.3"
- metro-resolver "0.72.3"
- metro-runtime "0.72.3"
- metro-source-map "0.72.3"
- metro-symbolicate "0.72.3"
- metro-transform-plugins "0.72.3"
- metro-transform-worker "0.72.3"
- mime-types "^2.1.27"
- node-fetch "^2.2.0"
- nullthrows "^1.1.1"
- rimraf "^2.5.4"
- serialize-error "^2.1.0"
- source-map "^0.5.6"
- strip-ansi "^6.0.0"
- temp "0.8.3"
- throat "^5.0.0"
- ws "^7.5.1"
- yargs "^15.3.1"
-
-micromatch@^3.1.10:
- version "3.1.10"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
- integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
- dependencies:
- arr-diff "^4.0.0"
- array-unique "^0.3.2"
- braces "^2.3.1"
- define-property "^2.0.2"
- extend-shallow "^3.0.2"
- extglob "^2.0.4"
- fragment-cache "^0.2.1"
- kind-of "^6.0.2"
- nanomatch "^1.2.9"
- object.pick "^1.3.0"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.2"
-
-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"
-
-mime-db@1.52.0, "mime-db@>= 1.43.0 < 2":
- version "1.52.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
- integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
-
-mime-types@^2.1.27, mime-types@~2.1.34:
- version "2.1.35"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
- integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
- dependencies:
- mime-db "1.52.0"
-
-mime@1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
- integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
-
-mime@^2.4.1:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367"
- integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==
-
-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.1.1:
- 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.2.6:
- version "1.2.7"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18"
- integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==
-
-mixin-deep@^1.2.0:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
- integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
- dependencies:
- for-in "^1.0.2"
- is-extendable "^1.0.1"
-
-mkdirp@^0.5.1:
- 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.6"
-
-ms@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
- integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
-
-ms@2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
- integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
-
-ms@2.1.3:
- version "2.1.3"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
- integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
-
-nanoid@^3.1.23:
- version "3.3.4"
- resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
- integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
-
-nanomatch@^1.2.9:
- version "1.2.13"
- resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
- integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
- dependencies:
- arr-diff "^4.0.0"
- array-unique "^0.3.2"
- define-property "^2.0.2"
- extend-shallow "^3.0.2"
- fragment-cache "^0.2.1"
- is-windows "^1.0.2"
- kind-of "^6.0.2"
- object.pick "^1.3.0"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.1"
-
-negotiator@0.6.3:
- version "0.6.3"
- resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
- integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
-
-neo-async@^2.5.0:
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
- integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
-
-nice-try@^1.0.4:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
- integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
-
-nocache@^3.0.1:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/nocache/-/nocache-3.0.4.tgz#5b37a56ec6e09fc7d401dceaed2eab40c8bfdf79"
- integrity sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==
-
-node-dir@^0.1.17:
- version "0.1.17"
- resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5"
- integrity sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==
- dependencies:
- minimatch "^3.0.2"
-
-node-fetch@^2.2.0, node-fetch@^2.6.0:
- version "2.6.7"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
- integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
- dependencies:
- whatwg-url "^5.0.0"
-
-node-int64@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
- integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==
-
-node-releases@^2.0.6:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503"
- integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==
-
-node-stream-zip@^1.9.1:
- version "1.15.0"
- resolved "https://registry.yarnpkg.com/node-stream-zip/-/node-stream-zip-1.15.0.tgz#158adb88ed8004c6c49a396b50a6a5de3bca33ea"
- integrity sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==
-
-normalize-path@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
- integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
-
-npm-run-path@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
- integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==
- dependencies:
- path-key "^2.0.0"
-
-nullthrows@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1"
- integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==
-
-ob1@0.72.3:
- version "0.72.3"
- resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.72.3.tgz#fc1efcfe156f12ed23615f2465a796faad8b91e4"
- integrity sha512-OnVto25Sj7Ghp0vVm2THsngdze3tVq0LOg9LUHsAVXMecpqOP0Y8zaATW8M9gEgs2lNEAcCqV0P/hlmOPhVRvg==
-
-object-assign@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
- integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
-
-object-copy@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
- integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==
- dependencies:
- copy-descriptor "^0.1.0"
- define-property "^0.2.5"
- kind-of "^3.0.3"
-
-object-visit@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
- integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==
- dependencies:
- isobject "^3.0.0"
-
-object.pick@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
- integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==
- dependencies:
- isobject "^3.0.1"
-
-on-finished@2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"
- integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
- dependencies:
- ee-first "1.1.1"
-
-on-finished@~2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
- integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==
- dependencies:
- ee-first "1.1.1"
-
-on-headers@~1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
- integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
-
-once@^1.3.0, once@^1.3.1, once@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
- integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
- dependencies:
- wrappy "1"
-
-onetime@^5.1.0:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
- integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
- dependencies:
- mimic-fn "^2.1.0"
-
-open@^6.2.0:
- version "6.4.0"
- resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9"
- integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==
- dependencies:
- is-wsl "^1.1.0"
-
-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-tmpdir@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
- integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==
-
-p-finally@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
- integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==
-
-p-limit@^2.0.0, p-limit@^2.2.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
- integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
- dependencies:
- p-try "^2.0.0"
-
-p-limit@^3.0.2:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
- integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
- dependencies:
- yocto-queue "^0.1.0"
-
-p-locate@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
- integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
- dependencies:
- p-limit "^2.0.0"
-
-p-locate@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
- integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
- dependencies:
- p-limit "^2.2.0"
-
-p-locate@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
- integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
- dependencies:
- p-limit "^3.0.2"
-
-p-try@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
- integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
-
-parse-json@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
- integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==
- dependencies:
- error-ex "^1.3.1"
- json-parse-better-errors "^1.0.1"
-
-parseurl@~1.3.3:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
- integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
-
-pascalcase@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
- integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==
-
-path-exists@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
- integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==
-
-path-exists@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
- integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
-
-path-is-absolute@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
- integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
-
-path-key@^2.0.0, path-key@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
- integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==
-
-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==
-
-picocolors@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
- integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
-
-picomatch@^2.0.4, 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@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
- integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
-
-pirates@^4.0.5:
- version "4.0.5"
- resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b"
- integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==
-
-pkg-dir@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
- integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
- dependencies:
- find-up "^3.0.0"
-
-pkg-up@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5"
- integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==
- dependencies:
- find-up "^3.0.0"
-
-posix-character-classes@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
- integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==
-
-pretty-format@^26.5.2, pretty-format@^26.6.2:
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93"
- integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==
- dependencies:
- "@jest/types" "^26.6.2"
- ansi-regex "^5.0.0"
- ansi-styles "^4.0.0"
- react-is "^17.0.1"
-
-process-nextick-args@~2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
- integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
-
-promise@^8.0.3:
- version "8.3.0"
- resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a"
- integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==
- dependencies:
- asap "~2.0.6"
-
-prompts@^2.4.0:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
- integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==
- dependencies:
- kleur "^3.0.3"
- sisteransi "^1.0.5"
-
-pump@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
- integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
- dependencies:
- end-of-stream "^1.1.0"
- once "^1.3.1"
-
-query-string@^7.1.3:
- version "7.1.3"
- resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.1.3.tgz#a1cf90e994abb113a325804a972d98276fe02328"
- integrity sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==
- dependencies:
- decode-uri-component "^0.2.2"
- filter-obj "^1.1.0"
- split-on-first "^1.0.0"
- strict-uri-encode "^2.0.0"
-
-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.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"
-
-react-freeze@^1.0.0:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/react-freeze/-/react-freeze-1.0.3.tgz#5e3ca90e682fed1d73a7cb50c2c7402b3e85618d"
- integrity sha512-ZnXwLQnGzrDpHBHiC56TXFXvmolPeMjTn1UOm610M4EXGzbEDR7oOIyS2ZiItgbs6eZc4oU/a0hpk8PrcKvv5g==
-
-"react-is@^16.12.0 || ^17.0.0 || ^18.0.0":
- version "18.2.0"
- resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
- integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
-
-react-is@^16.13.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-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-native-codegen@^0.70.6:
- version "0.70.6"
- resolved "https://registry.yarnpkg.com/react-native-codegen/-/react-native-codegen-0.70.6.tgz#2ce17d1faad02ad4562345f8ee7cbe6397eda5cb"
- integrity sha512-kdwIhH2hi+cFnG5Nb8Ji2JwmcCxnaOOo9440ov7XDzSvGfmUStnCzl+MCW8jLjqHcE4icT7N9y+xx4f50vfBTw==
- dependencies:
- "@babel/parser" "^7.14.0"
- flow-parser "^0.121.0"
- jscodeshift "^0.13.1"
- nullthrows "^1.1.1"
-
-react-native-gradle-plugin@^0.70.3:
- version "0.70.3"
- resolved "https://registry.yarnpkg.com/react-native-gradle-plugin/-/react-native-gradle-plugin-0.70.3.tgz#cbcf0619cbfbddaa9128701aa2d7b4145f9c4fc8"
- integrity sha512-oOanj84fJEXUg9FoEAQomA8ISG+DVIrTZ3qF7m69VQUJyOGYyDZmPqKcjvRku4KXlEH6hWO9i4ACLzNBh8gC0A==
-
-react-native-safe-area-context@^4.5.0:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-4.5.0.tgz#9208313236e8f49e1920ac1e2a2c975f03aed284"
- integrity sha512-0WORnk9SkREGUg2V7jHZbuN5x4vcxj/1B0QOcXJjdYWrzZHgLcUzYWWIUecUPJh747Mwjt/42RZDOaFn3L8kPQ==
-
-react-native-screens@^3.19.0:
- version "3.19.0"
- resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-3.19.0.tgz#ec68685e04b074ebce4641b3a0ae7e2571629b75"
- integrity sha512-Ehsmy7jr3H3j5pmN+/FqsAaIAD+k+xkcdePfLcg4rYRbN5X7fJPgaqhcmiCcZ0YxsU8ttsstP9IvRLNQuIkRRA==
- dependencies:
- react-freeze "^1.0.0"
- warn-once "^0.1.0"
-
-react-native@0.70.4:
- version "0.70.4"
- resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.70.4.tgz#f2a3a7996431a47a45ce1f5097352c5721417516"
- integrity sha512-1e4jWotS20AJ/4lGVkZQs2wE0PvCpIRmPQEQ1FyH7wdyuewFFIxbUHqy6vAj1JWVFfAzbDakOQofrIkkHWLqNA==
- dependencies:
- "@jest/create-cache-key-function" "^29.0.3"
- "@react-native-community/cli" "9.2.1"
- "@react-native-community/cli-platform-android" "9.2.1"
- "@react-native-community/cli-platform-ios" "9.2.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"
- event-target-shim "^5.0.1"
- invariant "^2.2.4"
- jsc-android "^250230.2.1"
- memoize-one "^5.0.0"
- metro-react-native-babel-transformer "0.72.3"
- metro-runtime "0.72.3"
- metro-source-map "0.72.3"
- mkdirp "^0.5.1"
- nullthrows "^1.1.1"
- pretty-format "^26.5.2"
- promise "^8.0.3"
- react-devtools-core "4.24.0"
- react-native-codegen "^0.70.6"
- react-native-gradle-plugin "^0.70.3"
- react-refresh "^0.4.0"
- react-shallow-renderer "^16.15.0"
- regenerator-runtime "^0.13.2"
- scheduler "^0.22.0"
- stacktrace-parser "^0.1.3"
- use-sync-external-store "^1.0.0"
- whatwg-fetch "^3.0.0"
- ws "^6.1.4"
-
-react-refresh@^0.4.0:
- version "0.4.3"
- 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.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 "^16.12.0 || ^17.0.0 || ^18.0.0"
-
-react@18.1.0:
- version "18.1.0"
- resolved "https://registry.yarnpkg.com/react/-/react-18.1.0.tgz#6f8620382decb17fdc5cc223a115e2adbf104890"
- integrity sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==
- dependencies:
- loose-envify "^1.1.0"
-
-readable-stream@^3.4.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==
- dependencies:
- inherits "^2.0.3"
- string_decoder "^1.1.1"
- util-deprecate "^1.0.1"
-
-readable-stream@~2.3.6:
- version "2.3.7"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
- integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.3"
- isarray "~1.0.0"
- process-nextick-args "~2.0.0"
- safe-buffer "~5.1.1"
- string_decoder "~1.1.1"
- util-deprecate "~1.0.1"
-
-readline@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/readline/-/readline-1.3.0.tgz#c580d77ef2cfc8752b132498060dc9793a7ac01c"
- integrity sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==
-
-recast@^0.20.4:
- version "0.20.5"
- resolved "https://registry.yarnpkg.com/recast/-/recast-0.20.5.tgz#8e2c6c96827a1b339c634dd232957d230553ceae"
- integrity sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==
- dependencies:
- ast-types "0.14.2"
- esprima "~4.0.0"
- source-map "~0.6.1"
- tslib "^2.0.1"
-
-regenerate-unicode-properties@^10.1.0:
- version "10.1.0"
- resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c"
- integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==
- dependencies:
- regenerate "^1.4.2"
-
-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==
-
-regenerator-runtime@^0.13.10, regenerator-runtime@^0.13.2:
- version "0.13.10"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz#ed07b19616bcbec5da6274ebc75ae95634bfc2ee"
- integrity sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==
-
-regex-not@^1.0.0, regex-not@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
- integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
- dependencies:
- extend-shallow "^3.0.2"
- safe-regex "^1.1.0"
-
-regexpu-core@^5.1.0:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.2.1.tgz#a69c26f324c1e962e9ffd0b88b055caba8089139"
- integrity sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==
- dependencies:
- regenerate "^1.4.2"
- regenerate-unicode-properties "^10.1.0"
- regjsgen "^0.7.1"
- regjsparser "^0.9.1"
- unicode-match-property-ecmascript "^2.0.0"
- unicode-match-property-value-ecmascript "^2.0.0"
-
-regjsgen@^0.7.1:
- version "0.7.1"
- resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.7.1.tgz#ee5ef30e18d3f09b7c369b76e7c2373ed25546f6"
- integrity sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==
-
-regjsparser@^0.9.1:
- version "0.9.1"
- resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709"
- integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==
- dependencies:
- jsesc "~0.5.0"
-
-repeat-element@^1.1.2:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9"
- integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==
-
-repeat-string@^1.6.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
- integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==
-
-require-directory@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
- integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
-
-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"
- integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
-
-reselect@^4.0.0:
- version "4.1.6"
- resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.6.tgz#19ca2d3d0b35373a74dc1c98692cdaffb6602656"
- integrity sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ==
-
-resolve-from@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
- integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==
-
-resolve-url@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
- integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==
-
-resolve@^1.13.1, resolve@^1.14.2:
- version "1.22.1"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
- integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
- dependencies:
- is-core-module "^2.9.0"
- path-parse "^1.0.7"
- supports-preserve-symlinks-flag "^1.0.0"
-
-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"
- integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
-
-rimraf@^2.5.4:
- version "2.7.1"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
- integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
- dependencies:
- glob "^7.1.3"
-
-rimraf@~2.2.6:
- version "2.2.8"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582"
- integrity sha512-R5KMKHnPAQaZMqLOsyuyUmcIjSeDm+73eoqQpaXA7AZ22BL+6C+1mcUscgOsNd8WVlJuvlgAPsegcx7pjlV0Dg==
-
-rimraf@~2.6.2:
- version "2.6.3"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
- integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
- dependencies:
- glob "^7.1.3"
-
-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"
- integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-
-safe-buffer@~5.2.0:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
- integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
-
-safe-regex@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
- integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==
- dependencies:
- ret "~0.1.10"
-
-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"
-
-semver@^5.5.0, semver@^5.6.0:
- version "5.7.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
- integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
-
-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==
-
-send@0.18.0:
- version "0.18.0"
- resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be"
- integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==
- dependencies:
- debug "2.6.9"
- depd "2.0.0"
- destroy "1.2.0"
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- etag "~1.8.1"
- fresh "0.5.2"
- http-errors "2.0.0"
- mime "1.6.0"
- ms "2.1.3"
- on-finished "2.4.1"
- range-parser "~1.2.1"
- statuses "2.0.1"
-
-serialize-error@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a"
- integrity sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==
-
-serve-static@^1.13.1:
- version "1.15.0"
- resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540"
- integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==
- dependencies:
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- parseurl "~1.3.3"
- send "0.18.0"
-
-set-blocking@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
- integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
-
-set-value@^2.0.0, set-value@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
- integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
- dependencies:
- extend-shallow "^2.0.1"
- is-extendable "^0.1.1"
- is-plain-object "^2.0.3"
- split-string "^3.0.1"
-
-setprototypeof@1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
- integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
-
-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"
- integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==
- dependencies:
- shebang-regex "^1.0.0"
-
-shebang-regex@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
- integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==
-
-shell-quote@^1.6.1, shell-quote@^1.7.3:
- version "1.7.4"
- resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.4.tgz#33fe15dee71ab2a81fcbd3a52106c5cfb9fb75d8"
- integrity sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==
-
-signal-exit@^3.0.0, signal-exit@^3.0.2:
- version "3.0.7"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
- integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
-
-simple-swizzle@^0.2.2:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
- integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==
- dependencies:
- is-arrayish "^0.3.1"
-
-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@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
- integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
-
-slice-ansi@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
- integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
- dependencies:
- ansi-styles "^3.2.0"
- astral-regex "^1.0.0"
- is-fullwidth-code-point "^2.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"
- integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
- dependencies:
- define-property "^1.0.0"
- isobject "^3.0.0"
- snapdragon-util "^3.0.1"
-
-snapdragon-util@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
- integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
- dependencies:
- kind-of "^3.2.0"
-
-snapdragon@^0.8.1:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
- integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
- dependencies:
- base "^0.11.1"
- debug "^2.2.0"
- define-property "^0.2.5"
- extend-shallow "^2.0.1"
- map-cache "^0.2.2"
- source-map "^0.5.6"
- source-map-resolve "^0.5.0"
- use "^3.1.0"
-
-source-map-resolve@^0.5.0:
- version "0.5.3"
- resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
- integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
- dependencies:
- atob "^2.1.2"
- decode-uri-component "^0.2.0"
- resolve-url "^0.2.1"
- source-map-url "^0.4.0"
- urix "^0.1.0"
-
-source-map-support@^0.5.16:
- version "0.5.21"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
- integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
- dependencies:
- buffer-from "^1.0.0"
- source-map "^0.6.0"
-
-source-map-url@^0.4.0:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
- integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
-
-source-map@^0.5.6:
- version "0.5.7"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
- integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
-
-source-map@^0.6.0, source-map@~0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
- integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-
-source-map@^0.7.3:
- version "0.7.4"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656"
- integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==
-
-split-on-first@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f"
- integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==
-
-split-string@^3.0.1, split-string@^3.0.2:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
- integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
- dependencies:
- extend-shallow "^3.0.0"
-
-sprintf-js@~1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
- integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
-
-stackframe@^1.3.4:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310"
- integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==
-
-stacktrace-parser@^0.1.3:
- version "0.1.10"
- resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a"
- integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==
- dependencies:
- type-fest "^0.7.1"
-
-static-extend@^0.1.1:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
- integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==
- dependencies:
- define-property "^0.2.5"
- object-copy "^0.1.0"
-
-statuses@2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
- integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
-
-statuses@~1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
- integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==
-
-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"
- integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==
-
-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==
- dependencies:
- emoji-regex "^8.0.0"
- is-fullwidth-code-point "^3.0.0"
- strip-ansi "^6.0.1"
-
-string_decoder@^1.1.1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
- integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
- dependencies:
- safe-buffer "~5.2.0"
-
-string_decoder@~1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
- integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
- dependencies:
- safe-buffer "~5.1.0"
-
-strip-ansi@^5.0.0, strip-ansi@^5.2.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
- integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
- dependencies:
- ansi-regex "^4.1.0"
-
-strip-ansi@^6.0.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-eof@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
- integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==
-
-sudo-prompt@^9.0.0:
- version "9.2.1"
- resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.2.1.tgz#77efb84309c9ca489527a4e749f287e6bdd52afd"
- integrity sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==
-
-supports-color@^5.3.0:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
- integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
- dependencies:
- has-flag "^3.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==
- 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-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==
-
-temp@0.8.3:
- version "0.8.3"
- resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59"
- integrity sha512-jtnWJs6B1cZlHs9wPG7BrowKxZw/rf6+UpGAkr8AaYmiTyTO7zQlLoST8zx/8TcUPnZmeBoB+H8ARuHZaSijVw==
- dependencies:
- os-tmpdir "^1.0.0"
- rimraf "~2.2.6"
-
-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==
- dependencies:
- rimraf "~2.6.2"
-
-throat@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b"
- integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==
-
-through2@^2.0.1:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
- integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
- dependencies:
- readable-stream "~2.3.6"
- xtend "~4.0.1"
-
-tmpl@1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
- integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==
-
-to-fast-properties@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
- integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
-
-to-object-path@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
- integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==
- dependencies:
- kind-of "^3.0.2"
-
-to-regex-range@^2.1.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
- integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==
- dependencies:
- is-number "^3.0.0"
- repeat-string "^1.6.1"
-
-to-regex-range@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
- integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
- dependencies:
- is-number "^7.0.0"
-
-to-regex@^3.0.1, to-regex@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
- integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
- dependencies:
- define-property "^2.0.2"
- extend-shallow "^3.0.2"
- regex-not "^1.0.2"
- safe-regex "^1.1.0"
-
-toidentifier@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
- integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
-
-tr46@~0.0.3:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
- integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
-
-tslib@^2.0.1:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3"
- integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
-
-type-fest@^0.7.1:
- version "0.7.1"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48"
- integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==
-
-uglify-es@^3.1.9:
- version "3.3.9"
- resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677"
- integrity sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==
- dependencies:
- commander "~2.13.0"
- source-map "~0.6.1"
-
-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@^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@^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@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd"
- integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==
-
-union-value@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
- integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
- dependencies:
- arr-union "^3.1.0"
- get-value "^2.0.6"
- is-extendable "^0.1.1"
- set-value "^2.0.1"
-
-universalify@^0.1.0:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
- integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
-
-unpipe@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
- integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
-
-unset-value@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
- integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==
- dependencies:
- has-value "^0.3.1"
- isobject "^3.0.0"
-
-update-browserslist-db@^1.0.9:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3"
- integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==
- dependencies:
- escalade "^3.1.1"
- picocolors "^1.0.0"
-
-urix@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
- integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==
-
-use-latest-callback@^0.1.5:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/use-latest-callback/-/use-latest-callback-0.1.5.tgz#a4a836c08fa72f6608730b5b8f4bbd9c57c04f51"
- integrity sha512-HtHatS2U4/h32NlkhupDsPlrbiD27gSH5swBdtXbCAlc6pfOFzaj0FehW/FO12rx8j2Vy4/lJScCiJyM01E+bQ==
-
-use-sync-external-store@^1.0.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a"
- integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==
-
-use@^3.1.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
- integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
-
-util-deprecate@^1.0.1, util-deprecate@~1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
- integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
-
-utils-merge@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
- integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
-
-vary@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
- integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
-
-vlq@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468"
- integrity sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==
-
-walker@^1.0.7:
- version "1.0.8"
- resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f"
- integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==
- dependencies:
- makeerror "1.0.12"
-
-warn-once@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/warn-once/-/warn-once-0.1.1.tgz#952088f4fb56896e73fd4e6a3767272a3fccce43"
- integrity sha512-VkQZJbO8zVImzYFteBXvBOZEl1qL175WH8VmZcxF2fZAoudNhNDvHi+doCaAEdU2l2vtcIwa2zn0QK5+I1HQ3Q==
-
-wcwidth@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
- integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==
- dependencies:
- defaults "^1.0.3"
-
-webidl-conversions@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
- integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
-
-whatwg-fetch@^3.0.0:
- version "3.6.2"
- resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c"
- integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==
-
-whatwg-url@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
- integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
- dependencies:
- tr46 "~0.0.3"
- webidl-conversions "^3.0.0"
-
-which-module@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
- integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==
-
-which@^1.2.9:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
- integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
- dependencies:
- isexe "^2.0.0"
-
-wrap-ansi@^6.2.0:
- version "6.2.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
- integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
- dependencies:
- ansi-styles "^4.0.0"
- string-width "^4.1.0"
- strip-ansi "^6.0.0"
-
-wrappy@1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
- integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
-
-write-file-atomic@^2.3.0:
- version "2.4.3"
- resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481"
- integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==
- dependencies:
- graceful-fs "^4.1.11"
- imurmurhash "^0.1.4"
- signal-exit "^3.0.2"
-
-ws@^6.1.4:
- version "6.2.2"
- resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e"
- integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==
- dependencies:
- async-limiter "~1.0.0"
-
-ws@^7, ws@^7.5.1:
- version "7.5.9"
- resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591"
- integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==
-
-xtend@~4.0.1:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
- integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
-
-y18n@^4.0.0:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf"
- integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==
-
-yargs-parser@^18.1.2:
- version "18.1.3"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
- integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
- dependencies:
- camelcase "^5.0.0"
- decamelize "^1.2.0"
-
-yargs@^15.1.0, yargs@^15.3.1:
- version "15.4.1"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
- integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
- dependencies:
- cliui "^6.0.0"
- decamelize "^1.2.0"
- find-up "^4.1.0"
- get-caller-file "^2.0.1"
- require-directory "^2.1.1"
- require-main-filename "^2.0.0"
- set-blocking "^2.0.0"
- string-width "^4.2.0"
- which-module "^2.0.0"
- y18n "^4.0.0"
- yargs-parser "^18.1.2"
-
-yocto-queue@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
- integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
diff --git a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalAnimationConfig.swift b/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalAnimationConfig.swift
deleted file mode 100644
index 56d629b6..00000000
--- a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalAnimationConfig.swift
+++ /dev/null
@@ -1,105 +0,0 @@
-//
-// AdaptiveModalAnimationConfig.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 5/23/23.
-//
-
-import UIKit
-
-public struct AdaptiveModalAnimationConfig {
- public var modalRotation: CGFloat?;
-
- public var modalScaleX: CGFloat?;
- public var modalScaleY: CGFloat?;
-
- public var modalTranslateX: CGFloat?;
- public var modalTranslateY: CGFloat?;
-
- public var modalBorderWidth: CGFloat?;
- public var modalBorderColor: UIColor?;
-
- public var modalShadowColor: UIColor?;
- public var modalShadowOffset: CGSize?;
- public var modalShadowOpacity: CGFloat?;
- public var modalShadowRadius: CGFloat?;
-
- public var modalCornerRadius: CGFloat?;
- public var modalMaskedCorners: CACornerMask?;
-
- public var modalOpacity: CGFloat?;
- public var modalBackgroundColor: UIColor?;
- public var modalBackgroundOpacity: CGFloat?;
-
- public var modalBackgroundVisualEffect: UIVisualEffect?;
- public var modalBackgroundVisualEffectOpacity: CGFloat?;
- public var modalBackgroundVisualEffectIntensity: CGFloat?;
-
- public var backgroundColor: UIColor?;
- public var backgroundOpacity: CGFloat?;
-
- public var backgroundVisualEffect: UIVisualEffect?;
- public var backgroundVisualEffectOpacity: CGFloat?;
- public var backgroundVisualEffectIntensity: CGFloat?;
-
- public init(
- modalRotation: CGFloat? = nil,
- modalScaleX: CGFloat? = nil,
- modalScaleY: CGFloat? = nil,
- modalTranslateX: CGFloat? = nil,
- modalTranslateY: CGFloat? = nil,
- modalBorderWidth: CGFloat? = nil,
- modalBorderColor: UIColor? = nil,
- modalShadowColor: UIColor? = nil,
- modalShadowOffset: CGSize? = nil,
- modalShadowOpacity: CGFloat? = nil,
- modalShadowRadius: CGFloat? = nil,
- modalCornerRadius: CGFloat? = nil,
- modalMaskedCorners: CACornerMask? = nil,
- modalOpacity: CGFloat? = nil,
- modalBackgroundColor: UIColor? = nil,
- modalBackgroundOpacity: CGFloat? = nil,
- modalBackgroundVisualEffect: UIVisualEffect? = nil,
- modalBackgroundVisualEffectOpacity: CGFloat? = nil,
- modalBackgroundVisualEffectIntensity: CGFloat? = nil,
- backgroundColor: UIColor? = nil,
- backgroundOpacity: CGFloat? = nil,
- backgroundVisualEffect: UIVisualEffect? = nil,
- backgroundVisualEffectOpacity: CGFloat? = nil,
- backgroundVisualEffectIntensity: CGFloat? = nil
- ) {
- self.modalRotation = modalRotation;
-
- self.modalScaleX = modalScaleX;
- self.modalScaleY = modalScaleY;
-
- self.modalTranslateX = modalTranslateX;
- self.modalTranslateY = modalTranslateY;
-
- self.modalBorderWidth = modalBorderWidth;
- self.modalBorderColor = modalBorderColor;
-
- self.modalShadowColor = modalShadowColor;
- self.modalShadowOffset = modalShadowOffset;
- self.modalShadowOpacity = modalShadowOpacity;
- self.modalShadowRadius = modalShadowRadius;
-
- self.modalCornerRadius = modalCornerRadius;
- self.modalMaskedCorners = modalMaskedCorners;
-
- self.modalOpacity = modalOpacity;
- self.modalBackgroundColor = modalBackgroundColor;
- self.modalBackgroundOpacity = modalBackgroundOpacity;
-
- self.modalBackgroundVisualEffect = modalBackgroundVisualEffect;
- self.modalBackgroundVisualEffectOpacity = modalBackgroundVisualEffectOpacity;
- self.modalBackgroundVisualEffectIntensity = modalBackgroundVisualEffectIntensity;
-
- self.backgroundColor = backgroundColor;
- self.backgroundOpacity = backgroundOpacity;
-
- self.backgroundVisualEffect = backgroundVisualEffect;
- self.backgroundVisualEffectOpacity = backgroundVisualEffectOpacity;
- self.backgroundVisualEffectIntensity = backgroundVisualEffectIntensity;
- };
-};
diff --git a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalClampingConfig.swift b/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalClampingConfig.swift
deleted file mode 100644
index f7bfdda1..00000000
--- a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalClampingConfig.swift
+++ /dev/null
@@ -1,87 +0,0 @@
-//
-// AdaptiveModalClampingConfig.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 5/28/23.
-//
-
-import Foundation
-
-public struct AdaptiveModalClampingConfig {
- public static let `default`: Self = .init();
-
- public let shouldClampModalInitHeight: Bool;
- public let shouldClampModalLastHeight: Bool;
-
- public let shouldClampModalInitWidth: Bool;
- public let shouldClampModalLastWidth: Bool;
-
- public let shouldClampModalInitX: Bool;
- public let shouldClampModalLastX: Bool;
-
- public let shouldClampModalInitY: Bool;
- public let shouldClampModalLastY: Bool;
-
- public let shouldClampModalInitRotation: Bool;
- public let shouldClampModalLastRotation: Bool;
-
- public let shouldClampModalInitScaleX: Bool;
- public let shouldClampModalLastScaleX: Bool;
-
- public let shouldClampModalInitScaleY: Bool;
- public let shouldClampModalLastScaleY: Bool;
-
- public let shouldClampModalInitTranslateX: Bool;
- public let shouldClampModalLastTranslateX: Bool;
-
- public let shouldClampModalInitTranslateY: Bool;
- public let shouldClampModalLastTranslateY: Bool;
-
- public init(
- shouldClampModalInitHeight: Bool = false,
- shouldClampModalLastHeight: Bool = false,
- shouldClampModalInitWidth: Bool = false,
- shouldClampModalLastWidth: Bool = false,
- shouldClampModalInitX: Bool = false,
- shouldClampModalLastX: Bool = false,
- shouldClampModalInitY: Bool = false,
- shouldClampModalLastY: Bool = false,
- shouldClampModalInitRotation: Bool = true,
- shouldClampModalLastRotation: Bool = true,
- shouldClampModalInitScaleX: Bool = true,
- shouldClampModalLastScaleX: Bool = true,
- shouldClampModalInitScaleY: Bool = true,
- shouldClampModalLastScaleY: Bool = true,
- shouldClampModalInitTranslateX: Bool = true,
- shouldClampModalLastTranslateX: Bool = true,
- shouldClampModalInitTranslateY: Bool = true,
- shouldClampModalLastTranslateY: Bool = true
- ) {
- self.shouldClampModalInitHeight = shouldClampModalInitHeight;
- self.shouldClampModalLastHeight = shouldClampModalLastHeight;
-
- self.shouldClampModalInitWidth = shouldClampModalInitWidth;
- self.shouldClampModalLastWidth = shouldClampModalLastWidth;
-
- self.shouldClampModalInitX = shouldClampModalInitX;
- self.shouldClampModalLastX = shouldClampModalLastX;
-
- self.shouldClampModalInitY = shouldClampModalInitY;
- self.shouldClampModalLastY = shouldClampModalLastY;
-
- self.shouldClampModalInitRotation = shouldClampModalInitRotation;
- self.shouldClampModalLastRotation = shouldClampModalLastRotation;
-
- self.shouldClampModalInitScaleX = shouldClampModalInitScaleX;
- self.shouldClampModalLastScaleX = shouldClampModalLastScaleX;
-
- self.shouldClampModalInitScaleY = shouldClampModalInitScaleY;
- self.shouldClampModalLastScaleY = shouldClampModalLastScaleY;
-
- self.shouldClampModalInitTranslateX = shouldClampModalInitTranslateX;
- self.shouldClampModalLastTranslateX = shouldClampModalLastTranslateX;
-
- self.shouldClampModalInitTranslateY = shouldClampModalInitTranslateY;
- self.shouldClampModalLastTranslateY = shouldClampModalLastTranslateY;
- }
-};
diff --git a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalConfig.swift b/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalConfig.swift
deleted file mode 100644
index c8d3251d..00000000
--- a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalConfig.swift
+++ /dev/null
@@ -1,137 +0,0 @@
-//
-// AdaptiveModalConfig.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 5/23/23.
-//
-
-import UIKit
-
-public struct AdaptiveModalConfig {
-
- // MARK: - Types
- // -------------
-
- public enum Direction {
- case bottomToTop;
- case topToBottom;
- case leftToRight;
- case rightToLeft;
- };
-
- public enum SnapPercentStrategy {
- case index;
- case position;
- };
-
- // MARK: - Properties
- // ------------------
-
- public let baseSnapPoints: [AdaptiveModalSnapPointConfig];
- public let snapDirection: Direction;
-
- public let snapPercentStrategy: SnapPercentStrategy;
-
- public let snapAnimationConfig: AdaptiveModalSnapAnimationConfig;
- public let interpolationClampingConfig: AdaptiveModalClampingConfig;
-
- public let undershootSnapPoint: AdaptiveModalSnapPointPreset;
- public let overshootSnapPoint: AdaptiveModalSnapPointPreset;
-
- // the first snap point to snap to when the modal is first shown
- public let initialSnapPointIndex: Int;
-
- // let entranceConfig: AdaptiveModalEntranceConfig;
- // let snapSwipeVelocityThreshold: CGFloat = 0;
-
- // MARK: - Computed Properties
- // ---------------------------
-
- public var snapPoints: [AdaptiveModalSnapPointConfig] {
- .Element.deriveSnapPoints(
- undershootSnapPoint: self.undershootSnapPoint,
- inBetweenSnapPoints: self.baseSnapPoints,
- overshootSnapPoint: self.overshootSnapPoint
- );
- };
-
- public var overshootSnapPointIndex: Int {
- self.snapPoints.count - 1;
- };
-
- /// Defines which axis of the gesture point to use to drive the interpolation
- /// of the modal snap points
- ///
- public var inputValueKeyForPoint: KeyPath {
- switch self.snapDirection {
- case .topToBottom, .bottomToTop: return \.y;
- case .leftToRight, .rightToLeft: return \.x;
- };
- };
-
- public var inputValueKeyForRect: KeyPath {
- switch self.snapDirection {
- case .bottomToTop: return \.minY;
- case .topToBottom: return \.maxY;
- case .leftToRight: return \.maxX;
- case .rightToLeft: return \.minX;
- };
- };
-
- public var maxInputRangeKeyForRect: KeyPath {
- switch self.snapDirection {
- case .bottomToTop, .topToBottom: return \.height;
- case .leftToRight, .rightToLeft: return \.width;
- };
- };
-
- public var shouldInvertPercent: Bool {
- switch self.snapDirection {
- case .bottomToTop, .rightToLeft: return true;
- default: return false;
- };
- };
-
- // MARK: - Init
- // ------------
-
- public init(
- snapPoints: [AdaptiveModalSnapPointConfig],
- snapDirection: Direction,
- snapPercentStrategy: SnapPercentStrategy = .position,
- snapAnimationConfig: AdaptiveModalSnapAnimationConfig = .default,
- interpolationClampingConfig: AdaptiveModalClampingConfig = .default,
- initialSnapPointIndex: Int = 1,
- undershootSnapPoint: AdaptiveModalSnapPointPreset? = nil,
- overshootSnapPoint: AdaptiveModalSnapPointPreset? = nil
- ) {
- self.baseSnapPoints = snapPoints;
-
- self.snapDirection = snapDirection;
- self.snapPercentStrategy = snapPercentStrategy;
-
- self.snapAnimationConfig = snapAnimationConfig;
- self.interpolationClampingConfig = interpolationClampingConfig;
-
- self.initialSnapPointIndex = initialSnapPointIndex;
-
- self.undershootSnapPoint = undershootSnapPoint
- ?? .getDefaultUnderShootSnapPoint(forDirection: snapDirection);
-
- self.overshootSnapPoint = overshootSnapPoint
- ?? .getDefaultOvershootSnapPoint(forDirection: snapDirection);
- };
-
- // MARK: - Functions
- // -----------------
-
- public func sortInterpolationSteps(_ array: [T]) -> [T] {
- switch self.snapDirection {
- case .bottomToTop, .leftToRight:
- return array;
-
- case .topToBottom, .rightToLeft:
- return array.reversed();
- };
- };
-};
diff --git a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalEventNotifiable.swift b/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalEventNotifiable.swift
deleted file mode 100644
index 296275ea..00000000
--- a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalEventNotifiable.swift
+++ /dev/null
@@ -1,26 +0,0 @@
-//
-// AdaptiveModalEventNotifiable.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 6/4/23.
-//
-
-import Foundation
-
-
-public protocol AdaptiveModalEventNotifiable: AnyObject {
-
- func notifyOnModalWillSnap(
- prevSnapPointIndex: Int?,
- nextSnapPointIndex: Int,
- snapPointConfig: AdaptiveModalSnapPointConfig,
- interpolationPoint: AdaptiveModalInterpolationPoint
- );
-
- func notifyOnModalDidSnap(
- prevSnapPointIndex: Int?,
- currentSnapPointIndex: Int,
- snapPointConfig: AdaptiveModalSnapPointConfig,
- interpolationPoint: AdaptiveModalInterpolationPoint
- );
-};
diff --git a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalInterpolationPoint.swift b/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalInterpolationPoint.swift
deleted file mode 100644
index 55ede9fc..00000000
--- a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalInterpolationPoint.swift
+++ /dev/null
@@ -1,357 +0,0 @@
-//
-// AdaptiveModalInterpolationPoint.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 5/29/23.
-//
-
-import UIKit
-
-public struct AdaptiveModalInterpolationPoint: Equatable {
-
- // MARK: - Properties
- // ------------------
-
- public var percent: CGFloat;
- public var snapPointIndex: Int;
-
- /// The computed frames of the modal based on the snap points
- public var computedRect: CGRect;
-
- // MARK: - Properties - Keyframes
- // ------------------------------
-
- public var modalRotation: CGFloat;
-
- public var modalScaleX: CGFloat;
- public var modalScaleY: CGFloat;
-
- public var modalTranslateX: CGFloat;
- public var modalTranslateY: CGFloat;
-
- public var modalBorderWidth: CGFloat;
- public var modalBorderColor: UIColor;
-
- public var modalShadowColor: UIColor;
- public var modalShadowOffset: CGSize;
- public var modalShadowOpacity: CGFloat;
- public var modalShadowRadius: CGFloat;
-
- public var modalCornerRadius: CGFloat;
- public var modalMaskedCorners: CACornerMask;
-
- public var modalOpacity: CGFloat;
- public var modalBackgroundColor: UIColor;
- public var modalBackgroundOpacity: CGFloat;
-
- public var modalBackgroundVisualEffect: UIVisualEffect?;
- public var modalBackgroundVisualEffectOpacity: CGFloat;
- public var modalBackgroundVisualEffectIntensity: CGFloat;
-
- public var backgroundColor: UIColor;
- public var backgroundOpacity: CGFloat;
-
- public var backgroundVisualEffect: UIVisualEffect?;
- public var backgroundVisualEffectOpacity: CGFloat;
- public var backgroundVisualEffectIntensity: CGFloat;
-
- // MARK: - Computed Properties
- // ---------------------------
-
- public var modalTransforms: [CGAffineTransform] {
- var transforms: [CGAffineTransform] = [];
-
- transforms.append(
- .init(rotationAngle: self.modalRotation)
- );
-
- transforms.append(
- .init(scaleX: self.modalScaleX, y: self.modalScaleY)
- );
-
- transforms.append(
- .init(translationX: self.modalTranslateX, y: modalTranslateY)
- );
-
- return transforms;
- };
-
- public var modalTransform: CGAffineTransform {
- self.modalTransforms.reduce(.identity){
- $0.concatenating($1);
- };
- };
-
- // MARK: - Functions
- // -----------------
-
- func getModalTransform(
- shouldApplyRotation: Bool = true,
- shouldApplyScale: Bool = true,
- shouldApplyTranslate: Bool = true
- ) -> CGAffineTransform {
-
- var transforms: [CGAffineTransform] = [];
-
- if shouldApplyRotation,
- self.modalRotation != 0 {
-
- transforms.append(
- .init(rotationAngle: self.modalRotation)
- );
- };
-
- if shouldApplyScale,
- self.modalScaleX != 1 && self.modalScaleY != 1 {
-
- transforms.append(
- .init(scaleX: self.modalScaleX, y: self.modalScaleY)
- );
- };
-
- if shouldApplyTranslate,
- self.modalTranslateX != 0 && self.modalTranslateY != 0 {
-
- transforms.append(
- .init(translationX: self.modalTranslateX, y: self.modalTranslateY)
- );
- };
-
- if transforms.isEmpty {
- return .identity;
- };
-
- return transforms.reduce(.identity){
- $0.concatenating($1);
- };
- };
-
- func apply(
- toModalView modalView: UIView,
- toModalWrapperView modalWrapperView: UIView,
- toModalWrapperTransformView modalWrapperTransformView: UIView?,
- toModalWrapperShadowView modalWrapperShadowView: UIView?,
- toDummyModalView dummyModalView: UIView,
- toModalBackgroundView modalBgView: UIView?,
- toBackgroundView bgView: UIView?,
- toModalBackgroundEffectView modalBgEffectView: UIVisualEffectView?,
- toBackgroundVisualEffectView bgVisualEffectView: UIVisualEffectView?
- ){
- modalView.alpha = self.modalOpacity;
-
- modalView.layer.cornerRadius = self.modalCornerRadius;
- modalView.layer.maskedCorners = self.modalMaskedCorners;
-
- modalWrapperView.frame = self.computedRect;
-
- if let view = modalWrapperTransformView {
- view.transform = self.modalTransform;
- };
-
- if let view = modalWrapperShadowView {
- // border
- view.layer.borderWidth = self.modalBorderWidth;
- view.layer.borderColor = self.modalBorderColor.cgColor;
-
- // shadow
- view.layer.shadowColor = self.modalShadowColor.cgColor;
- view.layer.shadowOffset = self.modalShadowOffset;
- view.layer.shadowOpacity = Float(self.modalShadowOpacity);
- view.layer.shadowRadius = self.modalShadowRadius;
- };
-
- dummyModalView.frame = self.computedRect;
-
- if let view = modalBgView {
- view.alpha = self.modalBackgroundOpacity;
- view.backgroundColor = self.modalBackgroundColor;
- };
-
- if let bgView = bgView {
- bgView.alpha = self.backgroundOpacity;
- bgView.backgroundColor = self.backgroundColor;
- };
-
- if let effectView = modalBgEffectView {
- effectView.alpha = self.modalBackgroundVisualEffectOpacity;
- };
-
- if let effectView = bgVisualEffectView {
- effectView.alpha = self.backgroundVisualEffectOpacity;
- };
- };
-};
-
-// MARK: - Init
-// ------------
-
-public extension AdaptiveModalInterpolationPoint {
-
- init(
- usingModalConfig modalConfig: AdaptiveModalConfig,
- snapPointIndex: Int,
- percent: CGFloat? = nil,
- layoutValueContext context: RNILayoutValueContext,
- snapPointConfig: AdaptiveModalSnapPointConfig,
- prevInterpolationPoint keyframePrev: Self? = nil
- ) {
- self.snapPointIndex = snapPointIndex;
-
- let computedRect = snapPointConfig.snapPoint.computeRect(
- usingLayoutValueContext: context
- );
-
- self.computedRect = computedRect;
-
- self.percent = percent ?? {
- switch modalConfig.snapPercentStrategy {
- case .position:
- let maxRangeInput =
- context.targetRect[keyPath: modalConfig.maxInputRangeKeyForRect];
-
- let inputValue =
- computedRect[keyPath: modalConfig.inputValueKeyForRect];
-
- let percent = inputValue / maxRangeInput;
-
- return modalConfig.shouldInvertPercent
- ? AdaptiveModalUtilities.invertPercent(percent)
- : percent;
-
- case .index:
- let current = CGFloat(snapPointIndex + 1);
- let max = CGFloat(modalConfig.snapPoints.count);
-
- return current / max;
- };
- }();
-
- let isFirstSnapPoint = snapPointIndex == 0;
- let keyframeCurrent = snapPointConfig.animationKeyframe;
-
- self.modalRotation = keyframeCurrent?.modalRotation
- ?? keyframePrev?.modalRotation
- ?? 0;
-
- self.modalScaleX = keyframeCurrent?.modalScaleX
- ?? keyframePrev?.modalScaleX
- ?? 1;
-
- self.modalScaleY = keyframeCurrent?.modalScaleY
- ?? keyframePrev?.modalScaleY
- ?? 1;
-
- self.modalTranslateX = keyframeCurrent?.modalTranslateX
- ?? keyframePrev?.modalTranslateX
- ?? 0;
-
- self.modalTranslateY = keyframeCurrent?.modalTranslateY
- ?? keyframePrev?.modalTranslateY
- ?? 0;
-
- self.modalBorderWidth = keyframeCurrent?.modalBorderWidth
- ?? keyframePrev?.modalBorderWidth
- ?? 0;
-
- self.modalBorderColor = keyframeCurrent?.modalBorderColor
- ?? keyframePrev?.modalBorderColor
- ?? .black;
-
- self.modalShadowColor = keyframeCurrent?.modalShadowColor
- ?? keyframePrev?.modalShadowColor
- ?? .black;
-
- self.modalShadowOffset = keyframeCurrent?.modalShadowOffset
- ?? keyframePrev?.modalShadowOffset
- ?? .zero;
-
- self.modalShadowOpacity = keyframeCurrent?.modalShadowOpacity
- ?? keyframePrev?.modalShadowOpacity
- ?? 0;
-
- self.modalShadowRadius = keyframeCurrent?.modalShadowRadius
- ?? keyframePrev?.modalShadowRadius
- ?? 0;
-
- self.modalCornerRadius = keyframeCurrent?.modalCornerRadius
- ?? keyframePrev?.modalCornerRadius
- ?? 0;
-
- self.modalMaskedCorners = keyframeCurrent?.modalMaskedCorners
- ?? keyframePrev?.modalMaskedCorners
- ?? .allCorners;
-
- self.modalOpacity = keyframeCurrent?.modalOpacity
- ?? keyframePrev?.modalOpacity
- ?? 1;
-
- self.modalBackgroundColor = keyframeCurrent?.modalBackgroundColor
- ?? keyframePrev?.modalBackgroundColor
- ?? .systemBackground;
-
- self.modalBackgroundOpacity = keyframeCurrent?.modalBackgroundOpacity
- ?? keyframePrev?.modalBackgroundOpacity
- ?? 1;
-
- self.modalBackgroundVisualEffect = keyframeCurrent?.modalBackgroundVisualEffect
- ?? keyframePrev?.modalBackgroundVisualEffect;
-
- self.modalBackgroundVisualEffectOpacity = keyframeCurrent?.modalBackgroundVisualEffectOpacity
- ?? keyframePrev?.modalBackgroundVisualEffectOpacity
- ?? 1;
-
- self.modalBackgroundVisualEffectIntensity = keyframeCurrent?.modalBackgroundVisualEffectIntensity
- ?? keyframePrev?.modalBackgroundVisualEffectIntensity
- ?? (isFirstSnapPoint ? 0 : 1);
-
- self.backgroundColor = keyframeCurrent?.backgroundColor
- ?? keyframePrev?.backgroundColor
- ?? .black;
-
- self.backgroundOpacity = keyframeCurrent?.backgroundOpacity
- ?? keyframePrev?.backgroundOpacity
- ?? 0;
-
- self.backgroundVisualEffect = keyframeCurrent?.backgroundVisualEffect
- ?? keyframePrev?.backgroundVisualEffect;
-
- self.backgroundVisualEffectOpacity = keyframeCurrent?.backgroundVisualEffectOpacity
- ?? keyframePrev?.backgroundVisualEffectOpacity
- ?? 1;
-
- self.backgroundVisualEffectIntensity = keyframeCurrent?.backgroundVisualEffectIntensity
- ?? keyframePrev?.backgroundVisualEffectIntensity
- ?? (isFirstSnapPoint ? 0 : 1);
- };
-};
-
-// MARK: - Helpers
-// ---------------
-
-public extension AdaptiveModalInterpolationPoint {
-
- static func compute(
- usingModalConfig modalConfig: AdaptiveModalConfig,
- snapPoints: [AdaptiveModalSnapPointConfig]? = nil,
- layoutValueContext context: RNILayoutValueContext
- ) -> [Self] {
-
- let snapPoints = snapPoints ?? modalConfig.snapPoints;
- var items: [AdaptiveModalInterpolationPoint] = [];
-
- for (index, snapConfig) in snapPoints.enumerated() {
- items.append(
- AdaptiveModalInterpolationPoint(
- usingModalConfig: modalConfig,
- snapPointIndex: index,
- layoutValueContext: context,
- snapPointConfig: snapConfig,
- prevInterpolationPoint: items.last
- )
- );
- };
-
- return items;
- };
-};
-
diff --git a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalKeyframePropertyAnimator.swift b/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalKeyframePropertyAnimator.swift
deleted file mode 100644
index d4e003a8..00000000
--- a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalKeyframePropertyAnimator.swift
+++ /dev/null
@@ -1,56 +0,0 @@
-//
-// AdaptiveModalPropertyAnimator.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 6/5/23.
-//
-
-import UIKit
-
-
-public struct AdaptiveModalKeyframePropertyAnimator {
-
- public var animator: UIViewPropertyAnimator;
-
- private weak var component: UIView?;
-
- public init(
- interpolationPoints: [AdaptiveModalInterpolationPoint],
- forComponent component: T,
- animation: @escaping (
- _ component: T,
- _ interpolationPoint: AdaptiveModalInterpolationPoint
- ) -> Void
- ){
- let animator = UIViewPropertyAnimator(duration: 1, curve: .linear);
-
- self.animator = animator;
- self.component = component;
-
- animator.addAnimations {
- UIView.addKeyframe(
- withRelativeStartTime: 0,
- relativeDuration: 1
- ){
- component.transform = .identity;
- };
-
- for interpolationPoint in interpolationPoints {
- UIView.addKeyframe(
- withRelativeStartTime: interpolationPoint.percent,
- relativeDuration: 0
- ){
- animation(component, interpolationPoint);
- };
- };
- };
- };
-
- public func setFractionComplete(forPercent percent: CGFloat) {
- self.animator.fractionComplete = 0;
- };
-
- public func clear(){
- self.animator.stopAnimation(true);
- };
-};
diff --git a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalManager+UIViewControllerAnimatedTransitioning.swift b/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalManager+UIViewControllerAnimatedTransitioning.swift
deleted file mode 100644
index 6605daa2..00000000
--- a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalManager+UIViewControllerAnimatedTransitioning.swift
+++ /dev/null
@@ -1,45 +0,0 @@
-//
-// AdaptiveModalManager+UIViewControllerAnimatedTransitioning.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 6/8/23.
-//
-
-import UIKit
-
-extension AdaptiveModalManager: UIViewControllerAnimatedTransitioning {
-
- public func transitionDuration(
- using transitionContext: UIViewControllerContextTransitioning?
- ) -> TimeInterval {
-
- return self.modalConfig.snapAnimationConfig.springAnimationSettlingTime;
- };
-
- public func animateTransition(
- using transitionContext: UIViewControllerContextTransitioning
- ) {
- guard let fromVC = transitionContext.viewController(forKey: .from)
- else { return };
-
- switch self.presentationState {
- case .presenting:
- self.targetView = transitionContext.containerView;
- self.targetViewController = fromVC;
-
- self.prepareForPresentation();
-
- self.showModal() {
- transitionContext.completeTransition(true);
- };
-
- case .dismissing:
- self.hideModal(){
- transitionContext.completeTransition(true);
- };
-
- case .none:
- break;
- };
- };
-};
diff --git a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalManager+UIViewControllerTransitioningDelegate.swift b/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalManager+UIViewControllerTransitioningDelegate.swift
deleted file mode 100644
index 5d9cb65a..00000000
--- a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalManager+UIViewControllerTransitioningDelegate.swift
+++ /dev/null
@@ -1,57 +0,0 @@
-//
-// AdaptiveModalManager+UIViewControllerTransitioningDelegate.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 6/8/23.
-//
-
-import UIKit
-
-extension AdaptiveModalManager: UIAdaptivePresentationControllerDelegate {
-
- public func adaptivePresentationStyle(
- for controller: UIPresentationController,
- traitCollection: UITraitCollection
- ) -> UIModalPresentationStyle {
-
- return .custom;
- };
-};
-
-
-extension AdaptiveModalManager: UIViewControllerTransitioningDelegate {
-
- public func presentationController(
- forPresented presented: UIViewController,
- presenting: UIViewController?,
- source: UIViewController
- ) -> UIPresentationController? {
-
- let presentationController = AdaptiveModalPresentationController(
- presentedViewController: presented,
- presenting: presenting,
- modalManager: self
- );
-
- presentationController.delegate = self;
- return presentationController;
- };
-
- public func animationController(
- forPresented presented: UIViewController,
- presenting: UIViewController,
- source: UIViewController
- ) -> UIViewControllerAnimatedTransitioning? {
-
- self.presentationState = .presenting;
- return self;
- };
-
- public func animationController(
- forDismissed dismissed: UIViewController
- ) -> UIViewControllerAnimatedTransitioning? {
-
- self.presentationState = .dismissing;
- return self;
- };
-};
diff --git a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalManager.swift b/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalManager.swift
deleted file mode 100644
index ffdcb67d..00000000
--- a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalManager.swift
+++ /dev/null
@@ -1,2118 +0,0 @@
-//
-// AdaptiveModalManager.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 5/24/23.
-//
-
-import UIKit
-
-public class AdaptiveModalManager: NSObject {
-
- public enum PresentationState {
- case presenting, dismissing, none;
- };
-
- // MARK: - Properties - Config-Related
- // ------------------------------------
-
- public var modalConfig: AdaptiveModalConfig;
-
- public var enableSnapping = true;
- public var enableOverShooting = true;
-
- public var shouldSnapToUnderShootSnapPoint = true;
- public var shouldSnapToOvershootSnapPoint = false;
-
- public var shouldDismissModalOnSnapToUnderShootSnapPoint = true;
- public var shouldDismissModalOnSnapToOverShootSnapPoint = false;
-
- // MARK: - Properties - Layout-Related
- // ------------------------------------
-
- public weak var modalViewController: UIViewController?;
- public weak var targetViewController: UIViewController?;
-
- public weak var targetView: UIView?;
- public weak var modalView: UIView?;
-
- public lazy var dummyModalView = UIView();
- public lazy var modalWrapperView = UIView();
- public lazy var modalWrapperTransformView = UIView();
- public lazy var modalWrapperShadowView = UIView();
-
- public private(set) var prevModalFrame: CGRect = .zero;
-
- public private(set) var modalBackgroundView: UIView?;
- public private(set) var modalBackgroundVisualEffectView: UIVisualEffectView?;
-
- public private(set) var backgroundDimmingView: UIView?;
- public private(set) var backgroundVisualEffectView: UIVisualEffectView?;
-
- public private(set) var modalFrame: CGRect! {
- set {
- guard let newValue = newValue else { return };
- self.prevModalFrame = dummyModalView.frame;
-
- self.modalWrapperView.frame = newValue;
- self.dummyModalView.frame = newValue;
- }
- get {
- self.dummyModalView.frame;
- }
- };
-
- private var layoutKeyboardValues: RNILayoutKeyboardValues?;
-
- private var layoutValueContext: RNILayoutValueContext {
- let context: RNILayoutValueContext? = {
- if let targetVC = self.targetViewController {
- return .init(
- fromTargetViewController: targetVC,
- keyboardValues: self.layoutKeyboardValues
- );
- };
-
- if let targetView = self.targetView {
- return .init(
- fromTargetView: targetView,
- keyboardValues: self.layoutKeyboardValues
- );
- };
-
- return nil;
- }();
-
- return context ?? .default;
- };
-
- // MARK: - Properties - Config Interpolation Points
- // -------------------------------------------------
-
- /// The computed frames of the modal based on the snap points
- private(set) var configInterpolationSteps: [AdaptiveModalInterpolationPoint]!;
-
- var currentConfigInterpolationStep: AdaptiveModalInterpolationPoint {
- self.interpolationSteps[self.currentInterpolationIndex];
- };
-
- private var configInterpolationRangeInput: [CGFloat]! {
- self.interpolationSteps.map { $0.percent };
- };
-
- var prevConfigInterpolationIndex = 0;
- var nextConfigInterpolationIndex: Int?;
-
- var currentConfigInterpolationIndex = 0 {
- didSet {
- self.prevConfigInterpolationIndex = oldValue;
- }
- };
-
- // MARK: - Properties - Override Interpolation Points
- // ---------------------------------------------------
-
- private(set) var isOverridingSnapPoints = false;
-
- var prevOverrideInterpolationIndex = 0;
- var nextOverrideInterpolationIndex: Int?;
-
- var currentOverrideInterpolationIndex = 0 {
- didSet {
- self.prevOverrideInterpolationIndex = oldValue;
- }
- };
-
- var overrideSnapPoints: [AdaptiveModalSnapPointConfig]?;
- var overrideInterpolationPoints: [AdaptiveModalInterpolationPoint]?;
-
- var currentOverrideInterpolationStep: AdaptiveModalInterpolationPoint? {
- self.overrideInterpolationPoints?[self.currentOverrideInterpolationIndex];
- };
-
- private var shouldUseOverrideSnapPoints: Bool {
- self.isOverridingSnapPoints
- && self.overrideSnapPoints != nil
- && self.overrideInterpolationPoints != nil
- };
-
- private var shouldClearOverrideSnapPoints: Bool {
- self.shouldUseOverrideSnapPoints
- && self.currentOverrideInterpolationIndex < overrideInterpolationPoints!.count - 2
- && self.presentationState != .dismissing
- };
-
- // MARK: - Properties - Interpolation Points
- // ------------------------------------------
-
- public private(set) var prevInterpolationIndex: Int {
- get {
- self.shouldSnapToOvershootSnapPoint
- ? self.prevOverrideInterpolationIndex
- : self.prevConfigInterpolationIndex;
- }
- set {
- if self.shouldSnapToOvershootSnapPoint {
- self.prevOverrideInterpolationIndex = newValue;
-
- } else {
- self.prevConfigInterpolationIndex = newValue;
- };
- }
- };
-
- public private(set) var nextInterpolationIndex: Int? {
- get {
- self.shouldSnapToOvershootSnapPoint
- ? self.nextOverrideInterpolationIndex
- : self.nextConfigInterpolationIndex;
- }
- set {
- if self.shouldSnapToOvershootSnapPoint {
- self.nextOverrideInterpolationIndex = newValue;
-
- } else {
- self.nextConfigInterpolationIndex = newValue;
- };
- }
- };
-
- public private(set) var currentInterpolationIndex: Int {
- get {
- self.shouldUseOverrideSnapPoints
- ? self.currentOverrideInterpolationIndex
- : self.currentConfigInterpolationIndex;
- }
- set {
- if self.shouldUseOverrideSnapPoints {
- self.currentOverrideInterpolationIndex = newValue;
-
- } else {
- self.currentConfigInterpolationIndex = newValue;
- };
- }
- };
-
- public private(set) var interpolationSteps: [AdaptiveModalInterpolationPoint]! {
- get {
- self.shouldUseOverrideSnapPoints
- ? self.overrideInterpolationPoints
- : self.configInterpolationSteps
- }
- set {
- if self.shouldSnapToOvershootSnapPoint {
- self.overrideInterpolationPoints = newValue;
-
- } else {
- self.configInterpolationSteps = newValue;
- };
- }
- };
-
- public var currentInterpolationStep: AdaptiveModalInterpolationPoint {
- self.interpolationSteps[self.currentInterpolationIndex];
- };
-
- public var interpolationRangeInput: [CGFloat]! {
- self.interpolationSteps.map { $0.percent };
- };
-
- public var interpolationRangeMaxInput: CGFloat? {
- guard let targetView = self.targetView else { return nil };
- return targetView.frame[keyPath: self.modalConfig.maxInputRangeKeyForRect];
- };
-
- public var currentSnapPointConfig: AdaptiveModalSnapPointConfig {
- self.modalConfig.snapPoints[
- self.currentInterpolationStep.snapPointIndex
- ];
- };
-
- // MARK: - Properties - Animation-Related
- // ---------------------------------------
-
- private var modalAnimator: UIViewPropertyAnimator?;
-
- private var backgroundVisualEffectAnimator: AdaptiveModalRangePropertyAnimator?;
- private var modalBackgroundVisualEffectAnimator: AdaptiveModalRangePropertyAnimator?;
-
- private var displayLink: CADisplayLink?;
- private var displayLinkStartTimestamp: CFTimeInterval?;
-
- private var displayLinkEndTimestamp: CFTimeInterval? {
- guard let animator = self.modalAnimator,
- let displayLinkStartTimestamp = self.displayLinkStartTimestamp
- else { return nil };
-
- return displayLinkStartTimestamp + animator.duration;
- };
-
- private var rangeAnimators: [AdaptiveModalRangePropertyAnimator?] {[
- self.backgroundVisualEffectAnimator,
- self.modalBackgroundVisualEffectAnimator
- ]};
-
- // MARK: - Properties - Gesture-Related
- // -------------------------------------
-
- private var gestureOffset: CGPoint?;
- private var gestureVelocity: CGPoint?;
- private var gestureInitialPoint: CGPoint?;
- private var gesturePoint: CGPoint?;
-
- private var gestureInitialVelocity: CGVector {
- guard let gestureInitialPoint = self.gestureInitialPoint,
- let gestureFinalPoint = self.gesturePoint,
- let gestureVelocity = self.gestureVelocity
- else {
- return .zero;
- };
-
- let gestureInitialCoord =
- gestureInitialPoint[keyPath: self.modalConfig.inputValueKeyForPoint];
-
- let gestureFinalCoord =
- gestureFinalPoint[keyPath: self.modalConfig.inputValueKeyForPoint];
-
- let gestureVelocityCoord =
- gestureVelocity[keyPath: self.modalConfig.inputValueKeyForPoint];
-
- var velocity: CGFloat = 0;
- let distance = gestureFinalCoord - gestureInitialCoord;
-
- if distance != 0 {
- velocity = gestureVelocityCoord / distance;
- };
-
- let snapAnimationConfig = self.modalConfig.snapAnimationConfig;
-
- velocity = velocity.clamped(
- min: -snapAnimationConfig.maxGestureVelocity,
- max: snapAnimationConfig.maxGestureVelocity
- );
-
- return CGVector(dx: velocity, dy: velocity);
- };
-
- /// Based on the gesture's velocity and it's current position, estimate
- /// where would it eventually "stop" (i.e. it's final position) if it were to
- /// decelerate over time
- ///
- private var gestureFinalPoint: CGPoint? {
- guard let gesturePoint = self.gesturePoint,
- let gestureVelocity = self.gestureVelocity
- else { return nil };
-
- let maxVelocity: CGFloat = 300;
-
- let gestureVelocityClamped = CGPoint(
- x: (gestureVelocity.x / 2).clamped(minMax: maxVelocity),
- y: (gestureVelocity.y / 2).clamped(minMax: maxVelocity)
- );
-
- let nextX = AdaptiveModalUtilities.computeFinalPosition(
- position: gesturePoint.x,
- initialVelocity: gestureVelocityClamped.x
- );
-
- let nextY = AdaptiveModalUtilities.computeFinalPosition(
- position: gesturePoint.y,
- initialVelocity: gestureVelocityClamped.y
- );
-
- return CGPoint(x: nextX, y: nextY);
- };
-
- private var computedGestureOffset: CGPoint? {
- guard let gestureInitialPoint = self.gestureInitialPoint,
- let modalRect = self.modalFrame
- else { return nil };
-
- if let gestureOffset = self.gestureOffset {
- return gestureOffset;
- };
-
- let xOffset: CGFloat = {
- switch self.modalConfig.snapDirection {
- case .bottomToTop, .rightToLeft:
- return gestureInitialPoint.x - modalRect.minX;
-
- case .topToBottom, .leftToRight:
- return modalRect.maxX - gestureInitialPoint.x;
- };
- }();
-
- let yOffset: CGFloat = {
- switch self.modalConfig.snapDirection {
- case .bottomToTop, .rightToLeft:
- return gestureInitialPoint.y - modalRect.minY;
-
- case .topToBottom, .leftToRight:
- return modalRect.maxY - gestureInitialPoint.y;
- };
- }();
-
- let offset = CGPoint(x: xOffset, y: yOffset);
- self.gestureOffset = offset;
-
- return offset;
- };
-
- // MARK: - Properties
- // -------------------
-
- private var didTriggerSetup = false;
- var presentationState: PresentationState = .none;
-
- weak var eventDelegate: AdaptiveModalEventNotifiable?;
-
- // MARK: - Computed Properties
- // ---------------------------
-
- public var isSwiping: Bool {
- self.gestureInitialPoint != nil
- };
-
- public var isAnimating: Bool {
- self.modalAnimator != nil || (self.modalAnimator?.isRunning ?? false);
- };
-
- public var currentSnapPointIndex: Int {
- self.currentInterpolationStep.snapPointIndex
- };
-
- // MARK: - Init
- // ------------
-
- public init(modalConfig: AdaptiveModalConfig) {
- self.modalConfig = modalConfig;
-
- super.init();
- self.computeSnapPoints();
- };
-
- deinit {
- self.clearAnimators();
- self.removeObservers();
- };
-
- // MARK: - Functions - Setup
- // -------------------------
-
- private func setupObservers(){
- NotificationCenter.default.addObserver(self,
- selector: #selector(self.onKeyboardWillShow(notification:)),
- name: UIResponder.keyboardWillShowNotification,
- object: nil
- );
-
- NotificationCenter.default.addObserver(self,
- selector: #selector(self.onKeyboardDidShow(notification:)),
- name: UIResponder.keyboardDidShowNotification,
- object: nil
- );
-
- NotificationCenter.default.addObserver(self,
- selector: #selector(self.onKeyboardWillHide(notification:)),
- name: UIResponder.keyboardWillHideNotification,
- object: nil
- );
-
- NotificationCenter.default.addObserver(self,
- selector: #selector(self.onKeyboardDidHide(notification:)),
- name: UIResponder.keyboardDidHideNotification,
- object: nil
- );
-
- NotificationCenter.default.addObserver(self,
- selector: #selector(self.onKeyboardWillChange(notification:)),
- name: UIResponder.keyboardWillChangeFrameNotification,
- object: nil
- );
-
- NotificationCenter.default.addObserver(self,
- selector: #selector(self.onKeyboardDidChange(notification:)),
- name: UIResponder.keyboardDidChangeFrameNotification,
- object: nil
- );
- };
-
- func setupViewControllers() {
- guard let modalVC = self.modalViewController else { return };
-
- modalVC.modalPresentationStyle = .overCurrentContext;
- modalVC.transitioningDelegate = self;
- };
-
- func setupInitViews() {
- self.modalBackgroundView = UIView();
- self.modalBackgroundVisualEffectView = UIVisualEffectView();
-
- self.backgroundDimmingView = UIView();
- self.backgroundVisualEffectView = UIVisualEffectView();
- };
-
- func setupGestureHandler() {
- guard let modalView = self.modalView else { return };
-
- modalView.gestureRecognizers?.removeAll();
-
- modalView.addGestureRecognizer(
- UIPanGestureRecognizer(
- target: self,
- action: #selector(self.onDragPanGesture(_:))
- )
- );
- };
-
- func setupDummyModalView() {
- guard let targetView = self.targetView else { return };
- let dummyModalView = self.dummyModalView;
-
- dummyModalView.backgroundColor = .clear;
- dummyModalView.alpha = 0.1;
- dummyModalView.isUserInteractionEnabled = false;
-
- targetView.addSubview(dummyModalView);
- };
-
- func setupAddViews() {
- guard let modalView = self.modalView,
- let targetView = self.targetView
- else { return };
-
- if let bgVisualEffectView = self.backgroundVisualEffectView {
- targetView.addSubview(bgVisualEffectView);
-
- bgVisualEffectView.clipsToBounds = true;
- bgVisualEffectView.backgroundColor = .clear;
- bgVisualEffectView.isUserInteractionEnabled = false;
- };
-
- if let bgDimmingView = self.backgroundDimmingView {
- targetView.addSubview(bgDimmingView);
-
- bgDimmingView.clipsToBounds = true;
- bgDimmingView.backgroundColor = .black;
- bgDimmingView.alpha = 0;
- };
-
- let wrapperViews = [
- self.modalWrapperView,
- self.modalWrapperTransformView,
- self.modalWrapperShadowView,
- modalView,
- ];
-
- wrapperViews.enumerated().forEach {
- guard let prev = wrapperViews[safeIndex: $0.offset - 1] else {
- targetView.addSubview($0.element);
- return;
- };
-
- prev.addSubview($0.element);
- };
-
- modalView.clipsToBounds = true;
- modalView.backgroundColor = .clear;
-
- if let modalBackgroundView = self.modalBackgroundView {
- modalView.addSubview(modalBackgroundView);
- modalView.sendSubviewToBack(modalBackgroundView);
-
- modalBackgroundView.backgroundColor = .systemBackground;
- modalBackgroundView.isUserInteractionEnabled = false;
- };
-
- if let modalBGVisualEffectView = self.modalBackgroundVisualEffectView {
- modalView.addSubview(modalBGVisualEffectView);
- modalView.sendSubviewToBack(modalBGVisualEffectView);
-
- modalBGVisualEffectView.clipsToBounds = true;
- modalBGVisualEffectView.backgroundColor = .clear;
- modalBGVisualEffectView.isUserInteractionEnabled = false;
- };
- };
-
- func setupViewConstraints() {
- guard let modalView = self.modalView,
- let targetView = self.targetView
- else { return };
-
- if let bgVisualEffectView = self.backgroundVisualEffectView {
- bgVisualEffectView.translatesAutoresizingMaskIntoConstraints = false;
-
- NSLayoutConstraint.activate([
- bgVisualEffectView.topAnchor .constraint(equalTo: targetView.topAnchor ),
- bgVisualEffectView.bottomAnchor .constraint(equalTo: targetView.bottomAnchor ),
- bgVisualEffectView.leadingAnchor .constraint(equalTo: targetView.leadingAnchor ),
- bgVisualEffectView.trailingAnchor.constraint(equalTo: targetView.trailingAnchor),
- ]);
- };
-
- let wrapperViews = [
- self.modalWrapperTransformView,
- self.modalWrapperShadowView,
- modalView,
- ];
-
- wrapperViews.forEach {
- guard let parentView = $0.superview else { return };
- $0.translatesAutoresizingMaskIntoConstraints = false;
-
- NSLayoutConstraint.activate([
- $0.centerXAnchor.constraint(equalTo: parentView.centerXAnchor),
- $0.centerYAnchor.constraint(equalTo: parentView.centerYAnchor),
- $0.widthAnchor .constraint(equalTo: parentView.widthAnchor ),
- $0.heightAnchor .constraint(equalTo: parentView.heightAnchor ),
- ]);
- };
-
- if let bgDimmingView = self.backgroundDimmingView {
- bgDimmingView.translatesAutoresizingMaskIntoConstraints = false;
-
- NSLayoutConstraint.activate([
- bgDimmingView.topAnchor .constraint(equalTo: targetView.topAnchor ),
- bgDimmingView.bottomAnchor .constraint(equalTo: targetView.bottomAnchor ),
- bgDimmingView.leadingAnchor .constraint(equalTo: targetView.leadingAnchor ),
- bgDimmingView.trailingAnchor.constraint(equalTo: targetView.trailingAnchor),
- ]);
- };
-
- if let modalBGView = self.modalBackgroundView {
- modalBGView.translatesAutoresizingMaskIntoConstraints = false;
-
- NSLayoutConstraint.activate([
- modalBGView.centerXAnchor.constraint(equalTo: modalView.centerXAnchor),
- modalBGView.centerYAnchor.constraint(equalTo: modalView.centerYAnchor),
- modalBGView.widthAnchor .constraint(equalTo: modalView.widthAnchor ),
- modalBGView.heightAnchor .constraint(equalTo: modalView.heightAnchor ),
- ]);
- };
-
- if let modalBGVisualEffectView = self.modalBackgroundVisualEffectView {
- modalBGVisualEffectView.translatesAutoresizingMaskIntoConstraints = false;
-
- NSLayoutConstraint.activate([
- modalBGVisualEffectView.centerXAnchor.constraint(equalTo: modalView.centerXAnchor),
- modalBGVisualEffectView.centerYAnchor.constraint(equalTo: modalView.centerYAnchor),
- modalBGVisualEffectView.widthAnchor .constraint(equalTo: modalView.widthAnchor ),
- modalBGVisualEffectView.heightAnchor .constraint(equalTo: modalView.heightAnchor ),
- ]);
- };
- };
-
- // MARK: - Functions - Cleanup-Related
- // -----------------------------------
-
- private func clearGestureValues() {
- self.gestureOffset = nil;
- self.gestureInitialPoint = nil;
- self.gestureVelocity = nil;
- self.gesturePoint = nil;
- };
-
- private func clearAnimators() {
- self.backgroundVisualEffectAnimator?.clear();
- self.backgroundVisualEffectAnimator = nil;
-
- self.modalBackgroundVisualEffectAnimator?.clear();
- self.modalBackgroundVisualEffectAnimator = nil;
-
- self.modalAnimator?.stopAnimation(true);
- self.modalAnimator = nil;
- };
-
- private func clearLayoutKeyboardValues(){
- self.layoutKeyboardValues = nil;
- };
-
- private func removeObservers(){
- let notificationNames = [
- UIResponder.keyboardWillShowNotification,
- UIResponder.keyboardDidShowNotification,
- UIResponder.keyboardWillHideNotification,
- UIResponder.keyboardDidHideNotification,
- UIResponder.keyboardWillChangeFrameNotification,
- UIResponder.keyboardDidChangeFrameNotification,
- ];
-
- notificationNames.forEach {
- NotificationCenter.default.removeObserver(self, name: $0, object: nil);
- };
-
- NotificationCenter.default.removeObserver(self);
- };
-
- private func cleanupViews() {
- let viewsToCleanup: [UIView?] = [
- self.dummyModalView,
- self.modalWrapperView,
- // self.modalWrapperTransformView,
- // self.nodalView,
- self.modalWrapperShadowView,
- self.modalBackgroundView,
- self.modalBackgroundVisualEffectView,
- self.backgroundDimmingView,
- self.backgroundVisualEffectView
- ];
-
- viewsToCleanup.forEach {
- guard let view = $0 else { return };
-
- view.removeAllAncestorConstraints();
- view.removeFromSuperview();
- };
-
- self.modalView = nil;
- self.targetView = nil;
-
- self.modalBackgroundView = nil;
- self.modalBackgroundVisualEffectView = nil;
- self.backgroundDimmingView = nil;
- self.backgroundVisualEffectView = nil;
-
- self.didTriggerSetup = false;
- };
-
- private func cleanupSnapPointOverride(){
- self.isOverridingSnapPoints = false;
- self.overrideSnapPoints = nil;
- self.overrideInterpolationPoints = nil;
-
- self.prevOverrideInterpolationIndex = 0;
- self.nextOverrideInterpolationIndex = nil;
- self.currentOverrideInterpolationIndex = 0;
- };
-
- private func cleanup() {
- self.clearGestureValues();
- self.clearAnimators();
- self.clearLayoutKeyboardValues();
-
- self.cleanupViews();
- self.cleanupSnapPointOverride();
- self.removeObservers();
-
- self.currentInterpolationIndex = 0;
- };
-
- // MARK: - Functions - Interpolation-Related Helpers
- // -------------------------------------------------
-
- private func interpolate(
- inputValue: CGFloat,
- rangeInput: [CGFloat]? = nil,
- rangeOutput: [AdaptiveModalInterpolationPoint]? = nil,
- rangeOutputKey: KeyPath,
- shouldClampMin: Bool = false,
- shouldClampMax: Bool = false
- ) -> CGFloat? {
-
- guard let interpolationSteps = rangeOutput ?? self.interpolationSteps,
- let interpolationRangeInput = rangeInput ?? self.interpolationRangeInput
- else { return nil };
-
- return AdaptiveModalUtilities.interpolate(
- inputValue: inputValue,
- rangeInput: interpolationRangeInput,
- rangeOutput: interpolationSteps.map {
- $0[keyPath: rangeOutputKey];
- },
- shouldClampMin: shouldClampMin,
- shouldClampMax: shouldClampMax
- );
- };
-
- private func interpolateColor(
- inputValue: CGFloat,
- rangeInput: [CGFloat]? = nil,
- rangeOutput: [AdaptiveModalInterpolationPoint]? = nil,
- rangeOutputKey: KeyPath,
- shouldClampMin: Bool = false,
- shouldClampMax: Bool = false
- ) -> UIColor? {
-
- guard let interpolationSteps = rangeOutput ?? self.interpolationSteps,
- let interpolationRangeInput = rangeInput ?? self.interpolationRangeInput
- else { return nil };
-
- return AdaptiveModalUtilities.interpolateColor(
- inputValue: inputValue,
- rangeInput: interpolationRangeInput,
- rangeOutput: interpolationSteps.map {
- $0[keyPath: rangeOutputKey];
- },
- shouldClampMin: shouldClampMin,
- shouldClampMax: shouldClampMax
- );
- };
-
- private func getInterpolationStepRange(
- forInputPercentValue inputPercentValue: CGFloat
- ) -> (
- rangeStart: AdaptiveModalInterpolationPoint,
- rangeEnd: AdaptiveModalInterpolationPoint
- )? {
- guard let interpolationSteps = self.interpolationSteps,
- let minStep = interpolationSteps.first,
- let maxStep = interpolationSteps.last
- else { return nil };
-
- let lastIndex = interpolationSteps.count - 1;
-
- let minStepValue = minStep.percent;
- let maxStepValue = maxStep.percent;
-
- if inputPercentValue <= minStepValue {
- return (
- rangeStart: minStep,
- rangeEnd: interpolationSteps[1]
- );
- };
-
- if inputPercentValue >= maxStepValue {
- return (
- rangeStart: interpolationSteps[lastIndex - 1],
- rangeEnd: maxStep
- );
- };
-
- let firstMatch = interpolationSteps.enumerated().first {
- guard let nextItem = interpolationSteps[safeIndex: $0.offset + 1]
- else { return false };
-
- let percentCurrent = $0.element.percent;
- let percentNext = nextItem.percent;
-
- /// `inputPercentValue` is between the range of `percentCurrent`
- /// and `percentNext`
- ///
- return inputPercentValue >= percentCurrent &&
- inputPercentValue <= percentNext;
- };
-
- guard let rangeStart = firstMatch?.element,
- let rangeStartIndex = firstMatch?.offset,
- let rangeEnd = interpolationSteps[safeIndex: rangeStartIndex + 1]
- else { return nil };
-
- return (rangeStart, rangeEnd);
- };
-
- // MARK: - Functions - Value Interpolators
- // ---------------------------------------
-
- private func interpolateModalRect(
- forInputPercentValue inputPercentValue: CGFloat
- ) -> CGRect? {
-
- let clampConfig = modalConfig.interpolationClampingConfig;
-
- let nextHeight = self.interpolate(
- inputValue: inputPercentValue,
- rangeOutputKey: \.computedRect.height,
- shouldClampMin: clampConfig.shouldClampModalLastHeight,
- shouldClampMax: clampConfig.shouldClampModalInitHeight
- );
-
- let nextWidth = self.interpolate(
- inputValue: inputPercentValue,
- rangeOutputKey: \.computedRect.width,
- shouldClampMin: clampConfig.shouldClampModalLastWidth,
- shouldClampMax: clampConfig.shouldClampModalInitWidth
- );
-
- let nextX = self.interpolate(
- inputValue: inputPercentValue,
- rangeOutputKey: \.computedRect.origin.x,
- shouldClampMin: clampConfig.shouldClampModalLastX,
- shouldClampMax: clampConfig.shouldClampModalInitX
- );
-
- let nextY = self.interpolate(
- inputValue: inputPercentValue,
- rangeOutputKey: \.computedRect.origin.y,
- shouldClampMin: clampConfig.shouldClampModalLastY,
- shouldClampMax: clampConfig.shouldClampModalInitY
- );
-
- guard let nextX = nextX,
- let nextY = nextY,
- let nextWidth = nextWidth,
- let nextHeight = nextHeight
- else { return nil };
-
- return CGRect(
- x: nextX,
- y: nextY,
- width: nextWidth,
- height: nextHeight
- );
- };
-
- private func interpolateModalTransform(
- forInputPercentValue inputPercentValue: CGFloat
- ) -> CGAffineTransform? {
-
- let clampConfig = modalConfig.interpolationClampingConfig;
-
- let nextModalRotation = self.interpolate(
- inputValue: inputPercentValue,
- rangeOutputKey: \.modalRotation,
- shouldClampMin: clampConfig.shouldClampModalInitRotation,
- shouldClampMax: clampConfig.shouldClampModalLastRotation
- );
-
- let nextScaleX = self.interpolate(
- inputValue: inputPercentValue,
- rangeOutputKey: \.modalScaleX,
- shouldClampMin: clampConfig.shouldClampModalLastScaleX,
- shouldClampMax: clampConfig.shouldClampModalLastScaleX
- );
-
- let nextScaleY = self.interpolate(
- inputValue: inputPercentValue,
- rangeOutputKey: \.modalScaleY,
- shouldClampMin: clampConfig.shouldClampModalLastScaleY,
- shouldClampMax: clampConfig.shouldClampModalLastScaleY
- );
-
- let nextTranslateX = self.interpolate(
- inputValue: inputPercentValue,
- rangeOutputKey: \.modalTranslateX,
- shouldClampMin: clampConfig.shouldClampModalInitTranslateX,
- shouldClampMax: clampConfig.shouldClampModalLastTranslateX
- );
-
- let nextTranslateY = self.interpolate(
- inputValue: inputPercentValue,
- rangeOutputKey: \.modalTranslateY,
- shouldClampMin: clampConfig.shouldClampModalInitTranslateY,
- shouldClampMax: clampConfig.shouldClampModalLastTranslateY
- );
-
- let nextTransform: CGAffineTransform = {
- var transforms: [CGAffineTransform] = [];
-
- if let rotation = nextModalRotation {
- transforms.append(
- .init(rotationAngle: rotation)
- );
- };
-
- if let nextScaleX = nextScaleX,
- let nextScaleY = nextScaleY {
-
- transforms.append(
- .init(scaleX: nextScaleX, y: nextScaleY)
- );
- };
-
- if let nextTranslateX = nextTranslateX,
- let nextTranslateY = nextTranslateY {
-
- transforms.append(
- .init(translationX: nextTranslateX, y: nextTranslateY)
- );
- };
-
- return transforms.reduce(.identity) {
- $0.concatenating($1);
- };
- }();
-
- return nextTransform;
- };
-
- private func interpolateModalShadowOffset(
- forInputPercentValue inputPercentValue: CGFloat
- ) -> CGSize? {
-
- let nextWidth = self.interpolate(
- inputValue: inputPercentValue,
- rangeOutputKey: \.modalShadowOffset.width
- );
-
- let nextHeight = self.interpolate(
- inputValue: inputPercentValue,
- rangeOutputKey: \.modalShadowOffset.height
- );
-
- guard let nextWidth = nextWidth,
- let nextHeight = nextHeight
- else { return nil };
-
- return CGSize(width: nextWidth, height: nextHeight);
- };
-
- private func interpolateModalBorderRadius(
- forInputPercentValue inputPercentValue: CGFloat
- ) -> CGFloat? {
-
- return self.interpolate(
- inputValue: inputPercentValue,
- rangeOutputKey: \.modalCornerRadius
- );
- };
-
- // MARK: - Functions - Property Interpolators
- // ------------------------------------------
-
- private func applyInterpolationToModalBackgroundVisualEffect(
- forInputPercentValue inputPercentValue: CGFloat
- ) {
-
- let animator: AdaptiveModalRangePropertyAnimator? = {
- let interpolationRange = self.getInterpolationStepRange(
- forInputPercentValue: inputPercentValue
- );
-
- guard let interpolationRange = interpolationRange else { return nil };
- let animator = self.modalBackgroundVisualEffectAnimator;
-
- let animatorRangeDidChange = animator?.didRangeChange(
- interpolationRangeStart: interpolationRange.rangeStart,
- interpolationRangeEnd: interpolationRange.rangeEnd
- );
-
- if let animator = animator, !animatorRangeDidChange! {
- return animator;
- };
-
- animator?.clear();
-
- guard let visualEffectView = self.modalBackgroundVisualEffectView
- else { return nil };
-
- visualEffectView.effect = nil;
-
- return AdaptiveModalRangePropertyAnimator(
- interpolationRangeStart: interpolationRange.rangeStart,
- interpolationRangeEnd: interpolationRange.rangeEnd,
- forComponent: visualEffectView,
- interpolationOutputKey: \.modalBackgroundVisualEffectIntensity
- ) {
- $0.effect = $1.modalBackgroundVisualEffect;
- };
- }();
-
- guard let animator = animator else { return };
- self.modalBackgroundVisualEffectAnimator = animator;
-
- animator.setFractionComplete(
- forInputPercentValue: inputPercentValue.clamped(min: 0, max: 1)
- );
- };
-
- private func applyInterpolationToBackgroundVisualEffect(
- forInputPercentValue inputPercentValue: CGFloat
- ) {
-
- let animator: AdaptiveModalRangePropertyAnimator? = {
- let interpolationRange = self.getInterpolationStepRange(
- forInputPercentValue: inputPercentValue
- );
-
- guard let interpolationRange = interpolationRange else { return nil };
- let animator = self.backgroundVisualEffectAnimator;
-
- let animatorDidRangeChange = animator?.didRangeChange(
- interpolationRangeStart: interpolationRange.rangeStart,
- interpolationRangeEnd: interpolationRange.rangeEnd
- );
-
- if let animator = animator, !animatorDidRangeChange! {
- return animator;
- };
-
- animator?.clear();
-
- guard let visualEffectView = self.backgroundVisualEffectView
- else { return nil };
-
- visualEffectView.effect = nil;
-
- return AdaptiveModalRangePropertyAnimator(
- interpolationRangeStart: interpolationRange.rangeStart,
- interpolationRangeEnd: interpolationRange.rangeEnd,
- forComponent: visualEffectView,
- interpolationOutputKey: \.backgroundVisualEffectIntensity
- ) {
- $0.effect = $1.backgroundVisualEffect;
- };
- }();
-
- guard let animator = animator else { return };
- self.backgroundVisualEffectAnimator = animator;
-
- animator.setFractionComplete(
- forInputPercentValue: inputPercentValue.clamped(min: 0, max: 1)
- );
- };
-
- // MARK: - Functions - Apply Interpolators
- // ----------------------------------------
-
- private func applyInterpolationToModal(
- forInputPercentValue inputPercentValue: CGFloat
- ) {
- guard let modalView = self.modalView else { return };
-
- self.modalFrame = self.interpolateModalRect(
- forInputPercentValue: inputPercentValue
- );
-
- AdaptiveModalUtilities.unwrapAndSetProperty(
- forObject: self.modalWrapperTransformView,
- forPropertyKey: \.transform,
- withValue: self.interpolateModalTransform(
- forInputPercentValue: inputPercentValue
- )
- );
-
- AdaptiveModalUtilities.unwrapAndSetProperty(
- forObject: modalView,
- forPropertyKey: \.alpha,
- withValue: self.interpolate(
- inputValue: inputPercentValue,
- rangeOutputKey: \.modalOpacity
- )
- );
-
- AdaptiveModalUtilities.unwrapAndSetProperty(
- forObject: self.modalWrapperShadowView,
- forPropertyKey: \.layer.borderWidth,
- withValue: self.interpolate(
- inputValue: inputPercentValue,
- rangeOutputKey: \.modalBorderWidth
- )
- );
-
- AdaptiveModalUtilities.unwrapAndSetProperty(
- forObject: self.modalWrapperShadowView,
- forPropertyKey: \.layer.borderColor,
- withValue: {
- let color = self.interpolateColor(
- inputValue: inputPercentValue,
- rangeOutputKey: \.modalBorderColor
- );
-
- return color?.cgColor;
- }()
- );
-
- AdaptiveModalUtilities.unwrapAndSetProperty(
- forObject: self.modalWrapperShadowView,
- forPropertyKey: \.layer.shadowColor,
- withValue: {
- let color = self.interpolateColor(
- inputValue: inputPercentValue,
- rangeOutputKey: \.modalShadowColor
- );
-
- return color?.cgColor;
- }()
- );
-
- AdaptiveModalUtilities.unwrapAndSetProperty(
- forObject: self.modalWrapperShadowView,
- forPropertyKey: \.layer.shadowOffset,
- withValue: self.interpolateModalShadowOffset(
- forInputPercentValue: inputPercentValue
- )
- );
-
- AdaptiveModalUtilities.unwrapAndSetProperty(
- forObject: self.modalWrapperShadowView,
- forPropertyKey: \.layer.shadowOpacity,
- withValue: {
- let value = self.interpolate(
- inputValue: inputPercentValue,
- rangeOutputKey: \.modalShadowOpacity
- );
-
- guard let value = value else { return nil };
- return Float(value);
- }()
- );
-
- AdaptiveModalUtilities.unwrapAndSetProperty(
- forObject: self.modalWrapperShadowView,
- forPropertyKey: \.layer.shadowRadius,
- withValue: self.interpolate(
- inputValue: inputPercentValue,
- rangeOutputKey: \.modalShadowRadius
- )
- );
-
- AdaptiveModalUtilities.unwrapAndSetProperty(
- forObject: modalView,
- forPropertyKey: \.layer.cornerRadius,
- withValue: self.interpolateModalBorderRadius(
- forInputPercentValue: inputPercentValue
- )
- );
-
- AdaptiveModalUtilities.unwrapAndSetProperty(
- forObject: self.modalBackgroundView,
- forPropertyKey: \.backgroundColor,
- withValue: self.interpolateColor(
- inputValue: inputPercentValue,
- rangeOutputKey: \.modalBackgroundColor
- )
- );
-
- AdaptiveModalUtilities.unwrapAndSetProperty(
- forObject: self.modalBackgroundView,
- forPropertyKey: \.alpha,
- withValue: self.interpolate(
- inputValue: inputPercentValue,
- rangeOutputKey: \.modalBackgroundOpacity
- )
- );
-
- AdaptiveModalUtilities.unwrapAndSetProperty(
- forObject: self.modalBackgroundVisualEffectView,
- forPropertyKey: \.alpha,
- withValue: self.interpolate(
- inputValue: inputPercentValue,
- rangeOutputKey: \.modalBackgroundVisualEffectOpacity
- )
- );
-
- AdaptiveModalUtilities.unwrapAndSetProperty(
- forObject: self.backgroundDimmingView,
- forPropertyKey: \.backgroundColor,
- withValue: self.interpolateColor(
- inputValue: inputPercentValue,
- rangeOutputKey: \.backgroundColor
- )
- );
-
- AdaptiveModalUtilities.unwrapAndSetProperty(
- forObject: self.backgroundDimmingView,
- forPropertyKey: \.alpha,
- withValue: self.interpolate(
- inputValue: inputPercentValue,
- rangeOutputKey: \.backgroundOpacity
- )
- );
-
- AdaptiveModalUtilities.unwrapAndSetProperty(
- forObject: self.backgroundVisualEffectView,
- forPropertyKey: \.alpha,
- withValue: self.interpolate(
- inputValue: inputPercentValue,
- rangeOutputKey: \.backgroundVisualEffectOpacity
- )
- );
-
- self.applyInterpolationToBackgroundVisualEffect(
- forInputPercentValue: inputPercentValue
- );
-
- self.applyInterpolationToModalBackgroundVisualEffect(
- forInputPercentValue: inputPercentValue
- );
- };
-
- private func applyInterpolationToModal(forPoint point: CGPoint) {
- guard let interpolationRangeMaxInput = self.interpolationRangeMaxInput
- else { return };
-
- let inputValue = point[keyPath: self.modalConfig.inputValueKeyForPoint];
-
- let shouldInvertPercent: Bool = {
- switch modalConfig.snapDirection {
- case .bottomToTop, .rightToLeft: return true;
- default: return false;
- };
- }();
-
- let percent = inputValue / interpolationRangeMaxInput;
-
- let percentClamped: CGFloat = {
- guard !self.enableOverShooting else { return percent };
-
- let secondToLastIndex = self.modalConfig.overshootSnapPointIndex - 1;
- let maxPercent = self.interpolationRangeInput[secondToLastIndex];
-
- return percent.clamped(max: maxPercent);
- }();
-
- let percentAdj = shouldInvertPercent
- ? AdaptiveModalUtilities.invertPercent(percentClamped)
- : percentClamped;
-
- self.applyInterpolationToModal(forInputPercentValue: percentAdj);
- };
-
- private func applyInterpolationToModal(forGesturePoint gesturePoint: CGPoint) {
- let gesturePointWithOffset =
- self.applyGestureOffsets(forGesturePoint: gesturePoint);
-
- self.applyInterpolationToModal(forPoint: gesturePointWithOffset);
- };
-
- // MARK: - Functions - Helpers/Utilities
- // -------------------------------------
-
- private func adjustInterpolationIndex(for nextIndex: Int) -> Int {
- if nextIndex == 0 {
- return self.shouldSnapToUnderShootSnapPoint
- ? nextIndex
- : 1;
- };
-
- let lastIndex = self.interpolationSteps.count - 1;
-
- if nextIndex == lastIndex {
- return self.shouldSnapToOvershootSnapPoint
- ? nextIndex
- : lastIndex - 1;
- };
-
- return nextIndex;
- };
-
- private func applyGestureOffsets(
- forGesturePoint gesturePoint: CGPoint
- ) -> CGPoint {
-
- guard let computedGestureOffset = self.computedGestureOffset
- else { return gesturePoint };
-
- switch self.modalConfig.snapDirection {
- case .bottomToTop, .rightToLeft: return CGPoint(
- x: gesturePoint.x - computedGestureOffset.x,
- y: gesturePoint.y - computedGestureOffset.y
- );
-
- case .topToBottom, .leftToRight: return CGPoint(
- x: gesturePoint.x + computedGestureOffset.x,
- y: gesturePoint.y + computedGestureOffset.y
- );
- };
- };
-
- func debug(prefix: String? = ""){
- print(
- "\n - AdaptiveModalManager.debug - \(prefix ?? "N/A")"
- + "\n - modalView: \(self.modalView?.debugDescription ?? "N/A")"
- + "\n - modalView frame: \(self.modalView?.frame.debugDescription ?? "N/A")"
- + "\n - modalView superview: \(self.modalView?.superview.debugDescription ?? "N/A")"
- + "\n - targetView: \(self.targetView?.debugDescription ?? "N/A")"
- + "\n - targetView frame: \(self.targetView?.frame.debugDescription ?? "N/A")"
- + "\n - targetView superview: \(self.targetView?.superview.debugDescription ?? "N/A")"
- + "\n - modalViewController: \(self.modalViewController?.debugDescription ?? "N/A")"
- + "\n - targetViewController: \(self.targetViewController?.debugDescription ?? "N/A")"
- + "\n - currentInterpolationIndex: \(self.currentInterpolationIndex)"
- + "\n - currentOverrideInterpolationIndex: \(self.currentOverrideInterpolationIndex)"
- + "\n - currentConfigInterpolationIndex: \(self.currentConfigInterpolationIndex)"
- + "\n - currentInterpolationStep: computedRect \(self.currentInterpolationStep.computedRect)"
- + "\n - currentConfigInterpolationStep computedRect: \(self.currentConfigInterpolationStep.computedRect)"
- + "\n - currentOverrideInterpolationStep computedRect: \(self.currentOverrideInterpolationStep?.computedRect.debugDescription ?? "N/A")"
- + "\n - modalView gestureRecognizers: \(self.modalView?.gestureRecognizers.debugDescription ?? "N/A")"
- + "\n - isOverridingSnapPoints: \(self.isOverridingSnapPoints)"
- + "\n - shouldUseOverrideSnapPoints: \(self.shouldUseOverrideSnapPoints)"
- + "\n - shouldClearOverrideSnapPoints: \(self.shouldClearOverrideSnapPoints)"
- + "\n - layoutKeyboardValues: \(self.layoutKeyboardValues.debugDescription )"
- + "\n - presentationState: \(self.presentationState )"
- + "\n - interpolationSteps.computedRect: \(self.interpolationSteps.map({ $0.computedRect }))"
- + "\n - configInterpolationSteps.computedRect: \(self.configInterpolationSteps.map({ $0.computedRect }))"
- + "\n - overrideInterpolationPoints.computedRect: \((self.overrideInterpolationPoints ?? []).map({ $0.computedRect }))"
- + "\n - interpolationSteps.percent: \(self.interpolationSteps.map({ $0.percent }))"
- + "\n - interpolationSteps.backgroundVisualEffectIntensity: \(self.interpolationSteps.map({ $0.backgroundVisualEffectIntensity }))"
- + "\n - interpolationSteps.backgroundVisualEffect: \(self.interpolationSteps.map({ $0.backgroundVisualEffect }))"
- + "\n"
- );
- };
-
- // MARK: - Functions
- // -----------------
-
- private func computeSnapPoints(
- usingLayoutValueContext context: RNILayoutValueContext? = nil
- ) {
- let context = context ?? self.layoutValueContext;
-
- self.configInterpolationSteps = .Element.compute(
- usingModalConfig: self.modalConfig,
- layoutValueContext: context
- );
- };
-
- private func updateModal() {
- guard !self.isAnimating else { return };
-
- if let gesturePoint = self.gesturePoint {
- self.applyInterpolationToModal(forGesturePoint: gesturePoint);
-
- } else if self.currentInterpolationStep.computedRect != self.modalFrame {
- self.applyInterpolationToModal(
- forInputPercentValue: currentInterpolationStep.percent
- );
- };
- };
-
- private func getClosestSnapPoint(forCoord coord: CGFloat? = nil) -> (
- interpolationIndex: Int,
- interpolationPoint: AdaptiveModalInterpolationPoint,
- snapDistance: CGFloat
- ) {
- let inputRect = self.modalFrame!;
-
- let inputCoord = coord ??
- inputRect[keyPath: self.modalConfig.inputValueKeyForRect];
-
- let delta = self.interpolationSteps.map {
- let coord =
- $0.computedRect[keyPath: self.modalConfig.inputValueKeyForRect];
-
- return abs(inputCoord - coord);
- };
-
- let deltaSorted = delta.enumerated().sorted {
- $0.element < $1.element
- };
-
- let closestSnapPoint = deltaSorted.first!;
- let closestInterpolationIndex = closestSnapPoint.offset;
-
- let interpolationPoint = interpolationSteps[closestInterpolationIndex];
-
- return (
- interpolationIndex: closestInterpolationIndex,
- interpolationPoint: interpolationPoint,
- snapDistance: closestSnapPoint.element
- );
- };
-
- private func getClosestSnapPoint(
- forRect currentRect: CGRect
- ) -> (
- interpolationIndex: Int,
- snapPointConfig: AdaptiveModalSnapPointConfig,
- interpolationPoint: AdaptiveModalInterpolationPoint,
- snapDistance: CGFloat
- ) {
- let delta = interpolationSteps.map {
- CGRect(
- x: abs($0.computedRect.origin.x - currentRect.origin.x),
- y: abs($0.computedRect.origin.y - currentRect.origin.y),
- width : abs($0.computedRect.size.height - currentRect.size.height),
- height: abs($0.computedRect.size.height - currentRect.size.height)
- );
- };
-
- let deltaAvg = delta.map {
- ($0.origin.x + $0.origin.y + $0.width + $0.height) / 4;
- };
-
- let deltaAvgSorted = deltaAvg.enumerated().sorted {
- $0.element < $1.element;
- };
-
- let closestInterpolationPointIndex = deltaAvgSorted.first!.offset;
-
- let closestInterpolationPoint =
- interpolationSteps[closestInterpolationPointIndex];
-
- return (
- interpolationIndex: closestInterpolationPointIndex,
- snapPointConfig: self.modalConfig.snapPoints[closestInterpolationPointIndex],
- interpolationPoint: closestInterpolationPoint,
- snapDistance: deltaAvg[closestInterpolationPointIndex]
- );
- };
-
- private func animateModal(
- to interpolationPoint: AdaptiveModalInterpolationPoint,
- animator: UIViewPropertyAnimator? = nil,
- extraAnimation: (() -> Void)? = nil,
- completion: ((UIViewAnimatingPosition) -> Void)? = nil
- ) {
- guard let modalView = self.modalView else { return };
-
- let animator: UIViewPropertyAnimator = animator ?? {
- let gestureInitialVelocity = self.gestureInitialVelocity;
- let snapAnimationConfig = self.modalConfig.snapAnimationConfig;
-
- let springTiming = UISpringTimingParameters(
- dampingRatio: snapAnimationConfig.springDampingRatio,
- initialVelocity: gestureInitialVelocity
- );
-
- return UIViewPropertyAnimator(
- duration: snapAnimationConfig.springAnimationSettlingTime,
- timingParameters: springTiming
- );
- }();
-
- self.modalAnimator?.stopAnimation(true);
- self.modalAnimator = animator;
-
- animator.addAnimations {
- extraAnimation?();
-
- interpolationPoint.apply(
- toModalView: modalView,
- toModalWrapperView: self.modalWrapperView,
- toModalWrapperTransformView: self.modalWrapperTransformView,
- toModalWrapperShadowView: self.modalWrapperShadowView,
- toDummyModalView: self.dummyModalView,
- toModalBackgroundView: self.modalBackgroundView,
- toBackgroundView: self.backgroundDimmingView,
- toModalBackgroundEffectView: self.modalBackgroundVisualEffectView,
- toBackgroundVisualEffectView: self.backgroundVisualEffectView
- );
- };
-
- if let completion = completion {
- animator.addCompletion(completion);
- };
-
- animator.addCompletion { _ in
- self.endDisplayLink();
- self.modalAnimator = nil;
- };
-
- animator.startAnimation();
- self.startDisplayLink();
- };
-
- // MARK: - Functions - Handlers
- // ----------------------------
-
- @objc private func onDragPanGesture(_ sender: UIPanGestureRecognizer) {
- let gesturePoint = sender.location(in: self.targetView);
- self.gesturePoint = gesturePoint;
-
- let gestureVelocity = sender.velocity(in: self.targetView);
- self.gestureVelocity = gestureVelocity;
-
- switch sender.state {
- case .began:
- self.gestureInitialPoint = gesturePoint;
-
- case .changed:
- self.modalAnimator?.stopAnimation(true);
- self.applyInterpolationToModal(forGesturePoint: gesturePoint);
- self.notifyOnModalWillSnap();
-
- case .cancelled, .ended:
- guard self.enableSnapping else {
- self.clearGestureValues();
- return;
- };
-
- let gestureFinalPointRaw = self.gestureFinalPoint ?? gesturePoint;
-
- let gestureFinalPoint =
- self.applyGestureOffsets(forGesturePoint: gestureFinalPointRaw);
-
- self.snapToClosestSnapPoint(forPoint: gestureFinalPoint) {
- self.notifyOnModalDidSnap();
- };
-
- self.clearGestureValues();
-
- default:
- break;
- };
- };
-
- @objc private func onKeyboardWillShow(notification: NSNotification) {
- guard let keyboardValues = RNILayoutKeyboardValues(fromNotification: notification)
- else { return };
-
- if self.presentationState != .dismissing {
- self.layoutKeyboardValues = keyboardValues;
- self.computeSnapPoints();
- };
-
-
-
- self.animateModal(
- to: self.currentInterpolationStep,
- animator: keyboardValues.keyboardAnimator
- );
-
- print(
- "onKeyboardWillShow",
- "\n - frameBegin:", keyboardValues.frameBegin,
- "\n - frameEnd:", keyboardValues.frameEnd,
- "\n - animationDuration:", keyboardValues.animationDuration,
- "\n - animationCurve:", keyboardValues.animationCurve,
- "\n - notification:", notification,
- "\n"
- );
- };
-
- @objc private func onKeyboardDidShow(notification: NSNotification) {
- guard let keyboardValues = RNILayoutKeyboardValues(fromNotification: notification)
- else { return };
-
- self.layoutKeyboardValues = keyboardValues;
-
- print(
- "onKeyboardDidShow",
- "\n - frameBegin:", keyboardValues.frameBegin,
- "\n - frameEnd:", keyboardValues.frameEnd,
- "\n - animationDuration:", keyboardValues.animationDuration,
- "\n - animationCurve:", keyboardValues.animationCurve,
- "\n - notification:", notification,
- "\n"
- );
- };
-
- @objc private func onKeyboardWillHide(notification: NSNotification) {
- guard let keyboardValues = RNILayoutKeyboardValues(fromNotification: notification)
- else { return };
-
- self.debug(prefix: "onKeyboardWillHide - pre");
-
- self.clearLayoutKeyboardValues();
- self.computeSnapPoints();
-
-
-
- self.animateModal(
- to: self.currentInterpolationStep,
- animator: keyboardValues.keyboardAnimator
- );
-
- print(
- "onKeyboardWillHide",
- "\n - frameBegin:", keyboardValues.frameBegin,
- "\n - frameEnd:", keyboardValues.frameEnd,
- "\n - animationDuration:", keyboardValues.animationDuration,
- "\n - animationCurve:", keyboardValues.animationCurve,
- "\n - notification:", notification,
- "\n"
- );
- };
-
- @objc private func onKeyboardDidHide(notification: NSNotification) {
- guard let keyboardValues = RNILayoutKeyboardValues(fromNotification: notification)
- else { return };
-
- self.layoutKeyboardValues = keyboardValues;
-
- print(
- "onKeyboardDidHide",
- "\n - frameBegin:", keyboardValues.frameBegin,
- "\n - frameEnd:", keyboardValues.frameEnd,
- "\n - animationDuration:", keyboardValues.animationDuration,
- "\n - animationCurve:", keyboardValues.animationCurve,
- "\n - notification:", notification,
- "\n"
- );
- };
-
- @objc private func onKeyboardWillChange(notification: NSNotification) {
- guard let keyboardValues = RNILayoutKeyboardValues(fromNotification: notification)
- else { return };
-
- if self.presentationState == .dismissing {
- self.layoutKeyboardValues = keyboardValues;
- self.computeSnapPoints();
- };
-
- print(
- "onKeyboardWillChange",
- "\n - frameBegin:", keyboardValues.frameBegin,
- "\n - frameEnd:", keyboardValues.frameEnd,
- "\n - animationDuration:", keyboardValues.animationDuration,
- "\n - animationCurve:", keyboardValues.animationCurve,
- "\n - notification:", notification,
- "\n"
- );
- };
-
- @objc private func onKeyboardDidChange(notification: NSNotification) {
- guard let keyboardValues = RNILayoutKeyboardValues(fromNotification: notification)
- else { return };
-
- self.layoutKeyboardValues = keyboardValues;
- self.computeSnapPoints();
-
- print(
- "onKeyboardDidChange",
- "\n - frameBegin:", keyboardValues.frameBegin,
- "\n - frameEnd:", keyboardValues.frameEnd,
- "\n - animationDuration:", keyboardValues.animationDuration,
- "\n - animationCurve:", keyboardValues.animationCurve,
- "\n - notification:", notification,
- "\n"
- );
- };
-
- // MARK: - Functions - DisplayLink-Related
- // ---------------------------------------
-
- private func startDisplayLink() {
- let displayLink = CADisplayLink(
- target: self,
- selector: #selector(self.onDisplayLinkTick(displayLink:))
- );
-
- self.displayLink = displayLink;
-
- displayLink.preferredFrameRateRange =
- CAFrameRateRange(minimum: 60, maximum: 120);
-
- displayLink.add(to: .current, forMode: .common);
- };
-
- private func endDisplayLink() {
- self.displayLink?.invalidate();
- };
-
- @objc private func onDisplayLinkTick(displayLink: CADisplayLink) {
- guard let dummyModalViewPresentationLayer =
- self.dummyModalView.layer.presentation(),
- let interpolationRangeMaxInput = self.interpolationRangeMaxInput
- else { return };
-
- if self.isSwiping {
- self.endDisplayLink();
- };
-
- if self.displayLinkStartTimestamp == nil {
- self.displayLinkStartTimestamp = displayLink.timestamp;
- };
-
- let prevModalFrame = self.prevModalFrame;
- let nextModalFrame = dummyModalViewPresentationLayer.frame;
-
- guard prevModalFrame != nextModalFrame else { return };
-
- let inputCoord =
- nextModalFrame[keyPath: self.modalConfig.inputValueKeyForRect];
-
- let percent = inputCoord / interpolationRangeMaxInput;
-
- let percentAdj = self.modalConfig.shouldInvertPercent
- ? AdaptiveModalUtilities.invertPercent(percent)
- : percent;
-
- self.applyInterpolationToBackgroundVisualEffect(
- forInputPercentValue: percentAdj
- );
-
- self.applyInterpolationToModalBackgroundVisualEffect(
- forInputPercentValue: percentAdj
- );
-
- self.prevModalFrame = nextModalFrame;
- };
-
- // MARK: - Event Functions
- // -----------------------
-
- private func notifyOnModalWillSnap() {
- let interpolationSteps = self.interpolationSteps!;
- let prevIndex = self.currentInterpolationIndex;
-
- self.debug(prefix: "notifyOnModalWillSnap");
-
- let nextIndexRaw: Int = {
- guard let nextIndex = self.nextInterpolationIndex else {
- let closestSnapPoint = self.getClosestSnapPoint();
- return closestSnapPoint.interpolationPoint.snapPointIndex;
- };
-
- return nextIndex;
- }();
-
- let nextIndex = self.adjustInterpolationIndex(for: nextIndexRaw);
- let nextPoint = self.interpolationSteps[nextIndex];
-
- guard prevIndex != nextIndex else { return };
-
- self.eventDelegate?.notifyOnModalWillSnap(
- prevSnapPointIndex: interpolationSteps[prevIndex].snapPointIndex,
- nextSnapPointIndex: interpolationSteps[nextIndex].snapPointIndex,
- snapPointConfig: self.modalConfig.snapPoints[nextPoint.snapPointIndex],
- interpolationPoint: nextPoint
- );
-
- let shouldDismissOnSnapToUnderShootSnapPoint =
- nextIndex == 0 && self.shouldDismissModalOnSnapToUnderShootSnapPoint;
-
- let shouldDismissOnSnapToOverShootSnapPoint =
- nextIndex == self.modalConfig.overshootSnapPointIndex &&
- self.shouldDismissModalOnSnapToOverShootSnapPoint;
-
- let shouldDismiss =
- shouldDismissOnSnapToUnderShootSnapPoint ||
- shouldDismissOnSnapToOverShootSnapPoint;
-
- let isPresenting = self.currentInterpolationIndex == 0 && nextIndex == 1;
-
- if shouldDismiss {
- self.notifyOnModalWillHide();
-
- } else if isPresenting {
- self.notifyOnModalWillShow();
- };
- };
-
- private func notifyOnModalDidSnap() {
- if self.shouldClearOverrideSnapPoints {
- self.cleanupSnapPointOverride();
- };
-
- //self.debug(prefix: "notifyOnModalDidSnap")
-
- self.eventDelegate?.notifyOnModalDidSnap(
- prevSnapPointIndex:
- self.interpolationSteps[self.prevInterpolationIndex].snapPointIndex,
-
- currentSnapPointIndex:
- self.interpolationSteps[self.currentInterpolationIndex].snapPointIndex,
-
- snapPointConfig: self.currentSnapPointConfig,
- interpolationPoint: self.currentInterpolationStep
- );
-
- let shouldDismissOnSnapToUnderShootSnapPoint =
- self.currentInterpolationIndex == 0 &&
- self.shouldDismissModalOnSnapToUnderShootSnapPoint;
-
- let shouldDismissOnSnapToOverShootSnapPoint =
- self.currentInterpolationIndex == self.modalConfig.overshootSnapPointIndex &&
- self.shouldDismissModalOnSnapToOverShootSnapPoint;
-
- let shouldDismiss =
- shouldDismissOnSnapToUnderShootSnapPoint ||
- shouldDismissOnSnapToOverShootSnapPoint;
-
- let wasPresented =
- self.currentInterpolationIndex == 1 &&
- self.prevInterpolationIndex == 0;
-
- if shouldDismiss {
- self.notifyOnModalDidHide();
-
- } else if wasPresented {
- self.notifyOnModalDidShow();
- };
- };
-
- private func notifyOnModalWillShow(){
- // wip
- };
-
- private func notifyOnModalDidShow(){
- // wip
- //UIView.animate(withDuration: 1){
- // self.targetViewController?.view.transform = .init(scaleX: 0.5, y: 0.5);
- //};
- };
-
- private func notifyOnModalWillHide(){
- // wip
- //UIView.animate(withDuration: 1){
- // self.targetViewController?.view.transform = .identity;
- //};
- };
-
- private func notifyOnModalDidHide(){
- self.cleanup();
- self.modalViewController?.dismiss(animated: false);
- };
-
- // MARK: - Functions
- // -----------------
-
- func snapTo(
- interpolationIndex nextIndex: Int,
- interpolationPoint: AdaptiveModalInterpolationPoint? = nil,
- completion: (() -> Void)? = nil
- ) {
- self.nextInterpolationIndex = nextIndex;
-
- let nextInterpolationPoint = interpolationPoint
- ?? self.interpolationSteps[nextIndex];
-
- self.notifyOnModalWillSnap();
-
- self.animateModal(to: nextInterpolationPoint, completion: { _ in
- self.currentInterpolationIndex = nextIndex;
- self.nextInterpolationIndex = nil;
-
- self.notifyOnModalDidSnap();
- completion?();
- });
- };
-
- func snapToClosestSnapPoint(
- forPoint point: CGPoint,
- completion: (() -> Void)? = nil
- ) {
- let coord = point[keyPath: self.modalConfig.inputValueKeyForPoint];
- let closestSnapPoint = self.getClosestSnapPoint(forCoord: coord);
-
- let nextInterpolationIndex =
- self.adjustInterpolationIndex(for: closestSnapPoint.interpolationIndex);
-
- let nextInterpolationPoint =
- self.interpolationSteps[nextInterpolationIndex];
-
- let prevFrame = self.modalFrame;
- let nextFrame = nextInterpolationPoint.computedRect;
-
- guard prevFrame != nextFrame else { return };
-
- self.snapTo(
- interpolationIndex: nextInterpolationIndex,
- completion: completion
- );
- };
-
- func showModal(completion: (() -> Void)? = nil) {
- let nextIndex = self.modalConfig.initialSnapPointIndex;
- self.snapTo(interpolationIndex: nextIndex, completion: completion);
- };
-
- func hideModal(
- useInBetweenSnapPoints: Bool = false,
- completion: (() -> Void)? = nil
- ){
-
- let nextIndex = 0;
-
- self.debug(prefix: "hideModal");
-
- if useInBetweenSnapPoints {
- self.snapTo(interpolationIndex: nextIndex, completion: completion);
-
- } else {
- self.computeSnapPoints();
-
- let currentSnapPointConfig = self.currentSnapPointConfig;
- let currentInterpolationStep = self.currentInterpolationStep;
-
- let undershootSnapPointConfig = AdaptiveModalSnapPointConfig(
- fromSnapPointPreset: self.modalConfig.undershootSnapPoint,
- fromBaseLayoutConfig: currentSnapPointConfig.snapPoint
- );
-
- var undershootInterpolationPoint = AdaptiveModalInterpolationPoint(
- usingModalConfig: self.modalConfig,
- snapPointIndex: nextIndex,
- layoutValueContext: self.layoutValueContext,
- snapPointConfig: undershootSnapPointConfig
- );
-
- undershootInterpolationPoint.modalCornerRadius =
- currentInterpolationStep.modalCornerRadius;
-
- self.snapTo(
- interpolationIndex: nextIndex,
- interpolationPoint: undershootInterpolationPoint,
- completion: completion
- );
- };
- };
-
- // MARK: - User-Invoked Functions
- // ------------------------------
-
- public func prepareForPresentation(
- modalView: UIView? = nil,
- targetView: UIView? = nil,
- shouldForceReset: Bool = false
- ) {
- guard let modalView = modalView ?? self.modalView,
- let targetView = targetView ?? self.targetView
- else { return };
-
- let didViewsChange =
- modalView !== self.modalView || targetView !== self.targetView;
-
- let shouldReset =
- !self.didTriggerSetup || didViewsChange || shouldForceReset;
-
- if shouldReset {
- self.cleanup();
- };
-
- self.modalView = modalView;
- self.targetView = targetView;
-
- self.computeSnapPoints();
-
- if shouldReset {
- self.setupInitViews();
- self.setupDummyModalView();
- self.setupGestureHandler();
-
- self.setupAddViews();
- self.setupViewConstraints();
- self.setupObservers();
- };
-
- self.updateModal();
- self.didTriggerSetup = true;
- };
-
- public func prepareForPresentation(
- viewControllerToPresent presentingVC: UIViewController,
- presentingViewController presentedVC: UIViewController
- ) {
- self.modalViewController = presentingVC;
- self.modalView = presentingVC.view;
-
- self.setupViewControllers();
- };
-
- public func notifyDidLayoutSubviews() {
- self.computeSnapPoints();
- self.updateModal();
- };
-
- public func snapToClosestSnapPoint(completion: (() -> Void)? = nil) {
- let closestSnapPoint = self.getClosestSnapPoint(forRect: self.modalFrame);
-
- let nextInterpolationIndex =
- self.adjustInterpolationIndex(for: closestSnapPoint.interpolationIndex);
-
- let nextInterpolationPoint =
- self.interpolationSteps[nextInterpolationIndex];
-
- let prevFrame = self.modalFrame;
- let nextFrame = nextInterpolationPoint.computedRect;
-
- guard nextInterpolationIndex != self.currentInterpolationIndex,
- prevFrame != nextFrame
- else { return };
-
- self.snapTo(interpolationIndex: nextInterpolationIndex) {
- completion?();
- };
- };
-
- public func snapToCurrentIndex(completion: (() -> Void)? = nil) {
- self.snapTo(
- interpolationIndex: self.currentInterpolationIndex,
- completion: completion
- );
- };
-
- public func presentModal(
- viewControllerToPresent modalVC: UIViewController,
- presentingViewController targetVC: UIViewController,
- animated: Bool = true,
- completion: (() -> Void)? = nil
- ) {
- self.prepareForPresentation(
- viewControllerToPresent: modalVC,
- presentingViewController: targetVC
- );
-
- targetVC.present(
- modalVC,
- animated: animated,
- completion: completion
- );
- };
-
- public func snapTo(
- snapPointConfig overrideSnapPointConfig: AdaptiveModalSnapPointConfig,
- overshootSnapPointPreset: AdaptiveModalSnapPointPreset? = nil,
- fallbackSnapPointKey: AdaptiveModalSnapPointConfig.SnapPointKey? = nil,
- animated: Bool = true,
- completion: (() -> Void)? = nil
- ) {
- self.cleanupSnapPointOverride();
-
- let prevInterpolationPoints: [AdaptiveModalInterpolationPoint] = {
- let overrideInterpolationPoint = AdaptiveModalInterpolationPoint(
- usingModalConfig: self.modalConfig,
- snapPointIndex: 1,
- layoutValueContext: self.layoutValueContext,
- snapPointConfig: overrideSnapPointConfig
- );
-
- let items = self.configInterpolationSteps.filter {
- $0.percent < overrideInterpolationPoint.percent;
- };
-
- guard items.count > 0 else {
- return [self.configInterpolationSteps.first!];
- };
-
- return items;
- }();
-
- let prevSnapPointConfigs = prevInterpolationPoints.map {
- self.modalConfig.snapPoints[$0.snapPointIndex];
- };
-
- let overshootSnapPointPreset = overshootSnapPointPreset
- ?? .getDefaultOvershootSnapPoint(forDirection: modalConfig.snapDirection);
-
- let overshootSnapPointConfig = AdaptiveModalSnapPointConfig(
- fromSnapPointPreset: overshootSnapPointPreset,
- fromBaseLayoutConfig: overrideSnapPointConfig.snapPoint
- );
-
- let snapPoints = prevSnapPointConfigs + [
- overrideSnapPointConfig,
- overshootSnapPointConfig,
- ];
-
- var interpolationPoints = prevInterpolationPoints.enumerated().map {
- var copy = $0.element;
- copy.snapPointIndex = $0.offset;
-
- return copy;
- };
-
- let nextInterpolationPoint = AdaptiveModalInterpolationPoint(
- usingModalConfig: self.modalConfig,
- snapPointIndex: interpolationPoints.count,
- layoutValueContext: self.layoutValueContext,
- snapPointConfig: overrideSnapPointConfig,
- prevInterpolationPoint: self.currentInterpolationStep
- );
-
- interpolationPoints.append(nextInterpolationPoint);
-
- let nextInterpolationPointIndex = interpolationPoints.count - 1;
-
- let overshootSnapPoint = AdaptiveModalInterpolationPoint(
- usingModalConfig: self.modalConfig,
- snapPointIndex: interpolationPoints.count,
- layoutValueContext: self.layoutValueContext,
- snapPointConfig: overshootSnapPointConfig,
- prevInterpolationPoint: self.currentInterpolationStep
- );
-
- interpolationPoints.append(overshootSnapPoint);
-
- self.isOverridingSnapPoints = true;
- self.overrideSnapPoints = snapPoints;
- self.overrideInterpolationPoints = interpolationPoints;
- self.currentOverrideInterpolationIndex = nextInterpolationPointIndex;
-
- print(
- "snapTo",
- "\n - prevInterpolationPoints:", prevInterpolationPoints.count,
- "\n - interpolationPoints:", interpolationPoints.count,
- "\n - nextInterpolationPointIndex:", nextInterpolationPointIndex
- );
-
- self.debug(prefix: "snapTo");
-
-
- self.animateModal(to: nextInterpolationPoint, completion: { _ in
- self.debug(prefix: "snapTo - completion");
- completion?();
- });
- };
-};
diff --git a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalPresentationController.swift b/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalPresentationController.swift
deleted file mode 100644
index 35ec57f2..00000000
--- a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalPresentationController.swift
+++ /dev/null
@@ -1,38 +0,0 @@
-//
-// AdaptiveModalPresentationController.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 6/8/23.
-//
-
-import UIKit
-
-class AdaptiveModalPresentationController: UIPresentationController {
-
- weak var modalManager: AdaptiveModalManager!;
-
- init(
- presentedViewController: UIViewController,
- presenting presentingViewController: UIViewController?,
- modalManager: AdaptiveModalManager
- ) {
- super.init(
- presentedViewController: presentedViewController,
- presenting: presentingViewController
- );
-
- self.modalManager = modalManager;
- };
-
- override func presentationTransitionWillBegin() {
- };
-
- override func presentationTransitionDidEnd(_ completed: Bool) {
- };
-
- override func viewWillTransition(
- to size: CGSize,
- with coordinator: UIViewControllerTransitionCoordinator
- ) {
- }
-};
diff --git a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalRangePropertyAnimator.swift b/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalRangePropertyAnimator.swift
deleted file mode 100644
index b7bca622..00000000
--- a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalRangePropertyAnimator.swift
+++ /dev/null
@@ -1,123 +0,0 @@
-//
-// AdaptiveModalPropertyAnimator.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 5/31/23.
-//
-
-import UIKit
-
-
-public struct AdaptiveModalRangePropertyAnimator {
-
- // MARK: - Properties
- // ------------------
-
- public var interpolationRangeStart: AdaptiveModalInterpolationPoint;
- public var interpolationRangeEnd: AdaptiveModalInterpolationPoint;
-
- public let interpolationOutputKey:
- KeyPath?;
-
- public var animator: UIViewPropertyAnimator;
-
- private weak var component: AnyObject?;
-
- private var range: [AdaptiveModalInterpolationPoint] {[
- self.interpolationRangeStart,
- self.interpolationRangeEnd
- ]};
-
- // MARK: - Init
- // ------------
-
- public init(
- interpolationRangeStart: AdaptiveModalInterpolationPoint,
- interpolationRangeEnd: AdaptiveModalInterpolationPoint,
- forComponent component: T,
- interpolationOutputKey:
- KeyPath? = nil,
- animation: @escaping (
- _ component: T,
- _ interpolationPoint: AdaptiveModalInterpolationPoint
- ) -> Void
- ) {
- self.interpolationRangeStart = interpolationRangeStart;
- self.interpolationRangeEnd = interpolationRangeEnd;
-
- self.interpolationOutputKey = interpolationOutputKey;
- self.component = component;
-
- let animator = UIViewPropertyAnimator(
- duration: 0,
- curve: .linear
- );
-
- animator.addAnimations {
- animation(component, interpolationRangeEnd);
- };
-
- self.animator = animator;
- };
-
- // MARK: - Functions
- // -----------------
-
- public func didRangeChange(
- interpolationRangeStart: AdaptiveModalInterpolationPoint,
- interpolationRangeEnd: AdaptiveModalInterpolationPoint
- ) -> Bool {
- let didChange =
- interpolationRangeStart != self.interpolationRangeStart ||
- interpolationRangeEnd != self.interpolationRangeEnd;
-
- return didChange;
- };
-
- public mutating func update(
- interpolationRangeStart: AdaptiveModalInterpolationPoint,
- interpolationRangeEnd: AdaptiveModalInterpolationPoint
- ){
- let didChange =
- interpolationRangeStart != self.interpolationRangeStart ||
- interpolationRangeEnd != self.interpolationRangeEnd;
-
- guard didChange else { return };
-
- self.interpolationRangeStart = interpolationRangeStart;
- self.interpolationRangeEnd = interpolationRangeEnd;
- };
-
- public func setFractionComplete(forPercent percent: CGFloat) {
- self.animator.fractionComplete = percent;
- };
-
- public func setFractionComplete(
- forInputPercentValue inputPercentValue: CGFloat
- ) {
- let rangeOutput: [CGFloat] = {
- if let interpolationOutputKey = self.interpolationOutputKey {
- return range.map {
- $0[keyPath: interpolationOutputKey]
- }
- };
-
- return [0, 1];
- }();
-
- let percent = AdaptiveModalUtilities.interpolate(
- inputValue: inputPercentValue,
- rangeInput: range.map {
- $0.percent
- },
- rangeOutput: rangeOutput
- );
-
- guard let percent = percent else { return };
- self.setFractionComplete(forPercent: percent);
- };
-
- public func clear(){
- self.animator.stopAnimation(true);
- };
-};
diff --git a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalSnapAnimationConfig.swift b/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalSnapAnimationConfig.swift
deleted file mode 100644
index fcb983c6..00000000
--- a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalSnapAnimationConfig.swift
+++ /dev/null
@@ -1,20 +0,0 @@
-//
-// AdaptiveModalSnapAnimationConfig.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 5/27/23.
-//
-
-import UIKit
-
-public struct AdaptiveModalSnapAnimationConfig {
- public static let `default`: Self = .init(
- springDampingRatio: 0.9,
- springAnimationSettlingTime: 0.4,
- maxGestureVelocity: 15
- );
-
- public let springDampingRatio: CGFloat;
- public let springAnimationSettlingTime: CGFloat;
- public let maxGestureVelocity: CGFloat;
-};
diff --git a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalSnapPoint.swift b/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalSnapPoint.swift
deleted file mode 100644
index 711dbb8a..00000000
--- a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalSnapPoint.swift
+++ /dev/null
@@ -1,112 +0,0 @@
-//
-// AdaptiveModalSnapPoint.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 5/23/23.
-//
-
-import UIKit
-
-public struct AdaptiveModalSnapPointConfig {
-
- // MARK: Types
- // -----------
-
- public enum SnapPointKey: Equatable {
- case undershootPoint, overshootPoint, unspecified;
- case string(_ stringKey: String);
- case index(_ indexKey: Int);
- };
-
- // MARK: Properties
- // ----------------
-
- public let key: SnapPointKey;
-
- public let snapPoint: RNILayout;
- public let animationKeyframe: AdaptiveModalAnimationConfig?;
-
- // MARK: Init
- // ----------
-
- public init(
- key: SnapPointKey = .unspecified,
- snapPoint: RNILayout,
- animationKeyframe: AdaptiveModalAnimationConfig? = nil
- ) {
- self.key = key;
- self.snapPoint = snapPoint;
- self.animationKeyframe = animationKeyframe;
- };
-
- public init(
- key: SnapPointKey = .unspecified,
- fromSnapPointPreset snapPointPreset: AdaptiveModalSnapPointPreset,
- fromBaseLayoutConfig baseLayoutConfig: RNILayout
- ) {
- let snapPointLayoutPreset = snapPointPreset.layoutPreset;
-
- let snapPointLayout = snapPointLayoutPreset.getLayoutConfig(
- fromBaseLayoutConfig: baseLayoutConfig
- );
-
- self.key = key;
- self.snapPoint = snapPointLayout;
- self.animationKeyframe = snapPointPreset.animationKeyframe;
- };
-
- public init(
- fromBase base: Self,
- newKey: SnapPointKey,
- newSnapPoint: RNILayout? = nil,
- newAnimationKeyframe: AdaptiveModalAnimationConfig? = nil
- ){
- self.snapPoint = newSnapPoint ?? base.snapPoint;
- self.animationKeyframe = newAnimationKeyframe ?? base.animationKeyframe;
-
- self.key = base.key == .unspecified
- ? newKey
- : base.key;
- };
-};
-
-// MARK: Helpers
-// -------------
-
-extension AdaptiveModalSnapPointConfig {
-
- static func deriveSnapPoints(
- undershootSnapPoint: AdaptiveModalSnapPointPreset,
- inBetweenSnapPoints: [AdaptiveModalSnapPointConfig],
- overshootSnapPoint: AdaptiveModalSnapPointPreset
- ) -> [AdaptiveModalSnapPointConfig] {
-
- var items: [AdaptiveModalSnapPointConfig] = [];
-
- if let snapPointFirst = inBetweenSnapPoints.first {
- let initialSnapPointConfig = AdaptiveModalSnapPointConfig(
- key: .undershootPoint,
- fromSnapPointPreset: undershootSnapPoint,
- fromBaseLayoutConfig: snapPointFirst.snapPoint
- );
-
- items.append(initialSnapPointConfig);
- };
-
- items += inBetweenSnapPoints.map {
- .init(fromBase: $0, newKey: .index(items.count));
- };
-
- if let snapPointLast = inBetweenSnapPoints.last {
- let overshootSnapPointConfig = AdaptiveModalSnapPointConfig(
- key: .overshootPoint,
- fromSnapPointPreset: overshootSnapPoint,
- fromBaseLayoutConfig: snapPointLast.snapPoint
- );
-
- items.append(overshootSnapPointConfig);
- };
-
- return items;
- };
-};
diff --git a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalSnapPointPreset.swift b/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalSnapPointPreset.swift
deleted file mode 100644
index a93b9d6c..00000000
--- a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalSnapPointPreset.swift
+++ /dev/null
@@ -1,56 +0,0 @@
-//
-// AdaptiveModalSnapPointPreset.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 5/31/23.
-//
-
-import Foundation
-
-public struct AdaptiveModalSnapPointPreset {
-
- public let layoutPreset: RNILayoutPreset;
- public let animationKeyframe: AdaptiveModalAnimationConfig?;
-
- init(
- layoutPreset: RNILayoutPreset,
- animationKeyframe: AdaptiveModalAnimationConfig? = nil
- ) {
- self.layoutPreset = layoutPreset;
- self.animationKeyframe = animationKeyframe;
- };
-};
-
-extension AdaptiveModalSnapPointPreset {
- static func getDefaultOvershootSnapPoint(
- forDirection direction: AdaptiveModalConfig.Direction
- ) -> Self {
-
- let layoutPreset: RNILayoutPreset = {
- switch direction {
- case .bottomToTop: return .edgeTop;
- case .topToBottom: return .edgeBottom;
- case .leftToRight: return .edgeLeft;
- case .rightToLeft: return .edgeRight;
- };
- }();
-
- return self.init(layoutPreset: layoutPreset);
- };
-
- static func getDefaultUnderShootSnapPoint(
- forDirection direction: AdaptiveModalConfig.Direction
- ) -> Self {
-
- let layoutPreset: RNILayoutPreset = {
- switch direction {
- case .bottomToTop: return .offscreenBottom;
- case .topToBottom: return .offscreenTop;
- case .leftToRight: return .offscreenLeft;
- case .rightToLeft: return .offscreenRight;
- };
- }();
-
- return self.init(layoutPreset: layoutPreset);
- };
-};
diff --git a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalUtilities.swift b/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalUtilities.swift
deleted file mode 100644
index 9b37bbe5..00000000
--- a/experiments/swift-programmatic-modal/AdaptiveModal/AdaptiveModalUtilities.swift
+++ /dev/null
@@ -1,214 +0,0 @@
-//
-// AdaptiveModalManager+Helpers.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 5/27/23.
-//
-
-import UIKit
-
-class AdaptiveModalUtilities {
-
- static func interpolate(
- inputValue : CGFloat,
- rangeInput : [CGFloat],
- rangeOutput : [CGFloat],
- shouldClampMin: Bool = false,
- shouldClampMax: Bool = false
- ) -> CGFloat? {
-
- guard rangeInput.count == rangeOutput.count,
- rangeInput.count >= 2
- else { return nil };
-
- if shouldClampMin, inputValue < rangeInput.first! {
- return rangeOutput.first!;
- };
-
- if shouldClampMax, inputValue > rangeInput.last! {
- return rangeOutput.last!;
- };
-
- // A - Extrapolate Left
- if inputValue < rangeInput.first! {
-
- let rangeInputStart = rangeInput.first!;
- let rangeOutputStart = rangeOutput.first!;
-
- let delta1 = rangeInputStart - inputValue;
- let percent = delta1 / rangeInputStart;
-
- // extrapolated "range output end"
- let rangeOutputEnd = rangeOutputStart - (rangeOutput[1] - rangeOutputStart);
-
- let interpolatedValue = RNIAnimator.EasingFunctions.lerp(
- valueStart: rangeOutputEnd,
- valueEnd : rangeOutputStart,
- percent : percent
- );
-
- let delta2 = interpolatedValue - rangeOutputEnd;
- return rangeOutputStart - delta2;
- };
-
- let (rangeStartIndex, rangeEndIndex): (Int, Int) = {
- let rangeInputEnumerated = rangeInput.enumerated();
-
- let match = rangeInputEnumerated.first {
- guard let nextValue = rangeInput[safeIndex: $0.offset + 1]
- else { return false };
-
- return inputValue >= $0.element && inputValue < nextValue;
- };
-
- // B - Interpolate Between
- if let match = match {
- let rangeStartIndex = match.offset;
- return (rangeStartIndex, rangeStartIndex + 1);
- };
-
- let lastIndex = rangeInput.count - 1;
- let secondToLastIndex = rangeInput.count - 2;
-
- // C - Extrapolate Right
- return (secondToLastIndex, lastIndex);
- }();
-
- guard let rangeInputStart = rangeInput [safeIndex: rangeStartIndex],
- let rangeInputEnd = rangeInput [safeIndex: rangeEndIndex ],
- let rangeOutputStart = rangeOutput[safeIndex: rangeStartIndex],
- let rangeOutputEnd = rangeOutput[safeIndex: rangeEndIndex ]
- else { return nil };
-
- let inputValueAdj = inputValue - rangeInputStart;
- let rangeInputEndAdj = rangeInputEnd - rangeInputStart;
-
- let progress = inputValueAdj / rangeInputEndAdj;
-
- return RNIAnimator.EasingFunctions.lerp(
- valueStart: rangeOutputStart,
- valueEnd : rangeOutputEnd,
- percent : progress
- );
- };
-
- static func interpolateColor(
- inputValue : CGFloat,
- rangeInput : [CGFloat],
- rangeOutput : [UIColor],
- shouldClampMin: Bool = false,
- shouldClampMax: Bool = false
- ) -> UIColor? {
- var rangeR: [CGFloat] = [];
- var rangeG: [CGFloat] = [];
- var rangeB: [CGFloat] = [];
- var rangeA: [CGFloat] = [];
-
- for color in rangeOutput {
- let rgba = color.rgba;
-
- rangeR.append(rgba.r);
- rangeG.append(rgba.g);
- rangeB.append(rgba.b);
- rangeA.append(rgba.a);
- };
-
-
- let nextR = Self.interpolate(
- inputValue: inputValue,
- rangeInput: rangeInput,
- rangeOutput: rangeR,
- shouldClampMin: shouldClampMin,
- shouldClampMax: shouldClampMax
- );
-
- let nextG = Self.interpolate(
- inputValue: inputValue,
- rangeInput: rangeInput,
- rangeOutput: rangeG,
- shouldClampMin: shouldClampMin,
- shouldClampMax: shouldClampMax
- );
-
- let nextB = Self.interpolate(
- inputValue: inputValue,
- rangeInput: rangeInput,
- rangeOutput: rangeB,
- shouldClampMin: shouldClampMin,
- shouldClampMax: shouldClampMax
- );
-
- let nextA = Self.interpolate(
- inputValue: inputValue,
- rangeInput: rangeInput,
- rangeOutput: rangeA,
- shouldClampMin: shouldClampMin,
- shouldClampMax: shouldClampMax
- );
-
- guard let nextR = nextR,
- let nextG = nextG,
- let nextB = nextB,
- let nextA = nextA
- else { return nil };
-
- return UIColor(
- red : nextR,
- green: nextG,
- blue : nextB,
- alpha: nextA
- );
- };
-
- static func computeFinalPosition(
- position: CGFloat,
- initialVelocity: CGFloat,
- decelerationRate: CGFloat = UIScrollView.DecelerationRate.normal.rawValue
- ) -> CGFloat {
- let pointPerSecond = abs(initialVelocity) / 1000.0;
- let accelerationRate = 1 - decelerationRate;
-
- let displacement = (pointPerSecond * decelerationRate) / accelerationRate;
-
- return initialVelocity > 0
- ? position + displacement
- : position - displacement;
- };
-
- static func invertPercent(_ percent: CGFloat) -> CGFloat {
- if percent >= 0 && percent <= 1 {
- return 1 - percent;
- };
-
- if percent < 0 {
- return abs(percent) + 1;
- };
-
- // percent > 1
- return -(percent - 1);
- };
-
- static func unwrapAndSetProperty(
- forObject object: O?,
- forPropertyKey propertyKey: WritableKeyPath,
- withValue value: T?
- ) {
- guard var object = object,
- let value = value
- else { return };
-
- object[keyPath: propertyKey] = value;
- };
-
- static func unwrapAndSetProperty(
- for valueType: inout O?,
- forPropertyKey propertyKey: WritableKeyPath,
- withValue newValue: T?
- ) {
- guard var valueType = valueType,
- let newValue = newValue
- else { return };
-
- valueType[keyPath: propertyKey] = newValue;
- };
-};
diff --git a/experiments/swift-programmatic-modal/AdaptiveModal/CACornerMask+StaticAlias.swift b/experiments/swift-programmatic-modal/AdaptiveModal/CACornerMask+StaticAlias.swift
deleted file mode 100644
index 628f90da..00000000
--- a/experiments/swift-programmatic-modal/AdaptiveModal/CACornerMask+StaticAlias.swift
+++ /dev/null
@@ -1,38 +0,0 @@
-//
-// StaticAlias.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 6/21/23.
-//
-
-import UIKit
-
-extension CACornerMask {
-
- public static let allCorners: Self = [
- .layerMinXMinYCorner,
- .layerMaxXMinYCorner,
- .layerMinXMaxYCorner,
- .layerMaxXMaxYCorner,
- ];
-
- public static let topCorners: Self = [
- .layerMinXMinYCorner,
- .layerMaxXMinYCorner,
- ];
-
- public static let bottomCorners: Self = [
- .layerMinXMaxYCorner,
- .layerMaxXMaxYCorner,
- ];
-
- public static let leftCorners: Self = [
- .layerMinXMinYCorner,
- .layerMinXMaxYCorner,
- ];
-
- public static let rightCorners: Self = [
- .layerMaxXMinYCorner,
- .layerMaxXMaxYCorner,
- ];
-};
diff --git a/experiments/swift-programmatic-modal/AdaptiveModal/UIBezierPath+VariadicCornerRadius.swift b/experiments/swift-programmatic-modal/AdaptiveModal/UIBezierPath+VariadicCornerRadius.swift
deleted file mode 100644
index 2db4b826..00000000
--- a/experiments/swift-programmatic-modal/AdaptiveModal/UIBezierPath+VariadicCornerRadius.swift
+++ /dev/null
@@ -1,118 +0,0 @@
-//
-// UIBezierPath+VariadicCornerRadius.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 5/28/23.
-//
-
-import UIKit
-
-public extension UIBezierPath {
-
- convenience init(
- shouldRoundRect rect: CGRect,
- topLeftRadius: CGFloat,
- topRightRadius: CGFloat,
- bottomLeftRadius: CGFloat,
- bottomRightRadius: CGFloat
- ) {
- self.init();
-
- let path = CGMutablePath()
-
- let topLeft = rect.origin
- let topRight = CGPoint(x: rect.maxX, y: rect.minY)
- let bottomRight = CGPoint(x: rect.maxX, y: rect.maxY)
- let bottomLeft = CGPoint(x: rect.minX, y: rect.maxY)
-
- if topLeftRadius != 0 {
- path.move(to: CGPoint(
- x: topLeft.x + topLeftRadius,
- y: topLeft.y
- ));
-
- } else {
- path.move(to: topLeft);
- }
-
- if topRightRadius != 0 {
- path.addLine(to: CGPoint(
- x: topRight.x - topRightRadius,
- y: topRight.y
- ));
-
- path.addArc(
- tangent1End: topRight,
- tangent2End: CGPoint(
- x: topRight.x,
- y: topRight.y + topRightRadius
- ),
- radius: topRightRadius
- );
-
- } else {
- path.addLine(to: topRight);
- };
-
- if bottomRightRadius != 0 {
- path.addLine(to: CGPoint(
- x: bottomRight.x,
- y: bottomRight.y - bottomRightRadius
- ));
-
- path.addArc(
- tangent1End: bottomRight,
- tangent2End: CGPoint(
- x: bottomRight.x - bottomRightRadius,
- y: bottomRight.y
- ),
- radius: bottomRightRadius
- );
-
- } else {
- path.addLine(to: bottomRight);
- };
-
- if bottomLeftRadius != 0 {
- path.addLine(to: CGPoint(
- x: bottomLeft.x + bottomLeftRadius,
- y: bottomLeft.y
- ));
-
- path.addArc(
- tangent1End: bottomLeft,
- tangent2End: CGPoint(
- x: bottomLeft.x,
- y: bottomLeft.y - bottomLeftRadius
- ),
- radius: bottomLeftRadius
- );
-
- } else {
- path.addLine(to: bottomLeft);
- };
-
- if topLeftRadius != 0 {
- path.addLine(to: CGPoint(
- x: topLeft.x,
- y: topLeft.y + topLeftRadius
- ));
-
- path.addArc(
- tangent1End: topLeft,
- tangent2End: CGPoint(
- x: topLeft.x + topLeftRadius,
- y: topLeft.y
- ),
- radius: topLeftRadius
- );
-
- } else {
- path.addLine(to: topLeft);
- };
-
- path.closeSubpath();
- cgPath = path;
- };
-};
-
diff --git a/experiments/swift-programmatic-modal/RNIDynamicModal/RNIDynamicModal.swift b/experiments/swift-programmatic-modal/RNIDynamicModal/RNIDynamicModal.swift
deleted file mode 100644
index 8051366c..00000000
--- a/experiments/swift-programmatic-modal/RNIDynamicModal/RNIDynamicModal.swift
+++ /dev/null
@@ -1,114 +0,0 @@
-//
-// RNIDynamicModal.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 5/15/23.
-//
-
-import UIKit
-
-class RNIDynamicModalAnimator: NSObject, UIViewControllerTransitioningDelegate {
-
- enum Direction {
- case left, right, top, bottom;
- };
-
- let direction: Direction;
- let isPresentation: Bool;
-
- init(
- direction: Direction,
- isPresentation: Bool
- ) {
- self.direction = direction;
- self.isPresentation = isPresentation;
-
- super.init();
- };
-
- // MARK: - UIViewControllerTransitioningDelegate
- // ---------------------------------------------
-
- func transitionDuration(
- using transitionContext: UIViewControllerContextTransitioning?
- ) -> TimeInterval {
- return 0.3
- }
-
- func animateTransition(
- using transitionContext: UIViewControllerContextTransitioning
- ) {
-
- // 1
- let key: UITransitionContextViewControllerKey = isPresentation ? .to : .from
-
- guard let controller = transitionContext.viewController(forKey: key)
- else { return }
-
- // 2
- if isPresentation {
- transitionContext.containerView.addSubview(controller.view)
- }
-
- // 3
- let presentedFrame = transitionContext.finalFrame(for: controller)
- var dismissedFrame = presentedFrame;
-
- switch direction {
- case .left:
- dismissedFrame.origin.x = -presentedFrame.width
-
- case .right:
- dismissedFrame.origin.x = transitionContext.containerView.frame.size.width
-
- case .top:
- dismissedFrame.origin.y = -presentedFrame.height
-
- case .bottom:
- dismissedFrame.origin.y = transitionContext.containerView.frame.size.height
- }
-
- // 4
- let initialFrame = isPresentation ? dismissedFrame : presentedFrame
- let finalFrame = isPresentation ? presentedFrame : dismissedFrame
-
- // 5
- let animationDuration = transitionDuration(using: transitionContext)
- controller.view.frame = initialFrame
- UIView.animate(
- withDuration: animationDuration,
- animations: {
- controller.view.frame = finalFrame
- }, completion: { finished in
- if !self.isPresentation {
- controller.view.removeFromSuperview()
- }
- transitionContext.completeTransition(finished)
- })
- }
-};
-
-
-
-class RNIDynamicModalViewController: UIViewController {
-
- override func loadView() {
- let rootView = UIView();
- rootView.backgroundColor = .white;
-
- self.view = rootView;
-
- let label = UILabel();
- label.text = "Hello World!";
- label.textColor = .black;
-
-
- rootView.addSubview(label);
- label.translatesAutoresizingMaskIntoConstraints = false;
-
- NSLayoutConstraint.activate([
- label.centerXAnchor.constraint(equalTo: view.centerXAnchor),
- label.centerYAnchor.constraint(equalTo: view.centerYAnchor)
- ]);
- };
-};
diff --git a/experiments/swift-programmatic-modal/RNIDynamicModal/RootViewController.swift b/experiments/swift-programmatic-modal/RNIDynamicModal/RootViewController.swift
deleted file mode 100644
index e160fe9f..00000000
--- a/experiments/swift-programmatic-modal/RNIDynamicModal/RootViewController.swift
+++ /dev/null
@@ -1,55 +0,0 @@
-//
-// RootViewController.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 5/17/23.
-//
-
-import UIKit
-
-class RootViewController : UIViewController {
- override func loadView() {
- let view = UIView()
- view.backgroundColor = .white;
-
- let label = UILabel();
- label.text = "Show Modal!";
- label.textColor = .black;
- label.isUserInteractionEnabled = true;
-
- label.addGestureRecognizer(
- UITapGestureRecognizer(
- target: self,
- action: #selector(self.onPressButton(_:))
- )
- );
-
- view.addSubview(label);
-
- view.translatesAutoresizingMaskIntoConstraints = false;
- label.translatesAutoresizingMaskIntoConstraints = false;
-
-
- NSLayoutConstraint.activate([
- label.centerXAnchor.constraint(equalTo: view.centerXAnchor),
- label.centerYAnchor.constraint(equalTo: view.centerYAnchor)
- ]);
-
- self.view = view
- };
-
- @objc func onPressButton(_ sender: UITapGestureRecognizer){
-
- let modalVC = RNIDynamicModalViewController();
-
- // let transitionController = RNIDynamicModalTransitionController(
- // presentedViewController: modalVC,
- // presenting: self
- // );
- //
- // modalVC.modalPresentationStyle = .custom;
- // modalVC.transitioningDelegate = transitionController;
-
- self.present(modalVC, animated: true);
- };
-};
diff --git a/experiments/swift-programmatic-modal/RNILayout/RNILayout.swift b/experiments/swift-programmatic-modal/RNILayout/RNILayout.swift
deleted file mode 100644
index e112ea70..00000000
--- a/experiments/swift-programmatic-modal/RNILayout/RNILayout.swift
+++ /dev/null
@@ -1,369 +0,0 @@
-//
-// RNILayout.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 5/19/23.
-//
-
-import UIKit
-
-public struct RNILayout {
-
- // MARK: - Public Types
- // --------------------
-
- public enum HorizontalAlignment: String {
- case left, right, center;
- };
-
- public enum VerticalAlignment: String {
- case top, bottom, center;
- };
-
- // MARK: - Properties
- // ------------------
-
- public let horizontalAlignment: HorizontalAlignment;
- public let verticalAlignment : VerticalAlignment;
-
- public let width : RNILayoutValue;
- public let height: RNILayoutValue;
-
- public let marginLeft : RNILayoutValue?;
- public let marginRight : RNILayoutValue?;
- public let marginTop : RNILayoutValue?;
- public let marginBottom: RNILayoutValue?;
-
- // MARK: - Init
- // ------------
-
- init(
- horizontalAlignment: HorizontalAlignment,
- verticalAlignment : VerticalAlignment,
-
- width : RNILayoutValue,
- height: RNILayoutValue,
-
- marginLeft : RNILayoutValue? = nil,
- marginRight : RNILayoutValue? = nil,
- marginTop : RNILayoutValue? = nil,
- marginBottom: RNILayoutValue? = nil
- ) {
- self.horizontalAlignment = horizontalAlignment;
- self.verticalAlignment = verticalAlignment;
-
- self.width = width;
- self.height = height;
-
- self.marginLeft = marginLeft;
- self.marginRight = marginRight;
- self.marginTop = marginTop;
- self.marginBottom = marginBottom;
- };
-
- init(
- derivedFrom prev: Self,
- horizontalAlignment: HorizontalAlignment? = nil,
- verticalAlignment : VerticalAlignment? = nil,
-
- width : RNILayoutValue? = nil,
- height: RNILayoutValue? = nil,
-
- marginLeft : RNILayoutValue? = nil,
- marginRight : RNILayoutValue? = nil,
- marginTop : RNILayoutValue? = nil,
- marginBottom: RNILayoutValue? = nil
- ) {
- self.horizontalAlignment = horizontalAlignment ?? prev.horizontalAlignment;
- self.verticalAlignment = verticalAlignment ?? prev.verticalAlignment;
-
- self.width = width ?? prev.width;
- self.height = height ?? prev.height;
-
- self.marginLeft = marginLeft ?? prev.marginLeft;
- self.marginRight = marginRight ?? prev.marginRight;
- self.marginTop = marginTop ?? prev.marginTop;
- self.marginBottom = marginBottom ?? prev.marginBottom;
- };
-
- // MARK: - Intermediate Functions
- // ------------------------------
-
- /// Compute Rect - Step 1
- /// * Rect with the computed size based on `size` config.
- ///
- public func computeRawRectSize(
- usingLayoutValueContext context: RNILayoutValueContext
- ) -> CGSize {
-
- let computedWidth = self.width.computeValue(
- usingLayoutValueContext: context,
- preferredSizeKey: \.width
- );
-
- let computedHeight = self.height.computeValue(
- usingLayoutValueContext: context,
- preferredSizeKey: \.height
- );
-
- return CGSize(
- width : computedWidth ?? 0,
- height: computedHeight ?? 0
- );
- };
-
- /// Compute Rect - Step 2
- /// * Rect with the origin based on `horizontalAlignment`, and
- /// `verticalAlignment` config.
- ///
- public func computeRawRectOrigin(
- usingLayoutValueContext context: RNILayoutValueContext,
- forRect rect: CGRect? = nil,
- ignoreXAxis: Bool = false,
- ignoreYAxis: Bool = false
- ) -> CGRect {
-
- let origin = rect?.origin ?? .zero;
- let size = rect?.size ?? context.currentSize ?? .zero;
-
- var rect = CGRect(origin: origin, size: size);
-
- if !ignoreXAxis {
- // Compute Origin - X
- switch self.horizontalAlignment {
- case .center:
- rect.setPoint(midX: context.targetRect.midX);
-
- case .left:
- rect.setPoint(minX: context.targetRect.minX);
-
- case .right:
- rect.setPoint(maxX: context.targetRect.maxX);
- };
- };
-
- if !ignoreYAxis {
- // Compute Origin - Y
- switch self.verticalAlignment {
- case .center:
- rect.setPoint(midY: context.targetRect.midY);
-
- case .top:
- rect.setPoint(minY: context.targetRect.minY);
-
- case .bottom:
- rect.origin.y = context.targetRect.height - rect.height;
- };
- };
-
- return rect;
- };
-
- // MARK: - Functions
- // -----------------
-
- /// Compute Rect - Step 3
- /// * Rect with the computed size based on `size` config.
- ///
- /// * Rect with the origin based on `horizontalAlignment`, and
- /// `verticalAlignment` config.
- ///
- /// * Rect with margins applied to it based on the margin-related properties
- ///
- public func computeRect(
- usingLayoutValueContext baseContext: RNILayoutValueContext
- ) -> CGRect {
-
- let computedSize = self.computeRawRectSize(
- usingLayoutValueContext: baseContext
- );
-
- let context = RNILayoutValueContext(
- derivedFrom: baseContext,
- currentSize: computedSize
- );
-
- var rect = self.computeRawRectOrigin(usingLayoutValueContext: context);
-
- let computedMargins = RNILayoutMargins(
- usingLayoutConfig: self,
- usingLayoutValueContext: context
- );
-
- let marginRects = RNILayoutMarginRects(
- margins: computedMargins,
- viewRect: rect,
- targetRect: context.targetRect
- );
-
- let shouldResizeWidth: Bool = {
- if computedMargins.horizontal == 0 {
- return false;
- };
-
- if self.width.mode == .stretch &&
- !computedMargins.hasNegativeHorizontalMargins {
-
- return true;
- };
-
- return (
- computedMargins.left > 0
- && computedMargins.right > 0
- && computedMargins.horizontal > rect.width
- );
- }();
-
- let shouldResizeHeight: Bool = {
- if computedMargins.vertical == 0 {
- return false;
- };
-
- if self.height.mode == .stretch &&
- !computedMargins.hasNegativeVerticalMargins {
-
- return true;
- };
-
- return (
- computedMargins.top > 0
- && computedMargins.bottom > 0
- && computedMargins.vertical > rect.height
- );
- }();
-
- if shouldResizeWidth {
- let offsetWidth = self.width.mode == .stretch
- ? computedMargins.horizontal
- : computedMargins.horizontal - rect.width;
-
- rect.size.width -= offsetWidth;
- };
-
- if shouldResizeHeight {
- let offsetHeight = self.height.mode == .stretch
- ? computedMargins.vertical
- : computedMargins.vertical - rect.height;
-
- rect.size.height -= offsetHeight;
- };
-
- let shouldOffsetX: Bool = {
- switch self.horizontalAlignment {
- case .left, .right:
- return true;
-
- case .center:
- return
- marginRects.left.maxX > rect.minX ||
- marginRects.right.minX < rect.maxX;
- };
- }();
-
- let shouldOffsetY: Bool = {
- switch self.verticalAlignment {
- case .top, .bottom:
- return true;
-
- case .center:
- return
- marginRects.top.maxY > rect.minY ||
- marginRects.bottom.minY < rect.maxY;
- };
- }();
-
- if shouldOffsetX {
- let offsetLeft = computedMargins.left - rect.minX;
-
- let shouldApplyNegativeLeftMargin =
- self.horizontalAlignment == .left &&
- computedMargins.left < 0;
-
- if offsetLeft > 0 {
- rect.origin.x += offsetLeft;
-
- } else if shouldApplyNegativeLeftMargin {
- rect.origin.x -= abs(computedMargins.left);
- };
-
- let offsetRight: CGFloat = {
- let marginRightX = context.targetRect.maxX - computedMargins.right;
- return rect.maxX - marginRightX;
- }();
-
- let shouldApplyNegativeRightMargin =
- self.horizontalAlignment == .right &&
- computedMargins.right < 0;
-
- if offsetRight > 0 {
- rect.origin.x -= offsetRight;
-
- } else if shouldApplyNegativeRightMargin {
- rect.origin.x += abs(computedMargins.right);
- };
- };
-
- if shouldOffsetY {
- let offsetTop = computedMargins.top - rect.minY;
-
- let shouldApplyNegativeTopMargin =
- self.verticalAlignment == .top &&
- computedMargins.top < 0;
-
- if offsetTop > 0 {
- rect.origin.y += offsetTop;
-
- } else if shouldApplyNegativeTopMargin {
- rect.origin.y -= abs(computedMargins.top);
- };
-
- let offsetBottom: CGFloat = {
- let marginBottomY = context.targetRect.maxY - computedMargins.bottom;
- return rect.maxY - marginBottomY;
- }();
-
- let shouldApplyNegativeBottomMargin =
- self.verticalAlignment == .bottom &&
- computedMargins.bottom < 0;
-
- if offsetBottom > 0 {
- rect.origin.y -= offsetBottom;
-
- } else if shouldApplyNegativeBottomMargin {
- rect.origin.y += abs(computedMargins.bottom);
- };
- };
-
- let shouldRecomputeXAxis: Bool = {
- switch self.horizontalAlignment {
- case .center:
- return !shouldOffsetX && shouldResizeWidth
-
- default:
- return false;
- };
- }();
-
- let shouldRecomputeYAxis: Bool = {
- switch self.verticalAlignment {
- case .center:
- return !shouldOffsetY && shouldResizeHeight
-
- default:
- return false;
- };
- }();
-
- if shouldRecomputeXAxis || shouldRecomputeYAxis {
- // re-compute origin
- rect = self.computeRawRectOrigin(
- usingLayoutValueContext: context,
- forRect: rect,
- ignoreXAxis: !shouldRecomputeXAxis,
- ignoreYAxis: !shouldRecomputeYAxis
- );
- };
-
- return rect;
- };
-};
diff --git a/experiments/swift-programmatic-modal/RNILayout/RNILayoutKeyboardValues.swift b/experiments/swift-programmatic-modal/RNILayout/RNILayoutKeyboardValues.swift
deleted file mode 100644
index 11d79c31..00000000
--- a/experiments/swift-programmatic-modal/RNILayout/RNILayoutKeyboardValues.swift
+++ /dev/null
@@ -1,111 +0,0 @@
-//
-// RNILayoutKeyboardValues.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 6/21/23.
-//
-
-import UIKit
-
-public struct RNILayoutKeyboardValues {
-
- // MARK: - Properties
- // ------------------
-
- public var frameBegin: CGRect;
- public var frameEnd: CGRect;
-
- public var animationDuration: CGFloat;
- public var animationCurve: UIView.AnimationCurve;
-
- // MARK: - Computed Properties
- // ---------------------------
-
- var keyboardAnimator: UIViewPropertyAnimator {
- UIViewPropertyAnimator(
- duration: self.animationDuration,
- curve: self.animationCurve
- );
- };
-
- // MARK: - Functions
- // ------------------
-
- public func computeKeyboardSize(
- relativeToView targetView: UIView
- ) -> CGSize? {
-
- guard let window = targetView.window else { return nil };
-
- // Get keyboard height.
- let keyboardFrameInView = targetView.convert(
- self.frameEnd,
- from: window
- );
-
- let intersection = targetView.bounds.intersection(keyboardFrameInView);
-
- guard !intersection.isNull else { return nil };
- return intersection.size;
- };
-};
-
-// MARK: - Init
-// ------------
-
-public extension RNILayoutKeyboardValues {
-
- init?(fromNotification notification: NSNotification) {
- guard let userInfo = notification.userInfo else { return nil };
-
- func extract(key: String) throws -> T {
- guard let rawValue = userInfo[key],
- let value = rawValue as? T
- else { throw NSError() };
-
- return value;
- };
-
- func extractValue(
- userInfoKey: String,
- valueKey: KeyPath
- ) throws -> T {
-
- guard let rawValue: NSValue = try? extract(key: userInfoKey)
- else { throw NSError() };
-
- return rawValue[keyPath: valueKey];
- };
-
- do {
- self.frameBegin = try extractValue(
- userInfoKey: UIResponder.keyboardFrameBeginUserInfoKey,
- valueKey: \.cgRectValue
- );
-
- self.frameEnd = try extractValue(
- userInfoKey: UIResponder.keyboardFrameEndUserInfoKey,
- valueKey: \.cgRectValue
- );
-
- self.animationDuration = try extract(
- key: UIResponder.keyboardAnimationDurationUserInfoKey
- );
-
- self.animationCurve = try {
- let curveValue: Int = try extract(
- key: UIResponder.keyboardAnimationCurveUserInfoKey
- );
-
- guard let curve = UIView.AnimationCurve(rawValue: curveValue) else {
- throw NSError();
- };
-
- return curve;
- }();
-
- } catch {
- return nil;
- };
- };
-};
diff --git a/experiments/swift-programmatic-modal/RNILayout/RNILayoutMarginRects.swift b/experiments/swift-programmatic-modal/RNILayout/RNILayoutMarginRects.swift
deleted file mode 100644
index 2b93060c..00000000
--- a/experiments/swift-programmatic-modal/RNILayout/RNILayoutMarginRects.swift
+++ /dev/null
@@ -1,52 +0,0 @@
-//
-// RNILayoutMarginRects.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 6/22/23.
-//
-
-import Foundation
-
-public struct RNILayoutMarginRects {
-
- var left : CGRect;
- var right : CGRect;
- var top : CGRect;
- var bottom: CGRect;
-
- init(
- margins: RNILayoutMargins,
- viewRect: CGRect,
- targetRect: CGRect
- ) {
- self.left = CGRect(
- origin: .zero,
- size: CGSize(
- width: margins.left,
- height: targetRect.height
- )
- );
-
- self.right = CGRect(
- x: targetRect.maxX - margins.right,
- y: 0,
- width: margins.right,
- height: targetRect.height
- );
-
- self.top = CGRect(
- origin: .zero,
- size: CGSize(
- width: targetRect.width,
- height: margins.top
- )
- );
-
- self.bottom = CGRect(
- x: 0,
- y: targetRect.maxY - margins.bottom,
- width: targetRect.width,
- height: margins.bottom
- );
- };
-};
diff --git a/experiments/swift-programmatic-modal/RNILayout/RNILayoutMargins.swift b/experiments/swift-programmatic-modal/RNILayout/RNILayoutMargins.swift
deleted file mode 100644
index a8b62ad9..00000000
--- a/experiments/swift-programmatic-modal/RNILayout/RNILayoutMargins.swift
+++ /dev/null
@@ -1,71 +0,0 @@
-//
-// RNILayoutMargin.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 6/22/23.
-//
-
-import Foundation
-
-public struct RNILayoutMargins {
- public var left : CGFloat;
- public var right : CGFloat;
- public var top : CGFloat;
- public var bottom: CGFloat;
-
- public var horizontal: CGFloat {
- self.left + self.right;
- };
-
- public var vertical: CGFloat {
- self.top + self.bottom;
- };
-
- public var hasNegativeHorizontalMargins: Bool {
- self.left < 0 || self.right < 0;
- };
-
- public var hasNegativeVerticalMargins: Bool {
- self.top < 0 || self.bottom < 0;
- };
-
- init(
- left: CGFloat? = nil,
- right: CGFloat? = nil,
- top: CGFloat? = nil,
- bottom: CGFloat? = nil
- ) {
- self.left = left ?? 0;
- self.right = right ?? 0;
- self.top = top ?? 0;
- self.bottom = bottom ?? 0;
- }
-};
-
-public extension RNILayoutMargins {
-
- init(
- usingLayoutConfig layoutConfig: RNILayout,
- usingLayoutValueContext context: RNILayoutValueContext
- ) {
- self.left = layoutConfig.marginLeft?.computeValue(
- usingLayoutValueContext: context,
- preferredSizeKey: \.width
- ) ?? 0;
-
- self.right = layoutConfig.marginRight?.computeValue(
- usingLayoutValueContext: context,
- preferredSizeKey: \.width
- ) ?? 0;
-
- self.top = layoutConfig.marginTop?.computeValue(
- usingLayoutValueContext: context,
- preferredSizeKey: \.height
- ) ?? 0;
-
- self.bottom = layoutConfig.marginBottom?.computeValue(
- usingLayoutValueContext: context,
- preferredSizeKey: \.height
- ) ?? 0;
- };
-};
diff --git a/experiments/swift-programmatic-modal/RNILayout/RNILayoutPreset.swift b/experiments/swift-programmatic-modal/RNILayout/RNILayoutPreset.swift
deleted file mode 100644
index 82b97ba6..00000000
--- a/experiments/swift-programmatic-modal/RNILayout/RNILayoutPreset.swift
+++ /dev/null
@@ -1,205 +0,0 @@
-//
-// RNILayoutPreset.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 5/23/23.
-//
-
-import UIKit
-
-public enum RNILayoutPreset {
- case offscreenBottom,
- offscreenTop,
- offscreenLeft,
- offscreenRight;
-
- case halfOffscreenBottom,
- halfOffscreenTop,
- halfOffscreenLeft,
- halfOffscreenRight;
-
- case edgeBottom,
- edgeTop,
- edgeLeft,
- edgeRight;
-
- case fitScreen,
- fitScreenHorizontally,
- fitScreenVertically;
-
- case center;
-
- case layoutConfig(_ config: RNILayout);
-
- // MARK: Functions
- // ---------------
-
- public func getLayoutConfig(
- fromBaseLayoutConfig baseLayoutConfig: RNILayout
- ) -> RNILayout {
-
- switch self {
- case .offscreenBottom:
- return .init(
- derivedFrom: baseLayoutConfig,
- verticalAlignment: .bottom,
- marginTop: .constant(0),
- marginBottom: .percent(
- relativeTo: .currentHeight,
- percentValue: -1
- )
- );
-
- case .offscreenTop:
- return .init(
- derivedFrom: baseLayoutConfig,
- verticalAlignment: .top,
- marginTop: .percent(
- relativeTo: .currentHeight,
- percentValue: -1
- ),
- marginBottom: .constant(0)
- );
-
- case .offscreenLeft:
- return .init(
- derivedFrom: baseLayoutConfig,
- horizontalAlignment: .left,
- marginLeft: .percent(
- relativeTo: .currentWidth,
- percentValue: -1
- ),
- marginRight: .constant(0)
- );
-
- case .offscreenRight:
- return .init(
- derivedFrom: baseLayoutConfig,
- horizontalAlignment: .right,
- marginLeft: .constant(0),
- marginRight: .percent(
- relativeTo: .currentWidth,
- percentValue: -1
- )
- );
-
- case .edgeBottom:
- return .init(
- derivedFrom: baseLayoutConfig,
- verticalAlignment: .bottom
- );
-
- case .halfOffscreenBottom:
- return .init(
- derivedFrom: baseLayoutConfig,
- verticalAlignment: .top,
- marginTop: .constant(0),
- marginBottom: .percent(
- relativeTo: .currentHeight,
- percentValue: 0.5
- )
- );
-
- case .halfOffscreenTop:
- return .init(
- derivedFrom: baseLayoutConfig,
- verticalAlignment: .top,
- marginTop: .percent(
- relativeTo: .currentHeight,
- percentValue: -0.5
- ),
- marginBottom: .constant(0)
- );
-
- case .halfOffscreenLeft:
- return .init(
- derivedFrom: baseLayoutConfig,
- horizontalAlignment: .left,
- marginLeft: .percent(
- relativeTo: .currentWidth,
- percentValue: -0.5
- ),
- marginRight: .constant(0)
- );
-
- case .halfOffscreenRight:
- return .init(
- derivedFrom: baseLayoutConfig,
- horizontalAlignment: .right,
- marginLeft: .constant(0),
- marginRight: .percent(
- relativeTo: .currentWidth,
- percentValue: 0.5
- )
- );
-
- case .edgeTop:
- return .init(
- derivedFrom: baseLayoutConfig,
- verticalAlignment: .top,
- marginTop: .constant(0)
- );
-
- case .edgeLeft:
- return .init(
- derivedFrom: baseLayoutConfig,
- horizontalAlignment: .left,
- marginLeft: .constant(0)
- );
-
- case .edgeRight:
- return .init(
- derivedFrom: baseLayoutConfig,
- horizontalAlignment: .right,
- marginRight: .constant(0)
- );
-
- case .center:
- return .init(
- derivedFrom: baseLayoutConfig,
- verticalAlignment: .center
- );
-
- case .fitScreen:
- return .init(
- derivedFrom: baseLayoutConfig,
- horizontalAlignment: .center,
- verticalAlignment: .center,
- width: RNILayoutValue(
- mode: .stretch
- ),
- height: RNILayoutValue(
- mode: .stretch
- ),
- marginLeft: .constant(0),
- marginRight: .constant(0),
- marginTop: .constant(0),
- marginBottom: .constant(0)
- );
-
- case .fitScreenHorizontally:
- return .init(
- derivedFrom: baseLayoutConfig,
- width: RNILayoutValue(
- mode: .stretch
- ),
- marginLeft: .constant(0),
- marginRight: .constant(0)
- );
-
- case .fitScreenVertically:
- return .init(
- derivedFrom: baseLayoutConfig,
- height: RNILayoutValue(
- mode: .stretch
- ),
- marginTop: .constant(0)
- );
-
- case let .layoutConfig(config):
- return config;
- };
- };
-};
-
-
diff --git a/experiments/swift-programmatic-modal/RNILayout/RNILayoutValue+StaticAlias.swift b/experiments/swift-programmatic-modal/RNILayout/RNILayoutValue+StaticAlias.swift
deleted file mode 100644
index 778065e5..00000000
--- a/experiments/swift-programmatic-modal/RNILayout/RNILayoutValue+StaticAlias.swift
+++ /dev/null
@@ -1,122 +0,0 @@
-//
-// RNILayoutValue+StaticInit.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 6/19/23.
-//
-
-import UIKit
-
-public extension RNILayoutValue {
-
- static let stretch: Self = .init(mode: .stretch);
-
- static func stretch(
- offsetValue: RNILayoutValueMode? = nil,
- offsetOperation: RNIComputableOffset.OffsetOperation? = nil,
- minValue: RNILayoutValueMode? = nil,
- maxValue: RNILayoutValueMode? = nil
- ) -> Self {
-
- return .init(
- mode:. stretch,
- offsetValue: offsetValue,
- offsetOperation: offsetOperation,
- minValue: minValue,
- maxValue: maxValue
- );
- };
-
- static func constant(_ constantValue: CGFloat) -> Self {
- return .init(mode: .constant(constantValue))
- };
-
- static func percent(
- relativeTo: RNILayoutValuePercentTarget = .targetSize,
- percentValue: Double,
- offsetValue: RNILayoutValueMode? = nil,
- offsetOperation: RNIComputableOffset.OffsetOperation? = nil,
- minValue: RNILayoutValueMode? = nil,
- maxValue: RNILayoutValueMode? = nil
- ) -> Self {
-
- return .init(
- mode: .percent(
- relativeTo: relativeTo,
- percentValue: percentValue
- ),
- offsetValue: offsetValue,
- offsetOperation: offsetOperation,
- minValue: minValue,
- maxValue: maxValue
- );
- };
-
- static func safeAreaInsets(
- insetKey: KeyPath,
- offsetValue: RNILayoutValueMode? = nil,
- offsetOperation: RNIComputableOffset.OffsetOperation? = nil,
- minValue: RNILayoutValueMode? = nil,
- maxValue: RNILayoutValueMode? = nil
- ) -> Self {
-
- return .init(
- mode: .safeAreaInsets(insetKey: insetKey),
- offsetValue: offsetValue,
- offsetOperation: offsetOperation,
- minValue: minValue,
- maxValue: maxValue
- );
- };
-
- static func keyboardScreenRect(
- rectKey: KeyPath,
- offsetValue: RNILayoutValueMode? = nil,
- offsetOperation: RNIComputableOffset.OffsetOperation? = nil,
- minValue: RNILayoutValueMode? = nil,
- maxValue: RNILayoutValueMode? = nil
- ) -> Self {
-
- return .init(
- mode: .keyboardScreenRect(rectKey: rectKey),
- offsetValue: offsetValue,
- offsetOperation: offsetOperation,
- minValue: minValue,
- maxValue: maxValue
- );
- };
-
- static func keyboardRelativeSize(
- sizeKey: KeyPath,
- offsetValue: RNILayoutValueMode? = nil,
- offsetOperation: RNIComputableOffset.OffsetOperation? = nil,
- minValue: RNILayoutValueMode? = nil,
- maxValue: RNILayoutValueMode? = nil
- ) -> Self {
-
- return .init(
- mode: .keyboardRelativeSize(sizeKey: sizeKey),
- offsetValue: offsetValue,
- offsetOperation: offsetOperation,
- minValue: minValue,
- maxValue: maxValue
- );
- };
-
- static func multipleValues(
- _ values: [RNILayoutValueMode],
- offsetValue: RNILayoutValueMode? = nil,
- offsetOperation: RNIComputableOffset.OffsetOperation? = nil,
- minValue: RNILayoutValueMode? = nil,
- maxValue: RNILayoutValueMode? = nil
- ) -> Self {
-
- return .init(
- mode: .multipleValues(values),
- offsetValue: offsetValue,
- offsetOperation: offsetOperation,
- minValue: minValue,
- maxValue: maxValue
- );
- };
-};
diff --git a/experiments/swift-programmatic-modal/RNILayout/RNILayoutValue.swift b/experiments/swift-programmatic-modal/RNILayout/RNILayoutValue.swift
deleted file mode 100644
index 0a50bf33..00000000
--- a/experiments/swift-programmatic-modal/RNILayout/RNILayoutValue.swift
+++ /dev/null
@@ -1,124 +0,0 @@
-//
-// RNILayoutValue.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 6/8/23.
-//
-
-import UIKit
-
-public struct RNILayoutValue {
-
- // MARK: - Types
- // -------------
-
- public enum Axis {
- case horizontal, vertical;
- };
-
- // MARK: - Properties
- // ------------------
-
- public let mode: RNILayoutValueMode;
-
- public let offsetValue: RNILayoutValueMode?;
- public let offsetOperation: RNIComputableOffset.OffsetOperation?;
-
- public let minValue: RNILayoutValueMode?;
- public let maxValue: RNILayoutValueMode?;
-
- // MARK: - Init
- // ------------
-
- public init(
- mode: RNILayoutValueMode,
- offsetValue: RNILayoutValueMode? = nil,
- offsetOperation: RNIComputableOffset.OffsetOperation? = nil,
- minValue: RNILayoutValueMode? = nil,
- maxValue: RNILayoutValueMode? = nil
- ) {
- self.mode = mode;
-
- self.offsetValue = offsetValue;
- self.offsetOperation = offsetOperation;
- self.minValue = minValue;
- self.maxValue = maxValue;
- };
-
- // MARK: - Intermediate Functions
- // ------------------------------
-
- public func applyOffsets(
- usingLayoutValueContext context: RNILayoutValueContext,
- toValue value: CGFloat
- ) -> CGFloat? {
- guard let offsetValue = self.offsetValue else { return value };
-
- let computedOffsetValue = offsetValue.compute(
- usingLayoutValueContext: context,
- preferredSizeKey: nil
- );
-
- guard let computedOffsetValue = computedOffsetValue else { return value };
-
- let computableOffset = RNIComputableOffset(
- offset: computedOffsetValue,
- offsetOperation: self.offsetOperation ?? .add
- );
-
- return computableOffset.compute(withValue: value, isValueOnRHS: true);
- };
-
- public func clampValue(
- usingLayoutValueContext context: RNILayoutValueContext,
- forValue value: CGFloat
- ) -> CGFloat? {
- let computedMinValue = self.minValue?.compute(
- usingLayoutValueContext: context,
- preferredSizeKey: nil
- );
-
- let computedMaxValue = self.maxValue?.compute(
- usingLayoutValueContext: context,
- preferredSizeKey: nil
- );
-
- let clamped = value.clamped(min: computedMinValue, max: computedMaxValue);
-
- return clamped;
- };
-
- public func computeRawValue(
- usingLayoutValueContext context: RNILayoutValueContext,
- preferredSizeKey: KeyPath?
- ) -> CGFloat? {
- return self.mode.compute(
- usingLayoutValueContext: context,
- preferredSizeKey: preferredSizeKey
- );
- };
-
- // MARK: - User-Invoked Functions
- // ------------------------------
-
- public func computeValue(
- usingLayoutValueContext context: RNILayoutValueContext,
- preferredSizeKey: KeyPath?
- ) -> CGFloat? {
-
- let computedValueRaw = self.computeRawValue(
- usingLayoutValueContext: context,
- preferredSizeKey: preferredSizeKey
- );
-
- let computedValueWithOffsets = self.applyOffsets(
- usingLayoutValueContext: context,
- toValue: computedValueRaw ?? 0
- );
-
- return self.clampValue(
- usingLayoutValueContext: context,
- forValue: computedValueWithOffsets ?? 0
- );
- };
-};
diff --git a/experiments/swift-programmatic-modal/RNILayout/RNILayoutValueContext.swift b/experiments/swift-programmatic-modal/RNILayout/RNILayoutValueContext.swift
deleted file mode 100644
index 460b2905..00000000
--- a/experiments/swift-programmatic-modal/RNILayout/RNILayoutValueContext.swift
+++ /dev/null
@@ -1,112 +0,0 @@
-//
-// RNILayoutValueContext.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 6/9/23.
-//
-
-import UIKit
-
-public struct RNILayoutValueContext {
-
- public static let `default`: Self = .init(
- targetRect: .zero,
- windowSize: nil,
- currentSize: nil,
- safeAreaInsets: nil,
- keyboardScreenRect: nil,
- keyboardRelativeSize: nil
- );
-
- public let targetRect: CGRect;
-
- public let windowSize: CGSize?;
- public let currentSize: CGSize?;
-
- public let safeAreaInsets: UIEdgeInsets?;
-
- public let keyboardScreenRect: CGRect?;
- public let keyboardRelativeSize: CGSize?;
-
- public var targetSize: CGSize {
- self.targetRect.size;
- };
-
- public var screenSize: CGSize {
- UIScreen.main.bounds.size;
- };
-};
-
-// MARK: - Init
-// ------------
-
-public extension RNILayoutValueContext {
-
- init(
- derivedFrom prev: Self,
- targetView: UIView? = nil,
- targetRect: CGRect? = nil,
- windowSize: CGSize? = nil,
- currentSize: CGSize? = nil,
- safeAreaInsets: UIEdgeInsets? = nil,
- keyboardValues: RNILayoutKeyboardValues? = nil
- ) {
-
- self.targetRect = targetRect ?? prev.targetRect;
- self.windowSize = windowSize ?? prev.windowSize;
- self.currentSize = currentSize ?? prev.currentSize;
-
- self.safeAreaInsets = safeAreaInsets ?? prev.safeAreaInsets;
- self.keyboardScreenRect = keyboardValues?.frameEnd ?? prev.keyboardScreenRect;
-
- self.keyboardRelativeSize = {
- guard let targetView = targetView,
- let keyboardValues = keyboardValues
- else {
- return prev.keyboardRelativeSize;
- };
-
- let keyboardSize = keyboardValues.computeKeyboardSize(
- relativeToView: targetView
- );
-
- return keyboardSize ?? prev.keyboardRelativeSize;
- }();
- };
-
- init?(
- fromTargetViewController targetVC: UIViewController,
- keyboardValues: RNILayoutKeyboardValues? = nil,
- currentSize: CGSize? = nil
- ) {
- guard let targetView = targetVC.view else { return nil };
-
- self.targetRect = targetView.frame;
- self.windowSize = targetView.window?.bounds.size;
-
- self.safeAreaInsets = targetView.window?.safeAreaInsets;
- self.currentSize = currentSize;
-
- self.keyboardScreenRect = keyboardValues?.frameEnd;
-
- self.keyboardRelativeSize =
- keyboardValues?.computeKeyboardSize(relativeToView: targetView);
- };
-
- init?(
- fromTargetView targetView: UIView,
- keyboardValues: RNILayoutKeyboardValues? = nil,
- currentSize: CGSize? = nil
- ) {
- self.targetRect = targetView.frame;
- self.windowSize = targetView.window?.bounds.size;
-
- self.safeAreaInsets = targetView.window?.safeAreaInsets;
- self.currentSize = currentSize;
-
- self.keyboardScreenRect = keyboardValues?.frameEnd;
-
- self.keyboardRelativeSize =
- keyboardValues?.computeKeyboardSize(relativeToView: targetView);
- };
-};
diff --git a/experiments/swift-programmatic-modal/RNILayout/RNILayoutValueMode.swift b/experiments/swift-programmatic-modal/RNILayout/RNILayoutValueMode.swift
deleted file mode 100644
index 5d0af3fb..00000000
--- a/experiments/swift-programmatic-modal/RNILayout/RNILayoutValueMode.swift
+++ /dev/null
@@ -1,82 +0,0 @@
-//
-// RNILayoutValueMode.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 6/8/23.
-//
-
-import UIKit
-
-public enum RNILayoutValueMode: Equatable {
-
- case stretch;
-
- case constant(_: CGFloat);
-
- case percent(
- relativeTo: RNILayoutValuePercentTarget = .targetSize,
- percentValue: Double
- );
-
- case safeAreaInsets(
- insetKey: KeyPath
- );
-
- case keyboardScreenRect(
- rectKey: KeyPath
- );
-
- case keyboardRelativeSize(
- sizeKey: KeyPath
- );
-
- case multipleValues(_ values: [Self]);
-
- // MARK: Functions
- // ---------------
-
- public func compute(
- usingLayoutValueContext context: RNILayoutValueContext,
- preferredSizeKey: KeyPath?
- ) -> CGFloat? {
-
- switch self {
- case .stretch:
- guard let preferredSizeKey = preferredSizeKey else { return nil };
- return context.targetSize[keyPath: preferredSizeKey];
-
- case let .constant(constantValue):
- return constantValue;
-
- case let .percent(relativeToValue, percentValue):
- guard let preferredSizeKey = preferredSizeKey else { return nil };
-
- let targetValue = relativeToValue.getValue(
- layoutValueContext: context,
- preferredSizeKey: preferredSizeKey
- );
-
- guard let targetValue = targetValue else { return nil };
- return targetValue * percentValue;
-
- case let .safeAreaInsets(insetKey):
- return context.safeAreaInsets?[keyPath: insetKey];
-
- case let .keyboardScreenRect(rectKey):
- return context.keyboardScreenRect?[keyPath: rectKey];
-
- case let .keyboardRelativeSize(sizeKey):
- return context.keyboardRelativeSize?[keyPath: sizeKey];
-
- case let .multipleValues(computableValues):
- return computableValues.reduce(0) {
- let computedValue = $1.compute(
- usingLayoutValueContext: context,
- preferredSizeKey: preferredSizeKey
- );
-
- return $0 + (computedValue ?? 0);
- };
- };
- };
-};
diff --git a/experiments/swift-programmatic-modal/RNILayout/RNILayoutValuePercentTarget.swift b/experiments/swift-programmatic-modal/RNILayout/RNILayoutValuePercentTarget.swift
deleted file mode 100644
index c0637399..00000000
--- a/experiments/swift-programmatic-modal/RNILayout/RNILayoutValuePercentTarget.swift
+++ /dev/null
@@ -1,60 +0,0 @@
-//
-// RNILayoutValuePercentTarget.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 6/8/23.
-//
-
-import UIKit
-
-public enum RNILayoutValuePercentTarget {
-
- case screenSize , screenWidth , screenHeight;
- case windowSize , windowWidth , windowHeight;
- case targetSize , targetWidth , targetHeight;
- case currentSize, currentWidth, currentHeight;
-
- public func getValue(
- layoutValueContext context: RNILayoutValueContext,
- preferredSizeKey: KeyPath
- ) -> CGFloat? {
-
- switch self {
- case .screenSize:
- return context.screenSize[keyPath: preferredSizeKey];
-
- case .screenWidth:
- return context.screenSize.width;
-
- case .screenHeight:
- return context.screenSize.height;
-
- case .windowSize:
- return context.windowSize?[keyPath: preferredSizeKey];
-
- case .windowWidth:
- return context.windowSize?.width;
-
- case .windowHeight:
- return context.windowSize?.height;
-
- case .targetSize:
- return context.targetSize[keyPath: preferredSizeKey];
-
- case .targetWidth:
- return context.targetSize.width;
-
- case .targetHeight:
- return context.targetSize.height;
-
- case .currentSize:
- return context.currentSize?[keyPath: preferredSizeKey];
-
- case .currentWidth:
- return context.currentSize?.width;
-
- case .currentHeight:
- return context.currentSize?.height;
- };
- };
-};
diff --git a/experiments/swift-programmatic-modal/Test/AdaptiveModalConfigTestPresets.swift b/experiments/swift-programmatic-modal/Test/AdaptiveModalConfigTestPresets.swift
deleted file mode 100644
index 62fe69b8..00000000
--- a/experiments/swift-programmatic-modal/Test/AdaptiveModalConfigTestPresets.swift
+++ /dev/null
@@ -1,1108 +0,0 @@
-//
-// AdaptiveModalConfigTestPresets.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 6/15/23.
-//
-
-import UIKit
-
-enum AdaptiveModalConfigTestPresets: CaseIterable {
-
- static let `default`: Self = .testTopToBottom;
-
- case testModalTransform01;
- case testModalTransformScale;
- case testModalBorderAndShadow01;
- case testLeftToRight;
- case testTopToBottom;
-
- case test01;
- case test02;
-
- case demo01;
- case demo02;
- case demo03;
- case demo04;
- case demo05;
- case demo06;
- case demo07;
- case demo08;
- case demo09;
- case demo10;
-
- var config: AdaptiveModalConfig {
- switch self {
-
- // MARK: - Tests
- // -------------
-
- case .testModalTransform01: return AdaptiveModalConfig(
- snapPoints: [
- // snap point - 0
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.8)
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.2)
- )
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalRotation: 0.2,
- modalScaleX: 0.5,
- modalScaleY: 0.5,
- modalTranslateX: -100,
- modalTranslateY: 20
- )
- ),
-
- // snap point - 1
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.8)
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.4)
- )
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalRotation: -0.2,
- modalScaleX: 0.5,
- modalScaleY: 1,
- modalTranslateX: 0,
- modalTranslateY: 0
- )
- ),
- // snap point - 2
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.8)
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.6)
- )
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- //modalRotation: 1,
- modalScaleX: 1,
- modalScaleY: 1
- //modalTranslateX: 0,
- //modalTranslateY: 0
- )
- ),
- ],
- snapDirection: .bottomToTop,
- overshootSnapPoint: AdaptiveModalSnapPointPreset(
- layoutPreset: .fitScreenVertically
- )
- );
-
- case .testModalTransformScale: return AdaptiveModalConfig(
- snapPoints: [
- // snap point - 0
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.8)
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.2)
- )
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalScaleX: 1,
- modalScaleY: 1
- )
- ),
-
- // snap point - 1
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.8)
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.4)
- )
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalScaleX: 0.5,
- modalScaleY: 1
- )
- ),
- // snap point - 2
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.8)
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.6)
- )
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalScaleX: 1.5,
- modalScaleY: 1.5
- )
- ),
- ],
- snapDirection: .bottomToTop,
- undershootSnapPoint: .init(
- layoutPreset: .offscreenBottom,
- animationKeyframe: .init(
- modalScaleX: 0.25,
- modalScaleY: 0.25
- )
- ),
- overshootSnapPoint: AdaptiveModalSnapPointPreset(
- layoutPreset: .fitScreenVertically
- )
- );
-
- case .testModalBorderAndShadow01: return AdaptiveModalConfig(
- snapPoints: [
- // snap point - 0
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: .percent(percentValue: 0.8),
- height: .percent(percentValue: 0.2)
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalBorderWidth: 2,
- modalBorderColor: .blue,
- modalShadowColor: .blue,
- modalShadowOffset: .init(width: 3, height: 3),
- modalShadowOpacity: 0.4,
- modalShadowRadius: 4.0
- )
- ),
-
- // snap point - 1
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: .percent(percentValue: 0.8),
- height: .percent(percentValue: 0.4)
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalBorderWidth: 4,
- modalBorderColor: .cyan,
- modalShadowColor: .green,
- modalShadowOffset: .init(width: 6, height: 6),
- modalShadowOpacity: 0.5,
- modalShadowRadius: 5
- )
- ),
- // snap point - 2
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: .percent(percentValue: 0.9),
- height: .percent(percentValue: 0.7)
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalBorderWidth: 8,
- modalBorderColor: .green,
- modalShadowColor: .purple,
- modalShadowOffset: .init(width: 9, height: 9),
- modalShadowOpacity: 0.9,
- modalShadowRadius: 7
- )
- ),
- ],
- snapDirection: .bottomToTop,
- overshootSnapPoint: AdaptiveModalSnapPointPreset(
- layoutPreset: .fitScreenVertically
- )
- );
-
- case .testLeftToRight: return AdaptiveModalConfig(
- snapPoints: [
- // snap point - 1
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .left,
- verticalAlignment: .center,
- width: .percent(percentValue: 0.5),
- height: .percent(percentValue: 0.65),
- marginLeft: .constant(15)
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- )
- ),
- // snap point - 2
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .center,
- width: .stretch,
- height: .percent(percentValue: 0.85),
- marginLeft: .constant(20),
- marginRight: .constant(20)
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- )
- ),
- ],
- snapDirection: .leftToRight,
- overshootSnapPoint: AdaptiveModalSnapPointPreset(
- layoutPreset: .edgeRight
- )
- );
-
- case .testTopToBottom: return AdaptiveModalConfig(
- snapPoints: [
- .init(
- snapPoint: .init(
- horizontalAlignment: .center,
- verticalAlignment: .top,
- width: .stretch,
- height: .percent(percentValue: 0.2)
- )
- )
- ],
- snapDirection: .topToBottom,
- overshootSnapPoint: .init(
- layoutPreset: .fitScreenVertically
- )
- );
-
- case .test01: return AdaptiveModalConfig(
- snapPoints: [
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: .stretch,
- height: .percent(percentValue: 0.1)
- )
- ),
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: .stretch,
- height: .percent(percentValue: 0.3)
- )
- ),
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: .stretch,
- height: .percent(percentValue: 0.7)
- )
- ),
- ],
- snapDirection: .bottomToTop
- );
-
- case .test02: return AdaptiveModalConfig(
- snapPoints: [
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: .stretch,
- height: .percent(percentValue: 0.3)
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalCornerRadius: 15,
- modalMaskedCorners: [
- .layerMinXMinYCorner,
- .layerMaxXMinYCorner
- ],
- backgroundVisualEffect: UIBlurEffect(style: .regular),
- backgroundVisualEffectIntensity: 0
- )
- ),
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .center,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.7),
- maxValue: .constant(ScreenSize.iPhone8.size.width)
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.7),
- maxValue: .constant(ScreenSize.iPhone8.size.height)
- )
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalCornerRadius: 20,
- modalMaskedCorners: [
- .layerMinXMinYCorner,
- .layerMinXMaxYCorner,
- .layerMaxXMinYCorner,
- .layerMaxXMaxYCorner
- ],
- backgroundVisualEffect: UIBlurEffect(style: .regular),
- backgroundVisualEffectIntensity: 0.5
- )
- ),
- ],
- snapDirection: .bottomToTop,
- interpolationClampingConfig: .init(
- shouldClampModalLastHeight: true,
- shouldClampModalLastWidth: true,
- shouldClampModalLastX: true
- )
- );
-
- // MARK: - Demos
- // -------------
-
- case .demo01: return AdaptiveModalConfig(
- snapPoints: [
- // Snap Point 1
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: .stretch,
- height: .percent(percentValue: 0.3)
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- //modalOpacity: 1,
- modalShadowOffset: .init(width: 0, height: -2),
- modalShadowOpacity: 0.2,
- modalShadowRadius: 7,
- modalCornerRadius: 25,
- modalMaskedCorners: [
- .layerMinXMinYCorner,
- .layerMaxXMinYCorner
- ],
- modalBackgroundOpacity: 0.9,
- modalBackgroundVisualEffect: UIBlurEffect(style: .systemUltraThinMaterial),
- modalBackgroundVisualEffectIntensity: 1,
- backgroundOpacity: 0,
- backgroundVisualEffect: UIBlurEffect(style: .systemUltraThinMaterialDark),
- backgroundVisualEffectIntensity: 0
- )
- ),
-
- // Snap Point 2
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: .stretch,
- height: .percent(percentValue: 0.5),
- marginLeft: .constant(15),
- marginRight: .constant(15),
- marginBottom: .init(
- mode: .safeAreaInsets(insetKey: \.bottom),
- minValue: .constant(15)
- )
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalShadowOffset: .init(width: 2, height: 2),
- modalShadowOpacity: 0.2,
- modalShadowRadius: 15,
- modalCornerRadius: 10,
- modalMaskedCorners: [
- .layerMinXMinYCorner,
- .layerMaxXMinYCorner,
- .layerMinXMaxYCorner,
- .layerMaxXMaxYCorner
- ],
- modalBackgroundOpacity: 0.85,
- modalBackgroundVisualEffectIntensity: 0.6,
- backgroundOpacity: 0.1,
- backgroundVisualEffectIntensity: 0.075
- )
- ),
-
- // Snap Point 3
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .center,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.85),
- maxValue: .constant(ScreenSize.iPhone8.size.width)
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.75),
- maxValue: .constant(ScreenSize.iPhone8.size.height)
- )
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalShadowOffset: .init(width: 2, height: 2),
- modalShadowOpacity: 0.3,
- modalShadowRadius: 10,
- modalCornerRadius: 20,
- modalMaskedCorners: [
- .layerMinXMinYCorner,
- .layerMinXMaxYCorner,
- .layerMaxXMinYCorner,
- .layerMaxXMaxYCorner
- ],
- modalBackgroundOpacity: 0.8,
- modalBackgroundVisualEffectIntensity: 1,
- backgroundOpacity: 0,
- //backgroundVisualEffectOpacity: 0.5,
- backgroundVisualEffectIntensity: 0.5
- )
- ),
-
- // Snap Point 4
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: RNILayoutValue(
- mode: .stretch
- ),
- height: RNILayoutValue(
- mode: .stretch
- ),
- marginTop: .safeAreaInsets(insetKey: \.top)
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalShadowOffset: .init(width: 0, height: -1),
- modalShadowOpacity: 0.4,
- modalShadowRadius: 10,
- modalCornerRadius: 25,
- modalMaskedCorners: [
- .layerMinXMinYCorner,
- .layerMaxXMinYCorner,
- ],
- modalBackgroundOpacity: 0.83,
- modalBackgroundVisualEffectIntensity: 1,
- backgroundVisualEffectIntensity: 1
- )
- ),
- ],
- snapDirection: .bottomToTop,
- interpolationClampingConfig: .init(
- shouldClampModalLastHeight: true,
- shouldClampModalLastWidth: true,
- shouldClampModalLastX: true
- ),
- overshootSnapPoint: AdaptiveModalSnapPointPreset(
- layoutPreset: .fitScreen
- )
- );
-
- case .demo02: return AdaptiveModalConfig(
- snapPoints: [
- // snap point - 1
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.8)
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.2)
- )
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalShadowOffset: .init(width: 0, height: -2),
- modalShadowOpacity: 0.3,
- modalShadowRadius: 7,
- modalCornerRadius: 10,
- modalMaskedCorners: [
- .layerMinXMinYCorner,
- .layerMaxXMinYCorner
- ],
- backgroundOpacity: 0,
- backgroundVisualEffect: UIBlurEffect(style: .regular),
- backgroundVisualEffectIntensity: 0
- )
- ),
-
- // snap point - 2
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.8)
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.4)
- )
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalShadowOffset: .init(width: 1, height: 1),
- modalShadowOpacity: 0.4,
- modalShadowRadius: 7,
- modalCornerRadius: 15,
- modalMaskedCorners: [
- .layerMinXMinYCorner,
- .layerMaxXMinYCorner
- ],
- backgroundOpacity: 0.1
- )
- ),
- // snap point - 3
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.9)
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.7)
- )
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalShadowOffset: .init(width: 2, height: 2),
- modalShadowOpacity: 0.3,
- modalShadowRadius: 8,
- backgroundOpacity: 0.3,
- backgroundVisualEffect: UIBlurEffect(style: .regular),
- backgroundVisualEffectIntensity: 0.3
- )
- ),
- ],
- snapDirection: .bottomToTop,
- overshootSnapPoint: AdaptiveModalSnapPointPreset(
- layoutPreset: .fitScreenVertically
- )
- );
-
- case .demo03: return AdaptiveModalConfig(
- snapPoints: [
- // snap point - 1
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .left,
- verticalAlignment: .center,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.5)
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.65)
- ),
- marginLeft: .constant(15)
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalScaleX: 1,
- modalScaleY: 1,
- modalShadowOffset: .init(width: 1, height: 1),
- modalShadowOpacity: 0.3,
- modalShadowRadius: 8,
- modalCornerRadius: 10,
- modalBackgroundOpacity: 0.87,
- modalBackgroundVisualEffect: UIBlurEffect(style: .regular),
- modalBackgroundVisualEffectIntensity: 1,
- backgroundVisualEffect: UIBlurEffect(style: .regular),
- backgroundVisualEffectIntensity: 0.04
- )
- ),
- // snap point - 2
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .center,
- width: RNILayoutValue(
- mode: .stretch
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.85)
- ),
- marginLeft: .constant(20),
- marginRight: .constant(20)
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalShadowOffset: .init(width: 2, height: 2),
- modalShadowOpacity: 0.2,
- modalShadowRadius: 15,
- modalCornerRadius: 15,
- modalBackgroundOpacity: 0.9,
- modalBackgroundVisualEffectIntensity: 0.5,
- backgroundVisualEffectIntensity: 0.5
- )
- ),
- ],
- snapDirection: .leftToRight,
- undershootSnapPoint: .init(
- layoutPreset: .offscreenLeft,
- animationKeyframe: .init(
- modalScaleX: 0.5,
- modalScaleY: 0.5,
- modalCornerRadius: 5,
- backgroundVisualEffectIntensity: 0
- )
- ),
- overshootSnapPoint: AdaptiveModalSnapPointPreset(
- layoutPreset: .offscreenRight
- )
- );
-
- case .demo04: return AdaptiveModalConfig(
- snapPoints: [
- // 1
- .init(
- snapPoint: .init(
- horizontalAlignment: .center,
- verticalAlignment: .top,
- width: .stretch,
- height: .percent(percentValue: 0.2),
- marginLeft: .constant(10),
- marginRight: .constant(10),
- marginTop: .multipleValues([
- .safeAreaInsets(insetKey: \.top),
- .constant(10)
- ])
- ),
- animationKeyframe: .init(
- modalScaleX: 1,
- modalScaleY: 1,
- modalShadowOpacity: 0.3,
- modalShadowRadius: 10,
- modalCornerRadius: 10
- )
- ),
-
- // 2
- .init(
- snapPoint: .init(
- horizontalAlignment: .center,
- verticalAlignment: .center,
- width: .stretch,
- height: .percent(percentValue: 0.5),
- marginLeft: .constant(15),
- marginRight: .constant(15)
- ),
- animationKeyframe: .init(
- modalShadowOffset: .init(width: 2, height: 2),
- modalShadowOpacity: 0.2,
- modalShadowRadius: 5,
- modalCornerRadius: 15,
- backgroundOpacity: 0.25
- )
- )
- ],
- snapDirection: .topToBottom,
- undershootSnapPoint: .init(
- layoutPreset: .offscreenTop,
- animationKeyframe: .init(
- modalScaleX: 0.75,
- modalScaleY: 0.75
- )
- ),
- overshootSnapPoint: .init(
- layoutPreset: .offscreenBottom,
- animationKeyframe: .init(
- modalScaleX: 0.9,
- modalScaleY: 0.9,
- modalOpacity: 0.8,
- backgroundOpacity: 0
- )
- )
- );
-
- case .demo05: return AdaptiveModalConfig(
- snapPoints: [
- // snap point - 1
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .left,
- verticalAlignment: .center,
- width: .percent(percentValue: 0.7),
- height: .stretch
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalShadowOffset: .init(width: 1, height: 0),
- modalShadowOpacity: 0.3,
- modalShadowRadius: 8,
- modalBackgroundOpacity: 0.87,
- modalBackgroundVisualEffect: UIBlurEffect(style: .regular),
- modalBackgroundVisualEffectIntensity: 1,
- backgroundVisualEffect: UIBlurEffect(style: .regular),
- backgroundVisualEffectIntensity: 0.04
- )
- ),
-
- // snap point - 2
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .center,
- width: .stretch,
- height: .stretch(
- offsetValue: .multipleValues([
- .safeAreaInsets(insetKey: \.top),
- .safeAreaInsets(insetKey: \.bottom),
- .constant(40),
- ]),
- offsetOperation: .subtract
- ),
- marginLeft: .constant(20),
- marginRight: .constant(20)
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalShadowOffset: .init(width: 2, height: 2),
- modalShadowOpacity: 0.2,
- modalShadowRadius: 15,
- modalCornerRadius: 15,
- modalBackgroundOpacity: 0.9,
- modalBackgroundVisualEffectIntensity: 0.5,
- backgroundVisualEffectIntensity: 0.5
- )
- ),
- ],
- snapDirection: .leftToRight,
- undershootSnapPoint: .init(
- layoutPreset: .offscreenLeft,
- animationKeyframe: .init(
- backgroundVisualEffectIntensity: 0
- )
- ),
- overshootSnapPoint: AdaptiveModalSnapPointPreset(
- layoutPreset: .edgeRight
- )
- );
-
- case .demo06: return AdaptiveModalConfig(
- snapPoints: [
- // snap point - 1
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: .percent(percentValue: 0.8),
- height: .percent(percentValue: 0.2),
- marginBottom: .init(
- mode: .safeAreaInsets(insetKey: \.bottom),
- minValue: .constant(15)
- )
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalShadowOffset: .init(width: 0, height: -2),
- modalShadowOpacity: 0.3,
- modalShadowRadius: 7,
- modalCornerRadius: 10,
- backgroundOpacity: 0,
- backgroundVisualEffect: UIBlurEffect(style: .regular),
- backgroundVisualEffectIntensity: 0
- )
- ),
-
- // snap point - 2
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: .percent(percentValue: 0.85),
- height: .percent(percentValue: 0.5),
- marginBottom: .init(
- mode: .safeAreaInsets(insetKey: \.bottom),
- minValue: .constant(15)
- )
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalShadowOffset: .init(width: 1, height: 1),
- modalShadowOpacity: 0.4,
- modalShadowRadius: 7,
- modalCornerRadius: 15,
- backgroundOpacity: 0.1
- )
- ),
-
- // snap point - 3
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: .percent(percentValue: 0.87),
- height: .percent(percentValue: 0.7),
- marginBottom: .init(
- mode: .safeAreaInsets(insetKey: \.bottom),
- minValue: .constant(15)
- )
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalShadowOffset: .init(width: 2, height: 2),
- modalShadowOpacity: 0.3,
- modalShadowRadius: 8,
- backgroundOpacity: 0.3,
- backgroundVisualEffectIntensity: 0.3
- )
- ),
- ],
- snapDirection: .bottomToTop,
- overshootSnapPoint: AdaptiveModalSnapPointPreset(
- layoutPreset: .layoutConfig(
- .init(
- horizontalAlignment: .center,
- verticalAlignment: .center,
- width: .percent(percentValue: 0.87),
- height: .stretch,
- marginTop: .init(
- mode: .safeAreaInsets(insetKey: \.top),
- minValue: .constant(15)
- ),
- marginBottom: .init(
- mode: .safeAreaInsets(insetKey: \.bottom),
- minValue: .constant(15)
- )
- )
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalShadowOffset: .init(width: 3, height: 3),
- modalShadowOpacity: 0.35,
- modalShadowRadius: 15
- )
- )
- );
-
- case .demo07: return AdaptiveModalConfig(
- snapPoints: [
- // snap point - 1
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .left,
- verticalAlignment: .center,
- width: .percent(percentValue: 0.7),
- height: .percent(percentValue: 0.65),
- marginLeft: .constant(15)
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalScaleX: 1,
- modalScaleY: 1,
- modalShadowOffset: .init(width: 1, height: 1),
- modalShadowOpacity: 0.3,
- modalShadowRadius: 10,
- modalCornerRadius: 15,
- modalBackgroundOpacity: 0.85,
- modalBackgroundVisualEffectIntensity: 0.9,
- backgroundColor: .white,
- backgroundOpacity: 0.15,
- backgroundVisualEffectIntensity: 0.05
- )
- ),
-
- // snap point - 2
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .center,
- width: .stretch,
- height: .stretch
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalShadowOffset: .zero,
- modalShadowOpacity: 0,
- modalShadowRadius: 0,
- modalBackgroundOpacity: 0,
- modalBackgroundVisualEffectOpacity: 0,
- modalBackgroundVisualEffectIntensity: 0,
- backgroundColor: .white,
- backgroundOpacity: 0.75,
- backgroundVisualEffectIntensity: 1
- )
- ),
- ],
- snapDirection: .leftToRight,
- undershootSnapPoint: .init(
- layoutPreset: .offscreenLeft,
- animationKeyframe: .init(
- modalScaleX: 0.5,
- modalScaleY: 0.5,
- modalCornerRadius: 10,
- modalBackgroundOpacity: 1,
- modalBackgroundVisualEffect: UIBlurEffect(style: .regular),
- modalBackgroundVisualEffectIntensity: 0,
- backgroundVisualEffect: UIBlurEffect(style: .regular),
- backgroundVisualEffectIntensity: 0
- )
- ),
- overshootSnapPoint: AdaptiveModalSnapPointPreset(
- layoutPreset: .offscreenRight
- )
- );
-
- case .demo08: return AdaptiveModalConfig(
- snapPoints: [
- // Snap Point 1
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: .stretch,
- height: .percent(percentValue: 0.3)
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalShadowOffset: .init(width: 0, height: -2),
- modalShadowOpacity: 0.2,
- modalShadowRadius: 7,
- modalCornerRadius: 0,
- modalMaskedCorners: [
- .layerMinXMinYCorner,
- .layerMaxXMinYCorner
- ],
- modalBackgroundOpacity: 0.9,
- modalBackgroundVisualEffect: UIBlurEffect(style: .systemUltraThinMaterial),
- modalBackgroundVisualEffectIntensity: 1,
- backgroundVisualEffect: UIBlurEffect(style: .regular),
- backgroundVisualEffectIntensity: 0
- )
- ),
-
- // Snap Point 2
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: .stretch,
- height: .percent(percentValue: 0.75)
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalShadowOffset: .init(width: 0, height: -2),
- modalShadowOpacity: 0.2,
- modalShadowRadius: 7,
- modalCornerRadius: 15,
- modalMaskedCorners: [
- .layerMinXMinYCorner,
- .layerMaxXMinYCorner
- ],
- modalBackgroundOpacity: 0.85,
- modalBackgroundVisualEffectIntensity: 0.25,
- backgroundVisualEffectIntensity: 0.75
- )
- )
- ],
- snapDirection: .bottomToTop,
- overshootSnapPoint: AdaptiveModalSnapPointPreset(
- layoutPreset: .fitScreen
- )
- );
-
- case .demo09: return AdaptiveModalConfig(
- snapPoints: [
- // Snap Point 1
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: .stretch,
- height: .percent(percentValue: 0.3),
- marginLeft: .multipleValues([
- .safeAreaInsets(insetKey: \.left),
- .constant(15),
- ]),
- marginRight: .multipleValues([
- .safeAreaInsets(insetKey: \.right),
- .constant(15)
- ]),
- marginBottom: .multipleValues([
- .safeAreaInsets(insetKey: \.bottom),
- .keyboardRelativeSize(sizeKey: \.height),
- .constant(15)
- ])
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalShadowOffset: .init(width: 0, height: -2),
- modalShadowOpacity: 0.2,
- modalShadowRadius: 7,
- modalCornerRadius: 12,
- modalMaskedCorners: .allCorners,
- modalBackgroundOpacity: 0.9,
- modalBackgroundVisualEffect: UIBlurEffect(style: .systemUltraThinMaterial),
- modalBackgroundVisualEffectIntensity: 1,
- backgroundVisualEffect: UIBlurEffect(style: .regular),
- backgroundVisualEffectIntensity: 0
- )
- ),
- ],
- snapDirection: .bottomToTop,
- overshootSnapPoint: AdaptiveModalSnapPointPreset(
- layoutPreset: .fitScreenVertically
- )
- );
-
- case .demo10: return AdaptiveModalConfig(
- snapPoints: [
- // snap point - 1
- AdaptiveModalSnapPointConfig(
- snapPoint: .init(
- horizontalAlignment: .left,
- verticalAlignment: .center,
- width: .percent(percentValue: 0.5),
- height: .percent(percentValue: 0.5)
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalScaleX: 1,
- modalScaleY: 1,
- modalShadowOffset: .init(width: 1, height: 1),
- modalShadowOpacity: 0.3,
- modalShadowRadius: 8,
- modalCornerRadius: 10,
- modalMaskedCorners: .rightCorners,
- modalBackgroundOpacity: 0.87,
- modalBackgroundVisualEffect: UIBlurEffect(style: .regular),
- modalBackgroundVisualEffectIntensity: 1,
- backgroundVisualEffect: UIBlurEffect(style: .regular),
- backgroundVisualEffectIntensity: 0.04
- )
- ),
- // snap point - 2
- AdaptiveModalSnapPointConfig(
- snapPoint: RNILayout(
- horizontalAlignment: .left,
- verticalAlignment: .center,
- width: RNILayoutValue(
- mode: .stretch
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.85)
- ),
- marginRight: .constant(25)
- ),
- animationKeyframe: AdaptiveModalAnimationConfig(
- modalShadowOffset: .init(width: 2, height: 2),
- modalShadowOpacity: 0.2,
- modalShadowRadius: 15,
- modalCornerRadius: 15,
- modalBackgroundOpacity: 0.9,
- modalBackgroundVisualEffectIntensity: 0.5,
- backgroundVisualEffectIntensity: 0.5
- )
- ),
- ],
- snapDirection: .leftToRight,
- undershootSnapPoint: .init(
- layoutPreset: .offscreenLeft,
- animationKeyframe: .init(
- modalScaleX: 0.5,
- modalScaleY: 0.5,
- modalCornerRadius: 5,
- backgroundVisualEffectIntensity: 0
- )
- ),
- overshootSnapPoint: AdaptiveModalSnapPointPreset(
- layoutPreset: .edgeRight
- )
- );
- };
- };
-};
-
diff --git a/experiments/swift-programmatic-modal/Test/AdaptiveModalPresentationTestViewController.swift b/experiments/swift-programmatic-modal/Test/AdaptiveModalPresentationTestViewController.swift
deleted file mode 100644
index 9019ad9b..00000000
--- a/experiments/swift-programmatic-modal/Test/AdaptiveModalPresentationTestViewController.swift
+++ /dev/null
@@ -1,352 +0,0 @@
-//
-// AdaptiveModalPresentationTest.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 6/7/23.
-//
-
-import UIKit
-
-fileprivate class TestModalViewController: UIViewController, AdaptiveModalEventNotifiable {
-
- weak var modalManager: AdaptiveModalManager?;
-
- var showDismissButton = true;
- var showCustomSnapPointButton = false;
- var showTextInputField = false;
-
- lazy var floatingViewLabel: UILabel = {
- let label = UILabel();
-
- label.text = "\(self.modalManager?.currentInterpolationIndex ?? -1)";
- label.textColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 0.5);
- label.font = .boldSystemFont(ofSize: 22);
-
- return label;
- }();
-
- override func viewDidLoad() {
- self.view.backgroundColor = .white;
-
- let dismissButton: UIButton = {
- let button = UIButton();
-
- button.setTitle("Dismiss Modal", for: .normal);
- button.configuration = .filled();
-
- button.addTarget(
- self,
- action: #selector(self.onPressButtonDismiss(_:)),
- for: .touchUpInside
- );
-
- return button;
- }();
-
- let customSnapPointButton: UIButton = {
- let button = UIButton();
-
- button.setTitle("Custom Snap Point", for: .normal);
- button.configuration = .filled();
-
- button.addTarget(
- self,
- action: #selector(self.onPressButtonCustomSnapPoint(_:)),
- for: .touchUpInside
- );
-
- return button;
- }();
-
- let textInputField: UITextField = {
- let textField = UITextField();
-
- textField.placeholder = "Enter text here";
- textField.font = UIFont.systemFont(ofSize: 15);
- textField.borderStyle = UITextField.BorderStyle.roundedRect;
- textField.autocorrectionType = UITextAutocorrectionType.no;
- textField.keyboardType = UIKeyboardType.default;
- textField.returnKeyType = UIReturnKeyType.done;
- textField.clearButtonMode = UITextField.ViewMode.whileEditing;
- textField.contentVerticalAlignment = UIControl.ContentVerticalAlignment.center;
-
- return textField;
- }();
-
- let stackView: UIStackView = {
- let stack = UIStackView();
-
- stack.axis = .vertical;
- stack.distribution = .equalSpacing;
- stack.alignment = .center;
- stack.spacing = 10;
-
- stack.addArrangedSubview(self.floatingViewLabel);
-
- if self.showTextInputField {
- stack.addArrangedSubview(textInputField);
- };
-
- if self.showDismissButton {
- stack.addArrangedSubview(dismissButton);
- };
-
- if self.showCustomSnapPointButton {
- stack.addArrangedSubview(customSnapPointButton);
- };
-
- return stack;
- }();
-
- stackView.translatesAutoresizingMaskIntoConstraints = false;
- self.view.addSubview(stackView);
-
- NSLayoutConstraint.activate([
- stackView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
- stackView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor),
- ]);
- };
-
- @objc func onPressButtonDismiss(_ sender: UIButton){
- self.dismiss(animated: true);
- };
-
- @objc func onPressButtonCustomSnapPoint(_ sender: UIButton){
- let snapPoint = AdaptiveModalSnapPointConfig(
- key: .string("custom"),
- snapPoint: .init(
- horizontalAlignment: .center,
- verticalAlignment: .center,
- width: .stretch,
- height: .stretch,
- marginLeft: .constant(15),
- marginRight: .constant(15),
- marginTop: .multipleValues([
- .safeAreaInsets(insetKey: \.top),
- .constant(15),
- ]),
- marginBottom: .multipleValues([
- .safeAreaInsets(insetKey: \.bottom),
- .keyboardRelativeSize(sizeKey: \.height),
- .constant(15),
- ])
- ),
- animationKeyframe: .init(
- modalCornerRadius: 15,
- modalMaskedCorners: [
- .layerMaxXMaxYCorner,
- .layerMaxXMinYCorner,
- .layerMinXMaxYCorner,
- .layerMinXMinYCorner,
- ],
- modalBackgroundOpacity: 0.9,
- backgroundOpacity: 0
- )
- );
-
- //self.dismiss(animated: true);
- self.modalManager?.snapTo(
- snapPointConfig: snapPoint
- );
- };
-
- func notifyOnModalWillSnap(
- prevSnapPointIndex: Int?,
- nextSnapPointIndex: Int,
- snapPointConfig: AdaptiveModalSnapPointConfig,
- interpolationPoint: AdaptiveModalInterpolationPoint
- ) {
- self.floatingViewLabel.text = "\(nextSnapPointIndex)";
- };
-
- func notifyOnModalDidSnap(
- prevSnapPointIndex: Int?,
- currentSnapPointIndex: Int,
- snapPointConfig: AdaptiveModalSnapPointConfig,
- interpolationPoint: AdaptiveModalInterpolationPoint
- ) {
- self.floatingViewLabel.text = "\(currentSnapPointIndex)";
- };
-};
-
-class AdaptiveModalPresentationTestViewController : UIViewController {
-
- lazy var adaptiveModalManager = AdaptiveModalManager(
- modalConfig: self.currentModalConfigPreset.config
- );
-
- let modalConfigs: [AdaptiveModalConfigTestPresets] = [
- .demo01,
- .demo02,
- .demo03,
- .demo04,
- .demo05,
- .demo06,
- .demo07,
- .demo08,
- .demo09,
- .demo10,
- ];
-
- var currentModalConfigPresetCounter = 0;
-
- var currentModalConfigPresetIndex: Int {
- self.currentModalConfigPresetCounter % self.modalConfigs.count
- };
-
- var currentModalConfigPreset: AdaptiveModalConfigTestPresets {
- self.modalConfigs[self.currentModalConfigPresetIndex];
- //AdaptiveModalConfigTestPresets.default;
- };
-
- var currentModalManagerAdjustmentBlock: () -> Void {
- let defaultBlock = {
- self.adaptiveModalManager.enableOverShooting = true;
-
- self.adaptiveModalManager.shouldSnapToUnderShootSnapPoint = true;
- self.adaptiveModalManager.shouldSnapToOvershootSnapPoint = false;
-
- self.adaptiveModalManager.shouldDismissModalOnSnapToUnderShootSnapPoint = true;
- self.adaptiveModalManager.shouldDismissModalOnSnapToOverShootSnapPoint = false;
- };
-
- switch self.currentModalConfigPreset {
- case .demo04: return {
- self.adaptiveModalManager.shouldSnapToOvershootSnapPoint = true;
- self.adaptiveModalManager.shouldDismissModalOnSnapToOverShootSnapPoint = true;
- };
-
- case .demo07: return {
- self.adaptiveModalManager.enableOverShooting = false;
- };
-
- default: return defaultBlock;
- };
- };
-
- var counterLabel: UILabel?;
-
- override func viewDidLoad() {
- self.view.backgroundColor = .white;
-
- let dummyBackgroundView: UIView = {
- let imageView = UIImageView(
- image: UIImage(named: "DummyBackgroundImage2")
- );
-
- imageView.contentMode = .scaleAspectFill;
- return imageView;
- }();
-
- self.view.addSubview(dummyBackgroundView);
- dummyBackgroundView.translatesAutoresizingMaskIntoConstraints = false;
-
- NSLayoutConstraint.activate([
- dummyBackgroundView.topAnchor .constraint(equalTo: self.view.topAnchor ),
- dummyBackgroundView.bottomAnchor .constraint(equalTo: self.view.bottomAnchor ),
- dummyBackgroundView.leadingAnchor .constraint(equalTo: self.view.leadingAnchor ),
- dummyBackgroundView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
- ]);
-
- let counterLabel: UILabel = {
- let label = UILabel();
-
- label.text = "\(self.currentModalConfigPresetIndex)";
- label.font = .systemFont(ofSize: 24, weight: .bold);
- label.textColor = .white;
-
- self.counterLabel = label;
-
- return label;
- }();
-
- let presentButton: UIButton = {
- let button = UIButton();
- button.setTitle("Present View Controller", for: .normal);
-
- button.addTarget(
- self,
- action: #selector(self.onPressButtonPresentViewController(_:)),
- for: .touchUpInside
- );
-
- return button;
- }();
-
- let nextConfigButton: UIButton = {
- let button = UIButton();
- button.setTitle("Next Modal Config", for: .normal);
-
- button.addTarget(
- self,
- action: #selector(self.onPressButtonNextConfig(_:)),
- for: .touchUpInside
- );
-
- return button;
- }();
-
-
- let stackView: UIStackView = {
- let stack = UIStackView();
-
- stack.axis = .vertical;
- stack.distribution = .equalSpacing;
- stack.alignment = .center;
- stack.spacing = 7;
-
- stack.addArrangedSubview(counterLabel);
- stack.addArrangedSubview(presentButton);
- stack.addArrangedSubview(nextConfigButton);
-
- return stack;
- }();
-
- stackView.translatesAutoresizingMaskIntoConstraints = false;
- self.view.addSubview(stackView);
-
- NSLayoutConstraint.activate([
- stackView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
- stackView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor),
- ]);
- };
-
- override func viewDidLayoutSubviews() {
-
- };
-
- @objc func onPressButtonPresentViewController(_ sender: UIButton) {
- let testVC = TestModalViewController();
-
- switch self.currentModalConfigPreset {
- case .demo07, .demo08:
- testVC.showCustomSnapPointButton = true;
-
- case .demo09:
- testVC.showCustomSnapPointButton = true;
- testVC.showTextInputField = true;
-
- case .demo10:
- testVC.showCustomSnapPointButton = true;
-
- default: break;
- };
-
- self.adaptiveModalManager.eventDelegate = testVC;
- testVC.modalManager = self.adaptiveModalManager;
-
-
- self.adaptiveModalManager.presentModal(
- viewControllerToPresent: testVC,
- presentingViewController: self
- );
- };
-
- @objc func onPressButtonNextConfig(_ sender: UIButton) {
- self.currentModalConfigPresetCounter += 1;
- self.counterLabel!.text = "\(self.currentModalConfigPresetIndex)";
-
- self.adaptiveModalManager.modalConfig = self.currentModalConfigPreset.config;
- self.currentModalManagerAdjustmentBlock();
- };
-};
diff --git a/experiments/swift-programmatic-modal/Test/BlurEffectTestViewController.swift b/experiments/swift-programmatic-modal/Test/BlurEffectTestViewController.swift
deleted file mode 100644
index fbaa29ce..00000000
--- a/experiments/swift-programmatic-modal/Test/BlurEffectTestViewController.swift
+++ /dev/null
@@ -1,188 +0,0 @@
-//
-// BlurEffectTestViewController.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 5/22/23.
-//
-
-import UIKit
-
-
-class BlurEffectView: UIVisualEffectView {
-
- var animator = UIViewPropertyAnimator(duration: 1, curve: .linear);
-
- func setBlur(intensity: CGFloat){
- self.animator.fractionComplete = intensity;
- };
-
- override func didMoveToSuperview() {
- guard let superview = superview else { return }
- backgroundColor = .clear
- frame = superview.bounds //Or setup constraints instead
- setupBlur()
- }
-
- private func setupBlur() {
- animator.stopAnimation(true)
- effect = nil
-
- animator.addAnimations { [weak self] in
- self?.effect = UIBlurEffect(style: .dark)
- }
- animator.fractionComplete = 0.1; //This is your blur intensity in range 0 - 1
- }
-
- deinit {
- animator.stopAnimation(true)
- }
-}
-
-
-class BlurEffectIntensityManager {
-
- var animator: UIViewPropertyAnimator?;
- var onDisplayLinkUpdateBlock: (() -> Void)? = nil;
-
- func setBlur(
- forBlurEffectView blurEffectView: UIVisualEffectView,
- intensity: CGFloat = 1,
- blurEffectStyle: UIBlurEffect.Style = .systemMaterial,
- duration: CGFloat = 0,
- curve: UIView.AnimationCurve = .easeIn
- ) {
- let animator = UIViewPropertyAnimator(duration: duration, curve: curve);
- self.animator = animator;
-
- blurEffectView.effect = nil;
-
- animator.addAnimations {
- blurEffectView.effect = UIBlurEffect(style: blurEffectStyle);
- // blurEffectView.alpha = intensity;
- };
-
- if duration == 0 {
- animator.fractionComplete = intensity;
- animator.stopAnimation(true);
- self.animator = nil;
-
- } else {
- animator.startAnimation();
- return;
-
- let displayLink = CADisplayLink(
- target: self,
- selector: #selector(self.onDisplayLinkUpdate)
- );
-
- displayLink.add(to: .current, forMode: .common)
-
- self.onDisplayLinkUpdateBlock = {
- guard animator.fractionComplete >= intensity else { return };
- animator.stopAnimation(true);
-
- self.animator = nil;
- self.onDisplayLinkUpdateBlock = nil;
- };
- };
- };
-
- @objc func onDisplayLinkUpdate() {
- return;
- self.onDisplayLinkUpdateBlock?();
- };
-};
-
-
-class BlurEffectTestViewController: UIViewController {
-
- lazy var blurEffectView = BlurEffectView();
-
- let blurManager = BlurEffectIntensityManager();
- var isBlurred = false;
-
- var boxView: UIView {
- let view = UIView();
-
- view.backgroundColor = UIColor(
- hue: CGFloat(Int.random(in: 0...360)) / 360,
- saturation: 50 / 100,
- brightness: 100 / 100,
- alpha: 1.0
- );
-
- view.translatesAutoresizingMaskIntoConstraints = false;
-
- NSLayoutConstraint.activate([
- view.heightAnchor.constraint(equalToConstant: 100),
- view.widthAnchor.constraint(equalToConstant: 100),
- ]);
-
-
- return view;
- };
-
- override func loadView() {
- let view = UIView();
- view.backgroundColor = .white;
-
- self.view = view;
-
- let blurEffectView = self.blurEffectView;
- blurEffectView.effect = UIBlurEffect(style: .prominent);
-
- blurEffectView.addGestureRecognizer(
- UITapGestureRecognizer(
- target: self,
- action: #selector(self.onPressBlurView(_:))
- )
- );
-
- let stackView = UIStackView(arrangedSubviews: [
- self.boxView,
- self.boxView,
- self.boxView,
- self.boxView
- ]);
-
- stackView.alignment = .center;
-
- view.addSubview(stackView);
- stackView.translatesAutoresizingMaskIntoConstraints = false;
-
- view.addSubview(blurEffectView);
- blurEffectView.translatesAutoresizingMaskIntoConstraints = false;
-
- NSLayoutConstraint.activate([
- stackView.topAnchor.constraint(equalTo: view.topAnchor),
- stackView.leftAnchor.constraint(equalTo: view.leftAnchor),
- stackView.rightAnchor.constraint(equalTo: view.rightAnchor),
- stackView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
-
- blurEffectView.widthAnchor.constraint(equalTo: view.widthAnchor),
- blurEffectView.heightAnchor.constraint(equalTo: view.heightAnchor),
- blurEffectView.centerYAnchor.constraint(equalTo: view.centerYAnchor),
- blurEffectView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
- ])
- };
-
- override func viewDidLoad() {
- return;
- self.blurManager.setBlur(
- forBlurEffectView: self.blurEffectView,
- intensity: 1
- );
- };
-
- @objc func onPressBlurView(_ sender: UITapGestureRecognizer){
-
- if isBlurred {
- self.blurEffectView.setBlur(intensity: 0);
-
- } else {
- self.blurEffectView.setBlur(intensity: 1);
- };
-
- self.isBlurred.toggle();
- };
-};
diff --git a/experiments/swift-programmatic-modal/Test/RNIDraggableTestViewController.swift b/experiments/swift-programmatic-modal/Test/RNIDraggableTestViewController.swift
deleted file mode 100644
index 5eca8488..00000000
--- a/experiments/swift-programmatic-modal/Test/RNIDraggableTestViewController.swift
+++ /dev/null
@@ -1,144 +0,0 @@
-//
-// RNIDraggableTestViewController.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 5/22/23.
-//
-
-
-import UIKit
-
-
-class RNIDraggableTestViewController : UIViewController {
-
- lazy var modalManager: AdaptiveModalManager = {
- let manager = AdaptiveModalManager(
- modalConfig: AdaptiveModalConfigTestPresets.default.config
- );
-
- manager.eventDelegate = self;
- return manager;
- }();
-
- private var initialGesturePoint: CGPoint = .zero;
- private var floatingViewInitialCenter: CGPoint = .zero
-
- lazy var floatingViewLabel: UILabel = {
- let label = UILabel();
-
- label.text = "\(self.modalManager.currentSnapPointIndex)";
- label.textColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 0.5);
- label.font = .boldSystemFont(ofSize: 22);
-
- return label;
- }();
-
- lazy var floatingView: UIView = {
- let view = UIView();
-
- // view.backgroundColor = UIColor(
- // hue: 0/360,
- // saturation: 0/100,
- // brightness: 100/100,
- // alpha: 0
- // );
-
- // view.addGestureRecognizer(
- // UIPanGestureRecognizer(
- // target: self,
- // action: #selector(self.onDragPanGestureView(_:))
- // )
- // );
-
- let floatingViewLabel = self.floatingViewLabel;
- view.addSubview(floatingViewLabel);
-
- floatingViewLabel.translatesAutoresizingMaskIntoConstraints = false;
-
- NSLayoutConstraint.activate([
- floatingViewLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor),
- floatingViewLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor),
- ]);
-
- return view;
- }();
-
- override func viewDidLoad() {
- self.view.backgroundColor = .white;
-
- let dummyBackgroundView: UIView = {
- let imageView = UIImageView(
- image: UIImage(named: "DummyBackgroundImage3")
- );
-
- imageView.contentMode = .scaleAspectFill;
- return imageView;
- }();
-
- self.view.addSubview(dummyBackgroundView);
- dummyBackgroundView.translatesAutoresizingMaskIntoConstraints = false;
-
- NSLayoutConstraint.activate([
- dummyBackgroundView.topAnchor .constraint(equalTo: self.view.topAnchor ),
- dummyBackgroundView.bottomAnchor .constraint(equalTo: self.view.bottomAnchor ),
- dummyBackgroundView.leadingAnchor .constraint(equalTo: self.view.leadingAnchor ),
- dummyBackgroundView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
- ]);
-
- let presentButton: UIButton = {
- let button = UIButton();
-
- button.setTitle("Show Modal", for: .normal);
- button.configuration = .filled();
-
- button.addTarget(
- self,
- action: #selector(self.onPressButtonPresentViewController(_:)),
- for: .touchUpInside
- );
-
- return button;
- }();
-
- self.view.addSubview(presentButton);
- presentButton.translatesAutoresizingMaskIntoConstraints = false;
-
- NSLayoutConstraint.activate([
- presentButton.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
- presentButton.centerYAnchor.constraint(equalTo: self.view.centerYAnchor)
- ]);
- };
-
- override func viewDidLayoutSubviews() {
- self.modalManager.notifyDidLayoutSubviews();
- };
-
- @objc func onPressButtonPresentViewController(_ sender: UIButton){
- self.modalManager.prepareForPresentation(
- modalView: self.floatingView,
- targetView: self.view
- );
-
- self.modalManager.showModal();
- };
-};
-
-extension RNIDraggableTestViewController: AdaptiveModalEventNotifiable {
- func notifyOnModalWillSnap(
- prevSnapPointIndex: Int?,
- nextSnapPointIndex: Int,
- snapPointConfig: AdaptiveModalSnapPointConfig,
- interpolationPoint: AdaptiveModalInterpolationPoint
- ) {
- self.floatingViewLabel.text = "\(nextSnapPointIndex)";
- }
-
- func notifyOnModalDidSnap(
- prevSnapPointIndex: Int?,
- currentSnapPointIndex: Int,
- snapPointConfig: AdaptiveModalSnapPointConfig,
- interpolationPoint: AdaptiveModalInterpolationPoint
- ) {
- self.floatingViewLabel.text = "\(currentSnapPointIndex)";
- };
-};
diff --git a/experiments/swift-programmatic-modal/Test/RNILayoutTestViewController.swift b/experiments/swift-programmatic-modal/Test/RNILayoutTestViewController.swift
deleted file mode 100644
index 2bd84af4..00000000
--- a/experiments/swift-programmatic-modal/Test/RNILayoutTestViewController.swift
+++ /dev/null
@@ -1,923 +0,0 @@
-//
-// RNILayoutTestViewController.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 5/19/23.
-//
-
-import UIKit
-
-enum ScreenSize {
-
- case iPhone8;
-
- var size: CGSize {
- switch self {
- case .iPhone8:
- return CGSize(width: 375, height: 667);
- };
- };
-};
-
-let oldLayoutConfigs: [RNILayout] = [
- // 0 A
- RNILayout(
- horizontalAlignment: .left,
- verticalAlignment: .top,
- width: RNILayoutValue(
- mode: .constant(100)
- ),
- height: RNILayoutValue(
- mode: .constant(100)
- ),
- marginLeft: .safeAreaInsets(insetKey: \.left),
- marginTop: .safeAreaInsets(insetKey: \.top)
- ),
- // 1 B
- RNILayout(
- horizontalAlignment: .right,
- verticalAlignment: .top,
- width: RNILayoutValue(
- mode: .constant(100)
- ),
- height: RNILayoutValue(
- mode: .constant(100)
- ),
- marginRight: .safeAreaInsets(insetKey: \.right),
- marginTop: .safeAreaInsets(insetKey: \.top)
- ),
- // 2 C
- RNILayout(
- horizontalAlignment: .right,
- verticalAlignment: .bottom,
- width: RNILayoutValue(
- mode: .constant(100)
- ),
- height: RNILayoutValue(
- mode: .constant(100)
- )
- ),
- // 3 D
- RNILayout(
- horizontalAlignment: .left,
- verticalAlignment: .bottom,
- width: RNILayoutValue(
- mode: .constant(100)
- ),
- height: RNILayoutValue(
- mode: .constant(100)
- )
- ),
- // 4 E
- RNILayout(
- horizontalAlignment: .left,
- verticalAlignment: .center,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.5)
- ),
- height: RNILayoutValue(
- mode: .stretch
- )
- ),
- // 5 F
- RNILayout(
- horizontalAlignment: .right,
- verticalAlignment: .center,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.5)
- ),
- height: RNILayoutValue(
- mode: .stretch
- )
- ),
- // 6 G
- RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: RNILayoutValue(
- mode: .stretch
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.3)
- )
- ),
- // 7 H
- RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .top,
- width: RNILayoutValue(
- mode: .stretch
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.3)
- )
- ),
- // 8 I
- RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .center,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.7),
- maxValue: .constant(ScreenSize.iPhone8.size.width)
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.7),
- maxValue: .constant(ScreenSize.iPhone8.size.height)
- )
- ),
- // 9 J
- RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .top,
- width: RNILayoutValue(
- mode: .stretch
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.3)
- ),
- marginLeft: .constant(20),
- marginRight: .constant(20)
- ),
- // 10 K
- RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: RNILayoutValue(
- mode: .stretch
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.3)
- ),
- marginLeft: .constant(20),
- marginRight: .constant(20)
- ),
- // 11 L
- RNILayout(
- horizontalAlignment: .left,
- verticalAlignment: .center,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.5)
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.6),
- maxValue: .constant(ScreenSize.iPhone8.size.height)
- )
- ),
- // 12 M
- RNILayout(
- horizontalAlignment: .right,
- verticalAlignment: .center,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.5)
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.6),
- maxValue: .constant(ScreenSize.iPhone8.size.height)
- )
- ),
- // N
- // O = 13
- RNILayout(
- horizontalAlignment: .left,
- verticalAlignment: .center,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.4)
- ),
- height: RNILayoutValue(
- mode: .stretch,
- maxValue: .constant(ScreenSize.iPhone8.size.height)
- ),
- marginLeft: .constant(20),
- marginTop: .constant(20),
- marginBottom: .constant(20)
- ),
- // P
- RNILayout(
- horizontalAlignment: .right,
- verticalAlignment: .center,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.4)
- ),
- height: RNILayoutValue(
- mode: .stretch,
- maxValue: .constant(ScreenSize.iPhone8.size.height)
- ),
- marginRight: .constant(20),
- marginTop: .constant(20),
- marginBottom: .constant(20)
- ),
- // Q = 15
- RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: RNILayoutValue(
- mode: .stretch
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.4)
- ),
- marginLeft: .constant(20),
- marginRight: .constant(20),
- marginBottom: .constant(15)
- ),
- // R - 16
- RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .top,
- width: RNILayoutValue(
- mode: .stretch
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.4)
- ),
- marginLeft: .constant(20),
- marginRight: .constant(20),
- marginTop: .constant(20)
- ),
- // S
- RNILayout(
- horizontalAlignment: .left,
- verticalAlignment: .top,
- width: RNILayoutValue(
- mode: .constant(100)
- ),
- height: RNILayoutValue(
- mode: .constant(100)
- ),
- marginLeft: .constant(20),
- marginTop: .constant(20)
- ),
- // T
- RNILayout(
- horizontalAlignment: .right,
- verticalAlignment: .top,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.35),
- maxValue: .constant(ScreenSize.iPhone8.size.width * 0.6)
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.25),
- maxValue: .constant(ScreenSize.iPhone8.size.height * 0.5)
- ),
- marginRight: .constant(20),
- marginTop: .constant(20)
- ),
- // U
- RNILayout(
- horizontalAlignment: .left,
- verticalAlignment: .bottom,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.4),
- maxValue: .constant(ScreenSize.iPhone8.size.width * 0.7)
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.4),
- maxValue: .constant(ScreenSize.iPhone8.size.height * 0.7)
- ),
- marginLeft: .constant(20),
- marginBottom: .constant(20)
- ),
- // V
- RNILayout(
- horizontalAlignment: .right,
- verticalAlignment: .bottom,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.4),
- maxValue: .constant(ScreenSize.iPhone8.size.width * 0.7)
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.4),
- maxValue: .constant(ScreenSize.iPhone8.size.height * 0.7)
- ),
- marginRight: .constant(20),
- marginBottom: .constant(20)
- ),
- RNILayoutPreset.halfOffscreenTop.getLayoutConfig(
- fromBaseLayoutConfig: RNILayout(
- horizontalAlignment: .left,
- verticalAlignment: .top,
- width: RNILayoutValue(
- mode: .constant(100)
- ),
- height: RNILayoutValue(
- mode: .constant(100)
- )
- )
- ),
- ];
-
-let boxSizeSmall: CGFloat = 125;
-
-
-class RNILayoutTestViewController : UIViewController {
-
- lazy var layoutConfigs: [RNILayout] = [
-
- // MARK: Corners Test
- // ------------------
-
- // 0
- RNILayout(
- horizontalAlignment: .left,
- verticalAlignment: .top,
- width: .constant(125),
- height: .constant(125)
- ),
-
- // 1
- RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .top,
- width: .constant(125),
- height: .constant(125)
- ),
-
- // 2
- RNILayout(
- horizontalAlignment: .right,
- verticalAlignment: .top,
- width: .constant(125),
- height: .constant(125)
- ),
-
- // 3
- RNILayout(
- horizontalAlignment: .right,
- verticalAlignment: .center,
- width: .constant(125),
- height: .constant(125)
- ),
-
- // 4
- RNILayout(
- horizontalAlignment: .right,
- verticalAlignment: .bottom,
- width: .constant(125),
- height: .constant(125)
- ),
-
- // 5
- RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: .constant(125),
- height: .constant(125)
- ),
-
- // 6
- RNILayout(
- horizontalAlignment: .left,
- verticalAlignment: .bottom,
- width: .constant(125),
- height: .constant(125)
- ),
-
- // 7
- RNILayout(
- horizontalAlignment: .left,
- verticalAlignment: .center,
- width: .constant(125),
- height: .constant(125)
- ),
-
- // MARK: Corners + Safe Area Margin Test
- // -------------------------------------
-
- // 8
- RNILayout(
- horizontalAlignment: .left,
- verticalAlignment: .top,
- width: .constant(125),
- height: .constant(125),
- marginLeft: .safeAreaInsets(
- insetKey: \.left,
- minValue: .constant(10)
- ),
- marginTop: .safeAreaInsets(
- insetKey: \.top,
- minValue: .constant(10)
- )
- ),
-
- // 9
- RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .top,
- width: .constant(125),
- height: .constant(125),
- marginTop: .safeAreaInsets(
- insetKey: \.top,
- minValue: .constant(10)
- )
- ),
-
- // 10
- RNILayout(
- horizontalAlignment: .right,
- verticalAlignment: .top,
- width: .constant(125),
- height: .constant(125),
- marginRight: .safeAreaInsets(
- insetKey: \.right,
- minValue: .constant(10)
- ),
- marginTop: .safeAreaInsets(
- insetKey: \.top,
- minValue: .constant(10)
- )
- ),
-
- // 11
- RNILayout(
- horizontalAlignment: .right,
- verticalAlignment: .center,
- width: .constant(125),
- height: .constant(125),
- marginRight: .safeAreaInsets(
- insetKey: \.right,
- minValue: .constant(10)
- )
- ),
-
- // 12
- RNILayout(
- horizontalAlignment: .right,
- verticalAlignment: .bottom,
- width: .constant(125),
- height: .constant(125),
- marginRight: .safeAreaInsets(
- insetKey: \.right,
- minValue: .constant(10)
- ),
- marginBottom: .safeAreaInsets(
- insetKey: \.bottom,
- minValue: .constant(10)
- )
- ),
-
- // 13
- RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: .constant(125),
- height: .constant(125),
- marginBottom: .safeAreaInsets(
- insetKey: \.bottom,
- minValue: .constant(10)
- )
- ),
-
- // 14
- RNILayout(
- horizontalAlignment: .left,
- verticalAlignment: .bottom,
- width: .constant(125),
- height: .constant(125),
- marginLeft: .safeAreaInsets(
- insetKey: \.left,
- minValue: .constant(10)
- ),
- marginBottom: .safeAreaInsets(
- insetKey: \.bottom,
- minValue: .constant(10)
- )
- ),
-
- // 15
- RNILayout(
- horizontalAlignment: .left,
- verticalAlignment: .center,
- width: .constant(125),
- height: .constant(125),
- marginLeft: .safeAreaInsets(
- insetKey: \.left,
- minValue: .constant(10)
- )
- ),
-
- // MARK: Vertical Stretch Test
- // ---------------------------
-
- // 16
- RNILayout(
- horizontalAlignment: .left,
- verticalAlignment: .center,
- width: .percent(percentValue: 0.5),
- height: .stretch,
- marginLeft: .percent(
- relativeTo: .currentWidth,
- percentValue: -0.5
- )
- ),
-
- // 17
- RNILayout(
- horizontalAlignment: .left,
- verticalAlignment: .center,
- width: .percent(percentValue: 0.5),
- height: .stretch
- ),
-
- // 18
- RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .center,
- width: .percent(percentValue: 0.5),
- height: .stretch
- ),
-
- // 19
- RNILayout(
- horizontalAlignment: .right,
- verticalAlignment: .center,
- width: .percent(percentValue: 0.5),
- height: .stretch
- ),
-
- // 20
- RNILayout(
- horizontalAlignment: .right,
- verticalAlignment: .center,
- width: .percent(percentValue: 0.5),
- height: .stretch,
- marginRight: .percent(
- relativeTo: .currentWidth,
- percentValue: -0.5
- )
- ),
-
- // MARK: Vertical Stretch Test + Margin `multipleValues`
- // ----------------------------------------------------
-
- // 21
- RNILayout(
- horizontalAlignment: .left,
- verticalAlignment: .center,
- width: .percent(percentValue: 0.5),
- height: .stretch,
- marginLeft: .multipleValues([
- .safeAreaInsets(insetKey: \.left),
- .constant(15),
- ]),
- marginTop: .multipleValues([
- .safeAreaInsets(insetKey: \.top),
- .constant(15),
- ]),
- marginBottom: .multipleValues([
- .safeAreaInsets(insetKey: \.bottom),
- .constant(15),
- ])
- ),
-
- // 22
- RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .center,
- width: .percent(percentValue: 0.5),
- height: .stretch,
- marginTop: .multipleValues([
- .safeAreaInsets(insetKey: \.top),
- .constant(15),
- ]),
- marginBottom: .multipleValues([
- .safeAreaInsets(insetKey: \.bottom),
- .constant(15),
- ])
- ),
-
- // 23
- RNILayout(
- horizontalAlignment: .right,
- verticalAlignment: .center,
- width: .percent(percentValue: 0.5),
- height: .stretch,
- marginRight: .multipleValues([
- .safeAreaInsets(insetKey: \.right),
- .constant(15),
- ]),
- marginTop: .multipleValues([
- .safeAreaInsets(insetKey: \.top),
- .constant(15),
- ]),
- marginBottom: .multipleValues([
- .safeAreaInsets(insetKey: \.bottom),
- .constant(15),
- ])
- ),
-
- // MARK: Horizontal Stretch Test
- // -----------------------------
-
- // 24
- RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: .stretch,
- height: .percent(percentValue: 0.4),
- marginBottom: .percent(
- relativeTo: .currentHeight,
- percentValue: -0.5
- )
- ),
-
- // 25
- RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: .stretch,
- height: .percent(percentValue: 0.4)
- ),
-
- // 26
- RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .center,
- width: .stretch,
- height: .percent(percentValue: 0.4)
- ),
-
- // 27
- RNILayout(
- horizontalAlignment: .right,
- verticalAlignment: .top,
- width: .stretch,
- height: .percent(percentValue: 0.4)
- ),
-
- // 28
- RNILayout(
- horizontalAlignment: .right,
- verticalAlignment: .top,
- width: .stretch,
- height: .percent(percentValue: 0.4),
- marginTop: .percent(
- relativeTo: .currentHeight,
- percentValue: -0.5
- )
- ),
-
- // MARK: Horizontal/Vertical Center Test
- // -------------------------------------
-
- // 29
- RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .center,
- width: .constant(150),
- height: .constant(150),
- marginBottom: .constant(100)
- ),
-
- // MARK: Misc
- // ----------
-
- // 6 G
- RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: RNILayoutValue(
- mode: .stretch
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.3)
- )
- ),
- // 7 H
- RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .top,
- width: RNILayoutValue(
- mode: .stretch
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.3)
- )
- ),
- // 8 I
- RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .center,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.7),
- maxValue: .constant(ScreenSize.iPhone8.size.width)
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.7),
- maxValue: .constant(ScreenSize.iPhone8.size.height)
- )
- ),
- // 9 J
- RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .top,
- width: RNILayoutValue(
- mode: .stretch
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.3)
- ),
- marginLeft: .constant(20),
- marginRight: .constant(20)
- ),
- // 10 K
- RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: RNILayoutValue(
- mode: .stretch
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.3)
- ),
- marginLeft: .constant(20),
- marginRight: .constant(20)
- ),
- // 11 L
- RNILayout(
- horizontalAlignment: .left,
- verticalAlignment: .center,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.5)
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.6),
- maxValue: .constant(ScreenSize.iPhone8.size.height)
- )
- ),
- // 12 M
- RNILayout(
- horizontalAlignment: .right,
- verticalAlignment: .center,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.5)
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.6),
- maxValue: .constant(ScreenSize.iPhone8.size.height)
- )
- ),
- // N
- // O = 13
- RNILayout(
- horizontalAlignment: .left,
- verticalAlignment: .center,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.4)
- ),
- height: RNILayoutValue(
- mode: .stretch,
- maxValue: .constant(ScreenSize.iPhone8.size.height)
- ),
- marginLeft: .constant(20),
- marginTop: .constant(20),
- marginBottom: .constant(20)
- ),
- // P
- RNILayout(
- horizontalAlignment: .right,
- verticalAlignment: .center,
- width: RNILayoutValue(
- mode: .percent(percentValue: 0.4)
- ),
- height: RNILayoutValue(
- mode: .stretch,
- maxValue: .constant(ScreenSize.iPhone8.size.height)
- ),
- marginRight: .constant(20),
- marginTop: .constant(20),
- marginBottom: .constant(20)
- ),
- // Q = 15
- RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .bottom,
- width: RNILayoutValue(
- mode: .stretch
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.4)
- ),
- marginLeft: .constant(20),
- marginRight: .constant(20),
- marginBottom: .constant(15)
- ),
- // R - 16
- RNILayout(
- horizontalAlignment: .center,
- verticalAlignment: .top,
- width: RNILayoutValue(
- mode: .stretch
- ),
- height: RNILayoutValue(
- mode: .percent(percentValue: 0.4)
- ),
- marginLeft: .constant(20),
- marginRight: .constant(20),
- marginTop: .constant(20)
- )
- ];
-
- var layoutConfigCount = 0;
-
- var layoutConfigIndex: Int {
- self.layoutConfigCount % layoutConfigs.count;
- };
-
- var layoutConfig: RNILayout {
- return self.layoutConfigs[self.layoutConfigIndex];
- };
-
- var layoutValueContext: RNILayoutValueContext? {
- .init(fromTargetViewController: self)
- };
-
- lazy var floatingViewLabel: UILabel = {
- let label = UILabel();
-
- label.text = "\(self.layoutConfigIndex)";
- label.textColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 0.5);
- label.font = .boldSystemFont(ofSize: 22);
-
- return label;
- }();
-
- lazy var floatingView: UIView = {
- let view = UIView();
-
- view.backgroundColor = UIColor(
- hue: 0/360,
- saturation: 50/100,
- brightness: 100/100,
- alpha: 1.0
- );
-
- view.addGestureRecognizer(
- UITapGestureRecognizer(
- target: self,
- action: #selector(self.onPressFloatingView(_:))
- )
- );
-
- let floatingViewLabel = self.floatingViewLabel;
- view.addSubview(floatingViewLabel);
-
- floatingViewLabel.translatesAutoresizingMaskIntoConstraints = false;
-
- NSLayoutConstraint.activate([
- floatingViewLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor),
- floatingViewLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor),
- ]);
-
- return view;
- }();
-
- override func viewDidLoad() {
- self.view.backgroundColor = .white;
-
- let floatingView = self.floatingView;
- self.view.addSubview(floatingView);
-
- self.view = view;
- };
-
- override func viewDidLayoutSubviews() {
- self.updateFloatingView();
- // self.applyRadiusMaskFor();
- };
-
- func updateFloatingView(){
- guard let layoutValueContext = self.layoutValueContext else { return };
-
- let layoutConfig = self.layoutConfig;
-
- let computedRect = layoutConfig.computeRect(
- usingLayoutValueContext: layoutValueContext
- );
-
- let floatingView = self.floatingView;
- floatingView.frame = computedRect;
-
- self.floatingViewLabel.text = "\(self.layoutConfigIndex)";
- //self.applyRadiusMaskFor();
- };
-
- @objc func onPressFloatingView(_ sender: UITapGestureRecognizer){
- self.layoutConfigCount += 1;
- self.updateFloatingView();
- };
-
- func applyRadiusMaskFor() {
- let path = UIBezierPath(
- shouldRoundRect : self.floatingView.bounds,
- topLeftRadius : 20,
- topRightRadius : 20,
- bottomLeftRadius : 20,
- bottomRightRadius: 20
- );
-
- let shape = CAShapeLayer();
- shape.path = path.cgPath;
-
- self.floatingView.layer.mask = shape;
- };
-};
diff --git a/experiments/swift-programmatic-modal/Test/RoundedViewTestViewController.swift b/experiments/swift-programmatic-modal/Test/RoundedViewTestViewController.swift
deleted file mode 100644
index 5c5f3108..00000000
--- a/experiments/swift-programmatic-modal/Test/RoundedViewTestViewController.swift
+++ /dev/null
@@ -1,316 +0,0 @@
-//
-// RoundedViewTestViewController.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 6/4/23.
-//
-
-import UIKit
-
-class RoundedView: UIView {
- override init(frame: CGRect) {
- super.init(frame: frame);
-
- let bounds = CGRect(
- origin: .zero,
- size: frame.size
- );
- }
-
- required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- };
-
- override func layoutSubviews() {
- super.layoutSubviews();
- };
-};
-
-class CornerRadiusLayer: CAShapeLayer {
-
- override var bounds: CGRect {
- didSet {
- if !CGRectIsEmpty(bounds) {
- self.path = UIBezierPath(
- roundedRect: CGRectInset(bounds, 10, 10),
- cornerRadius: 5
- ).cgPath;
- };
- }
- };
-
- override func action(forKey event: String) -> CAAction? {
- print(
- "animation forKey:",
- self.animation(forKey: event)
- );
-
- print(
- "self.animationKeys(): ",
- self.animationKeys()
- );
-
- print("event: \(event)")
-
- print(self);
-
- if event == "path" {
- if let action = super.action(forKey: "path") as? CABasicAnimation {
- let animation = CABasicAnimation(keyPath: event);
- animation.fromValue = path;
-
- // Copy values from existing action
- animation.autoreverses = action.autoreverses;
- animation.beginTime = action.beginTime;
- animation.delegate = action.delegate;
- animation.duration = action.duration;
- animation.fillMode = action.fillMode;
- animation.repeatCount = action.repeatCount;
- animation.repeatDuration = action.repeatDuration;
- animation.speed = action.speed;
- animation.timingFunction = action.timingFunction;
- animation.timeOffset = action.timeOffset;
-
- return animation;
- };
- };
-
- return super.action(forKey: event);
- };
-};
-
-class RoundedViewTestViewController: UIViewController {
-
- lazy var roundedView: RoundedView = {
- let view = RoundedView(frame: CGRect(
- origin: .zero,
- size: CGSize(width: 150, height: 150)
- )
- );
-
- view.backgroundColor = .red;
-
- return view;
- }();
-
-// func _viewDidLoad() {
-// self.view.backgroundColor = .systemBackground;
-//
-// let roundedView = self.roundedView;
-// roundedView.center = self.view.center;
-// roundedView.frame = roundedView.frame.offsetBy(dx: 0, dy: -200)
-//
-// self.view.addSubview(roundedView);
-//
-// let prevFrame = roundedView.frame;
-// let prevBounds = roundedView.bounds;
-//
-// var nextFrame = roundedView.frame.offsetBy(dx: 0, dy: 300);
-// nextFrame.size = CGSize(
-// width: nextFrame.width + 100,
-// height: nextFrame.height + 100
-// );
-//
-// let nextBounds = CGRect(
-// origin: .zero,
-// size: nextFrame.size
-// );
-//
-// let prevMask: CAShapeLayer = {
-// let path = UIBezierPath(
-// shouldRoundRect: prevBounds,
-// topLeftRadius: 10,
-// topRightRadius: 10,
-// bottomLeftRadius: 10,
-// bottomRightRadius: 10
-// );
-//
-// let shape = CAShapeLayer();
-// shape.path = path.cgPath;
-//
-// return shape;
-// }();
-//
-// let nextMask: CAShapeLayer = {
-// let path = UIBezierPath(
-// shouldRoundRect: nextBounds,
-// topLeftRadius: 30,
-// topRightRadius: 30,
-// bottomLeftRadius: 30,
-// bottomRightRadius: 30
-// );
-//
-// let shape = CAShapeLayer();
-// shape.path = path.cgPath;
-//
-// return shape;
-// }();
-//
-// let viewAnimator = UIViewPropertyAnimator(
-// duration: 4,
-// curve: .easeInOut
-// );
-//
-// roundedView.translatesAutoresizingMaskIntoConstraints = false;
-//
-// viewAnimator.addAnimations {
-// UIView.addKeyframe(
-// withRelativeStartTime: 0,
-// relativeDuration: 0
-// ) {
-// roundedView.frame = prevFrame;
-// //roundedView.layer.frame = prevFrame;
-// //roundedView.layer.mask = prevMask;
-// };
-//
-// UIView.addKeyframe(
-// withRelativeStartTime: 1,
-// relativeDuration: 0
-// ) {
-// roundedView.frame = nextFrame;
-// //roundedView.layer.frame = nextFrame;
-// //roundedView.layer.mask = nextMask;
-// };
-// };
-//
-//
-// // define your new path to animate the mask layer to
-// //let path = UIBezierPath(roundedRect: CGRectInset(view.bounds, 100, 100), cornerRadius: 20.0)
-// //path.appendPath(UIBezierPath(rect: view.bounds))
-//
-// // create new animation
-// let pathAnimator = CABasicAnimation(keyPath: "path");
-//
-// let shapeMask = CAShapeLayer();
-//
-// let prevPath = UIBezierPath(
-// shouldRoundRect: prevBounds,
-// topLeftRadius: 10,
-// topRightRadius: 10,
-// bottomLeftRadius: 10,
-// bottomRightRadius: 10
-// );
-//
-// // from value is the current mask path
-// pathAnimator.fromValue = prevPath.cgPath;
-//
-// let nextPath = UIBezierPath(
-// shouldRoundRect: nextBounds,
-// topLeftRadius: 25,
-// topRightRadius: 25,
-// bottomLeftRadius: 25,
-// bottomRightRadius: 25
-// );
-//
-// // to value is the new path
-// pathAnimator.toValue = nextPath.cgPath;
-//
-// // duration of your animation
-// pathAnimator.duration = viewAnimator.duration;
-//
-// // custom timing function to make it look smooth
-// pathAnimator.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut);
-//
-// pathAnimator.isRemovedOnCompletion = false;
-// pathAnimator.fillMode = .both;
-//
-// // add animation
-// shapeMask.add(pathAnimator, forKey: nil);
-//
-// // update the path property on the mask layer, using a CATransaction to prevent an implicit animation
-// CATransaction.begin();
-//
-// roundedView.layer.mask = shapeMask;
-// CATransaction.commit();
-//
-//
-//
-//
-//
-// viewAnimator.startAnimation();
-// };
-
- override func viewDidLoad() {
- self.view.backgroundColor = .systemBackground;
-
- let roundedView = self.roundedView;
- roundedView.center = self.view.center;
- roundedView.frame = roundedView.frame.offsetBy(dx: 0, dy: -200)
-
- self.view.addSubview(roundedView);
-
- let prevFrame = roundedView.frame;
- let prevBounds = roundedView.bounds;
-
- var nextFrame = roundedView.frame.offsetBy(dx: 0, dy: 300);
- nextFrame.size = CGSize(
- width: nextFrame.width + 100,
- height: nextFrame.height + 100
- );
-
- let nextBounds = CGRect(
- origin: .zero,
- size: nextFrame.size
- );
-
- let prevMask: CAShapeLayer = {
- let path = UIBezierPath(
- shouldRoundRect: prevBounds,
- topLeftRadius: 10,
- topRightRadius: 10,
- bottomLeftRadius: 10,
- bottomRightRadius: 10
- );
-
- let shape = CornerRadiusLayer();
- shape.path = path.cgPath;
-
- return shape;
- }();
-
- let nextMask: CAShapeLayer = {
- let path = UIBezierPath(
- shouldRoundRect: nextBounds,
- topLeftRadius: 30,
- topRightRadius: 30,
- bottomLeftRadius: 30,
- bottomRightRadius: 30
- );
-
- let shape = CornerRadiusLayer();
- shape.path = path.cgPath;
-
- return shape;
- }();
-
- let viewAnimator = UIViewPropertyAnimator(
- duration: 4,
- curve: .easeInOut
- );
-
- roundedView.translatesAutoresizingMaskIntoConstraints = false;
-
- viewAnimator.addAnimations {
- UIView.addKeyframe(
- withRelativeStartTime: 0,
- relativeDuration: 0
- ) {
- roundedView.frame = prevFrame;
- roundedView.layer.frame = prevFrame;
- roundedView.layer.mask = prevMask;
- };
-
- UIView.addKeyframe(
- withRelativeStartTime: 1,
- relativeDuration: 0
- ) {
- roundedView.frame = nextFrame;
- roundedView.layer.frame = nextFrame;
- roundedView.layer.mask = nextMask;
- };
- };
-
- viewAnimator.startAnimation();
- };
-};
-
diff --git a/experiments/swift-programmatic-modal/Test/TestRoutes.swift b/experiments/swift-programmatic-modal/Test/TestRoutes.swift
deleted file mode 100644
index f6ae2d41..00000000
--- a/experiments/swift-programmatic-modal/Test/TestRoutes.swift
+++ /dev/null
@@ -1,37 +0,0 @@
-//
-// TestRoutes.swift
-// swift-programmatic-modal
-//
-// Created by Dominic Go on 5/22/23.
-//
-
-import UIKit
-
-enum TestRoutes {
- static let rootRouteKey: Self = .AdaptiveModalPresentationTest;
-
- case RNILayoutTest;
- case RNIDraggableTest;
- case BlurEffectTest;
- case RoundedViewTest;
- case AdaptiveModalPresentationTest;
-
- var viewController: UIViewController {
- switch self {
- case .RNILayoutTest:
- return RNILayoutTestViewController();
-
- case .RNIDraggableTest:
- return RNIDraggableTestViewController();
-
- case .BlurEffectTest:
- return BlurEffectTestViewController();
-
- case .RoundedViewTest:
- return RoundedViewTestViewController();
-
- case .AdaptiveModalPresentationTest:
- return AdaptiveModalPresentationTestViewController();
- };
- };
-};
diff --git a/experiments/swift-programmatic-modal/swift-programmatic-modal.xcodeproj/project.pbxproj b/experiments/swift-programmatic-modal/swift-programmatic-modal.xcodeproj/project.pbxproj
deleted file mode 100644
index 670b2a98..00000000
--- a/experiments/swift-programmatic-modal/swift-programmatic-modal.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,956 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 56;
- objects = {
-
-/* Begin PBXBuildFile section */
- 880492582A23F89000D74E9F /* AdaptiveModalInterpolationPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 880492572A23F89000D74E9F /* AdaptiveModalInterpolationPoint.swift */; };
- 88075E272A2121FE00B78388 /* AdaptiveModalUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88075E262A2121FE00B78388 /* AdaptiveModalUtilities.swift */; };
- 88203DC12A122AC20088C8E2 /* RNIDynamicModal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88203DC02A122AC20088C8E2 /* RNIDynamicModal.swift */; };
- 8849B6A72A3F7A7700A5F412 /* RNILayoutValue+StaticAlias.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8849B6A62A3F7A7700A5F412 /* RNILayoutValue+StaticAlias.swift */; };
- 884A18F82A30516B0044AA66 /* AdaptiveModalPresentationTestViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 884A18F72A30516B0044AA66 /* AdaptiveModalPresentationTestViewController.swift */; };
- 884A18FA2A3146CA0044AA66 /* AdaptiveModalManager+UIViewControllerTransitioningDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 884A18F92A3146CA0044AA66 /* AdaptiveModalManager+UIViewControllerTransitioningDelegate.swift */; };
- 884A18FC2A3146FC0044AA66 /* AdaptiveModalManager+UIViewControllerAnimatedTransitioning.swift in Sources */ = {isa = PBXBuildFile; fileRef = 884A18FB2A3146FC0044AA66 /* AdaptiveModalManager+UIViewControllerAnimatedTransitioning.swift */; };
- 884A18FE2A31472E0044AA66 /* AdaptiveModalPresentationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 884A18FD2A31472E0044AA66 /* AdaptiveModalPresentationController.swift */; };
- 886AFCAB2A31FF40004AC9FB /* RNILayoutValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 886AFCAA2A31FF40004AC9FB /* RNILayoutValue.swift */; };
- 886AFCAD2A3209D5004AC9FB /* RNILayoutValueMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 886AFCAC2A3209D5004AC9FB /* RNILayoutValueMode.swift */; };
- 886AFCAF2A320DED004AC9FB /* RNILayoutValuePercentTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 886AFCAE2A320DED004AC9FB /* RNILayoutValuePercentTarget.swift */; };
- 886AFCB12A325B6F004AC9FB /* RNILayoutValueContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 886AFCB02A325B6F004AC9FB /* RNILayoutValueContext.swift */; };
- 887AA0572A4253050089F517 /* RNILayoutKeyboardValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 887AA0562A4253050089F517 /* RNILayoutKeyboardValues.swift */; };
- 887C3BE22A42F9E00026B57C /* CACornerMask+StaticAlias.swift in Sources */ = {isa = PBXBuildFile; fileRef = 887C3BE12A42F9E00026B57C /* CACornerMask+StaticAlias.swift */; };
- 887C3BE42A43C4FF0026B57C /* RNILayoutMargins.swift in Sources */ = {isa = PBXBuildFile; fileRef = 887C3BE32A43C4FF0026B57C /* RNILayoutMargins.swift */; };
- 887C3BE62A43C5460026B57C /* RNILayoutMarginRects.swift in Sources */ = {isa = PBXBuildFile; fileRef = 887C3BE52A43C5460026B57C /* RNILayoutMarginRects.swift */; };
- 88A2EF742A3A98F6006B5235 /* AdaptiveModalConfigTestPresets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88A2EF732A3A98F6006B5235 /* AdaptiveModalConfigTestPresets.swift */; };
- 88B7D0EF29C593F400490628 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88B7D0EE29C593F400490628 /* AppDelegate.swift */; };
- 88B7D0F129C593F400490628 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88B7D0F029C593F400490628 /* SceneDelegate.swift */; };
- 88B7D0F829C593F600490628 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 88B7D0F729C593F600490628 /* Assets.xcassets */; };
- 88B7D0FB29C593F600490628 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 88B7D0F929C593F600490628 /* LaunchScreen.storyboard */; };
- 88C2F45C2A275B2800DA7450 /* AdaptiveModalSnapPointPreset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88C2F45B2A275B2800DA7450 /* AdaptiveModalSnapPointPreset.swift */; };
- 88C2F45E2A278A9200DA7450 /* AdaptiveModalRangePropertyAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88C2F45D2A278A9200DA7450 /* AdaptiveModalRangePropertyAnimator.swift */; };
- 88C2F4602A2CA8CF00DA7450 /* RoundedViewTestViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88C2F45F2A2CA8CF00DA7450 /* RoundedViewTestViewController.swift */; };
- 88C2F4622A2CD81F00DA7450 /* AdaptiveModalEventNotifiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88C2F4612A2CD81F00DA7450 /* AdaptiveModalEventNotifiable.swift */; };
- 88C2F4642A2D8D3400DA7450 /* AdaptiveModalKeyframePropertyAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88C2F4632A2D8D3400DA7450 /* AdaptiveModalKeyframePropertyAnimator.swift */; };
- 88D016602A14C86B004664D2 /* RootViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D0165F2A14C86B004664D2 /* RootViewController.swift */; };
- 88D0168D2A1730B1004664D2 /* RNILayoutTestViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D0168C2A1730B1004664D2 /* RNILayoutTestViewController.swift */; };
- 88D0169E2A1B0DD3004664D2 /* RNIDraggableTestViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D0169D2A1B0DD3004664D2 /* RNIDraggableTestViewController.swift */; };
- 88D018152A1B302F004664D2 /* WeakElement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017902A1B302F004664D2 /* WeakElement.swift */; };
- 88D018162A1B3030004664D2 /* CGSize+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017912A1B302F004664D2 /* CGSize+Helpers.swift */; };
- 88D018212A1B3030004664D2 /* CAGradientLayerType+Init.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D0179F2A1B302F004664D2 /* CAGradientLayerType+Init.swift */; };
- 88D018222A1B3030004664D2 /* UIImage+Init.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017A02A1B302F004664D2 /* UIImage+Init.swift */; };
- 88D018232A1B3030004664D2 /* RNINavigationEventsReportingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017A32A1B302F004664D2 /* RNINavigationEventsReportingViewController.swift */; };
- 88D018242A1B3030004664D2 /* RNINavigationEventsNotifiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017A42A1B302F004664D2 /* RNINavigationEventsNotifiable.swift */; };
- 88D018252A1B3030004664D2 /* UIViewController+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017A62A1B302F004664D2 /* UIViewController+Helpers.swift */; };
- 88D018262A1B3030004664D2 /* UIColor+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017A72A1B302F004664D2 /* UIColor+Helpers.swift */; };
- 88D018272A1B3030004664D2 /* RNIInternalCleanupMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017A92A1B302F004664D2 /* RNIInternalCleanupMode.swift */; };
- 88D018282A1B3030004664D2 /* RNICleanable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017AA2A1B302F004664D2 /* RNICleanable.swift */; };
- 88D018292A1B3030004664D2 /* RNICleanupMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017AB2A1B302F004664D2 /* RNICleanupMode.swift */; };
- 88D018332A1B3030004664D2 /* RNIJSComponentWillUnmountNotifiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017B92A1B302F004664D2 /* RNIJSComponentWillUnmountNotifiable.swift */; };
- 88D018342A1B3030004664D2 /* UIModalPresentationStyle+Init.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017BC2A1B302F004664D2 /* UIModalPresentationStyle+Init.swift */; };
- 88D018352A1B3030004664D2 /* UIBlurEffect+Init.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017BD2A1B302F004664D2 /* UIBlurEffect+Init.swift */; };
- 88D018362A1B3030004664D2 /* CGSize+Init.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017BE2A1B302F004664D2 /* CGSize+Init.swift */; };
- 88D018372A1B3030004664D2 /* UISheetPresentationController+Init.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017BF2A1B302F004664D2 /* UISheetPresentationController+Init.swift */; };
- 88D018382A1B3030004664D2 /* UIModalTransitionStyle+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017C12A1B302F004664D2 /* UIModalTransitionStyle+Helpers.swift */; };
- 88D018392A1B3030004664D2 /* FloatingPoint+Clamping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017C22A1B302F004664D2 /* FloatingPoint+Clamping.swift */; };
- 88D0183A2A1B3030004664D2 /* CAAnimation+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017C32A1B302F004664D2 /* CAAnimation+Helpers.swift */; };
- 88D0183B2A1B3030004664D2 /* Collection+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017C42A1B302F004664D2 /* Collection+Helpers.swift */; };
- 88D0183C2A1B3030004664D2 /* UIWindow+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017C52A1B302F004664D2 /* UIWindow+Helpers.swift */; };
- 88D0183D2A1B3030004664D2 /* UIView+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017C62A1B302F004664D2 /* UIView+Helpers.swift */; };
- 88D0183E2A1B3030004664D2 /* CAAnimation+Block.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017C72A1B302F004664D2 /* CAAnimation+Block.swift */; };
- 88D0183F2A1B3030004664D2 /* CGRect+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017C82A1B302F004664D2 /* CGRect+Helpers.swift */; };
- 88D018402A1B3030004664D2 /* Encodable+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017C92A1B302F004664D2 /* Encodable+Helpers.swift */; };
- 88D018412A1B3030004664D2 /* KeyWindow+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017CA2A1B302F004664D2 /* KeyWindow+Helpers.swift */; };
- 88D018432A1B3030004664D2 /* UIGestureRecognizer+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017CC2A1B302F004664D2 /* UIGestureRecognizer+Helpers.swift */; };
- 88D018452A1B3030004664D2 /* RNIDictionarySynthesizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017D02A1B302F004664D2 /* RNIDictionarySynthesizable.swift */; };
- 88D018462A1B3030004664D2 /* RNIDictionaryRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017D12A1B302F004664D2 /* RNIDictionaryRepresentable.swift */; };
- 88D018472A1B3030004664D2 /* RNIDictionarySynthesizable+Default.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017D22A1B302F004664D2 /* RNIDictionarySynthesizable+Default.swift */; };
- 88D0184A2A1B3030004664D2 /* RNILayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017D72A1B302F004664D2 /* RNILayout.swift */; };
- 88D0184B2A1B3030004664D2 /* RNIAnimatorSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017D92A1B302F004664D2 /* RNIAnimatorSize.swift */; };
- 88D0184C2A1B3030004664D2 /* RNIAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017DA2A1B302F004664D2 /* RNIAnimator.swift */; };
- 88D018522A1B3030004664D2 /* CAAnimationMulticastDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017E22A1B302F004664D2 /* CAAnimationMulticastDelegate.swift */; };
- 88D018532A1B3030004664D2 /* RNIMulticastDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017E32A1B302F004664D2 /* RNIMulticastDelegate.swift */; };
- 88D018542A1B3030004664D2 /* RNIWeakArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017E52A1B302F004664D2 /* RNIWeakArray.swift */; };
- 88D018552A1B3030004664D2 /* RNIWeakRef.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017E62A1B302F004664D2 /* RNIWeakRef.swift */; };
- 88D018562A1B3030004664D2 /* RNIWeakDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017E72A1B302F004664D2 /* RNIWeakDictionary.swift */; };
- 88D018572A1B3030004664D2 /* RNIObjectMetadata+Default.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017E92A1B302F004664D2 /* RNIObjectMetadata+Default.swift */; };
- 88D018582A1B3030004664D2 /* RNIObjectMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017EA2A1B302F004664D2 /* RNIObjectMetadata.swift */; };
- 88D0185B2A1B3030004664D2 /* RNIIdentifiable+Default.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017EF2A1B302F004664D2 /* RNIIdentifiable+Default.swift */; };
- 88D0185C2A1B3030004664D2 /* RNIObjectIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017F02A1B302F004664D2 /* RNIObjectIdentifier.swift */; };
- 88D0185D2A1B3030004664D2 /* RNIIdentifiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017F12A1B302F004664D2 /* RNIIdentifiable.swift */; };
- 88D018642A1B3030004664D2 /* RNIViewControllerLifeCycleNotifiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017FA2A1B302F004664D2 /* RNIViewControllerLifeCycleNotifiable.swift */; };
- 88D018652A1B3030004664D2 /* RNIViewControllerLifeCycleNotifiable+Default.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017FC2A1B302F004664D2 /* RNIViewControllerLifeCycleNotifiable+Default.swift */; };
- 88D018672A1B3030004664D2 /* RNIModalEventData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D017FF2A1B302F004664D2 /* RNIModalEventData.swift */; };
- 88D018682A1B3030004664D2 /* RNIModalPresentationTrigger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D018002A1B302F004664D2 /* RNIModalPresentationTrigger.swift */; };
- 88D0186A2A1B3030004664D2 /* RNIModalData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D018022A1B302F004664D2 /* RNIModalData.swift */; };
- 88D0186B2A1B3030004664D2 /* RNIModalPresentationNotifiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D018032A1B302F004664D2 /* RNIModalPresentationNotifiable.swift */; };
- 88D0186C2A1B3030004664D2 /* RNIModal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D018042A1B302F004664D2 /* RNIModal.swift */; };
- 88D018702A1B3030004664D2 /* RNIModalFlags.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D018082A1B302F004664D2 /* RNIModalFlags.swift */; };
- 88D018712A1B3030004664D2 /* RNIModalPresentationState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D018092A1B302F004664D2 /* RNIModalPresentationState.swift */; };
- 88D018732A1B3030004664D2 /* RNIModalCustomSheetDetent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D0180B2A1B302F004664D2 /* RNIModalCustomSheetDetent.swift */; };
- 88D018742A1B3030004664D2 /* RNIModalFocusState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D0180C2A1B302F004664D2 /* RNIModalFocusState.swift */; };
- 88D018762A1B3030004664D2 /* RNIComputableSizeMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D0180F2A1B302F004664D2 /* RNIComputableSizeMode.swift */; };
- 88D018772A1B3030004664D2 /* RNIComputableValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D018102A1B302F004664D2 /* RNIComputableValue.swift */; };
- 88D018782A1B3030004664D2 /* RNIComputableSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D018112A1B302F004664D2 /* RNIComputableSize.swift */; };
- 88D018792A1B3030004664D2 /* RNIComputableValueMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D018122A1B302F004664D2 /* RNIComputableValueMode.swift */; };
- 88D0187A2A1B3030004664D2 /* RNIComputableOffset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D018132A1B302F004664D2 /* RNIComputableOffset.swift */; };
- 88D0187C2A1B32E6004664D2 /* TestRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D0187B2A1B32E6004664D2 /* TestRoutes.swift */; };
- 88D0187E2A1B6CB3004664D2 /* BlurEffectTestViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D0187D2A1B6CB3004664D2 /* BlurEffectTestViewController.swift */; };
- 88D018822A1D09DD004664D2 /* AdaptiveModalAnimationConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D018812A1D09DD004664D2 /* AdaptiveModalAnimationConfig.swift */; };
- 88D018862A1D0A1D004664D2 /* AdaptiveModalSnapPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D018852A1D0A1D004664D2 /* AdaptiveModalSnapPoint.swift */; };
- 88D018882A1D0A36004664D2 /* AdaptiveModalConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D018872A1D0A36004664D2 /* AdaptiveModalConfig.swift */; };
- 88D0188E2A1DCA61004664D2 /* AdaptiveModalManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D0188D2A1DCA61004664D2 /* AdaptiveModalManager.swift */; };
- 88E8C0182A224A8D008C2FF8 /* AdaptiveModalSnapAnimationConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88E8C0172A224A8D008C2FF8 /* AdaptiveModalSnapAnimationConfig.swift */; };
- 88E8C01A2A228289008C2FF8 /* AdaptiveModalClampingConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88E8C0192A228289008C2FF8 /* AdaptiveModalClampingConfig.swift */; };
- 88E8C01C2A23203E008C2FF8 /* RNILayoutPreset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88E8C01B2A23203E008C2FF8 /* RNILayoutPreset.swift */; };
- 88E8C01E2A234B0A008C2FF8 /* UIBezierPath+VariadicCornerRadius.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88E8C01D2A234B0A008C2FF8 /* UIBezierPath+VariadicCornerRadius.swift */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXFileReference section */
- 880492572A23F89000D74E9F /* AdaptiveModalInterpolationPoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdaptiveModalInterpolationPoint.swift; sourceTree = ""; };
- 88075E262A2121FE00B78388 /* AdaptiveModalUtilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdaptiveModalUtilities.swift; sourceTree = ""; };
- 88203DC02A122AC20088C8E2 /* RNIDynamicModal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RNIDynamicModal.swift; sourceTree = ""; };
- 8849B6A62A3F7A7700A5F412 /* RNILayoutValue+StaticAlias.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "RNILayoutValue+StaticAlias.swift"; sourceTree = ""; };
- 884A18F72A30516B0044AA66 /* AdaptiveModalPresentationTestViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdaptiveModalPresentationTestViewController.swift; sourceTree = ""; };
- 884A18F92A3146CA0044AA66 /* AdaptiveModalManager+UIViewControllerTransitioningDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AdaptiveModalManager+UIViewControllerTransitioningDelegate.swift"; sourceTree = ""; };
- 884A18FB2A3146FC0044AA66 /* AdaptiveModalManager+UIViewControllerAnimatedTransitioning.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AdaptiveModalManager+UIViewControllerAnimatedTransitioning.swift"; sourceTree = ""; };
- 884A18FD2A31472E0044AA66 /* AdaptiveModalPresentationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdaptiveModalPresentationController.swift; sourceTree = ""; };
- 886AFCAA2A31FF40004AC9FB /* RNILayoutValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RNILayoutValue.swift; sourceTree = ""; };
- 886AFCAC2A3209D5004AC9FB /* RNILayoutValueMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RNILayoutValueMode.swift; sourceTree = ""; };
- 886AFCAE2A320DED004AC9FB /* RNILayoutValuePercentTarget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RNILayoutValuePercentTarget.swift; sourceTree = ""; };
- 886AFCB02A325B6F004AC9FB /* RNILayoutValueContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RNILayoutValueContext.swift; sourceTree = ""; };
- 887AA0562A4253050089F517 /* RNILayoutKeyboardValues.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RNILayoutKeyboardValues.swift; sourceTree = ""; };
- 887C3BE12A42F9E00026B57C /* CACornerMask+StaticAlias.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CACornerMask+StaticAlias.swift"; sourceTree = ""; };
- 887C3BE32A43C4FF0026B57C /* RNILayoutMargins.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RNILayoutMargins.swift; sourceTree = ""; };
- 887C3BE52A43C5460026B57C /* RNILayoutMarginRects.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RNILayoutMarginRects.swift; sourceTree = ""; };
- 88A2EF732A3A98F6006B5235 /* AdaptiveModalConfigTestPresets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdaptiveModalConfigTestPresets.swift; sourceTree = ""; };
- 88B7D0EB29C593F400490628 /* swift-programmatic-modal.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "swift-programmatic-modal.app"; sourceTree = BUILT_PRODUCTS_DIR; };
- 88B7D0EE29C593F400490628 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
- 88B7D0F029C593F400490628 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; };
- 88B7D0F729C593F600490628 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
- 88B7D0FA29C593F600490628 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
- 88B7D0FC29C593F600490628 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 88C2F45B2A275B2800DA7450 /* AdaptiveModalSnapPointPreset.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdaptiveModalSnapPointPreset.swift; sourceTree = ""; };
- 88C2F45D2A278A9200DA7450 /* AdaptiveModalRangePropertyAnimator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdaptiveModalRangePropertyAnimator.swift; sourceTree = ""; };
- 88C2F45F2A2CA8CF00DA7450 /* RoundedViewTestViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoundedViewTestViewController.swift; sourceTree = ""; };
- 88C2F4612A2CD81F00DA7450 /* AdaptiveModalEventNotifiable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdaptiveModalEventNotifiable.swift; sourceTree = ""; };
- 88C2F4632A2D8D3400DA7450 /* AdaptiveModalKeyframePropertyAnimator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdaptiveModalKeyframePropertyAnimator.swift; sourceTree = ""; };
- 88D0165F2A14C86B004664D2 /* RootViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootViewController.swift; sourceTree = ""; };
- 88D0168C2A1730B1004664D2 /* RNILayoutTestViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RNILayoutTestViewController.swift; sourceTree = ""; };
- 88D0169D2A1B0DD3004664D2 /* RNIDraggableTestViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RNIDraggableTestViewController.swift; sourceTree = ""; };
- 88D017902A1B302F004664D2 /* WeakElement.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WeakElement.swift; sourceTree = ""; };
- 88D017912A1B302F004664D2 /* CGSize+Helpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CGSize+Helpers.swift"; sourceTree = ""; };
- 88D0179F2A1B302F004664D2 /* CAGradientLayerType+Init.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CAGradientLayerType+Init.swift"; sourceTree = ""; };
- 88D017A02A1B302F004664D2 /* UIImage+Init.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIImage+Init.swift"; sourceTree = ""; };
- 88D017A12A1B302F004664D2 /* IosUtilities-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "IosUtilities-Bridging-Header.h"; sourceTree = ""; };
- 88D017A32A1B302F004664D2 /* RNINavigationEventsReportingViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNINavigationEventsReportingViewController.swift; sourceTree = ""; };
- 88D017A42A1B302F004664D2 /* RNINavigationEventsNotifiable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNINavigationEventsNotifiable.swift; sourceTree = ""; };
- 88D017A62A1B302F004664D2 /* UIViewController+Helpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIViewController+Helpers.swift"; sourceTree = ""; };
- 88D017A72A1B302F004664D2 /* UIColor+Helpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIColor+Helpers.swift"; sourceTree = ""; };
- 88D017A92A1B302F004664D2 /* RNIInternalCleanupMode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIInternalCleanupMode.swift; sourceTree = ""; };
- 88D017AA2A1B302F004664D2 /* RNICleanable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNICleanable.swift; sourceTree = ""; };
- 88D017AB2A1B302F004664D2 /* RNICleanupMode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNICleanupMode.swift; sourceTree = ""; };
- 88D017B92A1B302F004664D2 /* RNIJSComponentWillUnmountNotifiable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIJSComponentWillUnmountNotifiable.swift; sourceTree = ""; };
- 88D017BA2A1B302F004664D2 /* IosModal-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "IosModal-Bridging-Header.h"; sourceTree = ""; };
- 88D017BC2A1B302F004664D2 /* UIModalPresentationStyle+Init.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIModalPresentationStyle+Init.swift"; sourceTree = ""; };
- 88D017BD2A1B302F004664D2 /* UIBlurEffect+Init.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIBlurEffect+Init.swift"; sourceTree = ""; };
- 88D017BE2A1B302F004664D2 /* CGSize+Init.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CGSize+Init.swift"; sourceTree = ""; };
- 88D017BF2A1B302F004664D2 /* UISheetPresentationController+Init.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UISheetPresentationController+Init.swift"; sourceTree = ""; };
- 88D017C12A1B302F004664D2 /* UIModalTransitionStyle+Helpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIModalTransitionStyle+Helpers.swift"; sourceTree = ""; };
- 88D017C22A1B302F004664D2 /* FloatingPoint+Clamping.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "FloatingPoint+Clamping.swift"; sourceTree = ""; };
- 88D017C32A1B302F004664D2 /* CAAnimation+Helpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CAAnimation+Helpers.swift"; sourceTree = ""; };
- 88D017C42A1B302F004664D2 /* Collection+Helpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Collection+Helpers.swift"; sourceTree = ""; };
- 88D017C52A1B302F004664D2 /* UIWindow+Helpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIWindow+Helpers.swift"; sourceTree = ""; };
- 88D017C62A1B302F004664D2 /* UIView+Helpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIView+Helpers.swift"; sourceTree = ""; };
- 88D017C72A1B302F004664D2 /* CAAnimation+Block.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CAAnimation+Block.swift"; sourceTree = ""; };
- 88D017C82A1B302F004664D2 /* CGRect+Helpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CGRect+Helpers.swift"; sourceTree = ""; };
- 88D017C92A1B302F004664D2 /* Encodable+Helpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Encodable+Helpers.swift"; sourceTree = ""; };
- 88D017CA2A1B302F004664D2 /* KeyWindow+Helpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "KeyWindow+Helpers.swift"; sourceTree = ""; };
- 88D017CC2A1B302F004664D2 /* UIGestureRecognizer+Helpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIGestureRecognizer+Helpers.swift"; sourceTree = ""; };
- 88D017D02A1B302F004664D2 /* RNIDictionarySynthesizable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIDictionarySynthesizable.swift; sourceTree = ""; };
- 88D017D12A1B302F004664D2 /* RNIDictionaryRepresentable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIDictionaryRepresentable.swift; sourceTree = ""; };
- 88D017D22A1B302F004664D2 /* RNIDictionarySynthesizable+Default.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "RNIDictionarySynthesizable+Default.swift"; sourceTree = ""; };
- 88D017D72A1B302F004664D2 /* RNILayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNILayout.swift; sourceTree = ""; };
- 88D017D92A1B302F004664D2 /* RNIAnimatorSize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIAnimatorSize.swift; sourceTree = ""; };
- 88D017DA2A1B302F004664D2 /* RNIAnimator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIAnimator.swift; sourceTree = ""; };
- 88D017E22A1B302F004664D2 /* CAAnimationMulticastDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CAAnimationMulticastDelegate.swift; sourceTree = ""; };
- 88D017E32A1B302F004664D2 /* RNIMulticastDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIMulticastDelegate.swift; sourceTree = ""; };
- 88D017E52A1B302F004664D2 /* RNIWeakArray.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIWeakArray.swift; sourceTree = ""; };
- 88D017E62A1B302F004664D2 /* RNIWeakRef.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIWeakRef.swift; sourceTree = ""; };
- 88D017E72A1B302F004664D2 /* RNIWeakDictionary.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIWeakDictionary.swift; sourceTree = ""; };
- 88D017E92A1B302F004664D2 /* RNIObjectMetadata+Default.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "RNIObjectMetadata+Default.swift"; sourceTree = ""; };
- 88D017EA2A1B302F004664D2 /* RNIObjectMetadata.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIObjectMetadata.swift; sourceTree = ""; };
- 88D017EF2A1B302F004664D2 /* RNIIdentifiable+Default.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "RNIIdentifiable+Default.swift"; sourceTree = ""; };
- 88D017F02A1B302F004664D2 /* RNIObjectIdentifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIObjectIdentifier.swift; sourceTree = ""; };
- 88D017F12A1B302F004664D2 /* RNIIdentifiable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIIdentifiable.swift; sourceTree = ""; };
- 88D017FA2A1B302F004664D2 /* RNIViewControllerLifeCycleNotifiable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIViewControllerLifeCycleNotifiable.swift; sourceTree = ""; };
- 88D017FC2A1B302F004664D2 /* RNIViewControllerLifeCycleNotifiable+Default.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "RNIViewControllerLifeCycleNotifiable+Default.swift"; sourceTree = ""; };
- 88D017FF2A1B302F004664D2 /* RNIModalEventData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIModalEventData.swift; sourceTree = "