diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index f1cae9fa..00000000 --- a/.eslintignore +++ /dev/null @@ -1,3 +0,0 @@ -src/temp -lib -example \ No newline at end of file diff --git a/.watchmanconfig b/.watchmanconfig deleted file mode 100644 index 9e26dfee..00000000 --- a/.watchmanconfig +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/.yarnrc b/.yarnrc deleted file mode 100644 index fedc0f11..00000000 --- a/.yarnrc +++ /dev/null @@ -1,3 +0,0 @@ -# Override Yarn command so we can automatically setup the repo on running `yarn` - -yarn-path "scripts/bootstrap.js" diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index 45d257b2..00000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,133 +0,0 @@ - -# Contributor Covenant Code of Conduct - -## Our Pledge - -We as members, contributors, and leaders pledge to make participation in our -community a harassment-free experience for everyone, regardless of age, body -size, visible or invisible disability, ethnicity, sex characteristics, gender -identity and expression, level of experience, education, socio-economic status, -nationality, personal appearance, race, caste, color, religion, or sexual -identity and orientation. - -We pledge to act and interact in ways that contribute to an open, welcoming, -diverse, inclusive, and healthy community. - -## Our Standards - -Examples of behavior that contributes to a positive environment for our -community include: - -* Demonstrating empathy and kindness toward other people -* Being respectful of differing opinions, viewpoints, and experiences -* Giving and gracefully accepting constructive feedback -* Accepting responsibility and apologizing to those affected by our mistakes, - and learning from the experience -* Focusing on what is best not just for us as individuals, but for the overall - community - -Examples of unacceptable behavior include: - -* The use of sexualized language or imagery, and sexual attention or advances of - any kind -* Trolling, insulting or derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or email address, - without their explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Enforcement Responsibilities - -Community leaders are responsible for clarifying and enforcing our standards of -acceptable behavior and will take appropriate and fair corrective action in -response to any behavior that they deem inappropriate, threatening, offensive, -or harmful. - -Community leaders have the right and responsibility to remove, edit, or reject -comments, commits, code, wiki edits, issues, and other contributions that are -not aligned to this Code of Conduct, and will communicate reasons for moderation -decisions when appropriate. - -## Scope - -This Code of Conduct applies within all community spaces, and also applies when -an individual is officially representing the community in public spaces. -Examples of representing our community include using an official e-mail address, -posting via an official social media account, or acting as an appointed -representative at an online or offline event. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported to the community leaders responsible for enforcement at -[INSERT CONTACT METHOD]. -All complaints will be reviewed and investigated promptly and fairly. - -All community leaders are obligated to respect the privacy and security of the -reporter of any incident. - -## Enforcement Guidelines - -Community leaders will follow these Community Impact Guidelines in determining -the consequences for any action they deem in violation of this Code of Conduct: - -### 1. Correction - -**Community Impact**: Use of inappropriate language or other behavior deemed -unprofessional or unwelcome in the community. - -**Consequence**: A private, written warning from community leaders, providing -clarity around the nature of the violation and an explanation of why the -behavior was inappropriate. A public apology may be requested. - -### 2. Warning - -**Community Impact**: A violation through a single incident or series of -actions. - -**Consequence**: A warning with consequences for continued behavior. No -interaction with the people involved, including unsolicited interaction with -those enforcing the Code of Conduct, for a specified period of time. This -includes avoiding interactions in community spaces as well as external channels -like social media. Violating these terms may lead to a temporary or permanent -ban. - -### 3. Temporary Ban - -**Community Impact**: A serious violation of community standards, including -sustained inappropriate behavior. - -**Consequence**: A temporary ban from any sort of interaction or public -communication with the community for a specified period of time. No public or -private interaction with the people involved, including unsolicited interaction -with those enforcing the Code of Conduct, is allowed during this period. -Violating these terms may lead to a permanent ban. - -### 4. Permanent Ban - -**Community Impact**: Demonstrating a pattern of violation of community -standards, including sustained inappropriate behavior, harassment of an -individual, or aggression toward or disparagement of classes of individuals. - -**Consequence**: A permanent ban from any sort of public interaction within the -community. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], -version 2.1, available at -[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. - -Community Impact Guidelines were inspired by -[Mozilla's code of conduct enforcement ladder][Mozilla CoC]. - -For answers to common questions about this code of conduct, see the FAQ at -[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at -[https://www.contributor-covenant.org/translations][translations]. - -[homepage]: https://www.contributor-covenant.org -[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html -[Mozilla CoC]: https://github.com/mozilla/diversity -[FAQ]: https://www.contributor-covenant.org/faq -[translations]: https://www.contributor-covenant.org/translations diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index e1993d57..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,112 +0,0 @@ -# Contributing - -Contributions are always welcome, no matter how large or small! - -We want this community to be friendly and respectful to each other. Please follow it in all your interactions with the project. Before contributing, please read the [code of conduct](./CODE_OF_CONDUCT.md). - -## Development workflow - -To get started with the project, run `yarn` in the root directory to install the required dependencies for each package: - -```sh -yarn -``` - -> While it's possible to use [`npm`](https://github.com/npm/cli), the tooling is built around [`yarn`](https://classic.yarnpkg.com/), so you'll have an easier time if you use `yarn` for development. - -While developing, you can run the [example app](/example/) to test your changes. Any changes you make in your library's JavaScript code will be reflected in the example app without a rebuild. If you change any native code, then you'll need to rebuild the example app. - -To start the packager: - -```sh -yarn example start -``` - -To run the example app on Android: - -```sh -yarn example android -``` - -To run the example app on iOS: - -```sh -yarn example ios -``` - - -Make sure your code passes TypeScript and ESLint. Run the following to verify: - -```sh -yarn typescript -yarn lint -``` - -To fix formatting errors, run the following: - -```sh -yarn lint --fix -``` - -Remember to add tests for your change if possible. Run the unit tests by: - -```sh -yarn test -``` -To edit the Objective-C files, open `example/ios/IosModalExample.xcworkspace` in XCode and find the source files at `Pods > Development Pods > react-native-ios-modal`. - -To edit the Kotlin files, open `example/android` in Android studio and find the source files at `reactnativeiosmodal` under `Android`. -### Commit message convention - -We follow the [conventional commits specification](https://www.conventionalcommits.org/en) for our commit messages: - -- `fix`: bug fixes, e.g. fix crash due to deprecated method. -- `feat`: new features, e.g. add new method to the module. -- `refactor`: code refactor, e.g. migrate from class components to hooks. -- `docs`: changes into documentation, e.g. add usage example for the module.. -- `test`: adding or updating tests, e.g. add integration tests using detox. -- `chore`: tooling changes, e.g. change CI config. - -Our pre-commit hooks verify that your commit message matches this format when committing. - -### Linting and tests - -[ESLint](https://eslint.org/), [Prettier](https://prettier.io/), [TypeScript](https://www.typescriptlang.org/) - -We use [TypeScript](https://www.typescriptlang.org/) for type checking, [ESLint](https://eslint.org/) with [Prettier](https://prettier.io/) for linting and formatting the code, and [Jest](https://jestjs.io/) for testing. - -Our pre-commit hooks verify that the linter and tests pass when committing. - -### Publishing to npm - -We use [release-it](https://github.com/release-it/release-it) to make it easier to publish new versions. It handles common tasks like bumping version based on semver, creating tags and releases etc. - -To publish new versions, run the following: - -```sh -yarn release -``` - -### Scripts - -The `package.json` file contains various scripts for common tasks: - -- `yarn bootstrap`: setup project by installing all dependencies and pods. -- `yarn typescript`: type-check files with TypeScript. -- `yarn lint`: lint files with ESLint. -- `yarn test`: run unit tests with Jest. -- `yarn example start`: start the Metro server for the example app. -- `yarn example android`: run the example app on Android. -- `yarn example ios`: run the example app on iOS. - -### Sending a pull request - -> **Working on your first pull request?** You can learn how from this _free_ series: [How to Contribute to an Open Source Project on GitHub](https://app.egghead.io/playlists/how-to-contribute-to-an-open-source-project-on-github). - -When you're sending a pull request: - -- Prefer small pull requests focused on one change. -- Verify that linters and tests are passing. -- Review the documentation to make sure it looks good. -- Follow the pull request template when opening a pull request. -- For pull requests that change the API or implementation, discuss with maintainers first by opening an issue. diff --git a/Extensions+RNIDictionaryRepresentable/CGPoint+RNIDictionaryRepresentable.swift b/Extensions+RNIDictionaryRepresentable/CGPoint+RNIDictionaryRepresentable.swift deleted file mode 100644 index 9e2cf679..00000000 --- a/Extensions+RNIDictionaryRepresentable/CGPoint+RNIDictionaryRepresentable.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// CGPoint+RNIDictionaryRepresentable.swift -// react-native-ios-modal -// -// Created by Dominic Go on 5/3/23. -// - -import Foundation - -extension CGPoint: RNIDictionaryRepresentable { - public var asDictionary: [String: Any] { - var dict: [String: Any] = [:]; - dict["x"] = self.x; - dict["y"] = self.y; - - return dict; - }; -}; diff --git a/LICENSE b/LICENSE deleted file mode 100644 index dc0925a0..00000000 --- a/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -MIT License - -Copyright (c) 2022 Dominic Go -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README-Old.md b/README-Old.md deleted file mode 100644 index 34bc81af..00000000 --- a/README-Old.md +++ /dev/null @@ -1,423 +0,0 @@ -# react-native-ios-modal - -A react-native component for displaying a modal on iOS by natively wrapping a react-native view inside a `UIViewController` and presenting it. - -* Since this is just using a `UIViewController`, this component also supports setting the`UIModalPresentationStyle` and `UIModalTransitionStyle`. -* Supports setting `isModalInPresentation` and separately disabling the native swipe down gesture when the modal is using `pageSheet` `modalPresentationStyle`. -* You can use `ModalView` anywhere in your app and present a view modally either programmatically via a ref or automatically when a `ModalView` is mounted/unmounted. -* Support for several modal events, multiple modals, and having a transparent background or a blurred background using `UIBlurEffect`. - -
- -![Modal Example 0 & 1](./assets/ModalExample-00-01.gif) - -![Modal Example 2 & 3](./assets/ModalExample-02-03.gif) - -![Modal Example 4 & 5](./assets/ModalExample-04-05.gif) - -![Modal Example 6 & 7](./assets/ModalExample-06-07-2.gif) - -### Motivation - -* You can use this, but it's iOS only (so you have to use a different modal component on android, like the built-in react-native [component](https://reactnative.dev/docs/modal)). -* I just really liked the native iOS 13 `pageSheet` modal behavior, and iOS also automatically handles the modal dismiss gesture when using a scrollview. -* So this component exist to tap into native iOS modal behaviour. - -- - - - -
- -## 1. Installation - -```sh -# install via NPM -npm install react-native-ios-modal - -# or install via yarn -yarn add react-native-ios-modal - -# then run pod install (uses autolinking) -cd ios && pod install -``` - -
- -### 1.1 Installation Notes - -* This library uses autolinking: tested and runs on RN version 0.60+ (Specific versions tested includes: 0.60, 0.62.2, and 0.63.3.) - -
- -* This library is written in swift. If you are having trouble building your app after installing this library, try adding an empty swift file. - -1. Open up your `ios/project.xcworkspace` project -2. On the project navigator panel, right click on your project (or a folder/group) and select "New File..." option -3. In the popup/sheet, select swift click next -4. In the "Save As" popup/sheet, rename the file if you want to and click create -5. If Xcode asks you to create a "Objective-C Bridging Header", choose yes - -- - - - -
- -## 2. Usage - -Please check out the [examples directory](https://github.com/dominicstop/react-native-ios-modal/tree/master/example/src/components) for more on how to use it. - -```js -// import the library -import { ModalView } from 'react-native-ios-modal'; - -// and use it like this - this.modalRef = r}> - Hello World - - { - this.modalRef.setVisibility(true); -}}> - Open Modal - -``` - -Note: -The JSX inside `` needs a [React.Fragment](https://reactjs.org/docs/fragments.html#short-syntax) when there are multiple children on the root level. - -Wrong usage: - -```js - - Hello - World - -``` - -Right usage: - -```js - - <> - Hello - World - - -``` - -- - - - -
- -## 3. Documentation - -### 3.1 `ModalView` Component Props - -#### 3.1.1 Props: Flags - -| Name | Default | Description | -| ----------------------------------- | ------- | ------------------------------------------------------------ | -| **presentViaMount** | false | If this prop is set to true, the modal will be presented or dismissed when the `ModalView` is mounted/unmounted. **Note**: Currently buggy/wip. | -| **isModalBGBlurred** | true | Set whether or not the background is blurred. When true, `modalBGBlurEffectStyle` prop takes effect. | -| **enableSwipeGesture** | true | When the modal is using `pageSheet` or similar `modalPresentationStyle`, this prop controls whether or not the swipe gesture is enabled. | -| **hideNonVisibleModals** | false | When multiple modals are visible at the same time, the first few modals will be temporarily hidden (they will still be mounted) to improve performance when this prop is set to true. | -| **isModalBGTransparent** | true | Sets whether or not the modal background is transparent. When set to false, the background blur effect will be disabled automatically. | -| **isModalInPresentation** | false | When set to true, it prevents the modal from being dismissed via a swipe gesture. The modal will still be swipeable, but the modal will not close when its swiped down but instead, it will bounce back up. | -| **setEnableSwipeGestureFromProps** | false | When set to true, it allows you to set the `enableSwipeGesture` via the `setEnableSwipeGesture` function. | -| **setModalInPresentationFromProps** | false | When set to true, it allows you to set the`isModalInPresentation` via the `setIsModalInPresentation`function. | - -
- -#### 3.1.2 Props: Strings - -| Name/Type | Default | Description | -| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| **modalID**: `string` | **Default**: `null` | Assign a unique ID to the modal. You can use the ID to refer to this modal when using the `ModalViewModule` functions and programatically control it. | -| **modalTransitionStyle**: `UIModalTransitionStyles` value | **Default**: `coverVertical` | The transition style to use when presenting/dismissing a modal. If an invalid/unsupported value is passed, the default or the last supported value will be used. | -| **modalPresentationStyle**: `UIModalPresentationStyles` value | **Default**: `automatic` when on iOS 13+, otherwise `overFullScreen` | The presentation style to use when presenting/dismissing a modal. If an invalid/unsupported value is passed, the default or the last supported value will be used. | -| **modalBGBlurEffectStyle**: `UIBlurEffectStyles` value | **Default**: `systemThinMaterial` when on iOS 13+, otherwise `light` | The blur style to use for the `UIBlurEffect` modal background. If an invalid/unsupported value is passed, the default or the last supported value will be used. | - -
- -#### 3.1.3 Props: Modal Events - -| Name | Description | -| -------------------------------------- | ------------------------------------------------------------ | -| `onModalFocus({nativeEvent})` | Gets called when a modal is focused and is not currently the top most modal (to avoid duplicating the onModalShow event) | -| `onModalBlur({nativeEvent})` | Gets called when a modal loses focus and is not currently the top most modal (to avoid duplicating the onModalDismiss event) | -| `onModalShow({nativeEvent})` | Gets called after a modal is presented. | -| `onModalDismiss({nativeEvent})` | Gets called after a modal is dismissed. | -| `onModalDidDismiss({nativeEvent})` | Gets called after a modal is successfully dismissed via a swipe gesture. (Wrapper for `UIAdaptivePresentationControllerDelegate.presentationControllerDidDismiss`). | -| `onModalWillDismiss({nativeEvent})` | Gets called when a modal is being swiped down via a gesture. ((Wrapper for `UIAdaptivePresentationControllerDelegate.presentationControllerWillDismiss`). | -| `onModalAttemptDismiss({nativeEvent})` | Gets called when a modal is swiped down when `isModalInPresentation` is true. (Uses `UIAdaptivePresentationControllerDelegate.presentationControllerDidAttemptToDismiss`). | -|
| | - -#### 3.1.3 Props: Misc - -| Name | Description | -| ------------------ | ----------------------------------------------------- | -| **containerStyle** | The style for the view that holds the modal contents. | - -
- -#### 3.1.4 Props: Modal Functions - -| Name | Description | -| ------------------------------------------------------------ | ------------------------------------------------------------ | -| `getEmitterRef()` -> `ModalVIewRef` | Gets a ref to the `EventEmitter` instance. | -| **aysnc** `setVisibility(visibility: bool, childProps: object)` -> `success: bool` | Programatically present/dismiss the modal. Resolved after the modal is presented/dismissed. **Note**: when a modal is hidden, the modal contents/children are unmounted and vice versa when modal is visible. | -| **aysnc** `getModalInfo()` -> `object: NativeEvent` | Get "native" info from the modal instance. Returns a `NativeEvent` object. | -| **aysnc** `setEnableSwipeGesture(bool)` | When `setEnableSwipeGestureFromProps` prop is true, it allows you to programatically set `enableSwipeGesture` prop via a function. | -| **async** `setIsModalInPresentation(bool)` | When `setModalInPresentationFromProps` prop is true, it allows you to programatically set `isModalInPresentation` via function. | -|
| | - -### 3.2 `ModalViewModule` - -A `NativeModule` that's a collection of functions to programmatically control a `ModalView` - -* Import the module: `import { ModalViewModule } from 'react-native-ios-modal'` -* Example Usage: `ModalViewModule.dismissAllModals(true)` - -
- -| Function | Description | -| --------------------------------------------- | ------------------------------------------------------------ | -| **async** `dismissModalByID(modalID: string)` | Close the `ModalView` with the corresponding `modalID`. Useful when you don't have a direct ref to the `ModalView` component. | -| **async** `dismissAllModals(animated: bool)` | Closes all visible modals. | - -
- -### 3.3 Enum Values - -#### 3.3.1 Enum: `UIBlurEffectStyles` - -Enum values that you can pass to the `ModalView` `modalBGBlurEffectStyle` prop. More detailed description are available in the [Apple Developer Docs](https://developer.apple.com/documentation/uikit/uiblureffectstyle) - -* Import the enum like this: `import { UIBlurEffectStyles } from 'react-native-ios-modal'` -* And use the enum in the `ModalView` `modalBGBlurEffectStyle` prop like this: `modalBGBlurEffectStyle={UIBlurEffectStyles.systemMaterial}` -* Or if you prefer, just pass in a string value directly like this: `modalBGBlurEffectStyle={'systemMaterial'}` -* Here's an [example](https://github.com/dominicstop/react-native-ios-modal/blob/master/example/src/components/ModalViewTest0.js) component that cycles through all the available blur effect styles. - -
- -* **Adaptable Styles** — Changes based on the current system appearance. Requires iOS 13 and above. - -1. `systemUltraThinMaterial` -2. `systemThinMaterial` -3. `systemMaterial` -4. `systemThickMaterial` -5. `systemChromeMaterial` - -
- -* **Light Styles** — Blur styles that are tinted white/light. Meant to be used for system light appearance. Requires iOS 13 and above. - -1. `systemMaterialLight` -2. `systemThinMaterialLight` -3. `systemUltraThinMaterialLight` -4. `systemThickMaterialLight` -5. `systemChromeMaterialLight` - -
- -* **Dark Styles** — Blur styles that are tinted black/dark. Meant to be used for system dark appearance. Requires iOS 13 and above. - -1. `systemChromeMaterialDark` -2. `systemMaterialDark` -3. `systemThickMaterialDark` -4. `systemThinMaterialDark` -5. `systemUltraThinMaterialDark` - -
- -* **Regular Styles** — Blur styles that were originally added in iOS 10. - -1. `regular` -2. `prominent` - -
- -* **Light/Dark Styles** — Blur styles that were originally added in iOS 8. - -3. `light` -4. `extraLight` -5. `dark` - -
- -#### 3.3.2 Enum: `UIModalPresentationStyles` - -Enum values that you can pass to the `ModalView` `modalPresentationStyle` prop. More detailed description are available in the [Apple Developer Docs](https://developer.apple.com/documentation/uikit/uimodalpresentationstyle) - -* Import the enum like this: `import { UIModalPresentationStyles } from 'react-native-ios-modal'` -* And use the enum in the `ModalView` `modalPresentationStyle` prop like this: `modalPresentationStyle={UIModalPresentationStyles.fullScreen}` -* Or if you prefer, just pass in a string value directly like this: `modalPresentationStyle={'fullScreen'}` -* Here's an [example](https://github.com/dominicstop/react-native-ios-modal/blob/master/example/src/components/ModalViewTest1.js) component that cycles through all the available blur effect styles. - -
- -* **Supported Presentation Styles** - -1. `automatic` — Requires iOS 13 to work. The default presentation style for iOS 13 and above. -2. `fullScreen` — Present fullscreen but with an opaque background. The default presentation style on iOS 12 and below. -3. `overFullScreen` — Present fullscreen but with a transparent background. -4. `pageSheet` — The presentation style used on iPhones running iOS 13. Present a modal that can be dismissed via a swipe gesture. -5. `formSheet` — The presentation style used on iPads. Same as `pageSheet` when on iPhone. - -
- -* **Not Supported** - -1. `none` -2. `currentContext` -3. `custom` -4. `overCurrentContext` -5. `popover` -6. `blurOverFullScreen` - -
- -#### 3.3.3 Enum: `UIModalTransitionStyles ` - -Enum values that you can pass to the `ModalView` `modalTransitionStyle` prop. More detailed description are available in the [Apple Developer Docs](https://developer.apple.com/documentation/uikit/uimodaltransitionstyle) - -* Import the enum like this: `import { UIModalTransitionStyles } from 'react-native-ios-modal'` -* And use the enum in the `ModalView` `modalTransitionStyle` prop like this: `modalTransitionStyle={UIModalTransitionStyles.coverVertical}` -* Or if you prefer, just pass in a string value directly like this: `modalTransitionStyle={'coverVertical'}` - -
- -* **Supported Transition Styles** - -1. `coverVertical` -2. `crossDissolve` -3. `flipHorizontal` - -
- -* **Not Supported** - -1. `partialCurl` - -
- -#### 3.3.4 Enum: `ModalEventKeys` - -Enum values that you can use in the `ModalView` `EventEmitter` instance. Use the enum values to add/remove a listener. - -* Import the enum like this: `import { ModalEventKeys } from 'react-native-ios-modal'` -* And use the enum in the `ModalView` `EventEmitter` instance like this: `modalEmitter.addListener(ModalEventKeys.onModalShow, this._handleOnModalShow)` -* Or if you prefer, just pass in a string value directly like this: `modalEmitter.addListener('onModalShow', this._handleOnModalShow)` -* You can get a ref to a modal's `EventEmitter` like this: `modalRef.getEmitterRef()` - -
- -1. `onModalBlur` -2. `onModalFocus` -3. `onModalShow` -4. `onModalDismiss` -5. `onModalDidDismiss` -6. `onModalWillDismiss` -7. `onModalAttemptDismiss` - -
- -### 3.4 `ModalContext` - -A context you can use inside the `ModalView` component. - -* Import the context like this: `import { ModalContext } from 'react-native-ios-modal'` - -
- -| Object Key | Value Description | -| ------------------------ | ------------------------------------------------------------ | -| getModalRef | A function that returns a ref to the `ModalView` | -| getEmitterRef | A function that returns a ref to the `ModalView`'s `EventEmitter` instance | -| setVisibility | A function that calls the `ModalView` `setVisibility` function | -| setEnableSwipeGesture | A function that calls the `ModalView` `setVisibility` function | -| setIsModalInPresentation | A function that calls the `ModalView` `setIsModalInPresentation` function | - -
- -### 3.5 `withModalLifecycle` HOC - -A HOC function that wraps a component so you can listen to the modal events in that component. The wrapped component must be a child of `ModalView` i.e the component must be use inside the `ModalView` component. This is because the HOC uses the `ModalContext` to subscribe to the events of the `ModalView`. The HOC handles consuming the `ModalContext` and subscribing/unsubscribing to the modal's `EventEmitter` instance. Check out the [example](https://github.com/dominicstop/react-native-ios-modal/blob/master/example/src/components/ModalViewTest5.js) for more on how to use it. - -
- -* Import the HOC function like this: `import { withModalLifecycle } from 'react-native-ios-modal'` -* Wrap the component using the HOC function: `export default withModalLifecycle(ModalContents);` -* In the wrapped component, declare a member function with the name of the event that you want to use: `onModalFocus({nativeEvent}){ ... }` -* The name of the function must match any of the keys/strings defined in `ModalEventKeys` - -
- -### 3.6 Modal `EventEmitter` - -* Each `ModalView` has an `EventEmitter` instance, so the first step to use it is to get a ref to the emitter. - * If you have a reference to the `ModalView`, you can call `modalRef.getEmitterRef()` to get a ref to the emitter instance. - * Or you can get a ref to the emitter instance via context: `this.context.getEmitterRef()` or `const { getEmitterRef } = useContext(ModalContext)` - -
- -* To subscribe to a modal event: `modalEmitter.addListener('onModalBlur', this._handleOnModalBlur)` -* To unsubscribe to a modal event: `modalEmitter.removeListener('onModalBlur', this._handleOnModalBlur)` -* The string of available events to subscribe to are in `ModalEventKeys` - -
- -### 3.7 Modal `NativeEvent` object - -Example `{nativeEvent}` object that gets passed to all the modal events. - -```json -{ - "isInFocus": true, - "isPresented": true, - "modalLevel": 1, - "modalLevelPrev": -1, - "modalUUID": "DDADB792-3F85-4849-B669-AB734EC3B610", - "target": 197 -} -``` - -* `isInFocus: bool` — whether or not the modal is in focus -* `isPresented: bool` — whether or not the modal is visible or not -* `modalLevel: int` — indicates the modal level (ex: 1 means it's the first modal that's currently visible, etc.) -* `modalLevelPrev: int` — indicates the modal level (-1 means it's not currently visible) -* `modalUUID: string` — the modal's auto generated unique ID. - -
- -### 3.8 Constants - -##### 3.8.1 `AvailableBlurEffectStyles` Constant - -An array of `UIBlurEffectStyles` strings you can use on a `ModalView`'s `modalBGBlurEffectStyle` prop. The available blur effect styles are based on the iOS version the app is running on. - -* Example: `import { AvailableBlurEffectStyles } from 'react-native-ios-modal';` -* On android, `AvailableBlurEffectStyles` will be empty. - -
- -##### 3.8.2 `AvailablePresentationStyles` Constant - -An array of `UIModalPresentationStyles` strings you can use on a `ModalView`'s `modalTransitionStyle` prop. The available presentation styles are based on the iOS version the app is running on. - -* Example: `import { AvailablePresentationStyles } from 'react-native-ios-modal';` -* On android, `AvailablePresentationStyles` will be empty. - -
- -## 4. Examples - -Check out the [examples](https://github.com/dominicstop/react-native-ios-modal/tree/master/example/src/components) directory for testing out the `ModalView`. - -
- -## License - -MIT - -## Links - -* I'm [@DominicGo](https://twitter.com/GoDominic) on twitter if you have any questions ✨ -* Other libraries: [`react-native-ios-context-menu`]( \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index a1e245c2..00000000 --- a/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# react-native-ios-modal - -## 🚧⚠️ Re-Write in Progress ⚠️🚧 - -Hi, this library is being re-written — please check the `wip` branch, the [examples](example/src/examples) directory, or the [`TODO.md`](./docs/TODO.md) file for progress ✨ (for the old version of the docs, see: [`README-old`](./README-old.md)). - -* Support for iOS 15 sheet detents, and iOS 16 custom detents (+ all the related sheet-related customizations and events). -* Typescript re-write for better auto-complete. -* Streamlining the modal-related events, and exposing more events. -* Better iPad support. -* Etc. - -

- -Try out the wip version of the library: - -``` -npm install react-native-ios-modal@2.0.0-3 -``` diff --git a/android/build.gradle b/android/build.gradle deleted file mode 100644 index fea54de2..00000000 --- a/android/build.gradle +++ /dev/null @@ -1,146 +0,0 @@ -buildscript { - // Buildscript is evaluated before everything else so we can't use getExtOrDefault - def kotlin_version = rootProject.ext.has('kotlinVersion') ? rootProject.ext.get('kotlinVersion') : project.properties['IosModal_kotlinVersion'] - - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:3.5.3' - // noinspection DifferentKotlinGradleVersion - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -def isNewArchitectureEnabled() { - return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true" -} - -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' - -if (isNewArchitectureEnabled()) { - apply plugin: 'com.facebook.react' -} - -def getExtOrDefault(name) { - return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties['IosModal_' + name] -} - -def getExtOrIntegerDefault(name) { - return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties['IosModal_' + name]).toInteger() -} - -android { - compileSdkVersion getExtOrIntegerDefault('compileSdkVersion') - - defaultConfig { - minSdkVersion getExtOrIntegerDefault('minSdkVersion') - targetSdkVersion getExtOrIntegerDefault('targetSdkVersion') - buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString() - } - buildTypes { - release { - minifyEnabled false - } - } - - lintOptions { - disable 'GradleCompatible' - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - -} - -repositories { - mavenCentral() - google() - - def found = false - def defaultDir = null - def androidSourcesName = 'React Native sources' - - if (rootProject.ext.has('reactNativeAndroidRoot')) { - defaultDir = rootProject.ext.get('reactNativeAndroidRoot') - } else { - defaultDir = new File( - projectDir, - '/../../../node_modules/react-native/android' - ) - } - - if (defaultDir.exists()) { - maven { - url defaultDir.toString() - name androidSourcesName - } - - logger.info(":${project.name}:reactNativeAndroidRoot ${defaultDir.canonicalPath}") - found = true - } else { - def parentDir = rootProject.projectDir - - 1.upto(5, { - if (found) return true - parentDir = parentDir.parentFile - - def androidSourcesDir = new File( - parentDir, - 'node_modules/react-native' - ) - - def androidPrebuiltBinaryDir = new File( - parentDir, - 'node_modules/react-native/android' - ) - - if (androidPrebuiltBinaryDir.exists()) { - maven { - url androidPrebuiltBinaryDir.toString() - name androidSourcesName - } - - logger.info(":${project.name}:reactNativeAndroidRoot ${androidPrebuiltBinaryDir.canonicalPath}") - found = true - } else if (androidSourcesDir.exists()) { - maven { - url androidSourcesDir.toString() - name androidSourcesName - } - - logger.info(":${project.name}:reactNativeAndroidRoot ${androidSourcesDir.canonicalPath}") - found = true - } - }) - } - - if (!found) { - throw new GradleException( - "${project.name}: unable to locate React Native android sources. " + - "Ensure you have you installed React Native as a dependency in your project and try again." - ) - } -} - -def kotlin_version = getExtOrDefault('kotlinVersion') - -dependencies { - //noinspection GradleDynamicVersion - implementation "com.facebook.react:react-native:+" - implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" -// From node_modules -} - -if (isNewArchitectureEnabled()) { - react { - jsRootDir = file("../src/") - libraryName = "IosModal" - codegenJavaPackageName = "com.reactnativeiosmodal" - } -} diff --git a/android/gradle.properties b/android/gradle.properties deleted file mode 100644 index e6863378..00000000 --- a/android/gradle.properties +++ /dev/null @@ -1,5 +0,0 @@ -IosModal_kotlinVersion=1.7.0 -IosModal_minSdkVersion=21 -IosModal_targetSdkVersion=31 -IosModal_compileSdkVersion=31 -IosModal_ndkversion=21.4.7075529 diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml deleted file mode 100644 index 6156bedc..00000000 --- a/android/src/main/AndroidManifest.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - diff --git a/android/src/main/java/com/reactnativeiosmodal/IosModalPackage.kt b/android/src/main/java/com/reactnativeiosmodal/IosModalPackage.kt deleted file mode 100644 index f85a0334..00000000 --- a/android/src/main/java/com/reactnativeiosmodal/IosModalPackage.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.reactnativeiosmodal -import com.facebook.react.ReactPackage -import com.facebook.react.bridge.NativeModule -import com.facebook.react.bridge.ReactApplicationContext -import com.facebook.react.uimanager.ViewManager - - -class IosModalPackage : ReactPackage { - override fun createNativeModules(reactContext: ReactApplicationContext): List { - return emptyList() - } - - override fun createViewManagers(reactContext: ReactApplicationContext): List> { - return listOf(IosModalViewManager()) - } -} diff --git a/android/src/main/java/com/reactnativeiosmodal/IosModalViewManager.kt b/android/src/main/java/com/reactnativeiosmodal/IosModalViewManager.kt deleted file mode 100644 index a48ca87b..00000000 --- a/android/src/main/java/com/reactnativeiosmodal/IosModalViewManager.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.reactnativeiosmodal -import android.graphics.Color -import android.view.View -import com.facebook.react.uimanager.SimpleViewManager -import com.facebook.react.uimanager.ThemedReactContext -import com.facebook.react.uimanager.annotations.ReactProp - -class IosModalViewManager : SimpleViewManager() { - 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/assets/ModalExample-00-01.gif b/assets/ModalExample-00-01.gif deleted file mode 100644 index 803c0d1a..00000000 Binary files a/assets/ModalExample-00-01.gif and /dev/null differ diff --git a/assets/ModalExample-02-03.gif b/assets/ModalExample-02-03.gif deleted file mode 100644 index b690c129..00000000 Binary files a/assets/ModalExample-02-03.gif and /dev/null differ diff --git a/assets/ModalExample-04-05.gif b/assets/ModalExample-04-05.gif deleted file mode 100644 index 3b446ae6..00000000 Binary files a/assets/ModalExample-04-05.gif and /dev/null differ diff --git a/assets/ModalExample-06-07-2.gif b/assets/ModalExample-06-07-2.gif deleted file mode 100644 index f4d2cb2b..00000000 Binary files a/assets/ModalExample-06-07-2.gif and /dev/null differ 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/docs/Commit-Notes.md b/docs/Commit-Notes.md deleted file mode 100644 index f04bc608..00000000 --- a/docs/Commit-Notes.md +++ /dev/null @@ -1,201 +0,0 @@ - - -

- -* `Note:2023-03-31-17-51-56` - - * From: `RNIModalView.swift` - * Date Extracted: `2023-04-29` - -
- - * There are a couple of different ways we can get notified whenever a modal is about to be dismissed. - - * **Method:A** - `RNIModalViewController.viewWillDisappear`, and `RNIModalViewController.viewWillDisappear`. - - * **Method:A** gets invoked alongside `RNIModalView.presentationControllerWillDismiss`. - - * As such, **Method:A** has the same problem as `Note:2023-03-31-17-01-57` (i.e. the event fires regardless if the swipe down gesture to close the modal was cancelled mid-way). - - * Using `Method:A`, it's also possible to distinguish if `viewWillAppear` was invoked due to a modal being dismissed (see `Note:2023-04-01-14-39-23`). - - * Using `Method:A`, we can use the `transitionCoordinator` to get notified when the exit transition is finished. - - -
- - * **Method:B** - `UIAdaptivePresentationControllerDelegate` - * **Method:B** only gets invoked in response to user-initiated gestures (i.e. See `Note:2023-03-31-16-48-10`). - * Additionally, with **Method:B**, the "will blur"-like event gets fired multiple times whenever the dismiss gesture is cancelled half-way (i.e. see: `Note:2023-03-31-17-01-57`). - * However, `UIViewController.viewWillAppear` and `UIViewController.viewDidAppear` get called immediately when the swipe to close gesture is cancelled. - * **Method:B** also invokes `RNIModalViewController.viewWillDisappear` + `RNIModalViewController.viewDidDisappear` (i.e. `Method:A`). - * 1 - `RNIModalView.presentationControllerWillDismiss` - * 2 - `RNIModalViewController.viewWillDisappear` - * 3 - `RNIModalViewController.viewDidDisappear` - * 4 - `RNIModalView.presentationControllerDidDismiss` - -
- - * **Method:C** - Programmatically/manually, via the`present` and `dismiss` methods. - - * **Method:C** only invokes the "blur/focus" events whenever the `present` + `dismiss` methods are being invoked. - - * As such, **Method:C** does not account for whenever the modal is being dismissed via a swipe gesture. - - * **Method:C** also invokes `RNIModalViewController.viewWillDisappear` + `RNIModalViewController.viewDidDisappear` (i.e. `Method:A`). - - * 1 - `RNIModalView.dismissModal` - * 2 - `RNIModalViewController.viewWillDisappear` - * 3 - `RNIModalView.dismissModal - completion` - -
- - * **Method:D** - Overriding the `RNIModalViewController.dismiss` method and notifying `RNIModalView` when the method gets invoked. - * **Method:D** Works regardless of the method in which the modal was dismissed (i.e. swipe gesture, or programmatic). - * In addition, **Method:D** coupled with swizzling `UIViewController`, means that we can detect whenever a modal is about to be dismissed or presented via replacing the default `UIViewController.present`, and `UIViewController.dismiss` methods w/ our own implementation. - - -
- -* `Note:2023-03-30-15-20-27` - - * From: `RNIModalView.swift` - * Date Extracted: `2023-04-29` - -
- - * Weird bug where you cannot set the modal to present in fullscreen if `presentationController` delegate is set. - * So don't set the delegate when we are using a "fullscreen-like" presentation - * Removing the delegate means that the methods in `UIAdaptivePresentationControllerDelegate` will not be called, meaning we will no longer get notified of "blur/focus" related events. - -
- -* `Note:2023-03-30-19-36-33` - Archived/Old - - * From: [`RNIModalManager`](../ios/src_library/React Native/RNIModal/RNIModalManager.swift) - - * Date Extracted: `2023-04-27` - -
- - * This assumes that the app is using a single window, and all the modals are - being presented on that window, as a chain of view controllers. - - * E.g. "window 1" presents a modal, and "window 2" presents a modal - - * Those 2 modals are not related to one another, and their respective - modal index should both be 1, since they are the 1st modal presented on - their respective window instances. - - * Instead their modal indexes are 1, and 2, respectively. - - * This also means the internal `currentModalIndex` state, and any other - logic that relies on it will be wrong too. - - * And since there is no distinction on which modal belongs to a particular - window, all the modal instances in the app will get notified when a event - occurs. - - * This can be fixed by keeping a separate `currentModalIndex` for each - window instance, and only updating it based on the modal's associated - window instance. - - * This can also be fixed by programmatically determining the modal's - `modalIndex`. - -

- -* `Note:2023-04-07-03-22-48` - Archived/Old - - * From: [`RNIModalManager`](../ios/src_library/React Native/RNIModal/RNIModalManager.swift) - * Date Extracted: `2023-04-27` - -
- - * Manually incrementing and decrementing the `modalIndex` is fragile. - * For example: - 1. If multiple blur/focus events were to fire consecutively, the `modalIndex` might be wrong. - 2. If a modal presented/dismissed w/o notifying `RNIModalManager`, - - the `modalIndex` will be stale. - 3. If a modal was about to be blurred (i.e. "will blur"), but was - - cancelled halfway (i.e. "did blur" not invoked), and the modal regained - focus again (i.e. invoking "will focus" + "did focus"). - 4. Invoking "will blur", or "will focus" but not invoking the invoking - - the corresponding "did blur", and "did focus" methods. - * When a modal is hidden, it will trigger a "focus" event for the new topmost modal; subsequently, when a modal is shown, it will trigger a "blur" event for the previous topmost modal. - * This assumes that the "modal manager" can only be notified of a pair of "focus", or "blur" at a given time, per window instance... - * E.g. "will focus" -> "did focus", "will blur" -> "did blur". - * However, there might be an instance where multiple modals may be hidden at the same time... - * E.g. "will blur 1", "will blur 2", "did blur 1", "did blur 2", etc. - * When multiple "blur" events are firing, the modal with the lowest - index should take priority. - * Subsequently, when multiple "focus" events are firing, the modal with - the highest modal index should take priority. - * Additionally, when a "blur", or "focus" event is firing at the same - time... - * E.g. "will blur 1", "will focus 2", "did blur 1", "did focus 2", etc. - * The "focus" event should take priority, (assuming that the "focus" - event was fired for the topmost modal). - -

- -* `Note:2023-04-22-03-26-45` - * From: `TODO:2023-04-20-23-58-24` - Impl. sheet-related props. - * Research - * A sheet is an instance of a new `UIPresentationController` subclass called `UISheetPresentationController`. - * The typical way to get an instance of this class is to read the `sheetPresentationController` property on a view controller before you present it. - * This method returns a non-nil instance as long the view controller's `modalPresentationStyle`is form sheet or page sheet. - * What are detents? A detent is a height where a sheet naturally rests, and these are defined as a fraction of the fully expanded sheet frame. - * System defined detents: `.medium`, `.large`. - * `UIViewController.sheetPresentationController.detents`. - * The default value of this property is an array of just the large detent, which is why if you don't set it at all, you get a standard full height sheet. - * `sheet.prefersScrollingExpandsWhenScrolledToEdge` - * I might prefer that scrolling not expand the sheet so the content behind the modal is always visible unless I explicitly resize the sheet by dragging from the bar. - * By default, this property is true, so setting it to false prevents scrolling from expanding the sheet. - * `sheet.selectedDetentIdentifier` + `sheet.animateChanges` - * Programmatically changing the size of the sheet. - * Change which current detent is active, and animate the transitions of detents. - * `sheet.smallestUndimmedDetentIdentifier` - * By default, this property is nil, which means all of the detents are dimmed. - * But if you want to remove dimming, set it to the identifier of the smallest detent where you don't want dimming. - * More than visually removing the dimming, this property also allows you to build advanced nonmodal experiences, since I can now interact not only with the content in the sheet but also with the content outside of the sheet. - * This will not only remove the dimming but also let's you interact with the controller that is currently presenting the bottom sheet. - * `sheet.prefersEdgeAttachedInCompactHeight` - * In iOS 13, we made all sheets full screen in landscape, and now we've made available an alternate appearance where sheets are only attached to the screen at their bottom edge. - * To get this new appearance, simply set `prefersEdgeAttachedInCompactHeight` to true. - * Now just setting this will always give you a sheet that is as wide as the safe area. - * "Edge attached" means that the sheet is touching the edges of the screen. This usually happens when the iPhone's screen is in landscape. - * If you'd like a sheet whose width follows the `presentedViewControllers.preferredContentSize`, set `sheet.widthFollowsPreferredContentSizeWhenEdgeAttached` to true. - * Now the sheet will respect the presented VC's `preferredContentSize`. - * This will only take effect when the sheet is "edge attached". - * `sheet.prefersGrabberVisible` - * A grabber often isn't necessary, but in cases where it might be less obvious that a sheet is resizable, such as when scrolling doesn't resize the sheet, displaying the grabber can be a helpful indicator of resizability. - * `sheet.preferredCornerRadius` - * Another option we've exposed is the ability to customize the corner radius. - * If your app has a more rounded appearance, you may want to match that aesthetic. - * Note that the system will keep stacked corners looking consistent, so if the sheet with very rounded edges expands to push back the root sheet, the root sheet will have larger corners to match. - * Finally, although it's possible to create a sheet with detents on iPad, often a popover is wanted instead that adapts to a sheet in compact, potentially customized with things like detents. - * Adapt a popover to a customized sheet. - * The `sheetPresentationController` will be available for all controllers that have the `modalPresentationStyle` set to either `.pageSheet` or `.formSheet`. - * Small aside: These look the same on iPhone, but `.formSheet` is much smaller when presented on the iPad. - * First, I'll set the `modalPresentationStyle` of the picker to popover. - * `picker.modalPresentationStyle = .popover` - * Then, instead of grabbing the `sheetPresentationController`, because this will now return `nil`, since the `modalPresentationStyle` is not a sheet, I'll get the `popoverPresentationController`. - * `let popover = picker.popoverPresentationController`. - * and then I'll grab a new property on the popover called the `adaptiveSheetPresentationController`. - * This property returns an instance of the sheet that the popover will adapt to in compact size classes, and then I'll configure it just as I did the sheet before. - * `let sheet = popover.adaptiveSheetPresentationController`. - * Custom detents - * Create a detent identifier and then create a detent with that identifier and provide a maximum height. - * Create an identifier for the custom detent: `let smallId = UISheetPresentationController.Detent.Identifier("small")`. - * Then create a custom detent using the custom identifier: `UISheetPresentationController.Detent.custom(identifier: smallId) { context in return 80 }`. - * You can now use the custom detent in the detents array: `sheetPresentationController?.detents = [smallDetent, .medium(), .large()]`. - * In addition to system-defined `.medium` and `.large` we can create `.custom`. - * Custom detent takes a closure whose job is to return the desired height: `custom { _ in return 200 }` - * Want a bottom sheet that is 30% or 60% of the available height? This is easily done thanks to the `context` we get passed in. - * It has `maximumDetentValue`, which specifies the maximum height possible for the sheet: `.custom { context in return context.maximumDetentValue * 0.6` - * You can also extend `UISheetPresentationControllerDetentIdentifier` with `static` identifier for your custom sizes. - * this way, you can refer to them when configuring other options for the sheet presentation controller, like controlling the dimming effect with `largestUndimmedDetentIdentifier`. \ No newline at end of file diff --git a/docs/TODO-Archive.md b/docs/TODO-Archive.md deleted file mode 100644 index e69de29b..00000000 diff --git a/docs/TODO.md b/docs/TODO.md deleted file mode 100644 index 6b24f4ff..00000000 --- a/docs/TODO.md +++ /dev/null @@ -1,344 +0,0 @@ -# TODO - `react-native-ios-modal` - -☀️☁️ - -

- -## TODO - Current Tasks - -
- -- [ ] `TODO:2023-10-02-21-28-31` - Refactor: Replace w/ template from expo modules. -- [ ] `TODO:2023-05-05-07-05-20` - Impl: Update `RNIComputableSize` - Add `minSize`, and `maxSize`. - -
- -- [ ] `TODO:2023-05-01-19-12-26` - Implement: `ModalView` events. - - [x] **Subtask** - `TODO:2023-05-01-19-13-50` - Impl. `ModalView.onModalDidSnap` event. - - [x] **Subtask** - `TODO:2023-04-22-05-29-40` - Impl. modal event `onModalSwipeGestureStart` + `onModalSwipeGestureDidEnd`. - - [x] **Subtask** - `TODO:2023-04-05-15-35-49` - Impl. `onModalDismissWillCancel` and `onModalDismissDidCancel`. - - [x] **Subtask** - `TODO:2023-05-01-19-19-20` - Update `RNIModalView` event objects. - - [ ] **Subtask** - `TODO:2023-03-30-15-56-38` - Update examples - Replace deprecated events usage. - -
- -- [ ] `TODO:2023-04-07-02-33-21` Refactor: Re-write "hide non-visible modal" logic (i.e. logic for temporarily hiding bottom-most modals). - - [x] **Subtask** - `TODO:2023-04-07-02-39-15` - Disable `hideNonVisibleModals`-related logic from triggering. - - [ ] **Subtask** - `TODO:2023-03-22-12-07-54` Refactor: Move to `RNIModalManager` - * **Desc**: Move `RNIModalView.setIsHiddenForViewBelowLevel` to `RNIModalManager`. - -
- -- [ ] `TODO:2023-03-04-13-02-45` Refactor: Rename `ModalView.autoCloseOnUnmount` prop to `shouldAutoCloseOnUnmount`. - -
- -- [ ] `TODO:2023-04-21-23-42-42` - Deprecate `presentViaMount` -- [ ] `TODO:2023-04-22-05-29-50` - Deprecate `ModalView.setVisibility` + `childProps`, and replace with `ModalContext.modalContentProps`. -- [ ] `TODO:2023-04-22-05-30-00` - Update `ModalView.setVisibility` - Add options params + `shouldTemporarilyDisableSwipeGestureWhileTransitioning`. -- [ ] `TODO:2023-04-22-05-29-50` - Update `ModalView.getProps` - Match default values from `RNIModalView` native props. -- [ ] `TODO:2023-04-21-23-42-49` - Add prop to disable user-interaction from modal - * Can be achieved via `UIView.userInteractionEnabled`, or via `RCTTouchHander.isEnabled`. - -
- -- [ ] `2023-03-24-00-37-23` Refactor: Use `react-native-utilities` - - * **Desc**: Update `react-native-ios-modal` to use `react-native-utilities` as a peer dependency. - -
- - - [ ] **Subtask** - `TODO:2023-03-24-01-14-26` - Move `UIView+Helpers` extension to `react-native-utilities`. - - [ ] **Subtask** - `TODO:2023-05-12-14-50-57` - Replace impl. of `RNIError` in `react-native-utilities`. - - [ ] **Subtask** - `TODO:2023-03-24-01-14-26` Refactor: Remove/Replace `UIWindow.key` extension. - - [ ] **Subtask** - `TODO:2023-03-28-18-58-47` - Remove native iOS code in `ios/src_library/Temp` that was copied over from `react-native-ios-utilities` + update usage. - - [ ] **Subtask** - `TODO:2023-03-29-04-54-56` - Remove JS/TS code in `src/temp` that was copied over from `react-native-ios-utilities` + update usage. - - [ ] **Subtask** - `TODO:2023-03-20-21-29-36`  - Refactor: Move `RNIModalManager` helper functions to `RNIUtilities`. - - [ ] **Subtask** - `TODO:2023-03-04-13-22-34` - Refactor: Remove `ViewModuleRelatedTypes` - * **Desc**: Move/Consolidate `src/types/ViewModuleRelatedTypes` to `react-native-utilities` and remove. - - -
- -- [ ] `TODO:20230-03-04-12-58-40` Refactor: Types - Remove `KeyMapType` Usage. - -

- -## TODO - Bugs - -- [ ] `TODO:2023-03-04-12-50-04` Fix: `isModalContentLazy` Prop - - * **Desc**: Setting `ModalView.isModalContentLazy` to `false` triggers a bug w/ `setVisibility` that causes it to throw an error stating that the modal cannot be opened be. - -
- - - [ ] **Subtask** - `TODO:2023-03-08-03-48-33` Update: Ex - `Test06` - Enable `ModalView.isModalContentLazy` prop for example `Test06`. - -
- -- [ ] `TODO:2023-03-04-12-45-32` Fix: `ModalView.enableSwipeGesture` prop not updating. - * **Desc**: Fix `ModalView.enableSwipeGesture` prop not applying changes when updated via state. - -

- -## TODO - Non-Priority - -- [ ] `TODO:2023-03-09-17-36-51` - Impl: Close preceding modals non-destructively - * **Desc**: Implement a way to close proceeding modals w/o permanently closing the succeeding/topmost modals. - * When trying to close a modal that is "not in focus" (i.e. a modal that isn't at the very top; e.g. a modal that has a `modalIndex` that is lower than the topmost modal), will throw an error: "`ModalView`, `setVisibility` failed: Cannot dismiss modal because it's not in focus. Enable `allowModalForceDismiss` to dismiss". - -
- -- [ ] `TODO:2023-03-08-03-51-37` Impl: `ModalEventListener` Component - * **Desc**: Implement `ModalEventListener` dummy component. - * A dummy component that render nothing. - * Used to listen to modal events via the modal context + modal event emitter ref. - * Complete this after refactor + rename of modal events. - * Related: `TODO:2023-03-04-13-15-11` Refactor: Use Will/Did Prefix for `RNIModalView` Events - -

- -## TODO - Adaptive Modal - -- [ ] `TODO:2023-06-04-23-45-31` - Impl: Adaptive Modal - `LayoutComputableValue` - * Layout value: "percentage relative to parent", "percentage relative to current window width/height", "percentage relative to screen width/height". - * Layout value: "dynamic constant - `safeAreaInsets` top/bottom/width/height", "dynamic constant - current keyboard height/width", "constant value". - * Layout value should accept "array of computable layout values". - * Layout value should accept "offset + offset operation". - * Layout value should accept "min/max values". - -

- -## TODO - Completed - -
- -- [x] `TODO:2023-05-12-14-40-46` - Refactor: Update `RNIModalViewModule` functions to use promises. - -- [x] `TODO:2023-05-12-14-11-25` - Refactor: Replace `RNIModalViewModule.dismissModalByID` w/ `setModalVisibilityByID`. - -- [x] `TODO:2023-03-27-23-55-09` Refactor: Re-write `RNIModalView` error creation and handling. - * **Desc**: Streamline error creation and error codes. - -- [x] `TODO:2023-05-03-20-17-56` - Refactor: Types - Typescript type names should match native type names that they are representing. - -
- -- [x] `TODO:2023-03-04-13-15-11` - Refactor: Update Modal Events - - * **Desc**: Refactor `RNIModalView` events to use "will/did" prefix, update the modal event objects, and deprecate old event names (for backwards compatibility). - -
- - - [x] **Subtask** - `TODO:2023-03-30-15-52-53` - Move deprecated native modal event types from `RNIModalViewEvents` to `RNIModalViewDeprecatedEvents`, and update library imports/exports. - - [x] **Subtask** - `TODO:2023-03-30-16-25-01` - Impl: `RNIModal.modalIndexPrev` - * **Desc**: Implement in order to support deprecated event object property `modalLevelPrev`. - -
- - - [x] **Subtask** - `TODO:2023-04-14-23-40-15` - Impl. Update `RNIModalData` - Add more modal-related data. - - [x] **Subtask** - `TODO:2023-03-30-19-18-20` - Impl: Types - Create `ModalDeprecatedBaseEventData`. - - [x] **Subtask** - `TODO:2023-03-30-15-53-01` - Add `deprecated` suffix to deprecated events. - - [x] **Subtask** - `TODO:2023-03-04-13-06-27` - Impl: Update `RNIModalView` Native Events. - - [x] **Subtask** - `TODO:2023-03-30-15-52-42` - Update typescript types for modal event objects to match native event object. - - [x] **Subtask** - `TODO:2023-03-30-15-53-13` - Remove deprecated native events. - - [x] **Subtask** - `TODO:2023-03-30-15-54-06` - Impl. new `RNIModalView` native events. - - [x] **Subtask** - `TODO:2023-03-30-16-36-50` - Update `ModalView` to use the new events. - - [x] **Subtask** - `TODO:2023-03-30-15-55-12` - Add invocation for deprecated events: `onModalFocus`, `onModalShow`, `onModalAttemptDismiss`, `onModalDismiss`, `onModalBlur` - -
- -- [x] `TODO:2023-04-22-00-01-50` - Optimization - Add flag for caching the view-controller tree. - -
- -- [x] `TODO:2023-04-20-23-58-24` - Impl. sheet-related props. - - [x] **Subtask** - `TODO:2023-04-21-00-43-59` - Impl. prop `sheetDetents`. - - [x] **Subtask** - `TODO:2023-04-21-23-23-32` - Impl. prop `sheetPrefersScrollingExpandsWhenScrolledToEdge`. - - [x] **Subtask** - `TODO:2023-04-21-23-25-35` - Impl. prop `sheetPrefersEdgeAttachedInCompactHeight`. - - [x] **Subtask** - `TODO:2023-04-21-23-25-47` - Impl. prop `sheetWidthFollowsPreferredContentSizeWhenEdgeAttached`. - - [x] **Subtask** - `TODO:2023-04-21-23-26-03` - Impl. prop `sheetPrefersGrabberVisible`. - - [x] **Subtask** - `TODO:2023-04-21-23-24-47` - Impl. prop `sheetLargestUndimmedDetentIdentifier`. - - [x] **Subtask** - `TODO:2023-04-21-23-26-13` - Impl. prop `sheetPreferredCornerRadius`. - - [x] **Subtask** - `TODO:2023-04-21-23-24-03` - Impl. prop `sheetSelectedDetentIdentifier`. - - [x] **Subtask** - `TODO:2023-04-21-23-24-39` - Impl. prop `sheetShouldAnimateChanges`. - - [x] **Subtask**: `TODO:2023-04-21-23-26-13` - Impl. modal event `onModalDetentDidCompute`. - - [x] **Subtask**: `TODO:2023-04-22-06-24-51` - Impl. modal event `onModalDidChangeSelectedDetentIdentifier` - - [x] **Subtask** - `TODO:2023-04-21-00-31-46` - Impl. modal content prop `modalContentPreferredContentSize`. - * For example, `UIModalPresentationStyle.pageSheet` uses an explicit size that the system provides. - * By contrast, `UIModalPresentationStyle.formSheet` uses the view controller’s `preferredContentSize` property, which you can set. - * This will also be used when `sheet.widthFollowsPreferredContentSizeWhenEdgeAttached` is set to `true`. - -
- -- [x] `TODO:2023-04-26-07-30-15` - Impl. `RNIComputableValue` - -
- -- [x] `TODO:2023-04-21-23-27-27` - Gloss: Re-Organize/Re-group props based on their relationship, not their type. - -- [x] `TODO:2023-03-31-18-33-34` - Unify/streamline/consolidate logic for invoking modal focus/blur. - - - [x] **Subtask** - `TODO:2023-03-31-18-37-00` - Impl. `RNIViewControllerLifeCycleNotifiable` protocol. - - [x] **Subtask** - `TODO:2023-04-06-02-14-59` Update `RNIModalViewController` to use `RNIViewControllerLifeCycleNotifiable`. - - [x] **Subtask** -`TODO:2023-03-31-18-34-23` - Impl. "modal presentation state" (i.e. `RNIModalPresentationState`). - - [x] **Subtask** - `TODO:2023-04-06-02-13-24` - Update `RNIModalView` to use `RNIViewControllerLifeCycleNotifiable`. - - [x] **Subtask** - `TODO:2023-04-07-02-41-35` - Update `RNIModalView` to use "modal presentation state" (i.e. `RNIModalPresentationState`). - -
- - - [x] **Subtask** - `TODO:2023-04-07-05-44-22` - Impl. `RNIModalPresentationTrigger` enum. - - [x] **Subtask** - `TODO:2023-04-07-06-10-22` Refactor - Replace `RNIModalState.isModalPresented` w/ `RNIModalPresentationState`. - - - [x] **Subtask** -`TODO:2023-03-31-18-33-43` - Refactor `RNIModalManager` focus/blur logic to not rely on "modal index". - -
- -- [x] `TODO:2023-04-08-18-37-57` - Replace inappropriate use of "synthesized" prefix w/ "computed". - -- [x] `TODO:2023-04-07-01-44-05` - Refactor: Replace `RNIModalManager.currentModalIndex` with per window instance "modal index". - -- [x] `TODO:2023-03-30-20-13-10` - Impl: `UIWindow.windowID`. - -
- -- [x] `TODO:2023-03-28-18-52-17` - Pre-migration to `react-native-ios-utilites` - - [x] **Subtask** - `TODO:2023-03-29-04-34-35` - Copy over `react-native-ios-utilities` native source to `ios/src_library/Temp`. - - [x] **Subtask** - `TODO:2023-03-29-04-50-50` - Copy over `react-native-ios-utilities` js/ts source to `src/temp`. - - [x] **Subtask** - `2023-03-29-05-04-40` - Refactor: Update `RNIModalView` + `ModalView` to use `RNIWrapperView`. - -
- -- [x] `TODO:2023-03-04-06-34-28` - Library Native Cleanup - - * **Desc**: Rewrite native to be more readable/consistent. - -
- - * [x] **Subtask** - `TODO:2023-03-24-09-41-16` - Remove `modalLevel` - * **Desc**: Remove `RNIModalView.modalLevel` - -
- - * [x] **Subtask** - `TODO:2023-03-18-09-22-15` - Re-write Modal Focus Checking Logic - * **Desc**: Re-write modal "focus checking" - * instead of manually keeping track of focus per modal instance (potentially becoming stale over time), check focus via climbing the presented view controller hierarchy. - * ` getPresentedViewControllers().last === self.modalNVC: true` - * ``getPresentedViewControllers.last === self.modalVC false` - -
- - * [x] **Subtask** - `TODO:2023-03-22-13-18-14` Refactor: Move `fromString` to enum init - - * [x] **Subtask** - `TODO:2023-03-22-12-33-26` Refactor: Remove `modalNVC` - * Remove `RNIModalView.modalNVC` + usage. - -
- - * [x] **Subtask** - `TODO:2023-03-22-12-09-34` - Move to `get` property called `synthesizedNativeEventBase` - * **Desc**: Refactor `createModalNativeEventDict`. - -
- - * [x] **Subtask** - `TODO:2023-03-22-11-33-06` - Add `synthesized-` prefix to properties in `RNIModalView`. - * [x] **Subtask** - `TODO:2023-03-17-15-32-16` - Rename to `RNIModalView.isModalInFocus` - * [x] **Subtask** - `TODO:2023-03-17-12-42-02` - Remove `RNIModalView.modalUUID` - * [x] **Subtask** - `TODO:2023-03-16-15-16-09` - Remove `RNIModalView.DefaultValues` - * [x] **Subtask** - `TODO:2023-03-16-15-19-13` - Remove `RCTSwiftLog` - -
- - * [x] **Subtask** - `TODO:2023-03-04-15-39-46` Impl: `RNIModalManager` - * **Desc**: Implement `RNIModalManager` singleton for handling modal focus/blur logic. - * Modal focus/blur re-write. - * Consolidate focus/blur related logic to this class, This class will be notified whenever a new modal is presented or dismissed. - * It will then be responsible to notify/"hand out" blur/focus events to other modals. - * Will be responsible for keeping track how many modals are currently active, etc. - -
- - - [x] **Subtask** - `TODO:2023-03-24-09-58-50` - Refactor `RNIModalView` to use `RNIModalManager`. - - [x] **Subtask** - `TODO:2023-03-24-14-25-52` - Remove `RNIModalViewFocusDelegate`-related logic. - - [x] **Subtask** - `TODO:2023-03-24-09-58-50` - Add temporary changes to `RNIModalManager` for `RNIModalView` partial conformance. - -
- - - [x] **Subtask** - `TODO:2023-03-24-09-56-09` - Remove temporary changes to `RNIModalManager`. - * **Desc**: Temporarily add changes to `RNIModalManager` so that `RNIModalView` can partially use it while it hasn't finished conforming to all the protocols in `RNIModal`. - -
- - - [x] **Subtask** - `TODO:2023-03-05-00-32-43` Fix: Edge Case - Modal Focus/Blur Bug - * **Desc**: Add code to manually propagate modal blur/focus events. - * The modal is being dismissed via calling the modal view controller's dismiss method. As such, the focus/blur event is not being propagated. - -
- - - [x] **Subtask** - `TODO:2023-03-05-00-33-15` Refactor: Re-write `RNIModalViewModule.dismissModalByID`. - - - [x] **Subtask** - `TODO:2023-03-04-15-38-02` Refactor: Remove `RNIModalViewManager.currentModalLevel`. - - - [x] **Subtask** - `TODO:2023-03-04-15-33-15` Refactor: Remove `RNIModalViewManager.delegatesFocus`. - - - [x] **Subtask** - `TODO:2023-03-04-15-49-02` Refactor: Remove `RNIModalViewManager.presentedModalRefs`. - -
- - - Related: - * `TODO:2023-03-04-05-25-44` - Library Cleanup - * `Note:2023-03-04-02-58-31` - -
- -- [x] `TODO:2023-03-04-03-59-43` - Re-Write Examples in Typescript - - * **Desc**: Re-write prev/existing `react-native-ios-modal` examples/tests, and other related code in typescript. - - - [x] **Subtask** - `TODO:2023-03-04-04-39-44` - Import + Re–write Example Components - * **Desc**: Import example-related components/utilities from `react-native-ios-context-menu` (i.e. `example/src`) and retrofit it to work in `react-native-ios-modal`'s example project. - -
- -- [x] `TODO:2023-03-04-04-20-46` - Library Typescript Re-Write - * **Desc**: Re-write `react-native-ios-modal` to support typescript. - -
- -- [x] `TODO:2023-03-04-05-25-44` - Library Cleanup - - * **Desc**: Cleanup library's code to be more understandable. - -
- - - [x] **Subtask** - `TODO:2023-03-04-04-20-46` - Library Native Cleanup - * **Desc**: Cleanup library's native code - Initial preparation for library overhaul to use `react-native-ios-utilities` as a peer dependency. - -

- -## Old/Archive - - -- [x] Use Context to pass ref to functions -- [x] Impl. observable so other comps can subscribe/unsub to events via context instead of using refs to call events -- [x] Create HOC to wrap comp., consume modal context, handle subscribe/unsub to events and then call "modal life cycle" funcs via ref to wrapped comp. -- [ ] Impl. hooks API ex: useOnModalShowCallback, useOnModalDismiss, etc. — hook to consume modal context, then handle sub/unsub to modal events and call callback - -- [x] Refactor - move constants to seperate file -- [ ] Refactor - convert to typescript -- [ ] Refactor - Use built in swift error type -- [x] Update example to have multiple examples -- [x] Render nothing on android -- [x] Add Modal OnFocus/onBlur events to ModalView -- [ ] Add `waitFor` on modal `setVisibility` to fix modal flicker on mount -- [x] Implement modal `nativeEvent` -- [x] Add global `ModalEvents` EventEmitter to listen to modal events -- [ ] Add library to react native directory repo/site -- [x] Finish Initial Documentation -- [ ] Add Example Test for present modal via mount/unmount -- [ ] Add AutoDismiss when unmounted prop -- [ ] Add comments to Example -- [ ] Add test for react native versions 0.60 or older versions -- [ ] Update supported `UIModalPresentationStyles` -- [ ] Add example `UIModalTransitionStyles` -- [ ] Use `NativeModule` to programmatically open/close a modal instead of the current `requestID`/`onRequestResult` - * `NativeModule`'s has built in functionality to create and resolving promises. \ No newline at end of file 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 = ""; }; - 88D018002A1B302F004664D2 /* RNIModalPresentationTrigger.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIModalPresentationTrigger.swift; sourceTree = ""; }; - 88D018022A1B302F004664D2 /* RNIModalData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIModalData.swift; sourceTree = ""; }; - 88D018032A1B302F004664D2 /* RNIModalPresentationNotifiable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIModalPresentationNotifiable.swift; sourceTree = ""; }; - 88D018042A1B302F004664D2 /* RNIModal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIModal.swift; sourceTree = ""; }; - 88D018082A1B302F004664D2 /* RNIModalFlags.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIModalFlags.swift; sourceTree = ""; }; - 88D018092A1B302F004664D2 /* RNIModalPresentationState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIModalPresentationState.swift; sourceTree = ""; }; - 88D0180B2A1B302F004664D2 /* RNIModalCustomSheetDetent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIModalCustomSheetDetent.swift; sourceTree = ""; }; - 88D0180C2A1B302F004664D2 /* RNIModalFocusState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIModalFocusState.swift; sourceTree = ""; }; - 88D0180F2A1B302F004664D2 /* RNIComputableSizeMode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIComputableSizeMode.swift; sourceTree = ""; }; - 88D018102A1B302F004664D2 /* RNIComputableValue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIComputableValue.swift; sourceTree = ""; }; - 88D018112A1B302F004664D2 /* RNIComputableSize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIComputableSize.swift; sourceTree = ""; }; - 88D018122A1B302F004664D2 /* RNIComputableValueMode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIComputableValueMode.swift; sourceTree = ""; }; - 88D018132A1B302F004664D2 /* RNIComputableOffset.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNIComputableOffset.swift; sourceTree = ""; }; - 88D0187B2A1B32E6004664D2 /* TestRoutes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestRoutes.swift; sourceTree = ""; }; - 88D0187D2A1B6CB3004664D2 /* BlurEffectTestViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlurEffectTestViewController.swift; sourceTree = ""; }; - 88D018812A1D09DD004664D2 /* AdaptiveModalAnimationConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdaptiveModalAnimationConfig.swift; sourceTree = ""; }; - 88D018852A1D0A1D004664D2 /* AdaptiveModalSnapPoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdaptiveModalSnapPoint.swift; sourceTree = ""; }; - 88D018872A1D0A36004664D2 /* AdaptiveModalConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdaptiveModalConfig.swift; sourceTree = ""; }; - 88D0188D2A1DCA61004664D2 /* AdaptiveModalManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdaptiveModalManager.swift; sourceTree = ""; }; - 88E8C0172A224A8D008C2FF8 /* AdaptiveModalSnapAnimationConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdaptiveModalSnapAnimationConfig.swift; sourceTree = ""; }; - 88E8C0192A228289008C2FF8 /* AdaptiveModalClampingConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdaptiveModalClampingConfig.swift; sourceTree = ""; }; - 88E8C01B2A23203E008C2FF8 /* RNILayoutPreset.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RNILayoutPreset.swift; sourceTree = ""; }; - 88E8C01D2A234B0A008C2FF8 /* UIBezierPath+VariadicCornerRadius.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIBezierPath+VariadicCornerRadius.swift"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 88B7D0E829C593F400490628 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 88203DBF2A122AA10088C8E2 /* RNIDynamicModal */ = { - isa = PBXGroup; - children = ( - 88203DC02A122AC20088C8E2 /* RNIDynamicModal.swift */, - 88D0165F2A14C86B004664D2 /* RootViewController.swift */, - ); - path = RNIDynamicModal; - sourceTree = ""; - }; - 88B7D0E229C593F400490628 = { - isa = PBXGroup; - children = ( - 88D017D62A1B302F004664D2 /* RNILayout */, - 88D018802A1D06EA004664D2 /* AdaptiveModal */, - 88D0178D2A1B302F004664D2 /* src_library */, - 88D0168B2A173093004664D2 /* Test */, - 88203DBF2A122AA10088C8E2 /* RNIDynamicModal */, - 88B7D0ED29C593F400490628 /* swift-programmatic-modal */, - 88B7D0EC29C593F400490628 /* Products */, - ); - sourceTree = ""; - }; - 88B7D0EC29C593F400490628 /* Products */ = { - isa = PBXGroup; - children = ( - 88B7D0EB29C593F400490628 /* swift-programmatic-modal.app */, - ); - name = Products; - sourceTree = ""; - }; - 88B7D0ED29C593F400490628 /* swift-programmatic-modal */ = { - isa = PBXGroup; - children = ( - 88B7D0EE29C593F400490628 /* AppDelegate.swift */, - 88B7D0F029C593F400490628 /* SceneDelegate.swift */, - 88B7D0F729C593F600490628 /* Assets.xcassets */, - 88B7D0F929C593F600490628 /* LaunchScreen.storyboard */, - 88B7D0FC29C593F600490628 /* Info.plist */, - ); - path = "swift-programmatic-modal"; - sourceTree = ""; - }; - 88D0168B2A173093004664D2 /* Test */ = { - isa = PBXGroup; - children = ( - 88A2EF732A3A98F6006B5235 /* AdaptiveModalConfigTestPresets.swift */, - 88D0168C2A1730B1004664D2 /* RNILayoutTestViewController.swift */, - 88D0169D2A1B0DD3004664D2 /* RNIDraggableTestViewController.swift */, - 88D0187B2A1B32E6004664D2 /* TestRoutes.swift */, - 88D0187D2A1B6CB3004664D2 /* BlurEffectTestViewController.swift */, - 88C2F45F2A2CA8CF00DA7450 /* RoundedViewTestViewController.swift */, - 884A18F72A30516B0044AA66 /* AdaptiveModalPresentationTestViewController.swift */, - ); - path = Test; - sourceTree = ""; - }; - 88D0178D2A1B302F004664D2 /* src_library */ = { - isa = PBXGroup; - children = ( - 88D0178E2A1B302F004664D2 /* Helpers+Utilities */, - 88D017922A1B302F004664D2 /* Temp */, - 88D017BA2A1B302F004664D2 /* IosModal-Bridging-Header.h */, - 88D017BB2A1B302F004664D2 /* Extensions+Init */, - 88D017C02A1B302F004664D2 /* Extensions */, - 88D017CE2A1B302F004664D2 /* React Native */, - 88D018142A1B302F004664D2 /* RNIUtilities */, - ); - name = src_library; - path = ../../ios/src_library; - sourceTree = ""; - }; - 88D0178E2A1B302F004664D2 /* Helpers+Utilities */ = { - isa = PBXGroup; - children = ( - 88D0178F2A1B302F004664D2 /* RNIDictionarySynthesizable */, - 88D017902A1B302F004664D2 /* WeakElement.swift */, - 88D017912A1B302F004664D2 /* CGSize+Helpers.swift */, - ); - path = "Helpers+Utilities"; - sourceTree = ""; - }; - 88D0178F2A1B302F004664D2 /* RNIDictionarySynthesizable */ = { - isa = PBXGroup; - children = ( - ); - path = RNIDictionarySynthesizable; - sourceTree = ""; - }; - 88D017922A1B302F004664D2 /* Temp */ = { - isa = PBXGroup; - children = ( - 88D0179E2A1B302F004664D2 /* Extensions+Init */, - 88D017A12A1B302F004664D2 /* IosUtilities-Bridging-Header.h */, - 88D017A22A1B302F004664D2 /* RNINavigationEventsReporting */, - 88D017A52A1B302F004664D2 /* Extensions */, - 88D017A82A1B302F004664D2 /* RNICleanup */, - 88D017B72A1B302F004664D2 /* RNILog */, - 88D017B82A1B302F004664D2 /* Protocols */, - ); - path = Temp; - sourceTree = ""; - }; - 88D0179E2A1B302F004664D2 /* Extensions+Init */ = { - isa = PBXGroup; - children = ( - 88D0179F2A1B302F004664D2 /* CAGradientLayerType+Init.swift */, - 88D017A02A1B302F004664D2 /* UIImage+Init.swift */, - ); - path = "Extensions+Init"; - sourceTree = ""; - }; - 88D017A22A1B302F004664D2 /* RNINavigationEventsReporting */ = { - isa = PBXGroup; - children = ( - 88D017A32A1B302F004664D2 /* RNINavigationEventsReportingViewController.swift */, - 88D017A42A1B302F004664D2 /* RNINavigationEventsNotifiable.swift */, - ); - path = RNINavigationEventsReporting; - sourceTree = ""; - }; - 88D017A52A1B302F004664D2 /* Extensions */ = { - isa = PBXGroup; - children = ( - 88D017A62A1B302F004664D2 /* UIViewController+Helpers.swift */, - 88D017A72A1B302F004664D2 /* UIColor+Helpers.swift */, - ); - path = Extensions; - sourceTree = ""; - }; - 88D017A82A1B302F004664D2 /* RNICleanup */ = { - isa = PBXGroup; - children = ( - 88D017A92A1B302F004664D2 /* RNIInternalCleanupMode.swift */, - 88D017AA2A1B302F004664D2 /* RNICleanable.swift */, - 88D017AB2A1B302F004664D2 /* RNICleanupMode.swift */, - ); - path = RNICleanup; - sourceTree = ""; - }; - 88D017B72A1B302F004664D2 /* RNILog */ = { - isa = PBXGroup; - children = ( - ); - path = RNILog; - sourceTree = ""; - }; - 88D017B82A1B302F004664D2 /* Protocols */ = { - isa = PBXGroup; - children = ( - 88D017B92A1B302F004664D2 /* RNIJSComponentWillUnmountNotifiable.swift */, - ); - path = Protocols; - sourceTree = ""; - }; - 88D017BB2A1B302F004664D2 /* Extensions+Init */ = { - isa = PBXGroup; - children = ( - 88D017BC2A1B302F004664D2 /* UIModalPresentationStyle+Init.swift */, - 88D017BD2A1B302F004664D2 /* UIBlurEffect+Init.swift */, - 88D017BE2A1B302F004664D2 /* CGSize+Init.swift */, - 88D017BF2A1B302F004664D2 /* UISheetPresentationController+Init.swift */, - ); - path = "Extensions+Init"; - sourceTree = ""; - }; - 88D017C02A1B302F004664D2 /* Extensions */ = { - isa = PBXGroup; - children = ( - 88D017C12A1B302F004664D2 /* UIModalTransitionStyle+Helpers.swift */, - 88D017C22A1B302F004664D2 /* FloatingPoint+Clamping.swift */, - 88D017C32A1B302F004664D2 /* CAAnimation+Helpers.swift */, - 88D017C42A1B302F004664D2 /* Collection+Helpers.swift */, - 88D017C52A1B302F004664D2 /* UIWindow+Helpers.swift */, - 88D017C62A1B302F004664D2 /* UIView+Helpers.swift */, - 88D017C72A1B302F004664D2 /* CAAnimation+Block.swift */, - 88D017C82A1B302F004664D2 /* CGRect+Helpers.swift */, - 88D017C92A1B302F004664D2 /* Encodable+Helpers.swift */, - 88D017CA2A1B302F004664D2 /* KeyWindow+Helpers.swift */, - 88D017CC2A1B302F004664D2 /* UIGestureRecognizer+Helpers.swift */, - ); - path = Extensions; - sourceTree = ""; - }; - 88D017CE2A1B302F004664D2 /* React Native */ = { - isa = PBXGroup; - children = ( - 88D017CF2A1B302F004664D2 /* RNIDictionarySynthesizable */, - 88D017D82A1B302F004664D2 /* RNIAnimator */, - 88D017E12A1B302F004664D2 /* RNIMulticastDelegate */, - 88D017E42A1B302F004664D2 /* RNIWeak */, - 88D017E82A1B302F004664D2 /* RNIObjectMetadata */, - 88D017EE2A1B302F004664D2 /* RNIIdentifiable */, - 88D017F92A1B302F004664D2 /* RNIViewControllerLifeCycleNotifiable */, - 88D017FD2A1B302F004664D2 /* RNIModal */, - 88D0180D2A1B302F004664D2 /* RNIComputable */, - ); - path = "React Native"; - sourceTree = ""; - }; - 88D017CF2A1B302F004664D2 /* RNIDictionarySynthesizable */ = { - isa = PBXGroup; - children = ( - 88D017D02A1B302F004664D2 /* RNIDictionarySynthesizable.swift */, - 88D017D12A1B302F004664D2 /* RNIDictionaryRepresentable.swift */, - 88D017D22A1B302F004664D2 /* RNIDictionarySynthesizable+Default.swift */, - ); - path = RNIDictionarySynthesizable; - sourceTree = ""; - }; - 88D017D62A1B302F004664D2 /* RNILayout */ = { - isa = PBXGroup; - children = ( - 88D017D72A1B302F004664D2 /* RNILayout.swift */, - 88E8C01B2A23203E008C2FF8 /* RNILayoutPreset.swift */, - 887C3BE32A43C4FF0026B57C /* RNILayoutMargins.swift */, - 887C3BE52A43C5460026B57C /* RNILayoutMarginRects.swift */, - 886AFCAA2A31FF40004AC9FB /* RNILayoutValue.swift */, - 887AA0562A4253050089F517 /* RNILayoutKeyboardValues.swift */, - 886AFCB02A325B6F004AC9FB /* RNILayoutValueContext.swift */, - 886AFCAC2A3209D5004AC9FB /* RNILayoutValueMode.swift */, - 886AFCAE2A320DED004AC9FB /* RNILayoutValuePercentTarget.swift */, - 8849B6A62A3F7A7700A5F412 /* RNILayoutValue+StaticAlias.swift */, - ); - path = RNILayout; - sourceTree = ""; - }; - 88D017D82A1B302F004664D2 /* RNIAnimator */ = { - isa = PBXGroup; - children = ( - 88D017D92A1B302F004664D2 /* RNIAnimatorSize.swift */, - 88D017DA2A1B302F004664D2 /* RNIAnimator.swift */, - ); - path = RNIAnimator; - sourceTree = ""; - }; - 88D017E12A1B302F004664D2 /* RNIMulticastDelegate */ = { - isa = PBXGroup; - children = ( - 88D017E22A1B302F004664D2 /* CAAnimationMulticastDelegate.swift */, - 88D017E32A1B302F004664D2 /* RNIMulticastDelegate.swift */, - ); - path = RNIMulticastDelegate; - sourceTree = ""; - }; - 88D017E42A1B302F004664D2 /* RNIWeak */ = { - isa = PBXGroup; - children = ( - 88D017E52A1B302F004664D2 /* RNIWeakArray.swift */, - 88D017E62A1B302F004664D2 /* RNIWeakRef.swift */, - 88D017E72A1B302F004664D2 /* RNIWeakDictionary.swift */, - ); - path = RNIWeak; - sourceTree = ""; - }; - 88D017E82A1B302F004664D2 /* RNIObjectMetadata */ = { - isa = PBXGroup; - children = ( - 88D017E92A1B302F004664D2 /* RNIObjectMetadata+Default.swift */, - 88D017EA2A1B302F004664D2 /* RNIObjectMetadata.swift */, - ); - path = RNIObjectMetadata; - sourceTree = ""; - }; - 88D017EE2A1B302F004664D2 /* RNIIdentifiable */ = { - isa = PBXGroup; - children = ( - 88D017EF2A1B302F004664D2 /* RNIIdentifiable+Default.swift */, - 88D017F02A1B302F004664D2 /* RNIObjectIdentifier.swift */, - 88D017F12A1B302F004664D2 /* RNIIdentifiable.swift */, - ); - path = RNIIdentifiable; - sourceTree = ""; - }; - 88D017F92A1B302F004664D2 /* RNIViewControllerLifeCycleNotifiable */ = { - isa = PBXGroup; - children = ( - 88D017FA2A1B302F004664D2 /* RNIViewControllerLifeCycleNotifiable.swift */, - 88D017FB2A1B302F004664D2 /* RNIViewControllerLifeCycleNotifiable */, - 88D017FC2A1B302F004664D2 /* RNIViewControllerLifeCycleNotifiable+Default.swift */, - ); - path = RNIViewControllerLifeCycleNotifiable; - sourceTree = ""; - }; - 88D017FB2A1B302F004664D2 /* RNIViewControllerLifeCycleNotifiable */ = { - isa = PBXGroup; - children = ( - ); - path = RNIViewControllerLifeCycleNotifiable; - sourceTree = ""; - }; - 88D017FD2A1B302F004664D2 /* RNIModal */ = { - isa = PBXGroup; - children = ( - 88D017FF2A1B302F004664D2 /* RNIModalEventData.swift */, - 88D018002A1B302F004664D2 /* RNIModalPresentationTrigger.swift */, - 88D018022A1B302F004664D2 /* RNIModalData.swift */, - 88D018032A1B302F004664D2 /* RNIModalPresentationNotifiable.swift */, - 88D018042A1B302F004664D2 /* RNIModal.swift */, - 88D018082A1B302F004664D2 /* RNIModalFlags.swift */, - 88D018092A1B302F004664D2 /* RNIModalPresentationState.swift */, - 88D0180B2A1B302F004664D2 /* RNIModalCustomSheetDetent.swift */, - 88D0180C2A1B302F004664D2 /* RNIModalFocusState.swift */, - ); - path = RNIModal; - sourceTree = ""; - }; - 88D0180D2A1B302F004664D2 /* RNIComputable */ = { - isa = PBXGroup; - children = ( - 88D0180F2A1B302F004664D2 /* RNIComputableSizeMode.swift */, - 88D018102A1B302F004664D2 /* RNIComputableValue.swift */, - 88D018112A1B302F004664D2 /* RNIComputableSize.swift */, - 88D018122A1B302F004664D2 /* RNIComputableValueMode.swift */, - 88D018132A1B302F004664D2 /* RNIComputableOffset.swift */, - ); - path = RNIComputable; - sourceTree = ""; - }; - 88D018142A1B302F004664D2 /* RNIUtilities */ = { - isa = PBXGroup; - children = ( - ); - path = RNIUtilities; - sourceTree = ""; - }; - 88D018802A1D06EA004664D2 /* AdaptiveModal */ = { - isa = PBXGroup; - children = ( - 88E8C01D2A234B0A008C2FF8 /* UIBezierPath+VariadicCornerRadius.swift */, - 887C3BE12A42F9E00026B57C /* CACornerMask+StaticAlias.swift */, - 88D018812A1D09DD004664D2 /* AdaptiveModalAnimationConfig.swift */, - 88D018852A1D0A1D004664D2 /* AdaptiveModalSnapPoint.swift */, - 88C2F45B2A275B2800DA7450 /* AdaptiveModalSnapPointPreset.swift */, - 88E8C0172A224A8D008C2FF8 /* AdaptiveModalSnapAnimationConfig.swift */, - 88E8C0192A228289008C2FF8 /* AdaptiveModalClampingConfig.swift */, - 88D018872A1D0A36004664D2 /* AdaptiveModalConfig.swift */, - 880492572A23F89000D74E9F /* AdaptiveModalInterpolationPoint.swift */, - 88C2F45D2A278A9200DA7450 /* AdaptiveModalRangePropertyAnimator.swift */, - 88D0188D2A1DCA61004664D2 /* AdaptiveModalManager.swift */, - 884A18F92A3146CA0044AA66 /* AdaptiveModalManager+UIViewControllerTransitioningDelegate.swift */, - 884A18FB2A3146FC0044AA66 /* AdaptiveModalManager+UIViewControllerAnimatedTransitioning.swift */, - 884A18FD2A31472E0044AA66 /* AdaptiveModalPresentationController.swift */, - 88075E262A2121FE00B78388 /* AdaptiveModalUtilities.swift */, - 88C2F4612A2CD81F00DA7450 /* AdaptiveModalEventNotifiable.swift */, - 88C2F4632A2D8D3400DA7450 /* AdaptiveModalKeyframePropertyAnimator.swift */, - ); - path = AdaptiveModal; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 88B7D0EA29C593F400490628 /* swift-programmatic-modal */ = { - isa = PBXNativeTarget; - buildConfigurationList = 88B7D0FF29C593F600490628 /* Build configuration list for PBXNativeTarget "swift-programmatic-modal" */; - buildPhases = ( - 88B7D0E729C593F400490628 /* Sources */, - 88B7D0E829C593F400490628 /* Frameworks */, - 88B7D0E929C593F400490628 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "swift-programmatic-modal"; - productName = "swift-programmatic-modal"; - productReference = 88B7D0EB29C593F400490628 /* swift-programmatic-modal.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 88B7D0E329C593F400490628 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1420; - LastUpgradeCheck = 1420; - TargetAttributes = { - 88B7D0EA29C593F400490628 = { - CreatedOnToolsVersion = 14.2; - }; - }; - }; - buildConfigurationList = 88B7D0E629C593F400490628 /* Build configuration list for PBXProject "swift-programmatic-modal" */; - compatibilityVersion = "Xcode 14.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 88B7D0E229C593F400490628; - productRefGroup = 88B7D0EC29C593F400490628 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 88B7D0EA29C593F400490628 /* swift-programmatic-modal */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 88B7D0E929C593F400490628 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 88B7D0FB29C593F600490628 /* LaunchScreen.storyboard in Resources */, - 88B7D0F829C593F600490628 /* Assets.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 88B7D0E729C593F400490628 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 88D018742A1B3030004664D2 /* RNIModalFocusState.swift in Sources */, - 88D0186A2A1B3030004664D2 /* RNIModalData.swift in Sources */, - 887AA0572A4253050089F517 /* RNILayoutKeyboardValues.swift in Sources */, - 88D0185D2A1B3030004664D2 /* RNIIdentifiable.swift in Sources */, - 88D0169E2A1B0DD3004664D2 /* RNIDraggableTestViewController.swift in Sources */, - 88C2F4642A2D8D3400DA7450 /* AdaptiveModalKeyframePropertyAnimator.swift in Sources */, - 88D018452A1B3030004664D2 /* RNIDictionarySynthesizable.swift in Sources */, - 88D018232A1B3030004664D2 /* RNINavigationEventsReportingViewController.swift in Sources */, - 88D018822A1D09DD004664D2 /* AdaptiveModalAnimationConfig.swift in Sources */, - 88D018342A1B3030004664D2 /* UIModalPresentationStyle+Init.swift in Sources */, - 887C3BE22A42F9E00026B57C /* CACornerMask+StaticAlias.swift in Sources */, - 884A18F82A30516B0044AA66 /* AdaptiveModalPresentationTestViewController.swift in Sources */, - 88D0186B2A1B3030004664D2 /* RNIModalPresentationNotifiable.swift in Sources */, - 886AFCAB2A31FF40004AC9FB /* RNILayoutValue.swift in Sources */, - 88D018552A1B3030004664D2 /* RNIWeakRef.swift in Sources */, - 88D018652A1B3030004664D2 /* RNIViewControllerLifeCycleNotifiable+Default.swift in Sources */, - 88D0168D2A1730B1004664D2 /* RNILayoutTestViewController.swift in Sources */, - 88D018162A1B3030004664D2 /* CGSize+Helpers.swift in Sources */, - 88D018242A1B3030004664D2 /* RNINavigationEventsNotifiable.swift in Sources */, - 88D018372A1B3030004664D2 /* UISheetPresentationController+Init.swift in Sources */, - 88D018572A1B3030004664D2 /* RNIObjectMetadata+Default.swift in Sources */, - 88E8C01A2A228289008C2FF8 /* AdaptiveModalClampingConfig.swift in Sources */, - 88D018522A1B3030004664D2 /* CAAnimationMulticastDelegate.swift in Sources */, - 88D018352A1B3030004664D2 /* UIBlurEffect+Init.swift in Sources */, - 88D0186C2A1B3030004664D2 /* RNIModal.swift in Sources */, - 88D018682A1B3030004664D2 /* RNIModalPresentationTrigger.swift in Sources */, - 880492582A23F89000D74E9F /* AdaptiveModalInterpolationPoint.swift in Sources */, - 88D018282A1B3030004664D2 /* RNICleanable.swift in Sources */, - 88D018462A1B3030004664D2 /* RNIDictionaryRepresentable.swift in Sources */, - 88D018712A1B3030004664D2 /* RNIModalPresentationState.swift in Sources */, - 88D0183A2A1B3030004664D2 /* CAAnimation+Helpers.swift in Sources */, - 88D018582A1B3030004664D2 /* RNIObjectMetadata.swift in Sources */, - 88D0187A2A1B3030004664D2 /* RNIComputableOffset.swift in Sources */, - 886AFCAD2A3209D5004AC9FB /* RNILayoutValueMode.swift in Sources */, - 88D018382A1B3030004664D2 /* UIModalTransitionStyle+Helpers.swift in Sources */, - 88D0184A2A1B3030004664D2 /* RNILayout.swift in Sources */, - 88D018472A1B3030004664D2 /* RNIDictionarySynthesizable+Default.swift in Sources */, - 88D0184B2A1B3030004664D2 /* RNIAnimatorSize.swift in Sources */, - 88D0183B2A1B3030004664D2 /* Collection+Helpers.swift in Sources */, - 88D0188E2A1DCA61004664D2 /* AdaptiveModalManager.swift in Sources */, - 88D018772A1B3030004664D2 /* RNIComputableValue.swift in Sources */, - 884A18FA2A3146CA0044AA66 /* AdaptiveModalManager+UIViewControllerTransitioningDelegate.swift in Sources */, - 88C2F45C2A275B2800DA7450 /* AdaptiveModalSnapPointPreset.swift in Sources */, - 88A2EF742A3A98F6006B5235 /* AdaptiveModalConfigTestPresets.swift in Sources */, - 88E8C01C2A23203E008C2FF8 /* RNILayoutPreset.swift in Sources */, - 88C2F4602A2CA8CF00DA7450 /* RoundedViewTestViewController.swift in Sources */, - 88D018292A1B3030004664D2 /* RNICleanupMode.swift in Sources */, - 88D018532A1B3030004664D2 /* RNIMulticastDelegate.swift in Sources */, - 88D018642A1B3030004664D2 /* RNIViewControllerLifeCycleNotifiable.swift in Sources */, - 88D0185C2A1B3030004664D2 /* RNIObjectIdentifier.swift in Sources */, - 88D016602A14C86B004664D2 /* RootViewController.swift in Sources */, - 88D0183E2A1B3030004664D2 /* CAAnimation+Block.swift in Sources */, - 88D0184C2A1B3030004664D2 /* RNIAnimator.swift in Sources */, - 887C3BE42A43C4FF0026B57C /* RNILayoutMargins.swift in Sources */, - 88D018362A1B3030004664D2 /* CGSize+Init.swift in Sources */, - 886AFCB12A325B6F004AC9FB /* RNILayoutValueContext.swift in Sources */, - 88B7D0EF29C593F400490628 /* AppDelegate.swift in Sources */, - 88D018222A1B3030004664D2 /* UIImage+Init.swift in Sources */, - 88D018702A1B3030004664D2 /* RNIModalFlags.swift in Sources */, - 887C3BE62A43C5460026B57C /* RNILayoutMarginRects.swift in Sources */, - 88E8C01E2A234B0A008C2FF8 /* UIBezierPath+VariadicCornerRadius.swift in Sources */, - 88B7D0F129C593F400490628 /* SceneDelegate.swift in Sources */, - 88D0187E2A1B6CB3004664D2 /* BlurEffectTestViewController.swift in Sources */, - 88D018272A1B3030004664D2 /* RNIInternalCleanupMode.swift in Sources */, - 88D018782A1B3030004664D2 /* RNIComputableSize.swift in Sources */, - 8849B6A72A3F7A7700A5F412 /* RNILayoutValue+StaticAlias.swift in Sources */, - 88D018732A1B3030004664D2 /* RNIModalCustomSheetDetent.swift in Sources */, - 88075E272A2121FE00B78388 /* AdaptiveModalUtilities.swift in Sources */, - 88D018252A1B3030004664D2 /* UIViewController+Helpers.swift in Sources */, - 88D018882A1D0A36004664D2 /* AdaptiveModalConfig.swift in Sources */, - 88D018432A1B3030004664D2 /* UIGestureRecognizer+Helpers.swift in Sources */, - 88D0185B2A1B3030004664D2 /* RNIIdentifiable+Default.swift in Sources */, - 88C2F4622A2CD81F00DA7450 /* AdaptiveModalEventNotifiable.swift in Sources */, - 88D018762A1B3030004664D2 /* RNIComputableSizeMode.swift in Sources */, - 886AFCAF2A320DED004AC9FB /* RNILayoutValuePercentTarget.swift in Sources */, - 88D018262A1B3030004664D2 /* UIColor+Helpers.swift in Sources */, - 88E8C0182A224A8D008C2FF8 /* AdaptiveModalSnapAnimationConfig.swift in Sources */, - 88D018562A1B3030004664D2 /* RNIWeakDictionary.swift in Sources */, - 88203DC12A122AC20088C8E2 /* RNIDynamicModal.swift in Sources */, - 88C2F45E2A278A9200DA7450 /* AdaptiveModalRangePropertyAnimator.swift in Sources */, - 88D018542A1B3030004664D2 /* RNIWeakArray.swift in Sources */, - 88D018792A1B3030004664D2 /* RNIComputableValueMode.swift in Sources */, - 88D018212A1B3030004664D2 /* CAGradientLayerType+Init.swift in Sources */, - 88D0183C2A1B3030004664D2 /* UIWindow+Helpers.swift in Sources */, - 88D018862A1D0A1D004664D2 /* AdaptiveModalSnapPoint.swift in Sources */, - 88D018412A1B3030004664D2 /* KeyWindow+Helpers.swift in Sources */, - 88D018672A1B3030004664D2 /* RNIModalEventData.swift in Sources */, - 88D0183D2A1B3030004664D2 /* UIView+Helpers.swift in Sources */, - 88D018332A1B3030004664D2 /* RNIJSComponentWillUnmountNotifiable.swift in Sources */, - 88D0183F2A1B3030004664D2 /* CGRect+Helpers.swift in Sources */, - 88D018402A1B3030004664D2 /* Encodable+Helpers.swift in Sources */, - 88D018392A1B3030004664D2 /* FloatingPoint+Clamping.swift in Sources */, - 88D018152A1B302F004664D2 /* WeakElement.swift in Sources */, - 884A18FE2A31472E0044AA66 /* AdaptiveModalPresentationController.swift in Sources */, - 884A18FC2A3146FC0044AA66 /* AdaptiveModalManager+UIViewControllerAnimatedTransitioning.swift in Sources */, - 88D0187C2A1B32E6004664D2 /* TestRoutes.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 88B7D0F929C593F600490628 /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 88B7D0FA29C593F600490628 /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 88B7D0FD29C593F600490628 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = 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_DOCUMENTATION_COMMENTS = YES; - 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_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - 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 = 16.2; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 88B7D0FE29C593F600490628 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = 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_DOCUMENTATION_COMMENTS = YES; - 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_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - 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 = 16.2; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 88B7D10029C593F600490628 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = ZC7A6XV8GR; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "swift-programmatic-modal/Info.plist"; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; - INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "dominicgo.swift-programmatic-modal"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; - SUPPORTS_MACCATALYST = NO; - SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 88B7D10129C593F600490628 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = ZC7A6XV8GR; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "swift-programmatic-modal/Info.plist"; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; - INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "dominicgo.swift-programmatic-modal"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; - SUPPORTS_MACCATALYST = NO; - SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 88B7D0E629C593F400490628 /* Build configuration list for PBXProject "swift-programmatic-modal" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 88B7D0FD29C593F600490628 /* Debug */, - 88B7D0FE29C593F600490628 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 88B7D0FF29C593F600490628 /* Build configuration list for PBXNativeTarget "swift-programmatic-modal" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 88B7D10029C593F600490628 /* Debug */, - 88B7D10129C593F600490628 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 88B7D0E329C593F400490628 /* Project object */; -} diff --git a/experiments/swift-programmatic-modal/swift-programmatic-modal/AppDelegate.swift b/experiments/swift-programmatic-modal/swift-programmatic-modal/AppDelegate.swift deleted file mode 100644 index a6faf81f..00000000 --- a/experiments/swift-programmatic-modal/swift-programmatic-modal/AppDelegate.swift +++ /dev/null @@ -1,54 +0,0 @@ -// -// AppDelegate.swift -// swift-programmatic-modal -// -// Created by Dominic Go on 3/18/23. -// - -import UIKit - -@main class AppDelegate: UIResponder, UIApplicationDelegate { - - func application( - _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [ - UIApplication.LaunchOptionsKey: Any - ]? - ) -> Bool { - - // Override point for customization after application launch. - return true - }; - - // MARK: - UISceneSession Lifecycle - // -------------------------------- - - func application( - _ application: UIApplication, - configurationForConnecting connectingSceneSession: UISceneSession, - options: UIScene.ConnectionOptions - ) -> UISceneConfiguration { - - // Called when a new scene session is being created. - // Use this method to select a configuration to create the new scene with. - return UISceneConfiguration( - name: "Default Configuration", - sessionRole: connectingSceneSession.role - ); - }; - - func application( - _ application: UIApplication, - didDiscardSceneSessions sceneSessions: Set - ) { - // Called when the user discards a scene session. - // - // If any sessions were discarded while the application was not running, - // this will be called shortly after - // application:didFinishLaunchingWithOptions. - // - // Use this method to release any resources that were specific to the - // discarded scenes, as they will not return. - }; -}; - diff --git a/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/AccentColor.colorset/Contents.json b/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb878970..00000000 --- a/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/AppIcon.appiconset/Contents.json b/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 13613e3e..00000000 --- a/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/Contents.json b/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/Contents.json deleted file mode 100644 index 73c00596..00000000 --- a/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/DummyBackgroundImage.imageset/Contents.json b/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/DummyBackgroundImage.imageset/Contents.json deleted file mode 100644 index 1bdb1f53..00000000 --- a/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/DummyBackgroundImage.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "iphone.jpg", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/DummyBackgroundImage.imageset/iphone.jpg b/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/DummyBackgroundImage.imageset/iphone.jpg deleted file mode 100644 index 349a3834..00000000 Binary files a/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/DummyBackgroundImage.imageset/iphone.jpg and /dev/null differ diff --git a/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/DummyBackgroundImage2.imageset/Contents.json b/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/DummyBackgroundImage2.imageset/Contents.json deleted file mode 100644 index 8c7bc4af..00000000 --- a/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/DummyBackgroundImage2.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "macos-big-sur-apple-layers-fluidic-colorful-wwdc-stock-4096x2304-1455.jpg", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/DummyBackgroundImage2.imageset/macos-big-sur-apple-layers-fluidic-colorful-wwdc-stock-4096x2304-1455.jpg b/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/DummyBackgroundImage2.imageset/macos-big-sur-apple-layers-fluidic-colorful-wwdc-stock-4096x2304-1455.jpg deleted file mode 100644 index 73d60c55..00000000 Binary files a/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/DummyBackgroundImage2.imageset/macos-big-sur-apple-layers-fluidic-colorful-wwdc-stock-4096x2304-1455.jpg and /dev/null differ diff --git a/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/DummyBackgroundImage3.imageset/Contents.json b/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/DummyBackgroundImage3.imageset/Contents.json deleted file mode 100644 index 0aea5ae1..00000000 --- a/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/DummyBackgroundImage3.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "DummyBackgroundImage3 1.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/DummyBackgroundImage3.imageset/DummyBackgroundImage3 1.png b/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/DummyBackgroundImage3.imageset/DummyBackgroundImage3 1.png deleted file mode 100644 index 9e293afe..00000000 Binary files a/experiments/swift-programmatic-modal/swift-programmatic-modal/Assets.xcassets/DummyBackgroundImage3.imageset/DummyBackgroundImage3 1.png and /dev/null differ diff --git a/experiments/swift-programmatic-modal/swift-programmatic-modal/Base.lproj/LaunchScreen.storyboard b/experiments/swift-programmatic-modal/swift-programmatic-modal/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index 865e9329..00000000 --- a/experiments/swift-programmatic-modal/swift-programmatic-modal/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/experiments/swift-programmatic-modal/swift-programmatic-modal/Info.plist b/experiments/swift-programmatic-modal/swift-programmatic-modal/Info.plist deleted file mode 100644 index 0eb786dc..00000000 --- a/experiments/swift-programmatic-modal/swift-programmatic-modal/Info.plist +++ /dev/null @@ -1,23 +0,0 @@ - - - - - UIApplicationSceneManifest - - UIApplicationSupportsMultipleScenes - - UISceneConfigurations - - UIWindowSceneSessionRoleApplication - - - UISceneConfigurationName - Default Configuration - UISceneDelegateClassName - $(PRODUCT_MODULE_NAME).SceneDelegate - - - - - - diff --git a/experiments/swift-programmatic-modal/swift-programmatic-modal/SceneDelegate.swift b/experiments/swift-programmatic-modal/swift-programmatic-modal/SceneDelegate.swift deleted file mode 100644 index be70e6fe..00000000 --- a/experiments/swift-programmatic-modal/swift-programmatic-modal/SceneDelegate.swift +++ /dev/null @@ -1,195 +0,0 @@ -// -// SceneDelegate.swift -// swift-programmatic-modal -// -// Created by Dominic Go on 3/18/23. -// - -import UIKit - -class Helpers { - - static func getRootViewController( - for window: UIWindow? = nil - ) -> UIViewController? { - - if let window = window { - return window.rootViewController; - }; - - #if swift(>=5.5) - // Version: Swift 5.5 and newer - iOS 15 and newer - let scenes = UIApplication.shared.connectedScenes; - - guard let windowScene = scenes.first as? UIWindowScene, - let window = windowScene.windows.first - else { return nil }; - - return window.rootViewController; - - #elseif swift(>=5) - // Version: Swift 5.4 and below - iOS 14.5 and below - // Note: 'windows' was deprecated in iOS 15.0+ - guard let window = UIApplication.shared.windows.first else { return nil }; - return window.rootViewController; - - #elseif swift(>=4) - // Version: Swift 4 and below - iOS 12.4 and below - // Note: `keyWindow` was deprecated in iOS 13.0+ - guard let window = UIApplication.shared.keyWindow else { return nil }; - return window.rootViewController; - - #else - // Version: Swift 3.1 and below - iOS 10.3 and below - // Note: 'sharedApplication' has been renamed to 'shared' - guard let appDelegate = UIApplication.sharedApplication().delegate as? AppDelegate, - let window = appDelegate.window - else { return nil }; - - return window.rootViewController; - #endif - }; - - static func getPresentedViewControllers() -> [UIViewController] { - guard let rootVC = Self.getRootViewController() else { - #if DEBUG - print( - "Helpers - getTopMostPresentedVC - Error: Could not get root " - + "view controller" - ); - #endif - return []; - }; - - var presentedVCList: [UIViewController] = [rootVC]; - - // climb the vc hierarchy to find the topmost presented vc - while presentedVCList.last!.presentedViewController != nil { - if let presentedVC = presentedVCList.last!.presentedViewController { - presentedVCList.append(presentedVC); - }; - }; - - return presentedVCList; - }; - - static func getTopmostPresentedViewController() -> UIViewController? { - return Self.getPresentedViewControllers().last; - }; -}; - - -class SceneDelegate: UIResponder, UIWindowSceneDelegate { - - var window: UIWindow?; - - func scene( - _ scene: UIScene, - willConnectTo session: UISceneSession, - options connectionOptions: UIScene.ConnectionOptions - ) { - // Use this method to optionally configure and attach the UIWindow `window` - // to the provided UIWindowScene `scene`. - // - // If using a storyboard, the `window` property will automatically be - // initialized and attached to the scene. - // - // This delegate does not imply the connecting scene or session are new - // (see `application:configurationForConnectingSceneSession` instead). - guard let windowScene = (scene as? UIWindowScene) else { return }; - - let window = UIWindow(windowScene: windowScene); - self.window = window; - - let rootVC = TestRoutes.rootRouteKey.viewController; - window.rootViewController = rootVC; - window.makeKeyAndVisible(); - - return; - - var delay = 1.0; - - DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delay){ - let modalVC = UIViewController(); - modalVC.view = { - let view = UIView(); - view.backgroundColor = .blue; - - return view; - }(); - - rootVC.present(modalVC, animated: true); - }; - - delay += 1; - - DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delay){ - guard let topmostVC = Helpers.getTopmostPresentedViewController() - else { return }; - - let modalVC = UIViewController(); - modalVC.view = { - let view = UIView(); - view.backgroundColor = .green; - - return view; - }(); - - // * once a modal has presented a vc - topmostVC.present(modalVC, animated: true); - }; - - delay += 1; - - DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delay){ - let listPresentedVC = Helpers.getPresentedViewControllers(); - - // * 3 modals have been dismissed - // * dismiss the first modal - // * all the modals have been dismissed - listPresentedVC[0].dismiss(animated: true); - }; - }; - - func sceneDidDisconnect(_ scene: UIScene) { - // Called as the scene is being released by the system. - // This occurs shortly after the scene enters the background, or when its - // session is discarded. - // - // Release any resources associated with this scene that can be re-created - // the next time the scene connects. - // - // The scene may re-connect later, as its session was not necessarily - // discarded (see `application:didDiscardSceneSessions` instead). - }; - - func sceneDidBecomeActive(_ scene: UIScene) { - // Called when the scene has moved from an inactive state to an active - // state. - // - // Use this method to restart any tasks that were paused (or not yet - // started) when the scene was inactive. - }; - - func sceneWillResignActive(_ scene: UIScene) { - // Called when the scene will move from an active state to an inactive - // state. - // - // This may occur due to temporary interruptions (ex. an incoming phone - // call). - }; - - func sceneWillEnterForeground(_ scene: UIScene) { - // Called as the scene transitions from the background to the foreground. - // Use this method to undo the changes made on entering the background. - }; - - func sceneDidEnterBackground(_ scene: UIScene) { - // Called as the scene transitions from the foreground to the background. - // - // Use this method to save data, release shared resources, and store enough - // scene-specific state information to restore the scene back to its - // current state. - }; -}; - diff --git a/ios/Extensions+Init/CGSize+Init.swift b/ios/Extensions+Init/CGSize+Init.swift deleted file mode 100644 index 8b5b33b2..00000000 --- a/ios/Extensions+Init/CGSize+Init.swift +++ /dev/null @@ -1,21 +0,0 @@ -// -// CGSize+Init.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/28/23. -// - -import UIKit - -public extension CGSize { - init?(fromDict dict: NSDictionary){ - guard let width = dict["width"] as? NSNumber, - let height = dict["height"] as? NSNumber - else { return nil }; - - self.init( - width: width.doubleValue, - height: height.doubleValue - ); - }; -}; diff --git a/ios/Extensions+Init/UIBlurEffect+Init.swift b/ios/Extensions+Init/UIBlurEffect+Init.swift deleted file mode 100644 index 54f78cb3..00000000 --- a/ios/Extensions+Init/UIBlurEffect+Init.swift +++ /dev/null @@ -1,132 +0,0 @@ -// -// UIBlurEffect+Init.swift -// react-native-ios-modal -// -// Created by Dominic Go on 3/23/23. -// - -import UIKit - -extension UIBlurEffect.Style: CaseIterable, CustomStringConvertible { - - /// The available `UIBlurEffect.Style` that can be used based on the current - /// platform version - /// - public static var availableStyles: [UIBlurEffect.Style] { - var styles: [UIBlurEffect.Style] = [ - .light, - .extraLight, - .dark, - ]; - - if #available(iOS 10.0, *) { - styles.append(contentsOf: [ - .regular, - .prominent, - ]); - }; - - if #available(iOS 13.0, *) { - styles.append(contentsOf: [ - .systemUltraThinMaterial, - .systemThinMaterial, - .systemMaterial, - .systemThickMaterial, - .systemChromeMaterial, - .systemMaterialLight, - .systemThinMaterialLight, - .systemUltraThinMaterialLight, - .systemThickMaterialLight, - .systemChromeMaterialLight, - .systemChromeMaterialDark, - .systemMaterialDark, - .systemThickMaterialDark, - .systemThinMaterialDark, - .systemUltraThinMaterialDark, - ]); - }; - - return styles; - }; - - // MARK: - CaseIterable - // -------------------- - - public static var allCases: [UIBlurEffect.Style] { - return self.availableStyles; - }; - - // MARK: - CustomStringConvertible - // ------------------------------- - - /// Note:2023-03-23-23-14-57 - /// - /// * `UIBlurEffect.Style` is an objc enum, and as such, it's actually raw - /// value internally is `Int`. - /// - /// * As such, `String(describing:)` a ` UIBlurEffect.Style` enum value - /// outputs an `Int`. - /// - /// * Because of this, we have to manually map out the enum values to a string - /// representation. - /// - public var description: String { - switch self { - // Adaptable Styles - case .systemUltraThinMaterial: return "systemUltraThinMaterial"; - case .systemThinMaterial : return "systemThinMaterial"; - case .systemMaterial : return "systemMaterial"; - case .systemThickMaterial : return "systemThickMaterial"; - case .systemChromeMaterial : return "systemChromeMaterial"; - - // Light Styles - case .systemMaterialLight : return "systemMaterialLight"; - case .systemThinMaterialLight : return "systemThinMaterialLight"; - case .systemUltraThinMaterialLight: return "systemUltraThinMaterialLight"; - case .systemThickMaterialLight : return "systemThickMaterialLight"; - case .systemChromeMaterialLight : return "systemChromeMaterialLight"; - - // Dark Styles - case .systemChromeMaterialDark : return "systemChromeMaterialDark"; - case .systemMaterialDark : return "systemMaterialDark"; - case .systemThickMaterialDark : return "systemThickMaterialDark"; - case .systemThinMaterialDark : return "systemThinMaterialDark"; - case .systemUltraThinMaterialDark: return "systemUltraThinMaterialDark"; - - // Additional Styles - case .regular : return "regular"; - case .prominent : return "prominent"; - case .light : return "light"; - case .extraLight: return "extraLight"; - case .dark : return "dark"; - - @unknown default: return ""; - }; - }; - - // MARK: - Init - // ------------ - - init?(string: String){ - - /// Note:2023-03-23-23-21-21 - /// - /// * Normally, a simple `switch` + `case "foo": self = foo` would suffice, - /// (especially since it's O(1) access), but the usable enum values depend - /// on the platform version. - /// - /// * The useable enums are stored in `availableStyles`, and is used to - /// communicate to JS the available enum values. - /// - /// * As such, we might as well re-use `availableStyles` for the parsing - /// logic (even if it's less efficient). - /// - let style = Self.allCases.first{ - $0.description == string - }; - - guard let style = style else { return nil }; - self = style; - }; -}; - diff --git a/ios/Extensions+Init/UIModalPresentationStyle+Init.swift b/ios/Extensions+Init/UIModalPresentationStyle+Init.swift deleted file mode 100644 index d27c1c81..00000000 --- a/ios/Extensions+Init/UIModalPresentationStyle+Init.swift +++ /dev/null @@ -1,81 +0,0 @@ -// -// UIModalPresentationStyle+Init.swift -// react-native-ios-modal -// -// Created by Dominic Go on 3/24/23. -// - -import UIKit - -extension UIModalPresentationStyle: CaseIterable, CustomStringConvertible { - - /// The available `UIModalPresentationStyle` that can be used based on the - /// current platform version - /// - public static var availableStyles: [UIModalPresentationStyle] { - var styles: [UIModalPresentationStyle] = [ - .fullScreen, - .pageSheet, - .formSheet, - .currentContext, - .custom, - .overFullScreen, - .overCurrentContext, - .popover, - ]; - - if #available(iOS 13.0, *) { - styles.append(.automatic); - }; - - #if !os(iOS) - styles.append(.blurOverFullScreen); - #endif - - return styles; - }; - - - public static var allCases: [UIModalPresentationStyle] { - return self.availableStyles; - }; - - // MARK: - CustomStringConvertible - // ------------------------------- - - /// See: Note:2023-03-23-23-14-57 - public var description: String { - switch self { - case .automatic : return "automatic"; - case .none : return "none"; - case .fullScreen : return "fullScreen"; - case .pageSheet : return "pageSheet"; - case .formSheet : return "formSheet"; - case .currentContext : return "currentContext"; - case .custom : return "custom"; - case .overFullScreen : return "overFullScreen"; - case .overCurrentContext: return "overCurrentContext"; - case .popover : return "popover"; - - #if !os(iOS) - case .blurOverFullScreen: return "blurOverFullScreen"; - #endif - - @unknown default: return ""; - }; - }; - - - // MARK: - Init - // ------------ - - init?(string: String){ - /// See: Note:2023-03-23-23-21-21 - let style = Self.allCases.first{ - $0.description == string - }; - - guard let style = style else { return nil }; - self = style; - }; -}; diff --git a/ios/Extensions+Init/UISheetPresentationController+Init.swift b/ios/Extensions+Init/UISheetPresentationController+Init.swift deleted file mode 100644 index a24a3383..00000000 --- a/ios/Extensions+Init/UISheetPresentationController+Init.swift +++ /dev/null @@ -1,67 +0,0 @@ -// -// UISheetPresentationController+Init.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/21/23. -// - -import UIKit - - -@available(iOS 15.0, *) -extension UISheetPresentationController.Detent { - - // 2, - // _identifier=com.apple.UIKit.medium - // > - // - // 1, - // _identifier=com.apple.UIKit.large - // > - - static func fromString( - _ string: String - ) -> UISheetPresentationController.Detent? { - - switch string { - case "medium": return .medium(); - case "large" : return .large(); - - default: return nil; - }; - }; -}; - -@available(iOS 15.0, *) -extension UISheetPresentationController.Detent.Identifier: - CustomStringConvertible { - - public var description: String { - switch self { - case .medium: return "medium"; - case .large : return "large"; - - default: return self.rawValue; - }; - }; - - init?(fromSystemIdentifierString string: String) { - switch string { - case "medium": self = .medium; - case "large" : self = .large; - - default: return nil; - }; - }; - - init(fromString string: String) { - if let systemIdentifier = Self.init(fromSystemIdentifierString: string) { - self = systemIdentifier; - - } else { - self.init(string); - }; - }; -}; diff --git a/ios/Extensions+RNIDictionaryRepresentable/CGPoint+RNIDictionaryRepresentable.swift b/ios/Extensions+RNIDictionaryRepresentable/CGPoint+RNIDictionaryRepresentable.swift deleted file mode 100644 index 9e2cf679..00000000 --- a/ios/Extensions+RNIDictionaryRepresentable/CGPoint+RNIDictionaryRepresentable.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// CGPoint+RNIDictionaryRepresentable.swift -// react-native-ios-modal -// -// Created by Dominic Go on 5/3/23. -// - -import Foundation - -extension CGPoint: RNIDictionaryRepresentable { - public var asDictionary: [String: Any] { - var dict: [String: Any] = [:]; - dict["x"] = self.x; - dict["y"] = self.y; - - return dict; - }; -}; diff --git a/ios/Extensions+RNIDictionaryRepresentable/CGSize+RNIDictionaryRepresentable.swift b/ios/Extensions+RNIDictionaryRepresentable/CGSize+RNIDictionaryRepresentable.swift deleted file mode 100644 index a84a7056..00000000 --- a/ios/Extensions+RNIDictionaryRepresentable/CGSize+RNIDictionaryRepresentable.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// CGSize+RNIDictionaryRepresentable.swift -// react-native-ios-modal -// -// Created by Dominic Go on 5/3/23. -// - -import Foundation - -extension CGSize: RNIDictionaryRepresentable { - public var asDictionary: [String: Any] { - var dict: [String: Any] = [:]; - dict["width"] = self.width; - dict["height"] = self.height; - - return dict; - }; -}; diff --git a/ios/Extensions/CAAnimation+Block.swift b/ios/Extensions/CAAnimation+Block.swift deleted file mode 100644 index 49cfbf2a..00000000 --- a/ios/Extensions/CAAnimation+Block.swift +++ /dev/null @@ -1,61 +0,0 @@ -// -// CAAnimation+Block.swift -// react-native-ios-modal -// -// Created by Dominic Go on 5/1/23. -// - -import UIKit - - -public class CAAnimationBlockDelegate: NSObject, CAAnimationDelegate { - - public typealias StartBlock = (CAAnimation) -> (); - public typealias EndBlock = (CAAnimation, Bool) -> (); - - var onStartBlock: StartBlock? - var onEndBlock: EndBlock? - - public func animationDidStart(_ anim: CAAnimation) { - self.onStartBlock?(anim); - }; - - public func animationDidStop(_ anim: CAAnimation, finished flag: Bool) { - self.onEndBlock?(anim, flag); - }; -}; - -public extension CAAnimation { - - private var multicastDelegate: CAAnimationMulticastDelegate { - guard let delegate = self.delegate else { - return CAAnimationMulticastDelegate(); - }; - - guard let multicastDelegate = delegate as? CAAnimationMulticastDelegate else { - let multicastDelegate = CAAnimationMulticastDelegate(); - multicastDelegate.emitter.add(delegate); - - self.speed = 0; - - self.delegate = multicastDelegate; - return multicastDelegate; - }; - - return multicastDelegate; - }; - - func startBlock(_ callback: @escaping CAAnimationBlockDelegate.StartBlock) { - let blockDelegate = CAAnimationBlockDelegate(); - self.multicastDelegate.emitter.add(blockDelegate); - - blockDelegate.onStartBlock = callback; - }; - - func endBlock(_ callback: @escaping CAAnimationBlockDelegate.EndBlock) { - let blockDelegate = CAAnimationBlockDelegate(); - self.multicastDelegate.emitter.add(blockDelegate); - - blockDelegate.onEndBlock = callback; - }; -}; diff --git a/ios/Extensions/CAAnimation+Helpers.swift b/ios/Extensions/CAAnimation+Helpers.swift deleted file mode 100644 index cc91ee1d..00000000 --- a/ios/Extensions/CAAnimation+Helpers.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// CAAnimation+Helpers.swift -// react-native-ios-modal -// -// Created by Dominic Go on 5/1/23. -// - -import UIKit - -public extension CAAnimation { - func waitUntiEnd(_ block: @escaping () -> Void){ - DispatchQueue.main.asyncAfter( - deadline: .now() + self.duration, - execute: block - ); - }; -}; diff --git a/ios/Extensions/CGRect+Helpers.swift b/ios/Extensions/CGRect+Helpers.swift deleted file mode 100644 index ed067e30..00000000 --- a/ios/Extensions/CGRect+Helpers.swift +++ /dev/null @@ -1,54 +0,0 @@ -// -// CGSize+Helpers.swift -// swift-programmatic-modal -// -// Created by Dominic Go on 5/19/23. -// - -import UIKit - -extension CGRect { - mutating func setPoint( - minX: CGFloat? = nil, - minY: CGFloat? = nil - ){ - self.origin = CGPoint( - x: minX ?? self.minX, - y: minY ?? self.minY - ); - }; - - mutating func setPoint( - midX: CGFloat? = nil, - midY: CGFloat? = nil - ){ - let newX: CGFloat = { - guard let midX = midX else { return self.minX }; - return midX - (self.width / 2); - }(); - - let newY: CGFloat = { - guard let midY = midY else { return self.minY }; - return midY - (self.height / 2); - }(); - - self.origin = CGPoint(x: newX, y: newY); - }; - - mutating func setPoint( - maxX: CGFloat? = nil, - maxY: CGFloat? = nil - ){ - let newX: CGFloat = { - guard let maxX = maxX else { return self.minX }; - return maxX - self.width; - }(); - - let newY: CGFloat = { - guard let maxY = maxY else { return self.minY }; - return maxY - self.height; - }(); - - self.origin = CGPoint(x: newX, y: newY); - }; -}; diff --git a/ios/Extensions/Collection+Helpers.swift b/ios/Extensions/Collection+Helpers.swift deleted file mode 100644 index 177868c2..00000000 --- a/ios/Extensions/Collection+Helpers.swift +++ /dev/null @@ -1,41 +0,0 @@ -// -// Collection+Helpers.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/10/23. -// - -import UIKit - -extension Collection { - - public var secondToLast: Element? { - self[safeIndex: self.index(self.indices.endIndex, offsetBy: -2)]; - }; - - public func isOutOfBounds(forIndex index: Index) -> Bool { - return index < self.indices.startIndex || index >= self.indices.endIndex; - }; - - /// Returns the element at the specified index if it is within bounds, - /// otherwise nil. - public subscript(safeIndex index: Index) -> Element? { - return self.isOutOfBounds(forIndex: index) ? nil : self[index]; - }; -}; - -extension MutableCollection { - subscript(safeIndex index: Index) -> Element? { - get { - return self.isOutOfBounds(forIndex: index) ? nil : self[index]; - } - - set { - guard let newValue = newValue, - !self.isOutOfBounds(forIndex: index) - else { return }; - - self[index] = newValue; - } - }; -}; diff --git a/ios/Extensions/Encodable+Helpers.swift b/ios/Extensions/Encodable+Helpers.swift deleted file mode 100644 index b4490c5a..00000000 --- a/ios/Extensions/Encodable+Helpers.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// Encodable+Helpers.swift -// react-native-ios-modal -// -// Created by Dominic Go on 5/2/23. -// - -import UIKit - - -public extension Encodable { - - var asJsonData: Data? { - let encoder = JSONEncoder(); - encoder.outputFormatting = .prettyPrinted; - encoder.dateEncodingStrategy = .iso8601; - - return try? encoder.encode(self); - }; - - var asDictionary : [String: Any]? { - guard let jsonData = self.asJsonData, - let json = try? JSONSerialization.jsonObject( - with: jsonData, - options: [] - ) - else { return nil }; - - return json as? [String: Any]; - }; -}; diff --git a/ios/Extensions/FloatingPoint+Clamping.swift b/ios/Extensions/FloatingPoint+Clamping.swift deleted file mode 100644 index c685ba9b..00000000 --- a/ios/Extensions/FloatingPoint+Clamping.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// FloatingPoint+Helpers.swift -// swift-programmatic-modal -// -// Created by Dominic Go on 5/19/23. -// - -import UIKit - -extension FloatingPoint { - public func clamped( - min lowerBound: Self? = nil, - max upperBound: Self? = nil - ) -> Self { - var clampedValue = self; - - if let upperBound = upperBound { - clampedValue = min(clampedValue, upperBound); - }; - - if let lowerBound = lowerBound { - clampedValue = max(clampedValue, lowerBound); - }; - - return clampedValue; - }; - - public func clamped(minMax: Self) -> Self { - self.clamped(min: -minMax, max: minMax); - }; -}; diff --git a/ios/Extensions/KeyWindow+Helpers.swift b/ios/Extensions/KeyWindow+Helpers.swift deleted file mode 100644 index 72933909..00000000 --- a/ios/Extensions/KeyWindow+Helpers.swift +++ /dev/null @@ -1,21 +0,0 @@ -// -// KeyWindow+Helpers.swift -// nativeUIModulesTest -// -// Created by Dominic Go on 6/26/20. -// - -import UIKit - -extension UIWindow { - - /// TODO:2023-03-24-01-14-26 - Remove/Replace `UIWindow.key` - static var key: UIWindow? { - if #available(iOS 13, *) { - return UIApplication.shared.windows.first { $0.isKeyWindow }; - - } else { - return UIApplication.shared.keyWindow; - }; - }; -}; diff --git a/ios/Extensions/RNIUtilities+Helpers.swift b/ios/Extensions/RNIUtilities+Helpers.swift deleted file mode 100644 index 1fb0f17a..00000000 --- a/ios/Extensions/RNIUtilities+Helpers.swift +++ /dev/null @@ -1,158 +0,0 @@ -// -// RNIUtilities+Helpers.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/27/23. -// - -import UIKit - -/// TODO:2023-03-20-21-29-36 - Move to `RNIUtilities` -extension RNIUtilities { - - static func swizzleExchangeMethods( - defaultSelector: Selector, - newSelector: Selector, - forClass class: AnyClass - ) { - let defaultInstace = - class_getInstanceMethod(`class`.self, defaultSelector); - - let newInstance = - class_getInstanceMethod(`class`.self, newSelector); - - guard let defaultInstance = defaultInstace, - let newInstance = newInstance - else { return }; - - method_exchangeImplementations(defaultInstance, newInstance); - }; - - static func getFirstMatchingView( - forNativeID targetNativeID: String, - startingView rootView: UIView - ) -> UIView? { - - for view in rootView.subviews { - if let viewNativeID = view.nativeID, - viewNativeID == targetNativeID { - - return view; - }; - - let matchingView = Self.getFirstMatchingView( - forNativeID: targetNativeID, - startingView: view - ); - - guard let matchingView = matchingView else { continue }; - return matchingView; - }; - - return nil; - }; - - public static func getWindows() -> [UIWindow] { - var windows: [UIWindow] = []; - - #if swift(>=5.5) - // Version: Swift 5.5 and newer - iOS 15 and newer - guard #available(iOS 13.0, *) else { return [] }; - - for scene in UIApplication.shared.connectedScenes { - guard let windowScene = scene as? UIWindowScene else { continue }; - windows += windowScene.windows; - }; - - #elseif swift(>=5) - // Version: Swift 5.4 and below - iOS 14.5 and below - // Note: 'windows' was deprecated in iOS 15.0+ - - // first element is the "key window" - if let keyWindow = - UIApplication.shared.windows.first(where: { $0.isKeyWindow }) { - - windows.append(keyWindow); - }; - - UIApplication.shared.windows.forEach { - // skip if already added - guard !windows.contains($0) else { return }; - windows.append($0); - }; - - #elseif swift(>=4) - // Version: Swift 4 and below - iOS 12.4 and below - // Note: `keyWindow` was deprecated in iOS 13.0+ - - // first element is the "key window" - if let keyWindow = UIApplication.shared.keyWindow { - windows.append(keyWindow); - }; - - UIApplication.shared.windows.forEach { - // skip if already added - guard !windows.contains($0) else { return }; - windows.append($0); - }; - - #else - // Version: Swift 3.1 and below - iOS 10.3 and below - // Note: 'sharedApplication' has been renamed to 'shared' - guard let appDelegate = - UIApplication.sharedApplication().delegate as? AppDelegate, - - let window = appDelegate.window - else { return [] }; - - return windows.append(window); - #endif - - return windows; - }; - - public static func getRootViewController( - for window: UIWindow? = nil - ) -> UIViewController? { - - if let window = window { - return window.rootViewController; - }; - - return Self.getWindows().first?.rootViewController; - }; - - public static func getPresentedViewControllers( - for window: UIWindow? = nil - ) -> [UIViewController] { - guard let rootVC = Self.getRootViewController(for: window) else { - #if DEBUG - print( - "Error - RNIModalManager.getTopMostPresentedVC" - + " - arg window isNil: '\(window == nil)'" - + " - Could not get root view controller" - ); - #endif - return []; - }; - - var presentedVCList: [UIViewController] = [rootVC]; - - // climb the vc hierarchy to find the topmost presented vc - while true { - guard let topVC = presentedVCList.last, - let presentedVC = topVC.presentedViewController - else { break }; - - presentedVCList.append(presentedVC); - }; - - return presentedVCList; - }; - - public static func getTopmostPresentedViewController( - for window: UIWindow? = nil - ) -> UIViewController? { - return Self.getPresentedViewControllers(for: window).last; - }; -}; diff --git a/ios/Extensions/UIGestureRecognizer+Helpers.swift b/ios/Extensions/UIGestureRecognizer+Helpers.swift deleted file mode 100644 index 2615c673..00000000 --- a/ios/Extensions/UIGestureRecognizer+Helpers.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// UIGestureRecognizer+Helpers.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/22/23. -// - -import UIKit - -extension UIGestureRecognizer.State: CustomStringConvertible { - public var description: String { - switch self { - case .possible : return "possible"; - case .began : return "began"; - case .changed : return "changed"; - case .ended : return "ended"; - case .cancelled: return "cancelled"; - case .failed : return "failed"; - - @unknown default: return ""; - }; - }; -}; diff --git a/ios/Extensions/UIModalTransitionStyle+Helpers.swift b/ios/Extensions/UIModalTransitionStyle+Helpers.swift deleted file mode 100644 index 9799d40d..00000000 --- a/ios/Extensions/UIModalTransitionStyle+Helpers.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// UIModalTransitionStyle+Helpers.swift -// nativeUIModulesTest -// -// Created by Dominic Go on 6/29/20. -// - -import UIKit - -extension UIModalTransitionStyle: CaseIterable { - public static var allCases: [UIModalTransitionStyle] { - return [ - .coverVertical, - .crossDissolve, - .flipHorizontal, - .partialCurl, - ]; - }; - - public func stringDescription() -> String { - switch self { - case .coverVertical : return "coverVertical"; - case .flipHorizontal: return "flipHorizontal"; - case .crossDissolve : return "crossDissolve"; - case .partialCurl : return "partialCurl"; - - @unknown default: return ""; - }; - }; - - public static func fromString(_ string: String) -> UIModalTransitionStyle? { - return self.allCases.first{ $0.stringDescription() == string }; - }; -}; diff --git a/ios/Extensions/UIView+Helpers.swift b/ios/Extensions/UIView+Helpers.swift deleted file mode 100644 index 139cb5e2..00000000 --- a/ios/Extensions/UIView+Helpers.swift +++ /dev/null @@ -1,60 +0,0 @@ -import UIKit - -/// TODO:2023-03-24-01-14-26 - Move `UIView+Helpers` extension to -/// `react-native-utilities` -/// -extension UIView { - public var parentViewController: UIViewController? { - var parentResponder: UIResponder? = self; - - while parentResponder != nil { - parentResponder = parentResponder!.next - if let viewController = parentResponder as? UIViewController { - return viewController; - }; - }; - - return nil; - }; - - /// Remove all ancestor constraints that are affecting this view instance - /// - /// Note: 2023-03-24-00-39-51 - /// - /// * From: https://stackoverflow.com/questions/24418884/remove-all-constraints-affecting-a-uiview - /// - /// * After it's done executing, your view remains where it was because it - /// creates autoresizing constraints. - /// - /// * When I don't do this the view usually disappears. - /// - /// * Additionally, it doesn't just remove constraints from it's superview, - /// but in addition, it also climbs the view hierarchy, and removes all the - /// constraints affecting the current view instance that came from an - /// ancestor view. - /// - public func removeAllAncestorConstraints() { - var ancestorView = self.superview; - - // Climb the view hierarchy until there are no more parent views... - while ancestorView != nil { - for ancestorConstraint in ancestorView!.constraints { - - let constraintItems = [ - ancestorConstraint.firstItem, - ancestorConstraint.secondItem - ]; - - constraintItems.forEach { - guard ($0 as? UIView) === self else { return }; - ancestorView?.removeConstraint(ancestorConstraint); - }; - - ancestorView = ancestorView?.superview; - }; - }; - - self.removeConstraints(self.constraints); - self.translatesAutoresizingMaskIntoConstraints = true - }; -}; diff --git a/ios/Extensions/UIViewController+Swizzling.swift b/ios/Extensions/UIViewController+Swizzling.swift deleted file mode 100644 index 22457f33..00000000 --- a/ios/Extensions/UIViewController+Swizzling.swift +++ /dev/null @@ -1,235 +0,0 @@ -// -// RNIModalSwizzledViewController.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/11/23. -// - -import UIKit - -extension UIViewController { - - // MARK: - Static - Swizzling-Related - // ---------------------------------- - - static var isSwizzled = false; - - internal static func swizzleMethods() { - guard RNIModalFlagsShared.shouldSwizzleViewControllers else { return }; - - #if DEBUG - print( - "Log - UIViewController+Swizzling" - + " - UIViewController.swizzleMethods invoked" - ); - #endif - - RNIUtilities.swizzleExchangeMethods( - defaultSelector: #selector(Self.present(_:animated:completion:)), - newSelector: #selector(Self._swizzled_present(_:animated:completion:)), - forClass: UIViewController.self - ); - - RNIUtilities.swizzleExchangeMethods( - defaultSelector: #selector(Self.dismiss(animated:completion:)), - newSelector: #selector(Self._swizzled_dismiss(animated:completion:)), - forClass: UIViewController.self - ); - - self.isSwizzled.toggle(); - }; - - // MARK: - Helpers - Static - // ------------------------ - - @discardableResult - static private func registerIfNeeded( - forViewController vc: UIViewController - ) -> RNIModalViewControllerWrapper? { - - let shouldWrapVC = vc is RNIModalViewController - ? RNIModalFlagsShared.shouldWrapAllViewControllers - : true; - - /// If the arg `vc` is a `RNIModalViewController` instance, then we don't - /// need to wrap the current instance inside a - /// `RNIModalViewControllerWrapper` since it will already notify - /// `RNIModalManager` of modal-related events... - /// - guard shouldWrapVC else { return nil }; - - let modalWrapper: RNIModalViewControllerWrapper = { - /// A - Wrapper already exists for arg `vc`, so return the matching - /// wrapper instance. - /// - if let modalWrapper = RNIModalViewControllerWrapperRegistry.get( - forViewController: vc - ) { - return modalWrapper; - }; - - /// B - Wrapper does not exists for arg `vc`, so create a new wrapper - /// instance. - /// - let newModalWrapper = RNIModalViewControllerWrapper(viewController: vc); - - RNIModalViewControllerWrapperRegistry.set( - forViewController: vc, - newModalWrapper - ); - return newModalWrapper; - }(); - - return modalWrapper; - }; - - // MARK: - Helpers - Computed Properties - // ------------------------------------- - - /// Get the associated `RNIModalViewControllerWrapper` instance for the - /// current view controller - /// - var modalWrapper: RNIModalViewControllerWrapper? { - RNIModalViewControllerWrapperRegistry.get(forViewController: self); - }; - - // MARK: - Helpers - Functions - // --------------------------- - - private func getPresentedModalToNotify( - _ presentedVC: UIViewController? = nil - ) -> (any RNIModal)? { - - let presentedModal = RNIModalUtilities.getPresentedModal( - forPresentingViewController: self, - presentedViewController: presentedVC - ); - - return RNIModalFlagsShared.shouldSwizzledViewControllerNotifyAll - ? presentedModal - : presentedModal as? RNIModalViewControllerWrapper; - }; - - private func registerOrInitialize( - _ viewControllerToPresent: UIViewController - ){ - let presentingWrapper = Self.registerIfNeeded(forViewController: self); - - presentingWrapper?.modalViewController = viewControllerToPresent; - presentingWrapper?.presentingViewController = self; - - let presentedWrapper = - Self.registerIfNeeded(forViewController: viewControllerToPresent); - - presentedWrapper?.presentingViewController = self; - }; - - - private func notifyOnModalWillDismiss() -> (() -> Void)? { - guard let presentedModal = self.getPresentedModalToNotify() - else { return nil }; - - presentedModal.notifyWillDismiss(); - - return { - if presentedModal.computedIsModalInFocus { - presentedModal.notifyDidPresent(); - - } else { - presentedModal.notifyDidDismiss(); - }; - }; - }; - - // MARK: - Swizzled Functions - // -------------------------- - - @objc fileprivate func _swizzled_present( - _ viewControllerToPresent: UIViewController, - animated flag: Bool, - completion: (() -> Void)? = nil - ) { - #if DEBUG - print( - "Log - UIViewController+Swizzling" - + " - UIViewController._swizzled_present invoked" - + " - arg viewControllerToPresent: \(viewControllerToPresent)" - + " - arg animated: \(flag)" - ); - #endif - - self.registerOrInitialize(viewControllerToPresent); - - let presentedModal = self.getPresentedModalToNotify(viewControllerToPresent); - presentedModal?.notifyWillPresent(); - - // call original impl. - self._swizzled_present(viewControllerToPresent, animated: flag) { - #if DEBUG - print( - "Log - UIViewController+Swizzling" - + " - UIViewController._swizzled_present" - + " - completion invoked" - ); - #endif - - presentedModal?.notifyDidPresent(); - completion?(); - }; - }; - - @objc fileprivate func _swizzled_dismiss( - animated flag: Bool, - completion: (() -> Void)? = nil - ) { - #if DEBUG - print( - "Log - UIViewController+Swizzling" - + " - UIViewController._swizzled_dismiss invoked" - + " - arg animated: \(flag)" - + " - self.presentedViewController: \(String(describing: presentedViewController))" - ); - #endif - - let notifyOnModalDidDismiss = self.notifyOnModalWillDismiss(); - - // call original impl. - self._swizzled_dismiss(animated: flag) { - #if DEBUG - print( - "Log - UIViewController+Swizzling" - + " - UIViewController._swizzled_dismiss" - + " - completion invoked" - ); - #endif - - notifyOnModalDidDismiss?(); - completion?(); - }; - }; -}; - -// MARK: - Extensions - Helpers -// ---------------------------- - -fileprivate extension RNIModalPresentationNotifying where Self: RNIModal { - func notifyWillPresent() { - guard let delegate = modalPresentationNotificationDelegate else { return }; - delegate.notifyOnModalWillShow(sender: self); - }; - - func notifyDidPresent(){ - guard let delegate = modalPresentationNotificationDelegate else { return }; - delegate.notifyOnModalDidShow(sender: self); - }; - - func notifyWillDismiss(){ - guard let delegate = modalPresentationNotificationDelegate else { return }; - delegate.notifyOnModalWillHide(sender: self); - }; - - func notifyDidDismiss(){ - guard let delegate = modalPresentationNotificationDelegate else { return }; - delegate.notifyOnModalDidHide(sender: self); - }; -}; diff --git a/ios/Extensions/UIWindow+Helpers.swift b/ios/Extensions/UIWindow+Helpers.swift deleted file mode 100644 index fa261a7f..00000000 --- a/ios/Extensions/UIWindow+Helpers.swift +++ /dev/null @@ -1,12 +0,0 @@ -// -// UIWindow+WindowMetadata.swift -// react-native-ios-modal -// -// Created by Dominic Go on 3/30/23. -// - -import UIKit - -extension UIWindow: RNIObjectMetadata, RNIIdentifiable { - public static var synthesizedIdPrefix = "window-id-"; -}; diff --git a/ios/Helpers+Utilities/CGSize+Helpers.swift b/ios/Helpers+Utilities/CGSize+Helpers.swift deleted file mode 100644 index 389a0c4d..00000000 --- a/ios/Helpers+Utilities/CGSize+Helpers.swift +++ /dev/null @@ -1,14 +0,0 @@ -// -// CGSize+Helpers.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/29/23. -// - -import UIKit - -public extension CGSize { - var isZero: Bool { - self == .zero || (self.width == 0 && self.height == 0); - }; -}; diff --git a/ios/Helpers+Utilities/WeakElement.swift b/ios/Helpers+Utilities/WeakElement.swift deleted file mode 100644 index d480d4f6..00000000 --- a/ios/Helpers+Utilities/WeakElement.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// WeakElement.swift -// RNSwiftReviewer -// -// Created by Dominic Go on 8/15/20. -// - -import UIKit - - -public class WeakElement { - private(set) weak var value: Element?; -}; diff --git a/ios/IosModal-Bridging-Header.h b/ios/IosModal-Bridging-Header.h deleted file mode 100644 index 17321af1..00000000 --- a/ios/IosModal-Bridging-Header.h +++ /dev/null @@ -1,35 +0,0 @@ - - -// #if DEBUG -// #import -// #endif -// -// #import -#import "React/RCTEventEmitter.h" -// -// #import -// #import -// -// #import -// #import - - -/// `TODO:2023-03-28-18-58-47` - Remove `/Temp` file and update usage. - -#if DEBUG -#import -#endif - -#import -#import - -#import -#import - -#import -#import - -#import -#import -#import - diff --git a/ios/IosModal.xcodeproj/project.pbxproj b/ios/IosModal.xcodeproj/project.pbxproj deleted file mode 100644 index 8205f86f..00000000 --- a/ios/IosModal.xcodeproj/project.pbxproj +++ /dev/null @@ -1,393 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 889C760829151A4D00EA68E6 /* WeakElement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 889C75F129151A4D00EA68E6 /* WeakElement.swift */; }; - 889C760929151A4D00EA68E6 /* MulticastDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 889C75F229151A4D00EA68E6 /* MulticastDelegate.swift */; }; - 889C760A29151A4D00EA68E6 /* UIModalTransitionStyle+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 889C75F529151A4D00EA68E6 /* UIModalTransitionStyle+Helpers.swift */; }; - 889C760B29151A4D00EA68E6 /* UIBlurEffect+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 889C75F629151A4D00EA68E6 /* UIBlurEffect+Helpers.swift */; }; - 889C760C29151A4D00EA68E6 /* UIView+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 889C75F729151A4D00EA68E6 /* UIView+Helpers.swift */; }; - 889C760D29151A4D00EA68E6 /* UIModalPresentationStyle+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 889C75F829151A4D00EA68E6 /* UIModalPresentationStyle+Helpers.swift */; }; - 889C760E29151A4D00EA68E6 /* KeyWindow+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 889C75F929151A4D00EA68E6 /* KeyWindow+Helpers.swift */; }; - 889C760F29151A4D00EA68E6 /* RCTSwiftLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 889C75FC29151A4D00EA68E6 /* RCTSwiftLog.m */; }; - 889C761029151A4D00EA68E6 /* RCTLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 889C75FD29151A4D00EA68E6 /* RCTLog.swift */; }; - 889C761129151A4D00EA68E6 /* RCTModalViewModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 889C760029151A4D00EA68E6 /* RCTModalViewModule.swift */; }; - 889C761229151A4D00EA68E6 /* RCTModalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 889C760129151A4D00EA68E6 /* RCTModalView.swift */; }; - 889C761329151A4D00EA68E6 /* RCTModalViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 889C760229151A4D00EA68E6 /* RCTModalViewDelegate.swift */; }; - 889C761429151A4D00EA68E6 /* RCTModalViewManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 889C760329151A4D00EA68E6 /* RCTModalViewManager.swift */; }; - 889C761529151A4D00EA68E6 /* RCTModalViewModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 889C760429151A4D00EA68E6 /* RCTModalViewModule.m */; }; - 889C761629151A4D00EA68E6 /* RCTModalViewError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 889C760529151A4D00EA68E6 /* RCTModalViewError.swift */; }; - 889C761729151A4D00EA68E6 /* RCTModalViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 889C760629151A4D00EA68E6 /* RCTModalViewController.swift */; }; - 889C761829151A4D00EA68E6 /* RCTModalViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 889C760729151A4D00EA68E6 /* RCTModalViewManager.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 58B511D91A9E6C8500147676 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "include/$(PRODUCT_NAME)"; - dstSubfolderSpec = 16; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 134814201AA4EA6300B7C361 /* libIosModal.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libIosModal.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 889C75F129151A4D00EA68E6 /* WeakElement.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WeakElement.swift; sourceTree = ""; }; - 889C75F229151A4D00EA68E6 /* MulticastDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MulticastDelegate.swift; sourceTree = ""; }; - 889C75F329151A4D00EA68E6 /* IosModal-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "IosModal-Bridging-Header.h"; sourceTree = ""; }; - 889C75F529151A4D00EA68E6 /* UIModalTransitionStyle+Helpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIModalTransitionStyle+Helpers.swift"; sourceTree = ""; }; - 889C75F629151A4D00EA68E6 /* UIBlurEffect+Helpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIBlurEffect+Helpers.swift"; sourceTree = ""; }; - 889C75F729151A4D00EA68E6 /* UIView+Helpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIView+Helpers.swift"; sourceTree = ""; }; - 889C75F829151A4D00EA68E6 /* UIModalPresentationStyle+Helpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIModalPresentationStyle+Helpers.swift"; sourceTree = ""; }; - 889C75F929151A4D00EA68E6 /* KeyWindow+Helpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "KeyWindow+Helpers.swift"; sourceTree = ""; }; - 889C75FC29151A4D00EA68E6 /* RCTSwiftLog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTSwiftLog.m; sourceTree = ""; }; - 889C75FD29151A4D00EA68E6 /* RCTLog.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RCTLog.swift; sourceTree = ""; }; - 889C75FE29151A4D00EA68E6 /* RCTSwiftLog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTSwiftLog.h; sourceTree = ""; }; - 889C760029151A4D00EA68E6 /* RCTModalViewModule.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RCTModalViewModule.swift; sourceTree = ""; }; - 889C760129151A4D00EA68E6 /* RCTModalView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RCTModalView.swift; sourceTree = ""; }; - 889C760229151A4D00EA68E6 /* RCTModalViewDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RCTModalViewDelegate.swift; sourceTree = ""; }; - 889C760329151A4D00EA68E6 /* RCTModalViewManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RCTModalViewManager.swift; sourceTree = ""; }; - 889C760429151A4D00EA68E6 /* RCTModalViewModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTModalViewModule.m; sourceTree = ""; }; - 889C760529151A4D00EA68E6 /* RCTModalViewError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RCTModalViewError.swift; sourceTree = ""; }; - 889C760629151A4D00EA68E6 /* RCTModalViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RCTModalViewController.swift; sourceTree = ""; }; - 889C760729151A4D00EA68E6 /* RCTModalViewManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTModalViewManager.m; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 58B511D81A9E6C8500147676 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 134814211AA4EA7D00B7C361 /* Products */ = { - isa = PBXGroup; - children = ( - 134814201AA4EA6300B7C361 /* libIosModal.a */, - ); - name = Products; - sourceTree = ""; - }; - 58B511D21A9E6C8500147676 = { - isa = PBXGroup; - children = ( - 889C75EF29151A4D00EA68E6 /* src_library */, - 134814211AA4EA7D00B7C361 /* Products */, - ); - sourceTree = ""; - }; - 889C75EF29151A4D00EA68E6 /* src_library */ = { - isa = PBXGroup; - children = ( - 889C75F029151A4D00EA68E6 /* Helpers+Utilities */, - 889C75F329151A4D00EA68E6 /* IosModal-Bridging-Header.h */, - 889C75F429151A4D00EA68E6 /* Extensions */, - 889C75FA29151A4D00EA68E6 /* React Native */, - ); - path = src_library; - sourceTree = ""; - }; - 889C75F029151A4D00EA68E6 /* Helpers+Utilities */ = { - isa = PBXGroup; - children = ( - 889C75F129151A4D00EA68E6 /* WeakElement.swift */, - 889C75F229151A4D00EA68E6 /* MulticastDelegate.swift */, - ); - path = "Helpers+Utilities"; - sourceTree = ""; - }; - 889C75F429151A4D00EA68E6 /* Extensions */ = { - isa = PBXGroup; - children = ( - 889C75F529151A4D00EA68E6 /* UIModalTransitionStyle+Helpers.swift */, - 889C75F629151A4D00EA68E6 /* UIBlurEffect+Helpers.swift */, - 889C75F729151A4D00EA68E6 /* UIView+Helpers.swift */, - 889C75F829151A4D00EA68E6 /* UIModalPresentationStyle+Helpers.swift */, - 889C75F929151A4D00EA68E6 /* KeyWindow+Helpers.swift */, - ); - path = Extensions; - sourceTree = ""; - }; - 889C75FA29151A4D00EA68E6 /* React Native */ = { - isa = PBXGroup; - children = ( - 889C75FB29151A4D00EA68E6 /* RCTSwiftLog */, - 889C75FF29151A4D00EA68E6 /* RCTModalView */, - ); - path = "React Native"; - sourceTree = ""; - }; - 889C75FB29151A4D00EA68E6 /* RCTSwiftLog */ = { - isa = PBXGroup; - children = ( - 889C75FC29151A4D00EA68E6 /* RCTSwiftLog.m */, - 889C75FD29151A4D00EA68E6 /* RCTLog.swift */, - 889C75FE29151A4D00EA68E6 /* RCTSwiftLog.h */, - ); - path = RCTSwiftLog; - sourceTree = ""; - }; - 889C75FF29151A4D00EA68E6 /* RCTModalView */ = { - isa = PBXGroup; - children = ( - 889C760029151A4D00EA68E6 /* RCTModalViewModule.swift */, - 889C760129151A4D00EA68E6 /* RCTModalView.swift */, - 889C760229151A4D00EA68E6 /* RCTModalViewDelegate.swift */, - 889C760329151A4D00EA68E6 /* RCTModalViewManager.swift */, - 889C760429151A4D00EA68E6 /* RCTModalViewModule.m */, - 889C760529151A4D00EA68E6 /* RCTModalViewError.swift */, - 889C760629151A4D00EA68E6 /* RCTModalViewController.swift */, - 889C760729151A4D00EA68E6 /* RCTModalViewManager.m */, - ); - path = RCTModalView; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 58B511DA1A9E6C8500147676 /* IosModal */ = { - isa = PBXNativeTarget; - buildConfigurationList = 58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget "IosModal" */; - buildPhases = ( - 58B511D71A9E6C8500147676 /* Sources */, - 58B511D81A9E6C8500147676 /* Frameworks */, - 58B511D91A9E6C8500147676 /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = IosModal; - productName = RCTDataManager; - productReference = 134814201AA4EA6300B7C361 /* libIosModal.a */; - productType = "com.apple.product-type.library.static"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 58B511D31A9E6C8500147676 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0920; - ORGANIZATIONNAME = Facebook; - TargetAttributes = { - 58B511DA1A9E6C8500147676 = { - CreatedOnToolsVersion = 6.1.1; - }; - }; - }; - buildConfigurationList = 58B511D61A9E6C8500147676 /* Build configuration list for PBXProject "IosModal" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - English, - en, - ); - mainGroup = 58B511D21A9E6C8500147676; - productRefGroup = 58B511D21A9E6C8500147676; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 58B511DA1A9E6C8500147676 /* IosModal */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXSourcesBuildPhase section */ - 58B511D71A9E6C8500147676 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 889C760F29151A4D00EA68E6 /* RCTSwiftLog.m in Sources */, - 889C761429151A4D00EA68E6 /* RCTModalViewManager.swift in Sources */, - 889C760C29151A4D00EA68E6 /* UIView+Helpers.swift in Sources */, - 889C761829151A4D00EA68E6 /* RCTModalViewManager.m in Sources */, - 889C761229151A4D00EA68E6 /* RCTModalView.swift in Sources */, - 889C761129151A4D00EA68E6 /* RCTModalViewModule.swift in Sources */, - 889C760D29151A4D00EA68E6 /* UIModalPresentationStyle+Helpers.swift in Sources */, - 889C760A29151A4D00EA68E6 /* UIModalTransitionStyle+Helpers.swift in Sources */, - 889C761029151A4D00EA68E6 /* RCTLog.swift in Sources */, - 889C760E29151A4D00EA68E6 /* KeyWindow+Helpers.swift in Sources */, - 889C760829151A4D00EA68E6 /* WeakElement.swift in Sources */, - 889C761329151A4D00EA68E6 /* RCTModalViewDelegate.swift in Sources */, - 889C760929151A4D00EA68E6 /* MulticastDelegate.swift in Sources */, - 889C761729151A4D00EA68E6 /* RCTModalViewController.swift in Sources */, - 889C761629151A4D00EA68E6 /* RCTModalViewError.swift in Sources */, - 889C761529151A4D00EA68E6 /* RCTModalViewModule.m in Sources */, - 889C760B29151A4D00EA68E6 /* UIBlurEffect+Helpers.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 58B511ED1A9E6C8500147676 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - 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_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_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - 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; - COPY_PHASE_STRIP = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - "EXCLUDED_ARCHS[sdk=*]" = arm64; - 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 = 8.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - }; - name = Debug; - }; - 58B511EE1A9E6C8500147676 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - 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_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_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - 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; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - "EXCLUDED_ARCHS[sdk=*]" = arm64; - 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 = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 58B511F01A9E6C8500147676 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - HEADER_SEARCH_PATHS = ( - "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, - "$(SRCROOT)/../../../React/**", - "$(SRCROOT)/../../react-native/React/**", - ); - LIBRARY_SEARCH_PATHS = "$(inherited)"; - OTHER_LDFLAGS = "-ObjC"; - PRODUCT_NAME = IosModal; - SKIP_INSTALL = YES; - SWIFT_OBJC_BRIDGING_HEADER = "src_library/IosModal-Bridging-Header.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 58B511F11A9E6C8500147676 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - HEADER_SEARCH_PATHS = ( - "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, - "$(SRCROOT)/../../../React/**", - "$(SRCROOT)/../../react-native/React/**", - ); - LIBRARY_SEARCH_PATHS = "$(inherited)"; - OTHER_LDFLAGS = "-ObjC"; - PRODUCT_NAME = IosModal; - SKIP_INSTALL = YES; - SWIFT_OBJC_BRIDGING_HEADER = "src_library/IosModal-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 58B511D61A9E6C8500147676 /* Build configuration list for PBXProject "IosModal" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 58B511ED1A9E6C8500147676 /* Debug */, - 58B511EE1A9E6C8500147676 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget "IosModal" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 58B511F01A9E6C8500147676 /* Debug */, - 58B511F11A9E6C8500147676 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 58B511D31A9E6C8500147676 /* Project object */; -} diff --git a/ios/React Native/RNIAnimator/RNIAnimator.swift b/ios/React Native/RNIAnimator/RNIAnimator.swift deleted file mode 100644 index 599b8a93..00000000 --- a/ios/React Native/RNIAnimator/RNIAnimator.swift +++ /dev/null @@ -1,243 +0,0 @@ -// -// RNIAnimator.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/19/23. -// - -import UIKit - - -public class RNIAnimator { - - // MARK: - Embedded Types - // ---------------------- - - typealias EasingFunction = (_ timing: CGFloat) -> CGFloat; - - public class EasingFunctions { - - static func lerp( - valueStart: CGFloat, - valueEnd: CGFloat, - percent: CGFloat - ) -> CGFloat { - let valueDelta = valueEnd - valueStart; - let valueProgress = valueDelta * percent - return valueStart + valueProgress; - }; - - static func linear(_ time: CGFloat) -> CGFloat { - return time; - }; - - static func easeIn(_ time: CGFloat) -> CGFloat { - return time * time; - }; - }; - - public enum Easing: String { - case linear; - case easeIn; - - var easingFunction: EasingFunction { - switch self { - case .linear: return EasingFunctions.linear; - case .easeIn: return EasingFunctions.easeIn; - }; - }; - }; - - // MARK: - Properties - // ------------------ - - private var displayLink: CADisplayLink?; - - public var easing: Easing = .linear; - - private(set) public var timeStart: CFTimeInterval = 0; - private(set) public var timeEnd: CFTimeInterval = 0; - - private(set) public var timeCurrent: CFTimeInterval = 0; - private(set) public var timeElapsed: CFTimeInterval = 0; - - private(set) public var progress: CGFloat = 0; - private(set) public var duration: CFTimeInterval; - - public let animatedValuesSize: Int; - - private(set) public var animatedValuesStart: [CGFloat]; - private(set) public var animatedValuesEnd: [CGFloat]; - - private(set) public var animatedValuesPrev: [CGFloat] = []; - private(set) public var animatedValuesCurrent: [CGFloat] = []; - - public var allowAnimatedValueToRegress = true; - - // MARK: - Properties - Stored Functions - // ------------------------------------- - - private var applyPendingUpdates: (() -> Void)? = nil; - - public var onAnimatedValueChange: ((_ animatedValues: [CGFloat]) -> Void)?; - public var onAnimationCompletion: (() -> Void)?; - - // MARK: - Properties - Computed - // ----------------------------- - - public var isFinished: Bool { - self.animatedValuesCurrent.enumerated().allSatisfy { - self.animatedValuesStart[$0.offset] < self.animatedValuesEnd[$0.offset] - ? $0.element >= self.animatedValuesEnd[$0.offset] - : $0.element <= self.animatedValuesEnd[$0.offset] - }; - }; - - public var isAnimating: Bool { - self.displayLink != nil - }; - - // MARK: - Init - // ------------ - - public init?( - durationSeconds: CFTimeInterval, - animatedValuesStart: [CGFloat], - animatedValuesEnd: [CGFloat], - onAnimatedValueChange: ((_ animatedValues: [CGFloat]) -> Void)? = nil, - onAnimationCompletion: (() -> Void)? = nil - ) { - guard animatedValuesStart.count == animatedValuesEnd.count else { - return nil; - }; - - self.duration = durationSeconds; - - self.animatedValuesStart = animatedValuesStart; - self.animatedValuesEnd = animatedValuesEnd; - - let arraySize = animatedValuesStart.count; - self.animatedValuesSize = arraySize; - - self.animatedValuesCurrent = [CGFloat](repeating: 0, count: arraySize); - self.animatedValuesPrev = [CGFloat](repeating: 0, count: arraySize); - - self.onAnimatedValueChange = onAnimatedValueChange; - self.onAnimationCompletion = onAnimationCompletion; - }; - - // MARK: - Functions - // ----------------- - - @objc private func onDisplayLinkDidFire(_ displayLink: CADisplayLink){ - - self.timeCurrent = CACurrentMediaTime(); - self.timeElapsed = self.timeCurrent - self.timeStart; - - self.progress = self.timeElapsed / self.duration; - - var didChange = false; - - for index in 0 ..< self.animatedValuesSize { - - let animatedValueNextRaw = Self.EasingFunctions.lerp( - valueStart: self.animatedValuesStart[index], - valueEnd: self.animatedValuesEnd[index], - percent: self.easing.easingFunction(self.progress) - ); - - let animatedValuesStart = self.animatedValuesStart[index]; - let animatedValueEnd = self.animatedValuesEnd[index]; - - // clamp - let animatedValueNext: CGFloat = { - // E.g. 50 -> 100 - if animatedValuesStart <= animatedValueEnd { - return animatedValueNextRaw > animatedValueEnd - ? animatedValueEnd - : animatedValueNextRaw; - - } else { - // E.g. 100 -> 50 - return animatedValueNextRaw < animatedValueEnd - ? animatedValueEnd - : animatedValueNextRaw; - }; - }(); - - let animatedValuePrev = self.animatedValuesPrev[index]; - let animatedValueCurrent = self.animatedValuesCurrent[index]; - - let shouldUpdate = self.allowAnimatedValueToRegress - ? true - : animatedValueNext > animatedValueCurrent; - - guard shouldUpdate else { continue }; - - self.animatedValuesPrev[index] = self.animatedValuesCurrent[index]; - self.animatedValuesCurrent[index] = animatedValueNext; - - if !didChange { - didChange = animatedValuePrev != animatedValueNext; - }; - }; - - if didChange { - self.onAnimatedValueChange?(self.animatedValuesCurrent); - }; - - if self.isFinished { - self.stop(); - self.onAnimationCompletion?(); - }; - - self.applyPendingUpdates?(); - }; - - // MARK: - Functions - Public - // -------------------------- - - public func start(){ - self.stop(); - - self.timeCurrent = CACurrentMediaTime(); - self.timeStart = self.timeCurrent; - self.timeEnd = self.timeCurrent + self.duration; - - let displayLink = CADisplayLink( - target: self, - selector: #selector(Self.onDisplayLinkDidFire(_:)) - ); - - displayLink.add(to: .current, forMode:.default); - self.displayLink = displayLink; - }; - - public func stop() { - self.displayLink?.invalidate(); - self.displayLink = nil; - }; - - public func update( - animatedValuesEnd: [CGFloat], - duration: CGFloat? = nil - ){ - self.applyPendingUpdates = { [unowned self] in - self.animatedValuesStart = self.animatedValuesCurrent; - self.animatedValuesEnd = animatedValuesEnd; - - self.timeCurrent = CACurrentMediaTime(); - - if let newDuration = duration { - self.duration = newDuration; - - } else { - let timeRemaining = self.duration - self.timeElapsed; - self.duration = timeRemaining; - }; - - self.timeStart = self.timeCurrent; - self.timeEnd = self.timeCurrent + self.duration; - }; - }; -}; diff --git a/ios/React Native/RNIAnimator/RNIAnimatorSize.swift b/ios/React Native/RNIAnimator/RNIAnimatorSize.swift deleted file mode 100644 index bcef9d9c..00000000 --- a/ios/React Native/RNIAnimator/RNIAnimatorSize.swift +++ /dev/null @@ -1,54 +0,0 @@ -// -// RNIAnimatorSize.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/19/23. -// - -import UIKit - -fileprivate extension CGSize { - init(array: [CGFloat]) { - self = CGSize(width: array[0], height: array[1]); - }; - - var array: [CGFloat] { - return [ - self.width, - self.height - ]; - }; -}; - -public class RNIAnimatorSize: RNIAnimator { - - public init?( - durationSeconds: CFTimeInterval, - sizeStart: CGSize, - sizeEnd: CGSize, - onSizeDidChange: ((_ newSize: CGSize) -> Void)? = nil, - onAnimationCompletion: (() -> Void)? = nil - ) { - super.init( - durationSeconds: durationSeconds, - animatedValuesStart: sizeStart.array, - animatedValuesEnd: sizeEnd.array - ) { - onSizeDidChange?( - CGSize(array: $0) - ); - } onAnimationCompletion: { - onAnimationCompletion?(); - }; - }; - - public func update( - sizeEnd: CGSize, - duration: CGFloat? = nil - ){ - super.update( - animatedValuesEnd: sizeEnd.array, - duration: duration - ); - }; -}; diff --git a/ios/React Native/RNIComputable/RNIComputableOffset.swift b/ios/React Native/RNIComputable/RNIComputableOffset.swift deleted file mode 100644 index 04ab8f72..00000000 --- a/ios/React Native/RNIComputable/RNIComputableOffset.swift +++ /dev/null @@ -1,61 +0,0 @@ -// -// RNIComputableOffset.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/28/23. -// - -import UIKit - -public struct RNIComputableOffset { - - public enum OffsetOperation: String { - case multiply, divide, add, subtract; - - func compute(a: Double, b: Double) -> Double { - switch self { - case .add: - return a + b; - - case .divide: - return a / b; - - case .multiply: - return a * b; - - case .subtract: - return a - b; - }; - }; - }; - - public var offset: Double; - public var offsetOperation: OffsetOperation; - - public func compute( - withValue value: Double, - isValueOnRHS: Bool = false - ) -> Double { - if isValueOnRHS { - return self.offsetOperation.compute(a: value, b: self.offset); - }; - - return self.offsetOperation.compute(a: self.offset, b: value); - }; -}; - -extension RNIComputableOffset { - - public init?(fromDict dict: NSDictionary){ - guard let offset = dict["offset"] as? NSNumber else { return nil }; - self.offset = offset.doubleValue; - - self.offsetOperation = { - guard let offsetOperationRaw = dict["offsetOperation"] as? String, - let offsetOperation = OffsetOperation(rawValue: offsetOperationRaw) - else { return .add }; - - return offsetOperation; - }(); - }; -}; diff --git a/ios/React Native/RNIComputable/RNIComputableSize.swift b/ios/React Native/RNIComputable/RNIComputableSize.swift deleted file mode 100644 index 5209adcf..00000000 --- a/ios/React Native/RNIComputable/RNIComputableSize.swift +++ /dev/null @@ -1,148 +0,0 @@ -// -// RNIComputableValue.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/26/23. -// - -import UIKit - -public struct RNIComputableSize { - - // MARK: - Properties - // ------------------ - - public let mode: RNIComputableSizeMode; - - public let offsetWidth: RNIComputableOffset?; - public let offsetHeight: RNIComputableOffset?; - - public let minWidth: CGFloat?; - public let minHeight: CGFloat?; - - public let maxWidth: CGFloat?; - public let maxHeight: CGFloat?; - - // MARK: - Internal Functions - // -------------------------- - - func sizeWithOffsets(forSize size: CGSize) -> CGSize { - let offsetWidth = - self.offsetWidth?.compute(withValue: size.width); - - let offsetHeight = - self.offsetHeight?.compute(withValue: size.height); - - return CGSize( - width: offsetWidth ?? size.width, - height: offsetHeight ?? size.height - ); - }; - - func sizeWithClamp(forSize size: CGSize) -> CGSize { - return CGSize( - width: size.width.clamped( - min: self.minWidth, - max: self.maxWidth - ), - height: size.height.clamped( - min: self.minHeight, - max: self.maxHeight - ) - ); - }; - - // MARK: - Functions - // ----------------- - - public func computeRaw( - withTargetSize targetSize: CGSize, - currentSize: CGSize - ) -> CGSize { - switch self.mode { - case .current: - return currentSize; - - case .stretch: - return targetSize; - - case let .constant(constantWidth, constantHeight): - return CGSize(width: constantWidth, height: constantHeight); - - case let .percent(percentWidth, percentHeight): - return CGSize( - width: percentWidth * targetSize.width, - height: percentHeight * targetSize.height - ); - }; - }; - - public func compute( - withTargetSize targetSize: CGSize, - currentSize: CGSize - ) -> CGSize { - let rawSize = self.computeRaw( - withTargetSize: targetSize, - currentSize: currentSize - ); - - let clampedSize = self.sizeWithClamp(forSize: rawSize); - return self.sizeWithOffsets(forSize: clampedSize); - }; -}; - -extension RNIComputableSize { - public init?(fromDict dict: NSDictionary){ - guard let mode = RNIComputableSizeMode(fromDict: dict) - else { return nil }; - - self.mode = mode; - - self.offsetWidth = { - guard let offsetRaw = dict["offsetWidth"] as? NSDictionary, - let offset = RNIComputableOffset(fromDict: offsetRaw) - else { return nil }; - - return offset; - }(); - - self.offsetHeight = { - guard let offsetRaw = dict["offsetHeight"] as? NSDictionary, - let offset = RNIComputableOffset(fromDict: offsetRaw) - else { return nil }; - - return offset; - }(); - - self.minWidth = - Self.getDoubleValue(forDict: dict, withKey: "minWidth"); - - self.minHeight = - Self.getDoubleValue(forDict: dict, withKey: "minHeight"); - - self.maxWidth = - Self.getDoubleValue(forDict: dict, withKey: "maxWidth"); - - self.maxHeight = - Self.getDoubleValue(forDict: dict, withKey: "maxHeight"); - }; - - public init(mode: RNIComputableSizeMode){ - self.mode = mode; - - self.offsetWidth = nil; - self.offsetHeight = nil; - self.minWidth = nil; - self.minHeight = nil; - self.maxWidth = nil; - self.maxHeight = nil; - }; - - static private func getDoubleValue( - forDict dict: NSDictionary, - withKey key: String - ) -> CGFloat? { - guard let number = dict[key] as? NSNumber else { return nil }; - return number.doubleValue; - }; -}; diff --git a/ios/React Native/RNIComputable/RNIComputableSizeMode.swift b/ios/React Native/RNIComputable/RNIComputableSizeMode.swift deleted file mode 100644 index d2c751fb..00000000 --- a/ios/React Native/RNIComputable/RNIComputableSizeMode.swift +++ /dev/null @@ -1,60 +0,0 @@ -// -// RNIComputableSizeOffset.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/28/23. -// - -import UIKit - -public enum RNIComputableSizeMode { - case current; - case stretch; - - case constant( - constantWidth: Double, - constantHeight: Double - ); - - case percent( - percentWidth: Double, - percentHeight: Double - ); -}; - -extension RNIComputableSizeMode { - public init?(fromDict dict: NSDictionary){ - guard let mode = dict["mode"] as? String else { return nil }; - - switch mode { - case "current": - self = .current; - - case "stretch": - self = .stretch; - - case "constant": - guard let width = dict["constantWidth"] as? NSNumber, - let height = dict["constantHeight"] as? NSNumber - else { return nil }; - - self = .constant( - constantWidth: width.doubleValue, - constantHeight: height.doubleValue - ); - - case "percent": - guard let width = dict["percentWidth"] as? NSNumber, - let height = dict["percentHeight"] as? NSNumber - else { return nil }; - - self = .percent( - percentWidth: width.doubleValue, - percentHeight: height.doubleValue - ); - - default: - return nil; - }; - }; -}; diff --git a/ios/React Native/RNIComputable/RNIComputableValue.swift b/ios/React Native/RNIComputable/RNIComputableValue.swift deleted file mode 100644 index 9672b19d..00000000 --- a/ios/React Native/RNIComputable/RNIComputableValue.swift +++ /dev/null @@ -1,116 +0,0 @@ -// -// RNIComputableValue.swift -// swift-programmatic-modal -// -// Created by Dominic Go on 5/19/23. -// - -import UIKit - -public struct RNIComputableValue { - - // MARK: - Properties - // ------------------ - - public let mode: RNIComputableValueMode; - - public let offset: RNIComputableOffset?; - - public let minValue: CGFloat?; - public let maxValue: CGFloat?; - - - // MARK: - Internal Functions - // -------------------------- - - func valueWithOffsets(forValue value: CGFloat) -> CGFloat { - return self.offset?.compute(withValue: value) ?? value; - }; - - func valueWithClamp(forValue value: CGFloat) -> CGFloat { - return value.clamped( - min: self.minValue, - max: self.maxValue - ); - }; - - // MARK: - Functions - // ----------------- - - public func computeRaw( - withTargetValue targetValue: CGFloat, - currentValue: CGFloat - ) -> CGFloat { - switch self.mode { - case .current: - return currentValue; - - case .stretch: - return targetValue; - - case let .constant(constantValue): - return constantValue; - - case let .percent(percentValue): - return percentValue * targetValue; - }; - }; - - public func compute( - withTargetValue targetValue: CGFloat, - currentValue: CGFloat - ) -> CGFloat { - let rawValue = self.computeRaw( - withTargetValue: targetValue, - currentValue: currentValue - ); - - let clampedValue = self.valueWithClamp(forValue: rawValue); - return self.valueWithOffsets(forValue: clampedValue); - }; - - public init( - mode: RNIComputableValueMode, - offset: RNIComputableOffset? = nil, - minValue: CGFloat? = nil, - maxValue: CGFloat? = nil - ) { - self.mode = mode; - self.offset = offset; - self.minValue = minValue; - self.maxValue = maxValue; - }; -}; - -extension RNIComputableValue { - public init?(fromDict dict: NSDictionary){ - guard let mode = RNIComputableValueMode(fromDict: dict) - else { return nil }; - - self.mode = mode; - - self.offset = { - guard let offsetRaw = dict["offset"] as? NSDictionary, - let offset = RNIComputableOffset(fromDict: offsetRaw) - else { return nil }; - - return offset; - }(); - - self.minValue = - Self.getDoubleValue(forDict: dict, withKey: "minValue"); - - self.maxValue = - Self.getDoubleValue(forDict: dict, withKey: "maxValue"); - }; - - - - static private func getDoubleValue( - forDict dict: NSDictionary, - withKey key: String - ) -> CGFloat? { - guard let number = dict[key] as? NSNumber else { return nil }; - return number.doubleValue; - }; -}; diff --git a/ios/React Native/RNIComputable/RNIComputableValueMode.swift b/ios/React Native/RNIComputable/RNIComputableValueMode.swift deleted file mode 100644 index 3e75f8e6..00000000 --- a/ios/React Native/RNIComputable/RNIComputableValueMode.swift +++ /dev/null @@ -1,48 +0,0 @@ -// -// RNIComputableValueMode.swift -// swift-programmatic-modal -// -// Created by Dominic Go on 5/19/23. -// - -import UIKit - - -public enum RNIComputableValueMode { - case current; - case stretch; - case constant(constantValue: Double); - case percent(percentValue: Double); -}; - -extension RNIComputableValueMode { - public init?(fromDict dict: NSDictionary){ - guard let mode = dict["mode"] as? String else { return nil }; - - switch mode { - case "current": - self = .current; - - case "stretch": - self = .stretch; - - case "constant": - guard let value = dict["constantValue"] as? NSNumber - else { return nil }; - - self = .constant( - constantValue: value.doubleValue - ); - - case "percent": - guard let value = dict["percentValue"] as? NSNumber - else { return nil }; - - self = .percent(percentValue: value.doubleValue); - - default: - return nil; - }; - }; -}; - diff --git a/ios/React Native/RNIComputable/RNIViewMetadata.swift b/ios/React Native/RNIComputable/RNIViewMetadata.swift deleted file mode 100644 index a8851122..00000000 --- a/ios/React Native/RNIComputable/RNIViewMetadata.swift +++ /dev/null @@ -1,62 +0,0 @@ -// -// RNIViewMetadata.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/27/23. -// - -import UIKit - - -public final class RNIViewMetadata: RNIDictionarySynthesizable { - - public let tag: Int; - - public let reactTag: NSNumber?; - public let nativeID: String?; - - public let parentView: RNIViewMetadata?; - public let subviews: [RNIViewMetadata]?; - - public required init( - fromView view: UIView, - setParentView: Bool = true, - setSubViews: Bool = true - ){ - self.tag = view.tag; - - self.reactTag = { - guard let reactTag = view.reactTag else { return nil }; - return reactTag; - }(); - - self.nativeID = { - guard let nativeID = view.nativeID else { return nil }; - return nativeID; - }(); - - self.parentView = { - guard setParentView, - let parentView = view.superview - else { return nil }; - - return Self.init( - fromView: parentView, - setParentView: false, - setSubViews: false - ); - }(); - - self.subviews = { - guard setSubViews else { return nil }; - - return view.subviews.map { - return Self.init( - fromView: $0, - setParentView: false, - setSubViews: false - ); - }; - }(); - }; -}; diff --git a/ios/React Native/RNIDictionarySynthesizable/RNIDictionaryRepresentable.swift b/ios/React Native/RNIDictionarySynthesizable/RNIDictionaryRepresentable.swift deleted file mode 100644 index 0bb912a4..00000000 --- a/ios/React Native/RNIDictionarySynthesizable/RNIDictionaryRepresentable.swift +++ /dev/null @@ -1,12 +0,0 @@ -// -// RNIDictionaryRepresentable.swift -// react-native-ios-modal -// -// Created by Dominic Go on 5/3/23. -// - -import UIKit - -public protocol RNIDictionaryRepresentable { - var asDictionary: [String: Any] { get }; -}; diff --git a/ios/React Native/RNIDictionarySynthesizable/RNIDictionarySynthesizable+Default.swift b/ios/React Native/RNIDictionarySynthesizable/RNIDictionarySynthesizable+Default.swift deleted file mode 100644 index acaec5dd..00000000 --- a/ios/React Native/RNIDictionarySynthesizable/RNIDictionarySynthesizable+Default.swift +++ /dev/null @@ -1,140 +0,0 @@ -// -// RNIDictionarySynthesizable+Default.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/27/23. -// - -import UIKit - -extension RNIDictionarySynthesizable { - - // MARK: - Static Properties - // ------------------------- - - public static var synthesizedDictionaryIgnore: [String] { - []; - }; - - public static var synthesizedDictionaryInlinedProperties: [PartialKeyPath] { - []; - }; - - // MARK: - Static Functions - // ------------------------ - - fileprivate static func recursivelyParseValue( - _ value: Any, - isJSDict: Bool - ) -> Any { - - if let synthesizableDict = value as? (any RNIDictionarySynthesizable) { - return synthesizableDict.synthesizedDictionary(isJSDict: isJSDict); - }; - - if isJSDict, let rawValue = value as? any RawRepresentable { - return rawValue.rawValue; - }; - - if isJSDict, let array = value as? Array { - return array.map { - return Self.recursivelyParseValue($0, isJSDict: isJSDict); - }; - }; - - if isJSDict, let dict = value as? Dictionary { - return dict.mapValues { - return Self.recursivelyParseValue($0, isJSDict: isJSDict); - }; - }; - - if let dictRepresentable = value as? RNIDictionaryRepresentable { - let dict = dictRepresentable.asDictionary; - - guard isJSDict else { return dict }; - return Self.recursivelyParseValue(dict, isJSDict: isJSDict); - }; - - if let encodable = value as? Encodable, - let dict = encodable.asDictionary { - - return dict; - }; - - return value; - }; - - private func mergeInlinedProperties( - withDict baseDict: Dictionary, - isJSDict: Bool - ) -> Dictionary { - - var baseDict = baseDict; - - Self.synthesizedDictionaryInlinedProperties.forEach { - guard let value = self[keyPath: $0] as? (any RNIDictionarySynthesizable) - else { return }; - - let inlinedDict = value.synthesizedDictionary(isJSDict: isJSDict); - baseDict = baseDict.merging(inlinedDict){ old, _ in old }; - }; - - return baseDict; - }; - - private func synthesizedDictionaryUsingDictIgnore( - isJSDict: Bool - ) -> Dictionary { - - let mirror = Mirror(reflecting: self); - let properties = mirror.children; - - #if DEBUG - /// Runtime Check - Verify if `synthesizedDictionaryIgnore` is valid - for propertyKeyToIgnore in Self.synthesizedDictionaryIgnore { - if !properties.contains(where: { $0.label == propertyKeyToIgnore }) { - fatalError( - "Invalid value of '\(propertyKeyToIgnore)' in " - + "'synthesizedDictionaryIgnore' for '\(Self.self)' - " - + "No property named '\(propertyKeyToIgnore)' in '\(Self.self)'" - ); - }; - }; - #endif - - let propertyValueMap = properties.lazy.map { ( - propertyKey: String?, value: Any) -> (String, Any)? in - - guard let propertyKey = propertyKey, - !Self.synthesizedDictionaryIgnore.contains(propertyKey) - else { return nil }; - - let parsedValue = Self.recursivelyParseValue(value, isJSDict: isJSDict); - return (propertyKey, parsedValue); - }; - - let baseDict = Dictionary( - uniqueKeysWithValues: propertyValueMap.compactMap { $0 } - ); - - return self.mergeInlinedProperties( - withDict: baseDict, - isJSDict: isJSDict - ); - }; - - // MARK: - Public Functions - // ------------------------ - - public func synthesizedDictionary( - isJSDict: Bool - ) -> Dictionary { - - return self.synthesizedDictionaryUsingDictIgnore(isJSDict: isJSDict); - }; - - - public var synthesizedJSDictionary: Dictionary { - self.synthesizedDictionary(isJSDict: true); - }; -}; diff --git a/ios/React Native/RNIDictionarySynthesizable/RNIDictionarySynthesizable.swift b/ios/React Native/RNIDictionarySynthesizable/RNIDictionarySynthesizable.swift deleted file mode 100644 index 3deda88e..00000000 --- a/ios/React Native/RNIDictionarySynthesizable/RNIDictionarySynthesizable.swift +++ /dev/null @@ -1,29 +0,0 @@ -// -// RNIDictionarySynthesizable.swift -// react-native-ios-modal -// -// Created by Dominic Go on 3/26/23. -// - -import UIKit - -/// Any type that conforms to this protocol will be able to create a dictionary -/// representing the keys and values inside that type -/// -public protocol RNIDictionarySynthesizable { - - /// The names/identifiers of the property to be ignored when - /// `synthesizedDictionary` is created. - /// - static var synthesizedDictionaryIgnore: [String] { get }; - - /// The key path to the property that will be inlined/"squashed together" - /// into `synthesizedDictionary`. - /// - static var synthesizedDictionaryInlinedProperties: - [PartialKeyPath] { get }; - - /// A map of the property names and their respective values - func synthesizedDictionary(isJSDict: Bool) -> Dictionary; -}; - diff --git a/ios/React Native/RNIError/RNIBaseError+Helpers.swift b/ios/React Native/RNIError/RNIBaseError+Helpers.swift deleted file mode 100644 index e9cb4eef..00000000 --- a/ios/React Native/RNIError/RNIBaseError+Helpers.swift +++ /dev/null @@ -1,119 +0,0 @@ -// -// RNIBaseError+Helpers.swift -// react-native-ios-modal -// -// Created by Dominic Go on 5/12/23. -// - -import UIKit - -extension RNIBaseError { - - public var errorMessage: String { - var message = "message: \(self.message ?? "N/A")"; - - #if DEBUG - message += " - debugMessage: \(self.debugMessage ?? "N/A")"; - #endif - - if let fileID = self.fileID { - message += "- fileID: \(fileID)"; - }; - - if let functionName = self.functionName { - message += "- functionName: \(functionName)"; - }; - - if let lineNumber = self.lineNumber { - message += "- lineNumber: \(lineNumber)"; - }; - - return message; - }; - - public init( - code: ErrorCode, - message: String? = nil, - debugMessage: String? = nil, - debugData: Dictionary? = nil, - fileID: String? = #fileID, - functionName: String? = #function, - lineNumber: Int? = #line - ) { - self.init( - code: code, - message: message, - debugMessage: debugMessage - ); - - self.fileID = fileID; - self.functionName = functionName; - self.lineNumber = lineNumber; - }; - - public init( - code: ErrorCode, - error: Error, - debugMessage: String? = nil, - debugData: Dictionary? = nil, - fileID: String? = #fileID, - functionName: String? = #function, - lineNumber: Int? = #line - ) { - self.init( - code: code, - message: error.localizedDescription, - debugMessage: debugMessage - ); - - self.fileID = fileID; - self.functionName = functionName; - self.lineNumber = lineNumber; - }; - - public mutating func setDebugValues( - fileID: String = #fileID, - functionName: String = #function, - lineNumber: Int = #line - ) { - self.fileID = fileID; - self.functionName = functionName; - self.lineNumber = lineNumber; - }; - - public mutating func addDebugData(_ nextDebugData: Dictionary){ - guard let prevDebugData = self.debugData else { - self.debugData = nextDebugData; - return; - }; - - self.debugData = prevDebugData.merging(nextDebugData) { (_, new) in new }; - }; -}; - -extension RNIBaseError where Self: RNIDictionarySynthesizable { - - public var asNSError: NSError? { - - let errorCode = self.code.errorCode ?? - RNIGenericErrorCode.unspecified.errorCode; - - guard let errorCode = errorCode else { return nil }; - - return NSError( - domain: Self.domain, - code: errorCode, - userInfo: self.synthesizedJSDictionary - ); - }; - - public func invokePromiseRejectBlock( - _ block: @escaping RCTPromiseRejectBlock - ) { - block( - /* code */ self.code.description, - /* message */ self.errorMessage, - /* error */ self.asNSError - ); - }; -}; diff --git a/ios/React Native/RNIError/RNIBaseError.swift b/ios/React Native/RNIError/RNIBaseError.swift deleted file mode 100644 index b19a9770..00000000 --- a/ios/React Native/RNIError/RNIBaseError.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// RNINavigatorError.swift -// react-native-ios-navigator -// -// Created by Dominic Go on 9/11/21. -// - -import UIKit - -/// TODO - Move to `react-native-ios-utilities` -/// * Replace older impl. of `RNIError` with this version - -public protocol RNIBaseError: Error { - - associatedtype ErrorCode: RNIErrorCode; - - static var domain: String { get }; - - var code: ErrorCode { get }; - var message: String? { get }; - - var debugMessage: String? { get }; - var debugData: Dictionary? { get set } - - var fileID : String? { get set }; - var functionName: String? { get set }; - var lineNumber : Int? { get set }; - - init( - code: ErrorCode, - message: String?, - debugMessage: String? - ); -}; diff --git a/ios/React Native/RNIError/RNIError.swift b/ios/React Native/RNIError/RNIError.swift deleted file mode 100644 index 0d96e5d1..00000000 --- a/ios/React Native/RNIError/RNIError.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// RNIError.swift -// react-native-ios-modal -// -// Created by Dominic Go on 5/12/23. -// - -import UIKit - -public typealias RNIError = - RNIBaseError & RNIDictionarySynthesizable; - -public typealias RNIErrorCode = - CustomStringConvertible - & CaseIterable - & Equatable - & RNIErrorCodeDefaultable - & RNIErrorCodeSynthesizable; diff --git a/ios/React Native/RNIError/RNIErrorCodeDefaultable.swift b/ios/React Native/RNIError/RNIErrorCodeDefaultable.swift deleted file mode 100644 index 9d5a0310..00000000 --- a/ios/React Native/RNIError/RNIErrorCodeDefaultable.swift +++ /dev/null @@ -1,70 +0,0 @@ -// -// RNIGenericErrorDefaultable.swift -// react-native-ios-utilities -// -// Created by Dominic Go on 8/28/22. -// - -import UIKit - -public protocol RNIErrorCodeDefaultable { - - static var runtimeError : Self { get }; - static var libraryError : Self { get }; - static var reactError : Self { get }; - static var unknownError : Self { get }; - static var invalidArgument: Self { get }; - static var outOfBounds : Self { get }; - static var invalidReactTag: Self { get }; - static var nilValue : Self { get }; -}; - -// MARK: - Default -// --------------- - -public extension RNIErrorCodeDefaultable { - - static var runtimeError: Self { - Self.runtimeError - }; - - static var libraryError: Self { - Self.libraryError - }; - - static var reactError: Self { - Self.reactError - }; - - static var unknownError: Self { - Self.unknownError - }; - - static var invalidArgument: Self { - Self.invalidArgument - }; - - static var outOfBounds: Self { - Self.outOfBounds - }; - - static var invalidReactTag: Self { - Self.invalidReactTag - }; - - static var nilValue: Self { - Self.nilValue - }; -}; - -// MARK: - Helpers -// --------------- - -extension RNIErrorCodeDefaultable where Self: RawRepresentable { - - public var description: String { - self.rawValue; - }; -}; - - diff --git a/ios/React Native/RNIError/RNIErrorCodeSynthesizable.swift b/ios/React Native/RNIError/RNIErrorCodeSynthesizable.swift deleted file mode 100644 index c71efffb..00000000 --- a/ios/React Native/RNIError/RNIErrorCodeSynthesizable.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// RNIErrorCodeSynthesizable.swift -// react-native-ios-modal -// -// Created by Dominic Go on 5/12/23. -// - -import UIKit - -public protocol RNIErrorCodeSynthesizable { - var errorCode: Int? { get }; -} - -extension RNIErrorCodeSynthesizable where Self: CaseIterable & Equatable { - - public var errorCode: Int? { - let match = Self.allCases.enumerated().first { _, value in - value == self - } - - guard let offset = match?.offset else { return nil }; - return offset * -1; - }; -}; diff --git a/ios/React Native/RNIError/RNIGenericErrorCode.swift b/ios/React Native/RNIError/RNIGenericErrorCode.swift deleted file mode 100644 index 9689fe14..00000000 --- a/ios/React Native/RNIError/RNIGenericErrorCode.swift +++ /dev/null @@ -1,15 +0,0 @@ -// -// RNIGenericErrorCode.swift -// react-native-ios-modal -// -// Created by Dominic Go on 5/12/23. -// - -import UIKit - - -enum RNIGenericErrorCode: - String, CaseIterable, RNIErrorCodeDefaultable, RNIErrorCodeSynthesizable { - - case unspecified; -}; diff --git a/ios/React Native/RNIIdentifiable/RNIIdentifiable+Default.swift b/ios/React Native/RNIIdentifiable/RNIIdentifiable+Default.swift deleted file mode 100644 index 6b25ec6d..00000000 --- a/ios/React Native/RNIIdentifiable/RNIIdentifiable+Default.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// RNIIdentifiable+Default.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/27/23. -// - -import UIKit - -extension RNIIdentifiable { - public static var synthesizedIdPrefix: String { - String(describing: Self.self) + "-"; - }; - - public var synthesizedIdentifier: RNIObjectIdentifier { - if let identifier = self.metadata { - return identifier; - }; - - let identifier = RNIObjectIdentifier(type: Self.self); - self.metadata = identifier; - - return identifier; - }; - - public var synthesizedID: Int { - self.synthesizedIdentifier.id; - }; - - public var synthesizedStringID: String { - Self.synthesizedIdPrefix + "\(self.synthesizedID)"; - }; - - public var synthesizedUUID: UUID { - self.synthesizedIdentifier.uuid; - }; -}; diff --git a/ios/React Native/RNIIdentifiable/RNIIdentifiable.swift b/ios/React Native/RNIIdentifiable/RNIIdentifiable.swift deleted file mode 100644 index e70d473d..00000000 --- a/ios/React Native/RNIIdentifiable/RNIIdentifiable.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// RNIIdentifiable.swift -// react-native-ios-modal -// -// Created by Dominic Go on 3/31/23. -// - -import UIKit - -public protocol RNIIdentifiable: - AnyObject, RNIObjectMetadata where T == RNIObjectIdentifier { - - static var synthesizedIdPrefix: String { get }; - - var synthesizedID: Int { get }; - - var synthesizedUUID: UUID { get }; - -}; - diff --git a/ios/React Native/RNIIdentifiable/RNIObjectIdentifier.swift b/ios/React Native/RNIIdentifiable/RNIObjectIdentifier.swift deleted file mode 100644 index ed9c839a..00000000 --- a/ios/React Native/RNIIdentifiable/RNIObjectIdentifier.swift +++ /dev/null @@ -1,54 +0,0 @@ -// -// RNIObjectIdentifier.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/27/23. -// - -import UIKit - -fileprivate class Counter { - static var typeToCounterMap: Dictionary = [:]; - - static func getTypeString(ofType _type: Any) -> String { - return String(describing: type(of: _type)); - }; - - static func set(forType type: Any, counter: Int) { - let typeString = Self.getTypeString(ofType: type); - Self.typeToCounterMap[typeString] = counter; - }; - - static func set(forType typeString: String, counter: Int) { - Self.typeToCounterMap[typeString] = counter; - }; - - static func get(forType type: Any) -> Int { - let typeString = Self.getTypeString(ofType: type); - - guard let counter = Self.typeToCounterMap[typeString] else { - Self.set(forType: typeString, counter: -1); - return -1; - }; - - return counter; - }; - - static func getAndIncrement(forType type: Any) -> Int { - let prevCount = Self.get(forType: type); - let nextCount = prevCount + 1; - - Self.set(forType: type, counter: nextCount); - return nextCount; - }; -}; - -public final class RNIObjectIdentifier { - - public let id: Int; - public let uuid = UUID(); - - public init(type: Any) { - self.id = Counter.getAndIncrement(forType: type); - }; -}; diff --git a/ios/React Native/RNIModal/RNIModal+Helpers.swift b/ios/React Native/RNIModal/RNIModal+Helpers.swift deleted file mode 100644 index 621a8979..00000000 --- a/ios/React Native/RNIModal/RNIModal+Helpers.swift +++ /dev/null @@ -1,122 +0,0 @@ -// -// RNIModal+Helpers.swift -// react-native-ios-modal -// -// Created by Dominic Go on 3/18/23. -// - -import UIKit - -extension RNIModalIdentifiable where Self: RNIIdentifiable { - public var modalNativeID: String { - self.synthesizedStringID - }; -}; - -extension RNIModalIdentifiable { - public var modalUserID: String? { - nil - }; -}; - -extension RNIModalState where Self: RNIModalPresentation { - - internal var synthesizedWindowMapData: RNIWindowMapData? { - guard let window = self.window else { return nil }; - return RNIModalWindowMapShared.get(forWindow: window); - }; - - /// Programmatically check if this instance is presented - public var computedIsModalPresented: Bool { - let listPresentedVC = - RNIPresentedVCListCache.getPresentedViewControllers(forWindow: window); - - return listPresentedVC.contains { - $0 === self.modalViewController; - }; - }; - - /// Programmatically check if this instance is in focus - public var computedIsModalInFocus: Bool { - let listPresentedVC = - RNIPresentedVCListCache.getPresentedViewControllers(forWindow: window); - - guard let topmostVC = listPresentedVC.last - else { return self.synthesizedIsModalInFocus }; - - return topmostVC === self.modalViewController; - }; - - /// Note:2023-03-31-15-41-04 - /// - /// * This is based on the view controller hierarchy - /// * So parent/child view controller that aren't modals are also counted - /// - public var computedViewControllerIndex: Int { - let listPresentedVC = - RNIPresentedVCListCache.getPresentedViewControllers(forWindow: window); - - for (index, vc) in listPresentedVC.enumerated() { - guard vc === self.modalViewController else { continue }; - return index; - }; - - return -1; - }; - - /// Programmatically get the "modal index" - public var computedModalIndex: Int { - guard let window = self.window, - let modalVC = self.modalViewController - else { return -1 }; - - return RNIModalUtilities.computeModalIndex( - forWindow: window, - forViewController: modalVC - ); - }; - - public var currentModalIndex: Int { - self.synthesizedWindowMapData?.modalIndexCurrent ?? -1; - }; - - public var computedCurrentModalIndex: Int { - RNIModalUtilities.computeModalIndex(forWindow: self.window); - }; - - public var synthesizedIsModalInFocus: Bool { - self.modalPresentationState.isPresented && - self.modalFocusState.state.isFocused; - }; -}; - -extension RNIModalState where Self: RNIModal { - - public var synthesizedModalData: RNIModalData { - let purgeCache = - RNIPresentedVCListCache.beginCaching(forWindow: self.window); - - let modalData = RNIModalData( - modalNativeID: self.modalNativeID, - - modalIndex: self.modalIndex, - modalIndexPrev: self.modalIndexPrev, - currentModalIndex: self.currentModalIndex, - - modalFocusState: self.modalFocusState, - modalPresentationState: self.modalPresentationState, - - computedIsModalInFocus: self.computedIsModalInFocus, - computedIsModalPresented: self.computedIsModalPresented, - - computedModalIndex: self.computedModalIndex, - computedViewControllerIndex: self.computedViewControllerIndex, - computedCurrentModalIndex: self.computedCurrentModalIndex, - - synthesizedWindowID: self.window?.synthesizedStringID - ); - - purgeCache(); - return modalData; - }; -}; diff --git a/ios/React Native/RNIModal/RNIModal.swift b/ios/React Native/RNIModal/RNIModal.swift deleted file mode 100644 index 495034aa..00000000 --- a/ios/React Native/RNIModal/RNIModal.swift +++ /dev/null @@ -1,125 +0,0 @@ -// -// RNIModal.swift -// react-native-ios-modal -// -// Created by Dominic Go on 3/16/23. -// - -import UIKit - -/// A collection of protocols that the "adoptee" needs to implement in order to -/// be considered a "modal". -/// -public typealias RNIModal = - RNIIdentifiable - & RNIModalIdentifiable - & RNIModalState - & RNIModalRequestable - & RNIModalFocusNotifiable - & RNIModalPresentationNotifying - & RNIModalPresentation; - - -/// Contains modal-related properties for identifying a specific modal instance -/// -/// Specifies that the "adoptee/delegate" that conforms to this protocol must -/// have the specified modal-related properties so that it can be uniquely -/// identified amongst different modal instances. -/// -public protocol RNIModalIdentifiable: AnyObject { - - var modalNativeID: String { get }; - - var modalUserID: String? { get }; -}; - -/// Contains modal-related properties for keeping track of the state of the -/// modal. -/// -/// Specifies that the "adoptee/delegate" that conforms to this protocol must -/// have the specified modal-related properties for keeping track of state -/// -/// The "implementor/delegator" updates these properties; The delegate -/// should treat the properties declared in this protocol as read-only. -/// -public protocol RNIModalState: AnyObject { - - var modalIndexPrev: Int! { set get }; - - var modalIndex: Int! { set get }; - - var modalPresentationState: RNIModalPresentationStateMachine { set get }; - - var modalFocusState: RNIModalFocusStateMachine { set get }; -}; - -/// Contains functions that are invoked to request modal-related actions. -/// -/// The "implementer/delegator" notifies the "adoptee/delegate" of this protocol -/// of requests to perform "modal-related" actions. -/// -public protocol RNIModalRequestable: AnyObject { - - func requestModalToShow( - sender: Any, - animated: Bool, - completion: @escaping () -> Void - ) throws; - - func requestModalToHide( - sender: Any, - animated: Bool, - completion: @escaping () -> Void - ) throws; -}; - -/// Contains functions that get called whenever a modal-related event occurs. -/// -/// The "implementer/delegator" notifies the "adoptee/delegate" of this protocol -/// of modal focus/blur related events. -/// -/// An interface for the "adoptee/delegate" to receive and handle incoming -/// modal "focus/blur"-related notifications. -/// -public protocol RNIModalFocusNotifiable: AnyObject { - func onModalWillFocusNotification(sender: any RNIModal); - - func onModalDidFocusNotification(sender: any RNIModal); - - func onModalWillBlurNotification(sender: any RNIModal); - - func onModalDidBlurNotification(sender: any RNIModal); -}; - -/// Specifies that the "adoptee/delegate" that conforms to this protocol must -/// notify a delegate of modal presentation-related events -/// -public protocol RNIModalPresentationNotifying: AnyObject { - - /// Notify the "shared modal manager" if the current modal instance is going - /// to be shown or hidden. - /// - /// That focus notification will then be relayed to the other modal instances. - /// - var modalPresentationNotificationDelegate: - RNIModalPresentationNotifiable! { get set }; -}; - -/// Properties related to modal presentation. -/// -/// Specifies that the "adoptee/delegate" that conforms to this protocol must -/// implement this so that the "delegator" understands how the delegate presents -/// the modal. -/// -public protocol RNIModalPresentation: AnyObject { - - /// Returns the modal view controller that is to be presented - var modalViewController: UIViewController? { get }; - - /// Returns the view controller that presented the `modalViewController` - /// instance. - var presentingViewController: UIViewController? { get }; - - /// The "main" window for this instance - var window: UIWindow? { get }; -}; diff --git a/ios/React Native/RNIModal/RNIModalCustomSheetDetent.swift b/ios/React Native/RNIModal/RNIModalCustomSheetDetent.swift deleted file mode 100644 index be772298..00000000 --- a/ios/React Native/RNIModal/RNIModalCustomSheetDetent.swift +++ /dev/null @@ -1,111 +0,0 @@ -// -// RNIModalCustomSheetDetent.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/21/23. -// - -import UIKit - -enum RNIModalCustomSheetDetentMode { - - case relative(value: Double); - case constant(value: Double); - - var rawValueString: String { - switch self { - case .constant: return "constant"; - case .relative: return "relative"; - }; - }; -}; - -struct RNIModalCustomSheetDetent { - - typealias OnDetentDidCreate = ( - _ containerTraitCollection: UITraitCollection, - _ maximumDetentValue: CGFloat, - _ computedDetentValue: CGFloat, - _ sender: RNIModalCustomSheetDetent - ) -> Void; - - let mode: RNIModalCustomSheetDetentMode; - let key: String; - - let offset: RNIComputableOffset?; - - let onDetentDidCreate: OnDetentDidCreate?; - - init?( - forDict dict: Dictionary, - onDetentDidCreate: OnDetentDidCreate? = nil - ) { - guard let rawMode = dict["mode"] as? String, - let rawKey = dict["key"] as? String - else { return nil }; - - self.key = rawKey; - self.onDetentDidCreate = onDetentDidCreate; - - let mode: RNIModalCustomSheetDetentMode? = { - switch rawMode { - case "relative": - guard let rawValue = dict["sizeMultiplier"] as? NSNumber - else { return nil }; - - return .relative(value: rawValue.doubleValue); - - case "constant": - guard let rawValue = dict["sizeConstant"] as? NSNumber - else { return nil }; - - return .constant(value: rawValue.doubleValue); - - default: - return nil; - }; - }(); - - guard let mode = mode else { return nil }; - self.mode = mode; - - self.offset = RNIComputableOffset(fromDict: dict as NSDictionary); - }; - - @available(iOS 15.0, *) - var synthesizedDetentIdentifier: - UISheetPresentationController.Detent.Identifier { - - UISheetPresentationController.Detent.Identifier(self.key); - }; - - @available(iOS 16.0, *) - var synthesizedDetent: UISheetPresentationController.Detent { - return .custom(identifier: self.synthesizedDetentIdentifier) { context in - - let computedValueBase: Double = { - switch self.mode { - case let .relative(value): - return value * context.maximumDetentValue; - - case let .constant(value): - return value; - }; - }(); - - let computedValueWithOffset = - self.offset?.compute(withValue: computedValueBase); - - let computedValue = computedValueWithOffset ?? computedValueBase; - - self.onDetentDidCreate?( - context.containerTraitCollection, - context.maximumDetentValue, - computedValue, - self - ); - - return computedValue; - }; - }; -}; diff --git a/ios/React Native/RNIModal/RNIModalData.swift b/ios/React Native/RNIModal/RNIModalData.swift deleted file mode 100644 index d8ec76ae..00000000 --- a/ios/React Native/RNIModal/RNIModalData.swift +++ /dev/null @@ -1,28 +0,0 @@ -// -// RNIModalData.swift -// react-native-ios-modal -// -// Created by Dominic Go on 3/26/23. -// - -import UIKit - -public struct RNIModalData: RNIDictionarySynthesizable { - public let modalNativeID: String; - - public let modalIndex: Int; - public let modalIndexPrev: Int; - public let currentModalIndex: Int; - - public let modalFocusState: RNIModalFocusStateMachine; - public let modalPresentationState: RNIModalPresentationStateMachine; - - public let computedIsModalInFocus: Bool; - public let computedIsModalPresented: Bool; - - public let computedModalIndex: Int; - public let computedViewControllerIndex: Int; - public let computedCurrentModalIndex: Int; - - public let synthesizedWindowID: String?; -}; diff --git a/ios/React Native/RNIModal/RNIModalError.swift b/ios/React Native/RNIModal/RNIModalError.swift deleted file mode 100644 index 3f5e2a85..00000000 --- a/ios/React Native/RNIModal/RNIModalError.swift +++ /dev/null @@ -1,41 +0,0 @@ -// -// RNIModalError.swift -// react-native-ios-modal -// -// Created by Dominic Go on 5/10/23. -// - -import UIKit - -public enum RNIModalErrorCode: String, RNIErrorCode { - case modalAlreadyVisible, - modalAlreadyHidden, - dismissRejected; -}; - -public struct RNIModalError: RNIError { - - public typealias ErrorCode = RNIModalErrorCode; - - public static var domain = "react-native-ios-modal"; - - public var code: RNIModalErrorCode; - public var message: String?; - - public var debugMessage: String?; - public var debugData: Dictionary?; - - public var fileID: String?; - public var functionName: String?; - public var lineNumber: Int?; - - public init( - code: ErrorCode, - message: String?, - debugMessage: String? - ) { - self.code = code; - self.message = message; - self.debugMessage = debugMessage; - }; -}; diff --git a/ios/React Native/RNIModal/RNIModalEventData.swift b/ios/React Native/RNIModal/RNIModalEventData.swift deleted file mode 100644 index 2d2b5189..00000000 --- a/ios/React Native/RNIModal/RNIModalEventData.swift +++ /dev/null @@ -1,64 +0,0 @@ -// -// RNIModalEvents.swift -// react-native-ios-modal -// -// Created by Dominic Go on 3/26/23. -// - -import UIKit - -public struct RNIModalBaseEventData: RNIDictionarySynthesizable { - - public static var synthesizedDictionaryIgnore: [String] { - ["modalData"] - }; - - public static var synthesizedDictionaryInlinedProperties: [ - PartialKeyPath - ] { - [\.modalData]; - }; - - public let reactTag: Int; - public let modalID: String?; - - public let modalData: RNIModalData; -}; - -public struct RNIOnModalFocusEventData: RNIDictionarySynthesizable { - - public static var synthesizedDictionaryIgnore: [String] { - ["modalData"] - }; - - public static var synthesizedDictionaryInlinedProperties: [ - PartialKeyPath - ] { - [\.modalData]; - }; - - public let modalData: RNIModalBaseEventData; - public let senderInfo: RNIModalData; - - public let isInitial: Bool; -}; - -public struct RNIModalDidChangeSelectedDetentIdentifierEventData: RNIDictionarySynthesizable { - public let sheetDetentStringPrevious: String?; - public let sheetDetentStringCurrent: String?; -}; - -public struct RNIModalDetentDidComputeEventData: RNIDictionarySynthesizable { - public let maximumDetentValue: CGFloat; - public let computedDetentValue: CGFloat; - public let key: String; -}; - -public struct RNIModalSwipeGestureEventData: RNIDictionarySynthesizable { - public let position: CGPoint; -}; - -public struct RNIModalDidSnapEventData: RNIDictionarySynthesizable { - public let selectedDetentIdentifier: String?; - public let modalContentSize: CGSize; -}; diff --git a/ios/React Native/RNIModal/RNIModalFlags.swift b/ios/React Native/RNIModal/RNIModalFlags.swift deleted file mode 100644 index 80491857..00000000 --- a/ios/React Native/RNIModal/RNIModalFlags.swift +++ /dev/null @@ -1,21 +0,0 @@ -// -// RNIModalFlags.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/27/23. -// - -import UIKit - -public var RNIModalFlagsShared = RNIModalFlags.sharedInstance; - -public class RNIModalFlags { - static let sharedInstance = RNIModalFlags(); - - var isModalViewPresentationNotificationEnabled = true; - - var shouldSwizzleViewControllers = true; - var shouldSwizzledViewControllerNotifyAll = false; - var shouldWrapAllViewControllers = false; - -}; diff --git a/ios/React Native/RNIModal/RNIModalFocusState.swift b/ios/React Native/RNIModal/RNIModalFocusState.swift deleted file mode 100644 index 003df259..00000000 --- a/ios/React Native/RNIModal/RNIModalFocusState.swift +++ /dev/null @@ -1,142 +0,0 @@ -// -// RNIModalFocusState.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/8/23. -// - -import UIKit - - -public enum RNIModalFocusState: String { - case INITIAL; - - case FOCUSING - case FOCUSED; - - case BLURRING; - case BLURRED; - - // MARK: - Properties - Computed - // ----------------------------- - - public var isInitialized: Bool { - self != .INITIAL - }; - - public var isFocused: Bool { - self == .FOCUSED; - }; - - public var isBlurred: Bool { - self == .BLURRED || self == .INITIAL; - }; - - public var isFocusing: Bool { - self == .FOCUSING; - }; - - public var isBlurring: Bool { - self == .BLURRING; - }; - - public var isTransitioning: Bool { - self.isBlurring || self.isFocusing; - }; - - public var isBlurredOrBlurring: Bool { - self.isBlurred || self.isBlurring; - }; - - public var isFocusedOrFocusing: Bool { - self.isFocused || self.isFocusing; - }; -}; - -public struct RNIModalFocusStateMachine: RNIDictionaryRepresentable { - - // MARK: - Properties - // ------------------ - - private(set) public var state: RNIModalFocusState = .INITIAL; - private(set) public var statePrev: RNIModalFocusState = .INITIAL; - - public var wasBlurCancelled: Bool = false; - public var wasFocusCancelled: Bool = false; - - public var didChange: Bool { - self.statePrev != self.state; - }; - - // MARK: - RNIDictionaryRepresentable - // ---------------------------------- - - public var asDictionary: [String : Any] {[ - "state": self.state, - "statePrev": self.statePrev, - "isFocused": self.state.isFocused, - "isBlurred": self.state.isBlurred, - "isTransitioning": self.state.isTransitioning, - "wasBlurCancelled": self.wasBlurCancelled, - "wasFocusCancelled": self.wasFocusCancelled, - ]}; - - // MARK: - Functions - // ------------------ - - public mutating func set(state nextState: RNIModalFocusState){ - let prevState = self.state; - - // early exit if no change - guard prevState != nextState else { - #if DEBUG - print( - "Error - RNIModalFocusStateMachine.set" - + " - arg nextState: \(nextState)" - + " - prevState: \(prevState)" - + " - No changes, ignoring..." - ); - #endif - return; - }; - - if prevState.isInitialized && !nextState.isInitialized { - /// Going from "initialized state" (e.g. `FOCUSED`, `FOCUSING`, etc), to - /// an "uninitialized state" (i.e. `INITIAL`) is not allowed - return; - - } else { - self.state = nextState; - self.statePrev = prevState; - }; - - if prevState.isBlurring && nextState.isFocusing { - self.wasBlurCancelled = true; - - } else if prevState.isFocusing && nextState.isBlurring { - self.wasFocusCancelled = true; - }; - - #if DEBUG - print( - "Log - RNIModalFocusState.set" - + " - prevState: \(prevState)" - + " - nextState: \(nextState)" - + " - self.wasBlurCancelled: \(self.wasBlurCancelled)" - + " - self.wasFocusCancelled: \(self.wasFocusCancelled)" - ); - #endif - - self.resetIfNeeded(); - }; - - mutating func resetIfNeeded(){ - if self.state.isBlurred { - self.wasBlurCancelled = false; - }; - - if self.state.isFocused { - self.wasFocusCancelled = false; - }; - }; -}; diff --git a/ios/React Native/RNIModal/RNIModalManager.swift b/ios/React Native/RNIModal/RNIModalManager.swift deleted file mode 100644 index 9adfe8b7..00000000 --- a/ios/React Native/RNIModal/RNIModalManager.swift +++ /dev/null @@ -1,448 +0,0 @@ -// -// RNIModalManager.swift -// react-native-ios-modal -// -// Created by Dominic Go on 3/9/23. -// - -import UIKit - -public let RNIModalManagerShared = RNIModalManager.sharedInstance; - - -/// Archived/Old Notes -/// * `Note:2023-04-07-03-22-48` -/// * `Note:2023-03-30-19-36-33` -/// -public class RNIModalManager { - - // MARK: - Static Properties - // ------------------------- - - public static let sharedInstance = RNIModalManager(); - - // MARK: - Properties - // ------------------ - - private(set) public var modalInstanceDict = - RNIWeakDictionary(); - - private(set) public var windowToCurrentModalIndexMap: - Dictionary = [:]; - - // MARK: - Properties - Computed - // ----------------------------- - - public var modalInstances: [any RNIModal] { - self.modalInstanceDict.dict.compactMap { - $0.value.synthesizedRef; - }; - }; - - public var presentedModals: [any RNIModal] { - self.modalInstances.compactMap { - $0.modalPresentationState.isPresented ? $0 : nil; - }; - }; - - // MARK: - Methods - // --------------- - - public func register(modal: any RNIModal) { - modal.modalIndex = -1; - modal.modalIndexPrev = -1; - - modal.modalPresentationNotificationDelegate = self; - - self.modalInstanceDict[modal.modalNativeID] = modal; - }; - - public func isRegistered(modal: any RNIModal) -> Bool { - self.modalInstances.contains { - $0.modalNativeID == modal.modalNativeID; - }; - }; - - public func isRegistered(viewController: UIViewController) -> Bool { - self.modalInstances.contains { - $0.presentingViewController === viewController - }; - }; - - public func getModalInstance( - forPresentingViewController viewController: UIViewController - ) -> (any RNIModal)? { - self.modalInstances.first { - $0.presentingViewController === viewController; - }; - }; - - public func getModalInstance( - forPresentedViewController viewController: UIViewController - ) -> (any RNIModal)? { - let presentingModal = self.modalInstances.first { - $0.modalViewController === viewController; - }; - - guard let presentingVC = presentingModal?.modalViewController - else { return nil }; - - return self.getModalInstance(forPresentingViewController: presentingVC); - }; - - public func getModalInstances( - forWindow window: UIWindow - ) -> [any RNIModal] { - - return self.modalInstances.filter { - $0.window === window - }; - }; -}; - -// MARK: RNIModalPresentationNotifiable -// ------------------------------------ - -/// The modal instances will notify the manager when they're about to show/hide -/// a modal. -/// -extension RNIModalManager: RNIModalPresentationNotifiable { - - public func notifyOnModalWillShow(sender: any RNIModal) { - guard let senderWindow = sender.window else { - #if DEBUG - print( - "Error - RNIModalManager.notifyOnModalWillShow" - + " - arg sender.modalNativeID: \(sender.modalNativeID)" - + " - Unable to send event because sender.window is nil" - ); - #endif - return; - }; - - let windowData = RNIModalWindowMapShared.get(forWindow: senderWindow); - guard windowData.nextModalToFocus !== sender else { - #if DEBUG - let nextModalToFocus = windowData.nextModalToFocus!; - print( - "Error - RNIModalManager.notifyOnModalWillShow" - + " - arg sender.modalNativeID: \(sender.modalNativeID)" - + " - nextModalToFocus.modalNativeID: \(nextModalToFocus.modalNativeID)" - + " - possible multiple invokation" - + " - sender is already about to be in focus" - ); - #endif - return; - }; - - let purgeCache = - RNIPresentedVCListCache.beginCaching(forWindow: senderWindow); - - /// `Note:2023-04-10-20-47-52` - /// * The sender will already be in `presentedModalList` despite it being - /// not fully presented yet. - /// - let presentedModalList = - RNIModalUtilities.getPresentedModals(forWindow: senderWindow); - - #if DEBUG - if windowData.nextModalToFocus != nil { - print( - "Warning - RNIModalManager.notifyOnModalWillShow" - + " - arg sender.modalNativeID: \(sender.modalNativeID)" - + " - nextModalToFocus is not nil" - + " - a different modal is about to be focused" - ); - }; - #endif - - windowData.set(nextModalToFocus: sender); - - #if DEBUG - print( - "Log - RNIModalManager.notifyOnModalWillShow" - + " - arg sender.modalNativeID: \(sender.modalNativeID)" - + " - prevModalIndex: \(windowData.modalIndexPrev)" - + " - windowData.modalIndexNext: \(windowData.modalIndexNext_)" - + " - sender.modalIndexPrev: \(sender.modalIndexPrev!)" - + " - sender.modalIndex: \(sender.modalIndex!)" - + " - presentedModalList.count: \(presentedModalList.count)" - ); - #endif - - sender.modalFocusState.set(state: .FOCUSING); - sender.modalPresentationState.set(state: .PRESENTING_UNKNOWN); - - sender.onModalWillFocusNotification(sender: sender); - - presentedModalList.forEach { - guard $0 !== sender, - $0.modalFocusState.state.isFocusedOrFocusing || - $0.modalFocusState.state.isBlurring - else { return }; - - #if DEBUG - print( - "Log - RNIModalManager.notifyOnModalWillShow" - + " - arg sender.modalNativeID: \(sender.modalNativeID)" - + " - notify BLURRING" - + " - for modal.modalNativeID:\($0.modalNativeID)" - + " - for modal.modalIndex:\($0.modalIndex ?? -1)" - ); - #endif - - $0.modalFocusState.set(state: .BLURRING); - $0.onModalWillBlurNotification(sender: sender); - }; - - if let modalToBlur = presentedModalList.secondToLast { - windowData.nextModalToBlur = modalToBlur; - }; - - purgeCache(); - }; - - public func notifyOnModalDidShow(sender: any RNIModal) { - guard let senderWindow = sender.window else { - #if DEBUG - print( - "Error - RNIModalManager.notifyOnModalDidShow" - + " - arg sender.modalNativeID: \(sender.modalNativeID)" - + " - Unable to send event because sender.window is nil" - ); - #endif - return; - }; - - let windowData = RNIModalWindowMapShared.get(forWindow: senderWindow); - let nextModalToFocus = windowData.nextModalToFocus - - if nextModalToFocus == nil { - #if DEBUG - print( - "Error - RNIModalManager.notifyOnModalDidShow" - + " - arg sender.modalNativeID: \(sender.modalNativeID)" - + " - nextModalToFocus: nil" - + " - possible notifyOnModalWillShow not invoked for sender" - ); - #endif - }; - - #if DEBUG - if nextModalToFocus !== sender { - print( - "Warning - RNIModalManager.notifyOnModalDidShow" - + " - arg sender.modalNativeID: \(sender.modalNativeID)" - + " - nextModalToFocus.modalNativeID: \(nextModalToFocus?.modalNativeID ?? "N/A")" - + " - nextModalToFocus !== sender" - + " - a different modal is about to focused" - ); - }; - #endif - - let purgeCache = - RNIPresentedVCListCache.beginCaching(forWindow: senderWindow); - - let presentedModalList = - RNIModalUtilities.getPresentedModals(forWindow: senderWindow); - - windowData.apply(forFocusedModal: sender); - - #if DEBUG - print( - "Log - RNIModalManager.notifyOnModalDidShow" - + " - arg sender.modalNativeID: \(sender.modalNativeID)" - + " - sender.modalIndexPrev: \(sender.modalIndexPrev!)" - + " - sender.modalIndex: \(sender.modalIndex!)" - ); - #endif - - sender.modalFocusState.set(state: .FOCUSED); - sender.modalPresentationState.set(state: .PRESENTED_UNKNOWN); - - sender.onModalDidFocusNotification(sender: sender); - - presentedModalList.forEach { - guard $0 !== sender, - $0.modalFocusState.state.isBlurring - else { return }; - - #if DEBUG - print( - "Log - RNIModalManager.notifyOnModalDidShow" - + " - arg sender.modalNativeID: \(sender.modalNativeID)" - + " - notify BLURRED" - + " - for modal.modalNativeID:\($0.modalNativeID)" - + " - for modal.modalIndex:\($0.modalIndex ?? -1)" - ); - #endif - - $0.modalFocusState.set(state: .BLURRED); - $0.onModalDidBlurNotification(sender: sender); - }; - - // Reset - windowData.nextModalToBlur = nil; - purgeCache(); - }; - - public func notifyOnModalWillHide(sender: any RNIModal) { - guard let senderWindow = sender.window else { - #if DEBUG - print( - "Error - RNIModalManager.notifyOnModalWillHide" - + " - arg sender.modalNativeID: \(sender.modalNativeID)" - + " - Unable to send event because sender.window is nil" - ); - #endif - return; - }; - - let windowData = RNIModalWindowMapShared.get(forWindow: senderWindow); - guard windowData.nextModalToBlur !== sender else { - #if DEBUG - let nextModalToBlur = windowData.nextModalToBlur!; - print( - "Error - RNIModalManager.notifyOnModalWillHide" - + " - arg sender.modalNativeID: \(sender.modalNativeID)" - + " - nextModalToBlur.modalNativeID: \(nextModalToBlur.modalNativeID)" - + " - possible multiple invokation" - + " - sender is already about to be blurred" - ); - #endif - return; - }; - - #if DEBUG - if windowData.nextModalToBlur != nil { - print( - "Warning - RNIModalManager.notifyOnModalWillHide" - + " - arg sender.modalNativeID: \(sender.modalNativeID)" - + " - nextModalToBlur is not nil" - + " - a different modal is about to blur" - ); - }; - #endif - - let purgeCache = - RNIPresentedVCListCache.beginCaching(forWindow: senderWindow); - - let presentedModalList = - RNIModalUtilities.getPresentedModals(forWindow: senderWindow); - - windowData.set(nextModalToBlur: sender); - - #if DEBUG - print( - "Log - RNIModalManager.notifyOnModalWillHide" - + " - arg sender.modalNativeID: \(sender.modalNativeID)" - + " - prevModalIndex: \(windowData.modalIndexPrev)" - + " - windowData.modalIndexNext: \(windowData.modalIndexNext_)" - + " - sender.modalIndexPrev: \(sender.modalIndexPrev!)" - + " - sender.modalIndex: \(sender.modalIndex!)" - ); - #endif - - sender.modalFocusState.set(state: .BLURRING); - sender.modalPresentationState.set(state: .DISMISSING_UNKNOWN); - - sender.onModalWillBlurNotification(sender: sender); - - guard let modalToFocus = presentedModalList.secondToLast else { - purgeCache(); - return; - }; - - #if DEBUG - print( - "Log - RNIModalManager.notifyOnModalWillHide" - + " - arg sender.modalNativeID: \(sender.modalNativeID)" - + " - notify FOCUSING" - + " - for modalToFocus.modalNativeID:\(modalToFocus.modalNativeID)" - + " - for modalToFocus.modalIndex:\(modalToFocus.modalIndex ?? -1)" - ); - #endif - - modalToFocus.modalFocusState.set(state: .FOCUSING); - modalToFocus.onModalWillFocusNotification(sender: sender); - - windowData.nextModalToFocus = modalToFocus; - purgeCache(); - }; - - public func notifyOnModalDidHide(sender: any RNIModal) { - guard let senderWindow = sender.window else { - #if DEBUG - print( - "Error - RNIModalManager.notifyOnModalDidHide" - + " - arg sender.modalNativeID: \(sender.modalNativeID)" - + " - Unable to send event because sender.window is nil" - ); - #endif - return; - }; - - let windowData = RNIModalWindowMapShared.get(forWindow: senderWindow); - guard let nextModalToBlur = windowData.nextModalToBlur else { - #if DEBUG - print( - "Error - RNIModalManager.notifyOnModalDidHide" - + " - arg sender.modalNativeID: \(sender.modalNativeID)" - + " - nextModalToBlur: nil" - + " - possible notifyOnModalWillHide not invoked for sender" - ); - #endif - return; - }; - - #if DEBUG - if nextModalToBlur !== sender { - print( - "Warning - RNIModalManager.notifyOnModalDidHide" - + " - arg sender.modalNativeID: \(sender.modalNativeID)" - + " - nextModalToBlur.modalNativeID: \(nextModalToBlur.modalNativeID)" - + " - nextModalToBlur !== sender" - + " - a different modal is about to be blurred" - ); - }; - #endif - - let purgeCache = - RNIPresentedVCListCache.beginCaching(forWindow: senderWindow); - - windowData.apply(forBlurredModal: sender); - - #if DEBUG - print( - "Log - RNIModalManager.notifyOnModalDidHide" - + " - arg sender.modalNativeID: \(sender.modalNativeID)" - + " - sender.modalIndexPrev: \(sender.modalIndexPrev!)" - + " - sender.modalIndex: \(sender.modalIndex!)" - ); - #endif - - sender.modalFocusState.set(state: .BLURRED); - sender.modalPresentationState.set(state: .DISMISSED); - - sender.onModalDidBlurNotification(sender: sender); - - guard let modalToFocus = windowData.nextModalToFocus else { return }; - - #if DEBUG - print( - "Log - RNIModalManager.notifyOnModalDidHide" - + " - arg sender.modalNativeID: \(sender.modalNativeID)" - + " - notify FOCUSED" - + " - for modal.modalNativeID:\(modalToFocus.modalNativeID)" - + " - for modal.modalIndex:\(modalToFocus.modalIndex ?? -1)" - ); - #endif - - modalToFocus.modalFocusState.set(state: .FOCUSED); - modalToFocus.onModalDidFocusNotification(sender: sender); - - // reset - windowData.nextModalToFocus = nil; - purgeCache(); - }; -}; diff --git a/ios/React Native/RNIModal/RNIModalPresentationNotifiable.swift b/ios/React Native/RNIModal/RNIModalPresentationNotifiable.swift deleted file mode 100644 index 2287b353..00000000 --- a/ios/React Native/RNIModal/RNIModalPresentationNotifiable.swift +++ /dev/null @@ -1,19 +0,0 @@ -// -// RNIModalPresentationNotifiable.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/10/23. -// - -import UIKit - -public protocol RNIModalPresentationNotifiable: AnyObject { - - func notifyOnModalWillShow(sender: any RNIModal); - - func notifyOnModalDidShow(sender: any RNIModal); - - func notifyOnModalWillHide(sender: any RNIModal); - - func notifyOnModalDidHide(sender: any RNIModal); -}; diff --git a/ios/React Native/RNIModal/RNIModalPresentationState.swift b/ios/React Native/RNIModal/RNIModalPresentationState.swift deleted file mode 100644 index 8217fe6c..00000000 --- a/ios/React Native/RNIModal/RNIModalPresentationState.swift +++ /dev/null @@ -1,303 +0,0 @@ -// -// RNIModalPresentationState.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/7/23. -// - -import UIKit - - -public enum RNIModalPresentationState: String, CaseIterable { - - // MARK: - Enum Cases - // ------------------ - - case INITIAL; - - case PRESENTING_PROGRAMMATIC; - case PRESENTING_UNKNOWN; - - case PRESENTED; - case PRESENTED_UNKNOWN; - - case DISMISSING_GESTURE; - case DISMISSING_PROGRAMMATIC; - case DISMISSING_UNKNOWN; - - case DISMISS_GESTURE_CANCELLING; - - case DISMISSED; - - // MARK: - Computed Properties - Private - // ------------------------------------- - - fileprivate var step: Int { - switch self { - case .INITIAL: - return 0; - - case .PRESENTING_PROGRAMMATIC: fallthrough; - case .PRESENTING_UNKNOWN : - return 1; - - case .PRESENTED : fallthrough - case .PRESENTED_UNKNOWN: - return 2; - - case .DISMISSING_GESTURE : fallthrough; - case .DISMISSING_PROGRAMMATIC: fallthrough; - case .DISMISSING_UNKNOWN : - return 3; - - case .DISMISS_GESTURE_CANCELLING: - return 4; - - case .DISMISSED: - return 5; - }; - }; - - // MARK: - Computed Properties - Public - // ------------------------------------ - - public var isDismissing: Bool { - switch self { - case .DISMISSING_UNKNOWN, - .DISMISSING_GESTURE, - .DISMISSING_PROGRAMMATIC: - return true; - - default: - return false; - }; - }; - - public var isDismissingKnown: Bool { - self.isDismissing && self != .DISMISSING_UNKNOWN; - }; - - public var isPresenting: Bool { - switch self { - case .PRESENTING_PROGRAMMATIC, - .PRESENTING_UNKNOWN, - .DISMISS_GESTURE_CANCELLING: - return true; - - default: - return false; - }; - }; - - public var isPresented: Bool { - switch self { - case .PRESENTED, - .PRESENTED_UNKNOWN: - return true; - - default: - return false; - }; - }; - - public var isNotSpecific: Bool { - switch self { - case .PRESENTED_UNKNOWN, - .PRESENTING_UNKNOWN, - .DISMISSING_UNKNOWN: - return true; - - default: - return false; - }; - }; - - // MARK: - Computed Properties - Alias - // ----------------------------------- - - public var isDismissViaGestureCancelling: Bool { - self == .DISMISS_GESTURE_CANCELLING; - }; - - public var isDismissingViaGesture: Bool { - self == .DISMISSING_GESTURE - }; - - public var isDismissed: Bool { - self == .DISMISSED || self == .INITIAL; - }; - - // MARK: - Computed Properties - Composite - // --------------------------------------- - - public var isDismissedOrDismissing: Bool { - self.isDismissed || self.isDismissing; - }; - - public var isPresentedOrPresenting: Bool { - self.isPresented || self.isPresenting; - }; -}; - -public struct RNIModalPresentationStateMachine: RNIDictionaryRepresentable { - - // MARK: - Properties - // ------------------ - - private(set) public var state: RNIModalPresentationState = .INITIAL; - private(set) public var statePrev: RNIModalPresentationState = .INITIAL; - - // MARK: - Properties - Completion Handlers - // ---------------------------------------- - - public var onDismissWillCancel: (() -> Void)?; - public var onDismissDidCancel: (() -> Void)?; - - // MARK: - Properties - // ------------------ - - private var _isInitialPresent: Bool? = nil; - private var _wasCancelledDismiss: Bool = false; - - public var wasCancelledPresent: Bool = false; - public var wasCancelledDismissViaGesture: Bool = false; - - // MARK: - Computed Properties - // --------------------------- - - public var isInitialPresent: Bool { - self._isInitialPresent ?? true; - }; - - public var isPresented: Bool { - self.state.isPresented - }; - - public var wasCancelledDismiss: Bool { - self._wasCancelledDismiss || self.wasCancelledDismissViaGesture; - }; - - public var didChange: Bool { - self.statePrev != self.state; - }; - - // MARK: RNIDictionaryRepresentable - // -------------------------------- - - public var asDictionary: [String : Any] {[ - "state": self.state, - "statePrev": self.statePrev, - "isInitialPresent": self.isInitialPresent, - "isPresented": self.isPresented, - "isDismissed": self.state.isDismissed, - "wasCancelledDismiss": self.wasCancelledDismiss, - "wasCancelledPresent": self.wasCancelledPresent, - "wasCancelledDismissViaGesture": self.wasCancelledDismissViaGesture, - ]}; - - // MARK: - Functions - // ----------------- - - init( - onDismissWillCancel: ( () -> Void)? = nil, - onDismissDidCancel: ( () -> Void)? = nil - ) { - self.onDismissWillCancel = onDismissWillCancel; - self.onDismissDidCancel = onDismissDidCancel; - } - - public mutating func set(state nextState: RNIModalPresentationState){ - let prevState = self.state; - - guard prevState != nextState else { - // early exit if no change - return - }; - - let isBecomingUnknown = !prevState.isNotSpecific && nextState.isNotSpecific; - let isSameStep = prevState.step == nextState.step; - - /// Do not over-write specific/"known state", with non-specific/"unknown - /// state", e.g. - /// - /// * ✅: `PRESENTING_UNKNOWN` -> `PRESENTING_PROGRAMMATIC` - /// * ❌: `DISMISSING_GESTURE` -> `DISMISSING_UNKNOWN` - /// - if isSameStep { - if !isBecomingUnknown { - self.state = nextState; - }; - - #if DEBUG - print( - "Warning - RNIModalPresentationStateMachine.set" - + " - prevState: \(prevState)" - + " - nextState: \(nextState)" - ); - #endif - return; - }; - - self.statePrev = prevState; - - if prevState.isDismissingViaGesture && nextState.isPresenting { - self.wasCancelledDismissViaGesture = true; - self.state = .DISMISS_GESTURE_CANCELLING; - self.onDismissWillCancel?(); - - } else if prevState.isDismissViaGestureCancelling && nextState.isPresented { - self.state = nextState; - self.onDismissDidCancel?(); - - } else { - self.state = nextState; - }; - - self.updateProperties(); - self.resetIfNeeded(); - - #if DEBUG - print( - "Log - RNIModalPresentationStateMachine.set" - + " - statePrev: \(self.statePrev)" - + " - nextState: \(self.state)" - + " - isInitialPresent: \(self.isInitialPresent)" - + " - wasCancelledPresent: \(self.wasCancelledPresent)" - + " - wasCancelledDismiss: \(self.wasCancelledDismiss)" - + " - wasCancelledDismissViaGesture: \(self.wasCancelledDismissViaGesture)" - ); - #endif - }; - - private mutating func updateProperties(){ - let nextState = self.state; - let prevState = self.statePrev; - - if nextState.isPresenting && self._isInitialPresent == nil { - self._isInitialPresent = true; - - } else if nextState.isPresenting && self._isInitialPresent == true { - self._isInitialPresent = false; - }; - - if prevState.isPresenting && nextState.isDismissedOrDismissing { - self.wasCancelledPresent = true; - - } else if prevState.isDismissing && nextState.isPresentedOrPresenting { - self._wasCancelledDismiss = true; - }; - }; - - private mutating func resetIfNeeded(){ - if self.state.isPresented { - self.wasCancelledPresent = false; - - } else if self.state == .DISMISSED { - // reset - self.wasCancelledDismissViaGesture = false; - self.wasCancelledPresent = false; - self._isInitialPresent = nil; - self._wasCancelledDismiss = false; - }; - }; -}; diff --git a/ios/React Native/RNIModal/RNIModalPresentationTrigger.swift b/ios/React Native/RNIModal/RNIModalPresentationTrigger.swift deleted file mode 100644 index c66c3b3d..00000000 --- a/ios/React Native/RNIModal/RNIModalPresentationTrigger.swift +++ /dev/null @@ -1,16 +0,0 @@ -// -// RNIModalPresentationTrigger.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/7/23. -// - -import UIKit - -public enum RNIModalPresentationTrigger: String { - case programmatic; - case gesture; - case request; - case reordering; - case unknown; -}; diff --git a/ios/React Native/RNIModal/RNIModalUtilities.swift b/ios/React Native/RNIModal/RNIModalUtilities.swift deleted file mode 100644 index 79335fb8..00000000 --- a/ios/React Native/RNIModal/RNIModalUtilities.swift +++ /dev/null @@ -1,121 +0,0 @@ -// -// RNIModalUtilities.swift -// react-native-ios-modal -// -// Created by Dominic Go on 5/1/23. -// - -import UIKit - -public class RNIModalUtilities { - - static func getPresentedModals( - forWindow window: UIWindow - ) -> [any RNIModal] { - - let vcItems = - RNIPresentedVCListCache.getPresentedViewControllers(forWindow: window); - - return vcItems.compactMap { - guard let modalVC = $0 as? RNIModalViewController else { return nil }; - return modalVC.modalViewRef; - }; - }; - - static func computeModalIndex( - forWindow window: UIWindow, - forViewController viewController: UIViewController? = nil - ) -> Int { - - let listPresentedVC = - RNIPresentedVCListCache.getPresentedViewControllers(forWindow: window); - - var index = -1; - - for vc in listPresentedVC { - if vc.presentingViewController != nil { - index += 1; - }; - - /// A - no `viewController` arg., keep counting until all items in - /// `listPresentedVC` have been exhausted. - guard viewController == nil else { continue }; - - /// B - `viewController` arg. specified, stop counting if found matching - /// instance of `viewController` in `listPresentedVC`. - guard viewController !== vc - else { break }; - }; - - return index; - }; - - static func computeModalIndex( - forWindow window: UIWindow?, - forViewController viewController: UIViewController? = nil - ) -> Int { - guard let window = window else { return -1 }; - - return Self.computeModalIndex( - forWindow: window, - forViewController: viewController - ); - }; - - static func getPresentedModal( - forPresentingViewController presentingVC: UIViewController, - presentedViewController presentedVC: UIViewController? = nil - ) -> (any RNIModal)? { - - let presentedVC = presentedVC ?? presentingVC.presentedViewController; - - /// A - `presentedVC` is a `RNIModalViewController`. - if let presentedModalVC = presentedVC as? RNIModalViewController { - return presentedModalVC.modalViewRef; - }; - - /// B - `presentingVC` is a `RNIModalViewController`. - if let presentingModalVC = presentingVC as? RNIModalViewController, - let presentingModal = presentingModalVC.modalViewRef, - let presentedModalVC = presentingModal.modalVC, - let presentedModal = presentedModalVC.modalViewRef { - - return presentedModal; - }; - - /// C - `presentedVC` has a corresponding `RNIModalViewControllerWrapper` - /// instance associated to it. - if let presentedVC = presentedVC, - let presentedModalWrapper = RNIModalViewControllerWrapperRegistry.get( - forViewController: presentedVC - ) { - - return presentedModalWrapper; - }; - - /// D - `presentingVC` has a `RNIModalViewControllerWrapper` instance - /// associated to it. - if let presentingModalWrapper = RNIModalViewControllerWrapperRegistry.get( - forViewController: presentingVC - ), - let presentedVC = presentingModalWrapper.modalViewController, - let presentedModalWrapper = RNIModalViewControllerWrapperRegistry.get( - forViewController: presentedVC - ) { - - return presentedModalWrapper; - }; - - let topmostVC = RNIUtilities.getTopmostPresentedViewController( - for: presentingVC.view.window - ); - - if let topmostModalVC = topmostVC as? RNIModalViewController, - let topmostModal = topmostModalVC.modalViewRef { - - return topmostModal; - }; - - return nil; - }; -}; diff --git a/ios/React Native/RNIModal/RNIModalWindowMap.swift b/ios/React Native/RNIModal/RNIModalWindowMap.swift deleted file mode 100644 index 437c4ed4..00000000 --- a/ios/React Native/RNIModal/RNIModalWindowMap.swift +++ /dev/null @@ -1,140 +0,0 @@ -// -// RNIModalWindowMap.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/8/23. -// - -import UIKit - - -internal class RNIWindowMapData { - - // MARK: - Properties - // ------------------ - - weak var window: UIWindow?; - - private(set) var modalIndexCurrent: Int = -1; - private(set) var modalIndexPrev: Int = -1; - private(set) var modalIndexNext: Int?; - - weak var nextModalToFocus: (any RNIModal)?; - weak var nextModalToBlur: (any RNIModal)?; - - #if DEBUG - var modalIndexNext_: String { - self.modalIndexNext == nil ? "N/A" : "\(self.modalIndexNext!)" - }; - #endif - - // MARK: - Functions - // ----------------- - - init(window: UIWindow){ - self.window = window; - }; - - func set(nextModalToFocus modalToFocus: any RNIModal) { - self.nextModalToFocus = modalToFocus; - - let modalIndexCurrent = - RNIModalUtilities.computeModalIndex(forWindow: modalToFocus.window); - - let modalIndexPrev = self.modalIndexCurrent; - - self.modalIndexCurrent = modalIndexCurrent; - self.modalIndexNext = modalIndexCurrent + 1; - self.modalIndexPrev = modalIndexPrev; - }; - - func apply(forFocusedModal focusedModal: any RNIModal) { - self.nextModalToFocus = nil; - - let modalIndexCurrent = - RNIModalUtilities.computeModalIndex(forWindow: focusedModal.window); - - let modalIndexPrev = self.modalIndexCurrent; - - self.modalIndexCurrent = modalIndexCurrent; - self.modalIndexNext = nil; - self.modalIndexPrev = modalIndexPrev; - - focusedModal.modalIndexPrev = modalIndexPrev; - focusedModal.modalIndex = modalIndexCurrent; - }; - - func set(nextModalToBlur modalToBlur: any RNIModal) { - self.nextModalToBlur = modalToBlur; - - let modalIndexCurrent = - RNIModalUtilities.computeModalIndex(forWindow: modalToBlur.window); - - let modalIndexPrev = self.modalIndexCurrent; - - self.modalIndexCurrent = modalIndexCurrent; - self.modalIndexNext = modalIndexCurrent - 1; - self.modalIndexPrev = modalIndexPrev; - }; - - func apply(forBlurredModal blurredModal: any RNIModal) { - self.nextModalToBlur = nil; - - let modalIndexCurrent = - RNIModalUtilities.computeModalIndex(forWindow: blurredModal.window); - - let modalIndexPrev = self.modalIndexCurrent; - - self.modalIndexCurrent = modalIndexCurrent; - self.modalIndexNext = nil; - self.modalIndexPrev = modalIndexPrev; - - blurredModal.modalIndexPrev = modalIndexPrev; - blurredModal.modalIndex = modalIndexCurrent; - }; - - // MARK: - Properties - Computed - // ----------------------------- - - var windowID: String? { - self.window?.synthesizedStringID; - }; -}; - -// MARK: - RNIModalWindowMap -// ------------------------- - -internal let RNIModalWindowMapShared = RNIModalWindowMap.sharedInstance; - -internal class RNIModalWindowMap { - - // MARK: - Properties - Static - // --------------------------- - - static var sharedInstance = RNIModalWindowMap(); - - // MARK: - Properties - // ------------------ - - private(set) var windowDataMap: Dictionary = [:]; - - // MARK: - Functions - // ----------------- - - func set(forWindow window: UIWindow, data: RNIWindowMapData){ - self.windowDataMap[window.synthesizedStringID] = data; - }; - - func get(forWindow window: UIWindow) -> RNIWindowMapData { - guard let windowData = self.windowDataMap[window.synthesizedStringID] else { - // No corresponding "modal index" for window yet, so initialize - // with value - let windowDataNew = RNIWindowMapData(window: window); - self.set(forWindow: window, data: windowDataNew); - - return windowDataNew; - }; - - return windowData; - }; -}; diff --git a/ios/React Native/RNIModal/RNIPresentedViewControllerCache.swift b/ios/React Native/RNIModal/RNIPresentedViewControllerCache.swift deleted file mode 100644 index 915190b2..00000000 --- a/ios/React Native/RNIModal/RNIPresentedViewControllerCache.swift +++ /dev/null @@ -1,72 +0,0 @@ -// -// RNIPresentedViewControllerCache.swift -// react-native-ios-modal -// -// Created by Dominic Go on 5/1/23. -// - -import UIKit - -let RNIPresentedVCListCache = RNIPresentedViewControllerCache.shared; - -class RNIPresentedViewControllerCache { - class Cache { - weak var targetWindow: UIWindow? = nil; - - var cacheRequestCount = 0; - - // note: this retains the vc instances... - var cache: [UIViewController]?; - - func clear(){ - self.targetWindow = nil; - self.cache = nil; - }; - }; - - static let shared = RNIPresentedViewControllerCache(); - - var map: Dictionary = [:]; - - func beginCaching(forWindow window: UIWindow?) -> () -> Void { - guard let window = window else { return {} }; - let windowID = window.synthesizedStringID; - - let cache: Cache = { - if let cache = self.map[windowID] { - return cache; - }; - - let newCache = Cache(); - newCache.targetWindow = window; - newCache.cache = RNIUtilities.getPresentedViewControllers(for: window); - - self.map[windowID] = newCache; - return newCache; - }(); - - cache.cacheRequestCount += 1; - - return { - cache.cacheRequestCount -= 1; - - guard cache.cacheRequestCount <= 0 else { return }; - - cache.clear(); - self.map.removeValue(forKey: windowID); - }; - }; - - func getPresentedViewControllers( - forWindow window: UIWindow? - ) -> [UIViewController] { - guard let windowID = window?.synthesizedStringID, - let cacheContainer = self.map[windowID], - let vcItemsCached = cacheContainer.cache - else { - return RNIUtilities.getPresentedViewControllers(for: window); - }; - - return vcItemsCached; - }; -}; diff --git a/ios/React Native/RNIModalView/RNIModalView.swift b/ios/React Native/RNIModalView/RNIModalView.swift deleted file mode 100644 index 46302371..00000000 --- a/ios/React Native/RNIModalView/RNIModalView.swift +++ /dev/null @@ -1,1284 +0,0 @@ -// -// RNIModalView.swift -// nativeUIModulesTest -// -// Created by Dominic Go on 6/9/20. -// Copyright © 2020 Facebook. All rights reserved. -// - -import Foundation - -public class RNIModalView: - UIView, RNIIdentifiable, RNIModalIdentifiable, RNIModalPresentationNotifying, - RNIModalState, RNIModalPresentation { - - public typealias CompletionHandler = () -> Void; - - enum NativeIDKey: String { - case modalViewContent; - }; - - // MARK: - Properties - RNIIdentifiable - // ------------------------------------ - - public static var synthesizedIdPrefix: String = "modal-id-"; - - // MARK: - Properties - // ------------------ - - weak var bridge: RCTBridge?; - - var modalContentWrapper: RNIWrapperView?; - public var modalVC: RNIModalViewController?; - - public var sheetDetentStringCurrent: String?; - public var sheetDetentStringPrevious: String?; - - // MARK: - Properties - RNIModalPresentationNotifying - // -------------------------------------------------- - - public weak var modalPresentationNotificationDelegate: - RNIModalPresentationNotifiable!; - - // MARK: - Properties - RNIModalIdentifiable - // ----------------------------------------- - - public var modalUserID: String? { - self.modalID as? String - }; - - // MARK: - Properties - RNIModalState - // ---------------------------------- - - public var modalIndex: Int!; - public var modalIndexPrev: Int!; - - public lazy var modalPresentationState = RNIModalPresentationStateMachine( - onDismissWillCancel: { [unowned self] in - let eventData = self.synthesizedBaseEventData; - self.onModalDismissWillCancel?( - eventData.synthesizedJSDictionary - ); - }, - - onDismissDidCancel: { [unowned self] in - let eventData = self.synthesizedBaseEventData; - self.onModalDismissDidCancel?( - eventData.synthesizedJSDictionary - ); - } - ); - - public var modalFocusState = RNIModalFocusStateMachine(); - - // MARK: - Properties - RNIModalPresentation - // ----------------------------------------- - - public var modalViewController: UIViewController? { - self.modalVC; - }; - - public weak var presentingViewController: UIViewController?; - - // MARK: - Properties: React Props - Events - // ---------------------------------------- - - @objc var onModalWillPresent: RCTBubblingEventBlock?; - @objc var onModalDidPresent: RCTBubblingEventBlock?; - - @objc var onModalWillDismiss: RCTBubblingEventBlock?; - @objc var onModalDidDismiss: RCTBubblingEventBlock?; - - @objc var onModalWillShow: RCTBubblingEventBlock?; - @objc var onModalDidShow: RCTBubblingEventBlock?; - - @objc var onModalWillHide: RCTBubblingEventBlock?; - @objc var onModalDidHide: RCTBubblingEventBlock?; - - @objc var onModalWillFocus: RCTBubblingEventBlock?; - @objc var onModalDidFocus: RCTBubblingEventBlock?; - - @objc var onModalWillBlur: RCTBubblingEventBlock?; - @objc var onModalDidBlur: RCTBubblingEventBlock?; - - @objc var onPresentationControllerWillDismiss: RCTBubblingEventBlock?; - @objc var onPresentationControllerDidDismiss: RCTBubblingEventBlock?; - @objc var onPresentationControllerDidAttemptToDismiss: RCTBubblingEventBlock?; - - @objc var onModalDetentDidCompute: RCTBubblingEventBlock?; - @objc var onModalDidChangeSelectedDetentIdentifier: RCTBubblingEventBlock?; - - @objc var onModalDidSnap: RCTBubblingEventBlock?; - - @objc var onModalSwipeGestureStart: RCTBubblingEventBlock?; - @objc var onModalSwipeGestureDidEnd: RCTBubblingEventBlock?; - - @objc var onModalDismissWillCancel: RCTBubblingEventBlock?; - @objc var onModalDismissDidCancel: RCTBubblingEventBlock?; - - // MARK: - Properties: React Props - General - // ----------------------------------------- - - /// user-provided identifier for this modal - @objc var modalID: NSString? = nil; - - @objc var modalContentPreferredContentSize: NSDictionary? { - didSet { - self.modalVC?.setPreferredContentSize(withWindow: self.window); - } - }; - - // MARK: - Properties: React Props - BG-Related - // -------------------------------------------- - - @objc var isModalBGBlurred: Bool = true { - didSet { - guard oldValue != self.isModalBGBlurred else { return }; - self.modalVC?.isBGBlurred = self.isModalBGBlurred; - } - }; - - @objc var isModalBGTransparent: Bool = true { - didSet { - guard oldValue != self.isModalBGTransparent else { return }; - self.modalVC?.isBGTransparent = self.isModalBGTransparent; - } - }; - - @objc var modalBGBlurEffectStyle: NSString = "" { - didSet { - guard oldValue != self.modalBGBlurEffectStyle - else { return }; - - self.modalVC?.blurEffectStyle = self.synthesizedModalBGBlurEffectStyle; - } - }; - - // MARK: - Properties: React Props - Presentation/Transition - // --------------------------------------------------------- - - @objc var modalPresentationStyle: NSString = ""; - - @objc var modalTransitionStyle: NSString = ""; - - @objc var hideNonVisibleModals: Bool = false; - - /// control modal present/dismiss by mounting/un-mounting the react subview - /// * `true`: the modal is presented/dismissed when the view is mounted - /// or unmounted - /// - /// * `false`: the modal is presented/dismissed by calling the functions from - /// js/react - /// - @objc var presentViaMount: Bool = false; - - /// disable swipe gesture recognizer for this modal - @objc var enableSwipeGesture: Bool = true { - didSet { - let newValue = self.enableSwipeGesture; - guard newValue != oldValue else { return }; - - self.modalGestureRecognizer?.isEnabled = newValue; - } - }; - - /// allow modal to be programmatically closed even when not current focused - /// * `true`: the modal can be dismissed even when it's not the topmost - /// presented modal. - /// - /// * `false`: the modal can only be dismissed if it's in focus, otherwise - /// error. - /// - @objc var allowModalForceDismiss: Bool = true; - - @objc var isModalInPresentation: Bool = false { - willSet { - guard #available(iOS 13.0, *), - let vc = self.modalVC - else { return }; - - vc.isModalInPresentation = newValue - } - }; - - // MARK: - Properties: React Props - Sheet-Related - // ----------------------------------------------- - - @objc var modalSheetDetents: NSArray?; - - @objc var sheetPrefersScrollingExpandsWhenScrolledToEdge: Bool = true { - willSet { - guard #available(iOS 15.0, *), - let sheetController = self.sheetPresentationController - else { return }; - - sheetController.prefersScrollingExpandsWhenScrolledToEdge = newValue; - } - }; - - @objc var sheetPrefersEdgeAttachedInCompactHeight: Bool = false { - willSet { - guard #available(iOS 15.0, *), - let sheetController = self.sheetPresentationController - else { return }; - - self.sheetAnimateChangesIfNeeded { - sheetController.prefersEdgeAttachedInCompactHeight = newValue; - }; - } - }; - - @objc var sheetWidthFollowsPreferredContentSizeWhenEdgeAttached: Bool = false { - willSet { - guard #available(iOS 15.0, *), - let sheetController = self.sheetPresentationController - else { return }; - - sheetController - .widthFollowsPreferredContentSizeWhenEdgeAttached = newValue; - } - }; - - @objc var sheetPrefersGrabberVisible: Bool = false { - willSet { - guard #available(iOS 15.0, *), - let sheetController = self.sheetPresentationController - else { return }; - - self.sheetAnimateChangesIfNeeded { - sheetController.prefersGrabberVisible = newValue; - }; - } - }; - - @objc var sheetShouldAnimateChanges: Bool = true; - - @objc var sheetLargestUndimmedDetentIdentifier: String? { - didSet { - guard #available(iOS 15.0, *), - let sheetController = self.sheetPresentationController - else { return }; - - self.sheetAnimateChangesIfNeeded { - sheetController.largestUndimmedDetentIdentifier = - self.synthesizedSheetLargestUndimmedDetentIdentifier; - }; - } - }; - - @objc var sheetPreferredCornerRadius: NSNumber? { - didSet { - let newValue = self.sheetPreferredCornerRadius; - - guard #available(iOS 15.0, *), - oldValue != newValue, - let sheetController = self.sheetPresentationController, - let cornerRadius = newValue?.doubleValue - else { return }; - - self.sheetAnimateChangesIfNeeded { - sheetController.preferredCornerRadius = cornerRadius; - }; - } - }; - - @objc var sheetSelectedDetentIdentifier: String? { - didSet { - let newValue = self.sheetSelectedDetentIdentifier; - - guard oldValue != newValue, - #available(iOS 15.0, *), - let sheetController = self.sheetPresentationController - else { return }; - - let nextDetentID = self.synthesizedSheetSelectedDetentIdentifier; - - self.sheetAnimateChangesIfNeeded { - sheetController.selectedDetentIdentifier = nextDetentID; - }; - - /// Delegate function does not get called when detent is changed via - /// setting `selectedDetentIdentifier`, so invoke manually... - /// - self.sheetPresentationControllerDidChangeSelectedDetentIdentifier( - sheetController - ); - } - }; - - // MARK: - Properties: Synthesized From Props - // ------------------------------------------ - - public var synthesizedModalContentPreferredContentSize: RNIComputableSize? { - guard let dict = self.modalContentPreferredContentSize, - let computableSize = RNIComputableSize(fromDict: dict) - else { return nil }; - - return computableSize; - }; - - public var synthesizedModalPresentationStyle: UIModalPresentationStyle { - let defaultStyle: UIModalPresentationStyle = { - guard #available(iOS 13.0, *) else { return .overFullScreen }; - return .automatic; - }(); - - guard let style = UIModalPresentationStyle( - string: self.modalPresentationStyle as String - ) else { - #if DEBUG - print( - "Error - RNIModalView.synthesizedModalPresentationStyle" - + " - self.modalNativeID: \(self.modalNativeID)" - + " - Unable to parse presentation style string" - + " - modalPresentationStyle: '\(self.modalPresentationStyle)'" - + " - using default style: '\(defaultStyle)'" - ); - #endif - return defaultStyle; - }; - - switch style { - case .automatic, - .pageSheet, - .formSheet, - .fullScreen, - .overFullScreen: - - return style; - - default: - #if DEBUG - print( - "Error - RNIModalView.synthesizedModalPresentationStyle" - + " - self.modalNativeID: \(self.modalNativeID)" - + " - Unsupported presentation style string value" - + " - modalPresentationStyle: '\(self.modalPresentationStyle)'" - + " - Using default style: '\(defaultStyle)'" - ); - #endif - return defaultStyle; - }; - }; - - public var synthesizedModalTransitionStyle: UIModalTransitionStyle { - let defaultStyle: UIModalTransitionStyle = .coverVertical ; - - // TODO:2023-03-22-13-18-14 - Refactor: Move `fromString` to enum init - guard let style = - UIModalTransitionStyle.fromString(self.modalTransitionStyle as String) - else { - #if DEBUG - print( - "Error - RNIModalView.synthesizedModalTransitionStyle " - + " - self.modalNativeID: \(self.modalNativeID)" - + " - Unable to parse string value" - + " - modalPresentationStyle: '\(self.modalPresentationStyle)'" - + " - Using default style: '\(defaultStyle)'" - ); - #endif - return defaultStyle; - }; - - return style; - }; - - public var synthesizedModalBGBlurEffectStyle: UIBlurEffect.Style { - // Provide default value - let defaultStyle: UIBlurEffect.Style = { - guard #available(iOS 13.0, *) else { return .light }; - return .systemThinMaterial; - }(); - - guard let blurStyle = UIBlurEffect.Style( - string: self.modalBGBlurEffectStyle as String - ) else { - #if DEBUG - print( - "Error - RNIModalView.synthesizedModalBGBlurEffectStyle" - + " - self.modalNativeID: \(self.modalNativeID)" - + " - Unable to parse string value" - + " - modalPresentationStyle: '\(self.modalPresentationStyle)'" - + " - Using default style: '\(defaultStyle)'" - ); - #endif - return defaultStyle; - }; - - return blurStyle; - }; - - @available(iOS 15.0, *) - public var synthesizedModalSheetDetents: [UISheetPresentationController.Detent]? { - self.modalSheetDetents?.compactMap { - if let string = $0 as? String, - let detent = UISheetPresentationController.Detent.fromString(string) { - - return detent; - - } else if #available(iOS 16.0, *), - let dict = $0 as? Dictionary { - - let customDetent = RNIModalCustomSheetDetent(forDict: dict) { - _, maximumDetentValue, computedDetentValue, sender in - - let eventData = RNIModalDetentDidComputeEventData( - maximumDetentValue: maximumDetentValue, - computedDetentValue: computedDetentValue, - key: sender.key - ); - - self.onModalDetentDidCompute?( - eventData.synthesizedJSDictionary - ); - }; - - return customDetent?.synthesizedDetent; - }; - - return nil; - }; - }; - - @available(iOS 15.0, *) - public var synthesizedSheetLargestUndimmedDetentIdentifier: - UISheetPresentationController.Detent.Identifier? { - - guard let identifierString = self.sheetLargestUndimmedDetentIdentifier - else { return nil }; - - return UISheetPresentationController.Detent.Identifier( - fromString: identifierString - ); - }; - - @available(iOS 15.0, *) - public var synthesizedSheetSelectedDetentIdentifier: - UISheetPresentationController.Detent.Identifier? { - - guard let identifierString = self.sheetSelectedDetentIdentifier - else { return nil }; - - return UISheetPresentationController.Detent.Identifier( - fromString: identifierString - ); - }; - - // MARK: - Properties: Synthesized - // ------------------------------- - - public var synthesizedBaseEventData: RNIModalBaseEventData { - RNIModalBaseEventData( - reactTag: self.reactTag.intValue, - modalID: self.modalID as? String, - modalData: self.synthesizedModalData - ); - }; - - // MARK: - Properties: Computed - // ---------------------------- - - // TODO: Move to `RNIModal+Helpers` - @available(iOS 15.0, *) - var sheetPresentationController: UISheetPresentationController? { - guard let presentedVC = self.modalViewController else { return nil }; - - switch presentedVC.modalPresentationStyle { - case .popover: - return presentedVC.popoverPresentationController? - .adaptiveSheetPresentationController; - - case .automatic, - .formSheet, - .pageSheet: - return presentedVC.sheetPresentationController; - - default: - return nil; - }; - }; - - @available(iOS 15.0, *) - var currentSheetDetentID: UISheetPresentationController.Detent.Identifier? { - guard let sheetController = self.sheetPresentationController - else { return nil }; - - let detents = sheetController.detents; - - if let selectedDetent = sheetController.selectedDetentIdentifier { - return selectedDetent; - - } else if #available(iOS 16.0, *), - let firstDetent = detents.first { - - /// The default value of `selectedDetentIdentifier` is nil, which means - /// the sheet displays at the smallest detent you specify in detents. - return firstDetent.identifier; - }; - - return nil; - }; - - var currentSheetDetentString: String? { - guard #available(iOS 15.0, *) else { return nil }; - return currentSheetDetentID?.rawValue; - }; - - var isModalViewPresentationNotificationEnabled: Bool { - RNIModalFlagsShared.isModalViewPresentationNotificationEnabled - }; - - var modalGestureRecognizer: UIGestureRecognizer? { - guard let modalVC = self.modalVC, - let controller = modalVC.presentationController, - let gestureRecognizers = controller.presentedView?.gestureRecognizers - else { return nil }; - - return gestureRecognizers.first; - }; - - var debugData: Dictionary { - self.synthesizedModalData.synthesizedJSDictionary - }; - - // MARK: - Init - // ------------ - - init(bridge: RCTBridge) { - super.init(frame: CGRect()); - - self.bridge = bridge; - RNIModalManagerShared.register(modal: self); - }; - - required init?(coder aDecoder: NSCoder) { - super.init(coder: aDecoder); - fatalError("Not implemented"); - }; - - // MARK: - UIKit Lifecycle - // ----------------------- - - public override func didMoveToWindow() { - super.didMoveToWindow(); - - if self.presentViaMount { - try? self.dismissModal(); - }; - }; - - public override func didMoveToSuperview() { - super.didMoveToSuperview(); - - if self.presentViaMount { - try? self.presentModal(); - }; - }; - - // MARK: - React-Native Lifecycle - // ------------------------------ - - public override func insertReactSubview(_ subview: UIView!, at atIndex: Int) { - super.insertReactSubview(subview, at: atIndex); - - guard let wrapperView = subview as? RNIWrapperView, - let nativeID = subview.nativeID, - let nativeIDKey = NativeIDKey(rawValue: nativeID) - else { return }; - - self.initControllers(); - wrapperView.isMovingToParent = true; - - switch nativeIDKey { - case .modalViewContent: - guard self.modalContentWrapper !== wrapperView, - self.modalContentWrapper?.reactTag != wrapperView.reactTag - else { return }; - - if let oldModalContentWrapper = self.modalContentWrapper { - - oldModalContentWrapper.cleanup(); - self.modalContentWrapper = nil; - self.deinitControllers(); - }; - - self.modalContentWrapper = wrapperView; - self.initControllers(); - }; - - wrapperView.removeFromSuperview(); - wrapperView.isMovingToParent = false; - }; - - public override func removeReactSubview(_ subview: UIView!) { - super.removeReactSubview(subview); - }; - - // MARK: - Functions - Private - // ---------------------------- - - private func initControllers(){ - #if DEBUG - print( - "Log - RNIModalView.initControllers" - + " - self.modalNativeID: '\(self.modalNativeID)'" - ); - #endif - - self.modalVC = { - let vc = RNIModalViewController(); - - vc.modalViewRef = self; - vc.lifecycleDelegate = self; - - vc.isBGBlurred = self.isModalBGBlurred; - vc.isBGTransparent = self.isModalBGTransparent; - - vc.blurEffectStyle = self.synthesizedModalBGBlurEffectStyle; - - return vc; - }(); - }; - - private func deinitControllers(){ - #if DEBUG - print( - "Log - RNIModalView.deinitControllers" - + " - self.modalNativeID: '\(self.modalNativeID)'" - ); - #endif - - self.modalVC = nil; - self.presentingViewController = nil; - }; - - private func setupOnModalInitialPresent(){ - guard let panGesture = self.modalGestureRecognizer else { return }; - - panGesture.addTarget(self, - action: #selector(Self.handleGestureRecognizer(_:)) - ); - }; - - private func notifyIfModalDismissCancelled(){ - guard let modalVC = self.modalVC, - let transitionCoordinator = modalVC.transitionCoordinator - else { return }; - - transitionCoordinator.notifyWhenInteractionChanges { - guard $0.isCancelled else { return }; - - self.modalPresentationState.set(state: .DISMISS_GESTURE_CANCELLING); - self.modalPresentationState.wasCancelledDismissViaGesture = true; - - self.modalPresentationNotificationDelegate - .notifyOnModalWillShow(sender: self); - }; - - self.modalVC?.transitionCoordinator?.animate(alongsideTransition: nil) { - guard $0.isCancelled else { return }; - - self.modalPresentationNotificationDelegate - .notifyOnModalDidShow(sender: self); - }; - }; - - @objc private func handleGestureRecognizer(_ sender: UIGestureRecognizer) { - guard let window = self.window else { return }; - - switch sender.state { - case .began: - let gestureEventData = RNIModalSwipeGestureEventData( - position: sender.location(in: window) - ); - - self.onModalSwipeGestureStart?( - gestureEventData.synthesizedJSDictionary - ); - - case .ended: - let gestureEventData = RNIModalSwipeGestureEventData( - position: sender.location(in: window) - ); - - self.onModalSwipeGestureDidEnd?( - gestureEventData.synthesizedJSDictionary - ); - - guard let presentationController = self.modalVC?.presentationController, - let presentedView = presentationController.presentedView, - let positionAnimation = - presentedView.layer.animation(forKey: "position") - else { break }; - - positionAnimation.waitUntiEnd { - let eventData = RNIModalDidSnapEventData( - selectedDetentIdentifier: self.currentSheetDetentString, - modalContentSize: presentedView.bounds.size - ); - - self.onModalDidSnap?( - eventData.synthesizedJSDictionary - ); - }; - - default: break; - }; - }; - - /// `TODO:2023-03-22-12-07-54` - /// * Refactor: Move to `RNIModalManager` - /// - /// helper func to hide/show the other modals that are below level - private func setIsHiddenForViewBelowLevel(_ level: Int, isHidden: Bool){ - let presentedVCList = - RNIPresentedVCListCache.getPresentedViewControllers(forWindow: window); - - for (index, vc) in presentedVCList.enumerated() { - if index < level { - vc.view.isHidden = isHidden; - }; - }; - }; - - @available(iOS 15.0, *) - private func sheetAnimateChangesIfNeeded(_ block: () -> Void){ - guard let sheetController = self.sheetPresentationController - else { return }; - - if self.sheetShouldAnimateChanges { - sheetController.animateChanges { - block(); - }; - - } else { - block(); - }; - }; - - @available(iOS 15.0, *) - private func applyModalSheetProps( - to sheetController: UISheetPresentationController - ){ - - if let detents = self.synthesizedModalSheetDetents, detents.count >= 1 { - sheetController.detents = detents; - }; - - sheetController.prefersScrollingExpandsWhenScrolledToEdge = - self.sheetPrefersScrollingExpandsWhenScrolledToEdge; - - sheetController.prefersEdgeAttachedInCompactHeight = - self.sheetPrefersEdgeAttachedInCompactHeight; - - sheetController.widthFollowsPreferredContentSizeWhenEdgeAttached = - self.sheetWidthFollowsPreferredContentSizeWhenEdgeAttached; - - sheetController.prefersGrabberVisible = self.sheetPrefersGrabberVisible; - - sheetController.largestUndimmedDetentIdentifier = - self.synthesizedSheetLargestUndimmedDetentIdentifier; - - if let cornerRadius = self.sheetPreferredCornerRadius?.doubleValue { - sheetController.preferredCornerRadius = cornerRadius; - }; - - sheetController.selectedDetentIdentifier = - self.synthesizedSheetSelectedDetentIdentifier; - }; - - // MARK: - Functions - Public - // -------------------------- - - public func presentModal( - animated: Bool = true, - completion: CompletionHandler? = nil - ) throws { - guard self.window != nil else { - throw RNIModalError( - code: .runtimeError, - message: "Guard check failed, window is nil", - debugData: self.debugData - ); - }; - - guard !self.computedIsModalPresented else { - throw RNIModalError( - code: .modalAlreadyVisible, - message: "Guard check failed, modal already presented", - debugData: self.debugData - ); - }; - - let presentedViewControllers = - RNIPresentedVCListCache.getPresentedViewControllers(forWindow: window); - - guard let topMostPresentedVC = presentedViewControllers.last else { - throw RNIModalError( - code: .runtimeError, - message: "Guard check failed, could not get topMostPresentedVC", - debugData: self.debugData - ); - }; - - guard let modalVC = self.modalVC else { - throw RNIModalError( - code: .runtimeError, - message: "Guard check failed, could not get modalVC", - debugData: self.debugData - ); - }; - - modalVC.modalTransitionStyle = self.synthesizedModalTransitionStyle; - modalVC.modalPresentationStyle = self.synthesizedModalPresentationStyle; - - if #available(iOS 15.0, *), - let sheetController = self.sheetPresentationController { - - sheetController.delegate = self; - self.applyModalSheetProps(to: sheetController); - }; - - #if DEBUG - print( - "Log - RNIModalView.presentModal - Start presenting" - + " - self.reactTag: \(self.reactTag ?? -1)" - + " - self.modalNativeID: \(self.modalNativeID)" - + " - self.modalIndex: \(self.modalIndex!)" - + " - self.modalID: \(self.modalID ?? "N/A")" - + " - self.presentationStyle: \(self.synthesizedModalPresentationStyle)" - + " - self.transitionStyle: \(self.synthesizedModalTransitionStyle)" - ); - #endif - - // Temporarily disable swipe gesture while it's being presented - self.modalGestureRecognizer?.isEnabled = false; - - self.presentingViewController = topMostPresentedVC; - - /// set specific "presenting" state - self.modalPresentationState.set(state: .PRESENTING_PROGRAMMATIC); - - self.onModalWillPresent?( - self.synthesizedBaseEventData.synthesizedJSDictionary - ); - - topMostPresentedVC.present(modalVC, animated: animated) { [unowned self] in - - // Become the modal's presentation delegate after it has been presented - // in order to not override system-defined default modal behavior - modalVC.presentationController?.delegate = self; - - // Reset swipe gesture before it was temporarily disabled - self.modalGestureRecognizer?.isEnabled = self.enableSwipeGesture; - - self.modalPresentationState.set(state: .PRESENTED); - - self.onModalDidPresent?( - self.synthesizedBaseEventData.synthesizedJSDictionary - ); - - completion?(); - - #if DEBUG - print( - "Log - RNIModalView.presentModal - Present modal finished" - + " - self.modalNativeID: \(self.modalNativeID)" - + " - self.modalIndex: \(self.modalIndex!)" - + " - self.modalID: \(self.modalID ?? "N/A")" - ); - #endif - }; - }; - - public func dismissModal( - animated: Bool = true, - completion: CompletionHandler? = nil - ) throws { - guard self.computedIsModalPresented else { - throw RNIModalError( - code: .modalAlreadyHidden, - message: "Guard check failed, modal already dismissed", - debugData: self.debugData - ); - }; - - guard let modalVC = self.modalVC else { - throw RNIModalError( - code: .runtimeError, - message: "Guard check failed, Unable to get modalVC", - debugData: self.debugData - ); - }; - - let isModalInFocus = self.computedIsModalInFocus; - - let shouldDismiss = isModalInFocus - ? true - : self.allowModalForceDismiss; - - guard shouldDismiss else { - throw RNIModalError( - code: .dismissRejected, - message: "Guard check failed, shouldDismiss prop is false", - debugData: self.debugData - ); - }; - - /// TODO:2023-03-22-12-12-05 - Remove? - let presentedVC: UIViewController = isModalInFocus - ? modalVC - : modalVC.presentingViewController! - - - #if DEBUG - print( - "Log - RNIModalView.dismissModal" - + " - self.modalNativeID: \(self.modalNativeID)" - + " - Start dismissing modal" - ); - #endif - - self.modalGestureRecognizer?.isEnabled = false; - - /// set specific "dismissing" state - self.modalPresentationState.set(state: .DISMISSING_PROGRAMMATIC); - - self.onModalWillDismiss?( - self.synthesizedBaseEventData.synthesizedJSDictionary - ); - - presentedVC.dismiss(animated: animated){ - self.modalPresentationState.set(state: .DISMISSED); - - self.onModalDidDismiss?( - self.synthesizedBaseEventData.synthesizedJSDictionary - ); - - completion?(); - - #if DEBUG - print( - "Log - RNIModalView.dismissModal" - + " - self.modalNativeID: \(self.modalNativeID)" - + " - Dismiss modal finished" - ); - #endif - }; - }; -}; - -// MARK: - UIAdaptivePresentationControllerDelegate -// ------------------------------------------------ - -/// `Note:2023-03-31-16-48-10` -/// -/// * The "blur/focus"-related events in -/// `UIAdaptivePresentationControllerDelegate` only fire in response to user -/// gestures (i.e. if the user swiped the modal away). -/// -/// * In other words, if the modal was closed programmatically, the -/// `UIAdaptivePresentationControllerDelegate`-related events will not get -/// invoked. -/// -extension RNIModalView: UIAdaptivePresentationControllerDelegate { - - /// `Note:2023-03-31-17-01-57` - /// - /// * This gets called whenever the user starts swiping the modal down, - /// regardless of whether or not the swipe action was cancelled half-way - /// through. - /// - /// * Only called when the sheet is dismissed by DRAGGING. - /// - /// - /// `Note:2023-04-01-14-52-05` - /// - /// * Invocation history when a modal is dismissed via a swipe gesture, but - /// was cancelled half-way - /// - /// * A - Swipe dismiss gesture begin... - /// * 1 - `presentationControllerWillDismiss - /// * 2 - `viewWillDisappear` - /// * B - Swipe dismiss gesture cancelled... - /// * 3 - `viewWillAppear` - /// * 4 - `viewDidAppear` - /// - public func presentationControllerWillDismiss( - _ presentationController: UIPresentationController - ) { - self.modalPresentationState.set(state: .DISMISSING_GESTURE); - - #if DEBUG - print( - "Log - RNIModalView+UIAdaptivePresentationControllerDelegate" - + " - RNIModalView.presentationControllerWillDismiss" - + " - self.modalNativeID: \(self.modalNativeID)" - + " - self.modalIndex: \(self.modalIndex!)" - ); - #endif - }; - - public func presentationControllerDidDismiss( - _ presentationController: UIPresentationController - ) { - self.modalPresentationNotificationDelegate - .notifyOnModalDidHide(sender: self); - - #if DEBUG - print( - "Log - RNIModalView+UIAdaptivePresentationControllerDelegate" - + " - RNIModalView.presentationControllerDidDismiss" - + " - self.modalNativeID: \(self.modalNativeID)" - ); - #endif - }; - - /// `Note:2023-04-07-01-28-57` - /// No other "view controller"-related lifecycle method was trigger in - /// response to this event being invoked. - /// - public func presentationControllerDidAttemptToDismiss( - _ presentationController: UIPresentationController - ) { - - #if DEBUG - print( - "Log - RNIModalView+UIAdaptivePresentationControllerDelegate" - + " - RNIModalView.presentationControllerDidAttemptToDismiss" - + " - self.modalNativeID: \(self.modalNativeID)" - + " - self.modalIndex: \(self.modalIndex!)" - ); - #endif - }; -}; - -// MARK: - UISheetPresentationControllerDelegate -// --------------------------------------------- - -@available(iOS 15.0, *) -extension RNIModalView: UISheetPresentationControllerDelegate { - - /// `Note:2023-04-22-03-50-59` - /// - /// * This function gets invoked when the sheet has snapped into a detent - /// - /// * However, we don't get notified whenever the user is currently dragging - /// the sheet. - /// - /// * The `presentedViewController.transitionCoordinator` is only available - /// during modal presentation and dismissal. - /// - /// - public func sheetPresentationControllerDidChangeSelectedDetentIdentifier( - _ sheetPresentationController: UISheetPresentationController - ) { - let currentDetentID = self.currentSheetDetentID; - - self.sheetDetentStringPrevious = self.sheetDetentStringCurrent; - self.sheetDetentStringCurrent = currentDetentID?.description; - - #if DEBUG - print( - "Log - RNIModalView+UISheetPresentationControllerDelegate" - + " - sheetPresentationControllerDidChangeSelectedDetentIdentifier" - + " - sheetDetentStringPrevious: \(self.sheetDetentStringPrevious ?? "N/A")" - + " - sheetDetentStringCurrent: \(self.sheetDetentStringCurrent ?? "N/A")" - ); - #endif - - let eventData = RNIModalDidChangeSelectedDetentIdentifierEventData( - sheetDetentStringPrevious: self.sheetDetentStringPrevious, - sheetDetentStringCurrent: self.sheetDetentStringCurrent - ); - - self.onModalDidChangeSelectedDetentIdentifier?( - eventData.synthesizedJSDictionary - ); - }; -}; - -// MARK: Extension: RNIModalRequestable -// ------------------------------------ - -extension RNIModalView: RNIModalRequestable { - - public func requestModalToShow( - sender: Any, - animated: Bool, - completion: @escaping () -> Void - ) throws { - try self.presentModal(animated: animated, completion: completion); - }; - - public func requestModalToHide( - sender: Any, - animated: Bool, - completion: @escaping () -> Void - ) throws { - try self.dismissModal(animated: animated, completion: completion); - }; -}; - -// MARK: - RNIViewControllerLifeCycleNotifiable -// -------------------------------------------- - -extension RNIModalView: RNIViewControllerLifeCycleNotifiable { - - public func viewWillAppear(sender: UIViewController, animated: Bool) { - guard sender.isBeingPresented else { return }; - self.modalPresentationState.set(state: .PRESENTING_UNKNOWN); - - if self.modalPresentationState.didChange { - self.onModalWillShow?( - self.synthesizedBaseEventData.synthesizedJSDictionary - ); - }; - - if self.isModalViewPresentationNotificationEnabled { - self.modalPresentationNotificationDelegate - .notifyOnModalWillShow(sender: self); - }; - - if self.modalPresentationState.isInitialPresent { - self.setupOnModalInitialPresent(); - }; - }; - - public func viewDidAppear(sender: UIViewController, animated: Bool) { - guard sender.isBeingPresented else { return }; - self.modalPresentationState.set(state: .PRESENTED_UNKNOWN); - - if self.modalPresentationState.didChange { - self.onModalDidShow?( - self.synthesizedBaseEventData.synthesizedJSDictionary - ); - }; - - if self.isModalViewPresentationNotificationEnabled { - self.modalPresentationNotificationDelegate - .notifyOnModalDidShow(sender: self); - }; - }; - - public func viewWillDisappear(sender: UIViewController, animated: Bool) { - guard sender.isBeingDismissed else { return }; - self.modalPresentationState.set(state: .DISMISSING_UNKNOWN); - - if self.modalPresentationState.didChange { - self.onModalWillHide?( - self.synthesizedBaseEventData.synthesizedJSDictionary - ); - }; - - if self.isModalViewPresentationNotificationEnabled { - self.modalPresentationNotificationDelegate - .notifyOnModalWillHide(sender: self); - }; - - self.notifyIfModalDismissCancelled(); - }; - - public func viewDidDisappear(sender: UIViewController, animated: Bool) { - guard sender.isBeingDismissed else { return }; - self.modalPresentationState.set(state: .DISMISSED); - - if self.modalPresentationState.didChange { - self.onModalDidHide?( - self.synthesizedBaseEventData.synthesizedJSDictionary - ); - }; - - if self.isModalViewPresentationNotificationEnabled { - self.modalPresentationNotificationDelegate - .notifyOnModalDidHide(sender: self); - }; - - self.deinitControllers(); - }; -}; - - -// MARK: Extension: RNIModalFocusNotifiable -// ---------------------------------------- - -/// `Note:2023-03-31-17-51-56` -extension RNIModalView: RNIModalFocusNotifiable { - - public func onModalWillFocusNotification(sender: any RNIModal) { - guard self.modalFocusState.didChange else { return }; - - let eventData = RNIOnModalFocusEventData( - modalData: self.synthesizedBaseEventData, - senderInfo: sender.synthesizedModalData, - isInitial: sender === self - ); - - self.onModalWillFocus?( - eventData.synthesizedJSDictionary - ); - }; - - public func onModalDidFocusNotification(sender: any RNIModal) { - guard self.modalFocusState.didChange else { return }; - - let eventData = RNIOnModalFocusEventData( - modalData: self.synthesizedBaseEventData, - senderInfo: sender.synthesizedModalData, - isInitial: sender === self - ); - - self.onModalDidFocus?( - eventData.synthesizedJSDictionary - ); - - #if DEBUG - print( - "Log - RNIModalView.onModalDidFocusNotification" - + " - self.modalNativeID: \(self.modalNativeID)" - + " - self.modalIndex: \(self.modalIndex!)" - + " - arg sender.modalNativeID: \(sender.modalNativeID)" - + " - arg sender.modalIndex: \(sender.modalIndex!)" - ); - #endif - - }; - - public func onModalWillBlurNotification(sender: any RNIModal) { - guard self.modalFocusState.didChange else { return }; - - let eventData = RNIOnModalFocusEventData( - modalData: self.synthesizedBaseEventData, - senderInfo: sender.synthesizedModalData, - isInitial: sender === self - ); - - self.onModalWillBlur?( - eventData.synthesizedJSDictionary - ); - }; - - public func onModalDidBlurNotification(sender: any RNIModal) { - guard self.modalFocusState.didChange else { return }; - - let eventData = RNIOnModalFocusEventData( - modalData: self.synthesizedBaseEventData, - senderInfo: sender.synthesizedModalData, - isInitial: sender === self - ); - - self.onModalDidBlur?( - eventData.synthesizedJSDictionary - ); - - #if DEBUG - print( - "Log - RNIModalView.onModalDidBlurNotification" - + " - self.modalNativeID: \(self.modalNativeID)" - + " - self.modalIndex: \(self.modalIndex!)" - + " - arg sender.modalNativeID: \(sender.modalNativeID)" - + " - arg sender.modalIndex: \(sender.modalIndex!)" - ); - #endif - }; -}; diff --git a/ios/React Native/RNIModalView/RNIModalViewController.swift b/ios/React Native/RNIModalView/RNIModalViewController.swift deleted file mode 100644 index 941f1640..00000000 --- a/ios/React Native/RNIModalView/RNIModalViewController.swift +++ /dev/null @@ -1,369 +0,0 @@ -// -// RNIModalViewController.swift -// nativeUIModulesTest -// -// Created by Dominic Go on 6/9/20. -// Copyright © 2020 Facebook. All rights reserved. -// - -import Foundation - -public class RNIModalViewController: UIViewController { - - // MARK: - Properties - // ------------------ - - weak var modalViewRef: RNIModalView?; - weak var lifecycleDelegate: RNIViewControllerLifeCycleNotifiable?; - - var isBGTransparent: Bool = true { - didSet { - guard oldValue != self.isBGTransparent else { return }; - self.updateBackgroundTransparency(); - self.updateBackgroundBlur(); - } - }; - var isBGBlurred: Bool = true { - didSet { - guard oldValue != self.isBGBlurred else { return }; - self.updateBackgroundBlur(); - } - }; - - private(set) public var prevBounds: CGRect?; - - private var initialSize: CGSize?; - - // MARK: - Properties - Computed - // ----------------------------- - - var modalID: String? { - self.modalViewRef?.modalID as? String - }; - - var modalContentWrapper: RNIWrapperView? { - self.modalViewRef?.modalContentWrapper; - }; - - var computablePreferredContentSize: RNIComputableSize? { - self.modalViewRef?.synthesizedModalContentPreferredContentSize; - }; - - var shouldUpdateContentSize: Bool { - guard let computableSize = self.computablePreferredContentSize, - case .current = computableSize.mode - else { return true }; - - return false; - }; - - // MARK: - Properties - // ------------------ - - var blurEffectView: UIVisualEffectView? = nil; - - var blurEffectStyle: UIBlurEffect.Style? { - didSet { - let didChange = oldValue != blurEffectStyle; - let isPresented = self.presentingViewController != nil; - - guard didChange && isPresented, - let blurEffectStyle = self.blurEffectStyle else { return }; - - #if DEBUG - print( - "Log - RNIModalViewController.blurEffectStyle - didSet" - + " - modalNativeID: '\(self.modalViewRef?.modalNativeID ?? "N/A")'" - + " - oldValue: '\(oldValue!.description)'" - + " - newValue: '\(blurEffectStyle.description)'" - ); - #endif - - self.updateBackgroundBlur(); - } - }; - - // MARK: - View Controller Lifecycle - // --------------------------------- - - public override func viewDidLoad() { - super.viewDidLoad(); - - self.view = { - let view = UIView(); - view.autoresizingMask = [.flexibleHeight, .flexibleWidth]; - - return view; - }(); - - if let modalContentWrapper = self.modalContentWrapper { - self.view.addSubview(modalContentWrapper); - modalContentWrapper.notifyForBoundsChange(size: self.view.bounds.size); - }; - - self.updateBackgroundTransparency(); - self.updateBackgroundBlur(); - - self.lifecycleDelegate?.viewDidLoad(sender: self); - }; - - public override func viewDidLayoutSubviews(){ - super.viewDidLayoutSubviews(); - - let didChangeBounds: Bool = { - guard let prevBounds = self.prevBounds else { return true }; - return !prevBounds.equalTo(self.view.bounds); - }(); - - guard didChangeBounds, - let modalContentWrapper = self.modalContentWrapper - else { return }; - - let nextBounds = self.view.bounds; - - let prevBounds = self.prevBounds; - self.prevBounds = nextBounds; - - #if DEBUG - print( - "Log - RNIModalViewController.viewDidLayoutSubviews" - + " - modalNativeID: '\(self.modalViewRef?.modalNativeID ?? "N/A")'" - + " - self.prevBounds: \(String(describing: prevBounds))" - + " - nextBounds: \(nextBounds)" - ); - #endif - - if self.shouldUpdateContentSize { - modalContentWrapper.notifyForBoundsChange(size: nextBounds.size); - modalContentWrapper.center = self.view.center; - }; - - self.lifecycleDelegate?.viewDidLayoutSubviews(sender: self); - }; - - public override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated); - - self.lifecycleDelegate? - .viewWillAppear(sender: self, animated: animated); - - self.setPreferredContentSize(); - - #if DEBUG - print( - "Log - RNIModalViewController.viewWillAppear" - + " - arg animated: \(animated)" - + " - self.modalNativeID: \(self.modalViewRef?.modalNativeID ?? "N/A")" - + " - self.isBeingPresented: \(self.isBeingPresented)" - ); - #endif - }; - - public override func viewDidAppear(_ animated: Bool) { - super.viewDidAppear(animated); - - self.lifecycleDelegate? - .viewDidAppear(sender: self, animated: animated); - - #if DEBUG - print( - "Log - RNIModalViewController.viewDidAppear" - + " - arg animated: \(animated)" - + " - self.modalNativeID: \(self.modalViewRef?.modalNativeID ?? "N/A")" - + " - self.isBeingPresented: \(self.isBeingPresented)" - ); - #endif - }; - - public override func viewWillDisappear(_ animated: Bool) { - super.viewWillDisappear(animated); - - self.lifecycleDelegate? - .viewWillDisappear(sender: self, animated: animated); - - #if DEBUG - print( - "Log - RNIModalViewController.viewWillDisappear" - + " - arg animated: \(animated)" - + " - self.modalNativeID: \(self.modalViewRef?.modalNativeID ?? "N/A")" - + " - self.isBeingDismissed: \(self.isBeingDismissed)" - + " - self.transitionCoordinator: \(String(describing: self.transitionCoordinator))" - + " - self.transitioningDelegate: \(String(describing: self.transitioningDelegate))" - ); - #endif - }; - - public override func viewDidDisappear(_ animated: Bool) { - super.viewDidDisappear(animated); - - self.lifecycleDelegate? - .viewDidDisappear(sender: self, animated: animated); - - #if DEBUG - print( - "Log - RNIModalViewController.viewDidDisappear" - + " - arg animated: \(animated)" - + " - self.modalNativeID: \(self.modalViewRef?.modalNativeID ?? "N/A")" - + " - self.isBeingDismissed: \(self.isBeingDismissed)" - ); - #endif - }; - - public override func willMove(toParent parent: UIViewController?) { - super.willMove(toParent: parent); - - self.lifecycleDelegate?.willMove(sender: self, toParent: parent); - - #if DEBUG - print( - "Log - RNIModalViewController.willMove" - + " - arg parent == nil: \(parent == nil)" - + " - self.modalNativeID: \(self.modalViewRef?.modalNativeID ?? "N/A")" - + " - self.isMovingFromParent: \(self.isMovingFromParent)" - + " - self.isMovingToParent: \(self.isMovingToParent)" - ); - #endif - }; - - public override func didMove(toParent parent: UIViewController?) { - super.didMove(toParent: parent); - - self.lifecycleDelegate?.didMove(sender: self, toParent: parent); - - #if DEBUG - print( - "Log - RNIModalViewController.willMove" - + " - arg parent == nil: \(parent == nil)" - + " - self.modalNativeID: \(self.modalViewRef?.modalNativeID ?? "N/A")" - + " - self.isMovingFromParent: \(self.isMovingFromParent)" - + " - self.isMovingToParent: \(self.isMovingToParent)" - ); - #endif - }; - - // MARK: - Functions - // ----------------- - - func setPreferredContentSize(withWindow window: UIWindow? = nil){ - guard let computableSize = self.computablePreferredContentSize - else { return }; - - if self.initialSize == nil || self.initialSize!.isZero { - self.initialSize = self.view.bounds.size; - }; - - let targetSize: CGSize = { - let viewSize = self.initialSize!; - let screenSize = window?.bounds.size; - - let size = viewSize.isZero ? screenSize : viewSize; - return size ?? viewSize; - }(); - - switch computableSize.mode { - case .current: - guard let modalContentWrapper = self.modalContentWrapper - else { return }; - - self.preferredContentSize = self.view.systemLayoutSizeFitting( - modalContentWrapper.bounds.size - ); - - default: - self.preferredContentSize = computableSize.compute( - withTargetSize: targetSize, currentSize: .zero - ); - }; - }; - - // MARK: - Private Functions - // ------------------------- - - private func updateBackgroundTransparency(){ - self.view.backgroundColor = { - if self.isBGTransparent { - return .none; - }; - - guard #available(iOS 13, *) else { return .white }; - return .systemBackground; - }(); - - #if DEBUG - print( - "Log - RNIModalViewController.updateBackgroundTransparency" - + " - modalNativeID: '\(self.modalViewRef?.modalNativeID ?? "N/A")'" - + " - self.isBGTransparent: \(self.isBGTransparent)" - ); - #endif - }; - - private func initBackgroundBlur(){ - guard let blurEffectStyle = self.blurEffectStyle else { return }; - - let blurEffect = UIBlurEffect(style: blurEffectStyle); - - let blurEffectView = UIVisualEffectView(effect: blurEffect); - self.blurEffectView = blurEffectView; - - blurEffectView.frame = self.view.bounds; - blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]; - - self.view.insertSubview(blurEffectView, at: 0); - - #if DEBUG - print( - "Log - RNIModalViewController.initBackgroundBlur" - + " - modalNativeID: '\(self.modalViewRef?.modalNativeID ?? "N/A")'" - + " - self.blurEffectStyle: \(blurEffect)" - ); - #endif - }; - - private func removeBackgroundBlur(){ - self.blurEffectView?.removeFromSuperview(); - self.blurEffectView = nil; - }; - - private func updateBackgroundBlur(){ - guard self.isViewLoaded, - let blurEffectStyle = self.blurEffectStyle - else { return }; - - /// bg is transparent, and blur is enabled - let shouldUpdateBackgroundBlur = - self.isBGTransparent && self.isBGBlurred ; - - /// bg is not transparent or blurred - let shouldRemoveBackgroundBlur = - !self.isBGTransparent || !self.isBGBlurred; - - let shouldInitBackgroundBlur = - self.blurEffectView == nil && shouldUpdateBackgroundBlur; - - // 01 - Init background blur first if needed - if shouldInitBackgroundBlur { - self.initBackgroundBlur(); - }; - - if shouldUpdateBackgroundBlur, - let blurEffectView = self.blurEffectView { - - // 02-A - Update background blur - blurEffectView.effect = UIBlurEffect(style: blurEffectStyle); - - #if DEBUG - print( - "Log - RNIModalViewController.updateBackgroundBlur" - + " - modalNativeID: '\(self.modalViewRef?.modalNativeID ?? "N/A")'" - + " - blurEffectStyle: \(blurEffectStyle)" - ); - #endif - - } else if shouldRemoveBackgroundBlur { - // 02-B - background is not transparent or blurred so remove - // background blur - self.removeBackgroundBlur(); - }; - }; -}; diff --git a/ios/React Native/RNIModalView/RNIModalViewError.swift b/ios/React Native/RNIModalView/RNIModalViewError.swift deleted file mode 100644 index 0fedb90b..00000000 --- a/ios/React Native/RNIModalView/RNIModalViewError.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// RNIModalViewError.swift -// nativeUIModulesTest -// -// Created by Dominic Go on 6/26/20. -// - -import Foundation - -public enum RNIModalViewError: String, CaseIterable { - case modalAlreadyPresented; - case modalAlreadyDismissed; - case modalDismissFailedNotInFocus; - - var errorMessage: String { - RNIModalViewError.getErrorMessage(for: self); - }; - - static func withLabel(_ label: String) -> RNIModalViewError? { - return self.allCases.first{ $0.rawValue == label }; - }; - - static func getErrorMessage(for errorCase: RNIModalViewError) -> String { - switch errorCase { - case .modalAlreadyDismissed: - return "Cannot dismiss modal because it's currently not presented"; - - case .modalAlreadyPresented: - return "Cannot present modal because it's already presented"; - - case .modalDismissFailedNotInFocus: - return "Cannot dismiss modal because it's not in focus. Enable allowModalForceDismiss to dismiss."; - }; - }; -}; diff --git a/ios/React Native/RNIModalView/RNIModalViewManager.m b/ios/React Native/RNIModalView/RNIModalViewManager.m deleted file mode 100644 index c073147e..00000000 --- a/ios/React Native/RNIModalView/RNIModalViewManager.m +++ /dev/null @@ -1,83 +0,0 @@ - -#import - -@interface RCT_EXTERN_MODULE(RNIModalViewManager, RCTViewManager) - -// MARK: - Props - Callbacks/Events -// -------------------------------- - -RCT_EXPORT_VIEW_PROPERTY(onModalWillPresent, RCTBubblingEventBlock); -RCT_EXPORT_VIEW_PROPERTY(onModalDidPresent, RCTBubblingEventBlock); - -RCT_EXPORT_VIEW_PROPERTY(onModalWillDismiss, RCTBubblingEventBlock); -RCT_EXPORT_VIEW_PROPERTY(onModalDidDismiss, RCTBubblingEventBlock); - -RCT_EXPORT_VIEW_PROPERTY(onModalWillShow, RCTBubblingEventBlock); -RCT_EXPORT_VIEW_PROPERTY(onModalDidShow, RCTBubblingEventBlock); - -RCT_EXPORT_VIEW_PROPERTY(onModalWillHide, RCTBubblingEventBlock); -RCT_EXPORT_VIEW_PROPERTY(onModalDidHide, RCTBubblingEventBlock); - -RCT_EXPORT_VIEW_PROPERTY(onModalWillFocus, RCTBubblingEventBlock); -RCT_EXPORT_VIEW_PROPERTY(onModalDidFocus, RCTBubblingEventBlock); - -RCT_EXPORT_VIEW_PROPERTY(onModalWillBlur, RCTBubblingEventBlock) -RCT_EXPORT_VIEW_PROPERTY(onModalDidBlur, RCTBubblingEventBlock) - -RCT_EXPORT_VIEW_PROPERTY(onPresentationControllerWillDismiss, RCTBubblingEventBlock) -RCT_EXPORT_VIEW_PROPERTY(onPresentationControllerDidDismiss, RCTBubblingEventBlock) -RCT_EXPORT_VIEW_PROPERTY(onPresentationControllerDidAttemptToDismiss, RCTBubblingEventBlock); - -RCT_EXPORT_VIEW_PROPERTY(onModalDetentDidCompute, RCTBubblingEventBlock) -RCT_EXPORT_VIEW_PROPERTY(onModalDidChangeSelectedDetentIdentifier, RCTBubblingEventBlock); - -RCT_EXPORT_VIEW_PROPERTY(onModalDidSnap, RCTBubblingEventBlock); - -RCT_EXPORT_VIEW_PROPERTY(onModalSwipeGestureStart, RCTBubblingEventBlock); -RCT_EXPORT_VIEW_PROPERTY(onModalSwipeGestureDidEnd, RCTBubblingEventBlock); - -RCT_EXPORT_VIEW_PROPERTY(onModalDismissWillCancel, RCTBubblingEventBlock); -RCT_EXPORT_VIEW_PROPERTY(onModalDismissDidCancel, RCTBubblingEventBlock); - -// MARK: - Value Props - General -// ----------------------------- - -RCT_EXPORT_VIEW_PROPERTY(modalID, NSString); -RCT_EXPORT_VIEW_PROPERTY(modalContentPreferredContentSize, NSDictionary); - -// MARK: - Value Props - BG-Related -// -------------------------------- - -RCT_EXPORT_VIEW_PROPERTY(isModalBGBlurred, BOOL); -RCT_EXPORT_VIEW_PROPERTY(isModalBGTransparent, BOOL); -RCT_EXPORT_VIEW_PROPERTY(modalBGBlurEffectStyle, NSString); - -// MARK: - Value Props - Presentation/Transition -// --------------------------------------------- - -RCT_EXPORT_VIEW_PROPERTY(modalPresentationStyle, NSString); -RCT_EXPORT_VIEW_PROPERTY(modalTransitionStyle, NSString); - -RCT_EXPORT_VIEW_PROPERTY(hideNonVisibleModals, BOOL); -RCT_EXPORT_VIEW_PROPERTY(presentViaMount, BOOL); -RCT_EXPORT_VIEW_PROPERTY(enableSwipeGesture, BOOL); -RCT_EXPORT_VIEW_PROPERTY(allowModalForceDismiss, BOOL); -RCT_EXPORT_VIEW_PROPERTY(isModalInPresentation, BOOL); - -// MARK: - Value Props - Sheet-Related -// ----------------------------------- - -RCT_EXPORT_VIEW_PROPERTY(modalSheetDetents, NSArray); - -RCT_EXPORT_VIEW_PROPERTY(sheetPrefersScrollingExpandsWhenScrolledToEdge, BOOL); -RCT_EXPORT_VIEW_PROPERTY(sheetPrefersEdgeAttachedInCompactHeight, BOOL); -RCT_EXPORT_VIEW_PROPERTY(sheetWidthFollowsPreferredContentSizeWhenEdgeAttached, BOOL); -RCT_EXPORT_VIEW_PROPERTY(sheetPrefersGrabberVisible, BOOL); -RCT_EXPORT_VIEW_PROPERTY(sheetShouldAnimateChanges, BOOL); - -RCT_EXPORT_VIEW_PROPERTY(sheetLargestUndimmedDetentIdentifier, NSString); -RCT_EXPORT_VIEW_PROPERTY(sheetSelectedDetentIdentifier, NSString); -RCT_EXPORT_VIEW_PROPERTY(sheetPreferredCornerRadius, NSNumber); - -@end - diff --git a/ios/React Native/RNIModalView/RNIModalViewManager.swift b/ios/React Native/RNIModalView/RNIModalViewManager.swift deleted file mode 100644 index 28ec01e8..00000000 --- a/ios/React Native/RNIModalView/RNIModalViewManager.swift +++ /dev/null @@ -1,43 +0,0 @@ -// -// RNIModalViewManager.swift -// nativeUIModulesTest -// -// Created by Dominic Go on 6/9/20. -// Copyright © 2020 Facebook. All rights reserved. -// - -import Foundation - - -@objc (RNIModalViewManager) -class RNIModalViewManager: RCTViewManager { - static var sharedInstance: RNIModalViewManager!; - - override static func requiresMainQueueSetup() -> Bool { - return true; - }; - - override func view() -> UIView! { - let view = RNIModalView(bridge: self.bridge); - return view; - }; - - override init() { - super.init(); - RNIModalViewManager.sharedInstance = self; - - if !UIViewController.isSwizzled { - UIViewController.swizzleMethods(); - }; - }; - - @objc override func constantsToExport() -> [AnyHashable : Any]! { - return [ - "availableBlurEffectStyles": UIBlurEffect.Style - .availableStyles.map { $0.description }, - - "availablePresentationStyles": UIModalPresentationStyle - .availableStyles.map { $0.description }, - ]; - }; -}; diff --git a/ios/React Native/RNIModalViewControllerWrapper/RNIModalViewControllerWrapper.swift b/ios/React Native/RNIModalViewControllerWrapper/RNIModalViewControllerWrapper.swift deleted file mode 100644 index 1bc9df37..00000000 --- a/ios/React Native/RNIModalViewControllerWrapper/RNIModalViewControllerWrapper.swift +++ /dev/null @@ -1,132 +0,0 @@ -// -// RNIModalViewControllerWrapper.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/13/23. -// - -import UIKit - -/// Wraps a `UIViewController` so it can be used w/ `RNIModalManager` -/// -public class RNIModalViewControllerWrapper: - RNIIdentifiable, RNIModalIdentifiable, RNIModalPresentationNotifying, - RNIModalState, RNIModalPresentation { - - // MARK: - Properties - RNIIdentifiable - // ------------------------------------ - - public static var synthesizedIdPrefix: String = "modal-wrapper-"; - - // MARK: - Properties - // ------------------ - - /// The view controller that this instance is wrapping/managing - public var viewController: UIViewController; - - // MARK: - Properties - RNIModalPresentationNotifying - // -------------------------------------------------- - - public var modalPresentationNotificationDelegate: RNIModalPresentationNotifiable! - - // MARK: - Properties - RNIModalState - // ---------------------------------- - - public var modalIndexPrev: Int! - public var modalIndex: Int! - - public lazy var modalPresentationState = RNIModalPresentationStateMachine(); - - public var modalFocusState = RNIModalFocusStateMachine(); - - // MARK: - Properties - RNIModalPresentation - // ----------------------------------------- - - /// The modal that is being presented, or to be presented (i.e. - /// `UIViewController.presentedViewController`). - /// - public weak var modalViewController: UIViewController?; - - /// The view controller that presented the modal (i.e. - /// `UIViewController.presentingViewController` - /// - public weak var presentingViewController: UIViewController?; - - public var window: UIWindow? { - self.viewController.view.window ?? - self.presentingViewController?.view.window - }; - - var focusDelegate: RNIModalFocusNotifiable? { - return self.viewController as? RNIModalFocusNotifiable - }; - - // MARK: - Functions - // ----------------- - - public init(viewController: UIViewController){ - self.viewController = viewController; - RNIModalManagerShared.register(modal: self); - }; -}; - -// MARK: - RNIModalRequestable -// --------------------------- - -extension RNIModalViewControllerWrapper: RNIModalRequestable { - - public func requestModalToShow( - sender: Any, - animated: Bool, - completion: @escaping () -> Void - ) throws { - throw RNIModalError( - code: .runtimeError, - message: "presenting is not supported" - ); - }; - - public func requestModalToHide( - sender: Any, - animated: Bool, - completion: @escaping () -> Void - ) throws { - guard let modalVC = self.modalViewController else { - throw RNIModalError( - code: .runtimeError, - message: "Guard check failed, modalViewController is nil" - ); - }; - - modalVC.dismiss(animated: animated) { - completion(); - }; - }; -}; - -// MARK: - RNIModalFocusNotifiable -// ------------------------------- - -extension RNIModalViewControllerWrapper: RNIModalFocusNotifiable { - public func onModalWillFocusNotification(sender: any RNIModal) { - guard let focusDelegate = self.focusDelegate else { return }; - focusDelegate.onModalWillFocusNotification(sender: sender); - }; - - public func onModalDidFocusNotification(sender: any RNIModal) { - guard let focusDelegate = self.focusDelegate else { return }; - focusDelegate.onModalDidFocusNotification(sender: sender); - }; - - public func onModalWillBlurNotification(sender: any RNIModal) { - guard let focusDelegate = self.focusDelegate else { return }; - focusDelegate.onModalWillBlurNotification(sender: sender); - }; - - public func onModalDidBlurNotification(sender: any RNIModal) { - guard let focusDelegate = self.focusDelegate else { return }; - focusDelegate.onModalDidBlurNotification(sender: sender); - }; -}; - - diff --git a/ios/React Native/RNIModalViewControllerWrapper/RNIModalViewControllerWrapperRegistry.swift b/ios/React Native/RNIModalViewControllerWrapper/RNIModalViewControllerWrapperRegistry.swift deleted file mode 100644 index cbbb9099..00000000 --- a/ios/React Native/RNIModalViewControllerWrapper/RNIModalViewControllerWrapperRegistry.swift +++ /dev/null @@ -1,39 +0,0 @@ -// -// RNIModalViewControllerWrapperRegistry.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/27/23. -// - -import UIKit - -class RNIModalViewControllerWrapperRegistry { - static let instanceMap = NSMapTable< - UIViewController, - RNIModalViewControllerWrapper - >( - keyOptions: .weakMemory, - valueOptions: .weakMemory - ); - - static func get( - forViewController viewController: UIViewController - ) -> RNIModalViewControllerWrapper? { - - Self.instanceMap.object(forKey: viewController); - }; - - static func set( - forViewController viewController: UIViewController, - _ modalWrapper: RNIModalViewControllerWrapper - ){ - - Self.instanceMap.setObject(modalWrapper, forKey: viewController); - }; - - static func isRegistered( - forViewController viewController: UIViewController - ) -> Bool { - Self.get(forViewController: viewController) != nil; - }; -}; diff --git a/ios/React Native/RNIModalViewModule/RNIModalViewModule.m b/ios/React Native/RNIModalViewModule/RNIModalViewModule.m deleted file mode 100644 index e37b151d..00000000 --- a/ios/React Native/RNIModalViewModule/RNIModalViewModule.m +++ /dev/null @@ -1,43 +0,0 @@ -// -// RNIModalViewModule.m -// RNSwiftReviewer -// -// Created by Dominic Go on 7/11/20. -// - -#import "React/RCTBridgeModule.h" -#import "React/RCTEventEmitter.h" - - -@interface RCT_EXTERN_MODULE(RNIModalViewModule, RCTEventEmitter) - -// MARK: - Standalone Functions -// ---------------------------- - -RCT_EXTERN_METHOD(setModalVisibilityByID: (NSString)modalID - visibility: (BOOL)visibility - animated: (BOOL)visibility - // promise blocks ----------------------- - resolve: (RCTPromiseResolveBlock *)resolve - reject : (RCTPromiseRejectBlock *)reject); - -RCT_EXTERN_METHOD(dismissAllModals: (BOOL)animated - // promise blocks ------------------------ - resolve: (RCTPromiseResolveBlock *)resolve - reject : (RCTPromiseRejectBlock *)reject); - -// MARK: - View-Related Functions -// ------------------------------ - -RCT_EXTERN_METHOD(setModalVisibility: (nonnull NSNumber)node - visibility: (BOOL)visibility - // promise blocks ----------------------- - resolve: (RCTPromiseResolveBlock *)resolve - reject : (RCTPromiseRejectBlock *)reject); - -RCT_EXTERN_METHOD(requestModalInfo: (nonnull NSNumber) node - // promise blocks ----------------------- - resolve: (RCTPromiseResolveBlock *)resolve - reject : (RCTPromiseRejectBlock *)reject); - -@end diff --git a/ios/React Native/RNIModalViewModule/RNIModalViewModule.swift b/ios/React Native/RNIModalViewModule/RNIModalViewModule.swift deleted file mode 100644 index 207f3fce..00000000 --- a/ios/React Native/RNIModalViewModule/RNIModalViewModule.swift +++ /dev/null @@ -1,223 +0,0 @@ -// -// RNIModalViewModule.swift -// RNSwiftReviewer -// -// Created by Dominic Go on 7/11/20. -// - -import Foundation - - -@objc(RNIModalViewModule) -class RNIModalViewModule: RCTEventEmitter { - - enum Events: String, CaseIterable { - case placeholderEvent; - }; - - @objc override static func requiresMainQueueSetup() -> Bool { - return false; - }; - - func getModalViewInstance(for node: NSNumber) -> RNIModalView? { - return RNIUtilities.getView( - forNode: node, - type : RNIModalView.self, - bridge : self.bridge - ); - }; - - // MARK: - Event-Related - // ---------------------- - - private var hasListeners = false; - - override func supportedEvents() -> [String]! { - return Self.Events.allCases.map { $0.rawValue }; - }; - - // called when first listener is added - override func startObserving() { - self.hasListeners = true; - }; - - // called when this module's last listener is removed, or dealloc - override func stopObserving() { - self.hasListeners = false; - }; - - func sendModalEvent(event: Events, params: Dictionary) { - guard self.hasListeners else { return }; - self.sendEvent(withName: event.rawValue, body: params); - }; - - // MARK: - Module Functions - // ------------------------ - - @objc func setModalVisibilityByID( - _ modalID: String, - visibility: Bool, - animated: Bool, - // promise blocks ------------------------ - resolve: @escaping RCTPromiseResolveBlock, - reject : @escaping RCTPromiseRejectBlock - ) { - DispatchQueue.main.async { - let modalInstances = RNIModalManagerShared.modalInstances; - - let debugData: Dictionary = [ - "modalID": modalID, - "visibility": visibility, - ]; - - do { - guard modalInstances.count > 0 else { - throw RNIModalError( - code: .runtimeError, - message: "The list of modalInstances is empty", - debugData: debugData - ); - }; - - let targetModal = modalInstances.first { - $0.modalUserID == modalID || $0.modalNativeID == modalID - }; - - guard let targetModal = targetModal else { - let errorMessage = - "Unable to get the matching RNIModalView instance for" - + " modalID: \(modalID)"; - - throw RNIModalError( - code: .runtimeError, - message: errorMessage, - debugData: debugData - ); - }; - - let modalAction = visibility - ? targetModal.requestModalToShow - : targetModal.requestModalToHide; - - try modalAction(animated, visibility) { - // modal dismissed - resolve([:]); - }; - - } catch let error as RNIModalError { - error.invokePromiseRejectBlock(reject); - - } catch { - var errorWrapper = RNIModalError( - code: .unknownError, - error: error - ); - - errorWrapper.addDebugData(debugData); - errorWrapper.invokePromiseRejectBlock(reject); - }; - }; - }; - - @objc func dismissAllModals( - _ animated: Bool, - // promise blocks ------------------------ - resolve: @escaping RCTPromiseResolveBlock, - reject : @escaping RCTPromiseRejectBlock - ) { - DispatchQueue.main.async { - let windows = RNIUtilities.getWindows(); - let rootViewControllers = windows.map { $0.rootViewController }; - - guard rootViewControllers.isEmpty else { - let error = RNIModalError( - code: .runtimeError, - message: "Could not get root view controllers" - ); - - error.invokePromiseRejectBlock(reject); - return; - }; - - rootViewControllers.enumerated().forEach { - let isLast = $0.offset == rootViewControllers.count - 1; - - $0.element?.dismiss(animated: animated) { - guard isLast else { return }; - resolve([:]); - }; - }; - }; - }; - - // MARK: - View-Related Functions - // ------------------------------ - - @objc func setModalVisibility( - _ node: NSNumber, - visibility: Bool, - // promise blocks ------------------------ - resolve: @escaping RCTPromiseResolveBlock, - reject : @escaping RCTPromiseRejectBlock - ){ - DispatchQueue.main.async { - guard let modalView = self.getModalViewInstance(for: node) else { - let error = RNIModalError( - code: .runtimeError, - message: "Unable to get the matching RNIModalView instance for node", - debugData: [ - "node": node, - "visibility": visibility - ] - ); - - error.invokePromiseRejectBlock(reject); - return; - }; - - let modalAction = visibility - ? modalView.presentModal - : modalView.dismissModal; - - do { - try modalAction(true) { - resolve([:]); - }; - - } catch let error as RNIModalError { - error.invokePromiseRejectBlock(reject) - - } catch { - let errorWrapper = RNIModalError( - code: .unknownError, - error: error - ); - - errorWrapper.invokePromiseRejectBlock(reject); - }; - }; - }; - - @objc func requestModalInfo( - _ node: NSNumber, - // promise blocks ------------------------ - resolve: @escaping RCTPromiseResolveBlock, - reject : @escaping RCTPromiseRejectBlock - ){ - DispatchQueue.main.async { - guard let modalView = self.getModalViewInstance(for: node) else { - let errorMessage = - "Unable to get the corresponding RNIModalView instance" - + " for node: \(node)" - - let error = RNIModalError(code: .runtimeError, message: errorMessage); - error.invokePromiseRejectBlock(reject); - return; - }; - - resolve( - modalView.synthesizedBaseEventData.synthesizedJSDictionary - ); - }; - }; -}; diff --git a/ios/React Native/RNIMulticastDelegate/CAAnimationMulticastDelegate.swift b/ios/React Native/RNIMulticastDelegate/CAAnimationMulticastDelegate.swift deleted file mode 100644 index a4993b9a..00000000 --- a/ios/React Native/RNIMulticastDelegate/CAAnimationMulticastDelegate.swift +++ /dev/null @@ -1,28 +0,0 @@ -// -// CAAnimationMulticastDelegate.swift -// react-native-ios-modal -// -// Created by Dominic Go on 5/1/23. -// - -import UIKit - - -public class CAAnimationMulticastDelegate: NSObject, CAAnimationDelegate { - - public var emitter: RNIMulticastDelegate = - RNIMulticastDelegate(); - - - public func animationDidStart(_ anim: CAAnimation) { - self.emitter.invoke { - $0.animationDidStart?(anim); - }; - }; - - public func animationDidStop(_ anim: CAAnimation, finished flag: Bool) { - self.emitter.invoke { - $0.animationDidStop?(anim, finished: flag); - }; - }; -}; diff --git a/ios/React Native/RNIMulticastDelegate/RNIMulticastDelegate.swift b/ios/React Native/RNIMulticastDelegate/RNIMulticastDelegate.swift deleted file mode 100644 index 05a4d1f6..00000000 --- a/ios/React Native/RNIMulticastDelegate/RNIMulticastDelegate.swift +++ /dev/null @@ -1,27 +0,0 @@ -// -// MulticastDelegate.swift -// RNSwiftReviewer -// -// Created by Dominic Go on 8/15/20. -// - -import UIKit - - -public class RNIMulticastDelegate { - private let delegates: NSHashTable = NSHashTable.weakObjects(); - - public func add(_ delegate: T) { - delegates.add(delegate); - }; - - public func remove(_ delegate: T) { - self.delegates.remove(delegate); - }; - - public func invoke (_ invocation: @escaping (T) -> Void) { - for delegate in delegates.allObjects { - invocation(delegate) - }; - }; -}; diff --git a/ios/React Native/RNIObjectMetadata/RNIObjectMetadata+Default.swift b/ios/React Native/RNIObjectMetadata/RNIObjectMetadata+Default.swift deleted file mode 100644 index ae8eb150..00000000 --- a/ios/React Native/RNIObjectMetadata/RNIObjectMetadata+Default.swift +++ /dev/null @@ -1,29 +0,0 @@ -// -// RNIObjectMetadata+Default.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/27/23. -// - -import UIKit - -fileprivate let RNIObjectMetadataMap = NSMapTable( - keyOptions: .weakMemory, - valueOptions: .strongMemory -); - -public extension RNIObjectMetadata { - var metadata: T? { - set { - if let newValue = newValue { - RNIObjectMetadataMap.setObject(newValue, forKey: self); - - } else { - RNIObjectMetadataMap.removeObject(forKey: self); - }; - } - get { - RNIObjectMetadataMap.object(forKey: self) as? T - } - }; -}; diff --git a/ios/React Native/RNIObjectMetadata/RNIObjectMetadata.swift b/ios/React Native/RNIObjectMetadata/RNIObjectMetadata.swift deleted file mode 100644 index db5040aa..00000000 --- a/ios/React Native/RNIObjectMetadata/RNIObjectMetadata.swift +++ /dev/null @@ -1,14 +0,0 @@ -// -// RNIObjectMetadata.swift -// react-native-ios-modal -// -// Created by Dominic Go on 3/31/23. -// - -import UIKit - -public protocol RNIObjectMetadata: AnyObject { - associatedtype T: AnyObject; - - var metadata: T? { get set }; -}; diff --git a/ios/React Native/RNIViewControllerLifeCycleNotifiable/RNIViewControllerLifeCycleNotifiable+Default.swift b/ios/React Native/RNIViewControllerLifeCycleNotifiable/RNIViewControllerLifeCycleNotifiable+Default.swift deleted file mode 100644 index f7f8e79c..00000000 --- a/ios/React Native/RNIViewControllerLifeCycleNotifiable/RNIViewControllerLifeCycleNotifiable+Default.swift +++ /dev/null @@ -1,42 +0,0 @@ -// -// RNIViewControllerLifeCycleNotifiable+Default.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/27/23. -// - -import UIKit - -extension RNIViewControllerLifeCycleNotifiable { - public func viewDidLoad(sender: UIViewController) { - // no-op - }; - - public func viewDidLayoutSubviews(sender: UIViewController) { - // no-op - }; - - public func viewWillAppear(sender: UIViewController, animated: Bool) { - // no-op - }; - - public func viewDidAppear(sender: UIViewController, animated: Bool) { - // no-op - }; - - public func viewWillDisappear(sender: UIViewController, animated: Bool) { - // no-op - }; - - public func viewDidDisappear(sender: UIViewController, animated: Bool) { - // no-op - }; - - public func willMove(sender: UIViewController, toParent parent: UIViewController?) { - // no-op - }; - - public func didMove(sender: UIViewController, toParent parent: UIViewController?) { - // no-op - }; -}; diff --git a/ios/React Native/RNIViewControllerLifeCycleNotifiable/RNIViewControllerLifeCycleNotifiable.swift b/ios/React Native/RNIViewControllerLifeCycleNotifiable/RNIViewControllerLifeCycleNotifiable.swift deleted file mode 100644 index 17be9e41..00000000 --- a/ios/React Native/RNIViewControllerLifeCycleNotifiable/RNIViewControllerLifeCycleNotifiable.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// RNIViewControllerLifeCycleNotifiable.swift -// react-native-ios-modal -// -// Created by Dominic Go on 4/1/23. -// - -import UIKit - -public protocol RNIViewControllerLifeCycleNotifiable: AnyObject { - - func viewDidLoad(sender: UIViewController); - - func viewDidLayoutSubviews(sender: UIViewController); - - func viewWillAppear(sender: UIViewController, animated: Bool); - - func viewDidAppear(sender: UIViewController, animated: Bool); - - /// `Note:2023-04-01-14-39-23` - /// - /// * `UIViewController.isBeingDismissed` or - /// `UIViewController.isMovingFromParent` are `true` during - /// `viewWillDisappear`, whenever a modal is about to be dismissed. - /// - func viewWillDisappear(sender: UIViewController, animated: Bool); - - func viewDidDisappear(sender: UIViewController, animated: Bool); - - func willMove(sender: UIViewController, toParent parent: UIViewController?); - - func didMove(sender: UIViewController, toParent parent: UIViewController?); - -}; - diff --git a/ios/React Native/RNIWeak/RNIWeakArray.swift b/ios/React Native/RNIWeak/RNIWeakArray.swift deleted file mode 100644 index 9dd4dfe8..00000000 --- a/ios/React Native/RNIWeak/RNIWeakArray.swift +++ /dev/null @@ -1,64 +0,0 @@ -// -// RNIWeakArray.swift -// react-native-ios-modal -// -// Created by Dominic Go on 3/15/23. -// - -import UIKit - - -public class RNIWeakArray { - - public var rawArray: [RNIWeakRef] = []; - - public var purgedArray: [RNIWeakRef] { - self.rawArray.compactMap { - $0.synthesizedRef == nil ? nil : $0; - }; - }; - - public var array: [T] { - let purgedArray = self.purgedArray; - self.rawArray = purgedArray; - - return purgedArray.compactMap { - $0.synthesizedRef; - }; - }; - - public init(initialItems: [T] = []){ - self.rawArray = initialItems.compactMap { - RNIWeakRef(with: $0) - }; - }; - - public func get(index: Int) -> T? { - guard self.rawArray.count < index else { - return nil - }; - - guard let ref = self.rawArray[index].synthesizedRef else { - self.rawArray.remove(at: index); - return nil; - }; - - return ref; - }; - - public func set(index: Int, element: T) { - guard self.rawArray.count < index else { - return; - }; - - self.rawArray[index] = RNIWeakRef(with: element); - }; - - - public func append(element: T){ - self.rawArray.append( - RNIWeakRef(with: element) - ); - }; -}; - diff --git a/ios/React Native/RNIWeak/RNIWeakDictionary.swift b/ios/React Native/RNIWeak/RNIWeakDictionary.swift deleted file mode 100644 index a445684d..00000000 --- a/ios/React Native/RNIWeak/RNIWeakDictionary.swift +++ /dev/null @@ -1,55 +0,0 @@ -// -// RNIWeakDictionary.swift -// react-native-ios-modal -// -// Created by Dominic Go on 3/15/23. -// - -import UIKit - - -public class RNIWeakDictionary { - - public var rawDict: [K: RNIWeakRef] = [:]; - - public var purgedDict: [K: RNIWeakRef] { - get { - self.rawDict.compactMapValues { - $0.rawRef != nil ? $0 : nil; - } - } - }; - - public var dict: [K: RNIWeakRef] { - get { - let purgedDict = self.purgedDict; - self.rawDict = purgedDict; - - return purgedDict; - } - } - - public func set(for key: K, with value: T){ - self.rawDict[key] = RNIWeakRef(with: value); - }; - - public func get(for key: K) -> T? { - guard let ref = self.rawDict[key]?.synthesizedRef else { - self.rawDict.removeValue(forKey: key); - return nil; - }; - - return ref; - }; - - public subscript(key: K) -> T? { - get { - self.get(for: key); - } - set { - guard let ref = newValue else { return }; - self.set(for: key, with: ref); - } - } -}; - diff --git a/ios/React Native/RNIWeak/RNIWeakRef.swift b/ios/React Native/RNIWeak/RNIWeakRef.swift deleted file mode 100644 index e73462a8..00000000 --- a/ios/React Native/RNIWeak/RNIWeakRef.swift +++ /dev/null @@ -1,26 +0,0 @@ -// -// RNIWeakRef.swift -// react-native-ios-modal -// -// Created by Dominic Go on 3/11/23. -// - -import UIKit - - -public class RNIWeakRef { - public weak var rawRef: AnyObject?; - - public var synthesizedRef: T? { - self.rawRef as? T; - }; - - public init(with ref: T) { - self.rawRef = ref as AnyObject; - }; - - public init?(with ref: T?) { - guard let unwrappedRef = ref else { return nil }; - self.rawRef = unwrappedRef as AnyObject; - }; -}; diff --git a/package.json b/package.json deleted file mode 100644 index d22dd213..00000000 --- a/package.json +++ /dev/null @@ -1,140 +0,0 @@ -{ - "name": "react-native-ios-modal", - "version": "2.0.0-3", - "description": "A react-native component for displaying a modal on iOS by natively wrapping a react-native view inside a UIViewController and presenting it.", - "main": "lib/commonjs/index", - "module": "lib/module/index", - "types": "lib/typescript/index.d.ts", - "react-native": "src/index", - "source": "src/index", - "files": [ - "src", - "lib", - "android", - "ios", - "cpp", - "*.podspec", - "!lib/typescript/example", - "!ios/build", - "!android/build", - "!android/gradle", - "!android/gradlew", - "!android/gradlew.bat", - "!android/local.properties", - "!**/__tests__", - "!**/__fixtures__", - "!**/__mocks__", - "!**/.*" - ], - "scripts": { - "test": "jest", - "typescript": "tsc --noEmit --project tsconfig.build.json", - "typescript-example": "cd example && tsc --noEmit --project tsconfig.json", - "typescript-all": "yarn run typescript ; yarn run typescript-example", - "lint": "eslint \"**/*.{js,ts,tsx}\"", - "prepare": "bob build", - "release": "release-it", - "example": "yarn --cwd example", - "bootstrap": "yarn example && yarn install && yarn example pods", - "build": "yarn run lint ; yarn run typescript ; yarn run bob build && cd example/ios && pod install && xcodebuild -workspace IosModalExample.xcworkspace -scheme IosModalExample -destination 'generic/platform=iOS'", - "build-and-run": "yarn run build && yarn run run-debug && yarn run run-release", - "run-release": "cd example && npx react-native run-ios --simulator \"iPhone 8\" --configuration Release", - "run-debug": "cd example && npx react-native run-ios --simulator \"iPhone 8\" --configuration Debug" - }, - "keywords": [ - "react-native", - "ios", - "modal" - ], - "repository": "https://github.com/dominicstop/react-native-ios-modal", - "author": "Dominic Go <18517029+dominicstop@users.noreply.github.com> (https://github.com/dominicstop)", - "license": "MIT", - "bugs": { - "url": "https://github.com/dominicstop/react-native-ios-modal/issues" - }, - "homepage": "https://github.com/dominicstop/react-native-ios-modal#readme", - "publishConfig": { - "registry": "https://registry.npmjs.org/" - }, - "devDependencies": { - "@react-native-community/cli-types": "^10.0.0", - "@react-native-community/eslint-config": "^3.0.2", - "@types/react": "~17.0.21", - "@types/react-native": "0.68.0", - "eslint": "^8.4.1", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "pod-install": "^0.1.0", - "prettier": "^2.0.5", - "react": "18.1.0", - "react-native": "0.70.4", - "react-native-builder-bob": "^0.20.0", - "release-it": "^15.0.0", - "typescript": "^4.5.2" - }, - "resolutions": { - "@types/react": "17.0.21" - }, - "peerDependencies": { - "react": "*", - "react-native": "*" - }, - "release-it": { - "git": { - "commitMessage": "⚙️ Chore: Release ${version}", - "tagName": "v${version}" - }, - "npm": { - "publish": true - }, - "github": { - "release": true - } - }, - "eslintConfig": { - "root": true, - "extends": [ - "@react-native-community" - ], - "rules": { - "prettier/prettier": [ - "warn", - { - "quoteProps": "consistent", - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "es5", - "useTabs": false - } - ] - } - }, - "eslintIgnore": [ - "node_modules/", - "lib/" - ], - "prettier": { - "quoteProps": "consistent", - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "es5", - "useTabs": false - }, - "react-native-builder-bob": { - "source": "src", - "output": "lib", - "targets": [ - "commonjs", - "module", - [ - "typescript", - { - "project": "tsconfig.build.json" - } - ] - ] - }, - "dependencies": { - "@dominicstop/ts-event-emitter": "^1.1.0" - } -} diff --git a/react-native-ios-modal.podspec b/react-native-ios-modal.podspec deleted file mode 100644 index af991bd8..00000000 --- a/react-native-ios-modal.podspec +++ /dev/null @@ -1,35 +0,0 @@ -require "json" - -package = JSON.parse(File.read(File.join(__dir__, "package.json"))) -folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32' - -Pod::Spec.new do |s| - s.name = "react-native-ios-modal" - s.version = package["version"] - s.summary = package["description"] - s.homepage = package["homepage"] - s.license = package["license"] - s.authors = package["author"] - - s.platforms = { :ios => "10.0" } - s.source = { :git => "https://github.com/dominicstop/react-native-ios-modal.git", :tag => "#{s.version}" } - - s.source_files = "ios/**/*.{h,m,mm,swift}" - - s.dependency "React-Core" - - # Don't install the dependencies when we run `pod install` in the old architecture. - if ENV['RCT_NEW_ARCH_ENABLED'] == '1' then - s.compiler_flags = folly_compiler_flags + " -DRCT_NEW_ARCH_ENABLED=1" - s.pod_target_xcconfig = { - "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\"", - "CLANG_CXX_LANGUAGE_STANDARD" => "c++17" - } - - s.dependency "React-Codegen" - s.dependency "RCT-Folly" - s.dependency "RCTRequired" - s.dependency "RCTTypeSafety" - s.dependency "ReactCommon/turbomodule/core" - end -end diff --git a/react-native.config.js b/react-native.config.js deleted file mode 100644 index 619da1ac..00000000 --- a/react-native.config.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - project: { - android: null, - ios: { - project: './ios/IosModal.xcodeproj', - }, - }, -}; diff --git a/scripts/bootstrap.js b/scripts/bootstrap.js deleted file mode 100644 index 17291894..00000000 --- a/scripts/bootstrap.js +++ /dev/null @@ -1,29 +0,0 @@ -const os = require('os'); -const path = require('path'); -const child_process = require('child_process'); - -const root = path.resolve(__dirname, '..'); -const args = process.argv.slice(2); -const options = { - cwd: process.cwd(), - env: process.env, - stdio: 'inherit', - encoding: 'utf-8', -}; - -if (os.type() === 'Windows_NT') { - options.shell = true; -} - -let result; - -if (process.cwd() !== root || args.length) { - // We're not in the root of the project, or additional arguments were passed - // In this case, forward the command to `yarn` - result = child_process.spawnSync('yarn', args, options); -} else { - // If `yarn` is run without arguments, perform bootstrap - result = child_process.spawnSync('yarn', ['bootstrap'], options); -} - -process.exitCode = result.status; diff --git a/src/components/ModalView/ModalView.tsx b/src/components/ModalView/ModalView.tsx deleted file mode 100644 index 84086aeb..00000000 --- a/src/components/ModalView/ModalView.tsx +++ /dev/null @@ -1,907 +0,0 @@ -import React from 'react'; - -import { - findNodeHandle, - StyleSheet, - View, - ScrollView, - Platform, - ViewProps, - NativeSyntheticEvent, -} from 'react-native'; - -import { RNIWrapperView } from '../../temp'; - -import { TSEventEmitter } from '@dominicstop/ts-event-emitter'; - -import * as Helpers from '../../functions/helpers'; - -import { ModalContext } from '../../context/ModalContext'; - -import { - OnModalWillPresentEvent, - OnModalDidPresentEvent, - OnModalWillDismissEvent, - OnModalDidDismissEvent, - OnModalWillShowEvent, - OnModalDidShowEvent, - OnModalWillHideEvent, - OnModalDidHideEvent, - OnModalWillFocusEvent, - OnModalDidFocusEvent, - OnModalWillBlurEvent, - OnModalDidBlurEvent, - OnPresentationControllerWillDismissEvent, - OnPresentationControllerDidDismissEvent, - OnPresentationControllerDidAttemptToDismissEvent, - RNIModalView, - RNIModalBaseEventData, - RNIModalDeprecatedBaseEvent, - OnModalDetentDidComputeEvent, - OnModalDidChangeSelectedDetentIdentifierEvent, - OnModalDidSnapEvent, - OnModalSwipeGestureStartEvent, - OnModalSwipeGestureDidEndEvent, - OnModalDismissWillCancelEvent, - OnModalDismissDidCancelEvent, -} from '../../native_components/RNIModalView'; - -import { RNIModalViewModule } from '../../native_modules/RNIModalViewModule'; - -import type { ModalViewProps } from './ModalViewProps'; -import type { ModalViewState } from './ModalViewState'; - -import { - ModalViewEmitterEvents, - ModalViewEventEmitter, -} from './ModalViewEmitter'; - -import { - hasScrollViewContext, - NATIVE_ID_KEYS, - VirtualizedListContext, -} from './ModalViewConstants'; - -import { ModalViewEmitterEventsDeprecated } from './ModalViewEmitterDeprecated'; - -// prettier-ignore -export class ModalView extends - React.PureComponent { - - private nativeRefModalView!: React.Component; - private emitter: ModalViewEventEmitter; - - constructor(props: ModalViewProps) { - super(props); - - const defaultProps = this.getProps(props); - - this.emitter = new TSEventEmitter(); - - this.state = { - isModalVisible: false, - childProps: null, - enableSwipeGesture: defaultProps.enableSwipeGesture, - isModalInPresentation: defaultProps.isModalInPresentation, - isModalInFocus: false, - focusState: 'INITIAL', - }; - } - - componentWillUnmount() { - const { autoCloseOnUnmount } = this.getProps(); - const { isModalVisible: visible } = this.state; - - if (autoCloseOnUnmount && visible) { - this.setVisibility(false); - } - } - - private getProps = (propOverride: ModalViewProps | null = null) => { - const { - // Native Props - General - modalID, - modalContentPreferredContentSize, - shouldEnableAggressiveCleanup, - - // Native Props - BG-Related - isModalBGBlurred, - isModalBGTransparent, - modalBGBlurEffectStyle, - - // Native Props - Presentation/Transition - modalPresentationStyle, - modalTransitionStyle, - hideNonVisibleModals, - presentViaMount, - enableSwipeGesture, - allowModalForceDismiss, - isModalInPresentation, - - // Native Props - Sheet-Related - modalSheetDetents, - sheetPrefersScrollingExpandsWhenScrolledToEdge, - sheetPrefersEdgeAttachedInCompactHeight, - sheetWidthFollowsPreferredContentSizeWhenEdgeAttached, - sheetPrefersGrabberVisible, - sheetShouldAnimateChanges, - sheetLargestUndimmedDetentIdentifier, - sheetPreferredCornerRadius, - sheetSelectedDetentIdentifier, - - // Native Props - Events - onModalWillPresent, - onModalDidPresent, - onModalWillDismiss, - onModalDidDismiss, - onModalWillShow, - onModalDidShow, - onModalWillHide, - onModalDidHide, - onModalWillFocus, - onModalDidFocus, - onModalWillBlur, - onModalDidBlur, - onPresentationControllerWillDismiss, - onPresentationControllerDidDismiss, - onPresentationControllerDidAttemptToDismiss, - onModalDetentDidCompute, - onModalDidChangeSelectedDetentIdentifier, - onModalDidSnap, - onModalSwipeGestureStart, - onModalSwipeGestureDidEnd, - - // Component Props - autoCloseOnUnmount, - setEnableSwipeGestureFromProps, - setModalInPresentationFromProps, - containerStyle, - isModalContentLazy, - - children, - ...viewProps - } = propOverride ?? this.props; - - return ({ - // A - Add Default Values - presentViaMount: ( - presentViaMount ?? false - ), - isModalBGBlurred: ( - isModalBGBlurred ?? true - ), - enableSwipeGesture: ( - enableSwipeGesture ?? true - ), - hideNonVisibleModals: ( - hideNonVisibleModals ?? false - ), - isModalBGTransparent: ( - isModalBGTransparent ?? true - ), - modalTransitionStyle: ( - modalTransitionStyle ?? 'coverVertical' - ), - modalPresentationStyle: ( - modalPresentationStyle ?? 'automatic' - ), - autoCloseOnUnmount: ( - autoCloseOnUnmount ?? true - ), - setEnableSwipeGestureFromProps: ( - setEnableSwipeGestureFromProps ?? false - ), - setModalInPresentationFromProps: ( - setModalInPresentationFromProps ?? false - ), - isModalInPresentation: ( - isModalInPresentation ?? false - ), - isModalContentLazy: ( - isModalContentLazy ?? true - ), - shouldEnableAggressiveCleanup: ( - shouldEnableAggressiveCleanup ?? true - ), - - // B - Pass down... - containerStyle, - modalID, - modalContentPreferredContentSize, - allowModalForceDismiss, - modalBGBlurEffectStyle, - modalSheetDetents, - sheetPrefersScrollingExpandsWhenScrolledToEdge, - sheetPrefersEdgeAttachedInCompactHeight, - sheetWidthFollowsPreferredContentSizeWhenEdgeAttached, - sheetPrefersGrabberVisible, - sheetShouldAnimateChanges, - sheetLargestUndimmedDetentIdentifier, - sheetPreferredCornerRadius, - sheetSelectedDetentIdentifier, - onModalWillPresent, - onModalDidPresent, - onModalWillDismiss, - onModalDidDismiss, - onModalWillShow, - onModalDidShow, - onModalWillHide, - onModalDidHide, - onModalWillFocus, - onModalDidFocus, - onModalWillBlur, - onModalDidBlur, - onPresentationControllerWillDismiss, - onPresentationControllerDidDismiss, - onPresentationControllerDidAttemptToDismiss, - onModalDetentDidCompute, - onModalDidChangeSelectedDetentIdentifier, - onModalDidSnap, - onModalSwipeGestureStart, - onModalSwipeGestureDidEnd, - - // C - View-Related Props - children, - viewProps, - }); - }; - - getEmitterRef = () => { - return this.emitter; - }; - - setVisibility = async ( - nextVisible: boolean, - childProps: object | null = null - ) => { - const props = this.getProps(); - const { isModalVisible: prevVisible } = this.state; - - const didChange = (prevVisible !== nextVisible); - - if (!didChange) { - return; - } - - if (nextVisible) { - // Show modal... - // When showing modal, mount children first, - await Helpers.setStateAsync(this, { - isModalVisible: nextVisible, - // pass down received props to childProps via state - childProps: Helpers.isObject(childProps) ? childProps : null, - }); - - // wait for view to mount - if (props.isModalContentLazy){ - await Helpers.promiseWithTimeout(500, new Promise((resolve) => { - this.emitter.once(ModalViewEmitterEvents.onLayoutModalContentContainer, () => { - resolve(); - }); - })); - } - } - - try { - // request modal to open/close - await RNIModalViewModule.setModalVisibility( - findNodeHandle(this.nativeRefModalView)!, - nextVisible - ); - - // Hide modal... - // When finish hiding modal, unmount children - if (!nextVisible) { - await Helpers.setStateAsync(this, { - isModalVisible: nextVisible, - childProps: null, - }); - } - } catch (error) { - console.log('ModalView, setVisibility failed:'); - console.log(error); - throw error; - } - }; - - getModalInfo = async () => { - try { - // request modal to send modal info - return await RNIModalViewModule.requestModalInfo( - findNodeHandle(this.nativeRefModalView)! - ); - } catch (error) { - console.log('ModalView, requestModalInfo failed:'); - console.log(error); - throw error; - } - }; - - setEnableSwipeGesture = async ( - enableSwipeGesture: boolean - ) => { - const { enableSwipeGesture: prevVal } = this.state; - if (prevVal !== enableSwipeGesture) { - await Helpers.setStateAsync(this, { enableSwipeGesture }); - } - }; - - setIsModalInPresentation = async ( - isModalInPresentation: boolean - ) => { - const { isModalInPresentation: prevVal } = this.state; - if (prevVal !== isModalInPresentation) { - await Helpers.setStateAsync(this, { isModalInPresentation }); - } - }; - - // Event Handlers - // -------------- - - // We don't want any responder events bubbling out of the modal. - private _shouldSetResponder() { - return true; - } - - private _handleOnLayoutModalContentContainer: ViewProps['onLayout'] = (event) => { - this.emitter.emit( - ModalViewEmitterEvents.onLayoutModalContentContainer, - event.nativeEvent - ); - - event.stopPropagation(); - }; - - // the child comp can call `props.getModalRef` to receive - // a ref to this modal comp - private _handleGetModalRef = () => { - return this; - }; - - // Native Event Handlers - // --------------------- - - private _handleOnModalWillPresent: OnModalWillPresentEvent = (event) => { - const props = this.props; - - props.onModalWillPresent?.(event); - event.stopPropagation(); - - this.emitter.emit( - ModalViewEmitterEvents.onModalWillPresent, - event.nativeEvent - ); - }; - - private _handleOnModalDidPresent: OnModalDidPresentEvent = (event) => { - const props = this.props; - - props.onModalDidPresent?.(event); - event.stopPropagation(); - - this.emitter.emit( - ModalViewEmitterEvents.onModalDidPresent, - event.nativeEvent - ); - }; - - private _handleOnModalWillDismiss: OnModalWillDismissEvent = (event) => { - const props = this.props; - - props.onModalWillDismiss?.(event); - event.stopPropagation(); - - this.emitter.emit( - ModalViewEmitterEvents.onModalWillDismiss, - event.nativeEvent - ); - }; - - private _handleOnModalDidDismiss: OnModalDidDismissEvent = (event) => { - const props = this.props; - - props.onModalDidDismiss?.(event); - event.stopPropagation(); - - this.emitter.emit( - ModalViewEmitterEvents.onModalDidDismiss, - event.nativeEvent - ); - }; - - private _handleOnModalWillShow: OnModalWillShowEvent = (event) => { - const props = this.props; - - props.onModalWillShow?.(event); - event.stopPropagation(); - - this.emitter.emit( - ModalViewEmitterEvents.onModalWillShow, - event.nativeEvent - ); - }; - - private _handleOnModalDidShow: OnModalDidShowEvent = (event) => { - const props = this.props; - - props.onModalDidShow?.(event); - props.onModalShow?.( - ModalViewHelpers.createDeprecatedBaseEventObject(event) - ); - - event.stopPropagation(); - - this.emitter.emit( - ModalViewEmitterEvents.onModalDidShow, - event.nativeEvent - ); - - this.emitter.emit( - ModalViewEmitterEventsDeprecated.onModalShow, - ModalViewHelpers.createDeprecatedEventObject( - event.nativeEvent - ) - ); - - this.setState({ - isModalVisible: true, - }); - }; - - private _handleOnModalWillHide: OnModalWillHideEvent = (event) => { - const props = this.props; - - props.onModalWillHide?.(event); - - this.emitter.emit( - ModalViewEmitterEvents.onModalWillHide, - event.nativeEvent - ); - - event.stopPropagation(); - }; - - private _handleOnModalDidHide: OnModalDidHideEvent = (event) => { - const props = this.props; - - props.onModalDidHide?.(event); - props.onModalDismiss?.( - ModalViewHelpers.createDeprecatedBaseEventObject(event) - ); - - event.stopPropagation(); - - this.emitter.emit( - ModalViewEmitterEvents.onModalDidHide, - event.nativeEvent - ); - - this.emitter.emit( - ModalViewEmitterEventsDeprecated.onModalDismiss, - ModalViewHelpers.createDeprecatedEventObject( - event.nativeEvent - ) - ); - - this.setState({ - isModalVisible: false, - }); - }; - - private _handleOnModalWillFocus: OnModalWillFocusEvent = (event) => { - const props = this.props; - - props.onModalWillFocus?.(event); - event.stopPropagation(); - - this.emitter.emit( - ModalViewEmitterEvents.onModalWillFocus, - event.nativeEvent - ); - - this.setState({ - focusState: event.nativeEvent.modalFocusState.state, - }); - }; - - private _handleOnModalDidFocus: OnModalDidFocusEvent = (event) => { - const props = this.props; - - props.onModalDidFocus?.(event); - props.onModalFocus?.( - ModalViewHelpers.createDeprecatedBaseEventObject(event) - ); - - event.stopPropagation(); - - this.emitter.emit( - ModalViewEmitterEvents.onModalDidFocus, - event.nativeEvent - ); - - this.emitter.emit( - ModalViewEmitterEventsDeprecated.onModalFocus, - ModalViewHelpers.createDeprecatedEventObject( - event.nativeEvent - ) - ); - - this.setState({ - isModalInFocus: true, - focusState: event.nativeEvent.modalFocusState.state, - }); - }; - - private _handleOnModalWillBlur: OnModalWillBlurEvent = (event) => { - const props = this.props; - - props.onModalWillBlur?.(event); - event.stopPropagation(); - - this.emitter.emit( - ModalViewEmitterEvents.onModalWillBlur, - event.nativeEvent - ); - - this.setState({ - focusState: event.nativeEvent.modalFocusState.state, - }); - }; - - private _handleOnModalDidBlur: OnModalDidBlurEvent = (event) => { - const props = this.props; - - props.onModalDidBlur?.(event); - props.onModalBlur?.( - ModalViewHelpers.createDeprecatedBaseEventObject(event) - ); - - event.stopPropagation(); - - this.emitter.emit( - ModalViewEmitterEvents.onModalDidBlur, - event.nativeEvent - ); - - this.emitter.emit( - ModalViewEmitterEventsDeprecated.onModalBlur, - ModalViewHelpers.createDeprecatedEventObject( - event.nativeEvent - ) - ); - - this.setState({ - isModalInFocus: false, - focusState: event.nativeEvent.modalFocusState.state, - }); - }; - - private _handleOnPresentationControllerWillDismiss: OnPresentationControllerWillDismissEvent = (event) => { - const props = this.props; - - props.onPresentationControllerWillDismiss?.(event); - props._onModalWillDismiss?.( - ModalViewHelpers.createDeprecatedBaseEventObject(event) - ); - - event.stopPropagation(); - - this.emitter.emit( - ModalViewEmitterEvents.onPresentationControllerWillDismiss, - event.nativeEvent - ); - - this.emitter.emit( - ModalViewEmitterEventsDeprecated._onModalWillDismiss, - ModalViewHelpers.createDeprecatedEventObject( - event.nativeEvent - ) - ); - }; - - private _handleOnPresentationControllerDidDismiss: OnPresentationControllerDidDismissEvent = (event) => { - const props = this.props; - - props.onPresentationControllerDidDismiss?.(event); - props._onModalDidDismiss?.( - ModalViewHelpers.createDeprecatedBaseEventObject(event) - ); - - event.stopPropagation(); - - this.emitter.emit( - ModalViewEmitterEvents.onPresentationControllerDidDismiss, - event.nativeEvent - ); - - this.emitter.emit( - ModalViewEmitterEventsDeprecated._onModalDidDismiss, - ModalViewHelpers.createDeprecatedEventObject( - event.nativeEvent - ) - ); - }; - - private _handleOnPresentationControllerDidAttemptToDismiss: OnPresentationControllerDidAttemptToDismissEvent = (event) => { - const props = this.props; - - props.onPresentationControllerDidAttemptToDismiss?.(event); - props.onModalAttemptDismiss?.( - ModalViewHelpers.createDeprecatedBaseEventObject(event) - ); - - event.stopPropagation(); - - this.emitter.emit( - ModalViewEmitterEvents.onPresentationControllerDidAttemptToDismiss, - event.nativeEvent - ); - - this.emitter.emit( - ModalViewEmitterEventsDeprecated.onModalAttemptDismiss, - ModalViewHelpers.createDeprecatedEventObject( - event.nativeEvent - ) - ); - }; - - private _handleOnModalDetentDidCompute: - OnModalDetentDidComputeEvent = (event) => { - - const props = this.props; - - props.onModalDetentDidCompute?.(event); - event.stopPropagation(); - - this.emitter.emit( - ModalViewEmitterEvents.onModalDetentDidCompute, - event.nativeEvent - ); - }; - - private _handleOnModalDidChangeSelectedDetentIdentifier: - OnModalDidChangeSelectedDetentIdentifierEvent = (event) => { - - const props = this.props; - - props.onModalDidChangeSelectedDetentIdentifier?.(event); - event.stopPropagation(); - - this.emitter.emit( - ModalViewEmitterEvents.onModalDidChangeSelectedDetentIdentifier, - event.nativeEvent - ); - }; - - private _handleOnModalDidSnap: OnModalDidSnapEvent = (event) => { - const props = this.props; - - props.onModalDidSnap?.(event); - event.stopPropagation(); - - this.emitter.emit( - ModalViewEmitterEvents.onModalDidSnap, - event.nativeEvent - ); - }; - - private _handleOnModalSwipeGestureStart: - OnModalSwipeGestureStartEvent = (event) => { - - const props = this.props; - - props.onModalSwipeGestureStart?.(event); - event.stopPropagation(); - - this.emitter.emit( - ModalViewEmitterEvents.onModalSwipeGestureStart, - event.nativeEvent - ); - }; - - private _handleOnModalSwipeGestureDidEnd: - OnModalSwipeGestureDidEndEvent = (event) => { - - const props = this.props; - - props.onModalSwipeGestureDidEnd?.(event); - event.stopPropagation(); - - this.emitter.emit( - ModalViewEmitterEvents.onModalSwipeGestureDidEnd, - event.nativeEvent - ); - }; - - private _handleOnModalDismissWillCancel: OnModalDismissWillCancelEvent = (event) => { - const props = this.props; - - props.onModalDismissWillCancel?.(event); - event.stopPropagation(); - - this.emitter.emit( - ModalViewEmitterEvents.onModalDismissWillCancel, - event.nativeEvent - ); - }; - - private _handleOnModalDismissDidCancel: OnModalDismissDidCancelEvent = (event) => { - const props = this.props; - - props.onModalDismissDidCancel?.(event); - event.stopPropagation(); - - this.emitter.emit( - ModalViewEmitterEvents.onModalDismissDidCancel, - event.nativeEvent - ); - }; - - private _renderModal() { - const { viewProps, ...props } = this.getProps(); - const state = this.state; - - const overrideProps = { - ...(props.setModalInPresentationFromProps && { - isModalInPresentation: state.isModalInPresentation, - }), - - ...(props.setEnableSwipeGestureFromProps && { - enableSwipeGesture: state.enableSwipeGesture, - }), - }; - - // TODO: See TODO:2023-03-04-12-50-04 - Fix: - // isModalContentLazy Prop - // - // * Error when opening modal once it's been closed - const shouldMountModalContent = - !props.isModalContentLazy || state.isModalVisible; - - return ( - { - this.nativeRefModalView = r!; - }} - style={styles.nativeModalView} - onStartShouldSetResponder={this._shouldSetResponder} - onModalWillPresent={this._handleOnModalWillPresent} - onModalDidPresent={this._handleOnModalDidPresent} - onModalWillDismiss={this._handleOnModalWillDismiss} - onModalDidDismiss={this._handleOnModalDidDismiss} - onModalWillShow={this._handleOnModalWillShow} - onModalDidShow={this._handleOnModalDidShow} - onModalWillHide={this._handleOnModalWillHide} - onModalDidHide={this._handleOnModalDidHide} - onModalWillFocus={this._handleOnModalWillFocus} - onModalDidFocus={this._handleOnModalDidFocus} - onModalWillBlur={this._handleOnModalWillBlur} - onModalDidBlur={this._handleOnModalDidBlur} - onPresentationControllerWillDismiss={this._handleOnPresentationControllerWillDismiss} - onPresentationControllerDidDismiss={this._handleOnPresentationControllerDidDismiss} - onPresentationControllerDidAttemptToDismiss={this._handleOnPresentationControllerDidAttemptToDismiss} - onModalDetentDidCompute={this._handleOnModalDetentDidCompute} - onModalDidChangeSelectedDetentIdentifier={this._handleOnModalDidChangeSelectedDetentIdentifier} - onModalDidSnap={this._handleOnModalDidSnap} - onModalSwipeGestureStart={this._handleOnModalSwipeGestureStart} - onModalSwipeGestureDidEnd={this._handleOnModalSwipeGestureDidEnd} - onModalDismissWillCancel={this._handleOnModalDismissWillCancel} - onModalDismissDidCancel={this._handleOnModalDismissDidCancel} - {...overrideProps} - {...viewProps} - > - {shouldMountModalContent && ( - - - {React.cloneElement(props.children as any, { - getModalRef: this._handleGetModalRef, - // pass down props received from setVisibility - ...(Helpers.isObject(state.childProps) && state.childProps), - // pass down modalID - modalID: props.modalID, - })} - - - )} - - ); - } - - render() { - const state = this.state; - - if (Platform.OS !== 'ios') { - return null; - } - - return ( - - - {hasScrollViewContext ? ( - // @ts-ignore - - {this._renderModal()} - {/* - // @ts-ignore */} - - ) : ( - this._renderModal() - )} - - - ); - } -} - -const styles = StyleSheet.create({ - nativeModalView: { - position: 'absolute', - width: 0, - height: 0, - overflow: 'hidden', - }, - modalContentWrapper: { - position: 'absolute', - overflow: 'visible', - top: 0, - bottom: 0, - left: 0, - right: 0, - }, - modalContentContainer: { - flex: 1, - }, -}); - -class ModalViewHelpers { - static createDeprecatedEventObject( - event: RNIModalBaseEventData - ): RNIModalDeprecatedBaseEvent { - return { - modalUUID: event.modalNativeID, - modalID: event.modalID, - reactTag: event.reactTag, - isInFocus: event.modalFocusState.isFocused, - modalLevel: event.modalIndex, - modalLevelPrev: event.modalIndexPrev, - isPresented: event.modalPresentationState.isPresented, - }; - } - - static createDeprecatedBaseEventObject( - event: NativeSyntheticEvent - ): NativeSyntheticEvent { - return { - ...event, - nativeEvent: ModalViewHelpers.createDeprecatedEventObject( - event.nativeEvent - ), - }; - } -} diff --git a/src/components/ModalView/ModalViewConstants.ts b/src/components/ModalView/ModalViewConstants.ts deleted file mode 100644 index 56aee519..00000000 --- a/src/components/ModalView/ModalViewConstants.ts +++ /dev/null @@ -1,12 +0,0 @@ -import React from 'react'; -import { ScrollView } from 'react-native'; - -export const NATIVE_ID_KEYS = { - modalViewContent: 'modalViewContent', -}; - -export const VirtualizedListContext = React.createContext(null); - -// fix for react-native 0.60 -export const hasScrollViewContext: boolean = - (ScrollView as any).Context?.Provider != null; diff --git a/src/components/ModalView/ModalViewEmitter.ts b/src/components/ModalView/ModalViewEmitter.ts deleted file mode 100644 index 6f0905e1..00000000 --- a/src/components/ModalView/ModalViewEmitter.ts +++ /dev/null @@ -1,101 +0,0 @@ -import type { LayoutChangeEvent } from 'react-native'; -import type { TSEventEmitter } from '@dominicstop/ts-event-emitter'; - -import type { - OnModalWillPresentEventObject, - OnModalDidPresentEventObject, - OnModalWillDismissEventObject, - OnModalDidDismissEventObject, - OnModalWillShowEventObject, - OnModalDidShowEventObject, - OnModalWillHideEventObject, - OnModalDidHideEventObject, - OnModalWillFocusEventObject, - OnModalDidFocusEventObject, - OnModalWillBlurEventObject, - OnModalDidBlurEventObject, - OnPresentationControllerWillDismissEventObject, - OnPresentationControllerDidDismissEventObject, - OnPresentationControllerDidAttemptToDismissEventObject, - OnModalDetentDidComputeEventObject, - OnModalDidChangeSelectedDetentIdentifierEventObject, - OnModalDidSnapEventObject, - OnModalSwipeGestureStartEventObject, - OnModalSwipeGestureDidEndEventObject, - OnModalDismissWillCancelEventObject, - OnModalDismissDidCancelEventObject, -} from 'src/native_components/RNIModalView'; - -import type { KeyMapType } from '../../types/UtilityTypes'; - -import type { - ModalViewEmitterEventMapDeprecated, - ModalViewEmitterEventsDeprecated, -} from './ModalViewEmitterDeprecated'; - -export enum ModalViewEmitterEvents { - // `RNIModalView` Events - onModalWillPresent = 'onModalWillPresent', - onModalDidPresent = 'onModalDidPresent', - onModalWillDismiss = 'onModalWillDismiss', - onModalDidDismiss = 'onModalDidDismiss', - onModalWillShow = 'onModalWillShow', - onModalDidShow = 'onModalDidShow', - onModalWillHide = 'onModalWillHide', - onModalDidHide = 'onModalDidHide', - onModalWillFocus = 'onModalWillFocus', - onModalDidFocus = 'onModalDidFocus', - onModalWillBlur = 'onModalWillBlur', - onModalDidBlur = 'onModalDidBlur', - onPresentationControllerWillDismiss = 'onPresentationControllerWillDismiss', - onPresentationControllerDidDismiss = 'onPresentationControllerDidDismiss', - onPresentationControllerDidAttemptToDismiss = 'onPresentationControllerDidAttemptToDismiss', - onModalDetentDidCompute = 'onModalDetentDidCompute', - onModalDidChangeSelectedDetentIdentifier = 'onModalDidChangeSelectedDetentIdentifier', - onModalDidSnap = 'onModalDidSnap', - onModalSwipeGestureStart = 'onModalSwipeGestureStart', - onModalSwipeGestureDidEnd = 'onModalSwipeGestureDidEnd', - onModalDismissWillCancel = 'onModalDismissWillCancel', - onModalDismissDidCancel = 'onModalDismissDidCancel', - - onLayoutModalContentContainer = 'onLayoutModalContentContainer', -} - -// TODO: See TODO:20230-03-04-12-58-40 - Refactor: Types - -// Remove KeyMapType Usage -// -export type ModalViewEmitterEventMap = - // prettier-ignore - KeyMapType; - -export type ModalViewEventEmitter = TSEventEmitter< - ModalViewEmitterEvents & ModalViewEmitterEventsDeprecated, - ModalViewEmitterEventMap & ModalViewEmitterEventMapDeprecated ->; diff --git a/src/components/ModalView/ModalViewEmitterDeprecated.ts b/src/components/ModalView/ModalViewEmitterDeprecated.ts deleted file mode 100644 index b0a14ee8..00000000 --- a/src/components/ModalView/ModalViewEmitterDeprecated.ts +++ /dev/null @@ -1,54 +0,0 @@ -import type { LayoutChangeEvent } from 'react-native'; -import type { TSEventEmitter } from '@dominicstop/ts-event-emitter'; - -import type { - OnModalBlurEventObject, - OnModalFocusEventObject, - OnModalShowEventObject, - OnModalDismissEventObject, - OnModalAttemptDismissEventObject, - DeprecatedOnModalWillDismissEventObject, - DeprecatedOnModalDidDismissEventObject, -} from 'src/native_components/RNIModalView'; - -import type { KeyMapType } from '../../types/UtilityTypes'; - -/** @deprecated */ -export enum ModalViewEmitterEventsDeprecated { - // `RNIModalView` Events - onModalBlur = 'onModalBlur', - onModalFocus = 'onModalFocus', - onModalShow = 'onModalShow', - onModalDismiss = 'onModalDismiss', - _onModalDidDismiss = '_onModalDidDismiss', - _onModalWillDismiss = '_onModalWillDismiss', - onModalAttemptDismiss = 'onModalAttemptDismiss', - - onLayoutModalContentContainer = 'onLayoutModalContentContainer', -} - -// TODO: See TODO:20230-03-04-12-58-40 - Refactor: Types - -// Remove KeyMapType Usage -// -/** @deprecated */ -export type ModalViewEmitterEventMapDeprecated = - // prettier-ignore - KeyMapType; - -/** @deprecated */ -export type ModalViewEventEmitterDeprecated = TSEventEmitter< - ModalViewEmitterEventsDeprecated, - ModalViewEmitterEventMapDeprecated ->; diff --git a/src/components/ModalView/ModalViewProps.ts b/src/components/ModalView/ModalViewProps.ts deleted file mode 100644 index 40f3c66b..00000000 --- a/src/components/ModalView/ModalViewProps.ts +++ /dev/null @@ -1,100 +0,0 @@ -import type { ViewProps, ViewStyle } from 'react-native'; - -import type { - RNIModalViewProps, - OnModalFocusEvent, - OnModalShowEvent, - OnModalAttemptDismissEvent, - OnModalDismissEvent, - OnModalBlurEvent, - DeprecatedOnModalWillDismissEvent, - DeprecatedOnModalDidDismissEvent, -} from 'src/native_components/RNIModalView'; - -import type { RNIComputableSize } from '../../types/RNIComputable'; - -export type ModalViewBaseProps = Partial< - Pick< - RNIModalViewProps, - // Props - General - | 'modalID' - - // Props - BG-Related - | 'isModalBGBlurred' - | 'isModalBGTransparent' - | 'modalBGBlurEffectStyle' - - // Props - Presentation/Transition - | 'modalPresentationStyle' - | 'modalTransitionStyle' - | 'hideNonVisibleModals' - | 'presentViaMount' - | 'enableSwipeGesture' - | 'allowModalForceDismiss' - | 'isModalInPresentation' - - // Props - Sheet-Related - | 'modalSheetDetents' - | 'sheetPrefersScrollingExpandsWhenScrolledToEdge' - | 'sheetPrefersEdgeAttachedInCompactHeight' - | 'sheetWidthFollowsPreferredContentSizeWhenEdgeAttached' - | 'sheetPrefersGrabberVisible' - | 'sheetShouldAnimateChanges' - | 'sheetLargestUndimmedDetentIdentifier' - | 'sheetPreferredCornerRadius' - | 'sheetSelectedDetentIdentifier' - - // props - events - | 'onModalWillPresent' - | 'onModalDidPresent' - | 'onModalWillDismiss' - | 'onModalDidDismiss' - | 'onModalWillShow' - | 'onModalDidShow' - | 'onModalWillHide' - | 'onModalDidHide' - | 'onModalWillFocus' - | 'onModalDidFocus' - | 'onModalWillBlur' - | 'onModalDidBlur' - | 'onPresentationControllerWillDismiss' - | 'onPresentationControllerDidDismiss' - | 'onPresentationControllerDidAttemptToDismiss' - | 'onModalDetentDidCompute' - | 'onModalDidChangeSelectedDetentIdentifier' - | 'onModalDidSnap' - | 'onModalSwipeGestureStart' - | 'onModalSwipeGestureDidEnd' - | 'onModalDismissWillCancel' - | 'onModalDismissDidCancel' - > -> & { - modalContentPreferredContentSize?: RNIComputableSize; - - // TODO: See TODO:2023-03-04-13-02-45 - Refactor: Rename to - // shouldAutoCloseOnUnmount - autoCloseOnUnmount?: boolean; - setEnableSwipeGestureFromProps?: boolean; - setModalInPresentationFromProps?: boolean; - isModalContentLazy?: boolean; - - shouldEnableAggressiveCleanup?: boolean; - - containerStyle: ViewStyle; - children?: React.ReactNode; -}; - -/** @deprecated */ -export type ModalViewDeprecatedProps = { - /** @deprecated */ onModalFocus?: OnModalFocusEvent; - /** @deprecated */ onModalShow?: OnModalShowEvent; - /** @deprecated */ onModalAttemptDismiss?: OnModalAttemptDismissEvent; - /** @deprecated */ onModalDismiss?: OnModalDismissEvent; - /** @deprecated */ onModalBlur?: OnModalBlurEvent; - /** @deprecated */ _onModalWillDismiss?: DeprecatedOnModalWillDismissEvent; - /** @deprecated */ _onModalDidDismiss?: DeprecatedOnModalDidDismissEvent; -}; - -// prettier-ignore -export type ModalViewProps = - ViewProps & ModalViewBaseProps & ModalViewDeprecatedProps; diff --git a/src/components/ModalView/ModalViewState.ts b/src/components/ModalView/ModalViewState.ts deleted file mode 100644 index cf8f44ea..00000000 --- a/src/components/ModalView/ModalViewState.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { ModalFocusState } from 'src/types/RNIModalTypes'; - -export type ModalViewState = { - isModalVisible: boolean; - childProps: unknown; - enableSwipeGesture: boolean; - isModalInPresentation: boolean; - isModalInFocus: boolean; - - focusState: ModalFocusState; -}; diff --git a/src/components/ModalView/index.ts b/src/components/ModalView/index.ts deleted file mode 100644 index a3952db5..00000000 --- a/src/components/ModalView/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './ModalView'; -export * from './ModalViewProps'; -export * from './ModalViewState'; -export * from './ModalViewEmitter'; -export * from './ModalViewEmitterDeprecated'; diff --git a/src/constants/Enums.ts b/src/constants/Enums.ts deleted file mode 100644 index d46306e2..00000000 --- a/src/constants/Enums.ts +++ /dev/null @@ -1,72 +0,0 @@ -import type { UIBlurEffectStyle } from 'src/types/NativeTypes'; - -import type { - UIModalPresentationStyle, - UIModalTransitionStyle, -} from 'src/types/NativeTypes'; - -export const UIBlurEffectStyles: { - [T in UIBlurEffectStyle]: T; -} = { - // Adaptable Styles - systemUltraThinMaterial: 'systemUltraThinMaterial', - systemThinMaterial: 'systemThinMaterial', - systemMaterial: 'systemMaterial', - systemThickMaterial: 'systemThickMaterial', - systemChromeMaterial: 'systemChromeMaterial', - - // Light Styles - systemMaterialLight: 'systemMaterialLight', - systemThinMaterialLight: 'systemThinMaterialLight', - systemUltraThinMaterialLight: 'systemUltraThinMaterialLight', - systemThickMaterialLight: 'systemThickMaterialLight', - systemChromeMaterialLight: 'systemChromeMaterialLight', - - // Dark Styles - systemChromeMaterialDark: 'systemChromeMaterialDark', - systemMaterialDark: 'systemMaterialDark', - systemThickMaterialDark: 'systemThickMaterialDark', - systemThinMaterialDark: 'systemThinMaterialDark', - systemUltraThinMaterialDark: 'systemUltraThinMaterialDark', - - // Additional Styles - regular: 'regular', - prominent: 'prominent', - light: 'light', - extraLight: 'extraLight', - dark: 'dark', - extraDark: 'extraDark', -}; - -export const UIModalPresentationStyles: { - [T in UIModalPresentationStyle]: T; -} = { - automatic: 'automatic', - fullScreen: 'fullScreen', - pageSheet: 'pageSheet', - formSheet: 'formSheet', - overFullScreen: 'overFullScreen', - - // NOT SUPPORTED - // ------------- - - none: 'none', - currentContext: 'currentContext', - custom: 'custom', - overCurrentContext: 'overCurrentContext', - popover: 'popover', - blurOverFullScreen: 'blurOverFullScreen', -}; - -export const UIModalTransitionStyles: { - [T in UIModalTransitionStyle]: T; -} = { - coverVertical: 'coverVertical', - crossDissolve: 'crossDissolve', - flipHorizontal: 'flipHorizontal', - - // NOT SUPPORTED - // ------------- - - partialCurl: 'partialCurl', -}; diff --git a/src/context/ModalContext.ts b/src/context/ModalContext.ts deleted file mode 100644 index 8a6f2d5a..00000000 --- a/src/context/ModalContext.ts +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; -import type { ModalView, ModalViewState } from 'src/components/ModalView'; - -// prettier-ignore -export type ModalContextType = Partial< - // `ModalView` Methods #1 - Pick< - ModalView, - | 'getEmitterRef' - | 'setVisibility' - | 'setEnableSwipeGesture' - | 'setIsModalInPresentation' - > - // `ModalView` State - & Pick< - ModalViewState, - | 'isModalInFocus' - | 'isModalVisible' - | 'focusState' - > - // `ModalView` Methods #2 - & { - getModalRef: ModalView['_handleGetModalRef']; - } ->; - -export const ModalContext = React.createContext({}); diff --git a/src/functions/helpers.ts b/src/functions/helpers.ts deleted file mode 100644 index 03790697..00000000 --- a/src/functions/helpers.ts +++ /dev/null @@ -1,41 +0,0 @@ -/** 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(); - }); - }); -} - -/** 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 isObject(value: unknown): value is object { - const type = typeof value; - return value != null && (type === 'object' || type === 'function'); -} diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index 30912e0e..00000000 --- a/src/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -export * from './components/ModalView'; - -export * from './module/ModalViewModule'; - -export * from './constants/Enums'; -export * from './context/ModalContext'; - -export * from './native_components/RNIModalView'; -export * from './native_modules/RNIModalViewModule'; - -export * from './types/NativeTypes'; -export * from './types/RNIModalTypes'; -export * from './types/RNIComputable'; diff --git a/src/module/ModalViewModule.ts b/src/module/ModalViewModule.ts deleted file mode 100644 index 34f8ee5c..00000000 --- a/src/module/ModalViewModule.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { RNIModalViewModule } from '../native_modules/RNIModalViewModule'; - -export class ModalViewModule { - static async setModalVisibilityByID( - modalID: string, - visibility: boolean, - animated = true - ) { - await RNIModalViewModule.setModalVisibilityByID( - modalID, - visibility, - animated - ); - } - - static async dismissAllModals(animated = true) { - await RNIModalViewModule.dismissAllModals(animated); - } -} diff --git a/src/native_components/RNIModalView/RNIModalView.ts b/src/native_components/RNIModalView/RNIModalView.ts deleted file mode 100644 index db32e6a6..00000000 --- a/src/native_components/RNIModalView/RNIModalView.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { - View, - UIManager, - requireNativeComponent, - Platform, - HostComponent, -} from 'react-native'; - -import type { - RNIModalViewConstantMap, - RNIModalViewProps, -} from './RNIModalViewTypes'; - -const nativeViewName = 'RNIModalView'; - -/** - * Do not use `RNIModalView` if platform is not iOS. - */ -export const RNIModalView: HostComponent = Platform.select({ - ios: () => requireNativeComponent(nativeViewName) as any, - default: () => View, -})(); - -export const RNIModalViewConstants: Partial = - (UIManager as Record)[nativeViewName]?.Constants ?? {}; - -export const AvailableBlurEffectStyles = - RNIModalViewConstants?.availableBlurEffectStyles ?? []; - -export const AvailablePresentationStyles = - RNIModalViewConstants?.availablePresentationStyles ?? []; diff --git a/src/native_components/RNIModalView/RNIModalViewDeprecatedEvents.ts b/src/native_components/RNIModalView/RNIModalViewDeprecatedEvents.ts deleted file mode 100644 index b3b696b3..00000000 --- a/src/native_components/RNIModalView/RNIModalViewDeprecatedEvents.ts +++ /dev/null @@ -1,95 +0,0 @@ -import type { NativeSyntheticEvent } from 'react-native'; - -// Event Object Types -// ------------------ - -/** @deprecated */ -export type RNIModalDeprecatedBaseEvent = { - modalUUID: string; - isInFocus: boolean; - isPresented: boolean; - modalLevel: number; - modalLevelPrev: number; - reactTag?: number; - modalID?: string; -}; - -// Native Event Object -// ------------------- - -/** @deprecated */ -export type OnModalShowEventObject = NativeSyntheticEvent< - RNIModalDeprecatedBaseEvent & {} ->; - -/** @deprecated */ -export type OnModalDismissEventObject = NativeSyntheticEvent< - RNIModalDeprecatedBaseEvent & {} ->; - -/** @deprecated */ -export type OnModalBlurEventObject = NativeSyntheticEvent< - RNIModalDeprecatedBaseEvent & {} ->; - -/** @deprecated */ -export type OnModalFocusEventObject = NativeSyntheticEvent< - RNIModalDeprecatedBaseEvent & {} ->; - -/** @deprecated */ -export type OnModalAttemptDismissEventObject = NativeSyntheticEvent< - RNIModalDeprecatedBaseEvent & {} ->; - -/** @deprecated */ -export type DeprecatedOnModalWillDismissEventObject = NativeSyntheticEvent< - RNIModalDeprecatedBaseEvent & {} ->; - -/** @deprecated */ -export type DeprecatedOnModalDidDismissEventObject = NativeSyntheticEvent< - RNIModalDeprecatedBaseEvent & {} ->; - -// Event Handler Types -// ------------------- - -// prettier-ignore -/** @deprecated */ -export type OnModalShowEvent = ( - event: OnModalShowEventObject -) => void; - -// prettier-ignore -/** @deprecated */ -export type OnModalDismissEvent = ( - event: OnModalDismissEventObject -) => void; - -// prettier-ignore -/** @deprecated */ -export type OnModalBlurEvent = ( - event: OnModalBlurEventObject -) => void; - -// prettier-ignore -/** @deprecated */ -export type OnModalFocusEvent = ( - event: OnModalFocusEventObject -) => void; - -/** @deprecated */ -export type OnModalAttemptDismissEvent = ( - event: OnModalAttemptDismissEventObject -) => void; - -/** @deprecated */ -export type DeprecatedOnModalWillDismissEvent = ( - event: DeprecatedOnModalWillDismissEventObject -) => void; - -/** @deprecated */ -export type DeprecatedOnModalDidDismissEvent = ( - event: DeprecatedOnModalDidDismissEventObject -) => void; diff --git a/src/native_components/RNIModalView/RNIModalViewEventData.ts b/src/native_components/RNIModalView/RNIModalViewEventData.ts deleted file mode 100644 index 75e60b6c..00000000 --- a/src/native_components/RNIModalView/RNIModalViewEventData.ts +++ /dev/null @@ -1,41 +0,0 @@ -import type { CGPoint, CGSize } from 'src/types/NativeTypes'; -import type { RNIModalData } from 'src/types/RNIModalTypes'; - -// Event Object Types -// ------------------ - -/** Based on `RNIModalBaseEventData` */ -export type RNIModalBaseEventData = RNIModalData & { - reactTag: number; - modalID?: string; -}; - -/** Based on `RNIOnModalFocusEventData` */ -export type RNIOnModalFocusEventData = RNIModalBaseEventData & { - senderInfo: RNIModalData; - isInitial: boolean; -}; - -/** Based on `RNIModalSwipeGestureEventData` */ -export type RNIModalSwipeGestureEventData = { - position: CGPoint; -}; - -/** Based on `RNIModalDidSnapEventData` */ -export type RNIModalDidSnapEventData = { - selectedDetentIdentifier?: string; - modalContentSize: CGSize; -}; - -/** Based on RNIModalDidChangeSelectedDetentIdentifierEventData */ -export type RNIModalDidChangeSelectedDetentIdentifierEventData = { - sheetDetentStringPrevious?: string; - sheetDetentStringCurrent?: string; -}; - -/** Based on RNIModalDetentDidComputeEventData */ -export type RNIModalDetentDidComputeEventData = { - maximumDetentValue: number; - computedDetentValue: number; - key: string; -}; diff --git a/src/native_components/RNIModalView/RNIModalViewEventObjects.ts b/src/native_components/RNIModalView/RNIModalViewEventObjects.ts deleted file mode 100644 index 8dca71ba..00000000 --- a/src/native_components/RNIModalView/RNIModalViewEventObjects.ts +++ /dev/null @@ -1,79 +0,0 @@ -import type { NativeSyntheticEvent } from 'react-native'; - -import type { - RNIModalBaseEventData, - RNIModalDetentDidComputeEventData, - RNIModalDidChangeSelectedDetentIdentifierEventData, - RNIOnModalFocusEventData, - RNIModalDidSnapEventData, - RNIModalSwipeGestureEventData, -} from './RNIModalViewEventData'; - -// Native Event Object -// ------------------- - -export type OnModalWillPresentEventObject = - NativeSyntheticEvent; - -export type OnModalDidPresentEventObject = - NativeSyntheticEvent; - -export type OnModalWillDismissEventObject = - NativeSyntheticEvent; - -export type OnModalDidDismissEventObject = - NativeSyntheticEvent; - -export type OnModalWillShowEventObject = - NativeSyntheticEvent; - -export type OnModalDidShowEventObject = - NativeSyntheticEvent; - -export type OnModalWillHideEventObject = - NativeSyntheticEvent; - -export type OnModalDidHideEventObject = - NativeSyntheticEvent; - -export type OnPresentationControllerWillDismissEventObject = - NativeSyntheticEvent; - -export type OnPresentationControllerDidDismissEventObject = - NativeSyntheticEvent; - -export type OnPresentationControllerDidAttemptToDismissEventObject = - NativeSyntheticEvent; - -export type OnModalWillFocusEventObject = - NativeSyntheticEvent; - -export type OnModalDidFocusEventObject = - NativeSyntheticEvent; - -export type OnModalDetentDidComputeEventObject = - NativeSyntheticEvent; - -export type OnModalDidChangeSelectedDetentIdentifierEventObject = - NativeSyntheticEvent; - -export type OnModalWillBlurEventObject = - NativeSyntheticEvent; - -export type OnModalDidBlurEventObject = - NativeSyntheticEvent; - -export type OnModalDidSnapEventObject = - NativeSyntheticEvent; - -export type OnModalSwipeGestureStartEventObject = - NativeSyntheticEvent; - -export type OnModalSwipeGestureDidEndEventObject = - NativeSyntheticEvent; - -export type OnModalDismissWillCancelEventObject = - NativeSyntheticEvent; - -export type OnModalDismissDidCancelEventObject = - NativeSyntheticEvent; diff --git a/src/native_components/RNIModalView/RNIModalViewEvents.ts b/src/native_components/RNIModalView/RNIModalViewEvents.ts deleted file mode 100644 index 3f064e15..00000000 --- a/src/native_components/RNIModalView/RNIModalViewEvents.ts +++ /dev/null @@ -1,118 +0,0 @@ -/* eslint-disable prettier/prettier */ - -import type { - OnModalWillPresentEventObject, - OnModalDidPresentEventObject, - OnModalWillDismissEventObject, - OnModalDidDismissEventObject, - OnModalWillShowEventObject, - OnModalDidShowEventObject, - OnModalWillHideEventObject, - OnModalDidHideEventObject, - OnPresentationControllerWillDismissEventObject, - OnPresentationControllerDidDismissEventObject, - OnPresentationControllerDidAttemptToDismissEventObject, - OnModalWillFocusEventObject, - OnModalDidFocusEventObject, - OnModalWillBlurEventObject, - OnModalDidBlurEventObject, - OnModalDetentDidComputeEventObject, - OnModalDidChangeSelectedDetentIdentifierEventObject, - OnModalDidSnapEventObject, - OnModalSwipeGestureStartEventObject, - OnModalSwipeGestureDidEndEventObject, - OnModalDismissWillCancelEventObject, - OnModalDismissDidCancelEventObject, -} from './RNIModalViewEventObjects'; - -// Event Handler Types -// ------------------- - -export type OnModalWillPresentEvent = ( - event: OnModalWillPresentEventObject -) => void; - -export type OnModalDidPresentEvent = ( - event: OnModalDidPresentEventObject -) => void; - -export type OnModalWillDismissEvent = ( - event: OnModalWillDismissEventObject -) => void; - -export type OnModalDidDismissEvent = ( - event: OnModalDidDismissEventObject -) => void; - -export type OnModalWillShowEvent = ( - event: OnModalWillShowEventObject -) => void; - -export type OnModalDidShowEvent = ( - event: OnModalDidShowEventObject -) => void; - -export type OnModalWillHideEvent = ( - event: OnModalWillHideEventObject -) => void; - -export type OnModalDidHideEvent = ( - event: OnModalDidHideEventObject -) => void; - -export type OnPresentationControllerWillDismissEvent = ( - event: OnPresentationControllerWillDismissEventObject -) => void; - -export type OnPresentationControllerDidDismissEvent = ( - event: OnPresentationControllerDidDismissEventObject -) => void; - -export type OnPresentationControllerDidAttemptToDismissEvent = ( - event: OnPresentationControllerDidAttemptToDismissEventObject -) => void; - -export type OnModalWillFocusEvent = ( - event: OnModalWillFocusEventObject -) => void; - -export type OnModalDidFocusEvent = ( - event: OnModalDidFocusEventObject -) => void; - -export type OnModalWillBlurEvent = ( - event: OnModalWillBlurEventObject -) => void; - -export type OnModalDidBlurEvent = ( - event: OnModalDidBlurEventObject -) => void; - -export type OnModalDetentDidComputeEvent = ( - event: OnModalDetentDidComputeEventObject -) => void; - -export type OnModalDidChangeSelectedDetentIdentifierEvent = ( - event: OnModalDidChangeSelectedDetentIdentifierEventObject -) => void; - -export type OnModalDidSnapEvent = ( - event: OnModalDidSnapEventObject -) => void; - -export type OnModalSwipeGestureStartEvent = ( - event: OnModalSwipeGestureStartEventObject -) => void; - -export type OnModalSwipeGestureDidEndEvent = ( - event: OnModalSwipeGestureDidEndEventObject -) => void; - -export type OnModalDismissWillCancelEvent = ( - event: OnModalDismissWillCancelEventObject -) => void; - -export type OnModalDismissDidCancelEvent = ( - event: OnModalDismissDidCancelEventObject -) => void; - diff --git a/src/native_components/RNIModalView/RNIModalViewTypes.ts b/src/native_components/RNIModalView/RNIModalViewTypes.ts deleted file mode 100644 index 5554c0cd..00000000 --- a/src/native_components/RNIModalView/RNIModalViewTypes.ts +++ /dev/null @@ -1,134 +0,0 @@ -import type { ViewProps } from 'react-native'; - -import type { - UIModalPresentationStyle, - UIModalTransitionStyle, - UISheetPresentationControllerDetents, - UIBlurEffectStyle, -} from 'src/types/NativeTypes'; - -import type { RNIModalCustomSheetDetent } from 'src/types/RNIModalTypes'; -import type { ViewManagerConstantMap } from 'src/types/ViewModuleRelatedTypes'; - -import type { - OnModalWillPresentEvent, - OnModalDidPresentEvent, - OnModalWillDismissEvent, - OnModalDidDismissEvent, - OnModalWillShowEvent, - OnModalDidShowEvent, - OnModalWillHideEvent, - OnModalDidHideEvent, - OnModalWillFocusEvent, - OnModalDidFocusEvent, - OnModalWillBlurEvent, - OnModalDidBlurEvent, - OnPresentationControllerWillDismissEvent, - OnPresentationControllerDidDismissEvent, - OnPresentationControllerDidAttemptToDismissEvent, - OnModalDetentDidComputeEvent, - OnModalDidChangeSelectedDetentIdentifierEvent, - OnModalDidSnapEvent, - OnModalSwipeGestureStartEvent, - OnModalSwipeGestureDidEndEvent, - OnModalDismissWillCancelEvent, - OnModalDismissDidCancelEvent, -} from './RNIModalViewEvents'; - -import type { UnionWithAutoComplete } from 'src/types/UtilityTypes'; -import type { RNIComputableSize } from 'src/types/RNIComputable'; - -export type RNIModalViewBaseProps = { - // Props - General - // --------------- - - modalID?: string; - modalContentPreferredContentSize?: RNIComputableSize; - - // Props - BG-Related - // ------------------ - - isModalBGBlurred?: boolean; - isModalBGTransparent?: boolean; - modalBGBlurEffectStyle?: UIBlurEffectStyle; - - // Props - Presentation/Transition - // ------------------------------- - - modalTransitionStyle?: UIModalTransitionStyle; - modalPresentationStyle?: UIModalPresentationStyle; - - hideNonVisibleModals?: boolean; - presentViaMount?: boolean; - enableSwipeGesture?: boolean; - allowModalForceDismiss?: boolean; - isModalInPresentation?: boolean; - - // Props - Sheet-Related - // --------------------- - - modalSheetDetents?: Array< - UISheetPresentationControllerDetents | RNIModalCustomSheetDetent - >; - - sheetPrefersScrollingExpandsWhenScrolledToEdge?: boolean; - sheetPrefersEdgeAttachedInCompactHeight?: boolean; - sheetWidthFollowsPreferredContentSizeWhenEdgeAttached?: boolean; - sheetPrefersGrabberVisible?: boolean; - sheetShouldAnimateChanges?: boolean; - - sheetPreferredCornerRadius?: number; - - sheetLargestUndimmedDetentIdentifier?: UnionWithAutoComplete< - UISheetPresentationControllerDetents, - string - >; - - sheetSelectedDetentIdentifier?: UnionWithAutoComplete< - UISheetPresentationControllerDetents, - string - >; - - // Props - Events - // -------------- - - onModalWillPresent: OnModalWillPresentEvent; - onModalDidPresent: OnModalDidPresentEvent; - - onModalWillDismiss: OnModalWillDismissEvent; - onModalDidDismiss: OnModalDidDismissEvent; - - onModalWillShow: OnModalWillShowEvent; - onModalDidShow: OnModalDidShowEvent; - - onModalWillHide: OnModalWillHideEvent; - onModalDidHide: OnModalDidHideEvent; - - onModalWillFocus: OnModalWillFocusEvent; - onModalDidFocus: OnModalDidFocusEvent; - - onModalWillBlur: OnModalWillBlurEvent; - onModalDidBlur: OnModalDidBlurEvent; - - onPresentationControllerWillDismiss: OnPresentationControllerWillDismissEvent; - onPresentationControllerDidDismiss: OnPresentationControllerDidDismissEvent; - onPresentationControllerDidAttemptToDismiss: OnPresentationControllerDidAttemptToDismissEvent; - - onModalDetentDidCompute: OnModalDetentDidComputeEvent; - onModalDidChangeSelectedDetentIdentifier: OnModalDidChangeSelectedDetentIdentifierEvent; - - onModalDidSnap: OnModalDidSnapEvent; - - onModalSwipeGestureStart: OnModalSwipeGestureStartEvent; - onModalSwipeGestureDidEnd: OnModalSwipeGestureDidEndEvent; - - onModalDismissWillCancel: OnModalDismissWillCancelEvent; - onModalDismissDidCancel: OnModalDismissDidCancelEvent; -}; - -export type RNIModalViewProps = Partial & RNIModalViewBaseProps; - -export type RNIModalViewConstantMap = ViewManagerConstantMap<{ - availableBlurEffectStyles: UIBlurEffectStyle[]; - availablePresentationStyles: UIModalPresentationStyle[]; -}>; diff --git a/src/native_components/RNIModalView/index.ts b/src/native_components/RNIModalView/index.ts deleted file mode 100644 index 6501c417..00000000 --- a/src/native_components/RNIModalView/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from './RNIModalView'; -export * from './RNIModalViewEvents'; -export * from './RNIModalViewEventObjects'; -export * from './RNIModalViewEventData'; -export * from './RNIModalViewDeprecatedEvents'; -export * from './RNIModalViewTypes'; diff --git a/src/native_modules/RNIModalViewModule.ts b/src/native_modules/RNIModalViewModule.ts deleted file mode 100644 index 5f2db852..00000000 --- a/src/native_modules/RNIModalViewModule.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { NativeModules, NativeEventEmitter } from 'react-native'; -import type { RNIModalBaseEventData } from 'src/native_components/RNIModalView'; - -const MODULE_NAME = 'RNIModalViewModule'; - -interface RNIModalViewModule { - // Standalone Functions - // -------------------- - - // prettier-ignore - setModalVisibilityByID( - modalID: string, - visibility: boolean, - animated: boolean, - ): Promise; - - // prettier-ignore - dismissAllModals( - animated: boolean, - ): Promise; - - // View-Related Functions - // ---------------------- - - // prettier-ignore - setModalVisibility( - node: number, - visibility: boolean - ): Promise; - - // prettier-ignore - requestModalInfo( - node: number, - ): Promise; -} - -export const RNIModalViewModule: RNIModalViewModule = - NativeModules[MODULE_NAME]; - -// prettier-ignore -export const RNIModalViewFocusEvents = - new NativeEventEmitter(RNIModalViewModule as any); diff --git a/src/temp/constants/RNIBaseErrorCodes.ts b/src/temp/constants/RNIBaseErrorCodes.ts deleted file mode 100644 index 45771107..00000000 --- a/src/temp/constants/RNIBaseErrorCodes.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { RNIBaseErrorCode } from "../types/RNIError"; - - -export const RNIBaseErrorCodes: { - [key in RNIBaseErrorCode]: key; -} = { - runtimeError : 'runtimeError' , - libraryError : 'libraryError' , - reactError : 'reactError' , - unknownError : 'unknownError' , - invalidArgument: 'invalidArgument', - outOfBounds : 'outOfBounds' , - invalidReactTag: 'invalidReactTag', - nilValue : 'nilValue' , -}; \ No newline at end of file diff --git a/src/temp/functions/ErrorUtilities.ts b/src/temp/functions/ErrorUtilities.ts deleted file mode 100644 index af080ecf..00000000 --- a/src/temp/functions/ErrorUtilities.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { NativeError } from "../types/NativeError"; -import { TypeUtils } from "./TypeUtils"; - - -export class ErrorUtilities { - static isNativeError(error: unknown): error is NativeError { - if(error == null) return false; - if(typeof error !== 'object') return false; - - if(!TypeUtils.hasKey('code' , error)) return false; - if(!TypeUtils.hasKey('domain' , error)) return false; - if(!TypeUtils.hasKey('message', error)) return false; - - if(typeof error.code !== 'string') return false; - if(typeof error.domain !== 'string') return false; - if(typeof error.message !== 'string') return false; - - return true; - }; -}; \ No newline at end of file diff --git a/src/temp/functions/Helpers.ts b/src/temp/functions/Helpers.ts deleted file mode 100644 index 994744e0..00000000 --- a/src/temp/functions/Helpers.ts +++ /dev/null @@ -1,54 +0,0 @@ -// @ts-nocheck - -import { findNodeHandle } from 'react-native'; - -/** 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(); - }); - }); -}; - -/** 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 getNativeNodeHandle(nativeRef: React.Component) { - const nodeHandle = findNodeHandle(nativeRef); - - if (nodeHandle === null) { - throw new Error('Unable to get the node handle for the native ref.'); - }; - - return nodeHandle; -}; diff --git a/src/temp/functions/TypeUtils.ts b/src/temp/functions/TypeUtils.ts deleted file mode 100644 index d1f23541..00000000 --- a/src/temp/functions/TypeUtils.ts +++ /dev/null @@ -1,11 +0,0 @@ - - -export class TypeUtils { - static hasKey( - key: K, object: T - ): object is T & Record { - return key in object; - }; -}; - - diff --git a/src/temp/index.tsx b/src/temp/index.tsx deleted file mode 100644 index ccbb746d..00000000 --- a/src/temp/index.tsx +++ /dev/null @@ -1,18 +0,0 @@ -export * from './functions/Helpers'; -export * from './functions/ErrorUtilities'; -export * from './functions/TypeUtils'; - -export * from './types/RNIError'; -export * from './types/NativeError'; -export * from './types/MiscTypes'; -export * from './types/UtilityTypes'; -export * from './types/RNICleanupMode'; -export * from './types/RNIJSComponentWillUnmountNotifiable'; -export * from './types/ImageItemConfig'; - -export * from './constants/RNIBaseErrorCodes'; - -export * from './native_components/RNIWrapperView'; -export * from './native_modules/RNIWrapperViewModule'; - -export * from './native_modules/RNIUtilitiesModule'; diff --git a/src/temp/native_components/RNIWrapperView.ts b/src/temp/native_components/RNIWrapperView.ts deleted file mode 100644 index 02623c84..00000000 --- a/src/temp/native_components/RNIWrapperView.ts +++ /dev/null @@ -1,71 +0,0 @@ -import React from 'react'; -import { requireNativeComponent, ViewProps, ViewStyle } from 'react-native'; - -import { RNIWrapperViewModule } from '../native_modules/RNIWrapperViewModule'; - -import * as Helpers from '../functions/Helpers'; - - -export type RNIWrapperViewProps = ViewProps & { - style?: ViewStyle; - nativeID?: string; - children?: React.ReactElement; - - shouldNotifyComponentWillUnmount?: boolean; - shouldAutoCleanupOnJSUnmount?: boolean; - shouldAutoCleanupOnWindowNil?: boolean; - shouldAutoSetSizeOnLayout?: boolean; - - isDummyView?: boolean; - shouldAutoDetachSubviews?: boolean; - - shouldCreateTouchHandlerForParentView?: boolean; - shouldCreateTouchHandlerForSubviews?: boolean; -}; - - -const COMPONENT_NAME = 'RNIWrapperView'; - -const NativeComponent = - requireNativeComponent(COMPONENT_NAME); - - -export class RNIWrapperView extends React.PureComponent { - nativeRef!: React.Component; - - constructor(props: RNIWrapperViewProps){ - super(props); - }; - - private _handleNativeRef = (ref: React.Component) => { - this.nativeRef = ref; - }; - - componentWillUnmount(){ - const shouldNotifyComponentWillUnmount = - this.props.shouldNotifyComponentWillUnmount ?? false; - - if(shouldNotifyComponentWillUnmount){ - this.notifyComponentWillUnmount(false); - }; - }; - - notifyComponentWillUnmount = (isManuallyTriggered: boolean = true) => { - RNIWrapperViewModule.notifyComponentWillUnmount( - Helpers.getNativeNodeHandle(this.nativeRef), - { isManuallyTriggered } - ); - }; - - render(){ - const props = this.props; - - return React.createElement(NativeComponent, { - ...props, - ref: this._handleNativeRef, - - shouldNotifyComponentWillUnmount: - props.shouldNotifyComponentWillUnmount ?? false, - }); - }; -}; \ No newline at end of file diff --git a/src/temp/native_modules/RNIUtilitiesModule.ts b/src/temp/native_modules/RNIUtilitiesModule.ts deleted file mode 100644 index a809868a..00000000 --- a/src/temp/native_modules/RNIUtilitiesModule.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { NativeModules } from 'react-native'; - - -interface RNIUtilitiesModule { - initialize(params: object): void; -}; - -const MODULE_NAME = "RNIUtilitiesModule"; - -export const RNIUtilitiesModule: RNIUtilitiesModule = - NativeModules[MODULE_NAME]; - -// Calling this will initialize `RNIUtilities.sharedBridge`. -// Note: This module must be imported for this function to be invoked. -RNIUtilitiesModule.initialize({}); diff --git a/src/temp/native_modules/RNIWrapperViewModule.ts b/src/temp/native_modules/RNIWrapperViewModule.ts deleted file mode 100644 index 66770f09..00000000 --- a/src/temp/native_modules/RNIWrapperViewModule.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { NativeModules } from 'react-native'; - - -interface RNIWrapperViewModule { - notifyComponentWillUnmount( - node: number, - params: { - isManuallyTriggered: boolean; - } - ): void; -}; - -const MODULE_NAME = "RNIWrapperViewModule"; - -export const RNIWrapperViewModule: RNIWrapperViewModule = - NativeModules[MODULE_NAME]; \ No newline at end of file diff --git a/src/temp/types/ImageItemConfig/ImageGradientConfig.ts b/src/temp/types/ImageItemConfig/ImageGradientConfig.ts deleted file mode 100644 index d8857bdf..00000000 --- a/src/temp/types/ImageItemConfig/ImageGradientConfig.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { PointPreset } from "../MiscTypes"; -import type { Point } from "../MiscTypes"; -import type { ImageRectConfig } from "./ImageRectConfig"; - - -export type ImageGradientConfig = Partial> & { - /* An array defining the color of each gradient stop. */ - colors: Array; - - /* Defines the location of each gradient stop. */ - locations?: Array; - - /* The start point of the gradient when drawn in the layer’s coordinate space. */ - startPoint?: Point | PointPreset; - - /* The end point of the gradient when drawn in the layer’s coordinate space. */ - endPoint?: Point | PointPreset; - - /* Style of gradient drawn by the layer. Defaults to axial. */ - type?: 'axial' | 'conic' | 'radial' -}; \ No newline at end of file diff --git a/src/temp/types/ImageItemConfig/ImageItemConfig.ts b/src/temp/types/ImageItemConfig/ImageItemConfig.ts deleted file mode 100644 index 8f2f4718..00000000 --- a/src/temp/types/ImageItemConfig/ImageItemConfig.ts +++ /dev/null @@ -1,53 +0,0 @@ -import type { ImageOptions } from './ImageOptions'; -import type { ImageLoadingConfig, ImageRemoteUrlConfig, ImageRemoteURLLoadingConfig } from './ImageLoadingConfig'; -import type { ImageSystemConfig } from './ImageSystemConfig'; -import type { ImageResolvedAssetSource } from './ImageMiscTypes'; -import type { ImageRectConfig } from './ImageRectConfig'; -import type { ImageGradientConfig } from './ImageGradientConfig'; - -/** - * A configuration object for images. - * - * This configuration object is used to either programmatically create images, - * (e.g. gradients, rects, SFSymbols icons, etc)., or refer to existing image assets - * in the project (e.g. js image assets, XCAssets). - */ -export type ImageItemConfig = { - type: 'IMAGE_ASSET'; - /** The corresponding key of asset item in the asset catalog */ - imageValue: string; - imageOptions?: ImageOptions; - -} | { - type: 'IMAGE_SYSTEM'; - /** The key/name of the SF Symbols system icon */ - imageValue: ImageSystemConfig; - imageOptions?: ImageOptions; - -} | { - type: 'IMAGE_REQUIRE'; - /** Object returned by `Image.resolveAssetSource()` */ - imageValue: ImageResolvedAssetSource; - imageOptions?: ImageOptions; - imageLoadingConfig?: ImageLoadingConfig; - -} | { - type: 'IMAGE_EMPTY'; - -} | { - type: 'IMAGE_RECT'; - imageValue: ImageRectConfig; - -} | { - type: 'IMAGE_GRADIENT'; - imageValue: ImageGradientConfig; - imageOptions?: ImageOptions; - -} | { - type: 'IMAGE_REMOTE_URL'; - imageValue: ImageRemoteUrlConfig; - imageLoadingConfig?: ImageRemoteURLLoadingConfig; - imageOptions?: ImageOptions; -}; - -export type ImageItemConfigType = ImageItemConfig['type']; diff --git a/src/temp/types/ImageItemConfig/ImageLoadingConfig.ts b/src/temp/types/ImageItemConfig/ImageLoadingConfig.ts deleted file mode 100644 index aefe9e6a..00000000 --- a/src/temp/types/ImageItemConfig/ImageLoadingConfig.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { ImageItemConfig } from "./ImageItemConfig"; - - -export type ImageLoadingConfig = { - shouldCache?: boolean; - shouldLazyLoad?: boolean; -}; - -export type ImageRemoteUrlConfig = { - url: string; - fallbackImage?: ImageItemConfig; -}; - -export type ImageRemoteURLFallbackBehavior = - | 'afterFinalAttempt' - | 'whileNotLoaded' - | 'onLoadError'; - -export type ImageRemoteURLLoadingConfig = ImageLoadingConfig & { - maxRetryAttempts?: number; - shouldImmediatelyRetryLoading?: boolean; - fallbackBehavior?: ImageRemoteURLFallbackBehavior -}; diff --git a/src/temp/types/ImageItemConfig/ImageMiscTypes.ts b/src/temp/types/ImageItemConfig/ImageMiscTypes.ts deleted file mode 100644 index 3d0ec331..00000000 --- a/src/temp/types/ImageItemConfig/ImageMiscTypes.ts +++ /dev/null @@ -1,17 +0,0 @@ - -/** Object returned by `Image.resolveAssetSource()` */ -export type ImageResolvedAssetSource = { - height: number; - width: number; - scale: number; - uri: string; -}; - -export enum ImageTypes { - IMAGE_ASSET = 'IMAGE_ASSET' , - IMAGE_SYSTEM = 'IMAGE_SYSTEM' , - IMAGE_REQUIRE = 'IMAGE_REQUIRE' , - IMAGE_EMPTY = 'IMAGE_EMPTY' , - IMAGE_RECT = 'IMAGE_RECT' , - IMAGE_GRADIENT = 'IMAGE_GRADIENT', -}; \ No newline at end of file diff --git a/src/temp/types/ImageItemConfig/ImageOptions.ts b/src/temp/types/ImageItemConfig/ImageOptions.ts deleted file mode 100644 index 632d8d3b..00000000 --- a/src/temp/types/ImageItemConfig/ImageOptions.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { DynamicColor } from "../MiscTypes"; - - -/** Maps to `UIImage.RenderingMode`*/ -export type ImageRenderingModes = - 'automatic' | 'alwaysOriginal' | 'alwaysTemplate'; - -/** `UIImage`-related */ -export type UIImageConfig = { - tint?: string | DynamicColor; - renderingMode?: ImageRenderingModes; -}; - -export type ImageOptions = UIImageConfig & { - cornerRadius?: number -}; \ No newline at end of file diff --git a/src/temp/types/ImageItemConfig/ImageRectConfig.ts b/src/temp/types/ImageItemConfig/ImageRectConfig.ts deleted file mode 100644 index dde99bad..00000000 --- a/src/temp/types/ImageItemConfig/ImageRectConfig.ts +++ /dev/null @@ -1,7 +0,0 @@ - -export type ImageRectConfig = { - width: number; - height: number; - fillColor: string; - borderRadius?: number; -}; \ No newline at end of file diff --git a/src/temp/types/ImageItemConfig/ImageSystemConfig.ts b/src/temp/types/ImageItemConfig/ImageSystemConfig.ts deleted file mode 100644 index 4a294b94..00000000 --- a/src/temp/types/ImageItemConfig/ImageSystemConfig.ts +++ /dev/null @@ -1,37 +0,0 @@ -import type { DynamicColor } from "../MiscTypes"; - -export type ImageSymbolWeight = - | 'unspecified' - | 'ultraLight' - | 'thin' - | 'light' - | 'regular' - | 'medium' - | 'semibold' - | 'bold' - | 'heavy' - | 'black'; - -export type ImageSymbolScale = - | 'default' - | 'unspecified' - | 'small' - | 'medium' - | 'large'; - -export type ImageSystemConfig = ImageSystemSymbolConfiguration & { - systemName: string; -}; - -/** Maps to `UIImage.SymbolConfiguration` */ -export type ImageSystemSymbolConfiguration = { - pointSize?: number; - weight?: ImageSymbolWeight; - scale?: ImageSymbolScale; -} & ({ - /** Requires iOS 15+ */ - hierarchicalColor?: string | DynamicColor; -} | { - /** Requires iOS 15+ */ - paletteColors?: Array; -}); diff --git a/src/temp/types/ImageItemConfig/index.ts b/src/temp/types/ImageItemConfig/index.ts deleted file mode 100644 index abf86a35..00000000 --- a/src/temp/types/ImageItemConfig/index.ts +++ /dev/null @@ -1,9 +0,0 @@ - - -export * from './ImageGradientConfig'; -export * from './ImageItemConfig'; -export * from './ImageLoadingConfig'; -export * from './ImageMiscTypes'; -export * from './ImageOptions'; -export * from './ImageRectConfig'; -export * from './ImageSystemConfig'; \ No newline at end of file diff --git a/src/temp/types/MiscTypes.ts b/src/temp/types/MiscTypes.ts deleted file mode 100644 index ddada074..00000000 --- a/src/temp/types/MiscTypes.ts +++ /dev/null @@ -1,23 +0,0 @@ - -export type PointPreset = - | 'top' - | 'bottom' - | 'left' - | 'right' - | 'bottomLeft' - | 'bottomRight' - | 'topLeft' - | 'topRight'; - -export type Point = { - x: number; - y: number; -}; - -/** Object return by `DynamicColorIOS` */ -export type DynamicColor = { - dynamic: { - dark: string; - light: string; - }; -}; \ No newline at end of file diff --git a/src/temp/types/NativeError.ts b/src/temp/types/NativeError.ts deleted file mode 100644 index 9cb71739..00000000 --- a/src/temp/types/NativeError.ts +++ /dev/null @@ -1,8 +0,0 @@ - - -export type NativeError = { - code: string; - domain: string; - message: string; - nativeStackIOS: string[]; -}; \ No newline at end of file diff --git a/src/temp/types/RNICleanupMode.ts b/src/temp/types/RNICleanupMode.ts deleted file mode 100644 index 45fea979..00000000 --- a/src/temp/types/RNICleanupMode.ts +++ /dev/null @@ -1,11 +0,0 @@ - - -export type RNICleanupMode = - | 'automatic' - | 'viewController' - | 'reactComponentWillUnmount' - | 'disabled'; - -export type RNIInternalCleanupModeProps = { - internalCleanupMode?: RNICleanupMode; -}; \ No newline at end of file diff --git a/src/temp/types/RNIError.ts b/src/temp/types/RNIError.ts deleted file mode 100644 index 60766d6a..00000000 --- a/src/temp/types/RNIError.ts +++ /dev/null @@ -1,22 +0,0 @@ - -/// Corresponds to `RNIGenericErrorDefaultable`, i.e. the default/base -/// error codes. -export type RNIBaseErrorCode = - | 'runtimeError' - | 'libraryError' - | 'reactError' - | 'unknownError' - | 'invalidArgument' - | 'outOfBounds' - | 'invalidReactTag' - | 'nilValue'; - - -export type RNIBaseError = { - code: T; - domain: string; - message?: string; - debug?: string; -}; - -export type RNIGenericError = RNIBaseError; \ No newline at end of file diff --git a/src/temp/types/RNIJSComponentWillUnmountNotifiable.ts b/src/temp/types/RNIJSComponentWillUnmountNotifiable.ts deleted file mode 100644 index 1ec42ca3..00000000 --- a/src/temp/types/RNIJSComponentWillUnmountNotifiable.ts +++ /dev/null @@ -1,7 +0,0 @@ - -export type RNIJSComponentWillUnmountNotifiable = { - notifyComponentWillUnmount( - node: number, - params: {} - ): void; -}; \ No newline at end of file diff --git a/src/temp/types/UtilityTypes.ts b/src/temp/types/UtilityTypes.ts deleted file mode 100644 index 7062c227..00000000 --- a/src/temp/types/UtilityTypes.ts +++ /dev/null @@ -1,5 +0,0 @@ - -export type KeyMapType - = K; - -export type FunctionVoid = () => void; \ No newline at end of file diff --git a/src/types/NativeTypes.ts b/src/types/NativeTypes.ts deleted file mode 100644 index 3cc99553..00000000 --- a/src/types/NativeTypes.ts +++ /dev/null @@ -1,59 +0,0 @@ -/* eslint-disable prettier/prettier */ - -export type CGSize = { - width: number; - height: number; -}; - -export type CGPoint = { - x: number; - y: number; -}; - -export type UIModalTransitionStyle = - | 'coverVertical' - | 'flipHorizontal' - | 'crossDissolve' - | 'partialCurl'; - -export type UIModalPresentationStyle = - | 'automatic' - | 'none' - | 'fullScreen' - | 'pageSheet' - | 'formSheet' - | 'currentContext' - | 'custom' - | 'overFullScreen' - | 'overCurrentContext' - | 'popover' - | 'blurOverFullScreen'; - -/** Maps to `UISheetPresentationController.Detents` */ -export type UISheetPresentationControllerDetents = - | 'medium' - | 'large'; - -/** Maps to `UIBlurEffect.Style` */ -export type UIBlurEffectStyle = - | 'systemUltraThinMaterial' - | 'systemThinMaterial' - | 'systemMaterial' - | 'systemThickMaterial' - | 'systemChromeMaterial' - | 'systemUltraThinMaterialLight' - | 'systemThinMaterialLight' - | 'systemMaterialLight' - | 'systemThickMaterialLight' - | 'systemChromeMaterialLight' - | 'systemUltraThinMaterialDark' - | 'systemThinMaterialDark' - | 'systemMaterialDark' - | 'systemThickMaterialDark' - | 'systemChromeMaterialDark' - | 'extraLight' - | 'light' - | 'dark' - | 'extraDark' - | 'regular' - | 'prominent'; diff --git a/src/types/RNIComputable/RNIComputableOffset.ts b/src/types/RNIComputable/RNIComputableOffset.ts deleted file mode 100644 index aed09b37..00000000 --- a/src/types/RNIComputable/RNIComputableOffset.ts +++ /dev/null @@ -1,4 +0,0 @@ -export type RNIComputableOffset = { - offset: number; - offsetOperation?: 'multiply' | 'divide' | 'add' | 'subtract'; -}; diff --git a/src/types/RNIComputable/RNIComputableSize.ts b/src/types/RNIComputable/RNIComputableSize.ts deleted file mode 100644 index 52071f8d..00000000 --- a/src/types/RNIComputable/RNIComputableSize.ts +++ /dev/null @@ -1,34 +0,0 @@ -/* eslint-disable prettier/prettier */ - -import type { RNIComputableOffset } from './RNIComputableOffset'; - - -type RNIComputableSizeShared = { - offsetWidth?: RNIComputableOffset; - offsetHeight?: RNIComputableOffset; - - minWidth?: number; - minHeight?: number; - - maxWidth?: number; - maxHeight?: number; -}; - -type RNIComputableSizeModeBase = { - mode: 'current'; -} | { - mode: 'stretch'; -} | { - mode: 'constant'; - constantWidth: number; - constantHeight: number; -} | { - mode: 'percent'; - percentWidth: number; - percentHeight: number; -}; - - -export type RNIComputableSize = - | RNIComputableSizeModeBase - & RNIComputableSizeShared; diff --git a/src/types/RNIComputable/RNIComputableValue.ts b/src/types/RNIComputable/RNIComputableValue.ts deleted file mode 100644 index 25e3e54d..00000000 --- a/src/types/RNIComputable/RNIComputableValue.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* eslint-disable prettier/prettier */ - -import type { RNIComputableOffset } from './RNIComputableOffset'; - - -type RNIComputableValueShared = { - offset?: RNIComputableOffset; - minValue?: number; - maxValue?: number; -}; - -type RNIComputableValueModeBase = { - mode: 'current'; -} | { - mode: 'stretch'; -} | { - mode: 'constant'; - constantValue: number; -} | { - mode: 'percent'; - percentValue: number; -}; - - -export type RNIComputableValue = - | RNIComputableValueModeBase - & RNIComputableValueShared; diff --git a/src/types/RNIComputable/index.ts b/src/types/RNIComputable/index.ts deleted file mode 100644 index 6432266b..00000000 --- a/src/types/RNIComputable/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './RNIComputableOffset'; -export * from './RNIComputableSize'; -export * from './RNIComputableValue'; diff --git a/src/types/RNIModalTypes.ts b/src/types/RNIModalTypes.ts deleted file mode 100644 index a613e0f0..00000000 --- a/src/types/RNIModalTypes.ts +++ /dev/null @@ -1,79 +0,0 @@ -/* eslint-disable prettier/prettier */ - -import type { RNIComputableOffset } from './RNIComputable'; - -/** Maps to `RNIModalCustomSheetDetent` */ -export type RNIModalCustomSheetDetent = Partial & { - mode: 'relative'; - key: string; - sizeMultiplier: number; -} | { - mode: 'constant'; - key: string; - sizeConstant: number; -}; - -/** Maps to `RNIModalFocusState` */ -export type ModalFocusState = - | 'INITIAL' - | 'FOCUSING' - | 'FOCUSED' - | 'BLURRING' - | 'BLURRED'; - -/** Maps to `RNIModalPresentationState` */ -export type ModalPresentationState = - | 'INITIAL' - | 'PRESENTING_PROGRAMMATIC' - | 'PRESENTING_UNKNOWN' - | 'PRESENTED' - | 'PRESENTED_UNKNOWN' - | 'DISMISSING_GESTURE' - | 'DISMISSING_PROGRAMMATIC' - | 'DISMISSING_UNKNOWN' - | 'DISMISS_GESTURE_CANCELLING' - | 'DISMISSED'; - - -/** Based on `RNIModalFocusStateMachine.asDictionary` */ -export type RNIModalFocusStateMachine = { - state: ModalFocusState; - statePrev: ModalFocusState; - isFocused: boolean; - isBlurred: boolean; - isTransitioning: boolean; - wasBlurCancelled: boolean; - wasFocusCancelled: boolean; -}; - -/** Based on `RNIModalPresentationStateMachine.asDictionary` */ -export type RNIModalPresentationStateMachine = { - state: ModalPresentationState; - statePrev: ModalPresentationState; - isInitialPresent: boolean; - isPresented: boolean; - isDismissed: boolean; - wasCancelledDismiss: boolean; - wasCancelledPresent: boolean; - wasCancelledDismissViaGesture: boolean; -}; - -/** Based on `RNIModalData` */ -export type RNIModalData = { - modalNativeID: string; - - modalIndex: number; - modalIndexPrev: number; - currentModalIndex: number; - - modalFocusState: RNIModalFocusStateMachine; - modalPresentationState: RNIModalPresentationStateMachine; - - computedIsModalInFocus: boolean; - computedIsModalPresented: boolean; - computedModalIndex: number; - computedViewControllerIndex: number; - computedCurrentModalIndex: number; - - synthesizedWindowID?: string; -}; diff --git a/src/types/UtilityTypes.ts b/src/types/UtilityTypes.ts deleted file mode 100644 index c6e737b8..00000000 --- a/src/types/UtilityTypes.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type KeyMapType = K; - -export type FunctionVoid = () => void; - -export interface Nothing {} -export type UnionWithAutoComplete = T | (U & Nothing); diff --git a/src/types/ViewModuleRelatedTypes.ts b/src/types/ViewModuleRelatedTypes.ts deleted file mode 100644 index 95fa8082..00000000 --- a/src/types/ViewModuleRelatedTypes.ts +++ /dev/null @@ -1,15 +0,0 @@ -// TODO: TODO:2023-03-04-13-22-34 - Refactor: Remove -// `ViewModuleRelatedTypes` -// -// * Move this file (i.e. `ViewModuleRelatedTypes`) to -// `react-native-utilities` - -export type ViewManagerCommandID = string | number; - -export type ViewManagerCommandMap = { - [K in T]: ViewManagerCommandID; -}; - -export type ViewManagerConstantMap> = { - [K in keyof T]: T[K]; -}; diff --git a/tsconfig.build.json b/tsconfig.build.json deleted file mode 100644 index f86cfcb1..00000000 --- a/tsconfig.build.json +++ /dev/null @@ -1,12 +0,0 @@ - -{ - "extends": "./tsconfig", - "exclude": [ - "example", - "node_modules", - "src/temp", - "src/temp/**", - "src/temp/**/*.ts", - "src/temp/**/*.tsx", - ] -} diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 5e6e199d..00000000 --- a/tsconfig.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": ".", - "paths": { - "react-native-ios-modal": ["./src/index"] - }, - - "target": "esnext", - "module": "esnext", - "lib": ["esnext"], - "jsx": "react", - "moduleResolution": "node", - "esModuleInterop": true, - - // lint - style + dead code - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "noUnusedLocals": true, - "noUnusedParameters": true, - "importsNotUsedAsValues": "error", - "forceConsistentCasingInFileNames": true, - - // lint - common mistakes - "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, - "noUncheckedIndexedAccess": true, - - "noStrictGenericChecks": false, - "resolveJsonModule": true, - "skipLibCheck": true, - - "strict": true, - - // temporarily disable strict - // temporary until migration is finished - "allowJs": false, - - // need while "allowJs" option is set to true - "outDir": "./lib/typescript", - }, -} diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index dd8826b1..00000000 --- a/yarn.lock +++ /dev/null @@ -1,7523 +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.13.16", "@babel/core@^7.14.0", "@babel/core@^7.18.5": - 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/eslint-parser@^7.18.2": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz#4f68f6b0825489e00a24b41b6a1ae35414ecd2f4" - integrity sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ== - dependencies: - "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" - eslint-visitor-keys "^2.1.0" - 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.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.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@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", "@babel/helper-plugin-utils@^7.8.3": - 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-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" - integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz#a11af19aa373d68d561f08e0a57242350ed0ec50" - integrity sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" - "@babel/plugin-proposal-optional-chaining" "^7.18.9" - -"@babel/plugin-proposal-async-generator-functions@^7.0.0", "@babel/plugin-proposal-async-generator-functions@^7.19.1": - 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", "@babel/plugin-proposal-class-properties@^7.17.12", "@babel/plugin-proposal-class-properties@^7.18.6": - 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-class-static-block@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz#8aa81d403ab72d3962fc06c26e222dacfc9b9020" - integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-proposal-dynamic-import@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" - integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@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-export-namespace-from@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" - integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" - integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz#8148cbb350483bf6220af06fa6db3690e14b2e23" - integrity sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8", "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": - 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-numeric-separator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" - integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.19.4": - 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", "@babel/plugin-proposal-optional-catch-binding@^7.18.6": - 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", "@babel/plugin-proposal-optional-chaining@^7.18.9": - 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-proposal-private-methods@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" - integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-proposal-private-property-in-object@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz#a64137b232f0aca3733a67eb1a144c192389c503" - integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" - integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@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", "@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-dynamic-import@^7.0.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - 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-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.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-import-assertions@^7.18.6": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4" - integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== - dependencies: - "@babel/helper-plugin-utils" "^7.19.0" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@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-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@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-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@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-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-typescript@^7.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", "@babel/plugin-transform-arrow-functions@^7.18.6": - 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", "@babel/plugin-transform-async-to-generator@^7.18.6": - 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", "@babel/plugin-transform-block-scoped-functions@^7.18.6": - 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", "@babel/plugin-transform-block-scoping@^7.19.4": - 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", "@babel/plugin-transform-classes@^7.19.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", "@babel/plugin-transform-computed-properties@^7.18.9": - 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", "@babel/plugin-transform-destructuring@^7.19.4": - 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-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" - integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-duplicate-keys@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" - integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - -"@babel/plugin-transform-exponentiation-operator@^7.0.0", "@babel/plugin-transform-exponentiation-operator@^7.18.6": - 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", "@babel/plugin-transform-for-of@^7.18.8": - 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", "@babel/plugin-transform-function-name@^7.18.9": - 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", "@babel/plugin-transform-literals@^7.18.9": - 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", "@babel/plugin-transform-member-expression-literals@^7.18.6": - 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-amd@^7.18.6": - version "7.19.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz#aca391801ae55d19c4d8d2ebfeaa33df5f2a2cbd" - integrity sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg== - dependencies: - "@babel/helper-module-transforms" "^7.19.6" - "@babel/helper-plugin-utils" "^7.19.0" - -"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.18.6": - 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-modules-systemjs@^7.19.0": - version "7.19.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz#59e2a84064b5736a4471b1aa7b13d4431d327e0d" - integrity sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ== - dependencies: - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-module-transforms" "^7.19.6" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-validator-identifier" "^7.19.1" - -"@babel/plugin-transform-modules-umd@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" - integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== - dependencies: - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.0.0", "@babel/plugin-transform-named-capturing-groups-regex@^7.19.1": - 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-new-target@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" - integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.18.6": - 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", "@babel/plugin-transform-property-literals@^7.18.6": - 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", "@babel/plugin-transform-react-display-name@^7.18.6": - 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-development@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" - integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== - dependencies: - "@babel/plugin-transform-react-jsx" "^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", "@babel/plugin-transform-react-jsx@^7.18.6": - 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-react-pure-annotations@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" - integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-regenerator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz#585c66cb84d4b4bf72519a34cfce761b8676ca73" - integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - regenerator-transform "^0.15.0" - -"@babel/plugin-transform-reserved-words@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" - integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@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", "@babel/plugin-transform-shorthand-properties@^7.18.6": - 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", "@babel/plugin-transform-spread@^7.19.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", "@babel/plugin-transform-sticky-regex@^7.18.6": - 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", "@babel/plugin-transform-template-literals@^7.18.9": - 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-typeof-symbol@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" - integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== - 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-escapes@^7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" - integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - -"@babel/plugin-transform-unicode-regex@^7.0.0", "@babel/plugin-transform-unicode-regex@^7.18.6": - 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-env@^7.18.2": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.19.4.tgz#4c91ce2e1f994f717efb4237891c3ad2d808c94b" - integrity sha512-5QVOTXUdqTCjQuh2GGtdd7YEhoRXBMVGROAtsBeLGIbIz3obCBIfRMT1I3ZKkMgNzwkyCkftDXSSkHxnfVf4qg== - dependencies: - "@babel/compat-data" "^7.19.4" - "@babel/helper-compilation-targets" "^7.19.3" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-validator-option" "^7.18.6" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-async-generator-functions" "^7.19.1" - "@babel/plugin-proposal-class-properties" "^7.18.6" - "@babel/plugin-proposal-class-static-block" "^7.18.6" - "@babel/plugin-proposal-dynamic-import" "^7.18.6" - "@babel/plugin-proposal-export-namespace-from" "^7.18.9" - "@babel/plugin-proposal-json-strings" "^7.18.6" - "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" - "@babel/plugin-proposal-numeric-separator" "^7.18.6" - "@babel/plugin-proposal-object-rest-spread" "^7.19.4" - "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" - "@babel/plugin-proposal-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-private-methods" "^7.18.6" - "@babel/plugin-proposal-private-property-in-object" "^7.18.6" - "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.18.6" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.18.6" - "@babel/plugin-transform-async-to-generator" "^7.18.6" - "@babel/plugin-transform-block-scoped-functions" "^7.18.6" - "@babel/plugin-transform-block-scoping" "^7.19.4" - "@babel/plugin-transform-classes" "^7.19.0" - "@babel/plugin-transform-computed-properties" "^7.18.9" - "@babel/plugin-transform-destructuring" "^7.19.4" - "@babel/plugin-transform-dotall-regex" "^7.18.6" - "@babel/plugin-transform-duplicate-keys" "^7.18.9" - "@babel/plugin-transform-exponentiation-operator" "^7.18.6" - "@babel/plugin-transform-for-of" "^7.18.8" - "@babel/plugin-transform-function-name" "^7.18.9" - "@babel/plugin-transform-literals" "^7.18.9" - "@babel/plugin-transform-member-expression-literals" "^7.18.6" - "@babel/plugin-transform-modules-amd" "^7.18.6" - "@babel/plugin-transform-modules-commonjs" "^7.18.6" - "@babel/plugin-transform-modules-systemjs" "^7.19.0" - "@babel/plugin-transform-modules-umd" "^7.18.6" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.1" - "@babel/plugin-transform-new-target" "^7.18.6" - "@babel/plugin-transform-object-super" "^7.18.6" - "@babel/plugin-transform-parameters" "^7.18.8" - "@babel/plugin-transform-property-literals" "^7.18.6" - "@babel/plugin-transform-regenerator" "^7.18.6" - "@babel/plugin-transform-reserved-words" "^7.18.6" - "@babel/plugin-transform-shorthand-properties" "^7.18.6" - "@babel/plugin-transform-spread" "^7.19.0" - "@babel/plugin-transform-sticky-regex" "^7.18.6" - "@babel/plugin-transform-template-literals" "^7.18.9" - "@babel/plugin-transform-typeof-symbol" "^7.18.9" - "@babel/plugin-transform-unicode-escapes" "^7.18.10" - "@babel/plugin-transform-unicode-regex" "^7.18.6" - "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.19.4" - babel-plugin-polyfill-corejs2 "^0.3.3" - babel-plugin-polyfill-corejs3 "^0.6.0" - babel-plugin-polyfill-regenerator "^0.4.1" - core-js-compat "^3.25.1" - semver "^6.3.0" - -"@babel/preset-flow@^7.13.13", "@babel/preset-flow@^7.17.12": - 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-modules@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" - integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/preset-react@^7.17.12": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" - integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-validator-option" "^7.18.6" - "@babel/plugin-transform-react-display-name" "^7.18.6" - "@babel/plugin-transform-react-jsx" "^7.18.6" - "@babel/plugin-transform-react-jsx-development" "^7.18.6" - "@babel/plugin-transform-react-pure-annotations" "^7.18.6" - -"@babel/preset-typescript@^7.13.0", "@babel/preset-typescript@^7.17.12": - 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.8.4": - 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", "@babel/traverse@^7.7.4": - 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", "@babel/types@^7.4.4": - 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" - -"@dominicstop/ts-event-emitter@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@dominicstop/ts-event-emitter/-/ts-event-emitter-1.1.0.tgz#1f3d3fa878a1ccab686931280757954719cf88e4" - integrity sha512-CcxmJIvUb1vsFheuGGVSQf4KdPZC44XolpUT34+vlal+LyQoBUOn31pjFET5M9ctOxEpt8xa0M3/2M7uUiAoJw== - -"@eslint/eslintrc@^1.3.3": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" - integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.4.0" - globals "^13.15.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@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" - -"@humanwhocodes/config-array@^0.11.6": - version "0.11.7" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.7.tgz#38aec044c6c828f6ed51d5d7ae3d9b9faf6dbb0f" - integrity sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw== - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@iarna/toml@2.2.5": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" - integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== - -"@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" - -"@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": - version "5.1.1-v1" - resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" - integrity sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg== - dependencies: - eslint-scope "5.1.1" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@octokit/auth-token@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.2.tgz#a0fc8de149fd15876e1ac78f6525c1c5ab48435f" - integrity sha512-pq7CwIMV1kmzkFTimdwjAINCXKTajZErLB4wMLYapR2nuB/Jpr66+05wOTZMSCBXP6n4DdDWT2W19Bm17vU69Q== - dependencies: - "@octokit/types" "^8.0.0" - -"@octokit/core@^4.0.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.1.0.tgz#b6b03a478f1716de92b3f4ec4fd64d05ba5a9251" - integrity sha512-Czz/59VefU+kKDy+ZfDwtOIYIkFjExOKf+HA92aiTZJ6EfWpFzYQWw0l54ji8bVmyhc+mGaLUbSUmXazG7z5OQ== - dependencies: - "@octokit/auth-token" "^3.0.0" - "@octokit/graphql" "^5.0.0" - "@octokit/request" "^6.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^8.0.0" - before-after-hook "^2.2.0" - universal-user-agent "^6.0.0" - -"@octokit/endpoint@^7.0.0": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.3.tgz#0b96035673a9e3bedf8bab8f7335de424a2147ed" - integrity sha512-57gRlb28bwTsdNXq+O3JTQ7ERmBTuik9+LelgcLIVfYwf235VHbN9QNo4kXExtp/h8T423cR5iJThKtFYxC7Lw== - dependencies: - "@octokit/types" "^8.0.0" - is-plain-object "^5.0.0" - universal-user-agent "^6.0.0" - -"@octokit/graphql@^5.0.0": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.4.tgz#519dd5c05123868276f3ae4e50ad565ed7dff8c8" - integrity sha512-amO1M5QUQgYQo09aStR/XO7KAl13xpigcy/kI8/N1PnZYSS69fgte+xA4+c2DISKqUZfsh0wwjc2FaCt99L41A== - dependencies: - "@octokit/request" "^6.0.0" - "@octokit/types" "^8.0.0" - universal-user-agent "^6.0.0" - -"@octokit/openapi-types@^13.11.0": - version "13.13.1" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-13.13.1.tgz#a783bacb1817c9f61a2a0c3f81ea22ad62340fdf" - integrity sha512-4EuKSk3N95UBWFau3Bz9b3pheQ8jQYbKmBL5+GSuY8YDPDwu03J4BjI+66yNi8aaX/3h1qDpb0mbBkLdr+cfGQ== - -"@octokit/openapi-types@^14.0.0": - version "14.0.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-14.0.0.tgz#949c5019028c93f189abbc2fb42f333290f7134a" - integrity sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw== - -"@octokit/plugin-paginate-rest@^4.0.0": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-4.3.1.tgz#553e653ee0318605acd23bf3a799c8bfafdedae3" - integrity sha512-h8KKxESmSFTcXX409CAxlaOYscEDvN2KGQRsLCGT1NSqRW+D6EXLVQ8vuHhFznS9MuH9QYw1GfsUN30bg8hjVA== - dependencies: - "@octokit/types" "^7.5.0" - -"@octokit/plugin-request-log@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" - integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== - -"@octokit/plugin-rest-endpoint-methods@^6.0.0": - version "6.7.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.7.0.tgz#2f6f17f25b6babbc8b41d2bb0a95a8839672ce7c" - integrity sha512-orxQ0fAHA7IpYhG2flD2AygztPlGYNAdlzYz8yrD8NDgelPfOYoRPROfEyIe035PlxvbYrgkfUZIhSBKju/Cvw== - dependencies: - "@octokit/types" "^8.0.0" - deprecation "^2.3.1" - -"@octokit/request-error@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.2.tgz#f74c0f163d19463b87528efe877216c41d6deb0a" - integrity sha512-WMNOFYrSaX8zXWoJg9u/pKgWPo94JXilMLb2VManNOby9EZxrQaBe/QSC4a1TzpAlpxofg2X/jMnCyZgL6y7eg== - dependencies: - "@octokit/types" "^8.0.0" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request@^6.0.0": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.2.tgz#a2ba5ac22bddd5dcb3f539b618faa05115c5a255" - integrity sha512-6VDqgj0HMc2FUX2awIs+sM6OwLgwHvAi4KCK3mT2H2IKRt6oH9d0fej5LluF5mck1lRR/rFWN0YIDSYXYSylbw== - dependencies: - "@octokit/endpoint" "^7.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^8.0.0" - is-plain-object "^5.0.0" - node-fetch "^2.6.7" - universal-user-agent "^6.0.0" - -"@octokit/rest@19.0.4": - version "19.0.4" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.4.tgz#fd8bed1cefffa486e9ae46a9dc608ce81bcfcbdd" - integrity sha512-LwG668+6lE8zlSYOfwPj4FxWdv/qFXYBpv79TWIQEpBLKA9D/IMcWsF/U9RGpA3YqMVDiTxpgVpEW3zTFfPFTA== - dependencies: - "@octokit/core" "^4.0.0" - "@octokit/plugin-paginate-rest" "^4.0.0" - "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^6.0.0" - -"@octokit/types@^7.5.0": - version "7.5.1" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-7.5.1.tgz#4e8b182933c17e1f41cc25d44757dbdb7bd76c1b" - integrity sha512-Zk4OUMLCSpXNI8KZZn47lVLJSsgMyCimsWWQI5hyjZg7hdYm0kjotaIkbG0Pp8SfU2CofMBzonboTqvzn3FrJA== - dependencies: - "@octokit/openapi-types" "^13.11.0" - -"@octokit/types@^8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-8.0.0.tgz#93f0b865786c4153f0f6924da067fe0bb7426a9f" - integrity sha512-65/TPpOJP1i3K4lBJMnWqPUJ6zuOtzhtagDvydAWbEXpbFYA0oMKKyLb95NFZZP0lSh/4b6K+DQlzvYQJQQePg== - dependencies: - "@octokit/openapi-types" "^14.0.0" - -"@pnpm/network.ca-file@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.1.tgz#16f88d057c68cd5419c1ef3dfa281296ea80b047" - integrity sha512-gkINruT2KUhZLTaiHxwCOh1O4NVnFT0wLjWFBHmTz9vpKag/C/noIMJXBxFe4F0mYpUVX2puLwAieLYFg2NvoA== - dependencies: - graceful-fs "4.2.10" - -"@pnpm/npm-conf@^1.0.4": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-1.0.5.tgz#3475541fb71d7b6ce68acaaa3392eae9fedf3276" - integrity sha512-hD8ml183638O3R6/Txrh0L8VzGOrFXgRtRDG4qQC4tONdZ5Z1M+tlUUDUvrjYdmK6G+JTBTeaCLMna11cXzi8A== - dependencies: - "@pnpm/network.ca-file" "^1.0.1" - config-chain "^1.1.11" - -"@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@^10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-10.0.0.tgz#046470c75ec18f8b3bd906e54e43a6f678e01a45" - integrity sha512-31oUM6/rFBZQfSmDQsT1DX/5fjqfxg7sf2u8kTPJK7rXVya5SRpAMaCXsPAG0omsmJxXt+J9HxUi3Ic+5Ux5Iw== - dependencies: - joi "^17.2.1" - -"@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-community/eslint-config@^3.0.2": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@react-native-community/eslint-config/-/eslint-config-3.1.0.tgz#80f9471bae00d0676b98436bbb3a596eca2d69ab" - integrity sha512-LCN0QkMNIHoXp2B/uedxQI2GMLbupkIDKSb/6Q7e+pHp4fHrGIkmixSDR5sbjzeqNIf7a1+VcRxRp9u6qv10Ng== - dependencies: - "@babel/core" "^7.14.0" - "@babel/eslint-parser" "^7.18.2" - "@react-native-community/eslint-plugin" "^1.1.0" - "@typescript-eslint/eslint-plugin" "^5.30.5" - "@typescript-eslint/parser" "^5.30.5" - eslint-config-prettier "^8.5.0" - eslint-plugin-eslint-comments "^3.2.0" - eslint-plugin-ft-flow "^2.0.1" - eslint-plugin-jest "^26.5.3" - eslint-plugin-prettier "^4.2.1" - eslint-plugin-react "^7.30.1" - eslint-plugin-react-hooks "^4.6.0" - eslint-plugin-react-native "^4.0.0" - -"@react-native-community/eslint-plugin@^1.1.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@react-native-community/eslint-plugin/-/eslint-plugin-1.2.0.tgz#7d6d789ae8edf73dc9bed1246cd48277edea8066" - integrity sha512-o6aam+0Ug1xGK3ABYmBm0B1YuEKfM/5kaoZO0eHbZwSpw9UzDX4G5y4Nx/K20FHqUmJHkZmLvOUFYwN4N+HqKA== - -"@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== - -"@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== - -"@sindresorhus/is@^5.2.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.3.0.tgz#0ec9264cf54a527671d990eb874e030b55b70dcc" - integrity sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw== - -"@szmarczak/http-timer@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" - integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== - dependencies: - defer-to-connect "^2.0.1" - -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -"@types/http-cache-semantics@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" - integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== - -"@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/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== - -"@types/node@*": - version "18.11.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.7.tgz#8ccef136f240770c1379d50100796a6952f01f94" - integrity sha512-LhFTglglr63mNXUSRYD8A+ZAIu5sFqNJ4Y2fPuY7UlrySJH87rRRlhtVmMHplmfk5WkoJGmDjE9oiTfyX94CpQ== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/prop-types@*": - version "15.7.5" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" - integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== - -"@types/react-native@0.68.0": - version "0.68.0" - resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.68.0.tgz#d51c34057251302d2f2ba97de8ff8a840e0fddd8" - integrity sha512-E+m91xtoX+GRh2MpbIYOanbtXlX76woVgRs6zU7PsJ4ZPFzdsRkpKNTqMZyKgyt7eraZDnJvwFXGXDIW+8NRjA== - dependencies: - "@types/react" "*" - -"@types/react@*", "@types/react@17.0.21": - version "17.0.21" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.21.tgz#069c43177cd419afaab5ce26bb4e9056549f7ea6" - integrity sha512-GzzXCpOthOjXvrAUFQwU/svyxu658cwu00Q9ugujS4qc1zXgLFaO0kS2SLOaMWLt2Jik781yuHCWB7UcYdGAeQ== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/react@~17.0.21": - version "17.0.52" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.52.tgz#10d8b907b5c563ac014a541f289ae8eaa9bf2e9b" - integrity sha512-vwk8QqVODi0VaZZpDXQCmEmiOuyjEFPY7Ttaw5vjM112LOq37yz1CDJGrRJwA1fYEq4Iitd5rnjd1yWAc/bT+A== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/scheduler@*": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" - integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== - -"@types/semver@^7.3.12": - version "7.3.13" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" - integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== - -"@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" "*" - -"@typescript-eslint/eslint-plugin@^5.30.5": - version "5.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.41.0.tgz#f8eeb1c6bb2549f795f3ba71aec3b38d1ab6b1e1" - integrity sha512-DXUS22Y57/LAFSg3x7Vi6RNAuLpTXwxB9S2nIA7msBb/Zt8p7XqMwdpdc1IU7CkOQUPgAqR5fWvxuKCbneKGmA== - dependencies: - "@typescript-eslint/scope-manager" "5.41.0" - "@typescript-eslint/type-utils" "5.41.0" - "@typescript-eslint/utils" "5.41.0" - debug "^4.3.4" - ignore "^5.2.0" - regexpp "^3.2.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/parser@^5.30.5": - version "5.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.41.0.tgz#0414a6405007e463dc527b459af1f19430382d67" - integrity sha512-HQVfix4+RL5YRWZboMD1pUfFN8MpRH4laziWkkAzyO1fvNOY/uinZcvo3QiFJVS/siNHupV8E5+xSwQZrl6PZA== - dependencies: - "@typescript-eslint/scope-manager" "5.41.0" - "@typescript-eslint/types" "5.41.0" - "@typescript-eslint/typescript-estree" "5.41.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.41.0": - version "5.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.41.0.tgz#28e3a41d626288d0628be14cf9de8d49fc30fadf" - integrity sha512-xOxPJCnuktUkY2xoEZBKXO5DBCugFzjrVndKdUnyQr3+9aDWZReKq9MhaoVnbL+maVwWJu/N0SEtrtEUNb62QQ== - dependencies: - "@typescript-eslint/types" "5.41.0" - "@typescript-eslint/visitor-keys" "5.41.0" - -"@typescript-eslint/type-utils@5.41.0": - version "5.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.41.0.tgz#2371601171e9f26a4e6da918a7913f7266890cdf" - integrity sha512-L30HNvIG6A1Q0R58e4hu4h+fZqaO909UcnnPbwKiN6Rc3BUEx6ez2wgN7aC0cBfcAjZfwkzE+E2PQQ9nEuoqfA== - dependencies: - "@typescript-eslint/typescript-estree" "5.41.0" - "@typescript-eslint/utils" "5.41.0" - debug "^4.3.4" - tsutils "^3.21.0" - -"@typescript-eslint/types@5.41.0": - version "5.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.41.0.tgz#6800abebc4e6abaf24cdf220fb4ce28f4ab09a85" - integrity sha512-5BejraMXMC+2UjefDvrH0Fo/eLwZRV6859SXRg+FgbhA0R0l6lDqDGAQYhKbXhPN2ofk2kY5sgGyLNL907UXpA== - -"@typescript-eslint/typescript-estree@5.41.0": - version "5.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.41.0.tgz#bf5c6b3138adbdc73ba4871d060ae12c59366c61" - integrity sha512-SlzFYRwFSvswzDSQ/zPkIWcHv8O5y42YUskko9c4ki+fV6HATsTODUPbRbcGDFYP86gaJL5xohUEytvyNNcXWg== - dependencies: - "@typescript-eslint/types" "5.41.0" - "@typescript-eslint/visitor-keys" "5.41.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/utils@5.41.0", "@typescript-eslint/utils@^5.10.0": - version "5.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.41.0.tgz#f41ae5883994a249d00b2ce69f4188f3a23fa0f9" - integrity sha512-QlvfwaN9jaMga9EBazQ+5DDx/4sAdqDkcs05AsQHMaopluVCUyu1bTRUVKzXbgjDlrRAQrYVoi/sXJ9fmG+KLQ== - dependencies: - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.41.0" - "@typescript-eslint/types" "5.41.0" - "@typescript-eslint/typescript-estree" "5.41.0" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - semver "^7.3.7" - -"@typescript-eslint/visitor-keys@5.41.0": - version "5.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.41.0.tgz#d3510712bc07d5540160ed3c0f8f213b73e3bcd9" - integrity sha512-vilqeHj267v8uzzakbm13HkPMl7cbYpKVjgFWZPIOHIJHZtinvypUhJ5xBXfWYg4eFKqztbMMpOgFpT9Gfx4fw== - dependencies: - "@typescript-eslint/types" "5.41.0" - eslint-visitor-keys "^3.3.0" - -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" - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn@^8.7.0, acorn@^8.8.0: - version "8.8.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" - integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== - -agent-base@6, agent-base@^6.0.0, agent-base@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv@^6.10.0, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -anser@^1.4.9: - version "1.4.10" - resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.10.tgz#befa3eddf282684bd03b63dcda3927aef8c2e35b" - integrity sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww== - -ansi-align@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" - integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== - dependencies: - string-width "^4.1.0" - -ansi-escapes@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" - integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== - dependencies: - type-fest "^1.0.2" - -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-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -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" - -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -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" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - 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-includes@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" - integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - get-intrinsic "^1.1.1" - is-string "^1.0.7" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== - -array.prototype.flatmap@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz#a7e8ed4225f4788a70cd910abcf0791e76a5534f" - integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" - es-shim-unscopables "^1.0.0" - -array.prototype.map@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/array.prototype.map/-/array.prototype.map-1.0.4.tgz#0d97b640cfdd036c1b41cfe706a5e699aa0711f2" - integrity sha512-Qds9QnX7A0qISY7JT5WuJO0NJPE9CMlC6JzHQfhpqAAQQzufVRoeH7EzUY5GcPTx72voG8LV/5eo+b8Qi8hmhA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" - -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" - -ast-types@^0.13.2: - version "0.13.4" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" - integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== - 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-retry@1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" - integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== - dependencies: - retry "0.13.1" - -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== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -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-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" - -before-after-hook@^2.2.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" - integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== - -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" - -bl@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-5.1.0.tgz#183715f678c7188ecef9fe475d90209400624273" - integrity sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ== - dependencies: - buffer "^6.0.3" - inherits "^2.0.4" - readable-stream "^3.4.0" - -boxen@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-7.0.0.tgz#9e5f8c26e716793fc96edcf7cf754cdf5e3fbf32" - integrity sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg== - dependencies: - ansi-align "^3.0.1" - camelcase "^7.0.0" - chalk "^5.0.1" - cli-boxes "^3.0.0" - string-width "^5.1.2" - type-fest "^2.13.0" - widest-line "^4.0.1" - wrap-ansi "^8.0.1" - -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" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - 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.20.4, 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" - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -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== - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -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" - -cacheable-lookup@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27" - integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== - -cacheable-request@^10.2.1: - version "10.2.2" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.2.tgz#07c3d5afcaa2de2e9f66959bacb3ff78da3735fd" - integrity sha512-KxjQZM3UIo7/J6W4sLpwFvu1GB3Whv8NtZ8ZrUL284eiQjiXeeqWTdhixNrp/NLZ/JNuFBo6BD4ZaO8ZJ5BN8Q== - dependencies: - "@types/http-cache-semantics" "^4.0.1" - get-stream "^6.0.1" - http-cache-semantics "^4.1.0" - keyv "^4.5.0" - mimic-response "^4.0.0" - normalize-url "^7.2.0" - responselike "^3.0.0" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - 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== - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -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== - -camelcase@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-7.0.0.tgz#fd112621b212126741f998d614cbc2a8623fd174" - integrity sha512-JToIvOmz6nhGsUhAYScbo2d6Py5wojjNfoxoc2mEVLUdJ70gJK2gnd+ABY1Tc3sVMyK7QDPtN0T/XdlCQWITyQ== - -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@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6" - integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w== - -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" - -chalk@^5.0.0, chalk@^5.0.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.1.2.tgz#d957f370038b75ac572471e83be4c5ca9f8e8c45" - integrity sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ== - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -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" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-boxes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-3.0.0.tgz#71a10c716feeba005e4504f36329ef0b17cf3145" - integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== - -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-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" - integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== - dependencies: - restore-cursor "^4.0.0" - -cli-spinners@^2.5.0, cli-spinners@^2.6.1: - version "2.7.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" - integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== - -cli-width@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.0.0.tgz#a5622f6a3b0a9e3e711a25f099bf2399f608caf6" - integrity sha512-ZksGS2xpa/bYkNzN3BAw1wEjsLV/ZKOf/CCrJ/QOBsxx6fOARIkwTutxp1XIOIohi6HKmOFjMoK/XaqDVUpEEw== - -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" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.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.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colorette@^1.0.7: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" - integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -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== - -config-chain@^1.1.11: - version "1.1.13" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" - integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -configstore@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-6.0.0.tgz#49eca2ebc80983f77e09394a1a56e0aca8235566" - integrity sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA== - dependencies: - dot-prop "^6.0.1" - graceful-fs "^4.2.6" - unique-string "^3.0.0" - write-file-atomic "^3.0.3" - xdg-basedir "^5.0.1" - -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@7.0.1, cosmiconfig@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" - integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -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" - -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-random-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-4.0.0.tgz#5a3cc53d7dd86183df5da0312816ceeeb5bb1fc2" - integrity sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA== - dependencies: - type-fest "^1.0.1" - -csstype@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" - integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== - -data-uri-to-buffer@3: - version "3.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" - integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== - -data-uri-to-buffer@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz#b5db46aea50f6176428ac05b73be39a57701a64b" - integrity sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA== - -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, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: - 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== - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@^0.1.3, deep-is@~0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -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" - -defer-to-connect@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -define-properties@^1.1.3, define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -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" - -degenerator@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-3.0.2.tgz#6a61fcc42a702d6e50ff6023fe17bff435f68235" - integrity sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ== - dependencies: - ast-types "^0.13.2" - escodegen "^1.8.1" - esprima "^4.0.0" - vm2 "^3.9.8" - -del@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" - integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== - dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" - rimraf "^3.0.2" - slash "^3.0.0" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -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== - -deprecation@^2.0.0, deprecation@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" - integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dot-prop@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" - integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== - dependencies: - is-obj "^2.0.0" - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -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== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -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" - -es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5: - version "1.20.4" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861" - integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.1.3" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-weakref "^1.0.2" - object-inspect "^1.12.2" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" - safe-regex-test "^1.0.0" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" - unbox-primitive "^1.0.2" - -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== - -es-get-iterator@^1.0.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.2.tgz#9234c54aba713486d7ebde0220864af5e2b283f7" - integrity sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.0" - has-symbols "^1.0.1" - is-arguments "^1.1.0" - is-map "^2.0.2" - is-set "^2.0.2" - is-string "^1.0.5" - isarray "^2.0.5" - -es-shim-unscopables@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== - dependencies: - has "^1.0.3" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -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-goat@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-4.0.0.tgz#9424820331b510b0666b98f7873fe11ac4aa8081" - integrity sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg== - -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== - -escape-string-regexp@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" - integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== - -escodegen@^1.8.1: - version "1.14.3" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== - dependencies: - esprima "^4.0.1" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-config-prettier@^8.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" - integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== - -eslint-plugin-eslint-comments@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz#9e1cd7b4413526abb313933071d7aba05ca12ffa" - integrity sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ== - dependencies: - escape-string-regexp "^1.0.5" - ignore "^5.0.5" - -eslint-plugin-ft-flow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-ft-flow/-/eslint-plugin-ft-flow-2.0.1.tgz#57d9a12ef02b7af8f9bd6ccd6bd8fa4034809716" - integrity sha512-dGBnCo+ok6H9p6Vw2oPFEM4vA9IEclRXQQAA/Zws51/L5zr3FDl9FxQiWGfaw0WaTIX5biiAxp/q1W5bGXjlVA== - dependencies: - lodash "^4.17.21" - string-natural-compare "^3.0.1" - -eslint-plugin-jest@^26.5.3: - version "26.9.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-26.9.0.tgz#7931c31000b1c19e57dbfb71bbf71b817d1bf949" - integrity sha512-TWJxWGp1J628gxh2KhaH1H1paEdgE2J61BBF1I59c6xWeL5+D1BzMxGDN/nXAfX+aSkR5u80K+XhskK6Gwq9ng== - dependencies: - "@typescript-eslint/utils" "^5.10.0" - -eslint-plugin-prettier@^4.0.0, eslint-plugin-prettier@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" - integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== - dependencies: - prettier-linter-helpers "^1.0.0" - -eslint-plugin-react-hooks@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" - integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== - -eslint-plugin-react-native-globals@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz#ee1348bc2ceb912303ce6bdbd22e2f045ea86ea2" - integrity sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g== - -eslint-plugin-react-native@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-native/-/eslint-plugin-react-native-4.0.0.tgz#eec41984abe4970bdd7c6082dff7a98a5e34d0bb" - integrity sha512-kMmdxrSY7A1WgdqaGC+rY/28rh7kBGNBRsk48ovqkQmdg5j4K+DaFmegENDzMrdLkoufKGRNkKX6bgSwQTCAxQ== - dependencies: - "@babel/traverse" "^7.7.4" - eslint-plugin-react-native-globals "^0.1.1" - -eslint-plugin-react@^7.30.1: - version "7.31.10" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz#6782c2c7fe91c09e715d536067644bbb9491419a" - integrity sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA== - dependencies: - array-includes "^3.1.5" - array.prototype.flatmap "^1.3.0" - doctrine "^2.1.0" - estraverse "^5.3.0" - jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.1.2" - object.entries "^1.1.5" - object.fromentries "^2.0.5" - object.hasown "^1.1.1" - object.values "^1.1.5" - prop-types "^15.8.1" - resolve "^2.0.0-next.3" - semver "^6.3.0" - string.prototype.matchall "^4.0.7" - -eslint-scope@5.1.1, eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== - -eslint@^8.4.1: - version "8.26.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.26.0.tgz#2bcc8836e6c424c4ac26a5674a70d44d84f2181d" - integrity sha512-kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg== - dependencies: - "@eslint/eslintrc" "^1.3.3" - "@humanwhocodes/config-array" "^0.11.6" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.15.0" - grapheme-splitter "^1.0.4" - ignore "^5.2.0" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-sdsl "^4.1.4" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - -espree@^9.4.0: - version "9.4.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.0.tgz#cd4bc3d6e9336c433265fc0aa016fc1aaf182f8a" - integrity sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw== - dependencies: - acorn "^8.8.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" - -esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1, estraverse@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -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@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-6.1.0.tgz#cea16dee211ff011246556388effa0818394fb20" - integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.1" - human-signals "^3.0.1" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^3.0.7" - strip-final-newline "^3.0.0" - -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" - -execa@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -execa@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.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" - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -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.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== - -fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - -fast-glob@^3.2.11, fast-glob@^3.2.9: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== - dependencies: - reusify "^1.0.4" - -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== - dependencies: - bser "2.1.1" - -fetch-blob@^3.1.2, fetch-blob@^3.1.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" - integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== - dependencies: - node-domexception "^1.0.0" - web-streams-polyfill "^3.0.3" - -figures@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-5.0.0.tgz#126cd055052dea699f8a54e8c9450e6ecfc44d5f" - integrity sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg== - dependencies: - escape-string-regexp "^5.0.0" - is-unicode-supported "^1.2.0" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -file-uri-to-path@2: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba" - integrity sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg== - -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" - -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-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" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flatted@^3.1.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== - -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== - -form-data-encoder@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.3.tgz#682cd821a8423605093992ff895e6b2ed5a9d429" - integrity sha512-KqU0nnPMgIJcCOFTNJFEA8epcseEaoox4XZffTgy8jlI6pL/5EFyR54NRG7CnCJN0biY7q52DO3MH6/sJ/TKlQ== - -form-data@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -formdata-polyfill@^4.0.10: - version "4.0.10" - resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" - integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== - dependencies: - fetch-blob "^3.1.2" - -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@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.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== - -ftp@^0.3.10: - version "0.3.10" - resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" - integrity sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ== - dependencies: - readable-stream "1.1.x" - xregexp "2.0.0" - -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== - -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" - -functions-have-names@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -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, get-caller-file@^2.0.5: - 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-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - -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-stream@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-stream@^6.0.0, get-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -get-uri@3: - version "3.0.2" - resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-3.0.2.tgz#f0ef1356faabc70e1f9404fa3b66b2ba9bfc725c" - integrity sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg== - dependencies: - "@tootallnate/once" "1" - data-uri-to-buffer "3" - debug "4" - file-uri-to-path "2" - fs-extra "^8.1.0" - ftp "^0.3.10" - -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== - -git-up@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467" - integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ== - dependencies: - is-ssh "^1.4.0" - parse-url "^8.1.0" - -git-url-parse@13.1.0: - version "13.1.0" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-13.1.0.tgz#07e136b5baa08d59fabdf0e33170de425adf07b4" - integrity sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA== - dependencies: - git-up "^7.0.0" - -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob@^7.0.0, glob@^7.1.3: - 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" - -glob@^8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -global-dirs@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" - integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== - dependencies: - ini "2.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== - -globals@^13.15.0: - version "13.17.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" - integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== - dependencies: - type-fest "^0.20.2" - -globby@13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.2.tgz#29047105582427ab6eca4f905200667b056da515" - integrity sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.2.11" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^4.0.0" - -globby@^11.0.1, globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -got@12.5.1: - version "12.5.1" - resolved "https://registry.yarnpkg.com/got/-/got-12.5.1.tgz#0796191c61478273f4cdbeb19d358a75a54a008d" - integrity sha512-sD16AK8cCyUoPtKr/NMvLTFFa+T3i3S+zoiuvhq0HP2YiqBZA9AtlBjAdsQBsLBK7slPuvmfE0OxhGi7N5dD4w== - dependencies: - "@sindresorhus/is" "^5.2.0" - "@szmarczak/http-timer" "^5.0.1" - cacheable-lookup "^7.0.0" - cacheable-request "^10.2.1" - decompress-response "^6.0.0" - form-data-encoder "^2.1.2" - get-stream "^6.0.1" - http2-wrapper "^2.1.10" - lowercase-keys "^3.0.0" - p-cancelable "^3.0.0" - responselike "^3.0.0" - -got@^12.1.0: - version "12.5.2" - resolved "https://registry.yarnpkg.com/got/-/got-12.5.2.tgz#2c1b390918961cf50e61cb02d2085ba203d0df45" - integrity sha512-guHGMSEcsA5m1oPRweXUJnug0vuvlkX9wx5hzOka+ZBrBUOJHU0Z1JcNu3QE5IPGnA5aXUsQHdWOD4eJg9/v3A== - dependencies: - "@sindresorhus/is" "^5.2.0" - "@szmarczak/http-timer" "^5.0.1" - cacheable-lookup "^7.0.0" - cacheable-request "^10.2.1" - decompress-response "^6.0.0" - form-data-encoder "^2.1.2" - get-stream "^6.0.1" - http2-wrapper "^2.1.10" - lowercase-keys "^3.0.0" - p-cancelable "^3.0.0" - responselike "^3.0.0" - -graceful-fs@4.2.10, 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.6, 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== - -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -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-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - 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-yarn@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-3.0.0.tgz#c3c21e559730d1d3b57e28af1f30d06fac38147d" - integrity sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA== - -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-cache-semantics@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -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" - -http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -http2-wrapper@^2.1.10: - version "2.1.11" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.1.11.tgz#d7c980c7ffb85be3859b6a96c800b2951ae257ef" - integrity sha512-aNAk5JzLturWEUiuhAN73Jcbq96R7rTitAoXV54FYMatvihnpD2+6PUgU4ce3D/m5VDbw+F5CsyKSF176ptitQ== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.2.0" - -https-proxy-agent@5, https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -human-signals@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-3.0.1.tgz#c740920859dafa50e5a3222da9d3bf4bb0e5eef5" - integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== - -iconv-lite@0.4.24, iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ieee754@^1.1.13, ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^5.0.5, ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== - -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" - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-lazy@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" - integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -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.1, 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== - -ini@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" - integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== - -ini@^1.3.4, ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -inquirer@9.1.2: - version "9.1.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-9.1.2.tgz#37f5486f3de0e38820aad83a1f75c52c747e2f9a" - integrity sha512-Hj2Ml1WpxKJU2npP2Rj0OURGkHV+GtNW2CwFdHDiXlqUBAUrWTcZHxCkFywX/XHzOS7wrG/kExgJFbUkVgyHzg== - dependencies: - ansi-escapes "^5.0.0" - chalk "^5.0.1" - cli-cursor "^4.0.0" - cli-width "^4.0.0" - external-editor "^3.0.3" - figures "^5.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^6.1.2" - run-async "^2.4.0" - rxjs "^7.5.6" - string-width "^5.1.2" - strip-ansi "^7.0.1" - through "^2.3.6" - wrap-ansi "^8.0.1" - -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - -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== - -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== - -is-absolute@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" - integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== - dependencies: - is-relative "^1.0.0" - is-windows "^1.0.1" - -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-arguments@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.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-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-ci@3.0.1, is-ci@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" - integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== - dependencies: - ci-info "^3.2.0" - -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-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.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-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -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-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -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-git-dirty@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-git-dirty/-/is-git-dirty-2.0.1.tgz#29ca82fb0924ccbeaa0bae08de217546df593012" - integrity sha512-zn3CNLDbSR+y7+VDDw7/SwTRRuECn4OpAyelo5MDN+gVxdzM8SUDd51ZwPIOxhljED44Riu0jiiNtC8w0bcLdA== - dependencies: - execa "^4.0.3" - is-git-repository "^2.0.0" - -is-git-repository@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-git-repository/-/is-git-repository-2.0.0.tgz#fa036007fe9697198c2c89dac4dd8304a6101e1c" - integrity sha512-HDO50CG5suIAcmqG4F1buqVXEZRPn+RaXIn9pFKq/947FBo2bCRwK7ZluEVZOy99a4IQyqsjbKEpAiOXCccOHQ== - dependencies: - execa "^4.0.3" - is-absolute "^1.0.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-installed-globally@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" - integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== - dependencies: - global-dirs "^3.0.0" - is-path-inside "^3.0.2" - -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-interactive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90" - integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== - -is-map@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-npm@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-6.0.0.tgz#b59e75e8915543ca5d881ecff864077cba095261" - integrity sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - 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-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-inside@^3.0.2, is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -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-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-relative@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" - integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== - dependencies: - is-unc-path "^1.0.0" - -is-set@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-ssh@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" - integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== - dependencies: - protocols "^2.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-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -is-unc-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" - integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== - dependencies: - unc-path-regex "^0.1.2" - -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-unicode-supported@^1.1.0, is-unicode-supported@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" - integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-windows@^1.0.1, 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== - -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -is-yarn-global@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.4.0.tgz#714d94453327db9ea98fbf1a0c5f2b88f59ddd5c" - integrity sha512-HneQBCrXGBy15QnaDfcn6OLoU8AQPAa0Qn0IeJR/QCo4E8dNZaGGwxpCwWyEBQC5QvFonP8d6t60iGpAHVAfNA== - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - -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== - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -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== - -iterate-iterator@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/iterate-iterator/-/iterate-iterator-1.0.2.tgz#551b804c9eaa15b847ea6a7cdc2f5bf1ec150f91" - integrity sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw== - -iterate-value@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/iterate-value/-/iterate-value-1.0.2.tgz#935115bd37d006a52046535ebc8d07e9c9337f57" - integrity sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ== - dependencies: - es-get-iterator "^1.0.2" - iterate-iterator "^1.0.1" - -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" - -jetifier@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/jetifier/-/jetifier-2.0.0.tgz#699391367ca1fe7bc4da5f8bf691eb117758e4cb" - integrity sha512-J4Au9KuT74te+PCCCHKgAjyLlEa+2VyIAEPNCdE5aNkAJ6FAJcAqcdzEkSnzNksIa9NkGmC4tPiClk2e7tCJuQ== - -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-sdsl@^4.1.4: - version "4.1.5" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.1.5.tgz#1ff1645e6b4d1b028cd3f862db88c9d887f26e2a" - integrity sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q== - -"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" - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsc-android@^250230.2.1: - version "250230.2.1" - resolved "https://registry.yarnpkg.com/jsc-android/-/jsc-android-250230.2.1.tgz#3790313a970586a03ab0ad47defbc84df54f1b83" - 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-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -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== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -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" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -"jsx-ast-utils@^2.4.1 || ^3.0.0": - version "3.3.3" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" - integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== - dependencies: - array-includes "^3.1.5" - object.assign "^4.1.3" - -keyv@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.0.tgz#dbce9ade79610b6e641a9a65f2f6499ba06b9bc6" - integrity sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA== - dependencies: - json-buffer "3.0.1" - -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== - -kleur@^4.1.4: - version "4.1.5" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" - integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== - -latest-version@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-7.0.0.tgz#843201591ea81a4d404932eeb61240fe04e9e5da" - integrity sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg== - dependencies: - package-json "^8.1.0" - -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== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -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.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.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== - -lodash@4.17.21, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -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" - -log-symbols@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-5.1.0.tgz#a20e3b9a5f53fac6aeb8e2bb22c07cf2c8f16d93" - integrity sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA== - dependencies: - chalk "^5.0.0" - is-unicode-supported "^1.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, loose-envify@^1.4.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" - -lowercase-keys@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" - integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -macos-release@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-3.1.0.tgz#6165bb0736ae567ed6649e36ce6a24d87cbb7aca" - integrity sha512-/M/R0gCDgM+Cv1IuBG1XGdfTFnMEG6PZeT+KGWHO/OG+imqmaD9CH5vHBTycEM3+Kc4uG2Il+tFAuUWLqQOeUA== - -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== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -metro-babel-transformer@0.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.35, mime-types@^2.1.12, 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== - -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -mimic-response@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-4.0.0.tgz#35468b19e7c75d10f5165ea25e75a5ceea7cf70f" - integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== - -minimatch@^3.0.2, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" - integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.2.0, 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== - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -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" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -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== - -netmask@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" - integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== - -new-github-release-url@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/new-github-release-url/-/new-github-release-url-2.0.0.tgz#335189b91f52bbb9569042a7485900a205a0500b" - integrity sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ== - dependencies: - type-fest "^2.5.1" - -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-domexception@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" - integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== - -node-fetch@3.2.10: - version "3.2.10" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.2.10.tgz#e8347f94b54ae18b57c9c049ef641cef398a85c8" - integrity sha512-MhuzNwdURnZ1Cp4XTazr69K0BTizsBroX7Zx3UgDSVcZYKF/6p0CBe4EUb/hLqmzVhl0UpYfgRljQ4yxE+iCxA== - dependencies: - data-uri-to-buffer "^4.0.0" - fetch-blob "^3.1.4" - formdata-polyfill "^4.0.10" - -node-fetch@^2.2.0, node-fetch@^2.6.0, node-fetch@^2.6.7: - 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== - -normalize-url@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-7.2.0.tgz#5317f78cff95f5fa1e76cc0b5e33245c43781e11" - integrity sha512-uhXOdZry0L6M2UIo9BTt7FdpBDiAGN/7oItedQwPKh8jh31ZlvC8U9Xl/EJ3aijDHaywXTW3QbZ6LuCocur1YA== - -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" - -npm-run-path@^4.0.0, npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npm-run-path@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" - integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== - dependencies: - path-key "^4.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-inspect@^1.12.2, object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -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.assign@^4.1.3, object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.entries@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" - integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -object.fromentries@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251" - integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -object.hasown@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.1.tgz#ad1eecc60d03f49460600430d97f23882cf592a3" - integrity sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A== - dependencies: - define-properties "^1.1.4" - es-abstract "^1.19.5" - -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" - -object.values@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" - integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -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, onetime@^5.1.2: - 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" - -onetime@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" - integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - dependencies: - mimic-fn "^4.0.0" - -open@8.4.0: - version "8.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" - integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.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" - -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -ora@6.1.2, ora@^6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/ora/-/ora-6.1.2.tgz#7b3c1356b42fd90fb1dad043d5dbe649388a0bf5" - integrity sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw== - dependencies: - bl "^5.0.0" - chalk "^5.0.0" - cli-cursor "^4.0.0" - cli-spinners "^2.6.1" - is-interactive "^2.0.0" - is-unicode-supported "^1.1.0" - log-symbols "^5.1.0" - strip-ansi "^7.0.1" - wcwidth "^1.0.1" - -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -os-name@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/os-name/-/os-name-5.0.1.tgz#acb4f996ec5bd86c41755fef9d6d31905c47172e" - integrity sha512-0EQpaHUHq7olp2/YFUr+0vZi9tMpDTblHGz+Ch5RntKxiRXOAY0JOz1UlxhSjMSksHvkm13eD6elJj3M8Ht/kw== - dependencies: - macos-release "^3.0.1" - windows-release "^5.0.1" - -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -p-cancelable@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" - integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== - -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-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -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== - -pac-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz#b718f76475a6a5415c2efbe256c1c971c84f635e" - integrity sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - get-uri "3" - http-proxy-agent "^4.0.1" - https-proxy-agent "5" - pac-resolver "^5.0.0" - raw-body "^2.2.0" - socks-proxy-agent "5" - -pac-resolver@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-5.0.1.tgz#c91efa3a9af9f669104fa2f51102839d01cde8e7" - integrity sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q== - dependencies: - degenerator "^3.0.2" - ip "^1.1.5" - netmask "^2.0.2" - -package-json@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-8.1.0.tgz#2a22806f1ed7c786c8e6ff26cfe20003bf4c6850" - integrity sha512-hySwcV8RAWeAfPsXb9/HGSPn8lwDnv6fabH+obUZKX169QknRkRhPxd1yMubpKDskLFATkl3jHpNtVtDPFA0Wg== - dependencies: - got "^12.1.0" - registry-auth-token "^5.0.1" - registry-url "^6.0.0" - semver "^7.3.7" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -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" - -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse-path@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.0.0.tgz#605a2d58d0a749c8594405d8cc3a2bf76d16099b" - integrity sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog== - dependencies: - protocols "^2.0.0" - -parse-url@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" - integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w== - dependencies: - parse-path "^7.0.0" - -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-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-key@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" - integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== - -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== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - 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" - -pod-install@^0.1.0: - version "0.1.38" - resolved "https://registry.yarnpkg.com/pod-install/-/pod-install-0.1.38.tgz#1c16a800a5fc1abea0cafcc0e190f376368c76ab" - integrity sha512-NeDWGigjJRriOIKBOvpW2/tK2tYLfyUT7ia6C6L+oarCAhBNP+IGODWdU+GEAqvfsseqOApcFclpXAJTL0UPzA== - -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== - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@^2.0.5: - version "2.7.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" - integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== - -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.allsettled@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.5.tgz#2443f3d4b2aa8dfa560f6ac2aa6c4ea999d75f53" - integrity sha512-tVDqeZPoBC0SlzJHzWGZ2NKAguVq2oiYj7gbggbiTvH2itHohijTp7njOUA0aQ/nl+0lr/r6egmhoYu63UZ/pQ== - dependencies: - array.prototype.map "^1.0.4" - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - get-intrinsic "^1.1.1" - iterate-value "^1.0.2" - -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, prompts@^2.4.2: - 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" - -prop-types@^15.8.1: - version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== - -protocols@^2.0.0, protocols@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" - integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== - -proxy-agent@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-5.0.0.tgz#d31405c10d6e8431fde96cba7a0c027ce01d633b" - integrity sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g== - dependencies: - agent-base "^6.0.0" - debug "4" - http-proxy-agent "^4.0.0" - https-proxy-agent "^5.0.0" - lru-cache "^5.1.1" - pac-proxy-agent "^5.0.0" - proxy-from-env "^1.0.0" - socks-proxy-agent "^5.0.0" - -proxy-from-env@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -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" - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -pupa@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-3.1.0.tgz#f15610274376bbcc70c9a3aa8b505ea23f41c579" - integrity sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug== - dependencies: - escape-goat "^4.0.0" - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -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== - -raw-body@^2.2.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -rc@1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -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-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.1: - 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-builder-bob@^0.20.0: - version "0.20.0" - resolved "https://registry.yarnpkg.com/react-native-builder-bob/-/react-native-builder-bob-0.20.0.tgz#f6ea6ba6baae59ebe30d5ed5d384b7e728fd68c5" - integrity sha512-PvH1ekERU6x+OOOrcLggG3AMpV1I+gM5lOb4dGuxLKh7iQCWQT+BvYBoX9X1tDKj0DKsqPRn1dl4/hMIpk7r8w== - dependencies: - "@babel/core" "^7.18.5" - "@babel/plugin-proposal-class-properties" "^7.17.12" - "@babel/preset-env" "^7.18.2" - "@babel/preset-flow" "^7.17.12" - "@babel/preset-react" "^7.17.12" - "@babel/preset-typescript" "^7.17.12" - browserslist "^4.20.4" - cosmiconfig "^7.0.1" - cross-spawn "^7.0.3" - dedent "^0.7.0" - del "^6.1.1" - fs-extra "^10.1.0" - glob "^8.0.3" - is-git-dirty "^2.0.1" - json5 "^2.2.1" - kleur "^4.1.4" - prompts "^2.4.2" - which "^2.0.2" - yargs "^17.5.1" - optionalDependencies: - jetifier "^2.0.0" - -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@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@1.1.x: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -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" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== - dependencies: - resolve "^1.1.6" - -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== - -regenerator-transform@^0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537" - integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== - dependencies: - "@babel/runtime" "^7.8.4" - -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" - -regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" - -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -regexpu-core@^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" - -registry-auth-token@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.0.1.tgz#5e6cd106e6c251135a046650c58476fc03e92833" - integrity sha512-UfxVOj8seK1yaIOiieV4FIP01vfBDLsY0H9sQzi9EbbUdJiuuBjJgLa1DpImXMNPnVkBD4eVxTEXcrZA6kfpJA== - dependencies: - "@pnpm/npm-conf" "^1.0.4" - -registry-url@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-6.0.1.tgz#056d9343680f2f64400032b1e199faa692286c58" - integrity sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q== - dependencies: - rc "1.2.8" - -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" - -release-it@^15.0.0: - version "15.5.0" - resolved "https://registry.yarnpkg.com/release-it/-/release-it-15.5.0.tgz#773c247d4fd5a5e5c8801b02bf1e7e9e536bee27" - integrity sha512-/pQo/PwEXAWRBgVGLE+3IQ3hUoeiDZMGAo/Egin1envCyLyjzrU7+0P2w4iZ1Xv5OxhC2AcaPaN5eY1ql47cBA== - dependencies: - "@iarna/toml" "2.2.5" - "@octokit/rest" "19.0.4" - async-retry "1.3.3" - chalk "5.0.1" - cosmiconfig "7.0.1" - execa "6.1.0" - form-data "4.0.0" - git-url-parse "13.1.0" - globby "13.1.2" - got "12.5.1" - inquirer "9.1.2" - is-ci "3.0.1" - lodash "4.17.21" - mime-types "2.1.35" - new-github-release-url "2.0.0" - node-fetch "3.2.10" - open "8.4.0" - ora "6.1.2" - os-name "5.0.1" - promise.allsettled "1.0.5" - proxy-agent "5.0.0" - semver "7.3.7" - shelljs "0.8.5" - update-notifier "6.0.2" - url-join "5.0.0" - wildcard-match "5.1.2" - yargs-parser "21.1.1" - -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== - -resolve-alpn@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - -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-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -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.1.6, 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" - -resolve@^2.0.0-next.3: - version "2.0.0-next.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" - integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -responselike@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-3.0.0.tgz#20decb6c298aff0dbee1c355ca95461d42823626" - integrity sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg== - dependencies: - lowercase-keys "^3.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" - -restore-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" - integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== - 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== - -retry@0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" - integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^2.5.4: - 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@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - 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" - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^7.5.6: - version "7.5.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.7.tgz#2ec0d57fdc89ece220d2e702730ae8f1e49def39" - integrity sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA== - dependencies: - tslib "^2.1.0" - -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-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" - -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" - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -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-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-4.0.0.tgz#3afcf5ed6d62259f5c72d0d5d50dffbdc9680df5" - integrity sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA== - dependencies: - semver "^7.3.5" - -semver@7.3.7: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.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== - -semver@^7.3.5, semver@^7.3.7: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" - -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-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.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== - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.6.1, 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== - -shelljs@0.8.5: - version "0.8.5" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" - integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: - 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== - -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== - -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - -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" - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -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" - -socks-proxy-agent@5, socks-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz#032fb583048a29ebffec2e6a73fca0761f48177e" - integrity sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ== - dependencies: - agent-base "^6.0.2" - debug "4" - socks "^2.3.3" - -socks@^2.3.3: - version "2.7.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" - integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== - dependencies: - ip "^2.0.0" - smart-buffer "^4.2.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-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== - -string-natural-compare@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" - integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - 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-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string.prototype.matchall@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" - integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - get-intrinsic "^1.1.1" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.1" - side-channel "^1.0.4" - -string.prototype.trimend@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" - integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - -string.prototype.trimstart@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" - integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - -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@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== - -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-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== - dependencies: - ansi-regex "^6.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== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-final-newline@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" - integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== - -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -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" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -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" - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - 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@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.1, tslib@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== - dependencies: - prelude-ls "~1.1.2" - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.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== - -type-fest@^1.0.1, type-fest@^1.0.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" - integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== - -type-fest@^2.13.0, type-fest@^2.5.1: - version "2.19.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" - integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typescript@^4.5.2: - version "4.8.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6" - integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== - -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" - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -unc-path-regex@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" - integrity sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg== - -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" - -unique-string@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-3.0.0.tgz#84a1c377aff5fd7a8bc6b55d8244b2bd90d75b9a" - integrity sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ== - dependencies: - crypto-random-string "^4.0.0" - -universal-user-agent@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== - -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== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unpipe@1.0.0, 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" - -update-notifier@6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-6.0.2.tgz#a6990253dfe6d5a02bd04fbb6a61543f55026b60" - integrity sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og== - dependencies: - boxen "^7.0.0" - chalk "^5.0.1" - configstore "^6.0.0" - has-yarn "^3.0.0" - import-lazy "^4.0.0" - is-ci "^3.0.1" - is-installed-globally "^0.4.0" - is-npm "^6.0.0" - is-yarn-global "^0.4.0" - latest-version "^7.0.0" - pupa "^3.1.0" - semver "^7.3.7" - semver-diff "^4.0.0" - xdg-basedir "^5.1.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.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== - -url-join@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-5.0.0.tgz#c2f1e5cbd95fa91082a93b58a1f42fecb4bdbcf1" - integrity sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA== - -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== - -vm2@^3.9.8: - version "3.9.11" - resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.9.11.tgz#a880f510a606481719ec3f9803b940c5805a06fe" - integrity sha512-PFG8iJRSjvvBdisowQ7iVF580DXb1uCIiGaXgm7tynMR1uTBlv7UJlB1zdv5KJ+Tmq1f0Upnj3fayoEOPpCBKg== - dependencies: - acorn "^8.7.0" - acorn-walk "^8.2.0" - -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" - -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" - -web-streams-polyfill@^3.0.3: - version "3.2.1" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" - integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== - -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-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - 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" - -which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -widest-line@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-4.0.1.tgz#a0fc673aaba1ea6f0a0d35b3c2795c9a9cc2ebf2" - integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig== - dependencies: - string-width "^5.0.1" - -wildcard-match@5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/wildcard-match/-/wildcard-match-5.1.2.tgz#66b438001391674d8599b45da051e0bd9f33cd2a" - integrity sha512-qNXwI591Z88c8bWxp+yjV60Ch4F8Riawe3iGxbzquhy8Xs9m+0+SLFBGb/0yCTIDElawtaImC37fYZ+dr32KqQ== - -windows-release@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-5.0.1.tgz#d1f7cd1f25660ba05cac6359711844dce909a8ed" - integrity sha512-y1xFdFvdMiDXI3xiOhMbJwt1Y7dUxidha0CWPs1NgjZIjZANTcX7+7bMqNjuezhzb8s5JGEiBAbQjQQYYy7ulw== - dependencies: - execa "^5.1.1" - -word-wrap@^1.2.3, word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -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" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.0.1.tgz#2101e861777fec527d0ea90c57c6b03aac56a5b3" - integrity sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - -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" - -write-file-atomic@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -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== - -xdg-basedir@^5.0.1, xdg-basedir@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-5.1.0.tgz#1efba19425e73be1bc6f2a6ceb52a3d2c884c0c9" - integrity sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ== - -xregexp@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" - integrity sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA== - -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== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@21.1.1, yargs-parser@^21.0.0: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -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" - -yargs@^17.5.1: - version "17.6.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.0.tgz#e134900fc1f218bc230192bdec06a0a5f973e46c" - integrity sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.0.0" - -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==