() {
- 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 = "